From 447113bdd062f441552d501d1f50493edbd29965 Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Sun, 4 Oct 2026 19:12:58 -0500 Subject: [PATCH] Restore progressive agent output and reduce repeated narration Forward text and reasoning events as they arrive while retaining canonical history without replaying output. Tighten shared communication guidance and add streaming-order regression coverage. Include the staged dependency refresh. --- Cargo.lock | 647 +++++++++--------- app/src/ai/provider/request_translator.rs | 2 +- .../ai/runtime/provider_run_coordinator.rs | 79 +-- .../runtime/provider_run_coordinator_tests.rs | 103 ++- app/src/ai/runtime/rig_request.rs | 2 +- 5 files changed, 450 insertions(+), 383 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 13e4786b..7a8989a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "agent-client-protocol-derive" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8d5f32208cdc11238004bec4e4229d68fb937598f900e153468ca084865fa5" +checksum = "f4893bfb11e0e193aa5a64611a126ee87567acb1879556519c902722899229de" dependencies = [ "quote", "syn 3.0.6", @@ -165,7 +165,7 @@ dependencies = [ "schemars 1.2.2", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", "strum 0.28.0", "tracing", ] @@ -269,7 +269,7 @@ dependencies = [ "strum_macros 0.27.2", "syntax_tree", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "typed-path 0.10.0", "unicode-width 0.1.14", @@ -306,15 +306,15 @@ dependencies = [ [[package]] name = "alloc-no-stdlib" -version = "2.0.4" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" +checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a" [[package]] name = "alloc-stdlib" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1" dependencies = [ "alloc-no-stdlib", ] @@ -369,7 +369,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -1158,9 +1158,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.48" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb61aea1a7def73ee7c350a184f0e70b32c182344e2e75bf70c9b621b83417fd" +checksum = "ee19bd99b43e3691acbad4e840420a4881cea6c0b66a208125a824f8fd53f5a1" dependencies = [ "compression-codecs", "compression-core", @@ -1253,13 +1253,13 @@ dependencies = [ [[package]] name = "async-recursion" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +checksum = "4f8abc12baad266b1c8cec146854c195b5864b4221d4b2ca7296a7ae82d9e451" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -1413,7 +1413,7 @@ dependencies = [ "num-traits", "pastey 0.1.1", "rayon", - "thiserror 2.0.20", + "thiserror 2.0.21", "v_frame", "y4m", ] @@ -1516,9 +1516,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b43ad47adc2517efe3d706559d94b97e50e80e0321b3cadbc9f77cee88adcd" +checksum = "2b8a9911551b4ea6ca13805ef52ed96f7d2bbb43cc3b4a14cb0776a71f33cfaa" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -1533,7 +1533,7 @@ dependencies = [ "bytes-utils", "fastrand 2.5.0", "http 1.5.0", - "http-body 1.1.0", + "http-body", "percent-encoding", "pin-project-lite", "tracing", @@ -1542,9 +1542,9 @@ dependencies = [ [[package]] name = "aws-sdk-bedrock" -version = "1.157.0" +version = "1.161.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347e5d5ea47f43415003507fbd8aacecc8f7ccd09a2455f2b5e376921905e48f" +checksum = "254169f7bd61c2189a0142067000ed89ab15a032b8b8cebf426fabeb425ad611" dependencies = [ "arc-swap", "aws-credential-types", @@ -1560,7 +1560,6 @@ dependencies = [ "aws-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "regex-lite", "tracing", @@ -1568,9 +1567,9 @@ dependencies = [ [[package]] name = "aws-sdk-bedrockruntime" -version = "1.145.0" +version = "1.148.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed4de4a98241f9dd95ddad4223755b7afc3327d0a148a2a29286c95ef64db5e" +checksum = "3f2542c0f038223ba2f9aefe3bd38c7395ccc6899d8fc58a99b8ddfeab3354f5" dependencies = [ "arc-swap", "aws-credential-types", @@ -1588,7 +1587,6 @@ dependencies = [ "aws-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "http-body-util", "regex-lite", @@ -1597,9 +1595,9 @@ dependencies = [ [[package]] name = "aws-sdk-signin" -version = "1.24.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17ee48a8e3721e74125e2b29dcd9077a75d2cb6e44509444048fc4df1ce3b11" +checksum = "88f2f0eef24cb4502ff62c73319cb641e64bbea1f0ad05bf3d7f8def062a99c0" dependencies = [ "arc-swap", "aws-credential-types", @@ -1615,7 +1613,6 @@ dependencies = [ "aws-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "regex-lite", "tracing", @@ -1623,9 +1620,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.111.0" +version = "1.114.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65700d75f6da78c89a61a49f1539979400a4609d3329376b1dc2133d7a1b2b90" +checksum = "12be2f9c8eef7f5fc919c96d538e629698469a02b4cb75408b26b1bd984ebe79" dependencies = [ "arc-swap", "aws-credential-types", @@ -1641,7 +1638,6 @@ dependencies = [ "aws-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "regex-lite", "tracing", @@ -1649,9 +1645,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.113.0" +version = "1.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1147c254af7b6cee3ace90ae7da6f21366ce9a9b899035fa8a0fdf586eb75a" +checksum = "d7645db8724ea3b82fdccfb67e1b0f637c9d8ab0e7ef29d84884d8d8d73f805d" dependencies = [ "arc-swap", "aws-credential-types", @@ -1667,7 +1663,6 @@ dependencies = [ "aws-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "regex-lite", "tracing", @@ -1675,9 +1670,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.116.0" +version = "1.119.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035c7392e751d20bf1060d625d023587eb14099646110a9cff7c697bfe4b253a" +checksum = "03e490aa904849b38e770922faac779dd245f5cf8be81f19065acf18d276e4ad" dependencies = [ "arc-swap", "aws-credential-types", @@ -1694,7 +1689,6 @@ dependencies = [ "aws-smithy-xml", "aws-types", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", "regex-lite", "tracing", @@ -1702,9 +1696,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d955e76ff96acd555bf06fa0fa6d5bf9335fa84ae7c64481b20ae61d231f70" +checksum = "2312577f088c9fbf4206dfdb884cf1de9407b43e1a923cbed5237775116fc24b" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -1715,7 +1709,6 @@ dependencies = [ "form_urlencoded", "hex", "hmac 0.13.0", - "http 0.2.12", "http 1.5.0", "percent-encoding", "sha2 0.11.0", @@ -1747,9 +1740,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.64.0" +version = "0.64.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37843d9add67c3aff5856f409c6dc315d3cdff60f9c0cb5b670dab1e9920306d" +checksum = "639b4d8f8555f24a9be649811c3eb0b4d4616f4d61daf0c32e28873bc1ea9af1" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -1759,7 +1752,7 @@ dependencies = [ "futures-core", "futures-util", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "percent-encoding", "pin-project-lite", @@ -1769,9 +1762,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd25384a4e437aa8d8f339afad4b69e786b936a7cb10db668a7aaf66717b1a8" +checksum = "51c89cc3f1f281d659a67a519a1b5c6d445b5ce09fa7e5aee40c2c2707e9509d" dependencies = [ "aws-smithy-async", "aws-smithy-protocol-test", @@ -1780,7 +1773,7 @@ dependencies = [ "bytes", "h2", "http 1.5.0", - "http-body 1.1.0", + "http-body", "hyper", "hyper-rustls", "hyper-util", @@ -1833,7 +1826,7 @@ dependencies = [ "regex-lite", "roxmltree 0.14.1", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -1851,9 +1844,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.14.2" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3296253d3a91b3f938a3f2bcce4daebadcb4aa4228153fcec90f9d23532b4484" +checksum = "d6e302ac1d88b99652489df31abdec6ac42a2ab2ac3982ad0ac49f64dfaf28ba" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -1864,10 +1857,8 @@ dependencies = [ "aws-smithy-types", "bytes", "fastrand 2.5.0", - "http 0.2.12", "http 1.5.0", - "http-body 0.4.6", - "http-body 1.1.0", + "http-body", "http-body-util", "pin-project-lite", "pin-utils", @@ -1877,15 +1868,14 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.16.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d881a7b7ad179fd6611680c9de89f716fb00ab40299a9a7b8c6913e8f7511a8" +checksum = "c0730c16f91124c6a2abb4932c77e299288b3dd9f967ea2e9ec48cc6731e87a4" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", - "http 0.2.12", "http 1.5.0", "pin-project-lite", "tokio", @@ -1917,18 +1907,16 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.6.4" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b791f3ac597193fe1d08b82366986eb1f5bc31f2ac6c194c0855276116c76cd" +checksum = "69bb407740a197147da48238ecc94498493c9e85445732360cec180296ca45f1" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", - "http 0.2.12", "http 1.5.0", - "http-body 0.4.6", - "http-body 1.1.0", + "http-body", "http-body-util", "itoa", "num-integer", @@ -1979,7 +1967,7 @@ dependencies = [ "form_urlencoded", "futures-util", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "hyper", "hyper-util", @@ -2010,7 +1998,7 @@ dependencies = [ "bytes", "futures-core", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -2031,7 +2019,7 @@ dependencies = [ "bytes", "futures-util", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -2319,18 +2307,18 @@ dependencies = [ [[package]] name = "bon" -version = "3.10.1" +version = "3.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60eafe0d77c3a2fc292c1d1346c3041b33c0a108085a2afabf672b70f69dbbc9" +checksum = "214f5df094ce551a10a30ffb9c70243d61f121a3d985a6495933e181dee6a7d2" dependencies = [ "bon-macros", ] [[package]] name = "bon-macros" -version = "3.10.1" +version = "3.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0f9631d8aaaee112c41985d675ef269e02acbd4f33122836af4f0c5f699ff6" +checksum = "2706da6c749998cc555d04184909608956a69ad3f8ab1a076fbc867b4a3c3ce5" dependencies = [ "darling 0.24.1", "ident_case", @@ -2378,9 +2366,9 @@ checksum = "2225b558afc76c596898f5f1b3fc35cfce0eb1b13635cbd7d1b2a7177dc10ccd" [[package]] name = "brotli" -version = "8.0.4" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +checksum = "f8b851b75c23ca7873623d612fe49bd1989aeb03d08fb9432187eb253d3d4c6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -2389,9 +2377,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "5.0.3" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +checksum = "941cd9bd4ddab83cb46fa5a2d428f1c857b24ac78cb876cf7beb710840934bd7" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -2590,7 +2578,7 @@ dependencies = [ "rand_distr", "rayon", "safetensors", - "thiserror 2.0.20", + "thiserror 2.0.21", "yoke", "zip 7.2.0", ] @@ -2608,7 +2596,7 @@ dependencies = [ "rayon", "safetensors", "serde", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -2668,9 +2656,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.6" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630" dependencies = [ "find-msvc-tools", "jobserver", @@ -2987,7 +2975,7 @@ dependencies = [ "serde", "session-sharing-protocol", "settings_value", - "thiserror 2.0.20", + "thiserror 2.0.21", "uuid", "warp_server_auth", ] @@ -3172,7 +3160,7 @@ dependencies = [ "libc", "log", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "win32job", "windows 0.62.2", ] @@ -3216,9 +3204,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef16c47ba2797aa6a909cc37d39911f3a6743811fe7408ac0b0cc0276b656e9" +checksum = "98fc98460ba0ad5317075d3632b8dfc45d0be8c4a49347c2a38272019717614a" dependencies = [ "brotli", "compression-core", @@ -4176,7 +4164,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -4722,13 +4710,12 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.41" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" +checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" dependencies = [ "cfg-if", "core_detect", - "multiversion", "multiversion_no_op", "rustversion", "scopeguard", @@ -5028,7 +5015,7 @@ dependencies = [ "prost", "prost-reflect", "prost-types", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -5071,9 +5058,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "findshlibs" @@ -5089,9 +5076,9 @@ dependencies = [ [[package]] name = "finl_unicode" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" +checksum = "80bb028c8b4148c9ee0cca68fcd9add6044e81d3619f48577ddf13a263d047a2" [[package]] name = "firebase" @@ -5802,7 +5789,7 @@ dependencies = [ "sysinfo", "tabwriter", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "thousands", "tikv-jemallocator", "tokio", @@ -5867,7 +5854,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -5969,7 +5956,7 @@ dependencies = [ "shellexpand", "smol_str", "string-offset", - "thiserror 2.0.20", + "thiserror 2.0.21", "typed-path 0.10.0", "warp-command-signatures", ] @@ -6022,7 +6009,7 @@ dependencies = [ "strum_macros 0.27.2", "sysinfo", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tracing", "url", @@ -6074,7 +6061,7 @@ dependencies = [ "serde_yaml 0.8.26", "string-offset", "sum_tree", - "thiserror 2.0.20", + "thiserror 2.0.21", "unicode-width 0.1.14", "urlocator", "vec1", @@ -6104,7 +6091,7 @@ dependencies = [ "remote_server", "repo_metadata", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "watcher", ] @@ -6129,7 +6116,7 @@ dependencies = [ "persistence", "reqwest", "serde", - "thiserror 2.0.20", + "thiserror 2.0.21", "websocket", "ws_stream_wasm", ] @@ -6155,7 +6142,7 @@ dependencies = [ "log", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -6166,7 +6153,7 @@ dependencies = [ "cfg-if", "rquickjs", "serde", - "thiserror 2.0.20", + "thiserror 2.0.21", "uuid", ] @@ -6211,7 +6198,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "tink-core", "tink-hybrid", "tink-proto", @@ -6285,7 +6272,7 @@ dependencies = [ "serde_json", "session-sharing-protocol", "settings_value", - "thiserror 2.0.20", + "thiserror 2.0.21", "url", "uuid", "warp_server_auth", @@ -6318,7 +6305,7 @@ dependencies = [ "smol_str", "static_assertions", "string-offset", - "thiserror 2.0.20", + "thiserror 2.0.21", "typed-path 0.10.0", "unicode-segmentation", "unicode-width 0.1.14", @@ -6351,7 +6338,7 @@ dependencies = [ "regex", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "typed-path 0.10.0", "windows 0.62.2", ] @@ -6443,8 +6430,8 @@ dependencies = [ "serde", "sum_tree", "takecell", - "tauri-winrt-notification", - "thiserror 2.0.20", + "tauri-winrt-notification 0.7.3", + "thiserror 2.0.21", "tini", "url", "urlencoding", @@ -6535,7 +6522,7 @@ dependencies = [ "strum_macros 0.27.2", "sum_tree", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "titlecase", "tokio", "tracing", @@ -6566,7 +6553,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "toml_edit 0.25.15+spec-1.1.0", "windows 0.62.2", "windows-registry 0.2.0", @@ -6872,7 +6859,7 @@ dependencies = [ "objc2 0.6.4", "objc2-app-kit 0.3.2", "once_cell", - "thiserror 2.0.20", + "thiserror 2.0.21", "windows-sys 0.59.0", "x11rb", "xkeysym", @@ -7033,9 +7020,9 @@ dependencies = [ [[package]] name = "google-cloud-aiplatform-v1" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289946d961832a02966886f8a415ad734394def699ff82875ff00f03ca13ef28" +checksum = "4412d2c31b046f8bbf8f70481bf907b78d035fa03e4870b3150daee4de70ed71" dependencies = [ "async-trait", "bytes", @@ -7049,9 +7036,12 @@ dependencies = [ "google-cloud-rpc", "google-cloud-type", "google-cloud-wkt", + "http 1.5.0", + "prost", + "prost-types", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", "tracing", ] @@ -7065,14 +7055,14 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", ] [[package]] name = "google-cloud-auth" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff461519b1a948200f163574be072753bcfb462a323f0eb426629d89872dd685" +checksum = "ac9870b8ea484519aa8601e14886f2efc148ea490034e43d04bef1d246170cc9" dependencies = [ "async-trait", "aws-lc-rs", @@ -7091,7 +7081,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.11.0", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", "tokio", "url", @@ -7099,9 +7089,9 @@ dependencies = [ [[package]] name = "google-cloud-gax" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5615cff28ee59cfe52fbb4c11b8b1e77f650296e2ea4f4c2b7757ac6b19e752" +checksum = "fc64ee071c0d22cb68662b454f1bea5424506cafeaddc51260fbc585bac1d29d" dependencies = [ "bytes", "futures", @@ -7109,19 +7099,19 @@ dependencies = [ "google-cloud-wkt", "http 1.5.0", "pin-project", - "rand 0.10.2", + "rand 0.10.3", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-stream", ] [[package]] name = "google-cloud-gax-internal" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2766757d877a7a8ac23da9884cb0e3f10ed9b75a0ce59801ce6b19bf9d5819e" +checksum = "e873f7e6e39030c07b6d9697bf3b999a269175c8b433e058f56ae10d129f12f7" dependencies = [ "bytes", "futures", @@ -7131,7 +7121,7 @@ dependencies = [ "google-cloud-wkt", "h2", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "hyper", "lazy_static", @@ -7146,7 +7136,7 @@ dependencies = [ "rustc_version", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-stream", "tonic", @@ -7158,9 +7148,9 @@ dependencies = [ [[package]] name = "google-cloud-iam-v1" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f962b40234b1531e6ef73f7558871c96e117231e962086c98804323fb8d2c82" +checksum = "48f0895fa7b7bd70629ae58daaa962677e93a72c251b2f297bc058a035940821" dependencies = [ "async-trait", "bytes", @@ -7170,15 +7160,15 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", "tracing", ] [[package]] name = "google-cloud-location" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280d5acdba8fcb1232c0719ed788d85b7e362b82cbb425b7050d3ce46f075ede" +checksum = "0c01fde700ea72005d09d5c37e6837fa9460f2ec6b20a147db46c248b63b4519" dependencies = [ "async-trait", "bytes", @@ -7187,15 +7177,15 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", "tracing", ] [[package]] name = "google-cloud-longrunning" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0363c5389ffda2b55cd8a86eef4b19a3481a48467c91dc5d77f626a9572766" +checksum = "e8ea252eee22a4e2187025ea6789c682a0d791a9748ea99de2abec3026a32cb4" dependencies = [ "async-trait", "bytes", @@ -7205,15 +7195,15 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", "tracing", ] [[package]] name = "google-cloud-lro" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47af3deef75c14a2983c430898d960c765bddbcc9f9188ca0563108e9227cfe7" +checksum = "dfb938b40ede9ef70c24f49c2687d84f289c9e9104ddfece739985e4b4844b8f" dependencies = [ "google-cloud-gax", "google-cloud-gax-internal", @@ -7235,7 +7225,7 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", ] [[package]] @@ -7248,21 +7238,21 @@ dependencies = [ "google-cloud-wkt", "serde", "serde_json", - "serde_with 3.23.0", + "serde_with 3.24.0", ] [[package]] name = "google-cloud-wkt" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fccf98cfd5481a5f5a285181ab0c62123d7d47cd2bb7299448440649349e4e7" +checksum = "7f3037907e542cf8b8580aa4cf8ad68568d7ac8e7274519a7d0a121867d434da" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "serde", "serde_json", - "serde_with 3.23.0", - "thiserror 2.0.20", + "serde_with 3.24.0", + "thiserror 2.0.21", "time", "url", ] @@ -7277,7 +7267,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.20", + "thiserror 2.0.21", "windows 0.62.2", ] @@ -7600,9 +7590,9 @@ dependencies = [ [[package]] name = "hmac-sha256" -version = "1.1.14" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9d92d097f4749b64e8cc33d924d9f40a2d4eb91402b458014b781f5733d60f" +checksum = "1ad320b3b96fb2a455a0726d16efe0a5afdbd34b71dea5bc53b05ea057714d4e" [[package]] name = "home" @@ -7683,17 +7673,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.1.0" @@ -7713,7 +7692,7 @@ dependencies = [ "bytes", "futures-core", "http 1.5.0", - "http-body 1.1.0", + "http-body", "pin-project-lite", ] @@ -7800,7 +7779,7 @@ dependencies = [ "futures-core", "h2", "http 1.5.0", - "http-body 1.1.0", + "http-body", "httparse", "httpdate", "itoa", @@ -7812,9 +7791,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.9" +version = "0.27.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" dependencies = [ "http 1.5.0", "hyper", @@ -7841,16 +7820,17 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "futures-channel", "futures-util", "http 1.5.0", - "http-body 1.1.0", + "http-body", + "httparse", "hyper", "ipnet", "libc", @@ -8207,9 +8187,9 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf84e73fa6f27f299dec58e13223cf70db80da872eb921d4f6138342a0eabc8" +checksum = "4c3b5acc1e2fd9375041a388da33d1eb8aed5f7a8c0dd3543e3ea2805adfbe20" dependencies = [ "darling 0.24.1", "indoc", @@ -8345,7 +8325,7 @@ dependencies = [ "parking_lot", "rand 0.8.8", "serde", - "thiserror 2.0.20", + "thiserror 2.0.21", "uuid", ] @@ -8362,7 +8342,7 @@ dependencies = [ "markdown_parser", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -8655,7 +8635,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.20", + "thiserror 2.0.21", "walkdir", "windows-link 0.2.1", ] @@ -8713,9 +8693,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", @@ -8787,7 +8767,7 @@ checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" dependencies = [ "hashbrown 0.16.1", "portable-atomic", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -8901,9 +8881,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "lazycell" @@ -8925,9 +8905,9 @@ checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" [[package]] name = "libfuzzer-sys" @@ -8969,9 +8949,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" dependencies = [ "bitflags 2.13.2", "libc", @@ -9067,7 +9047,7 @@ dependencies = [ "serde_json", "shell-words", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "uuid", ] @@ -9166,9 +9146,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.18.4" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9840bcc50b71349309900da0ce7279aa336ae71d73250b07998932c7d97c25" +checksum = "ef9ac18847474e638e3702b76c65d4eb93428471a74778ef0f1be711717f89b5" dependencies = [ "hashbrown 0.17.1", ] @@ -9294,12 +9274,12 @@ dependencies = [ [[package]] name = "mac_address" -version = "1.1.8" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" +checksum = "b367b50a9be9a5d3b5718c1da74e5d6b9c17647f89752ee2562a470cc3c4eb1a" dependencies = [ - "nix 0.29.0", - "winapi", + "nix 0.30.1", + "windows-sys 0.61.2", ] [[package]] @@ -9360,7 +9340,7 @@ dependencies = [ "markup5ever_rcdom", "nom 7.1.3", "serde_yaml 0.8.26", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -9455,7 +9435,7 @@ dependencies = [ "serde_json", "simple_logger", "sse-stream", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tracing", "url", @@ -9633,9 +9613,9 @@ checksum = "c505b3e17ed6b70a7ed2e67fbb2c560ee327353556120d6e72f5232b6880d536" [[package]] name = "mio" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "log", @@ -9680,7 +9660,7 @@ dependencies = [ "colored", "futures-core", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "hyper", "hyper-util", @@ -9732,27 +9712,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" -[[package]] -name = "multiversion" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" -dependencies = [ - "multiversion-macros", -] - -[[package]] -name = "multiversion-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" -dependencies = [ - "proc-macro2", - "quote", - "rustversion", - "syn 3.0.6", -] - [[package]] name = "multiversion_no_op" version = "1.0.0" @@ -9807,7 +9766,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.20", + "thiserror 2.0.21", "unicode-ident", ] @@ -9952,6 +9911,18 @@ name = "nix" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.13.2", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags 2.13.2", "cfg-if", @@ -10060,15 +10031,15 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.18.0" +version = "4.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b4c1b4f2aa9f25f63a7a49d3dd0ed567b3670da15330a66b29434be899b891" +checksum = "fe430c879247371c47fdedd328ad4e301e6b30b533c5fd5db1c06d75253d0e46" dependencies = [ "futures-lite 2.6.1", "log", "mac-notification-sys", "serde", - "tauri-winrt-notification", + "tauri-winrt-notification 0.8.1", "zbus", ] @@ -10905,29 +10876,29 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0142c63252a9e054e68a4c61a5778f7b14f576274d593f8ce883d191a099682" +checksum = "6cdb0b1b267eb9db3331b434ed9ddab10d50e280a9adf9d13e5233e2002b61b5" dependencies = [ "futures-core", "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.20", + "thiserror 2.0.21", "tracing", ] [[package]] name = "opentelemetry-semantic-conventions" -version = "0.32.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c913ac17a6c451661ee255f4625d143e51647ae78ebd969b75e41c4442f4fe47" +checksum = "d288b1e1bc3590052fbb8f0f635ef248dd9022cf1fbaeb6582b7ad6081a17b87" [[package]] name = "opentelemetry_sdk" -version = "0.32.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b59f80e1ac4d5ff7a2db8fb6c80badb7f0f3f858211fba08dd9aaec750894f9" +checksum = "cb39533d9d1c912123efd7d41d7e0c29d16917b60ce15b4c8d87cb1af7f67520" dependencies = [ "futures-channel", "futures-executor", @@ -10936,7 +10907,7 @@ dependencies = [ "percent-encoding", "portable-atomic", "rand 0.9.5", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -11303,9 +11274,9 @@ dependencies = [ [[package]] name = "pest" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d45aeb61b4bf818e12d4205f2466f8c4748f85f4fce0146d1c03d69d753f0ad" +checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" dependencies = [ "memchr", "ucd-trie", @@ -11313,9 +11284,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc5a242e25ed4e7704d0be240f2cfbe20a8c27e7e252d94835be93d92dc39f" +checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" dependencies = [ "pest", "pest_generator", @@ -11323,9 +11294,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abf21475cc3820fe4b2ca2dc2142902f67a02189f3b5b3a229f4febc01a43e5" +checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" dependencies = [ "pest", "pest_meta", @@ -11336,9 +11307,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adba4db388f687393c18c51348d44a41d870ca9df71a2c98172ea3035dc6936e" +checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" dependencies = [ "pest", ] @@ -11414,7 +11385,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher 1.0.3", + "siphasher 1.0.4", ] [[package]] @@ -11451,9 +11422,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "13bee6c73da26345c729282832b60b0363cf3dd9f4bfd81d8551b7a1c889a113" [[package]] name = "pinned" @@ -11649,7 +11620,7 @@ dependencies = [ "spin", "symbolic-demangle", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -11865,9 +11836,9 @@ dependencies = [ [[package]] name = "process-wrap" -version = "9.1.0" +version = "9.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e842efad9119158434d193c6682e2ebee4b44d6ad801d7b349623b3f57cdf55" +checksum = "f95f6259ebd0640685b7cd26d635861f39208df0f89b2b61ff5cf76310fa54f6" dependencies = [ "futures", "indexmap 2.14.2", @@ -12032,9 +12003,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.232" +version = "2.1.239" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62834e308cc83aea5e30cd8c80b8aa82cdb104a3240c7f210d4f68d46e29f308" +checksum = "5736f71353f867ae262bd123b86ddb161f50a2db0300ab762c8f4a0e659635d3" dependencies = [ "psl-types", ] @@ -12138,7 +12109,7 @@ dependencies = [ "rustc-hash 2.1.3", "rustls", "socket2", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tracing", "web-time", @@ -12146,22 +12117,22 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.18" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" +checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe" dependencies = [ "aws-lc-rs", "bytes", "getrandom 0.4.3", "lru-slab", - "rand 0.10.2", + "rand 0.10.3", "rand_pcg", "ring", "rustc-hash 2.1.3", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.20", + "thiserror 2.0.21", "tinyvec", "tracing", "web-time", @@ -12169,9 +12140,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +checksum = "af66907df18639dcf4db56ca65490cabc4b27a97dbadd96f2926cca73298f016" dependencies = [ "cfg_aliases", "libc", @@ -12258,9 +12229,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20 0.10.2", "getrandom 0.4.3", @@ -12371,11 +12342,11 @@ dependencies = [ "hashbrown 0.17.1", "itertools 0.14.0", "kasuari", - "lru 0.18.4", + "lru 0.18.5", "palette 0.7.7", "serde", "strum 0.28.0", - "thiserror 2.0.20", + "thiserror 2.0.21", "unicode-segmentation", "unicode-truncate", "unicode-width 0.2.2", @@ -12474,7 +12445,7 @@ dependencies = [ "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.20", + "thiserror 2.0.21", "v_frame", "wasm-bindgen", ] @@ -12634,7 +12605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" dependencies = [ "libredox", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -12735,7 +12706,7 @@ dependencies = [ "prost-build", "repo_metadata", "serde", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-util", "uuid", @@ -12782,7 +12753,7 @@ dependencies = [ "strum 0.27.2", "strum_macros 0.27.2", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "virtual-fs", "walkdir", "watcher", @@ -12802,7 +12773,7 @@ dependencies = [ "futures-util", "h2", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "hyper", "hyper-rustls", @@ -12816,7 +12787,7 @@ dependencies = [ "quinn", "rustls", "rustls-pki-types", - "rustls-platform-verifier 0.7.0", + "rustls-platform-verifier 0.7.1", "serde", "serde_json", "serde_urlencoded", @@ -12917,7 +12888,7 @@ dependencies = [ "schemars 1.2.2", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-tungstenite", "tracing", @@ -12948,7 +12919,7 @@ dependencies = [ "rig-core", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tracing", ] @@ -13018,7 +12989,7 @@ dependencies = [ "serde", "serde_json", "sse-stream", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-stream", "tokio-util", @@ -13097,7 +13068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" dependencies = [ "hashbrown 0.16.1", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -13338,7 +13309,7 @@ dependencies = [ "once_cell", "rustls", "rustls-native-certs", - "rustls-platform-verifier-android", + "rustls-platform-verifier-android 0.1.1", "rustls-webpki", "security-framework 3.7.0", "security-framework-sys", @@ -13348,9 +13319,9 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +checksum = "1167586491e2b18b8bfbb293e8180ec17c201c4f076d7cb3070ca964e7598f98" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", @@ -13359,7 +13330,7 @@ dependencies = [ "once_cell", "rustls", "rustls-native-certs", - "rustls-platform-verifier-android", + "rustls-platform-verifier-android 0.2.0", "rustls-webpki", "security-framework 3.7.0", "security-framework-sys", @@ -13373,6 +13344,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" +[[package]] +name = "rustls-platform-verifier-android" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" + [[package]] name = "rustls-webpki" version = "0.103.15" @@ -13451,7 +13428,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "554aa12c59a0030f9b96ef955b83d07932371bbec0da172b6fac351da64b5c7e" dependencies = [ "arraydeque", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -13793,9 +13770,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "935177bb8c0cd8ca1a4e6d1a2ac8988bea69cab4f9d3a31311e012ad27868ea4" +checksum = "df9adc193c780ef8f159aee8b61e2d5801aaa555e6eb0947fe45530ec506296f" dependencies = [ "base64 0.23.1", "bs58", @@ -13808,7 +13785,7 @@ dependencies = [ "schemars 1.2.2", "serde_core", "serde_json", - "serde_with_macros 3.23.0", + "serde_with_macros 3.24.0", "time", ] @@ -13826,9 +13803,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d607aa01a3cb0ad757d6fd216136910db3c97b102fe686585689615a02dbcdc" +checksum = "3e17bbc68e28663bbbb90df47e058aa7eda4fb445b89fe70457bb94fbccf6e49" dependencies = [ "darling 0.24.1", "proc-macro2", @@ -14122,7 +14099,7 @@ dependencies = [ "galaxyui_core", "instant", "log", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", ] @@ -14154,9 +14131,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "siphasher" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" [[package]] name = "sketches-ddsketch" @@ -14194,9 +14171,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.16.1" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" +checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" [[package]] name = "smithay-client-toolkit" @@ -14264,9 +14241,9 @@ dependencies = [ [[package]] name = "spinning" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" +checksum = "e3eb3ff294e9174f5c6fae3f9e27b890fd1c5115712b528b4c4e0710f152afa1" dependencies = [ "lock_api", ] @@ -14322,7 +14299,7 @@ checksum = "c25ac7aff0abd1dbc474536e40416e1102c7dd9bfba0b9861c6d357f835dcfb4" dependencies = [ "bytes", "futures-util", - "http-body 1.1.0", + "http-body", "http-body-util", "pin-project-lite", ] @@ -14468,7 +14445,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" dependencies = [ "kurbo", - "siphasher 1.0.3", + "siphasher 1.0.4", ] [[package]] @@ -14594,7 +14571,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "walkdir", "yaml-rust", ] @@ -14719,7 +14696,7 @@ dependencies = [ "tantivy-stacker", "tantivy-tokenizer-api", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", "typetag", "uuid", @@ -14838,11 +14815,22 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.21", "windows 0.61.3", "windows-version", ] +[[package]] +name = "tauri-winrt-notification" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37a6c354fd28fc9e322ed9bd47e3959576dad28c9d58ea1cf888cce1c7ccb36" +dependencies = [ + "thiserror 2.0.21", + "windows 0.62.2", + "windows-version", +] + [[package]] name = "temp-dir" version = "0.1.16" @@ -14949,7 +14937,7 @@ dependencies = [ "phf", "sha2 0.10.9", "signal-hook", - "siphasher 1.0.3", + "siphasher 1.0.4", "terminfo", "termios", "thiserror 1.0.69", @@ -14975,11 +14963,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl 2.0.20", + "thiserror-impl 2.0.21", ] [[package]] @@ -14995,9 +14983,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", @@ -15319,7 +15307,7 @@ dependencies = [ "serde", "serde_json", "spm_precompiled", - "thiserror 2.0.20", + "thiserror 2.0.21", "unicode-normalization-alignments", "unicode-segmentation", "unicode_categories", @@ -15327,9 +15315,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" dependencies = [ "bytes", "libc", @@ -15355,9 +15343,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ "rustls", "tokio", @@ -15457,9 +15445,9 @@ dependencies = [ [[package]] name = "toml-span" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f22ba417d437b5fa5dcba6c27dbd6c14f38845315b724d89fed73b7a426451b7" +checksum = "ac7807845e399906fbe4e7f57369d284d5bf102836423073290b7c01948dbda3" dependencies = [ "smallvec", ] @@ -15559,7 +15547,7 @@ dependencies = [ "base64 0.22.1", "bytes", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "hyper", "hyper-timeout", @@ -15619,7 +15607,7 @@ dependencies = [ "futures-core", "futures-util", "http 1.5.0", - "http-body 1.1.0", + "http-body", "http-body-util", "http-range-header", "httpdate", @@ -15706,9 +15694,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbc64cba7137545b8044cb1fe9814f7aacf3c6b5f9b45be8bb5db538befdb26" +checksum = "0a904802a1b902f43638b677ff2a650847e3b4404101b6c586d648e8c1e3e8fe" dependencies = [ "js-sys", "opentelemetry", @@ -15824,15 +15812,15 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.20", + "thiserror 2.0.21", "utf-8", ] [[package]] name = "twox-hash" -version = "2.1.4" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5283634e518fe9e82c7b20520bb4bc209009fd16c82077c802f8111ecbb0117a" +checksum = "86a801b3cea342a06d468c8710662aa29e5e05e4f5c0d62f00bbb7f2ad7941c2" [[package]] name = "typed-arena" @@ -16151,7 +16139,7 @@ dependencies = [ "roxmltree 0.21.1", "rustybuzz", "simplecss", - "siphasher 1.0.3", + "siphasher 1.0.4", "strict-num", "svgtypes", "tiny-skia-path 0.12.0", @@ -16205,9 +16193,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.26.1" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" +checksum = "97277d36b9c3ace13e58fa6e753f8b0bbbf302a18dd193240d70f9e29681059a" dependencies = [ "atomic", "getrandom 0.4.3", @@ -16344,7 +16332,7 @@ dependencies = [ "log", "parking_lot", "rubato", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -16545,7 +16533,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "uuid", ] @@ -16594,9 +16582,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -16607,19 +16595,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.78" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ "js-sys", + "tokio", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -16627,9 +16616,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", @@ -16640,9 +16629,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] @@ -16783,9 +16772,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -16864,7 +16853,7 @@ dependencies = [ "pin-project", "rustls", "rustls-platform-verifier 0.6.2", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-rustls", "url", @@ -17012,7 +17001,7 @@ dependencies = [ "raw-window-handle 0.6.2", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.20", + "thiserror 2.0.21", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-wasm", @@ -17101,7 +17090,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.20", + "thiserror 2.0.21", "wasm-bindgen", "wayland-sys", "web-sys", @@ -17796,15 +17785,15 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "wl-clipboard-rs" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3" +checksum = "4d7888ccd4896447b2d14d3a9350a85df2aeb6f181e2e7a31349d104ac46cac1" dependencies = [ "libc", "log", "os_pipe", "rustix 1.1.5", - "thiserror 2.0.20", + "thiserror 2.0.21", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -17841,7 +17830,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.20", + "thiserror 2.0.21", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -18018,9 +18007,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", @@ -18106,18 +18095,18 @@ checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" [[package]] name = "zerocopy" -version = "0.8.57" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.57" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82" dependencies = [ "proc-macro2", "quote", @@ -18220,7 +18209,7 @@ dependencies = [ "memchr", "pbkdf2", "sha1", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", "xz2", "zeroize", diff --git a/app/src/ai/provider/request_translator.rs b/app/src/ai/provider/request_translator.rs index e1678946..cded1d37 100644 --- a/app/src/ai/provider/request_translator.rs +++ b/app/src/ai/provider/request_translator.rs @@ -1724,7 +1724,7 @@ pub(crate) fn tool_name_is_supported(name: &str, supported: &HashSet { if !self @@ -764,6 +776,18 @@ impl ProviderRunCoordinator { return Ok(()); } buffer.reasoning.push_str(&text); + if !self + .project_or_fail_acknowledged( + ProviderRunProjection::ModelEvent { + work_id: call.work_id.clone(), + event: AgentEvent::ReasoningDelta { text }, + }, + project, + ) + .await? + { + return Ok(()); + } } AgentEvent::ReasoningCompleted { text, signature } if text.is_empty() && signature.is_none() => @@ -783,6 +807,18 @@ impl ProviderRunCoordinator { } buffer.reasoning.clone_from(&text); buffer.reasoning_signature.clone_from(&signature); + if !self + .project_or_fail_acknowledged( + ProviderRunProjection::ModelEvent { + work_id: call.work_id.clone(), + event: AgentEvent::ReasoningCompleted { text, signature }, + }, + project, + ) + .await? + { + return Ok(()); + } } AgentEvent::Tool { event: ToolEvent::Proposed { call: tool_call }, @@ -829,47 +865,8 @@ impl ProviderRunCoordinator { { return Ok(()); } - // A model can speak before its tool call arrives. Wait until the turn - // finishes so routine tool-turn narration never reaches the conversation. - // Keep it in the canonical turn for provider continuity. - if buffer.tool_calls.is_empty() - && !matches!( - &reason, - StopReason::Cancelled | StopReason::ContextWindowExceeded - ) - { - if !buffer.reasoning.is_empty() - && !self - .project_or_fail_acknowledged( - ProviderRunProjection::ModelEvent { - work_id: call.work_id.clone(), - event: AgentEvent::ReasoningCompleted { - text: buffer.reasoning.clone(), - signature: buffer.reasoning_signature.clone(), - }, - }, - project, - ) - .await? - { - return Ok(()); - } - if !buffer.text.is_empty() - && !self - .project_or_fail_acknowledged( - ProviderRunProjection::ModelEvent { - work_id: call.work_id.clone(), - event: AgentEvent::TextDelta { - text: buffer.text.clone(), - }, - }, - project, - ) - .await? - { - return Ok(()); - } - } + // Output is projected as it arrives. The buffer is only for canonical + // history; replaying it here would duplicate the streamed response. if !self .project_or_fail_acknowledged( ProviderRunProjection::ModelTurnFinished { diff --git a/app/src/ai/runtime/provider_run_coordinator_tests.rs b/app/src/ai/runtime/provider_run_coordinator_tests.rs index 020752f6..88003166 100644 --- a/app/src/ai/runtime/provider_run_coordinator_tests.rs +++ b/app/src/ai/runtime/provider_run_coordinator_tests.rs @@ -20,6 +20,7 @@ type ScriptedTurn = Result, AgentError>; struct ScriptedRuntime { descriptor: RuntimeDescriptor, turns: Mutex>, + events_consumed: Arc, requests: Mutex>, } @@ -37,6 +38,7 @@ impl ScriptedRuntime { capabilities: RuntimeCapabilities::provider(), }, turns: Mutex::new(turns.into()), + events_consumed: Arc::new(AtomicUsize::new(0)), requests: Mutex::new(Vec::new()), } } @@ -64,7 +66,10 @@ impl AgentRuntime for ScriptedRuntime { .unwrap() .pop_front() .expect("scripted runtime ran out of turns")?; - Ok(Box::pin(futures::stream::iter(turn))) + let events_consumed = self.events_consumed.clone(); + Ok(Box::pin(futures::stream::iter(turn).inspect(move |_| { + events_consumed.fetch_add(1, Ordering::Relaxed); + }))) } } @@ -302,7 +307,7 @@ fn answer_turn() -> ScriptedTurn { } #[tokio::test] -async fn tool_turn_narration_stays_in_history_but_out_of_visible_output() { +async fn tool_turn_text_is_streamed_and_retained_in_history() { let runtime = Arc::new(ScriptedRuntime::new(vec![tool_turn()])); let mut coordinator = coordinator(runtime); let mut projections = Vec::new(); @@ -319,15 +324,91 @@ async fn tool_turn_narration_stays_in_history_but_out_of_visible_output() { .transcript() .iter() .any(|message| format!("{:?}", message.content).contains("I will inspect it."))); - assert!(!projections.iter().any(|projection| matches!( - projection, - ProviderRunProjection::ModelEvent { - event: AgentEvent::TextDelta { .. } - | AgentEvent::ReasoningDelta { .. } - | AgentEvent::ReasoningCompleted { .. }, - .. - } - ))); + let text: Vec<_> = projections + .iter() + .filter_map(|projection| match projection { + ProviderRunProjection::ModelEvent { + event: AgentEvent::TextDelta { text }, + .. + } => Some(text.as_str()), + _ => None, + }) + .collect(); + assert_eq!(text, ["I will inspect it."]); +} + +#[tokio::test] +async fn text_and_reasoning_are_projected_before_reading_the_next_stream_event() { + let runtime = Arc::new(ScriptedRuntime::new(vec![Ok(vec![ + started("request-streaming"), + Ok(AgentEvent::TextDelta { + text: "First ".to_string(), + }), + Ok(AgentEvent::ReasoningDelta { + text: "Thinking".to_string(), + }), + Ok(AgentEvent::ReasoningCompleted { + text: "Thinking".to_string(), + signature: Some("signature".to_string()), + }), + Ok(AgentEvent::TextDelta { + text: "second.".to_string(), + }), + usage(10, 4), + stopped(StopReason::Completed), + ])])); + let events_consumed = runtime.events_consumed.clone(); + let mut coordinator = coordinator(runtime); + let mut output = Vec::new(); + let (_sender, control) = turn_control(); + + coordinator + .drive_until_blocked(control, |projection| { + if let ProviderRunProjection::ModelEvent { event, .. } = projection { + if matches!( + event, + AgentEvent::TextDelta { .. } + | AgentEvent::ReasoningDelta { .. } + | AgentEvent::ReasoningCompleted { .. } + ) { + output.push((events_consumed.load(Ordering::Relaxed), event)); + } + } + Ok(()) + }) + .await + .unwrap(); + + assert_eq!( + output, + vec![ + ( + 2, + AgentEvent::TextDelta { + text: "First ".to_string() + } + ), + ( + 3, + AgentEvent::ReasoningDelta { + text: "Thinking".to_string() + } + ), + ( + 4, + AgentEvent::ReasoningCompleted { + text: "Thinking".to_string(), + signature: Some("signature".to_string()), + } + ), + ( + 5, + AgentEvent::TextDelta { + text: "second.".to_string() + } + ), + ] + ); } #[tokio::test] diff --git a/app/src/ai/runtime/rig_request.rs b/app/src/ai/runtime/rig_request.rs index 690e6bfa..90b62fbb 100644 --- a/app/src/ai/runtime/rig_request.rs +++ b/app/src/ai/runtime/rig_request.rs @@ -832,7 +832,7 @@ fn build_system_prompt( "You are Galaxy, a local-first software-engineering and terminal agent. Complete the user's task through inspection, implementation, and proportionate validation. Galaxy owns tool permissions and execution; use only the tools advertised in this request and treat every result as authoritative evidence.\n\n", ); prompt.push_str( - "## Communication Style\nSpeak naturally, warmly, and directly, like a thoughtful collaborator working alongside the user. Work quietly by default while using tools; tool panes already show the activity. Do not send an introductory acknowledgement, plan, or generic progress message. Send prose during work only for a question needing the user's input, a consequential blocker, or a material finding the user needs to act on now. Tool results and compaction checkpoints continue the same request: resume work without another greeting or restatement. Supply the short purpose title requested by each tool schema. Do not narrate routine reads, repeat the plan, or end a turn with only a progress update when useful work can continue. In the final response, lead with the outcome and keep the handoff compact.\n\n", + "## Communication Style\nUse plain, direct language. During implementation, default to tool calls without accompanying prose; follow the Progress Updates contract below. Supply the short purpose title requested by each tool schema. Answer conversational questions naturally. When the task is complete, give one compact, self-contained result with the outcome, relevant validation, and any remaining blocker.\n\n", ); prompt.push_str( "## Execution Contract\nBefore another read or search, identify the missing fact it will resolve. Reuse findings already present in the conversation. Once enough evidence exists for the requested change, implement it and validate; additional inspection should resolve a specific uncertainty. Batch independent reads within the tool limits and wait for results before dependent work. Continue until the user's requested outcome is complete and validated. Do not stop at an intermediate analysis, plan, status update, or promise of future work, and do not ask the user to say \"continue\". After each tool result, choose and perform the next necessary step. Stop only when the request is fulfilled or a concrete blocker requires user input; identify that blocker explicitly.\n\n",