sil-cli 0.1.0

CLI for the Semantic Integrity Layer — scan input for Unicode spoofing, confusable attacks, and semantic drift
#![warn(clippy::pedantic)]

mod commands;
mod formatter;

use clap::Parser;
use commands::build_risk_input;
use formatter::format_decision;
use sil_policy::evaluate;

#[derive(Parser)]
struct Args {
    #[arg(short, long)]
    input: String,
}

fn main() {
    let args = Args::parse();

    let normalized = sil_normalizer::normalize_input(&args.input);
    let confusable_flags = sil_confusable::detect_confusables(&args.input);
    let semantic_score = sil_semantic::semantic_similarity(&args.input, "reference");

    let risk = build_risk_input(&confusable_flags, semantic_score);

    let decision = evaluate(risk, &args.input);

    println!("INPUT      : {}", args.input);
    println!("NORMALIZED : {}", normalized);
    println!("FLAGS      : {:?}", confusable_flags);
    println!("DECISION   : {}", format_decision(&decision));
}