mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
05e171094d
## Why `codex-tools` is meant to hold reusable tool primitives, but `ToolsConfig` had become a second copy of core runtime decisions instead of a small shared contract. It carried provider capabilities, auth/model gates, permission and environment state, web/search/image feature gates, multi-agent settings, and goal availability from core into `codex-tools` ([definition](https://github.com/openai/codex/blob/22dd9ad3929253ed24d7ee4f10f238e95ab25f37/codex-rs/tools/src/tool_config.rs#L97), [stored on each `TurnContext`](https://github.com/openai/codex/blob/22dd9ad3929253ed24d7ee4f10f238e95ab25f37/codex-rs/core/src/session/turn_context.rs#L87)). Every session/context variant then had to build and mutate that snapshot before assembling tools. This PR removes that master object instead of renaming it. Tool planning now reads the live `TurnContext`, where `codex-core` already owns those decisions, while `codex-tools` keeps only reusable primitives and a generic `ToolSetBuilder`/`ToolSet` accumulator. ## What Changed - Removed `ToolsConfig` / `ToolsConfigParams` from `codex-tools`; the crate keeps the shared helpers that still belong there, including request-user-input mode selection, shell backend/type resolution, `UnifiedExecShellMode`, and `ToolEnvironmentMode`. - Replaced config-snapshot planning with `ToolRouter::from_turn_context` and a `spec_plan` pipeline over `CoreToolPlanContext`, deriving provider capabilities, auth gates, model support, feature gates, environment count, goal support, multi-agent options, web search, and image generation from the authoritative turn state. - Added generic `codex_tools::ToolSetBuilder` / `ToolSet`, plus the small core adapter needed to accumulate `CoreToolRuntime` values and hosted model specs. - Added the `tool_family::shell` registration module and moved shell/unified-exec/memory accounting call sites to read the narrow per-turn fields directly. - Narrowed `TurnContext` to the remaining explicit per-turn fields needed by planning: `available_models`, `unified_exec_shell_mode`, and `goal_tools_supported`. - Reworked MCP exposure and tool-search setup so deferred/direct MCP behavior is driven by the current turn rather than a precomputed config snapshot. - Replaced the large expected-spec fixture tests with focused behavior-level coverage for shell tools, environments, goal and agent-job gates, MCP direct/deferred exposure, tool search, request-plugin-install, code mode, multi-agent mode, hosted tools, and extension executor dispatch. ## Verification - `cargo check -p codex-tools` - `cargo check -p codex-core --lib` - `cargo test -p codex-tools` - `cargo test -p codex-core spec_plan --lib` - `cargo test -p codex-core router --lib`
90 lines
3.8 KiB
Rust
90 lines
3.8 KiB
Rust
//! Shared tool definitions and Responses API tool primitives that can live
|
|
//! outside `codex-core`.
|
|
|
|
mod code_mode;
|
|
mod dynamic_tool;
|
|
mod function_call_error;
|
|
mod image_detail;
|
|
mod json_schema;
|
|
mod mcp_tool;
|
|
mod request_plugin_install;
|
|
mod responses_api;
|
|
mod tool_call;
|
|
mod tool_config;
|
|
mod tool_definition;
|
|
mod tool_discovery;
|
|
mod tool_executor;
|
|
mod tool_output;
|
|
mod tool_payload;
|
|
mod tool_spec;
|
|
|
|
pub use code_mode::augment_tool_spec_for_code_mode;
|
|
pub use code_mode::code_mode_name_for_tool_name;
|
|
pub use code_mode::collect_code_mode_exec_prompt_tool_definitions;
|
|
pub use code_mode::collect_code_mode_tool_definitions;
|
|
pub use code_mode::tool_spec_to_code_mode_tool_definition;
|
|
pub use codex_protocol::ToolName;
|
|
pub use dynamic_tool::parse_dynamic_tool;
|
|
pub use function_call_error::FunctionCallError;
|
|
pub use image_detail::can_request_original_image_detail;
|
|
pub use image_detail::normalize_output_image_detail;
|
|
pub use image_detail::sanitize_original_image_detail;
|
|
pub use json_schema::AdditionalProperties;
|
|
pub use json_schema::JsonSchema;
|
|
pub use json_schema::JsonSchemaPrimitiveType;
|
|
pub use json_schema::JsonSchemaType;
|
|
pub use json_schema::parse_tool_input_schema;
|
|
pub use mcp_tool::mcp_call_tool_result_output_schema;
|
|
pub use mcp_tool::parse_mcp_tool;
|
|
pub use request_plugin_install::REQUEST_PLUGIN_INSTALL_APPROVAL_KIND_VALUE;
|
|
pub use request_plugin_install::REQUEST_PLUGIN_INSTALL_PERSIST_ALWAYS_VALUE;
|
|
pub use request_plugin_install::REQUEST_PLUGIN_INSTALL_PERSIST_KEY;
|
|
pub use request_plugin_install::RequestPluginInstallArgs;
|
|
pub use request_plugin_install::RequestPluginInstallMeta;
|
|
pub use request_plugin_install::RequestPluginInstallResult;
|
|
pub use request_plugin_install::all_requested_connectors_picked_up;
|
|
pub use request_plugin_install::build_request_plugin_install_elicitation_request;
|
|
pub use request_plugin_install::verified_connector_install_completed;
|
|
pub use responses_api::FreeformTool;
|
|
pub use responses_api::FreeformToolFormat;
|
|
pub use responses_api::LoadableToolSpec;
|
|
pub use responses_api::ResponsesApiNamespace;
|
|
pub use responses_api::ResponsesApiNamespaceTool;
|
|
pub use responses_api::ResponsesApiTool;
|
|
pub use responses_api::coalesce_loadable_tool_specs;
|
|
pub use responses_api::default_namespace_description;
|
|
pub use responses_api::dynamic_tool_to_responses_api_tool;
|
|
pub use responses_api::mcp_tool_to_deferred_responses_api_tool;
|
|
pub use responses_api::mcp_tool_to_responses_api_tool;
|
|
pub use responses_api::tool_definition_to_responses_api_tool;
|
|
pub use tool_call::ToolCall;
|
|
pub use tool_config::ShellCommandBackendConfig;
|
|
pub use tool_config::ToolEnvironmentMode;
|
|
pub use tool_config::ToolUserShellType;
|
|
pub use tool_config::UnifiedExecShellMode;
|
|
pub use tool_config::ZshForkConfig;
|
|
pub use tool_config::request_user_input_available_modes;
|
|
pub use tool_config::shell_command_backend_for_features;
|
|
pub use tool_config::shell_type_for_model_and_features;
|
|
pub use tool_definition::ToolDefinition;
|
|
pub use tool_discovery::DiscoverablePluginInfo;
|
|
pub use tool_discovery::DiscoverableTool;
|
|
pub use tool_discovery::DiscoverableToolAction;
|
|
pub use tool_discovery::DiscoverableToolType;
|
|
pub use tool_discovery::REQUEST_PLUGIN_INSTALL_TOOL_NAME;
|
|
pub use tool_discovery::RequestPluginInstallEntry;
|
|
pub use tool_discovery::TOOL_SEARCH_DEFAULT_LIMIT;
|
|
pub use tool_discovery::TOOL_SEARCH_TOOL_NAME;
|
|
pub use tool_discovery::ToolSearchSourceInfo;
|
|
pub use tool_discovery::collect_request_plugin_install_entries;
|
|
pub use tool_discovery::filter_request_plugin_install_discoverable_tools_for_client;
|
|
pub use tool_executor::ToolExecutor;
|
|
pub use tool_executor::ToolExposure;
|
|
pub use tool_output::JsonToolOutput;
|
|
pub use tool_output::ToolOutput;
|
|
pub use tool_payload::ToolPayload;
|
|
pub use tool_spec::ResponsesApiWebSearchFilters;
|
|
pub use tool_spec::ResponsesApiWebSearchUserLocation;
|
|
pub use tool_spec::ToolSpec;
|
|
pub use tool_spec::create_tools_json_for_responses_api;
|