diff --git a/Cargo.lock b/Cargo.lock index dc76921f..963b4257 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,9 +72,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" dependencies = [ "cssparser", - "html5ever", + "html5ever 0.35.0", "maplit", - "tendril", + "tendril 0.4.3", "url", ] @@ -192,6 +192,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-once-cell" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" + [[package]] name = "async-stream" version = "0.3.6" @@ -489,6 +495,17 @@ dependencies = [ "cpufeatures 0.2.17", ] +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + [[package]] name = "chacha20poly1305" version = "0.10.1" @@ -496,7 +513,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", + "chacha20 0.9.1", "cipher", "poly1305", "zeroize", @@ -979,30 +996,29 @@ checksum = "0c03c416ed1a30fbb027ef484ba6ab6f80e1eada675e1a2b92fd673c045a1f1d" [[package]] name = "deadpool" -version = "0.12.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +checksum = "883466cb8db62725aee5f4a6011e8a5d42912b42632df32aad57fc91127c6e04" dependencies = [ "deadpool-runtime", - "lazy_static", "num_cpus", "tokio", ] [[package]] name = "deadpool-runtime" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "2657f61fb1dd8bf37a8d51093cc7cee4e77125b22f7753f49b289f831bec2bae" dependencies = [ "tokio", ] [[package]] name = "deadpool-sync" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524bc3df0d57e98ecd022e21ba31166c2625e7d3e5bcc4510efaeeab4abcab04" +checksum = "e385cc95d3d582c328b36d1ff90feac061102b001894b555e6b465a2e0eaabbf" dependencies = [ "deadpool-runtime", ] @@ -1012,10 +1028,6 @@ name = "decancer" version = "3.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9244323129647178bf41ac861a2cdb9d9c81b9b09d3d0d1de9cd302b33b8a1d" -dependencies = [ - "lazy_static", - "regex", -] [[package]] name = "delegate-display" @@ -1611,10 +1623,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", "wasip2", "wasip3", + "wasm-bindgen", ] [[package]] @@ -1835,10 +1850,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" dependencies = [ "log", - "markup5ever", + "markup5ever 0.35.0", "match_token", ] +[[package]] +name = "html5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" +dependencies = [ + "log", + "markup5ever 0.39.0", +] + [[package]] name = "http" version = "1.4.0" @@ -1849,15 +1874,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-auth" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150fa4a9462ef926824cf4519c84ed652ca8f4fbae34cb8af045b5cbcaf98822" -dependencies = [ - "memchr", -] - [[package]] name = "http-body" version = "1.0.1" @@ -1924,7 +1940,7 @@ dependencies = [ "pulldown-cmark", "rand 0.9.4", "regex", - "reqwest 0.13.3", + "reqwest", "rust-embed", "serde", "serde_json", @@ -1937,7 +1953,7 @@ dependencies = [ "tempfile", "tokio", "tokio-tungstenite 0.29.0", - "toml 1.1.2+spec-1.1.0", + "toml", "uuid", "wait-timeout", "walkdir", @@ -1987,7 +2003,6 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots", ] [[package]] @@ -2428,21 +2443,11 @@ dependencies = [ [[package]] name = "konst" -version = "0.3.17" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97feab15b395d1860944abe6a8dd8ed9f8eadfae01750fada8427abda531d887" +checksum = "f660d5f887e3562f9ab6f4a14988795b694099d66b4f5dedc02d197ba9becb1d" dependencies = [ "const_panic", - "konst_kernel", - "typewit", -] - -[[package]] -name = "konst_kernel" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4b1eb7788f3824c629b1116a7a9060d6e898c358ebff59070093d51103dcc3c" -dependencies = [ "typewit", ] @@ -2622,8 +2627,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" dependencies = [ "log", - "tendril", - "web_atoms", + "tendril 0.4.3", + "web_atoms 0.1.3", +] + +[[package]] +name = "markup5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" +dependencies = [ + "log", + "tendril 0.5.0", + "web_atoms 0.2.4", ] [[package]] @@ -2662,14 +2678,15 @@ dependencies = [ [[package]] name = "matrix-sdk" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f107149dd12799248287744f9757de9b1b5ddf4cd0135231658e5501536c7ad7" +checksum = "3bd53c36a55668a96eed57633a1347046271a9f9ce542a07f30e6a840e26f31f" dependencies = [ "anymap2", "aquamarine", "as_variant", "async-channel", + "async-once-cell", "async-stream", "async-trait", "backon", @@ -2695,11 +2712,14 @@ dependencies = [ "mime", "mime2ext", "oauth2", - "once_cell", + "oauth2-reqwest", "percent-encoding", "pin-project-lite", - "reqwest 0.12.28", + "reqwest", "ruma", + "rustls", + "rustls-native-certs", + "rustls-pki-types", "serde", "serde_html_form", "serde_json", @@ -2713,14 +2733,15 @@ dependencies = [ "url", "urlencoding", "vodozemac", + "webpki-roots", "zeroize", ] [[package]] name = "matrix-sdk-base" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6373c2555b018d22f0a9ccfc0391ad7e77e9a2872d6363fa9b3752d86381eff" +checksum = "5a70b7aacc8429de35940f73ac1cff9679a764205f7c51d4e8f236b538442d79" dependencies = [ "as_variant", "async-trait", @@ -2733,7 +2754,6 @@ dependencies = [ "matrix-sdk-common", "matrix-sdk-crypto", "matrix-sdk-store-encryption", - "once_cell", "regex", "ruma", "serde", @@ -2746,9 +2766,9 @@ dependencies = [ [[package]] name = "matrix-sdk-common" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4f835df70f57d8a9db30820d06983f76b78b6b90d8ef3df7397250795704fb" +checksum = "697b45015c5b7128027fee8adf9f9f32a75a97ba8326bb9c7265fb90bcf2d766" dependencies = [ "eyeball-im", "futures-core", @@ -2770,9 +2790,9 @@ dependencies = [ [[package]] name = "matrix-sdk-crypto" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb6b2fc6da6f6a8d09bf115fe6f6205071fd7855a16a834832b4b0b9fc335e" +checksum = "948582d5461fa4066117e0a08828df16c3041d5f0c17aca679041fed30b4284a" dependencies = [ "aes", "aquamarine", @@ -2791,7 +2811,7 @@ dependencies = [ "js_option", "matrix-sdk-common", "pbkdf2", - "rand 0.8.6", + "rand 0.10.1", "rmp-serde", "ruma", "serde", @@ -2811,14 +2831,14 @@ dependencies = [ [[package]] name = "matrix-sdk-indexeddb" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51c32df5db1985460431ca44fc4f41b3fdd38b1e33bd7fcf23f4941398a492b4" +checksum = "6484e88308cfdf6deff13122a6b927c03936ec262d0fbb03bac7a0c73ae95c89" dependencies = [ "async-trait", "base64", "futures-util", - "getrandom 0.2.17", + "getrandom 0.4.2", "gloo-utils", "hkdf", "js-sys", @@ -2843,9 +2863,9 @@ dependencies = [ [[package]] name = "matrix-sdk-sqlite" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7769c4d3e7fabd50d82b60f17e2c7b6b7336d9a03f766e785ecab3fe8fa7679f" +checksum = "4d797f59498ea3db5341742fcf3765e3cf7418f6ddf667526b5ed12cb4aba6dc" dependencies = [ "as_variant", "async-trait", @@ -2871,17 +2891,18 @@ dependencies = [ [[package]] name = "matrix-sdk-store-encryption" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a872689adca327ce6dbadaac93bd9558ae3a7c5ab4c3177596dd01492085f747" +checksum = "1728926a2bcdd33329c87c0da9d832d8eb610ecd4676ca5d38c108fab91b0102" dependencies = [ "base64", "blake3", "chacha20poly1305", "getrandom 0.2.17", + "getrandom 0.4.2", "hmac 0.12.1", "pbkdf2", - "rand 0.8.6", + "rand 0.10.1", "rmp-serde", "serde", "serde_json", @@ -3177,7 +3198,6 @@ dependencies = [ "getrandom 0.2.17", "http", "rand 0.8.6", - "reqwest 0.12.28", "serde", "serde_json", "serde_path_to_error", @@ -3186,6 +3206,16 @@ dependencies = [ "url", ] +[[package]] +name = "oauth2-reqwest" +version = "0.1.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234fb5c965bbce983ee5de636a7a51d6a3223da8067ea02f9ab2d2d78ac08be2" +dependencies = [ + "oauth2", + "reqwest", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -3256,7 +3286,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac 0.12.1", ] [[package]] @@ -3293,16 +3322,36 @@ dependencies = [ "phf_shared 0.12.1", ] +[[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]] name = "phf_codegen" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator", + "phf_generator 0.11.3", "phf_shared 0.11.3", ] +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + [[package]] name = "phf_generator" version = "0.11.3" @@ -3313,13 +3362,23 @@ dependencies = [ "rand 0.8.6", ] +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + [[package]] name = "phf_macros" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "phf_generator", + "phf_generator 0.11.3", "phf_shared 0.11.3", "proc-macro2", "quote", @@ -3344,6 +3403,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-lite" version = "0.2.17" @@ -3573,9 +3641,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.5" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", "prost-derive", @@ -3583,9 +3651,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.5" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3710,6 +3778,17 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -3748,6 +3827,12 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "rand_xoshiro" version = "0.7.0" @@ -3868,48 +3953,6 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tokio-util", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams 0.4.2", - "web-sys", - "webpki-roots", -] - [[package]] name = "reqwest" version = "0.13.3" @@ -3950,7 +3993,7 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams 0.5.0", + "wasm-streams", "web-sys", ] @@ -4018,9 +4061,9 @@ dependencies = [ [[package]] name = "ruma" -version = "0.14.1" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f620a2116d0d3082f9256e61dcdf67f2ec266d3f6bb9d2f9c8a20ec5a1fabb" +checksum = "e420da038fd6529af5abffe21df50ba122e1b4a84db05c02ec05b5ab0a21a320" dependencies = [ "assign", "js_int", @@ -4028,21 +4071,19 @@ dependencies = [ "ruma-client-api", "ruma-common", "ruma-events", - "ruma-federation-api", "ruma-html", "web-time", ] [[package]] name = "ruma-client-api" -version = "0.22.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc977d1a91ea15dcf896cbd7005ed4a253784468833638998109ffceaee53e7" +checksum = "3a793e13cc9c354385e4f635b5eca581abe76169a9fafd8c530918f9b19f8d63" dependencies = [ "as_variant", "assign", "bytes", - "date_header", "http", "js_int", "js_option", @@ -4059,22 +4100,22 @@ dependencies = [ [[package]] name = "ruma-common" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a01993f22d291320b7c9267675e7395775e95269ff526e2c8c3ed5e13175b" +checksum = "b69b11cb6ccf0e27c3c44c50e2e4799337921c66d4e6a490c084f18c5b4481ec" dependencies = [ "as_variant", "base64", "bytes", + "date_header", "form_urlencoded", - "getrandom 0.2.17", + "getrandom 0.4.2", "http", "indexmap 2.14.0", - "js-sys", "js_int", "konst", "percent-encoding", - "rand 0.8.6", + "rand 0.10.1", "regex", "ruma-identifiers-validation", "ruma-macros", @@ -4093,57 +4134,33 @@ dependencies = [ [[package]] name = "ruma-events" -version = "0.32.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dbdeccb62cb4ffe3282325de8ba28cbc0fdce7c78a3f11b7241fbfdb9cb9907" +checksum = "c96e3c39ab1b692086d02513fe0c24400d864060880bbd2716cb5544f5923131" dependencies = [ "as_variant", "indexmap 2.14.0", "js_int", "js_option", - "percent-encoding", - "regex", "ruma-common", - "ruma-identifiers-validation", "ruma-macros", "serde", "serde_json", "thiserror 2.0.18", "tracing", - "url", "web-time", "wildmatch", "zeroize", ] -[[package]] -name = "ruma-federation-api" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb45c15badbf4299c6113a6b90df3e7cb64edbe756bbd8e0224144b56b38305" -dependencies = [ - "headers", - "http", - "http-auth", - "js_int", - "mime", - "ruma-common", - "ruma-events", - "ruma-signatures", - "serde", - "serde_json", - "thiserror 2.0.18", - "tracing", -] - [[package]] name = "ruma-html" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6dcd6e9823e177d15460d3cd3a413f38a2beea381f26aca1001c05cd6954ff" +checksum = "c1d81a7300e8623dbf5e6d73e700f0277fce6824849d77779ed997ec4e280b97" dependencies = [ "as_variant", - "html5ever", + "html5ever 0.39.0", "tracing", "wildmatch", ] @@ -4160,9 +4177,9 @@ dependencies = [ [[package]] name = "ruma-macros" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a0753312ad577ac462de1742bf2e326b6ba9856ff6f13343aeb17d423fd5426" +checksum = "6ac022103cd7829721476d3df79d16125be159e99527c8ddb27f125e7b674e5c" dependencies = [ "as_variant", "cfg-if", @@ -4172,23 +4189,7 @@ dependencies = [ "ruma-identifiers-validation", "serde", "syn 2.0.117", - "toml 0.9.12+spec-1.1.0", -] - -[[package]] -name = "ruma-signatures" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146ace2cd59b60ec80d3e801a84e7e6a91e3e01d18a9f5d896ea7ca16a6b8e08" -dependencies = [ - "base64", - "ed25519-dalek", - "pkcs8", - "rand 0.8.6", - "ruma-common", - "serde_json", - "sha2 0.10.9", - "thiserror 2.0.18", + "toml", ] [[package]] @@ -4274,8 +4275,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "aws-lc-rs", + "log", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", @@ -4496,9 +4497,9 @@ dependencies = [ [[package]] name = "serde_html_form" -version = "0.2.8" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" +checksum = "0946d52b4b7e28823148aebbeceb901012c595ad737920d504fa8634bb099e6f" dependencies = [ "form_urlencoded", "indexmap 2.14.0", @@ -4997,18 +4998,42 @@ dependencies = [ "serde", ] +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.13.1", + "precomputed-hash", +] + [[package]] name = "string_cache_codegen" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator", + "phf_generator 0.11.3", "phf_shared 0.11.3", "proc-macro2", "quote", ] +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + [[package]] name = "stringprep" version = "0.1.5" @@ -5119,6 +5144,16 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tendril" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +dependencies = [ + "new_debug_unreachable", + "utf-8", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -5326,19 +5361,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.9.12+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" -dependencies = [ - "serde_core", - "serde_spanned", - "toml_datetime 0.7.5+spec-1.1.0", - "toml_parser", - "winnow 0.7.15", -] - [[package]] name = "toml" version = "1.1.2+spec-1.1.0" @@ -5348,19 +5370,10 @@ dependencies = [ "indexmap 2.14.0", "serde_core", "serde_spanned", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.2", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", + "winnow", ] [[package]] @@ -5379,9 +5392,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap 2.14.0", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", - "winnow 1.0.2", + "winnow", ] [[package]] @@ -5390,7 +5403,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.2", + "winnow", ] [[package]] @@ -5479,18 +5492,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", ] [[package]] @@ -5504,7 +5505,6 @@ dependencies = [ "smallvec", "thread_local", "tracing-core", - "tracing-log", ] [[package]] @@ -5559,15 +5559,6 @@ name = "typewit" version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "214ca0b2191785cbc06209b9ca1861e048e39b5ba33574b3cedd58363d5bb5f6" -dependencies = [ - "typewit_proc_macros", -] - -[[package]] -name = "typewit_proc_macros" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" [[package]] name = "ulid" @@ -5692,12 +5683,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "vcpkg" version = "0.2.15" @@ -5712,9 +5697,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vodozemac" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c022a277687e4e8685d72b95a7ca3ccfec907daa946678e715f8badaa650883d" +checksum = "b98bf83c0992966775b8012f194b07b44928996163e5a05b741b43891571ae5b" dependencies = [ "aes", "arrayvec", @@ -5875,19 +5860,6 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasm-streams" version = "0.5.0" @@ -5959,9 +5931,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" dependencies = [ "phf 0.11.3", - "phf_codegen", - "string_cache", - "string_cache_codegen", + "phf_codegen 0.11.3", + "string_cache 0.8.9", + "string_cache_codegen 0.5.4", +] + +[[package]] +name = "web_atoms" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", ] [[package]] @@ -6359,12 +6343,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winnow" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" - [[package]] name = "winnow" version = "1.0.2" diff --git a/Cargo.toml b/Cargo.toml index e5201a38..531bad11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,20 +38,7 @@ uuid = { version = "1.23.1", features = ["v4", "serde"] } tokio-tungstenite = { version = "0.29.0", features = ["connect", "rustls-tls-native-roots"] } walkdir = "2.5.0" filetime = "0.2" -# Pinned to 0.16.x: matrix-sdk 0.17.0 uses Duration::from_mins (stabilised in -# Rust 1.93) and declares rust-version = "1.93". Our toolchain is 1.90 and the -# rustup directory is read-only in this environment, so 0.17 cannot be compiled. -# Once the image ships Rust ≥1.93, bump this to "0.17" and remove this comment. -# -# rand@0.8 residual (unavoidable on 0.16.x): vodozemac v0.9, oauth2 v5, and -# ruma-common v0.17 all depend on rand 0.8. These are eliminated in matrix-sdk -# 0.17 where vodozemac moves to 0.10 and ruma to 0.15; until then the residual -# is intentional and audited — no hand-rolled crypto is involved. -# -# libsqlite3-sys: both matrix-sdk-sqlite 0.16 (via rusqlite 0.37) and sqlx -# 0.9.0-alpha.1 resolve to libsqlite3-sys 0.35.0; there is no version conflict. -matrix-sdk = { version = "0.16", default-features = false, features = [ - "rustls-tls", +matrix-sdk = { version = "0.17", default-features = false, features = [ "sqlite", "e2e-encryption", ] } diff --git a/crates/bft-json-crdt/src/json_crdt/value.rs b/crates/bft-json-crdt/src/json_crdt/value.rs index 4681627a..3800c40b 100644 --- a/crates/bft-json-crdt/src/json_crdt/value.rs +++ b/crates/bft-json-crdt/src/json_crdt/value.rs @@ -10,8 +10,9 @@ use crate::{keypair::AuthorId, list_crdt::ListCrdt, lww_crdt::LwwRegisterCrdt, o use super::{CrdtNode, CrdtNodeFromValue}; /// An enum representing a JSON value -#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] pub enum JsonValue { + #[default] Null, Bool(bool), Number(f64), @@ -61,12 +62,6 @@ impl Display for JsonValue { } } -impl Default for JsonValue { - fn default() -> Self { - Self::Null - } -} - /// Allow easy conversion to and from serde's JSON format. This allows us to use the [`json!`] /// macro impl From for serde_json::Value { diff --git a/crates/bft-json-crdt/src/list_crdt.rs b/crates/bft-json-crdt/src/list_crdt.rs index 7efbf6a4..09961939 100644 --- a/crates/bft-json-crdt/src/list_crdt.rs +++ b/crates/bft-json-crdt/src/list_crdt.rs @@ -299,9 +299,12 @@ where fn index(&self, idx: usize) -> &Self::Output { let mut i = 0; for op in &self.ops { - if !op.is_deleted && op.content.is_some() { + if op.is_deleted { + continue; + } + if let Some(content) = op.content.as_ref() { if idx == i { - return op.content.as_ref().unwrap(); + return content; } i += 1; } @@ -318,9 +321,12 @@ where fn index_mut(&mut self, idx: usize) -> &mut Self::Output { let mut i = 0; for op in &mut self.ops { - if !op.is_deleted && op.content.is_some() { + if op.is_deleted { + continue; + } + if let Some(content) = op.content.as_mut() { if idx == i { - return op.content.as_mut().unwrap(); + return content; } i += 1; } diff --git a/server/src/chat/commands/loc.rs b/server/src/chat/commands/loc.rs index 502f7959..c913cf50 100644 --- a/server/src/chat/commands/loc.rs +++ b/server/src/chat/commands/loc.rs @@ -135,7 +135,7 @@ fn loc_top_n(project_root: &std::path::Path, top_n: usize) -> String { }) .collect(); - files.sort_by(|a, b| b.0.cmp(&a.0)); + files.sort_by_key(|b| std::cmp::Reverse(b.0)); files.truncate(top_n); if files.is_empty() { diff --git a/server/src/chat/transport/matrix/bot/mentions.rs b/server/src/chat/transport/matrix/bot/mentions.rs index 21b217a7..458e35f2 100644 --- a/server/src/chat/transport/matrix/bot/mentions.rs +++ b/server/src/chat/transport/matrix/bot/mentions.rs @@ -61,7 +61,7 @@ pub(super) async fn is_reply_to_bot( bot_sent_event_ids: &TokioMutex>, ) -> bool { let candidate_ids: Vec<&OwnedEventId> = match relates_to { - Some(Relation::Reply { in_reply_to }) => vec![&in_reply_to.event_id], + Some(Relation::Reply(reply)) => vec![&reply.in_reply_to.event_id], Some(Relation::Thread(thread)) => { let mut ids = vec![&thread.event_id]; if let Some(irti) = &thread.in_reply_to { @@ -216,8 +216,9 @@ mod tests { sent.lock().await.insert(event_id.clone()); let in_reply_to = matrix_sdk::ruma::events::relation::InReplyTo::new(event_id); - let relates_to: Option> = - Some(Relation::Reply { in_reply_to }); + let relates_to: Option> = Some( + Relation::Reply(matrix_sdk::ruma::events::relation::Reply::new(in_reply_to)), + ); assert!(is_reply_to_bot(relates_to.as_ref(), &sent).await); } @@ -231,8 +232,9 @@ mod tests { let in_reply_to = matrix_sdk::ruma::events::relation::InReplyTo::new( "$other:example.com".parse::().unwrap(), ); - let relates_to: Option> = - Some(Relation::Reply { in_reply_to }); + let relates_to: Option> = Some( + Relation::Reply(matrix_sdk::ruma::events::relation::Reply::new(in_reply_to)), + ); assert!(!is_reply_to_bot(relates_to.as_ref(), &sent).await); } diff --git a/server/src/chat/transport/matrix/bot/run.rs b/server/src/chat/transport/matrix/bot/run.rs index 9cc43bbb..58f9ea39 100644 --- a/server/src/chat/transport/matrix/bot/run.rs +++ b/server/src/chat/transport/matrix/bot/run.rs @@ -92,7 +92,9 @@ pub async fn run_bot( { use matrix_sdk::ruma::api::client::uiaa; let password_auth = uiaa::AuthData::Password(uiaa::Password::new( - uiaa::UserIdentifier::UserIdOrLocalpart(config.username.clone().unwrap_or_default()), + uiaa::UserIdentifier::Matrix(uiaa::MatrixUserIdentifier::new( + config.username.clone().unwrap_or_default(), + )), config.password.clone().unwrap_or_default(), )); if let Err(e) = client diff --git a/server/src/chat/transport/matrix/transport_impl.rs b/server/src/chat/transport/matrix/transport_impl.rs index b6d73534..721890ac 100644 --- a/server/src/chat/transport/matrix/transport_impl.rs +++ b/server/src/chat/transport/matrix/transport_impl.rs @@ -48,7 +48,7 @@ impl ChatTransport for MatrixTransport { .await .map_err(|e| format!("Matrix send error: {e}"))?; - Ok(resp.event_id.to_string()) + Ok(resp.response.event_id.to_string()) } async fn edit_message( diff --git a/server/src/chat/util.rs b/server/src/chat/util.rs index 73f5dd84..7c313d28 100644 --- a/server/src/chat/util.rs +++ b/server/src/chat/util.rs @@ -156,10 +156,7 @@ fn is_inside_code_fence(text: &str) -> bool { pub fn drain_complete_paragraphs(buffer: &mut String) -> Vec { let mut paragraphs = Vec::new(); let mut search_from = 0; - loop { - let Some(pos) = buffer[search_from..].find("\n\n") else { - break; - }; + while let Some(pos) = buffer[search_from..].find("\n\n") { let abs_pos = search_from + pos; // Only split at this boundary when we are NOT inside a code fence. if is_inside_code_fence(&buffer[..abs_pos]) { diff --git a/server/src/cli.rs b/server/src/cli.rs index 25f073a9..7a6f1baf 100644 --- a/server/src/cli.rs +++ b/server/src/cli.rs @@ -200,6 +200,7 @@ pub(crate) fn resolve_path_arg(path_str: Option<&str>, cwd: &std::path::Path) -> #[cfg(test)] mod tests { use super::*; + use std::path::Path; #[test] fn parse_no_args() { @@ -411,9 +412,7 @@ mod tests { fn resolve_path_arg_returns_path_for_absolute_arg() { let cwd = PathBuf::from("/home/user/project"); let result = resolve_path_arg(Some("/some/absolute/path"), &cwd).unwrap(); - assert!( - result.ends_with("absolute/path") || result == PathBuf::from("/some/absolute/path") - ); + assert!(result.ends_with("absolute/path") || result == Path::new("/some/absolute/path")); } #[test] diff --git a/server/src/crdt_sync/server/mod.rs b/server/src/crdt_sync/server/mod.rs index 15c63f77..fbeed75d 100644 --- a/server/src/crdt_sync/server/mod.rs +++ b/server/src/crdt_sync/server/mod.rs @@ -44,13 +44,11 @@ pub async fn crdt_sync_handler( // ── Bearer-token check (pre-upgrade) ──────────────────────────── let require_token = REQUIRE_TOKEN.get().copied().unwrap_or(false); match ¶ms.token { - Some(t) => { - if !validate_join_token(t) { - slog!("[crdt-sync] Rejected connection: invalid or expired token"); - return poem::Response::builder() - .status(StatusCode::UNAUTHORIZED) - .body("invalid or expired token"); - } + Some(t) if !validate_join_token(t) => { + slog!("[crdt-sync] Rejected connection: invalid or expired token"); + return poem::Response::builder() + .status(StatusCode::UNAUTHORIZED) + .body("invalid or expired token"); } None if require_token => { slog!("[crdt-sync] Rejected connection: token required but not provided"); @@ -58,7 +56,7 @@ pub async fn crdt_sync_handler( .status(StatusCode::UNAUTHORIZED) .body("token required"); } - None => {} + _ => {} } // ── WebSocket upgrade ──────────────────────────────────────────── diff --git a/server/src/http/mcp/story_tools/criteria.rs b/server/src/http/mcp/story_tools/criteria.rs index bba5d89e..7c10a20e 100644 --- a/server/src/http/mcp/story_tools/criteria.rs +++ b/server/src/http/mcp/story_tools/criteria.rs @@ -101,16 +101,13 @@ pub(crate) fn tool_ensure_acceptance(args: &Value, ctx: &AppContext) -> Result = - std::sync::OnceLock::new(); - EMPTY.get_or_init(Default::default) - }, - |r| r, - ) + file_results.as_ref().unwrap_or_else(|| { + // No results anywhere — use empty default for the acceptance check + // (it will fail with "No test results recorded") + static EMPTY: std::sync::OnceLock = + std::sync::OnceLock::new(); + EMPTY.get_or_init(Default::default) + }) }; let coverage = workflow.coverage.get(story_id); diff --git a/server/src/http/ws/mod.rs b/server/src/http/ws/mod.rs index b44ce7c7..69f42b24 100644 --- a/server/src/http/ws/mod.rs +++ b/server/src/http/ws/mod.rs @@ -90,11 +90,8 @@ pub async fn ws_handler(ws: WebSocket, ctx: Data<&Arc>) -> impl poem let mut pending_perms: HashMap> = HashMap::new(); - loop { - // Outer loop: wait for the next WebSocket message. - let Some(Ok(WsMessage::Text(text))) = stream.next().await else { - break; - }; + // Outer loop: wait for the next WebSocket message. + while let Some(Ok(WsMessage::Text(text))) = stream.next().await { // Handle read-RPC frames (discriminated by "kind", not "type"). if let Some(rpc_resp) = crate::crdt_sync::try_handle_rpc_text(&text).await {