mod commands;
mod core;
use clap::{Parser, Subcommand};
use std::process;
#[derive(Parser)]
#[command(
name = "notarai",
version,
about = "CLI validator for NotarAI spec files"
)]
struct Cli {
#[command(subcommand)]
command: Option<Commands>,
}
#[derive(Subcommand)]
enum Commands {
Validate {
path: Option<String>,
},
Init,
Hook {
#[command(subcommand)]
action: HookAction,
},
Cache {
#[command(subcommand)]
action: commands::cache::CacheAction,
},
Mcp,
SchemaBump,
}
#[derive(Subcommand)]
enum HookAction {
Validate,
}
fn main() {
let cli = Cli::parse();
let exit_code = match cli.command {
Some(Commands::Validate { path }) => commands::validate::run(path),
Some(Commands::Init) => commands::init::run(None),
Some(Commands::Hook { action }) => match action {
HookAction::Validate => commands::hook_validate::run(),
},
Some(Commands::Cache { action }) => commands::cache::run(action),
Some(Commands::Mcp) => commands::mcp::run(),
Some(Commands::SchemaBump) => commands::schema_bump::run(None),
None => {
use clap::CommandFactory;
Cli::command().print_help().ok();
eprintln!();
1
}
};
process::exit(exit_code);
}