diff --git a/codex-rs/core/src/tools/discoverable.rs b/codex-rs/core/src/tools/discoverable.rs index e9403918e..78d8935aa 100644 --- a/codex-rs/core/src/tools/discoverable.rs +++ b/codex-rs/core/src/tools/discoverable.rs @@ -1,42 +1,9 @@ use crate::plugins::PluginCapabilitySummary; use codex_app_server_protocol::AppInfo; -use serde::Deserialize; -use serde::Serialize; +use codex_tools::DiscoverableToolType; const TUI_CLIENT_NAME: &str = "codex-tui"; -#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub(crate) enum DiscoverableToolType { - Connector, - Plugin, -} - -impl DiscoverableToolType { - pub(crate) fn as_str(self) -> &'static str { - match self { - Self::Connector => "connector", - Self::Plugin => "plugin", - } - } -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub(crate) enum DiscoverableToolAction { - Install, - Enable, -} - -impl DiscoverableToolAction { - pub(crate) fn as_str(self) -> &'static str { - match self { - Self::Install => "install", - Self::Enable => "enable", - } - } -} - #[derive(Clone, Debug, PartialEq)] pub(crate) enum DiscoverableTool { Connector(Box), @@ -65,13 +32,6 @@ impl DiscoverableTool { } } - pub(crate) fn description(&self) -> Option<&str> { - match self { - Self::Connector(connector) => connector.description.as_deref(), - Self::Plugin(plugin) => plugin.description.as_deref(), - } - } - pub(crate) fn install_url(&self) -> Option<&str> { match self { Self::Connector(connector) => connector.install_url.as_deref(), diff --git a/codex-rs/core/src/tools/handlers/tool_suggest.rs b/codex-rs/core/src/tools/handlers/tool_suggest.rs index bdffbbbad..478bd2c83 100644 --- a/codex-rs/core/src/tools/handlers/tool_suggest.rs +++ b/codex-rs/core/src/tools/handlers/tool_suggest.rs @@ -8,6 +8,8 @@ use codex_app_server_protocol::McpElicitationSchema; use codex_app_server_protocol::McpServerElicitationRequest; use codex_app_server_protocol::McpServerElicitationRequestParams; use codex_rmcp_client::ElicitationAction; +use codex_tools::DiscoverableToolAction; +use codex_tools::DiscoverableToolType; use rmcp::model::RequestId; use serde::Deserialize; use serde::Serialize; @@ -21,8 +23,6 @@ use crate::tools::context::FunctionToolOutput; use crate::tools::context::ToolInvocation; use crate::tools::context::ToolPayload; use crate::tools::discoverable::DiscoverableTool; -use crate::tools::discoverable::DiscoverableToolAction; -use crate::tools::discoverable::DiscoverableToolType; use crate::tools::discoverable::filter_tool_suggest_discoverable_tools_for_client; use crate::tools::handlers::parse_arguments; use crate::tools::registry::ToolHandler; diff --git a/codex-rs/core/src/tools/handlers/tool_suggest_tests.rs b/codex-rs/core/src/tools/handlers/tool_suggest_tests.rs index 32d5061ae..c932e0314 100644 --- a/codex-rs/core/src/tools/handlers/tool_suggest_tests.rs +++ b/codex-rs/core/src/tools/handlers/tool_suggest_tests.rs @@ -8,6 +8,8 @@ use crate::plugins::test_support::write_plugins_feature_config; use crate::tools::discoverable::DiscoverablePluginInfo; use crate::tools::discoverable::filter_tool_suggest_discoverable_tools_for_client; use codex_app_server_protocol::AppInfo; +use codex_tools::DiscoverableToolAction; +use codex_tools::DiscoverableToolType; use codex_utils_absolute_path::AbsolutePathBuf; use pretty_assertions::assert_eq; use serde_json::json; diff --git a/codex-rs/core/src/tools/spec.rs b/codex-rs/core/src/tools/spec.rs index 782cb498d..685267157 100644 --- a/codex-rs/core/src/tools/spec.rs +++ b/codex-rs/core/src/tools/spec.rs @@ -7,10 +7,7 @@ use crate::shell::Shell; use crate::shell::ShellType; use crate::tools::code_mode::PUBLIC_TOOL_NAME; use crate::tools::code_mode::WAIT_TOOL_NAME; -use crate::tools::discoverable::DiscoverablePluginInfo; use crate::tools::discoverable::DiscoverableTool; -use crate::tools::discoverable::DiscoverableToolAction; -use crate::tools::discoverable::DiscoverableToolType; use crate::tools::handlers::PLAN_TOOL; use crate::tools::handlers::TOOL_SEARCH_DEFAULT_LIMIT; use crate::tools::handlers::TOOL_SEARCH_TOOL_NAME; @@ -41,9 +38,11 @@ use codex_protocol::protocol::SandboxPolicy; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::SubAgentSource; use codex_tools::CommandToolOptions; -use codex_tools::ResponsesApiTool; +use codex_tools::DiscoverableToolType; use codex_tools::ShellToolOptions; use codex_tools::SpawnAgentToolOptions; +use codex_tools::ToolSearchAppInfo; +use codex_tools::ToolSuggestEntry; use codex_tools::ViewImageToolOptions; use codex_tools::WaitAgentTimeoutOptions; use codex_tools::augment_tool_spec_for_code_mode; @@ -71,6 +70,8 @@ use codex_tools::create_spawn_agent_tool_v1; use codex_tools::create_spawn_agent_tool_v2; use codex_tools::create_spawn_agents_on_csv_tool; use codex_tools::create_test_sync_tool; +use codex_tools::create_tool_search_tool; +use codex_tools::create_tool_suggest_tool; use codex_tools::create_view_image_tool; use codex_tools::create_wait_agent_tool_v1; use codex_tools::create_wait_agent_tool_v2; @@ -80,33 +81,17 @@ use codex_tools::dynamic_tool_to_responses_api_tool; use codex_tools::mcp_tool_to_responses_api_tool; use codex_tools::tool_spec_to_code_mode_tool_definition; use codex_utils_absolute_path::AbsolutePathBuf; -use codex_utils_template::Template; use serde::Deserialize; use serde::Serialize; use std::collections::BTreeMap; use std::collections::HashMap; use std::path::PathBuf; -use std::sync::LazyLock; pub type JsonSchema = codex_tools::JsonSchema; #[cfg(test)] pub(crate) use codex_tools::mcp_call_tool_result_output_schema; -const TOOL_SEARCH_DESCRIPTION_TEMPLATE_SOURCE: &str = - include_str!("../../templates/search_tool/tool_description.md"); -const TOOL_SEARCH_DESCRIPTION_TEMPLATE_KEY: &str = "app_descriptions"; -static TOOL_SEARCH_DESCRIPTION_TEMPLATE: LazyLock