mirror of
https://github.com/openai/codex.git
synced 2026-10-23 18:08:45 +00:00
Acquire and cache opt-in executor capability inventories via V2 (#53736)
## What changed - Add the disabled-by-default `executor_capability_discovery_v2` feature to acquire `capabilities/discoverV2` inventories from supporting remote executors using each selected environment's working directory and sandbox. - Share snapshots with MCP and world-state contributors and skill providers without activating discovered plugins or publishing discovered skills to the model. - Cache inventories by environment instance, executor session, working directory, and sandbox. Coalesce concurrent requests, refresh the cache at turn start, retry transient failures, and refresh MCP projections after recovery. - Resolve the system skills root in the executor and pass it explicitly to capability location discovery. ## Testing Add coverage for feature gating, unsupported executors, inert inventories, cache reuse and eviction, turn refreshes, failure recovery, executor replacement, and system skill locations. GitOrigin-RevId: 1bdca28fa7f17622b27e2713ab3dcc0c13426889
This commit is contained in:
committed by
copyberry
parent
4d82d36ccf
commit
cf0ed4c600
@@ -1,5 +1,6 @@
|
||||
use codex_config::McpServerConfig;
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoverySnapshot;
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoveryV2Snapshot;
|
||||
use codex_protocol::capabilities::SelectedCapabilityRoot;
|
||||
use codex_protocol::protocol::SessionSource;
|
||||
use codex_protocol::protocol::TurnEnvironmentSelection;
|
||||
@@ -32,6 +33,8 @@ pub struct McpServerContributionContext<'a, C> {
|
||||
ready_selected_capability_roots: Option<&'a [SelectedCapabilityRoot]>,
|
||||
/// Executor-materialized capability files shared by all consumers in this exact step.
|
||||
executor_capability_discovery: Option<&'a ExecutorCapabilityDiscoverySnapshot>,
|
||||
/// V2 inventories supplied by the host for this contribution.
|
||||
executor_capability_discovery_v2: Option<&'a [ExecutorCapabilityDiscoveryV2Snapshot]>,
|
||||
}
|
||||
|
||||
impl<C> Clone for McpServerContributionContext<'_, C> {
|
||||
@@ -55,6 +58,7 @@ impl<'a, C> McpServerContributionContext<'a, C> {
|
||||
selected_environments: None,
|
||||
ready_selected_capability_roots: None,
|
||||
executor_capability_discovery: None,
|
||||
executor_capability_discovery_v2: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +70,7 @@ impl<'a, C> McpServerContributionContext<'a, C> {
|
||||
originator: &'a str,
|
||||
ready_selected_capability_roots: &'a [SelectedCapabilityRoot],
|
||||
executor_capability_discovery: Option<&'a ExecutorCapabilityDiscoverySnapshot>,
|
||||
executor_capability_discovery_v2: Option<&'a [ExecutorCapabilityDiscoveryV2Snapshot]>,
|
||||
) -> Self {
|
||||
Self {
|
||||
config,
|
||||
@@ -77,6 +82,7 @@ impl<'a, C> McpServerContributionContext<'a, C> {
|
||||
selected_environments: None,
|
||||
ready_selected_capability_roots: Some(ready_selected_capability_roots),
|
||||
executor_capability_discovery,
|
||||
executor_capability_discovery_v2,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,6 +151,13 @@ impl<'a, C> McpServerContributionContext<'a, C> {
|
||||
self.ready_selected_capability_roots
|
||||
}
|
||||
|
||||
/// Returns the V2 inventories supplied by the host, when available.
|
||||
pub fn executor_capability_discovery_v2(
|
||||
&self,
|
||||
) -> Option<&'a [ExecutorCapabilityDiscoveryV2Snapshot]> {
|
||||
self.executor_capability_discovery_v2
|
||||
}
|
||||
|
||||
/// Returns the executor-materialized capability files for this model step, when enabled.
|
||||
pub fn executor_capability_discovery(&self) -> Option<&'a ExecutorCapabilityDiscoverySnapshot> {
|
||||
self.executor_capability_discovery
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoverySnapshot;
|
||||
use codex_exec_server_protocol::ExecutorCapabilityDiscoveryV2Snapshot;
|
||||
use codex_protocol::ThreadId;
|
||||
use codex_protocol::capabilities::SelectedCapabilityRoot;
|
||||
use codex_protocol::openai_models::ModelInfo;
|
||||
@@ -21,6 +22,8 @@ pub struct WorldStateContributionInput<'a> {
|
||||
pub ready_selected_capability_roots: &'a [SelectedCapabilityRoot],
|
||||
/// Executor-materialized capability files shared by all consumers in this exact step.
|
||||
pub executor_capability_discovery: Option<&'a ExecutorCapabilityDiscoverySnapshot>,
|
||||
/// Opted-in executor inventories captured for this exact step.
|
||||
pub executor_capability_discovery_v2: Option<&'a [ExecutorCapabilityDiscoveryV2Snapshot]>,
|
||||
/// Metrics bound to the captured model for this sampling step.
|
||||
pub extension_metrics: Option<Arc<dyn ExtensionMetrics>>,
|
||||
pub session_store: &'a ExtensionData,
|
||||
|
||||
Reference in New Issue
Block a user