From 427216e5b35eb270f6bf2f893ff2843b0fa1d600 Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:29:05 +0800 Subject: [PATCH 01/24] feat(mobile): add native direct client foundation --- .github/workflows/mobile-release.yml | 90 + .github/workflows/test.yml | 90 + .gitignore | 7 + README.md | 20 + docs/design/mobile-prototype/brand-spec.md | 30 + .../codeg-mobile-android-preview.png | Bin 0 -> 75544 bytes .../codeg-mobile-ios-preview.png | Bin 0 -> 75113 bytes .../mobile-prototype/codeg-mobile-preview.png | Bin 0 -> 718039 bytes .../codeg-mobile-prototype-preview.png | Bin 0 -> 270618 bytes .../codeg-mobile-prototype.html | 192 + docs/design/mobile-prototype/codeg-mobile.css | 51 + docs/design/mobile-prototype/codeg-mobile.js | 39 + docs/design/mobile-prototype/critique.json | 26 + .../mobile-prototype/mobile-android.html | 14 + docs/design/mobile-prototype/mobile-ios.html | 14 + docs/mobile-stability-port.md | 22 + docs/plans/codeg-mobile.plan | 289 + docs/relay/protocol-v1.md | 141 + docs/relay/threat-model.md | 53 + eslint.config.mjs | 5 + mobile/README.md | 71 + mobile/package.json | 12 + mobile/plugins/.gitignore | 17 + mobile/plugins/Cargo.toml | 17 + mobile/plugins/README.md | 1 + mobile/plugins/android/.gitignore | 2 + mobile/plugins/android/build.gradle.kts | 44 + mobile/plugins/android/consumer-rules.pro | 2 + mobile/plugins/android/proguard-rules.pro | 21 + mobile/plugins/android/settings.gradle | 31 + .../java/ExampleInstrumentedTest.kt | 24 + .../android/src/main/AndroidManifest.xml | 3 + .../android/src/main/java/ExamplePlugin.kt | 113 + .../android/src/test/java/ExampleUnitTest.kt | 17 + mobile/plugins/build.rs | 8 + mobile/plugins/guest-js/index.ts | 19 + mobile/plugins/ios/.gitignore | 10 + mobile/plugins/ios/Package.swift | 32 + mobile/plugins/ios/README.md | 3 + .../plugins/ios/Sources/ExamplePlugin.swift | 79 + .../ios/Tests/PluginTests/PluginTests.swift | 8 + mobile/plugins/package.json | 33 + .../autogenerated/commands/delete_secret.toml | 13 + .../autogenerated/commands/load_secret.toml | 13 + .../autogenerated/commands/store_secret.toml | 13 + .../permissions/autogenerated/reference.md | 97 + mobile/plugins/permissions/default.toml | 3 + .../plugins/permissions/schemas/schema.json | 342 ++ mobile/plugins/rollup.config.js | 31 + mobile/plugins/src/commands.rs | 29 + mobile/plugins/src/desktop.rs | 28 + mobile/plugins/src/error.rs | 21 + mobile/plugins/src/lib.rs | 52 + mobile/plugins/src/mobile.rs | 48 + mobile/plugins/src/models.rs | 20 + mobile/plugins/tsconfig.json | 14 + mobile/src-tauri/Cargo.lock | 4889 +++++++++++++++++ mobile/src-tauri/Cargo.toml | 23 + mobile/src-tauri/build.rs | 3 + mobile/src-tauri/capabilities/mobile.json | 8 + mobile/src-tauri/gen/android/.editorconfig | 12 + mobile/src-tauri/gen/android/.gitignore | 22 + mobile/src-tauri/gen/android/app/.gitignore | 6 + .../gen/android/app/build.gradle.kts | 97 + .../gen/android/app/proguard-rules.pro | 21 + .../android/app/src/main/AndroidManifest.xml | 37 + .../cn/crain/codeg/mobile/MainActivity.kt | 11 + .../drawable-v24/ic_launcher_foreground.xml | 30 + .../res/drawable/ic_launcher_background.xml | 170 + .../app/src/main/res/layout/activity_main.xml | 18 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3524 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 14102 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3524 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3377 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 9081 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3377 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7971 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 18900 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7971 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12392 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 29506 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 12392 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16751 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 40510 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16751 bytes .../app/src/main/res/values-night/themes.xml | 6 + .../app/src/main/res/values/colors.xml | 10 + .../app/src/main/res/values/strings.xml | 4 + .../app/src/main/res/values/themes.xml | 6 + .../app/src/main/res/xml/file_paths.xml | 5 + mobile/src-tauri/gen/android/build.gradle.kts | 22 + .../gen/android/buildSrc/build.gradle.kts | 23 + .../cn/crain/codeg/mobile/kotlin/BuildTask.kt | 68 + .../crain/codeg/mobile/kotlin/RustPlugin.kt | 85 + .../src-tauri/gen/android/gradle.properties | 24 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + mobile/src-tauri/gen/android/gradlew | 185 + mobile/src-tauri/gen/android/gradlew.bat | 89 + mobile/src-tauri/gen/android/settings.gradle | 3 + mobile/src-tauri/gen/apple/.gitignore | 3 + .../AppIcon.appiconset/AppIcon-20x20@1x.png | Bin 0 -> 1036 bytes .../AppIcon.appiconset/AppIcon-20x20@2x-1.png | Bin 0 -> 2216 bytes .../AppIcon.appiconset/AppIcon-20x20@2x.png | Bin 0 -> 2216 bytes .../AppIcon.appiconset/AppIcon-20x20@3x.png | Bin 0 -> 3512 bytes .../AppIcon.appiconset/AppIcon-29x29@1x.png | Bin 0 -> 1568 bytes .../AppIcon.appiconset/AppIcon-29x29@2x-1.png | Bin 0 -> 3394 bytes .../AppIcon.appiconset/AppIcon-29x29@2x.png | Bin 0 -> 3394 bytes .../AppIcon.appiconset/AppIcon-29x29@3x.png | Bin 0 -> 5228 bytes .../AppIcon.appiconset/AppIcon-40x40@1x.png | Bin 0 -> 2216 bytes .../AppIcon.appiconset/AppIcon-40x40@2x-1.png | Bin 0 -> 4794 bytes .../AppIcon.appiconset/AppIcon-40x40@2x.png | Bin 0 -> 4794 bytes .../AppIcon.appiconset/AppIcon-40x40@3x.png | Bin 0 -> 7288 bytes .../AppIcon.appiconset/AppIcon-512@2x.png | Bin 0 -> 121323 bytes .../AppIcon.appiconset/AppIcon-60x60@2x.png | Bin 0 -> 7288 bytes .../AppIcon.appiconset/AppIcon-60x60@3x.png | Bin 0 -> 11091 bytes .../AppIcon.appiconset/AppIcon-76x76@1x.png | Bin 0 -> 4515 bytes .../AppIcon.appiconset/AppIcon-76x76@2x.png | Bin 0 -> 9257 bytes .../AppIcon-83.5x83.5@2x.png | Bin 0 -> 10219 bytes .../AppIcon.appiconset/Contents.json | 116 + .../gen/apple/Assets.xcassets/Contents.json | 6 + .../src-tauri/gen/apple/ExportOptions.plist | 8 + .../gen/apple/LaunchScreen.storyboard | 30 + mobile/src-tauri/gen/apple/Podfile | 21 + .../Sources/codeg-mobile/bindings/bindings.h | 8 + .../gen/apple/Sources/codeg-mobile/main.mm | 6 + .../codeg-mobile.xcodeproj/project.pbxproj | 460 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/WorkspaceSettings.xcsettings | 10 + .../xcschemes/codeg-mobile_iOS.xcscheme | 131 + .../gen/apple/codeg-mobile_iOS/Info.plist | 44 + .../codeg-mobile_iOS.entitlements | 5 + mobile/src-tauri/gen/apple/project.yml | 88 + .../src-tauri/gen/schemas/acl-manifests.json | 1 + .../src-tauri/gen/schemas/android-schema.json | 2286 ++++++++ .../src-tauri/gen/schemas/capabilities.json | 1 + .../src-tauri/gen/schemas/desktop-schema.json | 2286 ++++++++ .../src-tauri/gen/schemas/macOS-schema.json | 2286 ++++++++ .../src-tauri/gen/schemas/mobile-schema.json | 2286 ++++++++ mobile/src-tauri/icons/128x128.png | Bin 0 -> 7120 bytes mobile/src-tauri/icons/128x128@2x.png | Bin 0 -> 15148 bytes mobile/src-tauri/icons/32x32.png | Bin 0 -> 1342 bytes mobile/src-tauri/icons/icon.png | Bin 0 -> 31341 bytes mobile/src-tauri/src/lib.rs | 13 + mobile/src-tauri/src/main.rs | 3 + mobile/src-tauri/tauri.conf.json | 37 + package.json | 5 + pnpm-lock.yaml | 8 + pnpm-workspace.yaml | 3 + src/app/layout.tsx | 39 +- src/app/login/page.tsx | 58 +- src/app/mobile-settings/page.tsx | 171 + src/app/page.tsx | 17 +- src/app/workspace/layout.tsx | 2 + src/components/chat/welcome-hero.tsx | 9 +- src/components/i18n-provider.tsx | 11 + src/components/mobile-auth-bootstrap.tsx | 47 + .../mobile/mobile-bottom-navigation.tsx | 142 + src/components/settings/settings-shell.tsx | 5 +- src/lib/api.ts | 11 +- src/lib/message-input-draft.test.ts | 35 + src/lib/message-input-draft.ts | 18 + src/lib/mobile-config.test.ts | 35 + src/lib/mobile-config.ts | 45 + src/lib/relay/crypto.test.ts | 92 + src/lib/relay/crypto.ts | 121 + src/lib/relay/protocol.test.ts | 33 + src/lib/relay/protocol.ts | 75 + src/lib/transport/detect.test.ts | 28 +- src/lib/transport/detect.ts | 24 +- src/lib/transport/index.ts | 22 +- src/lib/transport/web-auth.ts | 49 +- src/lib/transport/web-connection-store.ts | 11 +- 173 files changed, 19465 insertions(+), 50 deletions(-) create mode 100644 .github/workflows/mobile-release.yml create mode 100644 docs/design/mobile-prototype/brand-spec.md create mode 100644 docs/design/mobile-prototype/codeg-mobile-android-preview.png create mode 100644 docs/design/mobile-prototype/codeg-mobile-ios-preview.png create mode 100644 docs/design/mobile-prototype/codeg-mobile-preview.png create mode 100644 docs/design/mobile-prototype/codeg-mobile-prototype-preview.png create mode 100644 docs/design/mobile-prototype/codeg-mobile-prototype.html create mode 100644 docs/design/mobile-prototype/codeg-mobile.css create mode 100644 docs/design/mobile-prototype/codeg-mobile.js create mode 100644 docs/design/mobile-prototype/critique.json create mode 100644 docs/design/mobile-prototype/mobile-android.html create mode 100644 docs/design/mobile-prototype/mobile-ios.html create mode 100644 docs/mobile-stability-port.md create mode 100644 docs/plans/codeg-mobile.plan create mode 100644 docs/relay/protocol-v1.md create mode 100644 docs/relay/threat-model.md create mode 100644 mobile/README.md create mode 100644 mobile/package.json create mode 100644 mobile/plugins/.gitignore create mode 100644 mobile/plugins/Cargo.toml create mode 100644 mobile/plugins/README.md create mode 100644 mobile/plugins/android/.gitignore create mode 100644 mobile/plugins/android/build.gradle.kts create mode 100644 mobile/plugins/android/consumer-rules.pro create mode 100644 mobile/plugins/android/proguard-rules.pro create mode 100644 mobile/plugins/android/settings.gradle create mode 100644 mobile/plugins/android/src/androidTest/java/ExampleInstrumentedTest.kt create mode 100644 mobile/plugins/android/src/main/AndroidManifest.xml create mode 100644 mobile/plugins/android/src/main/java/ExamplePlugin.kt create mode 100644 mobile/plugins/android/src/test/java/ExampleUnitTest.kt create mode 100644 mobile/plugins/build.rs create mode 100644 mobile/plugins/guest-js/index.ts create mode 100644 mobile/plugins/ios/.gitignore create mode 100644 mobile/plugins/ios/Package.swift create mode 100644 mobile/plugins/ios/README.md create mode 100644 mobile/plugins/ios/Sources/ExamplePlugin.swift create mode 100644 mobile/plugins/ios/Tests/PluginTests/PluginTests.swift create mode 100644 mobile/plugins/package.json create mode 100644 mobile/plugins/permissions/autogenerated/commands/delete_secret.toml create mode 100644 mobile/plugins/permissions/autogenerated/commands/load_secret.toml create mode 100644 mobile/plugins/permissions/autogenerated/commands/store_secret.toml create mode 100644 mobile/plugins/permissions/autogenerated/reference.md create mode 100644 mobile/plugins/permissions/default.toml create mode 100644 mobile/plugins/permissions/schemas/schema.json create mode 100644 mobile/plugins/rollup.config.js create mode 100644 mobile/plugins/src/commands.rs create mode 100644 mobile/plugins/src/desktop.rs create mode 100644 mobile/plugins/src/error.rs create mode 100644 mobile/plugins/src/lib.rs create mode 100644 mobile/plugins/src/mobile.rs create mode 100644 mobile/plugins/src/models.rs create mode 100644 mobile/plugins/tsconfig.json create mode 100644 mobile/src-tauri/Cargo.lock create mode 100644 mobile/src-tauri/Cargo.toml create mode 100644 mobile/src-tauri/build.rs create mode 100644 mobile/src-tauri/capabilities/mobile.json create mode 100644 mobile/src-tauri/gen/android/.editorconfig create mode 100644 mobile/src-tauri/gen/android/.gitignore create mode 100644 mobile/src-tauri/gen/android/app/.gitignore create mode 100644 mobile/src-tauri/gen/android/app/build.gradle.kts create mode 100644 mobile/src-tauri/gen/android/app/proguard-rules.pro create mode 100644 mobile/src-tauri/gen/android/app/src/main/AndroidManifest.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/java/cn/crain/codeg/mobile/MainActivity.kt create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/values-night/themes.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/values/colors.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/values/strings.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/values/themes.xml create mode 100644 mobile/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml create mode 100644 mobile/src-tauri/gen/android/build.gradle.kts create mode 100644 mobile/src-tauri/gen/android/buildSrc/build.gradle.kts create mode 100644 mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt create mode 100644 mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/RustPlugin.kt create mode 100644 mobile/src-tauri/gen/android/gradle.properties create mode 100644 mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 mobile/src-tauri/gen/android/gradlew create mode 100644 mobile/src-tauri/gen/android/gradlew.bat create mode 100644 mobile/src-tauri/gen/android/settings.gradle create mode 100644 mobile/src-tauri/gen/apple/.gitignore create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mobile/src-tauri/gen/apple/Assets.xcassets/Contents.json create mode 100644 mobile/src-tauri/gen/apple/ExportOptions.plist create mode 100644 mobile/src-tauri/gen/apple/LaunchScreen.storyboard create mode 100644 mobile/src-tauri/gen/apple/Podfile create mode 100644 mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h create mode 100644 mobile/src-tauri/gen/apple/Sources/codeg-mobile/main.mm create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.pbxproj create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/xcshareddata/xcschemes/codeg-mobile_iOS.xcscheme create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile_iOS/Info.plist create mode 100644 mobile/src-tauri/gen/apple/codeg-mobile_iOS/codeg-mobile_iOS.entitlements create mode 100644 mobile/src-tauri/gen/apple/project.yml create mode 100644 mobile/src-tauri/gen/schemas/acl-manifests.json create mode 100644 mobile/src-tauri/gen/schemas/android-schema.json create mode 100644 mobile/src-tauri/gen/schemas/capabilities.json create mode 100644 mobile/src-tauri/gen/schemas/desktop-schema.json create mode 100644 mobile/src-tauri/gen/schemas/macOS-schema.json create mode 100644 mobile/src-tauri/gen/schemas/mobile-schema.json create mode 100644 mobile/src-tauri/icons/128x128.png create mode 100644 mobile/src-tauri/icons/128x128@2x.png create mode 100644 mobile/src-tauri/icons/32x32.png create mode 100644 mobile/src-tauri/icons/icon.png create mode 100644 mobile/src-tauri/src/lib.rs create mode 100644 mobile/src-tauri/src/main.rs create mode 100644 mobile/src-tauri/tauri.conf.json create mode 100644 src/app/mobile-settings/page.tsx create mode 100644 src/components/mobile-auth-bootstrap.tsx create mode 100644 src/components/mobile/mobile-bottom-navigation.tsx create mode 100644 src/lib/mobile-config.test.ts create mode 100644 src/lib/mobile-config.ts create mode 100644 src/lib/relay/crypto.test.ts create mode 100644 src/lib/relay/crypto.ts create mode 100644 src/lib/relay/protocol.test.ts create mode 100644 src/lib/relay/protocol.ts diff --git a/.github/workflows/mobile-release.yml b/.github/workflows/mobile-release.yml new file mode 100644 index 000000000..1c9b0548e --- /dev/null +++ b/.github/workflows/mobile-release.yml @@ -0,0 +1,90 @@ +name: Mobile Release + +on: + workflow_dispatch: + push: + tags: + - "mobile-v*" + +permissions: + contents: write + +jobs: + android: + name: Signed Android APK + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + run_install: false + + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - uses: android-actions/setup-android@v3 + + - name: Install Android SDK, NDK and Rust target + run: sdkmanager "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358" + + - uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-linux-android + + - uses: swatinem/rust-cache@v2 + with: + workspaces: "./mobile/src-tauri -> target" + shared-key: android-mobile-release + + - run: pnpm install --frozen-lockfile + + - name: Restore signing keystore + env: + KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} + run: printf '%s' "$KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/codeg-mobile-release.jks" + + - name: Build signed release APK + env: + NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358 + CODEG_ANDROID_KEYSTORE_PATH: ${{ runner.temp }}/codeg-mobile-release.jks + CODEG_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} + CODEG_ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + CODEG_ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + run: pnpm --dir mobile tauri android build --apk --target aarch64 --ci + + - name: Verify release signature + run: | + APK=mobile/src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk + apksigner verify --verbose "$APK" + if apksigner verify --print-certs "$APK" | grep -q 'CN=Android Debug'; then + echo "::error::Release APK was signed with the Android debug certificate" + exit 1 + fi + + - name: Stage artifact + run: | + mkdir -p dist + cp mobile/src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk \ + dist/codeg-mobile-${GITHUB_REF_NAME}-arm64.apk + sha256sum dist/*.apk > dist/SHA256SUMS.txt + + - uses: actions/upload-artifact@v4 + with: + name: codeg-mobile-android-${{ github.ref_name }} + path: dist/* + if-no-files-found: error + + - name: Attach APK to private GitHub Release + if: startsWith(github.ref, 'refs/tags/mobile-v') + uses: softprops/action-gh-release@v2 + with: + files: dist/* + generate_release_notes: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 20f148bda..f13ec1e64 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,6 +48,96 @@ jobs: - name: Static export build run: pnpm build + android-mobile: + name: Android mobile compile smoke + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - name: Setup Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Setup Android SDK and NDK + uses: android-actions/setup-android@v3 + + - name: Install Android packages + run: sdkmanager "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358" + + - name: Install Rust Android target + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-linux-android + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./mobile/src-tauri -> target" + shared-key: android-mobile-aarch64 + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Generate Android project + env: + NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358 + run: pnpm --dir mobile tauri android init --ci + + - name: Build aarch64 debug APK + env: + NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358 + run: pnpm --dir mobile tauri android build --apk --debug --target aarch64 --ci + + ios-mobile: + name: iOS mobile simulator compile smoke + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - name: Install Rust iOS simulator target + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-apple-ios-sim + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./mobile/src-tauri -> target" + shared-key: ios-mobile-aarch64-sim + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Generate iOS project + run: pnpm --dir mobile tauri ios init --ci + + - name: Build iOS simulator app + run: pnpm --dir mobile tauri ios build --debug --target aarch64-sim --ci + rust: name: Rust ${{ matrix.mode }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} diff --git a/.gitignore b/.gitignore index 040e493f1..7e074ef1f 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,12 @@ coverage/ *.p12 certificate-base64.txt +# Android signing material. Release credentials are injected from the local +# keychain or CI and must never be committed. +*.jks +*.keystore +keystore.properties + # Agent .claude .docs @@ -52,6 +58,7 @@ docs/superpowers # The binaries are platform-specific build artifacts; ship them through # release.yml, not git. src-tauri/binaries/ +mobile/src-tauri/target/ # pnpm local store (pnpm 11+) .pnpm-store/ diff --git a/README.md b/README.md index 7e2f825c8..9835f5aec 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,26 @@ Codeg ships three Rust binaries from a single workspace: | `codeg-server` | Standalone HTTP + WebSocket server for browser/headless deployments | `pnpm server:build` / `pnpm server:dev` | | `codeg-mcp` | Per-launch stdio MCP companion that surfaces the `delegate_to_agent` tool to agent CLIs (multi-agent collab) | `pnpm tauri:prepare-sidecars` (auto-invoked by `tauri dev` / `tauri build`) | +### Android mobile client + +Codeg Mobile is a local, signed Tauri application for controlling Agents that +continue to run on a remote Codeg desktop/server. It is not a remote webpage +wrapper and does not execute Codex, Claude Code, OpenCode, ACP, a terminal, or +Git on the phone. + +1. Install the private signed APK on Android 7.0 or newer. +2. In the desktop/server Codeg UI, open **Settings → Web Service**, enable + HTTPS access, and copy the access token. +3. Open Codeg Mobile and enter the reachable HTTPS server URL (for example, + `https://codeg.example.com`) and token. +4. The app verifies `/api/health`, stores the token with Android Keystore, and + opens the mobile task workspace. + +Direct mode requires the phone to reach the Codeg HTTPS endpoint. The mobile +shell automatically reconnects WebSocket sessions after temporary network +loss and does not preserve unsent drafts across app restarts. Build and signing +details are in [`mobile/README.md`](mobile/README.md). + `codeg-mcp` must sit next to its parent binary at runtime — installers, the Docker image, and the Tauri sidecar bundler all place it next to `codeg` / `codeg-server`. Source builds and custom layouts can override the lookup with the `CODEG_MCP_BIN=/abs/path/codeg-mcp` env var. If the companion is missing, delegation is skipped (a single warning is logged) and the rest of the agent session keeps working. ### Development diff --git a/docs/design/mobile-prototype/brand-spec.md b/docs/design/mobile-prototype/brand-spec.md new file mode 100644 index 000000000..cd418ed79 --- /dev/null +++ b/docs/design/mobile-prototype/brand-spec.md @@ -0,0 +1,30 @@ +# Codeg Mobile 品牌规范 + +## 核心 Token(OKLch) + +```css +:root { + --bg: oklch(17.2% 0.017 248); + --surface: oklch(21.7% 0.021 245); + --fg: oklch(97.6% 0.006 240); + --muted: oklch(70.8% 0.025 246); + --border: oklch(31.8% 0.034 247); + --accent: oklch(70.4% 0.144 254); +} +``` + +## 字体 + +- Display:Inter / SF Pro Display / PingFang SC / HarmonyOS Sans +- Body:Inter / SF Pro Text / PingFang SC / HarmonyOS Sans +- Mono:JetBrains Mono / SF Mono / Menlo + +## 设计姿态 + +- 对话是默认工作面,任务状态是紧邻顶部的快速入口,而不是独立仪表盘。 +- 深色表面仅用明度与细边框分层,避免玻璃、霓虹和装饰性渐变。 +- 状态始终同时使用图标、文字与轮廓形状,不把颜色作为唯一信号。 +- 普通执行步骤保持单行紧凑;日志只在用户主动展开时出现。 +- 重要操作集中在拇指区;iOS 触控区域不小于 44pt,Android 不小于 48dp。 + +系统一句话:Codeg Mobile 是安静、精密、对话优先的远程 AI 编程任务指挥中心。 diff --git a/docs/design/mobile-prototype/codeg-mobile-android-preview.png b/docs/design/mobile-prototype/codeg-mobile-android-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..34279bf1111ae37b05bcc9c3944b73af36acbcbf GIT binary patch literal 75544 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≶mBAH5WGJOZn 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 literal 0 HcmV?d00001 diff --git a/docs/design/mobile-prototype/codeg-mobile-preview.png b/docs/design/mobile-prototype/codeg-mobile-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e5413daef677214e6210898f00487767cb92dc GIT binary patch literal 718039 zcmeFZWmHse6h5jVArdMjji7XQBi-E~ARyfhLy3q;i*$Dm-940aGvv_S4MTI!&-mXD z_pWtg-B|0cd%iHtnR(Bf&))ml&z>M91xa*N0@O#39-&K1iK#q#gqZ&5(ThctC%`*f zO1>+=KaZrvgw@=W_vR7btLl*=9Z}5Fkdv8wG|b2(r~PQ?23#TY^Yec5=+s)TzZ)5n zQImaf-h>A>FY4=0Ga?|_Uf#BNx46NR^)y0LHdBA7PS6hmjsL#h4#Y(W^78U#LPLXs zB8~sOt%C6w`R{8ffu}@&Uy>n`laqh>@?~Xp)k0TX{MX2clCEx&LGWjUzaMz3=k9*l z9YK1fnN_J)@*zP;IuPyOy&u-X!oqWWqyGQic&jHO@&vB%KexWEqN-Z&M!xj7u}1}g z|D)k-k|!8{-~ItY;r{#b{mz^J%@2#ew%>XkZxPF>ral#^sWvo)uKM%Uicx!3`*L)W3Zl!<2C__)7>X_9r);1dSZ*rf$(rwMqo@J)w|B8dp%YBD}^!HmoLZ+W! zsJoU)FigJ!lSjD$>E#)!j7;dxURWNS78)vzlA*_f8E8*u)R^mLz ziR4P$DodEOu4J6=#7K`j^y{`-0*(N>JOhWzIT2su+1^xpxj=Vubd35IBCUEM_DvSA z^S;GYdt_s{AY}7qMAKUaibm;78bg?4nFaH+H!I+q-SYpczn7!ytQSnr#Jr%ozUz0 ztiCmZ;P+^Pqtx%d-35mCRnE32U>O@5Nrb0qjAqJ&XHsDv-nc`GlnVO7=r$YS#9Q$7 z@ne5at`h~2QbGIWeeGHsNOBWDq}?wi$p8XsgO!+STR}UwBj)E7i09Mp z$k445b8~Y+bC5XiJpF`1c={J855B~H@+WN7iPj4UHZsMeh z%2Ws%2#@$AASj}_c|LW%k)4CxU2~hk)n^z_8@TawWc z=uQ>Kv-oa9>lO5e(^SM_n$0`H{crd2R|8ExW$R8BVd3BlZ+E2-YLe8=g@=UXIIr&Y zb{GiWRZ4VM@hGrXR1}%VCu+XtG*!6}!0sF&w%2Lqp`l^9x%Y3ZRpFH&#AX<^5@wp=RsfohOXS+>T|C}yYtxL=WOaBw0$IFvv9h2L6ujTn6k=mj<>07J6=(qG zQ)3cyez|+o)EP;y#avo#4BHbA!DU#o=`oWPI2Bi5JQdHrjCfG}y#((Y_#NGfHL^4U zWMV8}`N_}jz}ZD|c(du04`KbA?h`FO7xMDb8Awg=5VM!25Sk_T^A!sn9RfNDC>ja7 zQF4%l$82s?5me3Rep#r1oql`5?@W;O>Amvq)36B<4Kdn zYJPpK?Tw$CoxZrFc%NzYl8C6t7ay-pVg`n06oa<9>3FzcsR!&Vt6)Y79^@9Y@Ugd7 zdfQ_A7Wo&f%xWP~f0B=jQI$KhsHj~i+DHRrqS5js2FV8=5fo(lY6J5r5&BIDS4k8P zGY!kNrpOtSyni2R;nnNTUpB{?0cVFWx5K1b^WNtudGblTR$XTo`?CdLaCc|tn#WU6 z^C@gf)VbPfVr+c;IXe2fUQQ!)y6fAzYPe^e=kUVOcNDwBsk8o$KP$w`VLewAtM0wP z<8)o?u{$7vWk-g)6{tPgL}-db+t+K7I$UC|9K-s>&OmV7wQ{4FW^9F6 zURXF1C!uV_fGT3oSo<)ipc0R+fSSpGIZCtY(_rk^%S)GjJkvwstdf$^2JcM(Py6^x z8MRV93t#FZC#(>uQZ%e!aI3lW9gl^*PveWg2s73;R%h>vHd`5~5Pu$wmVdn1A}ZUGDvByxo!TJP=*#8hW~E^V(hYo{p%|Q$ z80)$*FtaC_%Iq@-rHN8kS65Y074p7@7JCjaLfDW&_^+b{R=paG0tTM$!nhu`;>~$a z%3e|ccIoMYXraW*fx2TXcg@YAgcReom@i-2BRi07Y;0&QWEG?x+}udn-OW!P5ID8* z69}hDbtVc#A)E#+KKrx9l2TGqF|_I$r5~2z`??2)H0=kRzc+$Z`cms5IC;Z#(O4Ti z^xZ+#0|rGaQ5jSbR}ZV9(@Of=}6RAp#7dIe3! ztg6bHy}F8KFI@%Is&kJeElwMn!r*TA9$a}jZ^fRrn5-z3>Tk3yws_*<;l+7FQtpI^GuheM zNd%np_Q+Uiccw}WVrVszS!{H+$8yXD6OFB{y|&vuf(cc|RVdm!ZZ5V5Ay?78Q5yrP z;)Fs^5L~LN!Rp1=bEnTrPpAEFY!e9xuydaxAtodx9q*jxJ@mZcV>_%y~sY8 zQh8AoX@Waj(Ip=koX(?aOPep{jQ~5$nj<6Nxzg5nJ^w&x*8%T94EuC*T-15^a)ptKBqygt==j7&QXRCpgcN-yTi+GD1x@?5|w?uDfSd=vs z!c+6T`8X@ckND`F$9LXgnGGaCocDvpD{T^aM}`i(k#cf!C_AY-yStGPeVDAYY%iy2 z04s2FbTAk_>ObqcH(6oR4H(jv3y{8y#5bH9rut~J- z<(0S9*Z?CBkH>i-jwll5#=PZh)j+57(45B&=BFXt(=M2-fr0N>=d+iQkgV$^HT9XG6BB_L_$SwcR(?VX)AI{;7HofF zhu-w`^q#}VFLCfAy=#$m z#OY}_+_}8kYP4EYD0ZgPz213$a&E%aR!8&=Vkv75bJOS5Q3OpNM37QJK>^-ya*u;( zAH9h0-QK91QrN5ujR22_yMc@hE64akiwB4M+9ikV<}qdQ<;D5w*>OkWbnVup=hEn1 zWB!%v#o9|3boqw;DMix$EyB+3Un(t16jRq|Mq+To>hUJp33>n)xJtEk1}i2fLd>ia zXH{3z#{48|TsIX-D~n8id75nFEDwsXns?Tzhisnhan%{E7uHAcxa_?^wT-VU09(;( zm8UM44s~O=ZqJm4`ph6S)*JeG8BFa8Q(`DLqrv3^;Q>hBz7;8lIKL#^#oxR$ESH`T>ZQgn~-2ng?V!J)y(J~17#|5z1 zadL8=?@nZe!4HLwaxdK1_fxVqrEGO;Y_oj3!|(@L5x&!$9i}!vxW1^Ut<3Tj^1W&& zloEOH8PM6EXj@3td?WbAZwy^OG9m)ghTZ%l!x6H>oXwvY@s+5mEFBL|P;GH$rVb?1 z=0a9H453@eOhX)Nc&#`OT+G#>oFy;9 zq>BZx7BjWRSb7VPLH?_2y0>*7k(0TN7k+Z+T22;7DoO!PW?ad9h2dtKd}9Q(qEIoy zVdc!@HU^)1YkStJbv{W`exMId!adNjZ<_)_x11=zyXPyCE%muzfVm60E24m{ok>B$GnX^xv!@&bv3W@P?LQQUskj1#- z-Png~{N&VB*SoR$J#7i4CATR)E&`5n@Zty%p+M+Mp3)wW5II16k2s^DvQ!d*tmP-i zy+k`I#g;?Nd)L)q4oj^Pon{FI!P8?2Q{BoqRuK;#9u9SmnId%$fKTzb>F9V!5YkXS zPTSW1;(I^P0)(t-q=&V#5*v%_UTY^h&rBZt{Ga0vFsbGae13d4C?`*&KT~011>+2F zQpqV2cAimvwQ#3Al*pg(_T9VVkXMzlK|iCgn&Mw{&zt@>24pPk)y^xGvHs`Y4;tFq z;v81NVW_wZN3;5EKxfyQb_BUdzQ*^}eDBS!YOZ~aK#e;~Sp zNG=LP8(iI*v50Y`6+_2&22&c~0-h&j4c|7-JY=`pYV57k5`Uho%osN?2-v+`{>8hT zUaWVTi&0#n#}CfPNJuWuiS>`IQ7F9^#oV9abv}FBht~kdk57#)DOOE1k+*n5LDvrp z52kPD;Z`8NqN+Tq^Bpb{$qAnajXO!Pj2L6qPL=AH6-{{5*nRlLYA~K$89U-#qLJmg z*hb+c)U@s%|0=UCD=xmwt_eMAc0Zvm#Z@pW`DbQHNegHK^?pcSz;hC8m6M-tzkC}o zoCX<5b+viW&Yu{oXpqrxJ-Y0TvRiB^xAuP5;IiKiLqS1Va)E1An%Wq{a-BVnT2od! zxa=0@AZarRnU3o+0Hu*0Hku_drnuY^=$v0^#zysCzt)uF&U1hEd`~uw-}65CzF5DR zm&qo>*9w|1OsJS9xUN1jIW{&rdi9Vpytj3}5f;%(+UZb>|HmCflb2^$V5N?jn^&8F zQj?|UQto@K-ko$VH-k*hm{Rz9ORWJvaqkyhLBVk2fJ2{kGzKACLJieWypYfA+)RkZ zWQo;aaB61ePve^biSdkPSU$Rt;q2VA@eQRp``e||xfql6wT833xJ?#2{raQ!)5vQ1 zD8RQAm^&CtO>6Uu0qc~^)yaygI&J1oXfh_}rUX5E78$t=L!3kMKcIy_CRBjMf%sMUi&z$=NyT*xpx!k1g`SybYdEk&MI);{z*sbHiqDJ>TvZE4Z6ivtZ^)j&O)MyWQl@4}BZe?GSZxiBv*EG$&S z{H@ENDB-rY%FO|flP$yQLiNM>W_d$NSdC5o);$8euCDH#Y%E}fJ7yd1ubj+$?$NfP z1r!fuQzZt6BQ1B~#IWm&eJ~iT+A+q;!Eio%PPn|h>|{F3$;HLzvxl-D8HKam`=R2K z1*FB>JtU7_r-|EhbTq4bV=yHvr{L;(Lbmn>b1#u&eK1hQt)<={p>$}RDx$<-xG4?r z7Na-zrt86`g9J}}f0Q-;VQ}9Y0o1_}DAGfs@?k{z+qzsh>1;n!riO{cq}a3PW(sTQ zIhfDUb1DyRQ31CXs*OO6_Gv81bUhCZn9x&3 z=A=)&GDcmEfYX-qi%lRF59s^Z*Zhu69sx2Trt(I=asX2-OwkRt zGNa?>Wn|l$mf7&WZ;mfZcPMSLPYm|I= zoN!pIxv=20F{ImKU0}1?MQ>H}JebTq;a7b5DhE4z5{HdQ5Q3h(j6y1}4aj|xRlTI2CXkv{w1q(FuY&R@7F4oqBQ}>iO(G`_oZ1lDuXVMev|!B z&q$dh+?L+zaWtb|<}W)z#wWSEQtiU`2!Lcv;zg`awaAfWTGT-!9tcx6Jfr zMfurhTYgr}NSrRkgnEK*v`39X{mC0-r(dbPd-I|;PveRSS!{PM!ocQcV(#&~DZazn zgb0%Jf^}lQ&87eDJJ;wU zFRE%a7d>Nw9=64D-Qp|jCk2p}LcU(4NgQ0{${Ol1ahmD4h9V-$VUx>Y;Q&%O&Ov!9 z935**)~&}>kg{`%iwg@cC|ZSXIx<4jy~Lj{)RdF}=wx(GQ0<|K;QMrByeIf`Xs8_E zI|4*uky<_N{Jv9OxS)N#jdIRx`pZ=+xiq{Jw#%SEn6Xz%*DmV$?01ma5!1_23}YO5*Gd0$eR z-K?0Lv&>n!ivw`=2@!%gH&OicR9;iPZ({%(P<`O5vYG%TZwhtJos0iG>) z(lgJtd6%`9)6z{v zMN$FgZj0*NSPlCncuLZwmplBMN(?}=a@ft=mW=NJmVKeYHOM42E-VYpXt?Hlrh8*E zw=h?uzHt3YRr0WLE_d=WGlnoGnw1I*eNLfvVvs2D4as5Z+TkyyaSmk_ zCSsfuo_B9_qOT_iYK|QRI^G7s!Es0?{Vm?`RBrC+U2`i*F$s+lm9Rglmo;$>jT%P| z*@dU*O}2Q>`Y8%El9J+r_RSrHk!=+lW$Be=tgID)8+Tc!rNQp(EIZyD795(dH+4PnTya4GOZC(o zv`*f>jS;VzF9uH&y7t#^RG9Zv{rt`zMNv6xGioK2DGkU#Wdw?1cCKHzEKC%}a?sfI zwS+S@Q^^kuY~NkY?ji~>YJ|3Uoh=WGU0og<`?(NsSaz~bg#=wi0civ2kFBF+hW-?R zm=+fImCXBxM@NF**Ucvve>}}ckCeEtP`U40U&Q=e>y668jR6x75+)@kws^uZ*gpJr zS{^;ReQETZTjl4gHJq4j0}b}zv!#GDf#-iSSf7Q&z6D8tkgE%B;G|=9w!eP)FP%n) zSB^-eY$&|LOD^xO%KX2$wcNHCtJNJ)^94AggC+^j~r=^X6a5425Fov;XbUxs1$rj#}%tvE{VRFL<$u ze_-_gZTQjG7ckaxFKh`Qhlj78pYQ??2aDttDOTj-y52fYj5@S>!sRSRox}guYsBsE z_#V{-2`zmDILa*%mOxXB4%RN*zX`|AUtc9}ukYVYr~J$Gt>s8P!64BeX#4lPV6B%( z|B|wgej)s?=4#Jh*#8?hRJ8S9Q!1GMw|!V~sP4bMBG{5SKDEWW*={o5O| z|HnJ_f5(tp{~OKw**8o7{r&Iyza&}xzc;h3iQf0?9~S^T`~P4{{D1FL{{NQ$TiE~e z(u4mO=Q$NEiaF=gr}Y>Pv7({^17&6Pq^u{za`IDO?{h*LQnhLDGyK9$XJk;xA3mhA z;t&?@yk6Iqm)47jp#?V9?<>7W>H}tYpFHx^?!lS|NZ--x?K@%_OI{rb_3E&~ytiVD zS};aW`93@yc^*>ImupU*gua`HcKQ&6rYlXCP%G}CI*^q&mB%}dK!@(qQp@68D{IS% z(R7(8IHTv{++1hrjA6@e_YJa;5bvnt$rX{?c2u`=sVtr2qWblA%R!)k;-F!BfjPdj z-o;)&)@FBiZiSG%IM`ao=!1-r+yOaAN9C1q)C##)Q0uYOAACy}dnMXBYTCu2SIN6g zBTYq_bn2#IIaeyYSUm$yNmO~m!SiM~Yr>jKfQ51(+Z9%!o_KVTP5Dba&3 z9s9EfR$$PZdsVke52mr2chcS{QAuc47OXp1MJAHj0X31}7S4Xd$KS3Rb-iG?=At}H zTC99-c(31N8C&qTP}m!bk{g0l(&wJ}@F4FeLw*K@OdFlo1<)yx5^ z{ab$UWlvi3q&Ky?%m$SG`K+>?`<9_o}g~kN5G~d|~$vSFmM6f-e3x zOUC^HvP7V-Z--ENt7Kt*;k@x6Y!AM#FeA9{Cxy%B}QcB%MR zoFf$?f=rYnvmFmjf9UI>v&7d3Ljw)Nh_N;vZj$11{Q{CRX{&FsGDXJ5RZsb~(7St~ z?B34qnUJX%6;{Vt33Xk?MlavPqa`@JQj-m!6=(AO@wJiBZZ^(0x^fe3@>F_O9!^d| zPGv7A_9RI&Q>qO4oXw;(&W`REY}0g;3I+{o9HTZ?74;1!Xm1-86N1r`!ua3kAgL$O zP+PtIbw5dOl~HI#PmxEKmoHLmd+$HSSyP2y7DO=7RQENSvlMKlLw9QNBQga26jGP3 zd~qW!e|9YptFJ#+CHD&n$n&C~dg9}pB$(9njcdJJav$37Cd#4W1e`~G>97N*lyIli zG+nuyb?j(hy>kLj&wDKpaTqB2H!4v3aj9 zrNCk;)Wq2&7~zd`)5$>1JM{xuqwDiZWiV4I$0q@m5!Z4K=0#VYb|4G zX)&a#j)g_Ne=FNe zPCSc#GD5-2mp7R*m~baQP~3RuBn0NnvZmx++s(>SopZ%>NL3bK+0DTYnBVe02hp35 zvlWhhF>!g7k;mm`5%8_~=>qN9Zl$U!opP)&ta^61M}N)dBRi8at!i6hZQyF;7%V9D z1qjDH>4bGQm%>bFHjKl@u4K>)fl#|9`|I~V@bg)X#u^ht6+AG0VrOepFy$TOATMdD zS^1^np!#QRhTUksNY=mxqn))>PS@QT9p|Tn6b}7+cc;Li0WSOo*;23O#QogzfrS?Z zhKu^ZS`^!j*4@w^LOZ7y?@Q+{F!G!(p(E?)7NZ=+#p#*r70smc!ElN()hL>&9+p=b zasfyMz0cA}Q;Mv)pqrDiI}BZ^DY{fS?^ijt3P#w=jyzq%-C_=+;nglx!b0U<9jS+U z@Lcm;V(HbRQIv1v94r5*4UaUKMf4%)CjdYyT?kRHrfEdXb#97m`2z0lzGpk4< zsXdyGE!UsUifEYO!_+@vEncn`zxdq8LPQP41j~dDhT6n1Z?lLT*r#Tlu3ckvaW}hO z7*}1^+i=CSKoTxViwg38C-IOeCzBQGap^|-*UuiyDtjELd_KTKbIU(GVJoECU*<@I zKl3C4g5u@L#CmCbg(R@0LPf9xyNhqyQhq(QmF)XH)_ zHTgq^NJnZ{HEf4qYJ^%hC{9MHx^EC^Tw*`m$;ZcjQ*ozF^_S0Of_8$xRW#I@j`KiP z-rmNz|7*NbN8#X>HAFZj7dWskyo1uR3SOROl16gW58t4In&WJ%Hm93QN-9i)X{29G zOxZb|e?YS@lOskqODyIU98vo+r;jXz{4+sW9Y;@gjS8z-;`Pbv=dq|1GWB+AJc z4MeSu7kQQ_sWHu`4_ks7Y)f{f;K{4z(E{pLg5OL`a2s-~c?aCGY^G8WjC_4J>(poZ z!nTosiT)zQpH4M0P$+uwnF4xPZ>ZjA$@uNi0=zlpY5bHD!Vl27<)-7`^@jK?bcmnJ`DiDjM=bu+?C3qjJOX z-oTga>BTC^?(E$8d{InHMU>;gJ@faYNTsi$Avjy@_Fc%o{a}Y z)7}AbO+On_J@jT(M{}8E6(4pyI6YgHi+^d|y8`+6oJz}|)6Bm2KInI-0E6qq|Gr}f z!)KUDsnt*)vYQv!t*t-y6N}nPN}764h3wgAf}6gEeu7DHyX?cT;Ezqfm>Q&|7Ejk1 zG?#>I^|F^P2Bgx3XVF+~f#W#WZOj;3lByZ#N;|m|Omo!E(2g1`UaK%(EJC{uXRc(z zZgO(oK11t?X73w;@O&G7+U&$pWU2^%bM>J35>9~=@TG#cKbeX1$NxC_YOTV9vauXe zUx%Vp$JI21XP||meh3&X(9Sx*0Mk1KV2j316afKY7HPCcxB#7Dh7IZycg+~6GY9&; z&4?f$n}M=?tv>u6^s{3B4vX-hb(SSY0tbf-Rk!4Ep|XYCR&AGmjo8Dj82UMwPPbx! z<_&1_fO~T`7`OM?=))*~=ayTiTg{cC}^6En0?dflMZ zA4`~UC;pNy1g=0I@6=QtnVdN4$K8jI4gusV7YV_*YG=j!!a$Xm-$$6;;k#$qKnZv{ z4$DGbq(oyQY~U5<3OPipgU=nClei5d5|HA@08q{AEJg->hHEUlS&UK}Gg45cdF#Zw zxw&do5Wg=q-FYyk7wk(aoQ+5i%TH^WfeQ(8R)hM>)%PUXw<;6exVT9QsL={JRR?wu zL=KVvV!?kq71>TNG!73q*0s9*>5ey7CEwKd-NljA6QTPxTFq7XHo7jUn$=f5yI|te zWHU9fw!_1;G=qqhP)@c|)vpe2R!pcE=DwAYH&>_f6$1*7@nn*;O(2FMXQf|@ir(Hp z(aIqRTOyB40+}v6W^gpw0?3k(?Q^KnNQJHOGY*zPas_!Vp!nz1ELOg$n zxLY0vPp3~cz?(Qedz{99g75St_6>d;$yzF2>Nu9#7OYBjmF59cq2w^^Z_aye@C&Vt z8{cQl4%T<*(!m?y=*mbh{@a>B1peb~04g^tmBz=t?p@t8yH7{mXI0qhddAuwIaSeO z9C}!mPA7$<+71l>xtqhLjDWG5+FwxJYZX3e%~#yy;>OFJQob1jL=cdUUYCAxt>3w|bgmI{dNp1|d4^o; z{lLqPhGfLipyZ(!))SqHDo(nHXl$)9>DXuro zlr2vvEti?73D1UNo?t}r?o%&anzhY`4&ZHN!S46^D?WYNkB*GVixcD=I6N+=aaiV& z3RlIY1cLk*`~RwC-=N6x;quo{9j# zE20P2%f9*k&`;NtG#$pPR$>YcJ%f&q(}FDtU9>Jg>y$MqziN6z+axWaUWL}cIGlVm z=FhvSZ1H5jAm$$zK(e;$GkpprGQ^?YwGcQb4(fVk6W;BapgA&10-77B+qbd^)f z;WTDs7#JM!QU2+}qtCCU9sUPf)f!d$IZMguACdJ)>d8M-_UQi`G}7-u|HsK;b9s1N zDWveaZqIGE|B^KuPBp&L1d@HaT%~!rIo=QV^WVM$ziA3j7yMQQiufWdrL8)$|( zu$n_4;r#K>?D?`hB~p?rR4ZULU;2#8keKwEFpgF|_(DrZ2bXMVWOTINdHYLfXy}(v zxqy@P?Xf&Jrdd*wm&X_Tx?Ht4n@k_j(9k};3n?hrUJ^zKh*|JGdi0kryj_1`kNpNn zlM>t5P!{NWcvfa+r>8G1eO%1+I0c>W#4;J^ODnTTBKlXD(5V+)Zl9V(V)lMAF#%Gj z#hFFPjo(vuC~In*3smziMhyQI9o)(TtpWRqI6p!)x`ucBe#%2F^wxzO~lHnxXj5TF7wU55Fx$;TY3ssRSXgD}APoCnp zQ`6A89zc&*a{4_clL3k7G>gaC`FBOBcyFMqLJC+|l zMub+6-syrsAT6!ebWgAoLy2gdN29JzH-b}b|LmYvgXaR=@73%Un`^CdyE|#w+0SyO z=@rX!AIVNWC32&ai>CEgZZJuv zIjs6nsVFE`&7{8P3+)s?Y|D{!KlKz|BAln;E`6sO zh!Tgq!8{}aAm{t`UpH`4Y{9)U3#e46>OSuKl-cUPQ?~XQc;?m&xHK>jna-%$^L)0# zg90mRcdC?0hdB*L%3Z9pShp6~9y=>LiDsu2I@N`mjCyLCnr4qy-g^W))H^nVF0!9D z-?cnkmOE`8ARuG@nOJIJX5>Jr_6~|^gW=&rT^UPSx*vDQ7;=gH>j%xA9=U{f*B1`; zp2*us*e?Oyu_{)SI$fOa$sM!NCG(%%`!0an(_Su3aC~4O8mAeM=sPlLUvC|+iUwk^ z9oIXY;v#glAbT+xEF_zpUnwd`2ZaZtqCW>5n>+{*$qySOC*$IniiH*y?%aEO67B6L zyrl^aFn<5a+|r!hpvD>4RaTQFux2x+KlD5e)zIhFm|8A9t(Rc6^2`js$C3eOXJ>8x zff5qpEYBtzHHUX53M;2d`*zx8@Mn-c2BpcfDl9G*v{z&aIt1Bx{1%K=TLJKSHW|X`q9uM~j{z8&^dfwZw z@&vs>wXW7l(b1j1x7~Y7=|v(UPx!%xV1du5E|ltX+KtjO zGyn0>KRf@d_?+bej)h_`=l}Sb$m=v|jil1Puy6nkTD>AbI_c`}E|+hNj*jNH;!P9O z&XvPA%sGDcEUDJo%5E(W7T?O&$Zvj-)!ey_rV5yMdhVrH52~*}$0;FY>(^O1Vcs3Q}>J zttybWw&9`Oo2v&O^#=rxHdI?(pYL~|X4|DLI2&F?r$#a^6j){xH)9T`xR7vw27bxL z{Z;)CTA*@klU@9!l1U$#h#3G(02F)M93iE)#buK0> zG*ls#yDKGrZ=o644ku`*l{{EFDsOF9osEmj3Q*yUQ_Al^3yO0JXjY1;aqE5dWq{l{ zqK^+hKZ!yzd%$nM?EUdi!?E`o8W+%BepAczni6U!i7!uQE8P|?%*+gPGBPq4bgBh? z@7u?_Biy%bgA2OmS70Rq8<+QeQWaBOlV2imno`;%DE-udQe4-ugfL`hF z?)to?xiO&mG06GQ^|I%s;;>m&v-#*32ji}?CNz9jdUp2cHUk~p#{V%jBa*L5!|0& zeTF1UD%sn!@!e1k?&S@~_uBbz0gwR5?5Ayj3Hajk^!ra+uj^Zn$s!)K&n$poN84#* zLmMbfGx|5OOi%k{zTKkI(%~h$llA^7B2SgZa_O26eRur z{i8pS97I+BxI0t)IdE8w-bJ5oV{LDXFEp*iV~aL;J=}XQrMKlNrhY^`Ik>xtEhbV` zQHg)5TW`ss_cdk~26N!Q&FGMrYx0o&sQej{_A`?lK^O^x;AHtuR~{WboVP!YftZ;& z0R*#{K9d~2IuP(QQ%LJl z&I5{P{^ZuP{oW!G)zs89x*mL70hHxSK8u5MbD=dro`~1!BDo_lg87F+e=Gy(2!vEJ zM4J$|0J=skS9>z+J(Y;s;TMz7`y~ndncN zD&;Jz!4;VQ9vZwemjg4(dsmb_vb@*!5(np9(RZuwG6W#|PqSr)6m9{N#kzkSiy!W< z*u{Rex3A1r)15dP)yYB$ynu}-*&}^usSa+rxNx){=Y)SDCL74sHI) zgeUnv9Cs`(8hlg+fw}mT_Au(B_Lg!FNM~5h9baa&d zfjjs165Mohk(>90LKE&#iOY9%8`YHi2E zrI{VjSGHhzZmG*^hx*MI2Qzpy=7rx?sT84Lt6!+WiEu8v`BV;11)#Poj35?psyFcP z@d--wn)@t{$;~#|`eRF}r@1knWfT^Y7g2|?E&ZT*cgFQxRPBo<+Q4HWz!IfsHl8(`_-$;laF3;(r8%6NFU8 z6I(Viwqzd)6M7+-(T}ObN53wne^?W9nY3fom|bDz@VVsuwBh_nK;}W)*M1W-RKTK5TJVj#BqFlfdHofE+|;np6MAmO4!6o z>XHX4g;LDc0h0>@!Y>&{&<2AQH2C}XrF@{M&3dW`zd!F_z5$2^#>?gT^f#ZUmdrOm z+z)7|=q}NvISv<`X3CB8;JZ^Z@cy12Ygj`7M$gGBLPEZe!1`BU0`>IKjzx8V6#97U z*qBlSJEtHYCB>hDI{&l3?awGw?wXvnXXt}j$bqS;QfZq1?b}C3$T)8Q*{E(}zM5xN z-5c-C;`v+-etJ%R^SU~_s#Kr9W@L2h$H!mS*4CBnKkWrhb*@M1D8upE`Wg_))FFfy z>vH0JJV1-Bre*$xA1!cf)`@~~&*OWa3B+DzrMUPwE}KL1`+Tk_a&-V-;&@P0`CWQu z&f_`2fSeS?CMS!*zcymLb0)f@8A`!>*!x*+Ik7^G4oLf{*WLX_{Qa4DN|)_;XLmrLhD_|gQMppf{wk1>?9f6(KIXxlt?p;noN=HZ>lXyW_<5RUeQVN)yZkEd00LucU?1J_b$7l4 zN}T2z&EhgM$@}wotLs7bUT1fmsBbwq0)%mGmQRb1zJ9&^TlPN_OtF;CwouyKy!93G z{hT5z)0%+mrR-wZ9#9YstFk%VaW#nUqot+AJZRL&C#w&!z12o1(3+~QFbbfgqI0{Q zetADeD=jTeU# z(G>vR@509-NQEk%2xDRh-ZkM$_d5LyH}W?z`hE1j(#*c01+03WLTbJy7b%0`!{()&>kVj%NJN!3uCkZelqB` zh-jq%{8)*8b;Y-wcQ@lY)t0?1$;;5~ah?l6TUz>|We)I%AbAFmmJnRNcW>V^N8&$A z6a1FgNMvJo5EC)3^3wj6Vpv?|Bst+-BeV)?HC0lXdA#Ju_s2X72Qx3FzcAdLWC%t@ z&0Jh7$TQ0u(yJ_eq=PLHPC)z;pXJj?I=|Ie3dC*G)n6ivWz*a>iL+#Ca;$GkK0J+k z2CRu0-fPkwiqF8jWIk20pBeCcKu$j46JWz4$})ihH6R|i1rzf*+dJxf`eYuTmDrR# zcVZ%&r;s!xmYY$+SVW!dgsX)(wAhmUsVMUV6JP-A>2A?_C0myd?(I8!M*r-;V9iK0 zWo1oGp;a%?@PXcy4A<74TVQxf2=Dw-0*BSm27|76K`$XVGb5voOm<(V8mMgSJ)vQy zHt)kOp#+L6_$m!1CMQ!lZFY3irjX%>QOVB!?3Pd^tgD_{l)_WGqMaioisP`Fv+$T?^^FYf!g{ z8c=?(FL>NuD*Ns4M?;~Zp=jY#cU6^6z>>gft>PNDBtMch6VY3l#J;5X#>ZR3m^Agn zPpBOVRa13`x~%W0-@EGQ%*rw`0f+wSWOP)FZn@V?cCTtY3O6~<$<72__!!WCu_CmS zhz1Yztml}RX21JSHUs=>%t-y6KQjC|pB00gk;+)Bu>ZVR(v4~pE~8FSM#d;W)bU%X zc)|wHQ*EM5Z!svl6_c}{WBG-K4tzV`ZSlGSg7e7QTDO*ld?F#&Y?Bb&Cn41Gui4#E z==9Ite???88%o}vET)4G21dL-2P#t)6`5`nKx9CjA)oWndn{PjPJ6eJ)E8w6N&9FL z9uWP_L{L<&JHI`aM!jT&?I|8Twn<3>(&Qvj4p68FK&O5=BH+k`hK2FSgxJcE{T{~) zisPq5z;C-Wy6u}!RG9eKZQX3E0(b^s!89qWN1vLDOEplj4|rTg0jN_Y`nKbohlxB& zl|r8103$F#C|(%m54DIMR$=lzZGo&Oz&wb#AoJ?B+(BrJf@TQ6TJeaORa2OKeXnK7EC@$j$at)AoVv zC#HJ;doMdp|5*%VDINat+B+r<6^5x>$o%5QK{^((VBi17nmweUVtPPTm9w}wMn@n? z`uX6%z%RvY@kq$M=uy1+c&@1EIqeP;6O*0EG%a#}XoHU`Vd1C#CEyZ-zY|eS-fStE z{Xey;Yjh zDK)i938Ey%C;+>x14HE$<{u@?@$XH(t$CIrYN=#VeTjAw`M((v+seu+vwY}FYW$h$ zGYPgwq@<7O7-Mr|scC6!w?^MR=)+1#sCE=`y7*ElwHOpc`D!l~0*;=jB63-f`(TZi z3pUI6^=qokPGn>^WB>Q>1a@y9leLnKsa&l>BGXF7pLNSB11w>H>m3YN7ry&V> zT-*SRnnc0l(^E`F(q|vIQKq*8ly>({54MAQ+&vPyi;WTNQa4Wy=jhLI9=38@-j}_e zz>k)xQS~YK-(Ovq_!EizT`hm_I$C_FR@p~O!Bw{tg+l!ewEGj$)GIyt{lmGg4dR(t zLN-U=VviFCtVi;a8mz7(_6t3IJ35Jnx%E+>&gR7|ECdO9sV6HAzx(-(ml;|^D=KeA zW0CwrX+FX4U9k~ITwH{2A8vhpy(?UQ6Sf4bnhmmJg--U`BK!Y&N>Z^qv_Gd+hpPrI zcb+FUD-+Qv&%3p#Xhf1;DJ-Mw1{KE?$HY7m^_maE+e|b1cW8cmdWaFT!+t8Y^SeIZ zV5^3JS#_SL-D6Cl@^HOV>5-gCM({*IaZ2g1-$XWP#rWel0X23TydAZl&rhwxHb=@s z@!>{GgW;^8!N=df!}?=e+-M>69To~vJdEU%T%VFtQaTwG{+M4mzsUl!C@KKv9SKVtZ8h*~Zb4}0C&~9KSs1)j3DIJ|1|DT&2{Ril;(!|4I^glZK zRPif0S$O4ZNeO4|ml1^Q%CK9Vu{o;-DXBL84UaF5e>WN1tc~R4r}IsnxP~jO3N8hi z2e3&1^ju(6QoiUd)T*f}&+CIw6c~Sy|5a6M7BnQ~{dkkjJ0bQGZ;2WQY?zGm#*X_V zJ8(&($9`w8Or4)+H|SzfU4Ol`c=Pm-r^Kw-WvL5ne3sMVN=kIr*45uAvTkgVv_-CpUHDSk+!qaa z)L1LNG4*V&#gDDl;|2RqYb@z9r$e&SeqCMN{e5xk;ZcB-jbdhGsrS#m#|9npQaG&k zmue+%;|naOS6yyv1I*Y$t1q7}$;Hm@a(Ey~j2a4q!Hv)EkR?a+X-i8>cY@&J$E7{> z3TH1qlT}9N4SYu@zC<3zv!Cmem4{nXwS)+9oEBs>`z?aMYbcKED42egHE&_d&WTB1 zjyqYviC_X^q*6*(L7~1u^4~F~cLmGF)ud(cJ1$%&eJfqsc8yE9*byuAfl{vKc$FSw zhmlfXBKOMKF(&c_jDBd?Bz3Y$Pv_))aYd9iH_2}JbtUjgXWJt_K6~~|2j$;gE%cnp zWcuPJ#L0ZrU$Ph*jn?yzEO$DMD2X7bm5S_&hY6R$B02OC2NSt~%~FE)=hv^_Sg{Tp z!GAJ{<&Qt^lM5~K{9Q+ms;7MVicQ31;ieP&hNQIO)6RnqzXA-=x*es%85sqIDw`dC z)EPH_rQL@9|LQbN6X$EMrRDrNX0;LDYrS!Y0^`7{yFy5UWC|a#b@aK$l-f)(#7a7TC!iA2Rk90CscjZG!jz!vew?QV7Y(F9l}2yVc0a6HEVfWG_y9cxEU( zyzjXz?@)kYN$c`6%xDt4oiPHD_+Nm7?TY8MQaGa7y%il&clvh?M&@t^dD_#i{5iUL z`(Aakn`l^;CX**a8{=YMzGhW@+RUVKt`h;MNQ>WTEH&EY_3K+28ikI7z$HiDCE#N| z-k!ZFdYiXx`llqZb{ZZE%ye(x<5Z)y_>+z&y>beeB6sdjm+ru^K&qCcMY-Uu4JZivkD#t28NU$q3ueaifGTLX86*9HSdh#!Cd<% zVRu)+UHT87jF)DrwWUOI{Gcz^3~%bdRIPk?Jwv9(`EYYGYM=XP`ZgbbqCl#|3H0sl-Xz+WiK z`j%E3Enoz=Gd+I%swoMVWG|5Voa4GEq`aLTY)obuNcUd)}GtRGI?-+hE^-t{0-Qudk_znu6kmhDNo& zj&VSYX0B#)Q`1wNk46~r`cz^^1sr|flDT}N;R=kPbd0{tRm{?l=e50ub?@~`Zg3+^ z_Tnw?{XNhQN{z>9wYYkFhwN<2m8L7SGZe5={*6-a?{YVp)t@=spliT`q=W66*mvxF z-ZykfY#zA{#R*H|HOy_1Q+((gG#(n$G&(y+1!j+z6bij&BJvLG9*@X|X;5ERx9HQ3 z@Fs8hk|y(a$h-TyCe#D4-X`a9i+^m?$LAbgKiPfIeI&+ip}87}Y=Nm9SmXlXyi((X zHG}^c9V_j&RLVZ)=k*!(|6JsnoRO79*j3x3Agt%#%|fC0pT)OO507)tow;3GT=7@x zo0FCwrwXnSp^{#Ct2}c&0Tt2S=)OARb;3eneG)FSsYlO0y-gSd1Z(rXdAF~UHJbPD zUKRl-ivb@$ze?LvY+V0{h@Kppe9QcMR!KG~N?U>wC%wdmV*_o-AMIfb>;?zO@GJ!T zzlym+c_H@ZQWew@qS)jgj+KhV!$rw9D=I1^{uFPG_&9Y2|FQft-v$#7{f+5!^BQ++}rANM(}{iXm?p_lum-t&;YkW_b0$fEg(&y2seb|fNu90(d- z*Y&rXx9tIHs<2u4E=_&)+XPW9*HeN zcXvi*J`Geml^QGM-f}*@ih{e5N(>|;a&@R%X^*2@(NN^7O4m*5?2lN!Y5D1I8hfxh z898SfgsQG^7TI6X$ejI^@q+@nZ?4(QY^pF7%O=8@bH7zg*WNlz;+H8r&smyM+@^9cRJt9Zvi z5&`|Co(ZIL^QM5K+-dZ5UX_(d-P6#K5q{ccka)xk>d@kjdZMfM*WbF0k79~?5TKa? zFL(f{h&ugijQFCEg$TdVPr?@}FL!dV#+rBGeV-hgoF~Sqwl3_})o=UagZ4LZ?T!Cc z83zP0mzl7xLKv#i8?;ZY)>Lx9tNw-DCAG?*&;zftUbUN_Z=UdtjK@Yt6HxTFb_r3u zudA!S9sAs~;Vy5!xlD;kjahg|%n6YC)=R7;LatQ2ysFB@P>T*%M?>AhRfmDffY6OL zmu*}+DW5W4Cd1KW5lG$&z}TP9t5tq4(=*|)XFgHZCZ4R{8M838va}Q#7ss?t+hx!N zS%^+j0s4bNH}U)HMxiLUV88wPt{m2?OsZcv1*i5S?T#9nAH{?viSS4 zjHoX$&hY_qA~|EHq7r5beGI7AFUU*!_3Pr|oR5Vi03VZgR)P|zxSfePi_s@#T3pU* z_fNCb>3uw-{O)vV0Y3ZHD1+i7&s)$PLx-BHQF#F{5$;PFi|r*=ttW_#?SsivNb{_A zn41G2|B&HueR==1>KHTXqvPRfvDxIKOV^TS!eC2I0-S1ZS15`h7ef`Gx z{3j5QSiR{`04XC9B7%c?bf`?z)6>oigM%qSy|Miu^tTyKns}QoL%2^{*dNm~I_YDa zhaVM71sT~ODP_4g#VMY**#G-IFXls;Yx_aD>ealKePNzox~%I(qr>XlJzQUJcPCCw z~a-U)xHhylfjBHT{l1}NNLQj#tRUDsO|GxTY6GBe4o6QvI{j8u)Rti(TjprWzq zmF>j|#>uU!j*sv5wY*Nz9vepe{?=$9`Ip3Jj&6%nhDPliQ=U@_<@PPjsQ)XRpWRa^ zAaQFYtn%9&;mQ75Vn|4cjsbA0IqEedbz?C;_i6AxNMPK!c~eDJwdmt#`kkO<`gTzM z3=J6eH*>fw0w1>$RW(8Pg!g0)YT|wJsWMA>racazucJ$!*|yKaiMLk5Mn|`_Qf;pt z%hj5$Kp>F+O-u?X%YyntKtov&e;wiG>66J5`u;|x4)iADGFS;%no0N~$QkCCv;4N)%Tzq$4@@uiC!H&o%?$q@3 zX=}@9e!ZAa<2rcnI^(%64c@lGcyUxs*OUbkmO_JtXXf-?Op}gh2G9He7N6(IWG)5V z{V9EURdw}BB-J4vC))k>TpdMLpw>|r3mp+L(J_mH0g=Ou|GV=9@_fZ#RyoXBpEb4d zXZ1P^fL6d-K^eyT+KZc^p514M=`txNHaKV`VW<3VJ0bW|AC*T=u!to)8GHJb@eE=Q z$+K+~ZzWUmTPjC}D?aniJgfKEQZ|p^~mLF!(GuAqs z8*R_LJQIN1?r?L8?3r^^-JHpI&HqfX_V z89zr0FdbJaMV8xbI5KP$1dqd4K**}{B=4K%iT2|+a(Afn_V*19BBX8VZetS4Rz}uO zCyC}xwI%Bz%l*mNIS&;`uYQ$l53sL`CRI5f_ZhAftUE35e}dK&lYPq5Dm0$Yo~Oi6 zDM?Nb&^Az1WMVn5>@EPic7k^6wTP%+$X&cU=il7juOXQJ{P|O2ip$$2^pt*iJ2=G- zyR)-hX?-+{OJE$?1kBe`kanYWt@a|TGMqA7?NZ16BTJ*04D*}dM6$Dk(61JdMG&2F zESHuUmu@E4N*^sxHtbCO>p6pzl||C>GCq$X4RM|L_{M6M{`94ryU_{`Z2pCqn8S)x zHa0fUYwET42suKd1tOlI!QNiLjujMOrUhYZXrvNFQ4&Qi1tT3J9UUEG=yC0DEESb# zIkuuuY`I?w3{!HLY$~BI!`kJ3(;dUP<8vO7aW!`^@~?FOR_7R#PAVb!$m9HW#^AF!OSm zkH$=2yq016Sh<;>;=MMI!z_LdGGmzOO(u$>|Fs}*ljMHIq(z67In1d7xPOa4 zL_|~xA~nt_@rXW^O}p*27|dt%uCsE2s@Yfd7J;nl?7{-g`d5ugJC!1f`V`T?`{X>k z!z|m{?`4Jt7ZL(W4hD^fzhV>D?@FtvsJwdh7|Msr?$E+#p)3G^i8+x#oZb$O`w?YEAQ>nq9+l|MCSg^3HkfHN5S=i~NksV@OoqLYlFMi!Y?9w0}G z4d=>S)*`mQeIplgbv|D`gg)iBm|L|Lp=;6~aeT(9+O3eNpofnh5j?~@+K9abylT2? z2QKwj_3WYdmb&AQkJ)uMCme!hW!H0Uwl+6bgTFp-{eM`%;IC#B3hnYtEHMq>G8fP- zFBKZVCoAFD+R?E!UMZ@)5}pMb76BASXWb8Eb-V@$#Ih8##CyL+{G>I%W1KKD5`~US z$KLkTq3`vpSFb*cNGI^~xXn^AvcSDNFx2-zc^}SIp!fZ&nlO+1H6!f#%{%*AwRVyR z0zP75vcbU+vNa$~%x*_=im435XvHT@1Y-M1>p9vzD@#kgpvY<`I}W1}3&8Qn$jFe( zoe3P)t9VJ0KiKrJRPx8mv|S)T%W6wnOfrp@<(#v;eA3{ya9|i&Ze22vzm$z%r^_ru z&t;)~;D*?(t&52Y7lTFQsM|Qv5nvjdqt)*KcDPRUm};Fw)${9DHlK7Pa((MiM0v$O zw)74bSp&w#ZW<;Q@$>%>j}n94>uY`%`wDe;cX*?{es6T|fRwl3&x4sQlomfDni5y3 zX7%ZnUMFbepZZKO3lSU|-Xr+f($bPfC!l&_?PcE~9nHA}u%c)0ZUnS&`h#HBGyI8l z4$XCbI%yK)&6yX(OI>jwBiVsUF*@z-s&{J>zU=k_h!4^w zkKIOIAEv_)j2g-&D|3>F6?{xV;eIZ=pPmXmYOVQ2O-&7wK3la|P8psO0^xw&@0_`e z$W?Y&286en^GoVZ7{#_B_un}N5#sD?ea-=4a?!COb}(B6>ynV zTGb|_?K`K3TkEVnFOEEK%-7$vN62)>@>zsURWCJM6urEOW)UXmCtJ00hei-|N2|kG zN?C|b(96NZVw91E`A+!=JPKnqE|pnIxz8+Ph1_!B&JgtqrIXgCe{E*JHHmp~-2cNw zMH~O8WIPBtoe{T|nW;@wu|#frd496_bM=bUC}x5v1~R5f&F|-G*#N;F$)pi6ov;en z*>1zlyBLznls#etrRLMEeylT}cJ~cYQW{aOlM7MnTYIgIlR%`W+^FUu7usE(OxKc? z;Cs@tF2Qsas7Ej0w8_s%4_^!rk440_^uVpPudZ1ul)0YY=@8P>)03B%hur)*tA%_1 z_c~T1IiAwLa}tka>3pVxUD`>^)f11iC4*zUcA_I1xR^7yx!IfS5Nt!%Hk+BAK9BtM z7=tdI1~iWUA;yZ0BdIXBV>k^PWF3J5zUpD!&~A}D_$(y=BP^Gb2XK&bz;*t97GDVp zkWOx5jfM8`IeJod+CcLS9yqx)PHOMeMAbBrk}?_^8h1ioYt>35*n)7pJDx`}I}EG^ zZ25f;1dSd)e(ZtI2NbBbNTy*Xt5%KfZN*ww0c{b`t-CoBbgQtZTPuxJn2zTqy$TCs zXJB{&Htq{`pAtOw%iOn?BD5lkAaXQi=HTG?^@5yqKf0yKUyuj(I#9K6vb)g73(UnW zX#l6r#Yk{|a=%J`Il;bp<;=^kBa*crzb`oGL7yszF@gT>BW>ubz3_Xt2DB=>K&f1( zb@w_darl>B2Tr56eC0Eg>)Od*5N^*cEHqEE>$d)oBE_uvG6~t(yNZ{h?`Oz`qVF|l zN=;t%*(?USO&b0&Zj4Gyk&%(p#ZLEe$(flYwME>hXEJ0P<&=Aeb8jcQdql-x#8(zY z(QV;nK*1$R+aF0u(OJf-qi*b>^njk^Nd%1v2>CXr%4tkSyJ~}qZCz++XdwgLiSGhw$@qQ{0FP9zk$B(hPt27r5#Iu@@W(Rc z%+cNxMI=4)<8Z(R)}zs=#y5%YQ+Jco$&V)XkJI_t4 z@_^CX`7+6Od!aEwz^Thu1d?FA z&gE=YN3LHPwqEQ6g}Fa2SEe;#Og8KDnm<3W1?cuR0c4HauJ_FDhBMy#p`4nQX1g*L z-}MTcob!2i`@lt#Rt71b9h;?$ygWWa;Y@)04)!uD^4q3__SdC*#O;5Zc=;}81?Be^ zI~V97^-vJh=N-I{Cv(loX^EaF(05~)u7! z9da3R^WX|b{&@5}j{p%C6*j-M)qN2+RqePE&eAD63)YM(e`dAPi&1xv3nS;_lfOV@ zfQXavEQAFx{v}O90&107R~H`f!NRA#^iSx+Sj|~JEFkms|Mh*;m|rvSd_dgBq+Y~* zngAB9TX#tE^Yg)A02T+0T08%`S1TWl?-TRBUdQFVVUbd*{#tjwYh!$OeZT1a1^=%? zy){k*HwmUS!Cpw*07)NV&G*)PB+I?qfD3%rxz-9@-6(nS$KD&881EvpXG~>&{`ZKW zCH^bk?UN+XEeYDTk2Vh~s{5sX8_`0i4oyx@&I`|mR(pn(y77my0zGRP?%zuLtraa^ zbTO?7uSvTTo9~m%W`-+<>$&z9XI`%7Xuf^lWFX<(kFK0lt3uGZ|rYOyhLx%b^=@9-g5-ykzJ>!WNM z2=`|nznQGImsVeC0l!X=+1uik{-5GAtyeonj^wG6(Y!%?k`eq^xi?FzR`3)TC~~j( z_!^fbY;&Eds$(ZR%!J%vRnib4Tof^RVpCJ<#OW0-v-GEcfPer4V^_lY2}WXRI6$7t zst7{m`7Lq~TfHI%%rFTv^v?8IO~zfHJ5x0-2Gdoy8E+Yh!638n$IIHPz@h3JyS~J9 zkpm{Al2xUG(Ybk-2Z73dskHK$9}p6$Q}(v!7U10mExQX0dn$EFd*tzPM> z)7qnbT+#OBwgXd1h1KA%b){01QBK_+3R(mdTOkiOx#XQc&3>YRobqfdCVAx!pOCpoFT;~3dC9VxGJ(u+gFR_*%KWBOZuRE) zm(cqcZkvj-z`ZZCuL?QcxcN$0n7d_nz5^KE4N_HVI=aFSN!i)wb)6zjeBFK;QBh&+ zEOhNC(sL;+;%9xs!;wBMKV?&{3+uOpM=qVbnobtki|4yw_wMRT>-h4;Bl@}WQ#Z21 zWFdIq?b3P@lIA1_>-x|=6bfZQoSY z-`lBHYQHhox!b)q$atr21UiY+{WZ7MCdRpA+W?V!>L`)2zZQ_?OnC+B22z~JQ@v>Vm4o>tX`e}R{&=MsP zGtKU}4<7h3Pl9xFyaj7b#QdQ=(_e^nZeZOL!d7&|`ypk)Z7I-247$ZUw~d_ou%3`t=4Q z6s{t0(!_IgYEVP0=Q=_cbV_b^hIi<%tHUNMY;sFj89+khUDk&cF?fcHz+<9W3g!7| zY&>oiAbsos9CvbBW}ECRZ2AGq%ET$aHWU`r0Z*H2C(N<;pTu#y7UhKFcci&d1YlmCA1H#9e0H*;GD9cz(JyG0S1dC;oq+tP5-VcQrRt! zm)O3uv^&2#rJ3&TDclc<(51*X7mV1Es>S+i5t26;l`_?%(VyvVQ)v4)0xe8Ac`d&T z+E37FN3yE5Pd{dwEOTBF2Kp`PNCGUe0~x_gmmhR=h{rjxSYvQljtiO$Wi6$==ub%E zU;@D;Tzq!g($w}RnrOcJ(esZp;3?dVd+;{O>dl*Oe)8@Zj-`(mk-bC$M)Q9}FnOr> z1s!KA4wn~pwkbp3<9#9(vJAoZ2WPL(12vn?fnb)aaeJl~V0Ru&OiXRu=O9(*L?!fh zbpcJQsHD`LFC-|Kpc*3ajq=qUsC3Uv$bLKpk(Rlk;V2lQTSo0Yq~!fv-aFT0XJn-4 zXv?mEIBY!-u$C?GVT8VgtuV6*MDrV!hY1PYQO{GjQui`L2eXuPyj~^FuMKB!3}nhr zyPk`X$fO{V&Mn79w&#w?3b0~hqp$cBrj~o$urFq^Mj+5OlTJF?aq&`KePMg&Tn*Z= z&m!FkwaXJC16qS0G;6MQnZ5q3_rXv7)XwzwrnH3kgOSn?!wCXB2W69PGUY~p0dK_M z4*+{j9>>S4aAP9(BXFHI!}szmK;oEKB7r}@juZ{!O;bIEWGtuQU;&Li3|Uv+=Kt*! zM90OfytbVvk{ASbNj$;H8RN00p~J>XI6Ctx*1M@bHRRKNQDz|bFEO4Ld(`g_LO`|MsT+rwj8U2uE}pIumI2F+V8S6lG?jYbd({$pnaR<2BEZ z(@CK~>C5adj0un*&2YoeW)eoP<>fh+1f@|KjUITGVo;k6Awv8 zvpLLXJcBRow?-0}K4Upe2L^j_cHG+-7)-}XLR;=@`aX#xU=0Bax$)3**yb{j*}pbq z{w*MY05RRr@ByfKyazjPOkiWv0%Rc^Zy08zrZ#CLZL>FASh_hkT)i3w8XU+d5#UGc z|CC5jXzUBY&s`nN!kl2W=o5?>T>Cpwz6UE@9FLY|FRyz5h!|xt@OovuG&fI963ag; zk~QBsS)sY<`If`QY_5oTZ!P8I5BAjw{MYMYy(yxH6CPc@G4$Cfz@98Qpj!ONyHnL2 z9V>Lk4-%xwmyR6;98PSugR}uiBCzCD#?_evhfyCIM>7dDAXV`L?$d=%29RJL-3ln{ znCc&V8d-92i4!-#>w z^njB;>bF+j_Hw??6{74AEok~{gpQBiHCg(ba_X|#r&`x|1CH1?{)@k(n|(FGzQ7Sj zJ>PabK4ERS(qAfMAHUR{Acq@SiCuhNAl(r&4t+qj+Fq38izuM^2)KD6LqO`#%;7i3 zicg-1NLkY6NZ~A3*sa9r&=vpAULD}EJX_Ays%0|1DEtx?yC$HWbpJd+ z=09`AZq@xZ_x`><_*X+e{U2BV1g@DxZt#vpXu7DDcP0lT7%h~qE`LRJkk==1|OC#?u?J6}#^S`V+U)shKW_B9Xw zZ78>1=ac>%=64L@D+HVghBSaU@}T5vTuyasuW zctD!As{tm{^6~ugAheNxR;`AAnYoCwM75etl&Pe=$u2aAHy+BUpDzEHkBgc{z_Zft zKzYqx>?FOlc?nuS#v&*TJ%_?~u03e$se3=tLrH=^u{q6ZQBhy;D5t@y(xYl^4tMl5O6$LjLM>_ zh1EGP2tSLox3^!oYI#m>gJ|NVNBLA*gF=Rkp#7o$I<54vJ=J&6^l{`DXDb%|%xj12 zX3YwV8W)rllMq!(vTBiufZ4>z?Y%|0fh#-m6&?={an?*tHS=SOMyTerFc}qFUdXNZ zOF?Yr0@R`^Nl-7tue+!6I_^J39h(|yNQ1!`Uzj0Ujs%SmF+cNO=u;2Hfs)a1&79v- zLY2@hX#J~C59Tzl54Rbvr1?e0$4gt8pNz-m>W#oOG5?VrbH9DO z5@vw&(*sZf;K#VVcmW(IM!#wLh{;Hq4@-l%5|fs`?#EWky|z&6#VvGn^!N&!YNt~I z)VTTfkI(G-od5;i?RW==92H0!tFr`)CRJvEtXvXgDuu;)DqJ6%ny|7m;6d^3!2p&7 zt2rd@Ct6UI_+1@!61iI_=<$}axGhYcn^_2JYhZkVyA%NM?WaUA? zc#cYO$S-ttXC<~a!p;>UWbzG2$OitvSEf*3^7iKC!3HrS2`^el@85XTWTOrkb4c(P zVO^Yy8Rt=~in21^r;2uADUUJOWEVht$hcKCTpauYPAD)G3mFy=dhzYsU6>^$DL#jC zfY?MtR4w*%tAvC^%XhM?2$h196J!qvS5C;bH%1E$ys=5kofj}drQnmA@Q_ztTqhRx zmfjq#?4Fv+DfjTm!?2kLFPLJszRz(u6#5_6;A6+fpzvg-T+t}wR0CX21f3SZPjz*5 zo+sZQvUC;iN3g2F`HpdNgI@BXyTwhO;e;}n=|Y7!H#hO0gn`}UfpSb-2%FB&hlodu zZ+Wb_u(?bpWPbbUzGF~P8I538v)SlNGwi4R(Cq>6xCt@W&v!;+2hbaUWYrqvJI|yz zR0o#ZEUnAw*8MxJ;ZSb=EjhjaaDL-&vP3jn!;_vJF7vUc+JAKKz~Kmzh9B40qq;h8 zQB;GG5g}uv8ujRj#BPzis?6jBz?Y zM1;hQCFv}onX%jux&>?w4j~~5BO4F5821!5?_6zmd%^9?4$EGQjK|C3f@Pn5#|{bw z(q!0|#Tb$O{kw1Sz$xgxmbw$uO=;`Rrpolq%vxkWPmMf&vzY(M0W7z%cBBcAHqdK( z#k6<_lHgmG+rXcFP4E_p2+cDFG3DU$aurZgVsdW5?x4uakTh*(<}7j{y8%E@$Dle? zXJrwG!cBT!fK-WH=>%NhZV%D?aBT8D@24<;N2oICR`Gt-wK z1A!Kst$;*;`y$?>vAx}BGG_4JMMqCv9WX#cLqFg6KLXd%dHwWDX30)K=zH`A+ZSYe zd(Ee+9DpgR^hV90q~&(WqX^>Rgjgc?+SyH--pc+oI|q)c%yRB^Z7-vo|*zNtEVW;bu%Y+L6^1FbA^Bb(u$TM>hl zR5PdcpoW!Bc+d^4;@vn6k*ZsZTi*9c=cBkimJZ_iCg!LLD?hEUou63$9{-h+?f>~I z#XLx>nb3ksqvX#_Qq{2QseDtP4!`#?CIQ(*t@Qig>gxC}Uv6{+eg&HvAQaU#(EgX2 zz12Fr;4~$%HyMx7`SRwZuU7x>uN8KEHhL9Rzr6jQ5KY9I=)_rUeHYw4efl#$D08){ zLCZI%5&u;C1ANH`7*M&h5ZS9CG#$zpmQ4hs{dLfyfK;NO)(5n@;IV;eGY63!lj-AA z<4Odpbd%pXERVWgoHb{Um-5-I%M`xBdUio^LXA{S!_aWFximNq2Lpm5qz(UNq^Dno zWF+9^;j*o3(j92UDb(-!VFOE)+Rx%wS655TCqXpJe`q>4H|LE--nOeVGeaq8uG!XR zg{6>`izQc-e6_*+%o2VXPkn8-Q21MbV{9YV4Zi7;7W>?=0nSZy>u$K&+sCG+8!4jL zYM9YsHZLw+`Rq56S@-XWV;EJ1v$H)&(~oA;OK=i2oGJ*v>g^Plot?%HNXdn)(zTA! zHpxZ_d(z$og0R3HiIrE-w;DSr#lAP+Lj=5g?Vi=R=%kp{L$32H`#9|w*oN4v2SB} z)jwv`eST6aER0Pi_!}ctYr3Z4WD61@$OP=-7QDAawXSN^gPX4ue20MZ!CoI{%*&A8 zni?t#Ka`=xsx7mq*p5C3*T%go5&cUg^gF#sXK$g~l-2jH~ML|OF# z0VKsv#{DVib6LEdo!NMae@x7;JPhzMB{NAe@fv*#AQO0^#g)X_w(yRy!hY*77?Kf9 z>l-o0r!LwbtQLQ(RBV@I3OF3iT)+5%UlY$)TKnmk4Twvh?{hb~P!d@1$#qqKl7~!z zTum2{lEoR+QQ9t#YW^uwRuc908IR1>Vvy%{+*eL;!(O)cWdTYNth*(J#_K7D|5K8o-)Rm+U;o1bUXZ);Mmt|j zM8lFu{!cSqss6C3wx-&N#7lyYij~fO?_^NbcGZ_G)#~g|dRm%(t>d5h%!%tL;2a^C zAl2O?{52y2sa|WwjOz_HNI=HbD{PKOc5q?&9*|;{M$J|tG-(szD+^h2f2U_XfxHES zYG(n#JqV`I1@{UFt)R|rPAa9!vrfYj9JN5rbm{mR%G^Dw&wCZcyDV@ zkirn3AYO1QoAwH&3R!2>h%2}Ta^*%0-N_TI2Hy(1jfU5DvklFJ<%_CnCC<&I=6_7= z2uA7~y}8WB;!Yo&?WHfH0cBbd*sT_T0mVYC)I^_RAwy5lY+V^aVWS4XBq<37M`jaw z66BDz@?<{YaDjNT?$>l@srIU4Ze!Ky(tHM5N?uG>sv$1IK_OR05>Q+q|8oVlWpTZ{ zOQV7)oZWCLc@V^ANBt9H9L8^03G`0NS#O-K1;c&Q6~|Et)+G?hjO1BfIn#JFgU`gJ z#8kje!}tM&4+q%Huo>`ngl3JEUi*L{vWHeOfyyFbt0yn7R|nM_ipWzOyzcod=Y1RW zXr97#vh&M)JEB_kp+OKRVPtH~9^9+6v92|`g2|;3r8@!`d%I$mwHAG3+py)G`=l-B z)wS{{Y*=EeOVOz>k%)+5c*rov?Qo_Ha+GKV^n3UCZMXx&Q!50=NWb>xK|GC zLF^Zwublp{)G?5R;{+lOuTR$!{&?I1>(Aumb~lHAMs)8WmAj!?IaMN5$JEb?W9;A9UR#Gq@^XX zEioNm-P{R^sb^wMzAsBTAQLCRXq^OxwOkhUqNwxR%O3Wdaib*tC$L59ZE|u7^lT@) zX_3GO;uy3Kus*hl5-VuExxBo01~kf<>vPxzzS@)I0-q;+ouaJlYz=cWy? zyqA}*=P?|nR1rAO@cQLjEKi60Aqb`bsm+~&`i^gYpW;Nsb!S%(I^L7NAShIpa4jm!U+R41$1LE+w(NH-DyXlcCy)`)95dWc?n}aXP(awFa zHOX$Y|8V7zQE$Hd(o#1+4=smGP-LyuakAtbEfZ^j`gPGRvg;tEN_B4pEsb`gXhChu ziGM5st9p>jeU2^${*&dk)AdnnB`&TLE|e!SnO;LxNjW&Lm&762#EU$4d3jl;P6-78 zR7QiHza=`BR~C-=`K=dCHZ#A0o#pg!Z9HGc`IMwnrpG_tOaSQRQ}d0nqcIx_VQ=Lp0Icpr{dL#7FRG@dz%hP=aiJu%gDcGlt{4e+RR2 z**C4%weppAW~KT0vHY(U=(Ni&ODiU>qkLiTo~@!;T~p2*C_P5aNHQW6q)++si! zUweTKgHqetuz3szzJ)kKNmNu;7N_IOJQ(pDcISP-*hq+YDgR36WZw{eAOi|T$Z<RDHp zfe@&CWa+f7qcK=05xTj#P03Ms6 zNP5=i$;9uU4Lz)0P^q=8pW3g|uU0Wn2>m(nCx%10ct0??Rx(k@Wq#RI!K6y7_NVmC ze*++l9nJHbla)7aVn^^Smukuub%Lz#_YQO108-XN45awp71Q<$9~&eSo?EUBnYMmS zecM66{1uC|L6(w+!xpjt&awvn6xe^CM3UQq;L885r#i4GqBq=Cx82924PquwD+6govo9!E`P%l^T8J>S5fMn+_%yntVbR z7Z;J=ILtRGOg>tEkPCqskdZC<_c3aAW8A*M7i&-XyJm}w?i7?zoT9IU_!xvJsxM9||{ zbT22wdwDgFJWHtt@9y@@XXyST$hW4CmsgkXGGSn0kwPj#sDkTs4Laj5^>VhGFI)T* zM=ETM#f>}_mq$}jAJWs{)3`?+3-kcQ*_L(RNl#BVNK|nTqze4~eQu|bO|RWzA`aVi z=|J+=3TOdRuZw)z&o6H>d?p$XEH^2S<8P%_-hMW90qzhY-To`HMkFl`;gsCtKLYO; z+6hPsy}@6QQg6z>{+PP7#4-1X6UDCJ|h zI*-2j>5Iv9KD+3Bhnli7Zb-HP#D5L6ZzP`!@=kLOA90jmVPCYR*5^z*jg=Z3m}+P# z-*z;Q<8_z-*j78O!7S=Kt#MmJ{7bO@>h-r^{o})O55b+ySE+wyYV>0jrkk{!@Igpw zg2quPTfa@5%GZjGjqMia+oD_9IXC#T5V=GgM%1XHu#K@2NZo*ShVMgOjz}=N6}E-a zE*=-b;(E(mXNgg7sOr**{CxvGGZ}9TRs_fwTCTy|K9SQ zsM>ldXF`OeO_|NnB8&+n#3X59*D%yF)>tFsLWJEMtk>t4@!y7rT1)nH$dbdaOYMJ; zQ4=B=cphbez*LVWGOs@y0Ki$g>a0{-yC_~4+LXF@0z!J%pfLT>zi^Bu~ zq~|Yr(Pg8%mXaw#q&AQc0c2Wb_t)e^EEcio{}-6 zsHJf9)wQ+h%2?DR`j9!$TCNQVK|&FH_sTLRQB7F6qep;A$gEEV zSx6>R$qOE*W)t!eh>|>R`=N5R!vu*(_a1T|O^$Ps2+XP#n}9#*5g}ou3*C)?TG50( zcUWm^+4(CRt{*_Eg>2?q^L0=>2n`%raU-Mc?k^GsIuy?Jk9hSVg1Cdud~5jXSzg>~ zeq^x^@*63{vb6K=JUZj8>b|t*Wc_uKK^DL=F+kUUPI(i*LEgK(MV%zqF9^9})f_WasjV zQM9ZmEi)@+mEd>OnrjJRsui{jABI-Hvc4+PGS7W&zqK#Rs%L4ekK4PS8>+?`KgYu% zR8m6Rl9QMJz@3(s#>VhcYZE5xFd&-z?bjz1;hIY&ejox#1kKjcz!VkePoBW!ly_!r zX{ph`!@wX78FKJvwWQW(_NTiDxwKa&x++3?+jBjmE>TKG#tzHpw@7$;`lEyseZ0!% z6SCOQe#u15S(ET|+juO2ic^9GlOi9`*%JsLJ;80O{Pp8Uo?WL=vwDADW>%K{=71$s z2q4BgYTO!6Y{6tbXF6Tx8ZMr>IFhep1@)58Y3R4nARA%UPmhTzOaJTF&h&h9(L~|2 z{8Pg{=b^buIYy=)fiNEB(aA!^*4Mp7>``ShS>gie7+}+{%BpQ_blP8EnA?l^Oq~zO zj0fM@QLh_Dq2!vJpM1$REq6H$00S~4W%yK%eK+j?a>E0niQ1^Ae$>Arb0{;|im-z9 z!_X_HrrwQurZ7TeMFvkjkfG>}k6oP~%bCBB(Nm?D)!*Vy%JOW>Nf4vv%#A}cbDor8;HvN#QFJHjOSDVhR z_Y=Ihvy&68tr>2$HT(57;D)GB9d7rn!B)(Wsh`SGfqV~MoAuxKxj?%A)V5vsL~Wv2 z?Y@&!CBW_XK!zpnd>sWzlRV-A0s<=NyBp(NC&o?r`;Vtr`n%Te2S*YvvEf2S1Hloq zI^vBmr|MXV- z@F#*+++u>Vek`ypVMLc2fp?k#me3nHj$c1}+!nU-|FD3CH~u8S=YcbYCOSdkVeB6F z+qvmyegrOqg9n^pD#N+<=VRfhz(i1Cy+$>CG&XF@Y%O>C#Lbsj?K*eItvNBAk*&WQ zhAsU|6-WuFvE6fo9B%O9b&`MQaaPu6y+3yRr#u}Z9&HRhdbouGl|c^B*!62+ADi(k z_BRLpbcUWq3@&^QXM(T61eDMA@i6*%(YXk$nj)8Sh!@%qI{=@PrL>O|NoD$w~nfEd)t2%2?YV^22lw~0qK&K z?k?%>ZUO01y1To(ySuv^7TxiizVF`e`~96W#yNX9_8%g!*7H1T&U;?>b$>1qOnLr1 zprB(|@)NJVL%Tb%t#c4secR&-wzcA7^Fm9&bo9YU<3{=^_XTh<8}u*1;HhcC*90c& z3ehgm^uA4*asF(Zg+NWU?7Nz z{E@Z*P=-cdU4ZaLQ7dSCuvE$KaLmOzaqDgsYt+e=zF8nab6WuxR?OOC9e~X`-5}c@ z(v&jwrc$XkrL*p|M4^niNh6YaF$afX<9N2Y2U-E39Z6Z(4)nj>gLp^3Whv8{28R_J zgCrjqN(O@wR$JheR0b{r77@C+OeJ8ZY*=nE0gX;|v#EW?!ci7f1Ga{NZ|iQKtq7!v zTXw0I&ar5V4rbWx&K&g+f^L5O>g?raUpLVC=a&VV{QRB3>Dli73}(Lm z#6%ztUs0SMP-ltRAJDX`=L<34~q3t~mHo`^?0QEkT-UL4k)(`sVc5AnQsA*`?oz)3fM zL4)Lsi2c!7Bd32d1S`VZCnhQaj<`FjWhZ1j{2tvOw}&ndm;*hUJJ=nL0rJ3~g_T$A zYqMB~2N?NvJ^%7%ksp|ek^Ve_9zg(0dEa=N&FxirWdGa-{D3M|rcRqDZRSfZ z`X${7^c&y-1JfJ8A@eYv#9r-iFt2wRU!_>`RB_h_cxYf;GdTDuL|Ik$63Kn_SmLG7 zl@1%r?74La{MLZM3b*U*=%FGo3IdtnTOYVqJzxYDU4Zax25>6+lp_6LzI2sac?>vNGtm3HrH z8$Jg4s-<014+Kq=&3>PE<;1!$s~l`xSs$nlRepf+`$Fjq!4DNVRIQ#-fDWqp_1QLCk1PSmb*zEv!eV*k|dSek5>o zScL$<Lu z8H>eE%6f+p0B4Uh6u`3_eKQ42QdoljWpwYBx*Hk2YmJ9DIuzAcNPM+-pvjW=KfQ+Xzew3mldGan05%xrCKpI^Qj zVN2PL%FfJ2BILLjUTP@x7f+@Ke2RVrJNh2HiEC~)0sHyeup$|`NtXGJyu8;e@S*V} z3pHj(q$<;{`xi!5NeENuT-&<^D~hll5?LZ2sPB+kWd$WANlhMWjbzEd46)^`|DWL; z2^uRE{4)mrS#fl9bVt55nTg$VcF>6T;d)nDK{|p2k2EYjmufmUIy!n0oR|^t`1lBP zg0_WZW(RFVr03wrTFgrkglEe@}1s>2sa>sF{{zQ&;@SPW&ES$Lwr zU<52LbvtEvUs64yC_W5vk&n`iIqywqc7EU-(tv_?eI^7dcI!aeMQVr1OX z%(57}z+%0wd<58>8gq@D38S|!Qu!(K3GqQw1sKh=V5Z9W{6HVt?qK=6!w6#?M7E&EutzWr>1Kd__y%;Qw_kWMoanIH^lT66qGeYv(a#EmX5?=eYS-k zK$2jQDS8K?CcnheJE6LHq}zrsBf}&-r~huRC=DMTAD2;*b_H}w*Ic=>b>N&XDmn;q zj{u}M5#|qFHJG$jmcKBhb+TKD27YUP{+tJtfL)v5CycD-mKN?;H!V05IYvgtgzWCx zGslAru2EF^!1$S4@OQKVgn~JsKK~sF92_*11WoN|7V7MfkrZyw-8G-DO_LwMyr=*IA(zV) zK13nU$jI3_%U~#R4A2ki@0b%=pg~-~%`2qaLBX4$zfzGRz&ncq!T=Vv$`|uNY%RN8 zhI&9GTB^4{b-gkLFt@)2kFFIkO`7h7gP@_OYGB^`>Ufg6>~?qBtfF4$93>OJ$mp?+ zdnCN`t~+=*j`5d|52x$R$$Zs8U5}FpZAW9Y9hERT`evLGI8wL|Y=;!S6B8HXNa3gl z@bvhqgE1ybc<`WZuoU2HbOxDAeJRS#jD2393nkPAX7-Czr6&>+QVhozfHjZd1~pTV z(6ZI1qoV^dO9TvV;%-iQ?B6_C6%pVo%>-&1kLfJj0aLvwZ|#nk^?EMQR$20ej#$ECe#2+yOmjm4q7{3%0hw9*7L z%Cjit(-Wwa!|M(Ua&{O*xWU-BI99#$R{s=fb%<(>vG9VevE|^b)dQY$(?$9Vhxy4t zJJnrMK+^%LA4z=dDn;cF?L8nC_(3(<&Znymj3P7;5JmA13=x>Y# zTr6@m0Ny$2$<&+zN3~I(Ve7vm@5h{24i48~4lJlZ)WZ`pmD2P|n@7{f!E~itdTpje zN+B|okoD75m^N_fzPg7Wrwh>-E%)65xTX5@3~(-DcaCgs<{BUi+*W0;#&Ekblm^6W zlAdtBIpD}_gE#2?@h3ZG`(UPK#223dwtvW!)?$#6&T?fPjFUq$DsA z-tOTt63@!VwXm?!86b;pHoBL4a`JjPxwf{}IGXY3=!pK_#IYsY<_%zNPV@=X+#_2j zDjKeoMHCfLTgYvI2a1m`=n5Gcz`4kVv;QO~6K3Jz2VtEJC9(#2+!dJJBiWWKM$*PF zYUTkfDX_(gtsHvz_&x!jCmUOQz$-VHw2uY30s(N_%E_Z-!G#Eq#DPQjCrrXcG+|Q$gtWKT=%FQo+V?t7bwKU7*pmq{28OD*uU5R^fUc|o=8F<$=f`~<5c zOZEjfCMI%NBrFe7@GC0|vmOkIxl{!11-*9*NcNps){!i5i@@6lvc%GgF%+>-M+}n1 zzOu2gy-_ZQe5Iqq0f`s`$nYx#@RCI^7rPNGu>BheW%TCq>8M7~S=56O^$G zH|%05bh4}N8o+HE{s-S97Gy3Z?4bPhkP`W|R~SIJNd1K{VPBj$09S>Ux%sv;grdEaX|AVAZLeVGViOX?<5|l1 z?(G}hS7E+sofaxroSUk!v&>qoR7c@bpDF{#Js5V`BLd<|N=QgZhNcEsO3Fbz6S-!y z@f1b+VhRXOVnC6~y&m3SbOW?CU#_e$Juts!A09QkNDlMuLuI4vXCvExlg$20}>O}Kqs_zj09ft>H@YBe89FIL0uT4R{-JHf&hi)zxLPjVm~ekcsX{Tc*vW5AFDPhZrGu z(U6*%8F||rrRM`_df?)=2>|0}G7G^C!`RZE<$_lF?iBq469S!I$*zOFVRmoj+g%@S%6w0R zU7dFA0G>ko_z~Uc)ZJ`L7w5WMZ*jQ^Z9x&l*8gk?bc`nfgSmk>7_PgeYj3=UQ$cXg zWWL$uLzgIN9&ikGccuYj>SBR~46N=#CXUDJEs&)JXe9kl&}>F=j}4G#myXw6frBom zS)zS$ITPV=&=0NByh444i?KDlmizLf!f3xo)BDV-`{X#^NzbgS_Y4wuKx7(XE{1sn9*Q2FFW zjWxuGiAy|YR*}81-gOdDpb38}odof7)}GNSBQHx3fU4f+Pqvz>Kf;WHDavkr5gQa# zP&%HOnF+eo6Q8x;aJZqPqJAiTO6T_QwdD9_{1XT$pL?z+aTpAa7Ce4pG=O7^e#<@t zQeyGr)8QFlVk_t_E*>+`1^m8&;ZNbhu#3)d0q?^9`keck3&!1U|=%;vPN8+wy0!7-ZCBP%)5bbqB-o(o#!5}^tAx3^`yF2rp+ zE`OUvakJa2sTH*)jT)9>ZbEy$rAE=^8HJm`f5cvGVfMpp=u`KS3yqkVtD9R4m1?tL zo2zFQAY{6I+%3EZFgFmY*%OMg^I-1;9!#c)w}4Za%t;Ah4kQ0dC;GHdbpZ69gMRoB ziBEy#qm zb8n*kt?>D&lMCS6zSL2#x6j}f1`-B3syh=h>QvWhGaBzV59GE)L@7Tr&kk8quH zp4tGq9$KWjC1Hs~z|}s+qI_7nIle`S{wPPTnT!#Xo?NJ53-o0St7&HQ3p4kP>>;so zAierYU}L&p^{;&t3e<>`P&kO0!m76axl^%YaJKJ~5*Z1yE#N@F3;=so8ZN8R8*HVX z_y>dq1yKscRC@jWV0yj^{r&s*wAnm;FQ`Sw^X(FHBnbna>QIP?JWfv5g$Q#_du5LC`@mT>0f=^s zGlrLNAju%Kb!Fw^!gj31Y+_*2qxJncd=&XaaCoWwi(SNTYtmPoK+{7}01T418M_Fp z;GhbFcZ-UPIXyW{4D1ib_H?dK{xsq@`%56o?-eW(>eg-MNIk2~PFz$8z!O*gE(iqn zykrpl0>3kViHDB0?Vxow7#6zHB2Xfkg8E_j2mCGXiVu86EFWy%DiM|VcyJySaIUXy zZ5m=7b=WOla$an<^LD7FCSk0yQIr-U0S$>71v5%e$x9HhR~k)p=S!GLPYVu}#Go?C zuYqaDzxFbi%cl-M05rogMQvW+0Yj!B1x?vgYQy-^SNtNO_YCBmTt*fZYSewW7hVNG z)GY^X|6jkL`@imepru_&<#}}{maAH04n~$$R8%gS<>jQ_LH6@Mr29o@JW3LY`#jj9 zHdIztLb%;GO{}7cJUuVyK%vd5pti3xr6bcmHDv~5zINE!FZs2jZDy@(Wqt;hYdgEHI?Q0~rYPSk0rI8PccZ{1 zu_X%ztI`D|<`nb)dQ~4#ZCZJpulCR97lLZ!mVpb-9x^x3Nyf?=*BmxZ(&G-#b#Zxl z`Q2yG7LCSLMvfgx-cAmMn+C4O>0HMbPf{wB_UuM4i0Vyl4+=>wipnRbCdCX z_bG-_vDnqg1~5&WZ$tu>ce&vw6XjB$d;7N`Rm&fzv5G1SpgXGx3g!01d?Ck35 zDsUu%WZbHggC)!yaItroS5q-X`5kZWk%@XFW0hiynZeu$(lbG`!L@{juHcB)%X-a6 zml7Enj`Gb}Nr*TB0SMJYG&7?{v;%Q$jLs4L0|Te-!dvB-b&*jK5jm6>2l2O*6taO) zch43DgJDFTTfqZmuFfi{pRt2h(z_(o*&Na@6ae}}TwPp1KtNeIAUUFNBzLeYcvs*J zGBPqee0J;b?O+_4%vtSIBqAQOvg*vp*kO(&q(dm|c%i0+{H_t7+uiE}#@%exh;z@j za!PzviYs?reI1xYz5_Uj!gt4ub(B=AsVxf9(qnBrZ6K#{Hzr;u&`-4nvUq2qN!D8e zhBol*4#`Et?{-6j{XzT1{j%Q$XgF^?a&svBrNPRf*N?loOoV}Ry1bL3Y^PFlu(@Ur zqDP}0ae!ub93|7fphTl*-k93jh25jZ-Pr^x9hyu8xB>(pw7pRVyJ_h zr8rIO9ux#9-{wa%UJl?A&eeF�>S$R=ReH)In4&SHnh{;|jJv7vxUnUZ&Jlws&-J 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�wFl;sR;>}fQm^;)dzIen*S>+ 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

-XeqscILh?16s67wG#p^I8TCzT60lZD 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

QI;8G3pF|4A%bixQ^`L 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%0Amz6ygy9 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 ? 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 literal 0 HcmV?d00001 diff --git a/docs/design/mobile-prototype/codeg-mobile-prototype-preview.png b/docs/design/mobile-prototype/codeg-mobile-prototype-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..ff96735a4c0cc65ca8e2ebbcf14fa4903cb54cd3 GIT binary patch literal 270618 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

9@BTS*SBg@u#`$2d+syH+fBfB*AO|_x# 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 literal 0 HcmV?d00001 diff --git a/docs/design/mobile-prototype/codeg-mobile-prototype.html b/docs/design/mobile-prototype/codeg-mobile-prototype.html new file mode 100644 index 000000000..dfefc455b --- /dev/null +++ b/docs/design/mobile-prototype/codeg-mobile-prototype.html @@ -0,0 +1,192 @@ + + + + + + + + Codeg Mobile 原型评审台 + + + +

+
+ +
Codeg Mobile
双平台产品原型
+
可交互
+
+ + +
+
+ +
+ + +
+
最近会话
打开应用后直接回到上次任务,输入与执行状态保持在同一工作面。
iOS 44ptAndroid 48dp
+
+
iPhone 15 Pro390 × 844
+
Pixel412 × 900
+
+
+ + +
+ +
对话优先10 个核心场景双平台双主题动效 150-220ms
+
+ + + diff --git a/docs/design/mobile-prototype/codeg-mobile.css b/docs/design/mobile-prototype/codeg-mobile.css new file mode 100644 index 000000000..0d446895d --- /dev/null +++ b/docs/design/mobile-prototype/codeg-mobile.css @@ -0,0 +1,51 @@ +:root{ + --app-bg:#0B0F14;--surface:#111820;--surface-2:#17212B;--input:#141C25; + --border:#263241;--border-strong:#38506A;--text:#F4F7FA;--text-2:#9AA9B8; + --text-3:#697887;--accent:#5EA2FF;--accent-active:#4388E8;--success:#38D39F; + --warning:#F6B84A;--danger:#F06A6A;--inactive:#778493;--accent-on:#07111d; + --shadow:0 18px 54px rgba(0,0,0,.28);--r-sm:8px;--r-md:12px;--r-lg:16px; + --font-body:Inter,"SF Pro Text","PingFang SC","HarmonyOS Sans",system-ui,sans-serif; + --font-display:Inter,"SF Pro Display","PingFang SC","HarmonyOS Sans",system-ui,sans-serif; + --font-mono:"JetBrains Mono","SF Mono",Menlo,monospace; +} +[data-theme="light"]{ + --app-bg:#F4F7FA;--surface:#FFFFFF;--surface-2:#EAF0F5;--input:#F0F4F8; + --border:#CBD6E1;--border-strong:#96ABC0;--text:#111820;--text-2:#526579; + --text-3:#728397;--accent:#176FD1;--accent-active:#115FB6;--success:#148764; + --warning:#A86406;--danger:#C83E45;--inactive:#697887;--accent-on:#FFFFFF; + --shadow:0 18px 46px rgba(20,42,64,.12); +} +*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--app-bg);color:var(--text);font-family:var(--font-body);font-size:15px} +button,input,textarea{font:inherit;color:inherit}button{border:0}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px} +.app{height:100dvh;min-height:560px;display:flex;flex-direction:column;background:var(--app-bg);position:relative;overflow:hidden} +.statusbar{height:29px;padding:7px 18px 0;display:flex;align-items:flex-start;justify-content:space-between;font:600 11px/1 var(--font-mono);flex:none}.status-icons{display:flex;gap:6px;color:var(--text-2)} +.topbar{min-height:62px;padding:8px 14px 10px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--border);background:color-mix(in oklab,var(--app-bg),transparent 6%);flex:none} +.brandmark{width:32px;height:32px;border:1px solid var(--border-strong);border-radius:10px;display:grid;place-items:center;font:700 14px var(--font-mono);color:var(--accent);background:var(--surface)} +.titlegroup{min-width:0;flex:1}.title{font-size:16px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.subtitle{margin-top:3px;display:flex;align-items:center;gap:6px;color:var(--text-2);font-size:12px}.dot{width:7px;height:7px;border-radius:50%;background:currentColor}.online{color:var(--success)}.warning{color:var(--warning)}.danger{color:var(--danger)}.muted{color:var(--text-3)} +.icon-btn{width:44px;height:44px;border-radius:12px;background:transparent;color:var(--text-2);display:grid;place-items:center;cursor:pointer;transition:background 180ms ease,color 180ms ease}.android .icon-btn{width:48px;height:48px}.icon-btn:active,.icon-btn.active{background:var(--surface-2);color:var(--text)} +.svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round} +.status-entry{height:44px;padding:0 12px;border-radius:12px;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;gap:8px;cursor:pointer;color:var(--text-2);font-size:13px;white-space:nowrap}.android .status-entry{height:48px}.status-entry strong{color:var(--text);font:650 13px var(--font-mono)} +.status-row{display:flex;gap:8px;padding:10px 14px;background:var(--app-bg);border-bottom:1px solid var(--border);flex:none}.status-row .status-entry{flex:1;justify-content:center} +.main{min-height:0;flex:1;overflow:auto;overscroll-behavior:contain;padding:14px 14px 116px;scrollbar-width:none}.main::-webkit-scrollbar{display:none}.main.center{display:grid;place-items:center;padding-bottom:20px} +.section-label{margin:8px 2px 10px;color:var(--text-3);font:600 11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase}.divider{height:1px;background:var(--border);margin:12px 0} +.message{margin-bottom:14px;max-width:92%}.message.user{margin-left:auto}.bubble{padding:11px 13px;border-radius:16px;background:var(--surface);border:1px solid var(--border);line-height:1.5}.user .bubble{background:var(--accent);color:var(--accent-on);border-color:transparent;border-bottom-right-radius:5px}.agent .bubble{border-bottom-left-radius:5px}.message-meta{margin:5px 4px 0;color:var(--text-3);font-size:11px}.user .message-meta{text-align:right} +.timeline{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}.step{min-height:50px;padding:10px 12px;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--border)}.step:last-child{border-bottom:0}.step-icon{margin-top:2px;width:22px;height:22px;border-radius:7px;border:1px solid currentColor;display:grid;place-items:center;flex:none;font:700 11px var(--font-mono)}.step-body{min-width:0;flex:1}.step-title{font-size:14px;font-weight:600}.step-sub{margin-top:3px;color:var(--text-2);font:12px/1.35 var(--font-mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.step-time{color:var(--text-3);font:11px var(--font-mono)} +.log{margin-top:8px;padding:10px;border-radius:8px;background:var(--app-bg);border:1px solid var(--border);font:11px/1.6 var(--font-mono);color:var(--text-2);white-space:pre-wrap}.hidden{display:none!important} +.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px;margin-bottom:12px}.card.attention{border-color:color-mix(in oklab,var(--warning),var(--border) 45%)}.card.danger-card{border-color:color-mix(in oklab,var(--danger),var(--border) 40%)}.card-head{display:flex;align-items:flex-start;gap:10px}.card-icon{width:34px;height:34px;border:1px solid currentColor;border-radius:10px;display:grid;place-items:center;flex:none}.card-title{font-size:15px;font-weight:650}.card-copy{margin-top:4px;color:var(--text-2);font-size:13px;line-height:1.45}.codebox{margin:12px 0;padding:10px 11px;background:var(--app-bg);border:1px solid var(--border);border-radius:10px;color:var(--text-2);font:12px/1.45 var(--font-mono);overflow-wrap:anywhere}.risk{display:flex;gap:8px;align-items:flex-start;color:var(--text-2);font-size:12px;line-height:1.4;margin:10px 0} +.actions{display:flex;gap:8px;margin-top:12px}.btn{min-height:44px;border-radius:12px;padding:0 14px;background:var(--surface-2);border:1px solid var(--border);font-size:13px;font-weight:650;cursor:pointer;flex:1}.android .btn{min-height:48px}.btn.primary{background:var(--accent);color:var(--accent-on);border-color:transparent;box-shadow:0 8px 20px color-mix(in oklab,var(--accent),transparent 78%)}.btn.primary:active{background:var(--accent-active)}.btn.danger-btn{color:var(--danger)}.btn.compact{flex:0 0 auto;padding:0 12px} +.choice{min-height:48px;margin-top:8px;border:1px solid var(--border);border-radius:12px;padding:10px 12px;display:flex;align-items:center;gap:10px;cursor:pointer;background:var(--app-bg)}.choice.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.radio{width:18px;height:18px;border-radius:50%;border:2px solid var(--border-strong);display:grid;place-items:center;flex:none}.selected .radio:after{content:"";width:8px;height:8px;border-radius:50%;background:var(--accent)}.recommended{margin-left:auto;color:var(--accent);font:600 11px var(--font-mono)} +.composer{position:absolute;left:0;right:0;bottom:64px;padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:var(--app-bg);border-top:1px solid var(--border);display:flex;align-items:flex-end;gap:8px}.composer-box{flex:1;min-height:46px;max-height:104px;background:var(--input);border:1px solid var(--border);border-radius:14px;display:flex;align-items:flex-end}.composer textarea{width:100%;min-height:44px;max-height:96px;resize:none;background:transparent;border:0;outline:0;padding:11px 2px;font-size:16px;line-height:1.4}.send{width:44px;height:44px;border-radius:13px;background:var(--accent);color:var(--accent-on);display:grid;place-items:center;cursor:pointer;flex:none}.android .send{width:48px;height:48px}.send.stop{background:var(--danger);color:var(--accent-on)} +.bottomnav{height:64px;position:absolute;left:0;right:0;bottom:0;border-top:1px solid var(--border);background:var(--surface);display:grid;grid-template-columns:repeat(3,1fr);padding-bottom:env(safe-area-inset-bottom)}.navitem{background:transparent;color:var(--text-3);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:10px;min-width:44px}.navitem.active{color:var(--accent)}.navitem .svg{width:19px;height:19px}.android .bottomnav{height:72px}.android .navitem{min-width:48px} +.field{margin-bottom:14px}.field label{display:block;margin:0 0 7px;color:var(--text-2);font-size:13px;font-weight:600}.field input{width:100%;height:48px;border:1px solid var(--border);border-radius:12px;background:var(--input);padding:0 12px;font-size:16px;outline:0}.field input:focus{border-color:var(--accent)}.help{margin-top:6px;color:var(--text-3);font-size:11px;line-height:1.4}.form{width:min(100%,430px)}.form h1{font-size:26px;letter-spacing:-.02em;margin:0 0 8px}.form-intro{margin:0 0 22px;color:var(--text-2);line-height:1.5}.secure{display:flex;align-items:center;gap:8px;color:var(--text-2);font-size:12px;margin:14px 2px} +.logo-large{width:72px;height:72px;border:1px solid var(--border-strong);border-radius:22px;display:grid;place-items:center;font:700 28px var(--font-mono);color:var(--accent);background:var(--surface);box-shadow:var(--shadow)}.splash{text-align:center}.splash h1{font-size:24px;margin:18px 0 4px}.splash p{margin:0;color:var(--text-2);font-size:13px}.loader{width:112px;height:3px;border-radius:99px;background:var(--border);margin:24px auto;overflow:hidden}.loader:after{content:"";display:block;width:46%;height:100%;background:var(--accent);animation:load 1.5s ease-in-out 3}@keyframes load{0%{transform:translateX(-110%)}100%{transform:translateX(240%)}} +.summary{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px}.summary-item{padding:12px;border:1px solid var(--border);border-radius:14px;background:var(--surface)}.summary-value{font:700 22px var(--font-mono);margin-bottom:3px}.summary-label{color:var(--text-2);font-size:12px} +.list{border-top:1px solid var(--border)}.list-item{min-height:68px;padding:12px 2px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:11px;cursor:pointer}.list-icon{width:38px;height:38px;border-radius:11px;border:1px solid var(--border);background:var(--surface);display:grid;place-items:center;flex:none;color:var(--text-2)}.list-main{min-width:0;flex:1}.list-title{display:flex;gap:8px;align-items:center;font-size:14px;font-weight:620}.list-copy{margin-top:4px;color:var(--text-2);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.list-meta{color:var(--text-3);font:11px/1.45 var(--font-mono);text-align:right}.badge{display:inline-flex;align-items:center;gap:5px;min-height:22px;padding:2px 8px;border:1px solid currentColor;border-radius:99px;font:600 10px var(--font-mono);white-space:nowrap}.badge:before{content:"";width:6px;height:6px;border-radius:2px;background:currentColor}.count{min-width:20px;height:20px;padding:0 6px;border-radius:99px;background:var(--warning);color:var(--accent-on);display:grid;place-items:center;font:700 10px var(--font-mono)} +.search{height:44px;border:1px solid var(--border);border-radius:12px;background:var(--input);display:flex;align-items:center;gap:8px;padding:0 12px;color:var(--text-3);margin-bottom:12px}.search input{flex:1;border:0;outline:0;background:transparent;font-size:14px}.android .search{height:48px}.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.toolbar h1{font-size:23px;margin:0}.segmented{display:flex;gap:4px;padding:4px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.segment{height:36px;padding:0 12px;border-radius:8px;background:transparent;color:var(--text-2);font-size:12px}.segment.active{background:var(--surface-2);color:var(--text)} +.banner{display:flex;gap:10px;align-items:flex-start;padding:11px 12px;margin-bottom:12px;border:1px solid var(--border);border-radius:13px;background:var(--surface);color:var(--text-2);font-size:12px;line-height:1.4}.banner strong{display:block;color:var(--text);font-size:13px;margin-bottom:2px}.banner.success-banner{border-color:color-mix(in oklab,var(--success),var(--border) 55%)}.banner.warning-banner{border-color:color-mix(in oklab,var(--warning),var(--border) 55%)} +.progress{height:5px;border-radius:99px;background:var(--border);overflow:hidden;margin-top:10px}.progress span{display:block;width:64%;height:100%;background:var(--accent)} +.theme-switch{width:44px;height:28px;padding:3px;background:var(--surface-2);border:1px solid var(--border);border-radius:99px;display:flex;align-items:center}.theme-switch span{width:20px;height:20px;border-radius:50%;background:var(--text-2);transition:transform 180ms ease}.light .theme-switch span{transform:translateX(16px);background:var(--accent)} +.server-card{padding:14px 0;border-bottom:1px solid var(--border)}.server-top{display:flex;align-items:center;gap:10px}.server-name{font-weight:650}.server-address{margin-top:4px;color:var(--text-2);font:11px var(--font-mono)}.server-stats{display:flex;gap:12px;margin:12px 0;color:var(--text-2);font-size:12px}.server-actions{display:flex;gap:8px}.empty-space{height:8px} +@media(max-width:360px){.status-entry{padding:0 8px;font-size:12px}.main{padding-left:10px;padding-right:10px}.card{padding:12px}.actions{flex-wrap:wrap}.actions .btn{min-width:44%}} +@media(orientation:landscape) and (max-height:560px){.statusbar{display:none}.topbar{min-height:54px}.main{padding-bottom:84px}.composer{bottom:0}.bottomnav{display:none}} +.embedded .statusbar{display:none} +@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}} diff --git a/docs/design/mobile-prototype/codeg-mobile.js b/docs/design/mobile-prototype/codeg-mobile.js new file mode 100644 index 000000000..d911d2b89 --- /dev/null +++ b/docs/design/mobile-prototype/codeg-mobile.js @@ -0,0 +1,39 @@ +const icons={ + back:'', + menu:'', + chevron:'', + plus:'', + send:'', + stop:'', + chat:'', + tasks:'', + settings:'', + attach:'', + search:'', + refresh:'' +}; +const qs=new URLSearchParams(location.search);const boot=window.CODEG_BOOT||{};const platform=document.body.dataset.platform||'ios';const embedded=qs.get('embedded')==='1'||boot.embedded===true;let screen=qs.get('screen')||boot.screen||'session';let savedTheme='';try{savedTheme=localStorage.getItem('codeg-theme')||''}catch(e){}let theme=qs.get('theme')||boot.theme||savedTheme||'dark';let selectedChoice=0;let testState=0; +const app=document.getElementById('app'); +function statusbar(){return `
${platform==='ios'?'9:41':'9:41'}${platform==='ios'?'▰':'87%'}
`} +function topbar(title='Poisoner Studio',sub='在线 · 32 ms',back=false,action='menu'){return `${statusbar()}
${title}
${sub}
`} +function nav(active='chat'){return ``} +function statusRow(){return `
`} +function composer(running=true){return `
`} +function timeline(expanded=false){return `
正在分析
定位 ACP 调用后提前退出的条件
4s
正在读取文件
src-tauri/src/acp/connection.rs
8s
${expanded?'✓':'↻'}
正在运行测试
cargo test acp_connection
test acp::connection::resume ... ok\ntest acp::connection::cancel ... ok\n2 passed · 0 failed · 4.8s
${expanded?'5s':'现在'}
`} +function sessionView(mode='session'){const running=mode!=='question';return `${topbar()}${statusRow()}
修复 ACP 调用后 Agent 提前停止的问题,并补充断线恢复测试。
你 · 09:38
我会先检查 WebSocket 与 ACP 连接日志,再定位任务状态被提前标记完成的位置。
Claude Code · 09:38
${mode==='approval'?approvalCard():mode==='question'?questionCard():timeline(mode==='running')}
${composer(running)}${nav('chat')}`} +function approvalCard(){return `
!
需要写入权限
Agent 准备修改 ACP 连接恢复逻辑。
src-tauri/src/acp/connection.rs
src-tauri/src/acp/session.rs
普通文件写入。变更仅影响 ACP 会话连接,可在 Git 中撤销。
`} +function questionCard(){return `
?
测试范围需要确认
恢复连接后,是否同时重放未确认的工具事件?
只重放未确认事件,避免重复输出推荐
重放最近 30 秒全部事件
不重放,只请求最终状态
`} +function splashView(){return `
C

Codeg Mobile

正在连接 Poisoner Studio

恢复最近会话与任务状态…

`} +function connectView(){const states=[['测试服务器连接','muted'],['正在验证…','warning'],['连接成功 · 32 ms','online'],['Token 无效','danger'],['服务器不可达','danger']];const s=states[testState];return `${topbar('连接 Codeg','安全连接',true,'settings')}

连接你的 Codeg

任务在电脑或服务器上运行,手机只负责安全地创建、查看与批准。

必须使用 HTTPS;局域网证书需要系统信任。
Token 将保存到系统安全存储,不会写入应用日志。
由 ${platform==='ios'?'iOS Keychain':'Android Keystore'} 加密保护
`} +function tasksView(){return `${topbar('任务中心','3 个节点在线',true)}
2
▶ 运行中
1
◆ 等待批准
12
✓ 已完成
1
! 连接异常
${taskItem('◆','等待批准','需要允许修改 src-tauri/src/acp/connection.rs','Poisoner Studio · Claude Code','warning','approval','刚刚')}${taskItem('↻','正在运行测试','修复 ACP 调用后 Agent 提前停止的问题','Mac Studio · Codex','online','running','12 秒')}${taskItem('↻','正在检查日志','检查 WebSocket 断线恢复与事件去重','Build Server · OpenCode','online','reconnect','1 分钟')}
${taskItem('✓','已完成','测试已通过,可以提交代码','Poisoner Studio · Claude Code','muted','session','18 分钟')}
${nav('tasks')}`} +function taskItem(symbol,stage,title,meta,color,go,time){return `
${symbol}
${title}
${stage} · ${meta}
${time}
`} +function sessionsView(){return `${topbar('会话','Poisoner Studio',true)}

全部会话

${conversationItem('修复 ACP 调用后 Agent 提前停止的问题','正在运行测试 · Claude Code','12 秒','online',0)}
${conversationItem('检查 WebSocket 断线恢复','已恢复连接,继续读取日志','18 分钟','muted',0)}${conversationItem('优化移动端权限确认流程','等待你选择测试范围','昨天','warning',2)}
${conversationItem('更新 Codeg 服务器配置文档','测试已通过,可以提交代码','周一','muted',0)}
${nav('chat')}`} +function conversationItem(title,copy,time,color,count){return `
${icons.chat}
${title}${count?`${count}`:''}
${copy}
${time}
`} +function reconnectView(){return `${topbar('Poisoner Studio','离线 · 保留当前上下文',true)}
继续检查断线恢复逻辑,确认锁屏返回后不会重复执行工具调用。
尚未发送 · 已保存在本机
正在重新连接
第 3 次尝试 · 下一次将在 4 秒后开始
WebSocket:等待握手
HTTPS:服务器暂时不可用
会话游标:event_01842(已保存)
${composer(false)}${nav('chat')}`} +function serversView(){return `${topbar('服务器管理','3 个已保存节点',true,'settings')}

Codeg 节点

${serverCard('Poisoner Studio','https://codeg.poisoner.cn','在线','32 ms','刚刚',true)}${serverCard('Mac Studio','https://mac.local.codeg.dev','在线','18 ms','2 分钟前',false)}${serverCard('Build Server','https://build.codeg.team','不可达','-','昨天',false)}
${nav('settings')}`} +function serverCard(name,address,state,latency,last,current){return `
${state==='在线'?'●':'!'}
${name}${current?' · 当前':''}
${address}
${state}
延迟 ${latency}最后连接 ${last}
${current?'':``}
`} +function settingsView(){return `${topbar('设置','Codeg Mobile',true,'settings')}
深色与浅色主题
当前:${theme==='dark'?'深色':'浅色'} · 跟随系统可在开发版启用
${conversationItem('服务器管理','保存、测试并切换 Codeg 节点','3 个','online',0)}
等待批准通知
已开启 · 通知到批准最多三步
开启
前台恢复
锁屏返回后自动校验会话游标
开启
${nav('settings')}`} +function render(){document.documentElement.dataset.theme=theme;document.body.className=`${platform} ${theme}${embedded?' embedded':''}`;const views={splash:splashView,connect:connectView,session:()=>sessionView('session'),running:()=>sessionView('running'),approval:()=>sessionView('approval'),question:()=>sessionView('question'),tasks:tasksView,sessions:sessionsView,reconnect:reconnectView,servers:serversView,settings:settingsView};app.innerHTML=(views[screen]||views.session)();bind()} +function bind(){app.querySelectorAll('[data-go]').forEach(el=>el.onclick=()=>{screen=el.dataset.go;history.replaceState(null,'',`?screen=${screen}&theme=${theme}`);render()});app.querySelectorAll('[data-choice]').forEach(el=>el.onclick=()=>{selectedChoice=+el.dataset.choice;app.querySelectorAll('.choice').forEach((x,i)=>x.classList.toggle('selected',i===selectedChoice))});app.querySelectorAll('[data-action]').forEach(el=>el.onclick=()=>act(el.dataset.action,el))} +function act(action,el){if(action==='theme'){theme=theme==='dark'?'light':'dark';try{localStorage.setItem('codeg-theme',theme)}catch(e){}render()}if(action==='test'){testState=(testState+1)%5;render()}if(action==='toggle-log'){el.querySelector('.log')?.classList.toggle('hidden')}if(action==='retry'){document.getElementById('restored')?.classList.remove('hidden');el.textContent='已恢复'}if(['allow','always','reject','submit-answer'].includes(action)){el.closest('.card').innerHTML=``}if(action==='stop'){if(confirm('停止当前任务?已完成的文件修改会保留。')){el.classList.remove('stop');el.innerHTML=icons.send}}if(action==='send'){el.closest('.composer').querySelector('textarea').value=''}} +render(); diff --git a/docs/design/mobile-prototype/critique.json b/docs/design/mobile-prototype/critique.json new file mode 100644 index 000000000..4c267c7fa --- /dev/null +++ b/docs/design/mobile-prototype/critique.json @@ -0,0 +1,26 @@ +{ + "kind": "critique-panel", + "score": 4.8, + "axes": { + "clarity": { + "score": 5, + "notes": "双平台工作台首屏直接呈现真实会话界面,设备与场景关系清楚。" + }, + "hierarchy": { + "score": 5, + "notes": "场景导航、双端对照和检查器保持稳定三栏层级,没有因修复改变信息结构。" + }, + "typography": { + "score": 5, + "notes": "原有开发者工具字阶与中英文排版完整保留,长任务文案无裁切。" + }, + "motion": { + "score": 4, + "notes": "场景和主题切换采用确定性页面刷新,反馈清晰且无持续装饰动画。" + }, + "brand": { + "score": 5, + "notes": "克制深色、单一蓝色操作强调和细边框层级保持一致。" + } + } +} diff --git a/docs/design/mobile-prototype/mobile-android.html b/docs/design/mobile-prototype/mobile-android.html new file mode 100644 index 000000000..8d8c2c269 --- /dev/null +++ b/docs/design/mobile-prototype/mobile-android.html @@ -0,0 +1,14 @@ + + + + + + + Codeg Mobile · Android + + + +
+ + + diff --git a/docs/design/mobile-prototype/mobile-ios.html b/docs/design/mobile-prototype/mobile-ios.html new file mode 100644 index 000000000..5406fac5a --- /dev/null +++ b/docs/design/mobile-prototype/mobile-ios.html @@ -0,0 +1,14 @@ + + + + + + + Codeg Mobile · iOS + + + +
+ + + diff --git a/docs/mobile-stability-port.md b/docs/mobile-stability-port.md new file mode 100644 index 000000000..9f54e4ea3 --- /dev/null +++ b/docs/mobile-stability-port.md @@ -0,0 +1,22 @@ +# Mobile stability port inventory + +Baseline: `xintaofei/codeg@v0.20.3` (`7c48df5ac4aa56912436983447af5b1ba061f3de`). + +The mobile repository starts from the upstream tag, not from the customized +desktop checkout. Only transport behavior that is required by a remote mobile +client is retained: + +- WebSocket `__ready__` handshake before commands that can emit early events. +- Subscribe-with-snapshot and replay support in `WebEventStream`. +- Reconnect health state, bounded health probes, and exponential backoff. +- Transport reconnect callbacks so conversation state can be re-fetched. +- Long web-call timeout matching the ACP probe deadline. +- Existing long-conversation virtualization and pagination behavior. + +Desktop-only customization is intentionally excluded from the mobile shell: +ACP and Agent processes, PTY, sidecars, terminal, local Git/filesystem runtime, +tray, updater, single-instance, pets, and multi-window state. + +Any future port from `codeg-custom` must be recorded here with its source +commit, affected protocol invariant, and a regression test. UI-only or +desktop-runtime changes must not be copied wholesale. diff --git a/docs/plans/codeg-mobile.plan b/docs/plans/codeg-mobile.plan new file mode 100644 index 000000000..64a01ec6a --- /dev/null +++ b/docs/plans/codeg-mobile.plan @@ -0,0 +1,289 @@ +# Codeg Mobile 实施计划 + +status: planned +owner: Crain99 +repository: Crain99/codeg-mobile +visibility: private +upstream: xintaofei/codeg@v0.20.3 +updated: 2026-07-15 + +## 1. 目标 + +构建原生可安装的 Android/iOS Codeg 移动客户端。手机负责创建任务、查看执行过程、批准权限、回答 Agent 问题和接收通知;Codex、Claude Code、OpenCode、ACP、终端、Git 与项目文件继续运行在电脑或服务器端。 + +产品不是缩小版移动 IDE,也不是加载远程网址的简单 WebView。前端资源随 APK/IPA 本地打包,通过统一 Transport 接口连接远程 Codeg。 + +## 2. 已锁定决策 + +- 新建私有仓库 `Crain99/codeg-mobile`。 +- 基线使用上游原版 `xintaofei/codeg` 的 `v0.20.3` 标签。 +- 只选择性移植 `codeg-custom` 中与 WebSocket、长会话、事件恢复和远程稳定性有关的改进。 +- 使用 Tauri 2 + 现有 Next.js/React 前端,不使用 Flutter 或 React Native 重写。 +- Android 与 iOS 共用一条产品主线;Android 主推进,iOS 从第一天起保持可编译、可启动。 +- 默认使用“本地前端 + 远程后端”。 +- 同时保留 `DirectTransport` 与 `RelayTransport` 两种连接方式。 +- 第一版是任务控制客户端,不包含完整移动 IDE。 +- UI 采用“对话优先”,保留顶部“运行中/等待批准”入口与底部“会话/任务/设置”导航。 +- Android 通过私有签名 APK 分发;iOS 通过 TestFlight 分发。 +- 不持久化未发送草稿:当前页面存活时可以保留内存中的输入;App 重启、退出登录或切换服务器后清除。 + +## 3. 首版功能边界 + +### 必须包含 + +- 添加、测试、保存和切换 Codeg 服务器。 +- 服务器地址 + Token 登录。 +- Token 使用 Android Keystore / iOS Keychain 保存。 +- 会话列表、新建会话、继续历史会话。 +- 发送消息并接收流式 Agent 输出。 +- 紧凑展示分析、读文件、改代码、运行测试等执行步骤。 +- 停止任务。 +- 批准或拒绝权限。 +- 回答 Agent 的单选、多选和文本问题。 +- 上传图片和文件。 +- 长会话分页与消息虚拟列表。 +- 网络切换、锁屏返回和短暂断线后的自动恢复。 +- “运行中”和“等待批准”任务中心。 +- 深色/浅色主题及中英文弹性布局。 + +### 首版不包含 + +- 手机本地运行 Codex、Claude Code、OpenCode 或 ACP。 +- 手机本地终端。 +- 完整 Git、Diff、提交与分支管理。 +- 代码编辑器。 +- Agent、模型供应商和 MCP 安装配置。 +- 桌面宠物、多窗口和桌面自动更新设置。 +- 跨重启、跨服务器或跨登录保存未发送草稿。 + +## 4. UI 设计基线 + +设计源目录: + +`/Users/crain/Library/Application Support/Open Design/namespaces/release-stable/data/projects/bf55c167-7525-4426-8272-7855c4e215c9` + +实施前将以下文件复制到仓库 `docs/design/mobile-prototype/`,避免依赖 Application Support 临时目录: + +- `codeg-mobile-prototype.html` +- `codeg-mobile.css` +- `codeg-mobile.js` +- `mobile-ios.html` +- `mobile-android.html` +- `brand-spec.md` +- 预览 PNG 与 `critique.json` + +需要补充的设计状态: + +- Relay 扫码配对。 +- 电脑端确认手机。 +- 已配对设备列表与撤销权限。 +- Relay 不可用时切换 Direct 连接。 +- 不持久化草稿后的断线文案与交互。 + +正式实现要求: + +- 使用系统状态栏,不实现原型中的模拟状态栏。 +- iOS 最小触控尺寸 44pt,Android 最小触控尺寸 48dp。 +- 输入框正文 16px,正确消费安全区和软键盘 Insets。 +- 不使用浏览器 `confirm()`;危险操作使用应用内确认组件。 +- “始终允许”必须显示权限范围、服务器、工作区和撤销入口。 +- 移除 `user-scalable=no`,保留动态字体与无障碍缩放能力。 + +## 5. 目标架构 + +```text +Codeg Desktop / codeg-server + ├── Local Agent runtime + ├── ACP / PTY / Git / Filesystem + ├── Direct HTTPS + WebSocket server + └── Relay Desktop Client ── outbound WSS ──┐ + │ + Codeg Relay + │ +Codeg Mobile │ + ├── DirectTransport ── HTTPS + WS ─────────┤ + └── RelayTransport ── outbound WSS ────────┘ +``` + +运行角色必须显式区分: + +- `desktop-local` +- `browser-remote` +- `mobile-direct` +- `mobile-relay` + +移动 Tauri 不能继续被当作桌面 Tauri,也不能调用本地 Agent、PTY、sidecar、多窗口或桌面更新器。 + +## 6. 里程碑 + +### M0:仓库与设计归档 + +- [ ] 使用个人 GitHub 账号 `Crain99` 创建私有仓库 `codeg-mobile`。 +- [ ] 从 `xintaofei/codeg@v0.20.3` 建立 `main`。 +- [ ] 添加只读 `upstream` remote。 +- [ ] 创建 `develop` 与短期功能分支规则。 +- [ ] 将移动 UI 原型和设计 Token 归档进仓库。 +- [ ] 记录从 `codeg-custom` 选择性移植的稳定性提交清单。 +- [ ] 添加 Android、iOS、Web/Rust 基础 CI。 + +完成标准:仓库可重复构建,设计源不再依赖 OpenDesign 数据目录,桌面定制代码未被带入。 + +### M1:移动编译边界 + +- [ ] 生成 Tauri Android 与 iOS 工程。 +- [ ] 增加明确的平台/运行角色检测。 +- [ ] 增加 `mobile-client` Cargo feature。 +- [ ] 对移动端 cfg 掉 ACP、PTY、Agent registry、sidecar、tray、updater、single-instance、多窗口和桌面宠物。 +- [ ] 修复 Android/iOS target 下的平台枚举和依赖编译错误。 +- [ ] 保持 Android 与 iOS 的空壳 App 均可启动。 + +完成标准:Android 模拟器/真机与 iOS 模拟器均能进入本地打包的移动登录页,不启动任何本地 Agent 进程。 + +### M2:DirectTransport 首版 + +- [ ] 将运行环境从 `tauri/web` 扩展为明确的移动远程模式。 +- [ ] 移动端使用 `WebTransport(serverUrl)`,不使用本地 `TauriTransport`。 +- [ ] 实现服务器配置、Token 验证与安全存储。 +- [ ] 适配登录、退出、401、服务器不可达和节点切换。 +- [ ] 复用并验证 WebSocket readiness、snapshot/replay、seq cursor 和 reconnect。 +- [ ] 实现移动文件选择、图片/附件上传和分享/保存入口。 + +完成标准:手机通过 HTTPS 直连现有 Codeg,在 4G/Wi-Fi 切换后前台 5 秒内恢复会话,不重复工具事件。 + +### M3:移动 UI 与任务闭环 + +- [ ] 实现启动、首次连接、最近会话、执行中、等待批准、Agent 提问、任务中心、会话列表、断线恢复和服务器管理页面。 +- [ ] 接入真实会话、任务和权限数据,删除原型假数据。 +- [ ] 实现消息虚拟列表和向上分页锚点保持。 +- [ ] 实现顶部运行中/等待批准入口。 +- [ ] 实现底部会话/任务/设置导航。 +- [ ] 实现前后台生命周期、网络变化与软键盘适配。 +- [ ] 实现不持久化草稿策略。 + +完成标准:用户可以在手机完成“创建任务 → 查看执行 → 批准/回答 → 查看结果”的完整闭环。 + +### M4:Relay 协议与安全设计 + +- [ ] 定义版本化 Relay 帧协议:`hello/pair/request/response/event/upload/ack/ping/revoke`。 +- [ ] 定义请求 ID、事件序列、重放窗口、幂等和背压规则。 +- [ ] 定义大文件分片、取消、校验与失败恢复规则。 +- [ ] 定义一次性配对码、设备身份、公钥交换和凭据轮换。 +- [ ] 定义端到端加密;Relay 不获得 Codeg Token、代码或聊天明文。 +- [ ] 定义设备撤销、服务器注销和疑似泄露处置流程。 +- [ ] 完成威胁模型与协议测试向量,再开始 Relay 服务编码。 + +完成标准:协议文档、状态机、安全边界、错误码和兼容策略均完成评审。 + +### M5:Codeg Relay 服务 + +- [ ] 新建独立 Relay 服务,优先使用 Rust + Axum。 +- [ ] 实现桌面端与移动端双向 WSS 接入。 +- [ ] 实现 deviceId 路由、心跳、在线状态和连接替换。 +- [ ] 实现加密帧透明转发,不记录内容明文。 +- [ ] 实现限流、连接上限、帧大小限制和审计事件。 +- [ ] 实现健康检查、结构化日志和基础指标。 +- [ ] 在单实例阶段使用内存路由;扩容需要时再引入 Redis 等共享状态。 + +建议部署:`kdit-01`。 + +建议域名:`relay.codeg.poisoner.cn`。 + +以上部署主机与域名仍需用户最终确认。 + +完成标准:Relay 可在不开放用户电脑入站端口的情况下稳定转发双向加密帧。 + +### M6:桌面 Relay Client + +- [ ] 桌面设置增加“移动访问”开关。 +- [ ] 生成并安全保存桌面设备身份。 +- [ ] 主动建立 Relay WSS 并自动重连。 +- [ ] 将 Relay request 映射到现有 Codeg command handler。 +- [ ] 将 Agent 事件、snapshot/replay 和权限请求转发到 Relay。 +- [ ] 生成一次性二维码并在桌面确认新手机。 +- [ ] 显示已配对设备、最后活动时间与撤销操作。 + +完成标准:位于 CGNAT 后的电脑无需端口映射即可被已配对手机控制,未配对或已撤销手机不能访问。 + +### M7:Mobile RelayTransport + +- [ ] 实现符合统一 `Transport` 接口的 `RelayTransport`。 +- [ ] 实现扫码、一次性配对、设备确认和安全存储。 +- [ ] 实现 request/response 关联、超时、取消和错误映射。 +- [ ] 实现 event seq、ack、snapshot/replay 和 5 秒前台恢复目标。 +- [ ] 实现附件分片、进度、取消和失败恢复。 +- [ ] 实现 Direct/Relay 切换和 Relay 故障回退提示。 + +完成标准:手机使用移动网络控制没有公网 IP 的电脑,核心任务闭环与 Direct 模式一致。 + +### M8:推送与深链接 + +- [ ] iOS 接入 APNs。 +- [ ] Android 接入 FCM。 +- [ ] 通知只包含安全摘要,不包含代码、Token 或敏感命令正文。 +- [ ] 通知携带 taskId/actionType,点击直达对应会话或批准卡。 +- [ ] App 回到前台后重新连接 Relay 并校验事件游标。 +- [ ] 危险操作仍要求应用内二次确认。 + +完成标准:App 被系统挂起时仍能收到任务完成/等待批准通知,点击后正确恢复上下文。 + +### M9:测试、加固与发布 + +- [ ] 前端单元测试、Rust 单元测试和协议测试。 +- [ ] Direct/Relay 端到端集成测试。 +- [ ] Wi-Fi/4G 切换、锁屏、Relay 重启、桌面睡眠和服务器重启测试。 +- [ ] 长会话、事件去重、上传中断和多设备并发测试。 +- [ ] Token、日志脱敏、设备撤销和重放攻击测试。 +- [ ] Android 真机签名 APK 构建与私有 Release。 +- [ ] iOS 真机归档与 TestFlight 上传。 +- [ ] 编写安装、配对、故障恢复和隐私说明。 + +完成标准:全部验收场景通过,发布包可由非开发人员安装使用。 + +## 7. CI/CD + +- Pull Request:前端 lint、类型检查、Vitest、Rust fmt/clippy/test、Android/iOS 编译冒烟。 +- `main` 标签:生成签名 Android APK。 +- iOS 发布标签:macOS runner 构建并上传 TestFlight。 +- Relay:构建不可变镜像/二进制,部署后执行健康检查与 WSS 冒烟。 +- 密钥只使用 GitHub Actions Secrets 或部署端密钥管理,不写入仓库和构建日志。 + +## 8. 验收场景 + +1. 电脑位于路由器或 CGNAT 后,没有公网 IP,也没有开放入站端口。 +2. 手机使用 4G/5G,通过二维码完成一次性配对。 +3. 手机创建任务并持续看到 Agent 执行步骤。 +4. 手机完成权限批准和 Agent 提问回答。 +5. 网络中断后重新进入前台,5 秒内恢复到一致状态。 +6. 恢复过程不重复工具调用、不重复消息、不丢最终状态。 +7. 未发送输入不跨 App 重启、服务器切换或退出登录保存。 +8. 撤销手机后,该设备立即失去后续访问能力。 +9. Relay 无法读取 Codeg Token、代码、附件和聊天明文。 +10. Android APK 与 iOS TestFlight 均可由真实设备安装运行。 + +## 9. 风险与控制 + +- 移动 Tauri 误走桌面 IPC:使用显式运行角色和编译 feature 隔离。 +- iOS 后台暂停 WebSocket:使用 APNs 通知,前台重连,不依赖永久后台 socket。 +- Relay 成为高价值入口:端到端加密、一次性配对、设备撤销、限流和最小日志。 +- 事件重复导致重复执行:请求幂等键、事件 seq/ack 与服务端去重。 +- 长会话卡顿:虚拟列表、分页、按需挂载工具日志和快照恢复。 +- 上游持续更新:基于稳定标签开发,定期合并 upstream,不跟踪未发布 main。 +- UI 原型丢失:M0 首先归档到 Git 仓库。 + +## 10. 待用户确认 + +- [ ] Relay 最终部署到 `kdit-01`。 +- [ ] Relay 最终域名使用 `relay.codeg.poisoner.cn`。 +- [ ] Apple Developer / App Store Connect 账号可用于 TestFlight 与 APNs。 +- [ ] Firebase 项目与 FCM 凭据的归属。 +- [ ] “始终允许”是否进入首版,或首版只提供“允许一次/拒绝”。 + +## 11. 开工门槛 + +满足以下条件后进入实现: + +- 本计划经用户确认。 +- `Crain99/codeg-mobile` 私有仓库创建完成。 +- UI 设计资产已归档进仓库。 +- M4 Relay 协议与安全设计先于 M5 服务器编码完成。 +- 不在移动端实现本地 Agent runtime,不扩大首版功能边界。 diff --git a/docs/relay/protocol-v1.md b/docs/relay/protocol-v1.md new file mode 100644 index 000000000..fa13f8522 --- /dev/null +++ b/docs/relay/protocol-v1.md @@ -0,0 +1,141 @@ +# Codeg Relay Protocol v1 + +status: draft-implementable +version: 1 +updated: 2026-07-15 + +## Security boundary + +Codeg Relay is an untrusted store-and-forward router. TLS protects each hop, +while application frames are encrypted end to end between a paired desktop and +mobile device. The Relay may observe device routing identifiers, frame sizes, +timing, connection state and IP addresses. It must never receive a Codeg access +token, request parameters, Agent output, code, filenames, attachment bytes or +permission answers in plaintext. + +## Roles and endpoints + +- Desktop opens outbound `WSS /v1/desktop` and owns one stable `desktop_id`. +- Mobile opens outbound `WSS /v1/mobile` and owns one stable `device_id` per + installation. +- Relay authenticates both sockets with relay-scoped bearer credentials. These + credentials authorize routing only and are not Codeg credentials. +- All protocol messages are UTF-8 JSON. Encrypted binary data uses unpadded + base64url in JSON v1. + +## Clear routing envelope + +```json +{ + "v": 1, + "type": "frame", + "desktop_id": "d_...", + "device_id": "m_...", + "connection_id": "c_...", + "frame_id": "019...", + "seq": 42, + "ack": 39, + "nonce": "base64url(12 bytes)", + "ciphertext": "base64url(AES-GCM output)" +} +``` + +Allowed clear envelope types are `hello`, `pair`, `frame`, `ack`, `ping`, +`pong`, `revoke` and `error`. `error` contains only a stable routing error code, +never decrypted application details. Unknown versions or fields that violate +size/type limits close the socket with code `1008`. + +The canonical UTF-8 encoding of +`v|desktop_id|device_id|connection_id|frame_id|seq|ack` is AES-GCM additional +authenticated data. A Relay therefore cannot silently reroute, renumber or +replay a ciphertext under different metadata. + +## Encrypted payloads + +After decryption, `kind` is one of: + +- `request`: `request_id`, `method`, `params`, `idempotency_key`, deadline. +- `response`: `request_id`, success result or stable Codeg error. +- `event`: `stream_id`, monotonically increasing `event_seq`, event name and + payload. +- `snapshot`: stream snapshot and last included event sequence. +- `upload`: `upload_id`, chunk index/count, total size, SHA-256 and bytes. +- `cancel`: request or upload identifier. +- `pair_request`, `pair_accept`, `pair_reject` during pairing only. + +Requests are idempotent for 24 hours by `(device_id, idempotency_key)`. A retry +with the same key returns the original terminal response and never executes a +tool twice. Receivers retain the last 4,096 frame identifiers and reject a +duplicate before decrypting application data. + +## Pairing + +1. Desktop generates a long-term P-256 signing identity and a 256-bit + `pair_secret`, registers `SHA-256(pair_secret)` as a 5-minute one-use + `pair_id`, then displays a QR code. +2. QR contains protocol version, Relay URL, desktop ID, desktop signing public + key, `pair_id`, `pair_secret` and expiry. The QR is the authenticated channel; + it must only be shown locally and becomes invalid after one use or timeout. +3. Mobile generates its signing identity and an ephemeral P-256 ECDH key. Its + `pair_request` is encrypted with a key derived from ECDH plus `pair_secret`. +4. Desktop decrypts the request and displays device name plus a six-digit SAS + derived from both identity keys and `pair_secret`. Mobile shows the same SAS. +5. User confirms on the desktop. Relay issues a random routing credential; + desktop returns it inside encrypted `pair_accept` and erases `pair_secret`. +6. Both peers store identity material and pairing root in OS secure storage. + Reject, timeout, a second use or desktop cancellation destroys all temporary + state. + +Each normal connection uses fresh ephemeral P-256 ECDH keys. Peers sign the +ephemeral public keys and connection ID with their paired signing identities. +HKDF-SHA-256 derives independent `mobile-to-desktop` and +`desktop-to-mobile` AES-256-GCM keys from the ephemeral shared secret, pairing +root and connection ID. This provides mutual authentication and forward +secrecy for completed sessions. + +## Ordering, replay and recovery + +- `seq` starts at 1 for each direction and connection. The 96-bit nonce is a + four-byte direction tag followed by the big-endian 64-bit sequence. +- A sender may keep at most 256 unacknowledged frames or 8 MiB, whichever comes + first. It pauses application reads when the limit is reached. +- `ack` is cumulative. A reconnect starts a new encrypted connection and then + requests a Codeg snapshot using the last applied `event_seq` per stream. +- The desktop reuses Codeg's existing snapshot/replay source of truth. Relay + transport retries must not synthesize Agent events. +- Foreground recovery target is five seconds when both peers and Relay are + reachable. + +## Attachments + +- Default encrypted chunk size: 256 KiB. +- Maximum encrypted routing frame: 1 MiB. +- Default attachment limit: 100 MiB, configurable lower by the desktop. +- Every upload declares total bytes and SHA-256 before chunk 0. +- Chunks are independently authenticated and resumable by missing chunk index. +- Cancel deletes partial data. Partial data expires after one hour. + +## Revocation and compatibility + +Desktop is authoritative for paired devices. Revocation closes matching Relay +sockets, deletes the routing credential, rotates the desktop pairing root for +that device and rejects all later frames. A stolen routing token without the OS +protected identity and pairing root cannot decrypt or forge application frames. + +Protocol changes that alter cryptography, envelope canonicalization or payload +semantics require a new integer version. Peers advertise supported versions in +`hello`; no silent downgrade is allowed. + +## Stable routing errors + +- `unsupported_version` +- `unauthorized` +- `pair_expired` +- `pair_consumed` +- `peer_offline` +- `device_revoked` +- `frame_too_large` +- `rate_limited` +- `backpressure` +- `protocol_violation` + diff --git a/docs/relay/threat-model.md b/docs/relay/threat-model.md new file mode 100644 index 000000000..1451320ba --- /dev/null +++ b/docs/relay/threat-model.md @@ -0,0 +1,53 @@ +# Codeg Relay v1 threat model + +## Protected assets + +Codeg access tokens, chat and Agent output, source code, paths, attachments, +permission decisions, device private keys and pairing roots are confidential. +Command integrity, event ordering, one-time execution and immediate device +revocation are equally required. + +## Adversaries + +- A compromised or curious Relay operator that records and modifies traffic. +- A network attacker despite WSS, including DNS or certificate incidents. +- An attacker who guesses identifiers, replays frames or floods connections. +- A person who briefly sees a QR code or steals a routing credential. +- A stolen unlocked phone or compromised desktop account. + +## Controls + +- Signed ephemeral ECDH plus HKDF and AES-256-GCM provides E2EE, peer + authentication and forward secrecy. Routing metadata is authenticated as AAD. +- One-use 256-bit pairing secrets, five-minute expiry, local desktop confirmation + and matching SAS prevent remote enrollment and detect QR substitution. +- Monotonic sequence nonces, replay windows, cumulative acknowledgements and + idempotency keys prevent replay and duplicate tool execution. +- Android Keystore and iOS Keychain protect mobile secrets; desktop secrets use + the operating-system credential store. Secrets never enter localStorage. +- Relay enforces authenticated routing, frame and connection limits, heartbeat, + rate limits and immediate revocation. Logs contain IDs and counters only. +- Push payloads contain opaque task IDs and generic status, never content. + +## Residual risks + +- Relay observes traffic timing, approximate payload sizes, IP addresses and + online presence. Padding and anonymity are outside v1. +- Malware running as the user on either endpoint can read plaintext while the + app is active. OS secure storage does not defend a fully compromised endpoint. +- A photographed, unused QR can enroll within its short validity window unless + the user rejects the unexpected desktop confirmation. +- Push providers learn that a device received a generic Codeg notification. +- Revocation cannot erase ciphertext already recorded, but forward secrecy + prevents later identity-key compromise from decrypting completed sessions. + +## Required negative tests + +- Alter AAD, ciphertext, nonce, sequence or peer ID and prove decryption fails. +- Replay an accepted frame and prove it is rejected without application dispatch. +- Reuse, expire and race a pairing code and prove only one request can win. +- Revoke a connected device and prove its socket closes and reconnect fails. +- Retry an identical idempotency key and prove the command executes once. +- Record Relay logs during chat and upload and prove no content or Codeg token is + present. + diff --git a/eslint.config.mjs b/eslint.config.mjs index 765b60144..efbfa073e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -16,6 +16,11 @@ const eslintConfig = defineConfig([ "next-env.d.ts", "src-tauri/target/**", "src-tauri/experts/**", + "mobile/src-tauri/target/**", + "mobile/src-tauri/gen/**", + "mobile/plugins/.tauri/**", + "mobile/plugins/android/build/**", + "mobile/plugins/dist-js/**", "public/vs/**", ]), eslintConfigPrettier, diff --git a/mobile/README.md b/mobile/README.md new file mode 100644 index 000000000..cb6b401cb --- /dev/null +++ b/mobile/README.md @@ -0,0 +1,71 @@ +# Codeg Mobile shell + +This package is the Android/iOS-only Tauri shell. It bundles the repository's +static Next.js export and connects to a remote Codeg server. It intentionally +does not link the desktop Rust backend or any local Agent runtime. + +## Android build + +Set `JAVA_HOME`, `ANDROID_HOME`, `ANDROID_SDK_ROOT`, and `NDK_HOME`, then run: + +```bash +pnpm mobile:android:init +pnpm mobile:android:build +``` + +The first launch asks for the HTTPS Codeg server URL and access token. The URL +is ordinary app configuration. The token is held in memory while the app runs +and persisted with Android Keystore or iOS Keychain; it is never written to +browser local storage. + +## Runtime boundary + +`mobile/src-tauri` is an independent mobile-only crate with the +`mobile-client` feature. It does not link the desktop Codeg Rust crate, local +Agent runtimes, ACP, PTY, Git, sidecars, tray, updater, desktop pets, or +multi-window code. The bundled React application uses `WebTransport` to call a +remote Codeg server over HTTPS and WebSocket. + +## Android requirements + +- Android 7.0 / API 24 or newer +- JDK 17 +- Android SDK 36, build-tools 36.0.0 and NDK 28.2.13676358 +- Rust target `aarch64-linux-android` + +For a debug APK: + +```bash +pnpm install +pnpm --dir mobile tauri android init --ci +pnpm --dir mobile tauri android build --apk --debug --target aarch64 --ci +``` + +## Release signing + +Release signing follows the Tauri Android signing model but reads credentials +from environment variables so no password file is created inside the checkout: + +```bash +export CODEG_ANDROID_KEYSTORE_PATH=/absolute/path/codeg-mobile-release.jks +export CODEG_ANDROID_KEYSTORE_PASSWORD='...' +export CODEG_ANDROID_KEY_ALIAS=codeg-mobile +export CODEG_ANDROID_KEY_PASSWORD='...' +pnpm --dir mobile tauri android build --apk --target aarch64 --ci +``` + +The private GitHub workflow uses matching repository secrets and publishes the +signed APK as an Actions artifact. Tags named `mobile-v*` also create a private +GitHub Release. + +## iOS compile smoke + +The iOS project is generated from the same shell and kept simulator-buildable: + +```bash +pnpm --dir mobile tauri ios init --ci +pnpm --dir mobile tauri ios build --debug --target aarch64-sim --ci +``` + +An Apple Developer team and distribution certificate are required for a real +device archive or TestFlight upload. diff --git a/mobile/package.json b/mobile/package.json new file mode 100644 index 000000000..f0bd678db --- /dev/null +++ b/mobile/package.json @@ -0,0 +1,12 @@ +{ + "name": "@codeg/mobile-shell", + "private": true, + "version": "0.20.3", + "packageManager": "pnpm@11.9.0", + "scripts": { + "tauri": "tauri" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.10.0" + } +} diff --git a/mobile/plugins/.gitignore b/mobile/plugins/.gitignore new file mode 100644 index 000000000..50d8e32e8 --- /dev/null +++ b/mobile/plugins/.gitignore @@ -0,0 +1,17 @@ +/.vs +.DS_Store +.Thumbs.db +*.sublime* +.idea/ +debug.log +package-lock.json +.vscode/settings.json +yarn.lock + +/.tauri +/target +Cargo.lock +node_modules/ + +dist-js +dist diff --git a/mobile/plugins/Cargo.toml b/mobile/plugins/Cargo.toml new file mode 100644 index 000000000..84290aff0 --- /dev/null +++ b/mobile/plugins/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "tauri-plugin-secure-vault" +version = "0.1.0" +authors = [ "Crain99" ] +description = "" +edition = "2021" +rust-version = "1.77.2" +exclude = ["/examples", "/dist-js", "/guest-js", "/node_modules"] +links = "tauri-plugin-secure-vault" + +[dependencies] +tauri = { version = "=2.10.2" } +serde = "1.0" +thiserror = "2" + +[build-dependencies] +tauri-plugin = { version = "=2.5.3", features = ["build"] } diff --git a/mobile/plugins/README.md b/mobile/plugins/README.md new file mode 100644 index 000000000..92d568a58 --- /dev/null +++ b/mobile/plugins/README.md @@ -0,0 +1 @@ +# Tauri Plugin secure-vault diff --git a/mobile/plugins/android/.gitignore b/mobile/plugins/android/.gitignore new file mode 100644 index 000000000..c0f21ec2f --- /dev/null +++ b/mobile/plugins/android/.gitignore @@ -0,0 +1,2 @@ +/build +/.tauri diff --git a/mobile/plugins/android/build.gradle.kts b/mobile/plugins/android/build.gradle.kts new file mode 100644 index 000000000..b7f7287a4 --- /dev/null +++ b/mobile/plugins/android/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "cn.crain.codeg.securevault" + compileSdk = 36 + + defaultConfig { + minSdk = 21 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + + implementation("androidx.core:core-ktx:1.9.0") + implementation("androidx.appcompat:appcompat:1.6.0") + implementation("com.google.android.material:material:1.7.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + implementation(project(":tauri-android")) +} diff --git a/mobile/plugins/android/consumer-rules.pro b/mobile/plugins/android/consumer-rules.pro new file mode 100644 index 000000000..a9a397853 --- /dev/null +++ b/mobile/plugins/android/consumer-rules.pro @@ -0,0 +1,2 @@ +# The secure-vault plugin exposes no Java API to consumers. Tauri invokes the +# annotated plugin methods through its generated registration layer. diff --git a/mobile/plugins/android/proguard-rules.pro b/mobile/plugins/android/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/mobile/plugins/android/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/mobile/plugins/android/settings.gradle b/mobile/plugins/android/settings.gradle new file mode 100644 index 000000000..d7782a40d --- /dev/null +++ b/mobile/plugins/android/settings.gradle @@ -0,0 +1,31 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + google() + } + resolutionStrategy { + eachPlugin { + switch (requested.id.id) { + case "com.android.library": + useVersion("8.0.2") + break + case "org.jetbrains.kotlin.android": + useVersion("1.8.20") + break + } + } + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenCentral() + google() + + } +} + +include ':tauri-android' +project(':tauri-android').projectDir = new File('./.tauri/tauri-api') diff --git a/mobile/plugins/android/src/androidTest/java/ExampleInstrumentedTest.kt b/mobile/plugins/android/src/androidTest/java/ExampleInstrumentedTest.kt new file mode 100644 index 000000000..8b99384f5 --- /dev/null +++ b/mobile/plugins/android/src/androidTest/java/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package cn.crain.codeg.securevault + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("cn.crain.codeg.securevault.test", appContext.packageName) + } +} diff --git a/mobile/plugins/android/src/main/AndroidManifest.xml b/mobile/plugins/android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..9a40236b9 --- /dev/null +++ b/mobile/plugins/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/mobile/plugins/android/src/main/java/ExamplePlugin.kt b/mobile/plugins/android/src/main/java/ExamplePlugin.kt new file mode 100644 index 000000000..05287b9b7 --- /dev/null +++ b/mobile/plugins/android/src/main/java/ExamplePlugin.kt @@ -0,0 +1,113 @@ +package cn.crain.codeg.securevault + +import android.app.Activity +import android.security.keystore.KeyGenParameterSpec +import android.security.keystore.KeyProperties +import android.util.Base64 +import app.tauri.annotation.Command +import app.tauri.annotation.InvokeArg +import app.tauri.annotation.TauriPlugin +import app.tauri.plugin.Invoke +import app.tauri.plugin.JSObject +import app.tauri.plugin.Plugin +import java.security.KeyStore +import javax.crypto.Cipher +import javax.crypto.KeyGenerator +import javax.crypto.SecretKey +import javax.crypto.spec.GCMParameterSpec +import org.json.JSONObject + +@InvokeArg +class SecretKeyArgs { + lateinit var key: String +} + +@InvokeArg +class SecretValueArgs { + lateinit var key: String + lateinit var value: String +} + +@TauriPlugin +class SecureVaultPlugin(private val activity: Activity) : Plugin(activity) { + private val keyAlias = "cn.crain.codeg.mobile.token-key.v1" + private val preferences by lazy { + activity.getSharedPreferences("codeg-secure-vault", Activity.MODE_PRIVATE) + } + + private fun encryptionKey(): SecretKey { + val keyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } + val existing = keyStore.getKey(keyAlias, null) + if (existing is SecretKey) return existing + + val generator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, + "AndroidKeyStore" + ) + generator.init( + KeyGenParameterSpec.Builder( + keyAlias, + KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT + ) + .setBlockModes(KeyProperties.BLOCK_MODE_GCM) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) + .setRandomizedEncryptionRequired(true) + .build() + ) + return generator.generateKey() + } + + @Command + fun storeSecret(invoke: Invoke) { + try { + val args = invoke.parseArgs(SecretValueArgs::class.java) + val cipher = Cipher.getInstance("AES/GCM/NoPadding") + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey()) + val ciphertext = cipher.doFinal(args.value.toByteArray(Charsets.UTF_8)) + val encoded = listOf(cipher.iv, ciphertext).joinToString(".") { + Base64.encodeToString(it, Base64.NO_WRAP) + } + preferences.edit().putString(args.key, encoded).apply() + invoke.resolve() + } catch (error: Exception) { + invoke.reject("Secure storage failed: ${error.message}") + } + } + + @Command + fun loadSecret(invoke: Invoke) { + try { + val args = invoke.parseArgs(SecretKeyArgs::class.java) + val encoded = preferences.getString(args.key, null) + val response = JSObject() + if (encoded == null) { + response.put("value", JSONObject.NULL) + invoke.resolve(response) + return + } + + val parts = encoded.split(".", limit = 2) + require(parts.size == 2) { "Invalid encrypted value" } + val iv = Base64.decode(parts[0], Base64.NO_WRAP) + val ciphertext = Base64.decode(parts[1], Base64.NO_WRAP) + val cipher = Cipher.getInstance("AES/GCM/NoPadding") + cipher.init(Cipher.DECRYPT_MODE, encryptionKey(), GCMParameterSpec(128, iv)) + val plaintext = cipher.doFinal(ciphertext).toString(Charsets.UTF_8) + response.put("value", plaintext) + invoke.resolve(response) + } catch (error: Exception) { + invoke.reject("Secure storage failed: ${error.message}") + } + } + + @Command + fun deleteSecret(invoke: Invoke) { + try { + val args = invoke.parseArgs(SecretKeyArgs::class.java) + preferences.edit().remove(args.key).apply() + invoke.resolve() + } catch (error: Exception) { + invoke.reject("Secure storage failed: ${error.message}") + } + } +} diff --git a/mobile/plugins/android/src/test/java/ExampleUnitTest.kt b/mobile/plugins/android/src/test/java/ExampleUnitTest.kt new file mode 100644 index 000000000..758e94537 --- /dev/null +++ b/mobile/plugins/android/src/test/java/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package cn.crain.codeg.securevault + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/mobile/plugins/build.rs b/mobile/plugins/build.rs new file mode 100644 index 000000000..0821965f2 --- /dev/null +++ b/mobile/plugins/build.rs @@ -0,0 +1,8 @@ +const COMMANDS: &[&str] = &["store_secret", "load_secret", "delete_secret"]; + +fn main() { + tauri_plugin::Builder::new(COMMANDS) + .android_path("android") + .ios_path("ios") + .build(); +} diff --git a/mobile/plugins/guest-js/index.ts b/mobile/plugins/guest-js/index.ts new file mode 100644 index 000000000..883f5aba3 --- /dev/null +++ b/mobile/plugins/guest-js/index.ts @@ -0,0 +1,19 @@ +import { invoke } from "@tauri-apps/api/core" + +export async function storeSecret(key: string, value: string): Promise { + await invoke("plugin:secure-vault|store_secret", { + payload: { key, value }, + }) +} + +export async function loadSecret(key: string): Promise { + return invoke<{ value?: string }>("plugin:secure-vault|load_secret", { + payload: { key }, + }).then((result) => result.value ?? null) +} + +export async function deleteSecret(key: string): Promise { + await invoke("plugin:secure-vault|delete_secret", { + payload: { key }, + }) +} diff --git a/mobile/plugins/ios/.gitignore b/mobile/plugins/ios/.gitignore new file mode 100644 index 000000000..5922fdaa5 --- /dev/null +++ b/mobile/plugins/ios/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/config/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc +Package.resolved diff --git a/mobile/plugins/ios/Package.swift b/mobile/plugins/ios/Package.swift new file mode 100644 index 000000000..2b03aa8b0 --- /dev/null +++ b/mobile/plugins/ios/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "tauri-plugin-secure-vault", + platforms: [ + .macOS(.v10_13), + .iOS(.v13), + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "tauri-plugin-secure-vault", + type: .static, + targets: ["tauri-plugin-secure-vault"]), + ], + dependencies: [ + .package(name: "Tauri", path: "../.tauri/tauri-api") + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "tauri-plugin-secure-vault", + dependencies: [ + .byName(name: "Tauri") + ], + path: "Sources") + ] +) diff --git a/mobile/plugins/ios/README.md b/mobile/plugins/ios/README.md new file mode 100644 index 000000000..b67bf64a8 --- /dev/null +++ b/mobile/plugins/ios/README.md @@ -0,0 +1,3 @@ +# Tauri Plugin secure-vault + +A description of this package. diff --git a/mobile/plugins/ios/Sources/ExamplePlugin.swift b/mobile/plugins/ios/Sources/ExamplePlugin.swift new file mode 100644 index 000000000..5df0d14c6 --- /dev/null +++ b/mobile/plugins/ios/Sources/ExamplePlugin.swift @@ -0,0 +1,79 @@ +import SwiftRs +import Security +import Tauri +import UIKit +import WebKit + +class SecretKeyArgs: Decodable { + let key: String +} + +class SecretValueArgs: Decodable { + let key: String + let value: String +} + +class SecureVaultPlugin: Plugin { + private let service = "cn.crain.codeg.mobile.secure-vault" + + private func baseQuery(key: String) -> [String: Any] { + return [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: service, + kSecAttrAccount as String: key, + ] + } + + @objc public func storeSecret(_ invoke: Invoke) throws { + let args = try invoke.parseArgs(SecretValueArgs.self) + guard let data = args.value.data(using: .utf8) else { + invoke.reject("Secret is not valid UTF-8") + return + } + var query = baseQuery(key: args.key) + SecItemDelete(query as CFDictionary) + query[kSecValueData as String] = data + query[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly + let status = SecItemAdd(query as CFDictionary, nil) + if status == errSecSuccess { + invoke.resolve() + } else { + invoke.reject("Keychain write failed (\(status))") + } + } + + @objc public func loadSecret(_ invoke: Invoke) throws { + let args = try invoke.parseArgs(SecretKeyArgs.self) + var query = baseQuery(key: args.key) + query[kSecReturnData as String] = true + query[kSecMatchLimit as String] = kSecMatchLimitOne + var result: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &result) + if status == errSecItemNotFound { + invoke.resolve(["value": NSNull()]) + return + } + guard status == errSecSuccess, + let data = result as? Data, + let value = String(data: data, encoding: .utf8) else { + invoke.reject("Keychain read failed (\(status))") + return + } + invoke.resolve(["value": value]) + } + + @objc public func deleteSecret(_ invoke: Invoke) throws { + let args = try invoke.parseArgs(SecretKeyArgs.self) + let status = SecItemDelete(baseQuery(key: args.key) as CFDictionary) + if status == errSecSuccess || status == errSecItemNotFound { + invoke.resolve() + } else { + invoke.reject("Keychain delete failed (\(status))") + } + } +} + +@_cdecl("init_plugin_secure_vault") +func initPlugin() -> Plugin { + return SecureVaultPlugin() +} diff --git a/mobile/plugins/ios/Tests/PluginTests/PluginTests.swift b/mobile/plugins/ios/Tests/PluginTests/PluginTests.swift new file mode 100644 index 000000000..4f8e9ace3 --- /dev/null +++ b/mobile/plugins/ios/Tests/PluginTests/PluginTests.swift @@ -0,0 +1,8 @@ +import XCTest +@testable import ExamplePlugin + +final class ExamplePluginTests: XCTestCase { + func testExample() throws { + let plugin = ExamplePlugin() + } +} diff --git a/mobile/plugins/package.json b/mobile/plugins/package.json new file mode 100644 index 000000000..a00529c39 --- /dev/null +++ b/mobile/plugins/package.json @@ -0,0 +1,33 @@ +{ + "name": "tauri-plugin-secure-vault-api", + "version": "0.1.0", + "author": "Crain99", + "description": "", + "type": "module", + "types": "./dist-js/index.d.ts", + "main": "./dist-js/index.cjs", + "module": "./dist-js/index.js", + "exports": { + "types": "./dist-js/index.d.ts", + "import": "./dist-js/index.js", + "require": "./dist-js/index.cjs" + }, + "files": [ + "dist-js", + "README.md" + ], + "scripts": { + "build": "rollup -c", + "prepublishOnly": "pnpm build", + "pretest": "pnpm build" + }, + "dependencies": { + "@tauri-apps/api": "^2.0.0" + }, + "devDependencies": { + "@rollup/plugin-typescript": "^12.0.0", + "rollup": "^4.9.6", + "typescript": "^5.3.3", + "tslib": "^2.6.2" + } +} diff --git a/mobile/plugins/permissions/autogenerated/commands/delete_secret.toml b/mobile/plugins/permissions/autogenerated/commands/delete_secret.toml new file mode 100644 index 000000000..ca81139b9 --- /dev/null +++ b/mobile/plugins/permissions/autogenerated/commands/delete_secret.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-delete-secret" +description = "Enables the delete_secret command without any pre-configured scope." +commands.allow = ["delete_secret"] + +[[permission]] +identifier = "deny-delete-secret" +description = "Denies the delete_secret command without any pre-configured scope." +commands.deny = ["delete_secret"] diff --git a/mobile/plugins/permissions/autogenerated/commands/load_secret.toml b/mobile/plugins/permissions/autogenerated/commands/load_secret.toml new file mode 100644 index 000000000..1abbcc22e --- /dev/null +++ b/mobile/plugins/permissions/autogenerated/commands/load_secret.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-load-secret" +description = "Enables the load_secret command without any pre-configured scope." +commands.allow = ["load_secret"] + +[[permission]] +identifier = "deny-load-secret" +description = "Denies the load_secret command without any pre-configured scope." +commands.deny = ["load_secret"] diff --git a/mobile/plugins/permissions/autogenerated/commands/store_secret.toml b/mobile/plugins/permissions/autogenerated/commands/store_secret.toml new file mode 100644 index 000000000..3c09dd7c0 --- /dev/null +++ b/mobile/plugins/permissions/autogenerated/commands/store_secret.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-store-secret" +description = "Enables the store_secret command without any pre-configured scope." +commands.allow = ["store_secret"] + +[[permission]] +identifier = "deny-store-secret" +description = "Denies the store_secret command without any pre-configured scope." +commands.deny = ["store_secret"] diff --git a/mobile/plugins/permissions/autogenerated/reference.md b/mobile/plugins/permissions/autogenerated/reference.md new file mode 100644 index 000000000..164f6f3ba --- /dev/null +++ b/mobile/plugins/permissions/autogenerated/reference.md @@ -0,0 +1,97 @@ +## Default Permission + +Default permissions for the plugin + +#### This default permission set includes the following: + +- `allow-store-secret` +- `allow-load-secret` +- `allow-delete-secret` + +## Permission Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentifierDescription
+ +`secure-vault:allow-delete-secret` + + + +Enables the delete_secret command without any pre-configured scope. + +
+ +`secure-vault:deny-delete-secret` + + + +Denies the delete_secret command without any pre-configured scope. + +
+ +`secure-vault:allow-load-secret` + + + +Enables the load_secret command without any pre-configured scope. + +
+ +`secure-vault:deny-load-secret` + + + +Denies the load_secret command without any pre-configured scope. + +
+ +`secure-vault:allow-store-secret` + + + +Enables the store_secret command without any pre-configured scope. + +
+ +`secure-vault:deny-store-secret` + + + +Denies the store_secret command without any pre-configured scope. + +
diff --git a/mobile/plugins/permissions/default.toml b/mobile/plugins/permissions/default.toml new file mode 100644 index 000000000..bbc728187 --- /dev/null +++ b/mobile/plugins/permissions/default.toml @@ -0,0 +1,3 @@ +[default] +description = "Default permissions for the plugin" +permissions = ["allow-store-secret", "allow-load-secret", "allow-delete-secret"] diff --git a/mobile/plugins/permissions/schemas/schema.json b/mobile/plugins/permissions/schemas/schema.json new file mode 100644 index 000000000..954b5168a --- /dev/null +++ b/mobile/plugins/permissions/schemas/schema.json @@ -0,0 +1,342 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PermissionFile", + "description": "Permission file that can define a default permission, a set of permissions or a list of inlined permissions.", + "type": "object", + "properties": { + "default": { + "description": "The default permission set for the plugin", + "anyOf": [ + { + "$ref": "#/definitions/DefaultPermission" + }, + { + "type": "null" + } + ] + }, + "set": { + "description": "A list of permissions sets defined", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionSet" + } + }, + "permission": { + "description": "A list of inlined permissions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + } + }, + "definitions": { + "DefaultPermission": { + "description": "The default permission set of the plugin.\n\nWorks similarly to a permission with the \"default\" identifier.", + "type": "object", + "required": [ + "permissions" + ], + "properties": { + "version": { + "description": "The version of the permission.", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "minimum": 1.0 + }, + "description": { + "description": "Human-readable description of what the permission does. Tauri convention is to use `

` headings in markdown content for Tauri documentation generation purposes.", + "type": [ + "string", + "null" + ] + }, + "permissions": { + "description": "All permissions this set contains.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionSet": { + "description": "A set of direct permissions grouped together under a new name.", + "type": "object", + "required": [ + "description", + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "A unique identifier for the permission.", + "type": "string" + }, + "description": { + "description": "Human-readable description of what the permission does.", + "type": "string" + }, + "permissions": { + "description": "All permissions this set contains.", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionKind" + } + } + } + }, + "Permission": { + "description": "Descriptions of explicit privileges of commands.\n\nIt can enable commands to be accessible in the frontend of the application.\n\nIf the scope is defined it can be used to fine grain control the access of individual or multiple commands.", + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "version": { + "description": "The version of the permission.", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "minimum": 1.0 + }, + "identifier": { + "description": "A unique identifier for the permission.", + "type": "string" + }, + "description": { + "description": "Human-readable description of what the permission does. Tauri internal convention is to use `

` headings in markdown content for Tauri documentation generation purposes.", + "type": [ + "string", + "null" + ] + }, + "commands": { + "description": "Allowed or denied commands when using this permission.", + "default": { + "allow": [], + "deny": [] + }, + "allOf": [ + { + "$ref": "#/definitions/Commands" + } + ] + }, + "scope": { + "description": "Allowed or denied scoped when using this permission.", + "allOf": [ + { + "$ref": "#/definitions/Scopes" + } + ] + }, + "platforms": { + "description": "Target platforms this permission applies. By default all platforms are affected by this permission.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "Commands": { + "description": "Allowed and denied commands inside a permission.\n\nIf two commands clash inside of `allow` and `deny`, it should be denied by default.", + "type": "object", + "properties": { + "allow": { + "description": "Allowed command.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "deny": { + "description": "Denied command, which takes priority.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Scopes": { + "description": "An argument for fine grained behavior control of Tauri commands.\n\nIt can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command. The configured scope is passed to the command and will be enforced by the command implementation.\n\n## Example\n\n```json { \"allow\": [{ \"path\": \"$HOME/**\" }], \"deny\": [{ \"path\": \"$HOME/secret.txt\" }] } ```", + "type": "object", + "properties": { + "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" + } + } + } + }, + "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" + ] + } + ] + }, + "PermissionKind": { + "type": "string", + "oneOf": [ + { + "description": "Enables the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "allow-delete-secret", + "markdownDescription": "Enables the delete_secret command without any pre-configured scope." + }, + { + "description": "Denies the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "deny-delete-secret", + "markdownDescription": "Denies the delete_secret command without any pre-configured scope." + }, + { + "description": "Enables the load_secret command without any pre-configured scope.", + "type": "string", + "const": "allow-load-secret", + "markdownDescription": "Enables the load_secret command without any pre-configured scope." + }, + { + "description": "Denies the load_secret command without any pre-configured scope.", + "type": "string", + "const": "deny-load-secret", + "markdownDescription": "Denies the load_secret command without any pre-configured scope." + }, + { + "description": "Enables the store_secret command without any pre-configured scope.", + "type": "string", + "const": "allow-store-secret", + "markdownDescription": "Enables the store_secret command without any pre-configured scope." + }, + { + "description": "Denies the store_secret command without any pre-configured scope.", + "type": "string", + "const": "deny-store-secret", + "markdownDescription": "Denies the store_secret command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`", + "type": "string", + "const": "default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`" + } + ] + } + } +} \ No newline at end of file diff --git a/mobile/plugins/rollup.config.js b/mobile/plugins/rollup.config.js new file mode 100644 index 000000000..6891d899b --- /dev/null +++ b/mobile/plugins/rollup.config.js @@ -0,0 +1,31 @@ +import { readFileSync } from "node:fs" +import { dirname, join } from "node:path" +import { cwd } from "node:process" +import typescript from "@rollup/plugin-typescript" + +const pkg = JSON.parse(readFileSync(join(cwd(), "package.json"), "utf8")) + +export default { + input: "guest-js/index.ts", + output: [ + { + file: pkg.exports.import, + format: "esm", + }, + { + file: pkg.exports.require, + format: "cjs", + }, + ], + plugins: [ + typescript({ + declaration: true, + declarationDir: dirname(pkg.exports.import), + }), + ], + external: [ + /^@tauri-apps\/api/, + ...Object.keys(pkg.dependencies || {}), + ...Object.keys(pkg.peerDependencies || {}), + ], +} diff --git a/mobile/plugins/src/commands.rs b/mobile/plugins/src/commands.rs new file mode 100644 index 000000000..40bd03ecc --- /dev/null +++ b/mobile/plugins/src/commands.rs @@ -0,0 +1,29 @@ +use tauri::{AppHandle, command, Runtime}; + +use crate::models::*; +use crate::Result; +use crate::SecureVaultExt; + +#[command] +pub(crate) async fn store_secret( + app: AppHandle, + payload: SecretValueRequest, +) -> Result<()> { + app.secure_vault().store_secret(payload) +} + +#[command] +pub(crate) async fn load_secret( + app: AppHandle, + payload: SecretKeyRequest, +) -> Result { + app.secure_vault().load_secret(payload) +} + +#[command] +pub(crate) async fn delete_secret( + app: AppHandle, + payload: SecretKeyRequest, +) -> Result<()> { + app.secure_vault().delete_secret(payload) +} diff --git a/mobile/plugins/src/desktop.rs b/mobile/plugins/src/desktop.rs new file mode 100644 index 000000000..94a4059ab --- /dev/null +++ b/mobile/plugins/src/desktop.rs @@ -0,0 +1,28 @@ +use serde::de::DeserializeOwned; +use tauri::{plugin::PluginApi, AppHandle, Runtime}; + +use crate::models::*; + +pub fn init( + app: &AppHandle, + _api: PluginApi, +) -> crate::Result> { + Ok(SecureVault(app.clone())) +} + +/// Access to the secure-vault APIs. +pub struct SecureVault(AppHandle); + +impl SecureVault { + pub fn store_secret(&self, _payload: SecretValueRequest) -> crate::Result<()> { + Ok(()) + } + + pub fn load_secret(&self, _payload: SecretKeyRequest) -> crate::Result { + Ok(SecretValueResponse { value: None }) + } + + pub fn delete_secret(&self, _payload: SecretKeyRequest) -> crate::Result<()> { + Ok(()) + } +} diff --git a/mobile/plugins/src/error.rs b/mobile/plugins/src/error.rs new file mode 100644 index 000000000..895220da7 --- /dev/null +++ b/mobile/plugins/src/error.rs @@ -0,0 +1,21 @@ +use serde::{ser::Serializer, Serialize}; + +pub type Result = std::result::Result; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error(transparent)] + Io(#[from] std::io::Error), + #[cfg(mobile)] + #[error(transparent)] + PluginInvoke(#[from] tauri::plugin::mobile::PluginInvokeError), +} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} diff --git a/mobile/plugins/src/lib.rs b/mobile/plugins/src/lib.rs new file mode 100644 index 000000000..f7c3ea656 --- /dev/null +++ b/mobile/plugins/src/lib.rs @@ -0,0 +1,52 @@ +use tauri::{ + plugin::{Builder, TauriPlugin}, + Manager, Runtime, +}; + +pub use models::*; + +#[cfg(desktop)] +mod desktop; +#[cfg(mobile)] +mod mobile; + +mod commands; +mod error; +mod models; + +pub use error::{Error, Result}; + +#[cfg(desktop)] +use desktop::SecureVault; +#[cfg(mobile)] +use mobile::SecureVault; + +/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the secure-vault APIs. +pub trait SecureVaultExt { + fn secure_vault(&self) -> &SecureVault; +} + +impl> crate::SecureVaultExt for T { + fn secure_vault(&self) -> &SecureVault { + self.state::>().inner() + } +} + +/// Initializes the plugin. +pub fn init() -> TauriPlugin { + Builder::new("secure-vault") + .invoke_handler(tauri::generate_handler![ + commands::store_secret, + commands::load_secret, + commands::delete_secret + ]) + .setup(|app, api| { + #[cfg(mobile)] + let secure_vault = mobile::init(app, api)?; + #[cfg(desktop)] + let secure_vault = desktop::init(app, api)?; + app.manage(secure_vault); + Ok(()) + }) + .build() +} diff --git a/mobile/plugins/src/mobile.rs b/mobile/plugins/src/mobile.rs new file mode 100644 index 000000000..421341225 --- /dev/null +++ b/mobile/plugins/src/mobile.rs @@ -0,0 +1,48 @@ +use serde::de::DeserializeOwned; +use tauri::{ + plugin::{PluginApi, PluginHandle}, + AppHandle, Runtime, +}; + +use crate::models::*; + +#[cfg(target_os = "ios")] +tauri::ios_plugin_binding!(init_plugin_secure_vault); + +// initializes the Kotlin or Swift plugin classes +pub fn init( + _app: &AppHandle, + api: PluginApi, +) -> crate::Result> { + #[cfg(target_os = "android")] + let handle = api.register_android_plugin("cn.crain.codeg.securevault", "SecureVaultPlugin")?; + #[cfg(target_os = "ios")] + let handle = api.register_ios_plugin(init_plugin_secure_vault)?; + Ok(SecureVault(handle)) +} + +/// Access to the secure-vault APIs. +pub struct SecureVault(PluginHandle); + +impl SecureVault { + pub fn store_secret(&self, payload: SecretValueRequest) -> crate::Result<()> { + self + .0 + .run_mobile_plugin("storeSecret", payload) + .map_err(Into::into) + } + + pub fn load_secret(&self, payload: SecretKeyRequest) -> crate::Result { + self + .0 + .run_mobile_plugin("loadSecret", payload) + .map_err(Into::into) + } + + pub fn delete_secret(&self, payload: SecretKeyRequest) -> crate::Result<()> { + self + .0 + .run_mobile_plugin("deleteSecret", payload) + .map_err(Into::into) + } +} diff --git a/mobile/plugins/src/models.rs b/mobile/plugins/src/models.rs new file mode 100644 index 000000000..ac19a70d6 --- /dev/null +++ b/mobile/plugins/src/models.rs @@ -0,0 +1,20 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SecretKeyRequest { + pub key: String, +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SecretValueRequest { + pub key: String, + pub value: String, +} + +#[derive(Debug, Clone, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SecretValueResponse { + pub value: Option, +} diff --git a/mobile/plugins/tsconfig.json b/mobile/plugins/tsconfig.json new file mode 100644 index 000000000..059112270 --- /dev/null +++ b/mobile/plugins/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2021", + "module": "esnext", + "moduleResolution": "bundler", + "skipLibCheck": true, + "strict": true, + "noUnusedLocals": true, + "noImplicitAny": true, + "noEmit": true + }, + "include": ["guest-js/*.ts"], + "exclude": ["dist-js", "node_modules"] +} diff --git a/mobile/src-tauri/Cargo.lock b/mobile/src-tauri/Cargo.lock new file mode 100644 index 000000000..efc0c83d3 --- /dev/null +++ b/mobile/src-tauri/Cargo.lock @@ -0,0 +1,4889 @@ +# 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.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" + +[[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 = "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 = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6aedf8ae72766347502cf3cb4f41cf5e9cc37d28bee90f1fdaaae15f9cf9424" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" +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.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" +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 = "codeg-mobile" +version = "0.20.3" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-secure-vault", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[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.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[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.119", +] + +[[package]] +name = "ctor" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[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.119", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "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.60.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 = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser 0.36.0", + "foldhash", + "html5ever 0.38.0", + "precomputed-hash", + "selectors 0.36.1", + "tendril 0.5.1", +] + +[[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 = "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.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.3+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 = "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 = "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.119", +] + +[[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-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.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.119", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +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", +] + +[[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 = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "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.119", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.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.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +dependencies = [ + "libc", +] + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[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.1", + "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.119", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +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.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[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.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.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 = "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_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_macros 0.11.3", + "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.7", +] + +[[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.7", +] + +[[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.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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.119", +] + +[[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 = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +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 = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[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.13+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.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +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.119", +] + +[[package]] +name = "regex" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +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.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +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", + "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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[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.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.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.119", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.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.119", +] + +[[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_with" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" +dependencies = [ + "base64 0.22.1", + "bs58", + "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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.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 = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.60.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.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[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", + "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.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463ae8677aa6d0f063a900b9c41ecd4ac2b7ca82f0b058cc4491540e55b20129" +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", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca7bd893329425df750813e95bd2b643d5369d929438da96d5bbb7cc2c918f74" +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.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac423e5859d9f9ccdd32e3cf6a5866a15bedbf25aa6630bcb2acde9468f6ae3" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.18", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6a1bd2861ff0c8766b1d38b32a6a410f6dc6532d4ef534c47cfb2236092f59" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692a77abd8b8773e107a42ec0e05b767b8d2b7ece76ab36c6c3947e34df9f53f" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "toml 0.9.12+spec-1.1.0", + "walkdir", +] + +[[package]] +name = "tauri-plugin-secure-vault" +version = "0.1.0" +dependencies = [ + "serde", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", +] + +[[package]] +name = "tauri-runtime" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b885ffeac82b00f1f6fd292b6e5aabfa7435d537cef57d11e38a489956535651" +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.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5204682391625e867d16584fedc83fc292fb998814c9f7918605c789cd876314" +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.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcd169fccdff05eff2c1033210b9b94acd07a47e6fa9a3431cf09cfd4f01c87e" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "html5ever 0.29.1", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.3", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 0.9.12+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.3+spec-1.1.0", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.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.119", +] + +[[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.119", +] + +[[package]] +name = "time" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[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.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" +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.4", +] + +[[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.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[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.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.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-core", +] + +[[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 = "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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" +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.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "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", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.18", + "windows", + "windows-core", +] + +[[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.60.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", + "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", +] + +[[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", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core", + "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-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-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" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "wry" +version = "0.54.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/mobile/src-tauri/Cargo.toml b/mobile/src-tauri/Cargo.toml new file mode 100644 index 000000000..816681c79 --- /dev/null +++ b/mobile/src-tauri/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "codeg-mobile" +version = "0.20.3" +description = "Codeg remote task controller for Android and iOS" +authors = ["Crain99"] +edition = "2021" + +[lib] +name = "codeg_mobile_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[features] +default = ["mobile-client"] +mobile-client = [] + +[build-dependencies] +tauri-build = { version = "=2.5.5", features = [] } + +[dependencies] +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tauri = { version = "=2.10.2", features = [] } +tauri-plugin-secure-vault = { path = "../plugins" } diff --git a/mobile/src-tauri/build.rs b/mobile/src-tauri/build.rs new file mode 100644 index 000000000..d860e1e6a --- /dev/null +++ b/mobile/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/mobile/src-tauri/capabilities/mobile.json b/mobile/src-tauri/capabilities/mobile.json new file mode 100644 index 000000000..61b590ac0 --- /dev/null +++ b/mobile/src-tauri/capabilities/mobile.json @@ -0,0 +1,8 @@ +{ + "$schema": "../gen/schemas/mobile-schema.json", + "identifier": "mobile", + "description": "Minimum permissions for the Codeg mobile remote client", + "windows": ["main"], + "platforms": ["android", "iOS"], + "permissions": ["core:default", "secure-vault:default"] +} diff --git a/mobile/src-tauri/gen/android/.editorconfig b/mobile/src-tauri/gen/android/.editorconfig new file mode 100644 index 000000000..ebe51d3bf --- /dev/null +++ b/mobile/src-tauri/gen/android/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/.gitignore b/mobile/src-tauri/gen/android/.gitignore new file mode 100644 index 000000000..d7d0a8b3e --- /dev/null +++ b/mobile/src-tauri/gen/android/.gitignore @@ -0,0 +1,22 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +build +/captures +.externalNativeBuild +.cxx +local.properties +key.properties +keystore.properties +*.jks +*.keystore + +/.tauri +/tauri.settings.gradle diff --git a/mobile/src-tauri/gen/android/app/.gitignore b/mobile/src-tauri/gen/android/app/.gitignore new file mode 100644 index 000000000..e06777ea7 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/.gitignore @@ -0,0 +1,6 @@ +/src/main/java/cn/crain/codeg/mobile/generated +/src/main/jniLibs/**/*.so +/src/main/assets/tauri.conf.json +/tauri.build.gradle.kts +/proguard-tauri.pro +/tauri.properties \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/build.gradle.kts b/mobile/src-tauri/gen/android/app/build.gradle.kts new file mode 100644 index 000000000..8d2a8f2b8 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/build.gradle.kts @@ -0,0 +1,97 @@ +import java.util.Properties + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("rust") +} + +val tauriProperties = Properties().apply { + val propFile = file("tauri.properties") + if (propFile.exists()) { + propFile.inputStream().use { load(it) } + } +} + +// Release credentials are injected by the local keychain or CI. Keeping the +// keystore and passwords outside the checkout prevents generated Android +// projects and build logs from accidentally publishing signing material. +val releaseStoreFile = System.getenv("CODEG_ANDROID_KEYSTORE_PATH") +val releaseStorePassword = System.getenv("CODEG_ANDROID_KEYSTORE_PASSWORD") +val releaseKeyAlias = System.getenv("CODEG_ANDROID_KEY_ALIAS") +val releaseKeyPassword = System.getenv("CODEG_ANDROID_KEY_PASSWORD") +val hasReleaseSigning = listOf( + releaseStoreFile, + releaseStorePassword, + releaseKeyAlias, + releaseKeyPassword, +).all { !it.isNullOrBlank() } + +android { + compileSdk = 36 + namespace = "cn.crain.codeg.mobile" + defaultConfig { + manifestPlaceholders["usesCleartextTraffic"] = "false" + applicationId = "cn.crain.codeg.mobile" + minSdk = 24 + targetSdk = 36 + versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt() + versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0") + } + signingConfigs { + if (hasReleaseSigning) { + create("codegRelease") { + storeFile = file(releaseStoreFile!!) + storePassword = releaseStorePassword + keyAlias = releaseKeyAlias + keyPassword = releaseKeyPassword + } + } + } + buildTypes { + getByName("debug") { + manifestPlaceholders["usesCleartextTraffic"] = "true" + isDebuggable = true + isJniDebuggable = true + isMinifyEnabled = false + packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") + jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") + jniLibs.keepDebugSymbols.add("*/x86/*.so") + jniLibs.keepDebugSymbols.add("*/x86_64/*.so") + } + } + getByName("release") { + if (hasReleaseSigning) { + signingConfig = signingConfigs.getByName("codegRelease") + } + isMinifyEnabled = true + proguardFiles( + *fileTree(".") { include("**/*.pro") } + .plus(getDefaultProguardFile("proguard-android-optimize.txt")) + .toList().toTypedArray() + ) + } + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + buildConfig = true + } +} + +rust { + rootDirRel = "../../../" +} + +dependencies { + implementation("androidx.webkit:webkit:1.14.0") + implementation("androidx.appcompat:appcompat:1.7.1") + implementation("androidx.activity:activity-ktx:1.10.1") + implementation("com.google.android.material:material:1.12.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.4") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") +} + +apply(from = "tauri.build.gradle.kts") diff --git a/mobile/src-tauri/gen/android/app/proguard-rules.pro b/mobile/src-tauri/gen/android/app/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/src/main/AndroidManifest.xml b/mobile/src-tauri/gen/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..3a29fb735 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/src-tauri/gen/android/app/src/main/java/cn/crain/codeg/mobile/MainActivity.kt b/mobile/src-tauri/gen/android/app/src/main/java/cn/crain/codeg/mobile/MainActivity.kt new file mode 100644 index 000000000..02969df45 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/java/cn/crain/codeg/mobile/MainActivity.kt @@ -0,0 +1,11 @@ +package cn.crain.codeg.mobile + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge + +class MainActivity : TauriActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() + super.onCreate(savedInstanceState) + } +} diff --git a/mobile/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/mobile/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..2b068d114 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml b/mobile/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..07d5da9cb --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml b/mobile/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..4fc244418 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..28f1aa119119336781390c2531c381499576ed59 GIT binary patch literal 3524 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 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..28f1aa119119336781390c2531c381499576ed59 GIT binary patch literal 3524 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 Hu0mjfi}+A- literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..13dd21476b5c7f69cdfb82969bce7150244c127f GIT binary patch literal 9081 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 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..73e48dbfb7dc31ed1e951b77820af88b93fcc418 GIT binary patch literal 3377 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 Hu0mjfi}+A- literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1d98044f13bdd3afc7cb426644ae118688c03c14 GIT binary patch literal 7971 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 Z{{b+Ide7&7`HKJm002ovPDHLkV1iT#V`TsU literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a888b336b5bc84b42c0c266ce9b8ec5d9eafed0b GIT binary patch literal 18900 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 I*#%+#2dtK;n*aa+ literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1d98044f13bdd3afc7cb426644ae118688c03c14 GIT binary patch literal 7971 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 Z{{b+Ide7&7`HKJm002ovPDHLkV1iT#V`TsU literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..081832466b4a17180fe9255fa0d3fcba2010592c GIT binary patch literal 12392 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 K@hVZnfd2y&>ZwQo literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a838e7b550ac82b12e73d71427c6ffea06a944 GIT binary patch literal 29506 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 K@hVZnfd2y&>ZwQo literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b18bceb64d257ed31d50e65d7f2b98abcfb21158 GIT binary patch literal 16751 zcmb4KLwhbtvwdURwv8Rzwr$%scWm3XZQIt4Z7279Kj99#dRUWwdQ~k%D#(e$L1RM$ z001~i2@$3L?*9KBNbvuv(zXo*03gUFDI%!ik$tTT;e)!e+PBn7ktHSs9D>iKBwDFd zOhrv73N{?p(}vJ>`|e}p+gi3h5~Oq$5kL$naZCDyECEbptK2I0IorVk6LFj|b7Ph? zecu)qQqRru>hDDYj%5-r`2Q;_hDOoih{555^BBS^-`a1vrp@+P*V8IrO+mkFe&Qo} zgKd?S*mH9R0bEaaNN2Q#IE=CTqS?}oVYi68iN~B_f&MdRUxkzXWaF5lOKg~gYQ@}O zJkYLqXAc{F#)nvoospV=yV1zR3yZ~Z6RZvHS#bZ8{W@D(X&*nuXaAnk?IVP8Jr9<+ zex_q_dGKWFTY?8TiaXdM%5qi}QKt0)g8&QUs=!<@fg+bwx$kVUV%e~b<-VvMv@s?; za=rNZSi_81S>=%FmztUi5j7M+H}1%OjmR95zJ#N*T|MGg3 z%^nNg5qwoe_uuvo=C*p74>)xPT97LN)OP%mf-D(u5D~dWl6j3n$q(gx`PkEqsE<*1 z{6&(Ruil)i;7wL0cVm<{^Z=8eWcv7ivwNy1UdmOV;yZj1c5AtJV1t|N6A0EknY*6I z6+eI$=XVVn8LVoZv)8~(!$pA)e|CKg9nIKyAsDyd)|3Xn=9AinSb zvQE#W3^SuT`~+4H8U9mI+pLUmisCG;1&Z6?JtQ<@$<15vZ=EN9L2gF#>^c1$WreU{ z4vNYfupSkWUgquvuvJj_b*WI&I%Bq3OSMbKwy=1DcVgjSTJgof~I_U#&u3; z*J#Ck5@C&jY~b8@oyFC-)KtHRcllaRX*M<7rC&IhA5fA%h+>SGgwy@(ApLfotfuSV zNlSLNi<@3d>-RiBV=Aze&|kSiKyxCncPoaFx#Beey3 z|F#SyPs$rq9?x?W5l8e<|Jc)|@QB0dEC2N~OP}XueXVMW{fI#TGez9Iw>Lu+97H7v z0Es(%RH5mxBRXN5*U9(2F-ljRMs!D(M_i;^2ht~p4A243X9+^vb}$ID-KyH{`R4aT zsN2<4m1rJEAz3MkNEiV4>t7VDpDJFIk=_5>fym_dS_qAdOAH{6z>j~!Em}3*&yz(| zOe8WMeQ?~T^e|n^CXo8Q&0TvmPfM0gFFz85lz0}z!i2qhE#{-Kn$*wXW3Je`bZ7V8 zN+o_u9MA-{hP3e+TwC*oAOP~k%$3}i)XeqYaBXs``*l)%SA@-KWX(`(o1(pl8U9Q7 zrnosVagUqvYf{y9)5mlqEojP28b@2e*}qIu@f)5g@4TN9pq+{**Lz)T7`etNbA=>P zc`cFvmQjrI7B&&dbPyB@_nd3_`71$615hHk+UrE#h=epe zL!A*!N;;K_gILY>KmCz*$9qT(;0+n^E*t>3X4ebA1;nxSJblf`hV5{ZT}w-tagxr1 z625~SL0N((5GJrU0gFI9-1;4y-Tl&1P6nP1Ux`6Q5be@GRImJLtP+$y?}6KV)=^{#u)Y!e z28$Fe12-H#1ts4~(|`5F6=i4)kH_RNa#Y$3banLGzQD9Uc)&T9)^J z#!bUiNmCZ~lt-DvB$z|=4vDJ#Lh(3R&nsEd1L|O8=J$O8VwWW)Z2S^G6)5!9tm3pt zOpSrz7zrPE)W;22V1*IQPyLgNNea~ex=F^qH$ES~x72KEHc`xt5$N>vJ$Zgj@}big zf;F|ir&R!5`;S$tde=7hyjxq?pI=g|=|8hCG1*_7Gb}SXgi%>y{!3MeSXJ^1(MQcc zA&@&LYH?20NffU`=>*u4m!yCJmALWO5)`oGi2(WkoY=mJWx<%HpIud5MVcQHaY~H z`9kF^J`4D?nMFS62>lEwYu)#%_e*pBZV%poAFAtMjYt<`uX=VYZPI6J;z&na=g)RA zbzZKTdl^2-Gs=|6aaLrUQ45S26b_Dp{d9l5r28&%OCL!iJ7Uq`C}1Y7VTfC8-Os&h z^-R{L=%j8bjwBsc<;g9M*cQjoTOYTF7ij`6m$AW=<4+o1=pt!tS{j8yRpFv%XcRD6 zG83LQc||q5y3P9)tF^0Wj@oWx@lSvUJ-VU@QGW=TQHUq-LYV|qMJYWVvrGz%TBjcw zcJN3tx`hL50EyuIvgiFOxiJG?%2%NZ)l?@dJj6U{d}H>!gaMmvt3h?0ZHqU&$0_{z$+%N-=H>+7$C?v|4~Pl5 zPai$+q1ZqCd*80>0CxV>zo*#AP{nPG)J1bq^14rAYO#ljNrKd2Bj=)zK`aeCNSLqL z3{iDmKO04PQH@f~9_`drOqfXG%7~1UL#}@%9dSL6cFo*nyE%@@4pUn`4Xx=hUCOeJ zr)A{YsJglYi=~UBkw{P?v7^EBOXGx!XfFP$Z}y%tHuMnD6NL_)i;5?;HTv`y*>rus z8wV5koxWK`yBU!};9YCjk`!YDH6x2z_R|`nS3A_~_>X@My&Xsv4TLyK5nqEDSifx( zX;=TPj-r!!1^QiA3#VnLF!Rh2%({<6Bfjo-M;#{NbbD}l5^)#fhA+J073ew zJ<-UBSzGsQ>+BIThCUdLpjsi4D<~Yd&N6PnPv162Nmxmv`pLk_5@f14J?Okg_CxU6 zuY1o70Q0BH-vKq)t&T!~fmt=9j-S=~l3aeWX|^gFb&wJ(uPJPeBVHYE+j+{as&axr zONlV{oiWyFm89dWAYrM>hfgMA*x5c1GBwaKiKr{z8M`IL9d(rOr}Zq`Nx_5hx5}-W z-d)Pj6-b6mbnLRc#PYSzJ@)MX3(ZXBEUJK-V4v7sU;h1}Q7SuXa4>}C!^GaNBg1y} zVZb@Fxj(MbEE=QrPa?Q<^x$wc{`=fnFFi$y~n`J-g*6&2CQ?7ep@YFKjxF z4QIScR{=K*vBpB+!W2;!d*iT);&9y|S>e`u0~Zm2E#t>6W*Q zbEIQkUYnvsltPhdET(|@YIx6S%urSUW(wRULlN4MuwPPor6 zE#>GX%#~O;w<7MiZs0ym^v0z4vU|9gZAp^!>-r;bT9haaU6GEMS9hf>;Z=GZR564y z_io^L?k0zzi36)3ylDQCgu@`25v{EW3e=b$zd?$&*r30f%JBApvDR(xU!xJOn9YJ9 z5+_FKLJQ*Nh$Zd*tKf9B_W7H|Z~e^~Yb}_>rq}|#r0^wam8!={d+uZcxY8t4tVODH zCs(MyDiGJUzBq~F#-|_;qvJc#f4*N_+{mM2`1JCPExSlAHGo9e1RkTHboJ~tZKhg3 z{XDdlHQV;}9kr35pB&%|w_;8L{{8#>o}A65e&RC2fP9?)j{V2FpchY00a+F+mlgH! zrwZSjs!o43g){iZkM0)*lt1+CgjPOewmmAD>3n{NeCEZ<_b zzEUeOG`8q-__Z{k+VDWP1j7(`@x(#|)qqTy04nv{hTfSMA^6x4){%6P{ z;*_dyHsMIsRGI~PWJA7fB_$Na*(KBK)vf89t-p|*D=j*NkzVq{s@_fJlKvMRm_d-Gi`U#OZlMT)r;FuSF zd%8A~s~Ds`QypZu?#ErCc!CdvPTWsLXF$P!Ib+qE8${^SUZ%5k9oGIg=M{pm7B+bV zA!Ut90{a`-joEa?OewXrRINOKo#7JUOxbU%y&-*kceiP8$LR2ByLLK_oq&Ku1_ zLwywyqO!mCvqSlePbj+jrpF{HWvB>=$(!hj_w?HJu%th&9Q zu(lB%ojIyyE329Z0niV937Otc1SIR>j_V~wzP(&))#5SZyo}>+ex<+I=NOV_?ODC1 zuxOsact!yL8!8}-PUN|YASH$CeR<9o7i*0^`A}y2yL%F%YAQRLIiJcKVGy-4&Opi( z^LSt@EOl63jyy@Jsr_w1w{3`Y;%N6uj~`nI08DU^yUrc@F@4rv<&$o*CKf#p3JSZY z_3#Kx3+gT@)A%=L2@fIb>W4}0NVes+&BdTpjeZm? zZpwm`*=fask1+tpTJ({pjC!FfF1wje)wJi-u9W{xjP3~=p4qtRh*`;Ys3P7m>^zJ4 zU)Cp>;qGmapKtG2D}I<;4H_4(`~KU^`Lpic?;HehDYBK}aCfjIO#_Vz3DP5RiawW- z`QZ~6H>5EUBT}vvo)r90oAv7r$!S>THtdUy0oPV|KXXQbmKnT=K|xCR;$9QGwTayO z2XA>(o?o}v4%sf8;znc_D>4Ik+})Yq^PVE9@IEzaYPWGRGL^ItmaoV}I0~_?Y1$5Z zrA=jy(3n#!PGE@GbJm3M%4dSL(z)UGay#hIoHI)I{G!l6x{xsv$a6i5oSLQC7HH}+?S7JtnuA=cuAp9)5W7zzqt8}KL9QiWAisRrq9e;J_3fu zCLl&G#>XIWe7}xCrWAFtZhygrIK#f$Q$@wBl$NM$`pKR~<09fT%PKAn^L_elK z%$vCbAax3H2s`n*9glUYxUwy{X z2x$YQdx(Mk60CkqYV}l@i4K=-X5l2g-Ij(nneoc1EXs*L=`9V9s)Le7QszMw*ASN9@lPDq@OL z#Buxc7VPuD$iRxIEroNA2>|aavFCUH%`A^r%ZA^7eaI^MD9QB&v%d z+5Y5OBK&$M_%tFmHU~xfqX3mtY6uBpL~dNgV8Xy*DfMyN_>`#1F+)6li_=5_cX0;t zj-VnL1AP1giNxhV+3;xZid>F~pELTwBSDAK`&LRtF(@g=mdO>M;zW)y6Y%f_?C`9N0cmmJMHJ#OiGj^YZ3Cn z^|?!DS_(>6Ba#3=n74pZ(t)(l+2mhx80o--AkF;G zYg#OZp2wbxS8}0dapo7Ni|QdZi{^WUTKaQ@`()TB%21=$Rw zGgugA0W0FYzz_{?2|)zx`*1ikPYo^EKdPw2BMoB!t)sBTvt04pCYMW2!Ta_htczkL zf<#N)toU*-wi-V+_rp8*&|jZBQ>NGYtQRDQC(vUFxzd9t;4Yjz{uhqbSw^j4s_Ih2 z7o7b~WhE*CpO2%#Qxfv;$XrWstG(^Tm^U;nIkZJ>!yRyGcyTm4CbBP2ARNu&kg2j4 z>2$6m&WbzGg-fqN!S=^cDc=dz&d&Xps;*OA_H#ji9~c-PJd~)uKq?8nd;Ky-$-TTb zHH_YG^PL)7r1*;b8e{0C9#Aswl0-jI>)JK<$*W~>6S0An<)Z#y2-($+k`|a62e^X6 znzr-YYepc4s6Ds)t%@KoSC~fj0xGxqNRMt>b{($FgoY$YdpPt-P zSt{UI2}4IYxd@q1+Tn~v+39YEsGE$Z;e?HGlXXkXiY(X{3>_v~N5lq4Gul^pL5m6( z>|%YYc$37feO7>6pCBW-Ogh&*lgY5IlPG5@+1mOI!~{JvTNj~viao#IZ}g3+^X?!O z0x)(arfKE%=V$}Ly4+c1V#e%}``+(pHVQj*3}|FaeY=l*${#U>A7I$CihUt|D53a} zCPA}->14iNtz9y}Pa5KvLlu&)Gvd|n_0Fyv5mJh>u~OwLzKH2GEob8G9*CyXv}*kV zW@M1cXN$lY(?sI5mM!Uj$fgH;4jV|ADkfzG=@;3;4cgIeaolj87K8j4>(yWZ{{={( zY-n0R4UD}GX!pEN#fa-^;oIstEU2)YGj(m&2X@LDV-wWGG5;2aow^4umxP&fG7G!f zReK(IZi?l5vu^z)Eo#w}O6XSQnuDOP^US2GHRs+!wCOe!))0=$uv{IE|HEB%h8im& z-yFpRZonyGUG$mT9wRMz4YjCmWTmkbmzWpSSAM1q_$4#?Q4BIeR7)I%eVAJW<Pn+(o;jM)&Qg^nnlIcK-mr zr~pGpVkdY~RauLc!XBWw!}{nfRshAoqv~Ya>XAx{T)=tN>w5O8W*b~t>}_IsY$AA} z)|1DMr6KymG=p0IZVUO7#1Hfqu6Spx#tANy+eenr%&RHF?kn-ys^;v(vu7vcZ=O}` zK`)%B0)(HnhoSJ$r>X46_*u_zIvyF|Bt_!jVqn{>f*YjE_vKl}pvBr2t?DC1sZDZ@ z3oK?J#jTsNM1LAl$B~$HWh4z^Ay=F1F++!dlq;`Hq@_%99`~!q2&HszZ|k|H%U4<( zNB}h;odyy>D!OET>Bm6NymfzcGKuH^S7ZW&9p*Cn9IHYznW%G4Hy zU;CSc1p19<`$u>e4&vck!*5W`Sy1en3GmB9nO#unBkM z_!~Qy?vjw6b{QIifxfiTVY*s53fcIQZlRK}ARN_~120>KS6b69Ve$dgr`*?0_A38<$$~U{}KFJbJ zzfm;~bD~7Hta-9i>S4bkq#!v`qR*{g=O!WS`ZV2$Gk&aM1QR>B6jn340j{Ik{$z*( zS7McQhewd8&Z)NV>8d=aDs+f^<`&ih5njoch<>%x&?7Qux+#M+`!E(?=9kI~5mV{k z-7DW5^WzqmBD_H3pkkfRElKIV_fAw4ZMit=(0iGbbV}a`g+Q^6>m)tn(DdpxP5DMI zv>L7YgDaqQeur^@>vCv9fg*ku?6StPp9)^wGWdQTn?Jj=%j7{KarGjWBz(BHa^q*L zzR4<4=Vn6VK`&4uTO`hZcKeU*98s+R^gSXI>5^d|8w;<+Ow$rD)Lv)%4z8lL@G7VOekB}&(9y-N50Lq9ee z7f-BGgRKnP&zMI6IxCZ;?Gk;& zF5lKk*VN+Ls6jRLXM=;J;PG;QoCZd|H+HtJm$BH5RhyMxW`*gZ-Qdll{yQ=i8dCPd zIdWq7&ufqRNKyE?7-mfa@8)4}t(K`P{tq0<(!-x@V8yW(vgPM&AWT+&R80wcE4H>vR+W3N78{3%MSUuF zJi08FPnPQfF~tvKDfDSJG+*0!u8Uvn!;oWqk1W@D&QsUBJ>CMvE{q=r=K?Lkv5q6( zknE;`3w5GE3Wh%II|lWXY9WmjjN{G6ox)K-fIp->@`{t(+-&vGf>Z_V*fq_H835MN z2};uD{fpCiczYEOYvri)#k2%dPe0Y)S9=Gb@O#9!S{ZAoGFu(r@Ev zFRh8i!J;q9q7PotE_Y$3w-fZ|gkjdESE(ZYXaUW@s(wbS?VB_Hr!U|sFRDI1c@s`Y zWC^seg(P)$2ZFgffGhx6`Fl?NybnmO^22k&XJ8M$y5W_Gx%2yxo z+maQupYBH!<@fKS+<-CRw>;YN%FDOdluLgt1E=#1!sE;}w=O&qVaFyC;r202I!8sj zgYQi{(W#*|$p92+!c#u$Qp`;9293zmH8lODS*B`&zoc*HuF8^h zWxVf)HRlX{ZNc)=eG2q+iVjDl%mik+_gst=j-ydUI5Z2l?&^|_RU%An*Ni;h?;Bf- z`q{o1mof^7U$A2%(_bdZqwUAKtGK%dfFHO6;68dn2XN($quZQz{on3%gP$|T0C+b( zsuC~}`%Glk4PgTSns_ltEl<{(Xs?q(7PL5j>wTY|Czs*F)0&AoR^5j$@{a7wEBfsM zn4ilc9%HnQmdGJP=ABZKd!I+3>oCfH5|vF2Gf*yYti=Gb$y=olf7P=t!**T=DDE!D z8x1Gy{#b_~_36KfaG0o@@0YcQq=7kWMp#6hEPHNy18qiBTGC>;fXbkkHYGKu@iuGg z)|aFRu{ce*F9!Z|T>llBin9<{WNj!fC0Npm2 zxfsEG(O1+dwz^$Ac|K#p>O^Accek8x(n8J<)*b@PQ)YpRdRKc*h(YX z(yExCwoOw&&6lPjp5w6FO@K`Guc1)Aw`Dto%}IZQu(sYssYoZ}5xhK>q#Pyc) z&qFVRhxC3M&c4BK-j)OKQO+c)Hr-zt8QU(%ZB`!4VoYLy!Q7YeGUiIa&in2>62VbU)eHgVY%7Z zJ`xHmJ;JT$S%K{FiL^2}n%|D+(YCpE-R;f}lWuLi$A;_-UW(~Z7bo%<%LBUFfAXdE zY>(w_3K?3narCg2sEUgWAz^{0GfcXmoGJ}WIevNnwjnJ#@;I-`$<(f%m_ParF^g3t z6|>)e+}RydYZ|n_t8#Q?q{Mi5CNz5qe6$+Ve};JXPU;;s<5o&8oD(x7SSGIQX{!Q65Q+H@Ujbe z%A_Lk{7P$aZ2ZM-iDNipk#}#HLe=f`takdmaYK zi@GBF&9&qI>~#$VIb-K54N9B1S=a(;Z$BX3J5C){*~|j2mmY|}d<0BwHdz+uo5IfM z8H^MacZnLQ%G-8_QyUGSIQGPR3qbv|=>b6S1R6m*rdnMlZ+y(-Qr9eW=OSCX8awRj z^?ng(`^(54p6}Fa)2-?!Px{@xhw;5h0)JPDqdKPmg0NXKd>s2pM0~Y`>q&t~i*p~E zZ?%drzKN41d$Xd>F>L!Hvj_s7(L>!PYvT64h57;-WK{5ZBjGMToUy5-3N^Smf86T> z;EVaxRjIyRK9xIm!ghW4Ge{_an=4VRKa8y{yswx6eB|3@VRQi$u5>y(;$sTVA*Qma z^gAric_BGKPX(Pi$89k1A5CrkL1@*aN+50ZSA$k$fnVG2yS6y)N2kbS-89#jg(>^( z-%_dg8{hhKG7EuocXGMrv{wfR80fN+1YOqa*7~T|gEx$^H9b^zu1P?wOF=0#Q<3gd zA3SU#OTalQVMmc2w&8M}&9M^wxarAy+7sM$JV5?0zyF5o&+Z1nhLTKo#nN3Wmd*90dCH-bP5BvY$l!;UeI?wF5T5T*P0 zMz|_qt2`8>!i35Ov4A^*bJv;N7h?j>ujvzCe1C^u4d28Mb0rsK!_Fld?;TF9_+Y4G z5zB-03e~J#AFnV%JO;!HEY!eWfUhBh_S>Cq(|d8U-3ySgeWFy9$T-q+bG*z*j;W4N z;r>?Ix8cFjYp)D(^L+5aDI?tVIfr_m5%mFDr)qS*h&d-tX+D;c&vf5O(H!(%UR(Fo zk}D^^j*6@WP0?Q)%{~e{ahi2m!3)jzBcKpK(M(8%9chFjS%O0(l`RqSvfvtRLIuwJ zf0H|e=J8CrPm}la!|U5WFw%e%E1durHU)4)1>M+QXjc9m$=eV;gL*Kyzyg zJ0=`qN*bP0CG~?qcQfe#sluN*wB4vSw`<;Ns|j~*7w}jaSnO|9Thzit_oIK8nLn>b zKA-yuag)cUxBx5)5zwiUjJ|)q$?XB;knRsYQq&c1Cy)MlU#~+56C)!7icyAre&E;s zq2t%gbdlFv8Vp2iv5;zNbi6lvEk^ipq42nxZk+gZ7qmG`IB?QrdLzbqBS@DNMg4_mU3bBO7? z6~(76AbbH=dA-=^HM0{Y!SY361oX9jRn3`oo%He}xTh~zDVuC+VQ1BHx12#zy7ES< zmSFT*e9p_o_+e0F&|j>272 z{>nvY)hHw$s$NCE1 zD{C8_S)gZc)-Y8Yoi9)fEO(odFx^^k8m4nC)jYPn^K>Glm7!_fq)7J} z(V=r)GqMs*BV})(@Y_9H>sV12NK+L0vQfe^NyScaGTH}_p_J((r(~b~TLmkaI1I7A zh_j64)amLFK7DKU?{iar^ptMP+-#j&&gHgd6qsQwlC*rCH07tkf0gt#cX&n$s^mme z2uU6VK`GN=$KDH$Tn1EmNxC2bs)BQe6t9yLu+;vOw40Sbs@cs<{hoB?21}B55g(nt zQ=)pcgy-ZHFLr<*&Vs~Pz&Q49bWMAGIi=~YyJQwHOjSO)>dhcp0v;Qw_a6s4s2}!~d=3sAKOWVjB>!xmGvxrkJU^g1sO)ZihP^ zma#fo)hSliSWf@x|1RhjwZZlG)jyuKHJ=^Ir0!@qO0Q^EKum;z4D-C_7dZBGUIzqq zN6Ds;R#9-+SIeHF%A%$!s`kMPcz65Mnp!IBCE6@^BjEov>X=^UvZl0VqcEyTxuPEN zCmqa!ywfv!AG@7hBJk)*`st*P?qn@o0Og|#2KjWNFm7?nZ*{T|F1OGNXc+5wsKr~G z=iF)`>U_bpIA4GEDX@IZtzNMjv(0f? zL8-kH7Yz9oKAko>0rnK{<>oScOD`wI#rX@K4*{B}MNJ#u&CTw=&*A?@TT+-E#wKiH z;J`K#vMg@ilk2?!W(@QN3nnZqWt-cpzmmK%V0k|O2Tx||q!mcGF{Js4zVs!h(}_(y zmF-S?k$K&ZA)(t2?&%C6eo5047kX4Mx9BiR-h9b-mS?V9>AO0<9Ip;PiDutJ)B9D{ z_GLEc`)?O@E_!IF2XA`z;b9K0iHgbwD0_$k4U{riaq_TcomxYZvXrErE&hP!4BL}sZROd~r^pRMcugvo& zt&(JeCN+&3;TAnr%5mb0O#?}sxuqmD-p}*cAoz^<|A;dT-+Ka3{+QYo<-4_9aDhb{ zq8i@0DVvwwLEL%ZmrM(w9+?c|>Q<2VHr zM;4BHHb}ZD|01bpdC?^D?}^?blyGpj^Bk;SXMSaQFUn*fa$=}d9qBqOj zeEi@(H!J}Vx|r4Ep4X42yOL}><2uPpqN)48Vrys^8DhUxe>u zlE|4Ro0&bo$Iz>G_Mt?E5&I!_FNXghb}?ioc1#I+-vfV&ysCJOgMnP=_5<%skK>|p z7XaE#9sev)go9+5&0TTVu7d0M<}(25)vGYF`GNW(cUf6}Z!65TibeQ{lc<)eHgJ$p zp9(M-eIL`phYKWdLLVr|FhvorI7!lSNLqePUKmIrw7$wxF@PxKL}&85A74&={H~8i z$99e2OgJUHm{Y?VJdrj)dEtDws!o&p$?x~1-X4d=te+iSGxu~Lj zb0RCHwZGUc^<-fFgTqx@0>F+WY3Z>0b%|E6el@m9=F{X2CNI*jhI=fj_Uy?#Qa0&e zo3L`TU8diBpPnGv&@))E&$t*4(Lb6yXB`a=?7mtpsc0Kg12>2T-c}>nSDjwZBNsSr>7$h?J z8QebgL}Y%0$+cJv-QOi0x??oYY)UPqKM8UiAVEh-%3q;zdw(X|e5IjUZN$3!HVp#$ zxRAl34n0^yW$3grYIMEfLAlk<))`?h*SK0#7$Z>&9K|S3*J;cGSk7PVG@9f>^Ky(p zXUJ>e;Kt8RAi#QC)c4++!}C0u&oj08z~NS9p1nwW^r&h5a4a-Jmxd77K?;@q(~CqCkjn%lqMPL-9@$bQ24}($U(_{hl9GW9_ILcMxWoq z^C(k}EB)Yj-1HW~+!A2HtV*V6ucMc&uiuMNr6+mgrXvWvM`Qpd#@Q8>=I%q})$y)YZr{rwECJSsG)vPQwZnsz*0ub?k zGCbMnV?kqaH#Ogf))>_2wVy)yy|qWqqkzl=qK(+KWix7*AueXOv^$?KN&6m*q7SJX z>S%vU2xrhW3a6}BSRIkJmN!k!oh4T#J4>E6X{1v6A;wtv&@w`#xPw7{F8WJ`9 z4Kyo#|0eG>wa%*X&O<={#a6;(DPtv@# zO@#vB+7fQxM;+~n&?1>;qC1w~G&0wzSl4VnDec9F~xt(J}$?dlje zO~BO%=+Sac{jk4O0Y5~5pBV5re`(h;A!J@j1K_<`x{dgT?SGg|CsGmTO|W88#OCnd zY8q!tdyEW$!i7(QivGB~3#0L%`Zmo2aRqX$1Vo3*E;=B;=pbLN89=ipL3r9PlVl@N zIYsn6G70}UcvQkntuOV``8`)Ql?!RoZQKGI(%sOuU3UPl4+Q^NDC!Vk^I3qz!hN{g z@Pni8b+q$-g5Sg}XHetB7f)eUy6$~f5D{`0az5cODUubi%2 zSPv>nU{uYgnc`{>-b+qI|L)%)#O-+xk)i3&P8D=OX4ez3Pd|i(4FRxWA#+ydoP74@ zdlUbYUwno)@J9Zdv_6_*IkFBP_Z#U;^fE*@Iox8UB}~xVR}vcI_A>nrf3nOY$6`M$ zl3+6f;atzvgN*~0q63hK;hU;dY0_-(>@*&GJ5;wsl%v>q_Zb|=>XpW@1WT&aOfy0u z5vDTf{9ZHj%<%f$M~f#%^vzMQnAh4POMy~Z*FrAxVxkMYuAUZ`zFq`{y-WG-;wWTo zxAcouR1nGbh4JHwwY(7R_Gvi!^^bv`LSo`5cIhtps4}02jdyEs;1{$<8^N!CTJI+@a(%45NoESW$B-#7tTcYSorP(_A#v*9bv4ftM8f zw-E5xIqEMH+)dQzKApN~WQ8$8ipOD$y~73p3ib+Ha+1=R?IEB>mpgstgJ^5JM!apm zB7^ntxNxy%DF57Bz;FuU&|pE%R@D724EO&L8G^3Rzx>z+8eRl_9y$q0$Z+_@94s5sT^8X0{v*uviuA7-O*Z4Dd z41>L|Dym&MbEsqsV+hJ}lk)WGeyeq?*Yveii6-6qWV`ck@fQx_Bo^FfXqyR>kW>ti zzo2Tm$*3EImg`tF>f#KG#W}iNxdT~X8HFD`VWRpC6hl;>i1G<)ae%jwse48oxyLkW z&o=UVQYF>aJpYXLktm5@CE0MG57GnB8rLQ|!PC6`k71EriQDtnZ*f^5Le`lmX|bUG zs8j`M`7b;i=rBT6ADl~8Qf@SDW_0anC%qLg;7fd#4vkc0})#$3>UFkcMybA zeI!osc?-K|y$MEa!SJt!JXm{B$lC?SISRwpxDf?)%K5EqkTW z`rCh@b1fPNNLDohNLOf^>KUu-ij1z7>;EZDU#8Jn{z3id3 zp1qjkjm4)v7}z|Y=H=~Tb>UV2JbS&XZtY@A_cZYyYujKhp-?8lbd|a8;6{O4N_r_m zzE0)Nj<+%i%7)-$)m%giMf^ksDg^Bst{J$%`317k@ukI@MQ5(zHjzxIXC XrJNsHnTG=pQeg0O^>bP0l+XkK^)z{o literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8a57f38e0273699c8cdd1012042bffdc38abce GIT binary patch literal 40510 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

C z(CX6fIh8mroxe4Fy?l{bj%8R307X*fDQ#(v@y+x%4>XY?ax zC^p*eaCfrcq#aa-hT`A*7=V1wKdlx2BoX`y?{jb4s1j@)b7-etD6E@cKXx@8e&Vf zWehdcr8jm&_uNAX*$0NY%B&gn)>)@jQLcO5F3UZEr zds`B64=#T7qE6myk{5rNg+99@E{Zf&GEI$b?&PagH-fv#5k*V6EEmp!A*tE}RWk_SsM5#wN>{l7X5DBVl)bv~bNp*#NXY*I)h$Ng literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/mobile/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b18bceb64d257ed31d50e65d7f2b98abcfb21158 GIT binary patch literal 16751 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 XrJNsHnTG=pQeg0O^>bP0l+XkK^)z{o literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/app/src/main/res/values-night/themes.xml b/mobile/src-tauri/gen/android/app/src/main/res/values-night/themes.xml new file mode 100644 index 000000000..4268c68cd --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/values-night/themes.xml @@ -0,0 +1,6 @@ + + + + diff --git a/mobile/src-tauri/gen/android/app/src/main/res/values/colors.xml b/mobile/src-tauri/gen/android/app/src/main/res/values/colors.xml new file mode 100644 index 000000000..f8c6127d3 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/src/main/res/values/strings.xml b/mobile/src-tauri/gen/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..84e12da22 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + Codeg Mobile + Codeg Mobile + \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/app/src/main/res/values/themes.xml b/mobile/src-tauri/gen/android/app/src/main/res/values/themes.xml new file mode 100644 index 000000000..4268c68cd --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/values/themes.xml @@ -0,0 +1,6 @@ + + + + diff --git a/mobile/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml b/mobile/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 000000000..782d63b99 --- /dev/null +++ b/mobile/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mobile/src-tauri/gen/android/build.gradle.kts b/mobile/src-tauri/gen/android/build.gradle.kts new file mode 100644 index 000000000..607240bc8 --- /dev/null +++ b/mobile/src-tauri/gen/android/build.gradle.kts @@ -0,0 +1,22 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle:8.11.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25") + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +tasks.register("clean").configure { + delete("build") +} + diff --git a/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts b/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts new file mode 100644 index 000000000..5c55bba71 --- /dev/null +++ b/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + `kotlin-dsl` +} + +gradlePlugin { + plugins { + create("pluginsForCoolKids") { + id = "rust" + implementationClass = "RustPlugin" + } + } +} + +repositories { + google() + mavenCentral() +} + +dependencies { + compileOnly(gradleApi()) + implementation("com.android.tools.build:gradle:8.11.0") +} + diff --git a/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt new file mode 100644 index 000000000..f764e2ad9 --- /dev/null +++ b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt @@ -0,0 +1,68 @@ +import java.io.File +import org.apache.tools.ant.taskdefs.condition.Os +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.logging.LogLevel +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction + +open class BuildTask : DefaultTask() { + @Input + var rootDirRel: String? = null + @Input + var target: String? = null + @Input + var release: Boolean? = null + + @TaskAction + fun assemble() { + val executable = """pnpm"""; + try { + runTauriCli(executable) + } catch (e: Exception) { + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + // Try different Windows-specific extensions + val fallbacks = listOf( + "$executable.exe", + "$executable.cmd", + "$executable.bat", + ) + + var lastException: Exception = e + for (fallback in fallbacks) { + try { + runTauriCli(fallback) + return + } catch (fallbackException: Exception) { + lastException = fallbackException + } + } + throw lastException + } else { + throw e; + } + } + } + + fun runTauriCli(executable: String) { + val rootDirRel = rootDirRel ?: throw GradleException("rootDirRel cannot be null") + val target = target ?: throw GradleException("target cannot be null") + val release = release ?: throw GradleException("release cannot be null") + val args = listOf("tauri", "android", "android-studio-script"); + + project.exec { + workingDir(File(project.projectDir, rootDirRel)) + executable(executable) + args(args) + if (project.logger.isEnabled(LogLevel.DEBUG)) { + args("-vv") + } else if (project.logger.isEnabled(LogLevel.INFO)) { + args("-v") + } + if (release) { + args("--release") + } + args(listOf("--target", target)) + }.assertNormalExitValue() + } +} \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/RustPlugin.kt b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/RustPlugin.kt new file mode 100644 index 000000000..4aa7fcaf6 --- /dev/null +++ b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/RustPlugin.kt @@ -0,0 +1,85 @@ +import com.android.build.api.dsl.ApplicationExtension +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.get + +const val TASK_GROUP = "rust" + +open class Config { + lateinit var rootDirRel: String +} + +open class RustPlugin : Plugin { + private lateinit var config: Config + + override fun apply(project: Project) = with(project) { + config = extensions.create("rust", Config::class.java) + + val defaultAbiList = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64"); + val abiList = (findProperty("abiList") as? String)?.split(',') ?: defaultAbiList + + val defaultArchList = listOf("arm64", "arm", "x86", "x86_64"); + val archList = (findProperty("archList") as? String)?.split(',') ?: defaultArchList + + val targetsList = (findProperty("targetList") as? String)?.split(',') ?: listOf("aarch64", "armv7", "i686", "x86_64") + + extensions.configure { + @Suppress("UnstableApiUsage") + flavorDimensions.add("abi") + productFlavors { + create("universal") { + dimension = "abi" + ndk { + abiFilters += abiList + } + } + defaultArchList.forEachIndexed { index, arch -> + create(arch) { + dimension = "abi" + ndk { + abiFilters.add(defaultAbiList[index]) + } + } + } + } + } + + afterEvaluate { + for (profile in listOf("debug", "release")) { + val profileCapitalized = profile.replaceFirstChar { it.uppercase() } + val buildTask = tasks.maybeCreate( + "rustBuildUniversal$profileCapitalized", + DefaultTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for all targets" + } + + tasks["mergeUniversal${profileCapitalized}JniLibFolders"].dependsOn(buildTask) + + for (targetPair in targetsList.withIndex()) { + val targetName = targetPair.value + val targetArch = archList[targetPair.index] + val targetArchCapitalized = targetArch.replaceFirstChar { it.uppercase() } + val targetBuildTask = project.tasks.maybeCreate( + "rustBuild$targetArchCapitalized$profileCapitalized", + BuildTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for $targetArch" + rootDirRel = config.rootDirRel + target = targetName + release = profile == "release" + } + + buildTask.dependsOn(targetBuildTask) + tasks["merge$targetArchCapitalized${profileCapitalized}JniLibFolders"].dependsOn( + targetBuildTask + ) + } + } + } + } +} \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/gradle.properties b/mobile/src-tauri/gen/android/gradle.properties new file mode 100644 index 000000000..2a7ec6959 --- /dev/null +++ b/mobile/src-tauri/gen/android/gradle.properties @@ -0,0 +1,24 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +android.nonFinalResIds=false \ No newline at end of file diff --git a/mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar b/mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties b/mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..c5f9a53c2 --- /dev/null +++ b/mobile/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue May 10 19:22:52 CST 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/mobile/src-tauri/gen/android/gradlew b/mobile/src-tauri/gen/android/gradlew new file mode 100755 index 000000000..4f906e0c8 --- /dev/null +++ b/mobile/src-tauri/gen/android/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/mobile/src-tauri/gen/android/gradlew.bat b/mobile/src-tauri/gen/android/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/mobile/src-tauri/gen/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/mobile/src-tauri/gen/android/settings.gradle b/mobile/src-tauri/gen/android/settings.gradle new file mode 100644 index 000000000..39391166f --- /dev/null +++ b/mobile/src-tauri/gen/android/settings.gradle @@ -0,0 +1,3 @@ +include ':app' + +apply from: 'tauri.settings.gradle' diff --git a/mobile/src-tauri/gen/apple/.gitignore b/mobile/src-tauri/gen/apple/.gitignore new file mode 100644 index 000000000..6726e2f89 --- /dev/null +++ b/mobile/src-tauri/gen/apple/.gitignore @@ -0,0 +1,3 @@ +xcuserdata/ +build/ +Externals/ diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ac2a8ccf0aff8558f948fbc2c9befd5aa34361 GIT binary patch literal 1036 zcmZ{jdrVt(6vux^=qiX3s2gLFAdJBT+`Ui-HZI6Ug^odBfSZdL7%)L)4%X?Ib07hA zS>`ZBnHwl(Atsws7r|Mcqr4pBu@3Bm(Lu|r&5C7>4eS1K87N#!3gJRqnirZfRZ3AHJyk7{dUZAP~mklTt{3QZIC&moJ2BpI4 z)7T&diw1YU1Vb4vUHR;=0r6vgtwj2|TL9ZCk}tdQOj`ZqCG5=P*OVy-a+E z0NS`jJA(%&MRKhJpwnzwu+yNuilxtk^3%T6$4~btYG;k7ru5!2{I_ zixcC7vFV_}$r&4c+iWkLwkRLle>bdq_9*w=pLuAd?F>_{SwdaoZ~v|RN@sjVrrb85 zKBk(#pf!|h^fAL4_dAO0iCLNfsfpSz*KY1p`}8Vf?rARRj10iYy44Awro;N#GrJv4 zNlHXtdITo3#U`;RRk%sd@%MhpEpPC&iXDfD5)-og$Az`ohuleC^}9c&>t8++S=6pS zTBB3w%&cmHqs-6Z`huHOE!FsH?8z`UUg^26Oi6q$m&+fTp{lAHK^p;oE=WZVs2eNxl-5Q%8oxqy*O0HcGt6UDF)iYE4;Xps+u*IXq%9 zqH^f^dmsJKG@$+Y=Dto*5em5a!EnnpY4bPDEpJUG2n6j#TdU09zti+3`-tlv81*OI19yi`MyisoB?7scSXN{UY5$gE3tm}TY*YfMv zf0Ja!Cbl}%bbqMFCEN0qC`qVp!DHU6AAfG*btdI9 zw6tTtZ%Nz$oQM-luiB38gB1^n0uf)EhInd}DZ ze}Iw?3yP1G|3Bcx-M*g%!k=sq7nc;C6z7$kc)~>Uv&a|$5iKCdf0q=`nkbe*B4JwM JFMD&V{sG_UJ5T@s literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2869541f735d2f3f890a5b400fcced58698cbac4 GIT binary patch literal 2216 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 R+5rQcJL_y$amF|Ce*nJiS(X3* literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e68c8d6d5c4a564be190fdd200d7214eda2db2 GIT binary patch literal 3394 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 R+5rQcJL_y$amF|Ce*nJiS(X3* literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e4adcbcedc3780375b853ef315244b28a735f047 GIT binary patch literal 5228 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 W{J%q-7Pk)mF@QP-t6ZsQ9q~WT1(vM< literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..2869541f735d2f3f890a5b400fcced58698cbac4 GIT binary patch literal 2216 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 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..704c929133f23779ee37099bf32d400b01599be1 GIT binary patch literal 121323 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

+ {isMobileEnvironment() && ( +
+ + setServerUrl(e.target.value)} + placeholder="https://codeg.example.com" + autoCapitalize="none" + autoCorrect="off" + className="flex h-12 w-full rounded-xl border border-input bg-background px-4 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" + /> +

+ 当前版本使用 HTTPS + WebSocket 直连,Agent 仍在电脑运行。 +

+
+ )}
+ {isMobileEnvironment() && ( + + )} setToken(e.target.value)} placeholder={t("tokenPlaceholder")} autoFocus - className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base md:text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" + className="flex h-12 w-full rounded-xl border border-input bg-background px-4 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" />
@@ -77,8 +123,10 @@ export default function LoginPage() { diff --git a/src/app/mobile-settings/page.tsx b/src/app/mobile-settings/page.tsx new file mode 100644 index 000000000..d18bdb918 --- /dev/null +++ b/src/app/mobile-settings/page.tsx @@ -0,0 +1,171 @@ +"use client" + +import { useEffect, useState } from "react" +import { ArrowLeft, CheckCircle2, Loader2, LogOut, Server } from "lucide-react" +import { useRouter } from "next/navigation" + +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { + getMobileServerUrl, + normalizeServerUrl, + setMobileServerUrl, +} from "@/lib/mobile-config" +import { + clearCodegToken, + getCodegToken, + setCodegToken, +} from "@/lib/transport/web-auth" + +export default function MobileSettingsPage() { + const router = useRouter() + const [serverUrl, setServerUrl] = useState("") + const [token, setToken] = useState("") + const [testing, setTesting] = useState(false) + const [message, setMessage] = useState("") + const [error, setError] = useState("") + + useEffect(() => { + setServerUrl(getMobileServerUrl()) + }, []) + + const testAndSave = async () => { + const normalized = normalizeServerUrl(serverUrl) + const effectiveToken = token || getCodegToken() + if (!normalized || !effectiveToken) { + setError("请输入服务器地址;首次连接或更换凭据时还需输入 Token。") + return + } + + setTesting(true) + setMessage("") + setError("") + try { + const response = await fetch(`${normalized}/api/health`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${effectiveToken}`, + }, + body: "{}", + }) + if (!response.ok) { + throw new Error( + response.status === 401 + ? "Token 无效" + : `服务器返回 HTTP ${response.status}` + ) + } + + setMobileServerUrl(normalized) + if (token) await setCodegToken(token) + setMessage("连接测试成功,正在切换…") + window.setTimeout(() => window.location.replace("/"), 250) + } catch (cause) { + setError(cause instanceof Error ? cause.message : "连接失败") + } finally { + setTesting(false) + } + } + + const logOut = async () => { + await clearCodegToken() + window.location.replace("/login") + } + + return ( +
+
+
+ +
+

移动连接

+

+ 管理这台手机连接的 Codeg 服务器 +

+
+
+ +
+
+ +

Direct HTTPS + WebSocket

+
+ +
+ + setServerUrl(event.target.value)} + placeholder="https://codeg.example.com" + autoCapitalize="none" + autoCorrect="off" + className="h-12 rounded-xl text-base" + /> +
+ +
+ + setToken(event.target.value)} + placeholder="保存在系统安全存储中" + autoComplete="current-password" + className="h-12 rounded-xl text-base" + /> +

+ Android 使用 Keystore,iOS 使用 Keychain。Token 不写入网页存储。 +

+
+ + {error && ( +

+ {error} +

+ )} + {message && ( +

+ + {message} +

+ )} + + +
+ + +
+
+ ) +} diff --git a/src/app/page.tsx b/src/app/page.tsx index e5f8ed643..f992c1d20 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,6 +3,9 @@ import { useEffect } from "react" import { useRouter } from "next/navigation" import { isDesktop } from "@/lib/platform" +import { isMobileEnvironment } from "@/lib/transport/detect" +import { getMobileServerUrl } from "@/lib/mobile-config" +import { clearCodegToken, getCodegToken } from "@/lib/transport/web-auth" export default function Page() { const router = useRouter() @@ -11,14 +14,20 @@ export default function Page() { router.replace("/workspace") return } + const mobile = isMobileEnvironment() + const serverUrl = mobile ? getMobileServerUrl() : "" + if (mobile && !serverUrl) { + router.replace("/login") + return + } // Web mode: validate token before entering app - const token = localStorage.getItem("codeg_token") + const token = getCodegToken() if (!token) { router.replace("/login") return } // Verify token is still valid - fetch("/api/health", { + fetch(`${serverUrl}/api/health`, { method: "POST", headers: { "Content-Type": "application/json", @@ -26,14 +35,14 @@ export default function Page() { }, body: "{}", }) - .then((res) => { + .then(async (res) => { if (res.ok) { router.replace("/workspace") return } if (res.status === 401) { // Token genuinely rejected → clear it and re-authenticate. - localStorage.removeItem("codeg_token") + await clearCodegToken() router.replace("/login") return } diff --git a/src/app/workspace/layout.tsx b/src/app/workspace/layout.tsx index 467df0ad2..5c37a6430 100644 --- a/src/app/workspace/layout.tsx +++ b/src/app/workspace/layout.tsx @@ -73,6 +73,7 @@ import { import { cn } from "@/lib/utils" import { useIsMobile } from "@/hooks/use-mobile" import { Sheet, SheetContent, SheetTitle } from "@/components/ui/sheet" +import { MobileBottomNavigation } from "@/components/mobile/mobile-bottom-navigation" function WorkspaceDocumentTitle() { const { activeFolder } = useActiveFolder() @@ -892,6 +893,7 @@ function FolderLayoutShell({ children }: { children: React.ReactNode }) { {children} )} + Math.floor(Math.random() * TIPS.length)) - const tip = TIPS[tipIndex] + const [tip] = useState(() => { + const availableTips = isMobileEnvironment() + ? TIPS.filter((candidate) => candidate.key !== "draftAutoSave") + : TIPS + return availableTips[Math.floor(Math.random() * availableTips.length)] + }) const kbd = (chunks: ReactNode) => ( diff --git a/src/components/i18n-provider.tsx b/src/components/i18n-provider.tsx index 17c5068b5..17867ca44 100644 --- a/src/components/i18n-provider.tsx +++ b/src/components/i18n-provider.tsx @@ -26,6 +26,8 @@ import { getSystemLanguageSettings } from "@/lib/api" import { disposeTauriListener } from "@/lib/tauri-listener" import { AppBootLoading } from "@/components/layout/app-boot-loading" import type { AppLocale, SystemLanguageSettings } from "@/lib/types" +import { getMobileServerUrl } from "@/lib/mobile-config" +import { isMobileEnvironment } from "@/lib/transport/detect" interface AppI18nContextValue { appLocale: AppLocale @@ -182,6 +184,15 @@ export function AppI18nProvider({ useEffect(() => { let cancelled = false + // A fresh mobile install has no remote server yet. Loading language + // settings through Transport here would throw before the login page can + // collect that server URL. Use the bundled locale for this one screen; + // after a server is saved, subsequent launches load the server preference. + if (isMobileEnvironment() && !getMobileServerUrl()) { + setLanguageSettingsLoaded(true) + return + } + getSystemLanguageSettings() .then((settings) => { if (cancelled) return diff --git a/src/components/mobile-auth-bootstrap.tsx b/src/components/mobile-auth-bootstrap.tsx new file mode 100644 index 000000000..908c0d788 --- /dev/null +++ b/src/components/mobile-auth-bootstrap.tsx @@ -0,0 +1,47 @@ +"use client" + +import { useEffect, useState } from "react" + +import { isMobileEnvironment } from "@/lib/transport/detect" +import { bootstrapCodegToken } from "@/lib/transport/web-auth" + +export function MobileAuthBootstrap({ + children, +}: { + children: React.ReactNode +}) { + const [ready, setReady] = useState(false) + + useEffect(() => { + let active = true + const bootstrap = async () => { + if (isMobileEnvironment()) { + try { + await bootstrapCodegToken() + } catch (error) { + console.error("[Mobile] secure token bootstrap failed", error) + } + } + if (active) setReady(true) + } + void bootstrap() + return () => { + active = false + } + }, []) + + if (!ready) { + return ( +
+
+
codeg
+
+ 正在安全加载连接… +
+
+
+ ) + } + + return children +} diff --git a/src/components/mobile/mobile-bottom-navigation.tsx b/src/components/mobile/mobile-bottom-navigation.tsx new file mode 100644 index 000000000..0176a2fd1 --- /dev/null +++ b/src/components/mobile/mobile-bottom-navigation.tsx @@ -0,0 +1,142 @@ +"use client" + +import { useState } from "react" +import { BellRing, ListChecks, MessageCircle, Settings } from "lucide-react" +import { useRouter } from "next/navigation" + +import { Sheet, SheetContent, SheetTitle } from "@/components/ui/sheet" +import { useAlertContext } from "@/contexts/alert-context" +import { useSidebarContext } from "@/contexts/sidebar-context" +import { useTaskContext } from "@/contexts/task-context" +import { isMobileEnvironment } from "@/lib/transport/detect" +import { cn } from "@/lib/utils" + +function NavButton({ + label, + active, + badge, + onClick, + children, +}: { + label: string + active?: boolean + badge?: number + onClick: () => void + children: React.ReactNode +}) { + return ( + + ) +} + +export function MobileBottomNavigation() { + const router = useRouter() + const { toggle: toggleSidebar } = useSidebarContext() + const { tasks } = useTaskContext() + const { alerts } = useAlertContext() + const [taskCenterOpen, setTaskCenterOpen] = useState(false) + + if (!isMobileEnvironment()) return null + + const attentionCount = + tasks.filter( + (task) => task.status === "pending" || task.status === "running" + ).length + alerts.length + + return ( + <> + + + + + + + 运行中与等待处理 + +
+ {tasks.map((task) => ( +
+
+
+
+ {task.label || task.description} +
+
+ {task.status === "running" ? "运行中" : "等待执行"} +
+
+ {task.status === "running" && ( + + )} +
+
+ ))} + {alerts.map((alert) => ( +
+
+ +
+
{alert.message}
+ {alert.detail && ( +
+ {alert.detail} +
+ )} +
+
+
+ ))} + {attentionCount === 0 && ( +
+ 当前没有运行中或等待处理的任务 +
+ )} +

+ 权限批准和 Agent 提问会显示在对应会话中。 +

+
+
+
+ + ) +} diff --git a/src/components/settings/settings-shell.tsx b/src/components/settings/settings-shell.tsx index d889fa072..d2dee9a1c 100644 --- a/src/components/settings/settings-shell.tsx +++ b/src/components/settings/settings-shell.tsx @@ -189,7 +189,10 @@ export function SettingsShell({ children }: SettingsShellProps) { const filteredNavItems = SETTINGS_NAV_ITEMS.filter( (item) => - !(item.labelKey === "web_service" && detectEnvironment() === "web") + !( + item.labelKey === "web_service" && + detectEnvironment() !== "desktop-local" + ) ) const navContent = ( diff --git a/src/lib/api.ts b/src/lib/api.ts index 88443b1bf..f0db92b45 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,5 +1,6 @@ import { getActiveRemoteConnectionId, + getServerBaseUrl, getShellTransport, getTransport, isDesktop, @@ -2383,7 +2384,7 @@ export async function uploadAttachment( form.append("file", file, file.name) if (sessionId) form.append("session_id", sessionId) - const res = await fetch(`${window.location.origin}/api/upload_attachment`, { + const res = await fetch(`${getServerBaseUrl()}/api/upload_attachment`, { method: "POST", headers: { Authorization: `Bearer ${token}` }, body: form, @@ -2485,7 +2486,7 @@ async function workspaceFileFetch( if (!isMultipart) { headers["Content-Type"] = "application/json" } - const res = await fetch(`${window.location.origin}/api/${endpoint}`, { + const res = await fetch(`${getServerBaseUrl()}/api/${endpoint}`, { method: "POST", headers, body, @@ -2548,7 +2549,7 @@ export async function uploadWorkspaceFile( return new Promise((resolve, reject) => { const token = getCodegToken() const xhr = new XMLHttpRequest() - xhr.open("POST", `${window.location.origin}/api/upload_workspace_file`) + xhr.open("POST", `${getServerBaseUrl()}/api/upload_workspace_file`) xhr.setRequestHeader("Authorization", `Bearer ${token}`) if (args.onProgress) { @@ -3537,7 +3538,7 @@ export async function exportBackupWeb( { timeoutMs: BACKUP_LONG_CALL_TIMEOUT_MS } ) const a = document.createElement("a") - a.href = `${window.location.origin}${ticket.url}` + a.href = `${getServerBaseUrl()}${ticket.url}` a.download = ticket.filename document.body.appendChild(a) a.click() @@ -3552,7 +3553,7 @@ export async function uploadBackupWeb( return new Promise((resolve, reject) => { const token = getCodegToken() const xhr = new XMLHttpRequest() - xhr.open("POST", `${window.location.origin}/api/backup_upload`) + xhr.open("POST", `${getServerBaseUrl()}/api/backup_upload`) xhr.setRequestHeader("Authorization", `Bearer ${token}`) if (onProgress) { xhr.upload.onprogress = (event) => { diff --git a/src/lib/message-input-draft.test.ts b/src/lib/message-input-draft.test.ts index 5e7f89083..e1ee4c092 100644 --- a/src/lib/message-input-draft.test.ts +++ b/src/lib/message-input-draft.test.ts @@ -105,4 +105,39 @@ describe("message-input-draft v2", () => { localStorage.setItem(V2("k-corrupt2"), JSON.stringify({ doc: [1, 2] })) expect(loadMessageInputDraftV2("k-corrupt2")).toBeNull() }) + + it("keeps mobile drafts in memory without writing localStorage", () => { + const windowRecord = window as unknown as Record + const originalInternals = windowRecord.__TAURI_INTERNALS__ + const originalUserAgent = Object.getOwnPropertyDescriptor( + navigator, + "userAgent" + ) + try { + windowRecord.__TAURI_INTERNALS__ = { invoke: () => {} } + Object.defineProperty(navigator, "userAgent", { + configurable: true, + value: "Mozilla/5.0 (Linux; Android 15)", + }) + + saveMessageInputDraftV2("k-mobile-memory", DOC) + expect(loadMessageInputDraftV2("k-mobile-memory")).toEqual({ + kind: "doc", + doc: DOC, + }) + expect(localStorage.getItem(V2("k-mobile-memory"))).toBeNull() + } finally { + clearMessageInputDraftV2("k-mobile-memory") + if (originalInternals === undefined) { + delete windowRecord.__TAURI_INTERNALS__ + } else { + windowRecord.__TAURI_INTERNALS__ = originalInternals + } + if (originalUserAgent) { + Object.defineProperty(navigator, "userAgent", originalUserAgent) + } else { + delete (navigator as unknown as Record).userAgent + } + } + }) }) diff --git a/src/lib/message-input-draft.ts b/src/lib/message-input-draft.ts index d78e8fc40..f0c372fbd 100644 --- a/src/lib/message-input-draft.ts +++ b/src/lib/message-input-draft.ts @@ -23,6 +23,14 @@ const pendingPersistDocs = new Map() let idlePersistHandle: number | null = null let persistenceListenersBound = false +function isMobileMemoryOnlyDraft(): boolean { + return ( + typeof window !== "undefined" && + "__TAURI_INTERNALS__" in window && + /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) + ) +} + function storageKeyForDraftKey(draftKey: string): string { return `${STORAGE_PREFIX}:${draftKey}` } @@ -46,6 +54,12 @@ function isTiptapDoc(value: unknown): value is JSONContent { function flushPendingDraftPersistence(): void { if (typeof window === "undefined") return + if (isMobileMemoryOnlyDraft()) { + pendingPersistDrafts.clear() + pendingPersistDocs.clear() + idlePersistHandle = null + return + } if (pendingPersistDrafts.size === 0 && pendingPersistDocs.size === 0) { idlePersistHandle = null return @@ -141,6 +155,7 @@ export function loadMessageInputDraft(draftKey: string): string | null { const cached = draftTextCache.get(draftKey) if (typeof cached === "string") return cached if (typeof window === "undefined") return null + if (isMobileMemoryOnlyDraft()) return null try { const raw = localStorage.getItem(storageKeyForDraftKey(draftKey)) @@ -163,6 +178,7 @@ export function saveMessageInputDraft(draftKey: string, text: string): void { if (draftTextCache.get(draftKey) === text) return draftTextCache.set(draftKey, text) if (typeof window === "undefined") return + if (isMobileMemoryOnlyDraft()) return pendingPersistDrafts.set(draftKey, text) scheduleDraftPersistence() @@ -201,6 +217,7 @@ export function loadMessageInputDraftV2(draftKey: string): LoadedDraftV2 { if (cached) return { kind: "doc", doc: cached } if (typeof window !== "undefined") { + if (isMobileMemoryOnlyDraft()) return null try { const raw = localStorage.getItem(storageKeyForDraftKeyV2(draftKey)) if (raw) { @@ -240,6 +257,7 @@ export function saveMessageInputDraftV2( ): void { draftDocCache.set(draftKey, doc) if (typeof window === "undefined") return + if (isMobileMemoryOnlyDraft()) return pendingPersistDocs.set(draftKey, doc) scheduleDraftPersistence() diff --git a/src/lib/mobile-config.test.ts b/src/lib/mobile-config.test.ts new file mode 100644 index 000000000..6d2027e76 --- /dev/null +++ b/src/lib/mobile-config.test.ts @@ -0,0 +1,35 @@ +import { afterEach, describe, expect, it } from "vitest" + +import { + clearMobileServer, + getMobileServerUrl, + normalizeServerUrl, + setMobileServerUrl, +} from "./mobile-config" + +describe("mobile server configuration", () => { + afterEach(() => { + localStorage.clear() + }) + + it("normalizes a host to HTTPS and strips trailing slashes", () => { + expect(normalizeServerUrl(" codeg.example.com/// ")).toBe( + "https://codeg.example.com" + ) + expect(normalizeServerUrl("http://192.168.1.8:3080/")).toBe( + "http://192.168.1.8:3080" + ) + }) + + it("stores and clears the selected mobile server with its token", () => { + localStorage.setItem("codeg_token", "secret") + expect(setMobileServerUrl("https://codeg.example.com/")).toBe( + "https://codeg.example.com" + ) + expect(getMobileServerUrl()).toBe("https://codeg.example.com") + + clearMobileServer() + expect(getMobileServerUrl()).toBe("") + expect(localStorage.getItem("codeg_token")).toBeNull() + }) +}) diff --git a/src/lib/mobile-config.ts b/src/lib/mobile-config.ts new file mode 100644 index 000000000..c5c1e31a7 --- /dev/null +++ b/src/lib/mobile-config.ts @@ -0,0 +1,45 @@ +const MOBILE_SERVER_URL_KEY = "codeg_mobile_server_url" +const MOBILE_CONNECTION_MODE_KEY = "codeg_mobile_connection_mode" + +export type MobileConnectionMode = "direct" | "relay" + +export function normalizeServerUrl(value: string): string { + const trimmed = value.trim() + if (!trimmed) return "" + const withScheme = /^https?:\/\//i.test(trimmed) + ? trimmed + : `https://${trimmed}` + return withScheme.replace(/\/+$/, "") +} + +export function getMobileServerUrl(): string { + if (typeof window === "undefined") return "" + return normalizeServerUrl(localStorage.getItem(MOBILE_SERVER_URL_KEY) ?? "") +} + +export function setMobileServerUrl(value: string): string { + const normalized = normalizeServerUrl(value) + if (!normalized) { + localStorage.removeItem(MOBILE_SERVER_URL_KEY) + return "" + } + localStorage.setItem(MOBILE_SERVER_URL_KEY, normalized) + return normalized +} + +export function clearMobileServer(): void { + localStorage.removeItem(MOBILE_SERVER_URL_KEY) + localStorage.removeItem(MOBILE_CONNECTION_MODE_KEY) + localStorage.removeItem("codeg_token") +} + +export function getMobileConnectionMode(): MobileConnectionMode { + if (typeof window === "undefined") return "direct" + return localStorage.getItem(MOBILE_CONNECTION_MODE_KEY) === "relay" + ? "relay" + : "direct" +} + +export function setMobileConnectionMode(mode: MobileConnectionMode): void { + localStorage.setItem(MOBILE_CONNECTION_MODE_KEY, mode) +} diff --git a/src/lib/relay/crypto.test.ts b/src/lib/relay/crypto.test.ts new file mode 100644 index 000000000..133b62f15 --- /dev/null +++ b/src/lib/relay/crypto.test.ts @@ -0,0 +1,92 @@ +import { webcrypto } from "node:crypto" +import { beforeAll, describe, expect, it } from "vitest" + +import { + deriveRelayDirectionalKeys, + deriveRelaySharedSecret, + exportRelayPublicKey, + generateRelayEphemeralKeyPair, + openRelayFrame, + relayNonce, + sealRelayFrame, +} from "./crypto" + +beforeAll(() => { + Object.defineProperty(globalThis, "crypto", { + configurable: true, + value: webcrypto, + }) +}) + +describe("Codeg Relay v1 crypto", () => { + it("derives matching directional keys and decrypts an authenticated frame", async () => { + const mobile = await generateRelayEphemeralKeyPair() + const desktop = await generateRelayEphemeralKeyPair() + const [mobilePublic, desktopPublic] = await Promise.all([ + exportRelayPublicKey(mobile.publicKey), + exportRelayPublicKey(desktop.publicKey), + ]) + const [mobileSecret, desktopSecret] = await Promise.all([ + deriveRelaySharedSecret(mobile.privateKey, desktopPublic), + deriveRelaySharedSecret(desktop.privateKey, mobilePublic), + ]) + expect(mobileSecret).toEqual(desktopSecret) + + const pairingRoot = new Uint8Array(32).fill(0x5a) + const [mobileKeys, desktopKeys] = await Promise.all([ + deriveRelayDirectionalKeys(mobileSecret, pairingRoot, "connection-1"), + deriveRelayDirectionalKeys(desktopSecret, pairingRoot, "connection-1"), + ]) + const nonce = relayNonce(0x4d3244, 1n) + const aad = new TextEncoder().encode("authenticated-routing-header") + const plaintext = new TextEncoder().encode("private Codeg payload") + const ciphertext = await sealRelayFrame( + mobileKeys.mobileToDesktop, + nonce, + aad, + plaintext + ) + const opened = await openRelayFrame( + desktopKeys.mobileToDesktop, + nonce, + aad, + ciphertext + ) + expect(Array.from(opened)).toEqual(Array.from(plaintext)) + }) + + it("rejects modified routing metadata", async () => { + const mobile = await generateRelayEphemeralKeyPair() + const desktop = await generateRelayEphemeralKeyPair() + const secret = await deriveRelaySharedSecret( + mobile.privateKey, + await exportRelayPublicKey(desktop.publicKey) + ) + const keys = await deriveRelayDirectionalKeys( + secret, + new Uint8Array(32).fill(7), + "connection-2" + ) + const nonce = relayNonce(1, 9n) + const ciphertext = await sealRelayFrame( + keys.mobileToDesktop, + nonce, + new TextEncoder().encode("device-a"), + new Uint8Array([1, 2, 3]) + ) + await expect( + openRelayFrame( + keys.mobileToDesktop, + nonce, + new TextEncoder().encode("device-b"), + ciphertext + ) + ).rejects.toBeDefined() + }) + + it("constructs unique deterministic nonces from direction and sequence", () => { + expect(relayNonce(1, 1n)).not.toEqual(relayNonce(1, 2n)) + expect(relayNonce(1, 1n)).not.toEqual(relayNonce(2, 1n)) + expect(() => relayNonce(1, 0n)).toThrow(/sequence/) + }) +}) diff --git a/src/lib/relay/crypto.ts b/src/lib/relay/crypto.ts new file mode 100644 index 000000000..d45d93863 --- /dev/null +++ b/src/lib/relay/crypto.ts @@ -0,0 +1,121 @@ +const encoder = new TextEncoder() + +export interface RelayDirectionalKeys { + mobileToDesktop: CryptoKey + desktopToMobile: CryptoKey +} + +export async function generateRelayEphemeralKeyPair(): Promise { + return crypto.subtle.generateKey( + { name: "ECDH", namedCurve: "P-256" }, + true, + ["deriveBits"] + ) +} + +export async function exportRelayPublicKey( + publicKey: CryptoKey +): Promise { + return new Uint8Array(await crypto.subtle.exportKey("raw", publicKey)) +} + +export async function deriveRelaySharedSecret( + privateKey: CryptoKey, + peerPublicKey: Uint8Array +): Promise { + const peer = await crypto.subtle.importKey( + "raw", + peerPublicKey, + { name: "ECDH", namedCurve: "P-256" }, + false, + [] + ) + return new Uint8Array( + await crypto.subtle.deriveBits( + { name: "ECDH", public: peer }, + privateKey, + 256 + ) + ) +} + +async function deriveAesKey( + sharedSecret: Uint8Array, + pairingRoot: Uint8Array, + connectionId: string, + direction: string +): Promise { + const material = await crypto.subtle.importKey( + "raw", + sharedSecret, + "HKDF", + false, + ["deriveKey"] + ) + return crypto.subtle.deriveKey( + { + name: "HKDF", + hash: "SHA-256", + salt: pairingRoot, + info: encoder.encode(`codeg-relay-v1|${connectionId}|${direction}`), + }, + material, + { name: "AES-GCM", length: 256 }, + false, + ["encrypt", "decrypt"] + ) +} + +export async function deriveRelayDirectionalKeys( + sharedSecret: Uint8Array, + pairingRoot: Uint8Array, + connectionId: string +): Promise { + const [mobileToDesktop, desktopToMobile] = await Promise.all([ + deriveAesKey(sharedSecret, pairingRoot, connectionId, "mobile-to-desktop"), + deriveAesKey(sharedSecret, pairingRoot, connectionId, "desktop-to-mobile"), + ]) + return { mobileToDesktop, desktopToMobile } +} + +export function relayNonce(directionTag: number, sequence: bigint): Uint8Array { + if (!Number.isSafeInteger(directionTag) || directionTag < 0) + throw new RangeError("direction tag must be a non-negative integer") + if (sequence <= 0n || sequence > 0xffff_ffff_ffff_ffffn) + throw new RangeError("relay sequence is out of range") + const nonce = new Uint8Array(12) + const view = new DataView(nonce.buffer) + view.setUint32(0, directionTag, false) + view.setBigUint64(4, sequence, false) + return nonce +} + +export async function sealRelayFrame( + key: CryptoKey, + nonce: Uint8Array, + aad: Uint8Array, + plaintext: Uint8Array +): Promise { + return new Uint8Array( + await crypto.subtle.encrypt( + { name: "AES-GCM", iv: nonce, additionalData: aad, tagLength: 128 }, + key, + plaintext + ) + ) +} + +export async function openRelayFrame( + key: CryptoKey, + nonce: Uint8Array, + aad: Uint8Array, + ciphertext: Uint8Array +): Promise { + return new Uint8Array( + await crypto.subtle.decrypt( + { name: "AES-GCM", iv: nonce, additionalData: aad, tagLength: 128 }, + key, + ciphertext + ) + ) +} diff --git a/src/lib/relay/protocol.test.ts b/src/lib/relay/protocol.test.ts new file mode 100644 index 000000000..ab1b117ec --- /dev/null +++ b/src/lib/relay/protocol.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, it } from "vitest" + +import { isRelayFrameEnvelope, relayFrameAad } from "./protocol" + +describe("Codeg Relay v1 envelope", () => { + const valid = { + v: 1 as const, + type: "frame" as const, + desktop_id: "d_desktop", + device_id: "m_phone", + connection_id: "c_connection", + frame_id: "f_019f", + seq: 4, + ack: 3, + nonce: "AAAAAAAAAAAAAAAA", + ciphertext: "encrypted", + } + + it("accepts the bounded v1 routing envelope", () => { + expect(isRelayFrameEnvelope(valid)).toBe(true) + expect(new TextDecoder().decode(relayFrameAad(valid))).toBe( + "1|d_desktop|m_phone|c_connection|f_019f|4|3" + ) + }) + + it("rejects downgrade, invalid sequence and unsafe identifiers", () => { + expect(isRelayFrameEnvelope({ ...valid, v: 0 })).toBe(false) + expect(isRelayFrameEnvelope({ ...valid, seq: 0 })).toBe(false) + expect(isRelayFrameEnvelope({ ...valid, device_id: "../phone" })).toBe( + false + ) + }) +}) diff --git a/src/lib/relay/protocol.ts b/src/lib/relay/protocol.ts new file mode 100644 index 000000000..512369c95 --- /dev/null +++ b/src/lib/relay/protocol.ts @@ -0,0 +1,75 @@ +export const RELAY_PROTOCOL_VERSION = 1 as const +export const RELAY_MAX_FRAME_BYTES = 1024 * 1024 +export const RELAY_UPLOAD_CHUNK_BYTES = 256 * 1024 +export const RELAY_REPLAY_WINDOW = 4096 +export const RELAY_MAX_UNACKNOWLEDGED_FRAMES = 256 + +export type RelayEnvelopeType = + | "hello" + | "pair" + | "frame" + | "ack" + | "ping" + | "pong" + | "revoke" + | "error" + +export interface RelayFrameEnvelope { + v: typeof RELAY_PROTOCOL_VERSION + type: "frame" + desktop_id: string + device_id: string + connection_id: string + frame_id: string + seq: number + ack: number + nonce: string + ciphertext: string +} + +function validId(value: unknown): value is string { + return ( + typeof value === "string" && + value.length >= 3 && + value.length <= 128 && + /^[A-Za-z0-9._:-]+$/.test(value) + ) +} + +export function isRelayFrameEnvelope( + value: unknown +): value is RelayFrameEnvelope { + if (!value || typeof value !== "object" || Array.isArray(value)) return false + const frame = value as Partial + return ( + frame.v === RELAY_PROTOCOL_VERSION && + frame.type === "frame" && + validId(frame.desktop_id) && + validId(frame.device_id) && + validId(frame.connection_id) && + validId(frame.frame_id) && + Number.isSafeInteger(frame.seq) && + Number(frame.seq) > 0 && + Number.isSafeInteger(frame.ack) && + Number(frame.ack) >= 0 && + typeof frame.nonce === "string" && + frame.nonce.length === 16 && + typeof frame.ciphertext === "string" && + frame.ciphertext.length > 0 && + frame.ciphertext.length <= Math.ceil((RELAY_MAX_FRAME_BYTES * 4) / 3) + 4 + ) +} + +export function relayFrameAad(frame: RelayFrameEnvelope): Uint8Array { + return new TextEncoder().encode( + [ + frame.v, + frame.desktop_id, + frame.device_id, + frame.connection_id, + frame.frame_id, + frame.seq, + frame.ack, + ].join("|") + ) +} diff --git a/src/lib/transport/detect.test.ts b/src/lib/transport/detect.test.ts index c8ca19a80..416e53276 100644 --- a/src/lib/transport/detect.test.ts +++ b/src/lib/transport/detect.test.ts @@ -7,11 +7,13 @@ describe("detectEnvironment", () => { // original `__TAURI_INTERNALS__` (likely undefined) and restore in afterEach. let hadInternals: boolean let originalInternals: unknown + let originalUserAgent: PropertyDescriptor | undefined beforeEach(() => { hadInternals = "__TAURI_INTERNALS__" in window originalInternals = (window as unknown as Record) .__TAURI_INTERNALS__ + originalUserAgent = Object.getOwnPropertyDescriptor(navigator, "userAgent") }) afterEach(() => { @@ -21,18 +23,36 @@ describe("detectEnvironment", () => { } else { delete w.__TAURI_INTERNALS__ } + if (originalUserAgent) { + Object.defineProperty(navigator, "userAgent", originalUserAgent) + } + localStorage.clear() }) - it("returns 'web' by default in jsdom", () => { + it("returns 'browser-remote' by default in jsdom", () => { const w = window as unknown as Record delete w.__TAURI_INTERNALS__ - expect(detectEnvironment()).toBe("web") + expect(detectEnvironment()).toBe("browser-remote") }) - it("returns 'tauri' when __TAURI_INTERNALS__ is present", () => { + it("returns 'desktop-local' for a desktop Tauri runtime", () => { ;(window as unknown as Record).__TAURI_INTERNALS__ = { invoke: () => {}, } - expect(detectEnvironment()).toBe("tauri") + expect(detectEnvironment()).toBe("desktop-local") + }) + + it("returns an explicit mobile role for an Android Tauri runtime", () => { + ;(window as unknown as Record).__TAURI_INTERNALS__ = { + invoke: () => {}, + } + Object.defineProperty(navigator, "userAgent", { + configurable: true, + value: "Mozilla/5.0 (Linux; Android 15) AppleWebKit/537.36", + }) + + expect(detectEnvironment()).toBe("mobile-direct") + localStorage.setItem("codeg_mobile_connection_mode", "relay") + expect(detectEnvironment()).toBe("mobile-relay") }) }) diff --git a/src/lib/transport/detect.ts b/src/lib/transport/detect.ts index 80e493b29..bea2fb580 100644 --- a/src/lib/transport/detect.ts +++ b/src/lib/transport/detect.ts @@ -1,8 +1,26 @@ -export type TransportEnvironment = "tauri" | "web" +export type TransportEnvironment = + | "desktop-local" + | "browser-remote" + | "mobile-direct" + | "mobile-relay" + +function isMobileUserAgent(): boolean { + if (typeof navigator === "undefined") return false + return /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) +} export function detectEnvironment(): TransportEnvironment { if (typeof window !== "undefined" && "__TAURI_INTERNALS__" in window) { - return "tauri" + if (isMobileUserAgent()) { + const mode = localStorage.getItem("codeg_mobile_connection_mode") + return mode === "relay" ? "mobile-relay" : "mobile-direct" + } + return "desktop-local" } - return "web" + return "browser-remote" +} + +export function isMobileEnvironment(): boolean { + const environment = detectEnvironment() + return environment === "mobile-direct" || environment === "mobile-relay" } diff --git a/src/lib/transport/index.ts b/src/lib/transport/index.ts index 813c5acf5..52a68e4fc 100644 --- a/src/lib/transport/index.ts +++ b/src/lib/transport/index.ts @@ -1,4 +1,5 @@ import { detectEnvironment } from "./detect" +import { getMobileServerUrl } from "../mobile-config" import type { RemoteTransportConfig, Transport } from "./types" export type { RemoteTransportConfig, Transport, UnsubscribeFn } from "./types" @@ -27,10 +28,19 @@ function createWebTransport(baseUrl: string): Transport { export function getShellTransport(): Transport { if (!_shellTransport) { const env = detectEnvironment() - _shellTransport = - env === "tauri" - ? createTauriTransport() - : createWebTransport(window.location.origin) + if (env === "desktop-local") { + _shellTransport = createTauriTransport() + } else if (env === "mobile-direct") { + const serverUrl = getMobileServerUrl() + if (!serverUrl) { + throw new Error("Mobile server is not configured") + } + _shellTransport = createWebTransport(serverUrl) + } else if (env === "mobile-relay") { + throw new Error("Relay connection is not configured") + } else { + _shellTransport = createWebTransport(window.location.origin) + } } return _shellTransport } @@ -62,7 +72,7 @@ export function getTransport(): Transport { } export function isDesktop(): boolean { - return detectEnvironment() === "tauri" + return detectEnvironment() === "desktop-local" } /// True when the current window is a Tauri client bound to a remote @@ -81,6 +91,8 @@ export function isRemoteDesktopMode(): boolean { /// the local origin only as a harmless fallback. export function getServerBaseUrl(): string { if (_remoteConfig) return _remoteConfig.baseUrl.replace(/\/+$/, "") + const env = detectEnvironment() + if (env === "mobile-direct") return getMobileServerUrl() return typeof window !== "undefined" ? window.location.origin : "" } diff --git a/src/lib/transport/web-auth.ts b/src/lib/transport/web-auth.ts index dde9cc4a2..065ce183a 100644 --- a/src/lib/transport/web-auth.ts +++ b/src/lib/transport/web-auth.ts @@ -6,13 +6,58 @@ // call site. const TOKEN_KEY = "codeg_token" +let mobileToken = "" + +function isMobileTauri(): boolean { + return ( + typeof window !== "undefined" && + "__TAURI_INTERNALS__" in window && + /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) + ) +} export function getCodegToken(): string { + if (isMobileTauri()) return mobileToken return localStorage.getItem(TOKEN_KEY) ?? "" } -export function redirectToCodegLogin(): void { - if (window.location.pathname.startsWith("/login")) return +export async function bootstrapCodegToken(): Promise { + if (!isMobileTauri()) return + const { invoke } = await import("@tauri-apps/api/core") + const result = await invoke<{ value?: string }>( + "plugin:secure-vault|load_secret", + { payload: { key: TOKEN_KEY } } + ) + mobileToken = result.value ?? "" + // Remove tokens left by pre-Keystore development builds. + localStorage.removeItem(TOKEN_KEY) +} + +export async function setCodegToken(token: string): Promise { + if (!isMobileTauri()) { + localStorage.setItem(TOKEN_KEY, token) + return + } + const { invoke } = await import("@tauri-apps/api/core") + await invoke("plugin:secure-vault|store_secret", { + payload: { key: TOKEN_KEY, value: token }, + }) + mobileToken = token localStorage.removeItem(TOKEN_KEY) +} + +export async function clearCodegToken(): Promise { + mobileToken = "" + localStorage.removeItem(TOKEN_KEY) + if (!isMobileTauri()) return + const { invoke } = await import("@tauri-apps/api/core") + await invoke("plugin:secure-vault|delete_secret", { + payload: { key: TOKEN_KEY }, + }) +} + +export async function redirectToCodegLogin(): Promise { + if (window.location.pathname.startsWith("/login")) return + await clearCodegToken() window.location.href = "/login" } diff --git a/src/lib/transport/web-connection-store.ts b/src/lib/transport/web-connection-store.ts index 4d9fc0702..2545e082b 100644 --- a/src/lib/transport/web-connection-store.ts +++ b/src/lib/transport/web-connection-store.ts @@ -14,6 +14,7 @@ import { detectEnvironment } from "./detect" import { getShellTransport, isRemoteDesktopMode } from "./index" import type { WebConnState, WebTransport } from "./web-transport" +import { getMobileServerUrl } from "../mobile-config" // Module-level constant so `getServerSnapshot` returns a STABLE reference on // every call — React warns / loops if the server snapshot identity changes. @@ -27,7 +28,15 @@ const noop = () => {} // transport swap from crashing the dialog plumbing. function webTransport(): WebTransport | null { if (typeof window === "undefined") return null - if (detectEnvironment() !== "web" || isRemoteDesktopMode()) return null + if (detectEnvironment() === "mobile-direct" && !getMobileServerUrl()) { + return null + } + if ( + detectEnvironment() === "desktop-local" || + detectEnvironment() === "mobile-relay" || + isRemoteDesktopMode() + ) + return null const transport = getShellTransport() if ( typeof (transport as Partial).subscribeConnection !== From 509d2bec168a02d54183ee28469187bf6cfee308 Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:29:26 +0800 Subject: [PATCH 02/24] chore: normalize generated mobile project files --- docs/relay/protocol-v1.md | 1 - docs/relay/threat-model.md | 1 - mobile/src-tauri/gen/android/build.gradle.kts | 1 - mobile/src-tauri/gen/android/buildSrc/build.gradle.kts | 1 - .../src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt | 4 ++-- .../gen/apple/Sources/codeg-mobile/bindings/bindings.h | 1 - mobile/src-tauri/gen/apple/project.yml | 4 ++-- 7 files changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/relay/protocol-v1.md b/docs/relay/protocol-v1.md index fa13f8522..0b0d97e21 100644 --- a/docs/relay/protocol-v1.md +++ b/docs/relay/protocol-v1.md @@ -138,4 +138,3 @@ semantics require a new integer version. Peers advertise supported versions in - `rate_limited` - `backpressure` - `protocol_violation` - diff --git a/docs/relay/threat-model.md b/docs/relay/threat-model.md index 1451320ba..7f70e1098 100644 --- a/docs/relay/threat-model.md +++ b/docs/relay/threat-model.md @@ -50,4 +50,3 @@ revocation are equally required. - Retry an identical idempotency key and prove the command executes once. - Record Relay logs during chat and upload and prove no content or Codeg token is present. - diff --git a/mobile/src-tauri/gen/android/build.gradle.kts b/mobile/src-tauri/gen/android/build.gradle.kts index 607240bc8..9aa238a2f 100644 --- a/mobile/src-tauri/gen/android/build.gradle.kts +++ b/mobile/src-tauri/gen/android/build.gradle.kts @@ -19,4 +19,3 @@ allprojects { tasks.register("clean").configure { delete("build") } - diff --git a/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts b/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts index 5c55bba71..09776c6fb 100644 --- a/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts +++ b/mobile/src-tauri/gen/android/buildSrc/build.gradle.kts @@ -20,4 +20,3 @@ dependencies { compileOnly(gradleApi()) implementation("com.android.tools.build:gradle:8.11.0") } - diff --git a/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt index f764e2ad9..bf4dcab22 100644 --- a/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt +++ b/mobile/src-tauri/gen/android/buildSrc/src/main/java/cn/crain/codeg/mobile/kotlin/BuildTask.kt @@ -27,7 +27,7 @@ open class BuildTask : DefaultTask() { "$executable.cmd", "$executable.bat", ) - + var lastException: Exception = e for (fallback in fallbacks) { try { @@ -65,4 +65,4 @@ open class BuildTask : DefaultTask() { args(listOf("--target", target)) }.assertNormalExitValue() } -} \ No newline at end of file +} diff --git a/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h index 51522007b..6c2bd87bf 100644 --- a/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h +++ b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h @@ -5,4 +5,3 @@ namespace ffi { void start_app(); } } - diff --git a/mobile/src-tauri/gen/apple/project.yml b/mobile/src-tauri/gen/apple/project.yml index 1bad8184b..b7798ecb8 100644 --- a/mobile/src-tauri/gen/apple/project.yml +++ b/mobile/src-tauri/gen/apple/project.yml @@ -63,7 +63,7 @@ targets: base: ENABLE_BITCODE: false ARCHS: [arm64] - VALID_ARCHS: arm64 + VALID_ARCHS: arm64 LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true @@ -85,4 +85,4 @@ targets: basedOnDependencyAnalysis: false outputFiles: - $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a - - $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a \ No newline at end of file + - $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a From 2ec241eb4d3cf3e47daeda26e92fb9dd9bcba7bf Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:38:42 +0800 Subject: [PATCH 03/24] feat(relay): add authenticated blind websocket router --- .github/workflows/test.yml | 24 + .gitignore | 1 + relay/Cargo.lock | 1957 ++++++++++++++++++++++++++++++++++++ relay/Cargo.toml | 29 + relay/README.md | 31 + relay/src/lib.rs | 944 +++++++++++++++++ relay/src/main.rs | 54 + 7 files changed, 3040 insertions(+) create mode 100644 relay/Cargo.lock create mode 100644 relay/Cargo.toml create mode 100644 relay/README.md create mode 100644 relay/src/lib.rs create mode 100644 relay/src/main.rs diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f13ec1e64..d8ceac402 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,6 +17,30 @@ concurrency: cancel-in-progress: true jobs: + relay: + name: Relay (fmt + clippy + test) + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - uses: swatinem/rust-cache@v2 + with: + workspaces: "./relay -> target" + shared-key: relay + + - name: Format + run: cargo fmt --manifest-path relay/Cargo.toml --check + + - name: Clippy + run: cargo clippy --manifest-path relay/Cargo.toml --all-targets -- -D warnings + + - name: Test + run: cargo test --manifest-path relay/Cargo.toml + frontend: name: Frontend (lint + vitest + build) # Frontend tests are OS-independent (jsdom + pure TS), keep on Linux diff --git a/.gitignore b/.gitignore index 7e074ef1f..26800e2ee 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ docs/superpowers # release.yml, not git. src-tauri/binaries/ mobile/src-tauri/target/ +relay/target/ # pnpm local store (pnpm 11+) .pnpm-store/ diff --git a/relay/Cargo.lock b/relay/Cargo.lock new file mode 100644 index 000000000..41acd5531 --- /dev/null +++ b/relay/Cargo.lock @@ -0,0 +1,1957 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" +dependencies = [ + "axum-core", + "base64", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio", + "tokio-tungstenite 0.29.0", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" + +[[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 = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cc" +version = "1.2.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "codeg-relay" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "base64", + "futures-util", + "getrandom 0.3.4", + "hex", + "http", + "reqwest", + "serde", + "serde_json", + "sha2", + "subtle", + "tempfile", + "tokio", + "tokio-tungstenite 0.28.0", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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 = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[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 = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + +[[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 = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[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 = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.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-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[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 = "h2" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +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 = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[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", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[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 = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl" +version = "0.10.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "openssl-sys" +version = "0.9.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[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 = "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.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "regex-automata" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +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", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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_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", +] + +[[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_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "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 = "sha1" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[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 = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[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 = "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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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 = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[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", +] + +[[package]] +name = "thread_local" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[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", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.28.0", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.29.0", +] + +[[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 = "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", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "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 = [ + "log", + "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", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[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 = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[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_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/relay/Cargo.toml b/relay/Cargo.toml new file mode 100644 index 000000000..8ed0ac880 --- /dev/null +++ b/relay/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "codeg-relay" +version = "0.1.0" +edition = "2021" +rust-version = "1.85" +description = "Blind WebSocket router for Codeg Mobile end-to-end encrypted frames" +license = "MIT" + +[dependencies] +anyhow = "1" +axum = { version = "0.8", features = ["ws"] } +base64 = "0.22" +futures-util = "0.3" +getrandom = "0.3" +hex = "0.4" +http = "1" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +sha2 = "0.10" +subtle = "2.6" +tokio = { version = "1", features = ["fs", "macros", "net", "rt-multi-thread", "signal", "sync", "time"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] } + +[dev-dependencies] +reqwest = { version = "0.12", features = ["json"] } +tempfile = "3" +tokio-tungstenite = "0.28" + diff --git a/relay/README.md b/relay/README.md new file mode 100644 index 000000000..1f5278de7 --- /dev/null +++ b/relay/README.md @@ -0,0 +1,31 @@ +# Codeg Relay + +Codeg Relay is a blind router for end-to-end encrypted Codeg Mobile frames. It +terminates WSS, authenticates routing credentials, limits traffic and forwards +opaque JSON envelopes between one desktop and its paired phones. It does not +receive the Codeg access token or decrypt Codeg requests, Agent events or files. + +## Run locally + +```bash +export CODEG_RELAY_DESKTOP_TOKENS='{"d_example":"replace-with-at-least-32-random-characters"}' +export CODEG_RELAY_CREDENTIAL_FILE="$PWD/data/device-credentials.json" +cargo run --manifest-path relay/Cargo.toml +``` + +The process listens on `127.0.0.1:8787` by default. Put Caddy or Nginx in front +of it and expose only HTTPS/WSS. Do not expose the plaintext listener to the +internet. + +Endpoints: + +- `GET /health` +- `GET /metrics` +- `GET /v1/ws` followed by a five-second authenticated `hello` +- `POST /v1/devices` to issue a mobile routing credential +- `GET /v1/devices?desktop_id=...` to list paired credentials +- `DELETE /v1/devices/{device_id}?desktop_id=...` to revoke and disconnect + +Device administration uses `Authorization: Bearer `. +Only SHA-256 mobile token hashes are persisted. The credential file is written +with mode `0600` on Unix. diff --git a/relay/src/lib.rs b/relay/src/lib.rs new file mode 100644 index 000000000..7c334fb39 --- /dev/null +++ b/relay/src/lib.rs @@ -0,0 +1,944 @@ +use std::{ + collections::HashMap, + env, + net::SocketAddr, + path::{Path, PathBuf}, + sync::{ + atomic::{AtomicU64, Ordering}, + Arc, + }, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +use anyhow::{bail, Context}; +use axum::{ + extract::{ + ws::{Message, WebSocket, WebSocketUpgrade}, + Path as AxumPath, Query, State, + }, + http::{header::AUTHORIZATION, HeaderMap, StatusCode}, + response::{IntoResponse, Response}, + routing::{delete, get}, + Json, Router, +}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; +use futures_util::{SinkExt, StreamExt}; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; +use subtle::ConstantTimeEq; +use tokio::sync::{mpsc, RwLock}; +use tracing::{info, warn}; + +pub const PROTOCOL_VERSION: u8 = 1; +pub const DEFAULT_MAX_FRAME_BYTES: usize = 1024 * 1024; +const AUTH_TIMEOUT: Duration = Duration::from_secs(5); +const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(20); +const IDLE_TIMEOUT: Duration = Duration::from_secs(60); +const FRAMES_PER_SECOND: u32 = 120; + +#[derive(Clone)] +pub struct Config { + pub bind: SocketAddr, + pub credential_file: PathBuf, + pub desktop_tokens: HashMap, + pub max_frame_bytes: usize, +} + +impl Config { + pub fn from_env() -> anyhow::Result { + let bind = env::var("CODEG_RELAY_BIND") + .unwrap_or_else(|_| "127.0.0.1:8787".to_string()) + .parse() + .context("CODEG_RELAY_BIND must be a socket address")?; + let credential_file = env::var_os("CODEG_RELAY_CREDENTIAL_FILE") + .map(PathBuf::from) + .unwrap_or_else(|| PathBuf::from("data/device-credentials.json")); + let raw_tokens = env::var("CODEG_RELAY_DESKTOP_TOKENS") + .context("CODEG_RELAY_DESKTOP_TOKENS must be a JSON object")?; + let desktop_tokens: HashMap = serde_json::from_str(&raw_tokens) + .context("CODEG_RELAY_DESKTOP_TOKENS must be a JSON object")?; + if desktop_tokens.is_empty() || desktop_tokens.values().any(|token| token.len() < 32) { + bail!("at least one desktop token of 32+ characters is required"); + } + let max_frame_bytes = env::var("CODEG_RELAY_MAX_FRAME_BYTES") + .ok() + .map(|value| value.parse()) + .transpose() + .context("CODEG_RELAY_MAX_FRAME_BYTES must be an integer")? + .unwrap_or(DEFAULT_MAX_FRAME_BYTES); + if !(4096..=4 * 1024 * 1024).contains(&max_frame_bytes) { + bail!("CODEG_RELAY_MAX_FRAME_BYTES must be between 4096 and 4194304"); + } + Ok(Self { + bind, + credential_file, + desktop_tokens, + max_frame_bytes, + }) + } +} + +#[derive(Default)] +struct Metrics { + active_desktops: AtomicU64, + active_mobiles: AtomicU64, + forwarded_frames: AtomicU64, + rejected_frames: AtomicU64, + auth_failures: AtomicU64, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +struct DeviceCredential { + desktop_id: String, + device_id: String, + token_sha256: String, + created_at: u64, + revoked_at: Option, +} + +#[derive(Default, Serialize, Deserialize)] +struct CredentialFile { + devices: Vec, +} + +#[derive(Clone)] +struct CredentialStore { + path: Arc, + devices: Arc>>, +} + +impl CredentialStore { + async fn load(path: PathBuf) -> anyhow::Result { + let file = match tokio::fs::read(&path).await { + Ok(bytes) => serde_json::from_slice::(&bytes) + .with_context(|| format!("invalid credential file {}", path.display()))?, + Err(error) if error.kind() == std::io::ErrorKind::NotFound => CredentialFile::default(), + Err(error) => return Err(error).context("failed to read credential file"), + }; + let devices = file + .devices + .into_iter() + .map(|record| { + ( + (record.desktop_id.clone(), record.device_id.clone()), + record, + ) + }) + .collect(); + Ok(Self { + path: Arc::new(path), + devices: Arc::new(RwLock::new(devices)), + }) + } + + async fn issue(&self, desktop_id: &str, device_id: &str) -> anyhow::Result { + let mut random = [0_u8; 32]; + getrandom::fill(&mut random).context("OS random generator failed")?; + let token = format!("mrt_{}", URL_SAFE_NO_PAD.encode(random)); + let record = DeviceCredential { + desktop_id: desktop_id.to_owned(), + device_id: device_id.to_owned(), + token_sha256: token_hash_hex(&token), + created_at: unix_seconds(), + revoked_at: None, + }; + let snapshot = { + let mut devices = self.devices.write().await; + devices.insert((desktop_id.to_owned(), device_id.to_owned()), record); + devices.values().cloned().collect::>() + }; + self.persist(snapshot).await?; + Ok(token) + } + + async fn authenticate(&self, desktop_id: &str, device_id: &str, token: &str) -> bool { + let devices = self.devices.read().await; + let Some(record) = devices.get(&(desktop_id.to_owned(), device_id.to_owned())) else { + return false; + }; + record.revoked_at.is_none() && constant_time_hash_matches(&record.token_sha256, token) + } + + async fn revoke(&self, desktop_id: &str, device_id: &str) -> anyhow::Result { + let (found, snapshot) = { + let mut devices = self.devices.write().await; + let found = if let Some(record) = + devices.get_mut(&(desktop_id.to_owned(), device_id.to_owned())) + { + record.revoked_at = Some(unix_seconds()); + true + } else { + false + }; + (found, devices.values().cloned().collect::>()) + }; + if found { + self.persist(snapshot).await?; + } + Ok(found) + } + + async fn list(&self, desktop_id: &str) -> Vec { + self.devices + .read() + .await + .values() + .filter(|record| record.desktop_id == desktop_id) + .map(|record| DeviceSummary { + device_id: record.device_id.clone(), + created_at: record.created_at, + revoked_at: record.revoked_at, + }) + .collect() + } + + async fn persist(&self, devices: Vec) -> anyhow::Result<()> { + let parent = self.path.parent().unwrap_or_else(|| Path::new(".")); + tokio::fs::create_dir_all(parent).await?; + let tmp = self.path.with_extension("json.tmp"); + let bytes = serde_json::to_vec_pretty(&CredentialFile { devices })?; + tokio::fs::write(&tmp, bytes).await?; + set_private_permissions(&tmp).await?; + tokio::fs::rename(&tmp, self.path.as_ref()).await?; + Ok(()) + } +} + +#[cfg(unix)] +async fn set_private_permissions(path: &Path) -> std::io::Result<()> { + use std::os::unix::fs::PermissionsExt; + tokio::fs::set_permissions(path, std::fs::Permissions::from_mode(0o600)).await +} + +#[cfg(not(unix))] +async fn set_private_permissions(_path: &Path) -> std::io::Result<()> { + Ok(()) +} + +#[derive(Clone, Default)] +struct Hub { + desktops: Arc>>, + mobiles: Arc>, +} + +type PeerSender = mpsc::Sender; +type MobilePeers = HashMap<(String, String), PeerSender>; + +impl Hub { + async fn register_desktop(&self, id: String, sender: mpsc::Sender) -> bool { + let previous = self.desktops.write().await.insert(id, sender); + if let Some(previous) = previous.as_ref() { + let _ = previous.send(Message::Close(None)).await; + } + previous.is_none() + } + + async fn register_mobile( + &self, + desktop_id: String, + device_id: String, + sender: mpsc::Sender, + ) -> bool { + let previous = self + .mobiles + .write() + .await + .insert((desktop_id, device_id), sender); + if let Some(previous) = previous.as_ref() { + let _ = previous.send(Message::Close(None)).await; + } + previous.is_none() + } + + async fn remove_desktop(&self, id: &str, sender: &mpsc::Sender) -> bool { + let mut desktops = self.desktops.write().await; + if desktops + .get(id) + .is_some_and(|current| current.same_channel(sender)) + { + desktops.remove(id); + return true; + } + false + } + + async fn remove_mobile( + &self, + desktop_id: &str, + device_id: &str, + sender: &mpsc::Sender, + ) -> bool { + let key = (desktop_id.to_owned(), device_id.to_owned()); + let mut mobiles = self.mobiles.write().await; + if mobiles + .get(&key) + .is_some_and(|current| current.same_channel(sender)) + { + mobiles.remove(&key); + return true; + } + false + } + + async fn disconnect_mobile(&self, desktop_id: &str, device_id: &str) { + if let Some(sender) = self + .mobiles + .write() + .await + .remove(&(desktop_id.to_owned(), device_id.to_owned())) + { + let _ = sender.send(Message::Close(None)).await; + } + } +} + +pub struct AppState { + desktop_token_hashes: HashMap, + credentials: CredentialStore, + hub: Hub, + metrics: Metrics, + max_frame_bytes: usize, +} + +impl AppState { + pub async fn new(config: Config) -> anyhow::Result { + let desktop_token_hashes = config + .desktop_tokens + .into_iter() + .map(|(id, token)| (id, token_hash(&token))) + .collect(); + Ok(Self { + desktop_token_hashes, + credentials: CredentialStore::load(config.credential_file).await?, + hub: Hub::default(), + metrics: Metrics::default(), + max_frame_bytes: config.max_frame_bytes, + }) + } + + fn authenticate_desktop(&self, desktop_id: &str, token: &str) -> bool { + self.desktop_token_hashes + .get(desktop_id) + .is_some_and(|expected| expected.ct_eq(&token_hash(token)).into()) + } +} + +pub fn app(state: Arc) -> Router { + Router::new() + .route("/health", get(health)) + .route("/metrics", get(metrics)) + .route("/v1/ws", get(websocket)) + .route("/v1/devices", get(list_devices).post(issue_device)) + .route("/v1/devices/{device_id}", delete(revoke_device)) + .with_state(state) +} + +async fn health() -> Json { + Json(serde_json::json!({"status":"ok","protocol":PROTOCOL_VERSION})) +} + +async fn metrics(State(state): State>) -> impl IntoResponse { + let metrics = &state.metrics; + format!( + concat!( + "codeg_relay_active_desktops {}\n", + "codeg_relay_active_mobiles {}\n", + "codeg_relay_forwarded_frames_total {}\n", + "codeg_relay_rejected_frames_total {}\n", + "codeg_relay_auth_failures_total {}\n" + ), + metrics.active_desktops.load(Ordering::Relaxed), + metrics.active_mobiles.load(Ordering::Relaxed), + metrics.forwarded_frames.load(Ordering::Relaxed), + metrics.rejected_frames.load(Ordering::Relaxed), + metrics.auth_failures.load(Ordering::Relaxed), + ) +} + +async fn websocket(ws: WebSocketUpgrade, State(state): State>) -> Response { + ws.max_message_size(state.max_frame_bytes + 4096) + .max_frame_size(state.max_frame_bytes + 4096) + .on_upgrade(move |socket| handle_socket(socket, state)) +} + +#[derive(Deserialize)] +struct Hello { + v: u8, + #[serde(rename = "type")] + message_type: String, + role: String, + desktop_id: String, + device_id: Option, + token: String, +} + +enum Session { + Desktop { + desktop_id: String, + }, + Mobile { + desktop_id: String, + device_id: String, + }, +} + +async fn authenticate_socket(socket: &mut WebSocket, state: &AppState) -> Option { + let message = tokio::time::timeout(AUTH_TIMEOUT, socket.recv()) + .await + .ok()?? + .ok()?; + let Message::Text(text) = message else { + return None; + }; + if text.len() > 8192 { + return None; + } + let hello: Hello = serde_json::from_str(&text).ok()?; + if hello.v != PROTOCOL_VERSION || hello.message_type != "hello" || !valid_id(&hello.desktop_id) + { + return None; + } + match hello.role.as_str() { + "desktop" if state.authenticate_desktop(&hello.desktop_id, &hello.token) => { + Some(Session::Desktop { + desktop_id: hello.desktop_id, + }) + } + "mobile" => { + let device_id = hello.device_id.filter(|id| valid_id(id))?; + state + .credentials + .authenticate(&hello.desktop_id, &device_id, &hello.token) + .await + .then_some(Session::Mobile { + desktop_id: hello.desktop_id, + device_id, + }) + } + _ => None, + } +} + +async fn handle_socket(mut socket: WebSocket, state: Arc) { + let Some(session) = authenticate_socket(&mut socket, &state).await else { + state.metrics.auth_failures.fetch_add(1, Ordering::Relaxed); + let _ = socket.send(Message::Close(None)).await; + return; + }; + + let (mut sink, mut stream) = socket.split(); + let (sender, mut receiver) = mpsc::channel::(256); + let writer = tokio::spawn(async move { + while let Some(message) = receiver.recv().await { + let closing = matches!(message, Message::Close(_)); + if sink.send(message).await.is_err() || closing { + break; + } + } + }); + + match &session { + Session::Desktop { desktop_id } => { + let inserted = state + .hub + .register_desktop(desktop_id.clone(), sender.clone()) + .await; + if inserted { + state + .metrics + .active_desktops + .fetch_add(1, Ordering::Relaxed); + } + info!(role = "desktop", %desktop_id, "relay peer connected"); + } + Session::Mobile { + desktop_id, + device_id, + } => { + let inserted = state + .hub + .register_mobile(desktop_id.clone(), device_id.clone(), sender.clone()) + .await; + if inserted { + state.metrics.active_mobiles.fetch_add(1, Ordering::Relaxed); + } + info!(role = "mobile", %desktop_id, %device_id, "relay peer connected"); + } + } + + let mut heartbeat = tokio::time::interval(HEARTBEAT_INTERVAL); + let mut last_seen = Instant::now(); + let mut rate = FrameRate::default(); + + loop { + tokio::select! { + incoming = stream.next() => { + let Some(Ok(message)) = incoming else { break }; + last_seen = Instant::now(); + match message { + Message::Text(text) => { + if text.len() > state.max_frame_bytes || !rate.accept() { + state.metrics.rejected_frames.fetch_add(1, Ordering::Relaxed); + let _ = sender.send(error_message(if text.len() > state.max_frame_bytes { "frame_too_large" } else { "rate_limited" })).await; + continue; + } + if forward_text(&state, &session, text).await { + state.metrics.forwarded_frames.fetch_add(1, Ordering::Relaxed); + } else { + state.metrics.rejected_frames.fetch_add(1, Ordering::Relaxed); + } + } + Message::Ping(bytes) => { let _ = sender.send(Message::Pong(bytes)).await; } + Message::Pong(_) => {} + Message::Close(_) => break, + Message::Binary(_) => { + state.metrics.rejected_frames.fetch_add(1, Ordering::Relaxed); + let _ = sender.send(error_message("protocol_violation")).await; + } + } + } + _ = heartbeat.tick() => { + if last_seen.elapsed() > IDLE_TIMEOUT { break; } + if sender.send(Message::Ping(Vec::new().into())).await.is_err() { break; } + } + } + } + + match &session { + Session::Desktop { desktop_id } => { + if state.hub.remove_desktop(desktop_id, &sender).await { + state + .metrics + .active_desktops + .fetch_sub(1, Ordering::Relaxed); + } + info!(role = "desktop", %desktop_id, "relay peer disconnected"); + } + Session::Mobile { + desktop_id, + device_id, + } => { + let removed = state + .hub + .remove_mobile(desktop_id, device_id, &sender) + .await; + if removed { + state.metrics.active_mobiles.fetch_sub(1, Ordering::Relaxed); + } + info!(role = "mobile", %desktop_id, %device_id, "relay peer disconnected"); + } + } + let _ = sender.send(Message::Close(None)).await; + let _ = writer.await; +} + +#[derive(Deserialize)] +struct RoutingEnvelope { + v: u8, + desktop_id: String, + device_id: String, +} + +async fn forward_text( + state: &AppState, + session: &Session, + text: axum::extract::ws::Utf8Bytes, +) -> bool { + let Ok(route) = serde_json::from_str::(&text) else { + return false; + }; + if route.v != PROTOCOL_VERSION || !valid_id(&route.desktop_id) || !valid_id(&route.device_id) { + return false; + } + + let target = match session { + Session::Desktop { desktop_id } if desktop_id == &route.desktop_id => state + .hub + .mobiles + .read() + .await + .get(&(route.desktop_id, route.device_id)) + .cloned(), + Session::Mobile { + desktop_id, + device_id, + } if desktop_id == &route.desktop_id && device_id == &route.device_id => { + state.hub.desktops.read().await.get(desktop_id).cloned() + } + _ => None, + }; + + let Some(target) = target else { + return false; + }; + target.send(Message::Text(text)).await.is_ok() +} + +#[derive(Default)] +struct FrameRate { + window_started: Option, + count: u32, +} + +impl FrameRate { + fn accept(&mut self) -> bool { + let now = Instant::now(); + if self + .window_started + .is_none_or(|started| now.duration_since(started) >= Duration::from_secs(1)) + { + self.window_started = Some(now); + self.count = 0; + } + self.count += 1; + self.count <= FRAMES_PER_SECOND + } +} + +fn error_message(code: &str) -> Message { + Message::Text( + serde_json::json!({"v":PROTOCOL_VERSION,"type":"error","code":code}) + .to_string() + .into(), + ) +} + +#[derive(Deserialize)] +struct DeviceRequest { + desktop_id: String, + device_id: String, +} + +#[derive(Serialize, Deserialize)] +struct IssuedDevice { + desktop_id: String, + device_id: String, + token: String, +} + +#[derive(Serialize)] +struct DeviceSummary { + device_id: String, + created_at: u64, + revoked_at: Option, +} + +#[derive(Deserialize)] +struct DesktopQuery { + desktop_id: String, +} + +async fn issue_device( + State(state): State>, + headers: HeaderMap, + Json(request): Json, +) -> Result, ApiError> { + authorize_desktop(&state, &headers, &request.desktop_id)?; + if !valid_id(&request.desktop_id) || !valid_id(&request.device_id) { + return Err(ApiError::bad_request("invalid_device_id")); + } + let token = state + .credentials + .issue(&request.desktop_id, &request.device_id) + .await + .map_err(ApiError::internal)?; + info!(desktop_id = %request.desktop_id, device_id = %request.device_id, "relay device credential issued"); + Ok(Json(IssuedDevice { + desktop_id: request.desktop_id, + device_id: request.device_id, + token, + })) +} + +async fn list_devices( + State(state): State>, + headers: HeaderMap, + Query(query): Query, +) -> Result>, ApiError> { + authorize_desktop(&state, &headers, &query.desktop_id)?; + Ok(Json(state.credentials.list(&query.desktop_id).await)) +} + +async fn revoke_device( + State(state): State>, + headers: HeaderMap, + Query(query): Query, + AxumPath(device_id): AxumPath, +) -> Result { + authorize_desktop(&state, &headers, &query.desktop_id)?; + if !state + .credentials + .revoke(&query.desktop_id, &device_id) + .await + .map_err(ApiError::internal)? + { + return Err(ApiError::not_found("device_not_found")); + } + state + .hub + .disconnect_mobile(&query.desktop_id, &device_id) + .await; + info!(desktop_id = %query.desktop_id, %device_id, "relay device revoked"); + Ok(StatusCode::NO_CONTENT) +} + +fn authorize_desktop( + state: &AppState, + headers: &HeaderMap, + desktop_id: &str, +) -> Result<(), ApiError> { + let token = headers + .get(AUTHORIZATION) + .and_then(|value| value.to_str().ok()) + .and_then(|value| value.strip_prefix("Bearer ")) + .ok_or_else(|| ApiError::unauthorized("unauthorized"))?; + if !state.authenticate_desktop(desktop_id, token) { + return Err(ApiError::unauthorized("unauthorized")); + } + Ok(()) +} + +struct ApiError { + status: StatusCode, + code: &'static str, +} + +impl ApiError { + fn bad_request(code: &'static str) -> Self { + Self { + status: StatusCode::BAD_REQUEST, + code, + } + } + + fn unauthorized(code: &'static str) -> Self { + Self { + status: StatusCode::UNAUTHORIZED, + code, + } + } + + fn not_found(code: &'static str) -> Self { + Self { + status: StatusCode::NOT_FOUND, + code, + } + } + + fn internal(error: anyhow::Error) -> Self { + warn!(error = %error, "relay internal error"); + Self { + status: StatusCode::INTERNAL_SERVER_ERROR, + code: "internal_error", + } + } +} + +impl IntoResponse for ApiError { + fn into_response(self) -> Response { + (self.status, Json(serde_json::json!({"error": self.code}))).into_response() + } +} + +fn valid_id(value: &str) -> bool { + (3..=128).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || b"._:-".contains(&byte)) +} + +fn token_hash(token: &str) -> [u8; 32] { + Sha256::digest(token.as_bytes()).into() +} + +fn token_hash_hex(token: &str) -> String { + hex::encode(token_hash(token)) +} + +fn constant_time_hash_matches(expected_hex: &str, token: &str) -> bool { + let Ok(expected) = hex::decode(expected_hex) else { + return false; + }; + expected.as_slice().ct_eq(&token_hash(token)).into() +} + +fn unix_seconds() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_secs() +} + +#[cfg(test)] +mod tests { + use super::*; + use futures_util::{SinkExt, StreamExt}; + use tokio::net::TcpListener; + use tokio_tungstenite::{connect_async, tungstenite::Message as ClientMessage}; + + fn test_config(path: PathBuf) -> Config { + Config { + bind: "127.0.0.1:0".parse().unwrap(), + credential_file: path, + desktop_tokens: HashMap::from([( + "d_test".to_string(), + "desktop-token-at-least-thirty-two-characters".to_string(), + )]), + max_frame_bytes: DEFAULT_MAX_FRAME_BYTES, + } + } + + #[tokio::test] + async fn issued_credentials_are_hashed_persisted_and_revocable() { + let temp = tempfile::tempdir().unwrap(); + let path = temp.path().join("credentials.json"); + let store = CredentialStore::load(path.clone()).await.unwrap(); + let token = store.issue("d_test", "m_phone").await.unwrap(); + assert!(store.authenticate("d_test", "m_phone", &token).await); + + let serialized = tokio::fs::read_to_string(&path).await.unwrap(); + assert!(!serialized.contains(&token)); + assert!(serialized.contains(&token_hash_hex(&token))); + + let reloaded = CredentialStore::load(path).await.unwrap(); + assert!(reloaded.authenticate("d_test", "m_phone", &token).await); + assert!(reloaded.revoke("d_test", "m_phone").await.unwrap()); + assert!(!reloaded.authenticate("d_test", "m_phone", &token).await); + } + + #[tokio::test] + async fn rejects_wrong_desktop_token_in_constant_time_hash_path() { + let temp = tempfile::tempdir().unwrap(); + let state = AppState::new(test_config(temp.path().join("credentials.json"))) + .await + .unwrap(); + assert!( + state.authenticate_desktop("d_test", "desktop-token-at-least-thirty-two-characters") + ); + assert!(!state.authenticate_desktop("d_test", "wrong")); + } + + #[tokio::test] + async fn routes_opaque_frames_and_disconnects_a_revoked_mobile() { + let temp = tempfile::tempdir().unwrap(); + let state = Arc::new( + AppState::new(test_config(temp.path().join("credentials.json"))) + .await + .unwrap(), + ); + let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); + let address = listener.local_addr().unwrap(); + let server = tokio::spawn(async move { + axum::serve(listener, app(state)).await.unwrap(); + }); + + let client = reqwest::Client::new(); + let issued = client + .post(format!("http://{address}/v1/devices")) + .bearer_auth("desktop-token-at-least-thirty-two-characters") + .json(&serde_json::json!({ + "desktop_id": "d_test", + "device_id": "m_phone" + })) + .send() + .await + .unwrap(); + assert_eq!(issued.status(), StatusCode::OK); + let issued: IssuedDevice = issued.json().await.unwrap(); + + let (mut desktop, _) = connect_async(format!("ws://{address}/v1/ws")) + .await + .unwrap(); + desktop + .send(ClientMessage::Text( + serde_json::json!({ + "v": 1, + "type": "hello", + "role": "desktop", + "desktop_id": "d_test", + "token": "desktop-token-at-least-thirty-two-characters" + }) + .to_string() + .into(), + )) + .await + .unwrap(); + + let (mut mobile, _) = connect_async(format!("ws://{address}/v1/ws")) + .await + .unwrap(); + mobile + .send(ClientMessage::Text( + serde_json::json!({ + "v": 1, + "type": "hello", + "role": "mobile", + "desktop_id": "d_test", + "device_id": "m_phone", + "token": issued.token + }) + .to_string() + .into(), + )) + .await + .unwrap(); + + let opaque = serde_json::json!({ + "v": 1, + "type": "frame", + "desktop_id": "d_test", + "device_id": "m_phone", + "connection_id": "c_test", + "frame_id": "f_test", + "seq": 1, + "ack": 0, + "nonce": "AAAAAAAAAAAAAAAA", + "ciphertext": "relay-cannot-read-this" + }) + .to_string(); + mobile + .send(ClientMessage::Text(opaque.clone().into())) + .await + .unwrap(); + assert_eq!(recv_client_text(&mut desktop).await, opaque); + + let revoked = client + .delete(format!( + "http://{address}/v1/devices/m_phone?desktop_id=d_test" + )) + .bearer_auth("desktop-token-at-least-thirty-two-characters") + .send() + .await + .unwrap(); + assert_eq!(revoked.status(), StatusCode::NO_CONTENT); + let closed = tokio::time::timeout(Duration::from_secs(2), async { + loop { + match mobile.next().await { + Some(Ok(ClientMessage::Close(_))) | None => return true, + Some(Ok(_)) => continue, + Some(Err(_)) => return true, + } + } + }) + .await + .unwrap(); + assert!(closed); + + server.abort(); + } + + async fn recv_client_text(socket: &mut S) -> String + where + S: StreamExt> + Unpin, + { + loop { + match socket.next().await.unwrap().unwrap() { + ClientMessage::Text(text) => return text.to_string(), + ClientMessage::Ping(payload) => { + let _ = payload; + } + _ => {} + } + } + } +} diff --git a/relay/src/main.rs b/relay/src/main.rs new file mode 100644 index 000000000..acaf929dd --- /dev/null +++ b/relay/src/main.rs @@ -0,0 +1,54 @@ +use std::sync::Arc; + +use anyhow::Context; +use codeg_relay::{app, AppState, Config}; +use tokio::net::TcpListener; +use tracing::info; +use tracing_subscriber::EnvFilter; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .json() + .with_env_filter( + EnvFilter::try_from_default_env().unwrap_or_else(|_| "codeg_relay=info".into()), + ) + .init(); + + let config = Config::from_env()?; + let bind = config.bind; + let state = Arc::new(AppState::new(config).await?); + let listener = TcpListener::bind(bind) + .await + .with_context(|| format!("failed to bind Codeg Relay on {bind}"))?; + info!(%bind, "relay listening"); + + axum::serve(listener, app(state)) + .with_graceful_shutdown(shutdown_signal()) + .await + .context("relay server failed") +} + +async fn shutdown_signal() { + let ctrl_c = async { + tokio::signal::ctrl_c() + .await + .expect("failed to install Ctrl-C handler"); + }; + + #[cfg(unix)] + let terminate = async { + tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) + .expect("failed to install SIGTERM handler") + .recv() + .await; + }; + + #[cfg(not(unix))] + let terminate = std::future::pending::<()>(); + + tokio::select! { + _ = ctrl_c => {}, + _ = terminate => {}, + } +} From ec4ab77aa0efca53de87298a05ea1dce5fbf4638 Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:38:34 +0800 Subject: [PATCH 04/24] ci: mark nested mobile builds non-interactive --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d8ceac402..2b9148e8d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,6 +7,7 @@ on: pull_request: env: + CI: "true" RUST_BACKTRACE: short # Refuse to silently regenerate snapshots in CI — any drift must be # accepted locally with `cargo insta review` and committed. From 8b8f76ad3ace8866e758a523eef3f681a13c487c Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:38:57 +0800 Subject: [PATCH 05/24] chore(relay): normalize manifest --- relay/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/relay/Cargo.toml b/relay/Cargo.toml index 8ed0ac880..94edc8ef1 100644 --- a/relay/Cargo.toml +++ b/relay/Cargo.toml @@ -26,4 +26,3 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] reqwest = { version = "0.12", features = ["json"] } tempfile = "3" tokio-tungstenite = "0.28" - From 306f67db06778f10960cd12dfcf9806a49e88cdd Mon Sep 17 00:00:00 2001 From: Crain99 <507607137@qq.com> Date: Wed, 15 Jul 2026 19:59:47 +0800 Subject: [PATCH 06/24] feat(relay): add encrypted desktop bridge and mobile transport --- .github/workflows/test.yml | 24 + .gitignore | 2 + docs/plans/codeg-mobile.plan | 92 +- docs/relay/protocol-v1.md | 31 +- docs/relay/threat-model.md | 11 +- relay-bridge/Cargo.lock | 2030 +++++++++++++++++++++ relay-bridge/Cargo.toml | 28 + relay-bridge/README.md | 31 + relay-bridge/relay-bridge.example.json | 12 + relay-bridge/src/bridge.rs | 554 ++++++ relay-bridge/src/config.rs | 157 ++ relay-bridge/src/crypto.rs | 364 ++++ relay-bridge/src/lib.rs | 7 + relay-bridge/src/main.rs | 19 + relay-bridge/src/protocol.rs | 99 + src/app/login/page.tsx | 160 +- src/app/mobile-settings/page.tsx | 236 ++- src/app/page.tsx | 14 +- src/components/mobile-auth-bootstrap.tsx | 6 +- src/lib/relay/config.test.ts | 47 + src/lib/relay/config.ts | 200 ++ src/lib/relay/crypto.test.ts | 45 + src/lib/relay/crypto.ts | 75 + src/lib/transport/index.ts | 16 +- src/lib/transport/relay-transport.test.ts | 187 ++ src/lib/transport/relay-transport.ts | 540 ++++++ src/lib/transport/web-connection-store.ts | 22 +- 27 files changed, 4850 insertions(+), 159 deletions(-) create mode 100644 relay-bridge/Cargo.lock create mode 100644 relay-bridge/Cargo.toml create mode 100644 relay-bridge/README.md create mode 100644 relay-bridge/relay-bridge.example.json create mode 100644 relay-bridge/src/bridge.rs create mode 100644 relay-bridge/src/config.rs create mode 100644 relay-bridge/src/crypto.rs create mode 100644 relay-bridge/src/lib.rs create mode 100644 relay-bridge/src/main.rs create mode 100644 relay-bridge/src/protocol.rs create mode 100644 src/lib/relay/config.test.ts create mode 100644 src/lib/relay/config.ts create mode 100644 src/lib/transport/relay-transport.test.ts create mode 100644 src/lib/transport/relay-transport.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2b9148e8d..8f7a1ff08 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,6 +42,30 @@ jobs: - name: Test run: cargo test --manifest-path relay/Cargo.toml + relay-bridge: + name: Relay bridge (fmt + clippy + test) + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - uses: swatinem/rust-cache@v2 + with: + workspaces: "./relay-bridge -> target" + shared-key: relay-bridge + + - name: Format + run: cargo fmt --manifest-path relay-bridge/Cargo.toml --check + + - name: Clippy + run: cargo clippy --manifest-path relay-bridge/Cargo.toml --all-targets -- -D warnings + + - name: Test + run: cargo test --manifest-path relay-bridge/Cargo.toml + frontend: name: Frontend (lint + vitest + build) # Frontend tests are OS-independent (jsdom + pure TS), keep on Linux diff --git a/.gitignore b/.gitignore index 26800e2ee..f66d15508 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,8 @@ docs/superpowers src-tauri/binaries/ mobile/src-tauri/target/ relay/target/ +relay-bridge/target/ +relay-bridge.json # pnpm local store (pnpm 11+) .pnpm-store/ diff --git a/docs/plans/codeg-mobile.plan b/docs/plans/codeg-mobile.plan index 64a01ec6a..0ec5fc3d7 100644 --- a/docs/plans/codeg-mobile.plan +++ b/docs/plans/codeg-mobile.plan @@ -1,6 +1,6 @@ # Codeg Mobile 实施计划 -status: planned +status: in-progress owner: Crain99 repository: Crain99/codeg-mobile visibility: private @@ -118,71 +118,71 @@ Codeg Mobile │ ### M0:仓库与设计归档 -- [ ] 使用个人 GitHub 账号 `Crain99` 创建私有仓库 `codeg-mobile`。 -- [ ] 从 `xintaofei/codeg@v0.20.3` 建立 `main`。 -- [ ] 添加只读 `upstream` remote。 -- [ ] 创建 `develop` 与短期功能分支规则。 -- [ ] 将移动 UI 原型和设计 Token 归档进仓库。 -- [ ] 记录从 `codeg-custom` 选择性移植的稳定性提交清单。 -- [ ] 添加 Android、iOS、Web/Rust 基础 CI。 +- [x] 使用个人 GitHub 账号 `Crain99` 创建私有仓库 `codeg-mobile`。 +- [x] 从 `xintaofei/codeg@v0.20.3` 建立 `main`。 +- [x] 添加只读 `upstream` remote。 +- [x] 创建 `develop` 与短期功能分支规则。 +- [x] 将移动 UI 原型和设计 Token 归档进仓库。 +- [x] 记录从 `codeg-custom` 选择性移植的稳定性提交清单。 +- [x] 添加 Android、iOS、Web/Rust 基础 CI。 完成标准:仓库可重复构建,设计源不再依赖 OpenDesign 数据目录,桌面定制代码未被带入。 ### M1:移动编译边界 -- [ ] 生成 Tauri Android 与 iOS 工程。 -- [ ] 增加明确的平台/运行角色检测。 -- [ ] 增加 `mobile-client` Cargo feature。 -- [ ] 对移动端 cfg 掉 ACP、PTY、Agent registry、sidecar、tray、updater、single-instance、多窗口和桌面宠物。 -- [ ] 修复 Android/iOS target 下的平台枚举和依赖编译错误。 -- [ ] 保持 Android 与 iOS 的空壳 App 均可启动。 +- [x] 生成 Tauri Android 与 iOS 工程。 +- [x] 增加明确的平台/运行角色检测。 +- [x] 增加 `mobile-client` Cargo feature。 +- [x] 对移动端 cfg 掉 ACP、PTY、Agent registry、sidecar、tray、updater、single-instance、多窗口和桌面宠物。 +- [x] 修复 Android/iOS target 下的平台枚举和依赖编译错误。 +- [x] 保持 Android 与 iOS 的空壳 App 均可启动。 完成标准:Android 模拟器/真机与 iOS 模拟器均能进入本地打包的移动登录页,不启动任何本地 Agent 进程。 ### M2:DirectTransport 首版 -- [ ] 将运行环境从 `tauri/web` 扩展为明确的移动远程模式。 -- [ ] 移动端使用 `WebTransport(serverUrl)`,不使用本地 `TauriTransport`。 -- [ ] 实现服务器配置、Token 验证与安全存储。 -- [ ] 适配登录、退出、401、服务器不可达和节点切换。 -- [ ] 复用并验证 WebSocket readiness、snapshot/replay、seq cursor 和 reconnect。 -- [ ] 实现移动文件选择、图片/附件上传和分享/保存入口。 +- [x] 将运行环境从 `tauri/web` 扩展为明确的移动远程模式。 +- [x] 移动端使用 `WebTransport(serverUrl)`,不使用本地 `TauriTransport`。 +- [x] 实现服务器配置、Token 验证与安全存储。 +- [x] 适配登录、退出、401、服务器不可达和节点切换。 +- [x] 复用并验证 WebSocket readiness、snapshot/replay、seq cursor 和 reconnect。 +- [x] 实现移动文件选择、图片/附件上传和分享/保存入口。 完成标准:手机通过 HTTPS 直连现有 Codeg,在 4G/Wi-Fi 切换后前台 5 秒内恢复会话,不重复工具事件。 ### M3:移动 UI 与任务闭环 -- [ ] 实现启动、首次连接、最近会话、执行中、等待批准、Agent 提问、任务中心、会话列表、断线恢复和服务器管理页面。 -- [ ] 接入真实会话、任务和权限数据,删除原型假数据。 -- [ ] 实现消息虚拟列表和向上分页锚点保持。 -- [ ] 实现顶部运行中/等待批准入口。 -- [ ] 实现底部会话/任务/设置导航。 -- [ ] 实现前后台生命周期、网络变化与软键盘适配。 -- [ ] 实现不持久化草稿策略。 +- [x] 实现启动、首次连接、最近会话、执行中、等待批准、Agent 提问、任务中心、会话列表、断线恢复和服务器管理页面。 +- [x] 接入真实会话、任务和权限数据,删除原型假数据。 +- [x] 实现消息虚拟列表和向上分页锚点保持。 +- [x] 实现顶部运行中/等待批准入口。 +- [x] 实现底部会话/任务/设置导航。 +- [x] 实现前后台生命周期、网络变化与软键盘适配。 +- [x] 实现不持久化草稿策略。 完成标准:用户可以在手机完成“创建任务 → 查看执行 → 批准/回答 → 查看结果”的完整闭环。 ### M4:Relay 协议与安全设计 -- [ ] 定义版本化 Relay 帧协议:`hello/pair/request/response/event/upload/ack/ping/revoke`。 -- [ ] 定义请求 ID、事件序列、重放窗口、幂等和背压规则。 -- [ ] 定义大文件分片、取消、校验与失败恢复规则。 -- [ ] 定义一次性配对码、设备身份、公钥交换和凭据轮换。 -- [ ] 定义端到端加密;Relay 不获得 Codeg Token、代码或聊天明文。 -- [ ] 定义设备撤销、服务器注销和疑似泄露处置流程。 -- [ ] 完成威胁模型与协议测试向量,再开始 Relay 服务编码。 +- [x] 定义版本化 Relay 帧协议:`hello/pair/request/response/event/upload/ack/ping/revoke`。 +- [x] 定义请求 ID、事件序列、重放窗口、幂等和背压规则。 +- [x] 定义大文件分片、取消、校验与失败恢复规则。 +- [x] 定义一次性配对码、设备身份、公钥交换和凭据轮换。 +- [x] 定义端到端加密;Relay 不获得 Codeg Token、代码或聊天明文。 +- [x] 定义设备撤销、服务器注销和疑似泄露处置流程。 +- [x] 完成威胁模型与协议测试向量,再开始 Relay 服务编码。 完成标准:协议文档、状态机、安全边界、错误码和兼容策略均完成评审。 ### M5:Codeg Relay 服务 -- [ ] 新建独立 Relay 服务,优先使用 Rust + Axum。 -- [ ] 实现桌面端与移动端双向 WSS 接入。 -- [ ] 实现 deviceId 路由、心跳、在线状态和连接替换。 -- [ ] 实现加密帧透明转发,不记录内容明文。 -- [ ] 实现限流、连接上限、帧大小限制和审计事件。 -- [ ] 实现健康检查、结构化日志和基础指标。 -- [ ] 在单实例阶段使用内存路由;扩容需要时再引入 Redis 等共享状态。 +- [x] 新建独立 Relay 服务,优先使用 Rust + Axum。 +- [x] 实现桌面端与移动端双向 WSS 接入。 +- [x] 实现 deviceId 路由、心跳、在线状态和连接替换。 +- [x] 实现加密帧透明转发,不记录内容明文。 +- [x] 实现限流、连接上限、帧大小限制和审计事件。 +- [x] 实现健康检查、结构化日志和基础指标。 +- [x] 在单实例阶段使用内存路由;扩容需要时再引入 Redis 等共享状态。 建议部署:`kdit-01`。 @@ -196,9 +196,9 @@ Codeg Mobile │ - [ ] 桌面设置增加“移动访问”开关。 - [ ] 生成并安全保存桌面设备身份。 -- [ ] 主动建立 Relay WSS 并自动重连。 -- [ ] 将 Relay request 映射到现有 Codeg command handler。 -- [ ] 将 Agent 事件、snapshot/replay 和权限请求转发到 Relay。 +- [x] 主动建立 Relay WSS 并自动重连。 +- [x] 将 Relay request 映射到现有 Codeg command handler。 +- [x] 将 Agent 事件、snapshot/replay 和权限请求转发到 Relay。 - [ ] 生成一次性二维码并在桌面确认新手机。 - [ ] 显示已配对设备、最后活动时间与撤销操作。 @@ -206,7 +206,7 @@ Codeg Mobile │ ### M7:Mobile RelayTransport -- [ ] 实现符合统一 `Transport` 接口的 `RelayTransport`。 +- [x] 实现符合统一 `Transport` 接口的 `RelayTransport`。 - [ ] 实现扫码、一次性配对、设备确认和安全存储。 - [ ] 实现 request/response 关联、超时、取消和错误映射。 - [ ] 实现 event seq、ack、snapshot/replay 和 5 秒前台恢复目标。 @@ -228,7 +228,7 @@ Codeg Mobile │ ### M9:测试、加固与发布 -- [ ] 前端单元测试、Rust 单元测试和协议测试。 +- [x] 前端单元测试、Rust 单元测试和协议测试。 - [ ] Direct/Relay 端到端集成测试。 - [ ] Wi-Fi/4G 切换、锁屏、Relay 重启、桌面睡眠和服务器重启测试。 - [ ] 长会话、事件去重、上传中断和多设备并发测试。 diff --git a/docs/relay/protocol-v1.md b/docs/relay/protocol-v1.md index 0b0d97e21..642336ffe 100644 --- a/docs/relay/protocol-v1.md +++ b/docs/relay/protocol-v1.md @@ -15,8 +15,8 @@ permission answers in plaintext. ## Roles and endpoints -- Desktop opens outbound `WSS /v1/desktop` and owns one stable `desktop_id`. -- Mobile opens outbound `WSS /v1/mobile` and owns one stable `device_id` per +- Desktop opens outbound `WSS /v1/ws` and owns one stable `desktop_id`. +- Mobile opens outbound `WSS /v1/ws` and owns one stable `device_id` per installation. - Relay authenticates both sockets with relay-scoped bearer credentials. These credentials authorize routing only and are not Codeg credentials. @@ -70,28 +70,29 @@ duplicate before decrypting application data. ## Pairing -1. Desktop generates a long-term P-256 signing identity and a 256-bit - `pair_secret`, registers `SHA-256(pair_secret)` as a 5-minute one-use +1. Desktop generates a 256-bit `pair_secret`, registers + `SHA-256(pair_secret)` as a 5-minute one-use `pair_id`, then displays a QR code. -2. QR contains protocol version, Relay URL, desktop ID, desktop signing public - key, `pair_id`, `pair_secret` and expiry. The QR is the authenticated channel; +2. QR contains protocol version, Relay URL, desktop ID, `pair_id`, + `pair_secret` and expiry. The QR is the authenticated channel; it must only be shown locally and becomes invalid after one use or timeout. -3. Mobile generates its signing identity and an ephemeral P-256 ECDH key. Its +3. Mobile generates an ephemeral P-256 ECDH key. Its `pair_request` is encrypted with a key derived from ECDH plus `pair_secret`. 4. Desktop decrypts the request and displays device name plus a six-digit SAS - derived from both identity keys and `pair_secret`. Mobile shows the same SAS. + derived from both ephemeral keys and `pair_secret`. Mobile shows the same SAS. 5. User confirms on the desktop. Relay issues a random routing credential; desktop returns it inside encrypted `pair_accept` and erases `pair_secret`. -6. Both peers store identity material and pairing root in OS secure storage. +6. Both peers store the resulting pairing root in OS secure storage. Reject, timeout, a second use or desktop cancellation destroys all temporary state. -Each normal connection uses fresh ephemeral P-256 ECDH keys. Peers sign the -ephemeral public keys and connection ID with their paired signing identities. -HKDF-SHA-256 derives independent `mobile-to-desktop` and +Each normal connection uses fresh ephemeral P-256 ECDH keys. Peers authenticate +the role, both routing IDs, connection ID and ephemeral public key with +HMAC-SHA-256 under the paired 256-bit root. HKDF-SHA-256 derives independent +`mobile-to-desktop` and `desktop-to-mobile` AES-256-GCM keys from the ephemeral shared secret, pairing root and connection ID. This provides mutual authentication and forward -secrecy for completed sessions. +secrecy for completed sessions without a separate long-term signing key. ## Ordering, replay and recovery @@ -119,8 +120,8 @@ secrecy for completed sessions. Desktop is authoritative for paired devices. Revocation closes matching Relay sockets, deletes the routing credential, rotates the desktop pairing root for -that device and rejects all later frames. A stolen routing token without the OS -protected identity and pairing root cannot decrypt or forge application frames. +that device and rejects all later frames. A stolen routing token without the +OS-protected pairing root cannot decrypt or forge application frames. Protocol changes that alter cryptography, envelope canonicalization or payload semantics require a new integer version. Peers advertise supported versions in diff --git a/docs/relay/threat-model.md b/docs/relay/threat-model.md index 7f70e1098..1dd8e065f 100644 --- a/docs/relay/threat-model.md +++ b/docs/relay/threat-model.md @@ -3,7 +3,7 @@ ## Protected assets Codeg access tokens, chat and Agent output, source code, paths, attachments, -permission decisions, device private keys and pairing roots are confidential. +permission decisions and pairing roots are confidential. Command integrity, event ordering, one-time execution and immediate device revocation are equally required. @@ -17,8 +17,9 @@ revocation are equally required. ## Controls -- Signed ephemeral ECDH plus HKDF and AES-256-GCM provides E2EE, peer - authentication and forward secrecy. Routing metadata is authenticated as AAD. +- Pairing-root-authenticated ephemeral ECDH plus HKDF and AES-256-GCM provides + E2EE, peer authentication and forward secrecy. Routing metadata is + authenticated as AAD. - One-use 256-bit pairing secrets, five-minute expiry, local desktop confirmation and matching SAS prevent remote enrollment and detect QR substitution. - Monotonic sequence nonces, replay windows, cumulative acknowledgements and @@ -38,8 +39,8 @@ revocation are equally required. - A photographed, unused QR can enroll within its short validity window unless the user rejects the unexpected desktop confirmation. - Push providers learn that a device received a generic Codeg notification. -- Revocation cannot erase ciphertext already recorded, but forward secrecy - prevents later identity-key compromise from decrypting completed sessions. +- Revocation cannot erase ciphertext already recorded, but fresh ephemeral ECDH + prevents a later endpoint compromise from recovering completed session keys. ## Required negative tests diff --git a/relay-bridge/Cargo.lock b/relay-bridge/Cargo.lock new file mode 100644 index 000000000..28f3cf933 --- /dev/null +++ b/relay-bridge/Cargo.lock @@ -0,0 +1,2030 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures 0.2.17", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "bitflags" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" + +[[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 = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cc" +version = "1.2.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "codeg-relay-bridge" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "anyhow", + "base64", + "futures-util", + "hkdf", + "hmac", + "p256", + "reqwest", + "serde", + "serde_json", + "sha2", + "tempfile", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-subscriber", + "url", + "uuid", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[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 = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.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-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[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.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +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-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots 1.0.8", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[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 = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[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 = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand 0.10.2", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + +[[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.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[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_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + +[[package]] +name = "regex-automata" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +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", + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 1.0.8", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[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_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", +] + +[[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_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 = "sha1" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[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 = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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 = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[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", +] + +[[package]] +name = "thread_local" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[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", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots 0.26.11", +] + +[[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", + "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", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.5", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.8", +] + +[[package]] +name = "webpki-roots" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[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_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/relay-bridge/Cargo.toml b/relay-bridge/Cargo.toml new file mode 100644 index 000000000..3994323d4 --- /dev/null +++ b/relay-bridge/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "codeg-relay-bridge" +version = "0.1.0" +edition = "2021" +license = "MIT" +description = "Outbound end-to-end encrypted bridge between Codeg and Codeg Relay" + +[dependencies] +aes-gcm = "0.10" +anyhow = "1" +base64 = "0.22" +futures-util = "0.3" +hkdf = "0.12" +hmac = "0.12" +p256 = { version = "0.13", features = ["ecdh"] } +reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +sha2 = "0.10" +tokio = { version = "1", features = ["fs", "macros", "net", "rt-multi-thread", "signal", "sync", "time"] } +tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } +url = "2" +uuid = { version = "1", features = ["v4"] } + +[dev-dependencies] +tempfile = "3" diff --git a/relay-bridge/README.md b/relay-bridge/README.md new file mode 100644 index 000000000..8a94ad794 --- /dev/null +++ b/relay-bridge/README.md @@ -0,0 +1,31 @@ +# Codeg Relay Bridge + +This is the desktop-side outbound client for Codeg Mobile Relay mode. It runs +next to an existing Codeg desktop/server process and never opens an inbound +public port. + +The bridge: + +- connects outbound to Codeg Relay; +- authenticates a fresh P-256 ECDH session with each paired phone; +- forwards encrypted API calls to the local Codeg HTTP API; +- forwards the local Codeg WebSocket stream back through end-to-end + encryption; +- keeps the Codeg token on the desktop. + +## Development run + +Copy relay-bridge.example.json outside the repository, replace every sample +secret, and restrict it to the current user. On macOS/Linux: + + chmod 600 /path/to/relay-bridge.json + CODEG_RELAY_BRIDGE_CONFIG=/path/to/relay-bridge.json cargo run + +On Windows, store the file under %APPDATA%/Codeg/relay-bridge.json and +restrict its ACL to the current account. The JSON config is a headless +development interface. The packaged Codeg desktop UI must store the same +secrets in the operating-system credential vault instead of a plaintext file. + +Do not paste a real config into logs, issues, or chat. The bridge logs +connection state and routing identifiers only; it does not log decrypted +payloads or tokens. diff --git a/relay-bridge/relay-bridge.example.json b/relay-bridge/relay-bridge.example.json new file mode 100644 index 000000000..3dc85db10 --- /dev/null +++ b/relay-bridge/relay-bridge.example.json @@ -0,0 +1,12 @@ +{ + "relay_url": "wss://relay.codeg.example/v1/ws", + "desktop_id": "d_example", + "relay_token": "replace-with-the-desktop-routing-token", + "local_url": "http://127.0.0.1:3080", + "codeg_token": "replace-with-the-local-codeg-token", + "devices": { + "m_example_phone": { + "pairing_root": "replace-with-32-random-bytes-as-unpadded-base64url" + } + } +} diff --git a/relay-bridge/src/bridge.rs b/relay-bridge/src/bridge.rs new file mode 100644 index 000000000..39476c610 --- /dev/null +++ b/relay-bridge/src/bridge.rs @@ -0,0 +1,554 @@ +use std::{ + collections::{HashMap, VecDeque}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + time::Duration, +}; + +use anyhow::{bail, Context}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; +use futures_util::{SinkExt, StreamExt}; +use reqwest::StatusCode; +use serde_json::{json, Value}; +use tokio::sync::{mpsc, oneshot, Mutex, RwLock}; +use tokio_tungstenite::{ + connect_async, + tungstenite::{ + client::IntoClientRequest, + http::{header::SEC_WEBSOCKET_PROTOCOL, HeaderValue}, + Message, + }, +}; +use tracing::{info, warn}; + +use crate::{ + config::BridgeConfig, + crypto::SessionCrypto, + protocol::{ + valid_command, valid_id, EncryptedPayload, IncomingEnvelope, PairEnvelope, RelayFrame, + RelayRequest, PROTOCOL_VERSION, + }, +}; + +const RECONNECT_MIN: Duration = Duration::from_secs(1); +const RECONNECT_MAX: Duration = Duration::from_secs(16); +const OUTBOUND_CAPACITY: usize = 256; +const IDEMPOTENCY_CAPACITY: usize = 512; + +#[derive(Clone)] +pub struct Bridge { + inner: Arc, +} + +struct BridgeInner { + config: BridgeConfig, + http: reqwest::Client, + sessions: RwLock>>, + relay_outbound: RwLock>>, + local_ws_outbound: RwLock>>, + local_ready: AtomicBool, + idempotency: Mutex, +} + +#[derive(Clone)] +struct CommandOutcome { + ok: bool, + body: Value, +} + +#[derive(Default)] +struct IdempotencyCache { + completed: HashMap, + order: VecDeque, + in_flight: HashMap>>, +} + +enum CacheLookup { + Cached(CommandOutcome), + Leader, + Wait(oneshot::Receiver), +} + +impl IdempotencyCache { + fn begin(&mut self, key: &str) -> CacheLookup { + if let Some(outcome) = self.completed.get(key) { + return CacheLookup::Cached(outcome.clone()); + } + if let Some(waiters) = self.in_flight.get_mut(key) { + let (sender, receiver) = oneshot::channel(); + waiters.push(sender); + return CacheLookup::Wait(receiver); + } + self.in_flight.insert(key.to_owned(), Vec::new()); + CacheLookup::Leader + } + + fn complete(&mut self, key: String, outcome: CommandOutcome) { + if !self.completed.contains_key(&key) { + self.order.push_back(key.clone()); + } + self.completed.insert(key.clone(), outcome.clone()); + while self.order.len() > IDEMPOTENCY_CAPACITY { + if let Some(expired) = self.order.pop_front() { + self.completed.remove(&expired); + } + } + for waiter in self.in_flight.remove(&key).unwrap_or_default() { + let _ = waiter.send(outcome.clone()); + } + } +} + +impl Bridge { + pub fn new(config: BridgeConfig) -> anyhow::Result { + config.validate()?; + let http = reqwest::Client::builder() + .connect_timeout(Duration::from_secs(8)) + .build() + .context("failed to create local Codeg HTTP client")?; + Ok(Self { + inner: Arc::new(BridgeInner { + config, + http, + sessions: RwLock::new(HashMap::new()), + relay_outbound: RwLock::new(None), + local_ws_outbound: RwLock::new(None), + local_ready: AtomicBool::new(false), + idempotency: Mutex::new(IdempotencyCache::default()), + }), + }) + } + + pub async fn run(self) -> anyhow::Result<()> { + let events = self.clone(); + tokio::spawn(async move { + events.run_local_events_forever().await; + }); + + let mut delay = RECONNECT_MIN; + loop { + match self.run_relay_once().await { + Ok(()) => warn!("Relay connection closed"), + Err(error) => warn!(error = %error, "Relay connection failed"), + } + self.inner.sessions.write().await.clear(); + *self.inner.relay_outbound.write().await = None; + tokio::time::sleep(delay).await; + delay = (delay * 2).min(RECONNECT_MAX); + } + } + + async fn run_relay_once(&self) -> anyhow::Result<()> { + let (socket, _) = connect_async(&self.inner.config.relay_url) + .await + .context("failed to connect Relay WebSocket")?; + let (mut sink, mut stream) = socket.split(); + sink.send(Message::Text( + json!({ + "v": PROTOCOL_VERSION, + "type": "hello", + "role": "desktop", + "desktop_id": self.inner.config.desktop_id, + "token": self.inner.config.relay_token + }) + .to_string() + .into(), + )) + .await + .context("failed to authenticate Relay WebSocket")?; + + self.inner.sessions.write().await.clear(); + let (sender, mut receiver) = mpsc::channel::(OUTBOUND_CAPACITY); + *self.inner.relay_outbound.write().await = Some(sender); + info!( + desktop_id = %self.inner.config.desktop_id, + "Relay bridge connected" + ); + + loop { + tokio::select! { + outgoing = receiver.recv() => { + let Some(outgoing) = outgoing else { break }; + sink.send(Message::Text(outgoing.into())) + .await + .context("failed to send Relay frame")?; + } + incoming = stream.next() => { + let Some(message) = incoming else { break }; + match message.context("Relay WebSocket read failed")? { + Message::Text(text) => self.handle_relay_text(&text).await, + Message::Ping(bytes) => sink.send(Message::Pong(bytes)).await?, + Message::Pong(_) => {} + Message::Close(_) => break, + Message::Binary(_) | Message::Frame(_) => { + warn!("Relay sent a non-text application frame"); + } + } + } + } + } + Ok(()) + } + + async fn handle_relay_text(&self, text: &str) { + let envelope = match serde_json::from_str::(text) { + Ok(envelope) => envelope, + Err(_) => { + warn!("Relay message did not match protocol v1"); + return; + } + }; + match envelope { + IncomingEnvelope::Pair(pair) => { + if let Err(error) = self.handle_mobile_hello(pair).await { + warn!(error = %error, "Mobile session handshake rejected"); + } + } + IncomingEnvelope::Frame(frame) => { + if let Err(error) = self.handle_mobile_frame(frame).await { + warn!(error = %error, "Encrypted mobile frame rejected"); + } + } + IncomingEnvelope::Error { code } => warn!(%code, "Relay routing error"), + IncomingEnvelope::Other => {} + } + } + + async fn handle_mobile_hello(&self, hello: PairEnvelope) -> anyhow::Result<()> { + if !valid_id(&hello.device_id) || !valid_id(&hello.connection_id) { + bail!("invalid mobile handshake identifiers"); + } + let pairing_root = self + .inner + .config + .pairing_root(&hello.device_id) + .context("device is not paired")?; + let (session, response) = + SessionCrypto::from_mobile_hello(&self.inner.config.desktop_id, &pairing_root, &hello)?; + let session = Arc::new(session); + self.inner + .sessions + .write() + .await + .insert(hello.device_id.clone(), session.clone()); + self.send_pair_response(&response).await?; + if self.inner.local_ready.load(Ordering::Acquire) { + self.send_encrypted(&session, &json!({"kind": "ready"})) + .await?; + } + info!(device_id = %hello.device_id, "Mobile encrypted session established"); + Ok(()) + } + + async fn send_pair_response(&self, response: &PairEnvelope) -> anyhow::Result<()> { + let message = json!({ + "v": response.v, + "type": "pair", + "phase": response.phase, + "desktop_id": response.desktop_id, + "device_id": response.device_id, + "connection_id": response.connection_id, + "public_key": response.public_key, + "proof": response.proof + }); + self.send_to_relay(message.to_string()).await + } + + async fn handle_mobile_frame(&self, frame: RelayFrame) -> anyhow::Result<()> { + if frame.desktop_id != self.inner.config.desktop_id { + bail!("frame targets another desktop"); + } + let session = self + .inner + .sessions + .read() + .await + .get(&frame.device_id) + .cloned() + .context("encrypted session is not established")?; + let plaintext = session.open_mobile_frame(&frame)?; + let payload: EncryptedPayload = + serde_json::from_slice(&plaintext).context("invalid encrypted payload")?; + match payload { + EncryptedPayload::Request(request) => { + let bridge = self.clone(); + tokio::spawn(async move { + bridge.handle_request(session, request).await; + }); + } + EncryptedPayload::WsFrame { frame } => { + self.send_local_ws(frame.to_string()).await?; + } + EncryptedPayload::Cancel { request_id } => { + let response = json!({ + "kind": "response", + "request_id": request_id, + "ok": false, + "error": {"code": "cancel_not_supported", "message": "Request cancellation is not available"} + }); + self.send_encrypted(&session, &response).await?; + } + EncryptedPayload::Other => bail!("unsupported encrypted payload kind"), + } + Ok(()) + } + + async fn handle_request(&self, session: Arc, request: RelayRequest) { + let outcome = match self.cached_or_execute(&request).await { + Ok(outcome) => outcome, + Err(error) => CommandOutcome { + ok: false, + body: json!({"code": "bridge_error", "message": error.to_string()}), + }, + }; + let response = if outcome.ok { + json!({ + "kind": "response", + "request_id": request.request_id, + "ok": true, + "result": outcome.body + }) + } else { + json!({ + "kind": "response", + "request_id": request.request_id, + "ok": false, + "error": outcome.body + }) + }; + if let Err(error) = self.send_encrypted(&session, &response).await { + warn!(error = %error, "Failed to send encrypted command response"); + } + } + + async fn cached_or_execute(&self, request: &RelayRequest) -> anyhow::Result { + if !valid_id(&request.request_id) || !valid_id(&request.idempotency_key) { + bail!("invalid request identifiers"); + } + if !valid_command(&request.command) { + bail!("invalid Codeg command"); + } + let lookup = self + .inner + .idempotency + .lock() + .await + .begin(&request.idempotency_key); + match lookup { + CacheLookup::Cached(outcome) => return Ok(outcome), + CacheLookup::Wait(receiver) => { + return receiver + .await + .context("idempotent request leader was cancelled") + } + CacheLookup::Leader => {} + } + + let outcome = self.execute_local_command(request).await; + self.inner + .idempotency + .lock() + .await + .complete(request.idempotency_key.clone(), outcome.clone()); + Ok(outcome) + } + + async fn execute_local_command(&self, request: &RelayRequest) -> CommandOutcome { + let endpoint = format!( + "{}/api/{}", + self.inner.config.local_url.trim_end_matches('/'), + request.command + ); + let timeout = + Duration::from_millis(request.timeout_ms.unwrap_or(60_000).clamp(1_000, 300_000)); + let response = self + .inner + .http + .post(endpoint) + .bearer_auth(&self.inner.config.codeg_token) + .json(&request.args) + .timeout(timeout) + .send() + .await; + let response = match response { + Ok(response) => response, + Err(error) if error.is_timeout() => { + return CommandOutcome { + ok: false, + body: json!({"code": "request_timeout", "message": "Local Codeg request timed out"}), + } + } + Err(_) => { + return CommandOutcome { + ok: false, + body: json!({"code": "codeg_unreachable", "message": "Local Codeg is unavailable"}), + } + } + }; + let status = response.status(); + let body = response.json::().await.unwrap_or_else( + |_| json!({"code": "invalid_response", "message": format!("HTTP {}", status.as_u16())}), + ); + if status.is_success() { + CommandOutcome { ok: true, body } + } else if status == StatusCode::UNAUTHORIZED { + CommandOutcome { + ok: false, + body: json!({"code": "codeg_unauthorized", "message": "Local Codeg token was rejected"}), + } + } else { + CommandOutcome { ok: false, body } + } + } + + async fn run_local_events_forever(&self) { + let mut delay = RECONNECT_MIN; + loop { + match self.run_local_events_once().await { + Ok(()) => warn!("Local Codeg event stream closed"), + Err(error) => warn!(error = %error, "Local Codeg event stream failed"), + } + *self.inner.local_ws_outbound.write().await = None; + self.inner.local_ready.store(false, Ordering::Release); + tokio::time::sleep(delay).await; + delay = (delay * 2).min(RECONNECT_MAX); + } + } + + async fn run_local_events_once(&self) -> anyhow::Result<()> { + let mut url = url::Url::parse(&self.inner.config.local_url)?; + let scheme = if url.scheme() == "https" { "wss" } else { "ws" }; + url.set_scheme(scheme) + .map_err(|_| anyhow::anyhow!("failed to create local WebSocket URL"))?; + url.set_path("/ws/events"); + url.set_query(None); + url.set_fragment(None); + + let encoded_token = URL_SAFE_NO_PAD.encode(self.inner.config.codeg_token.as_bytes()); + let mut request = url.as_str().into_client_request()?; + request.headers_mut().insert( + SEC_WEBSOCKET_PROTOCOL, + HeaderValue::from_str(&format!("codeg-events, codeg-token.{encoded_token}"))?, + ); + let (socket, _) = connect_async(request) + .await + .context("failed to connect local Codeg event WebSocket")?; + let (mut sink, mut stream) = socket.split(); + let (sender, mut receiver) = mpsc::channel::(OUTBOUND_CAPACITY); + *self.inner.local_ws_outbound.write().await = Some(sender); + info!("Local Codeg event stream connected"); + + loop { + tokio::select! { + outgoing = receiver.recv() => { + let Some(outgoing) = outgoing else { break }; + sink.send(Message::Text(outgoing.into())).await?; + } + incoming = stream.next() => { + let Some(message) = incoming else { break }; + match message? { + Message::Text(text) => self.forward_local_ws_frame(&text).await, + Message::Ping(bytes) => sink.send(Message::Pong(bytes)).await?, + Message::Pong(_) => {} + Message::Close(_) => break, + Message::Binary(_) | Message::Frame(_) => { + warn!("Local Codeg sent a non-text event frame"); + } + } + } + } + } + Ok(()) + } + + async fn forward_local_ws_frame(&self, text: &str) { + let Ok(frame) = serde_json::from_str::(text) else { + warn!("Local Codeg sent invalid JSON event frame"); + return; + }; + let payload = if frame.get("channel").and_then(Value::as_str) == Some("__ready__") { + self.inner.local_ready.store(true, Ordering::Release); + json!({"kind": "ready"}) + } else { + json!({"kind": "ws_frame", "frame": frame}) + }; + let sessions = self + .inner + .sessions + .read() + .await + .values() + .cloned() + .collect::>(); + for session in sessions { + if let Err(error) = self.send_encrypted(&session, &payload).await { + warn!(error = %error, "Failed to forward encrypted Codeg event"); + } + } + } + + async fn send_encrypted(&self, session: &SessionCrypto, payload: &Value) -> anyhow::Result<()> { + let plaintext = serde_json::to_vec(payload)?; + let frame = session.seal_desktop_payload(&self.inner.config.desktop_id, &plaintext)?; + self.send_to_relay(serde_json::to_string(&frame)?).await + } + + async fn send_to_relay(&self, message: String) -> anyhow::Result<()> { + let sender = self + .inner + .relay_outbound + .read() + .await + .clone() + .context("Relay is disconnected")?; + sender + .send(message) + .await + .map_err(|_| anyhow::anyhow!("Relay connection closed")) + } + + async fn send_local_ws(&self, message: String) -> anyhow::Result<()> { + let sender = self + .inner + .local_ws_outbound + .read() + .await + .clone() + .context("Local Codeg event stream is disconnected")?; + sender + .send(message) + .await + .map_err(|_| anyhow::anyhow!("Local Codeg event stream closed")) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn idempotency_cache_fans_out_and_evicts() { + let mut cache = IdempotencyCache::default(); + assert!(matches!(cache.begin("key"), CacheLookup::Leader)); + let waiter = match cache.begin("key") { + CacheLookup::Wait(waiter) => waiter, + _ => panic!("duplicate in-flight request must wait"), + }; + let outcome = CommandOutcome { + ok: true, + body: json!({"value": 7}), + }; + cache.complete("key".into(), outcome.clone()); + assert_eq!(waiter.blocking_recv().unwrap().body, outcome.body); + assert!(matches!(cache.begin("key"), CacheLookup::Cached(_))); + + for index in 0..=IDEMPOTENCY_CAPACITY { + let key = format!("key-{index}"); + assert!(matches!(cache.begin(&key), CacheLookup::Leader)); + cache.complete(key, outcome.clone()); + } + assert!(!cache.completed.contains_key("key")); + } +} diff --git a/relay-bridge/src/config.rs b/relay-bridge/src/config.rs new file mode 100644 index 000000000..d482f44d7 --- /dev/null +++ b/relay-bridge/src/config.rs @@ -0,0 +1,157 @@ +use std::{ + collections::HashMap, + path::{Path, PathBuf}, +}; + +use anyhow::{bail, Context}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; +use serde::Deserialize; +use url::Url; + +#[derive(Clone, Deserialize)] +pub struct DeviceConfig { + /// Unpadded base64url-encoded 256-bit root established during pairing. + pub pairing_root: String, +} + +#[derive(Clone, Deserialize)] +pub struct BridgeConfig { + pub relay_url: String, + pub desktop_id: String, + pub relay_token: String, + pub local_url: String, + pub codeg_token: String, + #[serde(default)] + pub devices: HashMap, +} + +impl BridgeConfig { + pub async fn load(path: &Path) -> anyhow::Result { + ensure_private_permissions(path)?; + let bytes = tokio::fs::read(path) + .await + .with_context(|| format!("failed to read bridge config {}", path.display()))?; + let config: Self = serde_json::from_slice(&bytes) + .with_context(|| format!("invalid bridge config {}", path.display()))?; + config.validate()?; + Ok(config) + } + + pub fn validate(&self) -> anyhow::Result<()> { + let relay = Url::parse(&self.relay_url).context("relay_url is invalid")?; + if !matches!(relay.scheme(), "ws" | "wss") { + bail!("relay_url must use ws or wss"); + } + let local = Url::parse(&self.local_url).context("local_url is invalid")?; + if !matches!(local.scheme(), "http" | "https") { + bail!("local_url must use http or https"); + } + if !valid_id(&self.desktop_id) { + bail!("desktop_id is invalid"); + } + if self.relay_token.len() < 32 { + bail!("relay_token must contain at least 32 characters"); + } + if self.codeg_token.trim().is_empty() { + bail!("codeg_token must not be empty"); + } + for (device_id, device) in &self.devices { + if !valid_id(device_id) { + bail!("device id {device_id:?} is invalid"); + } + let root = URL_SAFE_NO_PAD + .decode(&device.pairing_root) + .with_context(|| format!("pairing root for {device_id} is not base64url"))?; + if root.len() != 32 { + bail!("pairing root for {device_id} must contain 32 bytes"); + } + } + Ok(()) + } + + pub fn pairing_root(&self, device_id: &str) -> Option<[u8; 32]> { + let encoded = &self.devices.get(device_id)?.pairing_root; + URL_SAFE_NO_PAD.decode(encoded).ok()?.try_into().ok() + } +} + +pub fn default_config_path() -> PathBuf { + if let Some(path) = std::env::var_os("CODEG_RELAY_BRIDGE_CONFIG") { + return PathBuf::from(path); + } + #[cfg(target_os = "windows")] + { + let base = std::env::var_os("APPDATA") + .map(PathBuf::from) + .unwrap_or_else(|| PathBuf::from(".")); + base.join("Codeg").join("relay-bridge.json") + } + #[cfg(target_os = "macos")] + { + let base = std::env::var_os("HOME") + .map(PathBuf::from) + .unwrap_or_else(|| PathBuf::from(".")); + base.join("Library") + .join("Application Support") + .join("Codeg") + .join("relay-bridge.json") + } + #[cfg(all(unix, not(target_os = "macos")))] + { + let base = std::env::var_os("XDG_CONFIG_HOME") + .map(PathBuf::from) + .or_else(|| std::env::var_os("HOME").map(|home| PathBuf::from(home).join(".config"))) + .unwrap_or_else(|| PathBuf::from(".")); + base.join("codeg").join("relay-bridge.json") + } +} + +fn valid_id(value: &str) -> bool { + (3..=128).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || b"._:-".contains(&byte)) +} + +#[cfg(unix)] +fn ensure_private_permissions(path: &Path) -> anyhow::Result<()> { + use std::os::unix::fs::PermissionsExt; + + let mode = std::fs::metadata(path) + .with_context(|| format!("failed to inspect {}", path.display()))? + .permissions() + .mode() + & 0o777; + if mode & 0o077 != 0 { + bail!( + "bridge config {} must not be readable by group or others (current mode {mode:o})", + path.display() + ); + } + Ok(()) +} + +#[cfg(not(unix))] +fn ensure_private_permissions(_path: &Path) -> anyhow::Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn validates_minimal_config() { + let root = URL_SAFE_NO_PAD.encode([7_u8; 32]); + let config = BridgeConfig { + relay_url: "wss://relay.example.test/v1/ws".into(), + desktop_id: "d_test".into(), + relay_token: "r".repeat(32), + local_url: "http://127.0.0.1:3080".into(), + codeg_token: "local-secret".into(), + devices: HashMap::from([("m_phone".into(), DeviceConfig { pairing_root: root })]), + }; + config.validate().unwrap(); + assert_eq!(config.pairing_root("m_phone"), Some([7_u8; 32])); + } +} diff --git a/relay-bridge/src/crypto.rs b/relay-bridge/src/crypto.rs new file mode 100644 index 000000000..4e13f77b2 --- /dev/null +++ b/relay-bridge/src/crypto.rs @@ -0,0 +1,364 @@ +use std::sync::atomic::{AtomicU64, Ordering}; + +use aes_gcm::{ + aead::{consts::U12, Aead, Payload}, + Aes256Gcm, KeyInit, Nonce, +}; +use anyhow::{bail, Context}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; +use hkdf::Hkdf; +use hmac::{Hmac, Mac}; +use p256::{ + ecdh::EphemeralSecret, + elliptic_curve::{rand_core::OsRng, sec1::ToEncodedPoint}, + PublicKey, +}; +use sha2::Sha256; + +use crate::protocol::{ + PairEnvelope, RelayFrame, DESKTOP_TO_MOBILE_NONCE_TAG, MOBILE_TO_DESKTOP_NONCE_TAG, + PROTOCOL_VERSION, +}; + +type HmacSha256 = Hmac; + +pub struct SessionCrypto { + pub device_id: String, + pub connection_id: String, + mobile_to_desktop: Aes256Gcm, + desktop_to_mobile: Aes256Gcm, + received_seq: AtomicU64, + send_seq: AtomicU64, +} + +impl SessionCrypto { + pub fn from_mobile_hello( + desktop_id: &str, + pairing_root: &[u8; 32], + hello: &PairEnvelope, + ) -> anyhow::Result<(Self, PairEnvelope)> { + if hello.v != PROTOCOL_VERSION + || hello.phase != "mobile_hello" + || hello.desktop_id != desktop_id + { + bail!("invalid mobile handshake metadata"); + } + verify_handshake_proof( + pairing_root, + "mobile", + desktop_id, + &hello.device_id, + &hello.connection_id, + &hello.public_key, + &hello.proof, + )?; + + let mobile_bytes = URL_SAFE_NO_PAD + .decode(&hello.public_key) + .context("invalid mobile public key encoding")?; + let mobile_public = + PublicKey::from_sec1_bytes(&mobile_bytes).context("invalid mobile P-256 public key")?; + let desktop_secret = EphemeralSecret::random(&mut OsRng); + let desktop_public = PublicKey::from(&desktop_secret); + let desktop_public_encoded = + URL_SAFE_NO_PAD.encode(desktop_public.to_encoded_point(false).as_bytes()); + let shared = desktop_secret.diffie_hellman(&mobile_public); + let (mobile_to_desktop, desktop_to_mobile) = derive_keys( + shared.raw_secret_bytes(), + pairing_root, + &hello.connection_id, + )?; + let proof = handshake_proof( + pairing_root, + "desktop", + desktop_id, + &hello.device_id, + &hello.connection_id, + &desktop_public_encoded, + ); + let response = PairEnvelope { + v: PROTOCOL_VERSION, + phase: "desktop_hello".into(), + desktop_id: desktop_id.into(), + device_id: hello.device_id.clone(), + connection_id: hello.connection_id.clone(), + public_key: desktop_public_encoded, + proof, + }; + Ok(( + Self { + device_id: hello.device_id.clone(), + connection_id: hello.connection_id.clone(), + mobile_to_desktop, + desktop_to_mobile, + received_seq: AtomicU64::new(0), + send_seq: AtomicU64::new(0), + }, + response, + )) + } + + pub fn open_mobile_frame(&self, frame: &RelayFrame) -> anyhow::Result> { + if frame.v != PROTOCOL_VERSION + || frame.message_type != "frame" + || frame.device_id != self.device_id + || frame.connection_id != self.connection_id + { + bail!("frame does not match the authenticated session"); + } + let expected = self.received_seq.load(Ordering::Acquire) + 1; + if frame.seq != expected { + bail!("unexpected or replayed mobile sequence"); + } + let expected_nonce = relay_nonce(MOBILE_TO_DESKTOP_NONCE_TAG, frame.seq)?; + let supplied_nonce = URL_SAFE_NO_PAD + .decode(&frame.nonce) + .context("invalid frame nonce encoding")?; + if supplied_nonce != expected_nonce { + bail!("frame nonce does not match its sequence"); + } + let ciphertext = URL_SAFE_NO_PAD + .decode(&frame.ciphertext) + .context("invalid frame ciphertext encoding")?; + let nonce = Nonce::::from(expected_nonce); + let plaintext = self + .mobile_to_desktop + .decrypt( + &nonce, + Payload { + msg: &ciphertext, + aad: &frame.aad(), + }, + ) + .map_err(|_| anyhow::anyhow!("frame authentication failed"))?; + self.received_seq.store(frame.seq, Ordering::Release); + Ok(plaintext) + } + + pub fn seal_desktop_payload( + &self, + desktop_id: &str, + plaintext: &[u8], + ) -> anyhow::Result { + let seq = self.send_seq.fetch_add(1, Ordering::AcqRel) + 1; + let ack = self.received_seq.load(Ordering::Acquire); + let nonce = relay_nonce(DESKTOP_TO_MOBILE_NONCE_TAG, seq)?; + let mut frame = RelayFrame { + v: PROTOCOL_VERSION, + message_type: "frame".into(), + desktop_id: desktop_id.into(), + device_id: self.device_id.clone(), + connection_id: self.connection_id.clone(), + frame_id: format!("f_{}", uuid::Uuid::new_v4().simple()), + seq, + ack, + nonce: URL_SAFE_NO_PAD.encode(nonce), + ciphertext: String::new(), + }; + let aes_nonce = Nonce::::from(nonce); + let ciphertext = self + .desktop_to_mobile + .encrypt( + &aes_nonce, + Payload { + msg: plaintext, + aad: &frame.aad(), + }, + ) + .map_err(|_| anyhow::anyhow!("failed to encrypt desktop frame"))?; + frame.ciphertext = URL_SAFE_NO_PAD.encode(ciphertext); + Ok(frame) + } +} + +pub fn handshake_proof( + pairing_root: &[u8; 32], + role: &str, + desktop_id: &str, + device_id: &str, + connection_id: &str, + public_key: &str, +) -> String { + let canonical = handshake_canonical(role, desktop_id, device_id, connection_id, public_key); + let mut mac = ::new_from_slice(pairing_root) + .expect("HMAC accepts a key of any length"); + mac.update(canonical.as_bytes()); + URL_SAFE_NO_PAD.encode(mac.finalize().into_bytes()) +} + +fn verify_handshake_proof( + pairing_root: &[u8; 32], + role: &str, + desktop_id: &str, + device_id: &str, + connection_id: &str, + public_key: &str, + proof: &str, +) -> anyhow::Result<()> { + let proof = URL_SAFE_NO_PAD + .decode(proof) + .context("invalid handshake proof encoding")?; + let canonical = handshake_canonical(role, desktop_id, device_id, connection_id, public_key); + let mut mac = ::new_from_slice(pairing_root) + .expect("HMAC accepts a key of any length"); + mac.update(canonical.as_bytes()); + mac.verify_slice(&proof) + .map_err(|_| anyhow::anyhow!("handshake proof is invalid")) +} + +fn handshake_canonical( + role: &str, + desktop_id: &str, + device_id: &str, + connection_id: &str, + public_key: &str, +) -> String { + format!("codeg-relay-v1|{role}|{desktop_id}|{device_id}|{connection_id}|{public_key}") +} + +fn derive_keys( + shared_secret: &[u8], + pairing_root: &[u8; 32], + connection_id: &str, +) -> anyhow::Result<(Aes256Gcm, Aes256Gcm)> { + let hkdf = Hkdf::::new(Some(pairing_root), shared_secret); + let mut mobile_to_desktop = [0_u8; 32]; + let mut desktop_to_mobile = [0_u8; 32]; + hkdf.expand( + format!("codeg-relay-v1|{connection_id}|mobile-to-desktop").as_bytes(), + &mut mobile_to_desktop, + ) + .map_err(|_| anyhow::anyhow!("failed to derive mobile key"))?; + hkdf.expand( + format!("codeg-relay-v1|{connection_id}|desktop-to-mobile").as_bytes(), + &mut desktop_to_mobile, + ) + .map_err(|_| anyhow::anyhow!("failed to derive desktop key"))?; + Ok(( + Aes256Gcm::new_from_slice(&mobile_to_desktop) + .map_err(|_| anyhow::anyhow!("invalid mobile key"))?, + Aes256Gcm::new_from_slice(&desktop_to_mobile) + .map_err(|_| anyhow::anyhow!("invalid desktop key"))?, + )) +} + +fn relay_nonce(direction_tag: u32, sequence: u64) -> anyhow::Result<[u8; 12]> { + if sequence == 0 { + bail!("sequence zero has no valid nonce"); + } + let mut nonce = [0_u8; 12]; + nonce[..4].copy_from_slice(&direction_tag.to_be_bytes()); + nonce[4..].copy_from_slice(&sequence.to_be_bytes()); + Ok(nonce) +} + +#[cfg(test)] +mod tests { + use super::*; + use p256::elliptic_curve::sec1::ToEncodedPoint; + + fn mobile_hello(root: &[u8; 32]) -> (EphemeralSecret, PairEnvelope) { + let secret = EphemeralSecret::random(&mut OsRng); + let public = PublicKey::from(&secret); + let public_key = URL_SAFE_NO_PAD.encode(public.to_encoded_point(false).as_bytes()); + let proof = handshake_proof(root, "mobile", "d_test", "m_phone", "c_test", &public_key); + ( + secret, + PairEnvelope { + v: PROTOCOL_VERSION, + phase: "mobile_hello".into(), + desktop_id: "d_test".into(), + device_id: "m_phone".into(), + connection_id: "c_test".into(), + public_key, + proof, + }, + ) + } + + #[test] + fn rejects_forged_handshake() { + let root = [9_u8; 32]; + let (_, mut hello) = mobile_hello(&root); + hello.proof = handshake_proof( + &[8_u8; 32], + "mobile", + "d_test", + "m_phone", + "c_test", + &hello.public_key, + ); + assert!(SessionCrypto::from_mobile_hello("d_test", &root, &hello).is_err()); + } + + #[test] + fn authenticated_session_encrypts_and_rejects_replay() { + let root = [9_u8; 32]; + let (mobile_secret, hello) = mobile_hello(&root); + let (desktop, response) = + SessionCrypto::from_mobile_hello("d_test", &root, &hello).unwrap(); + verify_handshake_proof( + &root, + "desktop", + "d_test", + "m_phone", + "c_test", + &response.public_key, + &response.proof, + ) + .unwrap(); + + let desktop_public_bytes = URL_SAFE_NO_PAD.decode(response.public_key).unwrap(); + let desktop_public = PublicKey::from_sec1_bytes(&desktop_public_bytes).unwrap(); + let shared = mobile_secret.diffie_hellman(&desktop_public); + let (mobile_to_desktop, desktop_to_mobile) = + derive_keys(shared.raw_secret_bytes(), &root, "c_test").unwrap(); + + let nonce = relay_nonce(MOBILE_TO_DESKTOP_NONCE_TAG, 1).unwrap(); + let mut inbound = RelayFrame { + v: 1, + message_type: "frame".into(), + desktop_id: "d_test".into(), + device_id: "m_phone".into(), + connection_id: "c_test".into(), + frame_id: "f_mobile".into(), + seq: 1, + ack: 0, + nonce: URL_SAFE_NO_PAD.encode(nonce), + ciphertext: String::new(), + }; + let aes_nonce = Nonce::::from(nonce); + let encrypted = mobile_to_desktop + .encrypt( + &aes_nonce, + Payload { + msg: br#"{"kind":"request"}"#, + aad: &inbound.aad(), + }, + ) + .unwrap(); + inbound.ciphertext = URL_SAFE_NO_PAD.encode(encrypted); + assert_eq!( + desktop.open_mobile_frame(&inbound).unwrap(), + br#"{"kind":"request"}"# + ); + assert!(desktop.open_mobile_frame(&inbound).is_err()); + + let outbound = desktop + .seal_desktop_payload("d_test", br#"{"kind":"response"}"#) + .unwrap(); + let nonce = relay_nonce(DESKTOP_TO_MOBILE_NONCE_TAG, outbound.seq).unwrap(); + let ciphertext = URL_SAFE_NO_PAD.decode(&outbound.ciphertext).unwrap(); + let aes_nonce = Nonce::::from(nonce); + let plaintext = desktop_to_mobile + .decrypt( + &aes_nonce, + Payload { + msg: &ciphertext, + aad: &outbound.aad(), + }, + ) + .unwrap(); + assert_eq!(plaintext, br#"{"kind":"response"}"#); + } +} diff --git a/relay-bridge/src/lib.rs b/relay-bridge/src/lib.rs new file mode 100644 index 000000000..35c6bbb48 --- /dev/null +++ b/relay-bridge/src/lib.rs @@ -0,0 +1,7 @@ +pub mod bridge; +pub mod config; +pub mod crypto; +pub mod protocol; + +pub use bridge::Bridge; +pub use config::BridgeConfig; diff --git a/relay-bridge/src/main.rs b/relay-bridge/src/main.rs new file mode 100644 index 000000000..e8d80dc40 --- /dev/null +++ b/relay-bridge/src/main.rs @@ -0,0 +1,19 @@ +use codeg_relay_bridge::{config::default_config_path, Bridge, BridgeConfig}; +use tracing::info; +use tracing_subscriber::EnvFilter; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter( + EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), + ) + .with_target(false) + .compact() + .init(); + + let config_path = default_config_path(); + let config = BridgeConfig::load(&config_path).await?; + info!(path = %config_path.display(), "Starting Codeg Relay bridge"); + Bridge::new(config)?.run().await +} diff --git a/relay-bridge/src/protocol.rs b/relay-bridge/src/protocol.rs new file mode 100644 index 000000000..11904cb4d --- /dev/null +++ b/relay-bridge/src/protocol.rs @@ -0,0 +1,99 @@ +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +pub const PROTOCOL_VERSION: u8 = 1; +pub const MOBILE_TO_DESKTOP_NONCE_TAG: u32 = 0x004d_3244; +pub const DESKTOP_TO_MOBILE_NONCE_TAG: u32 = 0x0044_324d; + +#[derive(Debug, Deserialize)] +#[serde(tag = "type")] +pub enum IncomingEnvelope { + #[serde(rename = "pair")] + Pair(PairEnvelope), + #[serde(rename = "frame")] + Frame(RelayFrame), + #[serde(rename = "error")] + Error { code: String }, + #[serde(other)] + Other, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct PairEnvelope { + pub v: u8, + pub phase: String, + pub desktop_id: String, + pub device_id: String, + pub connection_id: String, + pub public_key: String, + pub proof: String, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct RelayFrame { + pub v: u8, + #[serde(rename = "type")] + pub message_type: String, + pub desktop_id: String, + pub device_id: String, + pub connection_id: String, + pub frame_id: String, + pub seq: u64, + pub ack: u64, + pub nonce: String, + pub ciphertext: String, +} + +impl RelayFrame { + pub fn aad(&self) -> Vec { + format!( + "{}|{}|{}|{}|{}|{}|{}", + self.v, + self.desktop_id, + self.device_id, + self.connection_id, + self.frame_id, + self.seq, + self.ack + ) + .into_bytes() + } +} + +#[derive(Clone, Debug, Deserialize)] +pub struct RelayRequest { + pub request_id: String, + pub command: String, + #[serde(default)] + pub args: Value, + pub idempotency_key: String, + #[serde(default)] + pub timeout_ms: Option, +} + +#[derive(Clone, Debug, Deserialize)] +#[serde(tag = "kind")] +pub enum EncryptedPayload { + #[serde(rename = "request")] + Request(RelayRequest), + #[serde(rename = "ws_frame")] + WsFrame { frame: Value }, + #[serde(rename = "cancel")] + Cancel { request_id: String }, + #[serde(other)] + Other, +} + +pub fn valid_id(value: &str) -> bool { + (3..=128).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || b"._:-".contains(&byte)) +} + +pub fn valid_command(value: &str) -> bool { + (1..=128).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'_') +} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 5cc431fd6..800297bc2 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -4,7 +4,17 @@ import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { useTranslations } from "next-intl" import { isDesktop } from "@/lib/platform" -import { getMobileServerUrl, setMobileServerUrl } from "@/lib/mobile-config" +import { + getMobileConnectionMode, + getMobileServerUrl, + setMobileConnectionMode, + setMobileServerUrl, + type MobileConnectionMode, +} from "@/lib/mobile-config" +import { + parseMobileRelayPairingPayload, + setMobileRelayConfig, +} from "@/lib/relay/config" import { isMobileEnvironment } from "@/lib/transport/detect" import { setCodegToken } from "@/lib/transport/web-auth" @@ -13,6 +23,8 @@ export default function LoginPage() { const t = useTranslations("LoginPage") const [token, setToken] = useState("") const [serverUrl, setServerUrl] = useState("") + const [mode, setMode] = useState("direct") + const [pairingPayload, setPairingPayload] = useState("") const [error, setError] = useState("") const [loading, setLoading] = useState(false) @@ -20,6 +32,7 @@ export default function LoginPage() { document.title = t("documentTitle") if (isMobileEnvironment()) { setServerUrl(getMobileServerUrl()) + setMode(getMobileConnectionMode()) } }, [t]) @@ -36,6 +49,13 @@ export default function LoginPage() { try { const mobile = isMobileEnvironment() + if (mobile && mode === "relay") { + const config = parseMobileRelayPairingPayload(pairingPayload) + await setMobileRelayConfig(config) + setMobileConnectionMode("relay") + window.location.replace("/workspace") + return + } const normalizedServerUrl = mobile ? setMobileServerUrl(serverUrl) : "" if (mobile && !normalizedServerUrl) { setError("请输入 Codeg 服务器地址") @@ -52,6 +72,7 @@ export default function LoginPage() { }) if (res.ok) { + if (mobile) setMobileConnectionMode("direct") await setCodegToken(token) router.replace("/workspace") } else if (res.status === 401) { @@ -59,8 +80,12 @@ export default function LoginPage() { } else { setError(t("connectionFailed", { status: res.status })) } - } catch { - setError(t("networkError")) + } catch (cause) { + setError( + mode === "relay" && cause instanceof Error + ? cause.message + : t("networkError") + ) } finally { setLoading(false) } @@ -76,59 +101,122 @@ export default function LoginPage() { {isMobileEnvironment() && ( +
+ + +
+ )} + + {(!isMobileEnvironment() || mode === "direct") && ( + <> + {isMobileEnvironment() && ( +
+ + setServerUrl(e.target.value)} + placeholder="https://codeg.example.com" + autoCapitalize="none" + autoCorrect="off" + className="flex h-12 w-full rounded-xl border border-input bg-background px-4 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" + /> +

+ 通过 HTTPS + WebSocket 直连,适合已有公网域名的 Codeg。 +

+
+ )} +
+ {isMobileEnvironment() && ( + + )} + setToken(e.target.value)} + placeholder={t("tokenPlaceholder")} + autoFocus + className="flex h-12 w-full rounded-xl border border-input bg-background px-4 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" + /> +
+ + )} + + {isMobileEnvironment() && mode === "relay" && (
- setServerUrl(e.target.value)} - placeholder="https://codeg.example.com" +
`} @@ -23,14 +23,14 @@ function timeline(expanded=false){return `
修复 ACP 调用后 Agent 提前停止的问题,并补充断线恢复测试。
你 · 09:38
我会先检查 WebSocket 与 ACP 连接日志,再定位任务状态被提前标记完成的位置。
Claude Code · 09:38
${mode==='approval'?approvalCard():mode==='question'?questionCard():timeline(mode==='running')}${composer(running)}${nav('chat')}`} function approvalCard(){return `
!
需要写入权限
Agent 准备修改 ACP 连接恢复逻辑。
src-tauri/src/acp/connection.rs
src-tauri/src/acp/session.rs
普通文件写入。变更仅影响 ACP 会话连接,可在 Git 中撤销。
`} function questionCard(){return `
?
测试范围需要确认
恢复连接后,是否同时重放未确认的工具事件?
只重放未确认事件,避免重复输出推荐
重放最近 30 秒全部事件
不重放,只请求最终状态
`} -function splashView(){return `
C

Codeg Mobile

正在连接 Poisoner Studio

恢复最近会话与任务状态…

`} -function connectView(){const states=[['测试服务器连接','muted'],['正在验证…','warning'],['连接成功 · 32 ms','online'],['Token 无效','danger'],['服务器不可达','danger']];const s=states[testState];return `${topbar('连接 Codeg','安全连接',true,'settings')}

连接你的 Codeg

任务在电脑或服务器上运行,手机只负责安全地创建、查看与批准。

必须使用 HTTPS;局域网证书需要系统信任。
Token 将保存到系统安全存储,不会写入应用日志。
由 ${platform==='ios'?'iOS Keychain':'Android Keystore'} 加密保护
`} -function tasksView(){return `${topbar('任务中心','3 个节点在线',true)}
2
▶ 运行中
1
◆ 等待批准
12
✓ 已完成
1
! 连接异常
${taskItem('◆','等待批准','需要允许修改 src-tauri/src/acp/connection.rs','Poisoner Studio · Claude Code','warning','approval','刚刚')}${taskItem('↻','正在运行测试','修复 ACP 调用后 Agent 提前停止的问题','Mac Studio · Codex','online','running','12 秒')}${taskItem('↻','正在检查日志','检查 WebSocket 断线恢复与事件去重','Build Server · OpenCode','online','reconnect','1 分钟')}
${taskItem('✓','已完成','测试已通过,可以提交代码','Poisoner Studio · Claude Code','muted','session','18 分钟')}
${nav('tasks')}`} +function splashView(){return `
C

Codeg Mobile

正在连接 Codeg Desktop

恢复最近会话与任务状态…

`} +function connectView(){const states=[['测试服务器连接','muted'],['正在验证…','warning'],['连接成功 · 32 ms','online'],['Token 无效','danger'],['服务器不可达','danger']];const s=states[testState];return `${topbar('连接 Codeg','安全连接',true,'settings')}

连接你的 Codeg

任务在电脑或服务器上运行,手机只负责安全地创建、查看与批准。

必须使用 HTTPS;局域网证书需要系统信任。
Token 将保存到系统安全存储,不会写入应用日志。
由 ${platform==='ios'?'iOS Keychain':'Android Keystore'} 加密保护
`} +function tasksView(){return `${topbar('任务中心','3 个节点在线',true)}
2
▶ 运行中
1
◆ 等待批准
12
✓ 已完成
1
! 连接异常
${taskItem('◆','等待批准','需要允许修改 src-tauri/src/acp/connection.rs','Codeg Desktop · Claude Code','warning','approval','刚刚')}${taskItem('↻','正在运行测试','修复 ACP 调用后 Agent 提前停止的问题','Mac Studio · Codex','online','running','12 秒')}${taskItem('↻','正在检查日志','检查 WebSocket 断线恢复与事件去重','Build Server · OpenCode','online','reconnect','1 分钟')}
${taskItem('✓','已完成','测试已通过,可以提交代码','Codeg Desktop · Claude Code','muted','session','18 分钟')}
${nav('tasks')}`} function taskItem(symbol,stage,title,meta,color,go,time){return `
${symbol}
${title}
${stage} · ${meta}
${time}
`} -function sessionsView(){return `${topbar('会话','Poisoner Studio',true)}

全部会话

${conversationItem('修复 ACP 调用后 Agent 提前停止的问题','正在运行测试 · Claude Code','12 秒','online',0)}
${conversationItem('检查 WebSocket 断线恢复','已恢复连接,继续读取日志','18 分钟','muted',0)}${conversationItem('优化移动端权限确认流程','等待你选择测试范围','昨天','warning',2)}
${conversationItem('更新 Codeg 服务器配置文档','测试已通过,可以提交代码','周一','muted',0)}
${nav('chat')}`} +function sessionsView(){return `${topbar('会话','Codeg Desktop',true)}

全部会话

${conversationItem('修复 ACP 调用后 Agent 提前停止的问题','正在运行测试 · Claude Code','12 秒','online',0)}
${conversationItem('检查 WebSocket 断线恢复','已恢复连接,继续读取日志','18 分钟','muted',0)}${conversationItem('优化移动端权限确认流程','等待你选择测试范围','昨天','warning',2)}
${conversationItem('更新 Codeg 服务器配置文档','测试已通过,可以提交代码','周一','muted',0)}
${nav('chat')}`} function conversationItem(title,copy,time,color,count){return `
${icons.chat}
${title}${count?`${count}`:''}
${copy}
${time}
`} -function reconnectView(){return `${topbar('Poisoner Studio','离线 · 保留当前上下文',true)}
继续检查断线恢复逻辑,确认锁屏返回后不会重复执行工具调用。
尚未发送 · 已保存在本机
正在重新连接
第 3 次尝试 · 下一次将在 4 秒后开始
WebSocket:等待握手
HTTPS:服务器暂时不可用
会话游标:event_01842(已保存)
${composer(false)}${nav('chat')}`} -function serversView(){return `${topbar('服务器管理','3 个已保存节点',true,'settings')}

Codeg 节点

${serverCard('Poisoner Studio','https://codeg.poisoner.cn','在线','32 ms','刚刚',true)}${serverCard('Mac Studio','https://mac.local.codeg.dev','在线','18 ms','2 分钟前',false)}${serverCard('Build Server','https://build.codeg.team','不可达','-','昨天',false)}
${nav('settings')}`} +function reconnectView(){return `${topbar('Codeg Desktop','离线 · 保留当前上下文',true)}
继续检查断线恢复逻辑,确认锁屏返回后不会重复执行工具调用。
尚未发送 · 已保存在本机
正在重新连接
第 3 次尝试 · 下一次将在 4 秒后开始
WebSocket:等待握手
HTTPS:服务器暂时不可用
会话游标:event_01842(已保存)
${composer(false)}${nav('chat')}`} +function serversView(){return `${topbar('服务器管理','3 个已保存节点',true,'settings')}

Codeg 节点

${serverCard('Codeg Desktop','https://codeg.example.com','在线','32 ms','刚刚',true)}${serverCard('Mac Studio','https://mac.local.codeg.dev','在线','18 ms','2 分钟前',false)}${serverCard('Build Server','https://build.codeg.team','不可达','-','昨天',false)}
${nav('settings')}`} function serverCard(name,address,state,latency,last,current){return `
${state==='在线'?'●':'!'}
${name}${current?' · 当前':''}
${address}
${state}
延迟 ${latency}最后连接 ${last}
${current?'':``}
`} function settingsView(){return `${topbar('设置','Codeg Mobile',true,'settings')}
深色与浅色主题
当前:${theme==='dark'?'深色':'浅色'} · 跟随系统可在开发版启用
${conversationItem('服务器管理','保存、测试并切换 Codeg 节点','3 个','online',0)}
等待批准通知
已开启 · 通知到批准最多三步
开启
前台恢复
锁屏返回后自动校验会话游标
开启
${nav('settings')}`} function render(){document.documentElement.dataset.theme=theme;document.body.className=`${platform} ${theme}${embedded?' embedded':''}`;const views={splash:splashView,connect:connectView,session:()=>sessionView('session'),running:()=>sessionView('running'),approval:()=>sessionView('approval'),question:()=>sessionView('question'),tasks:tasksView,sessions:sessionsView,reconnect:reconnectView,servers:serversView,settings:settingsView};app.innerHTML=(views[screen]||views.session)();bind()} diff --git a/docs/mobile/android-release-candidate-0.20.3.md b/docs/mobile/android-release-candidate-0.20.3.md index 22731e591..5db3412bc 100644 --- a/docs/mobile/android-release-candidate-0.20.3.md +++ b/docs/mobile/android-release-candidate-0.20.3.md @@ -41,7 +41,7 @@ - 受控重启公网 Relay 后,手机从 WebSocket 断开到收到首个加密帧用时 3.696 秒;从执行 Relay 重启开始计时为 4.900 秒,达到前台五秒恢复目标。 - Bridge 双向连续处理 2048 个有序加密帧,移动 RelayTransport 连续处理 512 个事件;重复帧被拒绝且事件只分发一次。 - 移动 Relay 断线后每 500 毫秒重试,回归测试验证不会继承较长退避;Android WebView 锁屏/唤醒实测触发 `hidden → visible`,页面和会话上下文仍存在。 -- 对 `kdit-01` Relay 最近四小时的 42 行日志执行业务明文模式审计,代码、附件名、聊天正文、Bearer/Codeg Token 等命中数为 0。 +- 对受控 Relay 最近四小时的日志执行业务明文模式审计,代码、附件名、聊天正文、Bearer/Codeg Token 等命中数为 0。 ## 已知验收边界 diff --git a/docs/plans/codeg-mobile.plan b/docs/plans/codeg-mobile.plan index 309436e19..bb142f976 100644 --- a/docs/plans/codeg-mobile.plan +++ b/docs/plans/codeg-mobile.plan @@ -186,11 +186,8 @@ Codeg Mobile │ - [x] 实现健康检查、结构化日志和基础指标。 - [x] 在单实例阶段使用内存路由;扩容需要时再引入 Redis 等共享状态。 -实际部署主机:`kdit-01`。 - -实际公网入口:`frp.kditravel.com`,Relay 健康检查使用 -`https://frp.kditravel.com/codeg-relay/health`,WSS 使用 -`wss://frp.kditravel.com/v1/ws`。 +参考部署使用独立 Relay 主机和受信任的 WSS 域名。具体域名由部署者配置, +APK 不绑定任何 Relay 运营方;健康检查使用 `/health`,WSS 使用 `/v1/ws`。 完成标准:Relay 可在不开放用户电脑入站端口的情况下稳定转发双向加密帧。 @@ -278,8 +275,8 @@ Codeg Mobile │ ## 10. 待用户确认 -- [x] Relay 部署到 `kdit-01`。 -- [x] Relay 公网入口使用 `frp.kditravel.com`。 +- [x] Relay 已在参考环境完成部署验证。 +- [x] Relay 公网入口使用受信任 TLS 证书和 WSS。 - [ ] Apple Developer / App Store Connect 账号可用于 TestFlight 与 APNs。 - [ ] Firebase 项目与 FCM 凭据的归属。 - [ ] “始终允许”是否进入首版,或首版只提供“允许一次/拒绝”。

>qIa)CJDQwHr3JKGv}<_ybIUd;~Q z1jrA&HU*NZJ|{@EbWB2eA!P2;Ekk?x*Wa@dlLr(?1D*(gTV@RD<|uGw^>G{RO*7vM zDpFFF0n7H8LqydIveoSF&h&1`)x0}VpEV@+uDjc%ZG#-3t;&{!VQo1=u1U+BJ!?1a z5p${$l~8d1AO6k5Y|leYb@z;s^$XR@7=~9;0?*n>KV3f~%|!h@p4sZ#@>lBE1vG3; z7*#-J`TT3vAFUeQ6FY47e4>AOUoWSYGSPwgg4IZ&3a@vD)zGvUp{KG~w>NRDf z)7iD}D!;$u3n#ps2;d%qnCF3cdr^uk1xhDxn~AY(pe19r;W2)u+teX#u#OC@RSP7| zq^o0OE}7aMa1XRd4VvB?%A*P}z*Hv7>{;)QoqLPK`Qq%z1Gnw%tJ(lt z2Y$jM&m<~VfWNLVH$D*h>b>PPLC~ElMa{cl7mTJD7pLdfisJCRd4`9#)UN=~W-F%o z!5tk#sM3*RE*z%u3J^0`wfbOH51;(AL(y9k)H$Fr^`6ZahU{XJqy|}VVYJ8y$&VTj zMGnf0ibN60GNf*@>;(qf=S`nlQ#t1zw_3HByj0Le*nje-9X;ba#-mhjgdufsBb)W- zz(YOazrSncnO{>@=#=;`E>Z07_^RmesIl_D%HrbS!imeL=f=PJo__~MSA@nge+kvy zS-ssTQ`xN2KhC>p%*U!{woUEmPJrJ6JN_MBkcd-G&xnpH4qYpj?KodPJ3{IpH%wkH zhosh-MslGN<*f(Rt!Zp1r)pZr{RbJxwxwN*TRwkCw2@VRdy4r7_k6k- zhHvj`X~;gNeDs3%T(+XW-)irXAbOIaOD8@$zUFW?1Q$n>(=Rj=o49jnERQcLDpY2%gwk75+4$N5i;_AzTlm*f~{}hxP<9~xIm}=-l z=HAQh(43Ya25okKvS2zQ`xYZcAz`Y|!XPhDA8|k0Felf`$fajz7LupDX<#0BeZ`Vt@siT)1=zeO~ zgD6}sNE$KaA=N9PYT~CqL>h2EKR|jKN^mfnHNWjc(ZeoEYg&0CkK^urtE9hGiHxp9 z&g{>B0b((R?UW(?c1!h;}73C5V2 zxWEmx__$}si5)QzGZ|dYrHY=buoJ}J?>R@gw%asW{l<9tf-}K{7@pp-k8UJ4!q5-~ z;{zI8>(3AB;I(E~_J!d!N$jei^S?pxfxL;^1h!o6TZ3nk@nmq(*$XM(cD>@!miJjgT8El7qq(RD1{YgrdV|PO{~5_6>0B} z0tV4Wm65Y|&Im~(MA`2{u@|dBgARo~cER8B9*#?4*Cm#$!C2bM2MrJRmInT|O_yyC z*Qar3RRc-n{BK`RLit!zMb3=)&rkvc86=-tpN$Bwu2$W$9a@T!r$7@eKNr4!ro-=z1z{X$&Y?xk`y8 zc+Ntn4x?wI+ms=k_4hlcF+lIM|J>00Y-urILsyr*7aZePN{z8~r&vw=q1zbLze8kK zk9JTN5=wo3QpT*9ul&TM{p|hH!%fD`P|(c(xi<4`@+j!IL66 zn*MltnUh1Y+__G8sAGQVfVfEm}k01KUs>>~3omtwjXC8np}*t| zYJ8tVCK-Mbi8oPlTd=s9uw=;hlhvgVqzp(Yt!#FY!rp-8_mGYhgKy1~0}vj50_jJe zSVOxH(=;qS0t_h(!n2y2IP zDwYF&1m&lix|s8kck?y(nH|#W8_x4vj-k{`@_cb@<-t61J|Y`V5GXShRtE7)BD+cx z$!`}%Dg__64w$YKLdT%D^L?v|D3riuih{5Uz=c-DA-f*ON(V>BS}j4%0|AMOtU;Un zyxu@2C{)XqG)l&vtuIq6VQ%ncWmoL)`MQTN0cyfjqeY{+ywHjYn-l)ees70Ek7M&>`DOcAi9JW__S1CwL zJ&=zt$5QGpA%>f`xi`9f`$6dsNA!LbDVpA;#R$G0ieQFaINr2k5{$;|Z0$SAl!$j+ zV$F$}KWw5(_0^a4{ocvR2$Rb#ocuo53G}ZxB&Sre-a%NDQ=c>65gl#Bc1c!8_~}TC z{#j}pkBElI?qtiKC^CBcJ(6@t6f188q#&v1li>D5;01?t4r{-J?_I`xhn}3$>H0hBUH7}-*YuWvEbMQjT!#DH-;lF8fDO4!qzG@d# zTt!38@pY5WT({0+X&fc^X3lM0zZ`w<5ss8$W(x*QeE_feQbC^bLJGzOIz?CSWPkQn z!F7tJQzOeM^Fx&YFwql0Pa7s#Le1&6ZTp##@eSsf37{drZreVxJ9}LN97@VeT#?Dj zs*6vGdA4ADqqch87#EjNeL1POvN3J{Jc_xh;bCHxuhOn(-}zym@fnYLwjXnK?ehK1 z{1tLxf&b%8E6o|R2k>C#76Y9p{}Sb}bS%mebhI;pvyE(o<#S$ZzXXx?<~8}RjJDPl zT~s~(x{qm=&!k)wX%h+1m+!oj^y<=44FqP%Dv=Uh53NhYYemZC8$#o#sEsU66A2is zF3}0PpB&`zi-iNR01I1VV50JbI~VWBNZL0zLe^7S`Aiqlk(-B2&qrM}E>v@!#+Ry% z&tKWpM$v(_mBA%hL|Y|LiP8>8cBJVcdU5dl+`dU`M?%(B)iqu;F{l_Lva*G5SBeq! zA2a+mAlA>qL5V3#N0t1$_R>Zsk`gI&DDf)#`{4t821(ZoE39Q|pqZGU5+4^`O5!*_ z;UD^dbP#{AsTF6@CsXQXFOPnE?dly73D$$*?{R5kd<9j+so`~t<^^tvqYMjcGfl(G3Krj?t$}hj*-!VL4kDbfhJOz|fD)*rpZNkAvUgI>Z zNh`xf@!GO2TNe^MUpg;zvEAfv$PUnQ{uhh| zy@BRS$OE`OtH@GeEb}hy{;_Q8KBwASJau6#z+^T!(=50XK7Ic9$J19ZMEO18E(_;ejs~a6B-Dq_>ANaDxMe| zl|q-EA03ZSn0sBDI^bYAqI7mPcXv?0OXPb3gArQ3Bdl#MVXcjs;LWoM*8t0&vSj$3 z#@O80D88id!h>&GxA2BX+Uo*`HvYI+CS~v%iL1Y7HVPrT=wNieVt_~Y-AdCiUBc0A zfdGDn0$QefEG5kTXCUCo{2&nf^e{y`u$g4e;;{>8Do^JKXN1=f`69odbi3je{sT=m zjr1*VjD5&HQlGSEA1Z6_zPVmof{6iDV^~-fl+#PFmB4Z_)#?`@L5>McyEpb{nnc{i zu8OhdpWiPWwoSZ?^8youDDSRx{Xn!py#1bnsLvpQK-^-ITg~T>6Y8_CQOk(5=!u`xt*6ZGWIW0bUd$}FUT z`$O6Fh$8oEk9Cv}0Nshd+6Wf`dLUb@9-pw$Xj1#k9nPQKAn$K0vC(cjg*zkldea*)CVoz^O zAX@pOsW7l)^+ADXEMZ(6?}$Co9S39zK3pY3vPW#8y+2U~y@LJUKHPcL*Q@9bruF$O8Y!8I`Xm)A6>t}GYUF6_>|e)u^~G3K7H%&<)zDbm9ak6&U0Se zd?g?FhybksAiO?giT-&{#$U{s$^I4aUZ8HpG<=2bdT~yHzj$OC%C&)H5ETOeC{xQm zFPpW&h|!<&{_3jsY}9qTd@EI>(nA*K+3MNJ>-w#405pLjAs|ixcAfCNk3}_^5k(8V z;6-MyMVPerV^O#qg$$0;7y?=G*XkRMh!t_}m31(L1h%7VvIS1&p z8$?GK!8EN-%>K)%%g21@_qb3^&WhjnXaeA{%1?~AHsdX%8)BVtKi7yhIrDDr4(nWV z9u59>=eZd)TcBE*{2d&e&4vZwc$OK@z%PGNr+{$ug$2iCn^Jwd0RnhSBTd%iPYb{M zyJ8j(%V%2;8%9`9@Tb1I@-cCiu~?-UCDkB1T0*~OaH!2s1z7u{3BT zZh|tKy2<1FcBug}pwu9eo)yX`#c5MEx?z0J>bt}G{kre1sa{NCXr=er6e4PN3ocZo z$ut9UO0F6m)@V5hE~heGqeLQeT>aP&6#D7ReA*c_Kej@^Kp6@wCWyuS30J1QyLLLg zT}{i2=sd}*LtxHh3=R;Egcc_UV)jO{0L!ejnDx>W8d`%F!HA^N-+suY%^RgnCZYih7BtM^69x$>* zASD<}PLWJPa6!0KaMu@blJQDhYSE9{=nhH5!4nai^jV{Y9DyH49uan1-AR)W^HUiD((7ZG5($*C^O8e2ZJy`q_UK`7T|C2_W2=()~Aj8 zmmg@LN`}XzPw_!T-n;}Yr12=^2rhmIugzEmf8`}t2#3o)6tEZMvr$>Us!tQR*k>%i zcVE8MtGgnjR|WJa{03sl%+##4X)DM>fU0B2p(D}?^VaK$R4PM1Py7Bu*0*o##dQh( zOqR(K)cM1DGz1AWnTeR^<=)}men2Kic#=fI9Wm0qtiU$o^(S?WuUl&B!xaQ&ch?C$ zw78#zg+5H6KxB+GfPo@t;W~0?f@Z)Km#Y!$zzUjR|BFNIgM)-&hoTJnirDBp_zF8S zLq!NNArP&1!L8;fP*h|5&^Z`aAMT%)OGEtJ!v6g)mN!Oggs1D8na_I3N%YKZUp(}U zZJF8`NqKKu5FjT#^DsA8!=5aeiOJruV@T@fp_#r{aEC79_3aC%Og>G)(9H}@DQf1_ z!VsMN2qsS2EM1MJq7&lmHEJix<<5%jMu?6eXuPp)>J@S_Bg@(`tQK1wVVLzZ~(<#Dzo2BMwRP~AmrI`~v@F2EuLX^TEqFQPs2NI$* zLCB4Wn*Muj$A7s%GY1c?n2KJ`!!a6G2Bvxn1Eo6feZN`CdX0N?qlx-~slFGx1#Ob_ zS09?cefd4niG~Ves9v(LsJmkx4-qLzj{pYEOENTX?WaZwf1;p(F2T&pg=={Ak$A_d zq*!W;+2<((84^0!T`%>k`zSli)aArct^f;u_*&c5(b?kQy|qUA7TL#w!*<%^t3I#e zE=C3!RCYyd6q)V{zXbS|m8g;F4Z@5&l%A2W9*`z zM*L^XIKV?&%vo$A-tdNwEwi1Y(LH##L^vJUGLi8xmoBB@EXpI#+yjd&Q1MxEA+`FF ze)T(l#k+~Sj}5vy;4D!;#zcP%q$}@OOJXYLAXG(V5o)`6Eb}$GdrAIGPDbmh&W}zy z;{hKK+9*FoNj_G9V0VIl%Y9f9S*`%MCN+@Dp4RyxC&W?m{hZXKzfvkvX}s2&u@lLB zad71lcBDj3(TR6T@2X3OhpC`GXLTZ_J~wrmtxGKjaq1-a)%mn)n**>hYyu=M^{;NN zT`UIcj2i1QB~vo{93#R+e#0%WR%nv+J(o|XkrogDVK9>hqR(=^zX`ZkF}i#sWq314 zfVpDDGLhH2?Dix9L{U%sL1)~Z?jb@%JxKLX4kOi>K9dfyR#UVboSJUXD9W|LXn(6K zagpP?%_C zaKWc6dH0y{i4CTVuNt9fLk85}IUY3d&nw@s{(}7^FDAJfk~+abp+}W3e9U6t(tU$&W)G78Q`WUL*R~`h51@a(^}>!#F#Jp}uG>z*rd}!&&L-%eB=!#D zHXkh?qK%!zP^yv?Y(8Tofx!Ho1mG~)=u-nY4?A4%KV9D2-_sNDq5K&ZRgpu9 z#;cIej@geMT{GD*+3ZsD=N~@GD$G6p)7WaUo4MhMUJSiR-IS)YA6R1>hpj9w@F+b4XnmH! zo+*P-Adl4BUqEdOCOMbckJjAL*&*gp0%@}13X)}@-(Rd*8_a;znk4J@I*~) z!FLjO+k$tFfduqPA5n%504)j1-b8?i+HfI8INuD}_7qRrmJKnQ;TYN#H{_|qe8X-c zAr_BX7EqgbX&dtmF*RRBJ)Xc-*rbI*zuv;XvYQUc^u zGR6XhtI= zfJD#&%_XGK0#v3@dQ5_#=bt&`<02k0hc?Ag06!W#8 z+S132OfqH2n4aI&Xo%o?(apuHv}@jWLl$)3jm{)kq-ix%Vm_a8VSh<>fDeP6j_9{f zNns|*>cEgn)am&hFTe6-4_aAUb42j;_VY!fdYNfGCSOcfN6a2|9q2^y_0iGM8YEQ-U!MY@-nKE~Z3!39uTGX}!j^O$w2hlxvAKr)$o zhzNBPND$U^(t@0314^GJfLD|-!_cJNjmK}`(9Tk&Bj>Lu@ru#6+E?Eo1y=bGHW^Bc zNyPN-kF^MawZqp4H2OEw!WJ*R=|uG~epQ%zynS^V(YbAw?!PmY5cZlrfH&@78ocq57u|mV{wYH~ zXTxj_zeMw`E?@RM&sPS`aB*a-a%UV}h+**Xzl$$2pOB3{WR%h1d~ypsRG?^On)9#p_YUuT*2i`ZgE>X09;_f*@~Iw(BAVu>i{D;KIv=ckGG4=; z!3133YDMqBb2_?_5hhieKqxwXFhPCarCD^8#b4nfUb%=+rurE5R;SUM9)R?Gz$P!F zP17QAOXGwh>iQ0*zj-~{DkoQ{u45`OJFkbq( za-R=D+b0JNh-|%VlYiZOK*@{2HX>;>8Ag?!SP0peM4jjQI9Zs~+8Z5pjQ&N&3h7)T0!jsmgZ1SYNQFhZwyMG#-B^bU%cUbz zB)(^geRp6J)ju3I6qkemePZ$g8$LkAL-M;k>hIyVe=OePK99IWDstkJB3ml0AbyJX zZo7OF>Sn)a=%rNdR$ILtUh)S+E#hNQe>qokALGMcxWMO{{`AWLLexoS{vs=Y*Te+6 z&xTcmDCc+{7sTfayOzgT<#I^*1iXXKQf?#u-b{Q;#7fM}&hdND@1eNvig&;ym;|h0 zxwhX97kJ!g&B1uUcIH2Ot-QTXRcE^NepM%Dq0@&R5}m*WfwG_ig)Et@%Yvc5mCaYe z{R3nbg)KkqP!03^PNTj7!CGu+~dM!aXpU@&s@6}C3L(Ym zd;k8`h(@)r0>BDDUd-1xR1vm8bhNmJEc3{5U!baI3ZS1(b$hU8M#qANzkQ_$2@2NC zxijj3>wDg*5WHC;aKtqk_&GIy@&l6(2YY~*{lYj7mcfFdZx1B~e$83~NlH9b|G9hu z02yWijOUAY#*U*dW1F^W**~yRzCR#V2tFH1v-LAX>|;x|nFhQ^zW)kjAIQj1LipsL z@|Vf-vS`9L(Ew%7=G8}@xKTvt2DKB1Q#;LmE_WL`5~=N-GpqfHx9^F!6F$^guPj6J zKNRi`VdZ3&`a^i0x|b~mkN*wgp#Ul!uADE_AJKUI(c-}P-x(tT7_x_fH?#8pzmT}3;uV5SiQp);fbI0DDUDI zutF;A?^|ZGo#V9ZQTVvWFDPN)HKK!nJ`M9Xg@M|9MP;egznZyb$s!bhdxdUMg+>z+ z4wjJ$YJ;5p`>!hwg~cRpg|M_O=vSCGxmY>Ia?ZDn&TKtSlEU?K4|A$T)at!nCV} z?Qv$f4I?R9{uvUFNQ0~4hYlD>O2$}KvmZ~Gus9xEv4OA+k5waMSDA1{uO#u4;hAJJjEoP90%J%+ z2#KTd(c8=WvH=8`cBR(v=l-@?xza*Ce_lbgAAlc>o?6cm()DU@1V%rHN&W7n(`uk9 zC@p_L>_UTK#%a6mnm}nbDENmpxwPyrFcTw}dq6-3qQ&>I+v%G27!@sEMm{jL$pim8 z7^sXX%QYtc*xy`rw@sJb{}rk@V<%h2(02ehf#gS{0CD&I zT6j7zGM*e@AaSi)EicXGc6Z9cl!b?xGFEB+gDED!FLPSzdWYGpUHs9q4N|~~@gZXh zV1zS~$Uj>$vom=g9P5~uPzRu_17I<%-k&U^zLu83;9$ivnBI1ci>H;5`vb7+lY2h zc@VeOf4vYbDtl$-iCD}0w{vcqrm2MmKq56n0~mN^B5l~{(Xc4(z+vRl1*(~{i;=d~ z``T?cc>`2=)ZaX*g4sDZ_IV7DvnmX!TakaM=O(w;u;jgNc>O8uLf+j-;{PJrf3K*y zu!5#(zXTgv#hG9o*iss<07^GYvYq$-N6onVbvFkSGX5IxZZ=(A`X$mB*z2*;LXQ!; z7{PN<9$ce5D_OKEpZM=VpP{ugkM=R5j`h+p3~z)qi(+iBbB)M2$Y2SXKr-oJqz6 zZ=3#S51LgtZo!0fXn2!ZWa{*K=)bUOjop3=ouBk^XTUxRrINmPqK71PY!wq?EusPS zho;eW{)8#u0B7XdY#cx)O|b~n%Vsti>{EK9UuX0sBN*q7Uu$h1X9LICrJ@5XpZEC% zyaYx&8j;xzbOKCpKb+9_g#DNQvivp=>lpoTO>HxtHA*j``cq{eZi)mFsrUP}k^tc) z0ATS>unoVU9fG71vMbDT@M&3KzG*Dh0fbNUO8c%_5!nMSi^+?q3&~OC=E+}5FWCNR zn6L4Jy>Yp_w6>`TI-6^oQvJc7^_eCW5{C6txKbkVDKJ!PnMkHMNRn@pF?Z_B6H}sr>xlRptEq;I zHrHKqkC{WU!w4OuLB^0caywp#TKzjbIZ|7j_9ho9L&Z*a>dGc!;c^&xYz6t{y|FbP zM{zh>8XF~>8xx-ZA*Em$h#=guH1G)^=5vg+E*8TML!?J`HpY1yY$0#d2E+K=foHmw zp+U1aWzEcYiD05SC{)w9U3>w?xK%fL6(vgmn5c)`?i_|ZJ#>1bwk^NLO2Zu?a&l|R zFy+~-H&VN{YU(?GCpGE4?{~j-x>l@qVd=|9#>?B+erUuS=|u0C*FK~vi!+n21=Ss( z9DcQzL$)Bh3Q#N?C>w~*#zYM#RA5dcU0Y4_V(KF~<=IDSV+kUXS`Cf{rK z_^Wq7__JVLzvSUF&1l-k%V46na3!E@)`d(10s||-{5u{lxn%WbcBnk7*C;`=g4jLV9sERg=Cd@A9Qa zrzxYbhvG3gYt5QDM(<4cQ*Zf(3x!KoBwa=pOtN8017fLyz5Disf%aAz>!#IeeGZ9h z{7XCx?(^zfUpyEJDdRzEgcWYxPA?=IGJ}|TnxlN))ZugT`!8Ct3&*@WaFe$7=3pU3HyPNtVK_n8Ao|q3gmbpi;t*u>Mh80kC z<4a4E!~&C1!kA=$MEpHLvuEmK>YM6}w#6^$ehU~m>&_^4cfTPHtJ6a*C%;d{Ce#fr z3$K0a7SOlKQ|ri?tUDpIx;eS<%GCc6eMr>1c(~Ro1;7T`YP&l%UQ`FgRoa;<&{Bf1 zLvj;`^}JQ|14xJIYbo}fl1#H+zsuMda+6Ax8FKc?;X(JGc%qj^NmH7DJ~3qa5N|Th zp$2U>5xZ8m5LRt?v>_1yg)+zynhoa$C8v(q8EImaFw1E)YF-Le)deVTa=DVOTUzpZRQ1QVmV5Vp%Jjg3Z~%)ei7a8F9ukEBh0F1i!NRGC-!|SEGPCdg_zF&%|ze5T0D#tkk|BZ%%QPFVu zG@^Wjgm||6N@?G5r5`w22@U>`fIK2I(b7UhQ*Gu!)~Rb;)>KU2Sd-E3`d}=TLY;Fv51wf!O6gA4*t(yx zjZ%%C6;N@}%AJY)PT-&h9-K4BT0UsmU`zL44s| z&H)R&_Sf&YZ1j~6D$??m0D}Y&=2+~D_>`SuKlK(`P{o!cpd0HHfLw!Z6SHfA2^Xi@ zVz`(iwq*P%45a-c%kl$yjxL9%AMy@QGSDiM1ipQ-d>^Xh7zl*L&HUXk^XU>6(I@%G z1>=fPrjUzX-~GpZ(2gaiy8kBP1zByQjzXfUSw7*L-RxY4tEY*{m*KAFEy z7Mei7M}W?>X)h(gGfLFk1#$wcY;gyZ__+Qjw+}v!s#VQ*oL{;|yntAV(m}PhliXW1 zEBFalH>|t@$ki&I3s{;S>OSb7B_R@IHnek)FF;4pQNgXREC}_ZpfMifQSOd{{7(TG zvMyJXS7x!)NtGslmwDY4zTqx~0M4gO3tY1kpJgMVQYoP!z&M8s`qlbJ2L~@cAEpob zA?QIQw;@k2v)+kS*AJlA!}sX3 z4x9P=mgiGFo_Yni5?uYzlghnUV{m;%Ex{C=>^+tf;NJT4_m9Yr2*e?5C&OyNa|`P@ z@HlY1I8L*igb*tq0ES>e^Q$@P{X|Tr1hgeOZLXvi1S+vB;dH@^ZUM?WN_DLh0GA0OH}tiNqbTnmGyL2q81~60nCwt0Y5&9mrZ{QFjHbs%Oe^&Z zV$Bfe8T_CyPM1BNcd|tV%Jf84S7q&?XlLgZM1#Nf` zm&DKpm50C#Z3t8ONGBz)Ac&wtzvDG@68mxfKPn0!p4uc?DW5(apY9H@t(88{tYpG@ zB-ornjcQ%g@L^ih;?AG<%qLPce>`5S`px-tGnww+es~v? z*59GY=0un}KO;38hWxR{!ZLN;LR2@_RRrxizAfZmL|8r>1_Ln{&;6dRpp-CTv!3Mk zdqT}=J{z8N!KrIvJA>c&l%Q|el&}O3*zXkZSOJKY*58%)!F@ekE8pyTBmU+7tL68J zpJe}Tx7KHI`p!H$X2vq*Y+;rEV616~uOAwa=R=A;hYM%={xoUyURQRk{n!*@`=j{- z!CF-UM8($4b^iCv#Z=cn@l+ik%Zh1a6v89fkAjpTXyf+}e52_jPeI{bEOKaw`{|(# z67o{}s}}yX)6qZit!zZmn`z_|T3rbS}O5`C;KiecRuTw~F8+cv$D}Aanyj zjEzr;l4C&$fY|ZRdfrm;jrIT%Kja2EmTu8en-ssZ!I}knlqt}@cDpj*X*@%P9c8q5 zNr{uc{U$ncXh>+fLz>$mOm%pjlYTnR|L&eu8ksP^|xi72s@O>7SJ*`RpoBcl-Fqxp^ zsZ1oh3VKklQS&&km_hm*fQbNa zG(e%me&WF3`|DuZT`V>u=>(MjNZ{p!(G44>485Z67InJm#ho=I!3?8Hu}85|Ip%Xq z+#o7gtT^DL%~QH1_p7nHq#o4Ymob>R!&G&@`Ks(eb}UTV@SiH6t^{}tt&19v-y|uG zzplima+&s;bHXbH$Gm-s0wBO6*HJKyccr;&zr$?}Cv@`T`p*W;{*=QtJ~s|Z?QHI- z4w^l`Zg7ZgjQmiGLV7u2u`?mbTP{W0EZNw3@x#n#ORKfflF^H%i}i#PFxy`PsQMf^ z%>R~+7`vPH7&8(ectzyx-#xzir|G&fa0SJ$I`@wnD*$Bz<%i{TK(>o@aNiOPG%gPz zMmPb@dO7V_;V!^Wsphh5WseMr<79XKcZdG%%XxH2&R+fAKHV*g86%o^y+{Y5GjcUed0ms<3pX{bGyyAz3yHZ| z{?jyY=!7o9__v5iuBG1t_Hl#*omnMklwZ)hKtX4OUho6zzduuAGtEEdWyOU~6?&u% zdQ|Bzzf0*n9b3{`iBr4T>OYU5xjMdD?ECG4@_{e)s%0u08Vx{Ko8m<-hkksGV|Vqe zU#Y$9f9zG})y$L*@>^HA%zfXdL~J_n*K+Yre!lCa$nz`FKj%_dcMYjJ zq}UNZm`}asu1h0NKc!9XHpTUUVscr+mLw z6`_V1?(!Y~?=aTyUnJMsT|zl4gMdEDKbUm~Xlxzx5k>zU5K>IfH8oJ6pI{o_$y#AB z=tnj4LZf{seNi&!XYikM9%Af>i{b+`UPwPDMyE!Fx3@4%8~@?_Z$!yHOWdU7BE*~#EzlM>5!OEeNCEluUMO3jg3r;n6N&ARQ@{tBj zbq?o>-|#0}MV(fGhB(D>4bnVB;3z!tTeiRzUY0^BdN+q1D&Dlh z?qF?GW#u_ePLpF{d82nCs90<|LjUEie1qKS#fm(sj1FGG;^N}@H3f~tx+H^HI(=G! z*)T?GINx1>Wasdz#EAqt4zxHv`K(Lx$wHB8uoIsy6O_@|xQR7?D>#>CZ$R&6A$7L*StQsLIeBv%v+VPy^Zn(stLleqybAjEN0mRo_WyTI!e@bA9~3nKI$T!J&x&Gl0JW>M5zPC%LN8bX z<~&t@UK*zpiiXv9KJFcGGC5^%NB#0bOiiedMV3tVrlnP=T(W9^bP=ENI+3%NY0Zu` zDIb8AZ<9NC=gC!#(Fw#g#6{pJ|Bq#-%7z0ETggN@A75wYkd%lyYA~56B_?Y*YdbV7 z)3a$mlR(We=s-)+HDf9?j3%{==ZhrQME^PCe@@da2W89nTg`nU%}oL4W= zzY~UUep|v56nf2VrllX>JVXIV!lNXX%f&xsnab|9U2(MG!XN2>(g9=^;L}>Q|Bx{- zRe!2@_S0Gf&4hlcp?DM&Sk03S=xfLTuyfCPpz zDA;Gb7RNI>h>_r(EHn`HH?yV>hxSM_%*VLRHBmnBi@vD{djWE%*tRWuFy>(hhWd9H z00=dVUcVp#4%ffL@69GS{(aK3Gpw&h`nT{6GT(o4-RkL!65OIpjCLT(cDDrp6m5i3 zofRYQu8Ze*@I&{BcP5_J%L?9=*r-7D?>WVdi7kL>-D`-4eF=}XH~IlF4pwrnZ2yEM zdFw|q%2xqm9>n|aBUV@>*JsjJ|DN0N(q5Wvb`S*FeC<6uv)$WcpX=p5 z`DDVgc&2S=9H~%?s{#?8dp7YKi(h+xkN2zp=teC~fo&~!0Sk%CUExzz@IUbEd$XnDnFZ^_ihm@F5HjN{^0$|@tK0a zX@PY@l$W);FjFLf*~CKC-P=$a|8(`Moc}vN2PYTZSq5!Ps7pOQV8R^KLweq~cPV-Q zo?Nf#Ouo2996}cQlto9#uFDivPpqK`dl8)hYjt$;L|LW;#e$Yf=PLUv`vQvcT=44F zZu-9L{KE0$7m}}>&=M`K{xt~2HUKf4amL3_ZJS}szuqiPFx(6QXEBJk&)7L;;~%-I zt^ZEdFTI{-kR1M_7IxNPY#au+AB2`2uKEI)o_`rKLDqn;DW|DE;r-yOcz3dwzd+e`n}P;YeV{fX8mG3O%9tHP{^ zt)R9lYmRd0AZdkmEHnSZ(O+v^)4mN1WtYAOH3CED+Er`TK82zz$K34}zHY{D+{@k@ z(drIY?*AN>_=neC=qjPFr}cnUnVJbi$;&ye0u#WD&#?v~cz7o~c){;RgT+;A@Fugx zx}?UUM8{uE{Zi0GCHqeJ5i>vM&mldNoMaZfsj3gID?C=8>d(Ab_;ob>JxPZUM4BX# z9_@9MlfTI2BW1}N-bKifNme8oo*$iK6di?gXR8Dy{=XsP4qNXKLH^7%s#~|P!(*a| z3aNR&q`j}1&9$yJ)MQ}%P``@1%_|Iu$Y1`1gf^-U9W zZwtSO8B6($N?NNs6L8_6R4cw}9LVT0b{x ziJ8N}2mBx&NP)-fu$-&gQ-PrAlfP?KQTaiu#C-OB#Y(WAI${tL<(Rwe4QaX&98Z1c z>T!TN$2ixAM-TyZH~)tq_`bGAxlZKHR3O^Ld0dbW<3voy2BRmEd<6eG+z7BxFO)#FK@TMUW*y;%>;R{?)<|Z z1pf_W1DJR=5z(f{?gRC8C0K+)enqKDR*i;WFE>IE)Kf-etEXLYB`#b3H_ zcdUQC`rjJT6_5^cr^rXUT9y_cA87M`zm)bNochYC++-$5uKkhp4)5`sgIiJ7%G@D0 znXvoC`G?zpnQp?$+=yJ1b6jtdgPjezMgGar#rtvB(<)!Owus-V%psu^XfM+7$r>K^ z$M<=odo>3_Ou(_I$Xp37gytFcrfL6#S?nKTg%K9F@W;tLxURLqZq;E?tiEGb3QE&> z*SwK?^?ZHHi_gy8h{Vg5?Asv)835%tIr$B)5CG%awoUZ$?Dn=2cGtr5{2fkE%_O~e zXxjHB>&c2UIoth*xl{MNS2#X%@wi;p;rS@USRX%F3U<&;3fn00P+v;Mtw=3)-5dX- z1pGSW_7=dg_BoA+6x4)9kw+Pi=Ld3+wIpK2lswBtZx)vTx0?s#?u;Hvg8V73!MFjX z^B(3VPxYtft-@9e+Vr<8ZK^gF8uHz4UULqf zsC2At$BtH0m{un(Si%|F(@nv^DKh_h*W{Ej8a3dw?dnuZI&sc~0*YJEUOIHEW9`{dX@P3=`dM$MV@V5`n}M7VlN=lBpuGsi7l<2d{zmEyiQU&Mv;EqxC{W0aazGC})iSl}Z^2n_vARVH=yeqK34^NlB)VYV_TVS9E-=I8yZJOX zL1^j@6UeA`1NE)6vg|Q84mtVf)vxwG=3}KwUaUrueI%`1HcNtfK(JsY3XaQhVH;<# z`5vH59kmtk6gTESd?;z{4r}}sT<7Qin|)Ngr4}SUb~o$fW&5&Q$Yj}mu_eXXcKLT} z(SFwzWo2kYY?75=LN3D_3Z?U0o_Dy{#{YUbjpZUUQLy`EjU4riZvGUaev|_)b{xTP z&O3SZluYS1Z27o)x||MaArt~hbfs~>ow-9$_?3wL7($yQvWq%TE)L@MOqyTK_D-8p zJgbQ`h?qx(XoMCtw!W2qN&n9}l>xW(484EHUnEup7^?Y(jH~9V2f_vbkqZi(=&UGV)j8x5#m8^Z!H-mFZc38`qb2`KfCn zFW}$gqiu-)wlpO$#5F9;PrYVKt2tWP3ItGLmkyM+47L<`7`8|L&h3nDj0g7Tt0VFs zGU=A?6y$RDSgk&%RvV2=WqZNWu#E44Btdj)cNL@GfEL2fdOkY%ivzBo9i4x@kZk_p z|CC4lusOr=lgv4S#hnFNfAz`@+;^}Sn3Gvr&Kz0$A~?4bw={Gz|ZCbWFNr_!u}u~y;83rwUgE|^z5h-UirvDX5S=$<=zeX%~? zdgCc}E1MQH*?=y)#`l^Q3x8x-`Ofk^Di?D+fWDPs!WO#TvnU)n+Ii=c9M}~dS9@XJ zUm&{%;858IG3VT@lLb9buehnreU{sQDk??`VYW-j;K~&TYGSV9P11Z7ySy73j<_m) zx(ZFs(Fp*c1lYEp0oPSobig5kFl5W`Zp&Gd)~A5tL0WIutcVDSv*pJ)%xnHu|0yyxPb?E z2Ql&igS!AjK^0{*E3OqQqhYGs^MH#ULsLz#G2=As+OB)Z*DzcR?PH3B;wDjah4E{+knK?-xtE}9`m2TwOo5#7Ws~^ zpF-#0mlR(ll6Ej--$JMrQbg&28=tWs-nWZoce)97^BKQ&ft4&hKchWBy-wC8C@7)w zkf$~L&3?Qd}kkcQaFkXr`K&5q&`$;#DDex{{^xXgUvg<;~DF4x6H$p}rII_q^j zg1P8KnNq)4i*CobCh;;sahGGD8@OG?=}{SAEb_udwIwO7gBeO@7Te$n9p~9Aj`vU4 z0whql)5LrFp>LmgrH7ge9-6zw_*<3{nk}C;sR2Wzzp8p{`@izoq<~F)1(b1P>KN!h z#UJtQUmDDTX0v;DU)ayaGc}xPXx`=NCpKqPYg`z?^a4Op!RA7qV;mb!nOj;MD?C#CxW)J%}HhR)@ z)7{!|+u`;=q(*d?8E>%f&&?W^d-EobY?x{_F`gnn0PG8+rz(B7%sfceG z10;6GSroC%_^y2U6k@Nk0k}YS7vZR3Lt~Os8@!D4D_$xL{fqjK^_joym#AI;Oo#c2 zZW@DC3C#lk>xQ-#Oyx_RRwqlYmV9AdNN6|~I?7pi9Q}8f-OxWyw%6n|*ZC3`MtxvM z|5?e$?ARagHw!C3vp9@`cvK_kPsdT{3K>l*ahi9LgczlS=%H~bBCHV6;MLkLqgU4e zZPyc8-O&%3PCA*$wS=!^2xA5r7Bl^go$ZK7cJ4kXX= zH@EOiZU2+gJIrM2;quO6!@pv=9vV|a>&7WXdE=x~Z%-fCyN=E#4k9X4PALLV6nxW2 zLmG8!O{G~(Pz)&j_jUfB*6enI!I}1N78M_y4w3h{QIwlU_UG$p=P*w8;rexm|3lJM zutnKz(HR;^K}tFlrMnv?B?Rg2?(PPa?(XjH2I=nZ?rvu04&VI&^UQwF*}d0Z=hXY+ zUXa5@u#@#=7^yPVTBuXgu?Bc=qIq zSPdhGD1|#8`<6&Y!d^^XQ^OL-jj|Z+I<6KZ+wLw}EECQw-3@IY%=ASPg1D3($}g(V z`!LaP>@&Z*=P2Oip8kDFj0f#X?twj+HIU$nf|~ni8dbcm*sKaGbaDQIC!V+L-8e!G z;mKM_*C4VE2M%{ri39GGNxQju+J>S951x3IA4lktX?a4j;5T+&sX?nh96FUU76-(7 z1<-(2L$I2d3AE%u6T!O-(F^W+K_Tl&FE0ZJUFr9;fN!q)t&w#Y^+I#$jW+@vJ(d6U z=z<2;+GB496b2x~G~m#qvD|=6Vj1t{M>+nEpyz^>pClw6HvN2@bG9R)o2YQ)c*dAR@)k~LAw`>XF1Kc`qn0Wh1%ZckQ`Qv0t*@oUJMCHZ^w9ZrU)AP=e@1CN<_&$D~v{=(;yUqAp0j70d0 zydZCWPlQkt*I98Xg-PSoX6fi(L0QgOFSDR5+>tLolM&nI-;#o+sMpXa$dbCd%E}L| zfomMdIMD*VFb&pFFpw%6#8N0)wl6ToQ>wPaW#SUa?35i$UJLYCSodXgQnh6+c z6OVAWa1Nh*I&D;4RUQ9k7CJ%B#UDCn)6Ud3Nr4t)NRMq-`U5mg@N{uAC6$^J=UCBztad#S!5c|&0FWy$clH!ySe*ktH@{~5`S zaXoXSX8-W7w1b&_))sCpzb8MiV^l*Jv_cz6yTIe(L^31dHHfyu!_D2)M)>ueX;d(> z)3-mMPQh=6U40A~Rd~ysVzG?$r}p}m+u{aV0a-2P_O#S4Xx!nyB&ghR?AzA@sbLvZ zk}wH;b<p5eSpa+1+BR>FNfVW-na^cez}VP%nQw*RJ_5trmFo%I zy{dbHL z|C+*KcYwY5MH@)&tR2$84;jX-Ak5=~t1Ek9oQFdGM_`c#F$4cDqMx-(4?x^V_N^*i z+CW>vLV42X{%Tji`S&p~ts^irT_aLA$jKD?~}G-k1(hb-Oi z)uO6G)&BlXb5wO?-+_23d+?Rl+C|J`Ub0WJ#v1o)7b5osxiWlwGJH;tDvFVv42kI< zqMkGSv9x5Jue{4|JxQ*eKl!n+XIWor^-_|e6&G`#aZ#sX{$2j=%4^vk9>x}-nH&tt^sdt0m%hlE^;?4a4HOCM)h&$<{Dm={an_>siD4ML2`@&)*3o|UigRdX=cwjr+J6!Ack`pVqVwe;jQVuGCIME?0)^;5hA{_BZQ$9iMz`M+xHay1zZ3BE5U~$g-7M7Z4AQPCkwXsP%8M2GZGL^)!q^7mHSBLRc;X32;KMft{B7&L=~(at|d)WCtIl$S2i><hP=Be8%P*<6Y=4Q#!X-b;Udz=%I99^8)gyjW16%8~Kiwv93ZoWWgjCESossp^$KojwaglKdimkL$$ zf$n=;z>i4k#h3B>E6y?yL0e{T1Tz7))Sr3LU|VDnDoT+RIh+0f#?QY(uQC_raDa3{ zLKXt{XiY)M0@b&CVrLhCS2&0Y)1Z$@??ig!0L z-TC`@qGF@^eu;93`#3p|$`YwX6aVhsBC1ucFQM~WmmwWN74H*^z=`BreI-83awvzCr`Eo@+-{Y!bNWzg{i9$*Fv;h}^{Sks9cQs$d!oeD zN>1ii0TtceYkDDT+x*}7@gf3G-!_Y_VO{w<@v5wucUd*0eCAZZcL<1BRa_n2xs`oO zE`jitDhM>#+Ri89BGjlU`B4tU>_;)euLZD+?NC?~y=+w&rw z;VPI6q1aVHU!n+KZhvF$EwP8}PktW%-k};7pD*v~h-BaF0`fw2##*%4U$|I*nx8r) zb+}WUq@s36dV2%)kHR~>me@a)Oja-ltjYKHV%Q!%m$x0J=X_RTwVUF zA{^_?i$4gdJL!W9`q*C90#9O(Trlu9_|kl6^BZAO7cVqUzgrguXHXfkXkZ>~rzpL& zjSQg4Be0g|=;(DA3!s)_Q6u*~3zAY9)gbutU4braA%q~$UJ)UI`Yu;*?W*GnKP_9Ipth=p$8BV{rwME)cl`dm5!euOB$%tWADXtTU zdp}3J-6=FXEyTSkE(URPjV6pKYN@?XKB(7YgC`BV#^=eXVv`TnD?*P8IMCw_rz(bS zvvNsiB%qfwufYLgzkLn{&M4_|K zni6fnTqT$k<4tR*+~|a0Z!giVBtB1(wX`P37aH@E)zPdPvhUz5?GYp>R+vC27YuNZCE6;TD;ZJw>p8_anYgR^ z$6tg-uZ%}x8klVE7Dw`Deh0yXsn9~Tw?>c)tS=w!a}k=mN$ zSf85bA4#~$O8<`a4aGkjdm7k<@@c5X64F-_TZh++Q_8sDw3g4$FfHy@X6u6T9?5Fu ze9Z^#p;M)?QPkF#0YRU2ETP^nFbtW=RG!mAWqQGrqi+Axg_my^L3mZqQ!m4=j9L*w zue7Qrda>Bfb=$i@o88=h49W3|DSO6P(=b{paG@Ag1^-Fe<#-HEZ!j`(#OPjDes!m1$+uhD0czVN=azRSczJJws)s@p%f%!Y%(;5wW zibP=`Fg}Qw2yGMY+w=Z%%W*-QNtN9gKm8`t%4ox3sPLO(Lj03=x&)t8{?Gb1Tc?xb z?Og8?C+?$n#m2CPhiY90tqz<;Ird#4@B{ESo-5){Jb=R&kMr(IW#{t0^>(0O980(u zvZUOL>po!(W1vXA&XoMQ?Xb}X-5^7^qqd8^XE#h{w^6@UsJ)h`{gC@Ev z&Q~d+tIi)psnZt1L-{TOR>)d->U7}@u+WW>2RIq>7htS~yS;RO7<%(rw}i@3U+(Es zg-8u-9cuhebUgYx3yMFrv74I*I!kxFcMAFtvMX^2iy}W8EFgE>Plk!gZJ*6|Qzt(c zK<}X`MWeg+A4m|Odi)B|REPL_GV?#LZ*475pKUZ=9az;L^m6m%eJ*IAfcvB%t>q&W zDe36Rjf+*}>$g<(7o-}{Km@#Z^&AWh*j@X*5tot+f@Y_^b`HEue({u8<3<5yTd(AX zqk-L`>5&zOFU{?L_aBz0>Z{`5=*?*?`~Xs7vqD87+TnTud!F~1JrOWq5D1rFB6q^_gr|9>GgzySU|4ndc?L`$)uEn;$oVMrRr}zV0j2&elKFsw}%1 zgDW7FK%k!_o8G@R!d~S{(qrH#Ptc^kg@F1$qo265Bz;3J%uf~5%1Hk&;JVUl0Fwp+xV^pJy^rgHz;qq$=W6`jBS+#pk>%6i|#7*K39 zG`UkNiOKZE?@xCegW1(DB$a2cS=h1y0ySn$5}dWkJzYn#t-NQ52fv{I93Z^-7o?ID z>j#A?lIacjc2m5@1aWJxWC5E@jxHT=@J>>a0S+K!%wJDiHR9(2Yb^i4YRRqB4Fk`t zYBOU$l#(vOzQZ4XX-E`rKCC7J3gP5PAIAXX2AK*K-t4@n*$@$XnfQS3a{D$++RU=Q z6U7)Xm>YH1(#4L4ema9#q~VMB4vENugQrLg;Hj zfxbpG%tts!STDwuI!L9PJpjviYH4I$+PV~jw)xjLR8nH5UyAA)%Z z*kU&2n3kEaVY_LyyL5ybEmK^g>9|c1LNFkmM}++%PpEZHA;RWr*=S zL{!@IY2s{)>6O)2=Kw{AT+!jx7-kt8UI{6qZcnJ{_C55uKH%eddp z3ydR63m)?)Alof)>Rfu9i1@s*n(1Yg(y_NCU=VrdY%10q6o-#x8C#%3kKKjEqWV5D zfB|ui7MUxd9`bYRQr1pM2*%!nY0w6)-Dn*EOGfw?w(1@UMp88Idh7I(J#e8h7&b72 z$4O<`jdZ)9Hjbl#=H7X7MXw~9=sJ9~BK>KSCH8>{wxD3_B&dn&Et);Xm(hT~&yO^9 zE+1_PlFA5h&TTNBy7R6k8gpZ?l}h}ix7uU1{C(u}4j3(qpj*UuOT@uV=uMK=0GWoO z#z#_Cmxmi+FoL4e5w0mFQr1yhf~A1Kk|g5Q$>536L2gq|b}fd8~9J$9?Zga*tkcXoEPI}lP^Nz4FVne{on8+C`( z?^;!iNirkQ9O|;d7f}HnQw@DQrLTvCW?xH06NLdBrXB4OXHs)LQ5|-rSZuLzh8aJe zs{8o?lHFMUIpuNs?~f#oz}6#R0yNoz$b00GqC}TxSHtSkcto1*&7(fL9RXE!-V)C? z-ZfhtYO~Toi2n7&!@2j7=~aEh!wlQ%P5-KR%6F{GU_aGzpHvfFdRnhQ)aDO#sHN*n z_dP?#sy`CM1C`x9FZsr5Ihnl_&0z5H$A9e6Ef|!O2g*t*WDnn1wH+Oy<@W}fz)TKB z#w%|+7;^WdvrzO4h-~OyGO*UVO=W&s`@$4UEr*?F@HM-P{Y2_5qU#7TNU+q@EGoTH zFPzQ$*s?txubss~y|mbO4V0;H4k7?3f?5R}#`X=-D|e%GMz zeUvC-MWMu<+eRDP&{YTUv)C3x6q^8aXg@H%mAFNL?hT#gyu#dnQ!Dy~(j0QzZM#Po ziG2Ib=TyZx-K%ZwwKiLMYUb~p6HDSNvxfiwYV9Jc^wA|tef(aDmHTylYS+Qx735#Z z4)Wr%Cpj?7`{;`VGaG)tW;tuNi7b4a9A3gzL_;S|8kZ9!4(AtZH_}}g&{vw$iOVHg z1h8KMYcTZp3HgTl37IOc^9r<8*tWVH{lOPCG5(pYIVz4Zq|}UpS|lQL%6i)^wLA$! zmPKeFgDJ0^LO!-hEz_0SAy`5Fra=i3_7b}FSWlJ?E&R!^hqm|ey?qCTVC+gfWsG8G zyq{kK=zIF-UtcNIl^`fnE5Pk02SAwmeGm@sUN+@#&EZ}{GWHN?jqqw*g>Vd;d}&{) zP4x|!GbM8G#@qS_EMsLud0(Ga;k7Q_R9uG37L5c9bNcNSn9?!ryI3b(yNV3&@*C+J z)3RiS;f(A6d=|7@00WR1&Zylq9x3dZk-Jy}Z+D-D%0MX-9VhTc-8MrdxMrCgjejv0 z@-(G6SjH_h6G-kXqBx-~)39px0|Yh4k0EtES41hRBzqeCDAK4Qw{u{=gqXkI^QNUy^9J~cy4U+S)6D7MJa@wGRTQI zRG(7E|14wB-)717Z!w(=gox`bWqNOMfpQ06myz@qSmHHJ3EJSmKJS4DtS#dC86g?) zfk;We!s5gOXXn(_oPU_SByEtI`A0?PNa4%}85&8Iu+%HHjCgWp!4K<(vkSxJbc=Rw zEwUl0MiKa%&LVuZrbh&Fks;_}YLUMm!OGGHRlePpCC~YAhFB!nP4M)X~W>!mOJY9WNg}1+!Srw5Q2Wk(XckNv?U#z(L1c2-b@I zZ@Fe@C>*f7pmh3R%7%O`4|lE9_*03yb=2tx42f@9$n6GJ-60xWMM=O|4r{VSnv3_a z*Nc(%>nbS?LYfs)TH)Jb=`r~aPg%`%dV zoMhc-)OV|je=CeZBZA)teI-ii;6e!-K;^KsFY6jQs{{HI`~mU!@+IFHsHh15DUJNA zN*z09Eos6d_A(O$lC*kjOmf0Q!G=a6>s_=nPokgk`QbC+GwIsKx}=EBZe)kt6^VR% zf@>6B^bXa%_r%2?AXlc(IwtpbL2DB2{q5HU6kqDXv|MHoQ1~FUn6~ua$)0z~7R_z# z)$U0NVDj>j21IIClGb4Mv)&Vy{jl#QZ^wpZA46!^cs?_(Uif@V34=7KmEZNOiRqXF z`aD#-Da4l4TRpmJiL0d|mH0d;LLmh_d{%%8u}{92zZ~gAJ42V>_*q<#E6Mw+=xOD1 z$GOtCRlSIHA#-{|>xO=aN0!D`ET-?-;M(8%^s;9oMAvU=vq6Y;AWw`ZZ6R2cHCsR& z`ex{m0_q3!hTEN|SNWS?Xa-Crw54Ar7Mkt0fs?vI02R3{V{>47M#5=EO<~PzCHlk=xS`NT}_q&KbwLZ#gAG;pCj_(#7xnK+2{|J6KXOa ze&Fq6_>D)YTfj~v3?wK)ri8Kxf%6RZ4yI>ROtCn=in)2VSDP#|Vw4}HAENIM<>-lh z?Ug1XS^HFiCk+mnHQeR_bY8yJE&EcGb!l<+Z)3v&Qb`5^wZ0O?mt^+P1>?|4;xXv| z->1Vr%$B0=@Kwgg^nKG%n#Wy78QEn(W6Sl8i&A$*<`z^y0yt(l)t$weVR=T_PXATq z*gy#-lV?kj{8}$=8lj0?xJ}d7CtxE{`%bw#(fvK)N|K%PHd43CYiX4%^ph`>D8IIv z6#uQpme3(ugM^ho3Ui>*5A$;f9ZNx7-gI-Qj|d8yGK&<=jTN& zZRcN?mj1VY<=U}N%u%BP)^V>T6M;5u?>WWKbjErtxFbwe4hweW^#`eb(JgEs!2s)~ z_wP*A!l`mltauGl;27|+>}@wjo&ODl?(N$3V6z7p%MVqR6Rb}5Z|De7(?|?+Q}5EL zaUz#}Q7*@UsySan6JN7QHVUYBM(%v|^}72uv>7ttcG5B7(pD@<&3dHO=kxQ$Z38o> zrJ8F>#3=g_5cvT)_#AiKY@E-fPPb57+V?x`EsUrtp0pFn@D7t+5?sMtXwZ##79~KK zkl@ZI@y73Tz0RzARtl#DUV`S~T`R< ziZ^#FoDg@L=lJh;CEFB*?{R^ulfL;}`qf|`hnDdpU7}#FGW|{aXF5(tSkF3%55i3z zE8|n6@$F$cu3?9#gSrYBtfuCJYbbk9Jc3B{q)aC47>St9ZK<%n=CuZEBOIozyy>zO zxYWAk&?0`TItPV=tDIvNGb@0@#{zO$c_9b3j`1-L80DIEEShDZLZP|w@-Y}6eTj!- zy{EgSQ&l@AW!B11wO?VF9A6`5ipoE|ug=0&WRn_o*yHBQwP5+g$vN7FPPdmMs*iDs zg7Da{0<@&}nIy!J&WF@a{(F^`MHnY*n7I7WP2Ha_U->Gc>hLjPV>i{M zVr(jeubZak+?=jurHAjdP+U14wN%#<_X5ipp&GAg2}hStElL%X2F1M=#x8A;(1CCC zUV4MOw%d>uhc#D($qIIH$n?H*Y+D6yF8$PNce8wuiYGwo6hdAb=fV4wYfDnK zNFK>=L_iCz_6go(`9;#@cfNzak;CUe6$VWiRXYG7}n{nA58Ny0n?w4x)B1g@NU3~%s>n*KCKllAG_4R&^e z$X4}%<&stN9;uv^nG+Or`ri+?r)2O@>nbi0hdCo6JG{9-jN(tU#T}Hba2wyPyOlpD zkTmyvo(eZOlv*41f~e-qSZG#UKFhD3x#XjkX#e-Yx)SyeaDA9Sp{MZn6&;==@Lt(- z!gK8Exhr;YAI)WC&Ep4-K%-e5DUowAmPI#G#Vx(8oZ_bbqDL5$FDn=Sh4=40pIjo1 zqv19)e7u_=@t~oD2oR~g%|vek?urDOXiogs&LFgJF(%^2`}&vZB}C9O$Y1`E{8Dcm zcYxYyi`4>j`ci28-xu{v_JK8uYr)yKpjJ-7PR^&*oM*ifYAfD(KA~`U#L#&YJqK=H zxUv_QuefeMqJ*mb=Zvd0r=7O(J_GUIBF&A!@1EAT#HX(-|5UqN9}=3@+39on)INk4 zapTf17=-4FwoaPmV~gjtG#$G?Rc<9#+u?VJkA0Y-Kft`ys-imOx>>kGPURZg zEIcJDDs}Q;4c33Iyo{H+8iIWSxws&Gom;=civY=-q%L8Gk|>NM;giL;KzhVPgyF)K zmArm=v5GKo`;MVY36MA<iaBZ&-2|-KkkXO-NN|o&6r7b05*^ znP#ItF^Zu2EkC$AzuFO00n}WH}AYKk;pJ_vBS zary+LE_-$!KZc_^h4KFzjD6j8Bh}cVgIaPKWhc!&sk_+8S8*pN$fx^GF}iShVH$xY zN+TsRS}Y|TrSR_eZHQbdOMWqkO-X5VHt7L)x#5_Ibc*Zq$TX}IQH3L)b)D@$q(1#i zcNGx34*O`Q*A5LEdS{Pw)joT_zM`1Z^Qe|V?))+1R%2UbabIgL1r3{iREH{%J+rrw z@HS#003A{`^FKcHQ2w?@QL5|=09QaC^vE?TZsPT!ns5u|OJtGF7`PEAx#7ks)eYP{ zm*vK+I#yX4b*RaR!xYhLxBc3zV%&>=HNFVZAPJjSiI5_@VHs2BG8uPlkM_-*cR10u z2Skz}! zM)G?V9}C_GzZ_mF@%SBv-U$4W-;E9jvkgH2#Or<&zWQlM8U8c#J*L$hT-!%9WmSwf zO~TW>)=_)Vf!+ZwD_Z`w$r@%$a%4=5$B9~M$NLOe^&nDWy#i*Yb7o&;rfvYE+}L+9 z%z(R6bB#M(G+$9V+&MRUtouBtvnVholP*2Pec~~GT3bPnoT0Laq1qr3_EfdCt zx7xec!%F%ZQ1o!VJ?*OinQ+)Qar{Q7lf2F(57ikthEWs(jN#mRc<+4)4<1a?e z-J7~f252)mHsFS;IaSbwWV()<{bf@cUEBnpj*l-))3O`*#;-X1=ha@1^dVDp35$?E zBQuC%1f9#oftL_rc&+sg`>zE}_9(xs8WbIg7S)(&Zks@u*#tA=EXyVIVGdv9a1Tw5jLh?aXU{78RTXn{iT1$sYzk6>+`U zvsH#@8uzRN_z6Bcu~~9Ts@UE?;bl&E65P>5KRB+d;7hIcG7>=ljWM?Pj#|87>HCoY zQX4CRk0)>b737R$JU;@p7qDZuk%<2R9XsyFP^0JB+z?%A0n_Xf#093#kGSk@L1m5r z9r@Wmcg#kFBs-Fq#T|FNK(hF{@hAJwHzM@`OyZ`a@Qv0;4+UDp(Q&?Xx_%uFv$Z^F z_o5%>L!sVlJXZFWRT=2(0bXBA&D==!Y(Hu@14XR>anb8Fk3pFa-MH)NMvfs=-zL;j zg5A~cSX5%ALa8qY5Bo8Gc8frbX+6J7AWhX75EpW&pB;N{MP_s|v2#4Gk+&5(vi z+egn61(z>LDsHUUBF$cH7n#}uQOv3dNmjWm88AYQs+)!9zv!h)Q&0#Ax)GLlrd}$g z0my@ww!j$?DMH-KKG|0s&ScvNu_hUH(zJ>M6ac z^)B@B-lIg8v5iNL-Cqs#=HFmNBwI>!w2R)Se8oYtzRq<^3WFXq(vv#(>rIF0!m+o#Z~eh|?oWeim4JHD&@vbS*Qj zLWT?6=ex~6Ek0vq+B6*ruE*Tu$ZL?rql|1Blzi?st?=$1=p(XSG(EZqB9i7>rFKjs z*vhKZZz_q{vTGKG1Khn2?+sui`T=&{7Bt`ak*$1Q`YGDgf45K8orCn!Mw?!61E@;!Z0EEp18I(}%wuLrh5}915 z@C3y>Dl4+u!r(f{kf_ppRgF-U_*p*+TIKTO)YdK9t%o#cJE~;8NT*^=i>y1xw5BeA zT60c>V@%mgnUCq!zg2@4;-ObW@-+soO7S&uLqOp98ob*{bYNr96v=e|gjuZj1NB$3 zdP{^OuXf@-Zn7DDa^7i-!KRt?6V^494l)xgvGra=H8C{tuIG|_JQJljq#?U!Sd(rH za1tRzj)`6nW^OJ=A;4Sa(!#HSg+$B!>ac6LTp8sMuqsg;E22G=V}-A&_H57ck4uDo zxA?<9H&X2_oww30S5#qqNrZ`#kC=GD$SG%Ky2Z8A zse@n(_3N*p?H{AuckS)|`);FxhDWS^yqY|KhEq9uJ{pN`vcSf1r)T^y4@1S3<&V(lCpATh|EU?P6+vr$wW^(AtWZlGncYpt7~O@?`o+Hd|q za56d0p0O4$REJ!@Iad2jh55efa)6e*PX$T$Y#KoPiw(vG`TZg}KMAR`8pbin;L?L% z34>7$@oE>=HUAzZV>UcHfBMBZaLIBOK;Fr8YSU+QT3DAZASE%Kpf2R6H(S}}(|1<$ zG6`+}N3eFc^tey|8N`qG;}%(i5@orQ*M=xTY}`u5@tlSe0C7nXQRseftb5^BwQA=$ zQM#W?-{CfF0q=vLy&W`zg+8mg0O_^nC{rEoYNqde80qc(V4Tx* zi!z8bRPv!DVU!zf`H4N#Yjj53eQsoDigl-)8Zn^Ul(LAUU)AM8F$WTfpDTIJfN+Z@ zb8%hf?zeSBelEsCrb5=5MzrpVbiRCf-o;cbdR=^0vtx7uWaB+HSvy(1c+^efD}%eKh&Nnv{N zK@mH?V!^;?_w-20dta#{B*6e-KsE;J>8dV1WRC7Vf-g#;QgP`WW|w`@M*%`{kIM&Nm1H%$vGa|kigGd$f=u6s^zhYalCHMlT5Jo5^R>SNLd)?}2u z=P`RkTQR$}qqjDHR?O4DQc1OQ+nvYefr$>|R*MUtaXL-@N8al z&`04`$TmFZ?c4R%0Mf?==ePm%4O#RmOCRPF?XBKn;NiuTqT@;$LU&!BUb|0G6x&in z_s%%lK53)`Dn!|Kw6PxBprA-f#q9BMbbjzEEvdNOp*{6s3zWO>rPTnPrN8g7|56OA z7S+0nj88BsmEFTFlCqnJU*dl9sev)XnJ`>YyJx`S2WM$FD!K)chWI_!4sC#YV`=^% zItrnYN(FVHbSkq-8jPYlf(k_&p-YggCkY}PLN&&{G)5QCTeTzlEk-o?G~u7d%|4`- z^94$@Ecjqr)uc%ywFKe5887ODvj}i2G8s=>9ua_Grbdc;8*;hov3WZ;c@+O$3D#x` zd_L6(lx^apbLfELoaCAmcB53tPp$9bGiq}SeTkU}S}V?D;8YcOeHu;)(>-@(TEPGaT8Aw~#T^Shda`Ri*{GP6h z9_DOax}`5ms7++ttF32~Qbs+?LQz?pSYe0Q%`RrRI)3fUU8&vsgZsa~nZavwBKhV~ z@yK7?HwXrvB@#UQO7r0;Gp5l}U!f`TUh+S7xWT|G@2qg3JNa;J8K2Ivm$aiUaH^REx`aZ4&;@Q$t44QlQOUAs9;K zoS{^SLT!{Ox_$xu&eV{q)vxa?-nw8IB*OO4eku}x8+5sO>3~>UIpKJ^$N@L_2@yU4 zuuHigrpyY*p`8Bbd7?7N)lHYN3jC|9P;Aad>mzEvfo-!qRd=oEr(K_)WG$*Jeq7u4 z14-6PTY`G`2u7+UaPi@8GEs&R_>)~9Rh;th)VvH`9t{tiTU*t>%tKm)kOqZh9qPmr z3fU0RhG~f>!wt;NLJf`Vd>2m;KBduMeVG6AX5cU)*O~)=g;J;G&evai)^{yJpV`qy zSE84HG$4tXy?W)P{kYLOevXB@N)PC4{J#o6#7QWM>Lajak}bkf)4)92FQ=^*%z0@>L6)*Ps%?ZuhbsD=Qu$|a&oY#W zq$l88j7I@{O83m^BlrQmKu6+^bIC%1BSXX-e*&!vS`yH8RX zUQ}`dN&|AIr){oScaORg|MBU0t-~*7}y9<2}*)D7!GmU~OKdSx|W?iV| zHEt$FlNz<8M5nJ}SRNpe(CYFAd)gAFAP->I?aE7r^iG{R3>5 z6<9?$g2ZJdYw?MvVM+VXmHmWv-LqoB1nN%fcTlVows`20-PV@*XW!O4tCyYOhZK*E z@@Xe}%7nGs95hso3S=xg+Ha$}14uhNmp{=3*hvJ|&L-7r^aab&Vqg)HS~;N*9du1J z)EvnXk;fZ>e(}+zWwwAj5u#t!5o;>amjCT?Zvn}hTVuxopXiJQxicV@wU3P`s}{@E z9)U6NeyOEVmqBE5GqqEYPxntcZ zT8b}k5tJaxv1_HiI7wpOAx?-w%sXIxIR_=QuMUL-uNqG2Et^+_%yKz4)QR(MXkrZz7r^v!6BZldl*RS6WUvnA+0 z=F(YtVz4OYpd_xT@t&Wi=nv=vSV0@C>_V!@=2pv;RNaB&PeaIa%ne!PR=?6$N?4FA z-?sO+IP+5<2}hre0k}6qjrY_#X^#&YisLFt=@M)@5lCP8=o08v{Re}qaccO!K!Nqi zQluYm1!e{^Pj53fNOBtCg@iP6z^Sl$xU1OFee1dhLwOq+qaAChYsIHr%cv}0v9!ek z_(hPCFtZ8jwIP-U4ST1=$ECtgo7sPOAsR=Kiywr91XKKNPJIyq5#}%EbLs>79K5 zmI1aqHon6P%YhFro=+3|2~l4@Ughr zR|mhSdzgBtwfi=#B1J~Y7US5*Vw62>-`8){j&$O*T6<27kFGP6!L9-R?QOIhwM05c zT4J`))<@4*Bsf4{uAHNH=_algS-M?Fg}QogN-AI#Cb0YFL_9=?Pu94Uzr=fOU*|)4J2T6BzliCYNq+lX z8ndkrviV3QiuX&oLch)Vu9(}$f*Is2+Ze)895Ax=E?D!O9|=PsoC+I#mRF@th9&5a z4d}(YZNB}SrWVQtbTguNWCnec`Xn*F~Ys<`hbvepqrG8j>_ud9XabGBE_@{B?}Xrz1APyR^r|rtT5d;4<@L~zOJ>| z4vH3*K5~)`eq~qAFWG47cf0?Y3RxoaarSt;c72fQBrPeaCI7*KMb042_bw>DChxfX z@n5I-t?h-?j|(8W0*g>!;#UC-5)u7to@G?K=+oo$$7D9}&02b7m>2@NNfLQr3_w+o zDhcQ~pl>(WCp;cHS0ZJ3?oBQ47}ENSR$HNs%9;IVKG@`KYkCVrMlP*{^xpU6Zf8g( zVt>P|*J`nW5n(i3jRD&S`l#DnC38%Ox4>={&i5NdPM6B1O-np-#N`dC=ZXI6A^)2O#x?7 zb>S?h^JxrcOwJx+L!l-Rt~6;AXT-&mdDY0<9gJYC;k!1R?aS z`Xsn!1ad*0pveBqfoyQ>8Ccw9;5WN(b6}dxlIiz@!b|CFzi25T=>F|WB^AUankK#| z;fz%t?=3t&bkU3Bw#DgF@i}z1-7CAcQj-DiOyft#53qQnWbEWva`=s)o3VVc-hSia zQJdKqkbL)?;&LP3#&?MkCwn%q8*gu{soEYD-0@g625GyI#)+vefK^o^RdY5J*J zcBUF1J4grS59W`G(>mWZl86SK=FZ1XQV&S+(?*~ptl8l)p|ErHgiM4r_%l+R;gUtI zCG%cjt|K>^Ah-MV1mc1~Z+w_km1==^IdfsD*`$6^>osrpNyf{|af3gVtC5eq#gxLMQ{! zN^wv3?vsB`oXqXva1VZJL$GZavigvC0=gEH%sgS<=f}-v$ZY5H z04{A-Yy#?+@J@@cyo%UiKe5X`;kos)YpoLaVAYlZ!saWdbPTvMih<3hR4(MM)||!~ z@^acY3siwKEJjD|qR77>lIe7veWk)EFz)3G&rt8TG&Cc44WE+Q-vIcss#C%~!rdU6 zL)P@}3Rgga&1@CN0=~_@aj5TbMUn~CAMeP&lJipVW32?79gP~O&QyNyBy~bk ziXe%WCfQu@QvjF>Px2M=4a{3!R@?3g-d1{ZDC7916&T9U=0i?G$t2leMtd9?Mll+$ z1-OI!6KbtFJa-(JTEe@d4VECK`lw}`Zz5B-kpGs2g?ma3y-l3CR8eeAU15IjJ4#lA z6#Tl6glVP_2Lss2RuT`Jr~)WqiM$&s#WYm9<{)Mdc-n02iG>tH{$&Q5 z|2EoZsBt{5&*>qXm(S1m#!3*u4Ir1-8s7(Duvc&K{{_h z0SHe_jYl0Os;}|P&IQR>NA>1J+s8-!5OdQ%!0&eu;VL3lSgPRUe`UhA2Oh6K7{L$q zVB1n3GZ#cu!2VYal`9=%1RQUJ7CxbqW|*9%aZ{HRZyVsLLk%xT{eLWdby(ER_x93@ zG$e|XXczaHTOBU z;$7gae|73fpR%N&9#n3a7qnxrSQjE>-SQ_Y;^8%wku z&-BiaLA*N(>CgC6Qyda!CSoa9fy%3-19m)r^ndHu_DQwjfBsfJ#1x#fi1wv~w&}W7m%mDW z8HHKrw1z_fjOY1J$|Z(0dyV2GY<ovsTk<3>MQTXys zxTv5$<8KZPl2v-&5awI{sPj5;lKjUFgh)tzGoe@jDr{ce%VP8a)2?s_5{M(iLY?=; zm%=d#W#M?*iS9W&GnCS&&Izfy-|IKM+>w6_3;CJt&Pu55k}G!FC5&0jfcCe7cR|)q z;$M=~&6&(5WZ^`->7C@eA<5*#WmSGS4ne@Q7=Xx1v|!Z=dVnb;l72GMNtDh>pc>vl z2uMoyHOr%$CUy@;ZeWuMn!rPVDh zs763}j2;_EHPl~L=03Un?g)2y3f^}5Z0O4O6Csx7GKJ;{%QNq=EBkkwEacpRx|Y1D zmPJ(eD3a)!pR;SyL#0BVsD48DYrtJj4++a#Y_2SXoIi*pzneANZ_-WfpooNlbv(S> zk4oS(j_)jQtMqRXI>qzG;tRAEL1MW~PIu0Gz8iZAETLc39JK3&4`qHah)?4qjLxqO zaXArVQ;%3iNytZS1Kebyn%O`3q`t>eP^lBO=I{(wz>nDj?(a^FTGi`khP_7fr~&K? z{ngk<&!cp@eiU62SapxUL=zq~V@RuudQgo4pExlsKEWT9c)m+3jA;qha1^GnArhpX z&fLNv4xS?mSlrIqw{qGSf9ua>M{`pUO4=YR4kuV+zPvSwPzn(ebU zI%c!F@&v&sS}cLDqk{bGDPaa$;eezJpV8;wDCL(LTw9{ADWP-Xv*EWTs4ZVGMmI;r zYyTH#Se3lPQa`$T%dBSCKS8aO;5LNt?eKEY+M=-_rCbT^>!_mR;&WD^6D-2WX0b?H zSh(2IS{LHi`a{OrQ%++qowQ0zPCLHhe@g?&{#F0hsfd6wv{Y!a991j-&I&iX+Ma$F zyK!~^8ALiDt&9HK#KRvM#d{uZ0QbkLQop_uN`I@ zEU0e*jKg*fW6%0>>hcF{KF5caXdw%hNQV?}9+d?laVZ=e)1MO|erUMd1O6c%tRfc` zJL^?X<7M}Mm-{puo7yN6>JrgjR*u|ph^Z-G0{Zo^X7jQ?SJ$uPNlQ>Ek%B8=2Iul2 z7=*zKqlL?b{;W*W=&w=>TUdJDUW0{Be8q0yVg`>v@S;5=vjR@$^j7!SxxbNF>A!to|X^7rv#8*9t&)s3eBx&mp<5J$&!{4iW zg(pU_0F3TL;`v?PQ3VL&Rzwd>*YHJ{VaMxEd$G{aDca%hRcyHt;S!xV=ophynuP4U z49t)8-eUOGBeIZw1&D{|QBY8iU4xh1=-b5WRgA)f9@<}1kmMW$pPt)wl(>;>Ov~X&Ve89=_e>KOB%g2 zAzXz9zj{n--+hDFML@5&u*oy4J@98y z(AsO42EsRHf;ddR?oxEg#Pd>0t9tWKA{{8+lC)I6F?A5D;Y2_o_O?*xHqc=feIU?SSN7w&*|_s-Xm3FN(-oW$5UZL99O(VrnCsg-h2Wn; zc(x((P8_?y=z-|cJm_p@i6K{^rrZhnU#z-*G`pRwQxR~1Kt3)`=TVi{MYVo1y4{!q z4c;97P9|QFzfgwLEm~S4O}PW`ga)lV=5vM%z$?Cw1WoQ>-m)s=gGXQuVXw*grXa~b zm#L34E(@K}yEol$q%po0{M{^tZsVIb8BkWy>yda1QKNj(az`d%_a7KdO9e1#gTUz{ z@J)}4Ix#T;%AJ=!?OE-<1^oQA%cC!4f)4O#D@=rE%l~+vC9QgoyLBA zMku#*EKju~jvW?2p^4snO-)t(3k}TN5kTkvo((uHZ}v~$Jn5Slrac(w;8MJm!id-zz45m#M{DR2R|;ZpaJNEl)q_EInbS+6e*@yYaeyFY`l+H;5ANm zGk*ex=2W_YYel_k=eyK2Sils4wJ%|YdWsW^5(O|5|`oh&yTHd0=IjAoe-SwMhzb8M!^=2j;+FkNz&#tiZkze47h=* zRH}{KB;tFk{_8aTT?Fx*jt_WBBONJeM<#f>4xih6+PhjqDW_RUWN148;O;`5SVL8{ktrLFO zz-mxVJ#_t~`0VuGUsC283GToQwq|;OIwo(ptBzu_tx_O%q9V5>rp15}y{<lKo>havwvy4K*hf}zW*4$8!U-}{qfXha$Mlc zyB8gfCD~Fp_7jMDTS$AS&l>=We|lz;QNK}<{T`1L%Om(xL~BRYuE-VYaX>&u2hj`0 z%-tb6>(rL%BU|0-gbt@}IZ^^67}A9shl{jqafa+YoG|+e6Lg-srFK~0^ zTYVs!QApyJQk_)xt@yhdn=grwHBpgLXbSOGX250fdw8GJQ%p)I#LH9gH_#~E`Lp0o zQ$=b>1XfET)WLl`T-7XCW8b#4DG8ISR+qJVs}#wsRk-UQgo2M549$RE>^L& z_ujvF1pU6ns)3pUfq>Y}Y^H$1S3OmKu?_LO9CBazI8F=;2HIg70y?JoCx7Ojev%mBtSJe!Hr^$$295n+rtr-astdXj(o5YL%BgfI-7Ug)a+inwIC zx{krzgm_&JS#X`OFIVLK;MPF`Q^}~~>3-Xxs|vo>=+2e4-}@!gHG2JPsiSXkwXaWb zX>0!Rfo0jtHnPdeIT%PnmxpBCUwWL zjNvl=w*70S(S3qk@9bqxP1|6o zR5ZiaEFIxj^=7IuK=o(k6f^{q-L;ZFY6>!;g2eEK#}{i++@hd~B>gC$Blw zD;{1=*v9;01bo#C?D!N>JcHJ|Tw%ENsxM$n8&5(k3*@tsTZ? z->ba*9Ms(w2s_1aZIr<7-Yh?;EbjLdOj5|DC8KuwE*-0}SQc4Z@s&!eA!w}*I39q+ zjTjW{*&c8MKc}zpwt?|uKJ8c#Fcv-BQwE=B ztp}Fbv4+(p$cuu?C`ZqC8s+ULLr3EH9)$oDebzC)W_{8}WfxJJq~u5G*40WS2Nb{I zEN`v&2dD{6L^ql~n2BC|fbW`1i2FTyJO-^mF$#9-Pn0l4*VlW!L-@Oj&J6v`w2{DI z-p8=d30VWz+912UbHA_r6ah6Wcv}1D7)IqWe(f2eqPsEq;;AZYnTplp=9*X6QE$7r zC(0Sx7yqL06q}*@V^WwJp;wX&2comQtS|ZRU;Se7vIi|y7R&(v)YsW@Jy^pMGjs-Q%vaHzxnb0maFpPIVo3m=qDK&TQ52e^_8v z+1j4JCaJ+>AiG=a{|0dNwj}1G3+|jvQ8mn+T@7EJs6zr^(Q^SQZ%y!;&qppU#-n$+ zwl{zO6WYtoq{u9SBE%;ZLAv6*jvqbNsU5*jW!GM}N5ZSID%4R73{AV0Z$2$LC-ZKj(8K{hMf^ip z&4Z<4@y&Y@!ZFjeX@mI8ztmXf<>OH;1D8u~2gEOFH115EXq!$OQMPmqqU0B^zJ~Q^ zy}lIyWT$uUBsfAT>&MYYjD7us?H#VyvtGw33+EDgxk3nF`gIdZCy5mvQLNaKo4dVQ%T*6AoX5;lU$3WfENY1GnhbZ~-u)sB?_Tz9V7Z z8hp$4SvN?mo#25UwwWvJlfJz5aNO_XCuAS3md;B39A4DAR&``-)`0>|^Ti1w z^o(d!(Yz8&UF^s7p$ugN^rW_3tnc&@LByy*r6 zQ1RxAv01;D2MD}&B_<^W^h^&Y48~Bx-)agMQ@6e!l)ixZag+zIA?Eu$xuV`EBu3#}~)CY3kR zl8N@lOpNI5^>s$DyHS25>8{)E3+KP{klZgoqV*Y${mEW7ezMOKZ0z|`LImjC`Ho?23z>V| zeQ?V5F(YhSg7_en@jpa}QsFTAK+Osvz+pPz=<{eXk~RnSO+muVj5SS1{XNrNMTm|R zTh3@l(%z{oT0}US4#1@5+W>bkiVQhN>?B2#HWDg=S%9%%@9s3v8cmO*lXP$>_7TJ z;XnmdRv2;baJd?^$hPD(_X=Bn{~9dl-r*gS>6Ip8^Okx1E)`-%2;W*ekMNGz@0x+* zgy=p7klLmP9vJX)N~wSYwZa z#lxqD+DkKA5t#2XC8`JcvSR{(p+#deGF^liXy{(}Ti76@n{IAgGEfrAhHC-xd`F$q zPjq^_1ZLec>SI<2DtmluW11!-R=uTidkVJe1!jczD#c)*!Ei43GbA$URQk-Y?7I>B zBqYz_2Srf^v1l>Gp_YTT-4(C(W;0yUBV%oYgT}bYPrK`eBO<^6!-a@Cj7pH2=AXwXVH^7U%e#u z0{a2}znBC7m%VVnhN{4q+Rj|Badx+>JF_F36ISeQ=KL|{Fn~kiRSfeLD0}2i{95Zn z{?WiIg*(JqfWK6n5D_zQIaKBLY2AK)y}71ini7z@t=H~{69P_L|G~IMSL2Z)7uj{S z_wvQrk8MdnV0#v|L|9O5R&u&Y#-O}V z!tH?if1uAudWrI=HWKdV!86?Ao-HZaGzTFYe0RW!{frJYT7T*NYlsuMqBnt(H)upa zFS}cfS5E zoIq%6v2w2_SdIHc)O7p>Vsu*(ki@c_#s}`b>;P4Ijl@HUAUgFY3A4=4FlZ10%KZ?d zdz)9uas3yNwi?<0^$)v!KvUX_ARZUeYeMwG)L1uC{Ocx zuMyE*oe-dci3w%lz& z%oQ>b$c!OG^zr(cJnhI|d3e4>e18-kRacx^+zrGH#m)V%$zLuEN4d@z;y{K)CQTa~ zfgIS3R0}-%HqD;aQ^X$rU5;34*VMHI@I9|2#mJu_sJ`m_6GL_4>n|+EHBr}|)DX5W zF=s0p_O@u4WY{{a<;Kr^aT1&?gprlpO6P-YqE|UH2ZI~V4#@6H1!sl%`;W~=i?ViP zP?&+Pp4ShXLtXEp z4VP&QsG?C4XjML7BiDI3hbr&H0xZ`P5?RZk5}&s=EOF@D)=rwxXcl~ISU5lc{C7qU z(Nli9xmPqkV(RL+ch&6~81K9h1!VlLL{1BOl+TDsUPUOJAbLe>GrQk7XO-gJVt7jl~7ZXOIIWJD9zK z2dN1_q$WV3xf${3_mO{|rG*QZ24wZr-TA;RyB_EM;25@WpXNj4dqzHD7e0S}aFaVi z#cqw7-7GS}QK1EZ`<5*J~yqST(@%P2UhHrwI2DbPP$3 z!~rbmEJCCT4jbE0qXtO6h^Y$f&Y`NE%E;vzj>T7V>rpaV9bDMCd%a!W|eO2`B;p6)W+g z|6xUMz5lUwYT}+ZU{Ed0gd#NFUI|4Mv()8KDG@BsFwifK!hR(p*28JBEh$JAG`;wD zt7DGFZSWp7R#CNq|4}?W3+0`3yjTKeIh|rm)i{CQEb@kU7@b$p=DHxbkTx^1M`kwn z1iW$!-WSmG)6(+(h%@17QL5z0aKxhYq)i#keiKMERQM4cste?19ij|vnMKQfjXzh)|-;z-O?_T%WzJ!ueOBjhnpgqSA)burxJu-$yhfZsX%Y4b}30yj};k2ZVBOCz4G1 z&bas z_lr>C^_3>p)50xzEhhK)qJB@sJ`GY{yg5n-=e2l&xT0~2t`0fWWFpxSBks{m$# z%TS&_Ycx~ELJwDEex~hVlceZgr@@e+-etMz^Dt7<5`hz7nrQcSu_myGfeJJ6t zyU6eX3*XdoG^tPcW~MP6m78<#m%O-tOKc#Q75l`wE&RLf8&<4%my6H!@#N%eVe&hx ztcMh`hw&!q@BRV!jGL!Joh=#=Uke8-ZUAtCk>UUQ)lgb8?9{z9&{HCGy*gb}%0d%I z7jB3Gkd*Gnm3;ly;C0N|B8~l@i6}%_BqEz~2*2C&eU=Ota6{-Q&FU)S;OY0#i!Yyw zE)mP@<&TNliJ=nS^{2k@sUlf7nVPp~!GRP*@&DV{_fLmI^Cu0f4+J*wzK_tF*T4@C zdzBMJxZ#R}UVLrGv+p}L^<6OlPGM=VxehC;-`EIqYjRv~G9(}T!aXYF|Y(~^k+ z#p>v&FNW}H?6WRa9>0P>R58Y{{1f>Ad~BQllNpiz6@eA*JO3>!KJe2`E^H^ZdU8jC za3mIKbcwMOaUHZW-XmBg_)BTb$=%I(&&<(Y?1lV7bEt|%?+!$fwp-6^Lgp3L_rGT? zh!ZWDZXr16)F|Kl8T!51pu62&!u2@ASEfwbZ;{%5^Lup^Rnne0K@bvnq=LI!jqY6I z#1s4B@rrao{yQ*DQP^(uNLCyCPvBJI%OWP&@LAJ?7~NS2^|zZF(~@gC?a893B-p83fQF!qWQBeuI7nQ8+v{+i zSg9d>l5K6!_77U_0S2G3RB3zJlfMp^78q&up`rLPl%D0p%+nBc4H{O#ELg_h4B0BO9vL&N7{&&v{^DvMq# z>vd%o87gNa2;39`Um&A+q$2(Y&@rYz{Q!L|dF*$C{S2KujHkVox=cto>`0`@{U zYYe0JK-gVhZX%mlhKM-w6xr4co2G>6hEabVigiI$eQ&3V2+r_{tg%>w^Iegl#EYXr zD<8w1qrN`KR1a9E6%+r**;$+9n^rAXc8EvbI&)D|OW3@V@7QT!TO|!&&3^*mD4mr_GND2Idk? zO*(fR5J*E6N|I~?(gw1wue3o2hq+__Qa*N5U7R-F(cwvK3rNnx4ObxJ3{1a;$t?2_ z?@`x&CKPC@C>zKx$R_o$vV0yw6n_sU+^!U=^{CZ^Jq&cd`>j9h(mWIPycYGrZ*BmZ zbjDPJU{1?Le+)OIs?j891utSW;Mc(V3lt)JQ@Omga(4;6Gcog7Lc-zuGvOjez#e)^ zWTfO6{NMI=%iy4t6A!uE_df^cq>A*km}IHT-l(0;;`iHgH3E&2$<&nvBJy+xR^ zP^FIAZNpfO&qe19FsymM52RD`jg z>Cl=@-IASIl%ulT_tN?^QMc25lUOGJi2i2U>3c_JRpDS*<=y$*ANVb)q&op)Wu(Zn zT8PjM=m!UuIx6ZECXl)Bt{*gjzkA~2(~>J(jV}|iVifeLMfC8TY5KVEHhC9J`w)g;sT!48_=5!J9hN^z zp=euh>9b-W%`a0O@Q5T8Bz}gq4jO}e+G@of^bU+`L53T$X=5{9vD}^~+hvLN=^yoTPM*CNg{o>B886Obp_*OrM>P zJzzZ-w?VVbAb{L)C}eo-Ubtx6&3Zf^1DJ|4u3|o}WS(%`puJDCM32BW@_db(9ZV8h z`PR>lPy!s;=86aS%7XWtS|fu*;#?z#T#RTH0~JBIFqJsblxr|e1!{0U^Z{Qkm(U+K zV{ZZ+8I$=L6y6a*M7xm%hlIn&xy-PPP9`rO#GIbKo_3`cnG_BMZq`2(v-?Qi5!2RX zW}p4oOjyzU`qA49&Z+4 zH-<@QgYfCtW6tjl5@8!n0KlC)vCb_UnX?^@jgodyDnUR0P}vi5JoBWa#nSkN`U|$3${sKKerm9>Jt4N=2XT~4SfZaHD(pVa+cukp(k|#&b+N}{r|Iq zduqx_Q)ItiscMq=90LlNl}z^bq|5e3I_Oq4 z{PG_dLWXYY(o9Dn-E3_SMX`xtL)$hodPA7wK7?VQi=F~N2MFtn3;XPBZ>J04i3dof zu|9&kM^7OQy|p&vTg73s7GaKUFIEM$7AZNOJ*V{PQ2hWmEf2UQ`>qR|>0=+89X9OC z{@;7##w^f9B3*P6Dnx#FB%B*nHwp5iOL79fxcwOyMT#tH(#g&>{VHPmA)@Yq|L@Y* z55M?Cxd`mB=(Ldg*RhKRk7g;JJvtMLmS#Qo0l>fIUiyejp!7z}=)3-6 z2J2xCI_{~FNv-tS)q%;Jw`IF#luRy@CL^jgZuhf!@?gTmoF?hAf|`?L6PEhJ1BcHR=b(&F%di7ufQ}c~1Ts;Lwg4 z|2P;idm0`IB|ezcjEP>Tcj)r znvxVwxmahSr*at-(=X`_bHAfmJSZsRH7bI3J?HpX@^6aCaY@zsDX|2nZa`;>2**sw zx3n=Ljn4=O$o>qDVD!!@>$4-nNj^nH}0B<@xeeMqjFQOv*zfA;Y7Wbi0 zj;KM`b;{`-G_(Eu4~87R_XrUFYRk=c`k$2#VC;z^ejlo29(J$+y*LN`9j&HkPBg0q z#2!?{xHM=-Vli(EZwa_dL}jTAg=W=zERwCWB5#%sJqK>5xo{VMTD!-TqEqCT5Annw zueOv<5V6u7qYr;){g{Ilc-WOAMWuy~OxTg9*Lzm%{Pd0XipoWG}{o}#LU^Bvfc^ahUhxVG;4nx2+ zaA*o%wXy`uNm)e%86Uvc^^mp2wUKU3vuYuWYa`_nq+?Xb1tNX7a*Ed`N!v1Lm3qc? z2SCe~1%57G;G4RC49E_Uml5&wvqm81MelX34Y5Lv%tnF*+754Mnvue*jS#$-zm?EH zmL2eZ>RsHJmLm8ZAs;T@{Z3=^I9!1=EKVW^1mxfqptxJXd-g%(F-Mbb#ju!vj#|$b z)ZaUlMJE{V7q_VAw7nRQ5PWYzEGROPx|a9n)ZHWW;9Jm;{Q;by2numVT2kxKHj_;N z?e^`X5BzJRrpCKylwa>VFYp1u`TPY9Uu?A>|FZ;7U$q@JtA1C<{J*rjJbD;~h4(vp zece$jT(JFOoyQw*Kj4)}6PNA1!db`H&?%Uq5Hcn@`mF{?l<9U(&(_OQULO(r`YJ9^ zj}ipK2{u(F-mQUtz5mSR^UGd$ILBvcJ(^r{WbvHMk58q>m$&incf*de@a5H!@oN(Z0-Z(S>V5#4P8=}w5 z3eom*X>1m3ZHCG8N#P#OBnUvCp7rRELH<-#=etg!=T$#=dmdiBwmlfYjINJ4pqdU@ zL(6BA#Lp=Hb|iyHfOe=9*DU+)QyRQmF+wVB`leQeYuz!IvN@O1u6lKWHZ7g){YN?f z*aV8WOO71F+D9aeO^m#kT^^-o3ZZ`QyRWj(%IdC}cg{lJvSKw!j?!G-a$(YTaW^|i zz(zxVJxGgPbc@KQ1-?-G$#%o(eB`|H!1%95_we@=tSb*`%d(m^051Q$?6Pw*ioJ!?@+l48|A$5DtQE~ICJwY-#dTyV6nq{WU{&l+0lep$VhU+r7q_@ z3K`KtdO;sGp($!)u;HrLz1AI`USzz4LBXdI3cC<-o zoJpusCMC4i@SD9?h;j)qO|?&G?#KY$Z=K6@y`Og@ME1k0d&I=XP>V z$QN5}=-t6h&UQJ3GA6s^=4Z%$Ss}nY_j9`+7xDfJ6pjiM!^bX%PZ z!k!!XNg#B99`ljer>m@f0--;*c*7dSGfeNCKbdH3O)-lekWSV92pM_IgK}uGD^d@zj-jFFez&_dl zVeEZ_pis`)-!f}nf%>B^M^!q*j0qj&Fh$rsS2FG-g5br(O`=M;WPREo6XXCA>~61I zv!E^x3`v6Y-M3o-vv0h27DciA>m zm0TUy|J|LfAIHh1wr%^=Pv_rRaC55_N&M=FFoor66^dm|%>cFEaGX6)0mHqMg;5KK zs@-VsPX>9X0_|gzRGewb@%s5reGuH4fQw?MM4zXIiT6hu)LRNO)+Ht5uimQunNOr{ z%nzb(McqivT10A=5+Nf;`i)b1CRL}8m^a7fL|N?KE~lC~C0m%He|!SR`)eOM6`B_? ztR~Le#(seQi-`W{UkkRRSx!|7Yda{6R;$j}oK1lY4VHU#iRqbp!b-~mp0|I-FSfH+ zqvj&w3JWFi%UbbkU(A)48LY}yTqq+j0wP*IkkzN|u~^|)#7G-E$BFHkA`?BQcE6LB z+e4C+pX&cmZh7+xUAK%^3_j(L=3ig@(g8pz#L`@ zE_b(cCy%(Nvj}(ymP{AVEZkh$0|pSjSiQF|!MqNe5c_r^t?w$8x?*fLW2Nq4J($DD z04XOu8+6WY)6rymx1ngGcQrHS?Pt0mA)Bzo!{eTSJ!?g;ivf$)q5L>X4DD;1U4 zydKoe_g)3|B(^WPt|2S%e9yJNA*}I7j6_*3-XHs3PHj|G?Xh5^6wx;xAO+$(LCK39gA^V3X=QW+o^VYEFB~{V*OYScBua+Kd@Y@t*M}Bp_L^?<2 zmA8N;V09B*CPCK|FSzO^r~BvF2Umua;CTL|LvotKS$d66I6ntWZH#j%Dl%xa>)|Go z59?8PZvD>LtzE-TRqB-DH)af^QG?OuOq2xg* zC=mu=7j-PXCy||9j!YHO1_)mrfEF7XHvVoNQ7dr|&AR>^!eF_OZ}<%Xp?!%PtLc?&)&PeDN{iZKJ zAVU@_zRL_?B)z$38XjD4I)2L`6H4|Fwxc>8fUZnct)s77@}~zkC|Nh*Ht^k@ZfCwr z^#jb+$4IQ1dr1c3^JwVMySi!TuWdDj+#KUzU2MRIz4828$hD#SbOO()KhMN0T+qWC zN>H2t=WnbRYpV41Ucky(UGlRO;zbo6j?BZQeub2wGQ0ZiRz-?fXT^eC(l6Te<4}|! zbo07cUzYJxb6-zx8eCamPY5sE+n|MM*PM3ifa!Ky81&O;yLGKzbFYp}#hgoVcYJJ0 zA-uXwq{i#ptM|vh`>kGNv;BOn6MVP$Mo?&dDve-s?o&on3EbWARS^3C=^OythCG^_ zBvtKJ;4ZOgVlC>{t`MqtH#3Vxd}iGTV>tfeXnC0SN2?FlyeS$han--q^PjCjm%NaW zM`O#a%FX8b*-w@Nkd!WmOq_E*l05+&Y$yC;2AkjbNmBHQzp-XTg)B9{ zlO&eXAxkfW{q+4Xn{nOGV|3^hCRh)}q9rU$PUgU$l*nEDTd>N9#NllGgxZ(7WrDZY zZXOdzdpZ2{J-wcKCpVFKw#vJE*J%5aB~9@w59u6TJH7b%wbUlZH$k%dKRIJaqa>ow z!xZO$xxhiPjv>^5?^Nx0(!YB>jbu899$Rm+3qq(c|F-j{`92w4=B3hUkRGDrPCtU)! zzuq|$YkxWB^lS4g=t9(yQap5-+S0416J1(#Ts|I-*2ZAEY9G8rpeiC`O3H|oG_bU| zft6r(v@hx1y7M2awl1_>4TTiJhO2OBZS)^`egME9Apf7#=jQcBE*cexuMo5;;el({ zYpgt|o2pD?X7V%NeD-5DcJY7nrD2*sg=;dIa!34@B{pmgH!2^b?!wSZylJt?jT|0( zZ54A9lod#$IcUz$8;x-kU+f68#5Boo8zA>$GxCG3B}s>?A!S$mU+A z^zl_5=0mp4TMkR^GQ4^(JdYEVQ05$dM7Go3&)iw5Y>UYsiQ9m)=7q7Z9ViSdJ>jnhEFlkeUxL^;WxAFD z{AVtCnn+3UBS^&<&#^^JYETQsVf=43gi9X^jhH^Wxl*7LoB$ea`)EVC+T9t`7|Sjc#W)pGv=s=ij~dj+%Yf zN4uN1w=tN=D73*{%ePHGplgb;zHYJqlQ|_wpV(_D??2iBJl^ow0XxK@NV(t&|M>Vw zx&^;4(@#xeP}3mny+I^Zn9-^YfL)=AGmljlC8VK89L+9|`S8@xVjhxN1=n}IR$2C< z3FcPZ4?~KO;UM{S0>GPA9?BViGz-vPppZQMVhbEq>rRc0I;7H`${BkPtol$g<{RT&o_Pm0Y$ z?-*DMh=JRh-x*{{(8P4=9jWW~DTtDZqM@*eTLeXteneH(!ulmDMoCeHP}OBJr9_uM~wgAdesMa!p1a@FlBB z7|=esE4Z}M%^=v(l;tl)kvx)rnZ0|LdV&n@L-#8(7PP68ne3yq$?XFszZP!b&l?YE zT3qc#TYyDUeW4|uZ#AK_1JW89H?uaL0!%NIhYN$E)!!hJa@kgM1gI%K4+ga_PYmJm zm9H7WoQ}pvEV#ZluJ>ioNQ@kGyw~H_VEl^SJ6h@=e?a;rN%=U3@IA*I>WuQ9pkHP+ zTuJP4p2mQO*W|d2e(%4xlL$~W`bYEBX=WgdMB)dW#a;H!b#JmRWxwlu`8i)nMY9)K zA4un+LpZ|RU;R{DEmoC+nLeqjy;6XWL`F5*Pe#j z2Vr^HA?%l3PBy*&x;(iwXO~V86EGxczTc^@1#gLWcte*iALe=`ri`f~J}yQ4#B{5y z_B1H(QS8a znr)B9)%@^)M568pz|rV79MbYoEDl%sP9RFUhMr0>^>Qq56+OQUn;Fl@(I$$<*re>{zPUm&n=YlFFk|4^J(F$9uAM zXCOt$)FlOub2;W0Tlrn=Q~Y7`)%T7|OkJcdzEW8h)B(*4gpxm%*gNwN|D6p+i@v;c*$cvCNW;#eLkMzIcjio+0)@i*Bu7b}yToxF(n%3^^ zw}lxY=jbpVBFI@OSWSjF$NQ{&2He2bq99_l8DQQ$oOCS?X$ASSCW**+Z~aoIA{GrU zgjl>TIW4s^$oG7At~ufYNU1QrYc$0dBKnHpDxL`y?@qHBS;$01vJG0{{asYb@T$_B zky$*@yCFqSe|bjY|568(zo`T2{emtctWcyRF|+1i;vR?IV`^yPX0z5xu&tn{odm(o z+F9tzABE!>0As4B0Bd3ty!RXJo1K@eH~@!uZm{31-4hb@afWq}!lRg5^70MANN_H3 zA)H8#Tb8?#bZVrjYD+36XLSv}Vfhlc&4|Na_Y27nmhrruK#!%)6@f6N)-n%CEdIpe zu~tiUqRn6Is-B_?Xvml=$d6jO7@^*q`|d-$0=;z|Cu{c3bw*GSWHsjr_UVdiajm8- z%mS!tax28u`axCK)|Lf8q0qziXR|uKdOtBgWXro0dcauy%~IhtVPE}%I@3aI7kV9z+q?V z>ZPFb94mc+Ldxslo8OMOI_X20xLi_?7$h)$&i$0;VpkJ03PnL7*XP_F3MDw!gU9RN z+mw*v3!9r67M&x(O-2oI3#Bj*iF76W-K&;wTKvo(85>-Bmsmw&X3@=cK6m=>+TnP2 zz@-ruc@b*Ykh#c^jhGM`3?@d1&gsp157>^4G}lm(91}@f zk%M;qfI`+qA4MC-QGFf8jbkZ!;}n{9K@sRAfq8kOe8;H-C3l09VginGYN17ZG=YFUW1+ z%D=Hl<(RQa-zp}EMsz_(n^@p#G$WB3%D(oBsXRt+V!X$YyBIjI@kh&dmB6GM4-4Gx z8oGEaeAM^`-y0lEX$tlBcJB!sNOYzh4pMD4X>Lm_rTPkzBwcI2@bcbjTV{c@y@NW+ z*-M(_5}PXelXW1#uO^A2)E(lFpm#^rmiG;Q?OG@RJ@#72rn@?^f08*79Idh@#~1AB zL=ca%uz@Owfn;EfXn3;QZi_pd<~_$m57~?4oW!Gh{me>mEXXq5C7udf#~MwrHJx3@ zTey7V{EeM4)YrP zzqvB=Ei6nG1qmKlD(Kr=J_1+ZcZp|%iJo3_j~P=sm9ae`>*y-d+_5t5;{(QD)`zpk zL$YE9zvU*OQVbn%JlP>5nAUyL@+nLolFhOTR}3>dhuCFT@x@-=L9gvs`#(G(o>fEX zO$Hvtq+fZ+X~Dv+@Q#8(1W&`+NZEXF=gtP-i%MFVfDF|eh+y-|3%MFx)&0`dPu>IP zO#-c6@l|`}kU3=uj|)5QcttfAi$yHf6@k_kYF1esfR*8B!)<8{K* zx0K*T(O5+G6`?O5gr8iKH~v@NE_vHI<c&M61z#mGS!RRN5--YaH zkS?W{Z{8^TZq6S2GB|g--<|6Ljj5H5C@P+PiJxcf5ibEJiwMU zH~DY@aEAIl@`q9C-sWv(SoGk5Jvh=45?tLcm#!O5bqH6gRO5FwPX`d%l=Au|9oG`n z`-QHU9cfzoIgo}*@WDRkwfPkG`f%XKhr`Z8of87&3YzZPCF-NUQWtGTBX+igU+bh_ z`RyLVH{yIzc!Olq#?e3f2#{Thl2DdrP~(3ByAS8PW%-EJduH|iL}5dlkrdo~H6*;I zPfanvTC!ywQRa6?5&$c00x+`6&v=56*hXt2#%2z2s2+gHi6R|%_~B6@(oaE~K-++4 zj7LXO5ie+U^-Tc6HHd9rO{-_~ANiMt(2PF?A~J=udajP!TR}DqSP0vRdFox<`lPzv z$s^i3K$i{saG$fl1+Ip#$;45cL`56WrIUP^u563FX#p=$(Jhu;Mi^&GF7VY1@uxABOh{BZB6&Q~* zci-fCZ!}rKi>2eIWw-mwQ34xvgl%)mly4x#FA)23X!h*#sAc)3dGYpTz%TSs{+SGX z=K)qhzwgG~ajl0JmdcizzvMXr%)jgV{OZqnl#dG#$b%T&?|gnm;2#hRs6hDHEQ$~S z866ie4jbP2Zai^0K2Lx77*K@_tPp;ezSk(wZcR2zAyCD8^&?3Hr!{dN=j5v(Ub#xI z%#F`n7D3=}^eLwVRE=4gDg&-6GD&94x$%YFmx{hC*_u8m%Y}ylPBdTjOWx<7 zaIQ0kqv+3fzERK}+mb;;2wd)X-oL-o0L`|2#N3nau-8fR+4->VH^ZL6!DNtU@W7U> z_#{0U5rJlT`{%3Fmml=$*HGF>eVLN4@+ok}~ zBGPY^r6O>9wKwLEQ`ZUMfeePDj*-VfUjvK~ zl8H)dpJs<+Z1zz4!Q9>fa-{ex%)GsRZ1DoURR#gR9xyR#F)5q5tpiHrVb4=V`y?z2 z#)tg^AzG|@&mjh|AWLej{!r?bnKUZ0DjHW0U@p7^L;)<&I0D$d)bJ0 zwuT*LX(xn1lMVl@deC`7gKzxwzaQpUG1RKP9UH!o|1nTKiypwdJ;H?d7-`1Hr9_&i zo<0m(1(}bXo}9d)AeRB(o8OeKh{~I5yi)MPyVvA^0q_oMFbUq54;g!5EFb#WLXMB? zw6nyWj%`|yYezp>)5=S4x)RfffSBS?b3sFy<;4beL;+pguV2HbO*aH->@1K)tZsT) zlIQn+W@L7DDHa3tPuDxWAEl1BO=QN2d0Gvhj2{Ca@Q~!y6C!x70_h4SqgQ?l-DNyb zSv_lWa!SJX|DAM4`bQ6>iSb1mI=7r92WFb;L<=DZzgvt%AqwF1r_LB@fEm$xp-rvaH^eO8VMSwt1V+Tpd=eK#}Fia6Aj+B z;RcGnZSfr*Y(Vq}g3?l70N)kkm%Vy=@2qmcuwhMbAA0+|ea?CWEGT$pewFC!uyYeZ;A(%KRvOp*lF zjgoT(0qHsW1A>_LtK?B$ng;9kalqF`Gbk&h0pSWhjOkt9`U3{RaH?MbVxq9;D57uv z@j9%S2Kv<^D58JPj-Ot|UO@u7zTvuTBLt8Po>@G7X#FwR?5*o#Q0p!P3*k#G!IrY9 z|FRF_sQq%rhl!dRNSZ&qTaIkw)zOTQ$ z{qnwMKaYUx`F&?jkt$$#t$!B2b@$1DClAZ5TbFZN24K8rMffOF=d%?Oj}`51XF{al z8t*4|bz!W*YN7-}z%=C`2k;7gjeZ?O;2h5`)r*nfE91}bzQBX;DXx26bVGpTv+D7BTu28GwIp;-3WoV*wb9cn5VFp^wkUbv|_ zcrWvPGZ#~`U4QR2ZC9Ot`9T9Y*KyJtuNzx(y~ZVZH_izsyl?-2ya$LszC@2s;0 z44UDEJYm~HkTgk}7&>weQ+GgK2eua=Ub&AkRR6#NRCB}c?Ab&NcymL_guwB6C!b3n z_m3^7cZZ$_XBqBY9E#7cQsu5Md8NxNW zdJqEOK|RLrO3`aB&sB`IEixh;vNyt)G<6hb2g3YR@Y+aShMgjH%|SFKcAAx65lmB_ zhc71^5%&R^FJv6l;E8Hy5gq^#mFxt}q$NU2ncP>nLa8&*Q%x^u%6X=8Cxc(zzbD1t{_98b#;{lU>W$fuXmI_t?U8N z)HTsSWZW#9no2m5mgdeA$nbBg@UO_?wR6e}!q&SUr{13Nz;)A!cGgxXd{$KgI$w^| z&IlQzdPBY+d$TZRD0s}E< z3xRgw080s_v2m&AMi2q>LMzFNa}W|y6gvVmrz!sp`A)oul- znRl^XNmZp$B{X8!;)6H-OopCn1io0_%|_f?+u*h^t${cxVe0T=E>SKTA<7EU^L+oAFXKUZs2n)V@sU+nNJcsL z?n!u?2|{w4G zNvjpQu?}ndVs5nRi}^q)cB6d4bMWO841W(F^bd_M=BmB3!b8GIn;PIH!^h{Qy(fDk zVPKjl!KtZ-I;t}Zt4fD;`RMMfZFlO;?NBkjLeBuUxU!0STM?|Ql2eC$>w7W5=UD$2 zC1*q*KJn+I;nRN4QOC*ZH=+R>mPi&;7G^=*??u231hRQSTy4jqfuYfTAf3U>^Twx7 ziIqkG?*mDFZ7!wA=qJ_SfSShJyv3tXc-rGOGG{;8gblN*-$){xt4Jp-eU!m|J zut0Fx(t4Mo9Wb$1L4cK>-ZICR3ES`ApQ%~5335082LSz7{EE~eJ~wIV`Jvkm&RlAj`%|HO=3EdA|*_rM1gcf=JD{rq!2H7c*|hPcZY=|2IG+9w|cmWP?z z8cOnCCm$H;YCv@r=!NfDBnRVF0&h^ry%tURNRQ}@L*ctT{AAqb^;8dB#^ z>M2F#^7d2L0vhe3N*?!cGMQMPmD0s{tq$E<;ANcYvX%k5b@_zCer!Gi`-NfOv!s+6 z#mk&9xEs`A;m~z|jqv?P(D6AiKdzV7$FYtl9q3vi@ZBcV-m3r>Z|(FgU;Q&R&bcX{ zrtaoO>jD_FnE&{ZK2N=i+M3&v44I6fgspMKAMZxZtt#&I3*}&bwF+TpbKAdQ@z8F| zgmyk)@AKa?Lmphoa?})EVSVa|1PnR@l1-~xK=1CgbV}RnmFU}b)$-m0wxGh>?d^s1 z=wgWboXPKYTe`LWY|q1lNJRF6nd#V+uhc(wFP01KFo1eCvvwsJy)(w*_Jjl-^-qjA zl)AFde2|njae03HeHAZJ$d8Z#X+x?`Mk!$l?A(0*7{Fv?Xm%+Brx#7UaI43x!3s_< zYUhmsJocoa|DHQ2XIvI5&&?JAk4KHiWHW5j=C)TyT;|P}4P}t{L;J4DYr7(=iQ+nm zdD>F;`b8+5>2hS1O`d2r{A7c5QWDyfDeGn*7j|q69LF@s$`QZ~+wPy5du_*Z*i}1Z zjQxV__>Iax$CpBMI<^ra;FTIN`*+tO=d1e3V3;LpMfwkVYm>**nf+9OeXl3H2QnWb zo3-3DuKUJ-Mf>ydK0>|-ATY<=JXOo-gnkp$N~!l|z}ZvpPHfN5AOs`dTW<#g0Jh|n z5+LRW$IgtZO`_!0;oue;-*+&wPNQiS^EvmduF1+7Tk#Yo!A*>?K+kP3n2Je|%D9IAlgsKPEjJWGs|rW0wQ zzM$fC$D8Unf1~?yYoH<`4Xdjfu;yYb#o_z2unTPl1@v?vMJP*^a87G4+H)`NyEvE} zMnh3p(VIcLA1FV7(yAUC|7^F5+u+i$r=)u^&w4;DA@#V1(yJZRbF0R&9+PbMr9$1E zTzaH^2lcUm?ri*WE8;QbdcssM22`+-Q!F88n}pt9c>6saUn%Wde$ttcnn=z4{QMFW zQ?TJbBqK+h_8o;u1O>A`eKYd5?ej=Liw7w7mtbE|D@D-OPENWPxoeV|on2F_0L{As zkHl*`ukq`z=RMnpurgzjQca+_b$c36%EjwBxr5&Qn4>%?oUM6vCFW~R=7l`x-kggI zahmNVq@KF?^Fk^)KwzkEno}GfgOW`_;`Gaa6Vep7u$P-=FnT3`Z?#U*;#nhHlaU(i z!1NZ9hX5P;BzOL`k>Edm#REj;rrpI8=`4_9hzs9aYMF4`he9m3A>0KS;(u*FKchAo z%Pl^$?by&2BFm_EAr*MHJ=oqFul?EW1&twnp(WTFO?SgK{uM@W=AB{bG}8{03@Ijo z08*9UE^wB}<$_8PjJYWNoX2@PzTBriEdZg_*O~3p;)s9d8Dy-O^KVOF9RoNbyfYbb z!?WssU#HWjX#Qr43+qq8gf&6i-)}c~6yt&r#D88zn2uQa?DCV7laEe1yzeHR?tkVQ zwEyYdJEeX5KBoZx01N6Na~=JlA4Y$xgLaizWW5ks?pc)%n7{gnxP2NL5>jw%1C3<1 zvx6+4h13)Oux){1MRDq?;J8$7XoL}=yupOD64i(G=Uy3uc9h~wS}p$o-=*m6;`psi z@|q3tQ>?f{QF+=*YUb>l48pYtx4HyrLbGE+_6}jb0QUXLiarToH!0QPf`JrI>_6jT zXgV;Va^=)Gzc=W3gS}gJzE`R&gP-0=Tw!X4NKb6uNun$uvt2mvBXZgzyI} zj{M=@)pT?(0In&^ceYM+u3Ob~J-*I&3#R@>Mv<(|mtxPO6M+7SMip$9f+Xe5d^dsY zm-;yaU)|bGJknEFEf>Ru-Ip6}ey_DG9MB-Z(33{ULuEO{Yx5v0q$de+AYdY40I}iW ztqwcoziPg}kVZ-E_uemJ{BIsUJ|sKaXBdtiY|u@2V)UDM|Bec)E!7maIpZuOl|c?} z7uZF+Ue*)OKkWAme^tw%cMY zTJ(3rOi@8)m)9o5zNeev3mlvsRs6(jTD=qHg{|x-$kYGU3AnoKrJ2tUu%->OU1_qoudH6Z}e(O#D`E>JW|0rn^UyKlS^Aw{)zPJ{8!W_SkX0f`UA zzjXveWYUw+UU(#WUXZ3qDmMa7f)=+LNc#CoB$Y^NvkU-d4|@0RrV^-UJ#BIOWn6(r~eZ~)~wG5Z;I+vVME4PvNi&DmI{T9Z@=_wBs- ziv_=jpOMXVo{R{d;RWI%LKwd!$jc(Lvs=(NH*&IblIdYL=b}i_z^52Bl|DBSoqsE* z%h;9Co>ey3YD3hvot_frKU#mQO9`yS*J4_zT&xlJzBWLy;$YhC?<`Q^%M(Y2E1ABt zo}$`rCv&F#l(;c&3$)VxwAd~GU90wUSO~Kp7MW0#MaGnihpSoG_3_jiC@N-1PQY`t z{Au;__%_Jh>Om3-8OT)*0;?+l5LnSQ|1Oi`E%%ahd3GP7=S7FjfU;mN)mLiu6?NY) zH=7rrPdnb3f;G#}?RFLL;~P%riOhqRgLA}u-r*D}7(gP%#j7+?W>!?vulOh&P)D5H zY8}j_D!_YDJDEm3GK{s=64c>{>ijOhr}Uos1cW1Md;*DZ&)?>T^ck^C5oHdbeK<+;cl0qpY+ORPPVR1~QB> zQLI1bc+&O$cf0yg6;2&db%u=?2|v@w zJARCA@%@|>3~aQ{W9-bVH$L(#m93lExbPB@oWqGL&i34?B|=~%#VtIsI{Heg#OdZ6 zFDE`YwCY+MJNs#1Uo~lr%vltrfbuRCI%It$9yoDv> zoHdS7bMl2b69amqp@J*vlr;&6vuKyQG>TpS}iA1H<&3lY?^G~21==^H__br4v z(CQ9)kvfWfMRX}5i2)1L9roIf+iUDty_uMg4NpA@c+}FRo<}Syo3I+`dA(uZ8#H)g z0=*dEMU*fai-tkIGn3W`0RnizcF0E8oDZG~sPR~4^aN6*-vSzW6-c>}`gEPfH>w2s zG`t38-9~EkVL4H?aUhrW9tgW(nqP=(s#Ug#XrdEfzPn-b41h_@z;NLja6BvjJ_9^! zym-I11`Y(dCY@P*8g+rTw_JUxM+!3h@@;Va!c-3eeX}*H2)0sVT+@0f=S?^hR=Ls> zWe{m5zdXsH7KIGDCBo{NxjRq(jtY-)F4d2x1@PuP6@aOsp=GKA$8>B*Y-0p~f$2?) z4kVtio*^E(@P z#&j6>#)o+_e(ucvzpMgwi2gfy@jq6qwXE3b`NZ>qofjOl+)G0YURpm zMvo`fz@tjb#*@7Dzm9KG?BH*ALsFI-eUn$oyHH}7jfXiZ> z1q4M^?f&K%-w0pMHyTR_<>6oTk&>{0n)leUHHY_t*FosKIEkc{;Cdp*E4R zN;V4?et`u2cZAWVkyyqpf52#GmnWQ>o|G{fsy|VPSBLw~c3OUa(kqA2LZ_Yd)f@k- zzqPvs%`P}uE30N##6E)Y2(oV3N6vdUoQ+Ocf?77};fwNfN4_R}J*>IhPL@FFTujp`&sNyGUhv*IS6+jGLHn>!)OL-a`1z~#wzol$4?sppY(Om zNGC#-EGU*>G7`@kM^sl7BNFTM9-lEr^T~02QTYT1nCND{+QV6Na_}UXm+CaUroGV z0SF$lw&2qQe>(Z4S|7^qjYltXGoYP%z^ZJ=a^Uo`($6M=PUN z4y!`rtm@h1xTNQgsTX^C-LGWmaJlL*ndX$Li-8=flwgr2#A%n69G}aVV)s2}pY*;p z<`&>!=Rbp&NRnTF`Nkbox>*i))8Jd0GHCvn!zbA# zfKFV+m)M@fRO72}_^hM}usBHQX@vHJEs#G}M24&aIgPP3@7`(MUONAJ>$&fN$&YTu z1e~eh;S*=&UxkqzT>E*YDN?e*?uS8V?rkZA)+D51GE|~Eve~SilHH8G87nUitlo+u zc(Zy&slY5qOBmQKk>8fQNJSEe7MzlFYzmkr6+Va9RG`f)=?~B9+L*es9?geO|Edgl zB~Ysd^UV6~`H8*q>uyG0k`HgrYsNko(Gt#cV6kIy0o?T|rxOd*WGMZ4*XSa745I*X zAS8cTUD`!ZuP~0#mTcA`j0<^xLFZ+LVAReQ=u}=7PGnTb2ytiZIJv;b^%03%=37t;sucHY2+N7h~ke1B&?*EgE}*Q9EE0He2&Gg3n%^$5hq z{Yd*h+$2;#m@k6k)H^*H>+s(0NTY>2=vv;Z8^|AOnDCv>nEFtPKlvPH;IgKtUn zYmvwlI!dDk8%hwchGk75L@e)L?#@;s7?4~s6#;Y1O-sT+S;0y=$igVM&eMi(8|wcu z*bJ5Yl3wyE)tw)dDzHCTMKe?T57Yh6-5|kj)$~&vlkV5x(~O^*rf;zpR2m2kd+6Xq zjO=JHRjPj3pMEhr{C6*IA=;Sn!4$uv<$TT~)q&myH4sR;z+oa3N>x{v^B}Z=46NLK zzq{H#lmW=unUH0LH3@Bt?J57Gfki1{VNGfqXp-@jFJ!BIDItzErGO=jIFIJx*ncOd z*GaUH$%O3MaxGsaM2jhzM=1=kecn0&s&zeUbor2wATf{3gyA)!ju%Dh@SuQffb$f- z(rhb$fC`@1$DXx}f^Q=`CzTz~DztdB?HIhmCAU}TofYqci+0FFHYChS~BA)c<- z&9+JMJkG`zQ03Ck->1qUP@p_VyaJR#p@Ci>l6*)iX?Os@uFjH~9A+ap!<(p#W;Fw3 zx|s%~m0|eLs|`2lT!=tZ)4ob*H7pshf(Z)Gcdv6gYAaoBmUP`+zmgwsC|X#j1KKYV znaOVy$y>n4=$*}V|8|3CI2mNNk;=`FuzQJrXbqkkHZk=FN{68P#N`$RTq+Ipi$LNK zI=>kn#_%(kdn?=I#&K5A-H@eKS)Pn9hGF-~8|Y_u?W6%vrV$08v=|NUO7BQ-A@CV4 z8AHU7qPa%FeSQ?Bq{iWG7^rzIz)@{vDM%m9`d=fQI*$eDzOYyuNyL~XC~)S1Qgs4) z!&(AFT#VK5)#A94=P=C)HfVVT613+roeQ+6yMmfK)$s1?F^%)`^LAy~ApKf@s1ihv zI*3XU^L{Ao+?r>opcIBGcw0RDeq~P$_7_*bQ=P{v3!e}laR8uW9yk5yIBd`hRNSwE z9T$P#{?^-*SQWp7)rD?Lt<*(McD#H@1I@w&u(l5Fi8=F{29+`sR=O|HF zH`v?-`e=%NyYi-mg3yb=qn$5I%nz<^&u}m17iOP_dYx({~BUM z3P65`jub3|P+!>n{{yXC5(Kx#Tdd9<6gpc6D*gz?v465smboqpE;txy5{>~7IdFz* zgV5S7uH2Q1a1IL=L{2AJS~&cDxypE%3b5soVtrzF_;4VHw=IU05?IQv;MMu%xun?8 z{*6px22Dx#^W3+c$k*g}f?L{$#OTDPa1d<`&o4E*$59DX6!=C?H`(Oc^j}Y+OX{Q? z8-^{@jI*_X#|F4z8=3z~M0yFIus_~1w=qfSsXwL zLH+7+khctU?+81O23(OkU9xiT1K&j4YlM(-1My#jXPI6;IOFg~eveQd7e$oRheuLQ zPi;9P(@EhofL}nuO_=pipn?kw===_AH2gNZM1n+>Ne^$1=>@B_?s%R3nBT@9(CV^x zn_EL4eL|8TNuEIU#+>8w5A$)?5E^hAgL-j&x8_<-eyWVLzw9*Pbo@@tp(-Ex^S$?S zI!%?s9AQ9|7q!1gtiN=YUj`i2P3v-2_xmQ~MBmg8a~ae&nY8x6etVmepqk zn0$w}FTN{3qi+7I);8xn2+&Wg?u94#*Z73mMxT>va#D+@k00M`nP)4|tc-_cn!Sp~ zCM^i1uo$zt!U|$#;euw*>`{YjuJ=bB3+5+p(6}{bMywpRDLQ}uCOF@Qv!#1mG7~d^ zqpxN>UIi3UO8ufZ9YCK0JeK%Bn4Zu2Jy-eggLZ(9mOq1-Gm#)vHTI5?4zSgr^!58jbp))# zlck;j-HRnxO^zWFc4ebeYja+OamhqT1=fGc)vQ)t9i5<&1gwqj{L+cHM=~69bZ8QT z9X@QU|NhU5ztg}X88$H1&&vyoLNwi#*p-hr3IH&psrt2?&h6E(E{ywnd7k~{%{&;I z<+$F`^prynV<?a_bbnmGf#eMK!_2w}hEYv;+rnZ&;=5H*OJ0Kjg7?9mwNI1;#|p&?*@05k zQeGD&hlyXUI-^^i@KH7Nm^izf;nBSqA=zs6f>tQ{sXyP5o!4*Zo>TBkq@4RT5d(MV z^~xjwWfc`}WVe5-0|F|A%)1QQ5Del$B3nYUnNegJsWml&&>%X7TBxa{)L^H8VezV; zTjxGVPJX6$&1$}K4i77eWnW+IQmunr_wFxNS1SV(0gkosr(wF-wOF6Vnkt}K_YZ%+ zb3?koArsi#^yx(-)P2_p-`6x2fE~jVlCZ7YcUdUCt+&JHbYEu!g++bRg>b4mrUjEL z?cYC~h$}@PS%sdUX8x^9qoCj~YYVw+odV3%V7qWT%TVjI&1}lY5v`-qCu&0Bfxbrf zTpjb1x0|MIN2<^Re^f~dyK~xyEACk}igjwCp(B7eqvV1ZcjQ8N?m;N;Jpj+W@6S$` z&mMWcIkL(3H)dNdQ2Zfl{{u9mY%}>&A+{{SJqpH!?!Hwwp(@T*l5Rb%)kK@oV55P2 z;$T30w@t7Zokc`pE~SB-knU-=b#ipBm*i{M-KAl0wLE{KXCUeIa77y2*mk3S#v!7N z5!i@u!^Ib1;DUl4%o!PF{bM^*E&g~*`1tCW2~k*ORcBdDU$!3CkX8;DHVwiL`UpU< zph-L;H@_I2@la)@wtLSnRcIwk8pMw74|PBiIOR3veQV_z+agqp%ZTmB1+<10j5a%D zzifL^d4n2`&u7gS0Gp8I_n(_BS;USJ%pCl?3NDon@V;17NLAPj@S4zY{)*1fZ3@Bw z*{+?+*18x9Kt$WPWR@1~nr-1fc9vwIM+*;w=^huuhd~}RK58N5=8dCXA(-@*G(%~9 zlSGpJ8`wG1qS+$ndMGwna?XQu&Gv*O?W*iXs_4@}jc&GWPv!DY#IS!i$ zn3ZY7u8{~dxCAzTecPOsXhcjU`z!fzz1HA1=X*wcU!%`!6UY*LHg6A!!EnVyJSg%X z2XNpmltF0oOGljwEVv6>sXx0-V~t8+i-1`~i^rYV;s{A01k^;yZVcZca8x#%9YZz@ zKdhI!Wz@!ih58MZTWH=H^F%!26r&eRbL&k?V& zFsth6v{-nTISUZH@+exNa?E}N1CXbQuSTV_&PEkwqC{z(3vB+YfCwBjHH!Emy@z3pRU-PX2U}|I zZIQUk*d4a?3dnf`tAX8uj_N3)kl;dO^vz-wfR9&%HfY;ow!IeM!{2hNykM517$|zw zqU{a?`2^-9S3o0t1CFueb*mruPuP<(80sbt;7WnMdE)s@&RZ!cdA8$v<>sU2e~xO#CJho6_r( z^jf*XUg-k3WVDa;POG0Yw58}P2Y&iff(vYl@GOn>`#vNwF`+IPSW4~<2l&kXCAUzW-?Ct+FGP%YfXOgu;Ti1nd_Y^xha6lF#6w0?w za&}KMVD6+<;Uz*Fjj(X@Zq`SIUD#vH>rzAZi&>)TcqiY#&0n`^hu{dmP@#3eEIhgV_1#3{60pIvq5O$>nuKMeioSkO6*#K$t->Rc zX<`m3q>O0 zNTZn=?T0@ofzfu&$_E%N({lNcIp|~s!AbqbI1@TI=}xwQsAUovAQX72&-dJHl>t-h zi~hEw&PBgzWUoepmqb#1vB&pO(8ATkz+?la{1|}yB=(ljLW1mcUiKAF5vr)|Hj|_T zF%xv4lBdqcr9j3DzQi}WzUYT$ zG=FQb4IMV(Cd>(Jd>9|1^^?r@rT(NMeA4vubc^98hcz zI`o~ayYDynL=tnCCzO*h_V;%O`3@49(CI?QB%l29{nD59%GcQ9!!W?HkZ<`#n#IHm3KKry zpF|d~5(WS~)rS$~A~e1$p1X;>TnUa}bn#*_$GYPD*Vb55gEsCoPH{hUxO~rBh~@R- zg%<&rx{kedX}1a#V>LDydWKa>Yj+2__jCNn{yZw#f&Ep|Fz_6?5CjFGOEXJKo5w2K zp{vazW2Au~0GHK*W7T+W3!&!~8XU0jJ&rbd|N35+Ej`XlH6YVucnHmi`2{-zoM`lC zz-f}PkEkay=CG;n_~Dt$pA{q}e=~F;&Fdh$1vhUVD_PBQcSTJ!Ptx?1nNX+YnXHz& zLCSm3ynxWGiVG4uZH*C^e~vi1<V1z@fEPo>T_bND`%xh@=oj&*VR!A~(}iL{s5`SFm^O=9bV@9?e4PZec_3^T1FkgZ-J&%B@5<`k2`tV!>exw+6Hy{`FdPL;vb&Y@ZcYBII)ct3xG^vEsJ>tNSX0dV zQGf}#@Lxh8o^PJ-F(2{$Ub;IINb~f4Pqdx1%0X7v1oqGF<&D_hCrF8~N}hB?ltSFG z9kxHvH%}k(8jlH>z8No=dypW{(IJ;Wd79KUgxGTnK_TG%c(W$Zg%7i+qGey?Lp?e6 z^vm#UsxM{%_R^14h>LiO8$WObUVSs*nuD+Avb}tXu!z@{Y7W3JeZ`E~Ue8$&i8t5j z5=XYbWz@bH4%72S=-z9JBaBT!4rrN>1D7!|{1*eRF+j%87^!p#2CzN>zt20Ap=2pa z{;}EL=6sxp=tA|3u^Xx|IXg2QeVa2!1?V5{Xa0GrotqDPi+`?f?c*E~q|UUSDNZUE zl{Pgp@x1<#%qh&WK5PitF9?&RbqefgVjw~A%Fc$ELNS6H5E)$ET6HHgWK?NX+S@Y^K=4#eO?g zqF?~Rmpr?^bK@n7&#yKj+N~#pJ!!(k?U+~a7_1|nVs9>G7mQ7nn_m1JhRU7Ef--Vs zPVQ>^$ENyckXHNZ{wT{^HIpx&tpP4m+S3K^tD?n@vo!X}YtAYQTZ6THi9EuWcI`X615r)-YOH z5q;IbRFN7EthV#BMG9Ztmm z^x8@OBMCu;z(c@y2^{&>$@F%Sh$<{Vye)_yY#R!TbqQoQ?5IZw%<4ss94df>6ba3L zy!{;Lo2`iEpetfEr8_3v^xp2O9?+{K76tym4cKlaCXQ*3lRx(>dg7zqVEX1HqHs zsEK5Qf^FyB_rU%X`#iF3J`16@J8) zj)%jrC0KULv>t8FzrvqjCt_g1T79i_i#K~_7pa?BYKtdYcbz3G@g@0DjP&4uZ{9JP zW`QK?oxMXzH`fd?c+iw8w9T&g{;ka~VIi5i=?#XK7;^B#Y!8BbUP?ta&ngzI>*(96 zo|ng(?Na^n3VHgod=ElV?L2pwENqa5;Q|>4T781QX1rvdkDwbugJrCh)}u!5xjg=r zmv3OtDDNA&hY(>a4D=FU$x{_vmL0+DxkBat%%j8I3eudl-<2N5_{9~1V9rfQ*`UQm z)nkgt;g~+s|Fx9yW~_y6*VC)>VgCFJObs+G=pdbqTy}i_8{u@*QOsTY{^5muTv*#3 zI{`Ok7W$4X<~olDncS_~*{0$5_IEh`3Q=VlSp~NADc~3lw7E^&eaeEyy7u{k^uJ8! zYtUA+fB>x|B9GwX)v4MpVWPyuqQ=H%04Qh@h=h>JsBmmsBplclfvpjrKr=13mslPuX_aCJd;x(&=yoCXyN_!&!D7dUy8JTNkm8BKF%4jGrB}_%*F;YcJTc)`w}Ati662&&}GP)}zu( zX}ShO2?H2aYKx%)`%XXk-SSNrvqG`xXX!nI6kvffsX&ah&}iKu>l2zFud_?WgO8k_ zOQL_Mwk7>NWCtG`MzL$-?EELHAY0TJUaa{wgcu}oj=W4&SdenW(|ym)l4s06DJo_O z=i6DohF;$&{v4&ho5m$~Zz3^C62B}= z_tzZlO;R7FLw$-|KR+LDAYIeUNKyy^gv@$hArU5f;=ByMz%)C#%TU8ypF^A6S}v}F z$yLxGHgG-WFIt>4bxRZD4!3S&*tKe?-z9JBW(+dI*6uf^W4+`(aIi$e1j-Pye@Fu& z=5*j(s`9?QMD!ezAl(=?yy3wSB@qC3XwIq4uk3zY7jHk~il&0rOy0gzof0P`9dQ82 zITYt0E2z94Twpwnv4!+({eAB@e;h;ONOy`}ZrNWcW6cj4xmcY0rbKw`3ZgQsarOoUE1iT1Kx`S~tsB!;uhIq&D2h;%Qz6HFru zfI~?fzUZy~X)%R>{2BF4-jh7D+m*=MGoi3or^BkVIBe1AMBdc$ddLI^aH#!R?P&*GyE-pt|KYxXlOQW1PLI8fCU-AKS z2IME5>aDY>0$&<`X`t0ru8N$jtc}7KmY_q6a7IbVKydxVZs2SxPybX78)r|B9p$RJ zr`ReWntqFx;YoU&t!rcG%6A4hD%52A7opnAZKgbghvI*84CCLmxByTE+2aQWA$e^b zdMCX-@zk?Fn&#kE#fi+6s8;&ha%{T$*)!X5H-yiWpw68{6caag$pfGyMXV9P7Kfnv z)Who(ppV~&mZ|qUVGck2>n+l&R|lzCOYBPQZlQ}b?c%m}UNqH@Q9HMV9MNEK4EM+J zV>X#&c@yeS50h2>F+-FmUaYba5m^8-j><~lhI+;k>w3yD-s=3@eijT)gNf1Zs}RiMDDcB zD-4p((8t%{QaV6xnuXGK12CE!R8P}=Z`Uec&Pt<6ws42wVM3>J1Fo3SI&v{BQko~* z5xC}t)&S4LozHidyuB(aOJr!8gXwuA@4l90B=ZA5LdJ{t$M=)ZKIW)BTwe-*Mb<_r z9G|OW!41V=S?2Vs*Kvmg9={{zCyiqf zJg#T~Yll$Aavox^xW+G!)L`jA&c6%{A*|6E=WnTL}w^rpa+LJpHX#>u(vrRC)Jqz|B{){G(9ml3FRN^S8L} z9QpFioU?O*^2)OG;6bMK!yijWv*JGmNXr*9)xbn#;n(0Cvr$zL5>W7}F6#fzqn~u4 znv}}eoYhB}D^^zE2FYKK|H5;!>Dbh}(Op|K9HSB$O%;(C9?wv|)UXfMa4eYC}#|&rW;gamqmk zQ+nej(M#S0`fqf_Vc`U5Expvf+NzIaIZO!_HdgP<>f^m&tRd8yd8XnImbY2wyXv^s zx8c1yo8YeGJpK>UH8_v~o5%rz!RgePQig}wp0qn@uCwZE++$|R!4wROCR1vcA6xJ# zp1}dTrnTlgt(_#g=@tzCeLcQL*QnR&ZuKp5#X@o~F5&k~$BG6(RBiUT(&=){sXvOR zew8PF?nylw)Adtg7P3%C^<^0l{P8zEMGVp(akU}>qp+H1Z zDlArvC8&o&9q9}ohFW6!#45@j08XLP~&>XAW zXW)`Wsq!A&jdGKn;C2-t%1~J5S$1$8KX~nsri}cqqK6)YD2<$F{=D2-Dqh*qJ#xtT zjIAnik*7D)i4I);@3l5vSY$8^4pNYV&2ekVS!CnkCIeGh7Dz!TJUxy@@8rXSS4=}~ zC^*G!@!51iIS$s(>h|ZAm|T$ljSNdpD;Au;7y)?IMNKwATAgh0=-Cn_e|&-{%t#X% z`CIO0dBGgCitavaTn5cyy00rz7SY_@lmzg+2YDdtrukeKC}s`PYRQBLI)w)C!zsr} z(R!0kB_DhsM zw)?l15)AGxyXLGrdJSVJi;}w7oDOxh4&|;A6CtP8;rqD|iL&VKzOYjvv8+D7&}&m$ z^pOv4gYyPN=p*h{KX(F;ZWQwwO{J9at~gQjMw%pQ%d&~>dxeHr?7;TB4iii^V-5np zt{!ZexgW3h&n&;2PJ+kb`rW-22on)yG;jGKUITmh{O=X;7%HRnZ<=LIsAUuyeY#nO zkD1H=++LTD%7-P15;BN>U^f3ZM&i=mU66E(lad!eVdRXDSps|Cx? zfM#X_H=p1YBjrTmgl|9C{&jkGLviC++tLav1wY&527?NTmX{l5Nsft18rJ@{b(xwB@{A-Mt zX>nJd9_#)${%<}yMttt#%|CDnaD5plmh9Xi?!i391XbcI8f-EfYGcPREA_5L=d)Fw z(Yg>=Xh)2vBureO0@l8xGA^Z2wnRdPrs>twIi}bC2b$>?rXjsO4W7(+=}WqF<*%-g zvm#&sdFzKMjj}9TZH*#=5`F^7)QvjL>x@TEyFXzY!MuQAL4ztm1e~dbxLY_VWPTWJ z^kmxpehySy7h?ktu>%`hg-b_{>)zCJ&EH9@+N*CXB!)W2nauT?Pjmo1zHG$;p<5_- zl=(?pFDAtNG<5cFKKiUgShT=i*7gZ|^}XwgitMSk%)tg>O%?o- zkKdz4%KVm4)IDA*u^?B8^RnTASGrvtD^ubSwMM|tc8s21&EN8%!6vv0N;UQA5o4we zxsw9lQd=XZFu#j`&7N;a7c7`Y#Tl*MxD65ib25+5j4Ab3GJ15+;(}`YD0X1Ye5LzV zVCF{qEvLm$`$4n2oeo6Y#Ea&8|BCW2#F{!IyqC{L>}%m znMQ$sAtbNYH?J|Da<1W*i7PUMaolO!hY@ zB{m|DVI)A(NNo~B@#v$v4-Oivq>f?MDp8S0I@BD}hF)})Y$g4DX>@`rvp1&mGpA?2{IYqcxe5ktJkI7~p*N-oVszV%} z*O*trh%)q)OPjBb&h_k+Sl@22dKB*J1Tt(7eS6h258Z#6tKetchj0q@OT<<0tw&iM z-Koni5_Cs;X>0eWb$aGK5)UpUc$;B|5zwdCHx(o^J8g21tVF->mmB)jMAHg;cZ^DY_i~M> z^l?F(I1d&G^UE85!eKJ@Pb_uol^seuKY296+E`?ZsibJ0ep^qw?u*JUZkdzzQO@*A z^L>RcBJ(d-LtoUlTGNM`8n5Xx9VhxfkWBg zyE!CU8qMEu`&D^_{oaJF9c1{!sYJ?X3D1Q8%x9qu3DuKMd7(}sDY~SYNDJQ2ed|f0 z&%3#t;A;9pcfTI(AFkibqeqy7r6S5}t^%X!6)+S*o4E7_v+uIDgAy>NDE|#u$-=aB zo%Lo*&7E(ZcRql1KM^IepTxSvbjB=9;nN7M7ueY90UYA#5XHrGkahLzo%AF{$xlU< zZRCs<`;4mDo=RZs;Lo;s6y&2(+KBW+3&a%p+jLT$h>-B_D!x6KqtxL;^)tO zUGB%{mM>vg*eyrzGuB8`QwbC+Yy>QR=pBzk58*Xx(RQa<<0tg8Lw>zDlBKD;I*FJN zmJ~-IgXllU>^V1BC3#80QJ3)+n5Hd~;jhb1!AqtT^8KYn>n8T*9hy_&S=$g0s?9 z@k26g9P4U7YVKIvz3xAJ>hwajLtR(%np2wMpKry;-C4bY6;^s~WpM2bN$UyPi^XEE zKUR*^_2vdOsB#FF#1?`E0|W}$T*ZpGz}|CIIEvLA9I0Lo4qQ1RI+s>OFXIw@0rjCS zyb&2_ZcL(CG4?L^{_wSAFA~!xL|hLiwvbN_SiyAOz;AT#3RBgpUM z{A=q*3Id^$7Z3LHD!<}gSf;9LFxIr?4_EB)9{yokTZ2Q;cq8V1I1pbl%v3Q$r9upg zc)&+<{r&~@4@ozl7hUnD2Jt2SG>aYdR1(OE4O73}9ciq;GBA7Au-lz6_oI;Md%nbV+vm=q<&xemhv7@D{`jRbPX>_PB2 zsUVuqBW2HQTHPnZ?2k{P9$ba^>M{{3H;k#YWrl>~BaFj@*YfaOw=YU1ld~Rm34zYF zho03jh>{>gm(^N^!|Zyhk@@giJAd}>!XO73rso97nYwd2etxL#M8IlWN5~rS6Mio zMbU#;6o2Y(4|Pr#KKm$G{IERkeXk)|f}t3uO|xY5mV@_LiXcKwRXp6?NHd|(#mel9$2;uk8ngSjqZcwoX zWfo4Z{M{$RJIY`S8?@RKD#G0nr&t0%qzN*DAEFBf%S%GF3GTS<)UaVzh*ap?B1$Ybb?s|m3Eb{ z-q;yqzK@5>Z@$pQs}25`85GfOhZiq{k;*}}a$&zp z8!*E&+%&bLVpZ$(^+LPj&y0|Uy}pC9HrpRq&E%E>{wpw+xJI9;;)XyXKxPu_=h$@NR= zyg*IcuOR>J_rOo#gaB72>lP5jN-bK<^{{rThOlHR|1hI3uhO8>7 z<{#X$C|yoF?AmfY)t!|*)s^?j;SF#aZ!MK13}NfK2JSoYn?1SYf6qSq@3XlCzknqO zP8kh^55Q^JB7V#Bf;?o|`3*aT6l#k`gE6!WHG8< z57_L>lVuZ&dr_dL8AqO6^y(S*evS`JghWMbnoRuQB?#ZVU}7zI!pwB8fu}cj$D5;G zc~$|nn6T3A+B*Mhz3Kel`e0^kU*ZT;?Bd%3b0rs;;XHAj`X?WhKs5Jc%P}ducnJ(e z_)zALue(4!vB|p(tR?p5Kv|{Oi(sCcfZBPf-stj#k4Q&m5 z&Vd8aAIyF5ih(DIc2nF!YE6hJWgSEMGjuO(h3XDBn!MC;ovq_qxZ-NnX4CY+H8Tk= zms36@+w0y%Ktg7Aymqz?=xu8*gBj={r)pM)bHHJ**JD7~%w@xFf{(~@8^)gqZNEY)}SN$Ec_N$}o`~BIX9z@3#u!YaCcg7jU}_LmUT~ z4&c;~DB|`AR67>N1G5A3vL3#iVBS)0k{aajQno9-eir&<--S1zfFTT7KJp4CW^?da z+o^H$B3bjJBjm}5tRY1Jr{1^`@*Rw0SsiIKuaZJ9k~MM`(@`rgFqT4M(ZeKxhozWY zD#xc8Nu4sK?Lq7Tx?6M!2%g$5k>tuULG`Jc5A_ofTR%?FeF`tK#~s`}qKXJ(g>QbT z79GBlWq~w3GXQo#9WAuqO=vX!pJ*k#l7fKT!55;Q_+%-49)phk!?MEx$0ZS?yE;se zk=Awa-Pb3EF1Qnqy-x#AaKRS%?b9{+Xd!f^^QT=GAEszga(CdI zNcHszQ5GFggwSEphkLbSSO^^#*cfK4zW?uzvBG0T z!H^}ZL}D&SPOor>I#kyY!Mee|Sa51>L#tq2LnPO}k7WYg20A4>>bQK3)c4E0&PS`e zmVF6r#jXOEb4_Ny_|c3pp7qo;f14K1NTN8(D+}7mlyT!m60u6}8f?pGr5MGZWSKJ8 z)HMkbds%l2zsD}$RJDR|;xK*MBQ0}vc?fbEhSLEh^zPt40=lOUT)FSxJ8`G`O?b0nu%#Nrde4Z0d_SnN)%~QEq(iEn^lql1xthTFqr=!NJh7(Uv zt19}VF2uW+eG-W*N+X?coU&HrNdt|(kj#m?Fs3plZtr8gVTR2j3N^s?s2Citm@Ma8 z6kLIE`rQC)ok%wIFe<$${B3iFj3uN z{wCxXJ{S2WY#uqiYF=}bRa-TB!OjGYNB03Bt_1k@8FP@>)=NNEZ zus5`X+|D!V*}El?CgnPUxntSHCbsh*>!Ci&g|{J~yxudqfDx3@JP5SpGsx{`LsXFx zx^bplx9_8Br7HGfRKZj_zrUnv#CRlq7gtU%{t<2Zn|(zV1zO zXCh9?HjAzYcba)Y9eDuH)6g#V=5#caZsE&1$?jc3?h_w2IBepM=iZRIpY4K-< zuvz-a^Rtta6^UBizY}p=Sz_#YJpxypfX)48Q-MAvla!zP=#gi0uLSrPB!q__Vrn8G zpQofhZ~l}K{V=MFJNUNGBn~8{kK1S|{FHQmm%qMj%m|nQt=eaq-t||zE-VD11`3rWEb4xnPgf}kJ2ri=v{sgD?&X-dC-o_^CJ#Smj z{@P+W1?XQq}2R@`6xh4nwVFvrq<{o`U*Kt!a}EG1((GZ$~8J%R__qy0Fntts9%wqzgK&PqJ+%#`&v?Sjb(K!E)o`_gn(~EMNMl;7WjrW1pA(UI{=6s@mC|gflK$ zM)~R&ZT!6V6KrNt^sST`X+y)r;OrD4KbT55#Zk$~OpAJ}9G z?yDHgzVs#qh^P|Sz4JfM*>mC}O_kaWK-;kk6=<43yt&ZEyK#9vy z#GM}M%0l`YM}{uqK57rkkP9xC)fxKS1MacRQ2-n+DiI}lB4r}KT5_lNw5%r=^`RQP z1cE_8v&tb8Wqr%taCyf<4XB7&-}fsy+kY_3=3DwgQyyUL5Y_BV^e6bB&IUU8x+VX7 zi|q(gbJQ>UV19$#({!Y(p(r!|>+}nD*YBn-pzzF;EJ1BOkJ&=KhR$!qT2lGh!L@)B7U5h$%|@3J4bw0mU9iiX6;xaw*O3cVTj zhI40_Q|p7|*L|%^OE&#&J1Qql@$@|^Vza{p4J^1$CSzw3z z&2iXS=Ban2QrfWRSpKI|DXGu!U1ZT;25H|hUP?q z%*H%M7x}(MgI+%kaRKAk!cAp%S4FoQ$3nHbK+pl)HQlZ=UDuuXVM%FjO$%QP`H(Un-S=Ymj15)gGc5uQ1 zuc_P7Gs)OkPn`kF*^X})yv4noF$|Mm`dnIN!IkzTT_oz`Qx)W|&VTK5CwtP}9B z?N%j0hiFt7LAA;IRRU?~p4Es31&D5TaC&S1C_`le3#TU8kL#*Ih&5!|iSSMAkhO{u z-B;j&F8ruvQPE|B8Of`j1O4Nt2}9`h=cke8I~1PoGA-hs!D=bzO7eh`H5F|Vf+x4d zP`kfuU3Caj46bvZ7ELn%$X7~aH+rT`B78FVSYkcK;QhJYV~7_lar6nkeUiE1aHFG? zi{eDQNLA=tOuB^_TC$Ddofw7QV}q@KRm{R^7ykCk#w@glO7)nk^~p+So&;;l`lEXR zr?ohzG+v~jK@Ep#>hsURv^1c69fB$guT%K=lxyQ_3@F8Sx*qU}N9ct{$+ljpBG!k9 z8a)i#P70hkCb)h?4$I2=vOD=el%zsH@k~glr`xGkOa1^S4~eAHeVyiblAh1CyxrSr z%oDz&=yHBu8n_yUK1HKIsN|s?qb=MsmX$@!Tl9Px#W)194t0n$0t+TQJtE}Mn;=Uy z)>6;DzH@eAU4YM)6nF4=m5~E>*G0U67Ge~Q_G6`TUOnKZSrsrmyjx$wdew1!q-e6= zM^Sw0c@UsEJ!Ga#Fc|Mve_qA5fkan_5dQmoFFe zJ!9(A93g`YA2;tkE?zxjgr@9r9P@mYtmAUeHM&Nvh!>=f?L=2BlULyQC=Hc9qC&TC zsehcj?rS=s{Lfr6*6<6gX011lYiEbJ*rVqtq2_;4(-gnPSe{h@b(Vcn3Vx3ny7x3a zFtEL(_qowd@!gc}wc>x~b~$nH8BRh+N7tflJ@WKrlm%O@j%2*`>>@1R={$Bn?ESL!c z+HtI!Nx2}cznZEJ4{rK^MqTW(`{Qe`FL$8E_Q=z=7AS@P-MW1fyYTiI`AXoobMX(o zkQA*n%Qsn_P687(DA)595dDl(&o?0iL*9ox1i@^|&FH87CGW!BrkIb41+(Y(kNWTq z&pvAbLvRf@fsxq=sey*pi=sf8G))zRi$gH__a-*vQD$OO%koOW>vR9rE`EOiYxY-o zzZJ#P^|sTFCO_^=Ex-j_{{)b+ye8XAWq15&`Lq=Dszp)YdUZ)S!@qD6`rAZJ+sEq>^xxA5yN07B%Bh?!pRW|h2N;)aO2{4 zQReiC8@Q16iN)r~B1yvY5~~8XwbRYiu`hofV~gS%>imUI$WtY4-C#~&4>JGh))BH7 zN#F3UH`0R<$s*mL$czUo>kF=RI3sTK(~D}R*NSDs~IMeiOyoz z(&T7NtqSVL#bfI+UTju3_U8}QqLUR`cS=zwF#~~L$@itOzwg)kI3Z_Mz#Spi-0{)N zAcxyN4YSn&4IB19!K-6z--S7X_Hbj0kIb6vD_!l+E5^(Ozljx9kvi*?)2A{)I3%0d zg~Qg?T0>=J7(jz<_t*B?wXs=Nq%#vX!NI+L-g=;H>kPH{ZC25oLa}o@3TZoQCB}s`6wOJHRM*wR}$&yoRL|r`i z-T0w@CgS;ZAaho7!EeG>z>llYZq~NGm~VRXls5Za|0}KAbjWo>DqwfujJz-CvDu!x zK2W91G6V0N?mM4)^nU9RD(LHUGOva1R&oU{lv6$w%DKAq5-?3&&n=P638d(zivt}G zoo1fr99{I_aJ1B)N>4EpbOV69^p~nwIE!7wuGiIOu?JB483~zAuOIlI=Ezhy1$_Kr z7DJBF^n9uCdoQ6C%jIf+rG9?HTDmzM9TO4z{!LuZOX%Il|4iZ{&o4Uto054ST*9y( z=##9U3JXW7Kr-^Xgu^FGcjrbwPtCqoCo_|B{nVaF4;MnI$`m~RoK0X(}z#pScs zbjNpN#F4y|oCHrLsep$YfP0K^fIa9(uxs^oT&cd{8*3ImNZi}jsH@tzeUf4sRmAz{OFk{uIWDblw8t=Xhznp(S2Dm_X}7L_p_P8sO-wZx zdA~?A!9j{pq~m>bZ0p_F9okdo8oWht6wi4w9t^lrIH+f|9ZP}mYIZd#NN~z1gp34D2hH1@? z*k6VRe_TW>@J$dD@#1l{1o z#Q6ELsu19D-c@5C-o0$|G-h1#0v6_+m#s2GG)e7;bbbrJE^C_uUO=QM6u*>$0F!vyg%B!H>4ZRz0? zeuJEeO&7;*egrdIaioF<*GAdTe5N9Z1N-ml1oipBf`cnEDj5emK4>PT{f`AXR4T$p zgV>bAC;Lm2hHM+EF90&j0rfI&y^vbFb>?ZTQ&OqTsoX>n!iUz9<}ip)hw3Z#Tb(-5 z_c`X6;l(I#=<^gk1cw~S7@eNHssyOGhlTBGM|c3;g&itmY_%Fj+y&Q{{))$&Ev z-aNM-yNM9~8^+VRQWUcm)Y#rauFW?j6j62xj7@)ThPo*K(r%nO6nD)|?u&}cf@nCV zlF8D8yVqe4?E+|XqV^s4wi&?|fKD&fmiOS`U?Nf-5;ojGg_TWZ;yi<~sPExB6Tmg3 zJqoAfKFtR(!OMa>+ss)iq4o1B&~&-oqljCEjr@fI8f@xF$xyek0o^gg9|?G8*(=%2 zRg~{fh7*{m(~DjELuF>*?bTD$n)7nrHy_%D))k)9H<#V@MG+Q9R?FL=i~21qn7daEHNrdXe$(W*|&U>D;L*eH-Dr$~$9u4ag_ zukLen-U8xZbIk#4Fj|$YQ_jMfz^#wzdgXH7f$&#nAc5P3`^=*ni@@Qir>ex`Pv`Wt z?)?V@%ZpM8Q0E#9UQoiT=4Dp@tV!&6V<+V76}`|pT;|94w*No%Y_qqRf63r1JSq*& z+LQm+9G}Zyvt13(q&k7T4M`B`?h4Mo)sm`#J44<-HI_n#LsR^#v|ww}2^)2GJexc_ z58YfLF(M#}aJwIxTQB6L2_H*VS_m8k*w@Tti)n~8|BTJz0R2U@R!YR>DZ z%yu_=QdYwT5A+#SbKh}Y)M11R(2#G2K2d;2N?=5R6L4a~bMb=E^n3MpKHHme^3=)2HuQ!3SHrv;;UmcW5Rnem6BIl+M64`m&+@hVS=o30YB=VTI*R4rya`fx$Bf9#ME{2h?pfI5h_KzK+K zlk4o0Lkn4ba3MBIfot|<4K3p^+HNR?}`lcx~y z@o8%!=%m`CUliy3+~uT1;xzC+V3HU(>YFDnKKpj*-pd+Wd#9S3rjj!t_KsXkwEC$W z3-z0E=%+;#cEGr&ftEPVk%la&-eQ@#+&0)Q$zlIa0Ecwc<1kCj_UuD~r_Q6?#W#nZ zpNXe3KEE*lqAyjx5s;zJ9F9u{>gUHwAYl#0kIvwSaG!Hn*THPv;*75fq5c_(2{FH z?sxx|TCtW6|Butr=~&Du@odc}2tdMMMo~uR=YR~$KTb@hB>6zU4!>9)cugSFl(ioY z4X1awnO=^}cs6>aFYgonmWL0s4mCleo|ZxP>}7@gAxQSBU#~*%>RR&@ za~+I;d9g`LBPoYBsv7!8I#uYTBnPa;$eLW*H7cw%|Jsuekon?14BL3;W`bn(l|wIn znt9t&gDQn?3&RB~(prQZAe21#)v@^8wg9OUNmw#&m-iE!kP(2J~ zXA7m&=x``}czCHEDoSJTYISQAxb%JGIFn3c1gtK!gpj=?Z)?;4U-0t_Yf*VK;AIH6(f52v7x_uM}MQeT*9=I z26Amg82eU^MgnJ5cCF)$0uW{*=6P`|W|ofRsJ=A3f4ThEP!@pi9Hujfzq#rytvBLM z!Rle{H~O*I2I?yRD`xW>)h1N6Kr&1^*X2vjrzA|dO!?plS~zsgv0-sTA1Z*5uiCgw zru3DfBH1EYMEkzln)B4AZ~W;mgf~7|>7&92iCvg`=l4CWWIdgm7vag59UmGYZoHwM!)!F>0Y( zG=DX)Ca%Q~u?GXn6F?V}vWm$!W?W@>Hvn7nGagL+fja**1)7N{vw{OW@d45PzOWb(bl5zo|Zlv{A_4=zwx$DXb z^g2h_m3^6-R0eNK%Fzzvb~*0@Hu39;5yxni+64?<3i*R9DI3$Lg70@TMIAbbF>r;# zDcIUJi%_8cqg~(Snz9Bx)zS@aQkXQT{r$;EE@rB0Ztng$g;JhVO5+=Pn4RCyDH+OP z!`PpVLZf21(UGB#aQ(R{k@f5JkE&Oj) zkKoG={5$l`na^9zpDmle&*peOu|UoWOyIqq&4ZUd$zu6i4=RwH^Q6r=cV66j5ByqW#KR@R^-djFK z>B>6DHO3~>qi_6Xd{FTF5!?=2sGNnUe3&oH(!{7r}R3xRJwAvnCd zm3aft-6JIWP_z0dP;q%%s&Raz-`NNfG}eWlXMm8IT7C>763=X**;7%x8Q(-Kot@PRD0)H!-Mr_L->+)c`@BACAb@gW`2 zOF@SX$=C@)y`dA3f!-g&eIN4RPHKo)Q_gCdi2x_S#A}d-6%Xv+{PJhugbOSCyzOIV zr2kQ1O}O`^`kgX)-D^QZ4NUw!YMRBWuw4kS?=}P?46=>%ny~|c$QTRW63(ag5yT&B z2A1}hVc>g+9a9L>fYac#B+LxUVY%7JR|VCZkNI$^%t{I_4k${->Q91fRRCqG|Btdpm= zvc(`Rf`mG?t$E#0fT%E%ARMjR{Z%=^mAqwrdEM3o{s0Aoc1%ef3NMkEZeqt%1?)bw;Sa<8$arCt(&yf<84L0Sx3ia?h+y(pAda zGHyfHTw&KCK~{@*s|eo^WjLQW}svRI2lpoS!mQ? zliG3hsGHhW(dMk(EYLYR4VIt*ntWXF2<+Qq!RhbNmge|>@CT8F{#4WuHPQE*NMDGbCnr&QokG3Us^atLiezm)x~G?k&Y*ENMcP8@`jVp2Yd@pQT&Zvl6odw z?n%UlABgm&k*tQp0a$@kQ6G}F+v*)fpC8KDEG1=@{t=O~+jcaa&{H4EM0~{oEqgzk zyQsqaY+o(u zuc7OvFHn)w3T~~+&!zE#SGO1Q2TKZU$)m_3#3vZgtLqX6t=f#Y|6_4F5C_W2+rsC* zf1GY_%X#pisFy_*8YMpTEfQ8&wWFimDa@O&fDs_eZtMH_@-JeJ5X(%gu4;dz`OouP z5nSvO<*-s`xquE)HH*>3xrXH4`U?z_qCY7%UPpD`uT{$|FHpV3ID=C`yjseUZMw@|+2>Sq!gC|Q!;%6KnQV6A9 zDxmt=x14jzS&od&TKtRCV6^GP@4y4bI?aU+x_DSQJ1aQ<-7A#9)kazc$NK>^S@hg6 zgQOt$-+-UwtvkE8W@&{S-Dwg?^$by$Z(p+MpcFH=ddHGUnD5Fi=17rMUYYw*s z`CaZ%GT|9l_Ca++er_Aw++`1jfUXJDiV z3t)Q}B2GP4YhJ_nP$Uk7q+)7S~?Q&;IoCToaQRHPU2LTGi3SDdi_Ta4PsRqi<1f z5-UHixLw4$&k87my*xwD|Mz)k06NMKpPEE4?_#GeCahtC7!91F;WB0qeZ+_~bquVY#N7IlpVh^em!E%~y-eD^ zTA^t#B;SG>fekpo_@3`az`mNqP5d}%4pz#b66jhvmxc$GBhHGvut5@mB0{b`ty1b4 zYLv%?8&}95msP22Z8EM}*6F63*2oW69=E16DInacQC0r7;#XoW-_7t-F8`8kj@oDV z-C!{LGZ-p$20Ie)*$Xux7SH(Zv`mwU&To10Zt4DcDj$<}iy#2Q*rC1lC8&QNV_oDo z=`KEjp^piW6RO2up@eqn>Y9`5b*0P~p9w~sG#fuFbD{Qq=athyao`taQ2}A{*3yxo>^suse zpL_C!S1qGcgq>@U;a%9HZU>Acx>v`qBrG-XwHpPVghbYO7Vd?{G^kuZ*z0)ZmmTWt zj-ssR@g%!&tB1{+Aro!6Qj;oH<=u#Sf;<(*>5y3Tfer)_?V=m$A|E(aM)-BA(x#)! zdhIQ2#qo9I%&fQ?|BJP|Gr4OV5)vUnG&wNBf6L(%2+P%DC zk56}Ns0-7?U)@m)C~w8zpSlU2J=vWR`nt(@RBQ3Iy0Oq9c99$l=mQJDlYt%%)2mf1GeyuCYv>nYKjyd(nExMu2NJ%P*Q+7l~A;i%pD-IOU zTQ>t#M0#7puh_X=H;TaY`dV*Cr7un~aw@WV2g5-i!x}QT>ox3U zLfeu-qf%N5>!!SIAnqODcfaEy*heX`7?5%|sLh=LI;L~n?h%PTAt6fK+@$5L_N`=v zc>bbt{5BNTOYW!bnBoaL|13eRL;Ha^F&h0*N%v*0-M3fY+f{#uU&+u1eg{O|r3xOZ zo%ql9-<_Qc?W|pMn(ZXYG)-6PHSLurkUNLp1ri7ja89A6X7QfO&yLFHFG^CvZKf0-V5A& z-o!yydIBBxU&+P{w|aL*n@BtBotH z@AP*sUxIj=839?qjJ(s&CEY$)5JMm~Fc8x*Z;8PHzlFaP)QYK|7{&YyTKXC%axVZ; zivcvdEjA{`ADHwH#}dddhu*!&^%%S|-;`qxEXT3L?S%NBBcKt-S|SNK5x;)}t1MZ3 z$Jwy@5+E9SH@!P626~&Tu|q-)S>t%u!9*QPL<_QwUo<~Gfeyc3QDqM2Xz>h-8Nre9 zMDN&}pGQmND!G2dU@KrAIwv?hM({5*5Y0?|ma$$O17g9G)4Ap_r2b*EbGD(a!h{Bn z6Qddg4-lh5{+pLq!LQ-)Yqr@^*cReW_Npqmzbx+;J@>_i6UvvdyOV;9Zbnhvx8=ROfjBA!fKAf z{QcKYi;6&Q^@JEzMXxz59w&cQr`WPUR2K9Z|NZnxp1@9!^CaAcI zV-t}K&GZZwBEEyKC_z`k{DWkg%k%ZHI3S=&H&Gt^*HnhS?e%w48Zd;qxQr&Flk1e1 z&Qd*vFAe>-wpGpR>L94WmsD0kzeMpkzQ%@9NP2+K>gg6W;E5(yXZlI&B-FvP#Fn2M z;jQ8a-7AR+_CVqKeY=`SYOwsz2f5WC&(KSzKuD-r)0{^s^Izs3-1y>-t9>Yqj3ff_ zPx!mSO;5sJk?+bqAp&A}`9H6aB{K5p0Wn>h+H~50L)){0ki#;x6mo0sXsj z`+hG8O2(>UKoyFKM}Bf3d3l_6HC^v$&4sPa?R^&ySBR)&N-clf%eL`#v%M)LQUT#W z4%Kb1Ve91U->xGo(aiiyB*JBQqV0MOpr3T;aXI{pFwNJPdj$`Z&=EjV*Rw1TwQN8{ z`*J~yTdPhMGwMmtU7VAu(7h(_{$Y^jp77E0z69Qzi?FuH2%~X*t!xVR44w~z!~#15 zW>fDYv$Rp)sbl*o$0yQVmQ2Oj_ZSB17(}>)JJ-aEhSJlDC>R(>pu*dmrL{F*-||p?)pdno zzJ(}H1T_VCya*s>BTM!^k+Gv4-li)H_11ybD2AF4V4zEkAV;s(~zUI-;r&TC)dS%)6Z)3ZfJn#Lvadim%6L`IoW1@4xEEQ7{pL+e{5Q@(Y zMq4ss7B#(FWP)6!8Sitse4!!AV;uc2$@YKr$o$mFTl)}L-m|&0U0;y5-q~okHoYam z?q>{ahKb$_Jbj*76-ld34HJWxy(PNoKt^$9&2GJ19QhI8Cvuo|3#=DED`lf!4`|j- zs)2=7-gaL1Zm>UL-{18$ibCgjUrA=Q25}&`mISfIe{Px6PM}8KuSHyio)Pg;lY|rc z$akZ5h-jb#+>Qq(h+6G`@+;T&OUL~7rQ0NGy{5bVrLSVk8yiaS>=i9}E!OWUqX1v? zo=|33@MCUuFa)__a(e$Lr?2^2=1Bc~!dtZKN^Xcb4 z5xYL~%=y3Z`A-JShVdSviTp6Vm-5p1o>B%nw+{UvXYvro67kmAh^ySk$tHZj^e;B} z+R9Tu-}trfKfOqH;^qM>X+|l+&f;#fWN$X4-LQK0eAu4uicOz>Lq4lJt1w21q0XG; zDWYE$f=^lwmtOESW_819_#h#+{}FMIK@s-`%`Q_8(4~mL%dMtp{E3#;(-v1oS zaiJ2a1eIOZOKO;ytB7u?hvwL4TetdAmm-TG(*~xc_}7|uJ*J>d_m8SCGK&I~SL%Nb zoKjq9)ko+9Sa+w8Sowp*Zir#mCut);w5C@jTORmug6x}V)3E3jj!~=3lquK;wAlX5 z^ij^=N~f*EdConC<)Q|b{^GB9zWq(7Ai^O^;4xqP6lyr7(d7PW78w8KC=KSO;xSbw zwPyOb5Pq3d+Pha;=~j^?@~yoAO&)gRlj+o+$h;TTe`^$3Pf*3Hc3)DAcT^cGi997RrVBOm!^E*L{9qyr zON(Qe(78~fgwj@{9SqA?jIy|nCWXXqRO{eMY{1HtB5Go_l! zJGBwVpsknJgv8uYQ8DcRchP*YECh7wvA+B~gsY6?J2giLoMsa9H`skvU4L2K7ok{tRq5yVIE5 zxBbA#BdZBzk0Geg}EcUcvZVt0NM5D&$ z;Xl7AA@3EgloWuGQ&9JN?-y{1`LQN@{9MP3^8J7%PbTfs2MIXqv)Fj5j&=}Qxv!mrzf6-`UL7F)znUa$exhxL5y4gA5WAMvcp z(4w3FD`4)8TtMFR;suwO`~`vZO*j@Z)mvw;pRgKH6lS-~(S#rEd6=yF(-i-gO6Ikr z1BFZjrOENmm~xo~VnjY$B%Pa71!U$9N~T_^)I&MPiGEsPFs4rF3u$ZY+cPxi$GrqZ zRFYRy7EZ4Q`g8^ci6W*3E^;s@lWiM4o>c6yTJjB3moh6rQ-pU7XO2laS=S8Xe&`_?h1z5BslGs{2}vg$EF&=Yu3xg8r7 z6dw=d)08L>vornKr+o9+D=x5#P?-%6vOOD)#WWa=VzMLAVPe0tlD-*WIyk<6lonbF zzV6F90S7q38TL*BRxe78ph_!qA&op}Xs)jT>#dkQ8yka%^L|evbMhq^UKgBltX|HNqwI?P zF#j!4KmY`xvvr>)6l;&?;CXO8;tS8uXcQH2J0#;{?tfv6*8)I`KbS4*>_a1t=?}}6 zfsBmByP|tnZR^SBCZq*9Q;6_@^W?-U-4!)C%|Vdq_Lu0;(5H6L~(?5l?Og0_E#*u+Nhe*E&G6#%KPrmxYp#LJ{Tyq9I?)I5N zPJvR69^cagYi7ZKH9iqoIQn7sN9U51>K#(gVSb4DU6^5Tpo92v^0XfVDX{BR#gC!r z=8)K_Uvx5t=|i!stJM&ZK8V!AgYYBg`^D^MdI`}7XKhZB&0^Mz(2WpvG}(#@Qc!RW z%#D6=3ayI(y z$-C5Yjmn)M4nQ%68(F!7E1QvLfHZBmEpwGhKh)Z~DQIiH4a~Csi>fbi0Ql3wgn){s z5lcQF&(p&gFJ*cfTGakvusFv~wm{~VIz*^liWD7Gt z;&NwOzG%n%$;bcd!=P{L%S-nw z9T?e{p6HUWr)0Y)paSbga<92aJ$J^mdgewRPw&RT_`xFeeU+`?U+z3*uBy+UU!h7- zHGSwv8K(Xa7~G=PCxU0WN-NGsTeKQ!O|nym414#;#1N9BH{3N85><4#IF)3+vvOk- z@SA;39+=htbtr-`s%Di>A(dy87Z&zA(suw?6j`fU4S7yoo}x^=T9!HgWrzConvsa; zbFMF?mV6g}D5dqJ{imYS;fT_kUF>>U-6VG*Jk$w)GWb(kRWn)X@vT3$FY%e}Ng6aUIai0Mth!?QFp zc>zRY!s!p0TPapK*Ijl;gnK{kCJ}8M#}PjK88F}>v!;DVD_ex4+Yb;OSeSOZZXO@# zclJ{(>Wfc6Gj@E^J%V9Q<+X){wcRd1{|R|W1UsLJ`x=mi;oByX{`yOt0#awrcMXSO z0?F`pKJpvVRD!!dS~A2TX9|8OMr(+#)cRjTN!hRH7Ax%uM6jo(Yr#%(Ydrp=Jw&PvPY-=*6-BHsu$g~+2R zut)S4*7Wkh7NF^4%&?4!x&^%L1$=Z#&mw)1_hfEzA zehad7M)vsfFUz66i{Uds({%!BS46R*ea6Jf#ZZLE2DFNnF{fOgaxDK=-T%@A735{$ z3J=#p*sVV{EbMn@n+P>{lgzOS|0SMcU3rqBKlUpivWX)FmnubZa6cRHhT8LYi&FuN z-r(|ARP1dmbBUQ=&>~ZTzus{PTzWvT4;Z0Yw|?s}e>F{|ZvEsSY_+NqUzKec2T!Iw zqy(j+CB&q?r22ZJE~3tW^9UMA&J1m9ii<1Z6AhqhW$Rb&iYANv5FfwyUonUJ;;bWd z36qF?q0SVcQd57r7VHCL-s@hrHqz=`>qTPK@?gi{YEGR3^C0A+9H`I+Q(@S(Hf zpv-|3#Vy0nk-ma21znzvfAOX3(=Zo8&qT(j3XwM$P&sIf6+aN?pmgh?n&vX2Ia>a5 zTezjT7L6zpMzj|e@emUs*F_Q`U7v*(&#awjlIZqx+%MRA*}}ZV<4b6%p*ZnSi6oS3 zyfILdNY>hg&lD{DIp7@@<0&?+YIW9WLp32lo0R^}`mIiG>&a))=rtp*f>l#VDRaq< zGx=NBIZGGg!S~c0PLnK##^5ny#KR{d^rUqXRcz&x52aw}HbYYNbkc(Xg?a$LQ3@fl z+`9ZF011gBPgy=D_K0$Z)8j`54|BwK!5+J9C;4R_mG2l7@@&(nT^j@es9h-lXAgSy@|0(rogEP3-q~!Qwr?Ye0t{ZA;#AO;^$`) zz@f8HKq<{K>I)KiQ|v|YZUubx(AiAh!tm0;dHe#U#PM2WBSq0qY3;1abUt+7bQ_BT zF$)B~w1^uQ0?A0`F%Cxsfb@?)70AkdY<&nHl)0esds=CEKDT&!Yzj*_@w*PIWz;WP zhxe*r+`Wv&(K60^o>tnh>x=l87+|v3e3yYlArB@$H*6`~wVBF;)^{fKf#HU%sW8 zAx>|oJ#tSKaIML;`xnil0r9>=%>N!4jtf}pZzTJLNue>DvmjVZ z1wIA$iirgV2_puWB{GlgGepb-R^B9g<#(fF2@#``k#+bI%TL`iaPW|W__MCykdc$6?)nZa#j8Y~)$SlmV%+cDBQMh^$69rt%=#i;4a>?Lr5pZ|IsBIw0{ACZ4?d}^K zIsAsb?JqSNfHme=19#0!4-lm7Ez<2~=b;EXISJtby<7dV2NM|8P=okA?bU>P86Z5@ zB@2$#N9JBGG?g2}>Z6-KPF~0!RED3dDHN}Fv@Th;=#^#<3(uq}tz*8CB;W{VBQCcI zs~cL<`yx$}D_fAc{>o;^VET0Xd<3>lQNRag{lU_+J~C^BNuwx*YCxcf0A zuWXUmEmhrV?z%n#FmFOQNfl_+zzJ{Gb2ThY+ITyA`Y&D%PEwVfcv{X!!R-D!V&r55 zkV?-E(J}3nA{tq6c&S`p{I$_4yQyq}xAume43-iWh+(#ZaQ>UPI5qr7OZG$Z%}eI0 z*&eosvZ3cq)f{i`E}y$03`hc7X);g9SJnAXbSON`DRl=W-)LS$B(~Y8VvDt8eRJAQ zOuT3Mtw|Qz(h%orro2^TMfBTwh8UcJVmk|xyYSM2%i5dTkP~qd_p2R3KeLspT$$ZYFo|#UV zF;e<$#ZO&AOZyZNz5&K5;Mcx4wNcH?GHQH!d-TeQf!~7Q!fK09Fqm!SF5iP}g;Xy} zXL#Zl3WzC+MfvAK2GI{O#fAL)C*Yq?c@1JX_l+MC$ZpyCIMtLI{VYi?huPjHIXiZS z+O~z-8uzVyGh{~gaF>0-eYGH4B%eS<6he=hMuhEIk*Kv`DA&`pt-6IF?JHABmrT_s zI3u-o4E8?CjYp}_#Vanm$q6sz8rMifmagEDRZ$wJ8G^y3mQUri&p*x(c}K~v)^qe7 z*{qr=iBZl%A7{Xq! znofEAx~5SNZMHd5;Tco0nBWc4A%&*8~G!%NXcC1LV7~cI>2b%FQz$ z2tA2Q$<>a79(*^#JzOuxP16=!WB8QlZ`19Uwf`l$gt2H1e#ymQxSF5h5DIRZG>)OO z_PoyWrvvjYUo+`k02PHrVocJqpOwDMxELupan2?PUuRCTweXsB7as!Ca7(4A zPC`peB?#0)tgufjGpZb_R)mO2`qyt_gGLdU>p_{D6%XXBk8_{L12}6BWpnhMr+Gs# z6;;lDr6l3P~yYVmuT;f zC<$&5b{=y&2;*7-Y4q&6)n;j{9~wj9AOJ7mSk9PFp9dx^^Srd`B5zuVLQD|+Wsk=lOy|}E7J6>=x(H!0O2}L%>OEYC4 z6) zcE=Yd+($W=BO1CMihT>;MKVtoVqA6JsRl))uvVCqatdaBn@bDEQB%PjW>Owzg5IvL z&0Ml}3Bad|HcKR)+G%<=pwxcV2>A=f2_zf&czET%q|w6;<#UKL4w5&R;p81+@#zL! z0JnJ8m`*`Slxb7zw2t+r6Ul)$BmtydCiRT4VkUWEMMTCN>ryJp_X4Cc(7z*_;-j?R z{gxxNu;miCk4`fn{1B~O&ufp)9X=AAeIyk}Xr1?9;WyuTnHRKUjR-zEb-spG8$+5b z4(kn`6bo>Eh?U(CN;xN%y*1)-ytetxo+5#o6aP7;ou|$u z{R!Dbgga&F!;|;mzA7z4;d%P`=Q8#$?gYbHiA8i-3~KY`Ni;bUKW$27Y6p@V(4iBw zq&%X9$$9XN^5oldOqEp}ZwvcotbJ2D-nTgFQe@G^6?(6{OeZ;03aRy?;^}xs7wv_Q zN;@~BE0Qb}8Fsc9IBemg5~*m#Cb-5R;TPPxVo4{pT@n>J&gRo;r_$}_b&7rR%QB70 ze5Gu!b-Cr$Iw$4E?n(noa%lT(|k6;F}cPx<0Jn9aMkhf2In^KxWmp zGRRwVI4jDmGWe`?EUJHC0@3zcqMdH~0Z@()v?QN8uue+xRgY0(njJx1$)l&B^ufiQ ztrQSto}~Nv?e+V%!^pH5ck&KSuZc2m-jVlg?Di{o{5pq~6x3BjQL%$Hj>1?5Ra78p zb0Ko`R*D68&+FClL;9fOY7^>1f*a8TDA2C>A=y2R37Gih?~a>|uZPY%-5Ohn(jjB% z({Rs0b6Z}!I_d-poYlgkk-<2+_C33k4k=lrUPmOm-Z@GoW_#WK->Mj8&Ogk(`QvTt z%RhjZhv#+Ph(c^{*grsWBLO+8w0ORjP>7^#k@F#a zBvwK(J~1>c#G9Qzk~{TBOZF)wAC|cK_IV-E5*Au)U@y_xgzya}>;x0fci&Gp9WNrg zS(jfkGcz8Jjey)--`uO1pf@LHnkA5}1{?X+`8JrM={EkY zUskU!r8Z!bGwL_Pb0KahhB`n6qsm$r?-RgX3D8rP^raRFSG=#mp>CjJ)O`PIqshG}93bEaK{F z1Ht}kD{WcJ6~V@cRRRLLXh=N;`NlNL;VBQ(|6<*GEHc*^O^inqK+(uvaoQfF93)%% z8u(CNQCIfI%tVcfMw^o9^vAeE`S+Kn;Fy3!kH~;(>$=a-YI(k%2P||IQ3?8RvROJ_ zHBy7l^GrRa)?f66-$p9(;4sScmh8LFgW|UTc}frdhbXDf3ke`*ZScdGZjpkMH@7ODHimgu02?F6Jf6}^O!MW zTK(}kRkfSpY+<%?f809*eeXHpVBHEJJ-XOMun8-+<`adF?zTW6@E_}sePZE@!#}&X z*ZnmdiMQ_(+`)hP@GS#YXlvLZlg*+1fX%&vu~fkD23-D5SvBsi>a-8^z9Np_9!+!N ziFDR{7!dKPwT&RfTNuB}>(|D8wut#o%}sznknL8;9$QUwH{nFA;uTZP)Na%BbRNUy zz*%#$WWF$*!3sqa%g1oMmu+fIiWq8+2RP_3okoum1Ic+j;5Pmxf1tE|vIK=|<4$z_ z7-#|*4`=i&fIu9|5InJt^n7($x~kZsi|kG?bJr0SUX@9sxgX6Pr zu4Ue;#tq6Gxf7%$;j0m|sCGstSfJk(TS!mBQU~0I2kxBwx3fKRXFH=PA4H4ISJ2 znj}P5YqK6WiXrhpKpvGF9U%XxhF(_RHy`Hsnug}5*R%PyEva8E=+`PuzBqz(7Q4{X zF980P4A;pwq~!;%|A*6$qLxx(6;%WgUyXhLnF~e~;IBHb{0D~75kdx}?Yw*PeGU*y zLxkGi%&oa{-$!M+dbzUNrTWX05zoHfA;Q9G|2dE6MH>RVbN(7?`|1&byWjVQI-Lm+ z5wcAI(hIytN*6&65VZ!eb~wVnr|OF}2EQYE*0FP-FMSSjdwAdJicZ|VX)|~!MNFrQ zLn?>*ONXbBPBYW?UV%4sf8w{{)JH~Ozu-Pra+NsJ@X$dVK%N?G@5hbI`U*Bg< zu?NKU%58`MgvtJe&Yt|%Z>Jx{HK;_hjV$pF1DBv`<=La)d)f6T2TR1`7H)xrk1$vA z!#b4@0_2<7h$79A7XN`IB$1|VZ`6{2SC0xoMyB_ ztjaY-EMo-;hpRnjwI}QQimOEEe5x;SQ2s5|{%@(T5a9BvC;;%a>~U^=eZ!*X8R~Uk z3a57J`+6hJEy%9@rh_>mp1#n3tsG@mJu)mQO)D?`Nof0h?6e@ zjgocGIHoWCwP=NlRfsXMK^qKhLkVFYI?0Ai>kkR1SG zPdR3ea>RX9Rzw7A_454t$}4*B`Q1&j6u8HPws0W*iz?hf?&Oel=VnFe;Jr8FYX z`)?3#^FgoTWK43;zek`cGZSpJSuuB&(?%$Hz7m%kmhIfm-YocV!_YPu@P1)_sMca3 z62tV#jq7Axj=4DGJra8odV0T_O@+yrVu0=ny#1B4rClrx0;7!b&{0#DC-~$xu%7e&WqIAfi zkzhn$g3Z+0{oy>j%V5_X5er{3^Viqkp)@fQqR6jCJ;~VEGzc_NGK&$WdRL-i1un6dmK&kC_Uq&8WmSRE;;5l9@tJfY;v(9CC)oo}ISf3os ze{4ZZu)2m2FZUm>$B9G6p6CG_fExxJPeie3j{cbPZC_^}{NkDh5wiBEZr*d~wRuQO z?KLhPogzQ{mM%X2Il_NMv&AfUikh-f%ug@qxiaP1#_0L50zP5j0hv!HTJ7_hGzaPR zv!W79aMl239Eh-qyj;DfQZ%siu{4t~9N$^IykLGjlC9%;XA?1u6>lo&qy2ppbS1e` z27beD$0hH5Vie4}=}nGs6M4R7loU8F6ysC!ZeQ~p=Ow1YL@ue|<@2U+Jb~s@?hQra zhDJG}MdX1YPGT^fYk0C4$3BW^gOl^E;!SK!@t%8{h=p=d{5R?`cY6 zI!ffa?4nI<(zF>saDAJhKfE_&_pg-t2|3-wH>#bx843*6iiB*ez*iAY&8?jgfW&-# zR#z|75i;)qN-#C$25km!u2@LWo8y=zNzqPaQ@AulSA+OEsiq(ayfBIP^9S?Tz24J08)7pU)Ce z11Efb`_F-~2=8mznMI?>0V_^0_Xx=7LTk6Y%X+Sw#WM5(_WTDiaqag?&-dWPo{2a| zf--qGxpa$lw>oVTBG*O&$SRV!6T)uG9NJ@|B3Ll=l6}iFXW4PFnEI@y7xmL%{5JEYC>PCh4qr zVIFf$LdDRcmwoH=9(ZDe9@knobWUsBA~J#%O(${jpEwKv@eR2IJH3DB{dNT1vPJfg z#HF7Qu={mFmoR~MU%zW)!)qx5Db%&10Z5U3U0Ma6qeDOh5voh+HZ}4a6a_<9G^Qi% zJo(5`5^Fdp0ZN|nLqM#5(T2{n20&DlN3bI;EFj`Eqje>FUde2hvL;8ZexdpKNm67H z8eoQ-N}?6`5FlymR6MU@Z3AOY8m=6gjNTiUDX843mOoF@KD`qd|AhFOvquZcy5%U| zP9_HwqlO%isX@Q-tl?j`Hg&+&IOF0b{G^dl^WpIaXjbSE2mMXJAJ7Sx0MZjQ zI z!)Zh4#s}KIvL?XF8-U(GE$z!(EBegch29SeXw7w*ZNK-CyffkL4tzd#d>@?{t3V#J z(8AEcm5IlXF8%+jH+JD3zt}&nqn720YoyIcj1z>jC70dpuBtN}Aw)z5!|}m#L?fp2!5Q){tk+=s1^XNR`)FL7;e>pe za%TVzTWNiO7{fdGl zq?6vHHXq-K)ou!lSu{Mfb(jT7RD(^CNcW=bQ=;&LNmf{`WjJhYnWGIOvzUw-3mru3 zgqYjO0yB%w8UY#ar3p50_yUZfIDvI8^n`7-Z4#6F)L}i1M=z2m&28R|Vhyf1^4(w) z(Gj9lw2R!Nf*eUEv`bs)o+_IHdA@s4EF?z%9n)s8$8;O*v-dOfe< z0;nRqex6P_^sTQxfJ5fNSv!`y-Xx-Q=^7@!H5lS@q)1grIEhT&dEuvNO|_iqNqu3r zbjB8O7h4+7vjxR>&gKdYAs)GDpo~z4M%R``$A951lX0LTWkl;@@Q^;|0be z3Oi(SW?&2^bpN|o+)Clc$+4IHSJUQsQnFX{ucUyePvxQ*4H=3PV3>~JpE6zyBbA}( z>-nm`sZ&m0))+(FWOH_q;bxhyP#{@KvtwNlw>gXxq*@q(*)h~9o^@d1y7~m&iefEF zoyn?RZu^}q-?Q|hmuPoY;^CqK(kcN!iHLps8NH+Gr5G}z3fdsuecPokeg*8;`u0uv zeXx0-WF8_EeDMSwOLnGR>ySlwjKSL3KEr3l4<>$b&+1wb)G4&X%@z!mrCgt9g}el7RftZGo8 zF|?>3*A%Lmhn#AKq9iR$I{uOb6!Xux3rOR3xqiaKLSZBj={V(p^cr;w(<3}RF5nM| zhC1C8T{5=z>Qalu7>o&aPBa+E_;N+uVhr{&4CK@8P zuG?+NnaATBX4LAiF~{G`Vk{|IGe=@ui@-P>8--90Rx=ZkrQD?7gU)>Wm zMP6W-Y3j8M=+rg+I&Lu9J~qMWw+-#juTH5)9Pcjf=6d-L!WKkB+kcNHnWp z1CaLhXtlJ#0MOg{{rYju^?*Ml*1XK??{7h^32x}GJ~&pcocSbVUcKr9I7Q-Vc=g>= zkp-AonYz3vSM@4)YIoVE=y}E9@sH=x*ubV)xeq%QX!Y>fYE+8YO&kLNg2y=u_;`d6 z>JhD2PF<%%U8V9SdN*PUN^c>tmTq$zX`eflOz|5Qpnx-XKq^<919uLXpY<&s{g(ZV zwst7S1=_rA_fSp@0=GHx{#1x^j0naz@wOSZ|&I?!4*d za{KdLjoZNn#Kg_lxURhBfoLq*#%!3!__^7{J?ZTCZ8FBxdS$90XxQcj}nqX`o*dA5NyB0<XoxHzX(**gFB27j3nHOO!s)x^~ zIyn(Kx&vK4-WL<&J=Fy3jaPHlm*~uX+OOkiWpzgpae_zyn!1^ledlU~9r{tlyHrgN z=ThWeE961~F8(M_NSS`)z4_^gX{w2*;P}&_3F)(5)?h?n6{fo@uSz_U3R<@?}GJlQ-KTKO5dU0fWCp6Q7IYyZR+Mj(;4 z_3wiCgXn+Jffm|H4fr;~^-#C1khY$$WNF-l*RryYqP zVjQOnj%&Y*G6pjj6GkKP=oP^CLP?*%gBXKvHN>_XF@N}H7d_l8EXn_;OCx zLh2U*M*kHdv(j5f8qv^5-Sm*S@|gg`dz|_1S);uv^x)m0+lN~VALitE8>G{ ze_LAeV2u-H!RhyVou9-dmb&=F6N?vn-#r8hkOq)%30pE3L!yuhRrc@hyKr9f;Y~5+?w3MY&3)or2>c zdy&Ec|79cpu3Nt={Njec^J1FL|Gc;SGBkJz9O`#$dV;1yHcH7T z$xiz>+5t;vYj%su9SbA}f+PAe-G%pn@y8HxvhwA}U(*@)$Aw_8H?l%b1wU699Qa73 z?cXjSWcm_8pmOAc;$qU{GHV$p((hf4b$1dg^@#Op?}}gQcj3{j_{ugVuM^nYt(^v$`PeBBN9@&PigE&g+Vwux2nTIA{k?nTV z4US`bwI=S*>dli-YOILB)okep+QDU+oH{yYzw%J9$qDSF$~XEZ`X|1fiaSM_}VHf?BP6Qj`Wic&xSJ|Q0VFQ%1`y5XQ;F6+iQsygp22`oF$t?vS_>3{Ze1E_r#x0|pS7_PqQAXJYP>`e#rD zg6K|2Ck-IJsw$pd)YiH;z@9(cRv28;X4u@jhomeM;V)bM`^8WQ27#EBXKHs86w4MW4#rW6OP{mP7RVs@ZT1b7#cDi@Qnam09Ds|{9e4^(Nkyk%z=5DUj>S9Cn`3P7JFGbyDGF%1%(mZZE@1GPOOiP-ME54kC&(u{713D}F5IM{1JNVH=v+<+sm@%7H0`{UXP zHdju}s@=oid`m(nP(StZvFl$=0U*1{Whyy^d~M^I&D$?sGI7D6OZ0EJz-0gGxclh! z-%b(}<>^45j{ib~c)Qhae5#N~pVxOlM0^I!h%_aK-acP9&uz;B@)3VKw{CiW(Q!V& zvH6wXrN%{oz`AnBdm9eDB#H<$ZGC*$fX)@|O2UQ1ALFpEX~HcmTZ9+$ihUAv#wr-^ zX6WXwPw;6q+Umo#R|xmKWu*-8pZNOaR~gu|2%G*}dpT{oo_jg+-;NKEvRKmO zd!l|&-QV03|EU1cr$X}Xh=8c?M8qF**15#GS_7^z+@=cfh-VX!*Q4>U15b4T03@Hx zLuKLpYyRBV+fTGpN5sRi+wsCb;}ymF^&9`MUq$wOF28rTnL$KgW2H%gE6%cR>4g$o z^j&W~4+_DzAqyAqoia;F^H93bv6sS-U6vV#i^Z_VKSl)0f^k5MI5~9U3baxej`y;y zF#%{p6^7L_3|!h|r@g<+kx@*Br%?5k@9t=j4ToL+s{IgtC*8~4nLQVkbR(X1epbTct+sI~^JTS#Z(Jr97?vZo_hMv3G0$XWLl^^LX{aGh{z#xRnm+}r+A zroN&%iDbqNliW}~e1EsF5m6_ECOHU4qsm9cXOI3rIVni-vY=QPf z6lJN(ZSRNI!&wr_=xhNtL2$Bxi1W#eNAIbk?H!fGT4u|;$<9gLn&7KN-oEvmw#Sa_ z3fG*7xR6y(7UPmwr{YfN{$4(Jjy>_A%K`KC{JZh_uZ)yY;$)4r2hIm09p>pJ8m;Dj z_pfjCUdbqGCwy_+(7+<<5xRIQ-i-JW(!hftLZa-S%SvY4gv8g=;pP8=SK|SGw2CC2 zhjt0%oa}`{z1X($f>x#_2}OTje4q?5rs!1OYjr_&o@h4a7l8XqxNR%JVAZLzM)W$Z zZkm=o2>{;(Ro@vSaLR2!%e0r1U?tY4o9;Dj8pqorR791oN(NL_(Ij<+aM7EJBcl}8 z=%Ha(uIH%(9hsCOBc+U15;ab`j(CTBU{R4J8S1s0DPHPSg&Ed`=UHm7rJTrjYkmCx zn^o+}UFJ)FZtN>Wx1p`471Uhh~@JE@E-or&jFuK(Fp^N&A#Bxidx=6Hy>gLz9GkMq}sx^0>F#3f6t zqEmOurU)2xY!vR!i~QPEB#<1wR6z5nb(2O%E{mARt-e?LpZdQ^u)J~bJ`?+U&FJ62 zL1=woC0(*!MvGhKRNi*)#HDKmb!MmMt)E$KyMA_6R;BvWxoU6qW@TojSzg^Z*T+b?!UnP|DDG6 zFW7dc}^Tn8bZ^o#avhtE#o{FFX+CraoOXQ%9pxb_jlZWb=XGUZ1cW^ zfYNQN%or}LU9`ffXQNA`?7gGaHymf(mwnw`|u~ zJL0@&q!l_E&0b=1-qLc?(_?2`mg+e7C_OsBWcAVD>x~6_EC1BpSK&=^V0`cS%6nZx z?oGwzExS1LLOD`70$mjYfvq5kREZjexG1sB3b#64BSlhsLOK2}079UnVVy5i zGd|RXGBFfXxSjL(x+nA2<^MXSzFu3?S5)*QUtjIHEKnqatKxxa7oQKcDE4W}rIC}~N#SON2` z8zb|^OPijox!@NVvQZ;h$LYn93z}XcSJ%e=cEA6;S-#zFLR*=v!|!J&54H>Cyi!zJ zBnnI=Uk==flF#To@$g>B&ddepW#{GGe3bNdf=u@928Du&JS%x`9%X$u@9y-wj_Tv#|q{&T7NlVx)+RvJwDZ?c26GL|G99+IseAP zyIk-8`_8;stEBX62FQNSvL&4>e5d~Q-M{BotYy*Ximyr;pTAcH_+-?+DE@l(;i-df z+d`c$|5|zbzg%zHweIfgy}#xE`YI|ZRmFp1dP>Fr_i6PSYwHTw;?)FK#IZ0z{o_`z)aV`B*ehn%EZvh#9Z6Jz{7vY6`Eg-e3U$fL9PjS*?HS`=5=0^zVeD6-NFOkfoxQ zDgfZm1OUJy0Dy;oSFi&Bz>6CII5GzSM6v(?QrEl=O|gFlGz(<~S-{JG)|c+`Q~-d& z0U|4{?Yn%M@0Vt*5Om(#Th-Ben|-*%5RWhsSRBeYjp#xq3+EA-x&-6NM5oF)I^txd zB8!1|R*;eKFqBn%g&6QJ`hQD-$k2%zUSX0z8u~X;$(84O;xlHh*}Hu28g50dzXI&Jm zMo2cv^-o^F%f6{Qs>zdn9p>?9pwi;JG#&AsYs~V@h%6{2N7mHq%O=y}B^U++fUGYg z!3{w^=~OzP#!5qI8l|G?D%Vii9U9Fbn`Sj25>9E_aMZg@KKdmguggl=5j`7_~sCDS&({sVpEi-24@yZ$8CxO-{fIh*nn;N?LgU z0)`UPE#)uerGIgVel+xDDQ#s>&5QsL;!O1x3GTIkx8CeSXu4B>)Pmpo{hmP zqhEdJSa&q11IuSkn0ypTR(-j5sHfe^s*-90p(-d`Ue046p#DKu753?#@wO|rQ4wwchUI;KT)j?+!?Nd{Xu=mVMc%HwMBM#K@aCYfAWnVa`WdMd+W zQ^!uNUuNeKyzk|h@)(RR^5uvBF;((5-T)O!ZbsYP8PLd;7>*?n9BuMvTk2U(QMwI; z&VV%K?@R#d%dO!IDqg)a753;>8zDzBDRwLfP6b~Q2|aOSVIyHSgmU!z>oTZV#l+W^ zExISL!>jZ#NMS9|L)Aj}ETzZFW;5+XETd3Y+HF9~W;ed#mz=kWUH#(cA)hwG&jH6^ zq#PhG?D=MeZW|9So6WEoK53NAH;R4QN1XO-lC006T~l{@p&C_d?G((cF2Tw~oqX?v zL~TXLus@`VHFtS5)+&6w4xzfbpTw|rpuI-mwHKR(iwdDbU-}njhsgN`U-C1$}zmpar@ z>MsBOF>np_Un*43PF0jU69)5EK+3`}*3&XOvKB)64m*>$duxo6Y|}|D5}x$Wp4+M@ zBaWPga!?%QM8mu8Mb%0|KD${8zK_I7S+?~*dkX6YaXSdHT5}m0JjgHqb!t6-XF+7O zy!@FJGYQ2ANMUg8ZtQQ?^1|wyI-y1BNNZ6Q80{1M%c6(Pf>gQ*+IRNUmAZkI?O3CP zG(GP>_lm|tV7*e7BYPp49R*Vg*5V#8Cudf{9s&-SolwDd5DJ=HM1DBH1Mn22DYvSi z8zoijd5%AH9XnV~E zf=d?(j$gE{E(ARf^=C^kP+Tp%*NgCJ1?(?=(Q~ z-)|S>(FkFy*B|Qlc@K<{yRDPhx-G>XCgAD*znz+0@|#xXQbRxy*a8jE#aLnj3i7Wp zs(FFbjDmFVuvKaDL*nOe9R?MM{K>!6_um{CKR4!W<9**D(08xeH)#6?IR{B+?s^qAlP2k_}9DrHr4g#O&4}l^vG4P z%ZY;i!;wH$2X^fYPEy_8-M$`XivNL5^MT=#M>0P6^RNoeno>z?!#3a0wpov1I^vz| zvDKrZ)PDE%rycAbh5?6br2qUF>7(U-SDGy+OowG*GpIbK%p+*DW~W-xgfc(o`aK`K za1?bFdXFV;sfB`W(sBR}BVRKEhav3f9u-EOgNYJ6C9@W`*xcYyS&F`;u+92?5^2qy zhy|);bQ@S)-36D6Mmq8rMJi=g!gVXJ!QoYCJ$CNX!O)hPcCNRRRYpGy6ur57k!VqC zRo67N^g~_l*#J=%J<=hQ*8xMT*SLggKQ@tk#1znyV;x+m3@QjEs-{6t>D#gNUOJW? zVJ=%)5*<|GEB+bSpnZSu>9#uSVkqLPm1~Th);&Oba-WvxE1UHW-)OLvVZI```#_|9 zk7^7OWj;Z|(6!2W`7Qp{fF6>bxX)V?gh{DI;jiL=Zl5Rv!h51c9TthK(HE zEPZ3j4tc{HoHPCdq@bOcvjx0%#DSJ|0v}K;;CKl(y>4QUws2nPB0(Cy#Ypl39)m;4 z-ka85D`;@tXTNHOuvD~T|EV?@xJ2pk$E;vLX5efLmlOZ!sC?3|?%d=cv4b_?o57@a z`(AE%{sK{01f(R*W@{G&8-fB)rS$LBiN#?lDGyY@hT+wETT42mFR0bSph~v)7LNtW z7SXobM>yf)6=~NA*-jzO0vl{bYR?3)U#M|WM>yS-6}+RUL)x2x_IwG5}5;$P5?;O zx6Ea9k6|tTFnAG(R7;-1vhR1k@taTlaj^A24)< z$w-ufQ}8*CcAP9msDEXztq#?^$w+P&BVwg0$SNv2cEI~RrIVqsD5NAc;>a$gP?zaA zvDb^83e8D4`c04T!JR`Z75U8%7(GW*t)w(s5-u2p^Nipm5?e+wWzy{s1o&|}P6%Lv zLJ1qZJTriF0*n-m9do1Kr_tCjdTsWT>l1c=Dm@Gp-gi+h*#~}y?Gw}gMwjOv%dlU_ zdX!MH$`R-LcA~c>bD%gZg`Sq}vL@mGBI`DySyo6lC68~>fWmSJ=MjkF-hl_wBgya` z3w(GdgdDFH3ddmC=nA@iB>MhA!QVr?1cileeB>CPSe?LVGU;{IP=5wAuUOf>HGjJv zNa(ou8lWl2^~zdnreP@?chR;Ewb#YZ`9E|a35#+Va7cU`mRiL>D~$xWF}7U`MSGSC z$6St$ug!?z2a{&MkK;_46sR*a;LvKRY-OeTS9yHII~PXOs(erz>!DV$rC{#zatt`NY|U3jv_sfBZTunkr*_Gz@*>v9}5Jpl3SEB zz7^&0?A!ZY>7XnMjq+Qc=AWo8uvW*vU8xG)jHl6IB`Fy&BAR@PdSk?lwzN3bP_w*X zizx7cpRa>;n-w8hXunX*L*F_%o8>)>9DN|v0;5Q`B%d&2>bIN>#ZGnxNYF-vspNH) zSHN2}Y~rJH|D3ze=E_(pLG-0mURW2M^lX+hNO7Um6FTTrOCx3^ zFf=g-$rk&~Ll zxbsX7dQVAwZv!g6DWX6Mn5QDVOqUYEt5=;4P73;>{XCF-Xv(O9JcdHnr~kb5Ah&>v zcoPL0@zccBC!+AVkP~?lowLN#++$`r(_|V46+a}2(1hz%7LqP_+ry1rEwEF({}K$3 z|EiB9>eqG*40jI*D)8=?1|vsw;;LCSpX$9^*gn~2Cl9#o`0aoma1%&;pH{8hp!rjW zeqky3xMrq74i=%JsOjN0D1e&8hr@%A+BU`tef7XeBoW5lWQX1iRUCi^UKTK8i8o3> z0b#a3!8FFnJ;812U=fI46hE0GYH|`*BlBH|8PTA?mqs8&yyyFb_}uh{xuq4-Q!l9$ z9{s5=mBeDNs91LE>c~ra#9OE5eW||*yE1S_!FF-lq?#L&IdA2=r@+E`1{^8$m(Onq z7=T6sF@LO%x;7WM3EwoUJB57xyJ^M480lorH%7u{a(~(K2>@D^ng2Z9WtgXrY?UCk zsUkkV7{s*58dc}aj}SH(2)72bg@}pPEzwpv2%r=?o<8d0T#F=FJD1xO=MIpRc=EF$ zo{2|oWyVg(ZK9*#!Y2Pak@RJaV?Jz-->ag% zuq*w#6O65gagd#Z3#Ag!D%%KMd{+FAW8KBH?DIn8k=qov$8z#iVyE5>v*0b0v~A01 z8S0QZvexdlq!+x~2<0Y1zNg714`_Iw0iP45wC(NQwQcWc+L1$@n~2flNNn30^CaZB zvCEUaw{5>7eN1?9t;!Nil1-6O`KITI+(bFvW@SHAlO!O7E0r7}X^i!aA_32WV zf@y=j5M|dnt#VuRf0pLSk(z1BPuO*NmzlJwhSl(uqUulLaphO%x8KvOa+SNco{9+^ zElIpZqvTd=R>g*p_}W(ewLP0QtEURyH9r^AM~`&`bU%8Wg?2)QfJL5DtvfhRHaJkGkw*}gMSA;lNr7hoGSY3Sa>1Km^hb^jAc+%Q>y*61okF7<`o!w$^%5n3t1l!^~B4NnSD`=WRbt3p@6) zw_+&rD+~G|=&C2L%Gvbye=Lix{X%Q_yr1wB-vyz1_PdJt_ydC!vfW!FfBZ zZiTYX?7rRc9!y{hGB;`Tsy!EZX8a+{4;UuY^(Rlf)V=F#w|azVto*mZFZM%5{-2so zf;16&@=TV#?9dk3Z zlZ0wOZ`URd#0kVP$+2Jisg0SIiCnX`Uv@irlJJ!*#NLrr4eiC-z1E_TH%z9pFO^(b z7&eK#N^l=sEI;Em4%M7;oX7+$wo6i510qkg5(lXO!X7j%vRLb~j6sos&-)B}4mmR6 zi0_ui25cHrt@Qfx?;uIGl~fow<{{t5DR5g&KtC z(n+6dUl)Zd;6}abZ;v75c~^?Sl9$g&%zy6Mhd5|O|z_>B&ie`_S{Lci`WGoZyD%bYCpnxUuB?K0Pg zGXED`4^wkxFmCxR4`4S=XLG8as)I=dkpPT)Vbd9Qw5p7+X*?vgIIz#|(Vjd}EogD` zmu8f088zF)%N)~l5!c@7_=GJs1S_I3X%jo`s6F4f=|AO6lV}e4n|!Dh`J3>b9cR!o zqi+{-D^rbTHl2!-PT%q)-J~F$HRc){YM+|q+-Y>xiP15%vfgmhw~flB$>p3Oo4Oq6 zb~^p))6cS6tZ}X~cgZZ4f3JZV2b`4A{PwJeF5lNKWK0rS*ox_4=lj;qHnIJqY9~-6 z?~oe@vUR0>E$K05)vdx9&N$PWxbLk0YoX}oLXMC<93%6#l=ECU)M<_vnZPYf*+?VW zn&zwUu`g?h=d(=UzqsNot@K0ywIDUr@-;C#EVEnU}#A zE9=BlH(AfbD*Xj^xrJKuI6ltc_SD9OYfRObJ-)PdY6P2$-NtVVW3OL@^`HU*sv=NM zTjiAfyhM7uJVky_A8HnTxMuP9t-8LryJp*)krkP;@hh`E6y*Rc=9rX@^{Nxod}bHZ ztk}cJWDha-6RAtvgLiDns4|~e9Go++ny{EO-QWv?SYW(=l=LJ#f5&EN{eBZ8O4~Eh zGOyyhr%~F`t>M?9;m2yWq%%JomHs6H1o`IpvU@*1&uEdc0#~k8vXxvuhZ^KYcXx4l zZ^(XCkC`15#{L%RTUR65;Bzv2tk4li*!I#MY_TyzqxSkw6nHs}UCK44DC~i%-yEo7 z|L5rWu0!?*+~sM|)nQ*12hhrS_(@}MAm3Vz&F@_Q+2JFY@S+3N2#meCKA5eZsCHhR z0~xQww^JxfkN&iIhZO>e!(VSJaj_P`<~W5R(jQXRcUlhh=NIKar9;m&w~!yflGFw6 z6%;k%{|fE;?32e^^=meAqW%P$my_6RFC)UnA=BIhmorswh5VVGODllyeq(6b7kLA| z5QSR8Erf|>qE#7Hm@^~t&ofuPLE2^B@Jm?iMfcZABX3H}B>UCZ^f6`4-A<6H z2U!)azi))-Picnt>Q9!l9N^T8rax6v@{qWtMi+h9PXiXlXkmO!j)TK>f@nm()_=2~ zEDOl<6O?IlHRby+%Ca7Qqq3!?t%*5!o9?gQFU6HNMp6WWt0HV4<}d))hRaU%hsH(p zdRp5~W1@d~17_A}%;&vGz;zhYQzYqTz$!rKwa?@aD@dHK1r zwoc9?_5>k2MiV+%bsS`hvd%YvZ5?6ZrDu@nfDNLJl(8}*>y}BI*<%!+sW0gLMbL;n zgFp(Ccly9?_Y`$nESX*R!>-rt~q9|Fa*r0n(weWliGr8%FLbSu5O+#6KmcW?zDz9QxJLi`eOUgJ*YVC z_Fo>VQ{^ohUR$JCyz?~f4C3H4;3N-_UiDjOyylk)YC?Av7#W}zcOeI1^fm2KD3m`x zA6&yzyivcS-b2st@kv|GZi}E(S5a9VP|YbC4mD9NLx9aPO99=Q(00gBWfj? zrY>#af$uqHznehw!73=3BZXfyRJ}x4!W*N9jiJ`^N@|*J&jE}RCPx+zf+*t`nU<~bPXUvDHV;x*UHB2w0p*R zamG2ZPD-+oN#$mUlQi(3?#*ChAFaDSf%i8qJiNFFZxaS$TQ9A#8`sRnvcN0K^&u}oW7^k2T!Por91SW0C>51 z`8c=*IJo(=xdlb|ctrRF*|@nyxVimx@(}+EaB{J-v-bP{0c;EgrGEg+|9J4UbAoz! nesFUAABLAtn+Ghy%`3vq^WRSFwom{3V*n62HQBm%=3)N@nT_HC literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9fbc26ef1ef34cd7b0e4413f40d7912e3a777b GIT binary patch literal 11091 zcmbVybxa&i@bBU7Qd|!!c0fxxoWr3&ixeyFR@_~RbGW;^I}~?!FYfNe;qlE&e#v{u z`{!k|JIT&|GLzZtWOimkzR62sppu{h000bWDKW)&TKC^XhJ9aaDx;0w36+7Aq8tF= zMh^h^1ONb!?^`|x0DvP1065YG0CEe)YCQXr=;VVbIH+K`|8ZkuuGM(dS~w1NB-A%9(ww`^<$_y6yg6q3Sqqi{J^I0gh-DFTX=JGs~f5J2uvB@||nHA})r;MF1 zQ%r`Qm5gZENv*k<#iRIt4NfUDv1GmEq(3Ws{hKAzIAjweCG3KYDU3BE@d1vvAfW~U zsmc+pcol>G4!x{Z4I}Mb3Z)D^lpk|&Dvpp4Sr%(~saU9L=^=f z;tnV$W=t2Hsc;Wb^A0)QMQ)Rij!h+t{zc7-O?b8~n)zL6UB!)%6CwJ5o`E8QUiNE* z6}Fq^=wssGrYg@+7rpq7-Nf7_qUUssznq~D{BF?2q|i`^HM6Gg30!d?i#i1|cGn|l z4#a_r`Ib?8c}K>ulzMa|Ee#zMrS6$r!19zKe<;f>q~@YR;T{oaK!(Syg851(m0s~h zCz+^SEoWbBP+Ag`o5~E}{oFCzj@1(Hp2bNu$5odU8BFup0^&V(-P_RNFr&%1eBve= zkoI#&7cNFbZNYslljzA0h>{GOy1OE#;S0cV5GnP&h$~H#t5iN9z_FW-@`o`Fe!Mx| zdTnGVx$7MAg<0ICP_v*y!BkH?_Wv+4vv%s%ti3THErQuVr3ZM+o@jj%%;E_+fji!% z_|Zxg<->L#qI4gQMSrzFZAaR|oJnRW%vm>i_g2{(J%Jhz6B0OLLFb2WIVU{V*unMr z3Kw$y$639ji+S!vA7x^K3dh4Ged`a?hBxLxUF66n4aFbMXM# zAS%6NZ+MpJSrd)=GdRsxtuf{S>Fn5FxqKV>BM~3+l3B8Qx#a=V@}Jz{i|w7$(0q3?+A=zs)S1UfDFnhhfl& zFnz2;c)}}iU^n*uh$^HK|CCoQLQjpGj*6>@T==}XP?UZiC0m+V!D9y!&erpMvWWdn z3EBNHfsU&i$V7^qE*P}Xjtw`Vn5?v0O~saBax3;JnewD(>{86z`X0!l8_vQF3io{XMyqQKF&-OQ9rj{^eG0=%Z6Itr2zO339BTdv zH0}1{(f$~*Wv3nV4;$`-L+n>g0YJ;uWvW2|ywulTVvpf!KzVTWoru+TO@DJ*luuUYCB#o%Wa0bsIM=sf{v-p;R zvg@2Z22r&&cxD0h;4J(fCwI+Pbeev-y$(Bi-$!iVb~GWmzjA-S=K#M9gvknQYB3%p zFK<{k?|VpfJMrmNGe8410i>P$7ut;tjm3ZK;bK7X-wKXRJZAZ}(<@Sc{i2a|tP#i6 z)ju_IF1i-nw)V=M`&{+Q{euBU{55?$1=#~HRSS7g6)q5oG^#8@JG1HTV|I0U1a-DTy5z%Uo?EK8#kX3w;kWHOx>4xQ zIe+h{sejhV8pV{E_;q~<)_RLMSV5krYEFY`1HurN#fnaR-hT}{$Lxt)`6NKp?bx0B z=MD~WwJkn_0Z9|>;N@*&{!SFQa!nt-V^h#_W^{!@=}eAgna~f*zgZ=WTGn>rwC1R_ zVfCA>{tJlv+soOGH@w06`O)6=%8o8tjNYd9-9chj&8h2WDLWobt+%UQ^>ZrWVu`W|$_X)acg@o<}V0cf*o(4eQEMC^;dQ_26 zeFw{vX$l`4uB;}fM(!(E;==meW``l0lvNNlw38LlDSR$$V~8d(U#1tpQq+wl^3nrc z1tFWP5OHb7Wbi-kf^J%=`Q1d^g#=kTb9G{VBGIMn1n01^@c0yS#eP>${aX^tXXq9r z|0}ULqFakO?KQv-utM4(Z9zp1s6HLL?PmWooX*PkNJLXy;{F^$%Hd&lBI9h$+eJjx zVJG%{)kt0eThfK18FU*VWp0gT;$(X!O=HhZ_eGZBlCg3=2C=W#VFnRs!PVI6{70jq zy&tGMEb{O0>W>Am&tpO0!Lr&Y#&`=+RiSIBM>*R^{%58-my=P#9EAk0Vl?NWze|_q>jKi4G5rwvH7PPX9=sM>;}?6= zQ#7Nu<_bkD=E7NBf3*-pp0x-xm_b(6gCWwm3|KI0F%B@V0)Bg8(bcjA|d9pPV1vu3?7seKYAeaM1NH8XuAx z<*th1e6m<6HLx4Af$JB6?2gD0pAG^^4ZulV4auQ$R8#k6adh=sgVXd?wtwr??{JgM zOGmy!mPr&|I$=4Wg?9}E0IHO*UNaHv#_yP)`^Lx{sC?kzmSH#RE(;@y;dWYxoe%?3 zf7tu6N}R<|`2>0~^V_BOsAM4^A#w#Uhc;@UQR~+lyT_98=m9a|5@3XJ;Yp5h3+Wcn z{~(9mt%RhS{wvJ!n*3ZlN(eytq6|l0&pN8ZI4?LMT|qDw*=v7ZRbtIE_?E(T`MKzo z@Do;`)ZmeSOO1|^e29g~p-B36^*$g0rn_3a>QQ&>O?+uR*}=(}%l3j6b)B}ODG}4- zr`$S=98Nb(^Ywg27YVm+!!kMQf=)rhbM&#X{vGJ%nVD86dz2%WBmeBM`L$xa6X2LHx7=*N;m>x&X_xk8<eFCv5)jFVj;VlO1qSa&!X8F#2MHy+s*3dqhCY$v=R`xj_&?&IqvY<*WwW^Upy9p3moCR1MthS8D8*f(a%ZD&hnWkN8^M-QKARzg1`muM znAwT(1yccdz7=~|<=l)N9=$l0i%5%jDvF&!TN?IF_=VM=JHuO3y8Q=^JD6<3VUqq` zB;9zHs{+<&Qo|96eN>Cd2)<7f`r4ho}GlJ`N`VK%kZjJg6cP^rdXrzk$u-Q#}L zHx8xLPigo$3MjBFU+@*t{vj)jxg6MVE`o-1*9(;-X^iWVWd{hcA-7=nbrsq46tcy+ z>K{@7M*D<#rX?ClX%vA|)kxl7grlcvuauMm2m3yH*i_6L1;;o4u+(S+e- zfXE4Y_i7N^LAAKy6iSWqFggO5VC-CMl`fZb!w zAh9u&)Q`)8A-fN#n}fpAE(#am?edLgPdJnLhyq5$G=N{a0?TnSfln7$eMa8@u)z*H zgZlQXn;~Im{Le#|sKIuj_bzp&UlF@N)_3>;HDMVsj8&$4@+NzGPFpx1+EZ>04pi$f zc`-Wm=&5YJOdO*+&|v?*4T%jU`~HF|zNl33XY0)0S`fr#0m_00*yoVecN#Z}j)f3! zgplSH_ipmlU}q?K3M;(Txt_|?BXWZOLg8tM}pcZeeSRVSxk3+C8&bz~M2ZSzuUs=4gaGsvV&7YO0 z9VhictU@^=M4hGXG8sItq(yBNp#~Qs&k*|amna^MvG&rLeNR+CWu%;c#&c^QX;TDRV$ zB+)68O(!o_BhRV8`ff2AOiws9H@i`eZT364{Jf~Ks_;I4y>P4N24rlQZ)uCmD$|W2n)Hwq`t}arkbLiX&}(!;b2ztpPcxBak>jOod`~R zczSghW7a1mSfaBm=?qv*UZF_SpRwg*Y2}mInQ(wSwqU~5eJY=b(NN3+1Hl9+SxPqY zLZrf5Uwg6O($syfVzzh>omB&!VaIk>EO|yb?#45huI5jFJe|qlJR%nfh9AoCXaTpm zv*XId(GiGK51uU15c4F0De~Xbr2piYsC)H|0;xc`x;!vmUfh?%^~pLDg?P{r)3g(I zR52g5J6QXJ*ceCr%|G{=bTCR7GyBD__N455O@uHzkqx#u4gKnPs!cnJQ9Yc%sW=_) zRk&?I+ImKeIDiNvDdC3fW1A51k@v7LeT+x?I08zQ?X;#}{fCjM3CF*lzGZX#S0Cwk zp&#iu(F?t@(z!@vfD7eBN)4A^YhAbD4BS0aRcBk^957?BIZ>CjqnzIC3|?vXSX}P&V39?cbdK^%r8@XhsF-ekshz@;MKlx+C@O(!@3!tu;Ey}MP>EeDg z5~xVJ#YobFp5>BS#hU1^ZIEAm#(=0 zDH>cm1j*b~3oCZgE4a#Ga5ler!pBJSU(r`eclf%Db!b zx|Dg2TFbA@*3Ac}p6dvNrIdO>DMlG#`q?xk zZd@W;jCfY5gRPg6i`pMy{y1It^qv_qzk)f8nwWQ@;4N+#poI9}H4#x^R1Ac?jy8V7 zE$tfi|Fxkx$J2yCrlyV&#tr6l+;`&*X|f=!L2$WY9*&zd&w%d=OzX(Xw(0$paZfNU zCGX)`0`|Dg=-H~S!P6A=a;%kQiCQgPYm=QE=sv4RMsgi zp(ACT8Pvf}d}4---Vr8O_8%xTFmVI3vmV4<&*e1dB|aQVkJkQZfo~wJ3aYgCyG-aI zM6lEj=7 zj{39NNVkP03XLF(CRE4jAvG?Mrq&2YCkTkCuGC&>Y-T6e9Tt=qF$B1;uQ$DR8JEa1 zXX1iX(wBD8wHIB8ne|(L_6BN(#S66m(+IPmrK(yy2o@q5&UI#uJM*tccz6TKiyk0pR}997AaD5f6#Tan~`j&I!(NiV25RiVSbDPCz!#kl(e#)y=+t{l~S@lx&3 z?Tva@cAsIV(eVnTA_R*3S7n^#ckQy&p0ge)*iSFMx&vy6SM3nS7s*~FHQ(o zLj>M8&ga2|9v3lg6~UjeB~%ipzi3wr5^Br@GvWbQEYRq6g{KjgdMPW;J9MegqSVcC zy1!E@dG942RV*-AqI6p*nCTjb`88;-21}kmUnpl9Ab^W&yS6@Y`p(A1lqiMcbJ4FH z-czthydD#;mlJY7WC=ZEYD$)@s7p|nSjs6uuLk`cdQKbZb7W_^9`vNfm+7D*Vx7?(h~ zN-%7@$!dSW2yw4)>Xt4#(f9ZP%trG%OFnBTZEedI3qD1|RCytMQ4>REwZ4lh{VRWj z2f#SpL{jQwS5QHUL;lcOk`f)iRk(YRGG*qVO#mCA%NA7yJl^ej^*mSVaC6mvY=z{D zjOQd#>mG~f(`H_Z&`lykjyd)1{UQPj9AjqzE4ZlSlmy}-32!{SE6uDXNl$rA#$`95 zj?Ll6PR2j&@u@A1omZwRONOlZHsO_xqha9y@M;!Pg4^EiL-n#%?^^nji2+=`+K-51 zOI59=UHL#QZw5*_VDhM1R(c`0B}LA<4!c?|7oQ^Z0TL~OWa)4$y*c&kQ;yj#t5K-3?afM2m z4WKc0(bQqyf?kW9fGa=JI+W5!-SMt91 zf<_&8z0E*tEDl!-$yGZ*pV!5pVU%_MOguAW(;Y(-`WW7i99T_0;BJEy6av(7#M7qNy_+P!t;hkA4#mDnUc27F&00__S zeukOzOX-)YFg12su1PRBhu8tZ)lWm254mdebGa|{pCg=9vAkSM_G#yp$NguxkyKps z^cfs55wd>+r!#V%u6aLVJ*(=7R_4DLe>IKL+os@s<%9q!X}u{822O~s>#$hnX?JtQK@ z*|-CwqXIzT3m(j)gURS7#&4}`jL`^L8G>0oXwf4tx;=CxduVEWP@x%3lPZQOM>&L^ zn+43f^UPYi+@T??&2w%)d+iLd02Xxhzy9Eude>9DG?-%R5*^13$zBiDRFn7HN<)UO z5R!Xi?GG_!);OuY5*2|BvH@VwD_5t}1*# z*%nVc0?gvcuppBLhZ>O$iX>!B={7S>%7KWF6@}1cDX^>6Vsk)J)`Hxusm-nsb1ILU zebm)j$cUWR^JfxF+*#BKoM&_;zNPL*%X+8zlzR5gNh9;IhX{yCgxh!W3gJfVg=hhZ zKfNSOP;)1Z3mFth#KXMe>Cl7aPpyR4z1i%RzQO?+Fr7v?A^`v=B53d7B}5@Z5T2UP z3M$bJn{&a8{DG`{HYp;SIMy|k{27Deo~+RNUTvtz0Kwl4zgh|t6y>;6oWc7IRb$A- zAQ1TYz5126A;(}WEkz}1tOH;S9_ZJk*+3`uGH}>+L z5Ywnv_7=f4u6tRLYZh9oW9tvd*~>p+oyqsk{P^ZPBt%BEUW3ThLv06Nu3E>u+inW- zoJuK+`#6uMfM}XA#$CC!fhxwo6I@{M=SS;7MNcha2|+zvk(!sjjOTWm9JcLaNUr~~ zscVT|Q=TAfV&o=dX?~Ra@duqI-OC%QY@~NSvrkZALi**b9B0a;o zf;^dJ0VM=L%Wa4MM&RW9lSt4@+V`R%Q29jK$0}f1t6U01zEChm70S#wom`)x>y?0- z+GeJoYvxKd?n!+K56?;s?JDOI_pQjIkq8U{raY;$nc>)WbGw>_x0~rdVx4;(%-uzR z6=?#wV=ieM#spDe`RL;L*>}A<@C^-1iRY*yIDWt8eo3u`87a8=Hp~&DSqTke;PSW5~#Qb8JwN6TM?OOJwt9*CU zB>9!ezJbB!*cqpybB|+OyQC%-LY0V0DR_{){8>vj@`JFWtAAP3IH{1(f*+r?DmykR zdSc6)Wv0Rp1?C9W!6v!;4oT(>{AyYJQLOiy0`ZRuVfAlpPtMBz(ql1l$1bXnF8X3%5uVDbJZJfnznF)D8jm6#U$7 z^s~9yYnqqN3x2Ed8?P-C7*^@(IIezIp*a!sxKRWaI`ImX>ccG@Ry6WMzQ&W zPLx*1{1HAW^_i>HXA4O7DX#gm98foe7sHl|kf|l&F+AT4(9ha381Wt4=2_FY(E)JB zzI8_P=FL}L#C=O=Z0}Qhw3E>Soyqg~uceORQ!FdD37)aJb0sw9s}$N2Vvt{DKiqr# zW7jiott)>UAo?-p_WIxwi+neH{#iZ(mVzu@T-U4}CR3=0(>ipOj{purH-DC-Ll_A! z;GqG}k8Rsk68(w2^K@b`BJ&4At6WaNx?}QWpk2{rp(NfGPUbCq#bQ)ge%1FoY#}hs z=4HU^4V`P{BJ=_j?jCU4PTW*D(<8YxwhRey@ReQVm{_0Cs|oQS)>_B+JXD0 z!};#&mRXtvJj8%DJz!?MY3ZkGen|sT|O$h~WP*Qn3SS-*Te8JvwJ=ql{U|#vR3Ha5*{UK#X(ivTJ zkfK_Lq^D|cf|BR4dFY4LEm({qU9RGOe2J8gjiL_!;76Ls&b3r)NaL^Jp!tT@n&{{I zE#*_^b1?t*Q>c`4+}kWulV1IFolb|xUA8y~F2a)SX+Gk=FfSKJ_~bwzTL%BpeW>Mm zWIoTh&T65a;Bs3C?Ul}%{Bg;W!+fiSMe}Q2RH)6d<>i-iUJrW?BGXLbP*Cpa$U+{Q zdSWAUp0`wELp*ZyPTK8@>=~~^(aRWu4{(+Rex)?%sdD)fGIefCnJk{VBMW2iQ6xpm zqmX1Mp;Sl%nuY}FaIomQpt}KE^uY@T9mIJEhAMQc*{HzgJ-p8despU@f>FydJ$djv zTWLh+|C}g(ZFZIc`S9CQY~rq*>-Qa5T5~@B4Kwv5cSo*TMCUU537MOl;7aZI)pq!w zl^x-kfoBCIhBaFo)LX)o<^9UPolKb2FrY&o3`+_f4ucI#S=3$J#{~*j562c>izq8&Fbiy`Dd(pSuB6AoL)wvV zbERA?bYR^GufDS$p^pgQ`Xt_293Zt}T*PVO&57k!&F4d%kwT^K56#U+P_nORL0B9) zRcPHkOe!dTlms7jQdwTI4kk#(rLuX85-Nj@>pdlwAG(uiWx&khb4fk8(QspMD@#-^ zhpRznrKzJiM{!>eS8r!p5U+`Ou=VnDR? zy&8iuWi#ynE3VA>Z#Lkuo0v2(R{Ny-R@R@64k=~$(0_M$_wGL_;g;LF`d#k9vp7_S z_X)XZ^eCQ+d3l4l?tb_vfE24$yO81>xjwrH7-1YbcrgB4ZfMsW;ZV3$#$)$5!6-V5 z0C;j|Alv*_<&M0q(b(>k>}UFhu?>sm3@5s7szA!#qf3bKbEBz7_drCi`X~JFA}i_A z5A1wFL9yDAJg*;ujHr-Oo|FE)EUbCo4A6Po{yPmhw_5A4-;jL4rN!5iSwWjVtLF={ zuV}47Uyw9#9rQJ($f;jQ&$_nn}Vr$%7j-lw#zzfhzY3HcsYIQ?*MBmgvL`t@Vgq{ z^DJiLPpwJ|;$vosU%-6YEbp%JQ@z_$-_+q9Wr_gVvKLeD^o^Sp<#)UxziL{j%ZSuj zd=H$D+TqcD?iBNm@U?>|VEgtF2}|D7wFcLR)2}Fz5!Vctu7~a3$U@P2sm@r7b7<_k zBNkmi42o<&u|8oEMhWJB^4DLzK@@v`~LCJ#au*Hz_ zJg${5Gb6`etB3-^5B~VOO0#OiV2f~l3?$z|n+{>-z7aA3p&{eFI5roSx*v$!i6yNV z0iL!Gr%eVzzkE2J2^0{Kra9u2rIA;YNdMmGBs^VP8=_i1A!tB_798tH=?d?bNQSd_ z`1UN^{1`Db?QCpuHwVd##-jA~ev={#HMKc$kf?^@Q3@hV$|bokS1x4^v47NU|st^|*h$)eNiG9Jzfm-`t%1 zfgVJ5iysD^XZ%>qV2 zPTD$%p^+XhRp84ZkNwY3o~c?#szd;DB$<7Z!O&kQ*Eu_KPnG%CJ{qw+VGuy|TMU(N zov_SMfhAAFW3-K1n!P?Ia}wD#M+cE=T}3&I)wNQvxfYw~{`^|MGz2QS9ldONkUq%@L@E2ii`2R$CS=NT+P8y&%ub-z|QEM z060OMpIAZMte{WIpf9|iICwvOVFrPCK_EAkw158xz{=Xt%-Hq+4M0N%%De*@|3`v@ rnU#^fgPxVm|6n*jDRXe~f;f3W9RFL0+4kx6I|d*vE-zLA(e?XZ6pSSZ literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdf18485f69316a5ae921f83997baa4c0042e50 GIT binary patch literal 4515 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 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4723e4b45ea6377219fcf9475c2c75ae075fed5e GIT binary patch literal 9257 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 SjxJs>07Y3fXqB{C=zjqou7cM9 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png b/mobile/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f26fee45c06c140414d4de5ef4a6911edb665b3e GIT binary patch literal 10219 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 + + + + method + debugging + + diff --git a/mobile/src-tauri/gen/apple/LaunchScreen.storyboard b/mobile/src-tauri/gen/apple/LaunchScreen.storyboard new file mode 100644 index 000000000..81b5f90e2 --- /dev/null +++ b/mobile/src-tauri/gen/apple/LaunchScreen.storyboard @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/src-tauri/gen/apple/Podfile b/mobile/src-tauri/gen/apple/Podfile new file mode 100644 index 000000000..cdb90f4b2 --- /dev/null +++ b/mobile/src-tauri/gen/apple/Podfile @@ -0,0 +1,21 @@ +# Uncomment the next line to define a global platform for your project + +target 'codeg-mobile_iOS' do +platform :ios, '14.0' + # Pods for codeg-mobile_iOS +end + +target 'codeg-mobile_macOS' do +platform :osx, '11.0' + # Pods for codeg-mobile_macOS +end + +# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' + config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET' + end + end +end diff --git a/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h new file mode 100644 index 000000000..51522007b --- /dev/null +++ b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/bindings/bindings.h @@ -0,0 +1,8 @@ +#pragma once + +namespace ffi { + extern "C" { + void start_app(); + } +} + diff --git a/mobile/src-tauri/gen/apple/Sources/codeg-mobile/main.mm b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/main.mm new file mode 100644 index 000000000..7793a9d5c --- /dev/null +++ b/mobile/src-tauri/gen/apple/Sources/codeg-mobile/main.mm @@ -0,0 +1,6 @@ +#include "bindings/bindings.h" + +int main(int argc, char * argv[]) { + ffi::start_app(); + return 0; +} diff --git a/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.pbxproj b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.pbxproj new file mode 100644 index 000000000..b393dca3a --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.pbxproj @@ -0,0 +1,460 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0C0FA39D7DA0B8B969CBC4ED /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B779791C2BD77C72096BDE03 /* WebKit.framework */; }; + 118E91050E38B034B5376613 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5BCC1312EA24CFBF0C151E /* MetalKit.framework */; }; + 1B11AB45150F8FD0FCBEBF06 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF79F0FAB4934870433D7E8D /* QuartzCore.framework */; }; + 21DF7596DD9AF9A397E04103 /* libapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3AC93986522C455DA19B5CBA /* libapp.a */; }; + 319A14CE4243A682D394BDB6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 10851592AE6E6FEA303F0A44 /* Assets.xcassets */; }; + 631C1B32B1EA81246127217C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E96F3965347C9E602054174 /* LaunchScreen.storyboard */; }; + 663BE5CC0680ABD20050022A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91E0D4CEA667EA63B70EA148 /* CoreGraphics.framework */; }; + B9A3788E19084A14CE82FC5D /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 18D5E241718608581AA25B9A /* assets */; }; + D26C9D278F981D400DDC5D5F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB9DEA1793193F78206F189 /* Security.framework */; }; + D3A4E529A2EE975701657A43 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21497A5DCB194B263AB8FAA7 /* Metal.framework */; }; + E11EAB7F29876D9184F59AE3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 894B66D1B8D758E3139FE514 /* UIKit.framework */; }; + E9E3D0909EDC49A0AC5AFA87 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 74F30CF026ACA24F4DDCEC09 /* main.mm */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 10851592AE6E6FEA303F0A44 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 10A3713A5068F7D62DC49171 /* codeg-mobile_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "codeg-mobile_iOS.entitlements"; sourceTree = ""; }; + 18D5E241718608581AA25B9A /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; }; + 21497A5DCB194B263AB8FAA7 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + 3AC93986522C455DA19B5CBA /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = ""; }; + 3D918BBEBCE372A0DCE80448 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = ""; }; + 5B5BCC1312EA24CFBF0C151E /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; + 5F70331709B8BA390B91B74F /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = ""; }; + 6E96F3965347C9E602054174 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 74F30CF026ACA24F4DDCEC09 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; + 894B66D1B8D758E3139FE514 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 91E0D4CEA667EA63B70EA148 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + AAB9DEA1793193F78206F189 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + B779791C2BD77C72096BDE03 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + C6D1B1292F1FED0482CB1CB9 /* codeg-mobile_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "codeg-mobile_iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + D9D70FC73D14BAE782484FF1 /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = ""; }; + EE6E552555D3D927D16EFE72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + FF79F0FAB4934870433D7E8D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DA0F3AD39DEE469E4B89F5B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 21DF7596DD9AF9A397E04103 /* libapp.a in Frameworks */, + 663BE5CC0680ABD20050022A /* CoreGraphics.framework in Frameworks */, + D3A4E529A2EE975701657A43 /* Metal.framework in Frameworks */, + 118E91050E38B034B5376613 /* MetalKit.framework in Frameworks */, + 1B11AB45150F8FD0FCBEBF06 /* QuartzCore.framework in Frameworks */, + D26C9D278F981D400DDC5D5F /* Security.framework in Frameworks */, + E11EAB7F29876D9184F59AE3 /* UIKit.framework in Frameworks */, + 0C0FA39D7DA0B8B969CBC4ED /* WebKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1A156B99BE39D81FC4CEB857 /* bindings */ = { + isa = PBXGroup; + children = ( + 3D918BBEBCE372A0DCE80448 /* bindings.h */, + ); + path = bindings; + sourceTree = ""; + }; + 3CE0DF14B24FA030C8494526 /* Externals */ = { + isa = PBXGroup; + children = ( + ); + path = Externals; + sourceTree = ""; + }; + 6F93F633430CCB8B146D1103 /* Products */ = { + isa = PBXGroup; + children = ( + C6D1B1292F1FED0482CB1CB9 /* codeg-mobile_iOS.app */, + ); + name = Products; + sourceTree = ""; + }; + 75F2FC8FAE56BBD877FDA678 /* src */ = { + isa = PBXGroup; + children = ( + 5F70331709B8BA390B91B74F /* lib.rs */, + D9D70FC73D14BAE782484FF1 /* main.rs */, + ); + name = src; + path = ../../src; + sourceTree = ""; + }; + 7F2B78562775DF7216BDAD4B /* codeg-mobile */ = { + isa = PBXGroup; + children = ( + 74F30CF026ACA24F4DDCEC09 /* main.mm */, + 1A156B99BE39D81FC4CEB857 /* bindings */, + ); + path = "codeg-mobile"; + sourceTree = ""; + }; + 8932727FB1D29067B0CBBE2C = { + isa = PBXGroup; + children = ( + 18D5E241718608581AA25B9A /* assets */, + 10851592AE6E6FEA303F0A44 /* Assets.xcassets */, + 6E96F3965347C9E602054174 /* LaunchScreen.storyboard */, + D585D69F74D86497FBEA640F /* codeg-mobile_iOS */, + 3CE0DF14B24FA030C8494526 /* Externals */, + FD7A852B53BC77D1B50F3A8F /* Sources */, + 75F2FC8FAE56BBD877FDA678 /* src */, + F824A938453F0979C991A7A9 /* Frameworks */, + 6F93F633430CCB8B146D1103 /* Products */, + ); + sourceTree = ""; + }; + D585D69F74D86497FBEA640F /* codeg-mobile_iOS */ = { + isa = PBXGroup; + children = ( + 10A3713A5068F7D62DC49171 /* codeg-mobile_iOS.entitlements */, + EE6E552555D3D927D16EFE72 /* Info.plist */, + ); + path = "codeg-mobile_iOS"; + sourceTree = ""; + }; + F824A938453F0979C991A7A9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 91E0D4CEA667EA63B70EA148 /* CoreGraphics.framework */, + 3AC93986522C455DA19B5CBA /* libapp.a */, + 21497A5DCB194B263AB8FAA7 /* Metal.framework */, + 5B5BCC1312EA24CFBF0C151E /* MetalKit.framework */, + FF79F0FAB4934870433D7E8D /* QuartzCore.framework */, + AAB9DEA1793193F78206F189 /* Security.framework */, + 894B66D1B8D758E3139FE514 /* UIKit.framework */, + B779791C2BD77C72096BDE03 /* WebKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + FD7A852B53BC77D1B50F3A8F /* Sources */ = { + isa = PBXGroup; + children = ( + 7F2B78562775DF7216BDAD4B /* codeg-mobile */, + ); + path = Sources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C9954FBCAEE5097116D900D6 /* codeg-mobile_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C477AD316FF8CDFC8CA6835C /* Build configuration list for PBXNativeTarget "codeg-mobile_iOS" */; + buildPhases = ( + D5070AC54F5FAC0DD3573886 /* Build Rust Code */, + EC7651AD44695598D1C8A82A /* Sources */, + 710212A7E4AEC416D5A1DE2E /* Resources */, + 8DA0F3AD39DEE469E4B89F5B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "codeg-mobile_iOS"; + packageProductDependencies = ( + ); + productName = "codeg-mobile_iOS"; + productReference = C6D1B1292F1FED0482CB1CB9 /* codeg-mobile_iOS.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFC5C89A8417FF47961D37BD /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = D203B611EF4018D01CEB2827 /* Build configuration list for PBXProject "codeg-mobile" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 8932727FB1D29067B0CBBE2C; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = 6F93F633430CCB8B146D1103 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C9954FBCAEE5097116D900D6 /* codeg-mobile_iOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 710212A7E4AEC416D5A1DE2E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 319A14CE4243A682D394BDB6 /* Assets.xcassets in Resources */, + 631C1B32B1EA81246127217C /* LaunchScreen.storyboard in Resources */, + B9A3788E19084A14CE82FC5D /* assets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + D5070AC54F5FAC0DD3573886 /* Build Rust Code */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Build Rust Code"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a", + "$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "pnpm tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC7651AD44695598D1C8A82A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E9E3D0909EDC49A0AC5AFA87 /* main.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 132388D6183EE9C33FEEBC8C /* debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ARCHS = ( + arm64, + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "codeg-mobile_iOS/codeg-mobile_iOS.entitlements"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + ENABLE_BITCODE = NO; + "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\".\"", + ); + INFOPLIST_FILE = "codeg-mobile_iOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = cn.crain.codeg.mobile; + PRODUCT_NAME = "Codeg Mobile"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = arm64; + }; + name = debug; + }; + D1BF674D91228881B511002F /* debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = debug; + }; + D5DDDF49D052DE10E8E31C50 /* release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = release; + }; + EBE1E7D7B57F654F1627FDC1 /* release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ARCHS = ( + arm64, + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "codeg-mobile_iOS/codeg-mobile_iOS.entitlements"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + ENABLE_BITCODE = NO; + "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\".\"", + ); + INFOPLIST_FILE = "codeg-mobile_iOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = cn.crain.codeg.mobile; + PRODUCT_NAME = "Codeg Mobile"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = arm64; + }; + name = release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C477AD316FF8CDFC8CA6835C /* Build configuration list for PBXNativeTarget "codeg-mobile_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 132388D6183EE9C33FEEBC8C /* debug */, + EBE1E7D7B57F654F1627FDC1 /* release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = debug; + }; + D203B611EF4018D01CEB2827 /* Build configuration list for PBXProject "codeg-mobile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D1BF674D91228881B511002F /* debug */, + D5DDDF49D052DE10E8E31C50 /* release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFC5C89A8417FF47961D37BD /* Project object */; +} diff --git a/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..ac90d5ac7 --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + BuildSystemType + Original + DisableBuildSystemDeprecationDiagnostic + + + diff --git a/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/xcshareddata/xcschemes/codeg-mobile_iOS.xcscheme b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/xcshareddata/xcschemes/codeg-mobile_iOS.xcscheme new file mode 100644 index 000000000..956fb0e2d --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile.xcodeproj/xcshareddata/xcschemes/codeg-mobile_iOS.xcscheme @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/src-tauri/gen/apple/codeg-mobile_iOS/Info.plist b/mobile/src-tauri/gen/apple/codeg-mobile_iOS/Info.plist new file mode 100644 index 000000000..7945d3e55 --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile_iOS/Info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.20.3 + CFBundleVersion + 0.20.3 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + arm64 + metal + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/mobile/src-tauri/gen/apple/codeg-mobile_iOS/codeg-mobile_iOS.entitlements b/mobile/src-tauri/gen/apple/codeg-mobile_iOS/codeg-mobile_iOS.entitlements new file mode 100644 index 000000000..0c67376eb --- /dev/null +++ b/mobile/src-tauri/gen/apple/codeg-mobile_iOS/codeg-mobile_iOS.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/mobile/src-tauri/gen/apple/project.yml b/mobile/src-tauri/gen/apple/project.yml new file mode 100644 index 000000000..1bad8184b --- /dev/null +++ b/mobile/src-tauri/gen/apple/project.yml @@ -0,0 +1,88 @@ +name: codeg-mobile +options: + bundleIdPrefix: cn.crain.codeg.mobile + deploymentTarget: + iOS: 14.0 +fileGroups: [../../src] +configs: + debug: debug + release: release +settingGroups: + app: + base: + PRODUCT_NAME: Codeg Mobile + PRODUCT_BUNDLE_IDENTIFIER: cn.crain.codeg.mobile +targetTemplates: + app: + type: application + sources: + - path: Sources + scheme: + environmentVariables: + RUST_BACKTRACE: full + RUST_LOG: info + settings: + groups: [app] +targets: + codeg-mobile_iOS: + type: application + platform: iOS + sources: + - path: Sources + - path: Assets.xcassets + - path: Externals + - path: codeg-mobile_iOS + - path: assets + buildPhase: resources + type: folder + - path: LaunchScreen.storyboard + info: + path: codeg-mobile_iOS/Info.plist + properties: + LSRequiresIPhoneOS: true + UILaunchStoryboardName: LaunchScreen + UIRequiredDeviceCapabilities: [arm64, metal] + UISupportedInterfaceOrientations: + - UIInterfaceOrientationPortrait + - UIInterfaceOrientationLandscapeLeft + - UIInterfaceOrientationLandscapeRight + UISupportedInterfaceOrientations~ipad: + - UIInterfaceOrientationPortrait + - UIInterfaceOrientationPortraitUpsideDown + - UIInterfaceOrientationLandscapeLeft + - UIInterfaceOrientationLandscapeRight + CFBundleShortVersionString: 0.20.3 + CFBundleVersion: "0.20.3" + entitlements: + path: codeg-mobile_iOS/codeg-mobile_iOS.entitlements + scheme: + environmentVariables: + RUST_BACKTRACE: full + RUST_LOG: info + settings: + base: + ENABLE_BITCODE: false + ARCHS: [arm64] + VALID_ARCHS: arm64 + LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) + LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true + EXCLUDED_ARCHS[sdk=iphoneos*]: x86_64 + groups: [app] + dependencies: + - framework: libapp.a + embed: false + - sdk: CoreGraphics.framework + - sdk: Metal.framework + - sdk: MetalKit.framework + - sdk: QuartzCore.framework + - sdk: Security.framework + - sdk: UIKit.framework + - sdk: WebKit.framework + preBuildScripts: + - script: pnpm tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" --header-search-paths "${HEADER_SEARCH_PATHS:?}" --gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?} + name: Build Rust Code + basedOnDependencyAnalysis: false + outputFiles: + - $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a + - $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a \ No newline at end of file diff --git a/mobile/src-tauri/gen/schemas/acl-manifests.json b/mobile/src-tauri/gen/schemas/acl-manifests.json new file mode 100644 index 000000000..8040f203a --- /dev/null +++ b/mobile/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","allow-register-listener","allow-remove-listener"]},"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-register-listener":{"identifier":"allow-register-listener","description":"Enables the register_listener command without any pre-configured scope.","commands":{"allow":["register_listener"],"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-remove-listener":{"identifier":"allow-remove-listener","description":"Enables the remove_listener command without any pre-configured scope.","commands":{"allow":["remove_listener"],"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-register-listener":{"identifier":"deny-register-listener","description":"Denies the register_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["register_listener"]}},"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-remove-listener":{"identifier":"deny-remove-listener","description":"Denies the remove_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_listener"]}},"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},"secure-vault":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin","permissions":["allow-store-secret","allow-load-secret","allow-delete-secret"]},"permissions":{"allow-delete-secret":{"identifier":"allow-delete-secret","description":"Enables the delete_secret command without any pre-configured scope.","commands":{"allow":["delete_secret"],"deny":[]}},"allow-load-secret":{"identifier":"allow-load-secret","description":"Enables the load_secret command without any pre-configured scope.","commands":{"allow":["load_secret"],"deny":[]}},"allow-store-secret":{"identifier":"allow-store-secret","description":"Enables the store_secret command without any pre-configured scope.","commands":{"allow":["store_secret"],"deny":[]}},"deny-delete-secret":{"identifier":"deny-delete-secret","description":"Denies the delete_secret command without any pre-configured scope.","commands":{"allow":[],"deny":["delete_secret"]}},"deny-load-secret":{"identifier":"deny-load-secret","description":"Denies the load_secret command without any pre-configured scope.","commands":{"allow":[],"deny":["load_secret"]}},"deny-store-secret":{"identifier":"deny-store-secret","description":"Denies the store_secret command without any pre-configured scope.","commands":{"allow":[],"deny":["store_secret"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/mobile/src-tauri/gen/schemas/android-schema.json b/mobile/src-tauri/gen/schemas/android-schema.json new file mode 100644 index 000000000..b15a43082 --- /dev/null +++ b/mobile/src-tauri/gen/schemas/android-schema.json @@ -0,0 +1,2286 @@ +{ + "$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`\n- `allow-register-listener`\n- `allow-remove-listener`", + "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`\n- `allow-register-listener`\n- `allow-remove-listener`" + }, + { + "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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener 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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener 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." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`", + "type": "string", + "const": "secure-vault:default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`" + }, + { + "description": "Enables the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-delete-secret", + "markdownDescription": "Enables the delete_secret command without any pre-configured scope." + }, + { + "description": "Enables the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-load-secret", + "markdownDescription": "Enables the load_secret command without any pre-configured scope." + }, + { + "description": "Enables the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-store-secret", + "markdownDescription": "Enables the store_secret command without any pre-configured scope." + }, + { + "description": "Denies the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-delete-secret", + "markdownDescription": "Denies the delete_secret command without any pre-configured scope." + }, + { + "description": "Denies the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-load-secret", + "markdownDescription": "Denies the load_secret command without any pre-configured scope." + }, + { + "description": "Denies the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-store-secret", + "markdownDescription": "Denies the store_secret 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/mobile/src-tauri/gen/schemas/capabilities.json b/mobile/src-tauri/gen/schemas/capabilities.json new file mode 100644 index 000000000..82c998909 --- /dev/null +++ b/mobile/src-tauri/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"mobile":{"identifier":"mobile","description":"Minimum permissions for the Codeg mobile remote client","local":true,"windows":["main"],"permissions":["core:default","secure-vault:default"],"platforms":["android","iOS"]}} \ No newline at end of file diff --git a/mobile/src-tauri/gen/schemas/desktop-schema.json b/mobile/src-tauri/gen/schemas/desktop-schema.json new file mode 100644 index 000000000..b15a43082 --- /dev/null +++ b/mobile/src-tauri/gen/schemas/desktop-schema.json @@ -0,0 +1,2286 @@ +{ + "$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`\n- `allow-register-listener`\n- `allow-remove-listener`", + "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`\n- `allow-register-listener`\n- `allow-remove-listener`" + }, + { + "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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener 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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener 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." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`", + "type": "string", + "const": "secure-vault:default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`" + }, + { + "description": "Enables the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-delete-secret", + "markdownDescription": "Enables the delete_secret command without any pre-configured scope." + }, + { + "description": "Enables the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-load-secret", + "markdownDescription": "Enables the load_secret command without any pre-configured scope." + }, + { + "description": "Enables the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-store-secret", + "markdownDescription": "Enables the store_secret command without any pre-configured scope." + }, + { + "description": "Denies the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-delete-secret", + "markdownDescription": "Denies the delete_secret command without any pre-configured scope." + }, + { + "description": "Denies the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-load-secret", + "markdownDescription": "Denies the load_secret command without any pre-configured scope." + }, + { + "description": "Denies the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-store-secret", + "markdownDescription": "Denies the store_secret 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/mobile/src-tauri/gen/schemas/macOS-schema.json b/mobile/src-tauri/gen/schemas/macOS-schema.json new file mode 100644 index 000000000..b15a43082 --- /dev/null +++ b/mobile/src-tauri/gen/schemas/macOS-schema.json @@ -0,0 +1,2286 @@ +{ + "$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`\n- `allow-register-listener`\n- `allow-remove-listener`", + "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`\n- `allow-register-listener`\n- `allow-remove-listener`" + }, + { + "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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener 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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener 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." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`", + "type": "string", + "const": "secure-vault:default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`" + }, + { + "description": "Enables the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-delete-secret", + "markdownDescription": "Enables the delete_secret command without any pre-configured scope." + }, + { + "description": "Enables the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-load-secret", + "markdownDescription": "Enables the load_secret command without any pre-configured scope." + }, + { + "description": "Enables the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-store-secret", + "markdownDescription": "Enables the store_secret command without any pre-configured scope." + }, + { + "description": "Denies the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-delete-secret", + "markdownDescription": "Denies the delete_secret command without any pre-configured scope." + }, + { + "description": "Denies the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-load-secret", + "markdownDescription": "Denies the load_secret command without any pre-configured scope." + }, + { + "description": "Denies the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-store-secret", + "markdownDescription": "Denies the store_secret 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/mobile/src-tauri/gen/schemas/mobile-schema.json b/mobile/src-tauri/gen/schemas/mobile-schema.json new file mode 100644 index 000000000..b15a43082 --- /dev/null +++ b/mobile/src-tauri/gen/schemas/mobile-schema.json @@ -0,0 +1,2286 @@ +{ + "$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`\n- `allow-register-listener`\n- `allow-remove-listener`", + "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`\n- `allow-register-listener`\n- `allow-remove-listener`" + }, + { + "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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-register-listener", + "markdownDescription": "Enables the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-remove-listener", + "markdownDescription": "Enables the remove_listener 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 register_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-register-listener", + "markdownDescription": "Denies the register_listener 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 remove_listener command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-remove-listener", + "markdownDescription": "Denies the remove_listener 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." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`", + "type": "string", + "const": "secure-vault:default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-store-secret`\n- `allow-load-secret`\n- `allow-delete-secret`" + }, + { + "description": "Enables the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-delete-secret", + "markdownDescription": "Enables the delete_secret command without any pre-configured scope." + }, + { + "description": "Enables the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-load-secret", + "markdownDescription": "Enables the load_secret command without any pre-configured scope." + }, + { + "description": "Enables the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:allow-store-secret", + "markdownDescription": "Enables the store_secret command without any pre-configured scope." + }, + { + "description": "Denies the delete_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-delete-secret", + "markdownDescription": "Denies the delete_secret command without any pre-configured scope." + }, + { + "description": "Denies the load_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-load-secret", + "markdownDescription": "Denies the load_secret command without any pre-configured scope." + }, + { + "description": "Denies the store_secret command without any pre-configured scope.", + "type": "string", + "const": "secure-vault:deny-store-secret", + "markdownDescription": "Denies the store_secret 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/mobile/src-tauri/icons/128x128.png b/mobile/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..90d2360f7090d076677bf5c7dcbb3e5cc6b1ebfa GIT binary patch literal 7120 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 literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/icons/128x128@2x.png b/mobile/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6da8047c9138512322a23416190a4007e30f78e4 GIT binary patch literal 15148 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 WgaJLKGmk7-fQE{$a-E`G#Qy-VS(sY@ literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/icons/32x32.png b/mobile/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..00c8d4b422f520f265c98045a331718de07b06af GIT binary patch literal 1342 zcmV-E1;P4>P)Wg}Q)7EDHVaTaSB6{Dqj zVQp<1RvRj=VLFi3QUh8m5b}iLF-+iaIp_Pnx99y1IvKa);$ZL2Ip6kv&-*;T_xC=R z_c=0WvezJr zaD0z^@Ssw(Y@qONthIC|~9N&2$jZdJ0kO-Q_F3CQJ zW0*(dx-D`@q65+LJR6<_M8;hn;+=SpD9tV|kqnoeQvi}A!Q=5@aA0s&*&8b< zP5@B6lF|XhEQ!I|$8vc(n<>>HFE1BMVq^3*vMm2M09-+T|36rrl8ow4s_<#;$B2)= zAEP6qdPbwq_*cXT%{`D1kG=bAP*eL6QfN(o|MgixNOpU8`IOm$DC7#(tsCXZkf_CCjj7QIYhjc zY%j)(FKtC%-&O1=t-ztWFA)*yz`pQ@uzc8tfo9<9sWCaiju@h=rkjoxdz091N< zG~Ys%rp!0fE7t>`9_Eh^aHB?}fsmfo*~rR%7;ADL1yfWso;i(6@Zdg^1i7@`RyFGzVb5OC@q228id-KT2xn6!(y>a3S+8<53;G8 zkSCpIpWjTrPzbZxg1Q5TuygnOF!QhyWoSe~>PiV3?e)ShBcLFFLQH6$F%*}*iGqU7 zaJz?5`N4;%J6H$1-F{2AUtwsmTF~0kik|Ksq@<=GJu?GwQ8D_QNRePPh`8uvxZJ0~ zWHmyg$S@Jm^7r1x)6ZU;K1=?Cs6ci5xP3N zu;HnEERBo92t^4$9ih{9Dp&j0`b07*qoM6N<$f;%^R Aa{vGU literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/icons/icon.png b/mobile/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc17eef4fbd0aededa5d01dbacb135095bc198fc GIT binary patch literal 31341 zcmcF~^+VI&_x}b6A_59ZrwB;n=mtSTx}{M%M>iW77<4C&>iEyLlN|RvM4Pk zT;8iuI6>zHe`>G*G5e!&Pu68EPyD%mDf1JBlZOM>(pZ?ukAmbH9yeGr#7Z`DHmG(s z6IP7L>Q--8s0K@pHgb$s=RUh!$tD%ppA+-x}*&)K3++)Hg zr(3e)6IJWpn&Z*|Ux0udZ;kQwy~>&P>0xEezn8Y;d3q0XC^{}I>cvu* z`)kzPf4ygl5nXMh)zRq3a#0>m;&bE!SO=%PXPMXq9A6$m2W(@z#Xgbe?1Y32+LL=n zb>};LiLYQgF#R`6j5L;UL6!2c)vXV(W?)v#?u%-uLP&U4`$`#+z_Wb+`{ymb@Ekw8%h*>^l zTzRi)nvE!t!QYF;geb?!fhdVHr=tNM5Vpra(CJ0S+bz#Os&!0t?@l_hf*CPvwb3jC zhhnFU&FqL;{9x^2_#@sPyK)L!^f%Y!^xKF>868Aj6d13ED#%cV%2ClP*6!w-1L^xR z0Dx_QO%AAL^=`nrBsiJuzTe%b1M~sho4f;?oC-F5{D!T7NW-O==suaez4CQuHPQVZ zxx^)OC4#!xBgyJ1(YrUFN5%HXIJjVOtTD01N8ky}*b zdqp7AES;k}Tz2p&|7L8=bH05`E>`nOf+^PD{KF`@$x+EG%8q4xfc%lyT>~tY6ws1W zsNL=z9X}D4dG527x6yLp;__X`iPQV=DLD4Sc!=z9Eb?@`v1HgqD?v!iT{B9-Gf)bC}Rw z%x9RA=iM&qDT%MgVPE!J4fs6KRey1*<96OtK? zF=UE$h_FMxk0`wJvWEN?p&LL^>Ar_?QS#fhI^TC?0|aRjt418Th+Tdx zFv0)y6aWY_kiv^`4%>L|lAiX?m{Gdn{9L1-Fks$tZ|gg@Aulgnd#CA$2<;o=MEL&V zn~Ks6jtzRu64f`)AG5x%1}e5#-pn;N7JjU)?eGu$?eX5tOw$(7#B{!gV}9EgtF1kW zrPVDT_!U#r6%YVuaPfVsLOoGVdp$IN)a+bt^c;hV#*5Qb^a{ zd1$(oB{{r}RXv?}4ad87iy6Q#O^SjlO2N1v6R10P*mKj;zKZShhPhM&nWziVljWOL zRlQ4ypd0O=)+{x1Gvb*_fw9}onp;xEeX0J_3T#U}J-r^j2=H2Tb}g4)HR6=_*G+|9 zw1+1`4o?H28wkgnzeu*-Tc)dN0l1ukC>`)aiZ?dS1Ao-`oNyKN&4Lt0EbROTNzXBu z8?r9_r`2nNW zlpId7Oy7v(Y{NeF&nXxY^YZf!KpU;#&neli@Pb|vw(p#APF-T(u|t;Xo6)*QII2f@ zIPRV-vyflj*KBM50|jm`L8+9>Z#dh_ zS9|NW4wm2>C?5%6)+0JBL)O;t733%|;oeHp-P?TtcB2Qw(X8o%YZ55bUuMKej%FRD z_1ROR_FlpDq-0H$(6n6J?<-XrC~jmSkG=b@+*bzTPcm)WQE0v1NFVVu3)vbl|QOp9hhmPiUW)m;N`Br z{TtSxjWkfFE5(Id=5Mz#v)H_EEP;4hTK1--r5TH{j}ebFnOz<&VZV8{O!D!VACJ`9uz$bD6VcyTcA}=pFu(eOx2=A3nqM=E&PS z{Go8Uy{%PB9|zemPFaUHku$}^4e=28k<$e}`a~-J>Xs5cNoJOH1hRW;<8kWrM7im> zp_4TOEnvg$TVrFJStFsYWAT%b^IPZ@{38_{WSO(R;V15EByZn-r4MHcE|RCZ(a0Fi zhP>CuqWi6H0T_0cgr|}C9w93sfgxgh1x(te2s_Qm`u%&16Gcs?cy>EiL++#H%((P9 zsEgY{sb-y~7$pp-6Adjaq#WLW{qcSs`79DLg1p^dLF=QOh~ow0*Wv})KL|%ClYt|y z;NMm{Iu}G3cJ>o?IxKEbSd9a4-vWqvV!~{0W`@Z-0DL3v0X&<@?oGp1dZ)dqa*Fsj zKJq_;=T``~b9EAvHUti*!2^E+ssKUVqi`Rp(#Fnd6aCM)*#OH$ykSvyS6O5}IpEL7 z=P&^{uZ}uvp-0a@V{R2}`tV-d^9~1`=@XwB!V73x0jQoqD?VjLsu%RKFjd}qZUEQc zq(3rXQgbR7W_c;H_QqGQbo8oFBxvhyGm8is6bWufL(QXQTi|B3Ggyt+B+QQ?%prMe z8R3}v&tKs`9@$0+c~C-+{p_31{n{Lok{N|y`4|DOgY2B^TgI3#k>sdTweOuXidnZ8 zRQjac8JUBjhRN4&sER3CGBD(;cDL|*rWgcNsx7uyAvpUb33zft@-TVh*Ux2_loN6` z=&iH{bO~s9NzMlN_%d7mEmAIj`3sDbaGAEb{iLK=Ha%5s3FI^=|Dtq3a+XqGfZb1u%cr zfov1@mM8ZG@I9F2d)5$vfelL%KhlBcn=5icp-mNhDMi47|Au6(5ccTEUECSssAbM+ zq}B14r4<(xOqOG`(fn@@^5i{u$B?iGmq5qFzCMnDC|AOD?4ZG@?9v<2Sh7bmfOY8Y zUSd1eL1C!}O^~MZ^J*=^Wtq+k3j5h!KmqO{&Nn9A{n-z&s;S1X789^!2Z*bC;HBKs z0Fd#0_F#~gpGj^=7yp@!)obxUaVU+82!P^$B*yCF2ZTc4(D3sG7}Ey8*1<*pHTFo% z4)4M4f3KgnkcQJ;Uc|N`{KqDy zCVJJroB0E=ml6OwyTuOlOWF1RgrLn#QobIhzrkbqAWkR)-t(K}R&r;KK2mdXU%vCk zIuMKt^55N#1Kg_9#OY*M!DDJ_a@xKkD|+{HVA^ZoecXK=Z2x@V(v#=xFeVENrv8|Mtci zHz$i3Appe~2(Y{jIKqNz9*wx;4V?60j}vZRXyqn~<0AtY0dDDQ<)+LDZVjNl9k@uu zaQhr^%UYbx`S0`p{^FKL0D#B;R{Ouc2)m^j01*H0^Z)#!{XYQ#{>Rn-^NZ#Gi2DB# zSRA*orVFChDJ?)35F>z-bXZn^!j!Lt#b?sa9Gz#6+MY?tC8me)%XQzOUq<5LrtGm^ z&*KrkllHwWH%p*ha${pd&(BXZu!ZToT1QYRTt3XX)TKv|w6AxFHG8QT!a?lIAt#p=c(~xbeLLpDqka#$Gt6C}*?a)n5PnJ2l9xrzYpEm3W2lhRs zlMNA1PD<8sw`5YwtE;O^;U+T}sj$c%E7DBgvD#ZKZVkRn=w8dsm}dZyQa+^rOo4DQ z;OwTRN3tpsjeB+v=WywBj`zf~eNT!N@FY-WwDL6=>Yg6TY<66W(5!JkfIAK!w)O!B zH`e;w5qCfv4a~xh+%X2rSKl@G`+U!Rg`LKfB(Il-^C+nYiW3qjPEa9_9G&&F!YM<0 zZ)BQOZpyzvjdXPtz%3Y#n+-Vjm6<3wHzR`~X0zqM@l^ zq1Y!^yVFCtc}Cr-R0l{@R0$vLnE@3gSYu%+280IkNlMJg2|B)dCTln`@yW2;|?0d zr1YX=;h{tZZqz%omLVaYj8-v~L`XDET6cU*x1*S?ZvLA^! zr*GUpYxKJB5dy^N-k(6vit_RTiBtRW(90!FHkH`*%Ce{b$gKkMEsX{*u8G!Pm>V0b zD1IW#y_2!J(BLU_u-HnkB`+X~>DEer5sTgj(h1ooNiIGimGV`1&LYFD_=z<4Z!vG4 zw(O!ZGqgtY{02zV>~#H~6ScvqP4yA{06XW)a)c44Ze z(Yd7x9%0bMa}M7?wL$e+=)kwpQcHm@xp*>VeL+>r*i@~X)!tWn4MFFolRP7gMEJO6 za<=@gPCuG7l~y+F>Rolj!nLE#jYVE4*Wa(6i80QpZfnlXjaQDMVP&*9+oT8QJ{nQi z!>(Feo{Te>ra>o1OFz(If95Ns$;kKQe2mm8c=sDG==8jPa`YLDm%-uIUR=C187sn+ z^ETO`G%xZ;4cS}9 zXU5$jdsS38Hz8jM!Wh2V6pLUAM6;%BGgk5^f&OqtxVTK`VT~@&|LLx@P;QOpbi6lE z2Kbup#@9ki{*u#zK5Ll@YCB;QM^8sBb&e3Pwb~J!3@UKs23v+NT`?Ul8olN8bRYW9 zw%pY}Md6^cXB+pwljO~Wu7SIDAOEup8>`Ywlkkr4A{@E@PiPzqn!_R~?Z?7^c21sW zygP41q8UUoAQz{f91qbm2ECo{m;am5xEK8gDS#TIJzMSzE)now>km1PiGt?oSH~}b z#9b4Wf2y?@w}UX>2QQ>GYX3R(O>jB07=U(<4&(}EO4kjGV^BoQZLw`3Qxv}ZJxqAE zSvYqxvStT)(%iH?M?K=^&%1Vq+j0`{&*V{3(l*>sD2Mm4-kRC_?K?S4udh=*;S`~f z<-#V>&|he!)FNYdg0qwExg%5MC2WU(vi@=u6=B#<(g$ZPA9)l+`Yv}}DsoN*(2`bX zyM||sT8*46&xF>#Gb{PI^q+FCgbR*k@=-f1WHHKC{Y{oDOu*diV6K@~kAf#u-|$l4_26;LtH!ucqZZuqR)Q5iRyL|DP`j zH@--zfWSDV&v~Pw8s;IvbgKh_0fO30l~GzXo+4{EY9H>sjB5)c;lJWos9hEHlMn3! zzO(}1e0NaF0C*#`#@h9%Kd09YuM5&y1yX!?ghW2{VqM$wD^;qd+^`zd$nxs zPDTVWoHqhTB^v8ITbHk6It<`&`}?xtLew^oz-=M>TRcuo0%el-U@SNqKw6vr6A368 z>wfgED=ZtQpUu@ahuzVq0fK>uXOZgu@VV<6$Tmd}gz5<(p z%JQFNX`$Ntf?Z+OhVwjMfw&3BI8LuG`~?ck8drwtQ&2k#0%aVmSL9`Yw0AXur}i(F zmlB15gl_Xc)mo<)n1vXxwcmchupPOG3=$fQuQK}c=O00ip7?5&Xhe{40v@CQf&T8N zlqE~a#ui<3XiVqqrh_o}R9*ROX`xGw^GeQV`@zjB0{iFLGE-<&ka!^^$@nbmMIb7L zE~o#f7BqI2KQAym5M9)i6PAL^Pr)%`-aI#QXq|5L={(~FJ>657Jnl#3WZq8-h7P4rtq0f&{%6&?=|)W^Bf^I2hFy%htXn>AFY=? z3T~pu4rnp|z7M99elz9i96!?FX~RlMunh$4B%=niyzv&W%Q7wYzJkTvW-9E6LM8nf zB=tJv<8O4x>`w^(g74PCcGaPsN!U5FYXPlL@#yix&V(u;C~I5JDAp*;M&@!d39;Gt zF_LP8lNp@v7Lw>i*k^<@>p2F!=%-f?U`veBZNk~4CFV-`FWKCaZq%yZGO4_Kyz#i^ ztcm`6OG`#oRh7rXgO@`t78aRacvSq7U#>3r^5j`YN+{#9w&5G08xmh%CV^sBAwk_(K6E_}iKMQ)u8U=@kT$HrX1 zIpp<_Z%L@*F!O~6&&ZbALW%wn|C8s;5>L$xYb%YfmEmMDse->A{@U{?Q7t*IE}khO zQQM@v$hg9?)rjxm3n~&^^qgb>Tbg`wdMzvBAy)Me^cL<|)QHf|f+{Eg4_4m@PMZg2 zmfq=~J_#MU&IsGzcfH!LUN}3Ha&g-99CtciRtV7$Q3Ds$lB3r|EMTxOGfeokm4JsQ38BpYw#8@4Tt@XtdUt-;f%@ zWzml8B>o4-0$Q*7T!gc>j$-M>iZr$5OKqXQl(3K3**MvOGu6*s|LFuJW&+}I`Kf!H z02~d(@u=R2s^G)cNUH2ARS|6OrHJzqvYGuVH8N-Z>ez8|D?2#ey$NGK31?YY7R0o3 z5%s)Ugti@nNEyV#VlqWv+Tr~sbH8T?MPS$hAzqZlb|*=_!gjm1rZ2Ef~IqfO{l|3=T*!8Fs)M3u>MlkRp+?RG$W5epFtkm1X^LwDNb+k zYD>`doe)M4xF8J2>EtcwAV7sQo7pT=~{E6L<@7_ja-(;{oftreTgb#S&{rMaeV18U` zY*jp)CYd%o7+z!{yIbDKPa6$IAn9XX$b+caGk%!W1mq?V_wiBxXSsDUKyabd3^s61z*6L?3qq>TUXrka!wouTr%I>vFtic%R^rET&_VlqKR;7>mPaRPuHw`9=Z+f6;@Mud;h5@Kxhy zRFQHI0asUVFwRl`z5bS>5obU?yv~)Fq~S5RD-w5W9tAOcc98KWb`Z}A)^Yah$RyNF zyd8vxYksPOq3x@l1+d-`rFDnV~pBmeD|2XdA!URcJ_Q=G9SGtvJ3HGc9^Wq^0zQ=ls z@8nA6WBbl~%a@l@qYn4}z&q(~d)PA0QF6g@&Th8jh<^hC6K1v$WgeJS{Vqz)9qsaK zkQ^kpd=Iv)W%;)`!XCGOoiev~B}q4bgCWX&1lsFwRPKCi(L6rzXQljr3uk@|RFWhV z8uVgtyquQbBr;DV{#j4#Wz`Ey0FTNUhz8{}ikz>#tfI?ToHUFAqSFh%3%=nMzVFmmCkFvj;Hc2cB$ zhC_S?Cn6FUj(H>Awvg_BAh?ZLADUwFbyE4Z9PjB`55TA1>HC!*2aew0uw>s$u=kon z9Be5Jvp%tdTHMqn5KozbIzHlb?}FI&9qycFS3Yp0j^lOH)xRfD>K@E*kem_cyeE$> zgjhy)f5lf991uvsLy0c8fmy%G!-_+{@KWf_5twiUfNtNHx9>yq+rpMe#VpDyb~U3l z8R?*6y%YG>-muT84pd0MQsFLBD6HEJJT+Lfr*dgLmk=8^>13CS*Iq@2b@9x)pyNGej z`uw`5uuukOx@D}H3dlqAqw4dPXD4+_97SWCJoI>T- z4h8K?)QqGQ5fLL9z+>iP;a59Iw+4-he?@~K>64Q6N*Ur9{?*9sH6dL8$3TC-9c)SH zY~+T=Fvvg>t9yDhf9$Ph@^bTipO2(ld}UT>%72&V$I<<5=G-iXX5yw!W5M)_XK;ZJ+keGgaO>l?H76pDHxc+ntIyl3 zd9^Ql3`HH9=THpFJYr-cn6wlg(3IeLdWG?Kp=O#!JaZ_CtrjK?J_H%H&g zM;bm>5R5#2*tF4QcXnZR^qs>(9O#Hgz?FjHdjngtz}b_t*LIL329tQ&)PZ5J+o^ZS zfVS(sOKI;%P%08N$ha4SC4ZquuQp~fClSP*D)l1HyT*>>nF1VE!DvJ7%Wm|UOQ*JD3kKP0Ox$7of4rGig<$OP>-|58kfg7bpH)>`S|GV3}dEo?yegYnD zGHzH-kDo}7GR}WbxScky6zx5m6_u;+{hH@?D&@8QeXkBBp=_1qr}IRFKW+M0^DVuA z14orGxm|yB^Kun3OBR!*)XAD~9q~Qwi2i9=`HDC}Qry||5(8QIfzR%Xp>OjrO)IH> z6=`a6#ATWa!Z^4095 zC-SUXF2Ys9xgD7IG8r+)b|zxbx^vw&PJs{75{=-{=<~pTtjBTbkMQWlOy>yrVAjn1 zI|NDLzNex?Q=pEQoMv+b)1F{}?Yn0{z$GIr3=IM~NuGWfK#la;?!+9kpFNKGUpFgMUCaHF~Hc6FP68Nspgw;4ZAkh}Dp|pH`8VuS5M-@OjbOb(CFRVXE!u%dNm< z;AVZ>kI|$3m1ZY28`NF-jP$e2rYPCt57>)g1yjUpc{_Y@)qPVnd5mD-auEQg8C`%f zsnRjfxH={d>7aXQARTv>pn%SMDrm>i(}8{BLKZ4paEwei>o^A)q|pU%94g#gv&K6-H&BI;v#FdVY$0W_al`##}>}P zg^bn&B7ErlPvvT)BkeU37s!f&WZkO%I^p81sBlKd$o!MVAU{2@OCEXMhop7E&H8`O z(WEK<`N?E#p|c@loP+G4+pj^Vk)Nx)R4F&^N_7^Y^~TfQ+Dg*m_b#gz2#}Jje)r^P zFPC^#b8Q2vuVDA?q~CwEUz7DyocxuXQ-Rgr&NY89HH_u*%%@^it&LYq)FC&}BvlWA zUc1vo$;~7VU@-x~&5{R(XE%%MWyBW7kkffz%29ZT`K4_Cj|1BEi8GVRiJ*DTjiizK zdjZ6+{GOjrSM$>UfdSOEKJ8B-kH4E&PyQXNk(H!Ye12@%X2)Zr?ISp$3ML{Ot@aJx zu8nv<(Ow}RzNwF$-7c8X_CZ-mP8LT&;ZJC{ZG1QU2Lm{Vkt$4KdZlq$A39YuoA#$T zuIAMDk&pe}+PHQ8(7Rxe*`?HC8Gcu-#w^$Q^<-uxK_iSC|C_S9&CvwAM%5C@HSxzx zyaj%0Bwx2Y2*})~vMGgCsX;N)Cice2Ly$`aa~<%N&BD@pm7ov<6*Z~I4`Yls=?CR| zRIp{f)n(=|jR!IS7FMp`h?c>l@K1+@PUA(hb7-GwH%gabWSJWTg*sbj&dQSl!=(=9 z&`)<$CqiY?mju>HbEK{{3)LgL#+9JCRZsQ$!8NNPWjktgXyLL}H6gCNQg8&^NHdJ% zqZxqIkm)WL=kMW|_NPM}yuD1SoVMqMZ2LYTkIHo~5iUU!)7p!RYz!#qwY2329~DtM zRC!SITr`~WPo%W2J$c9m36rGHH^*}#R(9$rXRE)@A|Gz1%N{&E2|cAd;YabSpx1c& z7yq@7LRiW*g++oZJl84k$NdPOv`w!FXxq;t0yC@m`?~VT3nU^u?r44tR zS_{5$^2B>mPuw;zN8oLjzKrOuZPpYtoD;VZ!SK})$IvKLZw=&;?um^pw*D7E`RH$o zMKT2(Gc9h4eQRjTFGdh21*pFcS*M|R>H8E#ym=Kk>gB`n*l<2H8p0?>G z@dvwiEppc6{RCUtG+dMudi>Xsd(YWy-&JXP#P<;Nlb`4nMDGTL9q8fW^m<#!0S&ai z=QcFwb}C6gwPqN>vXySe+BrdOc7GFhx>nVa2A6(_rk9^V%D6yZgmG5yr^S;v?LRv` z4k8`2Civg84~xYbRoa*7UTD@TJ9y2Sk74q5h7Hz^Lgt)mQWahlR~hJZ-3236^BDyE zFHe__u4gyarM8NVLM_)rA67*mqk^c9wrr{XAmSq0Va0JKI!bh6BzoU_ou6vxtI4}j z&O5qMW=KuP6IVTXF|Cgy=aTv><;bHHVt#|^54HcDxH4T&6HBb;w|yo>QpaQYQ`{iY zeI9-_gTtD0f7Ve_bLfh;6Vt`bONePb>We3}jag4sTerk6*1p4|ly%i9sgd~4{!8{X+ZZ1qL%AWg@~>BMPaM1)9MkEy%Z6x3jELtbEPz| z4&u|y4&)_e5dOI#+Cczb+c!F6_D#1|wSYg3)YWO9BUlQeo+DTRggKr=5Ql{l?kG30 zapPgBPo-rpzd7~x#sv^1*h3Yp7WMIM7HrbkLM1!&3g$&PW`|}!Nu3RbiKRmf{qXqu z`0N5LDFbJJQIvo%E8G9tTo{|#D8I+qKcX6$@nJTg7O+uIM!@V=E zs@Rn>veZ?Tlw_Mg4%se*cfM&ZUSnq<}_1+Eubu*}6b%~)!OVz3=<20{LK+U_8 zVvhSrPhtB3N0;5=BF;)gW%_h-k0?2c-nMeGuWMbSm-&-bV2e#AWGVE8W zXT`xsRtlV_wm)8(5taLj&hmvvLoK2)j4-S0-?FcWLORFN4YBW%fMc{M^;x+53;lKIWrk#8y5Nffiv&_8uLjWEY@r84Aoa87&Dw(sk9WhZgJvx^UkixFNQm6^RK zIRfVJUt%_N0t$^PxAJtseTi(?R517|2@=jArz7|)Q=4EW6Xy)T4)A+Lg^|8cKViz~ zM2UU?gSTQCfK_u8$|7vZ0Hn*adg zj>wP{OPH1InZW5a*ao&V-LQrgBwt-wX*?9dy!f2{z`N1M>qhJ3Vy#F>D=}EO%tTPt zKD|Q`W{>`nshMNBL0ICzzE8_AzVL_Dxu_{-K zzS=G@W_HV|MC%zV64=toSwH&89>!2PtPs+2RjuSNtpjLE&dJQr@1tw7Fj6@N9q?Ek0c8c)NFV;db`@f>6C z&C$Mo1Kj+!Q^0sNpK!O&@|`f#TFn1aQ<#j+O!3qzH(1Wp!u^l1&n{Zs-Cx-#2Oh&% zQl-dKjGw_+>TubmZ3__mC_`JUYCxL|71o13iy?u#$KTY(qgs(wJawoYzwsqiXxkX- z8YPwcO!?pAE~^N9;a_a8>2hR^J$9GClEEL@GH5MI9)l*4^b9Bmm*_K-@dr&!A+#be z=~ZK)%$A4+Y);8&N9N6L4Goqm+e<}C>`u@We5jQ~1v!W)v{ROM`Pj~pLhL>>0O|;= zHgl!a0G}~;`U-lbFTcgPzggdTiq)N;jSt&_IayCmn~@aio75DzY%NhJogH*YRF3_$ z`N<6ko>B|-1N^gIG?GqE$9xU!(N=v4s}REMmRILvPcQVR@I;@XC3b!gmi{BN`8i{2 zABCvz+I8szHtdbq)l|G`;>Q2*y>LRC@uH}9w?UJtov+JEZ!bd)bbZFTxT1b_Envp> zzE=bL>Pj)0(40CkIs8{zLb`i7U*kBB_D<^Gwm+H;Z62IV^3R^2mwzAkdYAo z`G)6bBb}FHzv>3Gk36R9gKeQPf1btC`(coO5^<)C^8f_@J}NhSW|g6@EO#I@ly;E) z8`0)T3q=i#7~os4TwcUE=)B)WbN&d8)u^v0NwdGq=ro{(2A-cvEMS!v7_Nr%x2iGl zjQio$!UISBHj2g^S`*!K#K`MYiMw)+{|0%vh4&J?$Iyp+=JMOTuu zq8$c3nAK30!Uwnq2WB@O_5GIp>gKV2k^sil3lL%y*Q_WC8JbezxX+H-v6$Ho5OYMVZAM5^CkUOsuL z^oY^jE2pIVNggh1hlj29l?tLgf4i(?lY?G{rPFo~FB|^uJQ)0#R+a&95S%`OoDwXA zta&BhiSw3lZsdO%4fRabK+VonHhepL?I{(Vl11oe@55Mhj|^ZJF`=y`S<=tfe852` z?jg@`UVhe(DNlP_K{pw=u`xY@y@A6^w6KmMFU1&IC=l7dcd!)XF1dr7F@e)K)W8Ye zny{W|{wUhM2X|ymNtUmVplzH+nzhpG&wKpAnjV--KH61jvuCyMR$g$mBp%^Yvj#=O zPl<=y1n+(25)Wi@nx|3aPyF#Q*bkYJ3<2zrh=;5TZfyE`3;T=NLOK5WXY|!pWo6=e zMJSpuU3-(Y1{Eb~5fVTT0Ep!(HCJ}&X7Q!4&8F}qK1<2j>x%lFlp8J>vq0g@uTbin z_0|5Jh59Am=mCM*9;@d9jV(qO1sN0~!kn(37aY;ah>@OgG1WFii${@e{U*@oExI#4 zeu_JC545K3w+mk!$gSUt-4Z2Y+ca%MzGzZ$87JA{Ujs)}Gw9tDK1}`@hqb&s90D@07NX5df3E(oxhD+ znLo&^7xKG9L4}GJTjqkc;7fM7wkTN?lCp5nHy=SxWP|ok_F9+g?N-#e&o1m;j1c4E z#hyl4XZpQSjRv~cZ8OqC$KCzztH|>UW2OeMEQTMx?&NnpU!TTzCf1SO2^k#Epz$n5 z)GO1xT4zp(4i8nIi~@K$+3t#;&B@Lvr=Cdg4avXB=Fb=>#x;#>1aXJzJ7k7ZX=aEk zSeUKgVmuEK1$PJ8t$ApEUfWBf+0yfuBX(7CoOaI=|6~Op1~#pZmFpv9PBM(pAn-}0M!#xR;FX#ZU)SrPftDEJ!S^XSsNU{h*6B&b7?m$GHI%4NF|4u4Qvkjgz{ z<=S03lb69gY@7iQvx;2?JaEQ_%To%R(<*Uh3d3KnechwO<_VMDWZ6N)Ea4i1JMQ&P zJ$6L=#x_pUVt`FAF~85|uINswtw0LQa@X+yHXsVF{DYg2AB34w@0lSLy_%y_Ic6zh zz|4QHOsT}3M{Fz~W_Ya~p?^fY!lv7?8E69 zN8vLa##(B=hb@i5jw38CTfiXTGN9r4%~CsMgA&wCG^hNU$T`6dN&!@@j?NZC$^>9L zeTKhY_i$FpwKcw6Tbi-r=!8ZD9B95R>W`KSeilRp-(&}tU0VsQF&&lp*YLAPcP-Ik zDA!lyg5Tq3EJPwEPc)_Qb8w26KD6@IG(kQ;fCUDk`sag1t!5m71eP(u%w)%{WM9W+T}*Oi6{-s{i`7|xMY=PP-qMZ-5T zXv%wf?1`*d0&A`3uAsciGH*de^wH4BotGhpAHEVHN|#-yHSR>Ib0Ft99cKnx3QE{u z*7t0o_V>x((p53Ht0Z!0>gDHa{?@>S=j&~=@SZK@7zQSlv+ST5s~$*}O03anvaz`e z^co5^7Q!q%JKa+ST1R8gb-rX3W&nRg$9sN4kkb>H;4jIima%Fs&ViH4Ve zC<*Uq$T8ZYvKP@Ye_YWvO!yh@Ye&z3Po4RBjTFPnFJJf5aORkBAQ>$F>RH93>*9%v zR4=Ie->p!XhTqKmeyTldkue&!hK6Afsu8TGwd!i2T zY`M4lf$$HeOcPXol`IBh@xT|>F@`weHS{f^Ty7Q3?}o+yF9DtHX0FzrzJ}axOf4Y~ zkJa~`zVVA;E~dQ(Ptq1Z7@Q}Bo}%wmOs8Qs7qJzt=Pm-hD;#U!?4u$jY#L|NWdf^K zSlV?5&qpZweI#o3Sk&&6DST?W5?5iB404s|-k9A*1cCBYxb%-#*;SR_NlG+UyZ2*i zvJNGhao{{4Z5%%Ck#nZ7Vw-k9SO1JSDw*c1-l%;tSq1k&()0krJ|qMG)a;2i4GVnADo;)j~Rf zH6XT3fP%L1Rc`Bcn0m>X_nWx!}*rQ4DW>aK}2M^*OI2FSOU^sq742 zzWkV`pP=Tf~zOBC{QIby*iK+wYm4YzU!VSZ5+( zdQ5@`F-X9rNYW>|$#3TMbXcm`{$@ZFZf?T;uLu!yXLRAFKx7zNI;{l0CFlZ>KA@i_ z;{Yn(<#>iF4Rfb~?i4r>$(KnoJipsB@J*vIWA80`*xZY7;ksRBq8@A|VlNiN5{FYl z`a5{=MK8^pvvF;yfGhx+{Otew;7b19wXS!&_Ra_+95M zRU+uD1j~GyXnyb8;;ThY|HhaOT01^%umfHDJS@4lx=%ckN24r8gZ=6Kc2_zzH=Ho| z(vvNxe(-AbwKK*(=_+C_3Z5pxj$QNa_I4C-3Xh2D1&GI2XY5f!uJLf4Mts~JPOi3` zrk4%M7t{7CAMWG7RdMOx#Qk-01rX=L>1OA!HFBGB3CG{av<2$1UGHr(t3P6qAp!ak z@Hej(`waRTb9KLThw0cPs=J3-Ey?5tsWXEU)Y))e?XBKtF#uuz3~)IRVA}-_Q7oG2 z2+ojQV`jQjE;7n;gb`H?d+Us(bZT{4n0H09sRL$LZZd#(8{FAFRJNK2o;9BA_Mm`aVo%9xk{ue;xjr2X=;jOc)GF*3_mR1?QNGx1ut#SOH<&Zbr%$%reKzEd z6&;-6e~y{@^@ohi9~gChwElST{83dm)!*?0W)P?wsn1rNcX{-chG6|L2%a%caUcM9 zqYd4A2d*7J7COyY@s7gH6*o+;a9v&FTiMX8pY8YBfvQ8jU6PY>Sd@UY)6sVkif?1h z2LhXEEMoXskSnLNcEw9v$24Z1Q)kbaQ(nW3s+doVfO{uyRCT4Gnm!utL<=1R>v%Yb zis99b6ODX9kT*^sr9uI~PVK~M*@7q9?DhCTb1g%RYCG#9pchJMxEwqKkC){{^*j4v zl__2T^)&WJR<huANCm<@{(uK`>D>QFKTX8oq4QF#!?BvlgNde^J1XxkaNmp`$ zufF$xzL}mD5u=B?@VD;tKRG&#Rg=;iI?4|g0(c!7{hII}_&0hsl22ahZ6Ym(?6Sbdf$!ocj-R#04>U&eIl^KANvSLNtK~V9Tg`kz7 zatxCK`RN^-iwu)KE{}Xl>)GhA+WEW4piYG`DT?^!4x~C8GyRQDVJaRoqQQLee$S8f z=d@7vKw+*cZ{Ki4@z2E7Tn6WyMhO=~ViqHtA0=mSwTKDgOcNrVVLxLe!jK4wYB@lhN+q=>hb1v_wDX`yKkR!9{&eI z>tDY2i?H14>}}Xnef|Bv`HkF90E)2rnJY^tub#}hVuYK<2_e`3j9!jYqgEui@AiHq zLM!f3Q0jhd;cRK4QKx1s6~qfN+j_4My&lMkesVOp2LYD{NSh7WUH7TFV9yX%-#gbG z87a#$uYFM-3F$&@c}tciYCuH$LZUCWBU5j)Pt6d5+uS)weJT&uQ|gUF-Unwc{^dy# znyw^q<3Cc!9w#&oR5yBKvNo@Sdoe-pBd^k|%rbNfUPQ`5*z1RYW?sQl1A|5?(FcFC z0n;x5)+mS>GL&-=<|&f!y}v zZ8-d``wD|eVWO5CG*L|s4taX}*0rFPp7U~4*-Y;tdA1h=8~32SWYbB5O-fd{hHml9 z!B>nV6P!0GU0k_roz~SMOEZ(yW=6$%iET6c_8(=Ve1Cwe^V~Z*A~Acoi>TWdx{T~S zwr>`|qa{xs?t6Bsq4J&6pH)gTJY0t}Eu-^Y;jS^Tk_#FZc^w&%wnQb|{sVetj*Cdr z1W&y%O=Bgj3r%IHzwqEkxma>)R!wSZY9}H0&jrL+8QWRWQCU7-3I~N4i#|Ss=r>ti z%uTPBACWsOZG26mCMIQtJL%S}sV}o7l3ijsG@LrVeHd#^9gydZ_f;NSes1!~`N5kc zS6pTty}aEvq;GV4ldU1zb-cO(iGP|Lt)w8U;v~r8lYHPm1soB*iM2_JtGS-!9q8K> z9f_Ezx=>7N`WPIy6ck+P_;}rYr*`qUm!M-Wcg@P)Z+BKryV~@jd2{;1KHw?w3I%&X zb{Hv^X5=5r(Q~=m>%q{ioL(!`o)%)`6YM~pIC|$Yqi3+93@yl`c`OG>>ZNVY0}qA* z$W3<)cBv*u4+wW|Zx60Z)<36t;gxtm6EC(xoZS3O!M3TfOpJz(kbgH| zb5dO>5QQoiFkZ{FndME)-o{IvZkPKiIS!N6!tNfv{g!hM(yR)$tJ`w?;Em=|!1wbX zkd14rfMZ9%W^VOJ7=+YeYl2^ZPPtNV1k93vXh(Ae$YHMRf4ORYBc5@mMUK#wo@*!m z&7G9AzXC{QNLi&aHne9*pY$naScvR)!GfneyKw}ezU<*PdNmcPJHK6ck!%L~{T{Bf zu#2VufxJacwLp4&<*6+zt?jC4zOZ-_`U{-V=mw&_2Z^!h2{~2LCZfGHF2JUoh;Hf& z8qcdl-xRG6^i$0F7z1wsQ(<`86FoL*f~XSlj&SSd%_5~FaUcf99LBl~?E$W64YwVS z34Sg(d9xh9TyI~4KWP28(ZB*pUlLp+Y9(#2mXj7XJxAxXZMkbT(OKI;6psyS-l+$A zIg+1|O2+4VCLc5*yG_AmK>D$gN?*>C!F!M#>D{km`wS_rkvM+`Mq3<b?z>Gyff^BvD~F5Tl~&b?ngRMkoNb@qqJ043b|=fHNA?zinmgTcF62A1 zTmH0%-2gLM_sUk~qz@kseZwirV^Y)}Kl4mrV0SI7*s1Wl$zCLKWoi9cSV+YsSzGAF zKm~;P9+NT4glm`804EKZ_|=O^pN_2N$%l;A!j!dp99=L~LwTY^$9W_#>0xL`_~K=5 zN}PfW^rF7lqg0gO#yKq$aVl*&UgQWrL8SLf=~uI(G@NBGhP9oK(LFe>G1&6JctG%( zm%!2`vxh!?uew44OP-zbLiBG6@^O*2{EedrnRmmVg@7p>n7Wsm0kpE+=f6ftyU*VD zUK{*#@-5_Xo#lMA-1USDndMh5<9;M}>>|AGSDV+xA@!st@p zrJ3~uzVRv>Z{D8Ah>pUy9qX&a2}u{jXl>JKT%y-A95teu>@(vCH3)bX#oe^@$4~Zc z#t9s4ubF38Y*_W;yu1P)2XZg?{1`mm>aQ-nfIT930D(nxH8xni$;UDwU6Qwj#8s;5 zx(jJFUx3Ff)a&5M%TZ}f-iVaA3W9pyc!@UFUaiB{onunYdvo3z$N82riLCS`W(p!g zmi4Ht58$B3M~W|=YlIrTBpv8~rjaWdn@>%>JW-nma(!xx%uE;n?wRw*uP|QZ`(U<; z{BI?Dk4eM$Vi~J$iX+RPuATir8`=mWaMev=a*osS&;jwMPPX8ApC*^LC$o&yRo^HbgBKi(Sw|1^?n^=Aj#kR#AkQ81 zm|~E)T@Enc_1)B- zIfsMfw?4+OgGf>Ukq0LEO>HAc3;Ll8H}L*kbXnjji3F z@NQ19Al=f{H#jqA zMn0#$v*0}QWQ)c(`(W5^nMlb*B(|g-&-T?{#ZiJsqjdvl)-+7EOE0bvA5zceo&7!uB1#u`+gkZmt>k9<88q}V zDQq-l?ZXb5>^BVJP=y}^*enC_*W`P;zxrRYhp6jtNsQ1=L5o}GtlBs&j?(MlgzB^; zo-R~wdjQeZHgvpLbzv>NCNMODiO3w~%?hTe@LaZ`Al?8pVap|ibxnhgnA$&rkGUKq ztC{aPV(GgY?-x}M1=qPo;Wj;>J6BxboXn3zmD}T6b#>oU=s=Gg1U$f=;vHK+rzbWC zV_iK&7jFDkf0?G0i{_p^MW|TGO*%ihL{+XOG9HWkEr?MNdB&PIjXE<3kB=n;RUe8# z*%)m~%)4L{s(QPeEb{QEL%TuuDM9^5i^={Tv&c?y!n?#!1PXt*4`;!Jb>=tIq}XL{e-_KQY&)gDWLgpf(ZWnZ})qlb*4NY<9GxD^c1}` z__wT9a>DfOY{f*W1x9OACiLD!1X37tU+Y3)X2mL-&qK}`pL~S06ge{CBUpf$7aM=% z1N^Rzc2zR-vq^4(s2IDTe0c~MvQ`rY|1=Rkw`Ok4tWygJEOo*%Ow=ZCYs{McVioVI zp&KcI$+$_*jyC4pUUp~lmuN~j{`?>XJ7M{G&T12Puf1NC0CtFfBdB-*YfcZI$xXu8 zfoQQ-aJKTMVS3GcV%d*glLCL!D2K8YT1|OMH~CZXzfe!P5HV}65z#J)rCG^7sP0_h zdsUAIH6NZiRV*1cJTty@!$5?n$}=fA*jAR9_NE6F=#n42`oZCtc%Qyra-Xuz_3v*-DX)2Z4So>?>D2YCYS#U}qXu7#J*;)i&r<2PN8edVCcysDCh1JN|W z2ZbPm0T=MtfKR;Be_Q~Z)*pZ9bzC!^g|YFO3@NkuLEqIqRF0_|DDytO^szE498B~& znw?4RxV|NOn4UMP&}G=t=174T{~GCZ-qeehH0w5Kq}xA5Qq7vUjWOsS@;wlkJM<+5=v4pc0~*6zhwFhDo0%nNDGe<+ksdtqG93MCDjh?yw<5rwGxj(0wCazZ zF>fY|YH{&%vupQ|D00!0#K@#hrDk|bycYqZFt+WS@*trq5T5B8T4@(bsRT>rz+UOc z`F$BcXKZhh{^uX|DwHb;gJMn7KB|c4f^KQQwAb_m;RcA-M;Wmr|kCPtJV0uZ5806aCP02R7ym z@9&$n`mqQjF~+MCE32zTCnTTBZ=oK0sn8(few;9ytq2yA<-Ew~_zWqVT(A9dlQ&OG z{pf=wrOXvGn?T{$qCX-foySFC#@y@I8gDfmOEVFsBQzW`O-oog^_$7fGE0&8v+Vbo z?T&}9vRPYtHM-fhKYe!U-`semqq-G~94|NM=?YySe_i$TT0V`E?Xs1F9rOj&YvBUn zqf<53r}8oPlh==2Mc%%PS-#XZBEIsX^od`GL2e|AmK?+H&7{oFf64=X__`dI_tvd* z9(sL1HErr1?#w;ME8N9-IIc*1aIA0?#iCYrXxCpKw2P*=or( zRD9N?>Pam*OBWkRBeectF!oxdec#d#qrYLk4o}|N+DcJzqT~K)ghl7?#ODv{pjX;e z6x6=jbnCUOzB6~&o~jJ~!>5CN``r^t;^gD1nMz5%VJfLLTw)l=O1(Bru{|>{yJ5q* zw|X_S+zG{ZVy3rh@-enP(w{ciO>*pNfgU3fk82AI73vkTEx-EaH#OXuH;jxUCAVbM z7j``AKXk&UVCp>6!{?e>CPnbG)(dF<%X|%gG0f3|O;`E+d38ODDe@qG?UILRSXXTL zi{rukN8<0|cx^f^iC<826}+NFy#4k0F?)aDgdm6R8%1l)<#$TMpN6#*zQrGtw)V7Q zImhBsl5Z~kdC=~nJ)QgV2OIwp(=cg=TkEp%(0=Um?)H}LE@bAqeZ|$VnTKoX{q6(_ zp`)OcPm!iQpUQ{e6JUlgj7y3#>JNpGL$GQJuL1>r1@|}U&}&a3KJTqs633QQVMh_ zaQB1e%>);pH&;SN?JU0UM{47w7avHFo!kQG3$Is#K=%h z{#ZJar-m=cF9|#5;qLeaH&}NBaug~q4IA5$9wa>e=^n(H!K@Js(_Om)&78PoWwa2V zo8VT0u^fro>%qM|8i<*D^-158_#&0kVSEz}GPx5mS~h4=RxH`QgH}}C2kuC$(#WPh z$eis>qkL$yl(UdKu9!yoQlk&b52hPm*{Ok)FvTKTS%-e;c$;p`$@uB-5R!o4qZx7@ zKF)VDh0(!c)-qJ@T;4(ivnE6ArowWTq^WpUMc)|*k`T^vIpkkW6nb*{-ZpU39do`s z+ed0&?r}W^S(dR`p$UtY*s0JfxQEpZTx#NIA%wHL65jB(ug-P)-XXr?rT;D;QnnmT zx+JuHjkB7JDb+hK%G-Lj;nI5h_1(y9n{oPecW{kG)uP*ryIdM4!2q6M@F(FLQZP~~ zYZMefp*BZNlwE|mbiZ_GoLxjO7!=X=s%~@^^}iQ+dfFhYaXiP8ZgerH-(ugdSI;p< zq&01v=?-Dt9Jfea))y^oMqtKoH}FR}d^{lvOYVW$a$(47cu!5I9yhtQgp41j1@`Xa7g9TuHHi_? zLnTGiRyNc{e;;XBkcN)&VXrhMU=~1X9Y{zqMl4+g31HcF5wBIYEvKTi$d5+-+*UsZw_idr{nAmxAr| zW@VW_3#{>)r&Z#CmH-Tv9^c>+>$D{l@b>}o%II!9#b)y~HMjo2uy-0^3IFMqZKz4j z0Ga}ZQ_3y>c9vLo%TU5!Bn3}q-h)fKzor3>5|L7Fb-!!cx_4`%Wf>cYs?s;LY#n{C zF^nAzBf~`g%4)B?P$1DAyWzmNdB75iyxOH9Fk%C2bp&I<`%jvr_+ic#?2$;))NP-kmV<@spX9llGYIcpX8_vcrN44qZ3 zl^V#psf0i!IF_(A26hn%QmzJjqFv9ZH;)_z`p)|BC+`O!?=9E5YugXHV+zch$E{XE z6UC7}{a!Y`Lm;iRBy|9N&8=>P{pbM=z~1CWw-Vj&T;2Amk#Yzj!^>>R`y&4qcR>1A zMI!m)H59TCCj9i(byrl{qH6?W0JG}E-(N%TJJYW#`!(K-n`h|`3sRrd&A80MrX3R^ zf`ZAI8|l7{<3fog&n^9?i$%_^bzdX488%|L3+~D!u9qCI$s-t!-9Mw zW#DAqHDF$`w7h5_J_Do=K2Bru%|s51Njtn*zsN2+vLQ1kkszFMpRb^W_QI! zx9g5j&;6ADP+G_(w)_<#>9b+53N7@`WCvK>j?6=oXV*-G=WqieZb#Zb8etl5j~2~l z)|zh2{oCW^{Do@X(-+aK{)Q7srRFQ(H!3OBQJ(NE;CI7q3weDhj8Qzx$xe$(<{hJRzl$ByRx|B@V~#egu6m*K>tIc!it$ zU54RR1iNP00Q#M=IMUDc3y6Uewhh(h__s%*$eZqm7L~cp);mgicx;2z;bai^@?01wmmGHdt*VrXdYeByfT5!!Uw-Eoo#q$XxaS*y%v(a&?>D za#vizXrqpSGde$Q;_cZ1{xYu}KjMlukL;Vpkaf!*sLGgaXp?Fm?#>fQwC%>&K@Qf$= z#TCTT3+K$G;@He5a>}po13$s(eDD5RiG~CLj3ZG$_9Fi)e<6v|ZC1y;(WPjHne2q$ zDUGt&3>*qS{tX2oi&ByIV>qr+{dD<8mFi@Sh*>v&Z5 zK;x<1=_Y*cRf0{kh+2KY`T~(>alYntvml{~vg+kqkb}p*<{Aq60}0AaoN7OT8G+L4 z!TsZX$|9`g&d9!X&Oy7!N}o1T^4z_M-_HN-l(|GZ!*dD2zM;D2?*`_<7^k17=WJNT z1hb`KD&PKB`KWYCV;RuJiOaRV1U4N$3j{{XFj6hf?gE$P-H%hJ!3aWB5tde%X?Q3T>FV~GoV z-qj3L^Sne@`R5Z=dk7QKuz2nx>UH_r>V7(&dJ44iPF$3%-4mUqEYW8vVsK3zMK zhUF7e$^iPw|MWKxVreK_fJrPw-kpy5RG9a;FDvd4(O_lM8mlj)Hw!)`DmXL`stC* z2ayw{&dk+e1|+}=XbM3g5Id$K5wNcZYF~h=9|sd}R!PhsncWBDU7LCKQkaD$mPVSa z%*C1!zcR)aS)$TazapSp3tPuTeSvSq>yIyh(LMnJxT%V0zL5QO?bSXZwf?X(vUfPQ z|Lkx3Q*IC|RsKAIT-g&S9{xB)`ues3`9@hbk@{rk<4|60t@ue!3FuTmeE%hv`|~#p zx5Vj#x_6d5z5XQbN(>BiG8PC*5AtLj!5>+&+B9FBUnK-jduUP&o_=p1od$+{maf=L zcyuySknE#tVkGn{K|LsbfdgCDg!xi0ee3erVWxW#3cp6FRC4&E|HD6JD~oMtX$JT7 zWG=Sbd!E6g@^&lJu*2A6HKOqN4_!&0bB`E<-A~ZhX~Awk-#>SHspkKP*z1D3@?|uA zoqy|%bG5}oIB^aJ^2nNkoc=wJ@9kjtUue%fUQnbh!f)TWQ!hQ4%kXr%jI;xPnOl*= z;8B&UA2ZO0lR_5eZzYXAva_Wl5O|bNd55)!5-k<{MvGw0SxqKY|1-Z3!gTXp;wqjb zwv`?@hWei%o~qwM^B7f>L#Dhptkb(;5g!;&{lmxd*!>MvQBFX76UMTui>vdh-sC2v`h2smx>zu>%0>Do=csGd||`*Mny`QsIT^ z!_ox=1SaBu`%S*_k4vDpNkMJEq3$f1y)&87TBIfd#VN>EM6nl?06Y5x1qB?#aza2U zIwFlePQ{LtOAw4UbLxt{t~lpqphlt=J3d@m)p+%FSRnhe>K&l8z_L~8NnFXdbt1AY z2ohH=Pa_+;*CsgQ%z!K9!fjZ8q$G#UeoTQdvp=|;y{TiCmn=I@nc^q!`f}`LUU*@G z!Tm_``#trJm>4c4*#pTER#-A;?haN8H&i27)amqj#<2cXP zfbo~!>GhO;{%3KOcoCsx5zpp|ndz3{q2p3w^}_v*n{u6A6T)HrrspQX8MzkQZDY5w z4GJKHQ<0dDC*J3K8%0H62f`5izL3#BJnjeuq*tVzY=y3elRZ(MQ-|AVZFj+ajt-*L znUP@;@nJYlI~DJitjXotweB+f`PTFaW6sux&5aE)tL9z3qpt0GOgI2Y5F|UTG8Bl1 zSDC0(Wqw-sy(G$u4W!jw@!R|D7{@Fpp2Dh5onyk`yrZF{_~KcRZ|l9jz^8d8YmLZH zA$JQ0(T&Kj3-wJ+-WhC{0A<=dVf|U2^Alvt+#c(zs(RJbM#?n%Q+Jnx+`X35dAL&l zERiY?xm=PP+;x0s&6T@7#O>6@A3@6mop-!WoCNVa42!k-^(4-@2uEt*d+ONfbC4`1Tbn6vsbJK0J2 zqQNFZ6M}t?WiI*GO1@@OCt}-n^GmGr+-@wUufb%t+L3r_>%Q>0PLyRo^GrGu9lGAy zD3i4dx7WLw7vLUk>b-f}n^1dHz@BG|j;wRVjzgYFP~8TX2`En3xk;HQ!j8zA_E8xC zJ|+qt`VOBqg&q`FOo#HRbeJhPk1w0^I=^OR!7Y3LEf$=#+iP9VYy=F5dTs*}yub)` zcm}a)#^R{Vc_4!9XqP}^|E<02<3$sb)nHuJ48Tk z{9?$oV-QNV3G()PCzYd|=V3F2K*@~-{vMluVNZ}h-yY0(QGo~uaqM6JLvuBA8g>5G z^vmDt-hbXQ^ii9oV06f zul?ngR*U<)`e40aJJz=z@#If&g%69dKifpZBFJ^_$sqplo3j%5(%imtlDZ=<+IIYb za^>Jxx)58&m-zLIF=ekjct-_1xD9hkin^=SD?)3LKPIQ0h9i%DRO-+oy*>BZf_&gZ zYWhbew{N2sz9&zLKYdY=_KBJ?H8=37i~B&iIuF5Qyrhy`K-yrh9?jPcXW+4?a|01K z9TL-i?QfT(Dl8hta0Gkzl-aOyT^pMMmiaowPL1`_#K{x;X^hmzd6A$iibuzFell8B zqO<^zY{6XW{+jf)v|6ie@AbMhI_H7UPs&}m{a?>l_(ne|k~tJ<=4VT4!<(C%59TZc z?eM_v%0bm-@L#YUMlo;4wzcI|$S)}DYK9R-+UdWICnn2H5O)1(h^}Jwpo)eu39_U| zvY!<$HmAP3qi0=}QmEhgP%2Zv|0~=sqmn;6z)>tu#+Bu~p{b=NF@9*O{skeEHOYr2)DlDmBc3Uu5U`hEG{WZ<~)qFl|sRLJ+|M8Ijy*mHzoAZD3 z5O%O`|5fMzY7^xK?;m2v0idAxM>(Gz|J5JtqM+)(1V13=NC{-se{+84A(vtjPGwG5c%bO!)y9$`pNYoR*n#m96g5H`z-^&LaYKG)Y-EV`_J z*aF_*6iUfXwP2G0(NtvwK7f7sk>gj`f*Y+YS|b@Q02-|H#xm}N9`6j;4}zqP!%10{WkQilt>BNiIk_Xej$# z>iNi9~9`9T|?TAwm*Zah~$9^@L?G&#MchZuz6852@_EGh~l_YC9)EH zQ0a;C5=)3Eq(fd`>7}h;7z;)o$Yr1a!psUx3Ci1q*+WQ25O}Rl0?rILfl%+P@x1r4Czp5af;ypZf0o zmOD($iDEuAl`bNuZyHhq7NV>RJ|lyG5}@(IoDypswo$Qf?ZSAkECAmez_F7dOY(FG zGM~YQ&c4r}9KK7g$uoCi0hC>@F9%#MgT3H;Mr;-T0t@~7bE#Zyxs6{AXP=#k23|ex z1DK`3@R0ZU0btbyXPo{a91?=&j-DlIlZKVvs;RCHDp0+`KYe2H-(60Q_}oT7DHER+Va zVgTT=&4txAW}rVLgo5tZCJ~hG$EumcU0UQ6CME8++{KUIASD3|EPZ193)_fMiCs9u zmuK5q!52$G80+vC%3vY9c(xwsB6Y+(w(N1R5y25o1?f!4aMJ=| zPVzVnlJJw-UMpm8E=J-V=>M)>x(s51fqE!dfLai-+pF0{I{PZC!jl#Efv2QECYff@ zOBgRPu}LzO-4u`qhia*dIQGnTip=rdeK_ur% zmq5v=`G#-?Co^i(e=@CiI2pbt>KA+C#(CDi;ak>m3}?5g=lumIWM*dzDj`ryqRhS? zFmEo7$V+5v1YB|01X!5C7X@OoxE_{xgZ{YMTVLjD=G~W&2(@VAdvwv0s1>YfEjZX7 zPwiMu6N;RNQSf7je)m43&C$z1cLwCv<(uM&0U2BE&QNMGSx&Ij51EARb6i5O{71Is zAL9)dvHUe7XqHk8 z*iQ)^B?v*7lfGE#UoI2|ZTbO$r=aO6K}ZY|x|x9A5+q9Jc}3kvS=H)llrs>Xu~TR6JYS&(UKaaPY0chn-`E?_suW|=+#;|c#rD&%%JuX!@!R(8 zBPin5r!V9H-L0>?o}EcAdlosgA#L*KbvMA5avkqrs_WpJlW@sYr#S@MH2zEDS*%H3 z$lEAYtP0~f@{jD@G|+k<-_a3$u8S-LbdNg{+Yk1}B|0bC_Jrz(k{^Q0$eT+6!{tY^ z{~A$74Oz)zb;V*|x}ynkxMEnR?CF&pG4tnNJ^pm34P{6LH9K9aO^LTIf=X@7NRCTChRNnESxoDKFFEy@ZD>zYCW4Up*qeyq*SpATnJT zBVQdV{o9I3M~9 zPtfv77qFZ`a`;P^Ex3(rVkf+o1W2x?*a!WWb8>2wsCp~(_7>=7KGypZ#YO^KEkwRn zmOB%}qlyWGP=6A|*bu+;j%41Z#-Gd7;mo&uvMcm!wAsP+PR*XEuiqC75v->8%!Re& zxjWU6A3juE&XDb|I(#($Nqpcl{Gdw0pcWPFaykXj@$>W|Jru5gdV%5>hEF3lYH}${ z2>tZH4SKR12CHvh59p(wR)OXMtY2&sl1`^9L+S8%gkU_Idk`wdvl=d;CIxWbAmh0h z+w2_H(&z}f-u&}7KiF#rRoH$_wl@eL`ET5}al>v4$azSIfnlE8buKI&F~^6TtLWZH zfdn}2@6r&!N$Yb;EZW;kOJDUAnuT}kn6pApteKu2jET;bfl z4grrMhi9Ii^&8g6(7UXR{rHt*sQ>mvj+06uawH&jsEvoqubHo4DR3 z;zufiOr}FR%)d4eFDMM$x=eC`ZN2()`KU=D?o6T9bVP9o43h(eN^rSZ6LR7J=cE0z z5)30Tg^KXlqai4jeZgV=Uxy6_II|YL@jKHfi5Zy z-V^`JuKcum0?0G?vtcK`z^k95wQ4tiYW0^u#s9W^bOXx)+8vi%PrMcK{Kh1VfS3DtapuZC~`e z`fQCrh*J&4WltG-3HmBGhz{T|3_{V}APOqrk5U07#fQ@24|E3X^VES08}V(LmZCZI zkm?H*5@AGkuEI@KPmh`1M7ny^G-;$kS#uSd{=E4qF#V9-K%<-;$Q!fA$5kH0_g0`# zX?p8Zy`Nr*szqMxNElh}n7A?mMq|adB&95Cjc1{7KC%e5bZR;mVj+}-HT^b_m-G@} zTOE7jf{c+8%DS^-aUg6XeUX}QSe-@{#xDm|*&=DVnytvFByX>0anmTP!H|h;Hv$NI zXto{S{HU=}cM9vCm_oF{Fv8Ueapl6K`-v?8UNw%sUEroS@!6PQ`gV9ki+fn1c@Ovw z+2Y`(^iPk+@o|ON_+GIS;hEp-Y*&(}A7-AI7?E4Q5rHho@=bCyK#14kWsduowTl{F zR27=LY`whzUHy$htgkwoQ;StM58^$cwf=lTppKyX_RHra3Zl~$;2r&?KJ&(E(dK)s zurq$fqjl{qyVw-y*F%Lb{p3PmKlVxNN6PQFwq#cqW9>*Tc)@^%O73;^ZyymYO}P&< z0vTJJxVhJ#8n+_YiOOJ)8y+T z>7u51b+kqU>8bOdxc`n83GdL&S=VHzZM{!g!$*7RffKj}rYqZ;mI`G&XJHYy({W78 zAt1MRVqk6qRTcbYhUK-UK9wW&{ayEGfBjn<42olsmZ6U6s|7N2*^(Qtgupkd4JE8i z$F9E+e|MuRp5>8KardcPf_v|cScUeoMajTQ#?vbYH$|U?yyl`LSeQ{%Pfr4-<#!FS zdAqE(0pLtgoSWWkuR?2Qz|vDoWO`$W8c{zLGW9CAX)---lZ0KaqA^&{ZaQpQ@xRbG z+>9NQ5)+*@d&MWXbe#(57+^Urc#fJ}mmGu}=xrxA;CC);YeUd{h&8iYe9p7rD(dYO zQ8P0utFr*DtGG`$sGoga4!v>d&4W%L^9n?{^6L3Z2TP>w2s)8Qv{!at=g#QKx4Tj8 zNuGr-$q9(-z{jMt?wZp35sYG zr@|25+nznbwH@x$o8AuPxO5?1@`xpyyAEHI@%e%h=sJ}M;WOiS`zttVVUHhW+^l15pq-pXz+(K7L`Tk}!@XKro!< zwj-#~X_=a$YP9uts%-)D^@+bOxxi8Ztd&r!t3_|`^5=VM|Mu25{eCI$SjA`CvVX2S z3dYc`@-(RzFA^89-VQD9_>^op3*(^S4Di+>#iS%&4aNZx4D!QB8y?Z#7riTpzW2b`4 zJNsbWltmK>n__)HtbO_?zkHkHo0D9t=;6%uY!fS@V1H5A%AIb?v_3Y+6j7lh8A_@w z^5)`~{oSTX_eSFDwBza@)V&Lb|eAk(6it7RJqot;&T6Nz#;(q~F|89%` literal 0 HcmV?d00001 diff --git a/mobile/src-tauri/src/lib.rs b/mobile/src-tauri/src/lib.rs new file mode 100644 index 000000000..2d769f67d --- /dev/null +++ b/mobile/src-tauri/src/lib.rs @@ -0,0 +1,13 @@ +/// Mobile-only Tauri entry point. +/// +/// Deliberately contains no Agent, ACP, PTY, Git, sidecar, updater, tray, +/// multi-window, or desktop IPC state. All task execution remains on the +/// configured Codeg server and the bundled React client communicates through +/// HTTPS and WebSocket transports. +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_secure_vault::init()) + .run(tauri::generate_context!()) + .expect("error while running Codeg Mobile"); +} diff --git a/mobile/src-tauri/src/main.rs b/mobile/src-tauri/src/main.rs new file mode 100644 index 000000000..b9dcbd6d2 --- /dev/null +++ b/mobile/src-tauri/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + codeg_mobile_lib::run(); +} diff --git a/mobile/src-tauri/tauri.conf.json b/mobile/src-tauri/tauri.conf.json new file mode 100644 index 000000000..a49d1bcd8 --- /dev/null +++ b/mobile/src-tauri/tauri.conf.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Codeg Mobile", + "version": "0.20.3", + "identifier": "cn.crain.codeg.mobile", + "build": { + "beforeDevCommand": "pnpm --dir .. dev", + "devUrl": "http://10.0.2.2:3000", + "beforeBuildCommand": "pnpm --dir .. build", + "frontendDist": "../../out" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "Codeg Mobile", + "width": 390, + "height": 844, + "resizable": true, + "fullscreen": false + } + ], + "security": { + "csp": null + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.png" + ] + } +} diff --git a/package.json b/package.json index c76bfcac7..e9aa7ccc0 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,11 @@ "build": "next build", "lint": "eslint", "tauri": "tauri", + "mobile:android:init": "pnpm --dir mobile tauri android init", + "mobile:android:dev": "pnpm --dir mobile tauri android dev", + "mobile:android:build": "pnpm --dir mobile tauri android build --apk", + "mobile:ios:init": "pnpm --dir mobile tauri ios init", + "mobile:ios:build": "pnpm --dir mobile tauri ios build", "test": "vitest run", "test:watch": "vitest", "test:ui": "vitest --ui", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d9158ed0f..9f63728f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,6 +268,12 @@ importers: specifier: ^2.1.8 version: 2.1.9(@types/node@25.2.2)(@vitest/ui@2.1.9)(jsdom@25.0.1)(lightningcss@1.30.2)(msw@2.12.9(@types/node@25.2.2)(typescript@5.8.3)) + mobile: + devDependencies: + '@tauri-apps/cli': + specifier: ^2.10.0 + version: 2.10.0 + packages: '@adobe/css-tools@4.4.4': @@ -3014,6 +3020,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -4390,6 +4397,7 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globals@14.0.0: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a3014b1ba..7535bff83 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,6 @@ +packages: + - mobile + overrides: mermaid: ">=11.13.0" diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 852464b20..df377d06c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,6 +13,7 @@ import { OverlayScrollbarsInit } from "@/components/overlay-scrollbars-init" import { ClipboardFallbackInit } from "@/components/clipboard-fallback-init" import { WebConnectionGuard } from "@/components/connection/web-connection-guard" import { WindowResizeGrips } from "@/components/layout/window-resize-grips" +import { MobileAuthBootstrap } from "@/components/mobile-auth-bootstrap" export const viewport: Viewport = { width: "device-width", @@ -58,25 +59,27 @@ export default async function RootLayout({ locale={initialLocale} messages={initialMessages} > - - + - - - - - - {children} - - - + + + + + + + {children} + + + + diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index a02ef36fe..5cc431fd6 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -4,16 +4,23 @@ import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { useTranslations } from "next-intl" import { isDesktop } from "@/lib/platform" +import { getMobileServerUrl, setMobileServerUrl } from "@/lib/mobile-config" +import { isMobileEnvironment } from "@/lib/transport/detect" +import { setCodegToken } from "@/lib/transport/web-auth" export default function LoginPage() { const router = useRouter() const t = useTranslations("LoginPage") const [token, setToken] = useState("") + const [serverUrl, setServerUrl] = useState("") const [error, setError] = useState("") const [loading, setLoading] = useState(false) useEffect(() => { document.title = t("documentTitle") + if (isMobileEnvironment()) { + setServerUrl(getMobileServerUrl()) + } }, [t]) // Desktop users skip login entirely @@ -28,8 +35,14 @@ export default function LoginPage() { setLoading(true) try { + const mobile = isMobileEnvironment() + const normalizedServerUrl = mobile ? setMobileServerUrl(serverUrl) : "" + if (mobile && !normalizedServerUrl) { + setError("请输入 Codeg 服务器地址") + return + } // Validate token by calling a lightweight API endpoint - const res = await fetch("/api/health", { + const res = await fetch(`${normalizedServerUrl}/api/health`, { method: "POST", headers: { "Content-Type": "application/json", @@ -39,7 +52,7 @@ export default function LoginPage() { }) if (res.ok) { - localStorage.setItem("codeg_token", token) + await setCodegToken(token) router.replace("/workspace") } else if (res.status === 401) { setError(t("invalidToken")) @@ -62,14 +75,47 @@ export default function LoginPage() {