//! Shared plugin identifiers and telemetry-facing summaries. pub use codex_utils_plugins::PLUGIN_MANIFEST_PATH; pub use codex_utils_plugins::mention_syntax; pub use codex_utils_plugins::plugin_namespace_for_skill_path; mod load_outcome; mod plugin_id; pub use load_outcome::EffectiveSkillRoots; pub use load_outcome::LoadedPlugin; pub use load_outcome::PluginLoadOutcome; pub use load_outcome::prompt_safe_plugin_description; pub use plugin_id::PluginId; pub use plugin_id::PluginIdError; pub use plugin_id::validate_plugin_segment; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AppConnectorId(pub String); #[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct PluginCapabilitySummary { pub config_name: String, pub display_name: String, pub description: Option, pub has_skills: bool, pub mcp_server_names: Vec, pub app_connector_ids: Vec, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct PluginTelemetryMetadata { pub plugin_id: PluginId, pub capability_summary: Option, } impl PluginTelemetryMetadata { pub fn from_plugin_id(plugin_id: &PluginId) -> Self { Self { plugin_id: plugin_id.clone(), capability_summary: None, } } } impl PluginCapabilitySummary { pub fn telemetry_metadata(&self) -> Option { PluginId::parse(&self.config_name) .ok() .map(|plugin_id| PluginTelemetryMetadata { plugin_id, capability_summary: Some(self.clone()), }) } }