#![forbid(unsafe_code)]
use std::{
io::{self, Write},
path::PathBuf,
process::ExitCode,
};
use clap::{Parser, Subcommand};
use skill_evidence::{Host, cli};
#[derive(Debug, Parser)]
#[command(name = "skill-evidence")]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Debug, Subcommand)]
enum Command {
Skills(cli::SkillsArgs),
}
fn main() -> ExitCode {
let parsed = Cli::parse();
let mut out = io::stdout().lock();
let mut err = io::stderr().lock();
let exit = match parsed.command {
Command::Skills(args) => cli::run(args, &host(), &mut out, &mut err),
};
out.flush().ok();
err.flush().ok();
exit_code(exit)
}
fn host() -> Host {
Host {
namespace: "skill-evidence".to_owned(),
command: "skill-evidence".to_owned(),
cargo_package: "skill-evidence".to_owned(),
skills_directory: PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(".claude/skills"),
}
}
fn exit_code(exit: cli::Exit) -> ExitCode {
match exit {
cli::Exit::Success => ExitCode::SUCCESS,
cli::Exit::UnsafeFailure => ExitCode::from(1),
cli::Exit::Refusal => ExitCode::from(3),
}
}