[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`
This commit is contained in:
xli-oai
2026-05-13 04:05:57 -07:00
committed by GitHub
Unverified
parent 842ac74b9c
commit 7fbd342fb3
@@ -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 {