agent-vault 0.1.0

Zero-trust credential manager for AI agents
Documentation
use crate::core::vault::{CheckIssue, Vault};

pub fn run(json: bool) -> anyhow::Result<()> {
    let root = std::env::current_dir()?;
    let vault = Vault::open(&root)?;
    let issues = vault.check()?;

    if json {
        let mut errors = vec![];
        let mut warnings = vec![];
        for issue in &issues {
            match issue {
                CheckIssue::Error(msg) => errors.push(msg.as_str()),
                CheckIssue::Warning(msg) => warnings.push(msg.as_str()),
            }
        }
        let data = serde_json::json!({
            "errors": errors,
            "warnings": warnings,
        });
        println!("{}", serde_json::to_string_pretty(&data)?);
        if !errors.is_empty() {
            std::process::exit(1);
        }
        return Ok(());
    }

    if issues.is_empty() {
        println!("No issues found. Vault is healthy.");
        return Ok(());
    }

    let mut errors = 0;
    let mut warnings = 0;

    for issue in &issues {
        match issue {
            CheckIssue::Error(msg) => {
                println!("ERROR: {msg}");
                errors += 1;
            }
            CheckIssue::Warning(msg) => {
                println!("WARNING: {msg}");
                warnings += 1;
            }
        }
    }

    println!();
    println!("{errors} error(s), {warnings} warning(s).");

    if errors > 0 {
        std::process::exit(1);
    }

    Ok(())
}