use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "skillset")]
#[command(about = "A package manager for coding agent skills")]
#[command(version)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Add {
reference: String,
#[arg(long, short)]
convention: Option<String>,
#[arg(long, short)]
version: Option<String>,
},
Remove {
name: String,
},
List {
#[arg(long, short)]
verbose: bool,
},
Update {
name: Option<String>,
},
Info {
name: String,
},
Convention {
#[command(subcommand)]
command: ConventionCommands,
},
Publish {
path: String,
reference: String,
#[arg(long, short)]
registry: Option<String>,
},
}
#[derive(Subcommand)]
pub enum ConventionCommands {
List,
Enable { name: String },
Disable { name: String },
Configure { name: String },
}
mod args;
mod commands;
pub async fn handle_command(cli: Cli) -> crate::error::Result<()> {
match cli.command {
Commands::Add {
reference,
convention,
version,
} => commands::handle_add(reference, convention, version).await,
Commands::Remove { name } => commands::handle_remove(name).await,
Commands::List { verbose } => commands::handle_list(verbose).await,
Commands::Update { name } => commands::handle_update(name).await,
Commands::Info { name } => commands::handle_info(name).await,
Commands::Convention { command } => commands::handle_convention(command).await,
Commands::Publish {
path,
reference,
registry,
} => commands::handle_publish(path, reference, registry).await,
}
}