agent-spreadsheet 0.10.1

Stateless spreadsheet CLI for AI agents — read, profile, edit, and diff .xlsx workbooks from the command line
use anyhow::Result;
use clap::Parser;
use spreadsheet_mcp::cli;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<()> {
    let cli_args = cli::Cli::parse();
    if let Err(error) = cli::errors::ensure_output_supported(cli_args.format) {
        emit_error_and_exit(error);
    }

    match cli::run_command(cli_args.command).await {
        Ok(payload) => {
            if let Err(error) =
                cli::output::emit_value(&payload, cli_args.format, cli_args.compact, cli_args.quiet)
            {
                emit_error_and_exit(error);
            }
            Ok(())
        }
        Err(error) => {
            emit_error_and_exit(error);
        }
    }
}

fn emit_error_and_exit(error: anyhow::Error) -> ! {
    let envelope = cli::errors::envelope_for(&error);
    let stderr = std::io::stderr();
    let mut handle = stderr.lock();
    if serde_json::to_writer(&mut handle, &envelope).is_err() {
        eprintln!("{{\"code\":\"COMMAND_FAILED\",\"message\":\"{}\"}}", error);
    } else {
        use std::io::Write;
        let _ = handle.write_all(b"\n");
    }
    std::process::exit(1)
}