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;