Skip to main content

codex_plugin/
lib.rs

1//! Shared plugin package models, source providers, identifiers, and telemetry summaries.
2
3use std::collections::HashSet;
4
5pub use codex_utils_plugins::mention_syntax;
6pub use codex_utils_plugins::plugin_namespace_for_skill_path;
7
8mod load_outcome;
9pub mod manifest;
10mod plugin_id;
11mod provider;
12
13use codex_config::HookEventsToml;
14use codex_utils_absolute_path::AbsolutePathBuf;
15pub use load_outcome::EffectiveSkillRoots;
16pub use load_outcome::LoadedPlugin;
17pub use load_outcome::PluginLoadOutcome;
18pub use load_outcome::prompt_safe_plugin_description;
19pub use plugin_id::PluginId;
20pub use plugin_id::PluginIdError;
21pub use plugin_id::validate_plugin_segment;
22pub use provider::PluginProvider;
23pub use provider::PluginResourceLocator;
24pub use provider::ResolvedPlugin;
25pub use provider::ResolvedPluginError;
26pub use provider::ResolvedPluginLocation;
27
28#[derive(Debug, Clone, PartialEq, Eq, Hash)]
29pub struct AppConnectorId(pub String);
30
31#[derive(Debug, Clone, PartialEq, Eq)]
32pub struct AppDeclaration {
33    pub name: String,
34    pub connector_id: AppConnectorId,
35    pub category: Option<String>,
36}
37
38pub fn app_connector_ids_from_declarations<'a>(
39    app_declarations: impl IntoIterator<Item = &'a AppDeclaration>,
40) -> Vec<AppConnectorId> {
41    let mut connector_ids = Vec::new();
42    let mut seen_connector_ids = HashSet::new();
43    for app in app_declarations {
44        if seen_connector_ids.insert(&app.connector_id) {
45            connector_ids.push(app.connector_id.clone());
46        }
47    }
48    connector_ids
49}
50
51#[derive(Debug, Clone, Default, PartialEq, Eq)]
52pub struct PluginCapabilitySummary {
53    pub config_name: String,
54    pub display_name: String,
55    pub description: Option<String>,
56    pub has_skills: bool,
57    pub mcp_server_names: Vec<String>,
58    pub app_connector_ids: Vec<AppConnectorId>,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq)]
62pub struct PluginHookSource {
63    pub plugin_id: PluginId,
64    pub plugin_root: AbsolutePathBuf,
65    pub plugin_data_root: AbsolutePathBuf,
66    pub source_path: AbsolutePathBuf,
67    pub source_relative_path: String,
68    pub hooks: HookEventsToml,
69}
70
71#[derive(Debug, Clone, PartialEq, Eq)]
72pub struct PluginTelemetryMetadata {
73    /// Local plugin identifier used by Codex configuration and the plugin cache,
74    /// when it has been resolved.
75    pub plugin_id: Option<PluginId>,
76    /// Optional backend identifier for remote plugins.
77    pub remote_plugin_id: Option<String>,
78    pub capability_summary: Option<PluginCapabilitySummary>,
79}