From 4158d02f3dc57c507b7ecea54e740119ef5bf73d Mon Sep 17 00:00:00 2001 From: Timur Gordon <31495328+timurgordon@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:09:13 +0100 Subject: [PATCH] Update osiris dependency to use osiris-core package --- Cargo.lock | 1645 ++++++++++++++++++---------------- Cargo.toml | 4 +- cmd/async_actor_tui.rs | 149 --- cmd/sync_actor_tui.rs | 153 ---- cmd/terminal_ui.rs | 156 ---- src/bin/runner_osiris.rs | 18 +- src/bin/runner_sal/engine.rs | 125 +++ src/engine/mod.rs | 22 - src/engine/osiris.rs | 96 -- src/engine/osis.rs | 143 --- src/engine/system.rs | 124 --- src/lib.rs | 3 - src/sync_runner.rs | 56 +- tests/e2e_tests.rs | 311 ++++--- 14 files changed, 1282 insertions(+), 1723 deletions(-) delete mode 100644 cmd/async_actor_tui.rs delete mode 100644 cmd/sync_actor_tui.rs delete mode 100644 cmd/terminal_ui.rs delete mode 100644 src/engine/mod.rs delete mode 100644 src/engine/osiris.rs delete mode 100644 src/engine/osis.rs delete mode 100644 src/engine/system.rs diff --git a/Cargo.lock b/Cargo.lock index 91a72aa..f01a978 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "aead" version = "0.5.2" @@ -27,6 +12,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.12" @@ -35,7 +31,7 @@ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "const-random", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -43,9 +39,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -56,12 +52,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -73,9 +63,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -88,9 +78,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -123,9 +113,18 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "ar_archive_writer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a" +dependencies = [ + "object", +] [[package]] name = "arrayvec" @@ -152,18 +151,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -178,21 +177,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -245,9 +229,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] [[package]] name = "block-buffer" @@ -259,10 +255,33 @@ dependencies = [ ] [[package]] -name = "bstr" -version = "1.12.0" +name = "borsh" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "serde", @@ -274,6 +293,28 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "byteorder" version = "1.5.0" @@ -286,35 +327,21 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -[[package]] -name = "cassowary" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" - -[[package]] -name = "castaway" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" -dependencies = [ - "rustversion", -] - [[package]] name = "cc" -version = "1.2.31" +version = "1.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" +checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" dependencies = [ + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -348,17 +375,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -369,7 +395,7 @@ checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" dependencies = [ "chrono", "chrono-tz-build", - "phf", + "phf 0.11.3", ] [[package]] @@ -379,10 +405,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" dependencies = [ "parse-zoneinfo", - "phf", + "phf 0.11.3", "phf_codegen", ] +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown 0.14.5", + "stacker", +] + [[package]] name = "cipher" version = "0.4.4" @@ -396,9 +432,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.43" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -406,9 +442,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.43" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -418,21 +454,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" @@ -447,7 +483,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -464,20 +500,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "compact_str" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", - "static_assertions", -] - [[package]] name = "const-oid" version = "0.9.6" @@ -582,31 +604,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crossterm" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" -dependencies = [ - "bitflags 2.9.1", - "crossterm_winapi", - "mio", - "parking_lot", - "rustix 0.38.44", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - [[package]] name = "crunchy" version = "0.2.4" @@ -638,21 +635,21 @@ dependencies = [ [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -678,7 +675,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -689,7 +686,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -717,12 +714,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -780,7 +777,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -802,7 +799,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -857,6 +854,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "email-encoding" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9298e6504d9b9e780ed3f7dfd43a61be8cd0e09eb07f7706a945b0072b6670b6" +dependencies = [ + "base64 0.22.1", + "memchr", +] + +[[package]] +name = "email_address" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" + [[package]] name = "encode_unicode" version = "1.0.0" @@ -893,12 +906,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -935,18 +948,18 @@ dependencies = [ "subtle", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foreign-types" version = "0.3.2" @@ -964,13 +977,19 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures" version = "0.3.31" @@ -1027,7 +1046,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -1068,9 +1087,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1086,47 +1105,41 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1135,7 +1148,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "ignore", "walkdir", ] @@ -1211,21 +1224,29 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ + "ahash 0.8.12", "allocator-api2", - "equivalent", - "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "headers" version = "0.4.1" @@ -1282,7 +1303,7 @@ dependencies = [ [[package]] name = "heromodels" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/db.git#453e86edd24d6009f0b154ac777cc66dc5f3bf76" +source = "git+https://git.ourworld.tf/herocode/db.git#53e9a2d4f087f2869f1ed0cae251a6bb4ae1db2e" dependencies = [ "bincode", "chrono", @@ -1294,6 +1315,8 @@ dependencies = [ "r2d2", "r2d2_postgres", "rhai", + "rhailib-macros", + "rust_decimal", "serde", "serde_json", "strum", @@ -1305,17 +1328,17 @@ dependencies = [ [[package]] name = "heromodels-derive" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/db.git#453e86edd24d6009f0b154ac777cc66dc5f3bf76" +source = "git+https://git.ourworld.tf/herocode/db.git#53e9a2d4f087f2869f1ed0cae251a6bb4ae1db2e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "heromodels_core" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/db.git#453e86edd24d6009f0b154ac777cc66dc5f3bf76" +source = "git+https://git.ourworld.tf/herocode/db.git#53e9a2d4f087f2869f1ed0cae251a6bb4ae1db2e" dependencies = [ "chrono", "serde", @@ -1347,11 +1370,22 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "hostname" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" +dependencies = [ + "cfg-if", + "libc", + "windows-link 0.1.3", ] [[package]] @@ -1433,9 +1467,9 @@ dependencies = [ [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" @@ -1463,19 +1497,21 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1491,7 +1527,7 @@ dependencies = [ "futures-util", "headers", "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls", "hyper-util", "pin-project-lite", @@ -1508,11 +1544,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "log", "rustls", - "rustls-native-certs 0.8.1", + "rustls-native-certs 0.8.2", "rustls-pki-types", "tokio", "tokio-rustls", @@ -1525,7 +1561,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "pin-project-lite", "tokio", @@ -1553,7 +1589,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "native-tls", "tokio", @@ -1563,9 +1599,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -1574,12 +1610,12 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.1", "system-configuration 0.6.1", "tokio", "tower-service", @@ -1589,9 +1625,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1599,7 +1635,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -1613,9 +1649,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1626,9 +1662,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1639,11 +1675,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1654,42 +1689,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1705,9 +1736,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1726,15 +1757,15 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +checksum = "81776e6f9464432afcc28d03e52eb101c93b6f0566f52aef2427663e700f0403" dependencies = [ "crossbeam-deque", "globset", "log", "memchr", - "regex-automata 0.4.9", + "regex-automata", "same-file", "walkdir", "winapi-util", @@ -1742,20 +1773,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.0", ] -[[package]] -name = "indoc" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" - [[package]] name = "inout" version = "0.1.4" @@ -1765,19 +1790,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "instability" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" -dependencies = [ - "darling", - "indoc", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "instant" version = "0.1.13" @@ -1787,17 +1799,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -1816,29 +1817,20 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" @@ -1858,7 +1850,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1869,7 +1861,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -1889,9 +1881,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -1899,9 +1891,9 @@ dependencies = [ [[package]] name = "jsonb" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cbb4fba292867a2d86ed83dbe5f9d036f423bf6a491b7d884058b2fde42fcd" +checksum = "a452366d21e8d3cbca680c41388e01d6a88739afef7877961946a6da409f9ccd" dependencies = [ "byteorder", "ethnum", @@ -1910,7 +1902,7 @@ dependencies = [ "jiff", "nom", "num-traits", - "ordered-float 5.0.0", + "ordered-float 5.1.0", "rand 0.9.2", "ryu", "serde", @@ -1986,7 +1978,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-http-proxy", "hyper-rustls", "hyper-timeout", @@ -2036,7 +2028,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -2046,10 +2038,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "libc" -version = "0.2.174" +name = "lettre" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "9e13e10e8818f8b2a60f52cb127041d388b89f3a96a62be9ceaffa22262fef7f" +dependencies = [ + "base64 0.22.1", + "chumsky", + "email-encoding", + "email_address", + "fastrand", + "futures-util", + "hostname", + "httpdate", + "idna", + "mime", + "native-tls", + "nom", + "percent-encoding", + "quoted_printable", + "socket2 0.6.1", + "tokio", + "url", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" @@ -2059,56 +2076,41 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "libc", + "redox_syscall", ] [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.4", -] +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "macros" @@ -2123,11 +2125,11 @@ dependencies = [ [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -2142,9 +2144,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" @@ -2152,25 +2154,15 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "log", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -2196,7 +2188,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -2228,12 +2220,11 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -2272,9 +2263,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -2290,9 +2281,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -2302,11 +2293,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -2323,7 +2314,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -2334,9 +2325,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -2361,9 +2352,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.0.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", ] @@ -2375,8 +2366,10 @@ dependencies = [ "anyhow", "clap", "env_logger", + "lettre", "osiris_derive", "redis 0.24.0", + "reqwest 0.11.27", "rhai", "serde", "serde_json", @@ -2394,13 +2387,13 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "ourdb" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/db.git#453e86edd24d6009f0b154ac777cc66dc5f3bf76" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "crc32fast", "log", @@ -2408,17 +2401,11 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2426,15 +2413,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -2446,12 +2433,6 @@ dependencies = [ "regex", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "pbkdf2" version = "0.12.2" @@ -2464,36 +2445,35 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -2501,22 +2481,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2", @@ -2528,7 +2508,17 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", + "serde", ] [[package]] @@ -2538,7 +2528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.11.3", ] [[package]] @@ -2547,7 +2537,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", "rand 0.8.5", ] @@ -2560,6 +2550,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -2577,7 +2576,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -2636,9 +2635,9 @@ dependencies = [ [[package]] name = "postgres" -version = "0.19.10" +version = "0.19.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363e6dfbdd780d3aa3597b6eb430db76bb315fa9bad7fae595bb8def808b8470" +checksum = "e7c48ece1c6cda0db61b058c1721378da76855140e9214339fa1317decacb176" dependencies = [ "bytes", "fallible-iterator", @@ -2650,9 +2649,9 @@ dependencies = [ [[package]] name = "postgres-protocol" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" dependencies = [ "base64 0.22.1", "byteorder", @@ -2668,22 +2667,22 @@ dependencies = [ [[package]] name = "postgres-types" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" dependencies = [ "bytes", "fallible-iterator", "postgres-protocol", - "serde", + "serde_core", "serde_json", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -2718,14 +2717,53 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.95" +name = "proc-macro-crate" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] +[[package]] +name = "psm" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d11f2fedc3b7dafdc2851bc52f277377c5473d378859be234bc7ebb593144d01" +dependencies = [ + "ar_archive_writer", + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quanta" version = "0.12.6" @@ -2736,20 +2774,26 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] +[[package]] +name = "quoted_printable" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" + [[package]] name = "r-efi" version = "5.3.0" @@ -2777,6 +2821,12 @@ dependencies = [ "r2d2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.8.5" @@ -2833,37 +2883,16 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", -] - -[[package]] -name = "ratatui" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d" -dependencies = [ - "bitflags 2.9.1", - "cassowary", - "compact_str", - "crossterm", - "instability", - "itertools", - "lru", - "paste", - "strum", - "strum_macros", - "unicode-segmentation", - "unicode-truncate", - "unicode-width", + "getrandom 0.3.4", ] [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -2926,11 +2955,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] @@ -2952,52 +2981,46 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] -name = "regex-syntax" -version = "0.8.5" +name = "rend" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] [[package]] name = "reqwest" @@ -3041,9 +3064,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -3055,7 +3078,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -3097,8 +3120,8 @@ version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6" dependencies = [ - "ahash", - "bitflags 2.9.1", + "ahash 0.8.12", + "bitflags 2.10.0", "instant", "no-std-compat", "num-traits", @@ -3119,7 +3142,7 @@ checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -3139,6 +3162,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "rhailib-macros" +version = "0.1.0" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" +dependencies = [ + "rhai", + "serde", +] + [[package]] name = "rhailib_dsl" version = "0.1.0" @@ -3174,6 +3206,35 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "runner_rust" version = "0.1.0" @@ -3182,7 +3243,6 @@ dependencies = [ "async-trait", "chrono", "clap", - "crossterm", "env_logger", "hero_logger", "heromodels", @@ -3192,7 +3252,6 @@ dependencies = [ "log", "osiris", "rand 0.8.5", - "ratatui", "redis 0.25.4", "rhai", "rhailib_dsl", @@ -3222,51 +3281,38 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.37.2" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b203a6425500a03e0919c42d3c47caca51e79f1132046626d2c8871c5092035d" +checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" dependencies = [ "arrayvec", + "borsh", + "bytes", "num-traits", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", ] [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.52.0", + "linux-raw-sys", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "log", "once_cell", @@ -3292,14 +3338,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.5.1", ] [[package]] @@ -3322,18 +3368,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring", "rustls-pki-types", @@ -3342,9 +3388,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -3355,7 +3401,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sal-git" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "log", "redis 0.31.0", @@ -3369,20 +3415,20 @@ dependencies = [ [[package]] name = "sal-hetzner" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "prettytable", - "reqwest 0.12.22", + "reqwest 0.12.24", "rhai", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "sal-kubernetes" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", "base64 0.22.1", @@ -3396,7 +3442,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-retry", "tower 0.5.2", @@ -3406,11 +3452,11 @@ dependencies = [ [[package]] name = "sal-mycelium" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "base64 0.22.1", "log", - "reqwest 0.12.22", + "reqwest 0.12.24", "rhai", "serde_json", "tokio", @@ -3420,10 +3466,10 @@ dependencies = [ [[package]] name = "sal-net" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", - "reqwest 0.12.22", + "reqwest 0.12.24", "rhai", "tokio", ] @@ -3431,23 +3477,23 @@ dependencies = [ [[package]] name = "sal-os" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", "dirs", "glob", "libc", "nix", - "reqwest 0.12.22", + "reqwest 0.12.24", "rhai", - "thiserror 2.0.12", + "thiserror 2.0.17", "windows", ] [[package]] name = "sal-postgresclient" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "lazy_static", "postgres", @@ -3456,14 +3502,14 @@ dependencies = [ "r2d2_postgres", "rhai", "sal-virt", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio-postgres", ] [[package]] name = "sal-process" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", "nix", @@ -3476,7 +3522,7 @@ dependencies = [ [[package]] name = "sal-redisclient" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "lazy_static", "redis 0.31.0", @@ -3486,7 +3532,7 @@ dependencies = [ [[package]] name = "sal-text" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "regex", "rhai", @@ -3497,12 +3543,12 @@ dependencies = [ [[package]] name = "sal-vault" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "bincode", "chacha20poly1305", "getrandom 0.2.16", - "getrandom 0.3.3", + "getrandom 0.3.4", "k256", "pbkdf2", "rand 0.8.5", @@ -3514,7 +3560,7 @@ dependencies = [ [[package]] name = "sal-virt" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", "rhai", @@ -3528,7 +3574,7 @@ dependencies = [ [[package]] name = "sal-zinit-client" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#d7562ce4665c94dca59630f34c5fe6ce9cded53e" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "anyhow", "futures", @@ -3536,7 +3582,7 @@ dependencies = [ "log", "rhai", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "zinit-client", ] @@ -3552,11 +3598,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3589,7 +3635,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -3598,6 +3644,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "sec1" version = "0.7.3" @@ -3647,7 +3699,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -3656,11 +3708,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -3669,9 +3721,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -3679,10 +3731,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -3697,14 +3750,23 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -3715,20 +3777,21 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "indexmap", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -3808,27 +3871,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio", - "signal-hook", -] - [[package]] name = "signal-hook-registry" version = "1.4.6" @@ -3848,6 +3890,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" version = "1.0.1" @@ -3856,9 +3904,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slug" @@ -3913,12 +3961,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3948,9 +3996,22 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stacker" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1f8b29fb42aafcea4edeeb6b2f2d7ecd0d969c48b4cf0d2e64aafc471dd6e59" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.59.0", +] [[package]] name = "static_assertions" @@ -3980,9 +4041,6 @@ name = "strum" version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] [[package]] name = "strum_macros" @@ -3994,7 +4052,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -4016,9 +4074,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -4048,7 +4106,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -4068,7 +4126,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -4094,16 +4152,22 @@ dependencies = [ ] [[package]] -name = "tempfile" -version = "3.20.0" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.8", - "windows-sys 0.52.0", + "rustix", + "windows-sys 0.61.2", ] [[package]] @@ -4168,11 +4232,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -4183,18 +4247,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -4208,9 +4272,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -4223,15 +4287,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -4248,9 +4312,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -4258,9 +4322,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -4273,33 +4337,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -4314,9 +4375,9 @@ dependencies = [ [[package]] name = "tokio-postgres" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" dependencies = [ "async-trait", "byteorder", @@ -4327,12 +4388,12 @@ dependencies = [ "log", "parking_lot", "percent-encoding", - "phf", + "phf 0.13.1", "pin-project-lite", "postgres-protocol", "postgres-types", "rand 0.9.2", - "socket2 0.5.10", + "socket2 0.6.1", "tokio", "tokio-util", "whoami", @@ -4351,9 +4412,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -4380,8 +4441,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -4393,6 +4454,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -4402,11 +4472,32 @@ dependencies = [ "indexmap", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -4454,7 +4545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "base64 0.21.7", - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -4472,7 +4563,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "futures-util", "http 1.3.1", @@ -4528,7 +4619,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -4564,14 +4655,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "serde", "serde_json", "sharded-slab", @@ -4592,7 +4683,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tst" version = "0.1.0" -source = "git+https://git.ourworld.tf/herocode/db.git#453e86edd24d6009f0b154ac777cc66dc5f3bf76" +source = "git+https://git.ourworld.tf/herocode/herolib_rust.git#9865e601d79d8b74678b1e3db278b085bbb6bda4" dependencies = [ "ourdb", "thiserror 1.0.69", @@ -4600,9 +4691,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -4668,9 +4759,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" @@ -4687,23 +4778,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-truncate" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" -dependencies = [ - "itertools", - "unicode-segmentation", - "unicode-width", -] - [[package]] name = "unicode-width" version = "0.1.14" @@ -4740,13 +4814,14 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -4769,11 +4844,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "serde", "wasm-bindgen", @@ -4829,12 +4904,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -4845,35 +4920,22 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.104", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -4884,9 +4946,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4894,31 +4956,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.104", - "wasm-bindgen-backend", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -4926,11 +4988,11 @@ dependencies = [ [[package]] name = "whoami" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall", + "libredox", "wasite", "web-sys", ] @@ -4953,11 +5015,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -4973,9 +5035,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core", + "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -4985,7 +5047,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -4996,9 +5058,22 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[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 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -5007,31 +5082,31 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", "windows-threading", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -5040,14 +5115,20 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", ] [[package]] @@ -5056,9 +5137,9 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -5067,7 +5148,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5076,7 +5166,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5112,7 +5211,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5148,19 +5256,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -5169,7 +5277,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -5186,9 +5294,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -5204,9 +5312,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -5222,9 +5330,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -5234,9 +5342,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -5252,9 +5360,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -5270,9 +5378,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -5288,9 +5396,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -5306,15 +5414,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -5330,27 +5438,32 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -5358,34 +5471,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] @@ -5405,21 +5518,21 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -5428,9 +5541,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -5439,13 +5552,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.108", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 439632f..29beb4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,8 +54,8 @@ rand = "0.8" hero_logger = { git = "https://git.ourworld.tf/herocode/baobab.git", branch = "logger" } # Osiris dependencies (used by runner_osiris binary) -osiris = { path = "../osiris" } -# osiris = { git = "https://git.ourworld.tf/herocode/osiris.git" } +osiris = { package = "osiris-core", path = "../osiris/core" } +# osiris = { package = "osiris-core", git = "https://git.ourworld.tf/herocode/osiris.git" } heromodels = { git = "https://git.ourworld.tf/herocode/db.git" } heromodels_core = { git = "https://git.ourworld.tf/herocode/db.git" } heromodels-derive = { git = "https://git.ourworld.tf/herocode/db.git" } diff --git a/cmd/async_actor_tui.rs b/cmd/async_actor_tui.rs deleted file mode 100644 index 987176e..0000000 --- a/cmd/async_actor_tui.rs +++ /dev/null @@ -1,149 +0,0 @@ -//! Terminal UI for Async Actor - Monitor and dispatch jobs to async actor with SAL modules -//! -//! This binary provides a TUI interface for monitoring and dispatching jobs to the async actor. - -use anyhow::{Result, Context}; -use clap::Parser; -use log::{info, warn, error}; -use std::path::PathBuf; -use std::process::{Child, Command}; -use tokio::signal; - -#[derive(Parser)] -#[command(name = "async-actor-tui")] -#[command(about = "Terminal UI for Async Actor - Monitor and dispatch jobs with SAL modules")] -struct Args { - /// Actor ID for this instance - #[arg(short, long, default_value = "async_sal")] - actor_id: String, - - /// Redis URL for job queue - #[arg(short, long, default_value = "redis://localhost:6379")] - redis_url: String, - - /// Database path - #[arg(short, long, default_value = "/tmp/actor_db")] - db_path: String, - - /// Default timeout in seconds for job execution - #[arg(short, long, default_value = "300")] - timeout: u64, - - /// Enable verbose logging - #[arg(short, long)] - verbose: bool, -} - -/// Initialize logging based on verbosity level -fn init_logging(verbose: bool) { - if verbose { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Debug) - .init(); - } else { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Info) - .init(); - } -} - -/// Spawn the async actor binary as a background process -fn spawn_actor_process(args: &Args) -> Result { - // Get the crate root directory - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - let actor_path = PathBuf::from(crate_root).join("target/debug/async_actor"); - info!("๐ŸŽฌ Spawning async actor process: {}", actor_path.display()); - - let mut cmd = Command::new(&actor_path); - - // Add command line arguments - cmd.args(&[ - "--actor-id", &args.actor_id, - "--db-path", &args.db_path, - "--redis-url", &args.redis_url, - "--timeout", &args.timeout.to_string(), - ]); - - // Redirect stdout and stderr to null to prevent logs from interfering with TUI - cmd.stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()); - - // Spawn the process - let child = cmd - .spawn() - .with_context(|| format!("Failed to spawn async actor process: {}", actor_path.display()))?; - - info!("โœ… Async actor process spawned with PID: {}", child.id()); - Ok(child) -} - -/// Cleanup function to terminate actor process -fn cleanup_actor_process(mut actor_process: Child) { - info!("๐Ÿงน Cleaning up async actor process..."); - - match actor_process.try_wait() { - Ok(Some(status)) => { - info!("Async actor process already exited with status: {}", status); - } - Ok(None) => { - info!("Terminating async actor process..."); - if let Err(e) = actor_process.kill() { - error!("Failed to kill async actor process: {}", e); - } else { - match actor_process.wait() { - Ok(status) => info!("Async actor process terminated with status: {}", status), - Err(e) => error!("Failed to wait for async actor process: {}", e), - } - } - } - Err(e) => { - error!("Failed to check async actor process status: {}", e); - } - } -} - -#[tokio::main] -async fn main() -> Result<()> { - let args = Args::parse(); - - // Initialize logging - init_logging(args.verbose); - - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - - info!("๐Ÿš€ Starting Async Actor TUI..."); - info!("Actor ID: {}", args.actor_id); - info!("Actor Path: {}/target/debug/async_actor", crate_root); - info!("Redis URL: {}", args.redis_url); - info!("Database Path: {}", args.db_path); - info!("Default Timeout: {}s", args.timeout); - info!("Script Type: SAL (System Abstraction Layer)"); - - // Spawn the actor process first - let actor_process = spawn_actor_process(&args)?; - - // Give the actor a moment to start up - tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; - - info!("๐Ÿ“‹ Async Actor TUI is running. The actor processes jobs concurrently."); - info!("๐Ÿ’ก Use Redis CLI or job submission tools to send jobs to queue: actor_queue:{}", args.actor_id); - info!("๐Ÿ”„ Jobs will be processed with SAL modules (system operations)"); - info!("โฑ๏ธ Each job has a timeout of {}s", args.timeout); - info!("๐Ÿ“Š Multiple jobs can run simultaneously"); - info!("Press Ctrl+C to exit..."); - - // Wait for Ctrl+C - let result = tokio::select! { - _ = signal::ctrl_c() => { - info!("Received Ctrl+C, shutting down..."); - Ok(()) - } - }; - - // Clean up the actor process - cleanup_actor_process(actor_process); - - result -} diff --git a/cmd/sync_actor_tui.rs b/cmd/sync_actor_tui.rs deleted file mode 100644 index 11d88a8..0000000 --- a/cmd/sync_actor_tui.rs +++ /dev/null @@ -1,153 +0,0 @@ -//! Terminal UI for Sync Actor - Monitor and dispatch jobs to sync actor with DSL modules -//! -//! This binary provides a TUI interface for monitoring and dispatching jobs to the sync actor. - -use anyhow::{Result, Context}; -use clap::Parser; -use log::{info, warn, error}; -use std::path::PathBuf; -use std::process::{Child, Command}; -use tokio::signal; - -#[derive(Parser)] -#[command(name = "sync-actor-tui")] -#[command(about = "Terminal UI for Sync Actor - Monitor and dispatch jobs with DSL modules")] -struct Args { - /// Actor ID for this instance - #[arg(short, long, default_value = "sync_osis")] - actor_id: String, - - /// Redis URL for job queue - #[arg(short, long, default_value = "redis://localhost:6379")] - redis_url: String, - - /// Database path - #[arg(short, long, default_value = "/tmp/actor_db")] - db_path: String, - - /// Preserve completed tasks in Redis (don't delete them) - #[arg(short, long, default_value = "false")] - preserve_tasks: bool, - - /// Enable verbose logging - #[arg(short, long)] - verbose: bool, -} - -/// Initialize logging based on verbosity level -fn init_logging(verbose: bool) { - if verbose { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Debug) - .init(); - } else { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Info) - .init(); - } -} - -/// Spawn the sync actor binary as a background process -fn spawn_actor_process(args: &Args) -> Result { - // Get the crate root directory - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - let actor_path = PathBuf::from(crate_root).join("target/debug/sync_actor"); - info!("๐ŸŽฌ Spawning sync actor process: {}", actor_path.display()); - - let mut cmd = Command::new(&actor_path); - - // Add command line arguments - cmd.args(&[ - "--actor-id", &args.actor_id, - "--db-path", &args.db_path, - "--redis-url", &args.redis_url, - "--preserve-tasks", &args.preserve_tasks.to_string(), - ]); - - // Redirect stdout and stderr to null to prevent logs from interfering with TUI - cmd.stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()); - - // Spawn the process - let child = cmd - .spawn() - .with_context(|| format!("Failed to spawn sync actor process: {}", actor_path.display()))?; - - info!("โœ… Sync actor process spawned with PID: {}", child.id()); - Ok(child) -} - -/// Cleanup function to terminate actor process -fn cleanup_actor_process(mut actor_process: Child) { - info!("๐Ÿงน Cleaning up sync actor process..."); - - match actor_process.try_wait() { - Ok(Some(status)) => { - info!("Sync actor process already exited with status: {}", status); - } - Ok(None) => { - info!("Terminating sync actor process..."); - if let Err(e) = actor_process.kill() { - error!("Failed to kill sync actor process: {}", e); - } else { - match actor_process.wait() { - Ok(status) => info!("Sync actor process terminated with status: {}", status), - Err(e) => error!("Failed to wait for sync actor process: {}", e), - } - } - } - Err(e) => { - error!("Failed to check sync actor process status: {}", e); - } - } -} - -#[tokio::main] -async fn main() -> Result<()> { - let args = Args::parse(); - - // Initialize logging - init_logging(args.verbose); - - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - - info!("๐Ÿš€ Starting Sync Actor TUI..."); - info!("Actor ID: {}", args.actor_id); - info!("Actor Path: {}/target/debug/sync_actor", crate_root); - info!("Redis URL: {}", args.redis_url); - info!("Database Path: {}", args.db_path); - info!("Preserve Tasks: {}", args.preserve_tasks); - info!("Script Type: DSL (Domain Specific Language)"); - - // Spawn the actor process first - let actor_process = spawn_actor_process(&args)?; - - // Give the actor a moment to start up - tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; - - info!("๐Ÿ“‹ Sync Actor TUI is running. The actor processes jobs sequentially."); - info!("๐Ÿ’ก Use Redis CLI or job submission tools to send jobs to queue: actor_queue:{}", args.actor_id); - info!("๐Ÿ”„ Jobs will be processed with DSL modules (business operations)"); - info!("๐Ÿ“Š Jobs are processed one at a time in order"); - if args.preserve_tasks { - info!("๐Ÿ’พ Completed tasks will be preserved in Redis"); - } else { - info!("๐Ÿ—‘๏ธ Completed tasks will be cleaned up from Redis"); - } - info!("Press Ctrl+C to exit..."); - - // Wait for Ctrl+C - let result = tokio::select! { - _ = signal::ctrl_c() => { - info!("Received Ctrl+C, shutting down..."); - Ok(()) - } - }; - - // Clean up the actor process - cleanup_actor_process(actor_process); - - result -} diff --git a/cmd/terminal_ui.rs b/cmd/terminal_ui.rs deleted file mode 100644 index 3b0b201..0000000 --- a/cmd/terminal_ui.rs +++ /dev/null @@ -1,156 +0,0 @@ -//! Simplified main function for Baobab Actor TUI -//! -//! This binary provides a clean entry point for the actor monitoring and job dispatch interface. - -use anyhow::{Result, Context}; -use baobab_actor::terminal_ui::{App, setup_and_run_tui}; -use clap::Parser; -use hero_job::ScriptType; -use log::{info, warn, error}; -use std::path::PathBuf; -use std::process::{Child, Command}; -use tokio::signal; - -#[derive(Parser)] -#[command(name = "baobab-actor-tui")] -#[command(about = "Terminal UI for Baobab Actor - Monitor and dispatch jobs to a single actor")] -struct Args { - /// Redis URL for job queue - #[arg(short, long, default_value = "redis://localhost:6379")] - redis_url: String, - - /// Enable verbose logging - #[arg(short, long)] - verbose: bool, -} - -/// Initialize logging based on verbosity level -fn init_logging(verbose: bool) { - if verbose { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Debug) - .init(); - } else { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Info) - .init(); - } -} - -/// Create and configure the TUI application -fn create_app(args: &Args) -> Result { - let actor_id = "sal".to_string(); - - // Get the crate root directory - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - let crate_root = PathBuf::from(crate_root); - - let actor_path = crate_root.join("target/debug/runner_rust"); - let example_dir = Some(crate_root.join("examples/scripts")); - - let mut app = App::new( - actor_id, - actor_path, - args.redis_url.clone(), - example_dir, - )?; - - // Set the correct script type for the system actor - // System actor processes SAL (System Abstraction Layer) scripts, not OSIS scripts - app.job_form.script_type = ScriptType::SAL; - - Ok(app) -} - -/// Spawn the actor binary as a background process -fn spawn_actor_process(_args: &Args) -> Result { - // Get the crate root directory - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - let actor_path = PathBuf::from(crate_root).join("target/debug/runner_rust"); - info!("๐ŸŽฌ Spawning actor process: {}", actor_path.display()); - - let mut cmd = Command::new(&actor_path); - - // Redirect stdout and stderr to null to prevent logs from interfering with TUI - cmd.stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()); - - // Spawn the process - let child = cmd - .spawn() - .with_context(|| format!("Failed to spawn actor process: {}", actor_path.display()))?; - - info!("โœ… Actor process spawned with PID: {}", child.id()); - Ok(child) -} - -/// Cleanup function to terminate actor process -fn cleanup_actor_process(mut actor_process: Child) { - info!("๐Ÿงน Cleaning up actor process..."); - - match actor_process.try_wait() { - Ok(Some(status)) => { - info!("Actor process already exited with status: {}", status); - } - Ok(None) => { - info!("Terminating actor process..."); - if let Err(e) = actor_process.kill() { - error!("Failed to kill actor process: {}", e); - } else { - match actor_process.wait() { - Ok(status) => info!("Actor process terminated with status: {}", status), - Err(e) => error!("Failed to wait for actor process: {}", e), - } - } - } - Err(e) => { - error!("Failed to check actor process status: {}", e); - } - } -} - -#[tokio::main] -async fn main() -> Result<()> { - let args = Args::parse(); - - // Initialize logging - init_logging(args.verbose); - - let crate_root = std::env::var("CARGO_MANIFEST_DIR") - .unwrap_or_else(|_| ".".to_string()); - - info!("๐Ÿš€ Starting Baobab Actor TUI..."); - info!("Actor ID: sal (System Actor)"); - info!("Actor Path: {}/target/debug/runner_rust", crate_root); - info!("Redis URL: {}", args.redis_url); - info!("Script Type: SAL"); - info!("Example Directory: {}/examples/scripts", crate_root); - - // Spawn the actor process first - let actor_process = spawn_actor_process(&args)?; - - // Give the actor a moment to start up - tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; - - // Create app and run TUI - let app = create_app(&args)?; - - // Set up signal handling for graceful shutdown - let result = tokio::select! { - tui_result = setup_and_run_tui(app) => { - info!("TUI exited"); - tui_result - } - _ = signal::ctrl_c() => { - info!("Received Ctrl+C, shutting down..."); - Ok(()) - } - }; - - // Clean up the actor process - cleanup_actor_process(actor_process); - - result -} diff --git a/src/bin/runner_osiris.rs b/src/bin/runner_osiris.rs index 9434758..ad3859f 100644 --- a/src/bin/runner_osiris.rs +++ b/src/bin/runner_osiris.rs @@ -2,7 +2,7 @@ use runner_rust::{spawn_sync_runner, script_mode::execute_script_mode}; use clap::Parser; use log::{error, info}; use tokio::sync::mpsc; -use osiris::rhai::create_osiris_engine; +use osiris::create_osiris_engine; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] @@ -41,7 +41,7 @@ async fn main() -> Result<(), Box> { &args.runner_id, args.redis_url, std::time::Duration::from_secs(300), // Default timeout for OSIS - move || create_osiris_engine(&redis_url, base_db_id) + move || create_osiris_engine() .expect("Failed to create OSIRIS engine"), ).await; @@ -78,7 +78,7 @@ async fn main() -> Result<(), Box> { args.runner_id.clone(), args.redis_url, shutdown_rx, - move || create_osiris_engine(&redis_url, base_db_id) + move || create_osiris_engine() .expect("Failed to create OSIRIS engine"), ); @@ -101,3 +101,15 @@ async fn main() -> Result<(), Box> { Ok(()) } + + + + +/// Example: Run a Rhai script with OSIRIS support +pub fn run_osiris_script( + script: &str, +) -> Result<(), Box> { + let engine = create_osiris_engine()?; + engine.run(script)?; + Ok(()) +} \ No newline at end of file diff --git a/src/bin/runner_sal/engine.rs b/src/bin/runner_sal/engine.rs index c902791..e91feac 100644 --- a/src/bin/runner_sal/engine.rs +++ b/src/bin/runner_sal/engine.rs @@ -71,3 +71,128 @@ pub fn create_sal_engine() -> Engine { pub fn create_shared_sal_engine() -> Arc { EngineFactory::global().get_engine() } + +use std::sync::{Arc, OnceLock}; +// Re-export common Rhai types for convenience +pub use rhai::{Array, Dynamic, Engine, EvalAltResult, Map}; + +// Re-export specific functions from sal-os package +pub use sal_os::rhai::{ + delete, + // Download functions + download, + download_install, + // File system functions + exist, + file_size, + find_dir, + find_dirs, + find_file, + find_files, + mkdir, + register_os_module, + rsync, +}; + +// Re-export Redis client module registration function +pub use sal_redisclient::rhai::register_redisclient_module; + +// Re-export PostgreSQL client module registration function +pub use sal_postgresclient::rhai::register_postgresclient_module; + +pub use sal_process::rhai::{ + kill, + process_get, + process_list, + register_process_module, + // Run functions + // Process management functions + which, +}; + +// Re-export virt functions from sal-virt package +pub use sal_virt::rhai::nerdctl::{ + nerdctl_copy, + nerdctl_exec, + nerdctl_image_build, + nerdctl_image_commit, + nerdctl_image_pull, + nerdctl_image_push, + nerdctl_image_remove, + nerdctl_image_tag, + // Image functions + nerdctl_images, + nerdctl_list, + nerdctl_remove, + // Container functions + nerdctl_run, + nerdctl_run_with_name, + nerdctl_run_with_port, + nerdctl_stop, +}; +pub use sal_virt::rhai::{ + bah_new, register_bah_module, register_nerdctl_module, register_rfs_module, +}; + +pub use sal_git::rhai::register_git_module; +pub use sal_git::{GitRepo, GitTree}; +pub use sal_zinit_client::rhai::register_zinit_module; +pub use sal_mycelium::rhai::register_mycelium_module; +pub use sal_text::rhai::register_text_module; +pub use sal_net::rhai::register_net_module; +pub use sal_kubernetes::rhai::register_kubernetes_module; +pub use sal_kubernetes::KubernetesManager; +pub use sal_os::rhai::copy as os_copy; +pub use sal_hetzner::rhai::register_hetzner_module; + +/// Engine factory for creating and sharing Rhai engines with SAL modules. +pub struct EngineFactory { + engine: Arc, +} + +impl EngineFactory { + /// Create a new engine factory with a configured Rhai engine. + pub fn new() -> Self { + let mut engine = Engine::new(); + register_sal_modules(&mut engine); + // Logger + hero_logger::rhai_integration::configure_rhai_logging(&mut engine, "system_actor"); + + Self { + engine: Arc::new(engine), + } + } + + /// Get a shared reference to the engine. + pub fn get_engine(&self) -> Arc { + Arc::clone(&self.engine) + } + + /// Get the global singleton engine factory. + pub fn global() -> &'static EngineFactory { + static FACTORY: OnceLock = OnceLock::new(); + FACTORY.get_or_init(|| EngineFactory::new()) + } +} + +pub fn register_sal_modules(engine: &mut Engine) { + let _ = sal_os::rhai::register_os_module(engine); + let _ = sal_redisclient::rhai::register_redisclient_module(engine); + let _ = sal_postgresclient::rhai::register_postgresclient_module(engine); + let _ = sal_process::rhai::register_process_module(engine); + let _ = sal_virt::rhai::register_virt_module(engine); + let _ = sal_git::rhai::register_git_module(engine); + let _ = sal_zinit_client::rhai::register_zinit_module(engine); + let _ = sal_mycelium::rhai::register_mycelium_module(engine); + let _ = sal_text::rhai::register_text_module(engine); + let _ = sal_net::rhai::register_net_module(engine); + let _ = sal_kubernetes::rhai::register_kubernetes_module(engine); + let _ = sal_hetzner::rhai::register_hetzner_module(engine); + + println!("SAL modules registered successfully."); +} + +/// Create a shared system engine using the factory. +pub fn create_system_engine() -> Arc { + EngineFactory::global().get_engine() +} diff --git a/src/engine/mod.rs b/src/engine/mod.rs deleted file mode 100644 index e89ac11..0000000 --- a/src/engine/mod.rs +++ /dev/null @@ -1,22 +0,0 @@ -/// Engine module for Rhai script execution -/// -/// This module provides two different engine configurations: -/// - `system`: SAL modules for system operations (async worker) -/// - `osis`: OSIRIS engine for business operations (sync worker) - -pub mod system; -pub mod osis; - -pub use osis::create_osis_engine; -pub use system::create_system_engine; - -// Re-export common Rhai types for convenience -pub use rhai::{Array, Dynamic, Engine, EvalAltResult, Map}; - -/// Evaluate a Rhai script string with any engine -pub fn eval_script( - engine: &Engine, - script: &str, -) -> Result> { - engine.eval(script) -} diff --git a/src/engine/osiris.rs b/src/engine/osiris.rs deleted file mode 100644 index cdb75ce..0000000 --- a/src/engine/osiris.rs +++ /dev/null @@ -1,96 +0,0 @@ -/// OSIRIS Rhai Engine Integration -/// -/// This module provides a Rhai engine configured with OSIRIS object support. -/// It allows Rhai scripts to create Notes, Events, and other OSIRIS objects -/// using a fluent builder pattern and store/retrieve them from HeroDB. -/// -/// # Example Rhai Script -/// -/// ```rhai -/// // Create a note with builder pattern -/// let note = note("notes") -/// .title("My First Note") -/// .content("This is the content of my note") -/// .tag("topic", "rust") -/// .tag("project", "osiris") -/// .mime("text/plain"); -/// -/// // Store the note -/// let id = put_note(note); -/// print(`Note stored with ID: ${id}`); -/// -/// // Retrieve the note -/// let retrieved = get_note("notes", id); -/// print(`Retrieved: ${retrieved.get_title()}`); -/// -/// // Query by tag -/// let ids = query("notes", "tags:tag", "project=osiris"); -/// print(`Found ${ids.len()} notes`); -/// ``` - -use osiris::rhai_support::{register_note_api, register_event_api, OsirisInstance}; -use rhai::Engine; - -/// Create a new Rhai engine with OSIRIS support -/// -/// # Arguments -/// * `herodb_url` - HeroDB connection URL (e.g., "redis://localhost:6379") -/// * `db_id` - Database ID to use -/// -/// # Returns -/// A configured Rhai engine with OSIRIS objects and methods registered -pub fn create_osiris_engine( - herodb_url: &str, - db_id: u16, -) -> Result> { - let mut engine = Engine::new(); - - // Register Note and Event APIs - register_note_api(&mut engine); - register_event_api(&mut engine); - - // Register OsirisInstance type - engine.build_type::(); - - // Register a function to create OSIRIS instances - engine.register_fn("osiris", move |name: &str, url: &str, db_id: rhai::INT| -> Result> { - OsirisInstance::new(name, url, db_id as u16) - .map_err(|e| format!("Failed to create OSIRIS instance: {}", e).into()) - }); - - Ok(engine) -} - -/// Example: Run a Rhai script with OSIRIS support -pub fn run_osiris_script( - script: &str, - herodb_url: &str, - db_id: u16, -) -> Result<(), Box> { - let engine = create_osiris_engine(herodb_url, db_id)?; - engine.run(script)?; - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_create_engine() { - let engine = create_osiris_engine("redis://localhost:6379", 1); - assert!(engine.is_ok()); - } - - #[test] - #[ignore] // Requires HeroDB running - fn test_run_script() { - let script = r#" - let note = note("notes"); - print(note); - "#; - - let result = run_osiris_script(script, "redis://localhost:6379", 1); - assert!(result.is_ok()); - } -} diff --git a/src/engine/osis.rs b/src/engine/osis.rs deleted file mode 100644 index d82a2d3..0000000 --- a/src/engine/osis.rs +++ /dev/null @@ -1,143 +0,0 @@ -// use heromodels::models::heroledger::rhai::register_heroledger_rhai_modules; -use rhai::Engine; -use rhailib_dsl; -use std::sync::{Arc, OnceLock}; - -/// Engine factory for creating and sharing Rhai engines with DSL modules. -pub struct EngineFactory { - engine: Arc, -} - -impl EngineFactory { - /// Create a new engine factory with a configured Rhai engine. - pub fn new() -> Self { - let mut engine = Engine::new(); - register_dsl_modules(&mut engine); - // Logger - hero_logger::rhai_integration::configure_rhai_logging(&mut engine, "osis_actor"); - - Self { - engine: Arc::new(engine), - } - } - - /// Get a shared reference to the engine. - pub fn get_engine(&self) -> Arc { - Arc::clone(&self.engine) - } - - /// Get the global singleton engine factory. - pub fn global() -> &'static EngineFactory { - static FACTORY: OnceLock = OnceLock::new(); - FACTORY.get_or_init(|| EngineFactory::new()) - } -} - -/// Register basic object functions directly in the engine. -/// This provides object functionality without relying on the problematic rhailib_dsl object module. -fn register_object_functions(engine: &mut Engine) { - use heromodels::models::object::Object; - - // Register the Object type - engine.register_type_with_name::("Object"); - - // Register constructor function - engine.register_fn("new_object", || Object::new()); - - // Register setter functions - engine.register_fn("object_title", |obj: &mut Object, title: String| { - obj.title = title; - obj.clone() - }); - - engine.register_fn( - "object_description", - |obj: &mut Object, description: String| { - obj.description = description; - obj.clone() - }, - ); - - // Register getter functions - engine.register_fn("get_object_id", |obj: &mut Object| obj.id() as i64); - engine.register_fn("get_object_title", |obj: &mut Object| obj.title.clone()); - engine.register_fn("get_object_description", |obj: &mut Object| { - obj.description.clone() - }); -} - -/// Registers all DSL modules with the provided Rhai engine. -/// -/// This function is the main entry point for integrating the rhailib DSL with a Rhai engine. -/// It registers all business domain modules, making their functions available to Rhai scripts. -/// -/// # Arguments -/// -/// * `engine` - A mutable reference to the Rhai engine to register modules with -/// -/// # Example -/// -/// ```rust -/// use rhai::Engine; -/// use runner_rust::engine::osis::register_dsl_modules; -/// -/// let mut engine = Engine::new(); -/// register_dsl_modules(&mut engine); -/// -/// // Engine now has access to all DSL functions -/// let result = engine.eval::(r#" -/// let company = new_company().name("Test Corp"); -/// company.name -/// "#).unwrap(); -/// assert_eq!(result, "Test Corp"); -/// ``` -/// -/// # Registered Modules -/// -/// This function registers the following domain modules: -/// - Access control functions -/// - Business operation functions (companies, products, sales, shareholders) -/// - Calendar and scheduling functions -/// - Circle and community management functions -/// - Company management functions -/// - Contact management functions -/// - Core utility functions -/// - Financial operation functions (accounts, assets, marketplace) -/// - Workflow management functions (flows, steps, signatures) -/// - Library and content management functions -/// - Generic object manipulation functions (custom implementation) -pub fn register_dsl_modules(engine: &mut Engine) { - rhailib_dsl::access::register_access_rhai_module(engine); - rhailib_dsl::biz::register_biz_rhai_module(engine); - rhailib_dsl::calendar::register_calendar_rhai_module(engine); - rhailib_dsl::circle::register_circle_rhai_module(engine); - rhailib_dsl::company::register_company_rhai_module(engine); - rhailib_dsl::contact::register_contact_rhai_module(engine); - rhailib_dsl::core::register_core_rhai_module(engine); - rhailib_dsl::finance::register_finance_rhai_modules(engine); - // rhailib_dsl::flow::register_flow_rhai_modules(engine); - rhailib_dsl::library::register_library_rhai_module(engine); - // Skip problematic object module for now - can be implemented separately if needed - // rhailib_dsl::object::register_object_fns(engine); - rhailib_dsl::payment::register_payment_rhai_module(engine); - - // Register basic object functionality directly - register_object_functions(engine); - // heromodels::heroledger::rhai::register_heroledger_rhai_modules(&mut engine); - - - println!("Rhailib Domain Specific Language modules registered successfully."); -} - -/// Create a new osis engine instance. -pub fn create_osis_engine() -> Engine { - let mut engine = Engine::new(); - register_dsl_modules(&mut engine); - hero_logger::rhai_integration::configure_rhai_logging(&mut engine, "osis_actor"); - engine -} - -/// Create a shared osis engine using the factory. -pub fn create_shared_osis_engine() -> Arc { - EngineFactory::global().get_engine() -} diff --git a/src/engine/system.rs b/src/engine/system.rs deleted file mode 100644 index 9e163a0..0000000 --- a/src/engine/system.rs +++ /dev/null @@ -1,124 +0,0 @@ -use std::sync::{Arc, OnceLock}; -// Re-export common Rhai types for convenience -pub use rhai::{Array, Dynamic, Engine, EvalAltResult, Map}; - -// Re-export specific functions from sal-os package -pub use sal_os::rhai::{ - delete, - // Download functions - download, - download_install, - // File system functions - exist, - file_size, - find_dir, - find_dirs, - find_file, - find_files, - mkdir, - register_os_module, - rsync, -}; - -// Re-export Redis client module registration function -pub use sal_redisclient::rhai::register_redisclient_module; - -// Re-export PostgreSQL client module registration function -pub use sal_postgresclient::rhai::register_postgresclient_module; - -pub use sal_process::rhai::{ - kill, - process_get, - process_list, - register_process_module, - // Run functions - // Process management functions - which, -}; - -// Re-export virt functions from sal-virt package -pub use sal_virt::rhai::nerdctl::{ - nerdctl_copy, - nerdctl_exec, - nerdctl_image_build, - nerdctl_image_commit, - nerdctl_image_pull, - nerdctl_image_push, - nerdctl_image_remove, - nerdctl_image_tag, - // Image functions - nerdctl_images, - nerdctl_list, - nerdctl_remove, - // Container functions - nerdctl_run, - nerdctl_run_with_name, - nerdctl_run_with_port, - nerdctl_stop, -}; -pub use sal_virt::rhai::{ - bah_new, register_bah_module, register_nerdctl_module, register_rfs_module, -}; - -pub use sal_git::rhai::register_git_module; -pub use sal_git::{GitRepo, GitTree}; -pub use sal_zinit_client::rhai::register_zinit_module; -pub use sal_mycelium::rhai::register_mycelium_module; -pub use sal_text::rhai::register_text_module; -pub use sal_net::rhai::register_net_module; -pub use sal_kubernetes::rhai::register_kubernetes_module; -pub use sal_kubernetes::KubernetesManager; -pub use sal_os::rhai::copy as os_copy; -pub use sal_hetzner::rhai::register_hetzner_module; - -/// Engine factory for creating and sharing Rhai engines with SAL modules. -pub struct EngineFactory { - engine: Arc, -} - -impl EngineFactory { - /// Create a new engine factory with a configured Rhai engine. - pub fn new() -> Self { - let mut engine = Engine::new(); - register_sal_modules(&mut engine); - // Logger - hero_logger::rhai_integration::configure_rhai_logging(&mut engine, "system_actor"); - - Self { - engine: Arc::new(engine), - } - } - - /// Get a shared reference to the engine. - pub fn get_engine(&self) -> Arc { - Arc::clone(&self.engine) - } - - /// Get the global singleton engine factory. - pub fn global() -> &'static EngineFactory { - static FACTORY: OnceLock = OnceLock::new(); - FACTORY.get_or_init(|| EngineFactory::new()) - } -} - -pub fn register_sal_modules(engine: &mut Engine) { - let _ = sal_os::rhai::register_os_module(engine); - let _ = sal_redisclient::rhai::register_redisclient_module(engine); - let _ = sal_postgresclient::rhai::register_postgresclient_module(engine); - let _ = sal_process::rhai::register_process_module(engine); - let _ = sal_virt::rhai::register_virt_module(engine); - let _ = sal_git::rhai::register_git_module(engine); - let _ = sal_zinit_client::rhai::register_zinit_module(engine); - let _ = sal_mycelium::rhai::register_mycelium_module(engine); - let _ = sal_text::rhai::register_text_module(engine); - let _ = sal_net::rhai::register_net_module(engine); - let _ = sal_kubernetes::rhai::register_kubernetes_module(engine); - let _ = sal_hetzner::rhai::register_hetzner_module(engine); - - println!("SAL modules registered successfully."); -} - -/// Create a shared system engine using the factory. -pub fn create_system_engine() -> Arc { - EngineFactory::global().get_engine() -} diff --git a/src/lib.rs b/src/lib.rs index 9e0f35b..79b94df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,4 @@ // Core modules -pub mod engine; pub mod async_runner; pub mod sync_runner; pub mod runner_trait; @@ -11,8 +10,6 @@ pub mod client; pub use runner_trait::{Runner, RunnerConfig, spawn_runner}; pub use async_runner::{AsyncRunner, spawn_async_runner}; pub use sync_runner::{SyncRunner, SyncRunnerConfig, spawn_sync_runner}; -pub use engine::system::{register_sal_modules, create_system_engine}; -pub use engine::osis::{register_dsl_modules, create_osis_engine, create_shared_osis_engine}; // Re-export job types from local job module pub use job::{Job, JobStatus, JobError, JobBuilder}; diff --git a/src/sync_runner.rs b/src/sync_runner.rs index 214f45f..05c38bc 100644 --- a/src/sync_runner.rs +++ b/src/sync_runner.rs @@ -3,6 +3,7 @@ use crate::runner_trait::Runner; use log::{debug, error, info}; use rhai::{Engine, Dynamic}; use std::sync::Arc; +use tracing::subscriber::with_default; /// Configuration for sync runner instances #[derive(Debug, Clone)] @@ -72,11 +73,58 @@ impl Runner for SyncRunner { debug!("Sync Runner '{}', Job {}: Processing started.", runner_id, job_id); info!("Sync Runner '{}' processing job_id: {}. Script: {:.50}...", job.context_id, job_id, job.payload); - // Create a new engine instance (cheap with factory pattern) - let mut engine = (self.engine_factory)(); + // Determine logs directory (default to ~/hero/logs) + let logs_root = if let Some(home) = std::env::var_os("HOME") { + std::path::PathBuf::from(home).join("hero").join("logs") + } else { + std::path::PathBuf::from("logs") + }; - // Execute the script - match Self::execute_job_with_engine(&mut engine, &job) { + // Create job-specific logger + let job_logger_result = hero_logger::create_job_logger_with_guard( + &logs_root, + runner_id, // Use runner_id as the actor_type + job_id, + ); + + // Verify signatures before executing (if any) + if let Err(e) = job.verify_signatures() { + error!("Job {} signature verification failed: {}", job_id, e); + return Err(Box::new(e)); + } + + // Execute job within logging context + let result = match job_logger_result { + Ok((job_logger, _guard)) => { + // Execute ALL job processing within logging context + with_default(job_logger, || { + tracing::info!("Job {} started", job_id); + + // Create a new engine instance and configure Rhai logging + let mut engine = (self.engine_factory)(); + + // Reconfigure Rhai logging for this specific job context + // This ensures print() and debug() calls go to the job logger + hero_logger::rhai_integration::configure_rhai_logging(&mut engine, runner_id); + + // Execute the script + let script_result = Self::execute_job_with_engine(&mut engine, &job); + + tracing::info!("Job {} completed", job_id); + + script_result + }) + } + Err(e) => { + error!("Failed to create job logger for job {}: {}", job_id, e); + // Fallback: execute without job-specific logging + let mut engine = (self.engine_factory)(); + Self::execute_job_with_engine(&mut engine, &job) + } + }; + + // Process result + match result { Ok(result) => { let output_str = if result.is::() { result.into_string().unwrap() diff --git a/tests/e2e_tests.rs b/tests/e2e_tests.rs index 22ecb75..8020c8e 100644 --- a/tests/e2e_tests.rs +++ b/tests/e2e_tests.rs @@ -1,118 +1,212 @@ -use std::process::Command; use std::time::Duration; -use tokio::time::timeout; +use tokio::time::sleep; +use runner_rust::{JobBuilder, Client}; +use runner_rust::job::JobSignature; +use uuid::Uuid; +use rhai::Engine; -/// Test the SAL runner in script mode with a simple ping script +/// Helper function to create a SAL engine for testing +fn create_test_sal_engine() -> Engine { + // Create a basic Rhai engine for testing + Engine::new() +} + +/// Test job execution with empty signatures array +/// This verifies that jobs without signatures can execute successfully #[tokio::test] -async fn test_sal_runner_script_mode_ping() { - let output = timeout( - Duration::from_secs(10), - run_sal_runner_script_mode("test_sal_ping") - ).await; - - match output { - Ok(result) => { - assert!(result.is_ok(), "SAL runner should execute successfully"); - let stdout = result.unwrap(); - assert!(stdout.contains("pong"), - "Output should contain 'pong' response: {}", stdout); - } - Err(_) => panic!("Test timed out after 10 seconds"), - } +async fn test_job_execution_without_signatures() { + let redis_url = "redis://localhost:6379"; + let runner_id = format!("test-runner-{}", Uuid::new_v4()); + + // Create client + let mut client = Client::builder() + .redis_url(redis_url) + .build() + .await + .expect("Failed to create client"); + + // Create job with empty signatures array + let job = JobBuilder::new() + .caller_id("test_caller") + .context_id("test_context") + .payload("print(\"Hello from unsigned job\");") + .runner(&runner_id) + .executor("rhai") + .timeout(30) + .build() + .expect("Job creation should succeed"); + + let job_id = job.id.clone(); + + // Verify signatures array is empty + assert!(job.signatures.is_empty(), "Job should have no signatures"); + + // Save job to Redis + client.store_job_in_redis(&job).await + .expect("Failed to save job to Redis"); + + // Queue the job + client.dispatch_job(&job_id, &runner_id).await + .expect("Failed to queue job"); + + // Spawn runner in background + let runner_id_clone = runner_id.clone(); + let redis_url_clone = redis_url.to_string(); + let runner_handle = tokio::spawn(async move { + let (shutdown_tx, shutdown_rx) = tokio::sync::mpsc::channel::<()>(1); + + // Run for 5 seconds then shutdown + tokio::spawn(async move { + sleep(Duration::from_secs(5)).await; + let _ = shutdown_tx.send(()).await; + }); + + runner_rust::spawn_sync_runner( + runner_id_clone, + redis_url_clone, + shutdown_rx, + create_test_sal_engine, + ).await + }); + + // Wait for job to be processed + sleep(Duration::from_secs(3)).await; + + // Check job result + let result = client.get_result(&job_id).await + .expect("Failed to get job result"); + + assert!(result.is_some(), "Job should have produced a result"); + + // Cleanup + let _ = runner_handle.await; + client.delete_job(&job_id).await.ok(); } -/// Test the OSIS runner in script mode with a simple ping script +/// Test job signature verification with valid signatures +/// This verifies that jobs with valid signatures are accepted #[tokio::test] -async fn test_osis_runner_script_mode_ping() { - let output = timeout( - Duration::from_secs(10), - run_osis_runner_script_mode("test_osis_ping") - ).await; - - match output { - Ok(result) => { - assert!(result.is_ok(), "OSIS runner should execute successfully"); - let stdout = result.unwrap(); - assert!(stdout.contains("pong"), - "Output should contain 'pong' response: {}", stdout); - } - Err(_) => panic!("Test timed out after 10 seconds"), - } +async fn test_job_signature_verification() { + use secp256k1::{Secp256k1, SecretKey, Message}; + use sha2::{Sha256, Digest}; + + let redis_url = "redis://localhost:6379"; + let runner_id = format!("test-runner-{}", Uuid::new_v4()); + + // Create client + let mut client = Client::builder() + .redis_url(redis_url) + .build() + .await + .expect("Failed to create client"); + + // Generate a keypair for signing + let secp = Secp256k1::new(); + let secret_key = SecretKey::from_slice(&[0xcd; 32]) + .expect("32 bytes, within curve order"); + let public_key = secp256k1::PublicKey::from_secret_key(&secp, &secret_key); + + // Create job + let mut job = JobBuilder::new() + .caller_id("test_caller") + .context_id("test_context") + .payload("print(\"Hello from signed job\");") + .runner(&runner_id) + .executor("rhai") + .timeout(30) + .build() + .expect("Job creation should succeed"); + + let job_id = job.id.clone(); + + // Sign the job + let canonical = job.canonical_representation(); + let mut hasher = Sha256::new(); + hasher.update(canonical.as_bytes()); + let hash = hasher.finalize(); + let message = Message::from_digest_slice(&hash) + .expect("32 bytes"); + let signature = secp.sign_ecdsa(&message, &secret_key); + + // Add signature to job + job.signatures.push(JobSignature { + public_key: hex::encode(public_key.serialize()), + signature: hex::encode(signature.serialize_compact()), + }); + + // Verify the job has a signature + assert_eq!(job.signatures.len(), 1, "Job should have one signature"); + + // Verify signatures are valid + job.verify_signatures() + .expect("Signature verification should succeed"); + + // Save and queue job + client.store_job_in_redis(&job).await + .expect("Failed to save job to Redis"); + client.dispatch_job(&job_id, &runner_id).await + .expect("Failed to queue job"); + + // Spawn runner + let runner_id_clone = runner_id.clone(); + let redis_url_clone = redis_url.to_string(); + let runner_handle = tokio::spawn(async move { + let (shutdown_tx, shutdown_rx) = tokio::sync::mpsc::channel::<()>(1); + + tokio::spawn(async move { + sleep(Duration::from_secs(5)).await; + let _ = shutdown_tx.send(()).await; + }); + + runner_rust::spawn_sync_runner( + runner_id_clone, + redis_url_clone, + shutdown_rx, + create_test_sal_engine, + ).await + }); + + // Wait for processing + sleep(Duration::from_secs(3)).await; + + // Check result + let result = client.get_result(&job_id).await + .expect("Failed to get job result"); + + assert!(result.is_some(), "Signed job should have produced a result"); + + // Cleanup + let _ = runner_handle.await; + client.delete_job(&job_id).await.ok(); } -/// Helper function to run SAL runner in script mode -async fn run_sal_runner_script_mode( - runner_id: &str -) -> Result> { - let output = Command::new("cargo") - .args(&[ - "run", "--bin", "runner_sal", "--", - runner_id, - "-s", "ping" - ]) - .output()?; - - if output.status.success() { - Ok(String::from_utf8_lossy(&output.stdout).to_string()) - } else { - let stderr = String::from_utf8_lossy(&output.stderr); - Err(format!("Command failed: {}", stderr).into()) - } -} - -/// Helper function to run OSIS runner in script mode -async fn run_osis_runner_script_mode( - runner_id: &str -) -> Result> { - let output = Command::new("cargo") - .args(&[ - "run", "--bin", "runner_osis", "--", - runner_id, - "-s", "ping" - ]) - .output()?; - - if output.status.success() { - Ok(String::from_utf8_lossy(&output.stdout).to_string()) - } else { - let stderr = String::from_utf8_lossy(&output.stderr); - Err(format!("Command failed: {}", stderr).into()) - } -} - -/// Test basic compilation and help output +/// Test job with invalid signature is rejected #[tokio::test] -async fn test_sal_runner_help() { - let output = Command::new("cargo") - .args(&["run", "--bin", "runner_sal", "--", "--help"]) - .output() - .expect("Failed to execute command"); - - assert!(output.status.success(), "Help command should succeed"); - let stdout = String::from_utf8_lossy(&output.stdout); - assert!(stdout.contains("Usage") || stdout.contains("USAGE"), - "Help output should contain usage information"); +async fn test_job_invalid_signature_rejected() { + // Create job with invalid signature + let mut job = JobBuilder::new() + .caller_id("test_caller") + .context_id("test_context") + .payload("print(\"This should fail\");") + .runner("test-runner") + .executor("rhai") + .build() + .expect("Job creation should succeed"); + + // Add invalid signature + job.signatures.push(JobSignature { + public_key: "04invalid_public_key".to_string(), + signature: "invalid_signature".to_string(), + }); + + // Verify signatures should fail + let result = job.verify_signatures(); + assert!(result.is_err(), "Invalid signature should be rejected"); } -/// Test basic compilation and help output for OSIS runner -#[tokio::test] -async fn test_osis_runner_help() { - let output = Command::new("cargo") - .args(&["run", "--bin", "runner_osis", "--", "--help"]) - .output() - .expect("Failed to execute command"); - - assert!(output.status.success(), "Help command should succeed"); - let stdout = String::from_utf8_lossy(&output.stdout); - assert!(stdout.contains("Usage") || stdout.contains("USAGE"), - "Help output should contain usage information"); -} - -/// Test library functionality - job creation and basic operations +/// Test job creation and serialization #[tokio::test] async fn test_job_creation_and_serialization() { - use runner_rust::JobBuilder; - let job = JobBuilder::new() .caller_id("test_caller") .context_id("test_context") @@ -127,4 +221,17 @@ async fn test_job_creation_and_serialization() { assert_eq!(job.payload, "ping"); assert_eq!(job.runner, "default"); assert_eq!(job.executor, "rhai"); + assert!(job.signatures.is_empty(), "Default job should have no signatures"); + + // Test serialization + let json = serde_json::to_string(&job) + .expect("Job should serialize to JSON"); + + // Test deserialization + let deserialized: runner_rust::Job = serde_json::from_str(&json) + .expect("Job should deserialize from JSON"); + + assert_eq!(job.id, deserialized.id); + assert_eq!(job.caller_id, deserialized.caller_id); + assert_eq!(job.signatures.len(), deserialized.signatures.len()); }