systemprompt-cli 0.1.22

systemprompt.io OS - CLI for agent orchestration, AI operations, and system management
Documentation
mod jobs;
mod llm_providers;
mod roles;
mod schemas;
mod templates;
mod tools;

use clap::{Args, Subcommand};
use systemprompt_extension::ExtensionRegistry;

use super::types::CapabilitiesSummaryOutput;
use crate::CliConfig;
use crate::shared::{CommandResult, render_result};

#[derive(Debug, Args)]
pub struct CapabilitiesArgs {
    #[command(subcommand)]
    pub cmd: Option<CapabilitiesCommands>,
}

#[derive(Debug, Subcommand)]
pub enum CapabilitiesCommands {
    #[command(about = "List all jobs across extensions")]
    Jobs(jobs::JobsArgs),

    #[command(about = "List all templates across extensions")]
    Templates(templates::TemplatesArgs),

    #[command(about = "List all schemas across extensions")]
    Schemas(schemas::SchemasArgs),

    #[command(about = "List all tools across extensions")]
    Tools(tools::ToolsArgs),

    #[command(about = "List all roles across extensions")]
    Roles(roles::RolesArgs),

    #[command(about = "List all LLM providers across extensions")]
    LlmProviders(llm_providers::LlmProvidersArgs),
}

pub fn execute(args: CapabilitiesArgs, config: &CliConfig) {
    match args.cmd {
        None => {
            render_result(&execute_summary(config));
        },
        Some(CapabilitiesCommands::Jobs(args)) => {
            render_result(&jobs::execute(&args, config));
        },
        Some(CapabilitiesCommands::Templates(args)) => {
            render_result(&templates::execute(&args, config));
        },
        Some(CapabilitiesCommands::Schemas(args)) => {
            render_result(&schemas::execute(&args, config));
        },
        Some(CapabilitiesCommands::Tools(args)) => {
            render_result(&tools::execute(&args, config));
        },
        Some(CapabilitiesCommands::Roles(args)) => {
            render_result(&roles::execute(&args, config));
        },
        Some(CapabilitiesCommands::LlmProviders(args)) => {
            render_result(&llm_providers::execute(&args, config));
        },
    }
}

pub fn execute_summary(_config: &CliConfig) -> CommandResult<CapabilitiesSummaryOutput> {
    let registry = ExtensionRegistry::discover();

    let mut jobs = 0;
    let mut templates = 0;
    let mut schemas = 0;
    let mut tools = 0;
    let mut roles = 0;
    let mut llm_providers = 0;
    let mut extension_count = 0;

    for ext in registry.extensions() {
        extension_count += 1;
        jobs += ext.jobs().len();
        schemas += ext.schemas().len();
        roles += ext.roles().len();
        llm_providers += ext.llm_providers().len();
        tools += ext.tool_providers().len();

        for provider in ext.template_providers() {
            templates += provider.templates().len();
        }
    }

    let output = CapabilitiesSummaryOutput {
        jobs,
        templates,
        schemas,
        tools,
        roles,
        llm_providers,
        extension_count,
    };

    CommandResult::card(output).with_title("Capabilities Summary")
}