systemprompt-cli 0.14.5

Unified CLI for systemprompt.io AI governance: agent orchestration, MCP governance, analytics, profiles, cloud deploy, and self-hosted operations.
Documentation
use anyhow::{Result, anyhow};
use clap::Args;
use systemprompt_extension::ExtensionRegistry;

use super::types::{ExtensionConfigListOutput, ExtensionConfigOutput, ExtensionConfigSummary};
use crate::CliConfig;
use crate::shared::CommandOutput;

#[derive(Debug, Clone, Args)]
pub struct ConfigArgs {
    #[arg(help = "Extension ID (optional - lists all if not specified)")]
    pub id: Option<String>,
}

pub(super) fn execute(args: &ConfigArgs, _config: &CliConfig) -> Result<CommandOutput> {
    let registry = ExtensionRegistry::discover()?;

    if let Some(id) = &args.id {
        let ext = registry
            .get(id)
            .ok_or_else(|| anyhow!("Extension '{}' not found", id))?;

        let output = ExtensionConfigOutput {
            extension_id: systemprompt_identifiers::PluginId::new(ext.id()),
            config_prefix: ext.config_prefix().map(String::from),
            config_schema: ext.config_schema(),
            has_config: ext.has_config(),
        };

        Ok(CommandOutput::card_value(
            format!("Extension Config: {}", id),
            &output,
        ))
    } else {
        let mut extensions: Vec<ExtensionConfigSummary> = registry
            .extensions()
            .iter()
            .map(|ext| ExtensionConfigSummary {
                extension_id: systemprompt_identifiers::PluginId::new(ext.id()),
                config_prefix: ext.config_prefix().map(String::from),
                has_config: ext.has_config(),
            })
            .collect();

        extensions.sort_by(|a, b| a.extension_id.cmp(&b.extension_id));
        let total = extensions.len();

        let output = ExtensionConfigListOutput { extensions, total };

        Ok(CommandOutput::table_of(
            vec!["extension_id", "config_prefix", "has_config"],
            &output.extensions,
        )
        .with_title("Extension Configurations"))
    }
}