systemprompt_cli/commands/plugins/capabilities/
mod.rs1pub mod jobs;
11pub mod roles;
12pub mod schemas;
13pub mod templates;
14pub mod tools;
15
16use clap::{Args, Subcommand};
17
18use super::discover_registry;
19use super::types::CapabilitiesSummaryOutput;
20use crate::CliConfig;
21use crate::shared::{CommandOutput, render_result};
22
23#[derive(Debug, Args)]
24pub struct CapabilitiesArgs {
25 #[command(subcommand)]
26 pub cmd: Option<CapabilitiesCommands>,
27}
28
29#[derive(Debug, Subcommand)]
30pub enum CapabilitiesCommands {
31 #[command(about = "List all jobs across extensions")]
32 Jobs(jobs::JobsArgs),
33
34 #[command(about = "List all templates across extensions")]
35 Templates(templates::TemplatesArgs),
36
37 #[command(about = "List all schemas across extensions")]
38 Schemas(schemas::SchemasArgs),
39
40 #[command(about = "List all tools across extensions")]
41 Tools(tools::ToolsArgs),
42
43 #[command(about = "List all roles across extensions")]
44 Roles(roles::RolesArgs),
45}
46
47pub(super) fn execute(args: CapabilitiesArgs, config: &CliConfig) {
48 match args.cmd {
49 None => {
50 render_result(&execute_summary(config), config);
51 },
52 Some(CapabilitiesCommands::Jobs(args)) => {
53 render_result(&jobs::execute(&args, config), config);
54 },
55 Some(CapabilitiesCommands::Templates(args)) => {
56 render_result(&templates::execute(&args, config), config);
57 },
58 Some(CapabilitiesCommands::Schemas(args)) => {
59 render_result(&schemas::execute(&args, config), config);
60 },
61 Some(CapabilitiesCommands::Tools(args)) => {
62 render_result(&tools::execute(&args, config), config);
63 },
64 Some(CapabilitiesCommands::Roles(args)) => {
65 render_result(&roles::execute(&args, config), config);
66 },
67 }
68}
69
70fn execute_summary(_config: &CliConfig) -> CommandOutput {
71 let registry = discover_registry();
72
73 let mut jobs = 0;
74 let mut templates = 0;
75 let mut schemas = 0;
76 let mut tools = 0;
77 let mut roles = 0;
78 let mut extension_count = 0;
79
80 for ext in registry.extensions() {
81 extension_count += 1;
82 jobs += ext.jobs().len();
83 schemas += ext.schemas().len();
84 roles += ext.roles().len();
85 tools += ext.tool_providers().len();
86
87 for provider in ext.template_providers() {
88 templates += provider.templates().len();
89 }
90 }
91
92 let output = CapabilitiesSummaryOutput {
93 jobs,
94 templates,
95 schemas,
96 tools,
97 roles,
98 extension_count,
99 };
100
101 CommandOutput::card_value("Capabilities Summary", &output)
102}