mirror of
https://github.com/openai/codex.git
synced 2026-11-13 06:45:07 +00:00
## What changed - Add an `ExtensionData` store to each `StepContext`. - Pass the step store to context, world-state, turn-input, and tool contributors so extensions can use capabilities bound to the current sampling step. - Preserve the captured step context when rebuilding initial context during compaction. GitOrigin-RevId: 51f3105d3a793f60534f122f9be8247c131c2ca5
60 lines
2.3 KiB
Rust
60 lines
2.3 KiB
Rust
use std::sync::Arc;
|
|
|
|
use crate::agents_md::LoadedAgentsMd;
|
|
use crate::environment_selection::TurnEnvironmentSnapshot;
|
|
use crate::session::McpRuntimeSnapshot;
|
|
use crate::session::turn_context::TurnContext;
|
|
use codex_exec_server::ExecutorCapabilityDiscoverySnapshot;
|
|
use codex_exec_server::ResolvedSelectedCapabilityRoot;
|
|
use codex_extension_api::ExtensionData;
|
|
use codex_mcp::ToolInfo;
|
|
use tokio::sync::OnceCell;
|
|
|
|
/// Request-scoped state that may change between model sampling requests.
|
|
#[derive(Debug)]
|
|
pub(crate) struct StepContext {
|
|
pub(crate) turn: Arc<TurnContext>,
|
|
pub(crate) environments: TurnEnvironmentSnapshot,
|
|
/// Capability roots bound to ready environments in this exact step.
|
|
pub(crate) selected_capability_roots: Vec<ResolvedSelectedCapabilityRoot>,
|
|
/// Executor-materialized capability files shared by MCP and skills in this exact step.
|
|
pub(crate) executor_capability_discovery: Option<Arc<ExecutorCapabilityDiscoverySnapshot>>,
|
|
/// The exact MCP config and manager used to advertise and execute tools for this step.
|
|
pub(crate) mcp: Arc<McpRuntimeSnapshot>,
|
|
/// The fixed MCP tool list used for this exact sampling request.
|
|
mcp_tool_snapshot: OnceCell<Vec<ToolInfo>>,
|
|
/// Extension capabilities bound to this exact sampling step.
|
|
pub(crate) extension_data: ExtensionData,
|
|
/// The canonical AGENTS.md value observed with this environment snapshot.
|
|
pub(crate) loaded_agents_md: Option<Arc<LoadedAgentsMd>>,
|
|
}
|
|
|
|
impl StepContext {
|
|
pub(crate) fn new(
|
|
turn: Arc<TurnContext>,
|
|
environments: TurnEnvironmentSnapshot,
|
|
selected_capability_roots: Vec<ResolvedSelectedCapabilityRoot>,
|
|
executor_capability_discovery: Option<Arc<ExecutorCapabilityDiscoverySnapshot>>,
|
|
mcp: Arc<McpRuntimeSnapshot>,
|
|
loaded_agents_md: Option<Arc<LoadedAgentsMd>>,
|
|
) -> Self {
|
|
let extension_data = ExtensionData::new(turn.sub_id.clone());
|
|
Self {
|
|
turn,
|
|
environments,
|
|
selected_capability_roots,
|
|
executor_capability_discovery,
|
|
mcp,
|
|
mcp_tool_snapshot: OnceCell::new(),
|
|
extension_data,
|
|
loaded_agents_md,
|
|
}
|
|
}
|
|
|
|
pub(crate) async fn mcp_tools(&self) -> &[ToolInfo] {
|
|
self.mcp_tool_snapshot
|
|
.get_or_init(|| self.mcp.manager().list_all_tools())
|
|
.await
|
|
}
|
|
}
|