From fe03bb1373121f0498a7b793d98b0a4a73509a99 Mon Sep 17 00:00:00 2001 From: vitaliytv Date: Wed, 15 Jul 2026 16:56:49 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat(owner):=20M5=20=E2=80=94?= =?UTF-8?q?=20=D1=81=D0=BA=D0=BE=D1=83=D0=BF=20=D0=B2=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0=20(=D1=84=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=20=D0=B2=D0=BB=D0=B0=D1=81=D0=BD?= =?UTF-8?q?=D1=96=D1=81=D1=82=D1=8C,=20=D1=81=D0=BF=D0=B5=D0=BA=D0=B0=2026?= =?UTF-8?q?0714)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ідентичність-handle і scope-деривація з owner:-розмітки autonomy.yml: - Rust: get_identity/set_identity (локальний конфіг, PII поза git; merge-запис конфігу не затирає інші ключі), scan_owners (один прохід ФС), зарезервовані метаключі owner/since у validate_autonomy, fail-closed гейт власності (check_scope) на write-командах spawn_approve/spawn_reject/human_done/draft_plan/write_autonomy; нерозмічений ліс — поведінка як раніше, «нічия земля» не блокується - JS: scope.js (effectiveOwnerOf/deriveScope: mine/boundary/foreign/ orphaned), фільтр черги рішень і особистих задач (decisions.js), дельти (use-forest.js: foreign-рядки відсікаються, межі контрактів лишаються); parseAutonomy ігнорує зарезервовані ключі - Tools: whoami/set_identity/scan_owners у каталозі (headless-паритет) - UI: крок «Хто ти» в онбордингу (вибір із handles лісу + вільне введення), ідентичність у тулбарі, бейдж «нічия земля» на картці - Тести: scope.test.js + скоуп-кейси decisions, Rust check_scope/ scan_owners; 135 JS + 10 Rust зелені Критерій M5: два власники над одним репо бачать різні черги; ліс без owner:-розмітки працює як сьогодні. Co-Authored-By: Claude Fable 5 --- .cspell.json | 7 + app/.changes/260715-1655.md | 5 + app/src/components/docs/NodeActions.md | 2 +- owner/.changes/260715-1600.md | 5 + owner/src-tauri/Cargo.lock | 287 ++- .../src-tauri/gen/schemas/acl-manifests.json | 2059 +---------------- owner/src-tauri/gen/schemas/capabilities.json | 17 +- .../src-tauri/gen/schemas/desktop-schema.json | 162 +- owner/src-tauri/gen/schemas/macOS-schema.json | 162 +- owner/src-tauri/src/config.rs | 48 +- owner/src-tauri/src/docs/config.md | 3 +- owner/src-tauri/src/docs/lib.md | 2 +- owner/src-tauri/src/lib.rs | 198 +- owner/src/autonomy.js | 9 +- owner/src/components/DecisionCard.vue | 6 + owner/src/components/OnboardingDialog.vue | 60 + owner/src/components/OwnerScreen.vue | 15 +- owner/src/components/docs/DecisionCard.md | 2 +- owner/src/components/docs/OnboardingDialog.md | 2 +- owner/src/components/docs/OwnerScreen.md | 2 +- owner/src/composables/docs/use-forest.md | 3 +- owner/src/composables/use-forest.js | 28 +- owner/src/decisions.js | 30 +- owner/src/docs/autonomy.md | 3 +- owner/src/docs/decisions.md | 3 +- owner/src/docs/index.md | 1 + owner/src/docs/scope.md | 37 + owner/src/scope.js | 67 + owner/src/tests/decisions.test.js | 38 + owner/src/tests/scope.test.js | 68 + owner/src/tests/tool.test.js | 1 + owner/src/tool/catalog.js | 23 + owner/src/tool/docs/catalog.md | 2 +- 33 files changed, 1197 insertions(+), 2160 deletions(-) create mode 100644 app/.changes/260715-1655.md create mode 100644 owner/.changes/260715-1600.md create mode 100644 owner/src/docs/scope.md create mode 100644 owner/src/scope.js create mode 100644 owner/src/tests/scope.test.js diff --git a/.cspell.json b/.cspell.json index 9a51454..6e8f804 100644 --- a/.cspell.json +++ b/.cspell.json @@ -51,6 +51,7 @@ "staticlib", "stry", "tctl", + "vkozlov", "tmpdirs", "toplevel", "Автовибір", @@ -94,6 +95,8 @@ "логується", "макроса", "машинно", + "метаключ", + "метаключі", "монтирує", "напр", "автовизначити", @@ -153,6 +156,10 @@ "рендериться", "рендером", "самозатиралися", + "скоуп", + "скоупи", + "скоупу", + "скоупом", "сконфігуровазованого", "спавнені", "таймаут", diff --git a/app/.changes/260715-1655.md b/app/.changes/260715-1655.md new file mode 100644 index 0000000..5dd7e63 --- /dev/null +++ b/app/.changes/260715-1655.md @@ -0,0 +1,5 @@ +--- +bump: patch +section: Changed +--- +Освіжено файлову доку `NodeActions.md` (CRC-дрейф, без змін поведінки). diff --git a/app/src/components/docs/NodeActions.md b/app/src/components/docs/NodeActions.md index 8e0fc7e..3659333 100644 --- a/app/src/components/docs/NodeActions.md +++ b/app/src/components/docs/NodeActions.md @@ -3,7 +3,7 @@ type: Vue Component title: NodeActions.vue resource: app/src/components/NodeActions.vue docgen: - crc: 0878a697 + crc: ab3b344d model: openai-codex/gpt-5.5 --- diff --git a/owner/.changes/260715-1600.md b/owner/.changes/260715-1600.md new file mode 100644 index 0000000..031fe44 --- /dev/null +++ b/owner/.changes/260715-1600.md @@ -0,0 +1,5 @@ +--- +bump: minor +section: Added +--- +M5 — скоуп власника (спека docs/specs/260714-cognitive-delegation.md): ідентичність-handle (whoami/set_identity), owner: в autonomy.yml, scan_owners, scope-фільтр черги/особистих задач/дельти, «нічия земля», fail-closed write-tools поза скоупом, крок «Хто ти» в онбордингу diff --git a/owner/src-tauri/Cargo.lock b/owner/src-tauri/Cargo.lock index bf9ee05..5a9d9ca 100644 --- a/owner/src-tauri/Cargo.lock +++ b/owner/src-tauri/Cargo.lock @@ -47,6 +47,15 @@ version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -733,6 +742,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "derive_more" version = "2.1.1" @@ -1035,6 +1055,16 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -1919,6 +1949,36 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.18", + "walkdir", + "windows-link 0.2.1", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.118", +] + [[package]] name = "jni-sys" version = "0.3.1" @@ -2140,6 +2200,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minisign-verify" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2427,6 +2493,18 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-osa-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" +dependencies = [ + "bitflags 2.13.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + [[package]] name = "objc2-quartz-core" version = "0.3.2" @@ -2501,6 +2579,12 @@ dependencies = [ "libc", ] +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "option-ext" version = "0.2.0" @@ -2517,6 +2601,20 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "osakit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" +dependencies = [ + "objc2", + "objc2-foundation", + "objc2-osa-kit", + "serde", + "serde_json", + "thiserror 2.0.18", +] + [[package]] name = "owner" version = "0.1.0" @@ -2530,6 +2628,8 @@ dependencies = [ "tauri-build", "tauri-plugin-http", "tauri-plugin-opener", + "tauri-plugin-process", + "tauri-plugin-updater", "tauri-plugin-window-state", "tempfile", ] @@ -3066,15 +3166,20 @@ dependencies = [ "http-body", "http-body-util", "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", "sync_wrapper", "tokio", + "tokio-rustls", "tokio-util", "tower", "tower-http", @@ -3142,6 +3247,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pki-types" version = "1.15.0" @@ -3152,6 +3269,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.22.4", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.13" @@ -3184,6 +3328,15 @@ dependencies = [ "winapi-util", ] +[[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 = "schemars" version = "0.8.22" @@ -3241,6 +3394,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.13.0", + "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 = "selectors" version = "0.36.1" @@ -3474,6 +3650,22 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" version = "1.0.3" @@ -3696,7 +3888,7 @@ dependencies = [ "gdkwayland-sys", "gdkx11-sys", "gtk", - "jni", + "jni 0.21.1", "libc", "log", "ndk", @@ -3729,6 +3921,17 @@ dependencies = [ "syn 2.0.118", ] +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "target-lexicon" version = "0.12.16" @@ -3752,7 +3955,7 @@ dependencies = [ "gtk", "heck 0.5.0", "http", - "jni", + "jni 0.21.1", "libc", "log", "mime", @@ -3934,6 +4137,49 @@ dependencies = [ "zbus", ] +[[package]] +name = "tauri-plugin-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" +dependencies = [ + "tauri", + "tauri-plugin", +] + +[[package]] +name = "tauri-plugin-updater" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af" +dependencies = [ + "base64 0.22.1", + "dirs", + "flate2", + "futures-util", + "http", + "infer", + "log", + "minisign-verify", + "osakit", + "percent-encoding", + "reqwest 0.13.4", + "rustls", + "semver", + "serde", + "serde_json", + "tar", + "tauri", + "tauri-plugin", + "tempfile", + "thiserror 2.0.18", + "time", + "tokio", + "url", + "windows-sys 0.60.2", + "zip", +] + [[package]] name = "tauri-plugin-window-state" version = "2.4.1" @@ -3959,7 +4205,7 @@ dependencies = [ "dpi", "gtk", "http", - "jni", + "jni 0.21.1", "objc2", "objc2-ui-kit", "objc2-web-kit", @@ -3982,7 +4228,7 @@ checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" dependencies = [ "gtk", "http", - "jni", + "jni 0.21.1", "log", "objc2", "objc2-app-kit", @@ -4774,6 +5020,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "1.0.8" @@ -5328,7 +5583,7 @@ dependencies = [ "gtk", "http", "javascriptcore-rs", - "jni", + "jni 0.21.1", "libc", "ndk", "objc2", @@ -5375,6 +5630,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + [[package]] name = "yoke" version = "0.8.3" @@ -5519,6 +5784,18 @@ dependencies = [ "syn 2.0.118", ] +[[package]] +name = "zip" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" +dependencies = [ + "arbitrary", + "crc32fast", + "indexmap 2.14.0", + "memchr", +] + [[package]] name = "zmij" version = "1.0.21" diff --git a/owner/src-tauri/gen/schemas/acl-manifests.json b/owner/src-tauri/gen/schemas/acl-manifests.json index 2aadf52..e8dd6ec 100644 --- a/owner/src-tauri/gen/schemas/acl-manifests.json +++ b/owner/src-tauri/gen/schemas/acl-manifests.json @@ -1,2058 +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", - "allow-supports-multiple-windows" - ] - }, - "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-supports-multiple-windows": { - "identifier": "allow-supports-multiple-windows", - "description": "Enables the supports_multiple_windows command without any pre-configured scope.", - "commands": { "allow": ["supports_multiple_windows"], "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-supports-multiple-windows": { - "identifier": "deny-supports-multiple-windows", - "description": "Denies the supports_multiple_windows command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["supports_multiple_windows"] } - }, - "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-icon-with-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-icon-with-as-template": { - "identifier": "allow-set-icon-with-as-template", - "description": "Enables the set_icon_with_as_template command without any pre-configured scope.", - "commands": { "allow": ["set_icon_with_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-icon-with-as-template": { - "identifier": "deny-set-icon-with-as-template", - "description": "Denies the set_icon_with_as_template command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["set_icon_with_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-activity-name", - "allow-scene-identifier", - "allow-internal-toggle-maximize" - ] - }, - "permissions": { - "allow-activity-name": { - "identifier": "allow-activity-name", - "description": "Enables the activity_name command without any pre-configured scope.", - "commands": { "allow": ["activity_name"], "deny": [] } - }, - "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-scene-identifier": { - "identifier": "allow-scene-identifier", - "description": "Enables the scene_identifier command without any pre-configured scope.", - "commands": { "allow": ["scene_identifier"], "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-activity-name": { - "identifier": "deny-activity-name", - "description": "Denies the activity_name command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["activity_name"] } - }, - "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-scene-identifier": { - "identifier": "deny-scene-identifier", - "description": "Denies the scene_identifier command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["scene_identifier"] } - }, - "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 - }, - "http": { - "default_permission": { - "identifier": "default", - "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n", - "permissions": [ - "allow-fetch", - "allow-fetch-cancel", - "allow-fetch-send", - "allow-fetch-read-body", - "allow-fetch-cancel-body" - ] - }, - "permissions": { - "allow-fetch": { - "identifier": "allow-fetch", - "description": "Enables the fetch command without any pre-configured scope.", - "commands": { "allow": ["fetch"], "deny": [] } - }, - "allow-fetch-cancel": { - "identifier": "allow-fetch-cancel", - "description": "Enables the fetch_cancel command without any pre-configured scope.", - "commands": { "allow": ["fetch_cancel"], "deny": [] } - }, - "allow-fetch-cancel-body": { - "identifier": "allow-fetch-cancel-body", - "description": "Enables the fetch_cancel_body command without any pre-configured scope.", - "commands": { "allow": ["fetch_cancel_body"], "deny": [] } - }, - "allow-fetch-read-body": { - "identifier": "allow-fetch-read-body", - "description": "Enables the fetch_read_body command without any pre-configured scope.", - "commands": { "allow": ["fetch_read_body"], "deny": [] } - }, - "allow-fetch-send": { - "identifier": "allow-fetch-send", - "description": "Enables the fetch_send command without any pre-configured scope.", - "commands": { "allow": ["fetch_send"], "deny": [] } - }, - "deny-fetch": { - "identifier": "deny-fetch", - "description": "Denies the fetch command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["fetch"] } - }, - "deny-fetch-cancel": { - "identifier": "deny-fetch-cancel", - "description": "Denies the fetch_cancel command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["fetch_cancel"] } - }, - "deny-fetch-cancel-body": { - "identifier": "deny-fetch-cancel-body", - "description": "Denies the fetch_cancel_body command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["fetch_cancel_body"] } - }, - "deny-fetch-read-body": { - "identifier": "deny-fetch-read-body", - "description": "Denies the fetch_read_body command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["fetch_read_body"] } - }, - "deny-fetch-send": { - "identifier": "deny-fetch-send", - "description": "Denies the fetch_send command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["fetch_send"] } - } - }, - "permission_sets": {}, - "global_scope_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "anyOf": [ - { - "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", - "type": "string" - }, - { - "properties": { - "url": { - "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", - "type": "string" - } - }, - "required": ["url"], - "type": "object" - } - ], - "description": "HTTP scope entry.", - "title": "HttpScopeEntry" - } - }, - "opener": { - "default_permission": { - "identifier": "default", - "description": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer", - "permissions": ["allow-open-url", "allow-reveal-item-in-dir", "allow-default-urls"] - }, - "permissions": { - "allow-default-urls": { - "identifier": "allow-default-urls", - "description": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.", - "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "url": "mailto:*" }, { "url": "tel:*" }, { "url": "http://*" }, { "url": "https://*" }] } - }, - "allow-open-path": { - "identifier": "allow-open-path", - "description": "Enables the open_path command without any pre-configured scope.", - "commands": { "allow": ["open_path"], "deny": [] } - }, - "allow-open-url": { - "identifier": "allow-open-url", - "description": "Enables the open_url command without any pre-configured scope.", - "commands": { "allow": ["open_url"], "deny": [] } - }, - "allow-reveal-item-in-dir": { - "identifier": "allow-reveal-item-in-dir", - "description": "Enables the reveal_item_in_dir command without any pre-configured scope.", - "commands": { "allow": ["reveal_item_in_dir"], "deny": [] } - }, - "deny-open-path": { - "identifier": "deny-open-path", - "description": "Denies the open_path command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["open_path"] } - }, - "deny-open-url": { - "identifier": "deny-open-url", - "description": "Denies the open_url command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["open_url"] } - }, - "deny-reveal-item-in-dir": { - "identifier": "deny-reveal-item-in-dir", - "description": "Denies the reveal_item_in_dir command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["reveal_item_in_dir"] } - } - }, - "permission_sets": {}, - "global_scope_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "anyOf": [ - { - "properties": { - "app": { - "allOf": [{ "$ref": "#/definitions/Application" }], - "description": "An application to open this url with, for example: firefox." - }, - "url": { - "description": "A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", - "type": "string" - } - }, - "required": ["url"], - "type": "object" - }, - { - "properties": { - "app": { - "allOf": [{ "$ref": "#/definitions/Application" }], - "description": "An application to open this path with, for example: xdg-open." - }, - "path": { - "description": "A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - } - }, - "required": ["path"], - "type": "object" - } - ], - "definitions": { - "Application": { - "anyOf": [ - { "description": "Open in default application.", "type": "null" }, - { "description": "If true, allow open with any application.", "type": "boolean" }, - { "description": "Allow specific application to open with.", "type": "string" } - ], - "description": "Opener scope application." - } - }, - "description": "Opener scope entry.", - "title": "OpenerScopeEntry" - } - }, - "window-state": { - "default_permission": { - "identifier": "default", - "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "permissions": ["allow-filename", "allow-restore-state", "allow-save-window-state"] - }, - "permissions": { - "allow-filename": { - "identifier": "allow-filename", - "description": "Enables the filename command without any pre-configured scope.", - "commands": { "allow": ["filename"], "deny": [] } - }, - "allow-restore-state": { - "identifier": "allow-restore-state", - "description": "Enables the restore_state command without any pre-configured scope.", - "commands": { "allow": ["restore_state"], "deny": [] } - }, - "allow-save-window-state": { - "identifier": "allow-save-window-state", - "description": "Enables the save_window_state command without any pre-configured scope.", - "commands": { "allow": ["save_window_state"], "deny": [] } - }, - "deny-filename": { - "identifier": "deny-filename", - "description": "Denies the filename command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["filename"] } - }, - "deny-restore-state": { - "identifier": "deny-restore-state", - "description": "Denies the restore_state command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["restore_state"] } - }, - "deny-save-window-state": { - "identifier": "deny-save-window-state", - "description": "Denies the save_window_state command without any pre-configured scope.", - "commands": { "allow": [], "deny": ["save_window_state"] } - } - }, - "permission_sets": {}, - "global_scope_schema": null - } -} +{"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","allow-supports-multiple-windows"]},"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-supports-multiple-windows":{"identifier":"allow-supports-multiple-windows","description":"Enables the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":["supports_multiple_windows"],"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-supports-multiple-windows":{"identifier":"deny-supports-multiple-windows","description":"Denies the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["supports_multiple_windows"]}},"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-icon-with-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-icon-with-as-template":{"identifier":"allow-set-icon-with-as-template","description":"Enables the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_with_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-icon-with-as-template":{"identifier":"deny-set-icon-with-as-template","description":"Denies the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_with_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-activity-name","allow-scene-identifier","allow-internal-toggle-maximize"]},"permissions":{"allow-activity-name":{"identifier":"allow-activity-name","description":"Enables the activity_name command without any pre-configured scope.","commands":{"allow":["activity_name"],"deny":[]}},"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-scene-identifier":{"identifier":"allow-scene-identifier","description":"Enables the scene_identifier command without any pre-configured scope.","commands":{"allow":["scene_identifier"],"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-activity-name":{"identifier":"deny-activity-name","description":"Denies the activity_name command without any pre-configured scope.","commands":{"allow":[],"deny":["activity_name"]}},"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-scene-identifier":{"identifier":"deny-scene-identifier","description":"Denies the scene_identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["scene_identifier"]}},"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},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-send","allow-fetch-read-body","allow-fetch-cancel-body"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-cancel-body":{"identifier":"allow-fetch-cancel-body","description":"Enables the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":["fetch_cancel_body"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-cancel-body":{"identifier":"deny-fetch-cancel-body","description":"Denies the fetch_cancel_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel_body"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"opener":{"default_permission":{"identifier":"default","description":"This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer","permissions":["allow-open-url","allow-reveal-item-in-dir","allow-default-urls"]},"permissions":{"allow-default-urls":{"identifier":"allow-default-urls","description":"This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"url":"mailto:*"},{"url":"tel:*"},{"url":"http://*"},{"url":"https://*"}]}},"allow-open-path":{"identifier":"allow-open-path","description":"Enables the open_path command without any pre-configured scope.","commands":{"allow":["open_path"],"deny":[]}},"allow-open-url":{"identifier":"allow-open-url","description":"Enables the open_url command without any pre-configured scope.","commands":{"allow":["open_url"],"deny":[]}},"allow-reveal-item-in-dir":{"identifier":"allow-reveal-item-in-dir","description":"Enables the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":["reveal_item_in_dir"],"deny":[]}},"deny-open-path":{"identifier":"deny-open-path","description":"Denies the open_path command without any pre-configured scope.","commands":{"allow":[],"deny":["open_path"]}},"deny-open-url":{"identifier":"deny-open-url","description":"Denies the open_url command without any pre-configured scope.","commands":{"allow":[],"deny":["open_url"]}},"deny-reveal-item-in-dir":{"identifier":"deny-reveal-item-in-dir","description":"Denies the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["reveal_item_in_dir"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this url with, for example: firefox."},"url":{"description":"A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"},{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this path with, for example: xdg-open."},"path":{"description":"A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"}},"required":["path"],"type":"object"}],"definitions":{"Application":{"anyOf":[{"description":"Open in default application.","type":"null"},{"description":"If true, allow open with any application.","type":"boolean"},{"description":"Allow specific application to open with.","type":"string"}],"description":"Opener scope application."}},"description":"Opener scope entry.","title":"OpenerScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/owner/src-tauri/gen/schemas/capabilities.json b/owner/src-tauri/gen/schemas/capabilities.json index a738a56..28cc585 100644 --- a/owner/src-tauri/gen/schemas/capabilities.json +++ b/owner/src-tauri/gen/schemas/capabilities.json @@ -1,16 +1 @@ -{ - "default": { - "identifier": "default", - "description": "Capability for the main window", - "local": true, - "windows": ["main"], - "permissions": [ - "core:default", - "opener:default", - { - "identifier": "http:default", - "allow": [{ "url": "http://localhost:*/*" }, { "url": "http://127.0.0.1:*/*" }, { "url": "https://**" }] - } - ] - } -} +{"default":{"identifier":"default","description":"Capability for the main window","local":true,"windows":["main"],"permissions":["core:default","opener:default",{"identifier":"http:default","allow":[{"url":"http://localhost:*/*"},{"url":"http://127.0.0.1:*/*"},{"url":"https://**"}]},"process:allow-restart"]},"updater":{"identifier":"updater","description":"","local":true,"windows":["main"],"permissions":["updater:default"],"platforms":["macOS","windows","linux"]}} \ No newline at end of file diff --git a/owner/src-tauri/gen/schemas/desktop-schema.json b/owner/src-tauri/gen/schemas/desktop-schema.json index f38a24c..06a87c8 100644 --- a/owner/src-tauri/gen/schemas/desktop-schema.json +++ b/owner/src-tauri/gen/schemas/desktop-schema.json @@ -21,7 +21,9 @@ { "description": "A list of capabilities.", "type": "object", - "required": ["capabilities"], + "required": [ + "capabilities" + ], "properties": { "capabilities": { "description": "The list of capabilities.", @@ -37,7 +39,10 @@ "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"], + "required": [ + "identifier", + "permissions" + ], "properties": { "identifier": { "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", @@ -88,7 +93,10 @@ }, "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"], + "type": [ + "array", + "null" + ], "items": { "$ref": "#/definitions/Target" } @@ -98,7 +106,9 @@ "CapabilityRemote": { "description": "Configuration for remote URLs that are associated with the capability.", "type": "object", - "required": ["urls"], + "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", @@ -212,7 +222,9 @@ }, { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "url": { "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", @@ -234,7 +246,9 @@ }, { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "url": { "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", @@ -324,7 +338,9 @@ "anyOf": [ { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "app": { "description": "An application to open this url with, for example: firefox.", @@ -342,7 +358,9 @@ }, { "type": "object", - "required": ["path"], + "required": [ + "path" + ], "properties": { "app": { "description": "An application to open this path with, for example: xdg-open.", @@ -368,7 +386,9 @@ "anyOf": [ { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "app": { "description": "An application to open this url with, for example: firefox.", @@ -386,7 +406,9 @@ }, { "type": "object", - "required": ["path"], + "required": [ + "path" + ], "properties": { "app": { "description": "An application to open this path with, for example: xdg-open.", @@ -430,14 +452,20 @@ }, "allow": { "description": "Data that defines what is allowed by the scope.", - "type": ["array", "null"], + "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"], + "type": [ + "array", + "null" + ], "items": { "$ref": "#/definitions/Value" } @@ -445,7 +473,9 @@ } } ], - "required": ["identifier"] + "required": [ + "identifier" + ] } ] }, @@ -2582,6 +2612,90 @@ "const": "opener:deny-reveal-item-in-dir", "markdownDescription": "Denies the reveal_item_in_dir command without any pre-configured scope." }, + { + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", + "type": "string", + "const": "process:default", + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" + }, + { + "description": "Enables the exit command without any pre-configured scope.", + "type": "string", + "const": "process:allow-exit", + "markdownDescription": "Enables the exit command without any pre-configured scope." + }, + { + "description": "Enables the restart command without any pre-configured scope.", + "type": "string", + "const": "process:allow-restart", + "markdownDescription": "Enables the restart command without any pre-configured scope." + }, + { + "description": "Denies the exit command without any pre-configured scope.", + "type": "string", + "const": "process:deny-exit", + "markdownDescription": "Denies the exit command without any pre-configured scope." + }, + { + "description": "Denies the restart command without any pre-configured scope.", + "type": "string", + "const": "process:deny-restart", + "markdownDescription": "Denies the restart command without any pre-configured scope." + }, + { + "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`", + "type": "string", + "const": "updater:default", + "markdownDescription": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`" + }, + { + "description": "Enables the check command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-check", + "markdownDescription": "Enables the check command without any pre-configured scope." + }, + { + "description": "Enables the download command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download", + "markdownDescription": "Enables the download command without any pre-configured scope." + }, + { + "description": "Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download-and-install", + "markdownDescription": "Enables the download_and_install command without any pre-configured scope." + }, + { + "description": "Enables the install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-install", + "markdownDescription": "Enables the install command without any pre-configured scope." + }, + { + "description": "Denies the check command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-check", + "markdownDescription": "Denies the check command without any pre-configured scope." + }, + { + "description": "Denies the download command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download", + "markdownDescription": "Denies the download command without any pre-configured scope." + }, + { + "description": "Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download-and-install", + "markdownDescription": "Denies the download_and_install command without any pre-configured scope." + }, + { + "description": "Denies the install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-install", + "markdownDescription": "Denies the install command without any pre-configured scope." + }, { "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n\n#### This default permission set includes:\n\n- `allow-filename`\n- `allow-restore-state`\n- `allow-save-window-state`", "type": "string", @@ -2686,27 +2800,37 @@ { "description": "MacOS.", "type": "string", - "enum": ["macOS"] + "enum": [ + "macOS" + ] }, { "description": "Windows.", "type": "string", - "enum": ["windows"] + "enum": [ + "windows" + ] }, { "description": "Linux.", "type": "string", - "enum": ["linux"] + "enum": [ + "linux" + ] }, { "description": "Android.", "type": "string", - "enum": ["android"] + "enum": [ + "android" + ] }, { "description": "iOS.", "type": "string", - "enum": ["iOS"] + "enum": [ + "iOS" + ] } ] }, @@ -2728,4 +2852,4 @@ ] } } -} +} \ No newline at end of file diff --git a/owner/src-tauri/gen/schemas/macOS-schema.json b/owner/src-tauri/gen/schemas/macOS-schema.json index f38a24c..06a87c8 100644 --- a/owner/src-tauri/gen/schemas/macOS-schema.json +++ b/owner/src-tauri/gen/schemas/macOS-schema.json @@ -21,7 +21,9 @@ { "description": "A list of capabilities.", "type": "object", - "required": ["capabilities"], + "required": [ + "capabilities" + ], "properties": { "capabilities": { "description": "The list of capabilities.", @@ -37,7 +39,10 @@ "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"], + "required": [ + "identifier", + "permissions" + ], "properties": { "identifier": { "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", @@ -88,7 +93,10 @@ }, "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"], + "type": [ + "array", + "null" + ], "items": { "$ref": "#/definitions/Target" } @@ -98,7 +106,9 @@ "CapabilityRemote": { "description": "Configuration for remote URLs that are associated with the capability.", "type": "object", - "required": ["urls"], + "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", @@ -212,7 +222,9 @@ }, { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "url": { "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", @@ -234,7 +246,9 @@ }, { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "url": { "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", @@ -324,7 +338,9 @@ "anyOf": [ { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "app": { "description": "An application to open this url with, for example: firefox.", @@ -342,7 +358,9 @@ }, { "type": "object", - "required": ["path"], + "required": [ + "path" + ], "properties": { "app": { "description": "An application to open this path with, for example: xdg-open.", @@ -368,7 +386,9 @@ "anyOf": [ { "type": "object", - "required": ["url"], + "required": [ + "url" + ], "properties": { "app": { "description": "An application to open this url with, for example: firefox.", @@ -386,7 +406,9 @@ }, { "type": "object", - "required": ["path"], + "required": [ + "path" + ], "properties": { "app": { "description": "An application to open this path with, for example: xdg-open.", @@ -430,14 +452,20 @@ }, "allow": { "description": "Data that defines what is allowed by the scope.", - "type": ["array", "null"], + "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"], + "type": [ + "array", + "null" + ], "items": { "$ref": "#/definitions/Value" } @@ -445,7 +473,9 @@ } } ], - "required": ["identifier"] + "required": [ + "identifier" + ] } ] }, @@ -2582,6 +2612,90 @@ "const": "opener:deny-reveal-item-in-dir", "markdownDescription": "Denies the reveal_item_in_dir command without any pre-configured scope." }, + { + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", + "type": "string", + "const": "process:default", + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" + }, + { + "description": "Enables the exit command without any pre-configured scope.", + "type": "string", + "const": "process:allow-exit", + "markdownDescription": "Enables the exit command without any pre-configured scope." + }, + { + "description": "Enables the restart command without any pre-configured scope.", + "type": "string", + "const": "process:allow-restart", + "markdownDescription": "Enables the restart command without any pre-configured scope." + }, + { + "description": "Denies the exit command without any pre-configured scope.", + "type": "string", + "const": "process:deny-exit", + "markdownDescription": "Denies the exit command without any pre-configured scope." + }, + { + "description": "Denies the restart command without any pre-configured scope.", + "type": "string", + "const": "process:deny-restart", + "markdownDescription": "Denies the restart command without any pre-configured scope." + }, + { + "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`", + "type": "string", + "const": "updater:default", + "markdownDescription": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`" + }, + { + "description": "Enables the check command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-check", + "markdownDescription": "Enables the check command without any pre-configured scope." + }, + { + "description": "Enables the download command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download", + "markdownDescription": "Enables the download command without any pre-configured scope." + }, + { + "description": "Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download-and-install", + "markdownDescription": "Enables the download_and_install command without any pre-configured scope." + }, + { + "description": "Enables the install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-install", + "markdownDescription": "Enables the install command without any pre-configured scope." + }, + { + "description": "Denies the check command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-check", + "markdownDescription": "Denies the check command without any pre-configured scope." + }, + { + "description": "Denies the download command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download", + "markdownDescription": "Denies the download command without any pre-configured scope." + }, + { + "description": "Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download-and-install", + "markdownDescription": "Denies the download_and_install command without any pre-configured scope." + }, + { + "description": "Denies the install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-install", + "markdownDescription": "Denies the install command without any pre-configured scope." + }, { "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n\n#### This default permission set includes:\n\n- `allow-filename`\n- `allow-restore-state`\n- `allow-save-window-state`", "type": "string", @@ -2686,27 +2800,37 @@ { "description": "MacOS.", "type": "string", - "enum": ["macOS"] + "enum": [ + "macOS" + ] }, { "description": "Windows.", "type": "string", - "enum": ["windows"] + "enum": [ + "windows" + ] }, { "description": "Linux.", "type": "string", - "enum": ["linux"] + "enum": [ + "linux" + ] }, { "description": "Android.", "type": "string", - "enum": ["android"] + "enum": [ + "android" + ] }, { "description": "iOS.", "type": "string", - "enum": ["iOS"] + "enum": [ + "iOS" + ] } ] }, @@ -2728,4 +2852,4 @@ ] } } -} +} \ No newline at end of file diff --git a/owner/src-tauri/src/config.rs b/owner/src-tauri/src/config.rs index 7b6ffcc..86d734d 100644 --- a/owner/src-tauri/src/config.rs +++ b/owner/src-tauri/src/config.rs @@ -1,8 +1,11 @@ -//! Конфіг owner-застосунку — project search paths. +//! Конфіг owner-застосунку — project search paths та ідентичність власника. //! -//! Зберігається у `appLocalDataDir/config.json` (`{ "project_paths": [...] }`). -//! Fallback-ланцюжок читання: власний конфіг → конфіг app (`com.nitra.task`, -//! щоб обидва застосунки бачили той самий ліс без налаштування) → `~/www`. +//! Зберігається у `appLocalDataDir/config.json` +//! (`{ "project_paths": [...], "identity": "handle" }`). +//! Fallback-ланцюжок читання шляхів: власний конфіг → конфіг app +//! (`com.nitra.task`, щоб обидва застосунки бачили той самий ліс без +//! налаштування) → `~/www`. Ідентичність — handle (як `assignee` у `h.md`, +//! PII лишається поза git) — тільки з власного конфігу, без fallback. use std::fs; use std::path::{Path, PathBuf}; @@ -47,17 +50,46 @@ pub fn get_project_paths() -> Vec { .unwrap_or_default() } -/// Зберігає project paths у власний конфіг owner. -pub fn set_project_paths(paths: Vec) -> Result<(), String> { +/// Читає весь власний конфіг (відсутній/битий файл — порожній обʼєкт). +fn read_own_config() -> Value { + own_config_path() + .ok() + .and_then(|p| fs::read_to_string(p).ok()) + .and_then(|raw| serde_json::from_str(&raw).ok()) + .unwrap_or_else(|| json!({})) +} + +/// Мерджить один ключ у власний конфіг, зберігаючи решту ключів. +fn merge_own_config(key: &str, value: Value) -> Result<(), String> { let path = own_config_path()?; if let Some(parent) = path.parent() { fs::create_dir_all(parent).map_err(|e| e.to_string())?; } - let body = serde_json::to_string_pretty(&json!({ "project_paths": paths })) - .map_err(|e| e.to_string())?; + let mut config = read_own_config(); + config + .as_object_mut() + .ok_or("config.json: корінь не обʼєкт")? + .insert(key.to_string(), value); + let body = serde_json::to_string_pretty(&config).map_err(|e| e.to_string())?; fs::write(path, body).map_err(|e| e.to_string()) } +/// Зберігає project paths у власний конфіг owner (інші ключі не чіпає). +pub fn set_project_paths(paths: Vec) -> Result<(), String> { + merge_own_config("project_paths", json!(paths)) +} + +/// Handle власника з конфігу (None — ідентичність ще не налаштована). +pub fn get_identity() -> Option { + let handle = read_own_config().get("identity")?.as_str()?.to_string(); + (!handle.is_empty()).then_some(handle) +} + +/// Зберігає handle власника (порожній — скидає ідентичність). +pub fn set_identity(handle: String) -> Result<(), String> { + merge_own_config("identity", json!(handle.trim())) +} + #[cfg(test)] mod tests { use super::*; diff --git a/owner/src-tauri/src/docs/config.md b/owner/src-tauri/src/docs/config.md index 03e5dcc..3fa24fa 100644 --- a/owner/src-tauri/src/docs/config.md +++ b/owner/src-tauri/src/docs/config.md @@ -3,9 +3,8 @@ type: Rust Module title: config.rs resource: owner/src-tauri/src/config.rs docgen: - crc: b075356c + crc: 9ab105c1 model: omlx/gemma-4-e4b-it-OptiQ-4bit - tier: local-min-retry score: 85 issues: anchor-miss:absent.json,anchor-miss:empty.json,anchor-miss:full.json,best-of-2:retry-won,judge:inaccurate:0.98 judgeModel: openai-codex/gpt-5.4-mini diff --git a/owner/src-tauri/src/docs/lib.md b/owner/src-tauri/src/docs/lib.md index 5ca06d7..c1c2736 100644 --- a/owner/src-tauri/src/docs/lib.md +++ b/owner/src-tauri/src/docs/lib.md @@ -3,7 +3,7 @@ type: Rust Module title: lib.rs resource: owner/src-tauri/src/lib.rs docgen: - crc: cee21bb3 + crc: 81235a06 model: openai-codex/gpt-5.4-mini score: 100 issues: judge:inaccurate:0.99 diff --git a/owner/src-tauri/src/lib.rs b/owner/src-tauri/src/lib.rs index 5684aff..ffa227b 100644 --- a/owner/src-tauri/src/lib.rs +++ b/owner/src-tauri/src/lib.rs @@ -45,30 +45,159 @@ fn create_task(tasks_dir: String, name: String, opts: CreateOpts) -> Result Result<(), String> { for line in yaml.lines() { let line = line.trim(); if line.is_empty() || line.starts_with('#') { continue; } - let (key, gate) = line + let (key, value) = line .split_once(':') .ok_or_else(|| format!("autonomy.yml: невалідний рядок {line:?}"))?; - let gate = gate.trim(); - if gate != "auto" && gate != "approve" { + let (key, value) = (key.trim(), value.trim()); + if RESERVED_KEYS.contains(&key) { + if value.is_empty() || value.split_whitespace().count() != 1 { + return Err(format!( + "autonomy.yml: {key} — має бути один токен без пробілів, отримано {value:?}" + )); + } + continue; + } + if value != "auto" && value != "approve" { return Err(format!( - "autonomy.yml: клас {} — невідомий гейт {gate:?}", - key.trim() + "autonomy.yml: клас {key} — невідомий гейт {value:?}" )); } } Ok(()) } +/// Handle власника з тексту `autonomy.yml` (None — рядка `owner:` немає). +fn parse_owner(yaml: &str) -> Option { + for line in yaml.lines() { + let line = line.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + if let Some((key, value)) = line.split_once(':') { + if key.trim() == "owner" && !value.trim().is_empty() { + return Some(value.trim().to_string()); + } + } + } + None +} + +/// Рекурсивно збирає `owner:`-розмітку лісу: тека вузла (містить task.md) +/// з autonomy.yml → запис `шлях вузла → handle`. Приховані теки +/// (`.worktrees` тощо) пропускаються. +fn collect_owners(root: &Path, dir: &Path, owners: &mut std::collections::HashMap) { + for entry in fs::read_dir(dir).into_iter().flatten().flatten() { + let path = entry.path(); + if !path.is_dir() + || path + .file_name() + .and_then(|n| n.to_str()) + .is_none_or(|n| n.starts_with('.')) + { + continue; + } + if path.join("task.md").is_file() { + if let Ok(yaml) = fs::read_to_string(path.join("autonomy.yml")) { + if let Some(owner) = parse_owner(&yaml) { + if let Ok(rel) = path.strip_prefix(root) { + owners.insert(rel.to_string_lossy().replace('\\', "/"), owner); + } + } + } + } + collect_owners(root, &path, owners); + } +} + +/// `owner:`-розмітка воркспейсу одним проходом ФС — сировина scope-деривації +/// на фронті (порожня мапа = нерозмічений ліс, single-owner поведінка). +#[tauri::command] +fn scan_owners(tasks_dir: String) -> Result, String> { + let root = PathBuf::from(&tasks_dir); + if !root.is_dir() { + return Err(format!("tasks dir not found: {tasks_dir}")); + } + let mut owners = std::collections::HashMap::new(); + collect_owners(&root, &root, &mut owners); + Ok(owners) +} + +/// Handle власника застосунку (None — «Хто ти» ще не пройдено). +#[tauri::command] +fn get_identity() -> Option { + config::get_identity() +} + +/// Зберігає handle власника у локальний конфіг (PII лишається поза git). +#[tauri::command] +fn set_identity(handle: String) -> Result<(), String> { + config::set_identity(handle) +} + +/// Ефективний власник вузла з розмітки: найдовший префікс шляху, +/// що має `owner:` (фрактальне успадкування за графом задач). +fn effective_owner_of<'a>( + owners: &'a std::collections::HashMap, + task_path: &str, +) -> Option<&'a str> { + let segments: Vec<&str> = task_path.split('/').collect(); + (1..=segments.len()) + .rev() + .find_map(|i| owners.get(&segments[..i].join("/")).map(String::as_str)) +} + +/// Fail-closed гейт власності write-дій (чиста логіка, M5): у розміченому +/// лісі діяти на вузлі може лише його effective owner; вузол без власника — +/// «нічия земля», діяти може будь-хто (інакше осиротіла гілка блокується +/// назавжди). Нерозмічений ліс — single-owner поведінка без перевірки. +fn check_scope( + owners: &std::collections::HashMap, + task_path: &str, + me: Option<&str>, +) -> Result<(), String> { + if owners.is_empty() { + return Ok(()); + } + let Some(owner) = effective_owner_of(owners, task_path) else { + return Ok(()); + }; + let me = me.ok_or( + "ліс розмічений власниками, а твоя ідентичність не налаштована — виконай set_identity", + )?; + if owner == me { + Ok(()) + } else { + Err(format!( + "вузол {task_path} належить {owner} — поза твоїм скоупом (ескалація/делегування — M6)" + )) + } +} + +/// Гейт власності для tauri-команд: розмітка читається з ФС, ідентичність — +/// з конфігу застосунку. +fn assert_owned(tasks_dir: &str, task_path: &str) -> Result<(), String> { + let owners = scan_owners(tasks_dir.to_string())?; + check_scope(&owners, task_path, config::get_identity().as_deref()) +} + /// Власна політика вузла (порожній рядок — файлу немає, повне успадкування). #[tauri::command] fn read_autonomy(tasks_dir: String, task_path: String) -> Result { @@ -89,6 +218,7 @@ fn write_autonomy(tasks_dir: String, task_path: String, yaml: String) -> Result< return Err(format!("node not found: {task_path}")); } validate_autonomy(&yaml)?; + assert_owned(&tasks_dir, &task_path)?; fs::write(dir.join("autonomy.yml"), yaml).map_err(|e| e.to_string()) } @@ -128,6 +258,7 @@ fn draft_plan( if !dir.join("task.md").is_file() { return Err(format!("node not found: {task_path}")); } + assert_owned(&tasks_dir, &task_path)?; let children = mt_core::spawn::parse_children(&children_yaml)?; if children.is_empty() { return Err("## Children порожня — плановик не дав жодної дитини".to_string()); @@ -170,12 +301,14 @@ fn spawn_approve( tasks_dir: String, task_path: String, ) -> Result { + assert_owned(&tasks_dir, &task_path)?; mt_core::spawn::spawn_approve(&tasks_dir, &task_path) } /// Вердикт власника: reject плану з причиною → plan-rejected_NNN.md. #[tauri::command] fn spawn_reject(tasks_dir: String, task_path: String, reason: String) -> Result { + assert_owned(&tasks_dir, &task_path)?; mt_core::spawn::spawn_reject(&tasks_dir, &task_path, &reason) } @@ -187,6 +320,7 @@ fn human_done( task_path: String, summary: String, ) -> Result { + assert_owned(&tasks_dir, &task_path)?; if let Err(e) = mt_core::signal::write_fact(&tasks_dir, &task_path, &summary, None) { // Порожній/битий Summary — справжня помилка; наявний fact — ні // (retry після Check-фейлу не перетирає його). @@ -241,6 +375,9 @@ pub fn run() { read_task, read_autonomy, write_autonomy, + scan_owners, + get_identity, + set_identity, plan_review_info, spawn_approve, spawn_reject, @@ -368,4 +505,49 @@ mod tests { ) .is_err()); } + + #[test] + fn autonomy_accepts_reserved_owner_and_since() { + assert!(validate_autonomy("owner: olena\nsince: 2026-07-13\ndeploy: approve\n").is_ok()); + // owner з пробілами / порожній — відмова (handle — один токен) + assert!(validate_autonomy("owner: Олена Коваль\n").is_err()); + assert!(validate_autonomy("owner:\n").is_err()); + } + + #[test] + fn scan_owners_collects_marked_nodes_recursively() { + let (tmp, node) = goal_node(); + let child = Path::new(&node).join("collect"); + fs::create_dir_all(&child).unwrap(); + fs::write(child.join("task.md"), "---\nschema_version: 1\n---\n").unwrap(); + fs::write(child.join("autonomy.yml"), "owner: olena\n").unwrap(); + // autonomy.yml без owner — не розмітка + fs::write(Path::new(&node).join("autonomy.yml"), "deploy: approve\n").unwrap(); + + let owners = scan_owners(tmp.path().to_string_lossy().into_owned()).unwrap(); + assert_eq!(owners.len(), 1); + assert_eq!( + owners.get("goal/collect").map(String::as_str), + Some("olena") + ); + } + + #[test] + fn check_scope_unmarked_forest_allows_everyone() { + let owners = std::collections::HashMap::new(); + assert!(check_scope(&owners, "goal", None).is_ok()); + } + + #[test] + fn check_scope_enforces_effective_owner_with_inheritance() { + let owners = std::collections::HashMap::from([("goal".to_string(), "olena".to_string())]); + // дитина успадковує власника предка + assert!(check_scope(&owners, "goal/collect", Some("olena")).is_ok()); + let err = check_scope(&owners, "goal/collect", Some("vkozlov")).unwrap_err(); + assert!(err.contains("olena")); + // розмічений ліс без ідентичності — fail-closed + assert!(check_scope(&owners, "goal", None).is_err()); + // «нічия земля»: вузол поза розміченими піддеревами — діяти можна + assert!(check_scope(&owners, "orphan", Some("vkozlov")).is_ok()); + } } diff --git a/owner/src/autonomy.js b/owner/src/autonomy.js index 3f51819..b7b3bba 100644 --- a/owner/src/autonomy.js +++ b/owner/src/autonomy.js @@ -10,9 +10,15 @@ export const GATES = Object.freeze(['auto', 'approve']) // Відкритий словник класів дій зі спеки; 'default' — фолбек для нездекларованих. export const ACTION_CLASSES = Object.freeze(['deploy', 'external_comms', 'spend', 'worktree_edit']) +// Зарезервовані метаключі поза словником класів дій (M5, спека +// 260714-cognitive-delegation): owner — handle власника піддерева, +// since — дата делегування. Дзеркалить RESERVED_KEYS Rust-бекенда. +export const RESERVED_KEYS = Object.freeze(['owner', 'since']) + /** * Розбирає текст `autonomy.yml` (плоскі рядки `клас: gate`) у політику вузла. - * Порожні рядки й `#`-коментарі ігноруються. + * Порожні рядки, `#`-коментарі та зарезервовані метаключі (owner/since) + * ігноруються — власність читає effectiveOwnerOf у scope.js. * @param {string} text сирий вміст файлу (порожній рядок — вузол без своєї політики) * @returns {Record} декларована на вузлі політика */ @@ -24,6 +30,7 @@ export function parseAutonomy(text) { const sep = line.indexOf(':') if (sep === -1) throw new Error(`autonomy.yml: невалідний рядок ${JSON.stringify(line)}`) const key = line.slice(0, sep).trim() + if (RESERVED_KEYS.includes(key)) continue const value = line.slice(sep + 1).trim() if (!GATES.includes(value)) throw new Error(`autonomy.yml: клас ${key} — невідомий гейт ${JSON.stringify(value)}`) policy[key] = value diff --git a/owner/src/components/DecisionCard.vue b/owner/src/components/DecisionCard.vue index 292d9d7..951854e 100644 --- a/owner/src/components/DecisionCard.vue +++ b/owner/src/components/DecisionCard.vue @@ -2,6 +2,12 @@ + {{ decision.node.path }} {{ decision.workspace.label }} diff --git a/owner/src/components/OnboardingDialog.vue b/owner/src/components/OnboardingDialog.vue index c4f20ac..d1eccaf 100644 --- a/owner/src/components/OnboardingDialog.vue +++ b/owner/src/components/OnboardingDialog.vue @@ -56,6 +56,27 @@ + +
Хто ти
+

+ Handle визначає твій скоуп: черга і задачі фільтруються по піддеревах, де owner: — це ти. Той + самий формат, що assignee в h.md; email та імʼя лишаються поза git. Ліс без + owner:-розмітки — увесь твій. +

+ +
+
@@ -106,7 +127,26 @@ const { baseUrl, model, apiKey, saveOmlx } = usePlanner() const paths = ref([]) const newPath = ref('') const saving = ref(false) +const handle = ref(null) +const knownHandles = ref([]) let dirty = false +let savedHandle = null + +/** + * Handles, що вже зустрічаються в owner:-розмітці лісу — підказки для + * вибору «хто ти» (замість введення наосліп). + * @returns {Promise} + */ +async function loadKnownHandles() { + const found = await dispatch('workspaces') + if (!found.ok) return + const handles = new Set() + for (const workspace of found.output) { + const marked = await dispatch('scan_owners', { tasksDir: workspace.path }) + if (marked.ok) for (const owner of Object.values(marked.output)) handles.add(owner) + } + knownHandles.value = [...handles].toSorted() +} watch( () => props.modelValue, @@ -115,6 +155,10 @@ watch( dirty = false const read = await dispatch('project_paths') if (read.ok) paths.value = read.output + const me = await dispatch('whoami') + savedHandle = me.ok ? (me.output ?? null) : null + handle.value = savedHandle + await loadKnownHandles() } ) @@ -166,6 +210,13 @@ async function start() { return } } + if ((handle.value ?? '') !== (savedHandle ?? '')) { + const saved = await dispatch('set_identity', { handle: handle.value ?? '' }) + if (!saved.ok) { + $q.notify({ type: 'negative', message: saved.error.message }) + return + } + } markOnboarded() emit('update:modelValue', false) emit('started') @@ -274,6 +325,15 @@ async function start() { flex: 1; } +.ob-identity { + padding-top: 8px; + padding-bottom: 0; +} + +.ob-identity-input { + max-width: 260px; +} + .ob-model { padding-top: 8px; padding-bottom: 0; diff --git a/owner/src/components/OwnerScreen.vue b/owner/src/components/OwnerScreen.vue index 523fc7c..8b42cb0 100644 --- a/owner/src/components/OwnerScreen.vue +++ b/owner/src/components/OwnerScreen.vue @@ -17,6 +17,15 @@ :loading="criticRunning" /> +
@@ -59,7 +68,7 @@ import PlannerDialog from './PlannerDialog.vue' // заголовок оголошує причину, ручний перемикач — вихід із адаптивності. // Детермінований критик оновлюється з кожним rescan; семантичний — кнопкою. -const { workspaces, forest, delta, loading, rescan, watchForest } = useForest() +const { workspaces, forest, delta, loading, scopes, identity, rescan, watchForest } = useForest() const { verdicts: criticVerdicts, running: criticRunning, refreshDeterministic, runSemantic, dismiss } = useCritic() watch(forest, value => refreshDeterministic(workspaces.value, value)) @@ -74,8 +83,8 @@ const manualMode = ref(null) const plannerOpen = ref(false) const onboardingOpen = ref(false) -const decisions = computed(() => collectDecisions(workspaces.value, forest.value)) -const personal = computed(() => collectPersonal(workspaces.value, forest.value)) +const decisions = computed(() => collectDecisions(workspaces.value, forest.value, scopes.value)) +const personal = computed(() => collectPersonal(workspaces.value, forest.value, scopes.value)) const auto = computed(() => chooseMode({ decisionCount: decisions.value.length + criticVerdicts.value.length, deltaCount: delta.value.length }) diff --git a/owner/src/components/docs/DecisionCard.md b/owner/src/components/docs/DecisionCard.md index df1dc65..c12d06c 100644 --- a/owner/src/components/docs/DecisionCard.md +++ b/owner/src/components/docs/DecisionCard.md @@ -3,7 +3,7 @@ type: Vue Component title: DecisionCard.vue resource: owner/src/components/DecisionCard.vue docgen: - crc: 7af66263 + crc: b3ab9523 model: openai-codex/gpt-5.4-mini --- diff --git a/owner/src/components/docs/OnboardingDialog.md b/owner/src/components/docs/OnboardingDialog.md index e608d3c..6a0d836 100644 --- a/owner/src/components/docs/OnboardingDialog.md +++ b/owner/src/components/docs/OnboardingDialog.md @@ -3,7 +3,7 @@ type: Vue Component title: OnboardingDialog.vue resource: owner/src/components/OnboardingDialog.vue docgen: - crc: b0073ad4 + crc: be154859 model: omlx/gemma-4-e4b-it-OptiQ-4bit --- diff --git a/owner/src/components/docs/OwnerScreen.md b/owner/src/components/docs/OwnerScreen.md index edb5e42..6d46f6e 100644 --- a/owner/src/components/docs/OwnerScreen.md +++ b/owner/src/components/docs/OwnerScreen.md @@ -3,7 +3,7 @@ type: Vue Component title: OwnerScreen.vue resource: owner/src/components/OwnerScreen.vue docgen: - crc: e424293a + crc: 2c48ef8d model: openai-codex/gpt-5.4-mini --- diff --git a/owner/src/composables/docs/use-forest.md b/owner/src/composables/docs/use-forest.md index 1e32c5c..e71d43f 100644 --- a/owner/src/composables/docs/use-forest.md +++ b/owner/src/composables/docs/use-forest.md @@ -3,9 +3,8 @@ type: JS Module title: use-forest.js resource: owner/src/composables/use-forest.js docgen: - crc: 167db866 + crc: f4c6a603 model: openai-codex/gpt-5.4-mini - tier: cloud-min score: 100 issues: judge:inaccurate:0.98 judgeModel: openai-codex/gpt-5.4-mini diff --git a/owner/src/composables/use-forest.js b/owner/src/composables/use-forest.js index 28112e6..02dd8a6 100644 --- a/owner/src/composables/use-forest.js +++ b/owner/src/composables/use-forest.js @@ -1,22 +1,41 @@ import { invoke } from '@tauri-apps/api/core' import { listen } from '@tauri-apps/api/event' import { diffForest, readSnapshot, snapshotForest, writeSnapshot } from '../delta.js' +import { deriveScopes } from '../scope.js' import { dispatch } from '../tool/index.js' // Спільний стан лісу задач власника: воркспейси + дерева вузлів + дельта // проти знімка минулого візиту. Baseline фіксується на першому завантаженні // сесії — refresh порівнює з ним, а не з щойно записаним знімком, тож дельта // не «зʼїдає» сама себе посеред сесії. +// M5: ліс доповнюється owner:-розміткою (scan_owners) та ідентичністю +// (whoami) — з них деривуються скоупи, що фільтрують чергу/задачі/дельту. const workspaces = ref([]) const forest = ref({}) const loading = ref(false) const delta = ref([]) +const identity = ref(null) +const scopes = ref({}) let baseline = null let watching = false let debounceTimer = null +/** + * Лишає у дельті лише мої новини: мій скоуп, межі контрактів (стан + * делегованого вузла — новина замовника) і «нічию землю». + * @param {Array<{ workspace: string, path: string }>} rows рядки дельти + * @param {Record string }>} scopeByWs скоуп за шляхом воркспейсу + * @returns {Array} відфільтровані рядки + */ +function scopeDelta(rows, scopeByWs) { + return rows.filter(row => { + const cls = scopeByWs[row.workspace]?.classify(row.path) ?? 'mine' + return cls !== 'foreign' + }) +} + /** * Сканує всі воркспейси лісу через tool-поверхню і оновлює дельту. * @returns {Promise} @@ -28,16 +47,23 @@ async function rescan() { if (!found.ok) throw new Error(found.error.message) workspaces.value = found.output.map(w => ({ label: w.label, path: w.path })) + const me = await dispatch('whoami') + identity.value = me.ok ? (me.output ?? null) : null + const trees = {} + const ownersByWs = {} for (const workspace of workspaces.value) { const scanned = await dispatch('scan', { tasksDir: workspace.path }) trees[workspace.path] = scanned.ok ? scanned.output : [] + const marked = await dispatch('scan_owners', { tasksDir: workspace.path }) + ownersByWs[workspace.path] = marked.ok ? marked.output : {} } forest.value = trees + scopes.value = deriveScopes(ownersByWs, identity.value) const current = snapshotForest(trees) baseline ??= readSnapshot() ?? current - delta.value = diffForest(baseline, current) + delta.value = scopeDelta(diffForest(baseline, current), scopes.value) writeSnapshot(current) } catch (error) { console.error('forest rescan failed', error) diff --git a/owner/src/decisions.js b/owner/src/decisions.js index 86d9627..8283469 100644 --- a/owner/src/decisions.js +++ b/owner/src/decisions.js @@ -43,30 +43,44 @@ function walk(nodes, pick) { } /** - * Рішення, що чекають власника, з усього лісу — відсортовані за ціною помилки. + * Рішення, що чекають власника, з мого скоупу лісу — відсортовані за ціною + * помилки. Без scopes (нерозмічений ліс / legacy-виклик) — увесь ліс, як + * раніше. «Нічия земля» (orphaned) потрапляє в чергу всім із прапорцем — + * загублена ескалація гірша за зайвий рядок (M5, спека 260714). * @param {Array<{ label: string, path: string }>} workspaces воркспейси лісу * @param {Record} forest дерева вузлів за шляхом воркспейсу - * @returns {Array<{ node: object, workspace: object, stake: number, headline: string, actions: string[] }>} черга рішень + * @param {Record string }>} [scopes] скоуп за шляхом воркспейсу + * @returns {Array<{ node: object, workspace: object, stake: number, headline: string, actions: string[], orphaned?: boolean }>} черга рішень */ -export function collectDecisions(workspaces, forest) { +export function collectDecisions(workspaces, forest, scopes) { const rows = workspaces.flatMap(workspace => walk(forest[workspace.path], node => { const verdict = VERDICTS[node.state] - return verdict ? { node, workspace, ...verdict } : null + if (!verdict) return null + const cls = scopes?.[workspace.path]?.classify(node.path) ?? 'mine' + if (cls === 'mine') return { node, workspace, ...verdict } + if (cls === 'orphaned') return { node, workspace, ...verdict, orphaned: true } + return null }) ) return rows.toSorted((a, b) => a.stake - b.stake) } /** - * Особисті задачі власника — pending h.md-вузли: це робота, не рішення, - * тож у чергу вони не потрапляють (показуються у брифі). + * Особисті задачі власника — pending h.md-вузли мого скоупу: це робота, + * не рішення, тож у чергу вони не потрапляють (показуються у брифі). + * Чужі й нічийні pending — не мої задачі. * @param {Array<{ label: string, path: string }>} workspaces воркспейси лісу * @param {Record} forest дерева вузлів за шляхом воркспейсу + * @param {Record string }>} [scopes] скоуп за шляхом воркспейсу * @returns {Array<{ node: object, workspace: object }>} задачі на сьогодні */ -export function collectPersonal(workspaces, forest) { +export function collectPersonal(workspaces, forest, scopes) { return workspaces.flatMap(workspace => - walk(forest[workspace.path], node => (node.state === 'pending' ? { node, workspace } : null)) + walk(forest[workspace.path], node => + node.state === 'pending' && (scopes?.[workspace.path]?.classify(node.path) ?? 'mine') === 'mine' + ? { node, workspace } + : null + ) ) } diff --git a/owner/src/docs/autonomy.md b/owner/src/docs/autonomy.md index a2aab88..32967f9 100644 --- a/owner/src/docs/autonomy.md +++ b/owner/src/docs/autonomy.md @@ -3,9 +3,8 @@ type: JS Module title: autonomy.js resource: owner/src/autonomy.js docgen: - crc: af749c01 + crc: f6ef7458 model: omlx/gemma-4-e4b-it-OptiQ-4bit - tier: local-min-retry score: 100 issues: judge:inaccurate:0.98 judgeModel: openai-codex/gpt-5.4-mini diff --git a/owner/src/docs/decisions.md b/owner/src/docs/decisions.md index c0d19bf..958af97 100644 --- a/owner/src/docs/decisions.md +++ b/owner/src/docs/decisions.md @@ -3,9 +3,8 @@ type: JS Module title: decisions.js resource: owner/src/decisions.js docgen: - crc: f8de9196 + crc: fdf082b8 model: openai-codex/gpt-5.4-mini - tier: cloud-min score: 100 issues: judge:inaccurate:0.93 judgeModel: openai-codex/gpt-5.4-mini diff --git a/owner/src/docs/index.md b/owner/src/docs/index.md index e061bd2..b8b39df 100644 --- a/owner/src/docs/index.md +++ b/owner/src/docs/index.md @@ -15,5 +15,6 @@ resource: owner/src/ | [mission.js](mission.md) | JS Module | | [onboarding.js](onboarding.md) | JS Module | | [planner.js](planner.md) | JS Module | +| [scope.js](scope.md) | JS Module | | [screen-mode.js](screen-mode.md) | JS Module | | [staff.js](staff.md) | JS Module | diff --git a/owner/src/docs/scope.md b/owner/src/docs/scope.md new file mode 100644 index 0000000..2d59d5a --- /dev/null +++ b/owner/src/docs/scope.md @@ -0,0 +1,37 @@ +--- +type: JS Module +title: scope.js +resource: owner/src/scope.js +docgen: + crc: 655e3ef9 + model: omlx/gemma-4-e4b-it-OptiQ-4bit + tier: local-min + score: 100 + issues: judge:inaccurate:0.98 + judgeModel: openai-codex/gpt-5.4-mini +--- + +## Огляд + +Визначає ефективного власника шляху, розраховує області видимості та класифікації вузлів воркспейсу, використовуючи публічні функції `effectiveOwnerOf`, `deriveScope` та `deriveScopes`. + +## Поведінка + +Поведінка +effectiveOwnerOf визначає найдовший префікс шляху з позначкою власника у наданому розміщенні. +deriveScope визначає класифікацію вузлів воркспейсу відносно заданої особи, якщо розмітка воркспейсу і моя ідентичність визначені. +deriveScopes обчислює класифікацію вузлів воркспейсу для кожного шляху у наданому розміщенні воркспейсу, використовуючи мою ідентичність. + +## Публічний API + +effectiveOwnerOf — Визначає основного відповідального за вузол, беручи найдовший префікс шляху, позначений як власника, і синхронізує це з Rust-бекендом. +deriveScope — Класифікує вузли у робочому просторі відповідно до мого статусу. +mine — Позначає, що я є ефективним власником або що дерево не містить розмітки власника. +boundary — Позначає межу контракту: вузол належить іншому, але його батько належить мені; я бачу лише фасад цього контракту. +foreign — Позначає елементи поза межами мого контракту, які не обробляються в черзі чи дельті. +orphaned — Позначає дерево, що має розмітку власника, але власник не може бути визначений, відображаючи всім запрошення про призначення власника. +deriveScopes — Визначає скоупи кожного робочого простору дерева, виходячи з розмітки та моєї особистості. + +## Гарантії поведінки + +- Read-only: не виконує операцій запису (ФС/БД). diff --git a/owner/src/scope.js b/owner/src/scope.js new file mode 100644 index 0000000..318b169 --- /dev/null +++ b/owner/src/scope.js @@ -0,0 +1,67 @@ +// Скоуп власника (M5, docs/specs/260714-cognitive-delegation.md): «мій скоуп» +// — не налаштування, а деривація з owner:-розмітки autonomy.yml у git. +// Фрактальне успадкування йде за графом задач, не за оргструктурою: власник +// вузла володіє нащадками, доки нащадок не делегований комусь іншому. +// Ліс без жодного owner: — нерозмічений: усе моє (single-owner виродження). + +/** + * Ефективний власник вузла: найдовший префікс шляху з owner:-розміткою + * (дзеркалить effective_owner_of у Rust-бекенді). + * @param {Record} owners розмітка воркспейсу {nodePath: handle} + * @param {string} path шлях вузла (сегменти через «/») + * @returns {string|null} handle власника, або null — вузол без власника + */ +export function effectiveOwnerOf(owners, path) { + const segments = path.split('/') + for (let i = segments.length; i >= 1; i--) { + const owner = owners?.[segments.slice(0, i).join('/')] + if (owner) return owner + } + return null +} + +/** + * Класифікація вузлів воркспейсу відносно мене. + * - `mine` — я effective owner (або ліс нерозмічений); + * - `boundary` — межа контракту: вузол делеговано іншому, а його батько мій + * (я замовник — бачу контрактний фасад і зміни стану самого вузла); + * - `foreign` — чужа кухня під межею (не вантажиться у чергу/дельту); + * - `orphaned` — «нічия земля»: розмічений ліс, а власник не резолвиться + * (fail-visible: показується всім із запрошенням призначити власника). + * @param {Record} owners розмітка воркспейсу {nodePath: handle} + * @param {string|null} me мій handle (null — ідентичність не налаштована) + * @returns {{ marked: boolean, classify: (path: string) => 'mine'|'boundary'|'foreign'|'orphaned' }} скоуп воркспейсу + */ +export function deriveScope(owners, me) { + const marked = Object.keys(owners ?? {}).length > 0 + + /** + * @param {string} path шлях вузла + * @returns {'mine'|'boundary'|'foreign'|'orphaned'} клас вузла відносно мене + */ + function classify(path) { + if (!marked) return 'mine' + const owner = effectiveOwnerOf(owners, path) + if (owner === null) return 'orphaned' + if (me !== null && owner === me) return 'mine' + // Чужий вузол: межа контракту — сам розмічений вузол, чий батько мій. + const parent = path.includes('/') ? path.slice(0, path.lastIndexOf('/')) : null + const parentOwner = parent === null ? null : effectiveOwnerOf(owners, parent) + const parentIsMine = parent !== null && me !== null && parentOwner === me + return owners[path] && parentIsMine ? 'boundary' : 'foreign' + } + + return { marked, classify } +} + +/** + * Скоуп кожного воркспейсу лісу з розмітки й моєї ідентичності. + * @param {Record>} ownersByWorkspace розмітка за шляхом воркспейсу + * @param {string|null} me мій handle + * @returns {Record>} скоуп за шляхом воркспейсу + */ +export function deriveScopes(ownersByWorkspace, me) { + return Object.fromEntries( + Object.entries(ownersByWorkspace ?? {}).map(([path, owners]) => [path, deriveScope(owners, me)]) + ) +} diff --git a/owner/src/tests/decisions.test.js b/owner/src/tests/decisions.test.js index 25839bf..f21ea02 100644 --- a/owner/src/tests/decisions.test.js +++ b/owner/src/tests/decisions.test.js @@ -59,3 +59,41 @@ describe('collectPersonal', () => { expect(decisions).toEqual([]) }) }) + +describe('скоуп власника (M5)', () => { + const forest = { + '/demo/mt': [ + node('mine', 'plan_review', [node('mine/todo', 'pending'), node('mine/delegated', 'unresolvable')]), + node('stray', 'failed'), + node('mine2', 'pending') + ] + } + // mine* — мої, mine/delegated — делеговано, stray — «нічия земля» + const scopes = { + '/demo/mt': { + marked: true, + classify: path => { + if (path === 'mine/delegated') return 'boundary' + if (path === 'stray') return 'orphaned' + return path.startsWith('mine') ? 'mine' : 'foreign' + } + } + } + + it('черга — лише мій скоуп, «нічия земля» з прапорцем, межі без рішень', () => { + const rows = collectDecisions([WS], forest, scopes) + expect(rows.map(r => [r.node.path, r.orphaned ?? false])).toEqual([ + ['stray', true], + ['mine', false] + ]) + }) + + it('особисті задачі — лише мої pending', () => { + const forest2 = { '/demo/mt': [node('mine/todo', 'pending'), node('stray', 'pending')] } + expect(collectPersonal([WS], forest2, scopes).map(r => r.node.path)).toEqual(['mine/todo']) + }) + + it('без scopes — легасі-поведінка: усе моє', () => { + expect(collectDecisions([WS], forest).length).toBeGreaterThan(2) + }) +}) diff --git a/owner/src/tests/scope.test.js b/owner/src/tests/scope.test.js new file mode 100644 index 0000000..77877fd --- /dev/null +++ b/owner/src/tests/scope.test.js @@ -0,0 +1,68 @@ +import { describe, expect, it } from 'vitest' +import { deriveScope, deriveScopes, effectiveOwnerOf } from '../scope.js' + +describe('effectiveOwnerOf', () => { + it('повертає власника вузла або найближчого розміченого предка', () => { + const owners = { goal: 'olena', 'goal/api/deploy': 'vkozlov' } + expect(effectiveOwnerOf(owners, 'goal')).toBe('olena') + expect(effectiveOwnerOf(owners, 'goal/api')).toBe('olena') + expect(effectiveOwnerOf(owners, 'goal/api/deploy')).toBe('vkozlov') + expect(effectiveOwnerOf(owners, 'goal/api/deploy/tests')).toBe('vkozlov') + }) + + it('вузол поза розміченими піддеревами — без власника', () => { + expect(effectiveOwnerOf({ goal: 'olena' }, 'other')).toBeNull() + expect(effectiveOwnerOf({}, 'goal')).toBeNull() + }) +}) + +describe('deriveScope', () => { + it('нерозмічений ліс — усе моє (single-owner виродження)', () => { + const scope = deriveScope({}, null) + expect(scope.marked).toBe(false) + expect(scope.classify('anything/at/all')).toBe('mine') + }) + + it('розмічений ліс: mine / boundary / foreign / orphaned', () => { + const owners = { goal: 'olena', 'goal/api': 'vkozlov' } + const scope = deriveScope(owners, 'olena') + expect(scope.marked).toBe(true) + expect(scope.classify('goal')).toBe('mine') + expect(scope.classify('goal/docs')).toBe('mine') + // делегований вузол, чий батько мій — межа контракту + expect(scope.classify('goal/api')).toBe('boundary') + // кухня під межею — чужа + expect(scope.classify('goal/api/impl')).toBe('foreign') + // розмічений ліс, власник не резолвиться — «нічия земля» + expect(scope.classify('orphan')).toBe('orphaned') + }) + + it('той самий ліс очима іншого власника', () => { + const owners = { goal: 'olena', 'goal/api': 'vkozlov' } + const scope = deriveScope(owners, 'vkozlov') + expect(scope.classify('goal/api')).toBe('mine') + expect(scope.classify('goal/api/impl')).toBe('mine') + expect(scope.classify('goal')).toBe('foreign') + expect(scope.classify('goal/docs')).toBe('foreign') + }) + + it('розмічений ліс без ідентичності — нічого мого, orphaned видно', () => { + const scope = deriveScope({ goal: 'olena' }, null) + expect(scope.classify('goal')).toBe('foreign') + expect(scope.classify('stray')).toBe('orphaned') + }) + + it('чужий корінь без мого батька — foreign, не boundary', () => { + const scope = deriveScope({ theirs: 'vkozlov' }, 'olena') + expect(scope.classify('theirs')).toBe('foreign') + }) +}) + +describe('deriveScopes', () => { + it('скоуп на кожен воркспейс лісу', () => { + const scopes = deriveScopes({ '/a/mt': { goal: 'olena' }, '/b/mt': {} }, 'olena') + expect(scopes['/a/mt'].marked).toBe(true) + expect(scopes['/b/mt'].marked).toBe(false) + expect(scopes['/b/mt'].classify('x')).toBe('mine') + }) +}) diff --git a/owner/src/tests/tool.test.js b/owner/src/tests/tool.test.js index 8be760b..c81ba1b 100644 --- a/owner/src/tests/tool.test.js +++ b/owner/src/tests/tool.test.js @@ -20,6 +20,7 @@ describe('owner tool catalog', () => { 'draft_plan', 'mark_done', 'reject_plan', + 'set_identity', 'set_project_paths', 'write_autonomy' ]) diff --git a/owner/src/tool/catalog.js b/owner/src/tool/catalog.js index ee5bc7f..f215ef3 100644 --- a/owner/src/tool/catalog.js +++ b/owner/src/tool/catalog.js @@ -107,6 +107,29 @@ export const TOOLS = [ }, tauri: 'spawn_reject' }, + { + tier: 'read', + name: 'whoami', + summary: "Read the configured owner identity handle (null — the 'who are you' step not done yet).", + input: {}, + tauri: 'get_identity' + }, + { + tier: 'write', + name: 'set_identity', + summary: 'Persist the owner identity handle locally (PII stays out of git — mt directory policy).', + input: { + handle: { type: 'string', required: true, description: 'Owner handle, same format as h.md assignee.' } + }, + tauri: 'set_identity' + }, + { + tier: 'read', + name: 'scan_owners', + summary: 'Collect the owner: markup of a workspace (autonomy.yml files) — raw input for scope derivation.', + input: { tasksDir: TASKS_DIR }, + tauri: 'scan_owners' + }, { tier: 'read', name: 'read_autonomy', diff --git a/owner/src/tool/docs/catalog.md b/owner/src/tool/docs/catalog.md index 77fa0b2..00e099d 100644 --- a/owner/src/tool/docs/catalog.md +++ b/owner/src/tool/docs/catalog.md @@ -3,7 +3,7 @@ type: JS Module title: catalog.js resource: owner/src/tool/catalog.js docgen: - crc: 79287e9a + crc: f68b3f3d model: openai-codex/gpt-5.5 score: 100 issues: judge:inaccurate:0.95 From 70bbad6f57841a2aab08cb8ed5b1fc327841fc78 Mon Sep 17 00:00:00 2001 From: vitaliytv Date: Thu, 16 Jul 2026 08:00:34 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=93=9D=20docs(owner):=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D1=96=D1=8F=20lib.md?= =?UTF-8?q?=20=D0=BF=D1=96=D1=81=D0=BB=D1=8F=20=D0=BC=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=B6=D1=83=20main=20(CRC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- owner/src-tauri/src/docs/lib.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owner/src-tauri/src/docs/lib.md b/owner/src-tauri/src/docs/lib.md index 9750396..8f2d62b 100644 --- a/owner/src-tauri/src/docs/lib.md +++ b/owner/src-tauri/src/docs/lib.md @@ -3,7 +3,7 @@ type: Rust Module title: lib.rs resource: owner/src-tauri/src/lib.rs docgen: - crc: b9192bb9 + crc: 54d77e94 model: openai-codex/gpt-5.4-mini score: 100 issues: judge:inaccurate:0.99