From e4f3bb904ce75e3b66f4934ccb44cf02ea760a5e Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Tue, 14 Jul 2026 11:08:00 -0600 Subject: [PATCH 1/2] Embed Traverse runtime in Linux GTK and CLI Rust clients (#117) Migrate traverse-starter and doc-approval GTK/CLI shells from the HTTP sidecar to traverse-embedder BundleEmbedder, with EmbedderTestDouble-backed tests and Zone 1 Embedded status. Doc-approval production bundles still wait on manifests (#112). Co-authored-by: Cursor --- AGENTS.md | 5 +- README.md | 10 +- apps/doc-approval/Cargo.lock | 3894 +++++++++++----- apps/doc-approval/cli-rust/Cargo.toml | 8 +- apps/doc-approval/cli-rust/README.md | 18 +- apps/doc-approval/cli-rust/src/client.rs | 6 +- .../cli-rust/src/commands/health.rs | 58 +- .../cli-rust/src/commands/submit.rs | 124 +- apps/doc-approval/cli-rust/src/lib.rs | 4 +- apps/doc-approval/cli-rust/src/main.rs | 20 +- apps/doc-approval/cli-rust/src/output.rs | 18 +- .../cli-rust/tests/integration_tests.rs | 70 +- .../doc-approval-core-rs/Cargo.toml | 3 +- .../doc-approval-core-rs/src/host.rs | 259 ++ .../doc-approval-core-rs/src/lib.rs | 8 + .../doc-approval-core-rs/src/state.rs | 18 + .../doc-approval-core-rs/tests/host_tests.rs | 15 + apps/doc-approval/linux-gtk/Cargo.toml | 6 +- apps/doc-approval/linux-gtk/README.md | 18 +- apps/doc-approval/linux-gtk/src/client.rs | 6 +- .../linux-gtk/src/execution_state.rs | 18 +- apps/doc-approval/linux-gtk/src/lib.rs | 4 +- apps/doc-approval/linux-gtk/src/settings.rs | 12 +- .../linux-gtk/src/ui/main_window.rs | 306 +- .../linux-gtk/src/ui/preferences.rs | 25 +- .../linux-gtk/tests/client_tests.rs | 54 +- apps/traverse-starter/Cargo.lock | 3954 ++++++++++++----- apps/traverse-starter/cli-rust/Cargo.toml | 8 +- apps/traverse-starter/cli-rust/README.md | 27 +- apps/traverse-starter/cli-rust/src/client.rs | 5 +- .../cli-rust/src/commands/health.rs | 60 +- .../cli-rust/src/commands/run.rs | 120 +- apps/traverse-starter/cli-rust/src/lib.rs | 4 +- apps/traverse-starter/cli-rust/src/main.rs | 22 +- apps/traverse-starter/cli-rust/src/output.rs | 18 +- .../cli-rust/tests/integration_tests.rs | 82 +- apps/traverse-starter/linux-gtk/Cargo.toml | 6 +- apps/traverse-starter/linux-gtk/README.md | 35 +- apps/traverse-starter/linux-gtk/src/client.rs | 5 +- .../linux-gtk/src/execution_state.rs | 18 +- apps/traverse-starter/linux-gtk/src/lib.rs | 4 +- .../linux-gtk/src/settings.rs | 12 +- .../linux-gtk/src/ui/main_window.rs | 294 +- .../linux-gtk/src/ui/preferences.rs | 25 +- .../linux-gtk/tests/client_tests.rs | 64 +- .../traverse-core-rs/Cargo.toml | 3 +- .../traverse-core-rs/src/host.rs | 300 ++ .../traverse-core-rs/src/lib.rs | 8 + .../traverse-core-rs/src/state.rs | 22 + .../traverse-core-rs/tests/host_tests.rs | 83 + docs/design-language.md | 8 +- docs/embedded-runtime-plan.md | 2 +- manifests/traverse-starter/app.manifest.json | 2 +- 53 files changed, 6785 insertions(+), 3393 deletions(-) create mode 100644 apps/doc-approval/doc-approval-core-rs/src/host.rs create mode 100644 apps/doc-approval/doc-approval-core-rs/tests/host_tests.rs create mode 100644 apps/traverse-starter/traverse-core-rs/src/host.rs create mode 100644 apps/traverse-starter/traverse-core-rs/tests/host_tests.rs diff --git a/AGENTS.md b/AGENTS.md index 87c0f41..134f4e7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,10 +11,9 @@ gh project item-list 2 --owner traverse-framework --format json --limit 300 \ ### Blocked work summary -- **Phase 3 embedded runtime** ([#113](https://github.com/traverse-framework/reference-apps/issues/113)–[#116](https://github.com/traverse-framework/reference-apps/issues/116)) — blocked on remaining consumable embedder SDKs: Traverse [#646](https://github.com/traverse-framework/Traverse/issues/646) (web/TS), [#647](https://github.com/traverse-framework/Traverse/issues/647) (Swift), [#648](https://github.com/traverse-framework/Traverse/issues/648) (Kotlin), [#649](https://github.com/traverse-framework/Traverse/issues/649) (.NET). Rust SDK shipped ([#650](https://github.com/traverse-framework/Traverse/issues/650) / PR #672) — App-Refs [#117](https://github.com/traverse-framework/reference-apps/issues/117) is Ready. -- **doc-approval multi-capability showcase** ([#111](https://github.com/traverse-framework/reference-apps/issues/111), [#112](https://github.com/traverse-framework/reference-apps/issues/112)) — blocked only on Traverse [#555](https://github.com/traverse-framework/Traverse/issues/555) (`recommend`). Spec 069 closed [#538](https://github.com/traverse-framework/Traverse/issues/538): pipeline is `analyze → recommend` (no extract). +- **Phase 3 embedded runtime** ([#113](https://github.com/traverse-framework/reference-apps/issues/113)–[#116](https://github.com/traverse-framework/reference-apps/issues/116)) — blocked on remaining consumable embedder SDKs: Traverse [#646](https://github.com/traverse-framework/Traverse/issues/646) (web/TS), [#647](https://github.com/traverse-framework/Traverse/issues/647) (Swift), [#648](https://github.com/traverse-framework/Traverse/issues/648) (Kotlin), [#649](https://github.com/traverse-framework/Traverse/issues/649) (.NET). Rust SDK shipped ([#650](https://github.com/traverse-framework/Traverse/issues/650) / PR #672); App-Refs [#117](https://github.com/traverse-framework/reference-apps/issues/117) Linux GTK + CLI embed shipped. -Ready: [#117](https://github.com/traverse-framework/reference-apps/issues/117) (Linux GTK + CLI Rust embed). +Ready: none. Update this section when a PR changes platform status (see PR template checklist). diff --git a/README.md b/README.md index 40798fc..daae9a0 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,8 @@ All clients are **native UI shells** separated from business logic. Phase 1/2 us | macOS (SwiftUI + AppKit) | Shipped | [`apps/traverse-starter/macos-swift/`](apps/traverse-starter/macos-swift/) | | Android (Jetpack Compose) | Shipped | [`apps/traverse-starter/android-compose/`](apps/traverse-starter/android-compose/) | | Windows (WinUI 3) | Shipped | [`apps/traverse-starter/windows-winui/`](apps/traverse-starter/windows-winui/) | -| Linux (GTK4 + Rust) | Shipped | [`apps/traverse-starter/linux-gtk/`](apps/traverse-starter/linux-gtk/) | -| CLI (Rust) | Shipped | [`apps/traverse-starter/cli-rust/`](apps/traverse-starter/cli-rust/) | +| Linux (GTK4 + Rust) | Shipped (embedded) | [`apps/traverse-starter/linux-gtk/`](apps/traverse-starter/linux-gtk/) | +| CLI (Rust) | Shipped (embedded) | [`apps/traverse-starter/cli-rust/`](apps/traverse-starter/cli-rust/) | ### doc-approval (Phase 1 submitter) @@ -121,8 +121,8 @@ All clients are **native UI shells** separated from business logic. Phase 1/2 us | macOS (SwiftUI + AppKit) | Shipped | [`apps/doc-approval/macos-swift/`](apps/doc-approval/macos-swift/) | | Android (Jetpack Compose) | Shipped | [`apps/doc-approval/android-compose/`](apps/doc-approval/android-compose/) | | Windows (WinUI 3) | Shipped | [`apps/doc-approval/windows-winui/`](apps/doc-approval/windows-winui/) | -| Linux (GTK4 + Rust) | Shipped | [`apps/doc-approval/linux-gtk/`](apps/doc-approval/linux-gtk/) | -| CLI (Rust) | Shipped | [`apps/doc-approval/cli-rust/`](apps/doc-approval/cli-rust/) | +| Linux (GTK4 + Rust) | Shipped (embedded; bundle waits on #112) | [`apps/doc-approval/linux-gtk/`](apps/doc-approval/linux-gtk/) | +| CLI (Rust) | Shipped (embedded; bundle waits on #112) | [`apps/doc-approval/cli-rust/`](apps/doc-approval/cli-rust/) | ### meeting-notes (list-type output) @@ -174,4 +174,4 @@ Active blockers on [Project 2](https://github.com/orgs/traverse-framework/projec - **Phase 3 embedded runtime** ([#113](https://github.com/traverse-framework/reference-apps/issues/113)–[#116](https://github.com/traverse-framework/reference-apps/issues/116)) — blocked on remaining embedder SDKs: Traverse [#646](https://github.com/traverse-framework/Traverse/issues/646) (web/TS), [#647](https://github.com/traverse-framework/Traverse/issues/647) (Swift), [#648](https://github.com/traverse-framework/Traverse/issues/648) (Kotlin), [#649](https://github.com/traverse-framework/Traverse/issues/649) (.NET). Rust SDK shipped ([#650](https://github.com/traverse-framework/Traverse/issues/650)); [#117](https://github.com/traverse-framework/reference-apps/issues/117) is Ready. HTTP sidecar remains dev-only. - **doc-approval multi-capability showcase** ([#111](https://github.com/traverse-framework/reference-apps/issues/111), [#112](https://github.com/traverse-framework/reference-apps/issues/112)) — blocked only on Traverse [#555](https://github.com/traverse-framework/Traverse/issues/555) (`recommend`). Spec 069: pipeline is `analyze → recommend` (no extract; [#538](https://github.com/traverse-framework/Traverse/issues/538) closed). -Ready on Project 2: [#117](https://github.com/traverse-framework/reference-apps/issues/117) (Linux GTK + CLI Rust embed). +Ready on Project 2: none (after #117 merges). diff --git a/apps/doc-approval/Cargo.lock b/apps/doc-approval/Cargo.lock index d62c2ed..329ef18 100644 --- a/apps/doc-approval/Cargo.lock +++ b/apps/doc-approval/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59317f77929f0e679d39364702289274de2f0f0b22cbf50b2b8cff2169a0b27a" +dependencies = [ + "gimli", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -11,6 +20,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "1.0.0" @@ -61,6 +91,18 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "anyhow" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" + [[package]] name = "assert-json-diff" version = "2.0.2" @@ -72,18 +114,14 @@ dependencies = [ ] [[package]] -name = "assert_cmd" -version = "2.2.2" +name = "async-trait" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aa3a22042e45de04255c7bf3626e239f450200fd0493c1e382263544b20aea6" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ - "anstyle", - "bstr", - "libc", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -111,14 +149,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] -name = "bstr" -version = "1.12.3" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "memchr", - "regex-automata", - "serde_core", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", ] [[package]] @@ -126,6 +171,9 @@ name = "bumpalo" version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +dependencies = [ + "allocator-api2", +] [[package]] name = "bytes" @@ -156,6 +204,84 @@ dependencies = [ "system-deps", ] +[[package]] +name = "cap-fs-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5528f85b1e134ae811704e41ef80930f56e795923f866813255bc342cc20654" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "windows-sys 0.59.0", +] + +[[package]] +name = "cap-net-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20a158160765c6a7d0d8c072a53d772e4cb243f38b04bfcf6b4939cfbe7482e7" +dependencies = [ + "cap-primitives", + "cap-std", + "rustix 1.1.4", + "smallvec", +] + +[[package]] +name = "cap-primitives" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cf3aea8a5081171859ef57bc1606b1df6999df4f1110f8eef68b30098d1d3a" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes", + "ipnet", + "maybe-owned", + "rustix 1.1.4", + "rustix-linux-procfs", + "windows-sys 0.59.0", + "winx", +] + +[[package]] +name = "cap-rand" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8144c22e24bbcf26ade86cb6501a0916c46b7e4787abdb0045a467eb1645a1d" +dependencies = [ + "ambient-authority", + "rand 0.8.7", +] + +[[package]] +name = "cap-std" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6dc3090992a735d23219de5c204927163d922f42f575a0189b005c62d37549a" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes", + "rustix 1.1.4", +] + +[[package]] +name = "cap-time-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def102506ce40c11710a9b16e614af0cde8e76ae51b1f48c04b8d79f4b671a80" +dependencies = [ + "ambient-authority", + "cap-primitives", + "iana-time-zone", + "once_cell", + "rustix 1.1.4", + "winx", +] + [[package]] name = "cc" version = "1.2.67" @@ -163,6 +289,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -195,10 +323,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.3.0", "rand_core 0.10.1", ] +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + [[package]] name = "clap" version = "4.6.1" @@ -239,6 +381,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "colorchoice" version = "1.0.5" @@ -256,1466 +407,2510 @@ dependencies = [ ] [[package]] -name = "colored" -version = "3.1.1" +name = "const-oid" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" -dependencies = [ - "windows-sys 0.61.2", -] +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] -name = "cpufeatures" -version = "0.3.0" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "deadpool" -version = "0.12.3" +name = "cpp_demangle" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +checksum = "f2bb79cb74d735044c972aae58ed0aaa9a837e85b01106a54c39e42e97f62253" dependencies = [ - "deadpool-runtime", - "lazy_static", - "num_cpus", - "tokio", + "cfg-if", ] [[package]] -name = "deadpool-runtime" -version = "0.1.4" +name = "cpufeatures" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] [[package]] -name = "difflib" -version = "0.4.0" +name = "cpufeatures" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] [[package]] -name = "directories" -version = "5.0.1" +name = "cranelift-assembler-x64" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "3867f7a56768640a79fc660d2f60298251dc6d65b5d1c907706cd1afff024957" dependencies = [ - "dirs-sys", + "cranelift-assembler-x64-meta", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "cranelift-assembler-x64-meta" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "a0661d63dcf8fc4a6538c1ee4d523917c5b27e9fce7a4114cdf9e2b30b4043cf" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "cranelift-srcgen", ] [[package]] -name = "displaydoc" -version = "0.2.6" +name = "cranelift-bforest" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "a8d535b489159ea63e3c40dfbe8d0e12bfb71f2a14845ef2407353e06c5a697c" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cranelift-entity", + "wasmtime-internal-core", ] [[package]] -name = "doc-approval-cli" -version = "0.1.0" +name = "cranelift-bitset" +version = "0.131.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3af4f7d421b2354deb01d714266022f38fcdbebc9f5f1ec6d310d3c27286d9e" dependencies = [ - "assert_cmd", - "clap", - "colored 2.2.0", - "doc-approval-core-rs", - "futures-util", - "mockito", - "predicates", "serde", - "serde_json", - "tokio", + "serde_derive", + "wasmtime-internal-core", ] [[package]] -name = "doc-approval-core-rs" -version = "0.1.0" +name = "cranelift-codegen" +version = "0.131.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fe4c289e67e0221d1705734a57f95e25c289ed0ead7728743ea21285fc4cf1" dependencies = [ - "futures-util", - "reqwest", + "bumpalo", + "cranelift-assembler-x64", + "cranelift-bforest", + "cranelift-bitset", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown 0.16.1", + "libm", + "log", + "pulley-interpreter", + "regalloc2", + "rustc-hash", "serde", - "serde_json", - "tokio", - "wiremock", + "smallvec", + "target-lexicon", + "wasmtime-internal-core", ] [[package]] -name = "doc-approval-gtk" -version = "0.1.0" +name = "cranelift-codegen-meta" +version = "0.131.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3063e5363dc5ee6ee8edd930314582c08eb91c209b9564da1cd667f6424b9b3" dependencies = [ - "directories", - "doc-approval-core-rs", - "futures-util", - "gtk4", - "libadwaita", - "serde", - "serde_json", - "tokio", - "wiremock", + "cranelift-assembler-x64-meta", + "cranelift-codegen-shared", + "cranelift-srcgen", + "heck", + "pulley-interpreter", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "cranelift-codegen-shared" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "c34b9c8dbc9edf37744918e56898d4979ef1e764e8e4bbe8b4d50250838ddfe8" [[package]] -name = "field-offset" -version = "0.3.6" +name = "cranelift-control" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +checksum = "4eed9dc54204dc99aad19669bca50142659ed583396d9a99a2aef34d7c136ef4" dependencies = [ - "memoffset", - "rustc_version", + "arbitrary", ] [[package]] -name = "find-msvc-tools" -version = "0.1.9" +name = "cranelift-entity" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "9aa2846b239a046217ecf95cfed0e31be4e86843785d07438ad33f456871e888" +dependencies = [ + "cranelift-bitset", + "serde", + "serde_derive", + "wasmtime-internal-core", +] [[package]] -name = "float-cmp" -version = "0.10.0" +name = "cranelift-frontend" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +checksum = "144f70fa9cd07efb83497c12dc8fb73f360a690cd990c44e8ceebc293d8c13b5" dependencies = [ - "num-traits", + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "cranelift-isle" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "0733ca5b2aaa5f6d5d6a1439e3c44280d34730d4d5c262ca08c6775c8d83f191" [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "cranelift-native" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "75b1290d6193b171172d5fe9a6e42326edf487a79f211fbf1e76f912a4aed035" dependencies = [ - "percent-encoding", + "cranelift-codegen", + "libc", + "target-lexicon", ] [[package]] -name = "futures" -version = "0.3.32" +name = "cranelift-srcgen" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] +checksum = "ce0d5c2b4d719566816a0f1c9a9712d35d61e27df0ffd6c72a9afec9048db6c0" [[package]] -name = "futures-channel" -version = "0.3.32" +name = "crc32fast" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "futures-core", - "futures-sink", + "cfg-if", ] [[package]] -name = "futures-core" -version = "0.3.32" +name = "crossbeam-deque" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] [[package]] -name = "futures-executor" -version = "0.3.32" +name = "crossbeam-epoch" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "crossbeam-utils", ] [[package]] -name = "futures-io" -version = "0.3.32" +name = "crossbeam-utils" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] -name = "futures-macro" -version = "0.3.32" +name = "crypto-common" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ - "proc-macro2", - "quote", - "syn", + "generic-array", + "typenum", ] [[package]] -name = "futures-sink" -version = "0.3.32" +name = "crypto-common" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] [[package]] -name = "futures-task" -version = "0.3.32" +name = "curve25519-dalek" +version = "5.0.0" 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" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", + "cfg-if", + "cpufeatures 0.3.0", + "curve25519-dalek-derive", + "digest 0.11.3", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", ] [[package]] -name = "gdk-pixbuf" -version = "0.20.10" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd242894c084f4beed508a56952750bce3e96e85eb68fdc153637daa163e10c" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "gdk-pixbuf-sys" -version = "0.20.10" +name = "deadpool" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b34f3b580c988bd217e9543a2de59823fafae369d1a055555e5f95a8b130b96" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", ] [[package]] -name = "gdk4" -version = "0.9.6" +name = "deadpool-runtime" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850c9d9c1aecd1a3eb14fadc1cdb0ac0a2298037e116264c7473e1740a32d60" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk4-sys", - "gio", - "glib", - "libc", - "pango", -] +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" [[package]] -name = "gdk4-sys" -version = "0.9.6" +name = "debugid" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f6eb95798e2b46f279cf59005daf297d5b69555428f185650d71974a910473a" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", + "uuid", ] [[package]] -name = "getrandom" -version = "0.2.17" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", + "block-buffer 0.10.4", + "crypto-common 0.1.7", ] [[package]] -name = "getrandom" -version = "0.3.4" +name = "digest" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", + "block-buffer 0.12.1", + "const-oid", + "crypto-common 0.2.2", ] [[package]] -name = "getrandom" -version = "0.4.3" +name = "directories" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasm-bindgen", + "dirs-sys", ] [[package]] -name = "gio" -version = "0.20.12" +name = "directories-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e27e276e7b6b8d50f6376ee7769a71133e80d093bdc363bd0af71664228b831" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "pin-project-lite", - "smallvec", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "gio-sys" -version = "0.20.10" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "glib-sys", - "gobject-sys", "libc", - "system-deps", - "windows-sys 0.59.0", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "glib" -version = "0.20.12" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", "libc", - "memchr", - "smallvec", + "redox_users", + "winapi", ] [[package]] -name = "glib-macros" -version = "0.20.12" +name = "displaydoc" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ - "heck", - "proc-macro-crate", "proc-macro2", "quote", "syn", ] [[package]] -name = "glib-sys" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" +name = "doc-approval-cli" +version = "0.1.0" dependencies = [ - "libc", - "system-deps", + "clap", + "colored", + "doc-approval-core-rs", + "serde", + "serde_json", ] [[package]] -name = "gobject-sys" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" +name = "doc-approval-core-rs" +version = "0.1.0" dependencies = [ - "glib-sys", - "libc", - "system-deps", + "futures-util", + "reqwest", + "serde", + "serde_json", + "tokio", + "traverse-embedder", + "wiremock", ] [[package]] -name = "graphene-rs" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b86dfad7d14251c9acaf1de63bc8754b7e3b4e5b16777b6f5a748208fe9519b" +name = "doc-approval-gtk" +version = "0.1.0" dependencies = [ - "glib", - "graphene-sys", - "libc", + "directories", + "doc-approval-core-rs", + "gtk4", + "libadwaita", + "serde", + "serde_json", ] [[package]] -name = "graphene-sys" -version = "0.20.10" +name = "ed25519" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df583a85ba2d5e15e1797e40d666057b28bc2f60a67c9c24145e6db2cc3861ea" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ - "glib-sys", - "libc", - "pkg-config", - "system-deps", + "signature", ] [[package]] -name = "gsk4" -version = "0.9.6" +name = "ed25519-dalek" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f5e72f931c8c9f65fbfc89fe0ddc7746f147f822f127a53a9854666ac1f855" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ - "cairo-rs", - "gdk4", - "glib", - "graphene-rs", - "gsk4-sys", - "libc", - "pango", + "curve25519-dalek", + "ed25519", + "sha2 0.11.0", + "subtle", + "zeroize", ] [[package]] -name = "gsk4-sys" -version = "0.9.6" +name = "either" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755059de55fa6f85a46bde8caf03e2184c96bfda1f6206163c72fb0ea12436dc" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "cairo-sys-rs", - "gdk4-sys", - "glib-sys", - "gobject-sys", - "graphene-sys", - "libc", - "pango-sys", - "system-deps", + "cfg-if", ] [[package]] -name = "gtk4" -version = "0.9.7" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f274dd0102c21c47bbfa8ebcb92d0464fab794a22fad6c3f3d5f165139a326d6" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "cairo-rs", - "field-offset", - "futures-channel", - "gdk-pixbuf", - "gdk4", - "gio", - "glib", - "graphene-rs", - "gsk4", - "gtk4-macros", - "gtk4-sys", "libc", - "pango", + "windows-sys 0.61.2", ] [[package]] -name = "gtk4-macros" -version = "0.9.5" +name = "fastrand" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fd-lock" +version = "4.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" +dependencies = [ + "cfg-if", + "rustix 1.1.4", + "windows-sys 0.59.0", +] + +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-set-times" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a" +dependencies = [ + "io-lifetimes", + "rustix 1.1.4", + "windows-sys 0.59.0", +] + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[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-macro-crate", "proc-macro2", "quote", "syn", ] [[package]] -name = "gtk4-sys" +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "fxprof-processed-profile" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25234f20a3ec0a962a61770cfe39ecf03cb529a6e474ad8cff025ed497eda557" +dependencies = [ + "bitflags", + "debugid", + "rustc-hash", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd242894c084f4beed508a56952750bce3e96e85eb68fdc153637daa163e10c" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b34f3b580c988bd217e9543a2de59823fafae369d1a055555e5f95a8b130b96" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk4" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e03b01e54d77c310e1d98647d73f996d04b2f29b9121fe493ea525a7ec03d6" +checksum = "4850c9d9c1aecd1a3eb14fadc1cdb0ac0a2298037e116264c7473e1740a32d60" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk4-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk4-sys" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f6eb95798e2b46f279cf59005daf297d5b69555428f185650d71974a910473a" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", - "gdk4-sys", "gio-sys", "glib-sys", "gobject-sys", - "graphene-sys", - "gsk4-sys", "libc", "pango-sys", + "pkg-config", "system-deps", ] [[package]] -name = "h2" -version = "0.4.15" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "rand_core 0.10.1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c" dependencies = [ - "atomic-waker", - "bytes", "fnv", - "futures-core", - "futures-sink", - "http", + "hashbrown 0.16.1", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gio" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e27e276e7b6b8d50f6376ee7769a71133e80d093bdc363bd0af71664228b831" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "pin-project-lite", + "smallvec", +] + +[[package]] +name = "gio-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "windows-sys 0.59.0", +] + +[[package]] +name = "glib" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "smallvec", +] + +[[package]] +name = "glib-macros" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "graphene-rs" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b86dfad7d14251c9acaf1de63bc8754b7e3b4e5b16777b6f5a748208fe9519b" +dependencies = [ + "glib", + "graphene-sys", + "libc", +] + +[[package]] +name = "graphene-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df583a85ba2d5e15e1797e40d666057b28bc2f60a67c9c24145e6db2cc3861ea" +dependencies = [ + "glib-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gsk4" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f5e72f931c8c9f65fbfc89fe0ddc7746f147f822f127a53a9854666ac1f855" +dependencies = [ + "cairo-rs", + "gdk4", + "glib", + "graphene-rs", + "gsk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gsk4-sys" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755059de55fa6f85a46bde8caf03e2184c96bfda1f6206163c72fb0ea12436dc" +dependencies = [ + "cairo-sys-rs", + "gdk4-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk4" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f274dd0102c21c47bbfa8ebcb92d0464fab794a22fad6c3f3d5f165139a326d6" +dependencies = [ + "cairo-rs", + "field-offset", + "futures-channel", + "gdk-pixbuf", + "gdk4", + "gio", + "glib", + "graphene-rs", + "gsk4", + "gtk4-macros", + "gtk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gtk4-macros" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gtk4-sys" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e03b01e54d77c310e1d98647d73f996d04b2f29b9121fe493ea525a7ec03d6" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "gsk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "h2" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "foldhash", + "serde", + "serde_core", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hybrid-array" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "io-extras" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2285ddfe3054097ef4b2fe909ef8c3bcd1ea52a8f0d274416caebeef39f04a65" +dependencies = [ + "io-lifetimes", + "windows-sys 0.59.0", +] + +[[package]] +name = "io-lifetimes" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "ittapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b996fe614c41395cdaedf3cf408a9534851090959d90d54a535f675550b64b1" +dependencies = [ + "anyhow", + "ittapi-sys", + "log", +] + +[[package]] +name = "ittapi-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5385394064fa2c886205dba02598013ce83d3e92d33dbdc0c52fe0e7bf4fc" +dependencies = [ + "cc", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libadwaita" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500135d29c16aabf67baafd3e7741d48e8b8978ca98bac39e589165c8dc78191" +dependencies = [ + "gdk4", + "gio", + "glib", + "gtk4", + "libadwaita-sys", + "libc", + "pango", +] + +[[package]] +name = "libadwaita-sys" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6680988058c2558baf3f548a370e4e78da3bf7f08469daa822ac414842c912db" +dependencies = [ + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "libredox" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mach2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memfd" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" +dependencies = [ + "rustix 1.1.4", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mio" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[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_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" +dependencies = [ + "crc32fast", + "hashbrown 0.17.1", + "indexmap", + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[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.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" +dependencies = [ + "gio", + "glib", + "libc", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", ] [[package]] -name = "hashbrown" -version = "0.17.1" +name = "pin-project-lite" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "heck" -version = "0.5.0" +name = "pkg-config" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] -name = "hermit-abi" -version = "0.5.2" +name = "postcard" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] [[package]] -name = "http" -version = "1.4.2" +name = "potential_utf" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ - "bytes", - "itoa", + "zerovec", ] [[package]] -name = "http-body" -version = "1.0.1" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "bytes", - "http", + "zerocopy", ] [[package]] -name = "http-body-util" -version = "0.1.3" +name = "proc-macro-crate" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", + "toml_edit", ] [[package]] -name = "httparse" -version = "1.10.1" +name = "proc-macro2" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "pulley-interpreter" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "34dff5fd3d9ac4845939fcb4597cd413cb244bc530448ed4766d11b1725e53d0" +dependencies = [ + "cranelift-bitset", + "log", + "pulley-macros", + "wasmtime-internal-core", +] [[package]] -name = "hyper" -version = "1.10.1" +name = "pulley-macros" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "6c60fb1c885bdb1efd7c50e8e973714de558b75a65f20c3e9a41398c652aa44b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ - "atomic-waker", "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", + "cfg_aliases", "pin-project-lite", - "smallvec", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", "tokio", - "want", + "tracing", + "web-time", ] [[package]] -name = "hyper-rustls" -version = "0.27.9" +name = "quinn-proto" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ - "http", - "hyper", - "hyper-util", + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand 0.10.2", + "rand_pcg", + "ring", + "rustc-hash", "rustls", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", ] [[package]] -name = "hyper-util" -version = "0.1.20" +name = "quinn-udp" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", + "cfg_aliases", "libc", - "percent-encoding", - "pin-project-lite", + "once_cell", "socket2", - "tokio", - "tower-service", "tracing", + "windows-sys 0.61.2", ] [[package]] -name = "icu_collections" -version = "2.2.0" +name = "quote" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", + "proc-macro2", ] [[package]] -name = "icu_locale_core" -version = "2.2.0" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "libc", + "rand_chacha", + "rand_core 0.6.4", ] [[package]] -name = "icu_normalizer" -version = "2.2.0" +name = "rand" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] -name = "icu_normalizer_data" -version = "2.2.0" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] [[package]] -name = "icu_properties" -version = "2.2.0" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "getrandom 0.2.17", ] [[package]] -name = "icu_properties_data" -version = "2.2.0" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] -name = "icu_provider" -version = "2.2.0" +name = "rand_pcg" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", + "rand_core 0.10.1", ] [[package]] -name = "idna" -version = "1.1.0" +name = "rayon" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "either", + "rayon-core", ] [[package]] -name = "idna_adapter" -version = "1.2.2" +name = "rayon-core" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "icu_normalizer", - "icu_properties", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "indexmap" -version = "2.14.0" +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "regalloc2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "de2c52737737f8609e94f975dee22854a2d5c125772d4b1cf292120f4d45c186" dependencies = [ - "equivalent", - "hashbrown", + "allocator-api2", + "bumpalo", + "hashbrown 0.17.1", + "log", + "rustc-hash", + "smallvec", ] [[package]] -name = "ipnet" -version = "2.12.0" +name = "regex" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" +name = "regex-automata" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] -name = "itoa" -version = "1.0.18" +name = "regex-syntax" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] -name = "js-sys" -version = "0.3.103" +name = "reqwest" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "cfg-if", + "base64", + "bytes", + "futures-core", "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", ] [[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libadwaita" -version = "0.7.2" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500135d29c16aabf67baafd3e7741d48e8b8978ca98bac39e589165c8dc78191" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "gdk4", - "gio", - "glib", - "gtk4", - "libadwaita-sys", + "cc", + "cfg-if", + "getrandom 0.2.17", "libc", - "pango", + "untrusted", + "windows-sys 0.52.0", ] [[package]] -name = "libadwaita-sys" -version = "0.7.2" +name = "rustc-demangle" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6680988058c2558baf3f548a370e4e78da3bf7f08469daa822ac414842c912db" -dependencies = [ - "gdk4-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk4-sys", - "libc", - "pango-sys", - "system-deps", -] +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] -name = "libc" -version = "0.2.186" +name = "rustc-hash" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] -name = "libredox" -version = "0.1.18" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "libc", + "semver", ] [[package]] -name = "litemap" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - -[[package]] -name = "lock_api" -version = "0.4.14" +name = "rustix" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "scopeguard", + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] -name = "log" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" - -[[package]] -name = "lru-slab" -version = "0.1.2" +name = "rustix" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", +] [[package]] -name = "memchr" -version = "2.8.3" +name = "rustix-linux-procfs" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +checksum = "2fc84bf7e9aa16c4f2c758f27412dc9841341e16aa682d9c7ac308fe3ee12056" +dependencies = [ + "once_cell", + "rustix 1.1.4", +] [[package]] -name = "memoffset" -version = "0.9.1" +name = "rustls" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ - "autocfg", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] -name = "mio" -version = "1.2.1" +name = "rustls-pki-types" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", + "web-time", + "zeroize", ] [[package]] -name = "mockito" -version = "1.7.2" +name = "rustls-webpki" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90820618712cab19cfc46b274c6c22546a82affcb3c3bdf0f29e3db8e1bb92c0" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "assert-json-diff", - "bytes", - "colored 3.1.1", - "futures-core", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "log", - "pin-project-lite", - "rand 0.9.5", - "regex", - "serde_json", - "serde_urlencoded", - "similar", - "tokio", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "normalize-line-endings" -version = "0.3.0" +name = "rustversion" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] -name = "num-traits" -version = "0.2.19" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] -name = "num_cpus" -version = "1.17.0" +name = "semver" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ - "hermit-abi", - "libc", + "serde", + "serde_core", ] [[package]] -name = "once_cell" -version = "1.21.4" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] [[package]] -name = "once_cell_polyfill" -version = "1.70.2" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] [[package]] -name = "option-ext" -version = "0.2.0" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "pango" -version = "0.20.12" +name = "serde_json" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "gio", - "glib", - "libc", - "pango-sys", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", ] [[package]] -name = "pango-sys" -version = "0.20.10" +name = "serde_spanned" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "serde_core", ] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "lock_api", - "parking_lot_core", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] -name = "parking_lot_core" -version = "0.9.12" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] -name = "percent-encoding" -version = "2.3.2" +name = "sha2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", +] [[package]] -name = "pin-project-lite" -version = "0.2.17" +name = "shlex" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] -name = "pkg-config" -version = "0.3.33" +name = "signature" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" [[package]] -name = "potential_utf" -version = "0.1.5" +name = "slab" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" -dependencies = [ - "zerovec", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "smallvec" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" dependencies = [ - "zerocopy", + "serde", ] [[package]] -name = "predicates" -version = "3.1.4" +name = "socket2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ - "anstyle", - "difflib", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "predicates-core" -version = "1.0.10" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] -name = "predicates-tree" -version = "1.0.13" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" -dependencies = [ - "predicates-core", - "termtree", -] +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "proc-macro2" -version = "1.0.106" +name = "syn" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ + "proc-macro2", + "quote", "unicode-ident", ] [[package]] -name = "quinn" -version = "0.11.11" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", + "futures-core", ] [[package]] -name = "quinn-proto" -version = "0.11.16" +name = "synstructure" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "bytes", - "getrandom 0.4.3", - "lru-slab", - "rand 0.10.2", - "rand_pcg", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "quinn-udp" -version = "0.5.15" +name = "system-deps" +version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.61.2", + "cfg-expr", + "heck", + "pkg-config", + "toml 1.1.2+spec-1.1.0", + "version-compare", ] [[package]] -name = "quote" -version = "1.0.46" +name = "system-interface" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "cc4592f674ce18521c2a81483873a49596655b179f71c5e05d10c1fe66c78745" dependencies = [ - "proc-macro2", + "bitflags", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes", + "rustix 0.38.44", + "windows-sys 0.59.0", + "winx", ] [[package]] -name = "r-efi" -version = "5.3.0" +name = "target-lexicon" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] -name = "r-efi" -version = "6.0.0" +name = "tempfile" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix 1.1.4", + "windows-sys 0.61.2", +] [[package]] -name = "rand" -version = "0.9.5" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ - "rand_chacha", - "rand_core 0.9.5", + "winapi-util", ] [[package]] -name = "rand" -version = "0.10.2" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", + "thiserror-impl 1.0.69", ] [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "thiserror" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", + "thiserror-impl 2.0.18", ] [[package]] -name = "rand_core" -version = "0.9.5" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "getrandom 0.3.4", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "rand_core" -version = "0.10.1" +name = "thiserror-impl" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "rand_pcg" -version = "0.10.2" +name = "tinystr" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ - "rand_core 0.10.1", + "displaydoc", + "zerovec", ] [[package]] -name = "redox_syscall" -version = "0.5.18" +name = "tinyvec" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ - "bitflags", + "tinyvec_macros", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 1.0.69", -] +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "regex" -version = "1.13.0" +name = "tokio" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", ] [[package]] -name = "regex-automata" -version = "0.4.15" +name = "tokio-macros" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "regex-syntax" -version = "0.8.11" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] [[package]] -name = "reqwest" -version = "0.12.28" +name = "tokio-util" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ - "base64", "bytes", "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", + "futures-sink", "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", "tokio", - "tokio-rustls", - "tokio-util", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", ] [[package]] -name = "ring" -version = "0.17.14" +name = "toml" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", ] [[package]] -name = "rustc-hash" -version = "2.1.3" +name = "toml" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ - "semver", + "serde_core", ] [[package]] -name = "rustls" -version = "0.23.41" +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", + "serde_core", ] [[package]] -name = "rustls-pki-types" -version = "1.15.0" +name = "toml_edit" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ - "web-time", - "zeroize", + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", ] [[package]] -name = "rustls-webpki" -version = "0.103.13" +name = "toml_parser" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "winnow 1.0.3", ] [[package]] -name = "rustversion" -version = "1.0.23" +name = "toml_writer" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] -name = "ryu" -version = "1.0.23" +name = "tower" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "tower-http" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] [[package]] -name = "semver" -version = "1.0.28" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] -name = "serde" -version = "1.0.228" +name = "tower-service" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] -name = "serde_core" -version = "1.0.228" +name = "tracing" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "serde_derive", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "serde_derive" -version = "1.0.228" +name = "tracing-attributes" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -1723,553 +2918,787 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.150" +name = "tracing-core" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ - "itoa", - "memchr", + "once_cell", +] + +[[package]] +name = "traverse-contracts" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" +dependencies = [ + "semver", "serde", - "serde_core", - "zmij", + "serde_json", ] [[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +name = "traverse-embedder" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" dependencies = [ - "serde_core", + "serde_json", + "traverse-registry", + "traverse-runtime", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +name = "traverse-registry" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", + "semver", "serde", + "serde_json", + "sha2 0.11.0", + "traverse-contracts", ] [[package]] -name = "shlex" -version = "2.0.1" +name = "traverse-runtime" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" +dependencies = [ + "chrono", + "ed25519-dalek", + "rayon", + "semver", + "serde", + "serde_json", + "sha2 0.11.0", + "traverse-contracts", + "traverse-registry", + "uuid", + "wasmtime", + "wasmtime-wasi", + "zeroize", +] + +[[package]] +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "similar" -version = "2.7.0" +name = "typenum" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] -name = "slab" -version = "0.4.12" +name = "unicode-ident" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] -name = "smallvec" -version = "1.15.2" +name = "unicode-width" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] -name = "socket2" -version = "0.6.4" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "stable_deref_trait" -version = "1.2.1" +name = "url" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] [[package]] -name = "strsim" -version = "0.11.1" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "subtle" -version = "2.6.1" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "syn" -version = "2.0.118" +name = "uuid" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "getrandom 0.4.3", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "version-compare" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] -name = "synstructure" -version = "0.13.2" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "system-deps" -version = "7.0.8" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", + "try-lock", ] [[package]] -name = "target-lexicon" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" - -[[package]] -name = "termtree" -version = "0.5.1" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "thiserror" -version = "1.0.69" +name = "wasm-bindgen" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ - "thiserror-impl 1.0.69", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] -name = "thiserror" -version = "2.0.18" +name = "wasm-bindgen-futures" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ - "thiserror-impl 2.0.18", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "thiserror-impl" -version = "1.0.69" +name = "wasm-bindgen-macro" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ - "proc-macro2", "quote", - "syn", + "wasm-bindgen-macro-support", ] [[package]] -name = "thiserror-impl" -version = "2.0.18" +name = "wasm-bindgen-macro-support" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", + "wasm-bindgen-shared", ] [[package]] -name = "tinystr" -version = "0.8.3" +name = "wasm-bindgen-shared" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ - "displaydoc", - "zerovec", + "unicode-ident", ] [[package]] -name = "tinyvec" -version = "1.12.0" +name = "wasm-compose" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +checksum = "f05a2b3bad87cc1ce45b63425ec09a854cc4cb369231c9fed1fee31538103efb" dependencies = [ - "tinyvec_macros", + "anyhow", + "heck", + "indexmap", + "log", + "petgraph", + "smallvec", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wat", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.52.3" +name = "wasm-encoder" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "61fb705ce81adde29d2a8e99d87995e39a6e927358c91398f374474746070ef7" dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", + "leb128fmt", + "wasmparser 0.246.2", ] [[package]] -name = "tokio-macros" -version = "2.7.0" +name = "wasm-encoder" +version = "0.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "59972d6cd272259de647b7c1f1912e45e289c75ffd4be04e10695507cd7e1b59" dependencies = [ - "proc-macro2", - "quote", - "syn", + "leb128fmt", + "wasmparser 0.253.0", ] [[package]] -name = "tokio-rustls" -version = "0.26.4" +name = "wasm-streams" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ - "rustls", - "tokio", + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] -name = "tokio-util" -version = "0.7.18" +name = "wasmparser" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "71cde4757396defafd25417cfb36aa3161027d06d865b0c24baaae229aac005d" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", + "bitflags", + "hashbrown 0.16.1", + "indexmap", + "semver", + "serde", ] [[package]] -name = "toml" -version = "1.1.2+spec-1.1.0" +name = "wasmparser" +version = "0.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "19db11f87d2486580e1e8b6f494c54df7e0566b87d0b599db843c24019667339" dependencies = [ + "bitflags", "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", + "semver", ] [[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +name = "wasmprinter" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +checksum = "6e41f7493ba994b8a779430a4c25ff550fd5a40d291693af43a6ef48688f00e3" dependencies = [ - "serde_core", + "anyhow", + "termcolor", + "wasmparser 0.246.2", ] [[package]] -name = "toml_edit" -version = "0.25.12+spec-1.1.0" +name = "wasmtime" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "d807f646bfecc1dbb4990d8c864beebccbdb3f2cd1b39b2b82957b4e294c6058" dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", + "addr2line", + "async-trait", + "bitflags", + "bumpalo", + "cc", + "cfg-if", + "encoding_rs", + "futures", + "fxprof-processed-profile", + "gimli", + "ittapi", + "libc", + "log", + "mach2", + "memfd", + "object", + "once_cell", + "postcard", + "pulley-interpreter", + "rayon", + "rustix 1.1.4", + "semver", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "target-lexicon", + "tempfile", + "wasm-compose", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-cache", + "wasmtime-internal-component-macro", + "wasmtime-internal-component-util", + "wasmtime-internal-core", + "wasmtime-internal-cranelift", + "wasmtime-internal-fiber", + "wasmtime-internal-jit-debug", + "wasmtime-internal-jit-icache-coherence", + "wasmtime-internal-unwinder", + "wasmtime-internal-versioned-export-macros", + "wasmtime-internal-winch", + "wat", + "windows-sys 0.61.2", ] [[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" +name = "wasmtime-environ" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "48b945309908f22473ebcd585ac2993948044228491cd96941d367aa81a49c3f" dependencies = [ - "winnow", + "anyhow", + "cpp_demangle", + "cranelift-bforest", + "cranelift-bitset", + "cranelift-entity", + "gimli", + "hashbrown 0.16.1", + "indexmap", + "log", + "object", + "postcard", + "rustc-demangle", + "semver", + "serde", + "serde_derive", + "sha2 0.10.9", + "smallvec", + "target-lexicon", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wasmprinter", + "wasmtime-internal-component-util", + "wasmtime-internal-core", ] [[package]] -name = "toml_writer" -version = "1.1.1+spec-1.1.0" +name = "wasmtime-internal-cache" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "f14b8b93c2137c88ed84114d9a09cb11cb8bf9394aba4856e48f5304a4f99eec" +dependencies = [ + "base64", + "directories-next", + "log", + "postcard", + "rustix 1.1.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "toml 0.9.12+spec-1.1.0", + "wasmtime-environ", + "windows-sys 0.61.2", + "zstd", +] [[package]] -name = "tower" -version = "0.5.3" +name = "wasmtime-internal-component-macro" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +checksum = "7307dec6251a18ffa9df03120d2945ac2476ce150b5b099f39b199e8f81464dc" dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-internal-component-util", + "wasmtime-internal-wit-bindgen", + "wit-parser", ] [[package]] -name = "tower-http" -version = "0.6.11" +name = "wasmtime-internal-component-util" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", - "url", +checksum = "7a3d899b0270bcf04852f141bd9538cb162a436e7f56b2c6e0f4e57ecc70743a" + +[[package]] +name = "wasmtime-internal-core" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedd3947487d0afdd37accb981466fcd60571e898004c8955111f88686581dfc" +dependencies = [ + "anyhow", + "hashbrown 0.16.1", + "libm", + "serde", ] [[package]] -name = "tower-layer" -version = "0.3.3" +name = "wasmtime-internal-cranelift" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "512fd846630c064bfc42909eeba90a7d26703b6ded09ad4778ff6afcbdc868dd" +dependencies = [ + "cfg-if", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "gimli", + "itertools", + "log", + "object", + "pulley-interpreter", + "smallvec", + "target-lexicon", + "thiserror 2.0.18", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-core", + "wasmtime-internal-unwinder", + "wasmtime-internal-versioned-export-macros", +] [[package]] -name = "tower-service" -version = "0.3.3" +name = "wasmtime-internal-fiber" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "15629ea71394be5812a52cb8fbc6cd039484ab1dd48fce5e1ef58ae89606289a" +dependencies = [ + "cc", + "cfg-if", + "libc", + "rustix 1.1.4", + "wasmtime-environ", + "wasmtime-internal-versioned-export-macros", + "windows-sys 0.61.2", +] [[package]] -name = "tracing" -version = "0.1.44" +name = "wasmtime-internal-jit-debug" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +checksum = "f5fce5fedc1c952a64cdf3c87e4632af072d2aca0bc2c460d53296fb2654757d" dependencies = [ - "pin-project-lite", - "tracing-core", + "cc", + "object", + "rustix 1.1.4", + "wasmtime-internal-versioned-export-macros", ] [[package]] -name = "tracing-core" -version = "0.1.36" +name = "wasmtime-internal-jit-icache-coherence" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +checksum = "10005b038e662775ac002f233e429447a58892e89918580fa67ce8cdd9192d0a" dependencies = [ - "once_cell", + "cfg-if", + "libc", + "wasmtime-internal-core", + "windows-sys 0.61.2", ] [[package]] -name = "try-lock" -version = "0.2.5" +name = "wasmtime-internal-unwinder" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "03f3e0f474281b405a3e9d97239f83f643b572324d292e1ef9dc5e3e0ab04c68" +dependencies = [ + "cfg-if", + "cranelift-codegen", + "log", + "object", + "wasmtime-environ", +] [[package]] -name = "unicode-ident" -version = "1.0.24" +name = "wasmtime-internal-versioned-export-macros" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "910e5393af4aca456113581a5913b8d499cd2189013e983f8764d06ebc42b2ed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "untrusted" -version = "0.9.0" +name = "wasmtime-internal-winch" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +checksum = "55481651bea5b8336fb200fa49914ccf802f5e7617ba9ab0b4691f16d4f97ff8" +dependencies = [ + "cranelift-codegen", + "gimli", + "log", + "object", + "target-lexicon", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-cranelift", + "winch-codegen", +] [[package]] -name = "url" -version = "2.5.8" +name = "wasmtime-internal-wit-bindgen" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +checksum = "d890c3804d0e46000fa901c86ac1a9fdedf684e72dfd64e582b56bb4a78a6746" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", + "anyhow", + "bitflags", + "heck", + "indexmap", + "wit-parser", ] [[package]] -name = "utf8_iter" -version = "1.0.4" +name = "wasmtime-wasi" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "5aa7f927779d92863a1447c1d88192b2242080608cb91ece69c177321488948b" +dependencies = [ + "async-trait", + "bitflags", + "bytes", + "cap-fs-ext", + "cap-net-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "futures", + "io-extras", + "io-lifetimes", + "rustix 1.1.4", + "system-interface", + "thiserror 2.0.18", + "tokio", + "tracing", + "url", + "wasmtime", + "wasmtime-wasi-io", + "wiggle", + "windows-sys 0.61.2", +] [[package]] -name = "utf8parse" -version = "0.2.2" +name = "wasmtime-wasi-io" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "d6fd8b702c2aa82bb4907da5ad44120b4385048f6a20731908a6e2485ea7567e" +dependencies = [ + "async-trait", + "bytes", + "futures", + "tracing", + "wasmtime", +] [[package]] -name = "version-compare" -version = "0.2.1" +name = "wast" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] [[package]] -name = "wait-timeout" -version = "0.2.1" +name = "wast" +version = "253.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +checksum = "d3264542f8965c5d84fb1085d924bfba9a6314bb228eff13a2de14d7627664d0" dependencies = [ - "libc", + "bumpalo", + "leb128fmt", + "memchr", + "unicode-width", + "wasm-encoder 0.253.0", ] [[package]] -name = "want" -version = "0.3.1" +name = "wat" +version = "1.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "4bfc5ce906144200c972ec617470aa35bd847472e170b26dde3e80541c674055" dependencies = [ - "try-lock", + "wast 253.0.0", ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +name = "web-sys" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ - "wit-bindgen", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "wasm-bindgen" -version = "0.2.126" +name = "webpki-roots" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", + "rustls-pki-types", ] [[package]] -name = "wasm-bindgen-futures" -version = "0.4.76" +name = "wiggle" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "165512f7870210d0fd45911990b832782b5fb82d40f4ce28cf86b40aaecd453c" dependencies = [ - "js-sys", - "wasm-bindgen", + "bitflags", + "thiserror 2.0.18", + "tracing", + "wasmtime", + "wasmtime-environ", + "wiggle-macro", ] [[package]] -name = "wasm-bindgen-macro" -version = "0.2.126" +name = "wiggle-generate" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "f7f63d06fdf2e9a133407b318574574f66ea6590ea7a42c4a7554c029824454a" dependencies = [ + "heck", + "proc-macro2", "quote", - "wasm-bindgen-macro-support", + "syn", + "wasmtime-environ", + "witx", ] [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.126" +name = "wiggle-macro" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "1b976b7285ca32a637e21721021442691a2d7938ab4650cb99472a672e9def6c" dependencies = [ - "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-shared", + "wiggle-generate", ] [[package]] -name = "wasm-bindgen-shared" -version = "0.2.126" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "unicode-ident", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "wasm-streams" -version = "0.4.2" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "windows-sys 0.61.2", ] [[package]] -name = "web-sys" -version = "0.3.103" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winch-codegen" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436a7fa4109b13b0e555d01ec615ab8b928b7834639aca7b2fdc1f55d70a1f0c" dependencies = [ - "js-sys", - "wasm-bindgen", + "cranelift-assembler-x64", + "cranelift-codegen", + "gimli", + "regalloc2", + "smallvec", + "target-lexicon", + "thiserror 2.0.18", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-core", + "wasmtime-internal-cranelift", ] [[package]] -name = "web-time" -version = "1.1.0" +name = "windows-core" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "js-sys", - "wasm-bindgen", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "webpki-roots" -version = "1.0.8" +name = "windows-implement" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ - "rustls-pki-types", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2278,6 +3707,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -2435,6 +3882,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + [[package]] name = "winnow" version = "1.0.3" @@ -2444,6 +3897,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winx" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" +dependencies = [ + "bitflags", + "windows-sys 0.59.0", +] + [[package]] name = "wiremock" version = "0.6.5" @@ -2468,10 +3931,35 @@ dependencies = [ ] [[package]] -name = "wit-bindgen" -version = "0.57.1" +name = "wit-parser" +version = "0.246.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd979042b5ff288607ccf3b314145435453f20fc67173195f91062d2289b204d" +dependencies = [ + "anyhow", + "hashbrown 0.16.1", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.246.2", +] + +[[package]] +name = "witx" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror 1.0.69", + "wast 35.0.2", +] [[package]] name = "writeable" @@ -2587,3 +4075,31 @@ name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/apps/doc-approval/cli-rust/Cargo.toml b/apps/doc-approval/cli-rust/Cargo.toml index 4820b94..6d4a6c4 100644 --- a/apps/doc-approval/cli-rust/Cargo.toml +++ b/apps/doc-approval/cli-rust/Cargo.toml @@ -2,7 +2,7 @@ name = "doc-approval-cli" version = "0.1.0" edition = "2021" -description = "CLI client for doc-approval (Phase 1 HTTP polling)" +description = "CLI client for doc-approval (embedded Traverse runtime)" license = "MIT" [[bin]] @@ -13,13 +13,7 @@ path = "src/main.rs" doc-approval-core-rs = { path = "../doc-approval-core-rs" } clap = { version = "4", features = ["derive", "env"] } colored = "2" -futures-util = "0.3" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } serde = { version = "1", features = ["derive"] } serde_json = "1" [dev-dependencies] -mockito = "1" -assert_cmd = "2" -predicates = "3" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } diff --git a/apps/doc-approval/cli-rust/README.md b/apps/doc-approval/cli-rust/README.md index c8248f1..36a64c3 100644 --- a/apps/doc-approval/cli-rust/README.md +++ b/apps/doc-approval/cli-rust/README.md @@ -1,10 +1,24 @@ # doc-approval (Rust CLI) -Terminal client for the `doc-approval` reference app. Uses shared `doc-approval-core-rs` for HTTP command dispatch and SSE app-state events. +Terminal client for the `doc-approval` reference app. Uses `doc-approval-core-rs` with the public **`traverse-embedder`** SDK. No `traverse-cli serve` sidecar. + +**Note:** production bundle init requires `manifests/doc-approval/` ([#112](https://github.com/traverse-framework/reference-apps/issues/112)). Until then, health/submit report Unavailable; unit tests use `EmbedderTestDouble`. + +## Build ```bash cd apps/doc-approval -cargo build -p doc-approval-cli --release cargo test -p doc-approval-cli -p doc-approval-core-rs cargo install --path cli-rust ``` + +## Usage + +```bash +doc-approval submit --text "Invoice …" +doc-approval health --json +``` + +| Variable | Purpose | +|---|---| +| `DOC_APPROVAL_MANIFEST` | Path to `app.manifest.json` when #112 lands | diff --git a/apps/doc-approval/cli-rust/src/client.rs b/apps/doc-approval/cli-rust/src/client.rs index 97f3704..6f6aa7a 100644 --- a/apps/doc-approval/cli-rust/src/client.rs +++ b/apps/doc-approval/cli-rust/src/client.rs @@ -1,5 +1,5 @@ -//! Re-exports the shared doc-approval-core-rs client for the CLI shell. +//! Re-exports the shared doc-approval-core-rs embedded host for the CLI shell. pub use doc_approval_core_rs::{ - DocApprovalClient as TraverseClient, DocApprovalClientError as TraverseClientError, - DocApprovalOutput, TraceEvent, DEFAULT_APP_ID, + DocApprovalOutput, EmbeddedRuntime, HostError, HostRunResult, TraceEvent, DEFAULT_APP_ID, + DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, }; diff --git a/apps/doc-approval/cli-rust/src/commands/health.rs b/apps/doc-approval/cli-rust/src/commands/health.rs index 0f369bd..f60f23a 100644 --- a/apps/doc-approval/cli-rust/src/commands/health.rs +++ b/apps/doc-approval/cli-rust/src/commands/health.rs @@ -1,22 +1,48 @@ -use crate::client::TraverseClient; -use crate::output::print_health; +use doc_approval_core_rs::{ + EmbeddedRuntime, TestEmbeddedRuntime, RUNTIME_MODE_EMBEDDED, +}; -pub fn execute(base_url: &str, json: bool) -> i32 { - let runtime = match tokio::runtime::Runtime::new() { - Ok(rt) => rt, +use crate::output::print_json; + +pub fn execute(json: bool) -> i32 { + match EmbeddedRuntime::init_default() { + Ok(mut host) => { + print_health(json, true, host.workspace_id(), host.workflow_id()); + host.shutdown(); + 0 + } Err(err) => { - eprintln!("runtime failed: {err}"); - return 1; + if json { + print_json(&serde_json::json!({ + "runtime_mode": RUNTIME_MODE_EMBEDDED, + "status": "Unavailable", + "error": err.to_string(), + })); + } else { + eprintln!("Embedded runtime unavailable: {err}"); + } + 1 } - }; - let online = runtime.block_on(async { - let client = TraverseClient::new(); - client.check_health(base_url).await.unwrap_or(false) - }); - print_health(base_url, online, json); - if online { - 0 + } +} + +pub fn execute_with_host(host: &TestEmbeddedRuntime, json: bool) -> i32 { + print_health(json, true, host.workspace_id(), host.workflow_id()); + 0 +} + +fn print_health(json: bool, ready: bool, workspace: &str, workflow: &str) { + let status = if ready { "Ready" } else { "Unavailable" }; + if json { + print_json(&serde_json::json!({ + "runtime_mode": RUNTIME_MODE_EMBEDDED, + "status": status, + "workspace": workspace, + "workflow": workflow, + })); } else { - 1 + println!( + "{RUNTIME_MODE_EMBEDDED} · {status} · workspace={workspace} · workflow={workflow}" + ); } } diff --git a/apps/doc-approval/cli-rust/src/commands/submit.rs b/apps/doc-approval/cli-rust/src/commands/submit.rs index c7e931c..db02c92 100644 --- a/apps/doc-approval/cli-rust/src/commands/submit.rs +++ b/apps/doc-approval/cli-rust/src/commands/submit.rs @@ -1,101 +1,45 @@ -use futures_util::StreamExt; -use doc_approval_core_rs::{AppState, DEFAULT_APP_ID}; +use doc_approval_core_rs::{ + EmbeddedRuntime, HostError, HostRunResult, TestEmbeddedRuntime, +}; -use crate::client::{DocApprovalOutput, TraverseClient}; use crate::output::{print_submit_result, SubmitResultJson}; -pub fn execute(base_url: &str, workspace: &str, document: &str, json: bool) -> i32 { - let runtime = match tokio::runtime::Runtime::new() { - Ok(rt) => rt, +pub fn execute(document: &str, json: bool) -> i32 { + let mut host = match EmbeddedRuntime::init_default() { + Ok(host) => host, Err(err) => { - eprintln!("runtime failed: {err}"); + eprintln!("{err}"); + eprintln!( + "hint: doc-approval bundle manifests are tracked in reference-apps #112; set DOC_APPROVAL_MANIFEST when available" + ); return 1; } }; + let code = finish(host.submit_document(document), json); + host.shutdown(); + code +} - runtime.block_on(async { - let client = TraverseClient::new(); - let accepted = match client.submit_document(base_url, workspace, document).await { - Ok(accepted) => accepted, - Err(err) => { - eprintln!("submit failed: {err}"); - return 1; - } - }; - - let mut stream = match client - .subscribe_events(base_url, workspace, DEFAULT_APP_ID) - .await - { - Ok(stream) => stream, - Err(err) => { - eprintln!("subscribe failed: {err}"); - return 1; - } - }; +pub fn execute_with_host(host: &mut TestEmbeddedRuntime, document: &str, json: bool) -> i32 { + finish(host.submit_document(document), json) +} - while let Some(item) = stream.next().await { - match item { - Ok(event) if event.event_type == "heartbeat" => continue, - Ok(event) => { - if let Some(sid) = event.session_id.as_deref() { - if sid != accepted.session_id { - continue; - } - } - if event.event_type == "error" - || matches!(event.state.as_ref(), Some(AppState::Error)) - { - eprintln!( - "execution failed: {}", - event - .error_message - .unwrap_or_else(|| "unknown error".to_string()) - ); - return 1; - } - let terminal = matches!(event.state.as_ref(), Some(AppState::Results)) - || event.event_type == "capability_result"; - if !terminal { - continue; - } - let execution_id = event - .execution_id - .or(accepted.execution_id.clone()) - .unwrap_or_default(); - let output = event.output.unwrap_or(DocApprovalOutput { - doc_type: String::new(), - parties: vec![], - amounts: vec![], - confidence: 0.0, - recommendation: String::new(), - }); - let trace = if execution_id.is_empty() { - Vec::new() - } else { - client - .fetch_trace(base_url, workspace, &execution_id) - .await - .unwrap_or_default() - }; - print_submit_result( - &SubmitResultJson { - execution_id, - output, - trace, - }, - json, - ); - return 0; - } - Err(err) => { - eprintln!("event stream failed: {err}"); - return 1; - } - } +fn finish(result: Result, json: bool) -> i32 { + match result { + Ok(result) => { + print_submit_result( + &SubmitResultJson { + execution_id: result.session_id, + output: result.output, + trace: result.events, + }, + json, + ); + 0 } - - eprintln!("event stream ended before result"); - 1 - }) + Err(err) => { + eprintln!("{err}"); + 1 + } + } } diff --git a/apps/doc-approval/cli-rust/src/lib.rs b/apps/doc-approval/cli-rust/src/lib.rs index fb013c5..356e366 100644 --- a/apps/doc-approval/cli-rust/src/lib.rs +++ b/apps/doc-approval/cli-rust/src/lib.rs @@ -2,4 +2,6 @@ pub mod client; pub mod commands; pub mod output; -pub use doc_approval_core_rs::{DEFAULT_APP_ID, DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +pub use doc_approval_core_rs::{ + DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, +}; diff --git a/apps/doc-approval/cli-rust/src/main.rs b/apps/doc-approval/cli-rust/src/main.rs index 8d23a38..29641dd 100644 --- a/apps/doc-approval/cli-rust/src/main.rs +++ b/apps/doc-approval/cli-rust/src/main.rs @@ -1,24 +1,20 @@ use clap::{Parser, Subcommand}; use doc_approval_cli::commands; -use doc_approval_cli::{DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; #[derive(Parser)] -#[command(name = "doc-approval", about = "CLI client for doc-approval")] +#[command( + name = "doc-approval", + about = "CLI client for doc-approval (embedded Traverse runtime)" +)] struct Cli { - #[arg(long, env = "TRAVERSE_BASE_URL", default_value = DEFAULT_BASE_URL)] - base_url: String, - - #[arg(long, env = "TRAVERSE_WORKSPACE", default_value = DEFAULT_WORKSPACE)] - workspace: String, - #[command(subcommand)] command: Commands, } #[derive(Subcommand)] enum Commands { - /// Execute doc-approval.analyze with document text + /// Execute doc-approval.pipeline with document text Submit { #[arg(long, conflicts_with = "text")] file: Option, @@ -27,7 +23,7 @@ enum Commands { #[arg(long, default_value_t = false)] json: bool, }, - /// Check Traverse runtime health + /// Check embedded Traverse runtime readiness Health { #[arg(long, default_value_t = false)] json: bool, @@ -52,9 +48,9 @@ fn main() { std::process::exit(1); } }; - commands::submit::execute(&cli.base_url, &cli.workspace, &document, json) + commands::submit::execute(&document, json) } - Commands::Health { json } => commands::health::execute(&cli.base_url, json), + Commands::Health { json } => commands::health::execute(json), }; std::process::exit(code); } diff --git a/apps/doc-approval/cli-rust/src/output.rs b/apps/doc-approval/cli-rust/src/output.rs index 7e6d3d4..cc2bcbe 100644 --- a/apps/doc-approval/cli-rust/src/output.rs +++ b/apps/doc-approval/cli-rust/src/output.rs @@ -1,5 +1,6 @@ use colored::Colorize; use serde::Serialize; +use serde_json::Value; use crate::client::{DocApprovalOutput, TraceEvent}; @@ -10,21 +11,8 @@ pub struct SubmitResultJson { pub trace: Vec, } -pub fn print_health(base_url: &str, online: bool, json: bool) { - if json { - println!( - "{}", - serde_json::to_string(&serde_json::json!({ - "base_url": base_url, - "status": if online { "online" } else { "offline" }, - })) - .unwrap_or_default() - ); - return; - } - - let status = if online { "online" } else { "offline" }; - println!("Runtime {base_url}: {status}"); +pub fn print_json(value: &Value) { + println!("{}", serde_json::to_string_pretty(value).unwrap_or_default()); } pub fn print_submit_result(result: &SubmitResultJson, json: bool) { diff --git a/apps/doc-approval/cli-rust/tests/integration_tests.rs b/apps/doc-approval/cli-rust/tests/integration_tests.rs index 20f80af..87e0528 100644 --- a/apps/doc-approval/cli-rust/tests/integration_tests.rs +++ b/apps/doc-approval/cli-rust/tests/integration_tests.rs @@ -1,64 +1,26 @@ -use doc_approval_cli::client::TraverseClient; use doc_approval_cli::commands; - -#[tokio::test] -async fn check_health_returns_true_on_200() { - let mut server = mockito::Server::new_async().await; - let _mock = server - .mock("GET", "/healthz") - .with_status(200) - .create_async() - .await; - - let client = TraverseClient::new(); - assert!(client.check_health(&server.url()).await.unwrap()); +use doc_approval_core_rs::{DocApprovalOutput, TestEmbeddedRuntime}; + +fn sample_output() -> DocApprovalOutput { + DocApprovalOutput { + doc_type: "invoice".to_string(), + parties: vec!["A".to_string()], + amounts: vec!["$10".to_string()], + confidence: 0.9, + recommendation: "approve".to_string(), + } } #[test] -fn submit_flow_succeeds_against_mock_server() { - let mut server = mockito::Server::new(); - - let _submit = server - .mock( - "POST", - "/v1/workspaces/local-default/apps/doc-approval/commands", - ) - .with_status(202) - .with_header("content-type", "application/json") - .with_body( - r#"{"api_version":"v1","status":"accepted","workspace_id":"local-default","app_id":"doc-approval","session_id":"sess-1","command":"submit","state":"processing","execution_id":"exec_abc"}"#, - ) - .create(); - - let sse_body = "event: capability_result\ndata: {\"state\":\"results\",\"session_id\":\"sess-1\",\"execution_id\":\"exec_abc\",\"output\":{\"docType\":\"nda\",\"parties\":[\"A\"],\"amounts\":[],\"confidence\":0.9,\"recommendation\":\"approve\"}}\n\n"; - let _events = server - .mock( - "GET", - "/v1/workspaces/local-default/apps/doc-approval/events", - ) - .with_status(200) - .with_header("content-type", "text/event-stream") - .with_body(sse_body) - .create(); - - let _trace = server - .mock("GET", "/v1/workspaces/local-default/traces/exec_abc") - .with_status(200) - .with_body("[]") - .create(); - - let code = commands::submit::execute(&server.url(), "local-default", "contract text", true); +fn submit_flow_succeeds_with_test_double() { + let mut host = TestEmbeddedRuntime::new(sample_output()); + let code = commands::submit::execute_with_host(&mut host, "hello", true); assert_eq!(code, 0); } #[test] -fn health_command_reports_online() { - let mut server = mockito::Server::new(); - let _mock = server - .mock("GET", "/healthz") - .with_status(200) - .create(); - - let code = commands::health::execute(&server.url(), true); +fn health_command_reports_embedded_ready() { + let host = TestEmbeddedRuntime::new(sample_output()); + let code = commands::health::execute_with_host(&host, true); assert_eq!(code, 0); } diff --git a/apps/doc-approval/doc-approval-core-rs/Cargo.toml b/apps/doc-approval/doc-approval-core-rs/Cargo.toml index f4dc683..4fac5ba 100644 --- a/apps/doc-approval/doc-approval-core-rs/Cargo.toml +++ b/apps/doc-approval/doc-approval-core-rs/Cargo.toml @@ -2,10 +2,11 @@ name = "doc-approval-core-rs" version = "0.1.0" edition = "2021" -description = "Shared Traverse HTTP/SSE client for doc-approval Rust shells" +description = "Shared Traverse embedded-runtime client for doc-approval Rust shells" license = "MIT" [dependencies] +traverse-embedder = { git = "https://github.com/traverse-framework/Traverse.git", package = "traverse-embedder" } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/apps/doc-approval/doc-approval-core-rs/src/host.rs b/apps/doc-approval/doc-approval-core-rs/src/host.rs new file mode 100644 index 0000000..0e2cdb4 --- /dev/null +++ b/apps/doc-approval/doc-approval-core-rs/src/host.rs @@ -0,0 +1,259 @@ +//! Embedded Traverse runtime host for doc-approval shells. +//! +//! Production path uses [`BundleEmbedder`]. Bundle manifests land with +//! reference-apps #112; until then `EmbeddedRuntime::init_default` reports +//! Unavailable. Tests use [`EmbedderTestDouble`]. + +use serde_json::{json, Value}; +use std::path::{Path, PathBuf}; +use std::sync::{Arc, Mutex}; +use traverse_embedder::{ + BundleEmbedder, EmbedderConfig, EmbedderTestDouble, SecurityPosture, SubmitStatus, + TraverseEmbedderApi, +}; + +use crate::client::{DocApprovalOutput, TraceEvent}; +use crate::state::StateEvent; + +pub const DEFAULT_WORKFLOW_ID: &str = "doc-approval.pipeline"; +pub const RUNTIME_MODE_EMBEDDED: &str = "Embedded"; +pub const MANIFEST_ENV: &str = "DOC_APPROVAL_MANIFEST"; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum HostError { + Init(String), + Rejected(String), + Execution(String), + Decode(String), +} + +impl std::fmt::Display for HostError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Init(msg) => write!(f, "embedder init failed: {msg}"), + Self::Rejected(msg) => write!(f, "submit rejected: {msg}"), + Self::Execution(msg) => write!(f, "execution failed: {msg}"), + Self::Decode(msg) => write!(f, "decode failed: {msg}"), + } + } +} + +impl std::error::Error for HostError {} + +#[derive(Debug, Clone, PartialEq)] +pub struct HostRunResult { + pub session_id: String, + pub output: DocApprovalOutput, + pub events: Vec, +} + +pub fn resolve_manifest_path(start: Option<&Path>) -> Option { + if let Ok(path) = std::env::var(MANIFEST_ENV) { + let path = PathBuf::from(path); + if path.is_file() { + return Some(path); + } + } + + let mut dir = start + .map(Path::to_path_buf) + .or_else(|| std::env::current_dir().ok())?; + loop { + let candidate = dir + .join("manifests") + .join("doc-approval") + .join("app.manifest.json"); + if candidate.is_file() { + return Some(candidate); + } + if !dir.pop() { + break; + } + } + None +} + +fn collect_submit( + embedder: &mut E, + events: &Arc>>, + workflow_id: &str, + input: &Value, +) -> Result { + events.lock().expect("event sink").clear(); + let outcome = embedder.submit(workflow_id, input); + if outcome.status == SubmitStatus::Rejected { + let msg = outcome + .error + .map(|e| format!("{}: {}", e.code.as_str(), e.message)) + .unwrap_or_else(|| "submit rejected".to_string()); + return Err(HostError::Rejected(msg)); + } + + let session_id = outcome + .session_id + .clone() + .unwrap_or_else(|| "sess-unknown".to_string()); + let raw_events = events.lock().expect("event sink").clone(); + let trace: Vec = raw_events + .iter() + .filter_map(|event| { + let event_type = event.get("event_type")?.as_str()?.to_string(); + Some(TraceEvent { + event_type, + timestamp: event + .get("sequence") + .map(|s| s.to_string()) + .unwrap_or_default(), + data: event.get("data").cloned(), + }) + }) + .collect(); + + for event in &raw_events { + let Some(parsed) = StateEvent::from_embedder_event(event) else { + continue; + }; + if parsed.session_id.as_deref().is_some_and(|s| s != session_id) { + continue; + } + if parsed.event_type == "error" + || matches!(parsed.state.as_ref(), Some(crate::AppState::Error)) + { + return Err(HostError::Execution( + parsed + .error_message + .unwrap_or_else(|| "execution failed".to_string()), + )); + } + if parsed.event_type == "capability_result" { + let output = parsed.output.unwrap_or(DocApprovalOutput { + doc_type: String::new(), + parties: vec![], + amounts: vec![], + confidence: 0.0, + recommendation: String::new(), + }); + return Ok(HostRunResult { + session_id, + output, + events: trace, + }); + } + } + + Err(HostError::Execution( + "embedder emitted no capability_result".to_string(), + )) +} + +fn attach_sink(embedder: &mut E) -> Arc>> { + let events = Arc::new(Mutex::new(Vec::new())); + let sink = events.clone(); + embedder.subscribe(Box::new(move |event| { + sink.lock().expect("event sink").push(event.clone()); + })); + events +} + +pub struct EmbeddedRuntime { + embedder: BundleEmbedder, + events: Arc>>, + workspace_id: String, + workflow_id: String, +} + +impl EmbeddedRuntime { + pub fn init(manifest_path: impl AsRef) -> Result { + let mut config = EmbedderConfig::new(manifest_path.as_ref()); + config.security = SecurityPosture::Development; + let workspace_id = config.workspace_id.clone(); + let mut embedder = BundleEmbedder::init(config).map_err(|e| { + HostError::Init(format!("{}: {}", e.code.as_str(), e.message)) + })?; + let events = attach_sink(&mut embedder); + Ok(Self { + embedder, + events, + workspace_id, + workflow_id: DEFAULT_WORKFLOW_ID.to_string(), + }) + } + + pub fn init_default() -> Result { + let path = resolve_manifest_path(None).ok_or_else(|| { + HostError::Init(format!( + "could not find manifests/doc-approval/app.manifest.json (set {MANIFEST_ENV}; blocked on reference-apps #112)" + )) + })?; + Self::init(path) + } + + #[must_use] + pub fn workspace_id(&self) -> &str { + &self.workspace_id + } + + #[must_use] + pub fn workflow_id(&self) -> &str { + &self.workflow_id + } + + pub fn submit_document(&mut self, document: &str) -> Result { + collect_submit( + &mut self.embedder, + &self.events, + &self.workflow_id, + &json!({ "document": document }), + ) + } + + pub fn shutdown(&mut self) { + let _ = self.embedder.shutdown(); + } +} + +pub struct TestEmbeddedRuntime { + embedder: EmbedderTestDouble, + events: Arc>>, + workspace_id: String, + workflow_id: String, +} + +impl TestEmbeddedRuntime { + #[must_use] + pub fn new(output: DocApprovalOutput) -> Self { + let mut embedder = EmbedderTestDouble::new( + crate::DEFAULT_WORKSPACE, + crate::DEFAULT_APP_ID, + "1.0.0", + std::env::consts::OS, + ) + .with_target_output(DEFAULT_WORKFLOW_ID, serde_json::to_value(output).unwrap()); + let events = attach_sink(&mut embedder); + Self { + embedder, + events, + workspace_id: crate::DEFAULT_WORKSPACE.to_string(), + workflow_id: DEFAULT_WORKFLOW_ID.to_string(), + } + } + + #[must_use] + pub fn workspace_id(&self) -> &str { + &self.workspace_id + } + + #[must_use] + pub fn workflow_id(&self) -> &str { + &self.workflow_id + } + + pub fn submit_document(&mut self, document: &str) -> Result { + collect_submit( + &mut self.embedder, + &self.events, + &self.workflow_id, + &json!({ "document": document }), + ) + } +} diff --git a/apps/doc-approval/doc-approval-core-rs/src/lib.rs b/apps/doc-approval/doc-approval-core-rs/src/lib.rs index 0ffcb97..f14f560 100644 --- a/apps/doc-approval/doc-approval-core-rs/src/lib.rs +++ b/apps/doc-approval/doc-approval-core-rs/src/lib.rs @@ -1,8 +1,12 @@ //! Shared Traverse runtime client for doc-approval Rust shells. //! Platform-neutral: no GTK or terminal UI imports. +//! +//! Phase 3 production path is the embedded host (`host` module). HTTP sidecar +//! helpers remain for migration/debug until manifests (#112) land. mod client; mod discovery; +mod host; mod sessions; mod sse; mod state; @@ -11,6 +15,10 @@ pub use client::{ CommandAccepted, DocApprovalClient, DocApprovalClientError, DocApprovalOutput, TraceEvent, }; pub use discovery::{ServerDiscovery, ServerInfo}; +pub use host::{ + resolve_manifest_path, EmbeddedRuntime, HostError, HostRunResult, TestEmbeddedRuntime, + DEFAULT_WORKFLOW_ID, MANIFEST_ENV, RUNTIME_MODE_EMBEDDED, +}; pub use sessions::{list_sessions, parse_sessions, SessionSummary}; pub use sse::subscribe_events; pub use state::{AppState, StateEvent}; diff --git a/apps/doc-approval/doc-approval-core-rs/src/state.rs b/apps/doc-approval/doc-approval-core-rs/src/state.rs index e11373a..ce5b1b2 100644 --- a/apps/doc-approval/doc-approval-core-rs/src/state.rs +++ b/apps/doc-approval/doc-approval-core-rs/src/state.rs @@ -66,6 +66,24 @@ impl StateEvent { }); } let raw: Value = serde_json::from_str(data).ok()?; + Self::from_payload(event_type, raw) + } + + pub fn from_embedder_event(event: &Value) -> Option { + let event_type = event.get("event_type")?.as_str()?; + let data = event.get("data").cloned().unwrap_or(Value::Null); + let mut parsed = Self::from_payload(event_type, data)?; + if parsed.session_id.is_none() { + parsed.session_id = event + .get("session_id") + .and_then(|v| v.as_str()) + .map(str::to_string); + } + parsed.raw = event.clone(); + Some(parsed) + } + + fn from_payload(event_type: &str, raw: Value) -> Option { let payload: EventPayload = serde_json::from_value(raw.clone()).ok()?; let error_message = match payload.error { Some(Value::String(s)) => Some(s), diff --git a/apps/doc-approval/doc-approval-core-rs/tests/host_tests.rs b/apps/doc-approval/doc-approval-core-rs/tests/host_tests.rs new file mode 100644 index 0000000..2c7fb00 --- /dev/null +++ b/apps/doc-approval/doc-approval-core-rs/tests/host_tests.rs @@ -0,0 +1,15 @@ +use doc_approval_core_rs::{DocApprovalOutput, TestEmbeddedRuntime}; + +#[test] +fn test_double_submit_document_returns_scripted_output() { + let mut host = TestEmbeddedRuntime::new(DocApprovalOutput { + doc_type: "invoice".to_string(), + parties: vec!["A".to_string()], + amounts: vec!["$10".to_string()], + confidence: 0.9, + recommendation: "approve".to_string(), + }); + let result = host.submit_document("hello").expect("submit"); + assert_eq!(result.output.doc_type, "invoice"); + assert_eq!(result.output.recommendation, "approve"); +} diff --git a/apps/doc-approval/linux-gtk/Cargo.toml b/apps/doc-approval/linux-gtk/Cargo.toml index 20be173..b4ff634 100644 --- a/apps/doc-approval/linux-gtk/Cargo.toml +++ b/apps/doc-approval/linux-gtk/Cargo.toml @@ -2,7 +2,7 @@ name = "doc-approval-gtk" version = "0.1.0" edition = "2021" -description = "Native GTK4 client for doc-approval (Phase 1 HTTP polling)" +description = "Native GTK4 client for doc-approval (embedded Traverse runtime)" license = "MIT" [lib] @@ -16,12 +16,8 @@ path = "src/main.rs" doc-approval-core-rs = { path = "../doc-approval-core-rs" } gtk4 = "0.9" libadwaita = { version = "0.7", features = ["v1_5"] } -tokio = { version = "1", features = ["rt-multi-thread", "macros", "time"] } -futures-util = "0.3" serde = { version = "1", features = ["derive"] } serde_json = "1" directories = "5" [dev-dependencies] -wiremock = "0.6" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } diff --git a/apps/doc-approval/linux-gtk/README.md b/apps/doc-approval/linux-gtk/README.md index abbc751..9859252 100644 --- a/apps/doc-approval/linux-gtk/README.md +++ b/apps/doc-approval/linux-gtk/README.md @@ -1,12 +1,24 @@ # doc-approval (Linux GTK4) -Native Linux client for the `doc-approval` reference app. Uses shared `doc-approval-core-rs` for HTTP command dispatch and SSE app-state events. +Native Linux client for `doc-approval`. Uses `doc-approval-core-rs` with **`traverse-embedder`** (Phase 3). No sidecar URL. -Requires GTK4 + libadwaita system packages. +**Note:** Zone 1 shows Embedded / Unavailable until `manifests/doc-approval/` lands ([#112](https://github.com/traverse-framework/reference-apps/issues/112)). + +## Prerequisites + +```bash +sudo apt install libgtk-4-dev libadwaita-1-dev +export TRAVERSE_REPO=/path/to/Traverse # sibling checkout with traverse-embedder +``` + +## Build ```bash cd apps/doc-approval -cargo build -p doc-approval-gtk cargo test -p doc-approval-core-rs cargo run -p doc-approval-gtk ``` + +## Design language + +Follow [docs/design-language.md](../../../docs/design-language.md). diff --git a/apps/doc-approval/linux-gtk/src/client.rs b/apps/doc-approval/linux-gtk/src/client.rs index dbbc016..76d6d1e 100644 --- a/apps/doc-approval/linux-gtk/src/client.rs +++ b/apps/doc-approval/linux-gtk/src/client.rs @@ -1,5 +1,5 @@ -//! Re-exports the shared doc-approval-core-rs client for the GTK shell. +//! Re-exports the shared doc-approval-core-rs embedded host for the GTK shell. pub use doc_approval_core_rs::{ - DocApprovalClient as TraverseClient, DocApprovalClientError as TraverseClientError, - DocApprovalOutput, TraceEvent, DEFAULT_APP_ID, + DocApprovalOutput, EmbeddedRuntime, HostError, HostRunResult, TraceEvent, DEFAULT_APP_ID, + DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, }; diff --git a/apps/doc-approval/linux-gtk/src/execution_state.rs b/apps/doc-approval/linux-gtk/src/execution_state.rs index acf084f..5e803a1 100644 --- a/apps/doc-approval/linux-gtk/src/execution_state.rs +++ b/apps/doc-approval/linux-gtk/src/execution_state.rs @@ -4,7 +4,6 @@ use crate::client::{DocApprovalOutput, TraceEvent}; pub enum ExecutionPhase { Idle, Loading, - Polling { execution_id: String }, Succeeded { output: DocApprovalOutput, trace: Vec, @@ -14,9 +13,9 @@ pub enum ExecutionPhase { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum RuntimeStatus { - Checking, - Online, - Offline, + Starting, + Ready, + Unavailable, } #[derive(Debug, Clone)] @@ -32,7 +31,7 @@ impl Default for ExecutionState { Self { phase: ExecutionPhase::Idle, document: String::new(), - runtime_status: RuntimeStatus::Checking, + runtime_status: RuntimeStatus::Starting, show_trace: false, } } @@ -40,14 +39,11 @@ impl Default for ExecutionState { impl ExecutionState { pub fn is_running(&self) -> bool { - matches!( - self.phase, - ExecutionPhase::Loading | ExecutionPhase::Polling { .. } - ) + matches!(self.phase, ExecutionPhase::Loading) } - pub fn can_submit(&self, runtime_online: bool) -> bool { - runtime_online && !self.document.trim().is_empty() && !self.is_running() + pub fn can_submit(&self, runtime_ready: bool) -> bool { + runtime_ready && !self.document.trim().is_empty() && !self.is_running() } pub fn reset(&mut self) { diff --git a/apps/doc-approval/linux-gtk/src/lib.rs b/apps/doc-approval/linux-gtk/src/lib.rs index db90c2f..754a0fc 100644 --- a/apps/doc-approval/linux-gtk/src/lib.rs +++ b/apps/doc-approval/linux-gtk/src/lib.rs @@ -3,4 +3,6 @@ pub mod execution_state; pub mod settings; pub mod ui; -pub use doc_approval_core_rs::{DEFAULT_APP_ID, DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +pub use doc_approval_core_rs::{ + DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, +}; diff --git a/apps/doc-approval/linux-gtk/src/settings.rs b/apps/doc-approval/linux-gtk/src/settings.rs index 4fb5ebe..06f01bf 100644 --- a/apps/doc-approval/linux-gtk/src/settings.rs +++ b/apps/doc-approval/linux-gtk/src/settings.rs @@ -3,19 +3,20 @@ use serde::{Deserialize, Serialize}; use std::fs; use std::path::PathBuf; -use crate::{DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +use crate::DEFAULT_WORKSPACE; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct AppSettings { - pub base_url: String, pub workspace: String, + #[serde(default)] + pub manifest_path: Option, } impl Default for AppSettings { fn default() -> Self { Self { - base_url: DEFAULT_BASE_URL.to_string(), workspace: DEFAULT_WORKSPACE.to_string(), + manifest_path: None, } } } @@ -42,5 +43,8 @@ pub fn save_settings(settings: &AppSettings) -> std::io::Result<()> { if let Some(parent) = path.parent() { fs::create_dir_all(parent)?; } - fs::write(path, serde_json::to_string_pretty(settings).unwrap_or_default()) + fs::write( + path, + serde_json::to_string_pretty(settings).unwrap_or_default(), + ) } diff --git a/apps/doc-approval/linux-gtk/src/ui/main_window.rs b/apps/doc-approval/linux-gtk/src/ui/main_window.rs index ac6b905..33e7f17 100644 --- a/apps/doc-approval/linux-gtk/src/ui/main_window.rs +++ b/apps/doc-approval/linux-gtk/src/ui/main_window.rs @@ -1,20 +1,22 @@ -use futures_util::StreamExt; use gtk4::prelude::*; use gtk4::{ - Box as GtkBox, Button, Label, Orientation, ScrolledWindow, TextView, TextViewBuffer, - ToggleButton, + Box as GtkBox, Button, Label, Orientation, ScrolledWindow, TextView, ToggleButton, }; use libadwaita as adw; use std::cell::RefCell; +use std::path::PathBuf; use std::rc::Rc; use std::sync::{Arc, Mutex}; -use doc_approval_core_rs::AppState; -use crate::client::{DocApprovalOutput, TraverseClient, DEFAULT_APP_ID}; +use crate::client::{ + EmbeddedRuntime, DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, + RUNTIME_MODE_EMBEDDED, +}; use crate::execution_state::{ExecutionPhase, ExecutionState, RuntimeStatus}; use crate::settings::{load_settings, save_settings, AppSettings}; use crate::ui::preferences::PreferencesDialog; +const DOCUMENT_MAX_LENGTH: usize = 10_000; pub struct MainWindow { pub window: adw::ApplicationWindow, @@ -24,7 +26,7 @@ impl MainWindow { pub fn new(app: &adw::Application) -> Self { let settings = Rc::new(RefCell::new(load_settings())); let state = Arc::new(Mutex::new(ExecutionState::default())); - let client = TraverseClient::new(); + let host = Rc::new(RefCell::new(init_host(&settings.borrow()))); let window = adw::ApplicationWindow::builder() .application(app) @@ -34,10 +36,6 @@ impl MainWindow { .build(); let header = adw::HeaderBar::new(); - let status_label = Label::new(Some("Checking…")); - status_label.add_css_class("dim-label"); - header.pack_end(&status_label); - let prefs_button = Button::from_icon_name("preferences-system-symbolic"); prefs_button.set_tooltip_text(Some("Preferences")); header.pack_end(&prefs_button); @@ -51,6 +49,27 @@ impl MainWindow { content.set_margin_start(16); content.set_margin_end(16); + content.append(&Label::new(Some("Runtime Environment"))); + let zone1 = GtkBox::new(Orientation::Vertical, 4); + let mode_label = Label::new(Some(&format!("Runtime mode: {RUNTIME_MODE_EMBEDDED}"))); + mode_label.set_xalign(0.0); + let status_label = Label::new(Some("Runtime status: Starting")); + status_label.set_xalign(0.0); + status_label.add_css_class("dim-label"); + let workspace_label = Label::new(Some(&format!("Workspace: {DEFAULT_WORKSPACE}"))); + workspace_label.set_xalign(0.0); + workspace_label.add_css_class("dim-label"); + let workflow_label = Label::new(Some(&format!( + "Workflow: {DEFAULT_WORKFLOW_ID} · App: {DEFAULT_APP_ID}" + ))); + workflow_label.set_xalign(0.0); + workflow_label.add_css_class("dim-label"); + zone1.append(&mode_label); + zone1.append(&status_label); + zone1.append(&workspace_label); + zone1.append(&workflow_label); + content.append(&zone1); + content.append(&Label::new(Some("Analyze Document"))); let document_view = TextView::new(); @@ -63,7 +82,7 @@ impl MainWindow { .build(); content.append(&document_scroll); - let document_count = Label::new(Some(&format!("0/{10_000}"))); + let document_count = Label::new(Some(&format!("0/{DOCUMENT_MAX_LENGTH}"))); document_count.add_css_class("dim-label"); document_count.set_halign(gtk4::Align::End); content.append(&document_count); @@ -76,7 +95,7 @@ impl MainWindow { content.append(&button_row); let offline_hint = Label::new(Some( - "Runtime offline — start with `cargo run -p traverse-cli -- serve`", + "Embedded runtime unavailable — doc-approval manifests require issue #112.", )); offline_hint.add_css_class("dim-label"); offline_hint.set_visible(false); @@ -105,6 +124,34 @@ impl MainWindow { toolbar_view.set_content(Some(&scrolled)); window.set_content(Some(&toolbar_view)); + let refresh_zone1 = { + let host = host.clone(); + let settings = settings.clone(); + let state = state.clone(); + let status_label = status_label.clone(); + let workspace_label = workspace_label.clone(); + move || { + let ready = host.borrow().is_some(); + let status = if ready { + RuntimeStatus::Ready + } else { + RuntimeStatus::Unavailable + }; + state.lock().unwrap().runtime_status = status; + status_label.set_text(match status { + RuntimeStatus::Ready => "Runtime status: Ready", + RuntimeStatus::Unavailable => "Runtime status: Unavailable", + RuntimeStatus::Starting => "Runtime status: Starting", + }); + let workspace = host + .borrow() + .as_ref() + .map(|h| h.workspace_id().to_string()) + .unwrap_or_else(|| settings.borrow().workspace.clone()); + workspace_label.set_text(&format!("Workspace: {workspace}")); + } + }; + let refresh_ui = { let state = state.clone(); let output_label = output_label.clone(); @@ -114,9 +161,9 @@ impl MainWindow { let offline_hint = offline_hint.clone(); move || { let state = state.lock().unwrap(); - let online = state.runtime_status == RuntimeStatus::Online; - submit_button.set_sensitive(state.can_submit(online)); - offline_hint.set_visible(state.runtime_status == RuntimeStatus::Offline); + let ready = state.runtime_status == RuntimeStatus::Ready; + submit_button.set_sensitive(state.can_submit(ready)); + offline_hint.set_visible(state.runtime_status == RuntimeStatus::Unavailable); trace_box.set_visible(false); trace_toggle.set_visible(false); @@ -126,19 +173,15 @@ impl MainWindow { match &state.phase { ExecutionPhase::Idle => { - output_label.set_text(if online { + output_label.set_text(if ready { "Submit a document above to start a workflow." } else { - "Connect to the Traverse runtime to see analysis output here." + "Initialize the embedded runtime (manifests #112) to see output here." }); output_label.add_css_class("dim-label"); } ExecutionPhase::Loading => { - output_label.set_text("Starting execution…"); - output_label.remove_css_class("dim-label"); - } - ExecutionPhase::Polling { execution_id } => { - output_label.set_text(&format!("Waiting for analysis events ({execution_id})…")); + output_label.set_text("Running embedded workflow…"); output_label.remove_css_class("dim-label"); } ExecutionPhase::Failed { error } => { @@ -176,36 +219,33 @@ impl MainWindow { } }; + refresh_zone1(); + refresh_ui(); + document_buffer.connect_changed({ let state = state.clone(); let document_count = document_count.clone(); let refresh_ui = refresh_ui.clone(); move |buffer| { let mut text = buffer.text(&buffer.start_iter(), &buffer.end_iter(), true); - if text.len() > 10_000 { - text.truncate(10_000); + if text.len() > DOCUMENT_MAX_LENGTH { + text.truncate(DOCUMENT_MAX_LENGTH); buffer.set_text(&text); } state.lock().unwrap().document = text.clone(); - document_count.set_text(&format!("{}/{10_000}", text.len())); + document_count.set_text(&format!("{}/{DOCUMENT_MAX_LENGTH}", text.len())); refresh_ui(); } }); submit_button.connect_clicked({ let state = state.clone(); - let settings = settings.clone(); - let client = client.clone(); + let host = host.clone(); let refresh_ui = refresh_ui.clone(); move |_| { - let (base_url, workspace, document) = { - let settings = settings.borrow(); + let document = { let state = state.lock().unwrap(); - ( - settings.base_url.clone(), - settings.workspace.clone(), - state.document.trim().to_string(), - ) + state.document.trim().to_string() }; if document.is_empty() { return; @@ -217,37 +257,29 @@ impl MainWindow { } refresh_ui(); - glib::spawn_future_local({ - let state = state.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - match client.submit_document(&base_url, &workspace, &document).await { - Ok(accepted) => { - let label = accepted - .execution_id - .clone() - .unwrap_or_else(|| accepted.session_id.clone()); - state.lock().unwrap().phase = - ExecutionPhase::Polling { execution_id: label }; - refresh_ui(); - wait_for_result( - &client, - &state, - &base_url, - &workspace, - &accepted.session_id, - &refresh_ui, - ) - .await; - } - Err(err) => { - state.lock().unwrap().phase = - ExecutionPhase::Failed { error: err.to_string() }; - refresh_ui(); - } - } + let result = { + let mut host = host.borrow_mut(); + match host.as_mut() { + Some(runtime) => runtime.submit_document(&document), + None => Err(crate::client::HostError::Init( + "embedded runtime not initialized".to_string(), + )), } - }); + }; + + match result { + Ok(run) => { + state.lock().unwrap().phase = ExecutionPhase::Succeeded { + output: run.output, + trace: run.events, + }; + } + Err(err) => { + state.lock().unwrap().phase = + ExecutionPhase::Failed { error: err.to_string() }; + } + } + refresh_ui(); } }); @@ -272,40 +304,16 @@ impl MainWindow { prefs_button.connect_clicked({ let window = window.clone(); let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); + let host = host.clone(); + let refresh_zone1 = refresh_zone1.clone(); let refresh_ui = refresh_ui.clone(); move |_| { if let Some(updated) = PreferencesDialog::run(&window, &settings.borrow()) { *settings.borrow_mut() = updated.clone(); let _ = save_settings(&updated); - glib::spawn_future_local({ - let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - refresh_health(&client, &settings, &state, &status_label).await; - refresh_ui(); - } - }); - } - } - }); - - glib::spawn_future_local({ - let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - loop { - refresh_health(&client, &settings, &state, &status_label).await; + *host.borrow_mut() = init_host(&updated); + refresh_zone1(); refresh_ui(); - glib::timeout_future_seconds(5).await; } } }); @@ -318,115 +326,9 @@ impl MainWindow { } } -async fn refresh_health( - client: &TraverseClient, - settings: &Rc>, - state: &Arc>, - status_label: &Label, -) { - state.lock().unwrap().runtime_status = RuntimeStatus::Checking; - status_label.set_text("Checking…"); - let base_url = settings.borrow().base_url.clone(); - let status = match client.check_health(&base_url).await { - Ok(true) => RuntimeStatus::Online, - _ => RuntimeStatus::Offline, - }; - state.lock().unwrap().runtime_status = status; - status_label.set_text(match status { - RuntimeStatus::Online => "Online", - RuntimeStatus::Offline => "Offline", - RuntimeStatus::Checking => "Checking…", - }); -} - -async fn wait_for_result( - client: &TraverseClient, - state: &Arc>, - base_url: &str, - workspace: &str, - session_id: &str, - refresh_ui: &impl Fn(), -) { - let mut stream = match client - .subscribe_events(base_url, workspace, DEFAULT_APP_ID) - .await - { - Ok(stream) => stream, - Err(err) => { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: err.to_string(), - }; - refresh_ui(); - return; - } - }; - - while let Some(item) = stream.next().await { - match item { - Ok(event) if event.event_type == "heartbeat" => continue, - Ok(event) => { - if let Some(sid) = event.session_id.as_deref() { - if sid != session_id { - continue; - } - } - if event.event_type == "error" - || matches!(event.state.as_ref(), Some(AppState::Error)) - { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: event - .error_message - .unwrap_or_else(|| "execution failed".to_string()), - }; - refresh_ui(); - return; - } - let terminal = matches!(event.state.as_ref(), Some(AppState::Results)) - || event.event_type == "capability_result"; - if terminal { - if let Some(output) = event.output { - let execution_id = event.execution_id.clone().unwrap_or_default(); - let trace = if execution_id.is_empty() { - Vec::new() - } else { - client - .fetch_trace(base_url, workspace, &execution_id) - .await - .unwrap_or_default() - }; - state.lock().unwrap().phase = - ExecutionPhase::Succeeded { output, trace }; - refresh_ui(); - return; - } - if matches!(event.state.as_ref(), Some(AppState::Results)) { - state.lock().unwrap().phase = ExecutionPhase::Succeeded { - output: DocApprovalOutput { - doc_type: String::new(), - parties: vec![], - amounts: vec![], - confidence: 0.0, - recommendation: String::new(), - }, - trace: Vec::new(), - }; - refresh_ui(); - return; - } - } - } - Err(err) => { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: err.to_string(), - }; - refresh_ui(); - return; - } - } +fn init_host(settings: &AppSettings) -> Option { + if let Some(path) = &settings.manifest_path { + return EmbeddedRuntime::init(PathBuf::from(path)).ok(); } - - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: "event stream ended before result".to_string(), - }; - refresh_ui(); + EmbeddedRuntime::init_default().ok() } diff --git a/apps/doc-approval/linux-gtk/src/ui/preferences.rs b/apps/doc-approval/linux-gtk/src/ui/preferences.rs index b1a8de9..117b69f 100644 --- a/apps/doc-approval/linux-gtk/src/ui/preferences.rs +++ b/apps/doc-approval/linux-gtk/src/ui/preferences.rs @@ -14,7 +14,7 @@ impl PreferencesDialog { .transient_for(parent) .modal(true) .title("Preferences") - .default_width(420) + .default_width(480) .default_height(280) .build(); @@ -24,18 +24,20 @@ impl PreferencesDialog { content.set_margin_start(16); content.set_margin_end(16); - content.append(&Label::new(Some("Runtime URL"))); - let base_url_entry = Entry::new(); - base_url_entry.set_text(¤t.base_url); - content.append(&base_url_entry); - content.append(&Label::new(Some("Workspace"))); let workspace_entry = Entry::new(); workspace_entry.set_text(¤t.workspace); content.append(&workspace_entry); + content.append(&Label::new(Some("Bundle manifest path (optional)"))); + let manifest_entry = Entry::new(); + if let Some(path) = ¤t.manifest_path { + manifest_entry.set_text(path); + } + content.append(&manifest_entry); + content.append(&Label::new(Some( - "Default: http://127.0.0.1:8787 with workspace local-default", + "Embedded runtime — requires manifests/doc-approval (issue #112). No sidecar URL.", ))); let button_row = GtkBox::new(Orientation::Horizontal, 8); @@ -65,12 +67,17 @@ impl PreferencesDialog { let dialog = dialog.clone(); let result = result.clone(); let finished = finished.clone(); - let base_url_entry = base_url_entry.clone(); let workspace_entry = workspace_entry.clone(); + let manifest_entry = manifest_entry.clone(); move |_| { + let manifest = manifest_entry.text().to_string(); result.set(Some(AppSettings { - base_url: base_url_entry.text().to_string(), workspace: workspace_entry.text().to_string(), + manifest_path: if manifest.trim().is_empty() { + None + } else { + Some(manifest) + }, })); finished.set(true); dialog.close(); diff --git a/apps/doc-approval/linux-gtk/tests/client_tests.rs b/apps/doc-approval/linux-gtk/tests/client_tests.rs index be86042..45b97bd 100644 --- a/apps/doc-approval/linux-gtk/tests/client_tests.rs +++ b/apps/doc-approval/linux-gtk/tests/client_tests.rs @@ -1,42 +1,14 @@ -use doc_approval_gtk::client::TraverseClient; -use wiremock::matchers::{method, path}; -use wiremock::{Mock, MockServer, ResponseTemplate}; - -#[tokio::test] -async fn check_health_returns_true_on_200() { - let server = MockServer::start().await; - Mock::given(method("GET")) - .and(path("/healthz")) - .respond_with(ResponseTemplate::new(200)) - .mount(&server) - .await; - - let client = TraverseClient::new(); - assert!(client.check_health(&server.uri()).await.unwrap()); -} - -#[tokio::test] -async fn submit_document_posts_command() { - let server = MockServer::start().await; - Mock::given(method("POST")) - .and(path("/v1/workspaces/local-default/apps/doc-approval/commands")) - .respond_with(ResponseTemplate::new(202).set_body_json(serde_json::json!({ - "api_version": "v1", - "status": "accepted", - "workspace_id": "local-default", - "app_id": "doc-approval", - "session_id": "sess-1", - "command": "submit", - "state": "processing", - "execution_id": "exec_abc" - }))) - .mount(&server) - .await; - - let client = TraverseClient::new(); - let accepted = client - .submit_document(&server.uri(), "local-default", "contract") - .await - .unwrap(); - assert_eq!(accepted.execution_id.as_deref(), Some("exec_abc")); +use doc_approval_core_rs::{DocApprovalOutput, TestEmbeddedRuntime}; + +#[test] +fn embedded_submit_returns_output() { + let mut host = TestEmbeddedRuntime::new(DocApprovalOutput { + doc_type: "invoice".to_string(), + parties: vec![], + amounts: vec![], + confidence: 0.5, + recommendation: "review".to_string(), + }); + let result = host.submit_document("doc").expect("submit"); + assert_eq!(result.output.recommendation, "review"); } diff --git a/apps/traverse-starter/Cargo.lock b/apps/traverse-starter/Cargo.lock index 944a03b..1637fda 100644 --- a/apps/traverse-starter/Cargo.lock +++ b/apps/traverse-starter/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59317f77929f0e679d39364702289274de2f0f0b22cbf50b2b8cff2169a0b27a" +dependencies = [ + "gimli", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -11,6 +20,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "1.0.0" @@ -61,6 +91,18 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "anyhow" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" + [[package]] name = "assert-json-diff" version = "2.0.2" @@ -72,18 +114,14 @@ dependencies = [ ] [[package]] -name = "assert_cmd" -version = "2.2.2" +name = "async-trait" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aa3a22042e45de04255c7bf3626e239f450200fd0493c1e382263544b20aea6" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ - "anstyle", - "bstr", - "libc", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -111,14 +149,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] -name = "bstr" -version = "1.12.3" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "memchr", - "regex-automata", - "serde_core", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", ] [[package]] @@ -126,6 +171,9 @@ name = "bumpalo" version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +dependencies = [ + "allocator-api2", +] [[package]] name = "bytes" @@ -156,6 +204,84 @@ dependencies = [ "system-deps", ] +[[package]] +name = "cap-fs-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5528f85b1e134ae811704e41ef80930f56e795923f866813255bc342cc20654" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "windows-sys 0.59.0", +] + +[[package]] +name = "cap-net-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20a158160765c6a7d0d8c072a53d772e4cb243f38b04bfcf6b4939cfbe7482e7" +dependencies = [ + "cap-primitives", + "cap-std", + "rustix 1.1.4", + "smallvec", +] + +[[package]] +name = "cap-primitives" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cf3aea8a5081171859ef57bc1606b1df6999df4f1110f8eef68b30098d1d3a" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes", + "ipnet", + "maybe-owned", + "rustix 1.1.4", + "rustix-linux-procfs", + "windows-sys 0.59.0", + "winx", +] + +[[package]] +name = "cap-rand" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8144c22e24bbcf26ade86cb6501a0916c46b7e4787abdb0045a467eb1645a1d" +dependencies = [ + "ambient-authority", + "rand 0.8.7", +] + +[[package]] +name = "cap-std" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6dc3090992a735d23219de5c204927163d922f42f575a0189b005c62d37549a" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes", + "rustix 1.1.4", +] + +[[package]] +name = "cap-time-ext" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def102506ce40c11710a9b16e614af0cde8e76ae51b1f48c04b8d79f4b671a80" +dependencies = [ + "ambient-authority", + "cap-primitives", + "iana-time-zone", + "once_cell", + "rustix 1.1.4", + "winx", +] + [[package]] name = "cc" version = "1.2.67" @@ -163,6 +289,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -195,10 +323,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.3.0", "rand_core 0.10.1", ] +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + [[package]] name = "clap" version = "4.6.1" @@ -239,6 +381,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "colorchoice" version = "1.0.5" @@ -256,12 +407,33 @@ dependencies = [ ] [[package]] -name = "colored" -version = "3.1.1" +name = "const-oid" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpp_demangle" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2bb79cb74d735044c972aae58ed0aaa9a837e85b01106a54c39e42e97f62253" dependencies = [ - "windows-sys 0.61.2", + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", ] [[package]] @@ -274,160 +446,221 @@ dependencies = [ ] [[package]] -name = "deadpool" -version = "0.12.3" +name = "cranelift-assembler-x64" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +checksum = "3867f7a56768640a79fc660d2f60298251dc6d65b5d1c907706cd1afff024957" dependencies = [ - "deadpool-runtime", - "lazy_static", - "num_cpus", - "tokio", + "cranelift-assembler-x64-meta", ] [[package]] -name = "deadpool-runtime" -version = "0.1.4" +name = "cranelift-assembler-x64-meta" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "a0661d63dcf8fc4a6538c1ee4d523917c5b27e9fce7a4114cdf9e2b30b4043cf" +dependencies = [ + "cranelift-srcgen", +] [[package]] -name = "difflib" -version = "0.4.0" +name = "cranelift-bforest" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +checksum = "a8d535b489159ea63e3c40dfbe8d0e12bfb71f2a14845ef2407353e06c5a697c" +dependencies = [ + "cranelift-entity", + "wasmtime-internal-core", +] [[package]] -name = "directories" -version = "5.0.1" +name = "cranelift-bitset" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "c3af4f7d421b2354deb01d714266022f38fcdbebc9f5f1ec6d310d3c27286d9e" dependencies = [ - "dirs-sys", + "serde", + "serde_derive", + "wasmtime-internal-core", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "cranelift-codegen" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "09fe4c289e67e0221d1705734a57f95e25c289ed0ead7728743ea21285fc4cf1" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "bumpalo", + "cranelift-assembler-x64", + "cranelift-bforest", + "cranelift-bitset", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown 0.16.1", + "libm", + "log", + "pulley-interpreter", + "regalloc2", + "rustc-hash", + "serde", + "smallvec", + "target-lexicon", + "wasmtime-internal-core", ] [[package]] -name = "displaydoc" -version = "0.2.6" +name = "cranelift-codegen-meta" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "b3063e5363dc5ee6ee8edd930314582c08eb91c209b9564da1cd667f6424b9b3" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cranelift-assembler-x64-meta", + "cranelift-codegen-shared", + "cranelift-srcgen", + "heck", + "pulley-interpreter", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "cranelift-codegen-shared" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "c34b9c8dbc9edf37744918e56898d4979ef1e764e8e4bbe8b4d50250838ddfe8" [[package]] -name = "field-offset" -version = "0.3.6" +name = "cranelift-control" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +checksum = "4eed9dc54204dc99aad19669bca50142659ed583396d9a99a2aef34d7c136ef4" dependencies = [ - "memoffset", - "rustc_version", + "arbitrary", ] [[package]] -name = "find-msvc-tools" -version = "0.1.9" +name = "cranelift-entity" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "9aa2846b239a046217ecf95cfed0e31be4e86843785d07438ad33f456871e888" +dependencies = [ + "cranelift-bitset", + "serde", + "serde_derive", + "wasmtime-internal-core", +] [[package]] -name = "float-cmp" -version = "0.10.0" +name = "cranelift-frontend" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +checksum = "144f70fa9cd07efb83497c12dc8fb73f360a690cd990c44e8ceebc293d8c13b5" dependencies = [ - "num-traits", + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "cranelift-isle" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "0733ca5b2aaa5f6d5d6a1439e3c44280d34730d4d5c262ca08c6775c8d83f191" [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "cranelift-native" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "75b1290d6193b171172d5fe9a6e42326edf487a79f211fbf1e76f912a4aed035" dependencies = [ - "percent-encoding", + "cranelift-codegen", + "libc", + "target-lexicon", ] [[package]] -name = "futures" -version = "0.3.32" +name = "cranelift-srcgen" +version = "0.131.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "ce0d5c2b4d719566816a0f1c9a9712d35d61e27df0ffd6c72a9afec9048db6c0" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "cfg-if", ] [[package]] -name = "futures-channel" -version = "0.3.32" +name = "crossbeam-deque" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ - "futures-core", - "futures-sink", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "futures-core" -version = "0.3.32" +name = "crossbeam-epoch" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +dependencies = [ + "crossbeam-utils", +] [[package]] -name = "futures-executor" -version = "0.3.32" +name = "crossbeam-utils" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "generic-array", + "typenum", ] [[package]] -name = "futures-io" -version = "0.3.32" +name = "crypto-common" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] [[package]] -name = "futures-macro" -version = "0.3.32" +name = "curve25519-dalek" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "curve25519-dalek-derive", + "digest 0.11.3", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", @@ -435,539 +668,912 @@ dependencies = [ ] [[package]] -name = "futures-sink" -version = "0.3.32" +name = "deadpool" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", +] [[package]] -name = "futures-task" -version = "0.3.32" +name = "deadpool-runtime" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" [[package]] -name = "futures-util" -version = "0.3.32" +name = "debugid" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", + "uuid", ] [[package]] -name = "gdk-pixbuf" -version = "0.20.10" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd242894c084f4beed508a56952750bce3e96e85eb68fdc153637daa163e10c" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", + "block-buffer 0.10.4", + "crypto-common 0.1.7", ] [[package]] -name = "gdk-pixbuf-sys" -version = "0.20.10" +name = "digest" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b34f3b580c988bd217e9543a2de59823fafae369d1a055555e5f95a8b130b96" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "block-buffer 0.12.1", + "const-oid", + "crypto-common 0.2.2", ] [[package]] -name = "gdk4" -version = "0.9.6" +name = "directories" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850c9d9c1aecd1a3eb14fadc1cdb0ac0a2298037e116264c7473e1740a32d60" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk4-sys", - "gio", - "glib", - "libc", - "pango", + "dirs-sys", ] [[package]] -name = "gdk4-sys" -version = "0.9.6" +name = "directories-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f6eb95798e2b46f279cf59005daf297d5b69555428f185650d71974a910473a" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "getrandom" -version = "0.2.17" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "cfg-if", - "js-sys", "libc", - "wasi", - "wasm-bindgen", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "getrandom" -version = "0.3.4" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "cfg-if", "libc", - "r-efi 5.3.0", - "wasip2", + "redox_users", + "winapi", ] [[package]] -name = "getrandom" -version = "0.4.3" +name = "displaydoc" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasm-bindgen", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "gio" -version = "0.20.12" +name = "ed25519" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e27e276e7b6b8d50f6376ee7769a71133e80d093bdc363bd0af71664228b831" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "pin-project-lite", - "smallvec", + "signature", ] [[package]] -name = "gio-sys" -version = "0.20.10" +name = "ed25519-dalek" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "windows-sys 0.59.0", + "curve25519-dalek", + "ed25519", + "sha2 0.11.0", + "subtle", + "zeroize", ] [[package]] -name = "glib" -version = "0.20.12" +name = "either" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "smallvec", -] +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] -name = "glib-macros" -version = "0.20.12" +name = "embedded-io" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" -dependencies = [ - "heck", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" [[package]] -name = "glib-sys" -version = "0.20.10" +name = "embedded-io" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" -dependencies = [ - "libc", - "system-deps", -] +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" [[package]] -name = "gobject-sys" -version = "0.20.10" +name = "encoding_rs" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "glib-sys", - "libc", - "system-deps", + "cfg-if", ] [[package]] -name = "graphene-rs" -version = "0.20.10" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b86dfad7d14251c9acaf1de63bc8754b7e3b4e5b16777b6f5a748208fe9519b" -dependencies = [ - "glib", - "graphene-sys", - "libc", -] +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "graphene-sys" -version = "0.20.10" +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df583a85ba2d5e15e1797e40d666057b28bc2f60a67c9c24145e6db2cc3861ea" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "glib-sys", "libc", - "pkg-config", - "system-deps", + "windows-sys 0.61.2", ] [[package]] -name = "gsk4" -version = "0.9.6" +name = "fastrand" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f5e72f931c8c9f65fbfc89fe0ddc7746f147f822f127a53a9854666ac1f855" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fd-lock" +version = "4.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ - "cairo-rs", - "gdk4", - "glib", - "graphene-rs", - "gsk4-sys", - "libc", - "pango", + "cfg-if", + "rustix 1.1.4", + "windows-sys 0.59.0", ] [[package]] -name = "gsk4-sys" -version = "0.9.6" +name = "fiat-crypto" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755059de55fa6f85a46bde8caf03e2184c96bfda1f6206163c72fb0ea12436dc" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "cairo-sys-rs", - "gdk4-sys", - "glib-sys", - "gobject-sys", - "graphene-sys", - "libc", - "pango-sys", - "system-deps", + "memoffset", + "rustc_version", ] [[package]] -name = "gtk4" -version = "0.9.7" +name = "find-msvc-tools" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f274dd0102c21c47bbfa8ebcb92d0464fab794a22fad6c3f3d5f165139a326d6" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ - "cairo-rs", - "field-offset", - "futures-channel", - "gdk-pixbuf", - "gdk4", - "gio", - "glib", - "graphene-rs", - "gsk4", - "gtk4-macros", - "gtk4-sys", - "libc", - "pango", + "percent-encoding", ] [[package]] -name = "gtk4-macros" -version = "0.9.5" +name = "fs-set-times" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999" +checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", + "io-lifetimes", + "rustix 1.1.4", + "windows-sys 0.59.0", ] [[package]] -name = "gtk4-sys" -version = "0.9.6" +name = "futures" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e03b01e54d77c310e1d98647d73f996d04b2f29b9121fe493ea525a7ec03d6" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk4-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "graphene-sys", - "gsk4-sys", - "libc", - "pango-sys", - "system-deps", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "h2" -version = "0.4.15" +name = "futures-channel" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ - "atomic-waker", - "bytes", - "fnv", "futures-core", "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", ] [[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" +name = "futures-core" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] -name = "http" -version = "1.4.2" +name = "futures-executor" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ - "bytes", - "itoa", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "http-body" -version = "1.0.1" +name = "futures-io" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] -name = "http-body-util" -version = "0.1.3" +name = "futures-macro" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "httparse" -version = "1.10.1" +name = "futures-sink" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] -name = "httpdate" -version = "1.0.3" +name = "futures-task" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] -name = "hyper" -version = "1.10.1" +name = "futures-util" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ - "atomic-waker", - "bytes", "futures-channel", "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", "pin-project-lite", - "smallvec", - "tokio", - "want", + "slab", ] [[package]] -name = "hyper-rustls" -version = "0.27.9" +name = "fxprof-processed-profile" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "25234f20a3ec0a962a61770cfe39ecf03cb529a6e474ad8cff025ed497eda557" dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", + "bitflags", + "debugid", + "rustc-hash", + "serde", + "serde_derive", + "serde_json", ] [[package]] -name = "hyper-util" -version = "0.1.20" +name = "gdk-pixbuf" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "2fd242894c084f4beed508a56952750bce3e96e85eb68fdc153637daa163e10c" dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", + "gdk-pixbuf-sys", + "gio", + "glib", "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", ] [[package]] -name = "icu_collections" -version = "2.2.0" +name = "gdk-pixbuf-sys" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "5b34f3b580c988bd217e9543a2de59823fafae369d1a055555e5f95a8b130b96" dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", ] [[package]] -name = "icu_locale_core" -version = "2.2.0" +name = "gdk4" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "4850c9d9c1aecd1a3eb14fadc1cdb0ac0a2298037e116264c7473e1740a32d60" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "cairo-rs", + "gdk-pixbuf", + "gdk4-sys", + "gio", + "glib", + "libc", + "pango", ] [[package]] -name = "icu_normalizer" -version = "2.2.0" +name = "gdk4-sys" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "6f6eb95798e2b46f279cf59005daf297d5b69555428f185650d71974a910473a" dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", ] [[package]] -name = "icu_normalizer_data" -version = "2.2.0" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] [[package]] -name = "icu_properties" -version = "2.2.0" +name = "getrandom" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", ] [[package]] -name = "icu_properties_data" -version = "2.2.0" +name = "getrandom" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "rand_core 0.10.1", + "wasm-bindgen", +] [[package]] -name = "icu_provider" -version = "2.2.0" +name = "gimli" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c" dependencies = [ - "displaydoc", - "icu_locale_core", + "fnv", + "hashbrown 0.16.1", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gio" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e27e276e7b6b8d50f6376ee7769a71133e80d093bdc363bd0af71664228b831" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "pin-project-lite", + "smallvec", +] + +[[package]] +name = "gio-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "windows-sys 0.59.0", +] + +[[package]] +name = "glib" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "smallvec", +] + +[[package]] +name = "glib-macros" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "graphene-rs" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b86dfad7d14251c9acaf1de63bc8754b7e3b4e5b16777b6f5a748208fe9519b" +dependencies = [ + "glib", + "graphene-sys", + "libc", +] + +[[package]] +name = "graphene-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df583a85ba2d5e15e1797e40d666057b28bc2f60a67c9c24145e6db2cc3861ea" +dependencies = [ + "glib-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gsk4" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f5e72f931c8c9f65fbfc89fe0ddc7746f147f822f127a53a9854666ac1f855" +dependencies = [ + "cairo-rs", + "gdk4", + "glib", + "graphene-rs", + "gsk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gsk4-sys" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755059de55fa6f85a46bde8caf03e2184c96bfda1f6206163c72fb0ea12436dc" +dependencies = [ + "cairo-sys-rs", + "gdk4-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk4" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f274dd0102c21c47bbfa8ebcb92d0464fab794a22fad6c3f3d5f165139a326d6" +dependencies = [ + "cairo-rs", + "field-offset", + "futures-channel", + "gdk-pixbuf", + "gdk4", + "gio", + "glib", + "graphene-rs", + "gsk4", + "gtk4-macros", + "gtk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gtk4-macros" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gtk4-sys" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e03b01e54d77c310e1d98647d73f996d04b2f29b9121fe493ea525a7ec03d6" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "gsk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "h2" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "foldhash", + "serde", + "serde_core", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hybrid-array" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", "writeable", "yoke", "zerofrom", @@ -976,703 +1582,1299 @@ dependencies = [ ] [[package]] -name = "idna" -version = "1.1.0" +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "io-extras" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2285ddfe3054097ef4b2fe909ef8c3bcd1ea52a8f0d274416caebeef39f04a65" +dependencies = [ + "io-lifetimes", + "windows-sys 0.59.0", +] + +[[package]] +name = "io-lifetimes" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "ittapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b996fe614c41395cdaedf3cf408a9534851090959d90d54a535f675550b64b1" +dependencies = [ + "anyhow", + "ittapi-sys", + "log", +] + +[[package]] +name = "ittapi-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5385394064fa2c886205dba02598013ce83d3e92d33dbdc0c52fe0e7bf4fc" +dependencies = [ + "cc", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libadwaita" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500135d29c16aabf67baafd3e7741d48e8b8978ca98bac39e589165c8dc78191" +dependencies = [ + "gdk4", + "gio", + "glib", + "gtk4", + "libadwaita-sys", + "libc", + "pango", +] + +[[package]] +name = "libadwaita-sys" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6680988058c2558baf3f548a370e4e78da3bf7f08469daa822ac414842c912db" +dependencies = [ + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "libredox" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mach2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memfd" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" +dependencies = [ + "rustix 1.1.4", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mio" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[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_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" +dependencies = [ + "crc32fast", + "hashbrown 0.17.1", + "indexmap", + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[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.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" +dependencies = [ + "gio", + "glib", + "libc", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[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 = "pulley-interpreter" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "34dff5fd3d9ac4845939fcb4597cd413cb244bc530448ed4766d11b1725e53d0" dependencies = [ - "idna_adapter", + "cranelift-bitset", + "log", + "pulley-macros", + "wasmtime-internal-core", +] + +[[package]] +name = "pulley-macros" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c60fb1c885bdb1efd7c50e8e973714de558b75a65f20c3e9a41398c652aa44b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "quinn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand 0.10.2", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "quote" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.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.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "regalloc2" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de2c52737737f8609e94f975dee22854a2d5c125772d4b1cf292120f4d45c186" +dependencies = [ + "allocator-api2", + "bumpalo", + "hashbrown 0.17.1", + "log", + "rustc-hash", "smallvec", - "utf8_iter", ] [[package]] -name = "idna_adapter" -version = "1.2.2" +name = "regex" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ - "icu_normalizer", - "icu_properties", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] -name = "indexmap" -version = "2.14.0" +name = "regex-automata" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ - "equivalent", - "hashbrown", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "ipnet" -version = "2.12.0" +name = "regex-syntax" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" +name = "rustc-demangle" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] -name = "itoa" -version = "1.0.18" +name = "rustc-hash" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] -name = "js-sys" -version = "0.3.103" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "cfg-if", - "futures-util", - "wasm-bindgen", + "semver", ] [[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libadwaita" -version = "0.7.2" +name = "rustix" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500135d29c16aabf67baafd3e7741d48e8b8978ca98bac39e589165c8dc78191" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "gdk4", - "gio", - "glib", - "gtk4", - "libadwaita-sys", + "bitflags", + "errno", "libc", - "pango", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] -name = "libadwaita-sys" -version = "0.7.2" +name = "rustix" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6680988058c2558baf3f548a370e4e78da3bf7f08469daa822ac414842c912db" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "gdk4-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk4-sys", + "bitflags", + "errno", "libc", - "pango-sys", - "system-deps", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] -name = "libc" -version = "0.2.186" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" - -[[package]] -name = "libredox" -version = "0.1.18" +name = "rustix-linux-procfs" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +checksum = "2fc84bf7e9aa16c4f2c758f27412dc9841341e16aa682d9c7ac308fe3ee12056" dependencies = [ - "libc", + "once_cell", + "rustix 1.1.4", ] [[package]] -name = "litemap" -version = "0.8.2" +name = "rustls" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] [[package]] -name = "lock_api" -version = "0.4.14" +name = "rustls-pki-types" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ - "scopeguard", + "web-time", + "zeroize", ] [[package]] -name = "log" -version = "0.4.33" +name = "rustls-webpki" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] [[package]] -name = "lru-slab" -version = "0.1.2" +name = "rustversion" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] -name = "memchr" -version = "2.8.3" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] -name = "memoffset" -version = "0.9.1" +name = "semver" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ - "autocfg", + "serde", + "serde_core", ] [[package]] -name = "mio" -version = "1.2.1" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", + "serde_core", + "serde_derive", ] [[package]] -name = "mockito" -version = "1.7.2" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90820618712cab19cfc46b274c6c22546a82affcb3c3bdf0f29e3db8e1bb92c0" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "assert-json-diff", - "bytes", - "colored 3.1.1", - "futures-core", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "log", - "pin-project-lite", - "rand 0.9.5", - "regex", - "serde_json", - "serde_urlencoded", - "similar", - "tokio", + "serde_derive", ] [[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "num-traits" -version = "0.2.19" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ - "autocfg", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "num_cpus" -version = "1.17.0" +name = "serde_json" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "hermit-abi", - "libc", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", ] [[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[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.20.12" +name = "serde_spanned" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "gio", - "glib", - "libc", - "pango-sys", + "serde_core", ] [[package]] -name = "pango-sys" -version = "0.20.10" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "lock_api", - "parking_lot_core", + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] -name = "parking_lot_core" -version = "0.9.12" +name = "sha2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pin-project-lite" -version = "0.2.17" +name = "shlex" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] -name = "pkg-config" -version = "0.3.33" +name = "signature" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" [[package]] -name = "potential_utf" -version = "0.1.5" +name = "slab" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" -dependencies = [ - "zerovec", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "smallvec" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" dependencies = [ - "zerocopy", + "serde", ] [[package]] -name = "predicates" -version = "3.1.4" +name = "socket2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ - "anstyle", - "difflib", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "predicates-core" -version = "1.0.10" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] -name = "predicates-tree" -version = "1.0.13" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" -dependencies = [ - "predicates-core", - "termtree", -] +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "proc-macro2" -version = "1.0.106" +name = "syn" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ + "proc-macro2", + "quote", "unicode-ident", ] [[package]] -name = "quinn" -version = "0.11.11" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", + "futures-core", ] [[package]] -name = "quinn-proto" -version = "0.11.16" +name = "synstructure" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "bytes", - "getrandom 0.4.3", - "lru-slab", - "rand 0.10.2", - "rand_pcg", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "quinn-udp" -version = "0.5.15" +name = "system-deps" +version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.61.2", + "cfg-expr", + "heck", + "pkg-config", + "toml 1.1.2+spec-1.1.0", + "version-compare", ] [[package]] -name = "quote" -version = "1.0.46" +name = "system-interface" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "cc4592f674ce18521c2a81483873a49596655b179f71c5e05d10c1fe66c78745" dependencies = [ - "proc-macro2", + "bitflags", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes", + "rustix 0.38.44", + "windows-sys 0.59.0", + "winx", ] [[package]] -name = "r-efi" -version = "5.3.0" +name = "target-lexicon" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] -name = "r-efi" -version = "6.0.0" +name = "tempfile" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix 1.1.4", + "windows-sys 0.61.2", +] [[package]] -name = "rand" -version = "0.9.5" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ - "rand_chacha", - "rand_core 0.9.5", + "winapi-util", ] [[package]] -name = "rand" -version = "0.10.2" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", + "thiserror-impl 1.0.69", ] [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "thiserror" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", + "thiserror-impl 2.0.18", ] [[package]] -name = "rand_core" -version = "0.9.5" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "getrandom 0.3.4", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "rand_core" -version = "0.10.1" +name = "thiserror-impl" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "rand_pcg" -version = "0.10.2" +name = "tinystr" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ - "rand_core 0.10.1", + "displaydoc", + "zerovec", ] [[package]] -name = "redox_syscall" -version = "0.5.18" +name = "tinyvec" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ - "bitflags", + "tinyvec_macros", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 1.0.69", -] +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "regex" -version = "1.13.0" +name = "tokio" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", ] [[package]] -name = "regex-automata" -version = "0.4.15" +name = "tokio-macros" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "regex-syntax" -version = "0.8.11" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] [[package]] -name = "reqwest" -version = "0.12.28" +name = "tokio-util" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ - "base64", "bytes", "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", + "futures-sink", "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", "tokio", - "tokio-rustls", - "tokio-util", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", ] [[package]] -name = "ring" -version = "0.17.14" +name = "toml" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", ] [[package]] -name = "rustc-hash" -version = "2.1.3" +name = "toml" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ - "semver", + "serde_core", ] [[package]] -name = "rustls" -version = "0.23.41" +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", + "serde_core", ] [[package]] -name = "rustls-pki-types" -version = "1.15.0" +name = "toml_edit" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ - "web-time", - "zeroize", + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", ] [[package]] -name = "rustls-webpki" -version = "0.103.13" +name = "toml_parser" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "winnow 1.0.3", ] [[package]] -name = "rustversion" -version = "1.0.23" +name = "toml_writer" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] -name = "ryu" -version = "1.0.23" +name = "tower" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "tower-http" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] [[package]] -name = "semver" -version = "1.0.28" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] -name = "serde" -version = "1.0.228" +name = "tower-service" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] -name = "serde_core" -version = "1.0.228" +name = "tracing" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "serde_derive", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "serde_derive" -version = "1.0.228" +name = "tracing-attributes" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -1680,567 +2882,669 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.150" +name = "tracing-core" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", + "once_cell", ] [[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +name = "traverse-contracts" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" dependencies = [ - "serde_core", + "semver", + "serde", + "serde_json", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +name = "traverse-core-rs" +version = "0.1.0" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", + "futures-util", + "reqwest", "serde", + "serde_json", + "tokio", + "traverse-embedder", + "wiremock", ] [[package]] -name = "shlex" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +name = "traverse-embedder" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" +dependencies = [ + "serde_json", + "traverse-registry", + "traverse-runtime", +] [[package]] -name = "similar" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +name = "traverse-registry" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" +dependencies = [ + "semver", + "serde", + "serde_json", + "sha2 0.11.0", + "traverse-contracts", +] [[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +name = "traverse-runtime" +version = "0.7.0" +source = "git+https://github.com/traverse-framework/Traverse.git#6bd1915c7cd87f1f2cdc2047fc7bc13299dcac66" +dependencies = [ + "chrono", + "ed25519-dalek", + "rayon", + "semver", + "serde", + "serde_json", + "sha2 0.11.0", + "traverse-contracts", + "traverse-registry", + "uuid", + "wasmtime", + "wasmtime-wasi", + "zeroize", +] [[package]] -name = "smallvec" -version = "1.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +name = "traverse-starter-cli" +version = "0.1.0" +dependencies = [ + "clap", + "colored", + "serde", + "serde_json", + "traverse-core-rs", +] [[package]] -name = "socket2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +name = "traverse-starter-gtk" +version = "0.1.0" dependencies = [ - "libc", - "windows-sys 0.61.2", + "directories", + "gtk4", + "libadwaita", + "serde", + "serde_json", + "traverse-core-rs", ] [[package]] -name = "stable_deref_trait" -version = "1.2.1" +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "strsim" -version = "0.11.1" +name = "typenum" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] -name = "subtle" -version = "2.6.1" +name = "unicode-ident" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] -name = "syn" -version = "2.0.118" +name = "unicode-width" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "synstructure" -version = "0.13.2" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "system-deps" -version = "7.0.8" +name = "url" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", + "form_urlencoded", + "idna", + "percent-encoding", + "serde", ] [[package]] -name = "target-lexicon" -version = "0.13.5" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "termtree" -version = "0.5.1" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "thiserror" -version = "1.0.69" +name = "uuid" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ - "thiserror-impl 1.0.69", + "getrandom 0.4.3", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "thiserror" -version = "2.0.18" +name = "version-compare" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl 2.0.18", -] +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] -name = "thiserror-impl" -version = "1.0.69" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "thiserror-impl" -version = "2.0.18" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "proc-macro2", - "quote", - "syn", + "try-lock", ] [[package]] -name = "tinystr" -version = "0.8.3" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" -dependencies = [ - "displaydoc", - "zerovec", -] +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "tinyvec" -version = "1.12.0" +name = "wasm-bindgen" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ - "tinyvec_macros", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.52.3" +name = "wasm-bindgen-futures" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "tokio-macros" -version = "2.7.0" +name = "wasm-bindgen-macro" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ - "proc-macro2", "quote", - "syn", + "wasm-bindgen-macro-support", ] [[package]] -name = "tokio-rustls" -version = "0.26.4" +name = "wasm-bindgen-macro-support" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ - "rustls", - "tokio", + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", ] [[package]] -name = "tokio-util" -version = "0.7.18" +name = "wasm-bindgen-shared" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", + "unicode-ident", ] [[package]] -name = "toml" -version = "1.1.2+spec-1.1.0" +name = "wasm-compose" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "f05a2b3bad87cc1ce45b63425ec09a854cc4cb369231c9fed1fee31538103efb" dependencies = [ + "anyhow", + "heck", "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", + "log", + "petgraph", + "smallvec", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wat", ] [[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +name = "wasm-encoder" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +checksum = "61fb705ce81adde29d2a8e99d87995e39a6e927358c91398f374474746070ef7" dependencies = [ - "serde_core", + "leb128fmt", + "wasmparser 0.246.2", ] [[package]] -name = "toml_edit" -version = "0.25.12+spec-1.1.0" +name = "wasm-encoder" +version = "0.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "59972d6cd272259de647b7c1f1912e45e289c75ffd4be04e10695507cd7e1b59" dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", + "leb128fmt", + "wasmparser 0.253.0", ] [[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" +name = "wasm-streams" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ - "winnow", + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] -name = "toml_writer" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" - -[[package]] -name = "tower" -version = "0.5.3" +name = "wasmparser" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +checksum = "71cde4757396defafd25417cfb36aa3161027d06d865b0c24baaae229aac005d" dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", + "bitflags", + "hashbrown 0.16.1", + "indexmap", + "semver", + "serde", ] [[package]] -name = "tower-http" -version = "0.6.11" +name = "wasmparser" +version = "0.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +checksum = "19db11f87d2486580e1e8b6f494c54df7e0566b87d0b599db843c24019667339" dependencies = [ "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", - "url", + "indexmap", + "semver", ] [[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" +name = "wasmprinter" +version = "0.246.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +checksum = "6e41f7493ba994b8a779430a4c25ff550fd5a40d291693af43a6ef48688f00e3" dependencies = [ - "pin-project-lite", - "tracing-core", + "anyhow", + "termcolor", + "wasmparser 0.246.2", ] [[package]] -name = "tracing-core" -version = "0.1.36" +name = "wasmtime" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +checksum = "d807f646bfecc1dbb4990d8c864beebccbdb3f2cd1b39b2b82957b4e294c6058" dependencies = [ + "addr2line", + "async-trait", + "bitflags", + "bumpalo", + "cc", + "cfg-if", + "encoding_rs", + "futures", + "fxprof-processed-profile", + "gimli", + "ittapi", + "libc", + "log", + "mach2", + "memfd", + "object", "once_cell", -] - -[[package]] -name = "traverse-core-rs" -version = "0.1.0" -dependencies = [ - "futures-util", - "reqwest", - "serde", - "serde_json", - "tokio", - "wiremock", -] - -[[package]] -name = "traverse-starter-cli" -version = "0.1.0" -dependencies = [ - "assert_cmd", - "clap", - "colored 2.2.0", - "futures-util", - "mockito", - "predicates", + "postcard", + "pulley-interpreter", + "rayon", + "rustix 1.1.4", + "semver", "serde", + "serde_derive", "serde_json", - "tokio", - "traverse-core-rs", + "smallvec", + "target-lexicon", + "tempfile", + "wasm-compose", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-cache", + "wasmtime-internal-component-macro", + "wasmtime-internal-component-util", + "wasmtime-internal-core", + "wasmtime-internal-cranelift", + "wasmtime-internal-fiber", + "wasmtime-internal-jit-debug", + "wasmtime-internal-jit-icache-coherence", + "wasmtime-internal-unwinder", + "wasmtime-internal-versioned-export-macros", + "wasmtime-internal-winch", + "wat", + "windows-sys 0.61.2", ] [[package]] -name = "traverse-starter-gtk" -version = "0.1.0" +name = "wasmtime-environ" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48b945309908f22473ebcd585ac2993948044228491cd96941d367aa81a49c3f" dependencies = [ - "directories", - "futures-util", - "gtk4", - "libadwaita", + "anyhow", + "cpp_demangle", + "cranelift-bforest", + "cranelift-bitset", + "cranelift-entity", + "gimli", + "hashbrown 0.16.1", + "indexmap", + "log", + "object", + "postcard", + "rustc-demangle", + "semver", "serde", - "serde_json", - "tokio", - "traverse-core-rs", - "wiremock", + "serde_derive", + "sha2 0.10.9", + "smallvec", + "target-lexicon", + "wasm-encoder 0.246.2", + "wasmparser 0.246.2", + "wasmprinter", + "wasmtime-internal-component-util", + "wasmtime-internal-core", ] -[[package]] -name = "try-lock" -version = "0.2.5" +[[package]] +name = "wasmtime-internal-cache" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "f14b8b93c2137c88ed84114d9a09cb11cb8bf9394aba4856e48f5304a4f99eec" +dependencies = [ + "base64", + "directories-next", + "log", + "postcard", + "rustix 1.1.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "toml 0.9.12+spec-1.1.0", + "wasmtime-environ", + "windows-sys 0.61.2", + "zstd", +] [[package]] -name = "unicode-ident" -version = "1.0.24" +name = "wasmtime-internal-component-macro" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "7307dec6251a18ffa9df03120d2945ac2476ce150b5b099f39b199e8f81464dc" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-internal-component-util", + "wasmtime-internal-wit-bindgen", + "wit-parser", +] [[package]] -name = "untrusted" -version = "0.9.0" +name = "wasmtime-internal-component-util" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +checksum = "7a3d899b0270bcf04852f141bd9538cb162a436e7f56b2c6e0f4e57ecc70743a" [[package]] -name = "url" -version = "2.5.8" +name = "wasmtime-internal-core" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +checksum = "aedd3947487d0afdd37accb981466fcd60571e898004c8955111f88686581dfc" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", + "anyhow", + "hashbrown 0.16.1", + "libm", "serde", ] [[package]] -name = "utf8_iter" -version = "1.0.4" +name = "wasmtime-internal-cranelift" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "512fd846630c064bfc42909eeba90a7d26703b6ded09ad4778ff6afcbdc868dd" +dependencies = [ + "cfg-if", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "gimli", + "itertools", + "log", + "object", + "pulley-interpreter", + "smallvec", + "target-lexicon", + "thiserror 2.0.18", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-core", + "wasmtime-internal-unwinder", + "wasmtime-internal-versioned-export-macros", +] [[package]] -name = "utf8parse" -version = "0.2.2" +name = "wasmtime-internal-fiber" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "15629ea71394be5812a52cb8fbc6cd039484ab1dd48fce5e1ef58ae89606289a" +dependencies = [ + "cc", + "cfg-if", + "libc", + "rustix 1.1.4", + "wasmtime-environ", + "wasmtime-internal-versioned-export-macros", + "windows-sys 0.61.2", +] [[package]] -name = "version-compare" -version = "0.2.1" +name = "wasmtime-internal-jit-debug" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" +checksum = "f5fce5fedc1c952a64cdf3c87e4632af072d2aca0bc2c460d53296fb2654757d" +dependencies = [ + "cc", + "object", + "rustix 1.1.4", + "wasmtime-internal-versioned-export-macros", +] [[package]] -name = "wait-timeout" -version = "0.2.1" +name = "wasmtime-internal-jit-icache-coherence" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +checksum = "10005b038e662775ac002f233e429447a58892e89918580fa67ce8cdd9192d0a" dependencies = [ + "cfg-if", "libc", + "wasmtime-internal-core", + "windows-sys 0.61.2", ] [[package]] -name = "want" -version = "0.3.1" +name = "wasmtime-internal-unwinder" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "03f3e0f474281b405a3e9d97239f83f643b572324d292e1ef9dc5e3e0ab04c68" dependencies = [ - "try-lock", + "cfg-if", + "cranelift-codegen", + "log", + "object", + "wasmtime-environ", ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +name = "wasmtime-internal-versioned-export-macros" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "910e5393af4aca456113581a5913b8d499cd2189013e983f8764d06ebc42b2ed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" +name = "wasmtime-internal-winch" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +checksum = "55481651bea5b8336fb200fa49914ccf802f5e7617ba9ab0b4691f16d4f97ff8" dependencies = [ - "wit-bindgen", + "cranelift-codegen", + "gimli", + "log", + "object", + "target-lexicon", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-cranelift", + "winch-codegen", ] [[package]] -name = "wasm-bindgen" -version = "0.2.126" +name = "wasmtime-internal-wit-bindgen" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "d890c3804d0e46000fa901c86ac1a9fdedf684e72dfd64e582b56bb4a78a6746" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", + "anyhow", + "bitflags", + "heck", + "indexmap", + "wit-parser", ] [[package]] -name = "wasm-bindgen-futures" -version = "0.4.76" +name = "wasmtime-wasi" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "5aa7f927779d92863a1447c1d88192b2242080608cb91ece69c177321488948b" dependencies = [ - "js-sys", - "wasm-bindgen", + "async-trait", + "bitflags", + "bytes", + "cap-fs-ext", + "cap-net-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "futures", + "io-extras", + "io-lifetimes", + "rustix 1.1.4", + "system-interface", + "thiserror 2.0.18", + "tokio", + "tracing", + "url", + "wasmtime", + "wasmtime-wasi-io", + "wiggle", + "windows-sys 0.61.2", ] [[package]] -name = "wasm-bindgen-macro" -version = "0.2.126" +name = "wasmtime-wasi-io" +version = "44.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "d6fd8b702c2aa82bb4907da5ad44120b4385048f6a20731908a6e2485ea7567e" dependencies = [ - "quote", - "wasm-bindgen-macro-support", + "async-trait", + "bytes", + "futures", + "tracing", + "wasmtime", ] [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.126" +name = "wast" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "leb128", ] [[package]] -name = "wasm-bindgen-shared" -version = "0.2.126" +name = "wast" +version = "253.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "d3264542f8965c5d84fb1085d924bfba9a6314bb228eff13a2de14d7627664d0" dependencies = [ - "unicode-ident", + "bumpalo", + "leb128fmt", + "memchr", + "unicode-width", + "wasm-encoder 0.253.0", ] [[package]] -name = "wasm-streams" -version = "0.4.2" +name = "wat" +version = "1.253.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "4bfc5ce906144200c972ec617470aa35bd847472e170b26dde3e80541c674055" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "wast 253.0.0", ] [[package]] @@ -2272,12 +3576,155 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "wiggle" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "165512f7870210d0fd45911990b832782b5fb82d40f4ce28cf86b40aaecd453c" +dependencies = [ + "bitflags", + "thiserror 2.0.18", + "tracing", + "wasmtime", + "wasmtime-environ", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7f63d06fdf2e9a133407b318574574f66ea6590ea7a42c4a7554c029824454a" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", + "wasmtime-environ", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b976b7285ca32a637e21721021442691a2d7938ab4650cb99472a672e9def6c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wiggle-generate", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winch-codegen" +version = "44.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436a7fa4109b13b0e555d01ec615ab8b928b7834639aca7b2fdc1f55d70a1f0c" +dependencies = [ + "cranelift-assembler-x64", + "cranelift-codegen", + "gimli", + "regalloc2", + "smallvec", + "target-lexicon", + "thiserror 2.0.18", + "wasmparser 0.246.2", + "wasmtime-environ", + "wasmtime-internal-core", + "wasmtime-internal-cranelift", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -2435,6 +3882,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + [[package]] name = "winnow" version = "1.0.3" @@ -2444,6 +3897,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winx" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" +dependencies = [ + "bitflags", + "windows-sys 0.59.0", +] + [[package]] name = "wiremock" version = "0.6.5" @@ -2468,10 +3931,35 @@ dependencies = [ ] [[package]] -name = "wit-bindgen" -version = "0.57.1" +name = "wit-parser" +version = "0.246.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd979042b5ff288607ccf3b314145435453f20fc67173195f91062d2289b204d" +dependencies = [ + "anyhow", + "hashbrown 0.16.1", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.246.2", +] + +[[package]] +name = "witx" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror 1.0.69", + "wast 35.0.2", +] [[package]] name = "writeable" @@ -2587,3 +4075,31 @@ name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/apps/traverse-starter/cli-rust/Cargo.toml b/apps/traverse-starter/cli-rust/Cargo.toml index 4278c91..0d2f7d2 100644 --- a/apps/traverse-starter/cli-rust/Cargo.toml +++ b/apps/traverse-starter/cli-rust/Cargo.toml @@ -2,7 +2,7 @@ name = "traverse-starter-cli" version = "0.1.0" edition = "2021" -description = "CLI client for traverse-starter (Phase 1 HTTP polling)" +description = "CLI client for traverse-starter (embedded Traverse runtime)" license = "MIT" [[bin]] @@ -13,13 +13,7 @@ path = "src/main.rs" traverse-core-rs = { path = "../traverse-core-rs" } clap = { version = "4", features = ["derive", "env"] } colored = "2" -futures-util = "0.3" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } serde = { version = "1", features = ["derive"] } serde_json = "1" [dev-dependencies] -mockito = "1" -assert_cmd = "2" -predicates = "3" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } diff --git a/apps/traverse-starter/cli-rust/README.md b/apps/traverse-starter/cli-rust/README.md index 3cc4d18..b7cb70a 100644 --- a/apps/traverse-starter/cli-rust/README.md +++ b/apps/traverse-starter/cli-rust/README.md @@ -1,22 +1,19 @@ # traverse-starter (Rust CLI) -Terminal client for the `traverse-starter` reference app. Uses the shared `traverse-core-rs` crate for HTTP command dispatch and SSE app-state events (same pattern as `web-react`). +Terminal client for the `traverse-starter` reference app. Uses the shared `traverse-core-rs` crate with the public **`traverse-embedder`** SDK (Phase 3 embedded runtime). No `traverse-cli serve` sidecar is required. ## Prerequisites - **Rust 1.78+** via [rustup](https://rustup.rs/) -- **Traverse runtime** running locally: +- **Traverse checkout** with `traverse-embedder` and example WASM: ```bash -git clone https://github.com/traverse-framework/Traverse.git /tmp/traverse -cd /tmp/traverse && git checkout v0.6.0 -cargo run -p traverse-cli -- serve +export TRAVERSE_REPO=/path/to/Traverse +bash scripts/ci/phase2_link_traverse.sh # from App-References root ``` ## Build and install -Prefer the workspace root so the shared crate resolves cleanly: - ```bash cd apps/traverse-starter cargo build -p traverse-starter-cli --release @@ -33,27 +30,23 @@ traverse-starter run --note "Meeting with Alice about project X" # Machine-readable JSON traverse-starter run --note "..." --json -# Health check +# Embedded runtime readiness traverse-starter health traverse-starter health --json - -# Override runtime URL and workspace -traverse-starter run --base-url http://192.168.1.42:8787 --workspace my-workspace --note "..." ``` Environment variables: | Variable | Default | |---|---| -| `TRAVERSE_BASE_URL` | `http://127.0.0.1:8787` | -| `TRAVERSE_WORKSPACE` | `local-default` | +| `TRAVERSE_STARTER_MANIFEST` | auto-discover `manifests/traverse-starter/app.manifest.json` | ## Architecture | File | Role | |---|---| -| `../traverse-core-rs` | Shared HTTP `send_command` + SSE `subscribe_events` | -| `client.rs` | Re-exports `traverse-core-rs` | -| `commands/run.rs` | Submit note + wait for SSE terminal result | -| `commands/health.rs` | `/healthz` check | +| `../traverse-core-rs` | Shared `EmbeddedRuntime` over `traverse-embedder` | +| `client.rs` | Re-exports embedded host types | +| `commands/run.rs` | Submit note to `traverse-starter.pipeline` | +| `commands/health.rs` | Embedded init readiness | | `output.rs` | Human (colored) and JSON formatters | diff --git a/apps/traverse-starter/cli-rust/src/client.rs b/apps/traverse-starter/cli-rust/src/client.rs index 345f4d6..6cd0a23 100644 --- a/apps/traverse-starter/cli-rust/src/client.rs +++ b/apps/traverse-starter/cli-rust/src/client.rs @@ -1,4 +1,5 @@ -//! Re-exports the shared traverse-core-rs client for the CLI shell. +//! Re-exports the shared traverse-core-rs embedded host for the CLI shell. pub use traverse_core_rs::{ - TraceEvent, TraverseClient, TraverseClientError, TraverseStarterOutput, DEFAULT_APP_ID, + EmbeddedRuntime, HostError, HostRunResult, TraceEvent, TraverseStarterOutput, DEFAULT_APP_ID, + DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, }; diff --git a/apps/traverse-starter/cli-rust/src/commands/health.rs b/apps/traverse-starter/cli-rust/src/commands/health.rs index 0f369bd..d305062 100644 --- a/apps/traverse-starter/cli-rust/src/commands/health.rs +++ b/apps/traverse-starter/cli-rust/src/commands/health.rs @@ -1,22 +1,50 @@ -use crate::client::TraverseClient; -use crate::output::print_health; +use traverse_core_rs::{ + TestEmbeddedRuntime, DEFAULT_WORKFLOW_ID, RUNTIME_MODE_EMBEDDED, +}; -pub fn execute(base_url: &str, json: bool) -> i32 { - let runtime = match tokio::runtime::Runtime::new() { - Ok(rt) => rt, +use crate::output::print_json; + +/// Production health: embedded runtime is ready when the bundle initializes. +pub fn execute(json: bool) -> i32 { + match traverse_core_rs::EmbeddedRuntime::init_default() { + Ok(mut host) => { + print_health(json, true, host.workspace_id(), host.workflow_id()); + host.shutdown(); + 0 + } Err(err) => { - eprintln!("runtime failed: {err}"); - return 1; + if json { + print_json(&serde_json::json!({ + "runtime_mode": RUNTIME_MODE_EMBEDDED, + "status": "Unavailable", + "error": err.to_string(), + })); + } else { + eprintln!("Embedded runtime unavailable: {err}"); + } + 1 } - }; - let online = runtime.block_on(async { - let client = TraverseClient::new(); - client.check_health(base_url).await.unwrap_or(false) - }); - print_health(base_url, online, json); - if online { - 0 + } +} + +pub fn execute_with_host(host: &TestEmbeddedRuntime, json: bool) -> i32 { + print_health(json, true, host.workspace_id(), host.workflow_id()); + 0 +} + +fn print_health(json: bool, ready: bool, workspace: &str, workflow: &str) { + let status = if ready { "Ready" } else { "Unavailable" }; + if json { + print_json(&serde_json::json!({ + "runtime_mode": RUNTIME_MODE_EMBEDDED, + "status": status, + "workspace": workspace, + "workflow": workflow, + })); } else { - 1 + println!( + "{RUNTIME_MODE_EMBEDDED} · {status} · workspace={workspace} · workflow={workflow}" + ); } + debug_assert_eq!(workflow, DEFAULT_WORKFLOW_ID); } diff --git a/apps/traverse-starter/cli-rust/src/commands/run.rs b/apps/traverse-starter/cli-rust/src/commands/run.rs index c566901..4665492 100644 --- a/apps/traverse-starter/cli-rust/src/commands/run.rs +++ b/apps/traverse-starter/cli-rust/src/commands/run.rs @@ -1,95 +1,47 @@ -use futures_util::StreamExt; -use traverse_core_rs::{AppState, DEFAULT_APP_ID}; +use traverse_core_rs::{ + EmbeddedRuntime, HostError, HostRunResult, TestEmbeddedRuntime, +}; -use crate::client::{TraverseClient, TraverseStarterOutput}; use crate::output::{print_run_result, RunResultJson}; -pub fn execute(base_url: &str, workspace: &str, note: &str, json: bool) -> i32 { - let runtime = match tokio::runtime::Runtime::new() { - Ok(rt) => rt, +/// Runs against the production embedded host (bundle on disk). +pub fn execute(note: &str, json: bool) -> i32 { + let mut host = match EmbeddedRuntime::init_default() { + Ok(host) => host, Err(err) => { - eprintln!("runtime failed: {err}"); + eprintln!("{err}"); + eprintln!( + "hint: set TRAVERSE_STARTER_MANIFEST to manifests/traverse-starter/app.manifest.json" + ); return 1; } }; + let code = finish(host.submit_note(note), json); + host.shutdown(); + code +} - runtime.block_on(async { - let client = TraverseClient::new(); - let accepted = match client.submit_note(base_url, workspace, note).await { - Ok(accepted) => accepted, - Err(err) => { - eprintln!("submit failed: {err}"); - return 1; - } - }; - - let mut stream = match client - .subscribe_events(base_url, workspace, DEFAULT_APP_ID) - .await - { - Ok(stream) => stream, - Err(err) => { - eprintln!("subscribe failed: {err}"); - return 1; - } - }; +/// Test helper using [`TestEmbeddedRuntime`] (no WASM / no bundle I/O). +pub fn execute_with_host(host: &mut TestEmbeddedRuntime, note: &str, json: bool) -> i32 { + finish(host.submit_note(note), json) +} - while let Some(item) = stream.next().await { - match item { - Ok(event) if event.event_type == "heartbeat" => continue, - Ok(event) => { - if let Some(sid) = event.session_id.as_deref() { - if sid != accepted.session_id { - continue; - } - } - if event.event_type == "error" - || matches!(event.state.as_ref(), Some(AppState::Error)) - { - eprintln!( - "execution failed: {}", - event - .error_message - .unwrap_or_else(|| "unknown error".to_string()) - ); - return 1; - } - let terminal = matches!(event.state.as_ref(), Some(AppState::Results)) - || event.event_type == "capability_result"; - if !terminal { - continue; - } - let execution_id = event - .execution_id - .or(accepted.execution_id.clone()) - .unwrap_or_default(); - let output = event.output.unwrap_or_else(TraverseStarterOutput::empty); - let trace = if execution_id.is_empty() { - Vec::new() - } else { - client - .fetch_trace(base_url, workspace, &execution_id) - .await - .unwrap_or_default() - }; - print_run_result( - &RunResultJson { - execution_id, - output, - trace, - }, - json, - ); - return 0; - } - Err(err) => { - eprintln!("event stream failed: {err}"); - return 1; - } - } +fn finish(result: Result, json: bool) -> i32 { + match result { + Ok(result) => { + print_run_result( + &RunResultJson { + execution_id: result.session_id, + output: result.output, + trace: result.events, + }, + json, + ); + 0 } - - eprintln!("event stream ended before result"); - 1 - }) + Err(err) => { + eprintln!("{err}"); + 1 + } + } } diff --git a/apps/traverse-starter/cli-rust/src/lib.rs b/apps/traverse-starter/cli-rust/src/lib.rs index 992186c..e9d5e3c 100644 --- a/apps/traverse-starter/cli-rust/src/lib.rs +++ b/apps/traverse-starter/cli-rust/src/lib.rs @@ -2,4 +2,6 @@ pub mod client; pub mod commands; pub mod output; -pub use traverse_core_rs::{DEFAULT_APP_ID, DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +pub use traverse_core_rs::{ + DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, +}; diff --git a/apps/traverse-starter/cli-rust/src/main.rs b/apps/traverse-starter/cli-rust/src/main.rs index 6b438ec..3b52a0a 100644 --- a/apps/traverse-starter/cli-rust/src/main.rs +++ b/apps/traverse-starter/cli-rust/src/main.rs @@ -1,31 +1,27 @@ use clap::{Parser, Subcommand}; use traverse_starter_cli::commands; -use traverse_starter_cli::{DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; #[derive(Parser)] -#[command(name = "traverse-starter", about = "CLI client for traverse-starter")] +#[command( + name = "traverse-starter", + about = "CLI client for traverse-starter (embedded Traverse runtime)" +)] struct Cli { - #[arg(long, env = "TRAVERSE_BASE_URL", default_value = DEFAULT_BASE_URL)] - base_url: String, - - #[arg(long, env = "TRAVERSE_WORKSPACE", default_value = DEFAULT_WORKSPACE)] - workspace: String, - #[command(subcommand)] command: Commands, } #[derive(Subcommand)] enum Commands { - /// Execute traverse-starter.pipeline with a note + /// Execute traverse-starter.pipeline with a note (embedded runtime) Run { #[arg(long)] note: String, #[arg(long, default_value_t = false)] json: bool, }, - /// Check Traverse runtime health + /// Check embedded Traverse runtime readiness Health { #[arg(long, default_value_t = false)] json: bool, @@ -35,10 +31,8 @@ enum Commands { fn main() { let cli = Cli::parse(); let code = match cli.command { - Commands::Run { note, json } => { - commands::run::execute(&cli.base_url, &cli.workspace, ¬e, json) - } - Commands::Health { json } => commands::health::execute(&cli.base_url, json), + Commands::Run { note, json } => commands::run::execute(¬e, json), + Commands::Health { json } => commands::health::execute(json), }; std::process::exit(code); } diff --git a/apps/traverse-starter/cli-rust/src/output.rs b/apps/traverse-starter/cli-rust/src/output.rs index b15ff5e..9606873 100644 --- a/apps/traverse-starter/cli-rust/src/output.rs +++ b/apps/traverse-starter/cli-rust/src/output.rs @@ -1,5 +1,6 @@ use colored::Colorize; use serde::Serialize; +use serde_json::Value; use crate::client::{TraceEvent, TraverseStarterOutput}; @@ -10,21 +11,8 @@ pub struct RunResultJson { pub trace: Vec, } -pub fn print_health(base_url: &str, online: bool, json: bool) { - if json { - println!( - "{}", - serde_json::to_string(&serde_json::json!({ - "base_url": base_url, - "status": if online { "online" } else { "offline" }, - })) - .unwrap_or_default() - ); - return; - } - - let status = if online { "online" } else { "offline" }; - println!("Runtime {base_url}: {status}"); +pub fn print_json(value: &Value) { + println!("{}", serde_json::to_string_pretty(value).unwrap_or_default()); } pub fn print_run_result(result: &RunResultJson, json: bool) { diff --git a/apps/traverse-starter/cli-rust/tests/integration_tests.rs b/apps/traverse-starter/cli-rust/tests/integration_tests.rs index cd79b12..6862e1e 100644 --- a/apps/traverse-starter/cli-rust/tests/integration_tests.rs +++ b/apps/traverse-starter/cli-rust/tests/integration_tests.rs @@ -1,64 +1,38 @@ -use traverse_starter_cli::client::TraverseClient; use traverse_starter_cli::commands; - -#[tokio::test] -async fn check_health_returns_true_on_200() { - let mut server = mockito::Server::new_async().await; - let _mock = server - .mock("GET", "/healthz") - .with_status(200) - .create_async() - .await; - - let client = TraverseClient::new(); - assert!(client.check_health(&server.url()).await.unwrap()); +use traverse_core_rs::{ + ProcessOutput, SummarizeOutput, TestEmbeddedRuntime, TraverseStarterOutput, ValidateOutput, +}; + +fn sample_output() -> TraverseStarterOutput { + TraverseStarterOutput { + validate: ValidateOutput { + valid: true, + issues: vec![], + }, + process: ProcessOutput { + title: "Title".to_string(), + tags: vec!["tag".to_string()], + note_type: "meeting".to_string(), + suggested_next_action: "follow up".to_string(), + status: "processed".to_string(), + }, + summarize: SummarizeOutput { + summary: "A short summary".to_string(), + word_count: 3, + }, + } } #[test] -fn run_flow_succeeds_against_mock_server() { - let mut server = mockito::Server::new(); - - let _submit = server - .mock( - "POST", - "/v1/workspaces/local-default/apps/traverse-starter/commands", - ) - .with_status(202) - .with_header("content-type", "application/json") - .with_body( - r#"{"api_version":"v1","status":"accepted","workspace_id":"local-default","app_id":"traverse-starter","session_id":"sess-1","command":"submit","state":"processing","execution_id":"exec_abc"}"#, - ) - .create(); - - let sse_body = "event: capability_result\ndata: {\"state\":\"results\",\"session_id\":\"sess-1\",\"execution_id\":\"exec_abc\",\"output\":{\"validate\":{\"valid\":true,\"issues\":[]},\"process\":{\"title\":\"Title\",\"tags\":[\"tag\"],\"noteType\":\"meeting\",\"suggestedNextAction\":\"follow up\",\"status\":\"processed\"},\"summarize\":{\"summary\":\"A short summary\",\"wordCount\":3}}}\n\n"; - let _events = server - .mock( - "GET", - "/v1/workspaces/local-default/apps/traverse-starter/events", - ) - .with_status(200) - .with_header("content-type", "text/event-stream") - .with_body(sse_body) - .create(); - - let _trace = server - .mock("GET", "/v1/workspaces/local-default/traces/exec_abc") - .with_status(200) - .with_body("[]") - .create(); - - let code = commands::run::execute(&server.url(), "local-default", "hello world", true); +fn run_flow_succeeds_with_test_double() { + let mut host = TestEmbeddedRuntime::new(sample_output()); + let code = commands::run::execute_with_host(&mut host, "hello world", true); assert_eq!(code, 0); } #[test] -fn health_command_reports_online() { - let mut server = mockito::Server::new(); - let _mock = server - .mock("GET", "/healthz") - .with_status(200) - .create(); - - let code = commands::health::execute(&server.url(), true); +fn health_command_reports_embedded_ready() { + let host = TestEmbeddedRuntime::new(sample_output()); + let code = commands::health::execute_with_host(&host, true); assert_eq!(code, 0); } diff --git a/apps/traverse-starter/linux-gtk/Cargo.toml b/apps/traverse-starter/linux-gtk/Cargo.toml index 30b4208..68a50ce 100644 --- a/apps/traverse-starter/linux-gtk/Cargo.toml +++ b/apps/traverse-starter/linux-gtk/Cargo.toml @@ -2,7 +2,7 @@ name = "traverse-starter-gtk" version = "0.1.0" edition = "2021" -description = "Native GTK4 client for traverse-starter (Phase 1 HTTP polling)" +description = "Native GTK4 client for traverse-starter (embedded Traverse runtime)" license = "MIT" [lib] @@ -16,12 +16,8 @@ path = "src/main.rs" traverse-core-rs = { path = "../traverse-core-rs" } gtk4 = "0.9" libadwaita = { version = "0.7", features = ["v1_5"] } -tokio = { version = "1", features = ["rt-multi-thread", "macros", "time"] } -futures-util = "0.3" serde = { version = "1", features = ["derive"] } serde_json = "1" directories = "5" [dev-dependencies] -wiremock = "0.6" -tokio = { version = "1", features = ["rt-multi-thread", "macros"] } diff --git a/apps/traverse-starter/linux-gtk/README.md b/apps/traverse-starter/linux-gtk/README.md index 77cb94b..ec53cc0 100644 --- a/apps/traverse-starter/linux-gtk/README.md +++ b/apps/traverse-starter/linux-gtk/README.md @@ -1,6 +1,6 @@ # traverse-starter (Linux GTK4) -Native Linux client for the `traverse-starter` reference app. Uses the shared `traverse-core-rs` crate for HTTP command dispatch and SSE app-state events (same pattern as `web-react`). +Native Linux client for the `traverse-starter` reference app. Uses the shared `traverse-core-rs` crate with the public **`traverse-embedder`** SDK (Phase 3 embedded runtime). No `traverse-cli serve` sidecar is required. ## Prerequisites @@ -12,31 +12,30 @@ Native Linux client for the `traverse-starter` reference app. Uses the shared `t sudo apt install libgtk-4-dev libadwaita-1-dev ``` -- **Traverse runtime** running locally: +- **Traverse checkout** (sibling recommended) with `traverse-embedder` and example WASM: ```bash -git clone https://github.com/traverse-framework/Traverse.git /tmp/traverse -cd /tmp/traverse && git checkout v0.6.0 -cargo run -p traverse-cli -- serve +export TRAVERSE_REPO=/path/to/Traverse +bash scripts/ci/phase2_link_traverse.sh # from App-References root ``` -## Runtime URL configuration +`traverse-core-rs` depends on `traverse-embedder` from the Traverse git repo. -Open **Preferences** (gear icon in the header bar) and set: +## Bundle configuration + +Open **Preferences** and optionally set: -- **Runtime URL** — default `http://127.0.0.1:8787` - **Workspace** — default `local-default` +- **Bundle manifest path** — defaults to auto-discover `manifests/traverse-starter/app.manifest.json` -Values persist to `~/.config/traverse-starter/settings.json`. +Or set `TRAVERSE_STARTER_MANIFEST` to the absolute path of `app.manifest.json`. ## Build and run -Prefer the workspace root so the shared crate resolves cleanly: - ```bash cd apps/traverse-starter cargo build -p traverse-starter-gtk -cargo test -p traverse-core-rs +cargo test -p traverse-core-rs -p traverse-starter-gtk cargo run -p traverse-starter-gtk ``` @@ -44,12 +43,12 @@ cargo run -p traverse-starter-gtk | File | Role | |---|---| -| `../traverse-core-rs` | Shared HTTP `send_command` + SSE `subscribe_events` | -| `client.rs` | Re-exports `traverse-core-rs` | -| `execution_state.rs` | Shell UI phase / online status (not runtime transitions) | -| `ui/main_window.rs` | `AdwApplicationWindow` — input, output, header health strip | -| `ui/preferences.rs` | Runtime URL + workspace dialog | +| `../traverse-core-rs` | Shared `EmbeddedRuntime` over `traverse-embedder` | +| `client.rs` | Re-exports embedded host types | +| `execution_state.rs` | Shell UI phase / Ready status | +| `ui/main_window.rs` | Zones 1–3 per design-language | +| `ui/preferences.rs` | Workspace + optional manifest path | ## Design language -Follow [docs/design-language.md](../../../docs/design-language.md). +Follow [docs/design-language.md](../../../docs/design-language.md). Zone 1 shows **Embedded** runtime mode. diff --git a/apps/traverse-starter/linux-gtk/src/client.rs b/apps/traverse-starter/linux-gtk/src/client.rs index 6083243..7b5e843 100644 --- a/apps/traverse-starter/linux-gtk/src/client.rs +++ b/apps/traverse-starter/linux-gtk/src/client.rs @@ -1,4 +1,5 @@ -//! Re-exports the shared traverse-core-rs client for the GTK shell. +//! Re-exports the shared traverse-core-rs embedded host for the GTK shell. pub use traverse_core_rs::{ - TraceEvent, TraverseClient, TraverseClientError, TraverseStarterOutput, DEFAULT_APP_ID, + EmbeddedRuntime, HostError, HostRunResult, TraceEvent, TraverseStarterOutput, DEFAULT_APP_ID, + DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, }; diff --git a/apps/traverse-starter/linux-gtk/src/execution_state.rs b/apps/traverse-starter/linux-gtk/src/execution_state.rs index e8fd15e..f67939c 100644 --- a/apps/traverse-starter/linux-gtk/src/execution_state.rs +++ b/apps/traverse-starter/linux-gtk/src/execution_state.rs @@ -4,7 +4,6 @@ use crate::client::{TraceEvent, TraverseStarterOutput}; pub enum ExecutionPhase { Idle, Loading, - Polling { execution_id: String }, Succeeded { output: TraverseStarterOutput, trace: Vec, @@ -14,9 +13,9 @@ pub enum ExecutionPhase { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum RuntimeStatus { - Checking, - Online, - Offline, + Starting, + Ready, + Unavailable, } #[derive(Debug, Clone)] @@ -32,7 +31,7 @@ impl Default for ExecutionState { Self { phase: ExecutionPhase::Idle, note: String::new(), - runtime_status: RuntimeStatus::Checking, + runtime_status: RuntimeStatus::Starting, show_trace: false, } } @@ -40,14 +39,11 @@ impl Default for ExecutionState { impl ExecutionState { pub fn is_running(&self) -> bool { - matches!( - self.phase, - ExecutionPhase::Loading | ExecutionPhase::Polling { .. } - ) + matches!(self.phase, ExecutionPhase::Loading) } - pub fn can_submit(&self, runtime_online: bool) -> bool { - runtime_online && !self.note.trim().is_empty() && !self.is_running() + pub fn can_submit(&self, runtime_ready: bool) -> bool { + runtime_ready && !self.note.trim().is_empty() && !self.is_running() } pub fn reset(&mut self) { diff --git a/apps/traverse-starter/linux-gtk/src/lib.rs b/apps/traverse-starter/linux-gtk/src/lib.rs index 57114dd..921d074 100644 --- a/apps/traverse-starter/linux-gtk/src/lib.rs +++ b/apps/traverse-starter/linux-gtk/src/lib.rs @@ -3,5 +3,7 @@ pub mod execution_state; pub mod settings; pub mod ui; -pub use traverse_core_rs::{DEFAULT_APP_ID, DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +pub use traverse_core_rs::{ + DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, RUNTIME_MODE_EMBEDDED, +}; pub const NOTE_MAX_LENGTH: usize = 2000; diff --git a/apps/traverse-starter/linux-gtk/src/settings.rs b/apps/traverse-starter/linux-gtk/src/settings.rs index c315e20..6cc727f 100644 --- a/apps/traverse-starter/linux-gtk/src/settings.rs +++ b/apps/traverse-starter/linux-gtk/src/settings.rs @@ -3,19 +3,20 @@ use serde::{Deserialize, Serialize}; use std::fs; use std::path::PathBuf; -use crate::{DEFAULT_BASE_URL, DEFAULT_WORKSPACE}; +use crate::{DEFAULT_WORKSPACE}; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct AppSettings { - pub base_url: String, pub workspace: String, + #[serde(default)] + pub manifest_path: Option, } impl Default for AppSettings { fn default() -> Self { Self { - base_url: DEFAULT_BASE_URL.to_string(), workspace: DEFAULT_WORKSPACE.to_string(), + manifest_path: None, } } } @@ -42,5 +43,8 @@ pub fn save_settings(settings: &AppSettings) -> std::io::Result<()> { if let Some(parent) = path.parent() { fs::create_dir_all(parent)?; } - fs::write(path, serde_json::to_string_pretty(settings).unwrap_or_default()) + fs::write( + path, + serde_json::to_string_pretty(settings).unwrap_or_default(), + ) } diff --git a/apps/traverse-starter/linux-gtk/src/ui/main_window.rs b/apps/traverse-starter/linux-gtk/src/ui/main_window.rs index 68d6d14..e77aa97 100644 --- a/apps/traverse-starter/linux-gtk/src/ui/main_window.rs +++ b/apps/traverse-starter/linux-gtk/src/ui/main_window.rs @@ -1,16 +1,17 @@ -use futures_util::StreamExt; use gtk4::prelude::*; use gtk4::{ - Box as GtkBox, Button, Label, Orientation, ScrolledWindow, TextView, TextViewBuffer, - ToggleButton, + Box as GtkBox, Button, Label, Orientation, ScrolledWindow, TextView, ToggleButton, }; use libadwaita as adw; use std::cell::RefCell; +use std::path::PathBuf; use std::rc::Rc; use std::sync::{Arc, Mutex}; -use traverse_core_rs::AppState; -use crate::client::{TraverseClient, TraverseStarterOutput, DEFAULT_APP_ID}; +use crate::client::{ + EmbeddedRuntime, DEFAULT_APP_ID, DEFAULT_WORKFLOW_ID, DEFAULT_WORKSPACE, + RUNTIME_MODE_EMBEDDED, +}; use crate::execution_state::{ExecutionPhase, ExecutionState, RuntimeStatus}; use crate::settings::{load_settings, save_settings, AppSettings}; use crate::ui::preferences::PreferencesDialog; @@ -24,7 +25,7 @@ impl MainWindow { pub fn new(app: &adw::Application) -> Self { let settings = Rc::new(RefCell::new(load_settings())); let state = Arc::new(Mutex::new(ExecutionState::default())); - let client = TraverseClient::new(); + let host = Rc::new(RefCell::new(init_host(&settings.borrow()))); let window = adw::ApplicationWindow::builder() .application(app) @@ -34,10 +35,6 @@ impl MainWindow { .build(); let header = adw::HeaderBar::new(); - let status_label = Label::new(Some("Checking…")); - status_label.add_css_class("dim-label"); - header.pack_end(&status_label); - let prefs_button = Button::from_icon_name("preferences-system-symbolic"); prefs_button.set_tooltip_text(Some("Preferences")); header.pack_end(&prefs_button); @@ -51,6 +48,29 @@ impl MainWindow { content.set_margin_start(16); content.set_margin_end(16); + // Zone 1 — Runtime Environment + content.append(&Label::new(Some("Runtime Environment"))); + let zone1 = GtkBox::new(Orientation::Vertical, 4); + let mode_label = Label::new(Some(&format!("Runtime mode: {RUNTIME_MODE_EMBEDDED}"))); + mode_label.set_xalign(0.0); + let status_label = Label::new(Some("Runtime status: Starting")); + status_label.set_xalign(0.0); + status_label.add_css_class("dim-label"); + let workspace_label = Label::new(Some(&format!("Workspace: {DEFAULT_WORKSPACE}"))); + workspace_label.set_xalign(0.0); + workspace_label.add_css_class("dim-label"); + let workflow_label = Label::new(Some(&format!( + "Workflow: {DEFAULT_WORKFLOW_ID} · App: {DEFAULT_APP_ID}" + ))); + workflow_label.set_xalign(0.0); + workflow_label.add_css_class("dim-label"); + zone1.append(&mode_label); + zone1.append(&status_label); + zone1.append(&workspace_label); + zone1.append(&workflow_label); + content.append(&zone1); + + // Zone 2 — Input content.append(&Label::new(Some("Start Workflow"))); let note_view = TextView::new(); @@ -76,12 +96,13 @@ impl MainWindow { content.append(&button_row); let offline_hint = Label::new(Some( - "Runtime offline — start with `cargo run -p traverse-cli -- serve`", + "Embedded runtime unavailable — check bundle manifest path and TRAVERSE_REPO link.", )); offline_hint.add_css_class("dim-label"); offline_hint.set_visible(false); content.append(&offline_hint); + // Zone 3 — Output content.append(&Label::new(Some("Execution Output"))); let output_label = Label::new(Some("Submit a note above to start a workflow.")); @@ -105,6 +126,34 @@ impl MainWindow { toolbar_view.set_content(Some(&scrolled)); window.set_content(Some(&toolbar_view)); + let refresh_zone1 = { + let host = host.clone(); + let settings = settings.clone(); + let state = state.clone(); + let status_label = status_label.clone(); + let workspace_label = workspace_label.clone(); + move || { + let ready = host.borrow().is_some(); + let status = if ready { + RuntimeStatus::Ready + } else { + RuntimeStatus::Unavailable + }; + state.lock().unwrap().runtime_status = status; + status_label.set_text(match status { + RuntimeStatus::Ready => "Runtime status: Ready", + RuntimeStatus::Unavailable => "Runtime status: Unavailable", + RuntimeStatus::Starting => "Runtime status: Starting", + }); + let workspace = host + .borrow() + .as_ref() + .map(|h| h.workspace_id().to_string()) + .unwrap_or_else(|| settings.borrow().workspace.clone()); + workspace_label.set_text(&format!("Workspace: {workspace}")); + } + }; + let refresh_ui = { let state = state.clone(); let output_label = output_label.clone(); @@ -114,9 +163,9 @@ impl MainWindow { let offline_hint = offline_hint.clone(); move || { let state = state.lock().unwrap(); - let online = state.runtime_status == RuntimeStatus::Online; - submit_button.set_sensitive(state.can_submit(online)); - offline_hint.set_visible(state.runtime_status == RuntimeStatus::Offline); + let ready = state.runtime_status == RuntimeStatus::Ready; + submit_button.set_sensitive(state.can_submit(ready)); + offline_hint.set_visible(state.runtime_status == RuntimeStatus::Unavailable); trace_box.set_visible(false); trace_toggle.set_visible(false); @@ -126,19 +175,15 @@ impl MainWindow { match &state.phase { ExecutionPhase::Idle => { - output_label.set_text(if online { + output_label.set_text(if ready { "Submit a note above to start a workflow." } else { - "Connect to the Traverse runtime to see workflow output here." + "Initialize the embedded runtime to see workflow output here." }); output_label.add_css_class("dim-label"); } ExecutionPhase::Loading => { - output_label.set_text("Starting execution…"); - output_label.remove_css_class("dim-label"); - } - ExecutionPhase::Polling { execution_id } => { - output_label.set_text(&format!("Waiting for runtime events ({execution_id})…")); + output_label.set_text("Running embedded workflow…"); output_label.remove_css_class("dim-label"); } ExecutionPhase::Failed { error } => { @@ -184,6 +229,9 @@ impl MainWindow { } }; + refresh_zone1(); + refresh_ui(); + note_buffer.connect_changed({ let state = state.clone(); let note_count = note_count.clone(); @@ -202,18 +250,12 @@ impl MainWindow { submit_button.connect_clicked({ let state = state.clone(); - let settings = settings.clone(); - let client = client.clone(); + let host = host.clone(); let refresh_ui = refresh_ui.clone(); move |_| { - let (base_url, workspace, note) = { - let settings = settings.borrow(); + let note = { let state = state.lock().unwrap(); - ( - settings.base_url.clone(), - settings.workspace.clone(), - state.note.trim().to_string(), - ) + state.note.trim().to_string() }; if note.is_empty() { return; @@ -225,37 +267,29 @@ impl MainWindow { } refresh_ui(); - glib::spawn_future_local({ - let state = state.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - match client.submit_note(&base_url, &workspace, ¬e).await { - Ok(accepted) => { - let label = accepted - .execution_id - .clone() - .unwrap_or_else(|| accepted.session_id.clone()); - state.lock().unwrap().phase = - ExecutionPhase::Polling { execution_id: label }; - refresh_ui(); - wait_for_result( - &client, - &state, - &base_url, - &workspace, - &accepted.session_id, - &refresh_ui, - ) - .await; - } - Err(err) => { - state.lock().unwrap().phase = - ExecutionPhase::Failed { error: err.to_string() }; - refresh_ui(); - } - } + let result = { + let mut host = host.borrow_mut(); + match host.as_mut() { + Some(runtime) => runtime.submit_note(¬e), + None => Err(crate::client::HostError::Init( + "embedded runtime not initialized".to_string(), + )), } - }); + }; + + match result { + Ok(run) => { + state.lock().unwrap().phase = ExecutionPhase::Succeeded { + output: run.output, + trace: run.events, + }; + } + Err(err) => { + state.lock().unwrap().phase = + ExecutionPhase::Failed { error: err.to_string() }; + } + } + refresh_ui(); } }); @@ -280,40 +314,16 @@ impl MainWindow { prefs_button.connect_clicked({ let window = window.clone(); let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); + let host = host.clone(); + let refresh_zone1 = refresh_zone1.clone(); let refresh_ui = refresh_ui.clone(); move |_| { if let Some(updated) = PreferencesDialog::run(&window, &settings.borrow()) { *settings.borrow_mut() = updated.clone(); let _ = save_settings(&updated); - glib::spawn_future_local({ - let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - refresh_health(&client, &settings, &state, &status_label).await; - refresh_ui(); - } - }); - } - } - }); - - glib::spawn_future_local({ - let settings = settings.clone(); - let status_label = status_label.clone(); - let state = state.clone(); - let client = client.clone(); - let refresh_ui = refresh_ui.clone(); - async move { - loop { - refresh_health(&client, &settings, &state, &status_label).await; + *host.borrow_mut() = init_host(&updated); + refresh_zone1(); refresh_ui(); - glib::timeout_future_seconds(5).await; } } }); @@ -326,109 +336,9 @@ impl MainWindow { } } -async fn refresh_health( - client: &TraverseClient, - settings: &Rc>, - state: &Arc>, - status_label: &Label, -) { - state.lock().unwrap().runtime_status = RuntimeStatus::Checking; - status_label.set_text("Checking…"); - let base_url = settings.borrow().base_url.clone(); - let status = match client.check_health(&base_url).await { - Ok(true) => RuntimeStatus::Online, - _ => RuntimeStatus::Offline, - }; - state.lock().unwrap().runtime_status = status; - status_label.set_text(match status { - RuntimeStatus::Online => "Online", - RuntimeStatus::Offline => "Offline", - RuntimeStatus::Checking => "Checking…", - }); -} - -async fn wait_for_result( - client: &TraverseClient, - state: &Arc>, - base_url: &str, - workspace: &str, - session_id: &str, - refresh_ui: &impl Fn(), -) { - let mut stream = match client - .subscribe_events(base_url, workspace, DEFAULT_APP_ID) - .await - { - Ok(stream) => stream, - Err(err) => { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: err.to_string(), - }; - refresh_ui(); - return; - } - }; - - while let Some(item) = stream.next().await { - match item { - Ok(event) if event.event_type == "heartbeat" => continue, - Ok(event) => { - if let Some(sid) = event.session_id.as_deref() { - if sid != session_id { - continue; - } - } - if event.event_type == "error" - || matches!(event.state.as_ref(), Some(AppState::Error)) - { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: event - .error_message - .unwrap_or_else(|| "execution failed".to_string()), - }; - refresh_ui(); - return; - } - let terminal = matches!(event.state.as_ref(), Some(AppState::Results)) - || event.event_type == "capability_result"; - if terminal { - if let Some(output) = event.output { - let execution_id = event.execution_id.clone().unwrap_or_default(); - let trace = if execution_id.is_empty() { - Vec::new() - } else { - client - .fetch_trace(base_url, workspace, &execution_id) - .await - .unwrap_or_default() - }; - state.lock().unwrap().phase = - ExecutionPhase::Succeeded { output, trace }; - refresh_ui(); - return; - } - if matches!(event.state.as_ref(), Some(AppState::Results)) { - state.lock().unwrap().phase = ExecutionPhase::Succeeded { - output: TraverseStarterOutput::empty(), - trace: Vec::new(), - }; - refresh_ui(); - return; - } - } - } - Err(err) => { - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: err.to_string(), - }; - refresh_ui(); - return; - } - } +fn init_host(settings: &AppSettings) -> Option { + if let Some(path) = &settings.manifest_path { + return EmbeddedRuntime::init(PathBuf::from(path)).ok(); } - - state.lock().unwrap().phase = ExecutionPhase::Failed { - error: "event stream ended before result".to_string(), - }; - refresh_ui(); + EmbeddedRuntime::init_default().ok() } diff --git a/apps/traverse-starter/linux-gtk/src/ui/preferences.rs b/apps/traverse-starter/linux-gtk/src/ui/preferences.rs index b1a8de9..d5710f2 100644 --- a/apps/traverse-starter/linux-gtk/src/ui/preferences.rs +++ b/apps/traverse-starter/linux-gtk/src/ui/preferences.rs @@ -14,7 +14,7 @@ impl PreferencesDialog { .transient_for(parent) .modal(true) .title("Preferences") - .default_width(420) + .default_width(480) .default_height(280) .build(); @@ -24,18 +24,20 @@ impl PreferencesDialog { content.set_margin_start(16); content.set_margin_end(16); - content.append(&Label::new(Some("Runtime URL"))); - let base_url_entry = Entry::new(); - base_url_entry.set_text(¤t.base_url); - content.append(&base_url_entry); - content.append(&Label::new(Some("Workspace"))); let workspace_entry = Entry::new(); workspace_entry.set_text(¤t.workspace); content.append(&workspace_entry); + content.append(&Label::new(Some("Bundle manifest path (optional)"))); + let manifest_entry = Entry::new(); + if let Some(path) = ¤t.manifest_path { + manifest_entry.set_text(path); + } + content.append(&manifest_entry); + content.append(&Label::new(Some( - "Default: http://127.0.0.1:8787 with workspace local-default", + "Embedded runtime — no sidecar URL. Leave manifest empty to auto-discover.", ))); let button_row = GtkBox::new(Orientation::Horizontal, 8); @@ -65,12 +67,17 @@ impl PreferencesDialog { let dialog = dialog.clone(); let result = result.clone(); let finished = finished.clone(); - let base_url_entry = base_url_entry.clone(); let workspace_entry = workspace_entry.clone(); + let manifest_entry = manifest_entry.clone(); move |_| { + let manifest = manifest_entry.text().to_string(); result.set(Some(AppSettings { - base_url: base_url_entry.text().to_string(), workspace: workspace_entry.text().to_string(), + manifest_path: if manifest.trim().is_empty() { + None + } else { + Some(manifest) + }, })); finished.set(true); dialog.close(); diff --git a/apps/traverse-starter/linux-gtk/tests/client_tests.rs b/apps/traverse-starter/linux-gtk/tests/client_tests.rs index df4824d..e538c5b 100644 --- a/apps/traverse-starter/linux-gtk/tests/client_tests.rs +++ b/apps/traverse-starter/linux-gtk/tests/client_tests.rs @@ -1,42 +1,30 @@ -use traverse_starter_gtk::client::TraverseClient; -use wiremock::matchers::{method, path}; -use wiremock::{Mock, MockServer, ResponseTemplate}; +use traverse_core_rs::{ + ProcessOutput, SummarizeOutput, TestEmbeddedRuntime, TraverseStarterOutput, ValidateOutput, +}; -#[tokio::test] -async fn check_health_returns_true_on_200() { - let server = MockServer::start().await; - Mock::given(method("GET")) - .and(path("/healthz")) - .respond_with(ResponseTemplate::new(200)) - .mount(&server) - .await; - - let client = TraverseClient::new(); - assert!(client.check_health(&server.uri()).await.unwrap()); +fn sample_output() -> TraverseStarterOutput { + TraverseStarterOutput { + validate: ValidateOutput { + valid: true, + issues: vec![], + }, + process: ProcessOutput { + title: "Title".to_string(), + tags: vec!["tag".to_string()], + note_type: "meeting".to_string(), + suggested_next_action: "follow up".to_string(), + status: "processed".to_string(), + }, + summarize: SummarizeOutput { + summary: "A short summary".to_string(), + word_count: 3, + }, + } } -#[tokio::test] -async fn submit_note_posts_command() { - let server = MockServer::start().await; - Mock::given(method("POST")) - .and(path("/v1/workspaces/local-default/apps/traverse-starter/commands")) - .respond_with(ResponseTemplate::new(202).set_body_json(serde_json::json!({ - "api_version": "v1", - "status": "accepted", - "workspace_id": "local-default", - "app_id": "traverse-starter", - "session_id": "sess-1", - "command": "submit", - "state": "processing", - "execution_id": "exec_abc" - }))) - .mount(&server) - .await; - - let client = TraverseClient::new(); - let accepted = client - .submit_note(&server.uri(), "local-default", "hello") - .await - .unwrap(); - assert_eq!(accepted.execution_id.as_deref(), Some("exec_abc")); +#[test] +fn embedded_submit_returns_output() { + let mut host = TestEmbeddedRuntime::new(sample_output()); + let result = host.submit_note("hello").expect("submit"); + assert_eq!(result.output.process.title, "Title"); } diff --git a/apps/traverse-starter/traverse-core-rs/Cargo.toml b/apps/traverse-starter/traverse-core-rs/Cargo.toml index 4e71a0f..456097a 100644 --- a/apps/traverse-starter/traverse-core-rs/Cargo.toml +++ b/apps/traverse-starter/traverse-core-rs/Cargo.toml @@ -2,10 +2,11 @@ name = "traverse-core-rs" version = "0.1.0" edition = "2021" -description = "Shared Traverse HTTP/SSE client for traverse-starter Rust shells" +description = "Shared Traverse embedded-runtime client for traverse-starter Rust shells" license = "MIT" [dependencies] +traverse-embedder = { git = "https://github.com/traverse-framework/Traverse.git", package = "traverse-embedder" } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/apps/traverse-starter/traverse-core-rs/src/host.rs b/apps/traverse-starter/traverse-core-rs/src/host.rs new file mode 100644 index 0000000..785ec96 --- /dev/null +++ b/apps/traverse-starter/traverse-core-rs/src/host.rs @@ -0,0 +1,300 @@ +//! Embedded Traverse runtime host for traverse-starter shells. +//! +//! Production path uses [`BundleEmbedder`] from the public `traverse-embedder` +//! crate (spec 068). Tests use [`EmbedderTestDouble`] — never fake business +//! field computation in UI or shell code. + +use serde_json::{json, Value}; +use std::path::{Path, PathBuf}; +use std::sync::{Arc, Mutex}; +use traverse_embedder::{ + BundleEmbedder, EmbedderConfig, EmbedderTestDouble, SecurityPosture, SubmitStatus, + TraverseEmbedderApi, +}; + +use crate::client::{TraceEvent, TraverseStarterOutput}; +use crate::state::StateEvent; + +/// Workflow id invoked by traverse-starter shells. +pub const DEFAULT_WORKFLOW_ID: &str = "traverse-starter.pipeline"; + +/// Runtime mode label for Zone 1 (design-language). +pub const RUNTIME_MODE_EMBEDDED: &str = "Embedded"; + +/// Env var overriding the bundled `app.manifest.json` path. +pub const MANIFEST_ENV: &str = "TRAVERSE_STARTER_MANIFEST"; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum HostError { + Init(String), + Rejected(String), + Execution(String), + Decode(String), +} + +impl std::fmt::Display for HostError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Init(msg) => write!(f, "embedder init failed: {msg}"), + Self::Rejected(msg) => write!(f, "submit rejected: {msg}"), + Self::Execution(msg) => write!(f, "execution failed: {msg}"), + Self::Decode(msg) => write!(f, "decode failed: {msg}"), + } + } +} + +impl std::error::Error for HostError {} + +/// Successful embedded workflow run. +#[derive(Debug, Clone, PartialEq)] +pub struct HostRunResult { + pub session_id: String, + pub output: TraverseStarterOutput, + pub events: Vec, +} + +/// Resolves the application bundle manifest path. +/// +/// Order: `TRAVERSE_STARTER_MANIFEST` → walk from `start`/`cwd` for +/// `manifests/traverse-starter/app.manifest.json`. +pub fn resolve_manifest_path(start: Option<&Path>) -> Option { + if let Ok(path) = std::env::var(MANIFEST_ENV) { + let path = PathBuf::from(path); + if path.is_file() { + return Some(path); + } + } + + let mut dir = start + .map(Path::to_path_buf) + .or_else(|| std::env::current_dir().ok())?; + loop { + let candidate = dir + .join("manifests") + .join("traverse-starter") + .join("app.manifest.json"); + if candidate.is_file() { + return Some(candidate); + } + if !dir.pop() { + break; + } + } + None +} + +fn collect_submit( + embedder: &mut E, + events: &Arc>>, + workflow_id: &str, + input: &Value, +) -> Result { + events.lock().expect("event sink").clear(); + let outcome = embedder.submit(workflow_id, input); + if outcome.status == SubmitStatus::Rejected { + let msg = outcome + .error + .map(|e| format!("{}: {}", e.code.as_str(), e.message)) + .unwrap_or_else(|| "submit rejected".to_string()); + return Err(HostError::Rejected(msg)); + } + + let session_id = outcome + .session_id + .clone() + .unwrap_or_else(|| "sess-unknown".to_string()); + let raw_events = events.lock().expect("event sink").clone(); + let trace: Vec = raw_events + .iter() + .filter_map(|event| { + let event_type = event.get("event_type")?.as_str()?.to_string(); + Some(TraceEvent { + event_type, + timestamp: event + .get("sequence") + .map(|s| s.to_string()) + .unwrap_or_default(), + data: event.get("data").cloned(), + }) + }) + .collect(); + + for event in &raw_events { + let Some(parsed) = StateEvent::from_embedder_event(event) else { + continue; + }; + if parsed.session_id.as_deref().is_some_and(|s| s != session_id) { + continue; + } + if parsed.event_type == "error" + || matches!(parsed.state.as_ref(), Some(crate::AppState::Error)) + { + let message = parsed + .error_message + .or_else(|| { + parsed + .raw + .get("data") + .and_then(|d| d.get("error")) + .and_then(|e| e.get("message")) + .and_then(|m| m.as_str()) + .map(str::to_string) + }) + .unwrap_or_else(|| "execution failed".to_string()); + return Err(HostError::Execution(message)); + } + if parsed.event_type == "capability_result" { + let output = parsed + .output + .unwrap_or_else(TraverseStarterOutput::empty); + return Ok(HostRunResult { + session_id, + output, + events: trace, + }); + } + } + + Err(HostError::Execution( + "embedder emitted no capability_result".to_string(), + )) +} + +fn attach_sink(embedder: &mut E) -> Arc>> { + let events = Arc::new(Mutex::new(Vec::new())); + let sink = events.clone(); + embedder.subscribe(Box::new(move |event| { + sink.lock().expect("event sink").push(event.clone()); + })); + events +} + +/// Production embedded host backed by [`BundleEmbedder`]. +pub struct EmbeddedRuntime { + embedder: BundleEmbedder, + events: Arc>>, + workspace_id: String, + workflow_id: String, +} + +impl EmbeddedRuntime { + /// Initializes from an application bundle manifest (spec 044). + /// + /// Uses [`SecurityPosture::Development`] so locally built unsigned WASM + /// artifacts from the linked Traverse examples can load during Phase 3 + /// cutover. Production posture can be selected once signed digests ship. + pub fn init(manifest_path: impl AsRef) -> Result { + let mut config = EmbedderConfig::new(manifest_path.as_ref()); + config.security = SecurityPosture::Development; + let workspace_id = config.workspace_id.clone(); + let mut embedder = BundleEmbedder::init(config).map_err(|e| { + HostError::Init(format!("{}: {}", e.code.as_str(), e.message)) + })?; + let events = attach_sink(&mut embedder); + Ok(Self { + embedder, + events, + workspace_id, + workflow_id: DEFAULT_WORKFLOW_ID.to_string(), + }) + } + + /// Convenience: resolve manifest then init. + pub fn init_default() -> Result { + let path = resolve_manifest_path(None).ok_or_else(|| { + HostError::Init(format!( + "could not find manifests/traverse-starter/app.manifest.json (set {MANIFEST_ENV})" + )) + })?; + Self::init(path) + } + + #[must_use] + pub fn workspace_id(&self) -> &str { + &self.workspace_id + } + + #[must_use] + pub fn workflow_id(&self) -> &str { + &self.workflow_id + } + + /// Submits `{ note }` to `traverse-starter.pipeline` and returns final output. + pub fn submit_note(&mut self, note: &str) -> Result { + collect_submit( + &mut self.embedder, + &self.events, + &self.workflow_id, + &json!({ "note": note }), + ) + } + + pub fn shutdown(&mut self) { + let _ = self.embedder.shutdown(); + } +} + +/// Test-double host for unit/integration tests (spec 068 FR-006). +pub struct TestEmbeddedRuntime { + embedder: EmbedderTestDouble, + events: Arc>>, + workspace_id: String, + workflow_id: String, +} + +impl TestEmbeddedRuntime { + #[must_use] + pub fn new(output: TraverseStarterOutput) -> Self { + let mut embedder = EmbedderTestDouble::new( + crate::DEFAULT_WORKSPACE, + crate::DEFAULT_APP_ID, + "1.1.0", + std::env::consts::OS, + ) + .with_target_output(DEFAULT_WORKFLOW_ID, serde_json::to_value(output).unwrap()); + let events = attach_sink(&mut embedder); + Self { + embedder, + events, + workspace_id: crate::DEFAULT_WORKSPACE.to_string(), + workflow_id: DEFAULT_WORKFLOW_ID.to_string(), + } + } + + #[must_use] + pub fn with_error(code: &str, message: &str) -> Self { + let mut embedder = EmbedderTestDouble::new( + crate::DEFAULT_WORKSPACE, + crate::DEFAULT_APP_ID, + "1.1.0", + std::env::consts::OS, + ) + .with_target_error(DEFAULT_WORKFLOW_ID, code, message); + let events = attach_sink(&mut embedder); + Self { + embedder, + events, + workspace_id: crate::DEFAULT_WORKSPACE.to_string(), + workflow_id: DEFAULT_WORKFLOW_ID.to_string(), + } + } + + #[must_use] + pub fn workspace_id(&self) -> &str { + &self.workspace_id + } + + #[must_use] + pub fn workflow_id(&self) -> &str { + &self.workflow_id + } + + pub fn submit_note(&mut self, note: &str) -> Result { + collect_submit( + &mut self.embedder, + &self.events, + &self.workflow_id, + &json!({ "note": note }), + ) + } +} diff --git a/apps/traverse-starter/traverse-core-rs/src/lib.rs b/apps/traverse-starter/traverse-core-rs/src/lib.rs index 1fcc263..047699f 100644 --- a/apps/traverse-starter/traverse-core-rs/src/lib.rs +++ b/apps/traverse-starter/traverse-core-rs/src/lib.rs @@ -1,8 +1,12 @@ //! Shared Traverse runtime client for traverse-starter Rust shells. //! Platform-neutral: no GTK or terminal UI imports. +//! +//! Phase 3 production path is the embedded host (`host` module). HTTP sidecar +//! helpers remain under the `sidecar` feature for migration/debug only. mod client; mod discovery; +mod host; mod sse; mod state; @@ -11,6 +15,10 @@ pub use client::{ TraverseClientError, TraverseStarterOutput, ValidateOutput, }; pub use discovery::{ServerDiscovery, ServerInfo}; +pub use host::{ + resolve_manifest_path, EmbeddedRuntime, HostError, HostRunResult, TestEmbeddedRuntime, + DEFAULT_WORKFLOW_ID, MANIFEST_ENV, RUNTIME_MODE_EMBEDDED, +}; pub use sse::subscribe_events; pub use state::{AppState, StateEvent}; diff --git a/apps/traverse-starter/traverse-core-rs/src/state.rs b/apps/traverse-starter/traverse-core-rs/src/state.rs index 3041611..0dbad57 100644 --- a/apps/traverse-starter/traverse-core-rs/src/state.rs +++ b/apps/traverse-starter/traverse-core-rs/src/state.rs @@ -66,6 +66,28 @@ impl StateEvent { }); } let raw: Value = serde_json::from_str(data).ok()?; + Self::from_payload(event_type, raw) + } + + /// Parses an `embedder-api/1.0.0` event envelope into a UI state event. + /// + /// Embedder events use `{ event_type, session_id, data: { ... } }` where + /// `data` carries the same fields historically delivered as SSE `data:`. + pub fn from_embedder_event(event: &Value) -> Option { + let event_type = event.get("event_type")?.as_str()?; + let data = event.get("data").cloned().unwrap_or(Value::Null); + let mut parsed = Self::from_payload(event_type, data)?; + if parsed.session_id.is_none() { + parsed.session_id = event + .get("session_id") + .and_then(|v| v.as_str()) + .map(str::to_string); + } + parsed.raw = event.clone(); + Some(parsed) + } + + fn from_payload(event_type: &str, raw: Value) -> Option { let payload: EventPayload = serde_json::from_value(raw.clone()).ok()?; let error_message = match payload.error { Some(Value::String(s)) => Some(s), diff --git a/apps/traverse-starter/traverse-core-rs/tests/host_tests.rs b/apps/traverse-starter/traverse-core-rs/tests/host_tests.rs new file mode 100644 index 0000000..3a1d2e5 --- /dev/null +++ b/apps/traverse-starter/traverse-core-rs/tests/host_tests.rs @@ -0,0 +1,83 @@ +use serde_json::json; +use traverse_core_rs::{ + ProcessOutput, StateEvent, SummarizeOutput, TestEmbeddedRuntime, TraverseStarterOutput, + ValidateOutput, DEFAULT_WORKFLOW_ID, RUNTIME_MODE_EMBEDDED, +}; + +fn sample_output() -> TraverseStarterOutput { + TraverseStarterOutput { + validate: ValidateOutput { + valid: true, + issues: vec![], + }, + process: ProcessOutput { + title: "Title".to_string(), + tags: vec!["tag".to_string()], + note_type: "meeting".to_string(), + suggested_next_action: "follow up".to_string(), + status: "processed".to_string(), + }, + summarize: SummarizeOutput { + summary: "A short summary".to_string(), + word_count: 3, + }, + } +} + +#[test] +fn test_double_submit_note_returns_scripted_output() { + let mut host = TestEmbeddedRuntime::new(sample_output()); + assert_eq!(host.workflow_id(), DEFAULT_WORKFLOW_ID); + let result = host.submit_note("hello world").expect("submit"); + assert_eq!(result.output.process.title, "Title"); + assert_eq!(result.output.summarize.word_count, 3); + assert!(!result.events.is_empty()); +} + +#[test] +fn test_double_error_surfaces_execution_failure() { + let mut host = TestEmbeddedRuntime::with_error("execution_failed", "boom"); + let err = host.submit_note("x").expect_err("should fail"); + assert!(err.to_string().contains("boom")); +} + +#[test] +fn state_event_from_embedder_envelope() { + let event = json!({ + "kind": "embedder_event", + "event_type": "capability_result", + "session_id": "sess-1", + "data": { + "status": "completed", + "output": { + "validate": { "valid": true, "issues": [] }, + "process": { + "title": "T", + "tags": [], + "noteType": "n", + "suggestedNextAction": "x", + "status": "done" + }, + "summarize": { "summary": "Summary", "wordCount": 1 } + } + } + }); + let parsed = StateEvent::from_embedder_event(&event).unwrap(); + assert_eq!(parsed.session_id.as_deref(), Some("sess-1")); + assert_eq!(parsed.output.unwrap().process.title, "T"); +} + +#[test] +fn runtime_mode_constant_is_embedded() { + assert_eq!(RUNTIME_MODE_EMBEDDED, "Embedded"); +} + +#[test] +fn state_event_from_sse_still_works() { + let event = StateEvent::from_sse( + "capability_result", + r#"{"state":"results","output":{"validate":{"valid":true,"issues":[]},"process":{"title":"T","tags":[],"noteType":"n","suggestedNextAction":"x","status":"done"},"summarize":{"summary":"Summary","wordCount":1}}}"#, + ) + .unwrap(); + assert_eq!(event.output.unwrap().process.title, "T"); +} diff --git a/docs/design-language.md b/docs/design-language.md index 96e89bc..86d722f 100644 --- a/docs/design-language.md +++ b/docs/design-language.md @@ -68,8 +68,8 @@ The UI renders these fields exactly as the runtime provides them — never compu | macOS (SwiftUI + AppKit) | `apps/traverse-starter/macos-swift/` | Shipped | | Android (Jetpack Compose) | `apps/traverse-starter/android-compose/` | Shipped | | Windows (WinUI 3) | `apps/traverse-starter/windows-winui/` | Shipped | -| Linux (GTK4 + Rust) | `apps/traverse-starter/linux-gtk/` | Shipped | -| CLI (Rust) | `apps/traverse-starter/cli-rust/` | Shipped | +| Linux (GTK4 + Rust) | `apps/traverse-starter/linux-gtk/` | Shipped (embedded) | +| CLI (Rust) | `apps/traverse-starter/cli-rust/` | Shipped (embedded) | ### doc-approval (Phase 1 submitter) @@ -80,8 +80,8 @@ The UI renders these fields exactly as the runtime provides them — never compu | macOS (SwiftUI + AppKit) | `apps/doc-approval/macos-swift/` | Shipped | | Android (Jetpack Compose) | `apps/doc-approval/android-compose/` | Shipped | | Windows (WinUI 3) | `apps/doc-approval/windows-winui/` | Shipped | -| Linux (GTK4 + Rust) | `apps/doc-approval/linux-gtk/` | Shipped | -| CLI (Rust) | `apps/doc-approval/cli-rust/` | Shipped | +| Linux (GTK4 + Rust) | `apps/doc-approval/linux-gtk/` | Shipped (embedded; bundle waits on #112) | +| CLI (Rust) | `apps/doc-approval/cli-rust/` | Shipped (embedded; bundle waits on #112) | ### meeting-notes (list-type output) diff --git a/docs/embedded-runtime-plan.md b/docs/embedded-runtime-plan.md index 37f01b0..c8ca4d2 100644 --- a/docs/embedded-runtime-plan.md +++ b/docs/embedded-runtime-plan.md @@ -134,7 +134,7 @@ Until (1–2) exist, platform migration tickets stay **Blocked**. | [114](https://github.com/traverse-framework/reference-apps/issues/114) | Embed runtime — Swift (iOS + macOS) | Blocked | | [115](https://github.com/traverse-framework/reference-apps/issues/115) | Embed runtime — Android | Blocked | | [116](https://github.com/traverse-framework/reference-apps/issues/116) | Embed runtime — Windows | Blocked | -| [117](https://github.com/traverse-framework/reference-apps/issues/117) | Embed runtime — Linux + CLI | Blocked | +| [117](https://github.com/traverse-framework/reference-apps/issues/117) | Embed runtime — Linux + CLI | Done (this PR) | | [118](https://github.com/traverse-framework/reference-apps/issues/118) | embedded_smoke.sh CI gate | Future | | [58](https://github.com/traverse-framework/reference-apps/issues/58), [72](https://github.com/traverse-framework/reference-apps/issues/72) | Shared Swift embedded host package | Blocked | | [59](https://github.com/traverse-framework/reference-apps/issues/59), [73](https://github.com/traverse-framework/reference-apps/issues/73) | Shared Rust embedded host package | Blocked | diff --git a/manifests/traverse-starter/app.manifest.json b/manifests/traverse-starter/app.manifest.json index ce24524..b1b5849 100644 --- a/manifests/traverse-starter/app.manifest.json +++ b/manifests/traverse-starter/app.manifest.json @@ -92,7 +92,7 @@ { "id": "processing", "invoke": { - "capability_id": "traverse-starter.pipeline", + "capability_id": "traverse-starter.process", "input_from": "command.payload" }, "transitions": [ From d65caddb1cff28404e2ff949378d6cc24175fbf4 Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Tue, 14 Jul 2026 11:08:15 -0600 Subject: [PATCH 2/2] Restore doc-approval blocker line in AGENTS.md Co-authored-by: Cursor --- AGENTS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AGENTS.md b/AGENTS.md index 134f4e7..fb8764f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,6 +12,7 @@ gh project item-list 2 --owner traverse-framework --format json --limit 300 \ ### Blocked work summary - **Phase 3 embedded runtime** ([#113](https://github.com/traverse-framework/reference-apps/issues/113)–[#116](https://github.com/traverse-framework/reference-apps/issues/116)) — blocked on remaining consumable embedder SDKs: Traverse [#646](https://github.com/traverse-framework/Traverse/issues/646) (web/TS), [#647](https://github.com/traverse-framework/Traverse/issues/647) (Swift), [#648](https://github.com/traverse-framework/Traverse/issues/648) (Kotlin), [#649](https://github.com/traverse-framework/Traverse/issues/649) (.NET). Rust SDK shipped ([#650](https://github.com/traverse-framework/Traverse/issues/650) / PR #672); App-Refs [#117](https://github.com/traverse-framework/reference-apps/issues/117) Linux GTK + CLI embed shipped. +- **doc-approval multi-capability showcase** ([#111](https://github.com/traverse-framework/reference-apps/issues/111), [#112](https://github.com/traverse-framework/reference-apps/issues/112)) — blocked only on Traverse [#555](https://github.com/traverse-framework/Traverse/issues/555) (`recommend`). Spec 069 closed [#538](https://github.com/traverse-framework/Traverse/issues/538): pipeline is `analyze → recommend` (no extract). Ready: none.