Skip to main content

systemprompt_cli/commands/plugins/
config.rs

1use anyhow::{Result, anyhow};
2use clap::Args;
3use systemprompt_extension::ExtensionRegistry;
4
5use super::types::{ExtensionConfigListOutput, ExtensionConfigOutput, ExtensionConfigSummary};
6use crate::CliConfig;
7use crate::shared::CommandOutput;
8
9#[derive(Debug, Clone, Args)]
10pub struct ConfigArgs {
11    #[arg(help = "Extension ID (optional - lists all if not specified)")]
12    pub id: Option<String>,
13}
14
15pub fn execute(args: &ConfigArgs, _config: &CliConfig) -> Result<CommandOutput> {
16    let registry = ExtensionRegistry::discover()?;
17
18    if let Some(id) = &args.id {
19        let ext = registry
20            .get(id)
21            .ok_or_else(|| anyhow!("Extension '{}' not found", id))?;
22
23        let output = ExtensionConfigOutput {
24            extension_id: systemprompt_identifiers::PluginId::new(ext.id()),
25            config_prefix: ext.config_prefix().map(String::from),
26            config_schema: ext.config_schema(),
27            has_config: ext.has_config(),
28        };
29
30        Ok(CommandOutput::card_value(
31            format!("Extension Config: {}", id),
32            &output,
33        ))
34    } else {
35        let mut extensions: Vec<ExtensionConfigSummary> = registry
36            .extensions()
37            .iter()
38            .map(|ext| ExtensionConfigSummary {
39                extension_id: systemprompt_identifiers::PluginId::new(ext.id()),
40                config_prefix: ext.config_prefix().map(String::from),
41                has_config: ext.has_config(),
42            })
43            .collect();
44
45        extensions.sort_by(|a, b| a.extension_id.cmp(&b.extension_id));
46        let total = extensions.len();
47
48        let output = ExtensionConfigListOutput { extensions, total };
49
50        Ok(CommandOutput::table_of(
51            vec!["extension_id", "config_prefix", "has_config"],
52            &output.extensions,
53        )
54        .with_title("Extension Configurations"))
55    }
56}