From 7fbd342fb379b7d2573a5f9108111ae31100f620 Mon Sep 17 00:00:00 2001 From: xli-oai Date: Wed, 13 May 2026 04:05:57 -0700 Subject: [PATCH] [codex] isolate plugin/list from config serialization queue (#22437) ## Summary - move `plugin/list` from the shared `config` read queue onto a dedicated `plugin-list` shared-read queue - move `plugin/read` onto that same dedicated shared-read queue as well - keep the existing scheduler behavior unchanged - allow plugin list/read operations to proceed independently of config-family writes, accepting temporary stale or transient read errors during concurrent mutations ## Validation - `just fmt` - `cargo test -p codex-app-server-protocol` --- .../src/protocol/common.rs | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index 204f47245..b70af1a22 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -621,12 +621,12 @@ client_request_definitions! { }, PluginList => "plugin/list" { params: v2::PluginListParams, - serialization: global_shared_read("config"), + serialization: global_shared_read("plugin-read"), response: v2::PluginListResponse, }, PluginRead => "plugin/read" { params: v2::PluginReadParams, - serialization: global("config"), + serialization: global_shared_read("plugin-read"), response: v2::PluginReadResponse, }, PluginSkillRead => "plugin/skill/read" { @@ -1690,7 +1690,24 @@ mod tests { }; assert_eq!( plugin_list.serialization_scope(), - Some(ClientRequestSerializationScope::GlobalSharedRead("config")) + Some(ClientRequestSerializationScope::GlobalSharedRead( + "plugin-read" + )) + ); + + let plugin_read = ClientRequest::PluginRead { + request_id: request_id(), + params: v2::PluginReadParams { + marketplace_path: Some(absolute_path("/tmp/marketplace")), + remote_marketplace_name: None, + plugin_name: "plugin-a".to_string(), + }, + }; + assert_eq!( + plugin_read.serialization_scope(), + Some(ClientRequestSerializationScope::GlobalSharedRead( + "plugin-read" + )) ); let plugin_uninstall = ClientRequest::PluginUninstall {