From bcb5962718362fbd919f66b97145b226bb4370cc Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 30 Oct 2026 12:16:12 +0000 Subject: [PATCH 1/5] fix(acp)!: emit native v2 error stop reasons --- Cargo.lock | 23 ++++++++++------------- Cargo.toml | 3 +++ crates/agentkit-acp/src/v2.rs | 6 +++--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7648597..1f9b220 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,8 +11,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "agent-client-protocol-derive" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4893bfb11e0e193aa5a64611a126ee87567acb1879556519c902722899229de" +source = "git+https://github.com/danielkov/rust-sdk?rev=05d219b5cebc6980fec81ee64f62a4a655a47b84#05d219b5cebc6980fec81ee64f62a4a655a47b84" dependencies = [ "quote", "syn 3.0.3", @@ -71,8 +70,7 @@ dependencies = [ [[package]] name = "agentkit-acp-schema" version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfcb839ccca8f4f43bfc9aa26473396f16afbd32071efd00d36801daed62f9d7" +source = "git+https://github.com/danielkov/agent-client-protocol?rev=66d51e46f0835a0d0848e9e2746ef8672c75e343#66d51e46f0835a0d0848e9e2746ef8672c75e343" dependencies = [ "anyhow", "derive_more", @@ -87,8 +85,7 @@ dependencies = [ [[package]] name = "agentkit-acp-sdk" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b93c10bb458dd1c2c822275a7e1c390b46846a6bcd3cbc84aafa312563e36ad" +source = "git+https://github.com/danielkov/rust-sdk?rev=05d219b5cebc6980fec81ee64f62a4a655a47b84#05d219b5cebc6980fec81ee64f62a4a655a47b84" dependencies = [ "agent-client-protocol-derive", "agentkit-acp-schema", @@ -1353,7 +1350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2301,7 +2298,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" dependencies = [ - "base64 0.22.1", + "base64 0.21.7", "chrono", "getrandom 0.2.17", "http", @@ -2770,7 +2767,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3140,7 +3137,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3197,7 +3194,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3350,7 +3347,7 @@ checksum = "f83ad47c2f14654528a89495f8d0dbc64173176f8512c7c72386cbe81009f661" dependencies = [ "ahash", "annotate-snippets", - "base64 0.22.1", + "base64 0.21.7", "encoding_rs_io", "getrandom 0.3.4", "nohash-hasher", @@ -4275,7 +4272,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c64d394..28892f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,3 +74,6 @@ futures-timer = "3.0.3" tracing = "0.1" schemars = { version = "1", default-features = false } mlua = { version = "0.11.6", features = ["lua54", "vendored", "serialize", "async", "send"] } + +[patch.crates-io] +agentkit-acp-sdk = { git = "https://github.com/danielkov/rust-sdk", rev = "05d219b5cebc6980fec81ee64f62a4a655a47b84" } diff --git a/crates/agentkit-acp/src/v2.rs b/crates/agentkit-acp/src/v2.rs index 562b00d..c4a769f 100644 --- a/crates/agentkit-acp/src/v2.rs +++ b/crates/agentkit-acp/src/v2.rs @@ -3111,7 +3111,7 @@ fn data_ref_to_resource_content( } fn error_stop_reason() -> wire::StopReason { - wire::StopReason::Other("_error".into()) + wire::StopReason::Error(wire::ErrorStopReason::new()) } fn finish_reason_to_stop_reason(reason: &FinishReason) -> wire::StopReason { @@ -4909,7 +4909,7 @@ mod tests { for reason in [FinishReason::Blocked, FinishReason::Error] { assert_eq!( finish_reason_to_stop_reason(&reason), - wire::StopReason::Other("_error".into()) + wire::StopReason::Error(wire::ErrorStopReason::new()) ); } } @@ -4970,7 +4970,7 @@ mod tests { ¬ification.update, wire::SessionUpdate::StateUpdate(wire::StateUpdate::Idle(idle)) if idle.stop_reason.as_ref() - == Some(&wire::StopReason::Other("_error".into())) + == Some(&wire::StopReason::Error(wire::ErrorStopReason::new())) ) )); assert!(messages.try_recv().is_err()); From 562b81be3ce37f82682f2172fdc67a5719ffbb2f Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 30 Oct 2026 12:34:21 +0000 Subject: [PATCH 2/5] fix(acp): pin SDK for external git consumers --- crates/agentkit-acp/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/agentkit-acp/Cargo.toml b/crates/agentkit-acp/Cargo.toml index 20af072..dede181 100644 --- a/crates/agentkit-acp/Cargo.toml +++ b/crates/agentkit-acp/Cargo.toml @@ -20,7 +20,7 @@ unstable-inject = [ ] [dependencies] -agent-client-protocol = { package = "agentkit-acp-sdk", version = "=2.2.0" } +agent-client-protocol = { package = "agentkit-acp-sdk", version = "=2.2.0", git = "https://github.com/danielkov/rust-sdk", rev = "05d219b5cebc6980fec81ee64f62a4a655a47b84" } agentkit-core = { version = "0.10.5", path = "../agentkit-core" } agentkit-loop = { version = "0.11.0", path = "../agentkit-loop" } agentkit-tools-core = { version = "0.10.5", path = "../agentkit-tools-core" } From 8f9f3f188ee60dbbcbb8620c8218324f9e5425a0 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 30 Oct 2026 16:13:47 +0000 Subject: [PATCH 3/5] chore(release): publish ACP 0.12 with registry SDK 3.6 --- Cargo.lock | 153 ++++++------------------ Cargo.toml | 3 - crates/agentkit-acp/Cargo.toml | 6 +- crates/agentkit-acp/src/v2.rs | 2 +- crates/agentkit/Cargo.toml | 4 +- examples/openrouter-acp-trio/Cargo.toml | 2 +- 6 files changed, 42 insertions(+), 128 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1f9b220..8ac1653 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,8 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "agent-client-protocol-derive" -version = "2.2.0" -source = "git+https://github.com/danielkov/rust-sdk?rev=05d219b5cebc6980fec81ee64f62a4a655a47b84#05d219b5cebc6980fec81ee64f62a4a655a47b84" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2d255cb5d3afa4760084fbcaf87c7d214d316328546cd777d8736a8af6e368" dependencies = [ "quote", "syn 3.0.3", @@ -19,7 +20,7 @@ dependencies = [ [[package]] name = "agentkit" -version = "0.12.0" +version = "0.13.0" dependencies = [ "agentkit-acp", "agentkit-adapter-completions", @@ -50,7 +51,7 @@ dependencies = [ [[package]] name = "agentkit-acp" -version = "0.11.0" +version = "0.12.0" dependencies = [ "agentkit-acp-sdk", "agentkit-core", @@ -69,40 +70,36 @@ dependencies = [ [[package]] name = "agentkit-acp-schema" -version = "1.9.1" -source = "git+https://github.com/danielkov/agent-client-protocol?rev=66d51e46f0835a0d0848e9e2746ef8672c75e343#66d51e46f0835a0d0848e9e2746ef8672c75e343" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fceebccf753866b268d7375a9ef4904ea358019fefb16438b0146c8a56d0f6" dependencies = [ "anyhow", "derive_more", - "schemars 1.2.2", "serde", "serde_json", "serde_with", "strum", - "tracing", ] [[package]] name = "agentkit-acp-sdk" -version = "2.2.0" -source = "git+https://github.com/danielkov/rust-sdk?rev=05d219b5cebc6980fec81ee64f62a4a655a47b84#05d219b5cebc6980fec81ee64f62a4a655a47b84" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34a98bcf96dbdcae3eec8a1a9f44b1c1862f1739f7f6a0e2a23fa515f2af84d3" dependencies = [ "agent-client-protocol-derive", "agentkit-acp-schema", - "async-io", - "async-process", "blocking", "futures", "futures-concurrency", + "libc", "rustc-hash", - "rustix", - "schemars 1.2.2", "serde", "serde_json", - "shell-words", "tracing", "uuid", - "windows-sys 0.61.2", + "wasm-bindgen", ] [[package]] @@ -604,24 +601,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "async-io" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" -dependencies = [ - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "windows-sys 0.61.2", -] - [[package]] name = "async-lock" version = "3.4.2" @@ -633,42 +612,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-process" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener", - "futures-lite", - "rustix", -] - -[[package]] -name = "async-signal" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.61.2", -] - [[package]] name = "async-task" version = "4.7.1" @@ -1350,7 +1293,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1635,12 +1578,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "hex" version = "0.4.3" @@ -2058,9 +1995,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.104" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -2298,7 +2235,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "chrono", "getrandom 0.2.17", "http", @@ -2627,20 +2564,6 @@ version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" -[[package]] -name = "polling" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix", - "windows-sys 0.61.2", -] - [[package]] name = "portable-atomic" version = "1.15.0" @@ -2767,7 +2690,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3137,7 +3060,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3194,7 +3117,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3347,7 +3270,7 @@ checksum = "f83ad47c2f14654528a89495f8d0dbc64173176f8512c7c72386cbe81009f661" dependencies = [ "ahash", "annotate-snippets", - "base64 0.21.7", + "base64 0.22.1", "encoding_rs_io", "getrandom 0.3.4", "nohash-hasher", @@ -3521,12 +3444,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shell-words" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" - [[package]] name = "shlex" version = "2.0.1" @@ -4146,9 +4063,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -4159,9 +4076,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.77" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -4169,9 +4086,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4179,22 +4096,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] @@ -4214,9 +4131,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.104" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -4272,7 +4189,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 28892f3..c64d394 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,6 +74,3 @@ futures-timer = "3.0.3" tracing = "0.1" schemars = { version = "1", default-features = false } mlua = { version = "0.11.6", features = ["lua54", "vendored", "serialize", "async", "send"] } - -[patch.crates-io] -agentkit-acp-sdk = { git = "https://github.com/danielkov/rust-sdk", rev = "05d219b5cebc6980fec81ee64f62a4a655a47b84" } diff --git a/crates/agentkit-acp/Cargo.toml b/crates/agentkit-acp/Cargo.toml index dede181..0d9faa3 100644 --- a/crates/agentkit-acp/Cargo.toml +++ b/crates/agentkit-acp/Cargo.toml @@ -4,14 +4,14 @@ homepage.workspace = true name = "agentkit-acp" readme = "README.md" repository.workspace = true -version = "0.11.0" +version = "0.12.0" edition.workspace = true license.workspace = true rust-version.workspace = true [features] default = ["stdio"] -stdio = [] +stdio = ["agent-client-protocol/stdio"] unstable-acp = ["agent-client-protocol/unstable"] protocol-v2 = ["agent-client-protocol/unstable_protocol_v2"] unstable-inject = [ @@ -20,7 +20,7 @@ unstable-inject = [ ] [dependencies] -agent-client-protocol = { package = "agentkit-acp-sdk", version = "=2.2.0", git = "https://github.com/danielkov/rust-sdk", rev = "05d219b5cebc6980fec81ee64f62a4a655a47b84" } +agent-client-protocol = { package = "agentkit-acp-sdk", version = "=3.6.0" } agentkit-core = { version = "0.10.5", path = "../agentkit-core" } agentkit-loop = { version = "0.11.0", path = "../agentkit-loop" } agentkit-tools-core = { version = "0.10.5", path = "../agentkit-tools-core" } diff --git a/crates/agentkit-acp/src/v2.rs b/crates/agentkit-acp/src/v2.rs index c4a769f..3db9ae0 100644 --- a/crates/agentkit-acp/src/v2.rs +++ b/crates/agentkit-acp/src/v2.rs @@ -37,7 +37,7 @@ fn sdk_v2_error(error: wire::Error) -> agent_client_protocol::Error { #[cfg(feature = "unstable-inject")] fn session_not_found_error(session_id: &wire::SessionId) -> agent_client_protocol::Error { - sdk_v2_error(wire::Error::resource_not_found(None)).data(serde_json::json!({ + sdk_v2_error(wire::Error::resource_not_found()).data(serde_json::json!({ "sessionId": session_id, })) } diff --git a/crates/agentkit/Cargo.toml b/crates/agentkit/Cargo.toml index 4400343..9518f2c 100644 --- a/crates/agentkit/Cargo.toml +++ b/crates/agentkit/Cargo.toml @@ -4,14 +4,14 @@ homepage.workspace = true name = "agentkit" readme = "README.md" repository.workspace = true -version = "0.12.0" +version = "0.13.0" edition.workspace = true license.workspace = true rust-version.workspace = true [dependencies] agentkit-capabilities = { version = "0.10.5", path = "../agentkit-capabilities", optional = true } -agentkit-acp = { version = "0.11.0", path = "../agentkit-acp", optional = true } +agentkit-acp = { version = "0.12.0", path = "../agentkit-acp", optional = true } agentkit-compaction = { version = "0.11.0", path = "../agentkit-compaction", optional = true } agentkit-context = { version = "0.10.5", path = "../agentkit-context", optional = true } agentkit-core = { version = "0.10.5", path = "../agentkit-core", optional = true } diff --git a/examples/openrouter-acp-trio/Cargo.toml b/examples/openrouter-acp-trio/Cargo.toml index f2aec15..4db4244 100644 --- a/examples/openrouter-acp-trio/Cargo.toml +++ b/examples/openrouter-acp-trio/Cargo.toml @@ -7,7 +7,7 @@ rust-version.workspace = true version.workspace = true [dependencies] -agent-client-protocol = { package = "agentkit-acp-sdk", version = "2.2.0" } +agent-client-protocol = { package = "agentkit-acp-sdk", version = "=3.6.0" } agentkit-acp = { path = "../../crates/agentkit-acp" } agentkit-core = { path = "../../crates/agentkit-core" } agentkit-loop = { path = "../../crates/agentkit-loop" } From 364c6686a6b0c79d516100bb9aebf67c08e641f5 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 30 Oct 2026 16:20:25 +0000 Subject: [PATCH 4/5] test(acp): initialize before testing failed session cleanup --- crates/agentkit-acp/src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/agentkit-acp/src/lib.rs b/crates/agentkit-acp/src/lib.rs index 8f53c13..34c35a0 100644 --- a/crates/agentkit-acp/src/lib.rs +++ b/crates/agentkit-acp/src/lib.rs @@ -2389,13 +2389,23 @@ mod tests { async move |cx| { let cwd = std::env::current_dir() .map_err(agent_client_protocol::Error::into_internal_error)?; + cx.send_request(acp::InitializeRequest::new(ProtocolVersion::V1)) + .block_task() + .await?; let error = cx .send_request(acp::NewSessionRequest::new(cwd)) .block_task() .await .err() .expect("session creation should fail"); - assert!(error.to_string().contains("factory failed")); + assert!( + error + .data + .as_ref() + .and_then(serde_json::Value::as_str) + .is_some_and(|message| message.contains("factory failed")), + "unexpected error: {error:?}" + ); Ok(()) }, ); From c2c683e8b6b139d7dc736437322a3dc4f9311b86 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 30 Oct 2026 16:33:49 +0000 Subject: [PATCH 5/5] test(openai): synchronize overload budget exhaustion with retry --- .../src/responses/websocket/tests.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/crates/agentkit-provider-openai/src/responses/websocket/tests.rs b/crates/agentkit-provider-openai/src/responses/websocket/tests.rs index 088be96..2f1c640 100644 --- a/crates/agentkit-provider-openai/src/responses/websocket/tests.rs +++ b/crates/agentkit-provider-openai/src/responses/websocket/tests.rs @@ -620,7 +620,8 @@ async fn uncorrelated_overload_stops_on_budget_or_cancellation() { cfg.profile = OpenAIResponsesProfile::ChatGptPrivate; let resilience = cfg.resilience.as_mut().unwrap(); resilience.max_retries = usize::MAX; - resilience.retry_budget = Duration::from_millis(100); + let retry_budget = Duration::from_secs(2); + resilience.retry_budget = retry_budget; resilience.initial_backoff = Duration::from_secs(1); resilience.max_backoff = Duration::from_secs(1); let adapter = OpenAIResponsesAdapter::new(cfg).unwrap(); @@ -631,8 +632,14 @@ async fn uncorrelated_overload_stops_on_budget_or_cancellation() { let controller = Arc::new(CancellationController::new()); let interrupt = controller.clone(); session.set_retry_observer(Some(Arc::new(move |event| { - if cancel && matches!(event, ProviderRetryEvent::Scheduled(_)) { - interrupt.interrupt(); + if matches!(event, ProviderRetryEvent::Scheduled(_)) { + if cancel { + interrupt.interrupt(); + } else { + // Exhaust the wall-clock budget only after the overload is + // classified, independent of handshake timing and jitter. + std::thread::sleep(retry_budget); + } } }))); let cancellation = controller.handle().checkpoint();