//! agent-manager — a CLI to manage local AI coding agents. //! //! The crate is organised around a few core concepts: //! //! * cli — clap definitions for the am command line interface. //! * config — YAML schema, loading, validation, includes, path expansion. //! * catalog — the merged agent catalog (embedded defaults + user config). //! * state — the local installation database (JSON file). //! * process — background/foreground process management (PID bookkeeping). //! * installers — one installer per method (npm, pip, cargo, go, bun, curl, //! binary, git). //! * commands — one module per CLI command. pub mod app; pub mod catalog; pub mod cli; pub mod commands; pub mod config; pub mod deps; pub mod doctor; pub mod download; pub mod installers; pub mod nav; pub mod output; pub mod probe; pub mod process; pub mod repl; pub mod runner; pub mod shell; pub mod state; pub mod toolchain; pub mod version; use clap::Parser; /// CLI entry point used by the am binary. Returns the process exit code. pub fn main_entry() -> i32 { let cli = cli::Cli::parse(); match app::App::from_cli(cli) { Ok(app) => match commands::execute(&app) { Ok(code) => code, Err(err) => { if app.json() { let payload = serde_json::json!({ "error": format!("{:#}", err), }); let _ = serde_json::to_writer_pretty(std::io::stdout(), &payload); let _ = writeln!(std::io::stdout()); } else { eprintln!("{} {}", "error:".red().bold(), format!("{:#}", err)); } 1 } }, Err(err) => { // Config could not even be loaded: fall back to plain stderr output. eprintln!("{} {}", "error:".red().bold(), format!("{:#}", err)); 1 } } } #[allow(unused_imports)] use colored::Colorize; use std::io::Write;