From bc46752f35430b6278b29fb92b15b015426980fa Mon Sep 17 00:00:00 2001 From: pallyoung Date: Sat, 21 Mar 2026 20:53:52 +0800 Subject: [PATCH 1/5] refactor: remove tauri shell runtime --- README.en.md | 12 +- README.md | 12 +- apps/server/Cargo.lock | 5318 ++++-------------------- apps/server/Cargo.toml | 7 +- apps/server/build.rs | 3 - apps/server/src/app.rs | 2 +- apps/server/src/auth/mod.rs | 24 +- apps/server/src/command/http.rs | 44 +- apps/server/src/infra/db.rs | 36 +- apps/server/src/main.rs | 208 +- apps/server/src/runtime.rs | 39 + apps/server/src/services/agent.rs | 6 +- apps/server/src/services/claude.rs | 6 +- apps/server/src/services/filesystem.rs | 17 - apps/server/src/services/git.rs | 13 - apps/server/src/services/system.rs | 2 - apps/server/src/services/terminal.rs | 6 +- apps/server/src/services/workspace.rs | 13 - apps/server/src/ws/server.rs | 10 +- apps/server/tauri.conf.json | 14 - apps/web/src/services/http/client.ts | 12 +- docs/deployment/README.en.md | 3 +- docs/deployment/README.md | 3 +- docs/development/README.en.md | 8 +- docs/development/README.md | 8 +- docs/development/architecture.en.md | 14 +- docs/development/architecture.md | 14 +- docs/development/npm-release.en.md | 5 +- docs/development/npm-release.md | 5 +- docs/development/tauri-commands.en.md | 16 +- docs/development/tauri-commands.md | 16 +- package.json | 4 - pnpm-lock.yaml | 151 +- scripts/dev/run-tauri.mjs | 33 - scripts/release/check-assets.mjs | 20 +- scripts/release/check-version.mjs | 5 - scripts/release/sync-version.mjs | 7 - tests/release/release.test.mjs | 1 - vite.config.ts | 1 - 39 files changed, 1034 insertions(+), 5084 deletions(-) delete mode 100644 apps/server/build.rs create mode 100644 apps/server/src/runtime.rs delete mode 100644 apps/server/tauri.conf.json delete mode 100644 scripts/dev/run-tauri.mjs diff --git a/README.en.md b/README.en.md index 0a22824..ec07197 100644 --- a/README.en.md +++ b/README.en.md @@ -107,13 +107,13 @@ This keeps maintainable source, publish templates, and generated artifacts out o ## Run -### Option 1: Tauri shell development mode (recommended) +### Option 1: Combined development mode (recommended) ```bash -pnpm tauri dev +pnpm dev:stack ``` -This is the closest workflow to the Tauri shell development experience. +This starts the frontend dev server, the local server runtime, and the linked development flow used by local E2E. ### Option 2: Split frontend/server debugging @@ -156,10 +156,12 @@ CLI build: pnpm build:cli ``` -Tauri shell build: +Full runtime build: ```bash -pnpm tauri build +pnpm build:web +pnpm build:server +pnpm build:cli ``` ## Public Deployment diff --git a/README.md b/README.md index 1ddd956..3d91c3c 100644 --- a/README.md +++ b/README.md @@ -106,13 +106,13 @@ coder-studio completion uninstall bash ## 运行 -### 方式 1:Tauri 壳层开发模式(推荐) +### 方式 1:联动开发模式(推荐) ```bash -pnpm tauri dev +pnpm dev:stack ``` -这是最接近 Tauri 壳层联调的运行方式。 +这会同时拉起前端开发服务器、本地 server 和开发态 E2E 所需的联动环境。 ### 方式 2:前后端分离调试 @@ -155,10 +155,12 @@ pnpm build:server pnpm build:cli ``` -构建 Tauri 壳层: +构建完整运行时: ```bash -pnpm tauri build +pnpm build:web +pnpm build:server +pnpm build:cli ``` ## 公开部署 diff --git a/apps/server/Cargo.lock b/apps/server/Cargo.lock index 7309c05..c328815 100644 --- a/apps/server/Cargo.lock +++ b/apps/server/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "ahash" version = "0.8.12" @@ -20,30 +14,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - [[package]] name = "android_system_properties" version = "0.1.5" @@ -67,30 +37,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "atk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" -dependencies = [ - "atk-sys", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "syn", ] [[package]] @@ -113,7 +60,7 @@ checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", - "base64 0.22.1", + "base64", "bytes", "futures-util", "http", @@ -163,33 +110,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "1.3.2" @@ -201,9 +127,6 @@ name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" -dependencies = [ - "serde_core", -] [[package]] name = "block-buffer" @@ -214,48 +137,12 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "brotli" -version = "8.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - [[package]] name = "byteorder" version = "1.5.0" @@ -267,76 +154,6 @@ name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" -dependencies = [ - "bitflags 2.11.0", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror 1.0.69", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "camino" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 2.0.18", -] - -[[package]] -name = "cargo_toml" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" -dependencies = [ - "serde", - "toml 0.9.12+spec-1.1.0", -] [[package]] name = "cc" @@ -348,33 +165,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -389,8 +179,7 @@ checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "num-traits", - "serde", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -401,86 +190,23 @@ dependencies = [ "axum", "chrono", "futures-util", - "getrandom 0.2.17", + "getrandom", "portable-pty", "rusqlite", "serde", "serde_json", "sha2", - "tauri", - "tauri-build", - "tauri-plugin-dialog", "tokio", "tower-http", "url", ] -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "time", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" -dependencies = [ - "bitflags 2.11.0", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.11.0", - "core-foundation", - "libc", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -490,30 +216,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - [[package]] name = "crypto-common" version = "0.1.7" @@ -525,4836 +227,1274 @@ dependencies = [ ] [[package]] -name = "cssparser" -version = "0.29.6" +name = "data-encoding" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "matches", - "phf 0.10.1", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] -name = "cssparser" -version = "0.36.0" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.13.1", - "smallvec", + "block-buffer", + "crypto-common", ] [[package]] -name = "cssparser-macros" -version = "0.6.1" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ + "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] -name = "ctor" -version = "0.2.9" +name = "downcast-rs" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" -dependencies = [ - "quote", - "syn 2.0.117", -] +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "darling" -version = "0.21.3" +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "darling_core", - "darling_macro", + "libc", + "windows-sys", ] [[package]] -name = "darling_core" -version = "0.21.3" +name = "fallible-iterator" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.117", -] +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] -name = "darling_macro" -version = "0.21.3" +name = "filedescriptor" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" dependencies = [ - "darling_core", - "quote", - "syn 2.0.117", + "libc", + "thiserror", + "winapi", ] [[package]] -name = "data-encoding" -version = "2.10.0" +name = "find-msvc-tools" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] -name = "deranged" -version = "0.5.8" +name = "form_urlencoded" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ - "powerfmt", - "serde_core", + "percent-encoding", ] [[package]] -name = "derive_more" -version = "0.99.20" +name = "futures-channel" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.117", + "futures-core", ] [[package]] -name = "derive_more" -version = "2.1.1" +name = "futures-core" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] -name = "derive_more-impl" -version = "2.1.1" +name = "futures-macro" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "rustc_version", - "syn 2.0.117", + "syn", ] [[package]] -name = "digest" -version = "0.10.7" +name = "futures-sink" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ - "block-buffer", - "crypto-common", + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "slab", ] [[package]] -name = "dirs" -version = "6.0.0" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "dirs-sys", + "typenum", + "version_check", ] [[package]] -name = "dirs-sys" -version = "0.5.0" +name = "getrandom" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ + "cfg-if", "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", + "wasi", ] [[package]] -name = "dispatch2" -version = "0.3.1" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "bitflags 2.11.0", - "block2", - "libc", - "objc2", + "ahash", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "hashlink" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "hashbrown", ] [[package]] -name = "dlopen2" -version = "0.8.2" +name = "http" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ - "dlopen2_derive", - "libc", - "once_cell", - "winapi", + "bytes", + "itoa", ] [[package]] -name = "dlopen2_derive" -version = "0.4.3" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "bytes", + "http", ] [[package]] -name = "dom_query" -version = "0.25.1" +name = "http-body-util" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d9c2e7f1d22d0f2ce07626d259b8a55f4a47cb0938d4006dd8ae037f17d585e" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ - "bit-set", - "cssparser 0.36.0", - "foldhash 0.2.0", - "html5ever 0.36.1", - "precomputed-hash", - "selectors 0.35.0", - "tendril", + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", ] [[package]] -name = "downcast-rs" -version = "1.2.1" +name = "http-range-header" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" [[package]] -name = "dpi" -version = "0.1.2" +name = "httparse" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -dependencies = [ - "serde", -] +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "dtoa" -version = "1.0.11" +name = "httpdate" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] -name = "dtoa-short" -version = "0.3.5" +name = "hyper" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ - "dtoa", + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", ] [[package]] -name = "dunce" -version = "1.0.5" +name = "hyper-util" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes", + "http", + "http-body", + "hyper", + "pin-project-lite", + "tokio", + "tower-service", +] [[package]] -name = "dyn-clone" -version = "1.0.20" +name = "iana-time-zone" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] [[package]] -name = "embed-resource" -version = "3.0.6" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", - "memchr", - "rustc_version", - "toml 0.9.12+spec-1.1.0", - "vswhom", - "winreg 0.55.0", ] [[package]] -name = "embed_plist" -version = "1.2.2" +name = "icu_collections" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] [[package]] -name = "equivalent" -version = "1.0.2" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] [[package]] -name = "erased-serde" -version = "0.4.10" +name = "icu_normalizer" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "serde", - "serde_core", - "typeid", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", ] [[package]] -name = "errno" -version = "0.3.14" +name = "icu_normalizer_data" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] -name = "fallible-iterator" -version = "0.3.0" +name = "icu_properties" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] [[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" +name = "icu_properties_data" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] -name = "fastrand" -version = "2.3.0" +name = "icu_provider" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] [[package]] -name = "fdeflate" -version = "0.3.7" +name = "idna" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ - "simd-adler32", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "field-offset" -version = "0.3.6" +name = "idna_adapter" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ - "memoffset 0.9.1", - "rustc_version", + "icu_normalizer", + "icu_properties", ] [[package]] -name = "filedescriptor" -version = "0.8.3" +name = "ioctl-rs" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" +checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d" dependencies = [ "libc", - "thiserror 1.0.69", - "winapi", ] [[package]] -name = "find-msvc-tools" -version = "0.1.9" +name = "itoa" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] -name = "flate2" -version = "1.1.9" +name = "js-sys" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ - "crc32fast", - "miniz_oxide", + "once_cell", + "wasm-bindgen", ] [[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "foldhash" -version = "0.2.0" +name = "libc" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] -name = "foreign-types" -version = "0.5.0" +name = "libsqlite3-sys" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ - "foreign-types-macros", - "foreign-types-shared", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "foreign-types-macros" -version = "0.2.3" +name = "litemap" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - -[[package]] -name = "futures-macro" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] -name = "futures-util" -version = "0.3.32" +name = "log" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] -name = "fxhash" -version = "0.2.1" +name = "matchit" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] -name = "gdk" -version = "0.18.2" +name = "memchr" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] -name = "gdk-pixbuf" -version = "0.18.5" +name = "memoffset" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", - "once_cell", + "autocfg", ] [[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "gdk-sys" -version = "0.18.2" +name = "mime_guess" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", + "mime", + "unicase", ] [[package]] -name = "gdkwayland-sys" -version = "0.18.2" +name = "mio" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", "libc", - "pkg-config", - "system-deps", + "wasi", + "windows-sys", ] [[package]] -name = "gdkx11" -version = "0.18.2" +name = "nix" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ - "gdk", - "gdkx11-sys", - "gio", - "glib", + "autocfg", + "bitflags 1.3.2", + "cfg-if", "libc", - "x11", + "memoffset", + "pin-utils", ] [[package]] -name = "gdkx11-sys" -version = "0.18.2" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", + "autocfg", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "getrandom" -version = "0.1.16" +name = "percent-encoding" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "getrandom" +name = "pin-project-lite" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "getrandom" -version = "0.4.2" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "wasip2", - "wasip3", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "gio" -version = "0.18.4" +name = "pkg-config" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror 1.0.69", -] +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "gio-sys" -version = "0.18.1" +name = "portable-pty" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +checksum = "806ee80c2a03dbe1a9fb9534f8d19e4c0546b790cde8fd1fea9d6390644cb0be" dependencies = [ - "glib-sys", - "gobject-sys", + "anyhow", + "bitflags 1.3.2", + "downcast-rs", + "filedescriptor", + "lazy_static", "libc", - "system-deps", + "log", + "nix", + "serial", + "shared_library", + "shell-words", "winapi", + "winreg", ] [[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.11.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.2", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.18.2" +name = "potential_utf" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", + "zerovec", ] [[package]] -name = "gtk-sys" -version = "0.18.2" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", + "zerocopy", ] [[package]] -name = "gtk3-macros" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" -dependencies = [ - "log", - "mac", - "markup5ever 0.14.1", - "match_token", -] - -[[package]] -name = "html5ever" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e" -dependencies = [ - "log", - "markup5ever 0.36.1", -] - -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ico" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", -] - -[[package]] -name = "infer" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" -dependencies = [ - "cfb", -] - -[[package]] -name = "ioctl-rs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d" -dependencies = [ - "libc", -] - -[[package]] -name = "ipnet" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" - -[[package]] -name = "iri-string" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "itoa" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" - -[[package]] -name = "javascriptcore-rs" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" -dependencies = [ - "bitflags 1.3.2", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" -dependencies = [ - "jsonptr", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "jsonptr" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "keyboard-types" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" -dependencies = [ - "bitflags 2.11.0", - "serde", - "unicode-segmentation", -] - -[[package]] -name = "kuchikiki" -version = "0.8.8-speedreader" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" -dependencies = [ - "cssparser 0.29.6", - "html5ever 0.29.1", - "indexmap 2.13.0", - "selectors 0.24.0", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - -[[package]] -name = "libappindicator" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" -dependencies = [ - "glib", - "gtk", - "gtk-sys", - "libappindicator-sys", - "log", -] - -[[package]] -name = "libappindicator-sys" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" -dependencies = [ - "gtk-sys", - "libloading", - "once_cell", -] - -[[package]] -name = "libc" -version = "0.2.183" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libredox" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" -dependencies = [ - "libc", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "markup5ever" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" -dependencies = [ - "log", - "phf 0.11.3", - "phf_codegen 0.11.3", - "string_cache 0.8.9", - "string_cache_codegen 0.5.4", - "tendril", -] - -[[package]] -name = "markup5ever" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - -[[package]] -name = "match_token" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.61.2", -] - -[[package]] -name = "muda" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" -dependencies = [ - "crossbeam-channel", - "dpi", - "gtk", - "keyboard-types", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "once_cell", - "png", - "serde", - "thiserror 2.0.18", - "windows-sys 0.60.2", -] - -[[package]] -name = "ndk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" -dependencies = [ - "bitflags 2.11.0", - "jni-sys", - "log", - "ndk-sys", - "num_enum", - "raw-window-handle", - "thiserror 1.0.69", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.6.0+11769913" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", - "pin-utils", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "num-conv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_enum" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" -dependencies = [ - "proc-macro-crate 3.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "objc2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" -dependencies = [ - "objc2-encode", - "objc2-exception-helper", -] - -[[package]] -name = "objc2-app-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.11.0", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-core-graphics" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" -dependencies = [ - "bitflags 2.11.0", - "dispatch2", - "objc2", - "objc2-core-foundation", - "objc2-io-surface", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-exception-helper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" -dependencies = [ - "cc", -] - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-surface" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-web-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "pango" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link 0.2.1", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_shared 0.8.0", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_codegen" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "phf_macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.2", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher 1.0.2", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plist" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" -dependencies = [ - "base64 0.22.1", - "indexmap 2.13.0", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "portable-pty" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806ee80c2a03dbe1a9fb9534f8d19e4c0546b790cde8fd1fea9d6390644cb0be" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "downcast-rs", - "filedescriptor", - "lazy_static", - "libc", - "log", - "nix", - "serial", - "shared_library", - "shell-words", - "winapi", - "winreg 0.10.1", -] - -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime 0.6.3", - "toml_edit 0.20.2", -] - -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit 0.25.4+spec-1.1.0", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.11.0", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "reqwest" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "sync_wrapper", - "tokio", - "tokio-util", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", -] - -[[package]] -name = "rfd" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" -dependencies = [ - "block2", - "dispatch2", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "log", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows-sys 0.60.2", -] - -[[package]] -name = "rusqlite" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" -dependencies = [ - "bitflags 2.11.0", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "url", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.117", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "selectors" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" -dependencies = [ - "bitflags 1.3.2", - "cssparser 0.29.6", - "derive_more 0.99.20", - "fxhash", - "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc 0.2.0", - "smallvec", -] - -[[package]] -name = "selectors" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fdfed56cd634f04fe8b9ddf947ae3dc493483e819593d2ba17df9ad05db8b2" -dependencies = [ - "bitflags 2.11.0", - "cssparser 0.36.0", - "derive_more 2.1.1", - "log", - "new_debug_unreachable", - "phf 0.13.1", - "phf_codegen 0.13.1", - "precomputed-hash", - "rustc-hash", - "servo_arc 0.4.3", - "smallvec", -] - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-untagged" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" -dependencies = [ - "erased-serde", - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" -dependencies = [ - "itoa", - "serde", - "serde_core", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_spanned" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.13.0", - "schemars 0.9.0", - "schemars 1.2.1", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serial" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86" -dependencies = [ - "serial-core", - "serial-unix", - "serial-windows", -] - -[[package]] -name = "serial-core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581" -dependencies = [ - "libc", -] - -[[package]] -name = "serial-unix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7" -dependencies = [ - "ioctl-rs", - "libc", - "serial-core", - "termios", -] - -[[package]] -name = "serial-windows" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162" -dependencies = [ - "libc", - "serial-core", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "servo_arc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "servo_arc" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" -dependencies = [ - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "shared_library" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -dependencies = [ - "lazy_static", - "libc", -] - -[[package]] -name = "shell-words" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "simd-adler32" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "softbuffer" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" -dependencies = [ - "bytemuck", - "js-sys", - "ndk", - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation", - "objc2-quartz-core", - "raw-window-handle", - "redox_syscall", - "tracing", - "wasm-bindgen", - "web-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "soup3" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" -dependencies = [ - "futures-channel", - "gio", - "glib", - "libc", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.13.1", - "precomputed-hash", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - -[[package]] -name = "string_cache_codegen" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "swift-rs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" -dependencies = [ - "base64 0.21.7", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml 0.8.2", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.34.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d52c379e63da659a483a958110bbde891695a0ecb53e48cc7786d5eda7bb" -dependencies = [ - "bitflags 2.11.0", - "block2", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch2", - "dlopen2", - "dpi", - "gdkwayland-sys", - "gdkx11-sys", - "gtk", - "jni", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "once_cell", - "parking_lot", - "raw-window-handle", - "tao-macros", - "unicode-segmentation", - "url", - "windows", - "windows-core 0.61.2", - "windows-version", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - -[[package]] -name = "tauri" -version = "2.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d" -dependencies = [ - "anyhow", - "bytes", - "cookie", - "dirs", - "dunce", - "embed_plist", - "getrandom 0.3.4", - "glob", - "gtk", - "heck 0.5.0", - "http", - "jni", - "libc", - "log", - "mime", - "muda", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "objc2-ui-kit", - "objc2-web-kit", - "percent-encoding", - "plist", - "raw-window-handle", - "reqwest", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "swift-rs", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "thiserror 2.0.18", - "tokio", - "tray-icon", - "url", - "webkit2gtk", - "webview2-com", - "window-vibrancy", - "windows", -] - -[[package]] -name = "tauri-build" -version = "2.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d" -dependencies = [ - "anyhow", - "cargo_toml", - "dirs", - "glob", - "heck 0.5.0", - "json-patch", - "schemars 0.8.22", - "semver", - "serde", - "serde_json", - "tauri-utils", - "tauri-winres", - "toml 0.9.12+spec-1.1.0", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29" -dependencies = [ - "base64 0.22.1", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "syn 2.0.117", - "tauri-utils", - "thiserror 2.0.18", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa" -dependencies = [ - "anyhow", - "glob", - "plist", - "schemars 0.8.22", - "serde", - "serde_json", - "tauri-utils", - "toml 0.9.12+spec-1.1.0", - "walkdir", -] - -[[package]] -name = "tauri-plugin-dialog" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9204b425d9be8d12aa60c2a83a289cf7d1caae40f57f336ed1155b3a5c0e359b" -dependencies = [ - "log", - "raw-window-handle", - "rfd", - "serde", - "serde_json", - "tauri", - "tauri-plugin", - "tauri-plugin-fs", - "thiserror 2.0.18", - "url", -] - -[[package]] -name = "tauri-plugin-fs" -version = "2.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed390cc669f937afeb8b28032ce837bac8ea023d975a2e207375ec05afaf1804" -dependencies = [ - "anyhow", - "dunce", - "glob", - "percent-encoding", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_repr", - "tauri", - "tauri-plugin", - "tauri-utils", - "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", - "url", -] - -[[package]] -name = "tauri-runtime" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2" -dependencies = [ - "cookie", - "dpi", - "gtk", - "http", - "jni", - "objc2", - "objc2-ui-kit", - "objc2-web-kit", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror 2.0.18", - "url", - "webkit2gtk", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-runtime-wry" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e" -dependencies = [ - "gtk", - "http", - "jni", - "log", - "objc2", - "objc2-app-kit", - "once_cell", - "percent-encoding", - "raw-window-handle", - "softbuffer", - "tao", - "tauri-runtime", - "tauri-utils", - "url", - "webkit2gtk", - "webview2-com", - "windows", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d" -dependencies = [ - "anyhow", - "brotli", - "cargo_metadata", - "ctor", - "dunce", - "glob", - "html5ever 0.29.1", - "http", - "infer", - "json-patch", - "kuchikiki", - "log", - "memchr", - "phf 0.11.3", - "proc-macro2", - "quote", - "regex", - "schemars 0.8.22", - "semver", - "serde", - "serde-untagged", - "serde_json", - "serde_with", - "swift-rs", - "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", - "url", - "urlpattern", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-winres" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" -dependencies = [ - "dunce", - "embed-resource", - "toml 0.9.12+spec-1.1.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termios" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a" -dependencies = [ - "libc", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tokio" -version = "1.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" -dependencies = [ - "bytes", - "libc", - "mio", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.3", - "toml_edit 0.20.2", -] - -[[package]] -name = "toml" -version = "0.9.12+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" -dependencies = [ - "indexmap 2.13.0", - "serde_core", - "serde_spanned 1.0.4", - "toml_datetime 0.7.5+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow 0.7.15", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_datetime" -version = "1.0.0+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.13.0", - "toml_datetime 0.6.3", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap 2.13.0", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.3", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.25.4+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" -dependencies = [ - "indexmap 2.13.0", - "toml_datetime 1.0.0+spec-1.1.0", - "toml_parser", - "winnow 0.7.15", -] - -[[package]] -name = "toml_parser" -version = "1.0.9+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" -dependencies = [ - "winnow 0.7.15", -] - -[[package]] -name = "toml_writer" -version = "1.0.6+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" -dependencies = [ - "bitflags 2.11.0", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "http-range-header", - "httpdate", - "iri-string", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "log", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tray-icon" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" -dependencies = [ - "crossbeam-channel", - "dirs", - "libappindicator", - "muda", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation", - "once_cell", - "png", - "serde", - "thiserror 2.0.18", - "windows-sys 0.60.2", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha1", - "thiserror 1.0.69", - "utf-8", -] - -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "unic-char-property" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - -[[package]] -name = "unic-ucd-ident" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", -] - -[[package]] -name = "unicase" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", - "serde_derive", -] - -[[package]] -name = "urlpattern" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" -dependencies = [ - "regex", - "serde", - "unic-ucd-ident", - "url", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "uuid" -version = "1.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" -dependencies = [ - "getrandom 0.4.2", - "js-sys", - "serde_core", - "wasm-bindgen", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.2+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" -dependencies = [ - "cfg-if", - "futures-util", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.114" +name = "proc-macro2" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] -name = "wasm-encoder" -version = "0.244.0" +name = "quote" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ - "leb128fmt", - "wasmparser", + "proc-macro2", ] [[package]] -name = "wasm-metadata" -version = "0.244.0" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "anyhow", - "indexmap 2.13.0", - "wasm-encoder", - "wasmparser", + "libc", + "rand_chacha", + "rand_core", ] [[package]] -name = "wasm-streams" -version = "0.5.0" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "ppv-lite86", + "rand_core", ] [[package]] -name = "wasmparser" -version = "0.244.0" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "bitflags 2.11.0", - "hashbrown 0.15.5", - "indexmap 2.13.0", - "semver", + "getrandom", ] [[package]] -name = "web-sys" -version = "0.3.91" +name = "rusqlite" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ - "js-sys", - "wasm-bindgen", + "bitflags 2.11.0", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", ] [[package]] -name = "web_atoms" -version = "0.2.3" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576" -dependencies = [ - "phf 0.13.1", - "phf_codegen 0.13.1", - "string_cache 0.9.0", - "string_cache_codegen 0.6.1", -] +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] -name = "webkit2gtk" -version = "2.0.2" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] -name = "webkit2gtk-sys" -version = "2.0.2" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "bitflags 1.3.2", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", + "serde_core", + "serde_derive", ] [[package]] -name = "webview2-com" -version = "0.38.2" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows", - "windows-core 0.61.2", - "windows-implement", - "windows-interface", + "serde_derive", ] [[package]] -name = "webview2-com-macros" -version = "0.8.1" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] -name = "webview2-com-sys" -version = "0.38.2" +name = "serde_json" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "thiserror 2.0.18", - "windows", - "windows-core 0.61.2", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", ] [[package]] -name = "winapi" -version = "0.3.9" +name = "serde_path_to_error" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "itoa", + "serde", + "serde_core", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] [[package]] -name = "winapi-util" -version = "0.1.11" +name = "serial" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86" dependencies = [ - "windows-sys 0.61.2", + "serial-core", + "serial-unix", + "serial-windows", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" +name = "serial-core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581" +dependencies = [ + "libc", +] [[package]] -name = "window-vibrancy" -version = "0.6.0" +name = "serial-unix" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7" dependencies = [ - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "raw-window-handle", - "windows-sys 0.59.0", - "windows-version", + "ioctl-rs", + "libc", + "serial-core", + "termios", ] [[package]] -name = "windows" -version = "0.61.3" +name = "serial-windows" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162" dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", + "libc", + "serial-core", ] [[package]] -name = "windows-collections" -version = "0.2.0" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "windows-core 0.61.2", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "windows-core" -version = "0.61.2" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "windows-core" -version = "0.62.2" +name = "shared_library" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", + "lazy_static", + "libc", ] [[package]] -name = "windows-future" -version = "0.2.1" +name = "shell-words" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading", -] +checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" [[package]] -name = "windows-implement" -version = "0.60.2" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "windows-interface" -version = "0.59.3" +name = "signal-hook-registry" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "errno", + "libc", ] [[package]] -name = "windows-link" -version = "0.1.3" +name = "slab" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "windows-link" -version = "0.2.1" +name = "smallvec" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] -name = "windows-numerics" -version = "0.2.0" +name = "socket2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", + "libc", + "windows-sys", ] [[package]] -name = "windows-result" -version = "0.3.4" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] -name = "windows-result" -version = "0.4.1" +name = "syn" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ - "windows-link 0.2.1", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "windows-strings" -version = "0.4.2" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "windows-link 0.1.3", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "windows-strings" -version = "0.5.1" +name = "termios" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a" dependencies = [ - "windows-link 0.2.1", + "libc", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "windows-targets 0.42.2", + "thiserror-impl", ] [[package]] -name = "windows-sys" -version = "0.59.0" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "windows-sys" -version = "0.60.2" +name = "tinystr" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ - "windows-targets 0.53.5", + "displaydoc", + "zerovec", ] [[package]] -name = "windows-sys" -version = "0.61.2" +name = "tokio" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ - "windows-link 0.2.1", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "tokio-macros" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "windows-targets" -version = "0.52.6" +name = "tokio-tungstenite" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "futures-util", + "log", + "tokio", + "tungstenite", ] [[package]] -name = "windows-targets" -version = "0.53.5" +name = "tokio-util" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ - "windows-link 0.2.1", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] -name = "windows-threading" -version = "0.1.0" +name = "tower" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ - "windows-link 0.1.3", + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "windows-version" -version = "0.1.7" +name = "tower-http" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "windows-link 0.2.1", + "bitflags 2.11.0", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] -name = "windows_i686_gnu" -version = "0.53.1" +name = "tower-service" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" +name = "tracing" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-core", +] [[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" +name = "tracing-core" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "tungstenite" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "utf-8", +] [[package]] -name = "windows_i686_msvc" -version = "0.52.6" +name = "typenum" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] -name = "windows_i686_msvc" -version = "0.53.1" +name = "unicase" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +name = "unicode-ident" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" +name = "url" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" +name = "utf-8" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "wasm-bindgen" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" +name = "wasm-bindgen-macro" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] [[package]] -name = "winnow" -version = "0.5.40" +name = "wasm-bindgen-macro-support" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ - "memchr", + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", ] [[package]] -name = "winnow" -version = "0.7.15" +name = "wasm-bindgen-shared" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ - "memchr", + "unicode-ident", ] [[package]] -name = "winreg" -version = "0.10.1" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "winapi", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "winreg" -version = "0.55.0" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" -dependencies = [ - "cfg-if", - "windows-sys 0.59.0", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "wit-bindgen" -version = "0.51.0" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "wit-bindgen-core" -version = "0.51.0" +name = "windows-core" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "anyhow", - "heck 0.5.0", - "wit-parser", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "wit-bindgen-rust" -version = "0.51.0" +name = "windows-implement" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.13.0", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" +name = "windows-interface" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ - "anyhow", - "prettyplease", "proc-macro2", "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", + "syn", ] [[package]] -name = "wit-component" -version = "0.244.0" +name = "windows-link" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.0", - "indexmap 2.13.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "wit-parser" -version = "0.244.0" +name = "windows-result" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.13.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", + "windows-link", ] [[package]] -name = "writeable" -version = "0.6.2" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] [[package]] -name = "wry" -version = "0.54.3" +name = "windows-sys" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24eda84b5d488f99344e54b807138896cee8df0b2d16c793f1f6b80e6d8df1f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "base64 0.22.1", - "block2", - "cookie", - "crossbeam-channel", - "dirs", - "dom_query", - "dpi", - "dunce", - "gdkx11", - "gtk", - "http", - "javascriptcore-rs", - "jni", - "libc", - "ndk", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "objc2-ui-kit", - "objc2-web-kit", - "once_cell", - "percent-encoding", - "raw-window-handle", - "sha2", - "soup3", - "tao-macros", - "thiserror 2.0.18", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows", - "windows-core 0.61.2", - "windows-version", - "x11-dl", + "windows-link", ] [[package]] -name = "x11" -version = "2.21.0" +name = "winreg" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ - "libc", - "pkg-config", + "winapi", ] [[package]] -name = "x11-dl" -version = "2.21.0" +name = "writeable" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "yoke" @@ -5375,7 +1515,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", "synstructure", ] @@ -5396,7 +1536,7 @@ checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -5416,7 +1556,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", "synstructure", ] @@ -5450,7 +1590,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] diff --git a/apps/server/Cargo.toml b/apps/server/Cargo.toml index c78e446..5166a2c 100644 --- a/apps/server/Cargo.toml +++ b/apps/server/Cargo.toml @@ -3,9 +3,6 @@ name = "coder-studio" version = "0.1.3" edition = "2021" -[build-dependencies] -tauri-build = { version = "2.0.0", features = [] } - [dependencies] anyhow = "1.0" axum = { version = "0.7", features = ["ws"] } @@ -17,8 +14,6 @@ rusqlite = { version = "0.31", features = ["bundled"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha2 = "0.10" -tauri = { version = "2.0.0", features = [] } -tauri-plugin-dialog = "2.0.0" -tokio = { version = "1.40", features = ["rt-multi-thread", "macros", "process", "time"] } +tokio = { version = "1.40", features = ["rt-multi-thread", "macros", "process", "signal", "time"] } tower-http = { version = "0.6", features = ["cors", "fs"] } url = "2" diff --git a/apps/server/build.rs b/apps/server/build.rs deleted file mode 100644 index 261851f..0000000 --- a/apps/server/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - tauri_build::build(); -} diff --git a/apps/server/src/app.rs b/apps/server/src/app.rs index 79a1a59..0938a0e 100644 --- a/apps/server/src/app.rs +++ b/apps/server/src/app.rs @@ -6,12 +6,12 @@ use std::{ use portable_pty::{Child, MasterPty}; use rusqlite::Connection; -use tauri::AppHandle; use tokio::sync::broadcast; use crate::{ auth::{ip_guard::IpGuardMap, AuthRuntime}, models::TransportEvent, + AppHandle, }; #[derive(Clone)] diff --git a/apps/server/src/auth/mod.rs b/apps/server/src/auth/mod.rs index 8ab64f1..8e0aa5e 100644 --- a/apps/server/src/auth/mod.rs +++ b/apps/server/src/auth/mod.rs @@ -267,7 +267,7 @@ pub(crate) fn load_or_initialize_auth_runtime(app_data_dir: &Path) -> Result Result<(String, u16), String> { +pub(crate) fn transport_bind_config(app: &AppHandle) -> Result<(String, u16), String> { if let Ok(host) = std::env::var("CODER_STUDIO_HOST") { let port = std::env::var("CODER_STUDIO_PORT") .ok() @@ -314,14 +314,14 @@ pub(crate) fn transport_bind_config(app: &tauri::AppHandle) -> Result<(String, u Ok((auth.file.bind_host.clone(), auth.file.bind_port)) } -pub(crate) fn admin_config(app: &tauri::AppHandle) -> Result { +pub(crate) fn admin_config(app: &AppHandle) -> Result { let state: State = app.state(); let auth = state.auth.lock().map_err(|e| e.to_string())?; Ok(admin_config_response(&auth.file)) } pub(crate) fn admin_update_config( - app: &tauri::AppHandle, + app: &AppHandle, updates: &Map, ) -> Result { let state: State = app.state(); @@ -403,7 +403,7 @@ pub(crate) fn admin_update_config( }) } -pub(crate) fn admin_auth_status(app: &tauri::AppHandle) -> Result { +pub(crate) fn admin_auth_status(app: &AppHandle) -> Result { let state: State = app.state(); let auth = state.auth.lock().map_err(|e| e.to_string())?; let blocked_ip_count = { @@ -429,7 +429,7 @@ pub(crate) fn admin_auth_status(app: &tauri::AppHandle) -> Result Result, String> { +pub(crate) fn admin_blocked_ips(app: &AppHandle) -> Result, String> { let state: State = app.state(); let mut ip_guard = state.ip_guard.lock().map_err(|e| e.to_string())?; Ok(ip_guard::list_blocked(&mut ip_guard, now_epoch_ms()) @@ -439,7 +439,7 @@ pub(crate) fn admin_blocked_ips(app: &tauri::AppHandle) -> Result, clear_all: bool, ) -> Result { @@ -461,7 +461,7 @@ pub(crate) fn admin_unblock_ip( } pub(crate) fn login( - app: &tauri::AppHandle, + app: &AppHandle, headers: &HeaderMap, client_addr: SocketAddr, force_public: bool, @@ -549,7 +549,7 @@ pub(crate) fn login( } pub(crate) fn logout( - app: &tauri::AppHandle, + app: &AppHandle, headers: &HeaderMap, client_addr: SocketAddr, force_public: bool, @@ -571,7 +571,7 @@ pub(crate) fn logout( } pub(crate) fn lock( - app: &tauri::AppHandle, + app: &AppHandle, headers: &HeaderMap, client_addr: SocketAddr, force_public: bool, @@ -580,7 +580,7 @@ pub(crate) fn lock( } pub(crate) fn require_session( - app: &tauri::AppHandle, + app: &AppHandle, headers: &HeaderMap, client_addr: SocketAddr, force_public: bool, @@ -760,7 +760,7 @@ pub(crate) fn filter_allowed_worktrees( .collect() } -pub(crate) fn ensure_ip_not_blocked(app: &tauri::AppHandle, ip: &str) -> Result<(), AuthFailure> { +pub(crate) fn ensure_ip_not_blocked(app: &AppHandle, ip: &str) -> Result<(), AuthFailure> { let state: State = app.state(); let mut guard = state .ip_guard diff --git a/apps/server/src/command/http.rs b/apps/server/src/command/http.rs index ef2393d..d8bc2a4 100644 --- a/apps/server/src/command/http.rs +++ b/apps/server/src/command/http.rs @@ -338,11 +338,11 @@ fn require_optional_path_access( } fn require_workspace_access( - app: &tauri::AppHandle, + app: &AppHandle, workspace_id: &str, authorized: &AuthorizedRequest, ) -> Result<(String, ExecTarget), RpcError> { - let context = workspace_access_context(&app.state(), workspace_id).map_err(rpc_bad_request)?; + let context = workspace_access_context(app.state(), workspace_id).map_err(rpc_bad_request)?; require_path_access(&context.0, &context.1, authorized)?; Ok(context) } @@ -390,7 +390,7 @@ fn filter_bootstrap_for_public_mode( } fn dispatch_rpc( - app: &tauri::AppHandle, + app: &AppHandle, command: &str, payload: Value, authorized: &AuthorizedRequest, @@ -660,14 +660,6 @@ fn dispatch_rpc( ) .map_err(|e| rpc_bad_request(e.to_string())) } - "dialog_pick_folder" => { - let _req: EmptyRequest = parse_payload(payload).map_err(rpc_bad_request)?; - if authorized.request.public_mode { - return Err(rpc_forbidden("dialog_disabled_in_public_mode")); - } - serde_json::to_value(dialog_pick_folder(app.clone()).map_err(rpc_bad_request)?) - .map_err(|e| rpc_bad_request(e.to_string())) - } "claude_slash_skills" => { let req: ClaudeSlashSkillsRequest = parse_payload(payload).map_err(rpc_bad_request)?; require_path_access(&req.cwd, &ExecTarget::Native, authorized)?; @@ -1006,6 +998,12 @@ pub(crate) async fn health_handler() -> impl IntoResponse { })) } +pub(crate) struct TransportServer { + pub endpoint: String, + pub listener: tokio::net::TcpListener, + pub router: Router, +} + pub(crate) fn frontend_dist_dir() -> PathBuf { if let Ok(path) = std::env::var("CODER_STUDIO_DIST_DIR") { return PathBuf::from(path); @@ -1052,7 +1050,7 @@ pub(crate) async fn shutdown_handler( } let app = state.app.clone(); - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { tokio::time::sleep(std::time::Duration::from_millis(50)).await; app.exit(0); }); @@ -1060,7 +1058,7 @@ pub(crate) async fn shutdown_handler( json_success(json!({ "ok": true })) } -pub(crate) fn build_transport_router(app: &tauri::AppHandle) -> Router { +pub(crate) fn build_transport_router(app: &AppHandle) -> Router { let shared = HttpServerState { app: app.clone() }; let cors = CorsLayer::new() .allow_origin(Any) @@ -1101,7 +1099,7 @@ pub(crate) fn build_transport_router(app: &tauri::AppHandle) -> Router { } } -pub(crate) fn start_transport_server(app: &tauri::AppHandle) -> Result { +pub(crate) fn start_transport_server(app: &AppHandle) -> Result { let (bind_host, bind_port) = if cfg!(debug_assertions) { ("127.0.0.1".to_string(), DEV_BACKEND_PORT) } else { @@ -1118,16 +1116,10 @@ pub(crate) fn start_transport_server(app: &tauri::AppHandle) -> Result listener, - Err(_) => return, - }; - let _ = axum::serve( - listener, - router.into_make_service_with_connect_info::(), - ) - .await; - }); - Ok(endpoint) + let listener = tokio::net::TcpListener::from_std(listener).map_err(|e| e.to_string())?; + Ok(TransportServer { + endpoint, + listener, + router, + }) } diff --git a/apps/server/src/infra/db.rs b/apps/server/src/infra/db.rs index 6e5918a..efe6bb2 100644 --- a/apps/server/src/infra/db.rs +++ b/apps/server/src/infra/db.rs @@ -552,7 +552,7 @@ pub(crate) fn mark_active_sessions_interrupted_on_boot(conn: &Connection) -> Res } pub(crate) fn with_db( - state: &State<'_, AppState>, + state: State<'_, AppState>, f: impl FnOnce(&Connection) -> Result, ) -> Result { let guard = state.db.lock().map_err(|e| e.to_string())?; @@ -561,20 +561,20 @@ pub(crate) fn with_db( } pub(crate) fn workbench_bootstrap( - state: &State<'_, AppState>, + state: State<'_, AppState>, ) -> Result { with_db(state, build_bootstrap_from_conn) } pub(crate) fn workspace_snapshot( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, ) -> Result { with_db(state, |conn| build_snapshot_from_conn(conn, workspace_id)) } pub(crate) fn workspace_access_context( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, ) -> Result<(String, ExecTarget), String> { with_db(state, |conn| { @@ -584,7 +584,7 @@ pub(crate) fn workspace_access_context( } pub(crate) fn launch_workspace_record( - state: &State<'_, AppState>, + state: State<'_, AppState>, source: WorkspaceSource, project_path: String, idle_policy: IdlePolicy, @@ -659,7 +659,7 @@ fn create_workspace_session_from_template( } pub(crate) fn create_workspace_session( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, mode: SessionMode, ) -> Result { @@ -706,7 +706,7 @@ pub(crate) fn create_workspace_session( } pub(crate) fn update_workspace_session( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, patch: SessionPatch, @@ -756,7 +756,7 @@ pub(crate) fn update_workspace_session( } pub(crate) fn switch_workspace_session( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, ) -> Result { @@ -776,7 +776,7 @@ pub(crate) fn switch_workspace_session( } pub(crate) fn archive_workspace_session( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, ) -> Result { @@ -800,7 +800,7 @@ pub(crate) fn archive_workspace_session( } pub(crate) fn update_workspace_idle_policy( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, policy: IdlePolicy, ) -> Result<(), String> { @@ -815,7 +815,7 @@ pub(crate) fn update_workspace_idle_policy( } pub(crate) fn activate_workspace_ui( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, ) -> Result { with_db(state, |conn| { @@ -826,7 +826,7 @@ pub(crate) fn activate_workspace_ui( } pub(crate) fn close_workspace_ui( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, ) -> Result { with_db(state, |conn| { @@ -843,7 +843,7 @@ pub(crate) fn close_workspace_ui( } pub(crate) fn update_workbench_layout( - state: &State<'_, AppState>, + state: State<'_, AppState>, layout: WorkbenchLayout, ) -> Result { with_db(state, |conn| { @@ -855,7 +855,7 @@ pub(crate) fn update_workbench_layout( } pub(crate) fn patch_workspace_view_state( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, patch: WorkspaceViewPatch, ) -> Result { @@ -874,7 +874,7 @@ pub(crate) fn patch_workspace_view_state( } pub(crate) fn append_session_stream( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, chunk: &str, @@ -898,7 +898,7 @@ pub(crate) fn append_session_stream( } pub(crate) fn set_session_status( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, status: SessionStatus, @@ -919,7 +919,7 @@ pub(crate) fn set_session_status( } pub(crate) fn set_session_claude_id( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, claude_session_id: String, @@ -939,7 +939,7 @@ pub(crate) fn set_session_claude_id( } pub(crate) fn load_session( - state: &State<'_, AppState>, + state: State<'_, AppState>, workspace_id: &str, session_id: u64, ) -> Result { diff --git a/apps/server/src/main.rs b/apps/server/src/main.rs index 8718c56..116beb7 100644 --- a/apps/server/src/main.rs +++ b/apps/server/src/main.rs @@ -21,8 +21,6 @@ pub(crate) use portable_pty::{native_pty_system, CommandBuilder, PtySize}; pub(crate) use rusqlite::{params, Connection}; pub(crate) use serde::{Deserialize, Serialize}; pub(crate) use serde_json::{json, Map, Value}; -pub(crate) use tauri::{Emitter, Manager, State}; -pub(crate) use tauri_plugin_dialog::DialogExt; pub(crate) use tokio::sync::broadcast; pub(crate) use tower_http::{ cors::{Any, CorsLayer}, @@ -34,6 +32,7 @@ mod auth; mod command; mod infra; mod models; +mod runtime; mod services; mod ws; @@ -79,13 +78,14 @@ pub(crate) use models::{ WorkspaceSourceKind, WorkspaceSummary, WorkspaceTree, WorkspaceViewPatch, WorkspaceViewState, WorktreeDetail, WorktreeInfo, }; +pub(crate) use runtime::{AppHandle, State}; pub(crate) use services::agent::{agent_resize, agent_send, agent_start, agent_stop}; pub(crate) use services::claude::{ current_app_bin_for_target, current_hook_endpoint, ensure_claude_hook_settings, run_claude_hook_helper, start_claude_hook_receiver, }; pub(crate) use services::filesystem::{ - dialog_pick_folder, file_preview, file_save, filesystem_list, filesystem_roots, workspace_tree, + file_preview, file_save, filesystem_list, filesystem_roots, workspace_tree, }; pub(crate) use services::git::{ git_changes, git_commit, git_diff, git_diff_file, git_discard_all, git_discard_file, @@ -106,101 +106,125 @@ pub(crate) use ws::server::{ agent_key, emit_agent, emit_agent_lifecycle, emit_terminal, terminal_key, }; -fn resolve_app_data_dir(app: &tauri::AppHandle) -> Result { - if let Ok(path) = std::env::var("CODER_STUDIO_DATA_DIR") { - return Ok(PathBuf::from(path)); +use runtime::RuntimeHandle; + +fn env_path(key: &str) -> Option { + std::env::var_os(key).map(PathBuf::from) +} + +fn home_dir() -> Option { + #[cfg(target_os = "windows")] + { + env_path("USERPROFILE").or_else(|| { + let drive = std::env::var_os("HOMEDRIVE")?; + let path = std::env::var_os("HOMEPATH")?; + Some(PathBuf::from(format!( + "{}{}", + drive.to_string_lossy(), + path.to_string_lossy() + ))) + }) + } + + #[cfg(not(target_os = "windows"))] + { + env_path("HOME") + } +} + +fn resolve_state_dir() -> Result { + if let Some(path) = env_path("CODER_STUDIO_HOME") { + return Ok(path); + } + + #[cfg(target_os = "macos")] + { + let home = home_dir().ok_or_else(|| std::io::Error::other("missing home directory"))?; + return Ok(home.join("Library/Application Support").join("coder-studio")); + } + + #[cfg(target_os = "windows")] + { + let home = home_dir().ok_or_else(|| std::io::Error::other("missing home directory"))?; + let local_app_data = env_path("LOCALAPPDATA").unwrap_or_else(|| home.join("AppData/Local")); + return Ok(local_app_data.join("coder-studio")); + } + + #[cfg(all(not(target_os = "macos"), not(target_os = "windows")))] + { + if let Some(path) = env_path("XDG_STATE_HOME") { + return Ok(path.join("coder-studio")); + } + + let home = home_dir().ok_or_else(|| std::io::Error::other("missing home directory"))?; + Ok(home.join(".local/state").join("coder-studio")) } - app.path() - .app_data_dir() - .map_err(|error| std::io::Error::other(error.to_string())) } -fn main() { +fn resolve_app_data_dir() -> Result { + if let Some(path) = env_path("CODER_STUDIO_DATA_DIR") { + return Ok(path); + } + + Ok(resolve_state_dir()?.join("data")) +} + +#[tokio::main] +async fn main() { if std::env::args().any(|arg| arg == "--coder-studio-claude-hook") { run_claude_hook_helper(); return; } - tauri::Builder::default() - .manage(AppState::default()) - .plugin(tauri_plugin_dialog::init()) - .invoke_handler(tauri::generate_handler![ - launch_workspace, - workbench_bootstrap, - workspace_snapshot, - activate_workspace, - close_workspace, - update_workbench_layout, - workspace_view_update, - create_session, - session_update, - switch_session, - archive_session, - update_idle_policy, - git_status, - git_diff, - git_changes, - git_diff_file, - git_file_diff_payload, - git_stage_all, - git_stage_file, - git_unstage_all, - git_unstage_file, - git_discard_all, - git_discard_file, - git_commit, - worktree_list, - worktree_inspect, - workspace_tree, - file_preview, - file_save, - filesystem_roots, - filesystem_list, - command_exists, - dialog_pick_folder, - claude_slash_skills, - terminal_create, - terminal_write, - terminal_resize, - terminal_close, - agent_start, - agent_send, - agent_stop, - agent_resize - ]) - .setup(|app| { - let app_data = resolve_app_data_dir(app.handle())?; - std::fs::create_dir_all(&app_data)?; - let auth_runtime = - load_or_initialize_auth_runtime(&app_data).map_err(std::io::Error::other)?; - let db_path = app_data.join("coder-studio.db"); - let conn = Connection::open(db_path)?; - init_db(&conn)?; - mark_active_sessions_interrupted_on_boot(&conn).map_err(std::io::Error::other)?; - start_claude_hook_receiver(app.handle()).map_err(std::io::Error::other)?; - let state: State = app.state(); - { - let mut auth_guard = state - .auth - .lock() - .map_err(|e| std::io::Error::other(e.to_string()))?; - *auth_guard = auth_runtime; - } - let mut guard = state - .db - .lock() - .map_err(|e| std::io::Error::other(e.to_string()))?; - *guard = Some(conn); - let transport_endpoint = - start_transport_server(app.handle()).map_err(std::io::Error::other)?; - if cfg!(debug_assertions) { - println!("Coder Studio web dev server: {DEV_FRONTEND_URL}"); - println!("Coder Studio local server: {transport_endpoint}"); - } else { - println!("Coder Studio server running at {transport_endpoint}"); - } - Ok(()) - }) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + if let Err(error) = run().await { + eprintln!("failed to start coder-studio: {error}"); + std::process::exit(1); + } +} + +async fn run() -> Result<(), String> { + let app_data = resolve_app_data_dir().map_err(|e| e.to_string())?; + std::fs::create_dir_all(&app_data).map_err(|e| e.to_string())?; + + let auth_runtime = load_or_initialize_auth_runtime(&app_data)?; + let db_path = app_data.join("coder-studio.db"); + let conn = Connection::open(db_path).map_err(|e| e.to_string())?; + init_db(&conn).map_err(|e| e.to_string())?; + mark_active_sessions_interrupted_on_boot(&conn)?; + + let (app, mut shutdown_rx) = RuntimeHandle::new(); + start_claude_hook_receiver(&app)?; + + let state: State = app.state(); + { + let mut auth_guard = state.auth.lock().map_err(|e| e.to_string())?; + *auth_guard = auth_runtime; + } + { + let mut db_guard = state.db.lock().map_err(|e| e.to_string())?; + *db_guard = Some(conn); + } + + let transport_server = start_transport_server(&app)?; + if cfg!(debug_assertions) { + println!("Coder Studio web dev server: {DEV_FRONTEND_URL}"); + println!("Coder Studio local server: {}", transport_server.endpoint); + } else { + println!("Coder Studio server running at {}", transport_server.endpoint); + } + + axum::serve( + transport_server.listener, + transport_server + .router + .into_make_service_with_connect_info::(), + ) + .with_graceful_shutdown(async move { + tokio::select! { + _ = shutdown_rx.changed() => {} + _ = tokio::signal::ctrl_c() => {} + } + }) + .await + .map_err(|e| e.to_string()) } diff --git a/apps/server/src/runtime.rs b/apps/server/src/runtime.rs new file mode 100644 index 0000000..ababad7 --- /dev/null +++ b/apps/server/src/runtime.rs @@ -0,0 +1,39 @@ +use std::sync::Arc; + +use serde::Serialize; +use tokio::sync::watch; + +use crate::app::AppState; + +pub(crate) type AppHandle = Arc; +pub(crate) type State<'a, T> = &'a T; + +pub(crate) struct RuntimeHandle { + state: AppState, + shutdown_tx: watch::Sender, +} + +impl RuntimeHandle { + pub(crate) fn new() -> (AppHandle, watch::Receiver) { + let (shutdown_tx, shutdown_rx) = watch::channel(false); + ( + Arc::new(Self { + state: AppState::default(), + shutdown_tx, + }), + shutdown_rx, + ) + } + + pub(crate) fn state(&self) -> State<'_, AppState> { + &self.state + } + + pub(crate) fn exit(&self, _code: i32) { + let _ = self.shutdown_tx.send(true); + } + + pub(crate) fn emit(&self, _event: &str, _payload: T) -> Result<(), String> { + Ok(()) + } +} diff --git a/apps/server/src/services/agent.rs b/apps/server/src/services/agent.rs index ecfac8f..c6729ab 100644 --- a/apps/server/src/services/agent.rs +++ b/apps/server/src/services/agent.rs @@ -1,12 +1,11 @@ use crate::*; -#[tauri::command] pub(crate) fn agent_start( workspace_id: String, session_id: String, provider: String, command: String, - app: tauri::AppHandle, + app: AppHandle, state: State<'_, AppState>, ) -> Result { let key = agent_key(&workspace_id, &session_id); @@ -136,7 +135,6 @@ pub(crate) fn agent_start( Ok(AgentStartResult { started: true }) } -#[tauri::command] pub(crate) fn agent_send( workspace_id: String, session_id: String, @@ -182,7 +180,6 @@ pub(crate) fn agent_send( } } -#[tauri::command] pub(crate) fn agent_stop( workspace_id: String, session_id: String, @@ -211,7 +208,6 @@ pub(crate) fn agent_stop( Ok(()) } -#[tauri::command] pub(crate) fn agent_resize( workspace_id: String, session_id: String, diff --git a/apps/server/src/services/claude.rs b/apps/server/src/services/claude.rs index fc83830..83bc13d 100644 --- a/apps/server/src/services/claude.rs +++ b/apps/server/src/services/claude.rs @@ -73,7 +73,7 @@ fn normalize_claude_lifecycle(payload: &Value) -> Option<(&'static str, String)> Some((normalized, hook_event.to_string())) } -fn handle_claude_hook_payload(app: &tauri::AppHandle, envelope: ClaudeHookEnvelope) { +fn handle_claude_hook_payload(app: &AppHandle, envelope: ClaudeHookEnvelope) { if let Some(claude_session_id) = envelope .payload .get("session_id") @@ -106,7 +106,7 @@ fn handle_claude_hook_payload(app: &tauri::AppHandle, envelope: ClaudeHookEnvelo } } -pub(crate) fn start_claude_hook_receiver(app: &tauri::AppHandle) -> Result<(), String> { +pub(crate) fn start_claude_hook_receiver(app: &AppHandle) -> Result<(), String> { let listener = TcpListener::bind("127.0.0.1:0").map_err(|e| e.to_string())?; let endpoint = format!( "http://127.0.0.1:{}/claude-hook", @@ -149,7 +149,7 @@ pub(crate) fn start_claude_hook_receiver(app: &tauri::AppHandle) -> Result<(), S Ok(()) } -pub(crate) fn current_hook_endpoint(app: &tauri::AppHandle) -> Result { +pub(crate) fn current_hook_endpoint(app: &AppHandle) -> Result { let state: State = app.state(); let guard = state.hook_endpoint.lock().map_err(|e| e.to_string())?; guard.clone().ok_or("hook_endpoint_not_ready".to_string()) diff --git a/apps/server/src/services/filesystem.rs b/apps/server/src/services/filesystem.rs index 5f1eb12..9cde295 100644 --- a/apps/server/src/services/filesystem.rs +++ b/apps/server/src/services/filesystem.rs @@ -2,7 +2,6 @@ use crate::infra::support::windows_drive_roots; use crate::*; -#[tauri::command] pub(crate) fn workspace_tree( path: String, target: ExecTarget, @@ -70,7 +69,6 @@ pub(crate) fn workspace_tree( }) } -#[tauri::command] pub(crate) fn file_preview(path: String) -> Result { const MAX_PREVIEW_BYTES: usize = 200_000; let bytes = std::fs::read(&path).map_err(|e| e.to_string())?; @@ -82,13 +80,11 @@ pub(crate) fn file_preview(path: String) -> Result { Ok(FilePreview { path, content }) } -#[tauri::command] pub(crate) fn file_save(path: String, content: String) -> Result { std::fs::write(&path, content.as_bytes()).map_err(|e| e.to_string())?; Ok(FilePreview { path, content }) } -#[tauri::command] pub(crate) fn filesystem_roots(target: ExecTarget) -> Result, String> { match target { ExecTarget::Native => { @@ -137,7 +133,6 @@ pub(crate) fn filesystem_roots(target: ExecTarget) -> Result } } -#[tauri::command] pub(crate) fn filesystem_list( target: ExecTarget, path: Option, @@ -204,15 +199,3 @@ pub(crate) fn filesystem_list( fallback_reason, }) } - -#[tauri::command] -pub(crate) fn dialog_pick_folder(app: tauri::AppHandle) -> Result, String> { - Ok(app - .dialog() - .file() - .blocking_pick_folder() - .map(|path| path.into_path()) - .transpose() - .map_err(|e| e.to_string())? - .map(|path| path.to_string_lossy().to_string())) -} diff --git a/apps/server/src/services/git.rs b/apps/server/src/services/git.rs index 03b0555..c332dd4 100644 --- a/apps/server/src/services/git.rs +++ b/apps/server/src/services/git.rs @@ -14,7 +14,6 @@ pub(crate) fn git_status_label(code: char) -> &'static str { } } -#[tauri::command] pub(crate) fn git_status(path: String, target: ExecTarget) -> Result { let resolved = resolve_git_repo_path(&path, &target)?; let branch = run_cmd( @@ -42,7 +41,6 @@ pub(crate) fn git_status(path: String, target: ExecTarget) -> Result Result { let resolved = resolve_git_repo_path(&path, &target)?; if git_has_head(&resolved, &target) { @@ -55,14 +53,12 @@ pub(crate) fn git_diff(path: String, target: ExecTarget) -> Result Result, String> { let resolved = resolve_git_repo_path(&path, &target)?; let raw = run_cmd(&target, &resolved, &["git", "status", "--porcelain"]).unwrap_or_default(); Ok(parse_git_changes(&raw)) } -#[tauri::command] pub(crate) fn git_diff_file( path: String, target: ExecTarget, @@ -86,7 +82,6 @@ pub(crate) fn git_diff_file( } } -#[tauri::command] pub(crate) fn git_file_diff_payload( path: String, target: ExecTarget, @@ -131,13 +126,11 @@ pub(crate) fn git_file_diff_payload( }) } -#[tauri::command] pub(crate) fn git_stage_all(path: String, target: ExecTarget) -> Result<(), String> { let resolved = resolve_git_repo_path(&path, &target)?; run_cmd(&target, &resolved, &["git", "add", "-A"]).map(|_| ()) } -#[tauri::command] pub(crate) fn git_stage_file( path: String, target: ExecTarget, @@ -150,7 +143,6 @@ pub(crate) fn git_stage_file( .map_err(|error| format!("{} (input: {}, resolved: {})", error, file_path, relative)) } -#[tauri::command] pub(crate) fn git_unstage_all(path: String, target: ExecTarget) -> Result<(), String> { let resolved = resolve_git_repo_path(&path, &target)?; if git_has_head(&resolved, &target) { @@ -160,7 +152,6 @@ pub(crate) fn git_unstage_all(path: String, target: ExecTarget) -> Result<(), St } } -#[tauri::command] pub(crate) fn git_unstage_file( path: String, target: ExecTarget, @@ -187,7 +178,6 @@ pub(crate) fn git_unstage_file( } } -#[tauri::command] pub(crate) fn git_discard_all(path: String, target: ExecTarget) -> Result<(), String> { let resolved = resolve_git_repo_path(&path, &target)?; if git_has_head(&resolved, &target) { @@ -199,7 +189,6 @@ pub(crate) fn git_discard_all(path: String, target: ExecTarget) -> Result<(), St Ok(()) } -#[tauri::command] pub(crate) fn git_discard_file( path: String, target: ExecTarget, @@ -253,7 +242,6 @@ pub(crate) fn git_discard_file( } } -#[tauri::command] pub(crate) fn git_commit( path: String, target: ExecTarget, @@ -267,7 +255,6 @@ pub(crate) fn git_commit( run_cmd(&target, &resolved, &["git", "commit", "-m", trimmed]) } -#[tauri::command] pub(crate) fn worktree_list(path: String, target: ExecTarget) -> Result, String> { let resolved = resolve_git_repo_path(&path, &target)?; let raw = run_cmd( diff --git a/apps/server/src/services/system.rs b/apps/server/src/services/system.rs index 526d123..e636f94 100644 --- a/apps/server/src/services/system.rs +++ b/apps/server/src/services/system.rs @@ -254,7 +254,6 @@ fn walk_project_claude_roots( } } -#[tauri::command] pub(crate) fn claude_slash_skills(cwd: String) -> Result, String> { let mut entries = Vec::new(); let mut seen_commands = HashSet::new(); @@ -285,7 +284,6 @@ pub(crate) fn claude_slash_skills(cwd: String) -> Result, ) -> Result { let terminal_id = { @@ -86,7 +85,6 @@ pub(crate) fn terminal_create( }) } -#[tauri::command] pub(crate) fn terminal_write( workspace_id: String, terminal_id: u64, @@ -108,7 +106,6 @@ pub(crate) fn terminal_write( } } -#[tauri::command] pub(crate) fn terminal_resize( workspace_id: String, terminal_id: u64, @@ -130,7 +127,6 @@ pub(crate) fn terminal_resize( .map_err(|e| e.to_string()) } -#[tauri::command] pub(crate) fn terminal_close( workspace_id: String, terminal_id: u64, diff --git a/apps/server/src/services/workspace.rs b/apps/server/src/services/workspace.rs index 612e04d..0a3d5ce 100644 --- a/apps/server/src/services/workspace.rs +++ b/apps/server/src/services/workspace.rs @@ -35,7 +35,6 @@ pub(crate) fn launch_workspace_internal( launch_workspace_record(&state, source, project_path, default_idle_policy()) } -#[tauri::command] pub(crate) fn launch_workspace( source: WorkspaceSource, state: State<'_, AppState>, @@ -43,14 +42,12 @@ pub(crate) fn launch_workspace( launch_workspace_internal(source, None, state) } -#[tauri::command] pub(crate) fn workbench_bootstrap( state: State<'_, AppState>, ) -> Result { load_workbench_bootstrap(&state) } -#[tauri::command] pub(crate) fn workspace_snapshot( workspace_id: String, state: State<'_, AppState>, @@ -58,7 +55,6 @@ pub(crate) fn workspace_snapshot( load_workspace_snapshot(&state, &workspace_id) } -#[tauri::command] pub(crate) fn activate_workspace( workspace_id: String, state: State<'_, AppState>, @@ -66,7 +62,6 @@ pub(crate) fn activate_workspace( activate_workspace_ui(&state, &workspace_id) } -#[tauri::command] pub(crate) fn close_workspace( workspace_id: String, state: State<'_, AppState>, @@ -74,7 +69,6 @@ pub(crate) fn close_workspace( close_workspace_ui(&state, &workspace_id) } -#[tauri::command] pub(crate) fn update_workbench_layout( layout: WorkbenchLayout, state: State<'_, AppState>, @@ -82,7 +76,6 @@ pub(crate) fn update_workbench_layout( persist_workbench_layout(&state, layout) } -#[tauri::command] pub(crate) fn workspace_view_update( workspace_id: String, patch: WorkspaceViewPatch, @@ -91,7 +84,6 @@ pub(crate) fn workspace_view_update( patch_workspace_view_state(&state, &workspace_id, patch) } -#[tauri::command] pub(crate) fn create_session( workspace_id: String, mode: SessionMode, @@ -100,7 +92,6 @@ pub(crate) fn create_session( create_workspace_session(&state, &workspace_id, mode) } -#[tauri::command] pub(crate) fn session_update( workspace_id: String, session_id: u64, @@ -110,7 +101,6 @@ pub(crate) fn session_update( update_workspace_session(&state, &workspace_id, session_id, patch) } -#[tauri::command] pub(crate) fn switch_session( workspace_id: String, session_id: u64, @@ -119,7 +109,6 @@ pub(crate) fn switch_session( switch_workspace_session(&state, &workspace_id, session_id) } -#[tauri::command] pub(crate) fn archive_session( workspace_id: String, session_id: u64, @@ -140,7 +129,6 @@ pub(crate) fn archive_session( Ok(entry) } -#[tauri::command] pub(crate) fn update_idle_policy( workspace_id: String, policy: IdlePolicy, @@ -149,7 +137,6 @@ pub(crate) fn update_idle_policy( update_workspace_idle_policy(&state, &workspace_id, policy) } -#[tauri::command] pub(crate) fn worktree_inspect( path: String, target: ExecTarget, diff --git a/apps/server/src/ws/server.rs b/apps/server/src/ws/server.rs index 90d835d..96f366f 100644 --- a/apps/server/src/ws/server.rs +++ b/apps/server/src/ws/server.rs @@ -34,7 +34,7 @@ pub(crate) async fn ws_handler( ws.on_upgrade(move |socket| ws_session(socket, state.app)) } -pub(crate) async fn ws_session(mut socket: WebSocket, app: tauri::AppHandle) { +pub(crate) async fn ws_session(mut socket: WebSocket, app: AppHandle) { let state: State = app.state(); let mut rx = state.transport_events.subscribe(); @@ -93,7 +93,7 @@ pub(crate) fn terminal_key(workspace_id: &str, terminal_id: u64) -> String { format!("{}:{}", workspace_id, terminal_id) } -pub(crate) fn emit_transport_event(app: &tauri::AppHandle, event: &str, payload: Value) { +pub(crate) fn emit_transport_event(app: &AppHandle, event: &str, payload: Value) { let state: State = app.state(); let _ = state.transport_events.send(TransportEvent { event: event.to_string(), @@ -102,7 +102,7 @@ pub(crate) fn emit_transport_event(app: &tauri::AppHandle, event: &str, payload: } pub(crate) fn emit_agent( - app: &tauri::AppHandle, + app: &AppHandle, workspace_id: &str, session_id: &str, kind: &str, @@ -130,7 +130,7 @@ pub(crate) fn emit_agent( } pub(crate) fn emit_terminal( - app: &tauri::AppHandle, + app: &AppHandle, workspace_id: &str, terminal_id: u64, data: &str, @@ -155,7 +155,7 @@ pub(crate) fn emit_terminal( } pub(crate) fn emit_agent_lifecycle( - app: &tauri::AppHandle, + app: &AppHandle, workspace_id: &str, session_id: &str, kind: &str, diff --git a/apps/server/tauri.conf.json b/apps/server/tauri.conf.json deleted file mode 100644 index 48b3ef2..0000000 --- a/apps/server/tauri.conf.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "productName": "Coder Studio", - "version": "0.1.3", - "identifier": "com.spencerkit.coderstudio", - "build": { - "beforeDevCommand": "pnpm dev", - "beforeBuildCommand": "pnpm build", - "devUrl": "http://localhost:5174", - "frontendDist": "../../.build/web/dist" - }, - "app": { - "windows": [] - } -} diff --git a/apps/web/src/services/http/client.ts b/apps/web/src/services/http/client.ts index baeb81e..df99860 100644 --- a/apps/web/src/services/http/client.ts +++ b/apps/web/src/services/http/client.ts @@ -1,4 +1,4 @@ -import { applyRuntimeQuery, backendBaseUrl, hasTauriRuntime } from "../../shared/runtime/backend"; +import { applyRuntimeQuery, backendBaseUrl } from "../../shared/runtime/backend"; import { isPublicModeActive, markUnauthorized } from "./auth.service"; export const invokeRpc = async (command: string, payload: Record = {}): Promise => { @@ -39,16 +39,6 @@ export const invokeRpc = async (command: string, payload: Record(command, payload); - } catch (error) { - const reason = error instanceof Error ? error.message : String(error); - errors.push(`tauri_invoke: ${reason}`); - } - } - throw new Error(errors.join(" | ")); }; diff --git a/docs/deployment/README.en.md b/docs/deployment/README.en.md index 7b40c3d..30c3e67 100644 --- a/docs/deployment/README.en.md +++ b/docs/deployment/README.en.md @@ -145,7 +145,7 @@ server { ## Deployment Steps -1. Build the app: `pnpm tauri build` +1. Build the app: `pnpm build:web && pnpm build:server && pnpm build:cli` 2. Install the CLI on the target machine: `npm install -g @spencer-kit/coder-studio` 3. Set the access passphrase 4. Override `rootPath`, `bindHost`, or `bindPort` only if you need non-default values @@ -183,7 +183,6 @@ coder-studio start - 3 wrong passphrase attempts trigger the IP block response - after login, WebSocket connections establish normally - only directories inside `rootPath` are accessible -- `dialog_pick_folder` is unavailable in public mode - direct local access via `http://localhost:41033` defaults to non-public mode - direct local access via `http://localhost:41033/?auth=force` forces the login screen diff --git a/docs/deployment/README.md b/docs/deployment/README.md index 48cf135..26bdc96 100644 --- a/docs/deployment/README.md +++ b/docs/deployment/README.md @@ -145,7 +145,7 @@ server { ## 部署步骤 -1. 构建应用:`pnpm tauri build` +1. 构建应用:`pnpm build:web && pnpm build:server && pnpm build:cli` 2. 在目标机器上安装 CLI:`npm install -g @spencer-kit/coder-studio` 3. 设置访问口令 4. 如有需要,再覆盖默认的 `rootPath`、`bindHost`、`bindPort` @@ -183,7 +183,6 @@ coder-studio start - 口令错误 3 次后返回封禁提示 - 登录成功后可以正常建立 WebSocket - 只能浏览 `rootPath` 下的目录 -- `dialog_pick_folder` 在 public mode 下不可用 - 直接用 `http://localhost:41033` 本地访问时默认不走 public mode - 直接用 `http://localhost:41033/?auth=force` 本地访问时会强制显示登录页 diff --git a/docs/development/README.en.md b/docs/development/README.en.md index 9eaebee..dd6cc4c 100644 --- a/docs/development/README.en.md +++ b/docs/development/README.en.md @@ -8,7 +8,7 @@ This directory documents how the current implementation works. The goal is to he 1. `architecture.en.md`: overall layering, runtime structure, and major data flows 2. `frontend-state.en.md`: frontend entities and state transitions -3. `tauri-commands.en.md`: Tauri command inventory, transport layer, and event channels +3. `tauri-commands.en.md`: current transport command inventory and event channels ## Local Development @@ -18,10 +18,10 @@ Install dependencies: pnpm install ``` -Tauri shell development mode: +Combined development mode: ```bash -pnpm tauri dev +pnpm dev:stack ``` Split debugging mode: @@ -58,7 +58,7 @@ Current development ports: - Architecture: `docs/development/architecture.en.md` - Frontend state: `docs/development/frontend-state.en.md` -- Tauri commands: `docs/development/tauri-commands.en.md` +- Transport command inventory: `docs/development/tauri-commands.en.md` - CLI manual: `docs/development/cli.en.md` - npm packaging and release: `docs/development/npm-release.en.md` diff --git a/docs/development/README.md b/docs/development/README.md index 18578fb..1c9f444 100644 --- a/docs/development/README.md +++ b/docs/development/README.md @@ -10,7 +10,7 @@ 1. `architecture.md`:先看整体分层、运行时结构和关键数据流 2. `frontend-state.md`:再看前端核心状态模型和界面状态流转 -3. `tauri-commands.md`:最后看 Tauri 命令、传输层和事件通道 +3. `tauri-commands.md`:最后看当前传输命令清单和事件通道 ## 本地开发 @@ -20,10 +20,10 @@ pnpm install ``` -Tauri 壳层开发模式: +联动开发模式: ```bash -pnpm tauri dev +pnpm dev:stack ``` 分离式调试: @@ -60,7 +60,7 @@ pnpm dev:stack - 架构说明:`docs/development/architecture.md` - Frontend 状态:`docs/development/frontend-state.md` -- Tauri 命令清单:`docs/development/tauri-commands.md` +- 传输命令清单:`docs/development/tauri-commands.md` - CLI 命令手册:`docs/development/cli.md` - npm 发布与 CLI:`docs/development/npm-release.md` diff --git a/docs/development/architecture.en.md b/docs/development/architecture.en.md index 165a969..94dc205 100644 --- a/docs/development/architecture.en.md +++ b/docs/development/architecture.en.md @@ -6,18 +6,17 @@ This document describes the current high-level architecture, module responsibili ## 1. Overall Shape -The project consists of a React + Vite frontend and a Rust server runtime. That server runtime is hosted by Tauri and exposes local HTTP / WS transport. +The project consists of a React + Vite frontend and a Rust server runtime. The server runtime directly exposes local HTTP / WS transport. The runtime layering looks like this: ```text React UI (apps/web/src/App.tsx) | - |-- HTTP RPC (/api/rpc/:command) first - |-- Tauri invoke fallback + |-- HTTP RPC (/api/rpc/:command) |-- WebSocket subscriptions (/ws) v -Rust Server Runtime (via Tauri) +Rust Server Runtime | |-- workspace/session services |-- git / filesystem services @@ -79,14 +78,13 @@ The server is responsible for: ## 4. Transport Layer Design -The current implementation supports two command paths: +The current implementation uses a single command path: -- HTTP RPC: the frontend tries `/api/rpc/:command` first -- Tauri invoke: if HTTP is unavailable, it falls back to `@tauri-apps/api/core.invoke` +- HTTP RPC: the frontend calls `/api/rpc/:command` This enables: -- direct invoke / runtime access in Tauri shell mode +- one consistent frontend/backend protocol - direct local HTTP/WS server usage in split-debug mode - one event stream mechanism for agent and terminal output diff --git a/docs/development/architecture.md b/docs/development/architecture.md index a84a080..dc8fe75 100644 --- a/docs/development/architecture.md +++ b/docs/development/architecture.md @@ -6,18 +6,17 @@ ## 1. 总体结构 -当前项目由 React + Vite 前端和 Rust server 运行时组成;server 运行时由 Tauri 承载,并对外暴露本地 HTTP / WS 服务。 +当前项目由 React + Vite 前端和 Rust server 运行时组成;server 运行时直接暴露本地 HTTP / WS 服务。 逻辑分层可以概括为: ```text React UI (apps/web/src/App.tsx) | - |-- HTTP RPC (/api/rpc/:command) 优先 - |-- Tauri invoke 兜底 + |-- HTTP RPC (/api/rpc/:command) |-- WebSocket 事件订阅 (/ws) v -Rust Server Runtime (via Tauri) +Rust Server Runtime | |-- workspace/session 服务 |-- git / filesystem 服务 @@ -79,14 +78,13 @@ Rust Server Runtime (via Tauri) ## 4. 传输层设计 -当前实现同时支持两套调用路径: +当前实现的命令调用统一走 HTTP RPC: -- HTTP RPC:前端优先调用 `/api/rpc/:command` -- Tauri invoke:HTTP 不可用时回退到 `@tauri-apps/api/core.invoke` +- HTTP RPC:前端调用 `/api/rpc/:command` 这一层的好处是: -- Tauri 壳层模式可直接走 invoke / runtime +- 前后端协议单一,运行时更轻 - 分离调试时可以直接连接本地 HTTP/WS server - WebSocket 可以统一承载 Agent 与 Terminal 的流式事件 diff --git a/docs/development/npm-release.en.md b/docs/development/npm-release.en.md index b35c94d..7ea8b57 100644 --- a/docs/development/npm-release.en.md +++ b/docs/development/npm-release.en.md @@ -79,9 +79,9 @@ pnpm release:verify:full What they do: -- `version:check`: verifies the root package, main package, platform packages, `Cargo.toml`, and `tauri.conf.json` all share the same version +- `version:check`: verifies the root package, main package, platform packages, and `Cargo.toml` all share the same version - `build:web`: builds the frontend into `.build/web/dist` -- `build:server`: builds the Rust/Tauri release binary into `.build/server/target` +- `build:server`: builds the Rust release binary into `.build/server/target` - `build:cli`: compiles `packages/cli/src` into `.build/cli` - `build:packages`: materializes `.build/stage/npm/coder-studio` and `.build/stage/npm/` by injecting compiled CLI output plus native/frontend assets - `pack:local`: runs the release build and emits local tarballs into `.artifacts/` @@ -113,7 +113,6 @@ The version sync step updates: - `packages/cli/package.json` - `templates/npm/platform-packages/*/package.json` - `apps/server/Cargo.toml` -- `apps/server/tauri.conf.json` - the root `package.json` `changeset:version` now runs `pnpm version:check` after syncing so version drift fails immediately. diff --git a/docs/development/npm-release.md b/docs/development/npm-release.md index 04fd245..d19249c 100644 --- a/docs/development/npm-release.md +++ b/docs/development/npm-release.md @@ -79,9 +79,9 @@ pnpm release:verify:full 说明: -- `version:check`:校验根包、主包、平台包、`Cargo.toml`、`tauri.conf.json` 版本是否完全一致 +- `version:check`:校验根包、主包、平台包、`Cargo.toml` 版本是否完全一致 - `build:web`:构建前端到 `.build/web/dist` -- `build:server`:构建 Rust/Tauri release 二进制到 `.build/server/target` +- `build:server`:构建 Rust release 二进制到 `.build/server/target` - `build:cli`:把 `packages/cli/src` 编译到 `.build/cli` - `build:packages`:生成 `.build/stage/npm/coder-studio` 和当前平台的 `.build/stage/npm/`,分别注入 CLI 编译产物与原生二进制/前端产物 - `pack:local`:执行 release 构建后,生成本地主包和当前平台包 tarball 到 `.artifacts/` @@ -113,7 +113,6 @@ git commit -m "chore(release): version packages" - `packages/cli/package.json` - `templates/npm/platform-packages/*/package.json` - `apps/server/Cargo.toml` -- `apps/server/tauri.conf.json` - 根目录 `package.json` `changeset:version` 现在会在同步后自动执行 `pnpm version:check`,确保版本没有漂移。 diff --git a/docs/development/tauri-commands.en.md b/docs/development/tauri-commands.en.md index 6bfcc23..1557eb0 100644 --- a/docs/development/tauri-commands.en.md +++ b/docs/development/tauri-commands.en.md @@ -1,23 +1,18 @@ -# Tauri Command Inventory +# Transport Command Inventory [中文](tauri-commands.md) -This document lists the current Tauri commands, their transport path, and how they are used in the current product. +This document lists the current transport commands, their execution path, and how they are used in the current product. The filename is kept for historical continuity, but the runtime no longer depends on a Tauri shell. ## 1. Invocation Path -The frontend does not rely exclusively on Tauri `invoke`. - -The actual order is: - -1. try HTTP RPC via `/api/rpc/:command` -2. if HTTP is unavailable, fall back to `@tauri-apps/api/core.invoke` +The frontend now uses HTTP RPC via `/api/rpc/:command`. Relevant code: - frontend RPC client: `apps/web/src/services/http/client.ts` - backend command dispatcher: `apps/server/src/command/http.rs` -- Tauri registration list: `apps/server/src/main.rs` +- server entry point: `apps/server/src/main.rs` Streamed events do not come back through RPC responses. They are delivered over WebSocket: @@ -89,12 +84,9 @@ Notes: | `file_save` | save file content | used | | `filesystem_roots` | fetch available filesystem roots | indirectly used | | `filesystem_list` | browse backend-side directories | used | -| `dialog_pick_folder` | open native folder picker dialog | not prominent in current main flow | - Notes: - Current local-folder onboarding is primarily driven by the backend directory browser built around `filesystem_list`. -- `dialog_pick_folder` exists, but it is not the main onboarding path today. ## 6. System and Runtime Probing diff --git a/docs/development/tauri-commands.md b/docs/development/tauri-commands.md index 1a92169..f508fcf 100644 --- a/docs/development/tauri-commands.md +++ b/docs/development/tauri-commands.md @@ -1,23 +1,18 @@ -# Tauri 命令清单 +# 传输命令清单 [English](tauri-commands.en.md) -本文档整理当前 Tauri 命令、调用路径,以及它们在现有产品中的使用范围。 +本文档整理当前传输命令、调用路径,以及它们在现有产品中的使用范围。文件名沿用历史命名,但当前运行时已经不再依赖 Tauri 壳层。 ## 1. 调用路径 -当前前端并不是只依赖 Tauri `invoke`。 - -实际顺序是: - -1. 优先通过 HTTP RPC 调用 `/api/rpc/:command` -2. 如果 HTTP 不可用,再回退到 `@tauri-apps/api/core.invoke` +当前前端统一通过 HTTP RPC 调用 `/api/rpc/:command`。 相关代码: - 前端 RPC 客户端:`apps/web/src/services/http/client.ts` - 后端命令分发:`apps/server/src/command/http.rs` -- Tauri 注册列表:`apps/server/src/main.rs` +- server 入口:`apps/server/src/main.rs` 流式事件不走 RPC 返回值,而走 WebSocket: @@ -89,12 +84,9 @@ | `file_save` | 保存文件 | 已使用 | | `filesystem_roots` | 获取可浏览根目录 | 间接使用 | | `filesystem_list` | 浏览服务端目录 | 已使用 | -| `dialog_pick_folder` | 打开系统目录选择对话框 | 当前主流程未明显使用 | - 说明: - 当前本地目录选择主流程依赖 `filesystem_list` 驱动的服务端目录浏览器。 -- `dialog_pick_folder` 虽然存在,但不是当前 onboarding 主路径。 ## 6. 系统与运行时探测 diff --git a/package.json b/package.json index 8907ee5..ba09070 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "test:server": "cargo test --manifest-path apps/server/Cargo.toml", "build:packages": "node scripts/build/build-packages.mjs", "preview": "vite preview", - "tauri": "node scripts/dev/run-tauri.mjs", "test:e2e": "playwright test", "test:e2e:release": "pnpm build:web && pnpm build:server && pnpm build:cli && playwright test -c playwright.release.config.ts", "test:cli": "pnpm build:cli && node --test tests/cli/config.test.mjs tests/cli/platform.test.mjs tests/release/release.test.mjs", @@ -39,8 +38,6 @@ "@fontsource/jetbrains-mono": "^5.2.8", "@monaco-editor/react": "^4.7.0", "@relax-state/react": "^0.0.10", - "@tauri-apps/api": "^2.10.1", - "@tauri-apps/plugin-dialog": "^2.0.0", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "lucide-react": "^0.577.0", @@ -52,7 +49,6 @@ "devDependencies": { "@changesets/cli": "^2.29.7", "@playwright/test": "^1.58.2", - "@tauri-apps/cli": "^2.0.0", "@types/node": "^24.6.1", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f86a3dd..7349ec3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,12 +20,6 @@ importers: '@relax-state/react': specifier: ^0.0.10 version: 0.0.10(react@19.2.4) - '@tauri-apps/api': - specifier: ^2.10.1 - version: 2.10.1 - '@tauri-apps/plugin-dialog': - specifier: ^2.0.0 - version: 2.6.0 '@xterm/addon-fit': specifier: ^0.11.0 version: 0.11.0 @@ -54,9 +48,6 @@ importers: '@playwright/test': specifier: ^1.58.2 version: 1.58.2 - '@tauri-apps/cli': - specifier: ^2.0.0 - version: 2.10.1 '@types/node': specifier: ^24.6.1 version: 24.12.0 @@ -82,7 +73,20 @@ importers: specifier: ^8.0.0 version: 8.0.0(@types/node@24.12.0) - packages/cli: {} + packages/cli: + optionalDependencies: + '@spencer-kit/coder-studio-darwin-arm64': + specifier: 0.1.3 + version: 0.1.3 + '@spencer-kit/coder-studio-darwin-x64': + specifier: 0.1.3 + version: 0.1.3 + '@spencer-kit/coder-studio-linux-x64': + specifier: 0.1.3 + version: 0.1.3 + '@spencer-kit/coder-studio-win32-x64': + specifier: 0.1.3 + version: 0.1.3 packages: @@ -477,88 +481,26 @@ packages: '@rolldown/pluginutils@1.0.0-rc.9': resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} - '@tauri-apps/api@2.10.1': - resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==} - - '@tauri-apps/cli-darwin-arm64@2.10.1': - resolution: {integrity: sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==} - engines: {node: '>= 10'} + '@spencer-kit/coder-studio-darwin-arm64@0.1.3': + resolution: {integrity: sha512-BdVNJQDqRvdRrkfJ7uVIN2mBZi9S00MBMginWAOdtIp9H6SaQK0dEiXvLOaw/0pm80SJY4G3Ynr1QX4wEshqZQ==} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.10.1': - resolution: {integrity: sha512-V/irQVvjPMGOTQqNj55PnQPVuH4VJP8vZCN7ajnj+ZS8Kom1tEM2hR3qbbIRoS3dBKs5mbG8yg1WC+97dq17Pw==} - engines: {node: '>= 10'} + '@spencer-kit/coder-studio-darwin-x64@0.1.3': + resolution: {integrity: sha512-FIB/NjK/OgDUM4jnFNnP4grBo8xSs/apExkyveneu3sTxxRj55bKqHHb+XRFwp17/wKSiYx8994obdQWp4I4lQ==} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1': - resolution: {integrity: sha512-Hyzwsb4VnCWKGfTw+wSt15Z2pLw2f0JdFBfq2vHBOBhvg7oi6uhKiF87hmbXOBXUZaGkyRDkCHsdzJcIfoJC2w==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tauri-apps/cli-linux-arm64-gnu@2.10.1': - resolution: {integrity: sha512-OyOYs2t5GkBIvyWjA1+h4CZxTcdz1OZPCWAPz5DYEfB0cnWHERTnQ/SLayQzncrT0kwRoSfSz9KxenkyJoTelA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-arm64-musl@2.10.1': - resolution: {integrity: sha512-MIj78PDDGjkg3NqGptDOGgfXks7SYJwhiMh8SBoZS+vfdz7yP5jN18bNaLnDhsVIPARcAhE1TlsZe/8Yxo2zqg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tauri-apps/cli-linux-riscv64-gnu@2.10.1': - resolution: {integrity: sha512-X0lvOVUg8PCVaoEtEAnpxmnkwlE1gcMDTqfhbefICKDnOTJ5Est3qL0SrWxizDackIOKBcvtpejrSiVpuJI1kw==} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-x64-gnu@2.10.1': - resolution: {integrity: sha512-2/12bEzsJS9fAKybxgicCDFxYD1WEI9kO+tlDwX5znWG2GwMBaiWcmhGlZ8fi+DMe9CXlcVarMTYc0L3REIRxw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tauri-apps/cli-linux-x64-musl@2.10.1': - resolution: {integrity: sha512-Y8J0ZzswPz50UcGOFuXGEMrxbjwKSPgXftx5qnkuMs2rmwQB5ssvLb6tn54wDSYxe7S6vlLob9vt0VKuNOaCIQ==} - engines: {node: '>= 10'} + '@spencer-kit/coder-studio-linux-x64@0.1.3': + resolution: {integrity: sha512-zJMP+/rqLbvOhME98j8UL67gYJmHO0eiY+fHsYgZB+HBrve7cn49uHR5gWTYkgDtD9CP2DBBk1lK5Lvp8KSmEw==} cpu: [x64] os: [linux] - libc: [musl] - - '@tauri-apps/cli-win32-arm64-msvc@2.10.1': - resolution: {integrity: sha512-iSt5B86jHYAPJa/IlYw++SXtFPGnWtFJriHn7X0NFBVunF6zu9+/zOn8OgqIWSl8RgzhLGXQEEtGBdR4wzpVgg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tauri-apps/cli-win32-ia32-msvc@2.10.1': - resolution: {integrity: sha512-gXyxgEzsFegmnWywYU5pEBURkcFN/Oo45EAwvZrHMh+zUSEAvO5E8TXsgPADYm31d1u7OQU3O3HsYfVBf2moHw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.10.1': - resolution: {integrity: sha512-6Cn7YpPFwzChy0ERz6djKEmUehWrYlM+xTaNzGPgZocw3BD7OfwfWHKVWxXzdjEW2KfKkHddfdxK1XXTYqBRLg==} - engines: {node: '>= 10'} + '@spencer-kit/coder-studio-win32-x64@0.1.3': + resolution: {integrity: sha512-3SvzMOzy0iE3JK8Ul8uAyplLBTmSosH2soFfvtKB2xlxnU/X7NJcr1ouX9plQgoJ2tnOJo+HkgUMScGYprS82A==} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.10.1': - resolution: {integrity: sha512-jQNGF/5quwORdZSSLtTluyKQ+o6SMa/AUICfhf4egCGFdMHqWssApVgYSbg+jmrZoc8e1DscNvjTnXtlHLS11g==} - engines: {node: '>= 10'} - hasBin: true - - '@tauri-apps/plugin-dialog@2.6.0': - resolution: {integrity: sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg==} - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1518,59 +1460,18 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.9': {} - '@tauri-apps/api@2.10.1': {} - - '@tauri-apps/cli-darwin-arm64@2.10.1': - optional: true - - '@tauri-apps/cli-darwin-x64@2.10.1': - optional: true - - '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1': + '@spencer-kit/coder-studio-darwin-arm64@0.1.3': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.10.1': + '@spencer-kit/coder-studio-darwin-x64@0.1.3': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.10.1': + '@spencer-kit/coder-studio-linux-x64@0.1.3': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.10.1': + '@spencer-kit/coder-studio-win32-x64@0.1.3': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.10.1': - optional: true - - '@tauri-apps/cli-linux-x64-musl@2.10.1': - optional: true - - '@tauri-apps/cli-win32-arm64-msvc@2.10.1': - optional: true - - '@tauri-apps/cli-win32-ia32-msvc@2.10.1': - optional: true - - '@tauri-apps/cli-win32-x64-msvc@2.10.1': - optional: true - - '@tauri-apps/cli@2.10.1': - optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.10.1 - '@tauri-apps/cli-darwin-x64': 2.10.1 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.10.1 - '@tauri-apps/cli-linux-arm64-gnu': 2.10.1 - '@tauri-apps/cli-linux-arm64-musl': 2.10.1 - '@tauri-apps/cli-linux-riscv64-gnu': 2.10.1 - '@tauri-apps/cli-linux-x64-gnu': 2.10.1 - '@tauri-apps/cli-linux-x64-musl': 2.10.1 - '@tauri-apps/cli-win32-arm64-msvc': 2.10.1 - '@tauri-apps/cli-win32-ia32-msvc': 2.10.1 - '@tauri-apps/cli-win32-x64-msvc': 2.10.1 - - '@tauri-apps/plugin-dialog@2.6.0': - dependencies: - '@tauri-apps/api': 2.10.1 - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 diff --git a/scripts/dev/run-tauri.mjs b/scripts/dev/run-tauri.mjs deleted file mode 100644 index 8a09a4f..0000000 --- a/scripts/dev/run-tauri.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import { spawn } from 'node:child_process'; -import { fileURLToPath } from 'node:url'; -import path from 'node:path'; - -const ROOT = fileURLToPath(new URL('../..', import.meta.url)); -const TAURI_CLI = path.join(ROOT, 'node_modules', '@tauri-apps', 'cli', 'tauri.js'); -const CONFIG_PATH = path.join(ROOT, 'apps', 'server', 'tauri.conf.json'); -const CONFIG_COMMANDS = new Set(['dev', 'build', 'bundle']); - -const args = process.argv.slice(2); -const hasExplicitConfig = args.includes('-c') || args.includes('--config'); -const firstArg = args[0]; -const shouldInjectConfig = Boolean(firstArg) - && CONFIG_COMMANDS.has(firstArg) - && !hasExplicitConfig; - -const childArgs = shouldInjectConfig - ? [TAURI_CLI, firstArg, '-c', CONFIG_PATH, ...args.slice(1)] - : [TAURI_CLI, ...args]; - -const child = spawn(process.execPath, childArgs, { - cwd: ROOT, - stdio: 'inherit', - windowsHide: true, -}); - -child.on('exit', (code, signal) => { - if (signal) { - process.kill(process.pid, signal); - return; - } - process.exit(code ?? 0); -}); diff --git a/scripts/release/check-assets.mjs b/scripts/release/check-assets.mjs index fed4f52..dcbe184 100644 --- a/scripts/release/check-assets.mjs +++ b/scripts/release/check-assets.mjs @@ -1,17 +1,27 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import { pathToFileURL } from 'node:url'; -import { SERVER_APP_DIR } from '../lib/package-matrix.mjs'; +import { MAIN_PACKAGE, PLATFORM_PACKAGES } from '../lib/package-matrix.mjs'; const REQUIRED_ASSETS = [ { - label: 'tauri icon png', - filePath: path.join(SERVER_APP_DIR, 'icons', 'icon.png'), + label: 'main package README', + filePath: path.join(MAIN_PACKAGE.sourceDir, 'README.md'), }, { - label: 'windows icon', - filePath: path.join(SERVER_APP_DIR, 'icons', 'icon.ico'), + label: 'cli entrypoint', + filePath: path.join(MAIN_PACKAGE.sourceDir, 'src', 'bin', 'coder-studio.mts'), }, + ...PLATFORM_PACKAGES.flatMap((entry) => ([ + { + label: `${entry.slug} template package`, + filePath: path.join(entry.templateDir, 'package.json'), + }, + { + label: `${entry.slug} template README`, + filePath: path.join(entry.templateDir, 'README.md'), + }, + ])), ]; function isDirectRun() { diff --git a/scripts/release/check-version.mjs b/scripts/release/check-version.mjs index d8db3d3..6f61749 100644 --- a/scripts/release/check-version.mjs +++ b/scripts/release/check-version.mjs @@ -34,13 +34,11 @@ export async function collectReleaseVersionState(rootDir = ROOT) { })), ); const cargoToml = await fs.readFile(path.join(SERVER_APP_DIR, 'Cargo.toml'), 'utf8'); - const tauriConfig = await readJson(path.join(SERVER_APP_DIR, 'tauri.conf.json')); return { rootVersion: rootPackage.version, mainVersion: mainPackage.version, cargoVersion: readPackageVersionFromCargoToml(cargoToml), - tauriVersion: tauriConfig.version, optionalDependencies: mainPackage.optionalDependencies ?? {}, platformPackages, }; @@ -56,9 +54,6 @@ export function validateReleaseVersionState(state) { if (state.cargoVersion !== expectedVersion) { errors.push(`Cargo.toml version ${state.cargoVersion} does not match main package version ${expectedVersion}`); } - if (state.tauriVersion !== expectedVersion) { - errors.push(`tauri.conf.json version ${state.tauriVersion} does not match main package version ${expectedVersion}`); - } const optionalDependencyNames = Object.keys(state.optionalDependencies).sort(); const expectedOptionalDependencyNames = PLATFORM_PACKAGES.map((entry) => entry.name).sort(); diff --git a/scripts/release/sync-version.mjs b/scripts/release/sync-version.mjs index 4c6ff4e..15930bc 100644 --- a/scripts/release/sync-version.mjs +++ b/scripts/release/sync-version.mjs @@ -30,11 +30,4 @@ const nextCargoToml = cargoToml .replace(/^version = ".*"$/m, `version = "${version}"`); await fs.writeFile(cargoTomlPath, nextCargoToml, 'utf8'); -const tauriConfigPath = path.join(SERVER_APP_DIR, 'tauri.conf.json'); -const tauriConfig = JSON.parse(await fs.readFile(tauriConfigPath, 'utf8')); -tauriConfig.productName = 'Coder Studio'; -tauriConfig.version = version; -tauriConfig.identifier = 'com.spencerkit.coderstudio'; -await fs.writeFile(tauriConfigPath, `${JSON.stringify(tauriConfig, null, 2)}\n`, 'utf8'); - console.log(`synced version ${version}`); diff --git a/tests/release/release.test.mjs b/tests/release/release.test.mjs index 36f9234..1780a5c 100644 --- a/tests/release/release.test.mjs +++ b/tests/release/release.test.mjs @@ -19,7 +19,6 @@ test('release versions stay aligned across package manifests', async () => { const state = await collectReleaseVersionState(ROOT); assert.equal(state.mainVersion, state.rootVersion); assert.equal(state.mainVersion, state.cargoVersion); - assert.equal(state.mainVersion, state.tauriVersion); }); test('release manifest writer emits checksums for tarballs', async () => { diff --git a/vite.config.ts b/vite.config.ts index 0b970d0..b754dde 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -24,7 +24,6 @@ export default defineConfig(({ mode }) => { manualChunks(id) { if (!id.includes('node_modules')) return undefined; if (id.includes('/react/') || id.includes('/react-dom/')) return 'react'; - if (id.includes('/@tauri-apps/api/') || id.includes('/@tauri-apps/plugin-dialog/')) return 'tauri'; if (id.includes('/@xterm/xterm/') || id.includes('/@xterm/addon-fit/')) return 'terminal'; return undefined; }, From 83e1830def055a8e65c238ac247a607cf956123d Mon Sep 17 00:00:00 2001 From: pallyoung Date: Sat, 21 Mar 2026 21:30:39 +0800 Subject: [PATCH 2/5] build: harden linux runtime compatibility --- .github/workflows/ci.yml | 17 +++++----- .github/workflows/release.yml | 38 ++++++++++++--------- package.json | 3 +- scripts/build/build-packages.mjs | 4 +-- scripts/build/build-server.mjs | 49 +++++++++++++++++++++++++++ scripts/lib/server-build.mjs | 46 +++++++++++++++++++++++++ scripts/test/start-release-server.mjs | 4 +-- tests/release/release.test.mjs | 28 +++++++++++++++ 8 files changed, 159 insertions(+), 30 deletions(-) create mode 100644 scripts/build/build-server.mjs create mode 100644 scripts/lib/server-build.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 946dd14..39bcc13 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ concurrency: jobs: version-consistency: name: Version Consistency - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: os: - - ubuntu-latest + - ubuntu-22.04 - macos-latest - windows-latest steps: @@ -50,29 +50,28 @@ jobs: verify-linux: name: Verify Linux Runtime - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: version-consistency env: CODER_STUDIO_START_TIMEOUT_MS: 45000 + CODER_STUDIO_RUST_TARGET: x86_64-unknown-linux-musl steps: - uses: actions/checkout@v4 - - name: Install Linux runtime dependencies + - name: Install Linux build dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ curl \ file \ - libayatana-appindicator3-dev \ - libssl-dev \ - libwebkit2gtk-4.1-dev \ - librsvg2-dev \ - patchelf \ + musl-tools \ xvfb \ wget - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy + - name: Install Linux musl target + run: rustup target add x86_64-unknown-linux-musl - uses: Swatinem/rust-cache@v2 with: workspaces: apps/server -> .build/server/target diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f06f0d0..57c0c1e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ concurrency: jobs: preflight: name: Release Preflight - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: @@ -41,7 +41,7 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-latest + - os: ubuntu-22.04 package_slug: coder-studio-linux-x64 - os: macos-latest package_slug: coder-studio-darwin-arm64 @@ -52,20 +52,19 @@ jobs: steps: - uses: actions/checkout@v4 - if: startsWith(matrix.os, 'ubuntu') - name: Install Linux runtime dependencies + name: Install Linux build dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ curl \ file \ - libayatana-appindicator3-dev \ - libssl-dev \ - libwebkit2gtk-4.1-dev \ - librsvg2-dev \ - patchelf \ + musl-tools \ wget - uses: dtolnay/rust-toolchain@stable + - if: startsWith(matrix.os, 'ubuntu') + name: Install Linux musl target + run: rustup target add x86_64-unknown-linux-musl - uses: Swatinem/rust-cache@v2 with: workspaces: apps/server -> .build/server/target @@ -75,6 +74,9 @@ jobs: node-version: 22 cache: pnpm registry-url: 'https://registry.npmjs.org' + - if: startsWith(matrix.os, 'ubuntu') + name: Use Linux musl release target + run: echo "CODER_STUDIO_RUST_TARGET=x86_64-unknown-linux-musl" >> "$GITHUB_ENV" - run: pnpm install --no-frozen-lockfile - run: pnpm release:check - run: 'node -e "require(''fs'').mkdirSync(''.artifacts'', { recursive: true })"' @@ -94,28 +96,32 @@ jobs: needs: - preflight - publish-platform - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - name: Install Linux runtime dependencies + - name: Install Linux build dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ curl \ file \ - libayatana-appindicator3-dev \ - libssl-dev \ - libwebkit2gtk-4.1-dev \ - librsvg2-dev \ - patchelf \ + musl-tools \ wget + - uses: dtolnay/rust-toolchain@stable + - name: Install Linux musl target + run: rustup target add x86_64-unknown-linux-musl + - uses: Swatinem/rust-cache@v2 + with: + workspaces: apps/server -> .build/server/target - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm registry-url: 'https://registry.npmjs.org' + - name: Use Linux musl release target + run: echo "CODER_STUDIO_RUST_TARGET=x86_64-unknown-linux-musl" >> "$GITHUB_ENV" - run: pnpm install --no-frozen-lockfile - run: pnpm release:check - run: 'node -e "require(''fs'').mkdirSync(''.artifacts'', { recursive: true })"' @@ -135,7 +141,7 @@ jobs: needs: - publish-platform - publish-main - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 diff --git a/package.json b/package.json index ba09070..91f0867 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "dev:frontend": "vite", "build": "pnpm build:web", "build:web": "vite build", - "build:server": "cargo build --release --manifest-path apps/server/Cargo.toml", + "build:server": "node scripts/build/build-server.mjs", + "build:server:linux-musl": "node scripts/build/build-server.mjs --target x86_64-unknown-linux-musl", "build:runtime": "pnpm build:server", "build:cli": "node scripts/build/build-cli.mjs", "check:server": "cargo check --manifest-path apps/server/Cargo.toml", diff --git a/scripts/build/build-packages.mjs b/scripts/build/build-packages.mjs index 3951771..87422a9 100644 --- a/scripts/build/build-packages.mjs +++ b/scripts/build/build-packages.mjs @@ -4,9 +4,9 @@ import { MAIN_PACKAGE, NPM_STAGE_ROOT, resolvePlatformPackageMeta, - SERVER_TARGET_DIR, WEB_DIST_DIR, } from '../lib/package-matrix.mjs'; +import { resolveServerBinaryPath } from '../lib/server-build.mjs'; const packageMeta = resolvePlatformPackageMeta(); if (!packageMeta) { @@ -14,7 +14,7 @@ if (!packageMeta) { } const binaryName = process.platform === 'win32' ? 'coder-studio.exe' : 'coder-studio'; -const binarySource = path.join(SERVER_TARGET_DIR, 'release', binaryName); +const binarySource = resolveServerBinaryPath(); const distSource = WEB_DIST_DIR; const packageRoot = packageMeta.stageDir; const binaryTarget = path.join(packageRoot, 'bin', binaryName); diff --git a/scripts/build/build-server.mjs b/scripts/build/build-server.mjs new file mode 100644 index 0000000..4a37f28 --- /dev/null +++ b/scripts/build/build-server.mjs @@ -0,0 +1,49 @@ +import { spawn } from 'node:child_process'; +import { ROOT } from '../lib/package-matrix.mjs'; +import { + buildServerCargoArgs, + resolveRustTarget, + resolveServerBinaryPath, +} from '../lib/server-build.mjs'; + +const cliArgs = process.argv.slice(2); +const targetIndex = cliArgs.indexOf('--target'); + +if (targetIndex !== -1) { + const target = cliArgs[targetIndex + 1]; + if (!target) { + throw new Error('missing value for --target'); + } + process.env.CODER_STUDIO_RUST_TARGET = target; + cliArgs.splice(targetIndex, 2); +} + +if (cliArgs.length > 0) { + throw new Error(`unsupported arguments: ${cliArgs.join(' ')}`); +} + +const cargoArgs = buildServerCargoArgs({ env: process.env }); +await new Promise((resolve, reject) => { + const child = spawn('cargo', cargoArgs, { + cwd: ROOT, + env: process.env, + stdio: 'inherit', + }); + + child.on('error', reject); + child.on('exit', (code, signal) => { + if (signal) { + reject(new Error(`cargo build terminated by signal ${signal}`)); + return; + } + if (code === 0) { + resolve(); + return; + } + reject(new Error(`cargo build failed with exit code ${code ?? 'unknown'}`)); + }); +}); + +const rustTarget = resolveRustTarget({ env: process.env }); +console.log(`built coder-studio server${rustTarget ? ` (${rustTarget})` : ''}`); +console.log(`binary: ${resolveServerBinaryPath({ env: process.env })}`); diff --git a/scripts/lib/server-build.mjs b/scripts/lib/server-build.mjs new file mode 100644 index 0000000..227d46a --- /dev/null +++ b/scripts/lib/server-build.mjs @@ -0,0 +1,46 @@ +import path from 'node:path'; +import { ROOT, SERVER_APP_DIR, SERVER_TARGET_DIR } from './package-matrix.mjs'; + +export function resolveRustTarget({ env = process.env } = {}) { + const value = env.CODER_STUDIO_RUST_TARGET; + if (typeof value !== 'string') return ''; + return value.trim(); +} + +export function resolveServerBinaryName(platform = process.platform) { + return platform === 'win32' ? 'coder-studio.exe' : 'coder-studio'; +} + +export function resolveServerBinaryPath({ + env = process.env, + platform = process.platform, + profile = 'release', +} = {}) { + const binaryName = resolveServerBinaryName(platform); + const rustTarget = resolveRustTarget({ env }); + if (rustTarget) { + return path.join(SERVER_TARGET_DIR, rustTarget, profile, binaryName); + } + return path.join(SERVER_TARGET_DIR, profile, binaryName); +} + +export function buildServerCargoArgs({ + env = process.env, + profile = 'release', + manifestPath = path.join(SERVER_APP_DIR, 'Cargo.toml'), +} = {}) { + const args = ['build']; + if (profile === 'release') { + args.push('--release'); + } else { + args.push('--profile', profile); + } + args.push('--manifest-path', path.relative(ROOT, manifestPath)); + + const rustTarget = resolveRustTarget({ env }); + if (rustTarget) { + args.push('--target', rustTarget); + } + + return args; +} diff --git a/scripts/test/start-release-server.mjs b/scripts/test/start-release-server.mjs index 4aefce1..c33e48f 100644 --- a/scripts/test/start-release-server.mjs +++ b/scripts/test/start-release-server.mjs @@ -2,10 +2,10 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { startRuntime, stopRuntime } from '../../.build/cli/lib/runtime-controller.mjs'; +import { resolveServerBinaryPath } from '../lib/server-build.mjs'; const ROOT = fileURLToPath(new URL('../..', import.meta.url)); -const binaryName = process.platform === 'win32' ? 'coder-studio.exe' : 'coder-studio'; -const binaryPath = path.join(ROOT, '.build', 'server', 'target', 'release', binaryName); +const binaryPath = resolveServerBinaryPath(); const distDir = path.join(ROOT, '.build', 'web', 'dist'); const stateDir = path.join(ROOT, '.tmp', 'release-e2e-runtime'); const env = { diff --git a/tests/release/release.test.mjs b/tests/release/release.test.mjs index 1780a5c..cf82631 100644 --- a/tests/release/release.test.mjs +++ b/tests/release/release.test.mjs @@ -4,6 +4,10 @@ import fs from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; import { ROOT } from '../../scripts/lib/package-matrix.mjs'; +import { + buildServerCargoArgs, + resolveServerBinaryPath, +} from '../../scripts/lib/server-build.mjs'; import { assertReleaseAssets } from '../../scripts/release/check-assets.mjs'; import { assertVersionConsistency, collectReleaseVersionState } from '../../scripts/release/check-version.mjs'; import { createReleaseManifest } from '../../scripts/release/write-release-manifest.mjs'; @@ -21,6 +25,30 @@ test('release versions stay aligned across package manifests', async () => { assert.equal(state.mainVersion, state.cargoVersion); }); +test('server build helpers default to the native release output path', () => { + const env = {}; + assert.equal( + resolveServerBinaryPath({ env, platform: 'linux' }), + path.join(ROOT, '.build', 'server', 'target', 'release', 'coder-studio'), + ); + assert.deepEqual( + buildServerCargoArgs({ env }), + ['build', '--release', '--manifest-path', path.join('apps', 'server', 'Cargo.toml')], + ); +}); + +test('server build helpers route Linux musl builds into the target-specific output path', () => { + const env = { CODER_STUDIO_RUST_TARGET: 'x86_64-unknown-linux-musl' }; + assert.equal( + resolveServerBinaryPath({ env, platform: 'linux' }), + path.join(ROOT, '.build', 'server', 'target', 'x86_64-unknown-linux-musl', 'release', 'coder-studio'), + ); + assert.deepEqual( + buildServerCargoArgs({ env }), + ['build', '--release', '--manifest-path', path.join('apps', 'server', 'Cargo.toml'), '--target', 'x86_64-unknown-linux-musl'], + ); +}); + test('release manifest writer emits checksums for tarballs', async () => { const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'coder-studio-release-')); From a3710d62714c0fbdc4038ee7964e30c4d1e3bccc Mon Sep 17 00:00:00 2001 From: pallyoung Date: Sat, 21 Mar 2026 22:39:33 +0800 Subject: [PATCH 3/5] style: format rust sources --- apps/server/src/main.rs | 9 +++++++-- apps/server/src/ws/server.rs | 7 +------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/server/src/main.rs b/apps/server/src/main.rs index 116beb7..0e8dec7 100644 --- a/apps/server/src/main.rs +++ b/apps/server/src/main.rs @@ -140,7 +140,9 @@ fn resolve_state_dir() -> Result { #[cfg(target_os = "macos")] { let home = home_dir().ok_or_else(|| std::io::Error::other("missing home directory"))?; - return Ok(home.join("Library/Application Support").join("coder-studio")); + return Ok(home + .join("Library/Application Support") + .join("coder-studio")); } #[cfg(target_os = "windows")] @@ -210,7 +212,10 @@ async fn run() -> Result<(), String> { println!("Coder Studio web dev server: {DEV_FRONTEND_URL}"); println!("Coder Studio local server: {}", transport_server.endpoint); } else { - println!("Coder Studio server running at {}", transport_server.endpoint); + println!( + "Coder Studio server running at {}", + transport_server.endpoint + ); } axum::serve( diff --git a/apps/server/src/ws/server.rs b/apps/server/src/ws/server.rs index 96f366f..955c5d6 100644 --- a/apps/server/src/ws/server.rs +++ b/apps/server/src/ws/server.rs @@ -129,12 +129,7 @@ pub(crate) fn emit_agent( ); } -pub(crate) fn emit_terminal( - app: &AppHandle, - workspace_id: &str, - terminal_id: u64, - data: &str, -) { +pub(crate) fn emit_terminal(app: &AppHandle, workspace_id: &str, terminal_id: u64, data: &str) { emit_transport_event( app, "terminal://event", From a0dca69aeeb9632736facdae2fa663496f52659b Mon Sep 17 00:00:00 2001 From: pallyoung Date: Sat, 21 Mar 2026 22:50:09 +0800 Subject: [PATCH 4/5] fix: satisfy clippy after runtime refactor --- apps/server/src/services/agent.rs | 12 ++++++------ apps/server/src/services/claude.rs | 2 +- apps/server/src/services/workspace.rs | 24 ++++++++++++------------ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apps/server/src/services/agent.rs b/apps/server/src/services/agent.rs index c6729ab..27ccc33 100644 --- a/apps/server/src/services/agent.rs +++ b/apps/server/src/services/agent.rs @@ -19,8 +19,8 @@ pub(crate) fn agent_start( let session_id_num = session_id .parse::() .map_err(|_| "invalid_session_id".to_string())?; - let (cwd, target) = workspace_access_context(&state, &workspace_id)?; - let stored_session = load_session(&state, &workspace_id, session_id_num)?; + let (cwd, target) = workspace_access_context(state, &workspace_id)?; + let stored_session = load_session(state, &workspace_id, session_id_num)?; let effective_claude_session_id = stored_session.claude_session_id.clone(); let command = if provider == "claude" { build_claude_resume_command(&command, effective_claude_session_id.as_deref()) @@ -111,7 +111,7 @@ pub(crate) fn agent_start( ); let state: State = state_handle.state(); let _ = - append_session_stream(&state, &workspace_id_out, session_out_num, &text); + append_session_stream(state, &workspace_id_out, session_out_num, &text); } Err(_) => break, } @@ -126,7 +126,7 @@ pub(crate) fn agent_start( } emit_agent(&app_handle, &workspace_id, &session_id, "exit", "exited"); let state: State = state_handle.state(); - let _ = set_session_status(&state, &workspace_id, session_id_num, SessionStatus::Idle); + let _ = set_session_status(state, &workspace_id, session_id_num, SessionStatus::Idle); if let Ok(mut agents) = state.agents.lock() { agents.remove(&key); }; @@ -157,7 +157,7 @@ pub(crate) fn agent_send( handle.flush().map_err(|e| e.to_string())?; if let Ok(session_id_num) = session_id.parse::() { let _ = update_workspace_session( - &state, + state, &workspace_id, session_id_num, SessionPatch { @@ -199,7 +199,7 @@ pub(crate) fn agent_stop( drop(agents); if let Ok(session_id_num) = session_id.parse::() { let _ = set_session_status( - &state, + state, &workspace_id, session_id_num, SessionStatus::Interrupted, diff --git a/apps/server/src/services/claude.rs b/apps/server/src/services/claude.rs index 83bc13d..08335c7 100644 --- a/apps/server/src/services/claude.rs +++ b/apps/server/src/services/claude.rs @@ -85,7 +85,7 @@ fn handle_claude_hook_payload(app: &AppHandle, envelope: ClaudeHookEnvelope) { let state: State = app.state(); if let Ok(internal_session_id) = envelope.session_id.parse::() { let _ = set_session_claude_id( - &state, + state, &envelope.workspace_id, internal_session_id, claude_session_id, diff --git a/apps/server/src/services/workspace.rs b/apps/server/src/services/workspace.rs index 0a3d5ce..d6a420f 100644 --- a/apps/server/src/services/workspace.rs +++ b/apps/server/src/services/workspace.rs @@ -32,7 +32,7 @@ pub(crate) fn launch_workspace_internal( WorkspaceSourceKind::Local => resolve_git_repo_path(&source.path_or_url, &source.target)?, }; - launch_workspace_record(&state, source, project_path, default_idle_policy()) + launch_workspace_record(state, source, project_path, default_idle_policy()) } pub(crate) fn launch_workspace( @@ -45,35 +45,35 @@ pub(crate) fn launch_workspace( pub(crate) fn workbench_bootstrap( state: State<'_, AppState>, ) -> Result { - load_workbench_bootstrap(&state) + load_workbench_bootstrap(state) } pub(crate) fn workspace_snapshot( workspace_id: String, state: State<'_, AppState>, ) -> Result { - load_workspace_snapshot(&state, &workspace_id) + load_workspace_snapshot(state, &workspace_id) } pub(crate) fn activate_workspace( workspace_id: String, state: State<'_, AppState>, ) -> Result { - activate_workspace_ui(&state, &workspace_id) + activate_workspace_ui(state, &workspace_id) } pub(crate) fn close_workspace( workspace_id: String, state: State<'_, AppState>, ) -> Result { - close_workspace_ui(&state, &workspace_id) + close_workspace_ui(state, &workspace_id) } pub(crate) fn update_workbench_layout( layout: WorkbenchLayout, state: State<'_, AppState>, ) -> Result { - persist_workbench_layout(&state, layout) + persist_workbench_layout(state, layout) } pub(crate) fn workspace_view_update( @@ -81,7 +81,7 @@ pub(crate) fn workspace_view_update( patch: WorkspaceViewPatch, state: State<'_, AppState>, ) -> Result { - patch_workspace_view_state(&state, &workspace_id, patch) + patch_workspace_view_state(state, &workspace_id, patch) } pub(crate) fn create_session( @@ -89,7 +89,7 @@ pub(crate) fn create_session( mode: SessionMode, state: State<'_, AppState>, ) -> Result { - create_workspace_session(&state, &workspace_id, mode) + create_workspace_session(state, &workspace_id, mode) } pub(crate) fn session_update( @@ -98,7 +98,7 @@ pub(crate) fn session_update( patch: SessionPatch, state: State<'_, AppState>, ) -> Result { - update_workspace_session(&state, &workspace_id, session_id, patch) + update_workspace_session(state, &workspace_id, session_id, patch) } pub(crate) fn switch_session( @@ -106,7 +106,7 @@ pub(crate) fn switch_session( session_id: u64, state: State<'_, AppState>, ) -> Result { - switch_workspace_session(&state, &workspace_id, session_id) + switch_workspace_session(state, &workspace_id, session_id) } pub(crate) fn archive_session( @@ -114,7 +114,7 @@ pub(crate) fn archive_session( session_id: u64, state: State<'_, AppState>, ) -> Result { - let entry = archive_workspace_session(&state, &workspace_id, session_id)?; + let entry = archive_workspace_session(state, &workspace_id, session_id)?; let key = agent_key(&workspace_id, &session_id.to_string()); if let Ok(mut agents) = state.agents.lock() { if let Some(runtime) = agents.remove(&key) { @@ -134,7 +134,7 @@ pub(crate) fn update_idle_policy( policy: IdlePolicy, state: State<'_, AppState>, ) -> Result<(), String> { - update_workspace_idle_policy(&state, &workspace_id, policy) + update_workspace_idle_policy(state, &workspace_id, policy) } pub(crate) fn worktree_inspect( From d16e4a2fef1de32c4c1ff08ddeb0bb11bd131ea4 Mon Sep 17 00:00:00 2001 From: pallyoung Date: Sat, 21 Mar 2026 22:52:29 +0800 Subject: [PATCH 5/5] style: format agent service --- apps/server/src/services/agent.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/server/src/services/agent.rs b/apps/server/src/services/agent.rs index 27ccc33..c43812b 100644 --- a/apps/server/src/services/agent.rs +++ b/apps/server/src/services/agent.rs @@ -110,8 +110,7 @@ pub(crate) fn agent_start( &text, ); let state: State = state_handle.state(); - let _ = - append_session_stream(state, &workspace_id_out, session_out_num, &text); + let _ = append_session_stream(state, &workspace_id_out, session_out_num, &text); } Err(_) => break, }