mirror of
https://github.com/openai/codex.git
synced 2026-10-23 18:08:45 +00:00
Reconcile V2 executor plugins with cloud catalogs (#55301)
## What changed - Use V2 discovery inventories for plugin MCP contributions when supplied, including empty or failed inventories; retain legacy discovery when no V2 snapshot is supplied. - Merge plugins by canonical identity, using cloud metadata and enablement for remote plugins and attaching executor installations only when versions match. Preserve configured executor-local plugins and executor enablement when cloud data is unavailable. - Keep installation order stable across refreshes and run merged MCP declarations on the first retained executor installation while preserving attribution for the others. - Carry local and remote identities through selected-plugin snapshots, skill attribution, and active-plugin telemetry. Track disabled plugin IDs alongside disabled roots. - Preserve a complete cloud catalog when a partial refresh arrives, and cap tool-description plugin attribution at 1,024 bytes while retaining all plugin associations. ## Testing Add coverage for catalog parsing and reconciliation, enablement and discovery-mode selection, installation refresh ordering, executor-specific MCP normalization, selected-plugin snapshots, and bounded UTF-8 attribution text. GitOrigin-RevId: a8ad352de6a2b8dc4bfd1ff6a5c62ee8ed1d1664
This commit is contained in:
committed by
copyberry
parent
1277bcfddc
commit
f7a135ec61
@@ -90,6 +90,11 @@ pub trait McpServerContributor<C: Sync>: Send + Sync {
|
||||
context: McpServerContributionContext<'a, C>,
|
||||
) -> ExtensionFuture<'a, Vec<McpServerContribution>>;
|
||||
|
||||
/// Reads canonical hosted-plugin IDs from published state without discovery or MCP I/O.
|
||||
fn hosted_plugin_ids(&self, _context: McpServerContributionContext<'_, C>) -> Vec<String> {
|
||||
Vec::new()
|
||||
}
|
||||
|
||||
/// Declares executor plugins, including those without MCP servers or connectors. Each
|
||||
/// declaration identifies the plugin once; its deferred MCP data cannot change that identity.
|
||||
/// Return plugins in precedence order: across contributors in registration order, the first
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use codex_config::McpServerConfig;
|
||||
use codex_core_plugin_common::PluginIdentity;
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoverySnapshot;
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoveryV2Snapshot;
|
||||
use codex_protocol::capabilities::SelectedCapabilityRoot;
|
||||
@@ -151,7 +152,7 @@ impl<'a, C> McpServerContributionContext<'a, C> {
|
||||
self.ready_selected_capability_roots
|
||||
}
|
||||
|
||||
/// Returns the V2 inventories supplied by the host, when available.
|
||||
/// `Some` selects V2, including an empty inventory list; `None` selects legacy discovery.
|
||||
pub fn executor_capability_discovery_v2(
|
||||
&self,
|
||||
) -> Option<&'a [ExecutorCapabilityDiscoveryV2Snapshot]> {
|
||||
@@ -170,6 +171,7 @@ pub struct SelectedPluginSnapshot {
|
||||
pub plugins: Vec<SelectedPluginIdentity>,
|
||||
/// Selected plugin roots suppressed by the effective plugin feature policy.
|
||||
pub disabled_plugin_roots: Vec<String>,
|
||||
pub disabled_plugin_ids: Vec<String>,
|
||||
}
|
||||
|
||||
/// The configured identity of a selected plugin and, when present, the root owning its skills.
|
||||
@@ -177,7 +179,7 @@ pub struct SelectedPluginSnapshot {
|
||||
pub struct SelectedPluginIdentity {
|
||||
/// Hosted plugins have no executor root and cannot own skills from an executor folder.
|
||||
pub selected_root_id: Option<String>,
|
||||
pub plugin_id: String,
|
||||
pub plugin_id: PluginIdentity,
|
||||
}
|
||||
|
||||
/// An executor plugin and its deferred MCP data. Callers that only need the identity can drop
|
||||
@@ -186,6 +188,8 @@ pub struct SelectedPluginIdentity {
|
||||
pub struct SelectedPlugin<'a> {
|
||||
pub selected_root_id: String,
|
||||
pub plugin_id: String,
|
||||
pub identity: PluginIdentity,
|
||||
pub enabled: bool,
|
||||
pub mcp: ExtensionFuture<'a, SelectedPluginContribution>,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user