Codex Handbook
core/src/plugins/discoverable.rs 59 lines
use crate::config::Config;use codex_config::types::ToolSuggestDiscoverableType;use codex_core_plugins::PluginsManager;use codex_core_plugins::ToolSuggestPluginDiscoveryInput;use codex_login::CodexAuth;use codex_tools::DiscoverablePluginInfo;use std::collections::HashSet;use tracing::instrument;#[instrument(level = "trace", skip_all)]pub(crate) async fn list_tool_suggest_discoverable_plugins(    config: &Config,    plugins_manager: &PluginsManager,    auth: Option<&CodexAuth>,    loaded_plugin_app_connector_ids: &[String],) -> anyhow::Result<Vec<DiscoverablePluginInfo>> {    let input = ToolSuggestPluginDiscoveryInput {        plugins: config.plugins_config_input(),        configured_plugin_ids: config            .tool_suggest            .discoverables            .iter()            .filter(|discoverable| discoverable.kind == ToolSuggestDiscoverableType::Plugin)            .map(|discoverable| discoverable.id.clone())            .collect::<HashSet<_>>(),        disabled_plugin_ids: config            .tool_suggest            .disabled_tools            .iter()            .filter(|disabled_tool| disabled_tool.kind == ToolSuggestDiscoverableType::Plugin)            .map(|disabled_tool| disabled_tool.id.clone())            .collect::<HashSet<_>>(),        loaded_plugin_app_connector_ids: loaded_plugin_app_connector_ids            .iter()            .cloned()            .collect::<HashSet<_>>(),    };    plugins_manager        .list_tool_suggest_discoverable_plugins(&input, auth)        .await        .map(|plugins| {            plugins                .into_iter()                .map(|plugin| DiscoverablePluginInfo {                    id: plugin.id,                    remote_plugin_id: plugin.remote_plugin_id,                    name: plugin.name,                    description: plugin.description,                    has_skills: plugin.has_skills,                    mcp_server_names: plugin.mcp_server_names,                    app_connector_ids: plugin.app_connector_ids,                })                .collect()        })}#[cfg(test)]#[path = "discoverable_tests.rs"]mod tests;