mod cli;
mod commands;
use agents_skills::Manager;
use agents_skills::error::Result;
use clap::Parser;
use cli::{BOLD, Cli, Command, RESET};
fn main() {
if std::env::args_os().len() == 1 {
cli::show_banner();
return;
}
let cli = match Cli::try_parse() {
Ok(cli) => cli,
Err(e) => {
if e.kind() == clap::error::ErrorKind::InvalidSubcommand {
let cmd = std::env::args().nth(1).unwrap_or_default();
println!("Unknown command: {cmd}");
println!("Run {BOLD}agents-skills --help{RESET} for usage.");
std::process::exit(1);
}
let code = if e.use_stderr() { 1 } else { 0 };
let _ = e.print();
std::process::exit(code);
}
};
if cli.version {
println!("{}", env!("CARGO_PKG_VERSION"));
return;
}
let manager = match Manager::new() {
Ok(m) => m,
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
};
let result: Result<()> = match cli.command {
Some(Command::Add(a)) => commands::add::run(&manager, a),
Some(Command::Remove(r)) => {
commands::selection::run(&manager, r, commands::selection::Action::Remove)
}
Some(Command::List(l)) => commands::list::run(&manager, l),
Some(Command::Disable(d)) => {
commands::selection::run(&manager, d, commands::selection::Action::Disable)
}
Some(Command::Enable(e)) => {
commands::selection::run(&manager, e, commands::selection::Action::Enable)
}
Some(Command::Agent(a)) => commands::agent::run(&manager, a),
None => Ok(()),
};
if let Err(e) = result {
eprintln!("Error: {e}");
std::process::exit(1);
}
}