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