use clap::Parser;
use entrenar_shell::{start_with_state, SessionState};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "aprender-train-shell")]
#[command(about = "Interactive REPL for HuggingFace model exploration and distillation")]
#[command(version = concat!(env!("CARGO_PKG_VERSION"), " (", env!("APR_GIT_SHA"), ")"))]
struct Cli {
#[arg(short, long)]
session: Option<PathBuf>,
#[arg(short, long)]
command: Option<String>,
}
fn main() {
let cli = Cli::parse();
let state = if let Some(ref path) = cli.session {
match SessionState::load(path) {
Ok(s) => {
println!("Loaded session from {}", path.display());
s
}
Err(e) => {
eprintln!("Failed to load session from {}: {e}", path.display());
std::process::exit(1);
}
}
} else {
SessionState::new()
};
if let Some(cmd) = cli.command {
let mut state = state;
match entrenar_shell::commands::parse(&cmd) {
Ok(parsed) => match entrenar_shell::commands::execute(&parsed, &mut state) {
Ok(output) => {
if !output.is_empty() {
println!("{output}");
}
}
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
},
Err(e) => {
eprintln!("Parse error: {e}");
std::process::exit(1);
}
}
return;
}
if let Err(e) = start_with_state(state) {
eprintln!("Error: {e}");
std::process::exit(1);
}
}