From d706108ca6507bca7924cec8a0a3a538549f46f0 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 12:16:36 +0900 Subject: [PATCH 01/10] fix user_id default set --- apps/desktop/src/store/tinybase/main.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/apps/desktop/src/store/tinybase/main.ts b/apps/desktop/src/store/tinybase/main.ts index 4ff7594e5..024f7445a 100644 --- a/apps/desktop/src/store/tinybase/main.ts +++ b/apps/desktop/src/store/tinybase/main.ts @@ -63,6 +63,7 @@ export const StoreComponent = () => { .setTablesSchema(SCHEMA.table) .setValuesSchema(SCHEMA.value) ); + store.setValue("user_id", DEFAULT_USER_ID); useDidFinishTransactionListener( () => { @@ -97,16 +98,7 @@ export const StoreComponent = () => { storeIdColumnName: "id", }), [], - async (persister) => { - await persister.load(); - - if (!store.getValue("user_id")) { - store.setValue("user_id", DEFAULT_USER_ID); - } - - await persister.startAutoSave(); - await persister.startAutoLoad(); - }, + async (persister) => await persister.startAutoPersisting(), ); const synchronizer = useCreateSynchronizer( From 4b80f591efa42ee63ed61c211a6037ee4ee9db40 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 12:24:45 +0900 Subject: [PATCH 02/10] update deps --- Cargo.lock | 891 ++++---- apps/desktop/package.json | 54 +- apps/pro/package.json | 4 +- apps/web/package.json | 28 +- apps/web/src/functions/stripe.ts | 2 +- apps/web/supabase/functions/stripe/deno.json | 6 +- apps/web/supabase/functions/stripe/deno.lock | 16 +- apps/web/supabase/functions/stripe/index.ts | 2 +- packages/db/package.json | 4 +- packages/tiptap/package.json | 50 +- packages/ui/package.json | 2 +- packages/utils/package.json | 6 +- pnpm-lock.yaml | 1946 +++++++++--------- 13 files changed, 1520 insertions(+), 1491 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d92bd3732..51c46cc00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-core", "futures-sink", @@ -40,7 +40,7 @@ dependencies = [ "actix-service", "actix-utils", "base64 0.22.1", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "bytestring", "derive_more 2.0.1", @@ -230,9 +230,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -247,7 +247,7 @@ dependencies = [ "bytes", "cfg-if", "http 1.3.1", - "indexmap 2.11.4", + "indexmap 2.12.0", "schemars 0.9.0", "serde", "serde_json", @@ -286,7 +286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "libc", ] @@ -771,7 +771,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -811,7 +811,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -848,7 +848,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1026,9 +1026,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.108.0" +version = "1.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200be4aed61e3c0669f7268bacb768f283f1c32a7014ce57225e1160be2f6ccb" +checksum = "3c6d81b75f8ff78882e70c5909804b44553d56136899fb4015a0a68ecc870e0e" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1082,9 +1082,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.88.0" +version = "1.89.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a68d675582afea0e94d38b6ca9c5aaae4ca14f1d36faa6edb19b42e687e70d7" +checksum = "695dc67bb861ccb8426c9129b91c30e266a0e3d85650cafdf62fcca14c8fd338" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1149,9 +1149,9 @@ dependencies = [ [[package]] name = "aws-sdk-transcribestreaming" -version = "1.89.0" +version = "1.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "972e22d658d1eedcff86c47c1f51c89599bd49830da8a9fc682c5ebb84f8deef" +checksum = "a5960c68943662749c752dfa3f0bbf3fb0f8d6d766b15eb20cdd3e379095830b" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1284,7 +1284,7 @@ dependencies = [ "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-native-certs 0.8.2", "rustls-pki-types", "tokio", @@ -1574,9 +1574,9 @@ dependencies = [ [[package]] name = "backon" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ "fastrand 2.3.0", "gloo-timers", @@ -1660,7 +1660,7 @@ dependencies = [ "globset", "grep-cli", "home", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools 0.13.0", "nu-ansi-term", "once_cell", @@ -1697,7 +1697,7 @@ version = "0.66.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "lazy_static", @@ -1710,7 +1710,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn 2.0.108", "which", ] @@ -1720,7 +1720,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1733,7 +1733,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn 2.0.108", "which", ] @@ -1743,7 +1743,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1754,7 +1754,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1763,7 +1763,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1774,7 +1774,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1811,11 +1811,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -1895,7 +1895,7 @@ dependencies = [ "hyperlocal", "log", "pin-project-lite", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-native-certs 0.8.2", "rustls-pemfile 2.2.0", "rustls-pki-types", @@ -1953,7 +1953,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1968,7 +1968,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -1994,9 +1994,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "regex-automata", @@ -2036,7 +2036,7 @@ dependencies = [ "proc-macro2", "quote", "str_inflector", - "syn 2.0.106", + "syn 2.0.108", "thiserror 1.0.69", "try_match", ] @@ -2064,7 +2064,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2137,7 +2137,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2152,7 +2152,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cairo-sys-rs", "glib", "libc", @@ -2435,9 +2435,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" dependencies = [ "find-msvc-tools", "jobserver", @@ -2613,9 +2613,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.49" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -2623,9 +2623,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -2643,7 +2643,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2698,7 +2698,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "cocoa-foundation", "core-foundation 0.10.1", @@ -2714,7 +2714,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-foundation 0.10.1", "core-graphics-types 0.2.0", @@ -2842,7 +2842,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e549344080374f9b32ed41bf3b6b57885ff6a289367b3dbc10eea8acc1918" dependencies = [ "convert_case 0.6.0", - "indexmap 2.11.4", + "indexmap 2.12.0", "json5", "pathdiff", "ron", @@ -2991,7 +2991,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -3004,7 +3004,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -3028,7 +3028,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "libc", ] @@ -3229,7 +3229,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "mio", "parking_lot 0.12.5", @@ -3310,26 +3310,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -3341,16 +3341,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "ctrlc" -version = "3.5.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" +checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" dependencies = [ - "dispatch", + "dispatch2", "nix 0.30.1", "windows-sys 0.61.2", ] @@ -3402,7 +3402,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3416,7 +3416,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3427,7 +3427,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3438,7 +3438,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3769,9 +3769,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -3785,7 +3785,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3806,7 +3806,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3816,7 +3816,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3829,7 +3829,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3849,7 +3849,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "unicode-xid", ] @@ -3986,7 +3986,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -4000,7 +4000,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4032,7 +4032,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4259,7 +4259,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4280,7 +4280,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4497,7 +4497,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4606,9 +4606,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -4659,7 +4659,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4794,7 +4794,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5325,7 +5325,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5334,7 +5334,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -5426,18 +5426,18 @@ dependencies = [ [[package]] name = "gix-bitmap" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1db9765c69502650da68f0804e3dc2b5f8ccc6a2d104ca6c85bc40700d37540" +checksum = "5e150161b8a75b5860521cb876b506879a3376d3adc857ec7a9d35e7c6a5e531" dependencies = [ "thiserror 2.0.17", ] [[package]] name = "gix-chunk" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b1f1d8764958699dc764e3f727cef280ff4d1bd92c107bbf8acd85b30c1bd6f" +checksum = "5c356b3825677cb6ff579551bb8311a81821e184453cbd105e2fc5311b288eeb" dependencies = [ "thiserror 2.0.17", ] @@ -5495,7 +5495,7 @@ version = "0.14.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bstr", "gix-path", "libc", @@ -5599,7 +5599,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f4399af6ec4fd9db84dd4cf9656c5c785ab492ab40a7c27ea92b4241923fed" dependencies = [ "gix-trace", - "gix-utils 0.3.0", + "gix-utils 0.3.1", "libc", "prodash", ] @@ -5649,7 +5649,7 @@ dependencies = [ "fastrand 2.3.0", "gix-features 0.42.1", "gix-path", - "gix-utils 0.3.0", + "gix-utils 0.3.1", "thiserror 2.0.17", ] @@ -5659,7 +5659,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bstr", "gix-features 0.41.1", "gix-path", @@ -5719,7 +5719,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "855bece2d4153453aa5d0a80d51deea1ce8cd6a3b4cf213da85ac344ccb908a7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bstr", "filetime", "fnv", @@ -5748,7 +5748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "570f8b034659f256366dc90f1a24924902f20acccd6a15be96d44d1269e7a796" dependencies = [ "gix-tempfile", - "gix-utils 0.3.0", + "gix-utils 0.3.1", "thiserror 2.0.17", ] @@ -5838,15 +5838,14 @@ dependencies = [ [[package]] name = "gix-path" -version = "0.10.20" +version = "0.10.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06d37034a4c67bbdda76f7bcd037b2f7bc0fba0c09a6662b19697a5716e7b2fd" +checksum = "0416b41cd00ff292af9b94b0660880c44bd2ed66828ddca9a2b333535cbb71b8" dependencies = [ "bstr", "gix-trace", - "gix-validate 0.10.0", + "gix-validate 0.10.1", "home", - "once_cell", "thiserror 2.0.17", ] @@ -5856,7 +5855,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fef8422c3c9066d649074b24025125963f85232bfad32d6d16aea9453b82ec14" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bstr", "gix-attributes", "gix-config-value", @@ -5936,7 +5935,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "342caa4e158df3020cadf62f656307c3948fe4eacfdf67171d7212811860c3e9" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bstr", "gix-commitgraph", "gix-date", @@ -5969,7 +5968,7 @@ version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gix-path", "libc", "windows-sys 0.52.0", @@ -6043,9 +6042,9 @@ dependencies = [ [[package]] name = "gix-trace" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ccaf54b0b1743a695b482ca0ab9d7603744d8d10b2e5d1a332fef337bee658" +checksum = "1d3f59a8de2934f6391b6b3a1a7654eae18961fcb9f9c843533fed34ad0f3457" [[package]] name = "gix-transport" @@ -6069,7 +6068,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36c0b049f8bdb61b20016694102f7b507f2e1727e83e9c5e6dad4f7d84ff7384" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gix-commitgraph", "gix-date", "gix-hash 0.17.0", @@ -6107,9 +6106,9 @@ dependencies = [ [[package]] name = "gix-utils" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5351af2b172caf41a3728eb4455326d84e0d70fe26fc4de74ab0bd37df4191c5" +checksum = "befcdbdfb1238d2854591f760a48711bed85e72d80a10e8f2f93f656746ef7c5" dependencies = [ "fastrand 2.3.0", "unicode-normalization", @@ -6127,9 +6126,9 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b9e00cacde5b51388d28ed746c493b18a6add1f19b5e01d686b3b9ece66d4d" +checksum = "5b1e63a5b516e970a594f870ed4571a8fdcb8a344e7bd407a20db8bd61dbfde4" dependencies = [ "bstr", "thiserror 2.0.17", @@ -6160,7 +6159,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "futures-channel", "futures-core", "futures-executor", @@ -6188,7 +6187,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6209,9 +6208,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab69130804d941f8075cfd713bf8848a2c3b3f201a9457a11e6f87e1ab62305" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", @@ -6226,7 +6225,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "ignore", "walkdir", ] @@ -6313,7 +6312,7 @@ dependencies = [ "http 1.3.1", "reqwest 0.12.24", "rustc_version", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-pemfile 2.2.0", "serde", "serde_json", @@ -6665,7 +6664,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6680,7 +6679,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -6699,7 +6698,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -6921,11 +6920,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -7191,7 +7190,7 @@ dependencies = [ "hyper 1.7.0", "hyper-util", "log", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-native-certs 0.8.2", "rustls-pki-types", "tokio", @@ -7318,22 +7317,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", - "yoke 0.8.0", + "yoke 0.8.1", "zerofrom", "zerovec", ] [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -7344,11 +7343,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -7359,44 +7357,40 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", - "yoke 0.8.0", + "yoke 0.8.1", "zerofrom", "zerotrie", "zerovec", @@ -7493,9 +7487,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -7518,9 +7512,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +checksum = "ade6dfcba0dfb62ad59e59e7241ec8912af34fd29e0e743e3db992bd278e8b65" dependencies = [ "console 0.16.1", "portable-atomic", @@ -7531,9 +7525,12 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "infer" @@ -7581,7 +7578,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7649,9 +7646,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -7741,7 +7738,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7793,9 +7790,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -7934,7 +7931,7 @@ source = "git+https://github.com/floneum/floneum?rev=52967ae#52967ae5dcd161e5cbe dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7975,7 +7972,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "serde", "unicode-segmentation", ] @@ -8031,7 +8028,7 @@ checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" dependencies = [ "cssparser", "html5ever", - "indexmap 2.11.4", + "indexmap 2.12.0", "selectors", ] @@ -8083,9 +8080,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy-regex" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" +checksum = "191898e17ddee19e60bccb3945aa02339e81edd4a8c50e21fd4d48cdecda7b29" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -8094,14 +8091,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +checksum = "c35dc8b0da83d1a9507e12122c80dea71a9c7c613014347392483a83ea593e04" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8210,7 +8207,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "redox_syscall 0.5.18", ] @@ -8226,7 +8223,7 @@ dependencies = [ "async-trait", "base64 0.21.7", "bincode", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "chrono", "crc32fast", @@ -8285,7 +8282,7 @@ version = "0.9.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c2e7739b3828a547d21834779ea699a3b46c3dcfafba75da103d36adcb7c0ab" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "fallible-iterator 0.2.0", "fallible-streaming-iterator", "hashlink 0.8.4", @@ -8299,10 +8296,10 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15a90128c708356af8f7d767c9ac2946692c9112b4f74f07b99a01a60680e413" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cc", "fallible-iterator 0.3.0", - "indexmap 2.11.4", + "indexmap 2.12.0", "log", "memchr", "phf 0.11.3", @@ -8383,9 +8380,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" @@ -8625,7 +8622,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8673,7 +8670,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8703,9 +8700,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", "stable_deref_trait", @@ -8732,7 +8729,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -8747,7 +8744,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -8778,7 +8775,7 @@ version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c4d14bcca0fd3ed165a03000480aaa364c6860c34e900cb2dafdf3b95340e77" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "debugid", "num-derive", "num-traits", @@ -8793,7 +8790,7 @@ version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abcd9c8a1e6e1e9d56ce3627851f39a17ea83e17c96bc510f29d7e43d78a7d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "cfg-if", "crash-context", @@ -8847,7 +8844,7 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9f264d75233323f4b7d2f03aefe8a990690cdebfbfe26ea86bcbaec5e9ac990" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "memo-map", "self_cell", "serde", @@ -8888,14 +8885,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "log", "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8917,7 +8914,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8949,9 +8946,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" +checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" dependencies = [ "num-traits", "pxfm", @@ -9031,7 +9028,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -9045,7 +9042,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -9097,7 +9094,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.1.1", "libc", @@ -9110,7 +9107,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -9273,7 +9270,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -9329,9 +9326,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -9339,14 +9336,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -9417,7 +9414,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -9433,7 +9430,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -9454,7 +9451,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69282c2b5bc58fba07cb9de2113619532eb551e98efe3d8d695509ef45fbd53b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "objc2 0.6.3", "objc2-core-foundation", @@ -9469,7 +9466,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478ae33fcac9df0a18db8302387c666b8ef08a3e2d62b510ca4fc278a384b6c0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "dispatch2", "objc2 0.6.3", @@ -9501,7 +9498,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -9535,7 +9532,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", ] @@ -9545,7 +9542,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9557,7 +9554,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -9568,7 +9565,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "dispatch2", "libc", @@ -9581,7 +9578,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -9628,7 +9625,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05ec576860167a15dd9fce7fbee7512beb4e31f532159d3482d1f9c6caedf31d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", "objc2-core-audio", @@ -9655,7 +9652,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -9667,7 +9664,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -9686,7 +9683,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b856880adb20bae9c1de8726b7218503268538775d22462eb839ed8959f05413" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-app-kit 0.2.2", @@ -9710,7 +9707,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -9722,7 +9719,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -9756,7 +9753,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -9777,7 +9774,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca30f6a66e39947b495622ae162d121c4e727e98c379bbed5c1b255904506368" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-app-kit 0.2.2", @@ -9804,7 +9801,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9816,7 +9813,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-app-kit 0.3.2", "objc2-foundation 0.3.2", @@ -9828,7 +9825,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9841,7 +9838,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -9852,7 +9849,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -9863,7 +9860,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -9875,7 +9872,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "objc2 0.6.3", "objc2-app-kit 0.3.2", @@ -9970,9 +9967,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "onig" @@ -9980,7 +9977,7 @@ version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "once_cell", "onig_sys", @@ -10041,7 +10038,7 @@ version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -10058,7 +10055,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10069,9 +10066,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "300.5.3+3.5.4" +version = "300.5.4+3.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6bad8cd0233b63971e232cc9c5e83039375b8586d2312f31fda85db8f888c2" +checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72" dependencies = [ "cc", ] @@ -10292,7 +10289,7 @@ dependencies = [ "env_logger", "file", "futures-util", - "indicatif 0.18.0", + "indicatif 0.18.2", "language", "log", "open", @@ -10302,7 +10299,7 @@ dependencies = [ "owhisper-model", "ratatui", "rodio", - "rustls 0.23.32", + "rustls 0.23.34", "schemars 0.8.22", "serde", "serde_json", @@ -10434,7 +10431,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10548,7 +10545,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10568,7 +10565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.11.4", + "indexmap 2.12.0", ] [[package]] @@ -10685,7 +10682,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10742,7 +10739,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10807,7 +10804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.11.4", + "indexmap 2.12.0", "quick-xml 0.38.3", "serde", "time", @@ -10860,7 +10857,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crc32fast", "fdeflate", "flate2", @@ -10952,9 +10949,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -10987,7 +10984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11059,9 +11056,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -11072,7 +11069,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "hex", ] @@ -11129,7 +11126,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11254,7 +11251,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls 0.23.34", "socket2 0.6.1", "thiserror 2.0.17", "tokio", @@ -11274,7 +11271,7 @@ dependencies = [ "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -11314,9 +11311,9 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "ractor" -version = "0.15.8" +version = "0.15.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a03628f080f90360ed29f8a577b90ad9488820e561d33d22f34f241e58845d" +checksum = "9500e0be6f12a0539cb1154d654ef2e888bf8529164e54aff4a097baad5bb001" dependencies = [ "bon 2.3.0", "dashmap", @@ -11467,7 +11464,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cassowary", "compact_str 0.8.1", "crossterm", @@ -11497,7 +11494,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -11582,7 +11579,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -11624,7 +11621,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11679,7 +11676,7 @@ checksum = "d7ef12e84481ab4006cb942f8682bba28ece7270743e649442027c5db87df126" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11758,7 +11755,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-pki-types", "serde", "serde_json", @@ -12057,7 +12054,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12080,8 +12077,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.9.4", - "indexmap 2.11.4", + "bitflags 2.10.0", + "indexmap 2.12.0", "serde", "serde_derive", ] @@ -12204,7 +12201,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -12217,7 +12214,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -12252,16 +12249,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.7", + "rustls-webpki 0.103.8", "subtle", "zeroize", ] @@ -12323,9 +12320,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -12354,9 +12351,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "aws-lc-rs", "ring 0.17.14", @@ -12496,7 +12493,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ "dyn-clone", - "indexmap 2.11.4", + "indexmap 2.12.0", "ref-cast", "schemars_derive 0.9.0", "serde", @@ -12526,7 +12523,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12538,7 +12535,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12550,7 +12547,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12582,7 +12579,7 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12637,7 +12634,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -12650,7 +12647,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -12687,9 +12684,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" [[package]] name = "semver" @@ -12835,7 +12832,7 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fac841c7050aa73fc2bec8f7d8e9cb1159af0b3095757b99820823f3e54e5080" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "sentry-backtrace", "sentry-core", "tracing-core", @@ -12936,7 +12933,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12947,7 +12944,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12957,7 +12954,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" dependencies = [ "form_urlencoded", - "indexmap 2.11.4", + "indexmap 2.12.0", "itoa", "ryu", "serde_core", @@ -12969,7 +12966,7 @@ version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "itoa", "memchr", "ryu", @@ -13053,7 +13050,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13088,15 +13085,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.12.0", "schemars 0.9.0", "schemars 1.0.4", "serde_core", @@ -13107,14 +13104,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13123,7 +13120,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "itoa", "ryu", "serde", @@ -13152,7 +13149,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13174,7 +13171,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13300,9 +13297,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ "libc", "mio", @@ -13505,7 +13502,7 @@ checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13618,7 +13615,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13761,7 +13758,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13772,7 +13769,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13803,7 +13800,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13816,7 +13813,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13908,9 +13905,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -13952,7 +13949,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13991,7 +13988,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "enum-as-inner", "libc", @@ -14005,7 +14002,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01198a2debb237c62b6826ec7081082d951f46dbb64b0e8c7649a452230d1dfc" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "enum-as-inner", "libc", @@ -14058,7 +14055,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -14098,11 +14095,11 @@ dependencies = [ [[package]] name = "tao" -version = "0.34.4" +version = "0.34.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6121216ff67fe4bcfe64508ea1700bc15f74937d835a07b4a209cc00a8926a84" +checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "core-foundation 0.10.1", "core-graphics 0.24.0", @@ -14144,7 +14141,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14175,9 +14172,9 @@ dependencies = [ [[package]] name = "tauri" -version = "2.8.5" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d1d3b3dc4c101ac989fd7db77e045cc6d91a25349cd410455cb5c57d510c1c" +checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" dependencies = [ "anyhow", "bytes", @@ -14221,7 +14218,6 @@ dependencies = [ "tokio", "tray-icon", "url", - "urlpattern", "webkit2gtk", "webview2-com", "window-vibrancy", @@ -14230,9 +14226,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.4.1" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f" +checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" dependencies = [ "anyhow", "cargo_toml", @@ -14252,9 +14248,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab3a62cf2e6253936a8b267c2e95839674e7439f104fa96ad0025e149d54d8a" +checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" dependencies = [ "base64 0.22.1", "brotli", @@ -14268,7 +14264,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.106", + "syn 2.0.108", "tauri-utils", "thiserror 2.0.17", "time", @@ -14279,14 +14275,14 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4368ea8094e7045217edb690f493b55b30caf9f3e61f79b4c24b6db91f07995e" +checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "tauri-codegen", "tauri-utils", ] @@ -14296,7 +14292,7 @@ name = "tauri-nspanel" version = "2.0.1" source = "git+https://github.com/ahkohd/tauri-nspanel?branch=v2#18ffb9a201fbf6fedfaa382fd4b92315ea30ab1a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "cocoa", "core-foundation 0.10.1", @@ -14309,9 +14305,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9946a3cede302eac0c6eb6c6070ac47b1768e326092d32efbb91f21ed58d978f" +checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" dependencies = [ "anyhow", "glob", @@ -14392,9 +14388,9 @@ dependencies = [ [[package]] name = "tauri-plugin-clipboard-manager" -version = "2.3.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adddd9e9275b20e77af3061d100a25a884cced3c4c9ef680bd94dd0f7e26c1ca" +checksum = "206dc20af4ed210748ba945c2774e60fd0acd52b9a73a028402caf809e9b6ecf" dependencies = [ "arboard", "log", @@ -14448,9 +14444,9 @@ dependencies = [ [[package]] name = "tauri-plugin-deep-link" -version = "2.4.3" +version = "2.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd67112fb1131834c2a7398ffcba520dbbf62c17de3b10329acd1a3554b1a9bb" +checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" dependencies = [ "dunce", "plist", @@ -14467,11 +14463,23 @@ dependencies = [ "windows-result 0.3.4", ] +[[package]] +name = "tauri-plugin-detect" +version = "0.1.0" +dependencies = [ + "detect", + "intercept", + "serde", + "tauri", + "tauri-plugin", + "thiserror 2.0.17", +] + [[package]] name = "tauri-plugin-dialog" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beee42a4002bc695550599b011728d9dfabf82f767f134754ed6655e434824e" +checksum = "313f8138692ddc4a2127c4c9607d616a46f5c042e77b3722450866da0aad2f19" dependencies = [ "log", "raw-window-handle", @@ -14487,9 +14495,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.4.2" +version = "2.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "315784ec4be45e90a987687bae7235e6be3d6e9e350d2b75c16b8a4bf22c1db7" +checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" dependencies = [ "anyhow", "dunce", @@ -14509,9 +14517,9 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938a3d7051c9a82b431e3a0f3468f85715b3442b3c3a3913095e9fa509e2652c" +checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" dependencies = [ "bytes", "cookie_store", @@ -14747,9 +14755,9 @@ dependencies = [ [[package]] name = "tauri-plugin-opener" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786156aa8e89e03d271fbd3fe642207da8e65f3c961baa9e2930f332bf80a1f5" +checksum = "c26b72571d25dee25667940027114e60f569fc3974f8cefbe50c2cbc5fd65e3b" dependencies = [ "dunce", "glob", @@ -14769,9 +14777,9 @@ dependencies = [ [[package]] name = "tauri-plugin-os" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1c77ebf6f20417ab2a74e8c310820ba52151406d0c80fbcea7df232e3f6ba" +checksum = "d8f08346c8deb39e96f86973da0e2d76cbb933d7ac9b750f6dc4daf955a6f997" dependencies = [ "gethostname", "log", @@ -14787,9 +14795,9 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab" +checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" dependencies = [ "tauri", "tauri-plugin", @@ -14829,9 +14837,9 @@ dependencies = [ [[package]] name = "tauri-plugin-shell" -version = "2.3.1" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54777d0c0d8add34eea3ced84378619ef5b97996bd967d3038c668feefd21071" +checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c" dependencies = [ "encoding_rs", "log", @@ -14850,9 +14858,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.3.4" +version = "2.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb9cac815bf11c4a80fb498666bcdad66d65b89e3ae24669e47806febb76389c" +checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" dependencies = [ "serde", "serde_json", @@ -14882,9 +14890,9 @@ dependencies = [ [[package]] name = "tauri-plugin-store" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85dd80d60a76ee2c2fdce09e9ef30877b239c2a6bb76e6d7d03708aa5f13a19" +checksum = "59a77036340a97eb5bbe1b3209c31e5f27f75e6f92a52fd9dd4b211ef08bf310" dependencies = [ "dunce", "serde", @@ -15045,9 +15053,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4cfc9ad45b487d3fded5a4731a567872a4812e9552e3964161b08edabf93846" +checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" dependencies = [ "cookie", "dpi", @@ -15070,9 +15078,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.8.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fe9d48bd122ff002064e88cfcd7027090d789c4302714e68fcccba0f4b7807" +checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" dependencies = [ "gtk", "http 1.3.1", @@ -15120,14 +15128,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "tauri-utils" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a3852fdf9a4f8fbeaa63dc3e9a85284dd6ef7200751f0bd66ceee30c93f212" +checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" dependencies = [ "anyhow", "brotli", @@ -15282,13 +15290,13 @@ dependencies = [ [[package]] name = "terminal-trx" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975b4233aefa1b02456d5e53b22c61653c743e308c51cf4181191d8ce41753ab" +checksum = "662a3cd5ca570df622e848ef18b50c151e65c9835257465417242243b0bce783" dependencies = [ "cfg-if", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -15371,7 +15379,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15382,7 +15390,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15452,9 +15460,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -15561,7 +15569,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15627,7 +15635,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.32", + "rustls 0.23.34", "tokio", ] @@ -15680,7 +15688,7 @@ checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" dependencies = [ "futures-util", "log", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-native-certs 0.8.2", "rustls-pki-types", "tokio", @@ -15758,7 +15766,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e04c1865c281139e5ccf633cb9f76ffdaabeebfe53b703984cf82878e2aabb" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -15767,7 +15775,7 @@ version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -15780,7 +15788,7 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde_core", "serde_spanned 1.0.3", "toml_datetime 0.7.3", @@ -15813,7 +15821,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -15824,7 +15832,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -15835,7 +15843,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -15849,7 +15857,7 @@ version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "toml_datetime 0.7.3", "toml_parser", "winnow 0.7.13", @@ -15965,7 +15973,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -15985,7 +15993,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-util", "http 1.3.1", @@ -16042,7 +16050,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -16279,9 +16287,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" +checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" dependencies = [ "crossbeam-channel", "dirs 6.0.0", @@ -16296,7 +16304,7 @@ dependencies = [ "png 0.17.16", "serde", "thiserror 2.0.17", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -16334,7 +16342,7 @@ checksum = "b9c81686f7ab4065ccac3df7a910c4249f8c0f3fb70421d6ddec19b9311f63f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -16367,7 +16375,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-pki-types", "sha1", "thiserror 2.0.17", @@ -16625,9 +16633,9 @@ checksum = "70ba288e709927c043cbe476718d37be306be53fb1fafecd0dbe36d072be2580" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" @@ -16729,7 +16737,7 @@ dependencies = [ "log", "native-tls", "once_cell", - "rustls 0.23.32", + "rustls 0.23.34", "rustls-pki-types", "serde", "serde_json", @@ -16823,7 +16831,7 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_json", "utoipa-gen", @@ -16837,7 +16845,7 @@ checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17049,9 +17057,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -17060,25 +17068,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -17089,9 +17083,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -17099,22 +17093,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -17167,7 +17161,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "rustix 1.1.2", "wayland-backend", "wayland-scanner", @@ -17179,7 +17173,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -17191,7 +17185,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -17222,9 +17216,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -17339,7 +17333,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17646,7 +17640,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17657,7 +17651,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17668,7 +17662,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17679,7 +17673,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17690,7 +17684,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -17701,7 +17695,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -18204,15 +18198,15 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wry" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d78ec082b80fa088569a970d043bb3050abaabf4454101d44514ee8d9a8c9f6" +checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" dependencies = [ "base64 0.22.1", "block2 0.6.2", @@ -18393,13 +18387,12 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", - "yoke-derive 0.8.0", + "yoke-derive 0.8.1", "zerofrom", ] @@ -18411,19 +18404,19 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -18498,7 +18491,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "zbus_names", "zvariant", "zvariant_utils", @@ -18543,7 +18536,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -18554,7 +18547,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -18574,7 +18567,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -18595,40 +18588,40 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", - "yoke 0.8.0", + "yoke 0.8.1", "zerofrom", ] [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ - "yoke 0.8.0", + "yoke 0.8.1", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -18641,7 +18634,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.11.4", + "indexmap 2.12.0", "num_enum", "thiserror 1.0.69", ] @@ -18654,7 +18647,7 @@ checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ "arbitrary", "crc32fast", - "indexmap 2.11.4", + "indexmap 2.12.0", "memchr", ] @@ -18697,7 +18690,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "zvariant_utils", ] @@ -18710,6 +18703,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn 2.0.108", "winnow 0.7.13", ] diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 89563ea7e..c8fd04e62 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -15,15 +15,15 @@ "gen:schema": "tsx src/devtool/seed/script.ts" }, "dependencies": { - "@ai-sdk/amazon-bedrock": "^3.0.47", - "@ai-sdk/anthropic": "^2.0.37", - "@ai-sdk/azure": "^2.0.54", - "@ai-sdk/google": "^2.0.23", - "@ai-sdk/google-vertex": "^3.0.53", - "@ai-sdk/openai": "^2.0.53", - "@ai-sdk/openai-compatible": "^1.0.22", - "@ai-sdk/react": "^2.0.78", - "@electric-sql/client": "^1.0.14", + "@ai-sdk/amazon-bedrock": "^3.0.49", + "@ai-sdk/anthropic": "^2.0.39", + "@ai-sdk/azure": "^2.0.59", + "@ai-sdk/google": "^2.0.25", + "@ai-sdk/google-vertex": "^3.0.55", + "@ai-sdk/openai": "^2.0.58", + "@ai-sdk/openai-compatible": "^1.0.24", + "@ai-sdk/react": "^2.0.82", + "@electric-sql/client": "^1.1.1", "@huggingface/languages": "^1.0.0", "@hypr/db": "workspace:*", "@hypr/plugin-analytics": "workspace:*", @@ -37,31 +37,31 @@ "@hypr/tiptap": "workspace:^", "@hypr/ui": "workspace:^", "@hypr/utils": "workspace:^", - "@iconify-icon/react": "^3.0.1", + "@iconify-icon/react": "^3.0.2", "@lobehub/icons": "^2.43.1", "@openrouter/ai-sdk-provider": "^1.2.0", "@orama/highlight": "^0.1.9", "@orama/orama": "^3.1.16", "@orama/plugin-qps": "^3.1.16", "@sentry/react": "^8.55.0", - "@supabase/supabase-js": "^2.76.1", + "@supabase/supabase-js": "^2.77.0", "@t3-oss/env-core": "^0.13.8", "@tanstack/react-form": "^1.23.8", "@tanstack/react-query": "^5.90.5", - "@tanstack/react-router": "^1.133.25", + "@tanstack/react-router": "^1.133.36", "@tanstack/react-virtual": "^3.13.12", "@tauri-apps/api": "^2.9.0", - "@tauri-apps/plugin-deep-link": "^2.4.3", - "@tauri-apps/plugin-dialog": "^2.4.0", - "@tauri-apps/plugin-http": "^2.5.2", - "@tauri-apps/plugin-opener": "^2.5.0", - "@tauri-apps/plugin-process": "^2.3.0", - "@tauri-apps/plugin-store": "^2.4.0", + "@tauri-apps/plugin-deep-link": "^2.4.5", + "@tauri-apps/plugin-dialog": "^2.4.2", + "@tauri-apps/plugin-http": "^2.5.4", + "@tauri-apps/plugin-opener": "^2.5.2", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-store": "^2.4.1", "@tauri-apps/plugin-updater": "^2.9.0", "@uidotdev/usehooks": "^2.4.1", "@wavesurfer/react": "^1.0.11", - "@xstate/store": "^3.11.1", - "ai": "^5.0.78", + "@xstate/store": "^3.11.2", + "ai": "^5.0.82", "clsx": "^2.1.1", "date-fns": "^4.1.0", "dompurify": "^3.3.0", @@ -75,27 +75,27 @@ "react-dom": "^19.2.0", "react-hotkeys-hook": "^4.6.2", "streamdown": "^1.4.0", - "tinybase": "^6.7.1", + "tinybase": "^6.7.2", "tinytick": "^1.2.8", - "wavesurfer.js": "^7.11.0", + "wavesurfer.js": "^7.11.1", "xstate": "^5.23.0", "zod": "^4.1.12", "zustand": "^5.0.8" }, "devDependencies": { "@faker-js/faker": "^10.1.0", - "@tanstack/react-router-devtools": "^1.133.25", - "@tanstack/router-plugin": "^1.133.25", - "@tauri-apps/cli": "^2.9.1", + "@tanstack/react-router-devtools": "^1.133.36", + "@tanstack/router-plugin": "^1.133.36", + "@tauri-apps/cli": "^2.9.2", "@types/json5": "^2.2.0", - "@types/node": "^24.9.1", + "@types/node": "^24.9.2", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "^4.7.0", "autoprefixer": "^10.4.21", "postcss": "^8.5.6", "tailwindcss": "^3.4.18", - "tsx": "^4.19.2", + "tsx": "^4.20.6", "typescript": "~5.8.3", "vite": "^7.1.12", "vitest": "^3.2.4" diff --git a/apps/pro/package.json b/apps/pro/package.json index 72928552d..b88ec62ae 100644 --- a/apps/pro/package.json +++ b/apps/pro/package.json @@ -14,12 +14,12 @@ "@t3-oss/env-core": "^0.13.8", "dotenv": "^17.2.3", "exa-js": "^1.10.2", - "hono": "^4.10.2", + "hono": "^4.10.4", "hono-rate-limiter": "^0.4.2", "zod": "^3.25.76" }, "devDependencies": { - "@types/node": "^20.19.23", + "@types/node": "^20.19.24", "tsx": "^4.20.6", "typescript": "^5.9.3" } diff --git a/apps/web/package.json b/apps/web/package.json index 9c37d4616..8287532dd 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,35 +10,35 @@ "typecheck": "pnpm -F @hypr/web build && (cd supabase/functions/llm && deno check index.ts) && (cd supabase/functions/stripe && deno check index.ts) && tsc --noEmit" }, "dependencies": { - "@cloudflare/vite-plugin": "^1.13.15", + "@cloudflare/vite-plugin": "^1.13.17", "@hypr/ui": "workspace:*", "@hypr/utils": "workspace:*", - "@iconify-icon/react": "^3.0.1", + "@iconify-icon/react": "^3.0.2", "@mux/mux-player-react": "^3.7.0", "@nangohq/frontend": "^0.69.5", "@nangohq/node": "^0.69.5", "@sentry/tanstackstart-react": "^10.22.0", - "@stripe/stripe-js": "^8.1.0", + "@stripe/stripe-js": "^8.2.0", "@supabase/ssr": "^0.7.0", - "@supabase/supabase-js": "^2.76.1", + "@supabase/supabase-js": "^2.77.0", "@t3-oss/env-core": "^0.13.8", "@tailwindcss/vite": "^4.1.16", - "@tanstack/react-devtools": "^0.7.7", + "@tanstack/react-devtools": "^0.7.11", "@tanstack/react-form": "^1.23.8", "@tanstack/react-query": "^5.90.5", "@tanstack/react-query-devtools": "^5.90.2", - "@tanstack/react-router": "^1.133.25", - "@tanstack/react-router-devtools": "^1.133.25", - "@tanstack/react-router-ssr-query": "^1.133.25", - "@tanstack/react-start": "^1.133.26", - "@tanstack/router-plugin": "^1.133.25", + "@tanstack/react-router": "^1.133.36", + "@tanstack/react-router-devtools": "^1.133.36", + "@tanstack/react-router-ssr-query": "^1.133.36", + "@tanstack/react-start": "^1.134.0", + "@tanstack/router-plugin": "^1.133.36", "drizzle-orm": "^0.44.7", "exa-js": "^1.10.2", "lucide-react": "^0.544.0", "postgres": "^3.4.7", "react": "^19.2.0", "react-dom": "^19.2.0", - "stripe": "^19.1.0", + "stripe": "^19.2.0", "tailwindcss": "^4.1.16", "vite-tsconfig-paths": "^5.1.4", "zod": "^4.1.12" @@ -49,15 +49,15 @@ "@content-collections/vite": "^0.2.7", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.0", - "@types/node": "^22.18.12", + "@types/node": "^22.18.13", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", - "@vitejs/plugin-react": "^5.0.4", + "@vitejs/plugin-react": "^5.1.0", "env-cmd": "^11.0.0", "jsdom": "^27.0.1", "typescript": "^5.9.3", "vite": "^7.1.12", "web-vitals": "^5.1.0", - "wrangler": "^4.45.0" + "wrangler": "^4.45.2" } } diff --git a/apps/web/src/functions/stripe.ts b/apps/web/src/functions/stripe.ts index 8132edcec..1eb622ab2 100644 --- a/apps/web/src/functions/stripe.ts +++ b/apps/web/src/functions/stripe.ts @@ -5,6 +5,6 @@ import { env } from "@/env"; export const getStripeClient = createServerOnlyFn(() => { return new Stripe(env.STRIPE_SECRET_KEY, { - apiVersion: "2025-09-30.clover", + apiVersion: "2025-10-29.clover", }); }); diff --git a/apps/web/supabase/functions/stripe/deno.json b/apps/web/supabase/functions/stripe/deno.json index 0900458da..84ddc2df1 100644 --- a/apps/web/supabase/functions/stripe/deno.json +++ b/apps/web/supabase/functions/stripe/deno.json @@ -1,8 +1,8 @@ { "imports": { "supabase-js": "npm:@supabase/supabase-js@2.76.1", - "hono": "jsr:@hono/hono@^4.10.3", - "hono/factory": "jsr:@hono/hono@^4.10.3/factory", - "stripe": "npm:stripe@^19.1.0" + "hono": "jsr:@hono/hono@^4.10.4", + "hono/factory": "jsr:@hono/hono@^4.10.4/factory", + "stripe": "npm:stripe@^19.2.0" } } diff --git a/apps/web/supabase/functions/stripe/deno.lock b/apps/web/supabase/functions/stripe/deno.lock index b9eceb392..ecdf8d288 100644 --- a/apps/web/supabase/functions/stripe/deno.lock +++ b/apps/web/supabase/functions/stripe/deno.lock @@ -1,13 +1,13 @@ { "version": "5", "specifiers": { - "jsr:@hono/hono@^4.10.3": "4.10.3", + "jsr:@hono/hono@^4.10.4": "4.10.4", "npm:@supabase/supabase-js@2.76.1": "2.76.1", - "npm:stripe@^19.1.0": "19.1.0" + "npm:stripe@^19.2.0": "19.2.0" }, "jsr": { - "@hono/hono@4.10.3": { - "integrity": "d37db91cace43d80dccdbb49b396bd4f97e019c8566c20201cb1d9e4a3009e45" + "@hono/hono@4.10.4": { + "integrity": "e54d00c4cf994e7ae297d7321793cf940656b9c5e934564c03ffc15499041b9e" } }, "npm": { @@ -200,8 +200,8 @@ "side-channel-weakmap" ] }, - "stripe@19.1.0": { - "integrity": "sha512-FjgIiE98dMMTNssfdjMvFdD4eZyEzdWAOwPYqzhPRNZeg9ggFWlPXmX1iJKD5pPIwZBaPlC3SayQQkwsPo6/YQ==", + "stripe@19.2.0": { + "integrity": "sha512-strzN8luMGMC1LEleGKg7pJGXFx0kSS4y/uSjK8yPQV9SUBMtJVAp/v8XMQLRnMbXaSaWLrIaHcMlKcsizdRDQ==", "dependencies": [ "qs" ] @@ -231,9 +231,9 @@ }, "workspace": { "dependencies": [ - "jsr:@hono/hono@^4.10.3", + "jsr:@hono/hono@^4.10.4", "npm:@supabase/supabase-js@2.76.1", - "npm:stripe@^19.1.0" + "npm:stripe@^19.2.0" ] } } diff --git a/apps/web/supabase/functions/stripe/index.ts b/apps/web/supabase/functions/stripe/index.ts index 83d48d75d..6dfdac33a 100644 --- a/apps/web/supabase/functions/stripe/index.ts +++ b/apps/web/supabase/functions/stripe/index.ts @@ -4,7 +4,7 @@ import Stripe from "stripe"; import { createClient } from "supabase-js"; const stripe = new Stripe(Deno.env.get("STRIPE_API_KEY") as string, { - apiVersion: "2025-09-30.clover", + apiVersion: "2025-10-29.clover", }); const cryptoProvider = Stripe.createSubtleCryptoProvider(); diff --git a/packages/db/package.json b/packages/db/package.json index 9983a89de..f671436fe 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -20,8 +20,8 @@ "zod": "^4.1.12" }, "devDependencies": { - "@types/node": "^24.9.1", - "drizzle-kit": "^0.31.5", + "@types/node": "^24.9.2", + "drizzle-kit": "^0.31.6", "pg": "^8.16.3", "typescript": "~5.8.3" } diff --git a/packages/tiptap/package.json b/packages/tiptap/package.json index 5deec45ff..5f795eb50 100644 --- a/packages/tiptap/package.json +++ b/packages/tiptap/package.json @@ -20,40 +20,40 @@ "@hypr/ui": "workspace:^", "@remixicon/react": "^4.7.0", "@tanstack/react-query": "^5.90.5", - "@tanstack/react-router": "^1.133.25", - "@tiptap/core": "^3.7.2", - "@tiptap/extension-bubble-menu": "^3.7.2", - "@tiptap/extension-document": "^3.7.2", - "@tiptap/extension-highlight": "^3.7.2", - "@tiptap/extension-history": "^3.7.2", - "@tiptap/extension-image": "^3.7.2", - "@tiptap/extension-link": "^3.7.2", - "@tiptap/extension-list-keymap": "^3.7.2", - "@tiptap/extension-mention": "^3.7.2", - "@tiptap/extension-placeholder": "^3.7.2", - "@tiptap/extension-strike": "^3.7.2", - "@tiptap/extension-task-item": "^3.7.2", - "@tiptap/extension-task-list": "^3.7.2", - "@tiptap/extension-text": "^3.7.2", - "@tiptap/extension-typography": "^3.7.2", - "@tiptap/extension-underline": "^3.7.2", - "@tiptap/markdown": "^3.7.2", - "@tiptap/pm": "^3.7.2", - "@tiptap/react": "^3.7.2", - "@tiptap/starter-kit": "^3.7.2", - "@tiptap/suggestion": "^3.7.2", + "@tanstack/react-router": "^1.133.36", + "@tiptap/core": "^3.9.1", + "@tiptap/extension-bubble-menu": "^3.9.1", + "@tiptap/extension-document": "^3.9.1", + "@tiptap/extension-highlight": "^3.9.1", + "@tiptap/extension-history": "^3.9.1", + "@tiptap/extension-image": "^3.9.1", + "@tiptap/extension-link": "^3.9.1", + "@tiptap/extension-list-keymap": "^3.9.1", + "@tiptap/extension-mention": "^3.9.1", + "@tiptap/extension-placeholder": "^3.9.1", + "@tiptap/extension-strike": "^3.9.1", + "@tiptap/extension-task-item": "^3.9.1", + "@tiptap/extension-task-list": "^3.9.1", + "@tiptap/extension-text": "^3.9.1", + "@tiptap/extension-typography": "^3.9.1", + "@tiptap/extension-underline": "^3.9.1", + "@tiptap/markdown": "^3.9.1", + "@tiptap/pm": "^3.9.1", + "@tiptap/react": "^3.9.1", + "@tiptap/starter-kit": "^3.9.1", + "@tiptap/suggestion": "^3.9.1", "clsx": "^2.1.1", "lucide-react": "^0.544.0", "prosemirror-commands": "^1.7.1", "prosemirror-model": "^1.25.4", "prosemirror-state": "^1.4.4", - "turndown": "^7.2.1" + "turndown": "^7.2.2" }, "devDependencies": { - "@types/node": "^22.18.12", + "@types/node": "^22.18.13", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", - "@types/turndown": "^5.0.5", + "@types/turndown": "^5.0.6", "vitest": "^3.2.4" }, "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index ee518ffdc..5ab907feb 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -51,7 +51,7 @@ }, "devDependencies": { "@tanstack/react-query": "^5.90.5", - "@types/node": "^22.18.12", + "@types/node": "^22.18.13", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "autoprefixer": "^10.4.21", diff --git a/packages/utils/package.json b/packages/utils/package.json index 6167390e8..58dcb6e24 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -4,15 +4,15 @@ ".": "./src/index.ts" }, "dependencies": { - "@ai-sdk/openai-compatible": "^1.0.22", + "@ai-sdk/openai-compatible": "^1.0.24", "@date-fns/tz": "^1.4.1", "@hypr/plugin-db": "workspace:^", "@hypr/plugin-listener": "workspace:^", "@hypr/plugin-sse": "workspace:^", "@hypr/plugin-windows": "workspace:^", "@tauri-apps/api": "^2.9.0", - "@tauri-apps/plugin-http": "^2.5.2", - "ai": "^5.0.78", + "@tauri-apps/plugin-http": "^2.5.4", + "ai": "^5.0.82", "clsx": "^2.1.1", "date-fns": "^4.1.0", "mutative": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffbcf02fb..e0985debd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,32 +21,32 @@ importers: apps/desktop: dependencies: '@ai-sdk/amazon-bedrock': - specifier: ^3.0.47 - version: 3.0.47(zod@4.1.12) + specifier: ^3.0.49 + version: 3.0.49(zod@4.1.12) '@ai-sdk/anthropic': - specifier: ^2.0.37 - version: 2.0.37(zod@4.1.12) + specifier: ^2.0.39 + version: 2.0.39(zod@4.1.12) '@ai-sdk/azure': - specifier: ^2.0.54 - version: 2.0.54(zod@4.1.12) + specifier: ^2.0.59 + version: 2.0.59(zod@4.1.12) '@ai-sdk/google': - specifier: ^2.0.23 - version: 2.0.23(zod@4.1.12) + specifier: ^2.0.25 + version: 2.0.25(zod@4.1.12) '@ai-sdk/google-vertex': - specifier: ^3.0.53 - version: 3.0.53(zod@4.1.12) + specifier: ^3.0.55 + version: 3.0.55(zod@4.1.12) '@ai-sdk/openai': - specifier: ^2.0.53 - version: 2.0.53(zod@4.1.12) + specifier: ^2.0.58 + version: 2.0.58(zod@4.1.12) '@ai-sdk/openai-compatible': - specifier: ^1.0.22 - version: 1.0.22(zod@4.1.12) + specifier: ^1.0.24 + version: 1.0.24(zod@4.1.12) '@ai-sdk/react': - specifier: ^2.0.78 - version: 2.0.78(react@19.2.0)(zod@4.1.12) + specifier: ^2.0.82 + version: 2.0.82(react@19.2.0)(zod@4.1.12) '@electric-sql/client': - specifier: ^1.0.14 - version: 1.0.14 + specifier: ^1.1.1 + version: 1.1.1 '@huggingface/languages': specifier: ^1.0.0 version: 1.0.0 @@ -87,14 +87,14 @@ importers: specifier: workspace:^ version: link:../../packages/utils '@iconify-icon/react': - specifier: ^3.0.1 - version: 3.0.1(react@19.2.0) + specifier: ^3.0.2 + version: 3.0.2(react@19.2.0) '@lobehub/icons': specifier: ^2.43.1 version: 2.43.1(@babel/core@7.28.5)(@types/mdast@4.0.4)(@types/react@19.2.2)(antd@5.27.5(date-fns@4.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(framer-motion@12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@openrouter/ai-sdk-provider': specifier: ^1.2.0 - version: 1.2.0(ai@5.0.78(zod@4.1.12))(zod@4.1.12) + version: 1.2.0(ai@5.0.82(zod@4.1.12))(zod@4.1.12) '@orama/highlight': specifier: ^0.1.9 version: 0.1.9 @@ -108,20 +108,20 @@ importers: specifier: ^8.55.0 version: 8.55.0(react@19.2.0) '@supabase/supabase-js': - specifier: ^2.76.1 - version: 2.76.1 + specifier: ^2.77.0 + version: 2.77.0 '@t3-oss/env-core': specifier: ^0.13.8 version: 0.13.8(typescript@5.8.3)(zod@4.1.12) '@tanstack/react-form': specifier: ^1.23.8 - version: 1.23.8(@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.23.8(@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': specifier: ^5.90.5 version: 5.90.5(react@19.2.0) '@tanstack/react-router': - specifier: ^1.133.25 - version: 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.133.36 + version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-virtual': specifier: ^3.13.12 version: 3.13.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -129,23 +129,23 @@ importers: specifier: ^2.9.0 version: 2.9.0 '@tauri-apps/plugin-deep-link': - specifier: ^2.4.3 - version: 2.4.3 + specifier: ^2.4.5 + version: 2.4.5 '@tauri-apps/plugin-dialog': - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.4.2 + version: 2.4.2 '@tauri-apps/plugin-http': + specifier: ^2.5.4 + version: 2.5.4 + '@tauri-apps/plugin-opener': specifier: ^2.5.2 version: 2.5.2 - '@tauri-apps/plugin-opener': - specifier: ^2.5.0 - version: 2.5.0 '@tauri-apps/plugin-process': - specifier: ^2.3.0 - version: 2.3.0 + specifier: ^2.3.1 + version: 2.3.1 '@tauri-apps/plugin-store': - specifier: ^2.4.0 - version: 2.4.0 + specifier: ^2.4.1 + version: 2.4.1 '@tauri-apps/plugin-updater': specifier: ^2.9.0 version: 2.9.0 @@ -154,13 +154,13 @@ importers: version: 2.4.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@wavesurfer/react': specifier: ^1.0.11 - version: 1.0.11(react@19.2.0)(wavesurfer.js@7.11.0) + version: 1.0.11(react@19.2.0)(wavesurfer.js@7.11.1) '@xstate/store': - specifier: ^3.11.1 - version: 3.11.1(react@19.2.0)(solid-js@1.9.9) + specifier: ^3.11.2 + version: 3.11.2(react@19.2.0)(solid-js@1.9.9) ai: - specifier: ^5.0.78 - version: 5.0.78(zod@4.1.12) + specifier: ^5.0.82 + version: 5.0.82(zod@4.1.12) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -201,14 +201,14 @@ importers: specifier: ^1.4.0 version: 1.4.0(@types/react@19.2.2)(react@19.2.0) tinybase: - specifier: ^6.7.1 - version: 6.7.1(postgres@3.4.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(ws@8.18.3) + specifier: ^6.7.2 + version: 6.7.2(postgres@3.4.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(ws@8.18.3) tinytick: specifier: ^1.2.8 version: 1.2.8 wavesurfer.js: - specifier: ^7.11.0 - version: 7.11.0 + specifier: ^7.11.1 + version: 7.11.1 xstate: specifier: ^5.23.0 version: 5.23.0 @@ -217,26 +217,26 @@ importers: version: 4.1.12 zustand: specifier: ^5.0.8 - version: 5.0.8(@types/react@19.2.2)(immer@10.1.3)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + version: 5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) devDependencies: '@faker-js/faker': specifier: ^10.1.0 version: 10.1.0 '@tanstack/react-router-devtools': - specifier: ^1.133.25 - version: 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(@types/node@24.9.1)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/router-plugin': - specifier: ^1.133.25 - version: 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@tauri-apps/cli': - specifier: ^2.9.1 - version: 2.9.1 + specifier: ^2.9.2 + version: 2.9.2 '@types/json5': specifier: ^2.2.0 version: 2.2.0 '@types/node': - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.9.2 + version: 24.9.2 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -245,7 +245,7 @@ importers: version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.7.0(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -256,17 +256,17 @@ importers: specifier: ^3.4.18 version: 3.4.18(tsx@4.20.6)(yaml@2.8.1) tsx: - specifier: ^4.19.2 + specifier: ^4.20.6 version: 4.20.6 typescript: specifier: ~5.8.3 version: 5.8.3 vite: specifier: ^7.1.12 - version: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@1.21.7)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(jiti@1.21.7)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) apps/pro: dependencies: @@ -275,10 +275,10 @@ importers: version: 1.0.1 '@hono/mcp': specifier: ^0.1.4 - version: 0.1.4(@modelcontextprotocol/sdk@1.20.2)(hono@4.10.2) + version: 0.1.4(@modelcontextprotocol/sdk@1.20.2)(hono@4.10.4) '@hono/node-server': specifier: ^1.19.5 - version: 1.19.5(hono@4.10.2) + version: 1.19.5(hono@4.10.4) '@modelcontextprotocol/sdk': specifier: ^1.20.2 version: 1.20.2 @@ -292,18 +292,18 @@ importers: specifier: ^1.10.2 version: 1.10.2(ws@8.18.3) hono: - specifier: ^4.10.2 - version: 4.10.2 + specifier: ^4.10.4 + version: 4.10.4 hono-rate-limiter: specifier: ^0.4.2 - version: 0.4.2(hono@4.10.2) + version: 0.4.2(hono@4.10.4) zod: specifier: ^3.25.76 version: 3.25.76 devDependencies: '@types/node': - specifier: ^20.19.23 - version: 20.19.23 + specifier: ^20.19.24 + version: 20.19.24 tsx: specifier: ^4.20.6 version: 4.20.6 @@ -314,8 +314,8 @@ importers: apps/web: dependencies: '@cloudflare/vite-plugin': - specifier: ^1.13.15 - version: 1.13.15(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251011.0)(wrangler@4.45.0) + specifier: ^1.13.17 + version: 1.13.17(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251011.0)(wrangler@4.45.2) '@hypr/ui': specifier: workspace:* version: link:../../packages/ui @@ -323,8 +323,8 @@ importers: specifier: workspace:* version: link:../../packages/utils '@iconify-icon/react': - specifier: ^3.0.1 - version: 3.0.1(react@19.2.0) + specifier: ^3.0.2 + version: 3.0.2(react@19.2.0) '@mux/mux-player-react': specifier: ^3.7.0 version: 3.7.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -338,26 +338,26 @@ importers: specifier: ^10.22.0 version: 10.22.0(react@19.2.0) '@stripe/stripe-js': - specifier: ^8.1.0 - version: 8.1.0 + specifier: ^8.2.0 + version: 8.2.0 '@supabase/ssr': specifier: ^0.7.0 - version: 0.7.0(@supabase/supabase-js@2.76.1) + version: 0.7.0(@supabase/supabase-js@2.77.0) '@supabase/supabase-js': - specifier: ^2.76.1 - version: 2.76.1 + specifier: ^2.77.0 + version: 2.77.0 '@t3-oss/env-core': specifier: ^0.13.8 version: 0.13.8(typescript@5.9.3)(zod@4.1.12) '@tailwindcss/vite': specifier: ^4.1.16 - version: 4.1.16(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.1.16(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/react-devtools': - specifier: ^0.7.7 - version: 0.7.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9) + specifier: ^0.7.11 + version: 0.7.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9) '@tanstack/react-form': specifier: ^1.23.8 - version: 1.23.8(@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.23.8(@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': specifier: ^5.90.5 version: 5.90.5(react@19.2.0) @@ -365,20 +365,20 @@ importers: specifier: ^5.90.2 version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) '@tanstack/react-router': - specifier: ^1.133.25 - version: 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.133.36 + version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': - specifier: ^1.133.25 - version: 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(@types/node@22.18.12)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@22.18.13)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/react-router-ssr-query': - specifier: ^1.133.25 - version: 1.133.25(@tanstack/query-core@5.90.5)(@tanstack/react-query@5.90.5(react@19.2.0))(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/query-core@5.90.5)(@tanstack/react-query@5.90.5(react@19.2.0))(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start': - specifier: ^1.133.26 - version: 1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^1.134.0 + version: 1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-plugin': - specifier: ^1.133.25 - version: 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^1.133.36 + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) drizzle-orm: specifier: ^0.44.7 version: 0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(pg@8.16.3)(postgres@3.4.7) @@ -398,14 +398,14 @@ importers: specifier: ^19.2.0 version: 19.2.0(react@19.2.0) stripe: - specifier: ^19.1.0 - version: 19.1.0(@types/node@22.18.12) + specifier: ^19.2.0 + version: 19.2.0(@types/node@22.18.13) tailwindcss: specifier: ^4.1.16 version: 4.1.16 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) zod: specifier: ^4.1.12 version: 4.1.12 @@ -418,7 +418,7 @@ importers: version: 0.2.2(@content-collections/core@0.11.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@content-collections/vite': specifier: ^0.2.7 - version: 0.2.7(@content-collections/core@0.11.1(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 0.2.7(@content-collections/core@0.11.1(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -426,8 +426,8 @@ importers: specifier: ^16.3.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/node': - specifier: ^22.18.12 - version: 22.18.12 + specifier: ^22.18.13 + version: 22.18.13 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -435,8 +435,8 @@ importers: specifier: ^19.2.2 version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react': - specifier: ^5.0.4 - version: 5.0.4(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^5.1.0 + version: 5.1.0(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) env-cmd: specifier: ^11.0.0 version: 11.0.0 @@ -448,13 +448,13 @@ importers: version: 5.9.3 vite: specifier: ^7.1.12 - version: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) web-vitals: specifier: ^5.1.0 version: 5.1.0 wrangler: - specifier: ^4.45.0 - version: 4.45.0 + specifier: ^4.45.2 + version: 4.45.2 packages/db: dependencies: @@ -469,11 +469,11 @@ importers: version: 4.1.12 devDependencies: '@types/node': - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.9.2 + version: 24.9.2 drizzle-kit: - specifier: ^0.31.5 - version: 0.31.5 + specifier: ^0.31.6 + version: 0.31.6 pg: specifier: ^8.16.3 version: 8.16.3 @@ -485,7 +485,7 @@ importers: devDependencies: nango: specifier: 0.69.2 - version: 0.69.2(@types/node@24.9.1)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) + version: 0.69.2(@types/node@24.9.2)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) zod: specifier: 4.0.5 version: 4.0.5 @@ -521,71 +521,71 @@ importers: specifier: ^5.90.5 version: 5.90.5(react@19.2.0) '@tanstack/react-router': - specifier: ^1.133.25 - version: 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.133.36 + version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tiptap/core': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/pm@3.7.2) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/pm@3.9.1) '@tiptap/extension-bubble-menu': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) '@tiptap/extension-document': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-highlight': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-history': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-image': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-link': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) '@tiptap/extension-list-keymap': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-mention': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)(@tiptap/suggestion@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@tiptap/suggestion@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-placeholder': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-strike': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-task-item': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-task-list': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) '@tiptap/extension-text': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-typography': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/extension-underline': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) '@tiptap/markdown': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) '@tiptap/pm': - specifier: ^3.7.2 - version: 3.7.2 + specifier: ^3.9.1 + version: 3.9.1 '@tiptap/react': - specifier: ^3.7.2 - version: 3.7.2(@floating-ui/dom@1.7.4)(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^3.9.1 + version: 3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tiptap/starter-kit': - specifier: ^3.7.2 - version: 3.7.2 + specifier: ^3.9.1 + version: 3.9.1 '@tiptap/suggestion': - specifier: ^3.7.2 - version: 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + specifier: ^3.9.1 + version: 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -608,12 +608,12 @@ importers: specifier: ^19.2 version: 19.2.0(react@19.2.0) turndown: - specifier: ^7.2.1 - version: 7.2.1 + specifier: ^7.2.2 + version: 7.2.2 devDependencies: '@types/node': - specifier: ^22.18.12 - version: 22.18.12 + specifier: ^22.18.13 + version: 22.18.13 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -621,11 +621,11 @@ importers: specifier: ^19.2.2 version: 19.2.2(@types/react@19.2.2) '@types/turndown': - specifier: ^5.0.5 - version: 5.0.5 + specifier: ^5.0.6 + version: 5.0.6 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) packages/ui: dependencies: @@ -730,8 +730,8 @@ importers: specifier: ^5.90.5 version: 5.90.5(react@19.2.0) '@types/node': - specifier: ^22.18.12 - version: 22.18.12 + specifier: ^22.18.13 + version: 22.18.13 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -766,8 +766,8 @@ importers: packages/utils: dependencies: '@ai-sdk/openai-compatible': - specifier: ^1.0.22 - version: 1.0.22(zod@4.1.12) + specifier: ^1.0.24 + version: 1.0.24(zod@4.1.12) '@date-fns/tz': specifier: ^1.4.1 version: 1.4.1 @@ -787,11 +787,11 @@ importers: specifier: ^2.9.0 version: 2.9.0 '@tauri-apps/plugin-http': - specifier: ^2.5.2 - version: 2.5.2 + specifier: ^2.5.4 + version: 2.5.4 ai: - specifier: ^5.0.78 - version: 5.0.78(zod@4.1.12) + specifier: ^5.0.82 + version: 5.0.82(zod@4.1.12) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -818,14 +818,14 @@ importers: version: https://codeload.github.com/bagindo/tauri-plugin-keygen/tar.gz/e0de03a76a5c82c36adb347e43e4bff4f78c87de zustand: specifier: ^5.0.8 - version: 5.0.8(@types/react@19.2.2)(immer@10.1.3)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + version: 5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) devDependencies: '@types/react': specifier: ^19.2.2 version: 19.2.2 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) plugins/analytics: dependencies: @@ -857,6 +857,12 @@ importers: specifier: ^2.9.0 version: 2.9.0 + plugins/detect: + dependencies: + '@tauri-apps/api': + specifier: ^2.9.0 + version: 2.9.0 + plugins/listener: dependencies: '@tauri-apps/api': @@ -943,56 +949,56 @@ importers: packages: - '@ai-sdk/amazon-bedrock@3.0.47': - resolution: {integrity: sha512-oTAxTU4k1+EIKP41nvLGN7dWwoK7dg1JptrX6csn7abmSfQSsygDrfeMf8/7Mdnr+frt9i5ogvpQkp1ak0916Q==} + '@ai-sdk/amazon-bedrock@3.0.49': + resolution: {integrity: sha512-XxmZnXjURRcfct/jkx5VXXjKpcI+xjeXkmWDmvmdLuUEZL9L+J/OZZj1XiiVh6jHTr+27lK66zMCcNBoNw4DBA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/anthropic@2.0.37': - resolution: {integrity: sha512-r2e9BWoobisH9B5b7x3yYG/k9WlsZqa4D94o7gkwktReqrjjv83zNMop4KmlJsh/zBhbsaP8S8SUfiwK+ESxgg==} + '@ai-sdk/anthropic@2.0.39': + resolution: {integrity: sha512-8YckXsPN9e0NfU4zZvP23xCIKNESyYb1Y/xVllI1fZ+uVsd/shoz2zplbeGVQHPjXHWfY9aT5tF98Lp920HDIQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/azure@2.0.54': - resolution: {integrity: sha512-nJtKcv2+4WmwfRpzc6GcVy3OlKjs7MiHhuNeibxDcDIST3h+qEX1UZYw9FDwjRFhWKbRyjSFwWxnoEP+Zwd6kQ==} + '@ai-sdk/azure@2.0.59': + resolution: {integrity: sha512-Sa4DBIPycltgb1z5ENWZD4GEiLcct2jgJOjjNpiE8NAsqxSYrJBgBwur2E3zaYEDJyHQShChldMMll8COHJgZA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@2.0.1': - resolution: {integrity: sha512-vPVIbnP35ZnayS937XLo85vynR85fpBQWHCdUweq7apzqFOTU2YkUd4V3msebEHbQ2Zro60ZShDDy9SMiyWTqA==} + '@ai-sdk/gateway@2.0.3': + resolution: {integrity: sha512-/vCoMKtod+A74/BbkWsaAflWKz1ovhX5lmJpIaXQXtd6gyexZncjotBTbFM8rVJT9LKJ/Kx7iVVo3vh+KT+IJg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google-vertex@3.0.53': - resolution: {integrity: sha512-Y8LJGPXKLi8HuoLvhSvzK7ZVPEV7nSHgJcVFDmVu1h6UhjKM6EMafSt0wXa9HznEVX3GgntlEPnrcBAlBZ4mFg==} + '@ai-sdk/google-vertex@3.0.55': + resolution: {integrity: sha512-nUAIQywTzVXbKMYibq2vbjTRorrhWQcKJ/j1mwZKyPahLX41wh1kn8Fbwjxhd7ECeEJEZpJCnQh8OlQ1CeTO7Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google@2.0.23': - resolution: {integrity: sha512-VbCnKR+6aWUVLkAiSW5gUEtST7KueEmlt+d6qwDikxlLnFG9pzy59je8MiDVeM5G2tuSXbvZQF78PGIfXDBmow==} + '@ai-sdk/google@2.0.25': + resolution: {integrity: sha512-tH2rA3428jnY6COoPfKB/BoQMs57sv9t+PEdyIB9ePtlV9dnVUbfKcdKoEcAaVffNZ6pzk8otrQYnu67pyn8TQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai-compatible@1.0.22': - resolution: {integrity: sha512-Q+lwBIeMprc/iM+vg1yGjvzRrp74l316wDpqWdbmd4VXXlllblzGsUgBLTeKvcEapFTgqk0FRETvSb58Y6dsfA==} + '@ai-sdk/openai-compatible@1.0.24': + resolution: {integrity: sha512-dzhh6NjcSEmhvOPTy1PXFUZ6X4J4IHZqtuo/HNTXWo5OPqwcgSMm9NizTbe8NMmeSXgE3Eim6v6Nuj7yHcpbMw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@2.0.53': - resolution: {integrity: sha512-GIkR3+Fyif516ftXv+YPSPstnAHhcZxNoR2s8uSHhQ1yBT7I7aQYTVwpjAuYoT3GR+TeP50q7onj2/nDRbT2FQ==} + '@ai-sdk/openai@2.0.58': + resolution: {integrity: sha512-eBEpuO6DF4j+ZESs0JPtT9+xjkdnTvOqEHZ3D8JTnCk0HZ/xMR3WQGXqolzckcQS+qzMXCiefDX2gk8cTP9M7A==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.12': - resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} + '@ai-sdk/provider-utils@3.0.14': + resolution: {integrity: sha512-CYRU6L7IlR7KslSBVxvlqlybQvXJln/PI57O8swhOaDIURZbjRP2AY3igKgUsrmWqqnFFUHP+AwTN8xqJAknnA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1001,8 +1007,8 @@ packages: resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} - '@ai-sdk/react@2.0.78': - resolution: {integrity: sha512-f5inDBHJyUEzbtNxc9HiTxbcGjtot0uuc//0/khGrl8IZlLxw+yTxO/T1Qq95Rw5QPwTx9/Aw7wIZei3qws9hA==} + '@ai-sdk/react@2.0.82': + resolution: {integrity: sha512-InaGqykKGFq/XA6Vhh2Hyy38nzeMpqp8eWxjTNEQA5Gwcal0BVNuZyTbTIL5t5VNXV+pQPDhe9ak1+mc9qxjog==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -1068,8 +1074,8 @@ packages: '@asamuzakjp/css-color@4.0.5': resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} - '@asamuzakjp/dom-selector@6.7.2': - resolution: {integrity: sha512-ccKogJI+0aiDhOahdjANIc9SDixSud1gbwdVrhn7kMopAtLXqsz9MKmQQtIl6Y5aC2IYq+j4dz/oedL2AVMmVQ==} + '@asamuzakjp/dom-selector@6.7.3': + resolution: {integrity: sha512-kiGFeY+Hxf5KbPpjRLf+ffWbkos1aGo8MBfd91oxS3O57RgU3XhZrt/6UzoVF9VMpWbC3v87SRc9jxGrc9qHtQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -1081,8 +1087,8 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/types@3.914.0': - resolution: {integrity: sha512-kQWPsRDmom4yvAfyG6L1lMmlwnTzm1XwMHOU+G5IFlsP4YEaMtXidDzW/wiivY0QFrhfCz/4TVmu0a2aPU57ug==} + '@aws-sdk/types@3.920.0': + resolution: {integrity: sha512-W8FI6HteaMwACb49IQzNABjbaGM/fP0t4lLBHeL6KXBmXung2S9FMIBHGxoZvBCRt5omFF31yDCbFaDN/1BPYQ==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.26.2': @@ -1356,11 +1362,11 @@ packages: workerd: optional: true - '@cloudflare/vite-plugin@1.13.15': - resolution: {integrity: sha512-tVkdkRmwGzqs7RzRIwKkJp/FvRZ0YL108jXhQRYTSCDcuDVROK4O1hjf9bcC7Gr0KISSaEPj9oJtR5eTSNN+Ag==} + '@cloudflare/vite-plugin@1.13.17': + resolution: {integrity: sha512-JYBs+KwN/fcqcOwa4hZ5SPLUAZ2idksZ4umeja4TWPPUWvO2f0Lm0bOjVHI+rFuq72b2vixx2coNJSyntEBUsA==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^4.45.0 + wrangler: ^4.45.2 '@cloudflare/workerd-darwin-64@1.20251011.0': resolution: {integrity: sha512-0DirVP+Z82RtZLlK2B+VhLOkk+ShBqDYO/jhcRw4oVlp0TOvk3cOVZChrt3+y3NV8Y/PYgTEywzLKFSziK4wCg==} @@ -1492,8 +1498,8 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@electric-sql/client@1.0.14': - resolution: {integrity: sha512-LtPAfeMxXRiYS0hyDQ5hue2PjljUiK9stvzsVyVb4nwxWQxfOWTSF42bHTs/o5i3x1T4kAQ7mwHpxa4A+f8X7Q==} + '@electric-sql/client@1.1.1': + resolution: {integrity: sha512-E9aZ3PJ/kBRmuxth9fKNt72wTqP5XjXUPu3V2SxNugAFWMgdJ++ErwGtskuUG8W3js7fGeP545yNQTeVlCQRmg==} '@emnapi/runtime@1.6.0': resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} @@ -1807,10 +1813,10 @@ packages: '@huggingface/languages@1.0.0': resolution: {integrity: sha512-EtU6RwSRyiKiRHsdalP84vOV7Wrde6IbPums6XeOOD8peq8ttWfSdXIq00OF5T5OH9aCUf/pbOtg6Pxpus9vfw==} - '@iconify-icon/react@3.0.1': - resolution: {integrity: sha512-/4CAVpk8HDyKS78r1G0rZhML7hI6jLxb8kAmjEXsCtuVUDwdGqicGCRg0T14mqeHNImrQPR49MhbuSSS++JlUA==} + '@iconify-icon/react@3.0.2': + resolution: {integrity: sha512-XCYzkovmRkg6Hv2VjqBw4kyvp0acBAHa3lGFle74TldWx0VK3JAuUU+dDLj+6eUKqHceuTFSUiavuEqnM6UPMA==} peerDependencies: - react: '>=16' + react: '>=19.2.0' '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3050,12 +3056,12 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rolldown/pluginutils@1.0.0-beta.38': - resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} - '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} + '@rolldown/pluginutils@1.0.0-beta.43': + resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} + '@rollup/rollup-android-arm-eabi@4.52.5': resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] @@ -3256,26 +3262,26 @@ packages: resolution: {integrity: sha512-qRHikkH1CwAYuGkcDlMy08Ly3P+TUhR+LvKyuA1uIInHx8Z3oILVH8csS8tA9y282Ey0/Hny2pf98eWb6yxuJA==} engines: {node: '>=18'} - '@shikijs/core@3.13.0': - resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + '@shikijs/core@3.14.0': + resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} - '@shikijs/engine-javascript@3.13.0': - resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + '@shikijs/engine-javascript@3.14.0': + resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} - '@shikijs/engine-oniguruma@3.13.0': - resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + '@shikijs/engine-oniguruma@3.14.0': + resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} - '@shikijs/langs@3.13.0': - resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} - '@shikijs/themes@3.13.0': - resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} - '@shikijs/transformers@3.13.0': - resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} + '@shikijs/transformers@3.14.0': + resolution: {integrity: sha512-i67zQnY9wLMMnKasonVW1L9fKneSLZDj1ePsA4o0AZWU4uUobmJY9baRDa36z+a9/g0aG76/2tybQvm4hrwxIQ==} - '@shikijs/types@3.13.0': - resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3350,8 +3356,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@speed-highlight/core@1.2.7': - resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} + '@speed-highlight/core@1.2.8': + resolution: {integrity: sha512-IGytNtnUnPIobIbOq5Y6LIlqiHNX+vnToQIS7lj6L5819C+rA8TXRDkkG8vePsiBOGcoW9R6i+dp2YBUKdB09Q==} '@splinetool/runtime@0.9.526': resolution: {integrity: sha512-qznHbXA5aKwDbCgESAothCNm1IeEZcmNWG145p5aXj4w5uoqR1TZ9qkTHTKLTsUbHeitCwdhzmRqan1kxboLgQ==} @@ -3367,36 +3373,36 @@ packages: peerDependencies: react: '>= 16.3.0' - '@stripe/stripe-js@8.1.0': - resolution: {integrity: sha512-bhhi0iSHDFRa2pPVv3WOHC6x/iGEu5AZqIiAvXsT8VOucsEre9gzgsK0jFzbzfGW2eeubF+mCdTTYwNAQCMJKg==} + '@stripe/stripe-js@8.2.0': + resolution: {integrity: sha512-CSfD8HO5lKCEklhkV/WjusWqiU4j8JQl7X69CfslESmkUQ+E9/clmzuUbYnEnvNaFQRbYvryfkht/SpirGb2iA==} engines: {node: '>=12.16'} - '@supabase/auth-js@2.76.1': - resolution: {integrity: sha512-bxmcgPuyjTUBg7+jAohJ15TDh3ph4hXcv7QkRsQgnIpszurD5LYaJPzX638ETQ8zDL4fvHZRHfGrcmHV8C91jA==} + '@supabase/auth-js@2.77.0': + resolution: {integrity: sha512-IRxyj2l46EutSX7AbGkHA7LSmrgqnXjPfKouBlGT6NqS1YOm+jMMwfdhf6zP5EZ4giUfdt2u+yHIBgyXU/LEtg==} - '@supabase/functions-js@2.76.1': - resolution: {integrity: sha512-+zJym/GC1sofm5QYKGxHSszCpMW4Ao2dj/WC3YlffAGuIlIhUtWTJvKsv5q7sWaSKUKdDhGpWhZ2OD++fW5BtQ==} + '@supabase/functions-js@2.77.0': + resolution: {integrity: sha512-MxNW3YoQysbiVEiLAozCTqk1urswtVjAZggeZ5Sw+vJ+u1EvFNmTnirzwTj7M8XjTOMmorheruPmNtfHEwudvw==} '@supabase/node-fetch@2.6.15': resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} engines: {node: 4.x || >=6.0.0} - '@supabase/postgrest-js@2.76.1': - resolution: {integrity: sha512-QJ1Cwim6L9gzWKP8U4Lgw9x/4lMWkZSVMDRYFCH+vVGitVbtfU885swTiioOjjUe4EYGZm+Xktg90twzSVv6IA==} + '@supabase/postgrest-js@2.77.0': + resolution: {integrity: sha512-Ly8C48x875JcUXBdML7SPRjO1Bpmjo6Sax/Tz4Ij6YU5paCrGKxEYDBVLP2eHKkQvf+LQ+GIbRFF1DorRvyfwQ==} - '@supabase/realtime-js@2.76.1': - resolution: {integrity: sha512-B5Lfmprea2fx2FS7obp4uAWiRUlEa6j9J3+BvvETGp/2LdkSRBaLEJCBylfcZTXk67ajNPX6ppvKvAZsckqXYg==} + '@supabase/realtime-js@2.77.0': + resolution: {integrity: sha512-Ycv2VZ8yTjvlR2NQecGJUlP0Dh4LhF1Y1oZ3IMQcjjTbDriWSQgfc9HSLIQUaY/eTdtfXfyVKOGE+tieWneV8Q==} '@supabase/ssr@0.7.0': resolution: {integrity: sha512-G65t5EhLSJ5c8hTCcXifSL9Q/ZRXvqgXeNo+d3P56f4U1IxwTqjB64UfmfixvmMcjuxnq2yGqEWVJqUcO+AzAg==} peerDependencies: '@supabase/supabase-js': ^2.43.4 - '@supabase/storage-js@2.76.1': - resolution: {integrity: sha512-OJiNT8tocI9tcTjTjv1SBVLabzgEnS1NorZuqivkiJ0gTYmeg2c2PFmqCARhoQ4whF6zR9MVsX/Mtj2oSv4i/w==} + '@supabase/storage-js@2.77.0': + resolution: {integrity: sha512-4+OpVA4U0C4HM1QuINlgjqFxnRsmqPnuurTDN4m6nRanafuqQQ/UtMjdUU57iygBo70IGBlBefZ8gGNWzD1sLg==} - '@supabase/supabase-js@2.76.1': - resolution: {integrity: sha512-dYMh9EsTVXZ6WbQ0QmMGIhbXct5+x636tXXaaxUmwjj3kY1jyBTQU8QehxAIfjyRu1mWGV07hoYmTYakkxdSGQ==} + '@supabase/supabase-js@2.77.0': + resolution: {integrity: sha512-s6OQ8RZ0ioQCwVDh2Tv502XaUQCuRbbjpujYJB1h0JWELRsqjLDsgB5kZUkETPgtTAjJk7z97YPUsRg80PohfA==} '@swc/core-darwin-arm64@1.13.2': resolution: {integrity: sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==} @@ -3584,22 +3590,22 @@ packages: resolution: {integrity: sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==} engines: {node: '>=18'} - '@tanstack/devtools-event-bus@0.3.2': - resolution: {integrity: sha512-yJT2As/drc+Epu0nsqCsJaKaLcaNGufiNxSlp/+/oeTD0jsBxF9/PJBfh66XVpYXkKr97b8689mSu7QMef0Rrw==} + '@tanstack/devtools-event-bus@0.3.3': + resolution: {integrity: sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg==} engines: {node: '>=18'} - '@tanstack/devtools-event-client@0.3.3': - resolution: {integrity: sha512-RfV+OPV/M3CGryYqTue684u10jUt55PEqeBOnOtCe6tAmHI9Iqyc8nHeDhWPEV9715gShuauFVaMc9RiUVNdwg==} + '@tanstack/devtools-event-client@0.3.4': + resolution: {integrity: sha512-eq+PpuutUyubXu+ycC1GIiVwBs86NF/8yYJJAKSpPcJLWl6R/761F1H4F/9ziX6zKezltFUH1ah3Cz8Ah+KJrw==} engines: {node: '>=18'} - '@tanstack/devtools-ui@0.4.3': - resolution: {integrity: sha512-7QshnQIHifURyMwl/qmYm4KDpsf8UJrJ8BUu+YvPx35RJBe2EO5qHPsefzWh6MlG/dUdVMBxP9nPqchESyuNFg==} + '@tanstack/devtools-ui@0.4.4': + resolution: {integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' - '@tanstack/devtools@0.6.21': - resolution: {integrity: sha512-j8cCmrOz7wu4G4jJ2ZZCo3fIGGDMygSQVPZDtyFylKtKC5i88Hnu6YioODP6I+0mbn9Qvr4eWgPHEONXAViXeA==} + '@tanstack/devtools@0.7.0': + resolution: {integrity: sha512-AlAoCqJhWLg9GBEaoV1g/j+X/WA1aJSWOsekxeuZpYeS2hdVuKAjj04KQLUMJhtLfNl2s2E+TCj7ZRtWyY3U4w==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' @@ -3613,8 +3619,8 @@ packages: '@tanstack/form-core@1.24.4': resolution: {integrity: sha512-+eIR7DiDamit1zvTVgaHxuIRA02YFgJaXMUGxsLRJoBpUjGl/g/nhUocQoNkRyfXqOlh8OCMTanjwDprWSRq6w==} - '@tanstack/history@1.133.19': - resolution: {integrity: sha512-Y866qBVVprdQkmO0/W1AFBI8tiQy398vFeIwP+VrRWCOzs3VecxSVzAvaOM4iHfkJz81fFAZMhLLjDVoPikD+w==} + '@tanstack/history@1.133.28': + resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} engines: {node: '>=12'} '@tanstack/pacer@0.15.4': @@ -3627,8 +3633,8 @@ packages: '@tanstack/query-devtools@5.90.1': resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} - '@tanstack/react-devtools@0.7.7': - resolution: {integrity: sha512-mJ7Ixa+AadGF1b13tLkC8lX0JrM7CrH/SJMOqcCWot9l80KZCWeFnDF1+Ww25QosVbZ1db611LNcgsGz8pv3Zg==} + '@tanstack/react-devtools@0.7.11': + resolution: {integrity: sha512-a2Lmz8x+JoDrsU6f7uKRcyyY+k8mA/n5mb9h7XJ3Fz/y3+sPV9t7vAW1s5lyNkQyyDt6V1Oim99faLthoJSxMw==} engines: {node: '>=18'} peerDependencies: '@types/react': '>=16.8' @@ -3656,47 +3662,47 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.133.25': - resolution: {integrity: sha512-MidzhULcDABhc7qRz4RAN2ktDsmfAzhTxZMCHDJASmqeDD6NH986I4HEYhEbZoaC+RtfkV1bHt18CFZVn/LBKw==} + '@tanstack/react-router-devtools@1.133.36': + resolution: {integrity: sha512-il+DNzc8Ia54N+HOmIlY10NBk7rp0N7Nyysk8eeC1ZSIXImC3MPchdAspwioE6DI7WfK+MfpTav2m9zoOL8wSQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.133.25 + '@tanstack/react-router': ^1.133.36 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-ssr-query@1.133.25': - resolution: {integrity: sha512-XE74D4HvLunA6rXdGQwpSz/pymL5AFGZmtsDA0wtOOZRJ/mqr7OGEHW6ez10NVEff77KpFcBUCbxfq4L3y3WXw==} + '@tanstack/react-router-ssr-query@1.133.36': + resolution: {integrity: sha512-LdQT573vuwbu0WVoFpJbKp98HKkLiHtUeXJM57Zv3K1tyxwKrxhOZBGSRIulFtHDimyMO4ooYBlDaCdj8zBOCA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/query-core': '>=5.66.0' - '@tanstack/react-query': '>=5.66.2' + '@tanstack/query-core': '>=5.90.0' + '@tanstack/react-query': '>=5.90.0' '@tanstack/react-router': '>=1.127.0' react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.133.25': - resolution: {integrity: sha512-NGm5b8KgCdlNr6H/bhtyqFOGflqrbF7c2GGha9E2Ab8Wt1iajnXK+Ba7Y7+Am+zFVCrF5+AL6NCq+8Z1qKO8KA==} + '@tanstack/react-router@1.133.36': + resolution: {integrity: sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-client@1.133.25': - resolution: {integrity: sha512-UWMPJIgG+6E1mFidX18OwVcM/SvM/ne0AQF0CY7eJFo/XL4KbZJXYwK6yanQZs7SATgBarARGsVfUrg8KU1RXQ==} + '@tanstack/react-start-client@1.133.36': + resolution: {integrity: sha512-hNBgpWKbXTYhgw8VbqxHUTz/Nh/Qt/zfmCotz2kydkPbq1dSEALyoiyveVni8bHCTCMFSPRznI3O6yWjQdWJOA==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-server@1.133.26': - resolution: {integrity: sha512-veSeovBI4LOoHXEHI0WQDhJcdgrW6kXvkXvXTD4Zwks8T/0x3NOhzQoY15xk/C7SLgzc7y5Q74+MiYUT5F7FEQ==} + '@tanstack/react-start-server@1.133.36': + resolution: {integrity: sha512-w3QEMR4JlR6Iiks6cqp4vqFuvBmiE6Zkv7qYa2p9QY8LVsUDtejSKrNdDgdk1Io+tiXEEbPqWnZN7eDQqVuzIw==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.133.26': - resolution: {integrity: sha512-1SW61YdxAKUZfLfG1F1VqT5PdppyFlJsXDa3HertIsMbZBYzhNpgmDhcHBTEbe3zIzuiTq1xXS4TjeLxS9czOA==} + '@tanstack/react-start@1.134.0': + resolution: {integrity: sha512-H2aKbmuywNcOrRI5LXiakr2q1r73wFLfPzoVp7DLqyG5kEQ8ntzF4pMPWaX1BQZuAuobG44hEIYwsxRRZmX72A==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -3709,21 +3715,27 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-store@0.8.0': + resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-virtual@3.13.12': resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.133.25': - resolution: {integrity: sha512-u3lBGKsGbt0i66qTBaqMCGPnE9yZrxeMi2Al3ZRaikOmSnTeuxXExbX+QAW4cI6GtFigdI3Ec8KW5M29Uft7Hg==} + '@tanstack/router-core@1.133.36': + resolution: {integrity: sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.133.25': - resolution: {integrity: sha512-Bz1ASxeoJRzm2K7OTVU0aw5ZsVwA2Q/ugp3HheIAu3UlSG8teLiymu/l9avHFPht+bt5xH5yGkpB2SqhArtndA==} + '@tanstack/router-devtools-core@1.133.36': + resolution: {integrity: sha512-jgXSCfWPLukcjXDf4thpk/0QgLXv61mrvmfh9xc8+xeC5TMeLyz2xBaTghniD2PtdF6eII3vMaTWOpMHj4+cVQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.133.25 + '@tanstack/router-core': ^1.133.36 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -3731,16 +3743,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.133.25': - resolution: {integrity: sha512-tHEqokiyFhcwZCBu52PYQ+J9zuUNbKuYb/taYjXHKDZRGXhmC+H5raJTucwGmaCh/JFuBNgZ9mq6kmVqwb6RLw==} + '@tanstack/router-generator@1.133.36': + resolution: {integrity: sha512-3+pJBqkm95/zV7INyhbr688lp1PklZT3wtNNwW9oIxmsBiUJg5hqHWh7z4JgP9E+0D0KAwT535wncWUFfMMZwA==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.133.25': - resolution: {integrity: sha512-DgwHoHmL+6qgrM+Fu0fnKINqf0e7u096W/6cwMq33ADtD+LwjQbJ6D8KyL1TscNjOMpp+NrFWJYS/+lspXwnDg==} + '@tanstack/router-plugin@1.133.36': + resolution: {integrity: sha512-y0vttpDRFbniPk2EOS93wxfNA0SqvD/anj6kXTIl/3caW0rvOC4MzMXV09atJ+3jMSOgHFniljKQj/66AY5dZg==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.133.25 + '@tanstack/react-router': ^1.133.36 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -3756,11 +3768,11 @@ packages: webpack: optional: true - '@tanstack/router-ssr-query-core@1.133.25': - resolution: {integrity: sha512-VmyqbPPgYx0TBTzPb80oJ6hcvB9jHWvbvfBD1PQSRrLIWVh0vGYTQiT8T2X+GweE2GNdKH0Pe/Gopzkfnelf0Q==} + '@tanstack/router-ssr-query-core@1.133.36': + resolution: {integrity: sha512-ydXTU+sDbwEX5BEaKdgY8Ey2le61vB8Vtp32wqNy1vH50Gpys+kI1Rn6NZ5rrvZ6y/uEmKs1jomcfMWK9e1Niw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/query-core': '>=5.66.0' + '@tanstack/query-core': '>=5.90.0' '@tanstack/router-core': '>=1.127.0' '@tanstack/router-utils@1.133.19': @@ -3771,27 +3783,30 @@ packages: resolution: {integrity: sha512-jyb+Z6umAgZncEAB4OKLJiP8338n17xxxw3tO344gcnYCcqeZ9VAOMq3RVOoBUBDtV2DTLj/LVO62A5vDZ6WJw==} engines: {node: '>=12'} - '@tanstack/start-client-core@1.133.25': - resolution: {integrity: sha512-AJLFhfYuCVWbJd5zks6lhCvJxlbNa/bR1SFqxG7XcY3E4eSAJDjl6ZsghEGkzRZ8dZSRM40MoGj77mrLt4yGqA==} + '@tanstack/start-client-core@1.133.36': + resolution: {integrity: sha512-SrjeR9c/1VzV3FM1Sxk5Pdv1rufrhb2gixerAPQoZhsxzuv/nYYKzplXpmT+Ec3vi5IzGYA4cXhh5F00sGnP0A==} engines: {node: '>=22.12.0'} - '@tanstack/start-plugin-core@1.133.26': - resolution: {integrity: sha512-RqUhBG4bvpunb8kxAMOdB7g/LihDqZnvF+5wVr3F5IHKhu2Va/+vupKabkE9q31XRZJ5nVPNs4nmju7J2cx1tA==} + '@tanstack/start-plugin-core@1.133.37': + resolution: {integrity: sha512-660IX2cpBvXweblYyUfFFFVciP3DhYazBG3c3JI+mbBaNKXd9iCslunzKlWo6bwp90XAFSZzveKoGOBHXUiPQw==} engines: {node: '>=22.12.0'} peerDependencies: vite: '>=7.0.0' - '@tanstack/start-server-core@1.133.26': - resolution: {integrity: sha512-v5gsQb1Ql43zT/dqHtbsw40Q4YyaWw6Ihw7LZl0TBqAxYoPmkZ9AOzporZ8HMew4qeAF+QgHVrT+YahSYEHAkA==} + '@tanstack/start-server-core@1.133.36': + resolution: {integrity: sha512-W8YHCpEpKZ5EZ6dVQ84fRond7CX2r/UUXwR87aLUL8M3GOORTR+HOK/tSWPo/sMjEUlatmFT0ra387rI9J3wyA==} engines: {node: '>=22.12.0'} - '@tanstack/start-storage-context@1.133.25': - resolution: {integrity: sha512-NKhCNq8A1f1crjI99dIOfSR/sE+UpHMacF+NfZQAEV+51bkADE+Ih78NrHaSRSbOmjjFzS62LScvG/2zd/lPlg==} + '@tanstack/start-storage-context@1.133.36': + resolution: {integrity: sha512-onQiqjNQU9txFSTs2TKbxvW3vWMp+utWZEsxgfh9BOZtjYbhl9pM/1HoxX5R/cdi4k2tyX5OUrHGS05bhbhObg==} engines: {node: '>=22.12.0'} '@tanstack/store@0.7.7': resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@tanstack/store@0.8.0': + resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} + '@tanstack/virtual-core@3.13.12': resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} @@ -3805,94 +3820,94 @@ packages: '@tauri-apps/api@2.9.0': resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==} - '@tauri-apps/cli-darwin-arm64@2.9.1': - resolution: {integrity: sha512-sdwhtsE/6njD0AjgfYEj1JyxZH4SBmCJSXpRm6Ph5fQeuZD6MyjzjdVOrrtFguyREVQ7xn0Ujkwvbo01ULthNg==} + '@tauri-apps/cli-darwin-arm64@2.9.2': + resolution: {integrity: sha512-g1OtCXydOZFYRUEAyGYdJ2lLaE3l5jk8o+Bro8y2WOLwBLtbWjBoJIVobOKFanfjG/Xr8H/UA+umEVILPhMc2A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.9.1': - resolution: {integrity: sha512-c86g+67wTdI4TUCD7CaSd/13+oYuLQxVST4ZNJ5C+6i1kdnU3Us1L68N9MvbDLDQGJc9eo0pvuK6sCWkee+BzA==} + '@tauri-apps/cli-darwin-x64@2.9.2': + resolution: {integrity: sha512-nHHIY33noUmMOyFwAJz0xQyrYIXU+bae8MNos4TGsTo491YWAF2uzr6iW+Bq0N530xDcbe7EyRvDHgK43RmmVw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.9.1': - resolution: {integrity: sha512-IrB3gFQmueQKJjjisOcMktW/Gh6gxgqYO419doA3YZ7yIV5rbE8ZW52Q3I4AO+SlFEyVYer5kpi066p0JBlLGw==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.2': + resolution: {integrity: sha512-Dq17LBdSuzf+fWOKMIyiSao+Fcq4FiQwYYlx3Nk8oafDINc8sVBjC5gv2xp18KzYhk9teSWfmDpD1sj+D3t7uw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.9.1': - resolution: {integrity: sha512-Ke7TyXvu6HbWSkmVkFbbH19D3cLsd117YtXP/u9NIvSpYwKeFtnbpirrIUfPm44Q+PZFZ2Hvg8X9qoUiAK0zKw==} + '@tauri-apps/cli-linux-arm64-gnu@2.9.2': + resolution: {integrity: sha512-Pxj5k29Rxj9xEht4gdE744t5HLXTwBojkjYDXXyJ3mE+BEg9hFX5WkStg7OkyZwH60u8NSkDSMpo7MJTH9srmA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.9.1': - resolution: {integrity: sha512-sGvy75sv55oeMulR5ArwPD28DsDQxqTzLhXCrpU9/nbFg/JImmI7k994YE9fr3V0qE3Cjk5gjLldRNv7I9sjwQ==} + '@tauri-apps/cli-linux-arm64-musl@2.9.2': + resolution: {integrity: sha512-mx82BuD4q3Yj5Zw+LXveZgPaDCnmH2At2LosX1siK77kaD5Ap5FF+FN0V4y+3cwq+Hcrk9AhEUPbHqoNOx1R2g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-riscv64-gnu@2.9.1': - resolution: {integrity: sha512-tEKbJydV3BdIxpAx8aGHW6VDg1xW4LlQuRD/QeFZdZNTreHJpMbJEcdvAcI+Hg6vgQpVpaoEldR9W4F6dYSLqQ==} + '@tauri-apps/cli-linux-riscv64-gnu@2.9.2': + resolution: {integrity: sha512-Ypm1nnr7k+ECC1+JfDcnxROHt6BX8t/4GplxBvdY68BDXtIcBbdhPWDos7MK+3bDmoaA0WSJbW+DUjpfSkyKgw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.9.1': - resolution: {integrity: sha512-mg5msXHagtHpyCVWgI01M26JeSrgE/otWyGdYcuTwyRYZYEJRTbcNt7hscOkdNlPBe7isScW7PVKbxmAjJJl4g==} + '@tauri-apps/cli-linux-x64-gnu@2.9.2': + resolution: {integrity: sha512-tg85cGIM9PWwsbQg8m3uah3SfoNapgUr4vhWtkqgeTDZOjQuQ2duTwCH4UiM7acBpbZHNzvRrxSFpv0U53TqQQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.9.1': - resolution: {integrity: sha512-lFZEXkpDreUe3zKilvnMsrnKP9gwQudaEjDnOz/GMzbzNceIuPfFZz0cR/ky1Aoq4eSvZonPKHhROq4owz4fzg==} + '@tauri-apps/cli-linux-x64-musl@2.9.2': + resolution: {integrity: sha512-xW8qaz9bcwR35W2gIg7fKG9e1Z34idOsGpD2zIPgxlJyF314B/1qie50hbOqt5AbbXHR4iRpxKE4kA2grqMmkg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.9.1': - resolution: {integrity: sha512-ejc5RAp/Lm1Aj0EQHaT+Wdt5PHfdgQV5hIDV00MV6HNbIb5W4ZUFxMDaRkAg65gl9MvY2fH396riePW3RoKXDw==} + '@tauri-apps/cli-win32-arm64-msvc@2.9.2': + resolution: {integrity: sha512-A1PshB8oHdY7zYOPlLD7Om7/aD9sOUVREd765ElIzYDtptWcALwOP9jb22Wi01vDTqxf98E4ZGIcG2gxr4FhiA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.9.1': - resolution: {integrity: sha512-fSATtJDc0fNjVB6ystyi8NbwhNFk8i8E05h6KrsC8Fio5eaJIJvPCbC9pdrPl6kkxN1X7fj25ErBbgfqgcK8Fg==} + '@tauri-apps/cli-win32-ia32-msvc@2.9.2': + resolution: {integrity: sha512-AuCi0Vnc4qkXRLCC58das0u45SmXAjqcOjqF324CBKa1Z7jjNJESm0Sc2oc2G2q6f2eAbAfi34s2iJNaJU1hlQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.9.1': - resolution: {integrity: sha512-/JHlOzpUDhjBOO9w167bcYxfJbcMQv7ykS/Y07xjtcga8np0rzUzVGWYmLMH7orKcDMC7wjhheEW1x8cbGma/Q==} + '@tauri-apps/cli-win32-x64-msvc@2.9.2': + resolution: {integrity: sha512-kDoejyfvME/mLkR4VofQnmVPTt/smJvoXuE3xgTbUwcUQKqawM8EyQvxOHQosaJYfQphHi7G0ya8UZo3PlDZig==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.9.1': - resolution: {integrity: sha512-kKi2/WWsNXKoMdatBl4xrT7e1Ce27JvsetBVfWuIb6D3ep/Y0WO5SIr70yarXOSWam8NyDur4ipzjZkg6m7VDg==} + '@tauri-apps/cli@2.9.2': + resolution: {integrity: sha512-aGzdVgxQW6WQ7e5nydPZ/30u8HvltHjO3Ytzf1wOxX1N5Yj2TsjKWRb/AWJlB95Huml3k3c/b6s0ijAvlSo9xw==} engines: {node: '>= 10'} hasBin: true - '@tauri-apps/plugin-deep-link@2.4.3': - resolution: {integrity: sha512-yVCZpVG1ZrtfCvE7K5LRSrGqlyPlCrqlKgoREJHnfjyYdDtUhFmZqScOXpL8XL2PizJHDsoahEweuTaUPEokPA==} + '@tauri-apps/plugin-deep-link@2.4.5': + resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==} - '@tauri-apps/plugin-dialog@2.4.0': - resolution: {integrity: sha512-OvXkrEBfWwtd8tzVCEXIvRfNEX87qs2jv6SqmVPiHcJjBhSF/GUvjqUNIDmKByb5N8nvDqVUM7+g1sXwdC/S9w==} + '@tauri-apps/plugin-dialog@2.4.2': + resolution: {integrity: sha512-lNIn5CZuw8WZOn8zHzmFmDSzg5zfohWoa3mdULP0YFh/VogVdMVWZPcWSHlydsiJhRQYaTNSYKN7RmZKE2lCYQ==} - '@tauri-apps/plugin-http@2.5.2': - resolution: {integrity: sha512-x1mQKHSLDk4mS2S938OTeyk8L7QyLpCrKZCZcjkljGsvTvRMojCvI9SeJ1kaxc7t8xSilkC7WdId8xER9TIGLg==} + '@tauri-apps/plugin-http@2.5.4': + resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==} - '@tauri-apps/plugin-opener@2.5.0': - resolution: {integrity: sha512-B0LShOYae4CZjN8leiNDbnfjSrTwoZakqKaWpfoH6nXiJwt6Rgj6RnVIffG3DoJiKsffRhMkjmBV9VeilSb4TA==} + '@tauri-apps/plugin-opener@2.5.2': + resolution: {integrity: sha512-ei/yRRoCklWHImwpCcDK3VhNXx+QXM9793aQ64YxpqVF0BDuuIlXhZgiAkc15wnPVav+IbkYhmDJIv5R326Mew==} - '@tauri-apps/plugin-process@2.3.0': - resolution: {integrity: sha512-0DNj6u+9csODiV4seSxxRbnLpeGYdojlcctCuLOCgpH9X3+ckVZIEj6H7tRQ7zqWr7kSTEWnrxtAdBb0FbtrmQ==} + '@tauri-apps/plugin-process@2.3.1': + resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} - '@tauri-apps/plugin-store@2.4.0': - resolution: {integrity: sha512-PjBnlnH6jyI71MGhrPaxUUCsOzc7WO1mbc4gRhME0m2oxLgCqbksw6JyeKQimuzv4ysdpNO3YbmaY2haf82a3A==} + '@tauri-apps/plugin-store@2.4.1': + resolution: {integrity: sha512-ckGSEzZ5Ii4Hf2D5x25Oqnm2Zf9MfDWAzR+volY0z/OOBz6aucPKEY0F649JvQ0Vupku6UJo7ugpGRDOFOunkA==} '@tauri-apps/plugin-updater@2.9.0': resolution: {integrity: sha512-j++sgY8XpeDvzImTrzWA08OqqGqgkNyxczLD7FjNJJx/uXxMZFz5nDcfkyoI/rCjYuj2101Tci/r/HFmOmoxCg==} @@ -3916,208 +3931,208 @@ packages: '@types/react-dom': optional: true - '@tiptap/core@3.7.2': - resolution: {integrity: sha512-fJwNpTx0aq4UU0HNkxPvPYfNBcTHQ/q5xBUdOB5Mgu6clwGES38jVsNNSudB8g53APUmJIS+2fJbkxl3V+0jww==} + '@tiptap/core@3.9.1': + resolution: {integrity: sha512-qfqeR2WN9qr/3+29ocT7EgEBNP2sLHWwGYOEd++hgYixC3tOY4Juw90z1MUqVEOcUqswPDE1CrBNSgbFAitTDQ==} peerDependencies: - '@tiptap/pm': ^3.7.2 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-blockquote@3.7.2': - resolution: {integrity: sha512-8rNDh1E1ratex9KicvNNnjJGtF313Kpf5hXHOUcIm8FQwvA/0Tu6jq7r6VgESMyo95R3EmzRpnCYQef+zDm6OQ==} + '@tiptap/extension-blockquote@3.9.1': + resolution: {integrity: sha512-OL0px9tge5SHE6SeMcM6H5Q0aczCPh820nnFGNFH1d6Cr35pKKNyC3rXcUfsbySxsJNz5zetTE5s/oyqUWfM/Q==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-bold@3.7.2': - resolution: {integrity: sha512-bwCn9lQEXnEi7LfIx3G/oaH4I0ZapAgrHzLCNJH/tNgRKVWym1H1Oa8PlkiFDbalWOdUkbgeAUqUaIB13k408Q==} + '@tiptap/extension-bold@3.9.1': + resolution: {integrity: sha512-48jgjazCkvQh0sOmiDi8xQQg62o3iGEcZci0Qow3MRGKetVC0aSwmV0VuF4ai3rABPDxrlZbBP2EGq5PBoIfQw==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-bubble-menu@3.7.2': - resolution: {integrity: sha512-rCJu/X7sZEYWkOwLO342JP06f4giVBECPzr/SzG/fQdAidPW96eilPk3L82w5j24kS9odTlxSLlFlIf6UZ2b9w==} + '@tiptap/extension-bubble-menu@3.9.1': + resolution: {integrity: sha512-rUV7Q/dLxYX1CS0RqSYIYRXGZ4ePFbmzQlzYsCfGKmTVTMNinJXQnltq92iVXa2/dfgg/iWNS73azPaJ0NP1Bg==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-bullet-list@3.7.2': - resolution: {integrity: sha512-OHYYXKjmxisLQws0tW8Dz14PcyIJmaed7eypZvIm/R3hxa/7lJY/2EM/Ti5g/w1U8WPBEH1hX3icRtiulserKw==} + '@tiptap/extension-bullet-list@3.9.1': + resolution: {integrity: sha512-NMigWhqpnPgaDz6xZtu13dnRoSqu8muPOzBDEPHlYASqamZQlWJvcPTd+wxngBbjL7cXEp8KChfujhM4xTREnA==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-code-block@3.7.2': - resolution: {integrity: sha512-TfixutvvbGCrSSCsfDK/PBm6A5FIzcPTSVDrmmsiAfqldj/Woy1T42dads+wv9SjKG06GlWDwYtDGAk2Uun8NA==} + '@tiptap/extension-code-block@3.9.1': + resolution: {integrity: sha512-wwQ3DFH8hIYI4qNbZA1dOfJ8Y7XPnJIpc5pIENb9JAtTNkR0WbX1hc3g2tbRTxBu9HBqaOQOWygMTufntetNtg==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-code@3.7.2': - resolution: {integrity: sha512-J8FaCiKJJnHvQiPcbfbUtc5RNmGx/Gui/K5CDMPc17jhCiQ9JhR9idRPREV24Z2t7GujWX7LG6ZDDR82pSns+g==} + '@tiptap/extension-code@3.9.1': + resolution: {integrity: sha512-fNhNDzZ7WQU7MdafH1XruoxCBQdVaUoevnOfH+CtXebbXnSw6LWZ/l9LHTP9Ng3bVijcoloxqtkfBNXinQeouA==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-document@3.7.2': - resolution: {integrity: sha512-OrHl402v2FWCUKR1Xi5MTNBAkKYQh7mtpw/WlJDFnk5z1qHLqz4UIcbGilDYzVPrNUZPhA1p3c+V5UUVUFzUfg==} + '@tiptap/extension-document@3.9.1': + resolution: {integrity: sha512-hzeWra07/9tdjwHJAASBlkk3S8urkiQvsRKcdGjEsjhLCzp0sJyuMQKRdOjv3dwBI+SDtEZGj53P2mpJ0KVzXw==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-dropcursor@3.7.2': - resolution: {integrity: sha512-79y6M9pJYwqcqBHIWoomfptJp0QB/TP3Y+2NOL09sMNeSdUgmz5pCVObA4H48YMkoB0EcUtux2IUOM66e4nsJA==} + '@tiptap/extension-dropcursor@3.9.1': + resolution: {integrity: sha512-maKd2r95J9HPLGtnHU5x3XP7GIeIIfWACQhumylDtC8SYzce33cygb0Yh8jRzr3GSz39PWW34cQ6+reLhXaPWA==} peerDependencies: - '@tiptap/extensions': ^3.7.2 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-floating-menu@3.7.2': - resolution: {integrity: sha512-g19ratrXlplYDS29VLQa1y/IM/ro0UFhSS4fQokiQKkazwnA1ZVnebjw8ERYg5lkMm/hiImqstpgdO0LtoivvQ==} + '@tiptap/extension-floating-menu@3.9.1': + resolution: {integrity: sha512-9T1wkfDsGbm+uMlN9OcwRAefrbAOYxE2hWB+mW2J4qoDl3BZLdFjH/HW11xBHz+sjekDw/4xx+zyDNVwqu1RMA==} peerDependencies: '@floating-ui/dom': ^1.0.0 - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-gapcursor@3.7.2': - resolution: {integrity: sha512-vCLo2dL2SfeWjh/gJKDiu0/fz6OF7obGTJvHg/yStkoUqlAEiwKoyHP/NXeTGYJMzZzUi0kY9DtTEJdGFvphuQ==} + '@tiptap/extension-gapcursor@3.9.1': + resolution: {integrity: sha512-+POd1gdTU+OOwWN544BoIOBN/WwRKE+WGGwUNY7mmCai9gLDxCXKXkY89yQW5rwzOHdHU/GapgjkSPNTstWG1g==} peerDependencies: - '@tiptap/extensions': ^3.7.2 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-hard-break@3.7.2': - resolution: {integrity: sha512-nNDo+5S1yRQ3JkBM+gwpEEVZ/Kw9qWoG/cpShyGYDHo1/y8MgO+VI0kSb/LuBTw7g+jmNXdf+ZaRRI/pXsUihg==} + '@tiptap/extension-hard-break@3.9.1': + resolution: {integrity: sha512-Uc4TjNdwjMp4zUFmmzGYmBicgy5cHNhz6vd0eBZAzWSf3qqTdfER3B91ktM0d7hjhaNc2g6sl45W+PvzSthSwQ==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-heading@3.7.2': - resolution: {integrity: sha512-eH/G66FIRlTQz4MhEmlNNNQgVTxhoqlkyFzgeG5aipIplYOdYa5Y6Wl0NF4xqr1jAHGLAK6LaYS4FXp3TE7LyA==} + '@tiptap/extension-heading@3.9.1': + resolution: {integrity: sha512-r3H5nejZ/SYUF9DUbDT2rZS3ZeQkHUNljP7lmI5JdHDrFc5/UrvtkQr+E2mLwmn0xA+8Dwccoc9fPwnTh3YyeA==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-highlight@3.7.2': - resolution: {integrity: sha512-+R10j0BaN3J8XeZM/RHIiYNpEHBetTtZQVDsEwmG5QBPzOTItvCc4qNaJjpoCPhkwTd5EQdmW7feUDPsTW+bgw==} + '@tiptap/extension-highlight@3.9.1': + resolution: {integrity: sha512-KAcvZPr5WwPFpIs2ZrxEE8SMxyXeOpxWFb2TZCmolgxp8DJU96IRsExjOmBCFkczqtAk758hE0HuCmHFmejVTQ==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-history@3.7.2': - resolution: {integrity: sha512-iAGTUxAr7r+tQ/PtIG94jqTJLy/S/VwE43USfWzXCHvbLn60cPJJG7MTCZxYbd+ZuivZVhEhp3EbzCNmHxjp8A==} + '@tiptap/extension-history@3.9.1': + resolution: {integrity: sha512-5VM6OIapiKsdquGHfnqFVhOpRcy8zf17fwfNbNyCGX5mzuQiltcID+d6QNUnyJxiFAgu84y9fYOA5lL7UPRYhQ==} peerDependencies: - '@tiptap/extensions': ^3.7.2 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-horizontal-rule@3.7.2': - resolution: {integrity: sha512-pN+1hJAVVP3uqtpZ5Rm7z5XUB/NGprK6wExJ04xG117E4rTVcaEb1FnMILY3J3A5XbdC3vHX+cblR8mOl1PAMw==} + '@tiptap/extension-horizontal-rule@3.9.1': + resolution: {integrity: sha512-Ar4jRvsQXgE6oUxWGrNrSUXO/Q6yHNjLqdEKXvZw1KeahbHwtgsgDscVSCr8Oi6JS8z9JWfh7Xm2fAqb5Xdgkg==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-image@3.7.2': - resolution: {integrity: sha512-GlFdoZULF9mEG3tMRqB1DDlyA75NIRHS5NKuoicQTAX9OegiZfTPYRmVOpLNaTunTt8mFL6Wx2Z9x5ZN2WdNBg==} + '@tiptap/extension-image@3.9.1': + resolution: {integrity: sha512-pRKNL6fnp6Uyug9DRe/DK13W5sfz6IAv8RnzW2FG4ejubdyg4K2KS8deubiv+Ltfyo3LLSTy+eNhWCdRRBVN6Q==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-italic@3.7.2': - resolution: {integrity: sha512-1tfF37LvKgA5hg09UBgOjdMLNRb1C6keIOBF0r5oHKeWPYOf4z3j5IU9PsFUoOn53XRMb1aiD/TNbGPyoT3Fyw==} + '@tiptap/extension-italic@3.9.1': + resolution: {integrity: sha512-0OTn+ZZcI/9CIDVMQH3byilzIUgfDkX/l5NhWpLeUBlqrGfgt61g5jwkYyy49uuVQfbxHwZHpDptkdnJGrfpkw==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-link@3.7.2': - resolution: {integrity: sha512-9K54PxBiDSWAMfICqkb8jcQ6cL7vDAtjTk0zqBw4d+XuaUy0FC9QUdbx7r1Pkbf36K1/ApbvM9a7qpOirWk8Xw==} + '@tiptap/extension-link@3.9.1': + resolution: {integrity: sha512-Q+5uYN8rvC+O00ec5m8mRTm5MZnvtkvhKq6bhgdPnQGggN3PIQ1+OSP0/9wu+leB+Ydk4PZMTPVxMtOhj55hRA==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-list-item@3.7.2': - resolution: {integrity: sha512-962TFsx4eF5NMyLVhGFGF/btt5j3MipPhDiUsxzBgnlW8o5OonVepb9cDrqpEDQ2/wLvheWnCKuvmG7umasldQ==} + '@tiptap/extension-list-item@3.9.1': + resolution: {integrity: sha512-Z+PHGPNVmRcC+J5qYL9ZQWp7Fq5XRg4EGfmmrYFANQn4UjYK3iushSmB0L0/npJfLdqxMZi+wtymNk7pVw7Zcg==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-list-keymap@3.7.2': - resolution: {integrity: sha512-1du9eo+NPIkuRT258yUn9bovhip556aJo/yDtRbswEVNScP1E8y/kFRWvw0HD7/YWcNqok1ZteoSwShWnKAXRQ==} + '@tiptap/extension-list-keymap@3.9.1': + resolution: {integrity: sha512-lX8VxXavya+BsBLi+QOwAMY+rZcGUIA/2XEYr5VFSqs5CHfl9R6exj8B+eHEmlCHg1hcj15DpV+eYfgb1tAHUQ==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-list@3.7.2': - resolution: {integrity: sha512-/tYHmEkOGcVweAc9ZgnAXkzua5aJfu7TjZcKTq5fmDt6x9MY1eY1+egS7D9hVR2sUSAC10VgXmYdYPDsKF3p2g==} + '@tiptap/extension-list@3.9.1': + resolution: {integrity: sha512-nqWP4GEWKUtlh2fOZcw7mHv73TFCstSfqymnwIa7bWGpGO3fmRnEiow/X6TeKC9MeOasNvEyaHgaYefnzbaANg==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/extension-mention@3.7.2': - resolution: {integrity: sha512-y8ldoGItWii6DY+db37BqdmHIbwrIV7b7Lz0uI3lhb3tNNkjaa84XRTUK7mySXrkzp/FMvw8MXCTUF44aQdFZQ==} + '@tiptap/extension-mention@3.9.1': + resolution: {integrity: sha512-JF+QV2OMlx9LMOaBTEiHcaR3IwwwIX9QB4ddDGVRxWAZJZzbHpvn4j8MEDXtsnLNe+RfX5iGI7ggG+FCCL60LA==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 - '@tiptap/suggestion': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 + '@tiptap/suggestion': ^3.9.1 - '@tiptap/extension-ordered-list@3.7.2': - resolution: {integrity: sha512-Tu61/JXh1RRd3Kb+s7A7jmpnB+w1pqGSRfMXBtYHDHDIGyXu255ru7soX44lJfHGq/zYcTFSHGSsi8o23QONJg==} + '@tiptap/extension-ordered-list@3.9.1': + resolution: {integrity: sha512-EOq7D/aX8xFrLcGZnGMxWWHlwZWfuVjwTSqjtyPJ6voYTzgfkbsvAbx1tGTwOMK4dk1S9wno6QHVj1ifzzBJcQ==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-paragraph@3.7.2': - resolution: {integrity: sha512-HmDuAixTcvP4A/v6OLkh/C6nB86i7/DRNswBf/Udak8TgWUIcSUK0iActxxm5+B3MZTSf3U87JzyI6IeuElLIQ==} + '@tiptap/extension-paragraph@3.9.1': + resolution: {integrity: sha512-1p/teor132DpJoc8krgSRH6tdgA+0VysUAGfH7Cqq177bi6A0QFC1tF1reBdEmUg5dFrVs4sAIKdIbS6ayw0Hg==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-placeholder@3.7.2': - resolution: {integrity: sha512-YUr1rlxkgEBQDsMLpU8ruA4Uet37kXvwwFwIbDgaFd4NpfAD0fvX2zmPhHIBzsdH3e4V6eNp6IkmoYCWvugAAA==} + '@tiptap/extension-placeholder@3.9.1': + resolution: {integrity: sha512-wiOqlH3t7VEhYUwMDwYSIKhlAkV7v1Hpwz/vsDptHlQfGgwzeRBljY63iUL5M7BIXk6AaI3gtX8wlIa+mcrTiw==} peerDependencies: - '@tiptap/extensions': ^3.7.2 + '@tiptap/extensions': ^3.9.1 - '@tiptap/extension-strike@3.7.2': - resolution: {integrity: sha512-I1G+4vZbCBTpAMmyVwaO8cLBJgXEf1DyEzc0B+HhTJiBa9qA9OKgRQEGFgisxu1kggjbzB6+d0+taHfjsZC1SQ==} + '@tiptap/extension-strike@3.9.1': + resolution: {integrity: sha512-CiprEfK1daPMQDKlnqEXpsJRIu2VepMVTiOwx1H/gV4Ug/pDE06fgPWvI0XV03mN2/+d9sDWpF5gSqIV5ZtVjw==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-task-item@3.7.2': - resolution: {integrity: sha512-idfQUeMm1wxJBZMe52YdGnQ/4PI9H6nKL9TxlvqqXDVKD8XHrGguI/9OSnPsDLN/Yqc4tzXFnPH+8NkL7esdYQ==} + '@tiptap/extension-task-item@3.9.1': + resolution: {integrity: sha512-fFvDzo1htLlcnD92jmfKEfnT2V8oQHNzDxRwEH1FuHE7b3Pk9TWuVZ7selFkG2ULc6KGMMPHahT5xbKOn2iapQ==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-task-list@3.7.2': - resolution: {integrity: sha512-6ZdSiHeS69iuGkWE1DFhVtC1xwokWtqtQuEJU6Mlh7g+UvEVEn+QGAjUXzUWPqFHjlXUvmTvhYOeqMjKL/FzVQ==} + '@tiptap/extension-task-list@3.9.1': + resolution: {integrity: sha512-WNLbtHTLn6cRvp5PGL9QPzu15HUdc2/EDahDX6CWHP+uzGvjoDbmDCPVg3aX2hphinE8GOq68OYJTvSazJWZrw==} peerDependencies: - '@tiptap/extension-list': ^3.7.2 + '@tiptap/extension-list': ^3.9.1 - '@tiptap/extension-text@3.7.2': - resolution: {integrity: sha512-sKaeGYNP1+bAe2rvmzWLW5qH9DsSFOJlOUEOFchR0OX0rC7bbGS6/KuyAq0w6UkL+cMJnDyAbv3KeD2WEA192w==} + '@tiptap/extension-text@3.9.1': + resolution: {integrity: sha512-giNTcXxG2DP/B5xU8wNM9d441f6FNMYCkbW6bUtjg3USLUWazYmEvp/F6vJ2wa4PSnahH+mNiiylUi2imTnzDg==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-typography@3.7.2': - resolution: {integrity: sha512-2yW3gRVm+9G7INEFj9jaL5otCw7I/271VJW25PNYNh3ERtV54rO0UjfSykMSqu70OkNzGQtYE7nixPGXpOrulQ==} + '@tiptap/extension-typography@3.9.1': + resolution: {integrity: sha512-LaVynluqzlljqwUymdHSfYUQSHPMQJt7D3OK62NrHk/gWfQsPL6zNd9yijZL/v0nFf0+7/i7Br6a0PMFICsQaA==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extension-underline@3.7.2': - resolution: {integrity: sha512-GDpUZllTD7uIdHjTzYJ6i4jUgCeviW40SCpLVVv1xH0gj1t1xu0Rnxmk+bXkF2XNe8jPXkMCgYNr6DR6eO8roQ==} + '@tiptap/extension-underline@3.9.1': + resolution: {integrity: sha512-0TmC2gR+VAUvqhJvdHamqTcwC+sBo3uO0X7A45xpWuECUlBFD22VJB8aQg892FyfsRGxIuPFaAS5W7WaLGp9Tw==} peerDependencies: - '@tiptap/core': ^3.7.2 + '@tiptap/core': ^3.9.1 - '@tiptap/extensions@3.7.2': - resolution: {integrity: sha512-FaToSdU9fhQk2swkaXrAQNgdaE0dwLbUHcvilW5F4xTpQfZ3J535u5U2TUYf+f9KKSV5fTmD4QGNY9qxY7ihTg==} + '@tiptap/extensions@3.9.1': + resolution: {integrity: sha512-cFo3zsuqHvOo7wtUJ8+0wxdXq4L2iIupRJ3yjWKQ8q1Ajb6WYHXxiH4Q1rhZP6qHKdDZTrj/KP6YvadXZaZ8kw==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/markdown@3.7.2': - resolution: {integrity: sha512-0cdCYYHdBDXcwjZsTOSySbdHQuHZct6nxvcp4dSVpP25kbZL3ONSJvLY5Nsy3rkXlmhk9qbyFwsexGiSIdFy8Q==} + '@tiptap/markdown@3.9.1': + resolution: {integrity: sha512-9RyqD29Cs1DiVTYZp6nmWH3zRqCZpWvCKyBvf1rnu18vStfLBds+6Dx+akA6OpFtJwD/2rFqkTjCTfhKlBRNkQ==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 - '@tiptap/pm@3.7.2': - resolution: {integrity: sha512-i2fvXDapwo/TWfHM6STYEbkYyF3qyfN6KEBKPrleX/Z80G5bLxom0gB79TsjLNxTLi6mdf0vTHgAcXMG1avc2g==} + '@tiptap/pm@3.9.1': + resolution: {integrity: sha512-9GnmyMgC0sZYxqgmoZ1ULETl+J+IRC2noG2+bVYHjxeQn3G3+R5W/APKmIA1DDWG1ShY1LP/htHlrCWswYMozA==} - '@tiptap/react@3.7.2': - resolution: {integrity: sha512-tka4ioSmsGI4TyGZ7jAUoIw8t8DVjr1It0B38vZVLqg8M/ZFgR1NkF50TJ6qAkhy8Uz12AO50so0v79tV2pmEA==} + '@tiptap/react@3.9.1': + resolution: {integrity: sha512-mT+aaZc5wkrIsCB3kO6cz1HHDH6Bp7lQHTCnwq4kvilvRewVUaAX2qUXaVPzTLUixXFwO9ugQLdaDcY7CdSHKw==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tiptap/starter-kit@3.7.2': - resolution: {integrity: sha512-43GwI+2Mtc/ci7J4eJOE02wZxp5KIsDTMMb0peNksPcEGaURGdDhav9zbAW24NRjRxU7Auk/zaQu9O8+ZE0v0A==} + '@tiptap/starter-kit@3.9.1': + resolution: {integrity: sha512-qnrb02VioVb1/MJyzMUw5+73/uA5GNtSBiA+n1BX36o5aCq51zZajU0z7Nm/9+JgHRFm0rlPDP0rFhmvxQ+vrg==} - '@tiptap/suggestion@3.7.2': - resolution: {integrity: sha512-CYmIMeLqeGBotl7+4TrnGux/ov9IJoWTUQN/JcHp0aOoN3z8c/dQ6cziXXknr51jGHSdVYMWEyamLDZfcaGC1w==} + '@tiptap/suggestion@3.9.1': + resolution: {integrity: sha512-+fB91280PI11vWlEAY9ny0W05r+MCQKWq2FhhZzPq1no92V2G9PC7HH7VX8rpkHaipdh1j++4v3UNnH37JmEAQ==} peerDependencies: - '@tiptap/core': ^3.7.2 - '@tiptap/pm': ^3.7.2 + '@tiptap/core': ^3.9.1 + '@tiptap/pm': ^3.9.1 '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -4297,14 +4312,14 @@ packages: '@types/mysql@2.15.27': resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} - '@types/node@20.19.23': - resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==} + '@types/node@20.19.24': + resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==} - '@types/node@22.18.12': - resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==} + '@types/node@22.18.13': + resolution: {integrity: sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==} - '@types/node@24.9.1': - resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} + '@types/node@24.9.2': + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -4338,8 +4353,8 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/turndown@5.0.5': - resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} + '@types/turndown@5.0.6': + resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -4384,8 +4399,8 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitejs/plugin-react@5.0.4': - resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} + '@vitejs/plugin-react@5.1.0': + resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4425,8 +4440,8 @@ packages: react: ^18.2.0 || ^19.0.0 wavesurfer.js: '>=7.7.14' - '@xstate/store@3.11.1': - resolution: {integrity: sha512-IneCkipaR1FCl6eW+mLeAtjZw99l/nnKQyF9u9Pmy/Jm/wo1gWrBQcZqkmZ+ea6iQ/+GFzsO3LVGYh16fBZKtA==} + '@xstate/store@3.11.2': + resolution: {integrity: sha512-AleJBq1k2UMiDEslIahAQgQKjLHWJERVKbVqw+ZBnyP3GsNuz05K4RugTHGkJBF5MpcB5xwlRRFcjABRoiF7mQ==} peerDependencies: react: ^18.2.0 || ^19.0.0 solid-js: ^1.7.6 @@ -4472,15 +4487,14 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ahooks@3.9.5: - resolution: {integrity: sha512-TrjXie49Q8HuHKTa84Fm9A+famMDAG1+7a9S9Gq6RQ0h90Jgqmiq3CkObuRjWT/C4d6nRZCw35Y2k2fmybb5eA==} - engines: {node: '>=18'} + ahooks@3.9.6: + resolution: {integrity: sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - ai@5.0.78: - resolution: {integrity: sha512-ec77fmQwJGLduswMrW4AAUGSOiu8dZaIwMmWHHGKsrMUFFS6ugfkTyx0srtuKYHNRRLRC2dT7cPirnUl98VnxA==} + ai@5.0.82: + resolution: {integrity: sha512-wmZZfsU40qB77umrcj3YzMSk6cUP5gxLXZDPfiSQLBLegTVXPUdSJC603tR7JB5JkhBDzN5VLaliuRKQGKpUXg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -4600,8 +4614,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - atomically@2.0.3: - resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + atomically@2.1.0: + resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} attr-accept@2.2.5: resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} @@ -4651,8 +4665,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.20: - resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} + baseline-browser-mapping@2.8.21: + resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} hasBin: true bidi-js@1.0.3: @@ -5192,8 +5206,8 @@ packages: resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} engines: {node: '>=12'} - dagre-d3-es@7.0.11: - resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + dagre-d3-es@7.0.13: + resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} data-urls@6.0.0: resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} @@ -5337,8 +5351,8 @@ packages: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} - drizzle-kit@0.31.5: - resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==} + drizzle-kit@0.31.6: + resolution: {integrity: sha512-/B4e/4pwnx25QwD5xXgdpo1S+077a2VZdosXbItE/oNmUgQwZydGDz9qJYmnQl/b+5IX0rLfwRhrPnroGtrg8Q==} hasBin: true drizzle-orm@0.44.7: @@ -5463,8 +5477,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.240: - resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==} + electron-to-chromium@1.5.243: + resolution: {integrity: sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -6010,8 +6024,8 @@ packages: peerDependencies: hono: ^4.1.1 - hono@4.10.2: - resolution: {integrity: sha512-p6fyzl+mQo6uhESLxbF5WlBOAJMDh36PljwlKtP5V1v09NxlqGru3ShK+4wKhSuhuYf8qxMmrivHOa/M7q0sMg==} + hono@4.10.4: + resolution: {integrity: sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg==} engines: {node: '>=16.9.0'} hookified@1.12.2: @@ -6046,8 +6060,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - iconify-icon@3.0.1: - resolution: {integrity: sha512-M3/kH3C+e/ufhmQuOSYSb1Ri1ImJ+ZEQYcVRMKnlSc8Nrdoy+iY9YvFnplX8t/3aCRuo5wN4RVPtCSHGnbt8dg==} + iconify-icon@3.0.2: + resolution: {integrity: sha512-DYPAumiUeUeT/GHT8x2wrAVKn1FqZJqFH0Y5pBefapWRreV1BBvqBVMb0020YQ2njmbR59r/IathL2d2OrDrxA==} iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -6057,8 +6071,8 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} - immer@10.1.3: - resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -6648,8 +6662,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.12.0: - resolution: {integrity: sha512-ZudVx73BwrMJfCFmSSJT84y6u5brEoV8DOItdHomNLz32uBjNrelm7mg95X7g+C6UoQH/W6mBLGDEDv73JdxBg==} + mermaid@11.12.1: + resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==} micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -6819,8 +6833,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -6955,8 +6969,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.26: - resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} noms@0.0.0: resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} @@ -7477,8 +7491,8 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' - rc-field-form@2.7.0: - resolution: {integrity: sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==} + rc-field-form@2.7.1: + resolution: {integrity: sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -7776,6 +7790,10 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -7982,8 +8000,8 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - rou3@0.7.8: - resolution: {integrity: sha512-21X/el5fdOaEsqwl3an/d9kpZ8hshVIyrwFCpsoleJ4ccAGRbN+PVoxyXzWXkHDxfMkVnLe4yzx+imz2qoem2Q==} + rou3@0.7.9: + resolution: {integrity: sha512-+JM7c8swGkoXkWRkIz7qpYN9Bls7Rj/vuSGaxtoKHIe8Ba1ci+mXnqzqtJFrXSbvEazNL9v83P2RiXae9NSbfQ==} roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} @@ -8105,8 +8123,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@3.13.0: - resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + shiki@3.14.0: + resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -8259,8 +8277,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - stripe@19.1.0: - resolution: {integrity: sha512-FjgIiE98dMMTNssfdjMvFdD4eZyEzdWAOwPYqzhPRNZeg9ggFWlPXmX1iJKD5pPIwZBaPlC3SayQQkwsPo6/YQ==} + stripe@19.2.0: + resolution: {integrity: sha512-strzN8luMGMC1LEleGKg7pJGXFx0kSS4y/uSjK8yPQV9SUBMtJVAp/v8XMQLRnMbXaSaWLrIaHcMlKcsizdRDQ==} engines: {node: '>=16'} peerDependencies: '@types/node': '>=16' @@ -8268,8 +8286,11 @@ packages: '@types/node': optional: true - stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.1: + resolution: {integrity: sha512-bwtct4FpoH1eYdSMFc84fxnYynWwsy2u0joj94K+6caiPnjZIpwTLHT2u7CFAS0GumaBZVB5Y2GkJ46mJS76qg==} style-to-js@1.1.18: resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} @@ -8357,17 +8378,17 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybase@6.7.1: - resolution: {integrity: sha512-Y6KzQX4j8PFisFc7gnrlB5A2ZJzEwjCW8Eq3QYAHQzZFM1TOj2zWjPrsl1W/s3c9JSjUsfD8tsKw6a91qn0IbA==} + tinybase@6.7.2: + resolution: {integrity: sha512-2ufO+vqyhGu93IkYZgtzr3S7O7/e2uEN2o+FpZ/j1h2ZS8VpKllbgxP2pcL/k/fK3kChdpu3nUvyHldcZH9epQ==} peerDependencies: '@automerge/automerge-repo': ^1.2.1 - '@cloudflare/workers-types': ^4.20251011.0 - '@electric-sql/pglite': ^0.3.10 + '@cloudflare/workers-types': ^4.20251014.0 + '@electric-sql/pglite': ^0.3.11 '@libsql/client': ^0.15.15 '@powersync/common': ^1.40.0 '@sqlite.org/sqlite-wasm': ^3.50.4-build1 '@vlcn.io/crsqlite-wasm': ^0.16.0 - bun: ^1.3.0 + bun: ^1.3.1 electric-sql: ^0.12.1 expo: ^54.0.10 expo-sqlite: ^16.0.8 @@ -8376,7 +8397,7 @@ packages: postgres: ^3.4.7 react: ^19.0.0 react-dom: ^19.0.0 - react-native-mmkv: 3.3.0 + react-native-mmkv: 4.0.0 react-native-sqlite-storage: ^6.0.1 sqlite3: ^5.1.7 ws: ^8.18.3 @@ -8609,8 +8630,8 @@ packages: resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} hasBin: true - turndown@7.2.1: - resolution: {integrity: sha512-7YiPJw6rLClQL3oUKN3KgMaXeJJ2lAyZItclgKDurqnH61so4k4IH/qwmMva0zpuJc/FhRExBBnk7EbeFANlgQ==} + turndown@7.2.2: + resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==} type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} @@ -8923,8 +8944,8 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wavesurfer.js@7.11.0: - resolution: {integrity: sha512-LOGdIBIKv/roYuQYClhoqhwbIdQL1GfobLnS2vx0heoLD9lu57OUHWE2DIsCNXBvCsmmbkUvJq9W8bPLPbikGw==} + wavesurfer.js@7.11.1: + resolution: {integrity: sha512-8Q+wwItpjJAlhQ7crQLtKwgfbqqczm5/wx+76K4PptP+MBAjB0OA78+A9OuLnULz/8GpAQ+fKM6s81DonEO0Sg==} wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -8966,8 +8987,8 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - when-exit@2.1.4: - resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -8987,8 +9008,8 @@ packages: engines: {node: '>=16'} hasBin: true - wrangler@4.45.0: - resolution: {integrity: sha512-2qM6bHw8l7r89Z9Y5A7Wn4L9U+dFoLjYgEUVpqy7CcmXpppL3QIYqU6rU5lre7/SRzBuPu/H93Vwfh538gZ3iw==} + wrangler@4.45.2: + resolution: {integrity: sha512-+G24gD+Rh7iBus5QiVBhNgSLzyAiyuZSm+3Ih5li8+PEA+gosAXfDSZlNZwsVmXd8VJTjq+BR4vhUiruQRWgTw==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: @@ -9144,67 +9165,67 @@ packages: snapshots: - '@ai-sdk/amazon-bedrock@3.0.47(zod@4.1.12)': + '@ai-sdk/amazon-bedrock@3.0.49(zod@4.1.12)': dependencies: - '@ai-sdk/anthropic': 2.0.37(zod@4.1.12) + '@ai-sdk/anthropic': 2.0.39(zod@4.1.12) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) '@smithy/eventstream-codec': 4.2.3 '@smithy/util-utf8': 4.2.0 aws4fetch: 1.0.20 zod: 4.1.12 - '@ai-sdk/anthropic@2.0.37(zod@4.1.12)': + '@ai-sdk/anthropic@2.0.39(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) zod: 4.1.12 - '@ai-sdk/azure@2.0.54(zod@4.1.12)': + '@ai-sdk/azure@2.0.59(zod@4.1.12)': dependencies: - '@ai-sdk/openai': 2.0.53(zod@4.1.12) + '@ai-sdk/openai': 2.0.58(zod@4.1.12) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) zod: 4.1.12 - '@ai-sdk/gateway@2.0.1(zod@4.1.12)': + '@ai-sdk/gateway@2.0.3(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) '@vercel/oidc': 3.0.3 zod: 4.1.12 - '@ai-sdk/google-vertex@3.0.53(zod@4.1.12)': + '@ai-sdk/google-vertex@3.0.55(zod@4.1.12)': dependencies: - '@ai-sdk/anthropic': 2.0.37(zod@4.1.12) - '@ai-sdk/google': 2.0.23(zod@4.1.12) + '@ai-sdk/anthropic': 2.0.39(zod@4.1.12) + '@ai-sdk/google': 2.0.25(zod@4.1.12) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) google-auth-library: 9.15.1 zod: 4.1.12 transitivePeerDependencies: - encoding - supports-color - '@ai-sdk/google@2.0.23(zod@4.1.12)': + '@ai-sdk/google@2.0.25(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) zod: 4.1.12 - '@ai-sdk/openai-compatible@1.0.22(zod@4.1.12)': + '@ai-sdk/openai-compatible@1.0.24(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) zod: 4.1.12 - '@ai-sdk/openai@2.0.53(zod@4.1.12)': + '@ai-sdk/openai@2.0.58(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) zod: 4.1.12 - '@ai-sdk/provider-utils@3.0.12(zod@4.1.12)': + '@ai-sdk/provider-utils@3.0.14(zod@4.1.12)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 @@ -9215,10 +9236,10 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@2.0.78(react@19.2.0)(zod@4.1.12)': + '@ai-sdk/react@2.0.82(react@19.2.0)(zod@4.1.12)': dependencies: - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) - ai: 5.0.78(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) + ai: 5.0.82(zod@4.1.12) react: 19.2.0 swr: 2.3.6(react@19.2.0) throttleit: 2.1.0 @@ -9306,7 +9327,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.2 - '@asamuzakjp/dom-selector@6.7.2': + '@asamuzakjp/dom-selector@6.7.3': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -9319,16 +9340,16 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.914.0 + '@aws-sdk/types': 3.920.0 tslib: 2.8.1 '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.914.0 + '@aws-sdk/types': 3.920.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/types@3.914.0': + '@aws-sdk/types@3.920.0': dependencies: '@smithy/types': 4.8.0 tslib: 2.8.1 @@ -9771,7 +9792,7 @@ snapshots: optionalDependencies: workerd: 1.20251011.0 - '@cloudflare/vite-plugin@1.13.15(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251011.0)(wrangler@4.45.0)': + '@cloudflare/vite-plugin@1.13.17(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251011.0)(wrangler@4.45.2)': dependencies: '@cloudflare/unenv-preset': 2.7.8(unenv@2.0.0-rc.21)(workerd@1.20251011.0) '@remix-run/node-fetch-server': 0.8.1 @@ -9780,8 +9801,8 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.15 unenv: 2.0.0-rc.21 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - wrangler: 4.45.0 + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + wrangler: 4.45.2 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -9838,11 +9859,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@content-collections/vite@0.2.7(@content-collections/core@0.11.1(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@content-collections/vite@0.2.7(@content-collections/core@0.11.1(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@content-collections/core': 0.11.1(typescript@5.9.3) '@content-collections/integrations': 0.3.0(@content-collections/core@0.11.1(typescript@5.9.3)) - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) '@cspotcode/source-map-support@0.8.1': dependencies: @@ -9908,7 +9929,7 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@electric-sql/client@1.0.14': + '@electric-sql/client@1.1.1': dependencies: '@microsoft/fetch-event-source': 2.0.1 optionalDependencies: @@ -10174,14 +10195,14 @@ snapshots: transitivePeerDependencies: - magicast - '@hono/mcp@0.1.4(@modelcontextprotocol/sdk@1.20.2)(hono@4.10.2)': + '@hono/mcp@0.1.4(@modelcontextprotocol/sdk@1.20.2)(hono@4.10.4)': dependencies: '@modelcontextprotocol/sdk': 1.20.2 - hono: 4.10.2 + hono: 4.10.4 - '@hono/node-server@1.19.5(hono@4.10.2)': + '@hono/node-server@1.19.5(hono@4.10.4)': dependencies: - hono: 4.10.2 + hono: 4.10.4 '@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0))': dependencies: @@ -10190,9 +10211,9 @@ snapshots: '@huggingface/languages@1.0.0': {} - '@iconify-icon/react@3.0.1(react@19.2.0)': + '@iconify-icon/react@3.0.2(react@19.2.0)': dependencies: - iconify-icon: 3.0.1 + iconify-icon: 3.0.2 react: 19.2.0 '@iconify/types@2.0.0': {} @@ -10398,9 +10419,9 @@ snapshots: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@shikijs/transformers': 3.13.0 + '@shikijs/transformers': 3.14.0 '@splinetool/runtime': 0.9.526 - ahooks: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + ahooks: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) antd: 5.27.5(date-fns@4.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) antd-style: 3.7.1(@types/react@19.2.2)(antd@5.27.5(date-fns@4.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) chroma-js: 3.1.2 @@ -10409,13 +10430,13 @@ snapshots: emoji-mart: 5.6.0 fast-deep-equal: 3.1.3 framer-motion: 12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - immer: 10.1.3 + immer: 10.2.0 katex: 0.16.25 leva: 0.10.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) lodash-es: 4.17.21 lucide-react: 0.543.0(react@19.2.0) marked: 16.4.1 - mermaid: 11.12.0 + mermaid: 11.12.1 numeral: 2.0.6 polished: 4.3.1 query-string: 9.3.1 @@ -10442,7 +10463,7 @@ snapshots: remark-gfm: 4.0.1 remark-github: 12.0.0 remark-math: 6.0.0 - shiki: 3.13.0 + shiki: 3.14.0 swr: 2.3.6(react@19.2.0) ts-md5: 2.0.1 unified: 11.0.5 @@ -10652,9 +10673,9 @@ snapshots: '@oozcitak/util@8.3.8': {} - '@openrouter/ai-sdk-provider@1.2.0(ai@5.0.78(zod@4.1.12))(zod@4.1.12)': + '@openrouter/ai-sdk-provider@1.2.0(ai@5.0.82(zod@4.1.12))(zod@4.1.12)': dependencies: - ai: 5.0.78(zod@4.1.12) + ai: 5.0.82(zod@4.1.12) zod: 4.1.12 '@opentelemetry/api-logs@0.204.0': @@ -11739,10 +11760,10 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rolldown/pluginutils@1.0.0-beta.38': {} - '@rolldown/pluginutils@1.0.0-beta.40': {} + '@rolldown/pluginutils@1.0.0-beta.43': {} + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true @@ -11956,38 +11977,38 @@ snapshots: - react - supports-color - '@shikijs/core@3.13.0': + '@shikijs/core@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.13.0': + '@shikijs/engine-javascript@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.13.0': + '@shikijs/engine-oniguruma@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.13.0': + '@shikijs/langs@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 - '@shikijs/themes@3.13.0': + '@shikijs/themes@3.14.0': dependencies: - '@shikijs/types': 3.13.0 + '@shikijs/types': 3.14.0 - '@shikijs/transformers@3.13.0': + '@shikijs/transformers@3.14.0': dependencies: - '@shikijs/core': 3.13.0 - '@shikijs/types': 3.13.0 + '@shikijs/core': 3.14.0 + '@shikijs/types': 3.14.0 - '@shikijs/types@3.13.0': + '@shikijs/types@3.14.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -12073,7 +12094,7 @@ snapshots: dependencies: solid-js: 1.9.9 - '@speed-highlight/core@1.2.7': {} + '@speed-highlight/core@1.2.8': {} '@splinetool/runtime@0.9.526': dependencies: @@ -12088,14 +12109,14 @@ snapshots: dependencies: react: 19.2.0 - '@stripe/stripe-js@8.1.0': {} + '@stripe/stripe-js@8.2.0': {} - '@supabase/auth-js@2.76.1': + '@supabase/auth-js@2.77.0': dependencies: '@supabase/node-fetch': 2.6.15 tslib: 2.8.1 - '@supabase/functions-js@2.76.1': + '@supabase/functions-js@2.77.0': dependencies: '@supabase/node-fetch': 2.6.15 tslib: 2.8.1 @@ -12104,12 +12125,12 @@ snapshots: dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@2.76.1': + '@supabase/postgrest-js@2.77.0': dependencies: '@supabase/node-fetch': 2.6.15 tslib: 2.8.1 - '@supabase/realtime-js@2.76.1': + '@supabase/realtime-js@2.77.0': dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 @@ -12120,24 +12141,24 @@ snapshots: - bufferutil - utf-8-validate - '@supabase/ssr@0.7.0(@supabase/supabase-js@2.76.1)': + '@supabase/ssr@0.7.0(@supabase/supabase-js@2.77.0)': dependencies: - '@supabase/supabase-js': 2.76.1 + '@supabase/supabase-js': 2.77.0 cookie: 1.0.2 - '@supabase/storage-js@2.76.1': + '@supabase/storage-js@2.77.0': dependencies: '@supabase/node-fetch': 2.6.15 tslib: 2.8.1 - '@supabase/supabase-js@2.76.1': + '@supabase/supabase-js@2.77.0': dependencies: - '@supabase/auth-js': 2.76.1 - '@supabase/functions-js': 2.76.1 + '@supabase/auth-js': 2.77.0 + '@supabase/functions-js': 2.77.0 '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 2.76.1 - '@supabase/realtime-js': 2.76.1 - '@supabase/storage-js': 2.76.1 + '@supabase/postgrest-js': 2.77.0 + '@supabase/realtime-js': 2.77.0 + '@supabase/storage-js': 2.77.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -12270,27 +12291,27 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16 '@tailwindcss/oxide-win32-x64-msvc': 4.1.16 - '@tailwindcss/vite@4.1.16(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.16(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@tailwindcss/node': 4.1.16 '@tailwindcss/oxide': 4.1.16 tailwindcss: 4.1.16 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/devtools-client@0.0.3': dependencies: - '@tanstack/devtools-event-client': 0.3.3 + '@tanstack/devtools-event-client': 0.3.4 - '@tanstack/devtools-event-bus@0.3.2': + '@tanstack/devtools-event-bus@0.3.3': dependencies: ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@tanstack/devtools-event-client@0.3.3': {} + '@tanstack/devtools-event-client@0.3.4': {} - '@tanstack/devtools-ui@0.4.3(csstype@3.1.3)(solid-js@1.9.9)': + '@tanstack/devtools-ui@0.4.4(csstype@3.1.3)(solid-js@1.9.9)': dependencies: clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) @@ -12298,14 +12319,14 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools@0.6.21(csstype@3.1.3)(solid-js@1.9.9)': + '@tanstack/devtools@0.7.0(csstype@3.1.3)(solid-js@1.9.9)': dependencies: '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.9) '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.9) '@tanstack/devtools-client': 0.0.3 - '@tanstack/devtools-event-bus': 0.3.2 - '@tanstack/devtools-ui': 0.4.3(csstype@3.1.3)(solid-js@1.9.9) + '@tanstack/devtools-event-bus': 0.3.3 + '@tanstack/devtools-ui': 0.4.4(csstype@3.1.3)(solid-js@1.9.9) clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 @@ -12314,7 +12335,7 @@ snapshots: - csstype - utf-8-validate - '@tanstack/directive-functions-plugin@1.133.19(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.133.19(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -12324,11 +12345,11 @@ snapshots: babel-dead-code-elimination: 1.0.10 pathe: 2.0.3 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/directive-functions-plugin@1.133.19(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.133.19(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -12338,31 +12359,31 @@ snapshots: babel-dead-code-elimination: 1.0.10 pathe: 2.0.3 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color optional: true '@tanstack/form-core@1.24.4': dependencies: - '@tanstack/devtools-event-client': 0.3.3 + '@tanstack/devtools-event-client': 0.3.4 '@tanstack/pacer': 0.15.4 '@tanstack/store': 0.7.7 - '@tanstack/history@1.133.19': {} + '@tanstack/history@1.133.28': {} '@tanstack/pacer@0.15.4': dependencies: - '@tanstack/devtools-event-client': 0.3.3 + '@tanstack/devtools-event-client': 0.3.4 '@tanstack/store': 0.7.7 '@tanstack/query-core@5.90.5': {} '@tanstack/query-devtools@5.90.1': {} - '@tanstack/react-devtools@0.7.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)': + '@tanstack/react-devtools@0.7.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(csstype@3.1.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)': dependencies: - '@tanstack/devtools': 0.6.21(csstype@3.1.3)(solid-js@1.9.9) + '@tanstack/devtools': 0.7.0(csstype@3.1.3)(solid-js@1.9.9) '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) react: 19.2.0 @@ -12373,7 +12394,7 @@ snapshots: - solid-js - utf-8-validate - '@tanstack/react-form@1.23.8(@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-form@1.23.8(@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/form-core': 1.24.4 '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -12381,11 +12402,11 @@ snapshots: devalue: 5.4.2 react: 19.2.0 optionalDependencies: - '@tanstack/react-start': 1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - react-dom - '@tanstack/react-form@1.23.8(@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-form@1.23.8(@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/form-core': 1.24.4 '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -12393,7 +12414,7 @@ snapshots: devalue: 5.4.2 react: 19.2.0 optionalDependencies: - '@tanstack/react-start': 1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - react-dom @@ -12408,13 +12429,13 @@ snapshots: '@tanstack/query-core': 5.90.5 react: 19.2.0 - '@tanstack/react-router-devtools@1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(@types/node@22.18.12)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@22.18.13)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.25(@tanstack/router-core@1.133.25)(@types/node@22.18.12)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@22.18.13)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -12432,13 +12453,13 @@ snapshots: - tsx - yaml - '@tanstack/react-router-devtools@1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(@types/node@24.9.1)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.25(@tanstack/router-core@1.133.25)(@types/node@24.9.1)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -12456,63 +12477,63 @@ snapshots: - tsx - yaml - '@tanstack/react-router-ssr-query@1.133.25(@tanstack/query-core@5.90.5)(@tanstack/react-query@5.90.5(react@19.2.0))(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.25)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router-ssr-query@1.133.36(@tanstack/query-core@5.90.5)(@tanstack/react-query@5.90.5(react@19.2.0))(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/query-core': 5.90.5 '@tanstack/react-query': 5.90.5(react@19.2.0) - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-ssr-query-core': 1.133.25(@tanstack/query-core@5.90.5)(@tanstack/router-core@1.133.25) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-ssr-query-core': 1.133.36(@tanstack/query-core@5.90.5)(@tanstack/router-core@1.133.36) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - '@tanstack/router-core' - '@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/history': 1.133.19 - '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.25 + '@tanstack/history': 1.133.28 + '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-core': 1.133.36 isbot: 5.1.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-client@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-start-client@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.25 - '@tanstack/start-client-core': 1.133.25 + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-core': 1.133.36 + '@tanstack/start-client-core': 1.133.36 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-server@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-start-server@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/history': 1.133.19 - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.25 - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-server-core': 1.133.26 + '@tanstack/history': 1.133.28 + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-core': 1.133.36 + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-server-core': 1.133.36 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-client': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-server': 1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-start-client': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-start-server': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/router-utils': 1.133.19 - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-plugin-core': 1.133.26(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-server-core': 1.133.26 + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-plugin-core': 1.133.37(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/start-server-core': 1.133.36 pathe: 2.0.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -12520,19 +12541,19 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/react-start@1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/react-start@1.134.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-client': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-server': 1.133.26(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-start-client': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-start-server': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/router-utils': 1.133.19 - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-plugin-core': 1.133.26(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-server-core': 1.133.26 + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-plugin-core': 1.133.37(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/start-server-core': 1.133.36 pathe: 2.0.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -12548,30 +12569,37 @@ snapshots: react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) + '@tanstack/react-store@0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@tanstack/store': 0.8.0 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) + '@tanstack/react-virtual@3.13.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/virtual-core': 3.13.12 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@tanstack/router-core@1.133.25': + '@tanstack/router-core@1.133.36': dependencies: - '@tanstack/history': 1.133.19 - '@tanstack/store': 0.7.7 + '@tanstack/history': 1.133.28 + '@tanstack/store': 0.8.0 cookie-es: 2.0.0 seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.133.25(@tanstack/router-core@1.133.25)(@types/node@22.18.12)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@22.18.13)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/router-core': 1.133.25 + '@tanstack/router-core': 1.133.36 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -12587,14 +12615,14 @@ snapshots: - tsx - yaml - '@tanstack/router-devtools-core@1.133.25(@tanstack/router-core@1.133.25)(@types/node@24.9.1)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@1.21.7)(lightningcss@1.30.2)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/router-core': 1.133.25 + '@tanstack/router-core': 1.133.36 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -12610,9 +12638,9 @@ snapshots: - tsx - yaml - '@tanstack/router-generator@1.133.25': + '@tanstack/router-generator@1.133.36': dependencies: - '@tanstack/router-core': 1.133.25 + '@tanstack/router-core': 1.133.36 '@tanstack/router-utils': 1.133.19 '@tanstack/virtual-file-routes': 1.133.19 prettier: 3.6.2 @@ -12623,7 +12651,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -12631,8 +12659,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/router-core': 1.133.25 - '@tanstack/router-generator': 1.133.25 + '@tanstack/router-core': 1.133.36 + '@tanstack/router-generator': 1.133.36 '@tanstack/router-utils': 1.133.19 '@tanstack/virtual-file-routes': 1.133.19 babel-dead-code-elimination: 1.0.10 @@ -12640,12 +12668,12 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -12653,8 +12681,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/router-core': 1.133.25 - '@tanstack/router-generator': 1.133.25 + '@tanstack/router-core': 1.133.36 + '@tanstack/router-generator': 1.133.36 '@tanstack/router-utils': 1.133.19 '@tanstack/virtual-file-routes': 1.133.19 babel-dead-code-elimination: 1.0.10 @@ -12662,15 +12690,15 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/router-ssr-query-core@1.133.25(@tanstack/query-core@5.90.5)(@tanstack/router-core@1.133.25)': + '@tanstack/router-ssr-query-core@1.133.36(@tanstack/query-core@5.90.5)(@tanstack/router-core@1.133.36)': dependencies: '@tanstack/query-core': 5.90.5 - '@tanstack/router-core': 1.133.25 + '@tanstack/router-core': 1.133.36 '@tanstack/router-utils@1.133.19': dependencies: @@ -12685,7 +12713,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.133.25(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.133.25(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -12694,14 +12722,14 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.133.19(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.133.19(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/server-functions-plugin@1.133.25(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.133.25(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -12710,7 +12738,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.133.19(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.133.19(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -12718,27 +12746,27 @@ snapshots: - vite optional: true - '@tanstack/start-client-core@1.133.25': + '@tanstack/start-client-core@1.133.36': dependencies: - '@tanstack/router-core': 1.133.25 - '@tanstack/start-storage-context': 1.133.25 + '@tanstack/router-core': 1.133.36 + '@tanstack/start-storage-context': 1.133.36 seroval: 1.3.2 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.133.26(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/start-plugin-core@1.133.37(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 '@babel/types': 7.28.5 '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.133.25 - '@tanstack/router-generator': 1.133.25 - '@tanstack/router-plugin': 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/router-core': 1.133.36 + '@tanstack/router-generator': 1.133.36 + '@tanstack/router-plugin': 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-utils': 1.133.19 - '@tanstack/server-functions-plugin': 1.133.25(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-server-core': 1.133.26 + '@tanstack/server-functions-plugin': 1.133.25(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-server-core': 1.133.36 babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 exsolve: 1.0.7 @@ -12746,8 +12774,8 @@ snapshots: srvx: 0.8.16 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -12758,19 +12786,19 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-plugin-core@1.133.26(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/start-plugin-core@1.133.37(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 '@babel/types': 7.28.5 '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.133.25 - '@tanstack/router-generator': 1.133.25 - '@tanstack/router-plugin': 1.133.25(@tanstack/react-router@1.133.25(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/router-core': 1.133.36 + '@tanstack/router-generator': 1.133.36 + '@tanstack/router-plugin': 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-utils': 1.133.19 - '@tanstack/server-functions-plugin': 1.133.25(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-server-core': 1.133.26 + '@tanstack/server-functions-plugin': 1.133.25(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-server-core': 1.133.36 babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 exsolve: 1.0.7 @@ -12778,8 +12806,8 @@ snapshots: srvx: 0.8.16 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -12791,24 +12819,26 @@ snapshots: - webpack optional: true - '@tanstack/start-server-core@1.133.26': + '@tanstack/start-server-core@1.133.36': dependencies: - '@tanstack/history': 1.133.19 - '@tanstack/router-core': 1.133.25 - '@tanstack/start-client-core': 1.133.25 - '@tanstack/start-storage-context': 1.133.25 + '@tanstack/history': 1.133.28 + '@tanstack/router-core': 1.133.36 + '@tanstack/start-client-core': 1.133.36 + '@tanstack/start-storage-context': 1.133.36 h3-v2: h3@2.0.0-beta.4 seroval: 1.3.2 tiny-invariant: 1.3.3 transitivePeerDependencies: - crossws - '@tanstack/start-storage-context@1.133.25': + '@tanstack/start-storage-context@1.133.36': dependencies: - '@tanstack/router-core': 1.133.25 + '@tanstack/router-core': 1.133.36 '@tanstack/store@0.7.7': {} + '@tanstack/store@0.8.0': {} + '@tanstack/virtual-core@3.13.12': {} '@tanstack/virtual-file-routes@1.133.19': {} @@ -12817,74 +12847,74 @@ snapshots: '@tauri-apps/api@2.9.0': {} - '@tauri-apps/cli-darwin-arm64@2.9.1': + '@tauri-apps/cli-darwin-arm64@2.9.2': optional: true - '@tauri-apps/cli-darwin-x64@2.9.1': + '@tauri-apps/cli-darwin-x64@2.9.2': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.9.1': + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.2': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.9.1': + '@tauri-apps/cli-linux-arm64-gnu@2.9.2': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.9.1': + '@tauri-apps/cli-linux-arm64-musl@2.9.2': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.9.1': + '@tauri-apps/cli-linux-riscv64-gnu@2.9.2': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.9.1': + '@tauri-apps/cli-linux-x64-gnu@2.9.2': optional: true - '@tauri-apps/cli-linux-x64-musl@2.9.1': + '@tauri-apps/cli-linux-x64-musl@2.9.2': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.9.1': + '@tauri-apps/cli-win32-arm64-msvc@2.9.2': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.9.1': + '@tauri-apps/cli-win32-ia32-msvc@2.9.2': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.9.1': + '@tauri-apps/cli-win32-x64-msvc@2.9.2': optional: true - '@tauri-apps/cli@2.9.1': + '@tauri-apps/cli@2.9.2': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.9.1 - '@tauri-apps/cli-darwin-x64': 2.9.1 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.9.1 - '@tauri-apps/cli-linux-arm64-gnu': 2.9.1 - '@tauri-apps/cli-linux-arm64-musl': 2.9.1 - '@tauri-apps/cli-linux-riscv64-gnu': 2.9.1 - '@tauri-apps/cli-linux-x64-gnu': 2.9.1 - '@tauri-apps/cli-linux-x64-musl': 2.9.1 - '@tauri-apps/cli-win32-arm64-msvc': 2.9.1 - '@tauri-apps/cli-win32-ia32-msvc': 2.9.1 - '@tauri-apps/cli-win32-x64-msvc': 2.9.1 - - '@tauri-apps/plugin-deep-link@2.4.3': + '@tauri-apps/cli-darwin-arm64': 2.9.2 + '@tauri-apps/cli-darwin-x64': 2.9.2 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.9.2 + '@tauri-apps/cli-linux-arm64-gnu': 2.9.2 + '@tauri-apps/cli-linux-arm64-musl': 2.9.2 + '@tauri-apps/cli-linux-riscv64-gnu': 2.9.2 + '@tauri-apps/cli-linux-x64-gnu': 2.9.2 + '@tauri-apps/cli-linux-x64-musl': 2.9.2 + '@tauri-apps/cli-win32-arm64-msvc': 2.9.2 + '@tauri-apps/cli-win32-ia32-msvc': 2.9.2 + '@tauri-apps/cli-win32-x64-msvc': 2.9.2 + + '@tauri-apps/plugin-deep-link@2.4.5': dependencies: '@tauri-apps/api': 2.9.0 - '@tauri-apps/plugin-dialog@2.4.0': + '@tauri-apps/plugin-dialog@2.4.2': dependencies: '@tauri-apps/api': 2.9.0 - '@tauri-apps/plugin-http@2.5.2': + '@tauri-apps/plugin-http@2.5.4': dependencies: '@tauri-apps/api': 2.9.0 - '@tauri-apps/plugin-opener@2.5.0': + '@tauri-apps/plugin-opener@2.5.2': dependencies: '@tauri-apps/api': 2.9.0 - '@tauri-apps/plugin-process@2.3.0': + '@tauri-apps/plugin-process@2.3.1': dependencies: '@tauri-apps/api': 2.9.0 - '@tauri-apps/plugin-store@2.4.0': + '@tauri-apps/plugin-store@2.4.1': dependencies: '@tauri-apps/api': 2.9.0 @@ -12913,158 +12943,158 @@ snapshots: '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@tiptap/core@3.7.2(@tiptap/pm@3.7.2)': + '@tiptap/core@3.9.1(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/pm': 3.7.2 + '@tiptap/pm': 3.9.1 - '@tiptap/extension-blockquote@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-blockquote@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-bold@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-bold@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-bubble-menu@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-bubble-menu@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/extension-bullet-list@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-bullet-list@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-code-block@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-code-block@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/extension-code@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-code@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-document@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-document@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-dropcursor@3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-dropcursor@3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extensions': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-floating-menu@3.7.2(@floating-ui/dom@1.7.4)(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-floating-menu@3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 optional: true - '@tiptap/extension-gapcursor@3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-gapcursor@3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extensions': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-hard-break@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-hard-break@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-heading@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-heading@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-highlight@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-highlight@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-history@3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-history@3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extensions': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-horizontal-rule@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-horizontal-rule@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/extension-image@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-image@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-italic@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-italic@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-link@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-link@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 linkifyjs: 4.3.2 - '@tiptap/extension-list-item@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-list-item@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-list-keymap@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-list-keymap@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/extension-mention@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)(@tiptap/suggestion@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-mention@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@tiptap/suggestion@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 - '@tiptap/suggestion': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 + '@tiptap/suggestion': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-ordered-list@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-ordered-list@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-paragraph@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-paragraph@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-placeholder@3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-placeholder@3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extensions': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extensions': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-strike@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-strike@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-task-item@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-task-item@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-task-list@3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2))': + '@tiptap/extension-task-list@3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) - '@tiptap/extension-text@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-text@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-typography@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-typography@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extension-underline@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))': + '@tiptap/extension-underline@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) - '@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 - '@tiptap/markdown@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': + '@tiptap/markdown@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 marked: 16.4.1 - '@tiptap/pm@3.7.2': + '@tiptap/pm@3.9.1': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 @@ -13085,10 +13115,10 @@ snapshots: prosemirror-transform: 1.10.4 prosemirror-view: 1.41.3 - '@tiptap/react@3.7.2(@floating-ui/dom@1.7.4)(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tiptap/react@3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) '@types/use-sync-external-store': 0.0.6 @@ -13097,42 +13127,42 @@ snapshots: react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: - '@tiptap/extension-bubble-menu': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/extension-floating-menu': 3.7.2(@floating-ui/dom@1.7.4)(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) + '@tiptap/extension-bubble-menu': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-floating-menu': 3.9.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) transitivePeerDependencies: - '@floating-ui/dom' - '@tiptap/starter-kit@3.7.2': - dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/extension-blockquote': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-bold': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-bullet-list': 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-code': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-code-block': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/extension-document': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-dropcursor': 3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-gapcursor': 3.7.2(@tiptap/extensions@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-hard-break': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-heading': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-horizontal-rule': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/extension-italic': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-link': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/extension-list': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/extension-list-item': 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-list-keymap': 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-ordered-list': 3.7.2(@tiptap/extension-list@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)) - '@tiptap/extension-paragraph': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-strike': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-text': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extension-underline': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2)) - '@tiptap/extensions': 3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 - - '@tiptap/suggestion@3.7.2(@tiptap/core@3.7.2(@tiptap/pm@3.7.2))(@tiptap/pm@3.7.2)': - dependencies: - '@tiptap/core': 3.7.2(@tiptap/pm@3.7.2) - '@tiptap/pm': 3.7.2 + '@tiptap/starter-kit@3.9.1': + dependencies: + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/extension-blockquote': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-bold': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-bullet-list': 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-code': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-code-block': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-document': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-dropcursor': 3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-gapcursor': 3.9.1(@tiptap/extensions@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-hard-break': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-heading': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-horizontal-rule': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-italic': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-link': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-list': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/extension-list-item': 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-list-keymap': 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-ordered-list': 3.9.1(@tiptap/extension-list@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)) + '@tiptap/extension-paragraph': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-strike': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-text': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extension-underline': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1)) + '@tiptap/extensions': 3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 + + '@tiptap/suggestion@3.9.1(@tiptap/core@3.9.1(@tiptap/pm@3.9.1))(@tiptap/pm@3.9.1)': + dependencies: + '@tiptap/core': 3.9.1(@tiptap/pm@3.9.1) + '@tiptap/pm': 3.9.1 '@tsconfig/node10@1.0.11': {} @@ -13172,7 +13202,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 '@types/d3-array@3.2.2': {} @@ -13338,17 +13368,17 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 - '@types/node@20.19.23': + '@types/node@20.19.24': dependencies: undici-types: 6.21.0 - '@types/node@22.18.12': + '@types/node@22.18.13': dependencies: undici-types: 6.21.0 - '@types/node@24.9.1': + '@types/node@24.9.2': dependencies: undici-types: 7.16.0 @@ -13360,7 +13390,7 @@ snapshots: '@types/pg@8.15.5': dependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -13380,11 +13410,11 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 '@types/trusted-types@2.0.7': {} - '@types/turndown@5.0.5': {} + '@types/turndown@5.0.6': {} '@types/unist@2.0.11': {} @@ -13392,13 +13422,13 @@ snapshots: '@types/unzipper@0.10.11': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 '@types/use-sync-external-store@0.0.6': {} '@types/ws@8.18.1': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 '@uidotdev/usehooks@2.4.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: @@ -13416,7 +13446,7 @@ snapshots: '@vercel/oidc@3.0.3': {} - '@vitejs/plugin-react@4.7.0(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -13424,19 +13454,19 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.0.4(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.38 + '@rolldown/pluginutils': 1.0.0-beta.43 '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + react-refresh: 0.18.0 + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -13448,29 +13478,29 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -13498,12 +13528,12 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@wavesurfer/react@1.0.11(react@19.2.0)(wavesurfer.js@7.11.0)': + '@wavesurfer/react@1.0.11(react@19.2.0)(wavesurfer.js@7.11.1)': dependencies: react: 19.2.0 - wavesurfer.js: 7.11.0 + wavesurfer.js: 7.11.1 - '@xstate/store@3.11.1(react@19.2.0)(solid-js@1.9.9)': + '@xstate/store@3.11.2(react@19.2.0)(solid-js@1.9.9)': optionalDependencies: react: 19.2.0 solid-js: 1.9.9 @@ -13533,7 +13563,7 @@ snapshots: agent-base@7.1.4: {} - ahooks@3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + ahooks@3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@babel/runtime': 7.28.4 '@types/js-cookie': 3.0.6 @@ -13548,11 +13578,11 @@ snapshots: screenfull: 5.2.0 tslib: 2.8.1 - ai@5.0.78(zod@4.1.12): + ai@5.0.82(zod@4.1.12): dependencies: - '@ai-sdk/gateway': 2.0.1(zod@4.1.12) + '@ai-sdk/gateway': 2.0.3(zod@4.1.12) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12) + '@ai-sdk/provider-utils': 3.0.14(zod@4.1.12) '@opentelemetry/api': 1.9.0 zod: 4.1.12 @@ -13638,7 +13668,7 @@ snapshots: rc-dialog: 9.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rc-drawer: 7.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rc-dropdown: 4.2.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - rc-field-form: 2.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + rc-field-form: 2.7.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rc-image: 7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rc-input: 1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rc-input-number: 9.5.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -13712,10 +13742,10 @@ snapshots: asynckit@0.4.0: {} - atomically@2.0.3: + atomically@2.1.0: dependencies: - stubborn-fs: 1.2.5 - when-exit: 2.1.4 + stubborn-fs: 2.0.0 + when-exit: 2.1.5 attr-accept@2.2.5: {} @@ -13784,7 +13814,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.20: {} + baseline-browser-mapping@2.8.21: {} bidi-js@1.0.3: dependencies: @@ -13829,10 +13859,10 @@ snapshots: browserslist@4.27.0: dependencies: - baseline-browser-mapping: 2.8.20 + baseline-browser-mapping: 2.8.21 caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.240 - node-releases: 2.0.26 + electron-to-chromium: 1.5.243 + node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.27.0) buffer-equal-constant-time@1.0.1: {} @@ -14087,7 +14117,7 @@ snapshots: dependencies: ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) - atomically: 2.0.3 + atomically: 2.1.0 debounce-fn: 5.1.2 dot-prop: 8.0.2 env-paths: 3.0.0 @@ -14384,7 +14414,7 @@ snapshots: d3-transition: 3.0.1(d3-selection@3.0.0) d3-zoom: 3.0.0 - dagre-d3-es@7.0.11: + dagre-d3-es@7.0.13: dependencies: d3: 7.9.0 lodash-es: 4.17.21 @@ -14499,7 +14529,7 @@ snapshots: dotenv@17.2.3: {} - drizzle-kit@0.31.5: + drizzle-kit@0.31.6: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 @@ -14547,7 +14577,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.240: {} + electron-to-chromium@1.5.243: {} embla-carousel-react@8.6.0(react@19.2.0): dependencies: @@ -15025,7 +15055,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 @@ -15084,7 +15114,7 @@ snapshots: dependencies: cookie-es: 2.0.0 fetchdts: 0.1.7 - rou3: 0.7.8 + rou3: 0.7.9 srvx: 0.8.16 hachure-fill@0.5.2: {} @@ -15255,11 +15285,11 @@ snapshots: dependencies: react-is: 16.13.1 - hono-rate-limiter@0.4.2(hono@4.10.2): + hono-rate-limiter@0.4.2(hono@4.10.4): dependencies: - hono: 4.10.2 + hono: 4.10.4 - hono@4.10.2: {} + hono@4.10.4: {} hookified@1.12.2: {} @@ -15304,7 +15334,7 @@ snapshots: transitivePeerDependencies: - supports-color - iconify-icon@3.0.1: + iconify-icon@3.0.2: dependencies: '@iconify/types': 2.0.0 @@ -15316,7 +15346,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - immer@10.1.3: {} + immer@10.2.0: {} import-fresh@3.3.1: dependencies: @@ -15496,7 +15526,7 @@ snapshots: jsdom@27.0.1(postcss@8.5.6): dependencies: - '@asamuzakjp/dom-selector': 6.7.2 + '@asamuzakjp/dom-selector': 6.7.3 cssstyle: 5.3.1(postcss@8.5.6) data-urls: 6.0.0 decimal.js: 10.6.0 @@ -16013,7 +16043,7 @@ snapshots: merge2@1.4.1: {} - mermaid@11.12.0: + mermaid@11.12.1: dependencies: '@braintree/sanitize-url': 7.1.1 '@iconify/utils': 3.0.2 @@ -16024,7 +16054,7 @@ snapshots: cytoscape-fcose: 2.2.0(cytoscape@3.33.1) d3: 7.9.0 d3-sankey: 0.12.3 - dagre-d3-es: 7.0.11 + dagre-d3-es: 7.0.13 dayjs: 1.11.18 dompurify: 3.3.0 katex: 0.16.25 @@ -16379,7 +16409,7 @@ snapshots: - bufferutil - utf-8-validate - minimatch@10.0.3: + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -16464,7 +16494,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nango@0.69.2(@types/node@24.9.1)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1): + nango@0.69.2(@types/node@24.9.2)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@babel/core': 7.28.0 '@babel/parser': 7.28.0 @@ -16500,7 +16530,7 @@ snapshots: semver: 7.5.4 serialize-error: 11.0.3 ts-json-schema-generator: 2.4.0 - ts-node: 10.9.2(@swc/core@1.13.2)(@types/node@24.9.1)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.13.2)(@types/node@24.9.2)(typescript@5.8.3) tsup: 8.5.0(@swc/core@1.13.2)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.8.3)(yaml@2.8.1) typescript: 5.8.3 unzipper: 0.12.3 @@ -16537,7 +16567,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.26: {} + node-releases@2.0.27: {} noms@0.0.0: dependencies: @@ -17104,7 +17134,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - rc-field-form@2.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + rc-field-form@2.7.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@babel/runtime': 7.28.4 '@rc-component/async-validator': 5.0.4 @@ -17487,6 +17517,8 @@ snapshots: react-refresh@0.17.0: {} + react-refresh@0.18.0: {} + react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): dependencies: react: 19.2.0 @@ -17803,7 +17835,7 @@ snapshots: rope-sequence@1.3.4: {} - rou3@0.7.8: {} + rou3@0.7.9: {} roughjs@4.6.6: dependencies: @@ -17953,14 +17985,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@3.13.0: + shiki@3.14.0: dependencies: - '@shikijs/core': 3.13.0 - '@shikijs/engine-javascript': 3.13.0 - '@shikijs/engine-oniguruma': 3.13.0 - '@shikijs/langs': 3.13.0 - '@shikijs/themes': 3.13.0 - '@shikijs/types': 3.13.0 + '@shikijs/core': 3.14.0 + '@shikijs/engine-javascript': 3.14.0 + '@shikijs/engine-oniguruma': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -18062,7 +18094,7 @@ snapshots: katex: 0.16.25 lucide-react: 0.542.0(react@19.2.0) marked: 16.4.1 - mermaid: 11.12.0 + mermaid: 11.12.1 react: 19.2.0 react-markdown: 10.1.0(@types/react@19.2.2)(react@19.2.0) rehype-harden: 1.1.5 @@ -18070,7 +18102,7 @@ snapshots: rehype-raw: 7.0.0 remark-gfm: 4.0.1 remark-math: 6.0.0 - shiki: 3.13.0 + shiki: 3.14.0 tailwind-merge: 3.3.1 transitivePeerDependencies: - '@types/react' @@ -18121,13 +18153,17 @@ snapshots: dependencies: js-tokens: 9.0.1 - stripe@19.1.0(@types/node@22.18.12): + stripe@19.2.0(@types/node@22.18.13): dependencies: qs: 6.14.0 optionalDependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 + + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.1 - stubborn-fs@1.2.5: {} + stubborn-utils@1.0.1: {} style-to-js@1.1.18: dependencies: @@ -18236,7 +18272,7 @@ snapshots: tiny-warning@1.0.3: {} - tinybase@6.7.1(postgres@3.4.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(ws@8.18.3): + tinybase@6.7.2(postgres@3.4.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(ws@8.18.3): optionalDependencies: postgres: 3.4.7 react: 19.2.0 @@ -18321,14 +18357,14 @@ snapshots: ts-md5@2.0.1: {} - ts-node@10.9.2(@swc/core@1.13.2)(@types/node@24.9.1)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.13.2)(@types/node@24.9.2)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.9.1 + '@types/node': 24.9.2 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -18412,7 +18448,7 @@ snapshots: turbo-windows-64: 2.5.8 turbo-windows-arm64: 2.5.8 - turndown@7.2.1: + turndown@7.2.2: dependencies: '@mixmark-io/domino': 2.2.0 @@ -18597,13 +18633,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -18618,13 +18654,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -18639,13 +18675,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -18660,18 +18696,18 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -18680,14 +18716,14 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.13 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 tsx: 4.20.6 yaml: 2.8.1 - vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -18696,14 +18732,14 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 fsevents: 2.3.3 jiti: 1.21.7 lightningcss: 1.30.2 tsx: 4.20.6 yaml: 2.8.1 - vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -18712,27 +18748,27 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 tsx: 4.20.6 yaml: 2.8.1 - vitefu@1.1.1(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vitefu@1.1.1(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) optional: true - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -18750,12 +18786,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.13)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.18.12 + '@types/node': 22.18.13 jsdom: 27.0.1(postcss@8.5.6) transitivePeerDependencies: - jiti @@ -18771,11 +18807,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@1.21.7)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(jiti@1.21.7)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -18793,12 +18829,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.12(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.9.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.9.2)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.9.1 + '@types/node': 24.9.2 jsdom: 27.0.1(postcss@8.5.6) transitivePeerDependencies: - jiti @@ -18814,11 +18850,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -18836,12 +18872,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.9.1 + '@types/node': 24.9.2 jsdom: 27.0.1(postcss@8.5.6) transitivePeerDependencies: - jiti @@ -18880,7 +18916,7 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wavesurfer.js@7.11.0: {} + wavesurfer.js@7.11.1: {} wcwidth@1.0.1: dependencies: @@ -18920,7 +18956,7 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 - when-exit@2.1.4: {} + when-exit@2.1.5: {} which@2.0.2: dependencies: @@ -18941,7 +18977,7 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20251011.0 '@cloudflare/workerd-windows-64': 1.20251011.0 - wrangler@4.45.0: + wrangler@4.45.2: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@cloudflare/unenv-preset': 2.7.8(unenv@2.0.0-rc.21)(workerd@1.20251011.0) @@ -19030,7 +19066,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.5 '@poppinss/dumper': 0.6.4 - '@speed-highlight/core': 1.2.7 + '@speed-highlight/core': 1.2.8 cookie: 1.0.2 youch-core: 0.3.3 @@ -19050,10 +19086,10 @@ snapshots: optionalDependencies: react: 19.2.0 - zustand@5.0.8(@types/react@19.2.2)(immer@10.1.3)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): + zustand@5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): optionalDependencies: '@types/react': 19.2.2 - immer: 10.1.3 + immer: 10.2.0 react: 19.2.0 use-sync-external-store: 1.6.0(react@19.2.0) From 859bd8ef1a27185cc0746af5c6c2c134e5c4473f Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 12:55:51 +0900 Subject: [PATCH 03/10] detect plugin init --- Cargo.lock | 6 + Cargo.toml | 1 + apps/desktop/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/default.json | 1 + apps/desktop/src-tauri/src/lib.rs | 1 + plugins/detect/.gitignore | 17 + plugins/detect/Cargo.toml | 29 ++ plugins/detect/build.rs | 5 + plugins/detect/js/bindings.gen.ts | 104 +++++ plugins/detect/js/index.ts | 1 + plugins/detect/package.json | 11 + .../commands/start_detection.toml | 13 + .../commands/stop_detection.toml | 13 + .../permissions/autogenerated/reference.md | 231 ++++++++++ plugins/detect/permissions/default.toml | 11 + .../detect/permissions/schemas/schema.json | 402 ++++++++++++++++++ plugins/detect/src/commands.rs | 15 + plugins/detect/src/error.rs | 15 + plugins/detect/src/events.rs | 26 ++ plugins/detect/src/ext.rs | 25 ++ plugins/detect/src/lib.rs | 64 +++ plugins/detect/tsconfig.json | 5 + 22 files changed, 997 insertions(+) create mode 100644 plugins/detect/.gitignore create mode 100644 plugins/detect/Cargo.toml create mode 100644 plugins/detect/build.rs create mode 100644 plugins/detect/js/bindings.gen.ts create mode 100644 plugins/detect/js/index.ts create mode 100644 plugins/detect/package.json create mode 100644 plugins/detect/permissions/autogenerated/commands/start_detection.toml create mode 100644 plugins/detect/permissions/autogenerated/commands/stop_detection.toml create mode 100644 plugins/detect/permissions/autogenerated/reference.md create mode 100644 plugins/detect/permissions/default.toml create mode 100644 plugins/detect/permissions/schemas/schema.json create mode 100644 plugins/detect/src/commands.rs create mode 100644 plugins/detect/src/error.rs create mode 100644 plugins/detect/src/events.rs create mode 100644 plugins/detect/src/ext.rs create mode 100644 plugins/detect/src/lib.rs create mode 100644 plugins/detect/tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index 51c46cc00..682e7d786 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3869,6 +3869,7 @@ dependencies = [ "tauri-plugin-auth", "tauri-plugin-db2", "tauri-plugin-deep-link", + "tauri-plugin-detect", "tauri-plugin-dialog", "tauri-plugin-fs", "tauri-plugin-http", @@ -14470,9 +14471,14 @@ dependencies = [ "detect", "intercept", "serde", + "specta", + "specta-typescript", "tauri", "tauri-plugin", + "tauri-specta", "thiserror 2.0.17", + "tokio", + "tracing", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1c44ece64..8b36c2bb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,6 +113,7 @@ tauri-plugin-apple-calendar = { path = "plugins/apple-calendar" } tauri-plugin-auth = { path = "plugins/auth" } tauri-plugin-db = { path = "plugins/db" } tauri-plugin-db2 = { path = "plugins/db2" } +tauri-plugin-detect = { path = "plugins/detect" } tauri-plugin-listener = { path = "plugins/listener" } tauri-plugin-local-llm = { path = "plugins/local-llm" } tauri-plugin-local-stt = { path = "plugins/local-stt" } diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 92a5bb5f1..4f0421e34 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -24,6 +24,7 @@ tauri-plugin-analytics = { workspace = true } tauri-plugin-auth = { workspace = true } tauri-plugin-db2 = { workspace = true } tauri-plugin-deep-link = { workspace = true } +tauri-plugin-detect = { workspace = true } tauri-plugin-dialog = { workspace = true } tauri-plugin-fs = { workspace = true } tauri-plugin-http = { workspace = true } diff --git a/apps/desktop/src-tauri/capabilities/default.json b/apps/desktop/src-tauri/capabilities/default.json index f1452dfc8..7c67fd832 100644 --- a/apps/desktop/src-tauri/capabilities/default.json +++ b/apps/desktop/src-tauri/capabilities/default.json @@ -63,6 +63,7 @@ "shell:default", "misc:default", "os:default", + "detect:default", "http:default", { "identifier": "http:default", diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index ffd4a76f3..fd2f5ee99 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -57,6 +57,7 @@ pub async fn main() { .plugin(tauri_plugin_misc::init()) .plugin(tauri_plugin_template::init()) .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_detect::init()) .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_tray::init()) .plugin(tauri_plugin_store::Builder::default().build()) diff --git a/plugins/detect/.gitignore b/plugins/detect/.gitignore new file mode 100644 index 000000000..50d8e32e8 --- /dev/null +++ b/plugins/detect/.gitignore @@ -0,0 +1,17 @@ +/.vs +.DS_Store +.Thumbs.db +*.sublime* +.idea/ +debug.log +package-lock.json +.vscode/settings.json +yarn.lock + +/.tauri +/target +Cargo.lock +node_modules/ + +dist-js +dist diff --git a/plugins/detect/Cargo.toml b/plugins/detect/Cargo.toml new file mode 100644 index 000000000..d457a5b48 --- /dev/null +++ b/plugins/detect/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "tauri-plugin-detect" +version = "0.1.0" +authors = ["You"] +edition = "2021" +exclude = ["/js", "/node_modules"] +links = "tauri-plugin-detect" +description = "" + +[build-dependencies] +tauri-plugin = { workspace = true, features = ["build"] } + +[dev-dependencies] +specta-typescript = { workspace = true } + +[dependencies] +hypr-detect = { workspace = true } +hypr-intercept = { workspace = true } + +tauri = { workspace = true, features = ["specta", "test"] } + +specta = { workspace = true } +tauri-specta = { workspace = true, features = ["derive", "typescript"] } + +serde = { workspace = true } +thiserror = { workspace = true } + +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +tracing = { workspace = true } diff --git a/plugins/detect/build.rs b/plugins/detect/build.rs new file mode 100644 index 000000000..06c46beab --- /dev/null +++ b/plugins/detect/build.rs @@ -0,0 +1,5 @@ +const COMMANDS: &[&str] = &["start_detection", "stop_detection"]; + +fn main() { + tauri_plugin::Builder::new(COMMANDS).build(); +} diff --git a/plugins/detect/js/bindings.gen.ts b/plugins/detect/js/bindings.gen.ts new file mode 100644 index 000000000..7c963ad8d --- /dev/null +++ b/plugins/detect/js/bindings.gen.ts @@ -0,0 +1,104 @@ +// @ts-nocheck + + +// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. + +/** user-defined commands **/ + + +export const commands = { +async startDetection() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:detect|start_detection") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async stopDetection() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:detect|stop_detection") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +} +} + +/** user-defined events **/ + + +export const events = __makeEvents__<{ +detectEvent: DetectEvent +}>({ +detectEvent: "plugin:detect:detect-event" +}) + +/** user-defined constants **/ + + + +/** user-defined types **/ + +export type DetectEvent = { type: "micStarted"; apps: InstalledApp[] } | { type: "micStopped" } +export type InstalledApp = { id: string; name: string } + +/** tauri-specta globals **/ + +import { + invoke as TAURI_INVOKE, + Channel as TAURI_CHANNEL, +} from "@tauri-apps/api/core"; +import * as TAURI_API_EVENT from "@tauri-apps/api/event"; +import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; + +type __EventObj__ = { + listen: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + once: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + emit: null extends T + ? (payload?: T) => ReturnType + : (payload: T) => ReturnType; +}; + +export type Result = + | { status: "ok"; data: T } + | { status: "error"; error: E }; + +function __makeEvents__>( + mappings: Record, +) { + return new Proxy( + {} as unknown as { + [K in keyof T]: __EventObj__ & { + (handle: __WebviewWindow__): __EventObj__; + }; + }, + { + get: (_, event) => { + const name = mappings[event as keyof T]; + + return new Proxy((() => {}) as any, { + apply: (_, __, [window]: [__WebviewWindow__]) => ({ + listen: (arg: any) => window.listen(name, arg), + once: (arg: any) => window.once(name, arg), + emit: (arg: any) => window.emit(name, arg), + }), + get: (_, command: keyof __EventObj__) => { + switch (command) { + case "listen": + return (arg: any) => TAURI_API_EVENT.listen(name, arg); + case "once": + return (arg: any) => TAURI_API_EVENT.once(name, arg); + case "emit": + return (arg: any) => TAURI_API_EVENT.emit(name, arg); + } + }, + }); + }, + }, + ); +} diff --git a/plugins/detect/js/index.ts b/plugins/detect/js/index.ts new file mode 100644 index 000000000..a96e122f0 --- /dev/null +++ b/plugins/detect/js/index.ts @@ -0,0 +1 @@ +export * from "./bindings.gen"; diff --git a/plugins/detect/package.json b/plugins/detect/package.json new file mode 100644 index 000000000..d395cc37a --- /dev/null +++ b/plugins/detect/package.json @@ -0,0 +1,11 @@ +{ + "name": "@hypr/plugin-detect", + "private": true, + "main": "./js/index.ts", + "scripts": { + "codegen": "cargo test -p tauri-plugin-detect" + }, + "dependencies": { + "@tauri-apps/api": "^2.9.0" + } +} diff --git a/plugins/detect/permissions/autogenerated/commands/start_detection.toml b/plugins/detect/permissions/autogenerated/commands/start_detection.toml new file mode 100644 index 000000000..cb74ff49e --- /dev/null +++ b/plugins/detect/permissions/autogenerated/commands/start_detection.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-start-detection" +description = "Enables the start_detection command without any pre-configured scope." +commands.allow = ["start_detection"] + +[[permission]] +identifier = "deny-start-detection" +description = "Denies the start_detection command without any pre-configured scope." +commands.deny = ["start_detection"] diff --git a/plugins/detect/permissions/autogenerated/commands/stop_detection.toml b/plugins/detect/permissions/autogenerated/commands/stop_detection.toml new file mode 100644 index 000000000..47f260dfa --- /dev/null +++ b/plugins/detect/permissions/autogenerated/commands/stop_detection.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-stop-detection" +description = "Enables the stop_detection command without any pre-configured scope." +commands.allow = ["stop_detection"] + +[[permission]] +identifier = "deny-stop-detection" +description = "Denies the stop_detection command without any pre-configured scope." +commands.deny = ["stop_detection"] diff --git a/plugins/detect/permissions/autogenerated/reference.md b/plugins/detect/permissions/autogenerated/reference.md new file mode 100644 index 000000000..64ff88e40 --- /dev/null +++ b/plugins/detect/permissions/autogenerated/reference.md @@ -0,0 +1,231 @@ +## Default Permission + +Default permissions for the plugin + +#### This default permission set includes the following: + +- `allow-check-accessibility-permission` +- `allow-request-accessibility-permission` +- `allow-start-detection` +- `allow-stop-detection` +- `allow-get-state` +- `allow-list-installed-apps` +- `allow-list-mic-using-apps` + +## Permission Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentifierDescription
+ +`detect:allow-check-accessibility-permission` + + + +Enables the check_accessibility_permission command without any pre-configured scope. + +
+ +`detect:deny-check-accessibility-permission` + + + +Denies the check_accessibility_permission command without any pre-configured scope. + +
+ +`detect:allow-get-state` + + + +Enables the get_state command without any pre-configured scope. + +
+ +`detect:deny-get-state` + + + +Denies the get_state command without any pre-configured scope. + +
+ +`detect:allow-list-installed-apps` + + + +Enables the list_installed_apps command without any pre-configured scope. + +
+ +`detect:deny-list-installed-apps` + + + +Denies the list_installed_apps command without any pre-configured scope. + +
+ +`detect:allow-list-mic-using-apps` + + + +Enables the list_mic_using_apps command without any pre-configured scope. + +
+ +`detect:deny-list-mic-using-apps` + + + +Denies the list_mic_using_apps command without any pre-configured scope. + +
+ +`detect:allow-ping` + + + +Enables the ping command without any pre-configured scope. + +
+ +`detect:deny-ping` + + + +Denies the ping command without any pre-configured scope. + +
+ +`detect:allow-request-accessibility-permission` + + + +Enables the request_accessibility_permission command without any pre-configured scope. + +
+ +`detect:deny-request-accessibility-permission` + + + +Denies the request_accessibility_permission command without any pre-configured scope. + +
+ +`detect:allow-start-detection` + + + +Enables the start_detection command without any pre-configured scope. + +
+ +`detect:deny-start-detection` + + + +Denies the start_detection command without any pre-configured scope. + +
+ +`detect:allow-stop-detection` + + + +Enables the stop_detection command without any pre-configured scope. + +
+ +`detect:deny-stop-detection` + + + +Denies the stop_detection command without any pre-configured scope. + +
diff --git a/plugins/detect/permissions/default.toml b/plugins/detect/permissions/default.toml new file mode 100644 index 000000000..08048ef75 --- /dev/null +++ b/plugins/detect/permissions/default.toml @@ -0,0 +1,11 @@ +[default] +description = "Default permissions for the plugin" +permissions = [ + "allow-check-accessibility-permission", + "allow-request-accessibility-permission", + "allow-start-detection", + "allow-stop-detection", + "allow-get-state", + "allow-list-installed-apps", + "allow-list-mic-using-apps", +] diff --git a/plugins/detect/permissions/schemas/schema.json b/plugins/detect/permissions/schemas/schema.json new file mode 100644 index 000000000..6cadba320 --- /dev/null +++ b/plugins/detect/permissions/schemas/schema.json @@ -0,0 +1,402 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PermissionFile", + "description": "Permission file that can define a default permission, a set of permissions or a list of inlined permissions.", + "type": "object", + "properties": { + "default": { + "description": "The default permission set for the plugin", + "anyOf": [ + { + "$ref": "#/definitions/DefaultPermission" + }, + { + "type": "null" + } + ] + }, + "set": { + "description": "A list of permissions sets defined", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionSet" + } + }, + "permission": { + "description": "A list of inlined permissions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + } + }, + "definitions": { + "DefaultPermission": { + "description": "The default permission set of the plugin.\n\nWorks similarly to a permission with the \"default\" identifier.", + "type": "object", + "required": [ + "permissions" + ], + "properties": { + "version": { + "description": "The version of the permission.", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "minimum": 1.0 + }, + "description": { + "description": "Human-readable description of what the permission does. Tauri convention is to use `

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

` headings in markdown content for Tauri documentation generation purposes.", + "type": [ + "string", + "null" + ] + }, + "commands": { + "description": "Allowed or denied commands when using this permission.", + "default": { + "allow": [], + "deny": [] + }, + "allOf": [ + { + "$ref": "#/definitions/Commands" + } + ] + }, + "scope": { + "description": "Allowed or denied scoped when using this permission.", + "allOf": [ + { + "$ref": "#/definitions/Scopes" + } + ] + }, + "platforms": { + "description": "Target platforms this permission applies. By default all platforms are affected by this permission.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "Commands": { + "description": "Allowed and denied commands inside a permission.\n\nIf two commands clash inside of `allow` and `deny`, it should be denied by default.", + "type": "object", + "properties": { + "allow": { + "description": "Allowed command.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "deny": { + "description": "Denied command, which takes priority.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Scopes": { + "description": "An argument for fine grained behavior control of Tauri commands.\n\nIt can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command. The configured scope is passed to the command and will be enforced by the command implementation.\n\n## Example\n\n```json { \"allow\": [{ \"path\": \"$HOME/**\" }], \"deny\": [{ \"path\": \"$HOME/secret.txt\" }] } ```", + "type": "object", + "properties": { + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + }, + "PermissionKind": { + "type": "string", + "oneOf": [ + { + "description": "Enables the check_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-check-accessibility-permission", + "markdownDescription": "Enables the check_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Denies the check_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-check-accessibility-permission", + "markdownDescription": "Denies the check_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Enables the get_state command without any pre-configured scope.", + "type": "string", + "const": "allow-get-state", + "markdownDescription": "Enables the get_state command without any pre-configured scope." + }, + { + "description": "Denies the get_state command without any pre-configured scope.", + "type": "string", + "const": "deny-get-state", + "markdownDescription": "Denies the get_state command without any pre-configured scope." + }, + { + "description": "Enables the list_installed_apps command without any pre-configured scope.", + "type": "string", + "const": "allow-list-installed-apps", + "markdownDescription": "Enables the list_installed_apps command without any pre-configured scope." + }, + { + "description": "Denies the list_installed_apps command without any pre-configured scope.", + "type": "string", + "const": "deny-list-installed-apps", + "markdownDescription": "Denies the list_installed_apps command without any pre-configured scope." + }, + { + "description": "Enables the list_mic_using_apps command without any pre-configured scope.", + "type": "string", + "const": "allow-list-mic-using-apps", + "markdownDescription": "Enables the list_mic_using_apps command without any pre-configured scope." + }, + { + "description": "Denies the list_mic_using_apps command without any pre-configured scope.", + "type": "string", + "const": "deny-list-mic-using-apps", + "markdownDescription": "Denies the list_mic_using_apps command without any pre-configured scope." + }, + { + "description": "Enables the ping command without any pre-configured scope.", + "type": "string", + "const": "allow-ping", + "markdownDescription": "Enables the ping command without any pre-configured scope." + }, + { + "description": "Denies the ping command without any pre-configured scope.", + "type": "string", + "const": "deny-ping", + "markdownDescription": "Denies the ping command without any pre-configured scope." + }, + { + "description": "Enables the request_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-request-accessibility-permission", + "markdownDescription": "Enables the request_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Denies the request_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-request-accessibility-permission", + "markdownDescription": "Denies the request_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Enables the start_detection command without any pre-configured scope.", + "type": "string", + "const": "allow-start-detection", + "markdownDescription": "Enables the start_detection command without any pre-configured scope." + }, + { + "description": "Denies the start_detection command without any pre-configured scope.", + "type": "string", + "const": "deny-start-detection", + "markdownDescription": "Denies the start_detection command without any pre-configured scope." + }, + { + "description": "Enables the stop_detection command without any pre-configured scope.", + "type": "string", + "const": "allow-stop-detection", + "markdownDescription": "Enables the stop_detection command without any pre-configured scope." + }, + { + "description": "Denies the stop_detection command without any pre-configured scope.", + "type": "string", + "const": "deny-stop-detection", + "markdownDescription": "Denies the stop_detection command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-accessibility-permission`\n- `allow-request-accessibility-permission`\n- `allow-start-detection`\n- `allow-stop-detection`\n- `allow-get-state`\n- `allow-list-installed-apps`\n- `allow-list-mic-using-apps`", + "type": "string", + "const": "default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-accessibility-permission`\n- `allow-request-accessibility-permission`\n- `allow-start-detection`\n- `allow-stop-detection`\n- `allow-get-state`\n- `allow-list-installed-apps`\n- `allow-list-mic-using-apps`" + } + ] + } + } +} \ No newline at end of file diff --git a/plugins/detect/src/commands.rs b/plugins/detect/src/commands.rs new file mode 100644 index 000000000..9df08284f --- /dev/null +++ b/plugins/detect/src/commands.rs @@ -0,0 +1,15 @@ +use crate::DetectPluginExt; + +#[tauri::command] +#[specta::specta] +pub async fn start_detection(app: tauri::AppHandle) -> Result<(), String> { + app.start_detection().await; + Ok(()) +} + +#[tauri::command] +#[specta::specta] +pub async fn stop_detection(app: tauri::AppHandle) -> Result<(), String> { + app.stop_detection().await; + Ok(()) +} diff --git a/plugins/detect/src/error.rs b/plugins/detect/src/error.rs new file mode 100644 index 000000000..6958de1b9 --- /dev/null +++ b/plugins/detect/src/error.rs @@ -0,0 +1,15 @@ +use serde::{ser::Serializer, Serialize}; + +pub type Result = std::result::Result; + +#[derive(Debug, thiserror::Error)] +pub enum Error {} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} diff --git a/plugins/detect/src/events.rs b/plugins/detect/src/events.rs new file mode 100644 index 000000000..817f24db2 --- /dev/null +++ b/plugins/detect/src/events.rs @@ -0,0 +1,26 @@ +#[macro_export] +macro_rules! common_event_derives { + ($item:item) => { + #[derive(serde::Serialize, Clone, specta::Type, tauri_specta::Event)] + $item + }; +} + +common_event_derives! { + #[serde(tag = "type")] + pub enum DetectEvent { + #[serde(rename = "micStarted")] + MicStarted { apps: Vec }, + #[serde(rename = "micStopped")] + MicStopped {}, + } +} + +impl From for DetectEvent { + fn from(event: hypr_detect::DetectEvent) -> Self { + match event { + hypr_detect::DetectEvent::MicStarted(apps) => Self::MicStarted { apps }, + hypr_detect::DetectEvent::MicStopped => Self::MicStopped {}, + } + } +} diff --git a/plugins/detect/src/ext.rs b/plugins/detect/src/ext.rs new file mode 100644 index 000000000..a8fc035ba --- /dev/null +++ b/plugins/detect/src/ext.rs @@ -0,0 +1,25 @@ +use std::future::Future; +use tauri_specta::Event; + +pub trait DetectPluginExt { + fn start_detection(&self) -> impl Future; + fn stop_detection(&self) -> impl Future; +} + +impl> DetectPluginExt for T { + #[tracing::instrument(skip_all)] + async fn start_detection(&self) {} + + #[tracing::instrument(skip_all)] + async fn stop_detection(&self) {} + + // #[tracing::instrument(skip_all)] + // async fn list_installed_apps(&self) -> Vec { + // hypr_detect::list_installed_apps() + // } + + // #[tracing::instrument(skip_all)] + // async fn list_mic_using_apps(&self) -> Vec { + // hypr_detect::list_mic_using_apps() + // } +} diff --git a/plugins/detect/src/lib.rs b/plugins/detect/src/lib.rs new file mode 100644 index 000000000..af19071ea --- /dev/null +++ b/plugins/detect/src/lib.rs @@ -0,0 +1,64 @@ +use tauri::Manager; +use tokio::sync::Mutex; + +mod commands; +mod error; +mod events; +mod ext; + +pub use error::*; +pub use events::*; +pub use ext::*; + +const PLUGIN_NAME: &str = "detect"; + +pub type SharedState = Mutex; + +#[derive(Default)] +pub struct State {} + +fn make_specta_builder() -> tauri_specta::Builder { + tauri_specta::Builder::::new() + .plugin_name(PLUGIN_NAME) + .commands(tauri_specta::collect_commands![ + commands::start_detection::, + commands::stop_detection::, + ]) + .events(tauri_specta::collect_events![DetectEvent]) + .error_handling(tauri_specta::ErrorHandlingMode::Result) +} + +pub fn init() -> tauri::plugin::TauriPlugin { + let specta_builder = make_specta_builder(); + + tauri::plugin::Builder::new(PLUGIN_NAME) + .invoke_handler(specta_builder.invoke_handler()) + .setup(move |app, _api| { + specta_builder.mount_events(app); + + let app_handle = app.app_handle().clone(); + let state = State::default(); + + app.manage(state); + Ok(()) + }) + .build() +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn export_types() { + make_specta_builder::() + .export( + specta_typescript::Typescript::default() + .header("// @ts-nocheck\n\n") + .formatter(specta_typescript::formatter::prettier) + .bigint(specta_typescript::BigIntExportBehavior::Number), + "./js/bindings.gen.ts", + ) + .unwrap() + } +} diff --git a/plugins/detect/tsconfig.json b/plugins/detect/tsconfig.json new file mode 100644 index 000000000..13b985325 --- /dev/null +++ b/plugins/detect/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../tsconfig.base.json", + "include": ["./js/*.ts"], + "exclude": ["node_modules"] +} From 4ceea28139a17589db3c6a6b96495e189fc05223 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 13:21:19 +0900 Subject: [PATCH 04/10] make notification plugin do less + add stuffs in detect plugin --- apps/desktop/package.json | 1 + .../src/components/settings/notification.tsx | 64 ++--- plugins/detect/build.rs | 7 +- plugins/detect/js/bindings.gen.ts | 16 ++ .../commands/list_installed_applications.toml | 13 + .../commands/list_mic_using_applications.toml | 13 + .../permissions/autogenerated/reference.md | 127 +--------- plugins/detect/permissions/default.toml | 7 +- .../detect/permissions/schemas/schema.json | 76 ++---- plugins/detect/src/commands.rs | 16 ++ plugins/detect/src/ext.rs | 11 - plugins/detect/src/lib.rs | 4 +- plugins/notification/build.rs | 9 +- plugins/notification/js/bindings.gen.ts | 34 +-- .../commands/clear_notifications.toml | 13 + .../commands/list_applications.toml | 13 - .../commands/start_detect_notification.toml | 13 - .../commands/start_event_notification.toml | 13 - .../commands/stop_detect_notification.toml | 13 - .../commands/stop_event_notification.toml | 13 - .../permissions/autogenerated/reference.md | 118 +--------- plugins/notification/permissions/default.toml | 6 +- .../permissions/schemas/schema.json | 64 +---- plugins/notification/src/commands.rs | 52 +--- plugins/notification/src/detect.rs | 59 ----- plugins/notification/src/error.rs | 11 +- plugins/notification/src/event.rs | 83 ------- plugins/notification/src/ext.rs | 171 +------------- plugins/notification/src/handler.rs | 222 ------------------ plugins/notification/src/lib.rs | 54 +---- plugins/notification/src/quit.rs | 51 ---- pnpm-lock.yaml | 3 + 32 files changed, 166 insertions(+), 1204 deletions(-) create mode 100644 plugins/detect/permissions/autogenerated/commands/list_installed_applications.toml create mode 100644 plugins/detect/permissions/autogenerated/commands/list_mic_using_applications.toml create mode 100644 plugins/notification/permissions/autogenerated/commands/clear_notifications.toml delete mode 100644 plugins/notification/permissions/autogenerated/commands/list_applications.toml delete mode 100644 plugins/notification/permissions/autogenerated/commands/start_detect_notification.toml delete mode 100644 plugins/notification/permissions/autogenerated/commands/start_event_notification.toml delete mode 100644 plugins/notification/permissions/autogenerated/commands/stop_detect_notification.toml delete mode 100644 plugins/notification/permissions/autogenerated/commands/stop_event_notification.toml delete mode 100644 plugins/notification/src/detect.rs delete mode 100644 plugins/notification/src/event.rs delete mode 100644 plugins/notification/src/handler.rs delete mode 100644 plugins/notification/src/quit.rs diff --git a/apps/desktop/package.json b/apps/desktop/package.json index c8fd04e62..659213ac9 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -32,6 +32,7 @@ "@hypr/plugin-local-stt": "workspace:*", "@hypr/plugin-misc": "workspace:*", "@hypr/plugin-notification": "workspace:*", + "@hypr/plugin-detect": "workspace:*", "@hypr/plugin-template": "workspace:*", "@hypr/plugin-windows": "workspace:*", "@hypr/tiptap": "workspace:^", diff --git a/apps/desktop/src/components/settings/notification.tsx b/apps/desktop/src/components/settings/notification.tsx index 32a1e6e50..775f37c6f 100644 --- a/apps/desktop/src/components/settings/notification.tsx +++ b/apps/desktop/src/components/settings/notification.tsx @@ -1,8 +1,9 @@ import { useForm } from "@tanstack/react-form"; +import { useQuery } from "@tanstack/react-query"; import { Plus, X } from "lucide-react"; import { useState } from "react"; -import { commands as notificationCommands, type InstalledApp } from "@hypr/plugin-notification"; +import { commands as detectCommands } from "@hypr/plugin-detect"; import { Badge } from "@hypr/ui/components/ui/badge"; import { Button } from "@hypr/ui/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from "@hypr/ui/components/ui/command"; @@ -15,7 +16,6 @@ export function SettingsNotifications() { const values = main.UI.useValues(main.STORE_ID); const [popoverOpen, setPopoverOpen] = useState(false); const [newAppName, setNewAppName] = useState(""); - const [applications, setApplications] = useState([]); const handleSetNotificationEvent = main.UI.useSetValueCallback( "notification_event", @@ -63,32 +63,39 @@ export function SettingsNotifications() { handleSetRespectDnd(value.respect_dnd); handleSetIgnoredPlatforms(value.ignored_platforms); - if (value.notification_event) { - await notificationCommands.startEventNotification({ - respect_do_not_disturb: value.respect_dnd, - }); - } else { - await notificationCommands.stopEventNotification(); - } + // TODO - if (value.notification_detect) { - await notificationCommands.startDetectNotification({ - respect_do_not_disturb: value.respect_dnd, - ignored_platforms: value.ignored_platforms, - }); - } else { - await notificationCommands.stopDetectNotification(); - } + // if (value.notification_event) { + // await notificationCommands.startEventNotification({ + // respect_do_not_disturb: value.respect_dnd, + // }); + // } else { + // await notificationCommands.stopEventNotification(); + // } + + // if (value.notification_detect) { + // await notificationCommands.startDetectNotification({ + // respect_do_not_disturb: value.respect_dnd, + // ignored_platforms: value.ignored_platforms, + // }); + // } else { + // await notificationCommands.stopDetectNotification(); + // } }, }); - const loadApplications = async () => { - if (applications.length === 0) { - const apps = await notificationCommands.listApplications(); - const uniqueNames = Array.from(new Set(apps.map((app: InstalledApp) => app.name))) as string[]; - setApplications(uniqueNames); - } - }; + const { data: installedApps } = useQuery({ + enabled: popoverOpen, + queryKey: ["installed-applications"], + queryFn: detectCommands.listInstalledApplications, + select: (result) => { + if (result.status === "error") { + throw new Error(result.error); + } + + return result.data.map((app) => app.name); + }, + }); const handleAddIgnoredApp = (appName: string) => { const trimmedName = appName.trim(); @@ -174,12 +181,7 @@ export function SettingsNotifications() { { - setPopoverOpen(open); - if (open) { - loadApplications(); - } - }} + onOpenChange={setPopoverOpen} > - - ); -} diff --git a/apps/desktop/src/components/shared/permission-row.tsx b/apps/desktop/src/components/shared/permission-row.tsx new file mode 100644 index 000000000..3fbffd28d --- /dev/null +++ b/apps/desktop/src/components/shared/permission-row.tsx @@ -0,0 +1,139 @@ +import { Check, CheckCircle2Icon } from "lucide-react"; + +import type { PermissionStatus } from "@hypr/plugin-permissions"; +import { Button } from "@hypr/ui/components/ui/button"; +import { Spinner } from "@hypr/ui/components/ui/spinner"; +import { cn } from "@hypr/utils"; + +export function PermissionRow({ + icon, + title, + description, + status, + isPending, + onAction, + variant = "default", +}: { + icon?: React.ReactNode; + title: string; + description?: string; + status: PermissionStatus | undefined; + isPending: boolean; + onAction: () => void; + variant?: "default" | "compact"; +}) { + const isAuthorized = status === "authorized"; + const isDenied = status === "denied"; + + let displayMessage = description || ""; + let buttonText = ""; + + if (isAuthorized) { + displayMessage = variant === "compact" ? "Thanks for granting permission" : "Access Granted"; + buttonText = "Access Granted"; + } else if (isDenied) { + displayMessage = variant === "compact" + ? "You should toggle in the Settings manually" + : "Access denied - Open Settings to enable"; + buttonText = "Open Settings"; + } else { + displayMessage = description || "You need to grant access to use Hyprnote"; + buttonText = "Enable"; + } + + if (variant === "compact") { + return ( +
+
+

+ {title} +

+

+ {displayMessage} +

+
+ +
+ ); + } + + return ( +
+
+ {icon && ( +
+
{icon}
+
+ )} +
+
{title}
+
+ {isAuthorized + ? ( + + + Access Granted + + ) + : {displayMessage}} +
+
+
+
+ {!isAuthorized && ( + + )} + {isAuthorized && ( +
+ +
+ )} +
+
+ ); +} diff --git a/apps/desktop/src/contexts/listener.tsx b/apps/desktop/src/contexts/listener.tsx index 5bf97fcc1..8a5e1b4fe 100644 --- a/apps/desktop/src/contexts/listener.tsx +++ b/apps/desktop/src/contexts/listener.tsx @@ -2,6 +2,7 @@ import React, { createContext, useContext, useEffect, useRef } from "react"; import { useStore } from "zustand"; import { useShallow } from "zustand/shallow"; +import { events as detectEvents } from "@hypr/plugin-detect"; import { commands as localSttCommands, type SupportedSttModel } from "@hypr/plugin-local-stt"; import * as main from "../store/tinybase/main"; import { createListenerStore, type ListenerStore } from "../store/zustand/listener"; @@ -16,6 +17,7 @@ export const ListenerProvider = ({ store: ListenerStore; }) => { useAutoStartSTT(); + useHandleMuteAndStop(store); const storeRef = useRef(null); if (!storeRef.current) { @@ -66,3 +68,28 @@ function useAutoStartSTT() { } }, [currentSttProvider, currentSttModel]); } + +const useHandleMuteAndStop = (store: ListenerStore) => { + const stop = useStore(store, (state) => state.stop); + const setMuted = useStore(store, (state) => state.setMuted); + + useEffect(() => { + let unlisten: (() => void) | undefined; + + detectEvents.detectEvent.listen(({ payload }) => { + if (payload.type === "micStarted") { + console.log("mic_started", payload.apps); + } else if (payload.type === "micStopped") { + stop(); + } else if (payload.type === "micMuted") { + setMuted(payload.value); + } + }).then((fn) => { + unlisten = fn; + }); + + return () => { + unlisten?.(); + }; + }, [stop, setMuted]); +}; diff --git a/apps/desktop/src/hooks/use-permissions.ts b/apps/desktop/src/hooks/use-permissions.ts new file mode 100644 index 000000000..1a4435626 --- /dev/null +++ b/apps/desktop/src/hooks/use-permissions.ts @@ -0,0 +1,141 @@ +import { useMutation, useQuery } from "@tanstack/react-query"; +import { message } from "@tauri-apps/plugin-dialog"; +import { relaunch } from "@tauri-apps/plugin-process"; +import { Command } from "@tauri-apps/plugin-shell"; + +import { commands as permissionsCommands } from "@hypr/plugin-permissions"; + +export function usePermissions() { + const micPermissionStatus = useQuery({ + queryKey: ["micPermission"], + queryFn: () => permissionsCommands.checkMicrophonePermission(), + refetchInterval: 1000, + select: (result) => { + console.log(result); + if (result.status === "error") { + throw new Error(result.error); + } + return result.data; + }, + }); + + const systemAudioPermissionStatus = useQuery({ + queryKey: ["systemAudioPermission"], + queryFn: () => permissionsCommands.checkSystemAudioPermission(), + refetchInterval: 1000, + select: (result) => { + if (result.status === "error") { + throw new Error(result.error); + } + return result.data; + }, + }); + + const accessibilityPermissionStatus = useQuery({ + queryKey: ["accessibilityPermission"], + queryFn: () => permissionsCommands.checkAccessibilityPermission(), + refetchInterval: 1000, + select: (result) => { + if (result.status === "error") { + throw new Error(result.error); + } + return result.data; + }, + }); + + const micPermission = useMutation({ + mutationFn: () => permissionsCommands.requestMicrophonePermission(), + onSuccess: () => { + setTimeout(() => { + micPermissionStatus.refetch(); + }, 1000); + }, + onError: (error) => { + console.error(error); + }, + }); + + const systemAudioPermission = useMutation({ + mutationFn: () => permissionsCommands.requestSystemAudioPermission(), + onSuccess: () => { + message("The app will now restart to apply the changes", { + kind: "info", + title: "System Audio Status Changed", + }); + setTimeout(() => { + relaunch(); + }, 2000); + }, + onError: console.error, + }); + + const accessibilityPermission = useMutation({ + mutationFn: () => permissionsCommands.requestAccessibilityPermission(), + onSuccess: () => { + setTimeout(() => { + accessibilityPermissionStatus.refetch(); + }, 1000); + }, + onError: console.error, + }); + + const openMicrophoneSettings = async () => { + await Command.create("exec-sh", [ + "-c", + "open 'x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone'", + ]).execute(); + }; + + const openSystemAudioSettings = async () => { + await Command.create("exec-sh", [ + "-c", + "open 'x-apple.systempreferences:com.apple.preference.security?Privacy_AudioCapture'", + ]).execute(); + }; + + const openAccessibilitySettings = async () => { + await Command.create("exec-sh", [ + "-c", + "open 'x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility'", + ]).execute(); + }; + + const handleMicPermissionAction = async () => { + if (micPermissionStatus.data === "denied") { + await openMicrophoneSettings(); + } else { + micPermission.mutate(); + } + }; + + const handleSystemAudioPermissionAction = async () => { + if (systemAudioPermissionStatus.data === "denied") { + await openSystemAudioSettings(); + } else { + systemAudioPermission.mutate(undefined); + } + }; + + const handleAccessibilityPermissionAction = async () => { + if (accessibilityPermissionStatus.data === "denied") { + await openAccessibilitySettings(); + } else { + accessibilityPermission.mutate(undefined); + } + }; + + return { + micPermissionStatus, + systemAudioPermissionStatus, + accessibilityPermissionStatus, + micPermission, + systemAudioPermission, + accessibilityPermission, + openMicrophoneSettings, + openSystemAudioSettings, + openAccessibilitySettings, + handleMicPermissionAction, + handleSystemAudioPermissionAction, + handleAccessibilityPermissionAction, + }; +} diff --git a/apps/desktop/src/routes/__root.tsx b/apps/desktop/src/routes/__root.tsx index d53214793..5f6e0da7c 100644 --- a/apps/desktop/src/routes/__root.tsx +++ b/apps/desktop/src/routes/__root.tsx @@ -4,7 +4,6 @@ import { app } from "@tauri-apps/api"; import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import { lazy, Suspense, useEffect } from "react"; -import { events as detectEvents } from "@hypr/plugin-detect"; import { events as windowsEvents } from "@hypr/plugin-windows"; import { AuthProvider } from "../auth"; import { ErrorComponent, NotFoundComponent } from "../components/control"; @@ -18,7 +17,6 @@ export const Route = createRootRouteWithContext>()({ function Component() { useNavigationEvents(); - useDetectEvents(); return ( @@ -64,26 +62,6 @@ const useNavigationEvents = () => { }, [navigate]); }; -const useDetectEvents = () => { - useEffect(() => { - let unlisten: (() => void) | undefined; - - detectEvents.detectEvent.listen(({ payload }) => { - if (payload.type === "micStarted") { - console.log("Mic started", payload.apps); - } else if (payload.type === "micStopped") { - console.log("Mic stopped"); - } - }).then((fn) => { - unlisten = fn; - }); - - return () => { - unlisten?.(); - }; - }, []); -}; - export const TanStackRouterDevtools = process.env.NODE_ENV === "production" ? () => null : lazy(() => diff --git a/apps/desktop/src/routes/app/onboarding.tsx b/apps/desktop/src/routes/app/onboarding.tsx index e74fb68fc..a662e7771 100644 --- a/apps/desktop/src/routes/app/onboarding.tsx +++ b/apps/desktop/src/routes/app/onboarding.tsx @@ -1,18 +1,15 @@ import { Icon } from "@iconify-icon/react"; -import { useMutation, useQuery } from "@tanstack/react-query"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; -import { message } from "@tauri-apps/plugin-dialog"; -import { relaunch } from "@tauri-apps/plugin-process"; -import { ArrowRightIcon, CheckCircle2Icon, CircleQuestionMarkIcon, MicIcon, Volume2Icon } from "lucide-react"; -import { useCallback, useState } from "react"; +import { ArrowRightIcon, CircleQuestionMarkIcon, EyeIcon, MicIcon, Volume2Icon } from "lucide-react"; +import { useCallback } from "react"; import { z } from "zod"; -import { commands as listenerCommands } from "@hypr/plugin-listener"; import { commands as windowsCommands } from "@hypr/plugin-windows"; import { Button } from "@hypr/ui/components/ui/button"; -import { Spinner } from "@hypr/ui/components/ui/spinner"; import { TextAnimate } from "@hypr/ui/components/ui/text-animate"; import { cn } from "@hypr/utils"; +import { PermissionRow } from "../../components/shared/permission-row"; +import { usePermissions } from "../../hooks/use-permissions"; const STEPS = ["welcome", "calendars", "permissions"] as const; @@ -100,71 +97,25 @@ function Welcome() { function Permissions() { const { goNext } = useOnboarding(); - const [micPermissionRequested, setMicPermissionRequested] = useState(false); - - const micPermissionStatus = useQuery({ - queryKey: ["micPermission"], - queryFn: () => listenerCommands.checkMicrophoneAccess(), - refetchInterval: 1000, - select: (result) => { - if (result.status === "error") { - throw new Error(result.error); - } - return result.data; - }, - }); - - const systemAudioPermissionStatus = useQuery({ - queryKey: ["systemAudioPermission"], - queryFn: () => listenerCommands.checkSystemAudioAccess(), - refetchInterval: 1000, - select: (result) => { - if (result.status === "error") { - throw new Error(result.error); - } - return result.data; - }, - }); - - const micPermission = useMutation({ - mutationFn: () => listenerCommands.requestMicrophoneAccess(), - onSuccess: () => { - setMicPermissionRequested(true); - setTimeout(() => { - micPermissionStatus.refetch(); - }, 3000); - }, - onError: (error) => { - setMicPermissionRequested(true); - console.error(error); - }, - }); - - const capturePermission = useMutation({ - mutationFn: () => listenerCommands.requestSystemAudioAccess(), - onSuccess: () => { - message("The app will now restart to apply the changes", { kind: "info", title: "System Audio Status Changed" }); - setTimeout(() => { - relaunch(); - }, 2000); - }, - onError: console.error, - }); - - const handleMicPermissionAction = () => { - if (micPermissionRequested && micPermissionStatus.data !== "Authorized") { - listenerCommands.openMicrophoneAccessSettings(); - } else { - micPermission.mutate(); - } - }; - - const allPermissionsGranted = micPermissionStatus.data === "Authorized" - && systemAudioPermissionStatus.data === "Authorized"; + const { + micPermissionStatus, + systemAudioPermissionStatus, + accessibilityPermissionStatus, + micPermission, + systemAudioPermission, + accessibilityPermission, + handleMicPermissionAction, + handleSystemAudioPermissionAction, + handleAccessibilityPermissionAction, + } = usePermissions(); + + const allPermissionsGranted = micPermissionStatus.data === "authorized" + && systemAudioPermissionStatus.data === "authorized" + && accessibilityPermissionStatus.data === "authorized"; return ( goNext() }} > @@ -173,19 +124,25 @@ function Permissions() { icon={} title="Microphone access" description="Required for meeting transcription" - done={micPermissionStatus.data === "Authorized"} + status={micPermissionStatus.data} isPending={micPermission.isPending} onAction={handleMicPermissionAction} - buttonText={micPermissionRequested && micPermissionStatus.data !== "Authorized" ? "Open Settings" : "Enable"} /> } title="System audio access" description="Required for meeting transcription" - done={systemAudioPermissionStatus.data === "Authorized"} - isPending={capturePermission.isPending} - onAction={() => capturePermission.mutate(undefined)} - buttonText="Enable" + status={systemAudioPermissionStatus.data} + isPending={systemAudioPermission.isPending} + onAction={handleSystemAudioPermissionAction} + /> + } + title="Accessibility access" + description="Required for detecting active applications" + status={accessibilityPermissionStatus.data} + isPending={accessibilityPermission.isPending} + onAction={handleAccessibilityPermissionAction} /> @@ -197,7 +154,7 @@ function Permissions() { {!allPermissionsGranted && (

- Grant both permissions to continue + Grant all permissions to continue

)}
@@ -298,83 +255,6 @@ function OnboardingContainer({ ); } -function PermissionRow({ - icon, - title, - description, - done, - isPending, - onAction, - buttonText, -}: { - icon: React.ReactNode; - title: string; - description: string; - done: boolean | undefined; - isPending: boolean; - onAction: () => void; - buttonText: string; -}) { - return ( -
-
-
-
{icon}
-
-
-
{title}
-
- {done - ? ( - - - Access Granted - - ) - : {description}} -
-
-
-
- {!done && ( - - )} - {done && ( -
- -
- )} -
-
- ); -} - function IntegrationRow({ icon, name, diff --git a/apps/desktop/src/store/zustand/listener/general.ts b/apps/desktop/src/store/zustand/listener/general.ts index 8a05840f8..011c80511 100644 --- a/apps/desktop/src/store/zustand/listener/general.ts +++ b/apps/desktop/src/store/zustand/listener/general.ts @@ -20,6 +20,7 @@ export type GeneralState = { seconds: number; intervalId?: NodeJS.Timeout; sessionId: string | null; + muted: boolean; }; export type GeneralActions = { @@ -28,6 +29,7 @@ export type GeneralActions = { options?: { persistFinal?: PersistFinalCallback }, ) => void; stop: () => void; + setMuted: (value: boolean) => void; }; const initialState: GeneralState = { @@ -36,6 +38,7 @@ const initialState: GeneralState = { amplitude: { mic: 0, speaker: 0 }, seconds: 0, sessionId: null, + muted: false, }; const listenToSessionEvents = ( @@ -184,4 +187,12 @@ export const createGeneralSlice = ( }); }); }, + setMuted: (value) => { + set((state) => + mutate(state, (draft) => { + draft.muted = value; + listenerCommands.setMicMuted(value); + }) + ); + }, }); diff --git a/crates/detect/Cargo.toml b/crates/detect/Cargo.toml index 3d5e0761a..5b60242e6 100644 --- a/crates/detect/Cargo.toml +++ b/crates/detect/Cargo.toml @@ -24,5 +24,4 @@ objc2 = { workspace = true } objc2-core-foundation = { workspace = true } objc2-application-services = { workspace = true } -macos-accessibility-client = "0.0.1" plist = "1.7" diff --git a/crates/detect/src/lib.rs b/crates/detect/src/lib.rs index 54c3ff838..8c07186f8 100644 --- a/crates/detect/src/lib.rs +++ b/crates/detect/src/lib.rs @@ -3,16 +3,26 @@ mod list; mod mic; mod utils; +#[cfg(target_os = "macos")] +mod zoom; + pub use app::*; pub use list::*; pub use mic::*; +#[cfg(target_os = "macos")] +pub use zoom::*; + use utils::*; #[derive(Debug, Clone)] pub enum DetectEvent { MicStarted(Vec), MicStopped, + #[cfg(target_os = "macos")] + ZoomMuteStateChanged { + value: bool, + }, } pub type DetectCallback = std::sync::Arc; @@ -32,47 +42,22 @@ trait Observer: Send + Sync { #[derive(Default)] pub struct Detector { mic_detector: MicDetector, + #[cfg(target_os = "macos")] + zoom_watcher: ZoomMuteWatcher, } impl Detector { - #[cfg(target_os = "macos")] - pub fn macos_check_accessibility_permission(&self) -> Result { - let is_trusted = macos_accessibility_client::accessibility::application_is_trusted(); - Ok(is_trusted) - } - - #[cfg(target_os = "macos")] - pub fn macos_request_accessibility_permission(&self) -> Result<(), String> { - macos_accessibility_client::accessibility::application_is_trusted_with_prompt(); - Ok(()) - } - pub fn start(&mut self, f: DetectCallback) { - self.mic_detector.start(f); + self.mic_detector.start(f.clone()); + + #[cfg(target_os = "macos")] + self.zoom_watcher.start(f); } pub fn stop(&mut self) { self.mic_detector.stop(); - } -} - -#[cfg(test)] -mod tests { - use super::*; - #[test] - #[ignore] - #[cfg(target_os = "macos")] - fn test_macos_check_accessibility_permission() { - let detector = Detector::default(); - let is_trusted = detector.macos_check_accessibility_permission(); - assert!(is_trusted.is_ok()); - } - - #[test] - #[ignore] - #[cfg(target_os = "macos")] - fn test_macos_request_accessibility_permission() { - macos_accessibility_client::accessibility::application_is_trusted_with_prompt(); + #[cfg(target_os = "macos")] + self.zoom_watcher.stop(); } } diff --git a/crates/detect/src/zoom.rs b/crates/detect/src/zoom.rs new file mode 100644 index 000000000..7f6b37c7d --- /dev/null +++ b/crates/detect/src/zoom.rs @@ -0,0 +1,162 @@ +use std::process::Command; +use std::time::{Duration, Instant}; + +use crate::{BackgroundTask, DetectCallback, DetectEvent}; + +const ZOOM_BUNDLE_ID: &str = "us.zoom.xos"; + +pub struct ZoomMuteWatcher { + background: BackgroundTask, +} + +impl Default for ZoomMuteWatcher { + fn default() -> Self { + Self { + background: BackgroundTask::default(), + } + } +} + +struct WatcherState { + last_mute_state: Option, + last_check: Instant, + poll_interval: Duration, +} + +impl WatcherState { + fn new() -> Self { + Self { + last_mute_state: None, + last_check: Instant::now(), + poll_interval: Duration::from_millis(1000), + } + } +} + +fn check_zoom_mute_state() -> Option { + let script = r#" +tell application "System Events" + if (get name of every application process) contains "zoom.us" then + tell application process "zoom.us" + if exists (menu item "Mute audio" of menu 1 of menu bar item "Meeting" of menu bar 1) then + return "unmuted" + else if exists (menu item "Unmute audio" of menu 1 of menu bar item "Meeting" of menu bar 1) then + return "muted" + else + return "unknown" + end if + end tell + else + return "not_running" + end if +end tell +"#; + + let output = Command::new("osascript") + .arg("-e") + .arg(script) + .output() + .ok()?; + + if !output.status.success() { + tracing::warn!( + "osascript failed: {:?}", + String::from_utf8_lossy(&output.stderr) + ); + return None; + } + + let result = String::from_utf8_lossy(&output.stdout).trim().to_string(); + + match result.as_str() { + "muted" => Some(true), + "unmuted" => Some(false), + "unknown" => { + tracing::debug!("zoom state unknown (likely not in meeting)"); + None + } + "not_running" => { + tracing::debug!("zoom not running"); + None + } + other => { + tracing::warn!("unexpected osascript output: {}", other); + None + } + } +} + +fn is_zoom_using_mic() -> bool { + let apps = crate::list_mic_using_apps(); + apps.iter().any(|app| app.id == ZOOM_BUNDLE_ID) +} + +impl crate::Observer for ZoomMuteWatcher { + fn start(&mut self, f: DetectCallback) { + if self.background.is_running() { + return; + } + + self.background.start(|running, mut rx| async move { + let mut state = WatcherState::new(); + + loop { + tokio::select! { + _ = &mut rx => { + break; + } + _ = tokio::time::sleep(state.poll_interval) => { + if !running.load(std::sync::atomic::Ordering::SeqCst) { + break; + } + + if !is_zoom_using_mic() { + if state.last_mute_state.is_some() { + tracing::debug!("zoom no longer using mic, clearing state"); + state.last_mute_state = None; + } + continue; + } + + if let Some(muted) = check_zoom_mute_state() { + if state.last_mute_state != Some(muted) { + tracing::info!(muted = muted, "zoom mute state changed"); + state.last_mute_state = Some(muted); + + let event = DetectEvent::ZoomMuteStateChanged { value: muted }; + f(event); + } + } + + state.last_check = Instant::now(); + } + } + } + + tracing::info!("zoom mute watcher stopped"); + }); + } + + fn stop(&mut self) { + self.background.stop(); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + #[ignore] + fn test_check_zoom_mute_state() { + let state = check_zoom_mute_state(); + println!("Zoom mute state: {:?}", state); + } + + #[test] + #[ignore] + fn test_is_zoom_using_mic() { + let result = is_zoom_using_mic(); + println!("Is Zoom using mic: {}", result); + } +} diff --git a/crates/llama/src/lib.rs b/crates/llama/src/lib.rs index 23aaa5464..5669612a8 100644 --- a/crates/llama/src/lib.rs +++ b/crates/llama/src/lib.rs @@ -447,11 +447,6 @@ mod tests { Llama::new(model_path).unwrap() } - #[test] - fn test_tag() { - assert!(hypr_template::ENHANCE_USER_TPL.contains("")); - } - fn get_request() -> LlamaRequest { LlamaRequest { grammar: Some(hypr_gbnf::Grammar::Enhance { sections: None }.build()), diff --git a/plugins/detect/Cargo.toml b/plugins/detect/Cargo.toml index d457a5b48..8ddbe8055 100644 --- a/plugins/detect/Cargo.toml +++ b/plugins/detect/Cargo.toml @@ -15,6 +15,7 @@ specta-typescript = { workspace = true } [dependencies] hypr-detect = { workspace = true } +hypr-host = { workspace = true } hypr-intercept = { workspace = true } tauri = { workspace = true, features = ["specta", "test"] } diff --git a/plugins/detect/js/bindings.gen.ts b/plugins/detect/js/bindings.gen.ts index 10474d857..ef725f6a0 100644 --- a/plugins/detect/js/bindings.gen.ts +++ b/plugins/detect/js/bindings.gen.ts @@ -56,7 +56,7 @@ detectEvent: "plugin:detect:detect-event" /** user-defined types **/ -export type DetectEvent = { type: "micStarted"; apps: InstalledApp[] } | { type: "micStopped" } +export type DetectEvent = { type: "micStarted"; apps: InstalledApp[] } | { type: "micStopped" } | { type: "micMuted"; value: boolean } export type InstalledApp = { id: string; name: string } /** tauri-specta globals **/ diff --git a/plugins/detect/src/commands.rs b/plugins/detect/src/commands.rs index f0a0479fc..843fbe891 100644 --- a/plugins/detect/src/commands.rs +++ b/plugins/detect/src/commands.rs @@ -1,9 +1,21 @@ +use tauri::Manager; + #[tauri::command] #[specta::specta] pub(crate) async fn set_quit_handler( - _app: tauri::AppHandle, + app: tauri::AppHandle, ) -> Result<(), String> { - hypr_intercept::setup_quit_handler(|| true); + hypr_intercept::setup_quit_handler(move || { + for (_, window) in app.webview_windows() { + let _ = window.close(); + } + + let _ = app.set_activation_policy(tauri::ActivationPolicy::Accessory); + hypr_host::kill_processes_by_matcher(hypr_host::ProcessMatcher::Sidecar); + + false + }); + Ok(()) } diff --git a/plugins/detect/src/events.rs b/plugins/detect/src/events.rs index 817f24db2..26d4d4c40 100644 --- a/plugins/detect/src/events.rs +++ b/plugins/detect/src/events.rs @@ -13,6 +13,8 @@ common_event_derives! { MicStarted { apps: Vec }, #[serde(rename = "micStopped")] MicStopped {}, + #[serde(rename = "micMuted")] + MicMuteStateChanged { value: bool }, } } @@ -21,6 +23,10 @@ impl From for DetectEvent { match event { hypr_detect::DetectEvent::MicStarted(apps) => Self::MicStarted { apps }, hypr_detect::DetectEvent::MicStopped => Self::MicStopped {}, + #[cfg(target_os = "macos")] + hypr_detect::DetectEvent::ZoomMuteStateChanged { value } => { + Self::MicMuteStateChanged { value } + } } } } diff --git a/plugins/listener/Cargo.toml b/plugins/listener/Cargo.toml index 6f40bde92..5a71ff253 100644 --- a/plugins/listener/Cargo.toml +++ b/plugins/listener/Cargo.toml @@ -24,14 +24,12 @@ hypr-audio-utils = { workspace = true } hypr-data = { workspace = true } hypr-language = { workspace = true } hypr-llm = { workspace = true } -hypr-tcc = { workspace = true } hypr-vad2 = { workspace = true } owhisper-client = { workspace = true } owhisper-interface = { workspace = true } tauri-plugin-local-stt = { workspace = true } -tauri-plugin-shell = { workspace = true } tauri-plugin-tray = { workspace = true } tauri = { workspace = true, features = ["specta", "test"] } @@ -60,7 +58,3 @@ tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } tokio-stream = { workspace = true } tokio-util = { workspace = true } tracing = { workspace = true } - -[target."cfg(target_os = \"macos\")".dependencies] -block2 = { workspace = true } -objc2-av-foundation = { workspace = true } diff --git a/plugins/listener/build.rs b/plugins/listener/build.rs index 810b6416f..3106f7898 100644 --- a/plugins/listener/build.rs +++ b/plugins/listener/build.rs @@ -2,12 +2,6 @@ const COMMANDS: &[&str] = &[ "list_microphone_devices", "get_current_microphone_device", "set_microphone_device", - "check_microphone_access", - "check_system_audio_access", - "request_microphone_access", - "request_system_audio_access", - "open_microphone_access_settings", - "open_system_audio_access_settings", "get_mic_muted", "set_mic_muted", "get_speaker_muted", diff --git a/plugins/listener/js/bindings.gen.ts b/plugins/listener/js/bindings.gen.ts index c7f3c0f1b..40ca91916 100644 --- a/plugins/listener/js/bindings.gen.ts +++ b/plugins/listener/js/bindings.gen.ts @@ -31,54 +31,6 @@ async setMicrophoneDevice(deviceName: string) : Promise> { else return { status: "error", error: e as any }; } }, -async checkMicrophoneAccess() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|check_microphone_access") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async checkSystemAudioAccess() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|check_system_audio_access") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async requestMicrophoneAccess() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|request_microphone_access") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async requestSystemAudioAccess() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|request_system_audio_access") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openMicrophoneAccessSettings() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|open_microphone_access_settings") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openSystemAudioAccessSettings() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|open_system_audio_access_settings") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, async getMicMuted() : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("plugin:listener|get_mic_muted") }; @@ -156,7 +108,6 @@ export type Alternatives = { transcript: string; words: Word[]; confidence: numb export type Channel = { alternatives: Alternatives[] } export type Metadata = { request_id: string; model_info: ModelInfo; model_uuid: string } export type ModelInfo = { name: string; version: string; arch: string } -export type PermissionStatus = "NeverRequested" | "Denied" | "Authorized" export type SessionEvent = { type: "inactive" } | { type: "running_active" } | { type: "audioAmplitude"; mic: number; speaker: number } | { type: "micMuted"; value: boolean } | { type: "speakerMuted"; value: boolean } | { type: "streamResponse"; response: StreamResponse } export type SessionParams = { session_id: string; languages: string[]; onboarding: boolean; record_enabled: boolean; model: string; base_url: string; api_key: string; keywords: string[] } export type StreamResponse = { type: "Results"; start: number; duration: number; is_final: boolean; speech_final: boolean; from_finalize: boolean; channel: Channel; metadata: Metadata; channel_index: number[] } | { type: "Metadata"; request_id: string; created: string; duration: number; channels: number } | { type: "SpeechStarted"; channel: number[]; timestamp: number } | { type: "UtteranceEnd"; channel: number[]; last_word_end: number } diff --git a/plugins/listener/permissions/autogenerated/commands/check_microphone_access.toml b/plugins/listener/permissions/autogenerated/commands/check_microphone_access.toml deleted file mode 100644 index 1f4289023..000000000 --- a/plugins/listener/permissions/autogenerated/commands/check_microphone_access.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-check-microphone-access" -description = "Enables the check_microphone_access command without any pre-configured scope." -commands.allow = ["check_microphone_access"] - -[[permission]] -identifier = "deny-check-microphone-access" -description = "Denies the check_microphone_access command without any pre-configured scope." -commands.deny = ["check_microphone_access"] diff --git a/plugins/listener/permissions/autogenerated/commands/check_system_audio_access.toml b/plugins/listener/permissions/autogenerated/commands/check_system_audio_access.toml deleted file mode 100644 index c8c46a3c2..000000000 --- a/plugins/listener/permissions/autogenerated/commands/check_system_audio_access.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-check-system-audio-access" -description = "Enables the check_system_audio_access command without any pre-configured scope." -commands.allow = ["check_system_audio_access"] - -[[permission]] -identifier = "deny-check-system-audio-access" -description = "Denies the check_system_audio_access command without any pre-configured scope." -commands.deny = ["check_system_audio_access"] diff --git a/plugins/listener/permissions/autogenerated/commands/open_microphone_access_settings.toml b/plugins/listener/permissions/autogenerated/commands/open_microphone_access_settings.toml deleted file mode 100644 index 2e392a126..000000000 --- a/plugins/listener/permissions/autogenerated/commands/open_microphone_access_settings.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-open-microphone-access-settings" -description = "Enables the open_microphone_access_settings command without any pre-configured scope." -commands.allow = ["open_microphone_access_settings"] - -[[permission]] -identifier = "deny-open-microphone-access-settings" -description = "Denies the open_microphone_access_settings command without any pre-configured scope." -commands.deny = ["open_microphone_access_settings"] diff --git a/plugins/listener/permissions/autogenerated/commands/open_system_audio_access_settings.toml b/plugins/listener/permissions/autogenerated/commands/open_system_audio_access_settings.toml deleted file mode 100644 index bdf41b119..000000000 --- a/plugins/listener/permissions/autogenerated/commands/open_system_audio_access_settings.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-open-system-audio-access-settings" -description = "Enables the open_system_audio_access_settings command without any pre-configured scope." -commands.allow = ["open_system_audio_access_settings"] - -[[permission]] -identifier = "deny-open-system-audio-access-settings" -description = "Denies the open_system_audio_access_settings command without any pre-configured scope." -commands.deny = ["open_system_audio_access_settings"] diff --git a/plugins/listener/permissions/autogenerated/commands/request_microphone_access.toml b/plugins/listener/permissions/autogenerated/commands/request_microphone_access.toml deleted file mode 100644 index 09f966eb1..000000000 --- a/plugins/listener/permissions/autogenerated/commands/request_microphone_access.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-request-microphone-access" -description = "Enables the request_microphone_access command without any pre-configured scope." -commands.allow = ["request_microphone_access"] - -[[permission]] -identifier = "deny-request-microphone-access" -description = "Denies the request_microphone_access command without any pre-configured scope." -commands.deny = ["request_microphone_access"] diff --git a/plugins/listener/permissions/autogenerated/commands/request_system_audio_access.toml b/plugins/listener/permissions/autogenerated/commands/request_system_audio_access.toml deleted file mode 100644 index becb5c7c4..000000000 --- a/plugins/listener/permissions/autogenerated/commands/request_system_audio_access.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-request-system-audio-access" -description = "Enables the request_system_audio_access command without any pre-configured scope." -commands.allow = ["request_system_audio_access"] - -[[permission]] -identifier = "deny-request-system-audio-access" -description = "Denies the request_system_audio_access command without any pre-configured scope." -commands.deny = ["request_system_audio_access"] diff --git a/plugins/listener/permissions/autogenerated/reference.md b/plugins/listener/permissions/autogenerated/reference.md index 38d9579e6..d4e325adf 100644 --- a/plugins/listener/permissions/autogenerated/reference.md +++ b/plugins/listener/permissions/autogenerated/reference.md @@ -7,12 +7,6 @@ Default permissions for the plugin - `allow-list-microphone-devices` - `allow-get-current-microphone-device` - `allow-set-microphone-device` -- `allow-check-microphone-access` -- `allow-check-system-audio-access` -- `allow-request-microphone-access` -- `allow-request-system-audio-access` -- `allow-open-microphone-access-settings` -- `allow-open-system-audio-access-settings` - `allow-start-session` - `allow-stop-session` - `allow-get-mic-muted` @@ -30,58 +24,6 @@ Default permissions for the plugin - - - -`listener:allow-check-microphone-access` - - - - -Enables the check_microphone_access command without any pre-configured scope. - - - - - - - -`listener:deny-check-microphone-access` - - - - -Denies the check_microphone_access command without any pre-configured scope. - - - - - - - -`listener:allow-check-system-audio-access` - - - - -Enables the check_system_audio_access command without any pre-configured scope. - - - - - - - -`listener:deny-check-system-audio-access` - - - - -Denies the check_system_audio_access command without any pre-configured scope. - - - - @@ -241,110 +183,6 @@ Denies the list_microphone_devices command without any pre-configured scope. -`listener:allow-open-microphone-access-settings` - - - - -Enables the open_microphone_access_settings command without any pre-configured scope. - - - - - - - -`listener:deny-open-microphone-access-settings` - - - - -Denies the open_microphone_access_settings command without any pre-configured scope. - - - - - - - -`listener:allow-open-system-audio-access-settings` - - - - -Enables the open_system_audio_access_settings command without any pre-configured scope. - - - - - - - -`listener:deny-open-system-audio-access-settings` - - - - -Denies the open_system_audio_access_settings command without any pre-configured scope. - - - - - - - -`listener:allow-request-microphone-access` - - - - -Enables the request_microphone_access command without any pre-configured scope. - - - - - - - -`listener:deny-request-microphone-access` - - - - -Denies the request_microphone_access command without any pre-configured scope. - - - - - - - -`listener:allow-request-system-audio-access` - - - - -Enables the request_system_audio_access command without any pre-configured scope. - - - - - - - -`listener:deny-request-system-audio-access` - - - - -Denies the request_system_audio_access command without any pre-configured scope. - - - - - - - `listener:allow-set-mic-muted` diff --git a/plugins/listener/permissions/default.toml b/plugins/listener/permissions/default.toml index e46470fa0..10da4082e 100644 --- a/plugins/listener/permissions/default.toml +++ b/plugins/listener/permissions/default.toml @@ -4,12 +4,6 @@ permissions = [ "allow-list-microphone-devices", "allow-get-current-microphone-device", "allow-set-microphone-device", - "allow-check-microphone-access", - "allow-check-system-audio-access", - "allow-request-microphone-access", - "allow-request-system-audio-access", - "allow-open-microphone-access-settings", - "allow-open-system-audio-access-settings", "allow-start-session", "allow-stop-session", "allow-get-mic-muted", diff --git a/plugins/listener/permissions/schemas/schema.json b/plugins/listener/permissions/schemas/schema.json index 41fe9c504..6b04e6e0e 100644 --- a/plugins/listener/permissions/schemas/schema.json +++ b/plugins/listener/permissions/schemas/schema.json @@ -294,30 +294,6 @@ "PermissionKind": { "type": "string", "oneOf": [ - { - "description": "Enables the check_microphone_access command without any pre-configured scope.", - "type": "string", - "const": "allow-check-microphone-access", - "markdownDescription": "Enables the check_microphone_access command without any pre-configured scope." - }, - { - "description": "Denies the check_microphone_access command without any pre-configured scope.", - "type": "string", - "const": "deny-check-microphone-access", - "markdownDescription": "Denies the check_microphone_access command without any pre-configured scope." - }, - { - "description": "Enables the check_system_audio_access command without any pre-configured scope.", - "type": "string", - "const": "allow-check-system-audio-access", - "markdownDescription": "Enables the check_system_audio_access command without any pre-configured scope." - }, - { - "description": "Denies the check_system_audio_access command without any pre-configured scope.", - "type": "string", - "const": "deny-check-system-audio-access", - "markdownDescription": "Denies the check_system_audio_access command without any pre-configured scope." - }, { "description": "Enables the get_current_microphone_device command without any pre-configured scope.", "type": "string", @@ -390,54 +366,6 @@ "const": "deny-list-microphone-devices", "markdownDescription": "Denies the list_microphone_devices command without any pre-configured scope." }, - { - "description": "Enables the open_microphone_access_settings command without any pre-configured scope.", - "type": "string", - "const": "allow-open-microphone-access-settings", - "markdownDescription": "Enables the open_microphone_access_settings command without any pre-configured scope." - }, - { - "description": "Denies the open_microphone_access_settings command without any pre-configured scope.", - "type": "string", - "const": "deny-open-microphone-access-settings", - "markdownDescription": "Denies the open_microphone_access_settings command without any pre-configured scope." - }, - { - "description": "Enables the open_system_audio_access_settings command without any pre-configured scope.", - "type": "string", - "const": "allow-open-system-audio-access-settings", - "markdownDescription": "Enables the open_system_audio_access_settings command without any pre-configured scope." - }, - { - "description": "Denies the open_system_audio_access_settings command without any pre-configured scope.", - "type": "string", - "const": "deny-open-system-audio-access-settings", - "markdownDescription": "Denies the open_system_audio_access_settings command without any pre-configured scope." - }, - { - "description": "Enables the request_microphone_access command without any pre-configured scope.", - "type": "string", - "const": "allow-request-microphone-access", - "markdownDescription": "Enables the request_microphone_access command without any pre-configured scope." - }, - { - "description": "Denies the request_microphone_access command without any pre-configured scope.", - "type": "string", - "const": "deny-request-microphone-access", - "markdownDescription": "Denies the request_microphone_access command without any pre-configured scope." - }, - { - "description": "Enables the request_system_audio_access command without any pre-configured scope.", - "type": "string", - "const": "allow-request-system-audio-access", - "markdownDescription": "Enables the request_system_audio_access command without any pre-configured scope." - }, - { - "description": "Denies the request_system_audio_access command without any pre-configured scope.", - "type": "string", - "const": "deny-request-system-audio-access", - "markdownDescription": "Denies the request_system_audio_access command without any pre-configured scope." - }, { "description": "Enables the set_mic_muted command without any pre-configured scope.", "type": "string", @@ -499,10 +427,10 @@ "markdownDescription": "Denies the stop_session command without any pre-configured scope." }, { - "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-check-microphone-access`\n- `allow-check-system-audio-access`\n- `allow-request-microphone-access`\n- `allow-request-system-audio-access`\n- `allow-open-microphone-access-settings`\n- `allow-open-system-audio-access-settings`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`", + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`", "type": "string", "const": "default", - "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-check-microphone-access`\n- `allow-check-system-audio-access`\n- `allow-request-microphone-access`\n- `allow-request-system-audio-access`\n- `allow-open-microphone-access-settings`\n- `allow-open-system-audio-access-settings`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`" + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`" } ] } diff --git a/plugins/listener/src/commands.rs b/plugins/listener/src/commands.rs index a532cb202..e36cfd71d 100644 --- a/plugins/listener/src/commands.rs +++ b/plugins/listener/src/commands.rs @@ -1,4 +1,4 @@ -use crate::{actors::SessionParams, ListenerPluginExt, PermissionStatus}; +use crate::{actors::SessionParams, ListenerPluginExt}; #[tauri::command] #[specta::specta] @@ -31,66 +31,6 @@ pub async fn set_microphone_device( .map_err(|e| e.to_string()) } -#[tauri::command] -#[specta::specta] -pub async fn check_microphone_access( - app: tauri::AppHandle, -) -> Result { - app.check_microphone_access() - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn check_system_audio_access( - app: tauri::AppHandle, -) -> Result { - app.check_system_audio_access() - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn request_microphone_access( - app: tauri::AppHandle, -) -> Result<(), String> { - app.request_microphone_access() - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn request_system_audio_access( - app: tauri::AppHandle, -) -> Result<(), String> { - app.request_system_audio_access() - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn open_microphone_access_settings( - app: tauri::AppHandle, -) -> Result<(), String> { - app.open_microphone_access_settings() - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn open_system_audio_access_settings( - app: tauri::AppHandle, -) -> Result<(), String> { - app.open_system_audio_access_settings() - .await - .map_err(|e| e.to_string()) -} - #[tauri::command] #[specta::specta] pub async fn get_mic_muted(app: tauri::AppHandle) -> Result { diff --git a/plugins/listener/src/ext.rs b/plugins/listener/src/ext.rs index ae94a606d..8e81a3718 100644 --- a/plugins/listener/src/ext.rs +++ b/plugins/listener/src/ext.rs @@ -1,15 +1,8 @@ use std::future::Future; -use futures_util::StreamExt; use ractor::{call_t, concurrency, registry, Actor, ActorRef}; use tauri_specta::Event; -#[cfg(target_os = "macos")] -use { - block2::StackBlock, - objc2_av_foundation::{AVAuthorizationStatus, AVCaptureDevice, AVMediaTypeAudio}, -}; - use crate::{ actors::{SessionActor, SessionArgs, SessionMsg, SessionParams}, SessionEvent, @@ -25,17 +18,6 @@ pub trait ListenerPluginExt { device_name: impl Into, ) -> impl Future>; - fn check_microphone_access( - &self, - ) -> impl Future>; - fn check_system_audio_access( - &self, - ) -> impl Future>; - fn request_microphone_access(&self) -> impl Future>; - fn request_system_audio_access(&self) -> impl Future>; - fn open_microphone_access_settings(&self) -> impl Future>; - fn open_system_audio_access_settings(&self) -> impl Future>; - fn get_mic_muted(&self) -> impl Future; fn get_speaker_muted(&self) -> impl Future; fn set_mic_muted(&self, muted: bool) -> impl Future; @@ -79,95 +61,6 @@ impl> ListenerPluginExt for T { Ok(()) } - #[tracing::instrument(skip_all)] - async fn check_microphone_access(&self) -> Result { - #[cfg(target_os = "macos")] - { - let status = unsafe { - let media_type = AVMediaTypeAudio.unwrap(); - AVCaptureDevice::authorizationStatusForMediaType(media_type) - }; - - tracing::info!(status = ?status, "microphone_permission_check"); - Ok(status.into()) - } - - #[cfg(not(target_os = "macos"))] - { - let mut mic_sample_stream = hypr_audio::AudioInput::from_mic(None).unwrap().stream(); - let sample = mic_sample_stream.next().await; - Ok(sample.is_some()) - } - } - - #[tracing::instrument(skip_all)] - async fn check_system_audio_access(&self) -> Result { - let status = hypr_tcc::audio_capture_permission_status(); - tracing::info!(status = status, "system_audio_permission_check"); - Ok(status.into()) - } - - #[tracing::instrument(skip_all)] - async fn request_microphone_access(&self) -> Result<(), crate::Error> { - #[cfg(target_os = "macos")] - { - unsafe { - let media_type = AVMediaTypeAudio.unwrap(); - let block = StackBlock::new(|_granted| {}); - AVCaptureDevice::requestAccessForMediaType_completionHandler(media_type, &block); - } - } - - #[cfg(not(target_os = "macos"))] - { - let mut mic_sample_stream = hypr_audio::AudioInput::from_mic(None).unwrap().stream(); - mic_sample_stream.next().await; - } - - Ok(()) - } - - #[tracing::instrument(skip_all)] - async fn request_system_audio_access(&self) -> Result<(), crate::Error> { - { - use tauri_plugin_shell::ShellExt; - - let bundle_id = self.config().identifier.clone(); - self.app_handle() - .shell() - .command("tccutil") - .args(["reset", "AudioCapture", &bundle_id]) - .spawn() - .ok(); - } - - let stop = hypr_audio::AudioOutput::silence(); - - let mut speaker_sample_stream = hypr_audio::AudioInput::from_speaker().stream(); - speaker_sample_stream.next().await; - - let _ = stop.send(()); - Ok(()) - } - - #[tracing::instrument(skip_all)] - async fn open_microphone_access_settings(&self) -> Result<(), crate::Error> { - std::process::Command::new("open") - .arg("x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone") - .spawn()? - .wait()?; - Ok(()) - } - - #[tracing::instrument(skip_all)] - async fn open_system_audio_access_settings(&self) -> Result<(), crate::Error> { - std::process::Command::new("open") - .arg("x-apple.systempreferences:com.apple.preference.security?Privacy_AudioCapture") - .spawn()? - .wait()?; - Ok(()) - } - #[tracing::instrument(skip_all)] async fn get_state(&self) -> crate::fsm::State { if let Some(_) = registry::where_is(SessionActor::name()) { @@ -253,30 +146,3 @@ impl> ListenerPluginExt for T { } } } - -#[derive(Debug, serde::Serialize, serde::Deserialize, specta::Type)] -pub enum PermissionStatus { - NeverRequested, - Denied, - Authorized, -} - -impl From for PermissionStatus { - fn from(status: isize) -> Self { - match status { - hypr_tcc::GRANTED => Self::Authorized, - hypr_tcc::NEVER_ASKED => Self::NeverRequested, - _ => Self::Denied, - } - } -} - -impl From for PermissionStatus { - fn from(status: AVAuthorizationStatus) -> Self { - match status { - AVAuthorizationStatus::NotDetermined => Self::NeverRequested, - AVAuthorizationStatus::Authorized => Self::Authorized, - _ => Self::Denied, - } - } -} diff --git a/plugins/listener/src/lib.rs b/plugins/listener/src/lib.rs index 52244a3fb..21776ac6b 100644 --- a/plugins/listener/src/lib.rs +++ b/plugins/listener/src/lib.rs @@ -37,12 +37,6 @@ fn make_specta_builder() -> tauri_specta::Builder { commands::list_microphone_devices::, commands::get_current_microphone_device::, commands::set_microphone_device::, - commands::check_microphone_access::, - commands::check_system_audio_access::, - commands::request_microphone_access::, - commands::request_system_audio_access::, - commands::open_microphone_access_settings::, - commands::open_system_audio_access_settings::, commands::get_mic_muted::, commands::set_mic_muted::, commands::get_speaker_muted::, diff --git a/plugins/local-llm/build.rs b/plugins/local-llm/build.rs index 2b40c5401..f5ff80785 100644 --- a/plugins/local-llm/build.rs +++ b/plugins/local-llm/build.rs @@ -14,8 +14,6 @@ const COMMANDS: &[&str] = &[ "list_custom_models", "get_current_model_selection", "set_current_model_selection", - "generate_title", - "generate_tags", ]; fn main() { diff --git a/plugins/local-llm/js/bindings.gen.ts b/plugins/local-llm/js/bindings.gen.ts index 0720eedd6..71f488a89 100644 --- a/plugins/local-llm/js/bindings.gen.ts +++ b/plugins/local-llm/js/bindings.gen.ts @@ -7,56 +7,120 @@ export const commands = { -async modelsDir() : Promise { - return await TAURI_INVOKE("plugin:local-llm|models_dir"); +async modelsDir() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|models_dir") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async listSupportedModel() : Promise { - return await TAURI_INVOKE("plugin:local-llm|list_supported_model"); +async listSupportedModel() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|list_supported_model") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, async isServerRunning() : Promise { return await TAURI_INVOKE("plugin:local-llm|is_server_running"); }, -async isModelDownloaded(model: SupportedModel) : Promise { - return await TAURI_INVOKE("plugin:local-llm|is_model_downloaded", { model }); -}, -async isModelDownloading(model: SupportedModel) : Promise { - return await TAURI_INVOKE("plugin:local-llm|is_model_downloading", { model }); -}, -async downloadModel(model: SupportedModel, channel: TAURI_CHANNEL) : Promise { - return await TAURI_INVOKE("plugin:local-llm|download_model", { model, channel }); +async isModelDownloaded(model: SupportedModel) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|is_model_downloaded", { model }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async startServer() : Promise { - return await TAURI_INVOKE("plugin:local-llm|start_server"); +async isModelDownloading(model: SupportedModel) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|is_model_downloading", { model }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async stopServer() : Promise { - return await TAURI_INVOKE("plugin:local-llm|stop_server"); +async downloadModel(model: SupportedModel, channel: TAURI_CHANNEL) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|download_model", { model, channel }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async restartServer() : Promise { - return await TAURI_INVOKE("plugin:local-llm|restart_server"); +async startServer() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|start_server") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async getCurrentModel() : Promise { - return await TAURI_INVOKE("plugin:local-llm|get_current_model"); +async stopServer() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|stop_server") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async setCurrentModel(model: SupportedModel) : Promise { - return await TAURI_INVOKE("plugin:local-llm|set_current_model", { model }); +async restartServer() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|restart_server") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async listDownloadedModel() : Promise { - return await TAURI_INVOKE("plugin:local-llm|list_downloaded_model"); +async getCurrentModel() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|get_current_model") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async listCustomModels() : Promise { - return await TAURI_INVOKE("plugin:local-llm|list_custom_models"); +async setCurrentModel(model: SupportedModel) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|set_current_model", { model }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async getCurrentModelSelection() : Promise { - return await TAURI_INVOKE("plugin:local-llm|get_current_model_selection"); +async listDownloadedModel() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|list_downloaded_model") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async setCurrentModelSelection(model: ModelSelection) : Promise { - return await TAURI_INVOKE("plugin:local-llm|set_current_model_selection", { model }); +async listCustomModels() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|list_custom_models") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async generateTitle(ctx: Partial<{ [key in string]: JsonValue }>) : Promise { - return await TAURI_INVOKE("plugin:local-llm|generate_title", { ctx }); +async getCurrentModelSelection() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|get_current_model_selection") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} }, -async generateTags(ctx: Partial<{ [key in string]: JsonValue }>) : Promise { - return await TAURI_INVOKE("plugin:local-llm|generate_tags", { ctx }); +async setCurrentModelSelection(model: ModelSelection) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:local-llm|set_current_model_selection", { model }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} } } @@ -76,7 +140,6 @@ llmEvent: "plugin:local-llm:llm-event" /** user-defined types **/ export type CustomModelInfo = { path: string; name: string } -export type JsonValue = null | boolean | number | string | JsonValue[] | Partial<{ [key in string]: JsonValue }> export type LLMEvent = { progress: number } export type ModelInfo = { key: SupportedModel; name: string; description: string; size_bytes: number } export type ModelSelection = { type: "Predefined"; content: { key: SupportedModel } } | { type: "Custom"; content: { path: string } } diff --git a/plugins/local-llm/permissions/autogenerated/commands/generate_tags.toml b/plugins/local-llm/permissions/autogenerated/commands/generate_tags.toml deleted file mode 100644 index 7726575b6..000000000 --- a/plugins/local-llm/permissions/autogenerated/commands/generate_tags.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-generate-tags" -description = "Enables the generate_tags command without any pre-configured scope." -commands.allow = ["generate_tags"] - -[[permission]] -identifier = "deny-generate-tags" -description = "Denies the generate_tags command without any pre-configured scope." -commands.deny = ["generate_tags"] diff --git a/plugins/local-llm/permissions/autogenerated/commands/generate_title.toml b/plugins/local-llm/permissions/autogenerated/commands/generate_title.toml deleted file mode 100644 index 50dd8e023..000000000 --- a/plugins/local-llm/permissions/autogenerated/commands/generate_title.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-generate-title" -description = "Enables the generate_title command without any pre-configured scope." -commands.allow = ["generate_title"] - -[[permission]] -identifier = "deny-generate-title" -description = "Denies the generate_title command without any pre-configured scope." -commands.deny = ["generate_title"] diff --git a/plugins/local-llm/permissions/autogenerated/reference.md b/plugins/local-llm/permissions/autogenerated/reference.md index 72d7004c9..0cec420fc 100644 --- a/plugins/local-llm/permissions/autogenerated/reference.md +++ b/plugins/local-llm/permissions/autogenerated/reference.md @@ -19,7 +19,6 @@ Default permissions for the plugin - `allow-list-custom-models` - `allow-get-current-model-selection` - `allow-set-current-model-selection` -- `allow-generate-title` ## Permission Table @@ -59,58 +58,6 @@ Denies the download_model command without any pre-configured scope. -`local-llm:allow-generate-tags` - - - - -Enables the generate_tags command without any pre-configured scope. - - - - - - - -`local-llm:deny-generate-tags` - - - - -Denies the generate_tags command without any pre-configured scope. - - - - - - - -`local-llm:allow-generate-title` - - - - -Enables the generate_title command without any pre-configured scope. - - - - - - - -`local-llm:deny-generate-title` - - - - -Denies the generate_title command without any pre-configured scope. - - - - - - - `local-llm:allow-get-current-model` diff --git a/plugins/local-llm/permissions/default.toml b/plugins/local-llm/permissions/default.toml index 742a7bc1d..eb58684d8 100644 --- a/plugins/local-llm/permissions/default.toml +++ b/plugins/local-llm/permissions/default.toml @@ -16,5 +16,4 @@ permissions = [ "allow-list-custom-models", "allow-get-current-model-selection", "allow-set-current-model-selection", - "allow-generate-title", ] diff --git a/plugins/local-llm/permissions/schemas/schema.json b/plugins/local-llm/permissions/schemas/schema.json index 9c327ed0d..5ef4923f8 100644 --- a/plugins/local-llm/permissions/schemas/schema.json +++ b/plugins/local-llm/permissions/schemas/schema.json @@ -306,30 +306,6 @@ "const": "deny-download-model", "markdownDescription": "Denies the download_model command without any pre-configured scope." }, - { - "description": "Enables the generate_tags command without any pre-configured scope.", - "type": "string", - "const": "allow-generate-tags", - "markdownDescription": "Enables the generate_tags command without any pre-configured scope." - }, - { - "description": "Denies the generate_tags command without any pre-configured scope.", - "type": "string", - "const": "deny-generate-tags", - "markdownDescription": "Denies the generate_tags command without any pre-configured scope." - }, - { - "description": "Enables the generate_title command without any pre-configured scope.", - "type": "string", - "const": "allow-generate-title", - "markdownDescription": "Enables the generate_title command without any pre-configured scope." - }, - { - "description": "Denies the generate_title command without any pre-configured scope.", - "type": "string", - "const": "deny-generate-title", - "markdownDescription": "Denies the generate_title command without any pre-configured scope." - }, { "description": "Enables the get_current_model command without any pre-configured scope.", "type": "string", @@ -511,10 +487,10 @@ "markdownDescription": "Denies the stop_server command without any pre-configured scope." }, { - "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-models-dir`\n- `allow-is-server-running`\n- `allow-is-model-downloading`\n- `allow-is-model-downloaded`\n- `allow-download-model`\n- `allow-start-server`\n- `allow-stop-server`\n- `allow-restart-server`\n- `allow-get-current-model`\n- `allow-set-current-model`\n- `allow-list-downloaded-model`\n- `allow-list-supported-model`\n- `allow-list-custom-models`\n- `allow-get-current-model-selection`\n- `allow-set-current-model-selection`\n- `allow-generate-title`", + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-models-dir`\n- `allow-is-server-running`\n- `allow-is-model-downloading`\n- `allow-is-model-downloaded`\n- `allow-download-model`\n- `allow-start-server`\n- `allow-stop-server`\n- `allow-restart-server`\n- `allow-get-current-model`\n- `allow-set-current-model`\n- `allow-list-downloaded-model`\n- `allow-list-supported-model`\n- `allow-list-custom-models`\n- `allow-get-current-model-selection`\n- `allow-set-current-model-selection`", "type": "string", "const": "default", - "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-models-dir`\n- `allow-is-server-running`\n- `allow-is-model-downloading`\n- `allow-is-model-downloaded`\n- `allow-download-model`\n- `allow-start-server`\n- `allow-stop-server`\n- `allow-restart-server`\n- `allow-get-current-model`\n- `allow-set-current-model`\n- `allow-list-downloaded-model`\n- `allow-list-supported-model`\n- `allow-list-custom-models`\n- `allow-get-current-model-selection`\n- `allow-set-current-model-selection`\n- `allow-generate-title`" + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-models-dir`\n- `allow-is-server-running`\n- `allow-is-model-downloading`\n- `allow-is-model-downloaded`\n- `allow-download-model`\n- `allow-start-server`\n- `allow-stop-server`\n- `allow-restart-server`\n- `allow-get-current-model`\n- `allow-set-current-model`\n- `allow-list-downloaded-model`\n- `allow-list-supported-model`\n- `allow-list-custom-models`\n- `allow-get-current-model-selection`\n- `allow-set-current-model-selection`" } ] } diff --git a/plugins/local-llm/src/commands.rs b/plugins/local-llm/src/commands.rs index 67870bb18..83d5be791 100644 --- a/plugins/local-llm/src/commands.rs +++ b/plugins/local-llm/src/commands.rs @@ -1,6 +1,4 @@ -use crate::{ - CustomModelInfo, LocalLlmPluginExt, LocalLlmTaskExt, ModelInfo, ModelSelection, SupportedModel, -}; +use crate::{CustomModelInfo, LocalLlmPluginExt, ModelInfo, ModelSelection, SupportedModel}; use tauri::ipc::Channel; @@ -142,21 +140,3 @@ pub async fn set_current_model_selection( app.set_current_model_selection(model) .map_err(|e| e.to_string()) } - -#[tauri::command] -#[specta::specta] -pub async fn generate_title( - app: tauri::AppHandle, - ctx: serde_json::Map, -) -> Result { - app.generate_title(ctx).await.map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -pub async fn generate_tags( - app: tauri::AppHandle, - ctx: serde_json::Map, -) -> Result, String> { - app.generate_tags(ctx).await.map_err(|e| e.to_string()) -} diff --git a/plugins/local-llm/src/events.rs b/plugins/local-llm/src/events.rs index 49ef08f29..bdd044e7a 100644 --- a/plugins/local-llm/src/events.rs +++ b/plugins/local-llm/src/events.rs @@ -1,38 +1,3 @@ -#[cfg(feature = "tauri-plugin-windows")] -use tauri_plugin_windows::AppWindow; - -pub fn on_event(app: &tauri::AppHandle, event: &tauri::RunEvent) { - match event { - #[cfg(feature = "tauri-plugin-windows")] - tauri::RunEvent::WindowEvent { label, event, .. } => { - let hypr_window = match label.parse::() { - Ok(window) => window, - Err(e) => { - tracing::warn!("parse_error: {:?}", e); - return; - } - }; - - if hypr_window != AppWindow::Main { - return; - } - - match event { - tauri::WindowEvent::Focused(true) => { - tokio::task::block_in_place(|| { - tokio::runtime::Handle::current().block_on(async { - use crate::LocalLlmPluginExt; - let _ = app.start_server().await; - }); - }); - } - _ => {} - } - } - _ => {} - } -} - #[derive(serde::Serialize, Clone, specta::Type, tauri_specta::Event)] pub enum LLMEvent { #[serde(rename = "progress")] diff --git a/plugins/local-llm/src/ext/mod.rs b/plugins/local-llm/src/ext/mod.rs index 04286dc9e..a86663527 100644 --- a/plugins/local-llm/src/ext/mod.rs +++ b/plugins/local-llm/src/ext/mod.rs @@ -1,5 +1,2 @@ mod plugin; pub use plugin::*; - -mod task; -pub use task::*; diff --git a/plugins/local-llm/src/ext/task.rs b/plugins/local-llm/src/ext/task.rs deleted file mode 100644 index e8617878f..000000000 --- a/plugins/local-llm/src/ext/task.rs +++ /dev/null @@ -1,51 +0,0 @@ -use std::future::Future; -use tauri::{Manager, Runtime}; - -pub trait LocalLlmTaskExt { - fn generate_title( - &self, - ctx: serde_json::Map, - ) -> impl Future>; - - fn generate_tags( - &self, - ctx: serde_json::Map, - ) -> impl Future, crate::Error>>; - - fn postprocess_transcript( - &self, - ctx: serde_json::Map, - ) -> impl Future>; -} - -impl> LocalLlmTaskExt for T { - async fn generate_title( - &self, - ctx: serde_json::Map, - ) -> Result { - let state = self.state::(); - let s = state.lock().await; - let v = hypr_llm::generate_title(&s.builtin_model, ctx).await?; - Ok(v) - } - - async fn generate_tags( - &self, - ctx: serde_json::Map, - ) -> Result, crate::Error> { - let state = self.state::(); - let s = state.lock().await; - let v = hypr_llm::generate_tags(&s.builtin_model, ctx).await?; - Ok(v) - } - - async fn postprocess_transcript( - &self, - ctx: serde_json::Map, - ) -> Result { - let state = self.state::(); - let s = state.lock().await; - let v = hypr_llm::postprocess_transcript(&s.builtin_model, ctx).await?; - Ok(v) - } -} diff --git a/plugins/local-llm/src/lib.rs b/plugins/local-llm/src/lib.rs index 71b404a8a..51eb8663c 100644 --- a/plugins/local-llm/src/lib.rs +++ b/plugins/local-llm/src/lib.rs @@ -57,8 +57,6 @@ fn make_specta_builder() -> tauri_specta::Builder { commands::list_custom_models::, commands::get_current_model_selection::, commands::set_current_model_selection::, - commands::generate_title::, - commands::generate_tags::, ]) .error_handling(tauri_specta::ErrorHandlingMode::Result) } @@ -108,7 +106,6 @@ pub fn init() -> tauri::plugin::TauriPlugin { Ok(()) }) - .on_event(on_event) .build() } diff --git a/plugins/permissions/.gitignore b/plugins/permissions/.gitignore new file mode 100644 index 000000000..50d8e32e8 --- /dev/null +++ b/plugins/permissions/.gitignore @@ -0,0 +1,17 @@ +/.vs +.DS_Store +.Thumbs.db +*.sublime* +.idea/ +debug.log +package-lock.json +.vscode/settings.json +yarn.lock + +/.tauri +/target +Cargo.lock +node_modules/ + +dist-js +dist diff --git a/plugins/permissions/Cargo.toml b/plugins/permissions/Cargo.toml new file mode 100644 index 000000000..ffae6dbb1 --- /dev/null +++ b/plugins/permissions/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "tauri-plugin-permissions" +version = "0.1.0" +authors = [ "You" ] +description = "" +edition = "2021" +rust-version = "1.77.2" +exclude = ["/examples", "/dist-js", "/guest-js", "/node_modules"] +links = "tauri-plugin-permissions" + +[build-dependencies] +tauri-plugin = { workspace = true, features = ["build"] } + +[dev-dependencies] +specta-typescript = { workspace = true } + +[dependencies] +hypr-audio = { workspace = true } +hypr-tcc = { workspace = true } + +tauri = { workspace = true, features = ["specta", "test"] } +tauri-plugin-shell = { workspace = true } + +specta = { workspace = true } +tauri-specta = { workspace = true, features = ["derive", "typescript"] } + +serde = { workspace = true } +thiserror = { workspace = true } +futures-util = { workspace = true } + +[target."cfg(target_os = \"macos\")".dependencies] +block2 = { workspace = true } +objc2-av-foundation = { workspace = true } +macos-accessibility-client = "0.0.1" diff --git a/plugins/permissions/build.rs b/plugins/permissions/build.rs new file mode 100644 index 000000000..2e08e7298 --- /dev/null +++ b/plugins/permissions/build.rs @@ -0,0 +1,12 @@ +const COMMANDS: &[&str] = &[ + "check_microphone_permission", + "request_microphone_permission", + "check_system_audio_permission", + "request_system_audio_permission", + "check_accessibility_permission", + "request_accessibility_permission", +]; + +fn main() { + tauri_plugin::Builder::new(COMMANDS).build(); +} diff --git a/plugins/permissions/js/bindings.gen.ts b/plugins/permissions/js/bindings.gen.ts new file mode 100644 index 000000000..c7b8b90c7 --- /dev/null +++ b/plugins/permissions/js/bindings.gen.ts @@ -0,0 +1,130 @@ +// @ts-nocheck + + +// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. + +/** user-defined commands **/ + + +export const commands = { +async checkMicrophonePermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_microphone_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async requestMicrophonePermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_microphone_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async checkSystemAudioPermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_system_audio_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async requestSystemAudioPermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_system_audio_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async checkAccessibilityPermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_accessibility_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async requestAccessibilityPermission() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_accessibility_permission") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +} +} + +/** user-defined events **/ + + + +/** user-defined constants **/ + + + +/** user-defined types **/ + +export type PermissionStatus = "neverRequested" | "denied" | "authorized" + +/** tauri-specta globals **/ + +import { + invoke as TAURI_INVOKE, + Channel as TAURI_CHANNEL, +} from "@tauri-apps/api/core"; +import * as TAURI_API_EVENT from "@tauri-apps/api/event"; +import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; + +type __EventObj__ = { + listen: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + once: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + emit: null extends T + ? (payload?: T) => ReturnType + : (payload: T) => ReturnType; +}; + +export type Result = + | { status: "ok"; data: T } + | { status: "error"; error: E }; + +function __makeEvents__>( + mappings: Record, +) { + return new Proxy( + {} as unknown as { + [K in keyof T]: __EventObj__ & { + (handle: __WebviewWindow__): __EventObj__; + }; + }, + { + get: (_, event) => { + const name = mappings[event as keyof T]; + + return new Proxy((() => {}) as any, { + apply: (_, __, [window]: [__WebviewWindow__]) => ({ + listen: (arg: any) => window.listen(name, arg), + once: (arg: any) => window.once(name, arg), + emit: (arg: any) => window.emit(name, arg), + }), + get: (_, command: keyof __EventObj__) => { + switch (command) { + case "listen": + return (arg: any) => TAURI_API_EVENT.listen(name, arg); + case "once": + return (arg: any) => TAURI_API_EVENT.once(name, arg); + case "emit": + return (arg: any) => TAURI_API_EVENT.emit(name, arg); + } + }, + }); + }, + }, + ); +} diff --git a/plugins/permissions/js/index.ts b/plugins/permissions/js/index.ts new file mode 100644 index 000000000..c1e919e03 --- /dev/null +++ b/plugins/permissions/js/index.ts @@ -0,0 +1 @@ +export * from './bindings.gen'; \ No newline at end of file diff --git a/plugins/permissions/package.json b/plugins/permissions/package.json new file mode 100644 index 000000000..88e0e8d70 --- /dev/null +++ b/plugins/permissions/package.json @@ -0,0 +1,11 @@ +{ + "name": "@hypr/plugin-permissions", + "private": true, + "main": "./js/index.ts", + "scripts": { + "codegen": "cargo test -p tauri-plugin-permissions" + }, + "dependencies": { + "@tauri-apps/api": "^2.9.0" + } +} diff --git a/plugins/permissions/permissions/autogenerated/commands/check_accessibility_permission.toml b/plugins/permissions/permissions/autogenerated/commands/check_accessibility_permission.toml new file mode 100644 index 000000000..0eea690fd --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/check_accessibility_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-check-accessibility-permission" +description = "Enables the check_accessibility_permission command without any pre-configured scope." +commands.allow = ["check_accessibility_permission"] + +[[permission]] +identifier = "deny-check-accessibility-permission" +description = "Denies the check_accessibility_permission command without any pre-configured scope." +commands.deny = ["check_accessibility_permission"] diff --git a/plugins/permissions/permissions/autogenerated/commands/check_microphone_permission.toml b/plugins/permissions/permissions/autogenerated/commands/check_microphone_permission.toml new file mode 100644 index 000000000..6c75a57f5 --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/check_microphone_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-check-microphone-permission" +description = "Enables the check_microphone_permission command without any pre-configured scope." +commands.allow = ["check_microphone_permission"] + +[[permission]] +identifier = "deny-check-microphone-permission" +description = "Denies the check_microphone_permission command without any pre-configured scope." +commands.deny = ["check_microphone_permission"] diff --git a/plugins/permissions/permissions/autogenerated/commands/check_system_audio_permission.toml b/plugins/permissions/permissions/autogenerated/commands/check_system_audio_permission.toml new file mode 100644 index 000000000..a0f4a9820 --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/check_system_audio_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-check-system-audio-permission" +description = "Enables the check_system_audio_permission command without any pre-configured scope." +commands.allow = ["check_system_audio_permission"] + +[[permission]] +identifier = "deny-check-system-audio-permission" +description = "Denies the check_system_audio_permission command without any pre-configured scope." +commands.deny = ["check_system_audio_permission"] diff --git a/plugins/permissions/permissions/autogenerated/commands/request_accessibility_permission.toml b/plugins/permissions/permissions/autogenerated/commands/request_accessibility_permission.toml new file mode 100644 index 000000000..d26437c4f --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/request_accessibility_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-request-accessibility-permission" +description = "Enables the request_accessibility_permission command without any pre-configured scope." +commands.allow = ["request_accessibility_permission"] + +[[permission]] +identifier = "deny-request-accessibility-permission" +description = "Denies the request_accessibility_permission command without any pre-configured scope." +commands.deny = ["request_accessibility_permission"] diff --git a/plugins/permissions/permissions/autogenerated/commands/request_microphone_permission.toml b/plugins/permissions/permissions/autogenerated/commands/request_microphone_permission.toml new file mode 100644 index 000000000..b4770acb9 --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/request_microphone_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-request-microphone-permission" +description = "Enables the request_microphone_permission command without any pre-configured scope." +commands.allow = ["request_microphone_permission"] + +[[permission]] +identifier = "deny-request-microphone-permission" +description = "Denies the request_microphone_permission command without any pre-configured scope." +commands.deny = ["request_microphone_permission"] diff --git a/plugins/permissions/permissions/autogenerated/commands/request_system_audio_permission.toml b/plugins/permissions/permissions/autogenerated/commands/request_system_audio_permission.toml new file mode 100644 index 000000000..1ea16337f --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/commands/request_system_audio_permission.toml @@ -0,0 +1,13 @@ +# Automatically generated - DO NOT EDIT! + +"$schema" = "../../schemas/schema.json" + +[[permission]] +identifier = "allow-request-system-audio-permission" +description = "Enables the request_system_audio_permission command without any pre-configured scope." +commands.allow = ["request_system_audio_permission"] + +[[permission]] +identifier = "deny-request-system-audio-permission" +description = "Denies the request_system_audio_permission command without any pre-configured scope." +commands.deny = ["request_system_audio_permission"] diff --git a/plugins/permissions/permissions/autogenerated/reference.md b/plugins/permissions/permissions/autogenerated/reference.md new file mode 100644 index 000000000..bb7997589 --- /dev/null +++ b/plugins/permissions/permissions/autogenerated/reference.md @@ -0,0 +1,178 @@ +## Default Permission + +Default permissions for the plugin + +#### This default permission set includes the following: + +- `allow-check-microphone-permission` +- `allow-request-microphone-permission` +- `allow-check-system-audio-permission` +- `allow-request-system-audio-permission` +- `allow-check-accessibility-permission` +- `allow-request-accessibility-permission` + +## Permission Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentifierDescription
+ +`permissions:allow-check-accessibility-permission` + + + +Enables the check_accessibility_permission command without any pre-configured scope. + +
+ +`permissions:deny-check-accessibility-permission` + + + +Denies the check_accessibility_permission command without any pre-configured scope. + +
+ +`permissions:allow-check-microphone-permission` + + + +Enables the check_microphone_permission command without any pre-configured scope. + +
+ +`permissions:deny-check-microphone-permission` + + + +Denies the check_microphone_permission command without any pre-configured scope. + +
+ +`permissions:allow-check-system-audio-permission` + + + +Enables the check_system_audio_permission command without any pre-configured scope. + +
+ +`permissions:deny-check-system-audio-permission` + + + +Denies the check_system_audio_permission command without any pre-configured scope. + +
+ +`permissions:allow-request-accessibility-permission` + + + +Enables the request_accessibility_permission command without any pre-configured scope. + +
+ +`permissions:deny-request-accessibility-permission` + + + +Denies the request_accessibility_permission command without any pre-configured scope. + +
+ +`permissions:allow-request-microphone-permission` + + + +Enables the request_microphone_permission command without any pre-configured scope. + +
+ +`permissions:deny-request-microphone-permission` + + + +Denies the request_microphone_permission command without any pre-configured scope. + +
+ +`permissions:allow-request-system-audio-permission` + + + +Enables the request_system_audio_permission command without any pre-configured scope. + +
+ +`permissions:deny-request-system-audio-permission` + + + +Denies the request_system_audio_permission command without any pre-configured scope. + +
diff --git a/plugins/permissions/permissions/default.toml b/plugins/permissions/permissions/default.toml new file mode 100644 index 000000000..155901d40 --- /dev/null +++ b/plugins/permissions/permissions/default.toml @@ -0,0 +1,10 @@ +[default] +description = "Default permissions for the plugin" +permissions = [ + "allow-check-microphone-permission", + "allow-request-microphone-permission", + "allow-check-system-audio-permission", + "allow-request-system-audio-permission", + "allow-check-accessibility-permission", + "allow-request-accessibility-permission", +] diff --git a/plugins/permissions/permissions/schemas/schema.json b/plugins/permissions/permissions/schemas/schema.json new file mode 100644 index 000000000..0252121c6 --- /dev/null +++ b/plugins/permissions/permissions/schemas/schema.json @@ -0,0 +1,378 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PermissionFile", + "description": "Permission file that can define a default permission, a set of permissions or a list of inlined permissions.", + "type": "object", + "properties": { + "default": { + "description": "The default permission set for the plugin", + "anyOf": [ + { + "$ref": "#/definitions/DefaultPermission" + }, + { + "type": "null" + } + ] + }, + "set": { + "description": "A list of permissions sets defined", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionSet" + } + }, + "permission": { + "description": "A list of inlined permissions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } + } + }, + "definitions": { + "DefaultPermission": { + "description": "The default permission set of the plugin.\n\nWorks similarly to a permission with the \"default\" identifier.", + "type": "object", + "required": [ + "permissions" + ], + "properties": { + "version": { + "description": "The version of the permission.", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "minimum": 1.0 + }, + "description": { + "description": "Human-readable description of what the permission does. Tauri convention is to use `

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

` headings in markdown content for Tauri documentation generation purposes.", + "type": [ + "string", + "null" + ] + }, + "commands": { + "description": "Allowed or denied commands when using this permission.", + "default": { + "allow": [], + "deny": [] + }, + "allOf": [ + { + "$ref": "#/definitions/Commands" + } + ] + }, + "scope": { + "description": "Allowed or denied scoped when using this permission.", + "allOf": [ + { + "$ref": "#/definitions/Scopes" + } + ] + }, + "platforms": { + "description": "Target platforms this permission applies. By default all platforms are affected by this permission.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "Commands": { + "description": "Allowed and denied commands inside a permission.\n\nIf two commands clash inside of `allow` and `deny`, it should be denied by default.", + "type": "object", + "properties": { + "allow": { + "description": "Allowed command.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "deny": { + "description": "Denied command, which takes priority.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Scopes": { + "description": "An argument for fine grained behavior control of Tauri commands.\n\nIt can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command. The configured scope is passed to the command and will be enforced by the command implementation.\n\n## Example\n\n```json { \"allow\": [{ \"path\": \"$HOME/**\" }], \"deny\": [{ \"path\": \"$HOME/secret.txt\" }] } ```", + "type": "object", + "properties": { + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + }, + "PermissionKind": { + "type": "string", + "oneOf": [ + { + "description": "Enables the check_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-check-accessibility-permission", + "markdownDescription": "Enables the check_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Denies the check_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-check-accessibility-permission", + "markdownDescription": "Denies the check_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Enables the check_microphone_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-check-microphone-permission", + "markdownDescription": "Enables the check_microphone_permission command without any pre-configured scope." + }, + { + "description": "Denies the check_microphone_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-check-microphone-permission", + "markdownDescription": "Denies the check_microphone_permission command without any pre-configured scope." + }, + { + "description": "Enables the check_system_audio_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-check-system-audio-permission", + "markdownDescription": "Enables the check_system_audio_permission command without any pre-configured scope." + }, + { + "description": "Denies the check_system_audio_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-check-system-audio-permission", + "markdownDescription": "Denies the check_system_audio_permission command without any pre-configured scope." + }, + { + "description": "Enables the request_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-request-accessibility-permission", + "markdownDescription": "Enables the request_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Denies the request_accessibility_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-request-accessibility-permission", + "markdownDescription": "Denies the request_accessibility_permission command without any pre-configured scope." + }, + { + "description": "Enables the request_microphone_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-request-microphone-permission", + "markdownDescription": "Enables the request_microphone_permission command without any pre-configured scope." + }, + { + "description": "Denies the request_microphone_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-request-microphone-permission", + "markdownDescription": "Denies the request_microphone_permission command without any pre-configured scope." + }, + { + "description": "Enables the request_system_audio_permission command without any pre-configured scope.", + "type": "string", + "const": "allow-request-system-audio-permission", + "markdownDescription": "Enables the request_system_audio_permission command without any pre-configured scope." + }, + { + "description": "Denies the request_system_audio_permission command without any pre-configured scope.", + "type": "string", + "const": "deny-request-system-audio-permission", + "markdownDescription": "Denies the request_system_audio_permission command without any pre-configured scope." + }, + { + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-microphone-permission`\n- `allow-request-microphone-permission`\n- `allow-check-system-audio-permission`\n- `allow-request-system-audio-permission`\n- `allow-check-accessibility-permission`\n- `allow-request-accessibility-permission`", + "type": "string", + "const": "default", + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-microphone-permission`\n- `allow-request-microphone-permission`\n- `allow-check-system-audio-permission`\n- `allow-request-system-audio-permission`\n- `allow-check-accessibility-permission`\n- `allow-request-accessibility-permission`" + } + ] + } + } +} \ No newline at end of file diff --git a/plugins/permissions/src/commands.rs b/plugins/permissions/src/commands.rs new file mode 100644 index 000000000..05d6a19ba --- /dev/null +++ b/plugins/permissions/src/commands.rs @@ -0,0 +1,129 @@ +use futures_util::StreamExt; + +use crate::models::PermissionStatus; + +#[cfg(target_os = "macos")] +use block2::StackBlock; +#[cfg(target_os = "macos")] +use objc2_av_foundation::{AVCaptureDevice, AVMediaTypeAudio}; + +#[tauri::command] +#[specta::specta] +pub async fn check_microphone_permission( + _app: tauri::AppHandle, +) -> Result { + #[cfg(target_os = "macos")] + { + let status = unsafe { + let media_type = AVMediaTypeAudio.unwrap(); + AVCaptureDevice::authorizationStatusForMediaType(media_type) + }; + Ok(status.into()) + } + + #[cfg(not(target_os = "macos"))] + { + let mut mic_sample_stream = hypr_audio::AudioInput::from_mic(None) + .map_err(|e| e.to_string())? + .stream(); + let sample = mic_sample_stream.next().await; + Ok(if sample.is_some() { + PermissionStatus::Authorized + } else { + PermissionStatus::Denied + }) + } +} + +#[tauri::command] +#[specta::specta] +pub async fn request_microphone_permission( + _app: tauri::AppHandle, +) -> Result<(), String> { + #[cfg(target_os = "macos")] + { + unsafe { + let media_type = AVMediaTypeAudio.unwrap(); + let block = StackBlock::new(|_granted| {}); + AVCaptureDevice::requestAccessForMediaType_completionHandler(media_type, &block); + } + } + + #[cfg(not(target_os = "macos"))] + { + let mut mic_sample_stream = hypr_audio::AudioInput::from_mic(None) + .map_err(|e| e.to_string())? + .stream(); + mic_sample_stream.next().await; + } + + Ok(()) +} + +#[tauri::command] +#[specta::specta] +pub async fn check_system_audio_permission( + _app: tauri::AppHandle, +) -> Result { + let status = hypr_tcc::audio_capture_permission_status(); + Ok(status.into()) +} + +#[tauri::command] +#[specta::specta] +pub async fn request_system_audio_permission( + app: tauri::AppHandle, +) -> Result<(), String> { + { + use tauri_plugin_shell::ShellExt; + + let bundle_id = app.config().identifier.clone(); + app.shell() + .command("tccutil") + .args(["reset", "AudioCapture", &bundle_id]) + .spawn() + .ok(); + } + + let stop = hypr_audio::AudioOutput::silence(); + + let mut speaker_sample_stream = hypr_audio::AudioInput::from_speaker().stream(); + speaker_sample_stream.next().await; + + let _ = stop.send(()); + Ok(()) +} + +#[tauri::command] +#[specta::specta] +pub async fn check_accessibility_permission( + _app: tauri::AppHandle, +) -> Result { + #[cfg(target_os = "macos")] + { + let is_trusted = macos_accessibility_client::accessibility::application_is_trusted(); + Ok(if is_trusted { + PermissionStatus::Authorized + } else { + PermissionStatus::Denied + }) + } + + #[cfg(not(target_os = "macos"))] + { + Ok(PermissionStatus::Denied) + } +} + +#[tauri::command] +#[specta::specta] +pub async fn request_accessibility_permission( + _app: tauri::AppHandle, +) -> Result<(), String> { + #[cfg(target_os = "macos")] + { + macos_accessibility_client::accessibility::application_is_trusted_with_prompt(); + } + + Ok(()) +} diff --git a/plugins/permissions/src/error.rs b/plugins/permissions/src/error.rs new file mode 100644 index 000000000..895220da7 --- /dev/null +++ b/plugins/permissions/src/error.rs @@ -0,0 +1,21 @@ +use serde::{ser::Serializer, Serialize}; + +pub type Result = std::result::Result; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error(transparent)] + Io(#[from] std::io::Error), + #[cfg(mobile)] + #[error(transparent)] + PluginInvoke(#[from] tauri::plugin::mobile::PluginInvokeError), +} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} diff --git a/plugins/permissions/src/lib.rs b/plugins/permissions/src/lib.rs new file mode 100644 index 000000000..f26801a8f --- /dev/null +++ b/plugins/permissions/src/lib.rs @@ -0,0 +1,49 @@ +mod commands; +mod error; +mod models; + +pub use error::{Error, Result}; +pub use models::PermissionStatus; + +const PLUGIN_NAME: &str = "permissions"; + +fn make_specta_builder() -> tauri_specta::Builder { + tauri_specta::Builder::::new() + .plugin_name(PLUGIN_NAME) + .commands(tauri_specta::collect_commands![ + commands::check_microphone_permission::, + commands::request_microphone_permission::, + commands::check_system_audio_permission::, + commands::request_system_audio_permission::, + commands::check_accessibility_permission::, + commands::request_accessibility_permission::, + ]) + .error_handling(tauri_specta::ErrorHandlingMode::Result) +} + +pub fn init() -> tauri::plugin::TauriPlugin { + let specta_builder = make_specta_builder(); + + tauri::plugin::Builder::new(PLUGIN_NAME) + .invoke_handler(specta_builder.invoke_handler()) + .setup(move |_app, _api| Ok(())) + .build() +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn export_types() { + make_specta_builder::() + .export( + specta_typescript::Typescript::default() + .header("// @ts-nocheck\n\n") + .formatter(specta_typescript::formatter::prettier) + .bigint(specta_typescript::BigIntExportBehavior::Number), + "./js/bindings.gen.ts", + ) + .unwrap() + } +} diff --git a/plugins/permissions/src/models.rs b/plugins/permissions/src/models.rs new file mode 100644 index 000000000..1f87a7de6 --- /dev/null +++ b/plugins/permissions/src/models.rs @@ -0,0 +1,31 @@ +#[derive(Debug, serde::Serialize, serde::Deserialize, specta::Type)] +#[serde(rename_all = "camelCase")] +pub enum PermissionStatus { + NeverRequested, + Denied, + Authorized, +} + +#[cfg(target_os = "macos")] +use objc2_av_foundation::AVAuthorizationStatus; + +impl From for PermissionStatus { + fn from(status: isize) -> Self { + match status { + hypr_tcc::GRANTED => Self::Authorized, + hypr_tcc::NEVER_ASKED => Self::NeverRequested, + _ => Self::Denied, + } + } +} + +#[cfg(target_os = "macos")] +impl From for PermissionStatus { + fn from(status: AVAuthorizationStatus) -> Self { + match status { + AVAuthorizationStatus::NotDetermined => Self::NeverRequested, + AVAuthorizationStatus::Authorized => Self::Authorized, + _ => Self::Denied, + } + } +} diff --git a/plugins/permissions/tsconfig.json b/plugins/permissions/tsconfig.json new file mode 100644 index 000000000..13b985325 --- /dev/null +++ b/plugins/permissions/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../tsconfig.base.json", + "include": ["./js/*.ts"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24cc345e6..dc62453cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: '@hypr/plugin-notification': specifier: workspace:* version: link:../../plugins/notification + '@hypr/plugin-permissions': + specifier: workspace:* + version: link:../../plugins/permissions '@hypr/plugin-template': specifier: workspace:* version: link:../../plugins/template @@ -146,6 +149,9 @@ importers: '@tauri-apps/plugin-process': specifier: ^2.3.1 version: 2.3.1 + '@tauri-apps/plugin-shell': + specifier: ^2.3.3 + version: 2.3.3 '@tauri-apps/plugin-store': specifier: ^2.4.1 version: 2.4.1 @@ -902,6 +908,12 @@ importers: specifier: ^2.9.0 version: 2.9.0 + plugins/permissions: + dependencies: + '@tauri-apps/api': + specifier: ^2.9.0 + version: 2.9.0 + plugins/sfx: dependencies: '@tauri-apps/api': @@ -3909,6 +3921,9 @@ packages: '@tauri-apps/plugin-process@2.3.1': resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} + '@tauri-apps/plugin-shell@2.3.3': + resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==} + '@tauri-apps/plugin-store@2.4.1': resolution: {integrity: sha512-ckGSEzZ5Ii4Hf2D5x25Oqnm2Zf9MfDWAzR+volY0z/OOBz6aucPKEY0F649JvQ0Vupku6UJo7ugpGRDOFOunkA==} @@ -12917,6 +12932,10 @@ snapshots: dependencies: '@tauri-apps/api': 2.9.0 + '@tauri-apps/plugin-shell@2.3.3': + dependencies: + '@tauri-apps/api': 2.9.0 + '@tauri-apps/plugin-store@2.4.1': dependencies: '@tauri-apps/api': 2.9.0 From b89e75e5bc3e901be17f6459af40da4a63ceb432 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 16:26:44 +0900 Subject: [PATCH 08/10] remove speaker mute --- .../outer-header/in-meeting-indicator.tsx | 9 ++ plugins/listener/build.rs | 2 - plugins/listener/js/bindings.gen.ts | 18 +--- .../commands/get_speaker_muted.toml | 13 --- .../commands/set_speaker_muted.toml | 13 --- .../permissions/autogenerated/reference.md | 54 ------------ plugins/listener/permissions/default.toml | 2 - .../listener/permissions/schemas/schema.json | 28 +------ plugins/listener/src/actors/session.rs | 23 ------ plugins/listener/src/actors/source.rs | 82 +++++++++---------- plugins/listener/src/commands.rs | 18 ---- plugins/listener/src/events.rs | 2 - plugins/listener/src/ext.rs | 24 ------ plugins/listener/src/lib.rs | 2 - 14 files changed, 51 insertions(+), 239 deletions(-) delete mode 100644 plugins/listener/permissions/autogenerated/commands/get_speaker_muted.toml delete mode 100644 plugins/listener/permissions/autogenerated/commands/set_speaker_muted.toml diff --git a/apps/desktop/src/components/main/body/sessions/outer-header/in-meeting-indicator.tsx b/apps/desktop/src/components/main/body/sessions/outer-header/in-meeting-indicator.tsx index 48ee9ad72..5c9c65b1b 100644 --- a/apps/desktop/src/components/main/body/sessions/outer-header/in-meeting-indicator.tsx +++ b/apps/desktop/src/components/main/body/sessions/outer-header/in-meeting-indicator.tsx @@ -43,6 +43,15 @@ export function InMeetingIndicator({ sessionId }: { sessionId: string }) { ? (
+
) : ( diff --git a/plugins/listener/build.rs b/plugins/listener/build.rs index 3106f7898..ec8472e87 100644 --- a/plugins/listener/build.rs +++ b/plugins/listener/build.rs @@ -4,8 +4,6 @@ const COMMANDS: &[&str] = &[ "set_microphone_device", "get_mic_muted", "set_mic_muted", - "get_speaker_muted", - "set_speaker_muted", "start_session", "stop_session", "get_state", diff --git a/plugins/listener/js/bindings.gen.ts b/plugins/listener/js/bindings.gen.ts index 40ca91916..ecc00f03c 100644 --- a/plugins/listener/js/bindings.gen.ts +++ b/plugins/listener/js/bindings.gen.ts @@ -47,22 +47,6 @@ async setMicMuted(muted: boolean) : Promise> { else return { status: "error", error: e as any }; } }, -async getSpeakerMuted() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|get_speaker_muted") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async setSpeakerMuted(muted: boolean) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("plugin:listener|set_speaker_muted", { muted }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, async startSession(params: SessionParams) : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("plugin:listener|start_session", { params }) }; @@ -108,7 +92,7 @@ export type Alternatives = { transcript: string; words: Word[]; confidence: numb export type Channel = { alternatives: Alternatives[] } export type Metadata = { request_id: string; model_info: ModelInfo; model_uuid: string } export type ModelInfo = { name: string; version: string; arch: string } -export type SessionEvent = { type: "inactive" } | { type: "running_active" } | { type: "audioAmplitude"; mic: number; speaker: number } | { type: "micMuted"; value: boolean } | { type: "speakerMuted"; value: boolean } | { type: "streamResponse"; response: StreamResponse } +export type SessionEvent = { type: "inactive" } | { type: "running_active" } | { type: "audioAmplitude"; mic: number; speaker: number } | { type: "micMuted"; value: boolean } | { type: "streamResponse"; response: StreamResponse } export type SessionParams = { session_id: string; languages: string[]; onboarding: boolean; record_enabled: boolean; model: string; base_url: string; api_key: string; keywords: string[] } export type StreamResponse = { type: "Results"; start: number; duration: number; is_final: boolean; speech_final: boolean; from_finalize: boolean; channel: Channel; metadata: Metadata; channel_index: number[] } | { type: "Metadata"; request_id: string; created: string; duration: number; channels: number } | { type: "SpeechStarted"; channel: number[]; timestamp: number } | { type: "UtteranceEnd"; channel: number[]; last_word_end: number } export type Word = { word: string; start: number; end: number; confidence: number; speaker: number | null; punctuated_word: string | null; language: string | null } diff --git a/plugins/listener/permissions/autogenerated/commands/get_speaker_muted.toml b/plugins/listener/permissions/autogenerated/commands/get_speaker_muted.toml deleted file mode 100644 index 8985aa4e4..000000000 --- a/plugins/listener/permissions/autogenerated/commands/get_speaker_muted.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-get-speaker-muted" -description = "Enables the get_speaker_muted command without any pre-configured scope." -commands.allow = ["get_speaker_muted"] - -[[permission]] -identifier = "deny-get-speaker-muted" -description = "Denies the get_speaker_muted command without any pre-configured scope." -commands.deny = ["get_speaker_muted"] diff --git a/plugins/listener/permissions/autogenerated/commands/set_speaker_muted.toml b/plugins/listener/permissions/autogenerated/commands/set_speaker_muted.toml deleted file mode 100644 index c05c7035f..000000000 --- a/plugins/listener/permissions/autogenerated/commands/set_speaker_muted.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-set-speaker-muted" -description = "Enables the set_speaker_muted command without any pre-configured scope." -commands.allow = ["set_speaker_muted"] - -[[permission]] -identifier = "deny-set-speaker-muted" -description = "Denies the set_speaker_muted command without any pre-configured scope." -commands.deny = ["set_speaker_muted"] diff --git a/plugins/listener/permissions/autogenerated/reference.md b/plugins/listener/permissions/autogenerated/reference.md index d4e325adf..03b0dd476 100644 --- a/plugins/listener/permissions/autogenerated/reference.md +++ b/plugins/listener/permissions/autogenerated/reference.md @@ -11,8 +11,6 @@ Default permissions for the plugin - `allow-stop-session` - `allow-get-mic-muted` - `allow-set-mic-muted` -- `allow-get-speaker-muted` -- `allow-set-speaker-muted` - `allow-get-state` ## Permission Table @@ -79,32 +77,6 @@ Denies the get_mic_muted command without any pre-configured scope. -`listener:allow-get-speaker-muted` - - - - -Enables the get_speaker_muted command without any pre-configured scope. - - - - - - - -`listener:deny-get-speaker-muted` - - - - -Denies the get_speaker_muted command without any pre-configured scope. - - - - - - - `listener:allow-get-state` @@ -235,32 +207,6 @@ Denies the set_microphone_device command without any pre-configured scope. -`listener:allow-set-speaker-muted` - - - - -Enables the set_speaker_muted command without any pre-configured scope. - - - - - - - -`listener:deny-set-speaker-muted` - - - - -Denies the set_speaker_muted command without any pre-configured scope. - - - - - - - `listener:allow-start-session` diff --git a/plugins/listener/permissions/default.toml b/plugins/listener/permissions/default.toml index 10da4082e..623c122ca 100644 --- a/plugins/listener/permissions/default.toml +++ b/plugins/listener/permissions/default.toml @@ -8,7 +8,5 @@ permissions = [ "allow-stop-session", "allow-get-mic-muted", "allow-set-mic-muted", - "allow-get-speaker-muted", - "allow-set-speaker-muted", "allow-get-state", ] diff --git a/plugins/listener/permissions/schemas/schema.json b/plugins/listener/permissions/schemas/schema.json index 6b04e6e0e..a27c30a07 100644 --- a/plugins/listener/permissions/schemas/schema.json +++ b/plugins/listener/permissions/schemas/schema.json @@ -318,18 +318,6 @@ "const": "deny-get-mic-muted", "markdownDescription": "Denies the get_mic_muted command without any pre-configured scope." }, - { - "description": "Enables the get_speaker_muted command without any pre-configured scope.", - "type": "string", - "const": "allow-get-speaker-muted", - "markdownDescription": "Enables the get_speaker_muted command without any pre-configured scope." - }, - { - "description": "Denies the get_speaker_muted command without any pre-configured scope.", - "type": "string", - "const": "deny-get-speaker-muted", - "markdownDescription": "Denies the get_speaker_muted command without any pre-configured scope." - }, { "description": "Enables the get_state command without any pre-configured scope.", "type": "string", @@ -390,18 +378,6 @@ "const": "deny-set-microphone-device", "markdownDescription": "Denies the set_microphone_device command without any pre-configured scope." }, - { - "description": "Enables the set_speaker_muted command without any pre-configured scope.", - "type": "string", - "const": "allow-set-speaker-muted", - "markdownDescription": "Enables the set_speaker_muted command without any pre-configured scope." - }, - { - "description": "Denies the set_speaker_muted command without any pre-configured scope.", - "type": "string", - "const": "deny-set-speaker-muted", - "markdownDescription": "Denies the set_speaker_muted command without any pre-configured scope." - }, { "description": "Enables the start_session command without any pre-configured scope.", "type": "string", @@ -427,10 +403,10 @@ "markdownDescription": "Denies the stop_session command without any pre-configured scope." }, { - "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`", + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-state`", "type": "string", "const": "default", - "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-speaker-muted`\n- `allow-set-speaker-muted`\n- `allow-get-state`" + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-list-microphone-devices`\n- `allow-get-current-microphone-device`\n- `allow-set-microphone-device`\n- `allow-start-session`\n- `allow-stop-session`\n- `allow-get-mic-muted`\n- `allow-set-mic-muted`\n- `allow-get-state`" } ] } diff --git a/plugins/listener/src/actors/session.rs b/plugins/listener/src/actors/session.rs index fa32f768c..f8859fd5e 100644 --- a/plugins/listener/src/actors/session.rs +++ b/plugins/listener/src/actors/session.rs @@ -18,9 +18,7 @@ use crate::{ #[derive(Debug)] pub enum SessionMsg { SetMicMute(bool), - SetSpeakerMute(bool), GetMicMute(RpcReplyPort), - GetSpeakerMute(RpcReplyPort), GetMicDeviceName(RpcReplyPort>), ChangeMicDevice(Option), } @@ -103,14 +101,6 @@ impl Actor for SessionActor { SessionEvent::MicMuted { value: muted }.emit(&state.app)?; } - SessionMsg::SetSpeakerMute(muted) => { - if let Some(cell) = registry::where_is(SourceActor::name()) { - let actor: ActorRef = cell.into(); - actor.cast(SourceMsg::SetSpkMute(muted))?; - } - SessionEvent::SpeakerMuted { value: muted }.emit(&state.app)?; - } - SessionMsg::GetMicDeviceName(reply) => { if !reply.is_closed() { let device_name = if let Some(cell) = registry::where_is(SourceActor::name()) { @@ -137,19 +127,6 @@ impl Actor for SessionActor { } } - SessionMsg::GetSpeakerMute(reply) => { - let muted = if let Some(cell) = registry::where_is(SourceActor::name()) { - let actor: ActorRef = cell.into(); - call_t!(actor, SourceMsg::GetSpkMute, 100)? - } else { - false - }; - - if !reply.is_closed() { - let _ = reply.send(muted); - } - } - SessionMsg::ChangeMicDevice(device) => { if let Some(cell) = registry::where_is(SourceActor::name()) { let actor: ActorRef = cell.into(); diff --git a/plugins/listener/src/actors/source.rs b/plugins/listener/src/actors/source.rs index d3067654a..36bbdba99 100644 --- a/plugins/listener/src/actors/source.rs +++ b/plugins/listener/src/actors/source.rs @@ -18,8 +18,6 @@ const SAMPLE_RATE: u32 = 16000; pub enum SourceMsg { SetMicMute(bool), GetMicMute(RpcReplyPort), - SetSpkMute(bool), - GetSpkMute(RpcReplyPort), SetMicDevice(Option), GetMicDevice(RpcReplyPort>), } @@ -35,7 +33,6 @@ pub struct SourceState { token: CancellationToken, onboarding: bool, mic_muted: Arc, - spk_muted: Arc, run_task: Option>, stream_cancel_token: Option, _device_monitor_handle: Option, @@ -115,7 +112,6 @@ impl Actor for SourceActor { token: args.token, onboarding: args.onboarding, mic_muted: Arc::new(AtomicBool::new(false)), - spk_muted: Arc::new(AtomicBool::new(false)), run_task: None, stream_cancel_token: None, _device_monitor_handle: Some(device_monitor_handle), @@ -142,14 +138,6 @@ impl Actor for SourceActor { let _ = reply.send(st.mic_muted.load(Ordering::Relaxed)); } } - SourceMsg::SetSpkMute(muted) => { - st.spk_muted.store(muted, Ordering::Relaxed); - } - SourceMsg::GetSpkMute(reply) => { - if !reply.is_closed() { - let _ = reply.send(st.spk_muted.load(Ordering::Relaxed)); - } - } SourceMsg::GetMicDevice(reply) => { if !reply.is_closed() { let _ = reply.send(st.mic_device.clone()); @@ -195,7 +183,6 @@ async fn start_source_loop( let myself2 = myself.clone(); let token = st.token.clone(); let mic_muted = st.mic_muted.clone(); - let spk_muted = st.spk_muted.clone(); let mic_device = st.mic_device.clone(); let stream_cancel_token = CancellationToken::new(); @@ -213,43 +200,58 @@ async fn start_source_loop( #[cfg(target_os = "macos")] { tokio::spawn(async move { - let mixed_stream = { - let mut mixed_input = AudioInput::from_mic(mic_device).unwrap(); - ResampledAsyncSource::new(mixed_input.stream(), SAMPLE_RATE) + let mic_stream = { + let mut mic_input = AudioInput::from_mic(mic_device).unwrap(); + ResampledAsyncSource::new(mic_input.stream(), SAMPLE_RATE) + .chunks(AEC_BLOCK_SIZE) + }; + tokio::time::sleep(tokio::time::Duration::from_millis(50)).await; + let spk_stream = { + let mut spk_input = hypr_audio::AudioInput::from_speaker(); + ResampledAsyncSource::new(spk_input.stream(), SAMPLE_RATE) .chunks(AEC_BLOCK_SIZE) }; - tokio::pin!(mixed_stream); + tokio::pin!(mic_stream); + tokio::pin!(spk_stream); loop { + let Some(cell) = registry::where_is(ProcessorActor::name()) else { + tracing::warn!("processor_actor_not_found"); + continue; + }; + let proc: ActorRef = cell.into(); + tokio::select! { _ = token.cancelled() => { - drop(mixed_stream); + drop(mic_stream); + drop(spk_stream); myself2.stop(None); return; } _ = stream_cancel_token.cancelled() => { - drop(mixed_stream); + drop(mic_stream); + drop(spk_stream); return; } - mixed_next = mixed_stream.next() => { - if let Some(data) = mixed_next { - // TODO: should be able to mute each stream - let output_data = if mic_muted.load(Ordering::Relaxed) && spk_muted.load(Ordering::Relaxed) { - vec![0.0; data.len()] + mic_next = mic_stream.next() => { + if let Some(data) = mic_next { + if mic_muted.load(Ordering::Relaxed) { + let msg = ProcMsg::Mic(AudioChunk{ data: vec![0.0; data.len()] }); + let _ = proc.cast(msg); } else { - data - }; - let msg = ProcMsg::Mixed(AudioChunk{ data: output_data }); - - let Some(cell) = registry::where_is(ProcessorActor::name()) else { - tracing::warn!("processor_actor_not_found"); - continue; - }; - - let actor: ActorRef = cell.into(); - if let Err(e) = actor.cast(msg) { - tracing::error!(error = %e, "cast_error"); + let msg = ProcMsg::Mixed(AudioChunk{ data }); + let _ = proc.cast(msg); + } + } else { + break; + } + } + spk_next = spk_stream.next() => { + if let Some(data) = spk_next { + if mic_muted.load(Ordering::Relaxed) { + let msg = ProcMsg::Speaker(AudioChunk{ data }); + let _ = proc.cast(msg); } } else { break; @@ -312,13 +314,7 @@ async fn start_source_loop( } spk_next = spk_stream.next() => { if let Some(data) = spk_next { - let output_data = if spk_muted.load(Ordering::Relaxed) { - vec![0.0; data.len()] - } else { - data - }; - - let msg = ProcMsg::Speaker(AudioChunk{ data: output_data }); + let msg = ProcMsg::Speaker(AudioChunk{ data }); let _ = proc.cast(msg); } else { break; diff --git a/plugins/listener/src/commands.rs b/plugins/listener/src/commands.rs index e36cfd71d..50dee1e00 100644 --- a/plugins/listener/src/commands.rs +++ b/plugins/listener/src/commands.rs @@ -37,14 +37,6 @@ pub async fn get_mic_muted(app: tauri::AppHandle) -> Resul Ok(app.get_mic_muted().await) } -#[tauri::command] -#[specta::specta] -pub async fn get_speaker_muted( - app: tauri::AppHandle, -) -> Result { - Ok(app.get_speaker_muted().await) -} - #[tauri::command] #[specta::specta] pub async fn set_mic_muted( @@ -55,16 +47,6 @@ pub async fn set_mic_muted( Ok(()) } -#[tauri::command] -#[specta::specta] -pub async fn set_speaker_muted( - app: tauri::AppHandle, - muted: bool, -) -> Result<(), String> { - app.set_speaker_muted(muted).await; - Ok(()) -} - #[tauri::command] #[specta::specta] pub async fn start_session( diff --git a/plugins/listener/src/events.rs b/plugins/listener/src/events.rs index dde66a374..f46219036 100644 --- a/plugins/listener/src/events.rs +++ b/plugins/listener/src/events.rs @@ -17,8 +17,6 @@ common_event_derives! { AudioAmplitude { mic: u16, speaker: u16 }, #[serde(rename = "micMuted")] MicMuted { value: bool }, - #[serde(rename = "speakerMuted")] - SpeakerMuted { value: bool }, #[serde(rename = "streamResponse")] StreamResponse { response: owhisper_interface::StreamResponse }, } diff --git a/plugins/listener/src/ext.rs b/plugins/listener/src/ext.rs index 8e81a3718..0947bd322 100644 --- a/plugins/listener/src/ext.rs +++ b/plugins/listener/src/ext.rs @@ -19,9 +19,7 @@ pub trait ListenerPluginExt { ) -> impl Future>; fn get_mic_muted(&self) -> impl Future; - fn get_speaker_muted(&self) -> impl Future; fn set_mic_muted(&self, muted: bool) -> impl Future; - fn set_speaker_muted(&self, muted: bool) -> impl Future; fn get_state(&self) -> impl Future; fn stop_session(&self) -> impl Future; @@ -84,20 +82,6 @@ impl> ListenerPluginExt for T { } } - #[tracing::instrument(skip_all)] - async fn get_speaker_muted(&self) -> bool { - if let Some(cell) = registry::where_is(SessionActor::name()) { - let actor: ActorRef = cell.into(); - - match call_t!(actor, SessionMsg::GetSpeakerMute, 100) { - Ok(muted) => muted, - Err(_) => false, - } - } else { - false - } - } - #[tracing::instrument(skip_all)] async fn set_mic_muted(&self, muted: bool) { if let Some(cell) = registry::where_is(SessionActor::name()) { @@ -106,14 +90,6 @@ impl> ListenerPluginExt for T { } } - #[tracing::instrument(skip_all)] - async fn set_speaker_muted(&self, muted: bool) { - if let Some(cell) = registry::where_is(SessionActor::name()) { - let actor: ActorRef = cell.into(); - let _ = actor.cast(SessionMsg::SetSpeakerMute(muted)); - } - } - #[tracing::instrument(skip_all)] async fn start_session(&self, params: SessionParams) { let state = self.state::(); diff --git a/plugins/listener/src/lib.rs b/plugins/listener/src/lib.rs index 21776ac6b..77fbe1618 100644 --- a/plugins/listener/src/lib.rs +++ b/plugins/listener/src/lib.rs @@ -39,8 +39,6 @@ fn make_specta_builder() -> tauri_specta::Builder { commands::set_microphone_device::, commands::get_mic_muted::, commands::set_mic_muted::, - commands::get_speaker_muted::, - commands::set_speaker_muted::, commands::start_session::, commands::stop_session::, commands::get_state::, From 5ee3a7eb3af83bc54542578ece8e46a64251e037 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 17:16:46 +0900 Subject: [PATCH 09/10] notification niceties --- Cargo.lock | 1 + .../src/components/settings/notification.tsx | 31 +++++++------------ apps/desktop/src/contexts/listener.tsx | 11 ++++++- plugins/detect/Cargo.toml | 1 + plugins/detect/js/bindings.gen.ts | 2 +- plugins/detect/src/events.rs | 10 ++++-- 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a571e385..b2f215b3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14480,6 +14480,7 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tracing", + "uuid", ] [[package]] diff --git a/apps/desktop/src/components/settings/notification.tsx b/apps/desktop/src/components/settings/notification.tsx index 775f37c6f..e78ccf81f 100644 --- a/apps/desktop/src/components/settings/notification.tsx +++ b/apps/desktop/src/components/settings/notification.tsx @@ -1,9 +1,10 @@ import { useForm } from "@tanstack/react-form"; import { useQuery } from "@tanstack/react-query"; import { Plus, X } from "lucide-react"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { commands as detectCommands } from "@hypr/plugin-detect"; +import { commands as notificationCommands } from "@hypr/plugin-notification"; import { Badge } from "@hypr/ui/components/ui/badge"; import { Button } from "@hypr/ui/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from "@hypr/ui/components/ui/command"; @@ -17,6 +18,15 @@ export function SettingsNotifications() { const [popoverOpen, setPopoverOpen] = useState(false); const [newAppName, setNewAppName] = useState(""); + useEffect(() => { + const cleanup = () => { + notificationCommands.clearNotifications(); + }; + + cleanup(); + return cleanup; + }, []); + const handleSetNotificationEvent = main.UI.useSetValueCallback( "notification_event", (value: boolean) => value, @@ -62,25 +72,6 @@ export function SettingsNotifications() { handleSetNotificationDetect(value.notification_detect); handleSetRespectDnd(value.respect_dnd); handleSetIgnoredPlatforms(value.ignored_platforms); - - // TODO - - // if (value.notification_event) { - // await notificationCommands.startEventNotification({ - // respect_do_not_disturb: value.respect_dnd, - // }); - // } else { - // await notificationCommands.stopEventNotification(); - // } - - // if (value.notification_detect) { - // await notificationCommands.startDetectNotification({ - // respect_do_not_disturb: value.respect_dnd, - // ignored_platforms: value.ignored_platforms, - // }); - // } else { - // await notificationCommands.stopDetectNotification(); - // } }, }); diff --git a/apps/desktop/src/contexts/listener.tsx b/apps/desktop/src/contexts/listener.tsx index 8a5e1b4fe..54181d4bb 100644 --- a/apps/desktop/src/contexts/listener.tsx +++ b/apps/desktop/src/contexts/listener.tsx @@ -4,6 +4,7 @@ import { useShallow } from "zustand/shallow"; import { events as detectEvents } from "@hypr/plugin-detect"; import { commands as localSttCommands, type SupportedSttModel } from "@hypr/plugin-local-stt"; +import { commands as notificationCommands } from "@hypr/plugin-notification"; import * as main from "../store/tinybase/main"; import { createListenerStore, type ListenerStore } from "../store/zustand/listener"; @@ -78,7 +79,15 @@ const useHandleMuteAndStop = (store: ListenerStore) => { detectEvents.detectEvent.listen(({ payload }) => { if (payload.type === "micStarted") { - console.log("mic_started", payload.apps); + setTimeout(() => { + notificationCommands.showNotification({ + key: payload.key, + title: "Mic Started", + message: "Mic started", + url: null, + timeout: { secs: 8, nanos: 0 }, + }); + }, 2000); } else if (payload.type === "micStopped") { stop(); } else if (payload.type === "micMuted") { diff --git a/plugins/detect/Cargo.toml b/plugins/detect/Cargo.toml index 8ddbe8055..c78b1aab8 100644 --- a/plugins/detect/Cargo.toml +++ b/plugins/detect/Cargo.toml @@ -25,6 +25,7 @@ tauri-specta = { workspace = true, features = ["derive", "typescript"] } serde = { workspace = true } thiserror = { workspace = true } +uuid = { workspace = true, features = ["v4"] } tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } tracing = { workspace = true } diff --git a/plugins/detect/js/bindings.gen.ts b/plugins/detect/js/bindings.gen.ts index ef725f6a0..d17a1c9cd 100644 --- a/plugins/detect/js/bindings.gen.ts +++ b/plugins/detect/js/bindings.gen.ts @@ -56,7 +56,7 @@ detectEvent: "plugin:detect:detect-event" /** user-defined types **/ -export type DetectEvent = { type: "micStarted"; apps: InstalledApp[] } | { type: "micStopped" } | { type: "micMuted"; value: boolean } +export type DetectEvent = { type: "micStarted"; key: string; apps: InstalledApp[] } | { type: "micStopped" } | { type: "micMuted"; value: boolean } export type InstalledApp = { id: string; name: string } /** tauri-specta globals **/ diff --git a/plugins/detect/src/events.rs b/plugins/detect/src/events.rs index 26d4d4c40..5b6ad4a6b 100644 --- a/plugins/detect/src/events.rs +++ b/plugins/detect/src/events.rs @@ -10,7 +10,10 @@ common_event_derives! { #[serde(tag = "type")] pub enum DetectEvent { #[serde(rename = "micStarted")] - MicStarted { apps: Vec }, + MicStarted { + key: String, + apps: Vec, + }, #[serde(rename = "micStopped")] MicStopped {}, #[serde(rename = "micMuted")] @@ -21,7 +24,10 @@ common_event_derives! { impl From for DetectEvent { fn from(event: hypr_detect::DetectEvent) -> Self { match event { - hypr_detect::DetectEvent::MicStarted(apps) => Self::MicStarted { apps }, + hypr_detect::DetectEvent::MicStarted(apps) => Self::MicStarted { + key: uuid::Uuid::new_v4().to_string(), + apps, + }, hypr_detect::DetectEvent::MicStopped => Self::MicStopped {}, #[cfg(target_os = "macos")] hypr_detect::DetectEvent::ZoomMuteStateChanged { value } => { From ede22dd2c7909c043df12e687f82a263fa336aca Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Thu, 30 Oct 2025 18:16:18 +0900 Subject: [PATCH 10/10] chores --- .../src/components/shared/permission-row.tsx | 2 +- apps/desktop/src/contexts/listener.tsx | 16 ++++++++++++++-- apps/desktop/src/hooks/use-permissions.ts | 1 - 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/desktop/src/components/shared/permission-row.tsx b/apps/desktop/src/components/shared/permission-row.tsx index 3fbffd28d..3aa537938 100644 --- a/apps/desktop/src/components/shared/permission-row.tsx +++ b/apps/desktop/src/components/shared/permission-row.tsx @@ -92,7 +92,7 @@ export function PermissionRow({ isAuthorized ? "bg-blue-100" : "bg-neutral-50", ])} > -
{icon}
+
{icon}
)}
diff --git a/apps/desktop/src/contexts/listener.tsx b/apps/desktop/src/contexts/listener.tsx index 54181d4bb..959fee2f5 100644 --- a/apps/desktop/src/contexts/listener.tsx +++ b/apps/desktop/src/contexts/listener.tsx @@ -76,10 +76,12 @@ const useHandleMuteAndStop = (store: ListenerStore) => { useEffect(() => { let unlisten: (() => void) | undefined; + let cancelled = false; + let notificationTimerId: ReturnType; detectEvents.detectEvent.listen(({ payload }) => { if (payload.type === "micStarted") { - setTimeout(() => { + notificationTimerId = setTimeout(() => { notificationCommands.showNotification({ key: payload.key, title: "Mic Started", @@ -94,11 +96,21 @@ const useHandleMuteAndStop = (store: ListenerStore) => { setMuted(payload.value); } }).then((fn) => { - unlisten = fn; + if (cancelled) { + fn(); + } else { + unlisten = fn; + } + }).catch((err) => { + console.error("Failed to setup detect event listener:", err); }); return () => { + cancelled = true; unlisten?.(); + if (notificationTimerId) { + clearTimeout(notificationTimerId); + } }; }, [stop, setMuted]); }; diff --git a/apps/desktop/src/hooks/use-permissions.ts b/apps/desktop/src/hooks/use-permissions.ts index 1a4435626..d5f8244f6 100644 --- a/apps/desktop/src/hooks/use-permissions.ts +++ b/apps/desktop/src/hooks/use-permissions.ts @@ -11,7 +11,6 @@ export function usePermissions() { queryFn: () => permissionsCommands.checkMicrophonePermission(), refetchInterval: 1000, select: (result) => { - console.log(result); if (result.status === "error") { throw new Error(result.error); }