ssh-cli 0.4.1

Native Rust CLI that gives LLMs (Claude Code, Cursor, Windsurf) the ability to operate remote servers via SSH over stdin/stdout
Documentation
//! Ponto de entrada do binário ssh-cli.
//!
//! Mantém a lógica mínima: configura runtime tokio e chama `ssh_cli::run()`.

#[cfg(feature = "musl-allocator")]
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;

fn main() {
    let runtime = match tokio::runtime::Builder::new_multi_thread()
        .enable_all()
        .build()
    {
        Ok(rt) => rt,
        Err(e) => {
            eprintln!("erro ao criar runtime: {e}");
            std::process::exit(ssh_cli::erros::exit_codes::EX_IOERR);
        }
    };

    let resultado = runtime.block_on(ssh_cli::run());

    match resultado {
        Ok(()) => {
            if ssh_cli::signals::terminado() {
                std::process::exit(ssh_cli::erros::exit_codes::EX_SIGTERM);
            }
            if ssh_cli::signals::cancelado() {
                std::process::exit(ssh_cli::erros::exit_codes::EX_SIGINT);
            }
            std::process::exit(ssh_cli::erros::exit_codes::EX_OK);
        }
        Err(e) => {
            if ssh_cli::signals::terminado() {
                std::process::exit(ssh_cli::erros::exit_codes::EX_SIGTERM);
            }
            if ssh_cli::signals::cancelado() {
                std::process::exit(ssh_cli::erros::exit_codes::EX_SIGINT);
            }
            let quer_json = ssh_cli::output::quer_json_erros();
            if let Some(erro_ssh) = e.downcast_ref::<ssh_cli::erros::ErroSshCli>() {
                let code = erro_ssh.exit_code();
                let remote = match erro_ssh {
                    ssh_cli::erros::ErroSshCli::ComandoFalhou { exit_code, .. } => Some(*exit_code),
                    _ => None,
                };
                if quer_json {
                    let _ = ssh_cli::output::imprimir_erro_envelope(
                        code,
                        &erro_ssh.to_string(),
                        remote,
                    );
                } else {
                    eprintln!("{erro_ssh}");
                }
                std::process::exit(code);
            }
            let code = ssh_cli::erros::exit_codes::EX_GENERAL;
            if quer_json {
                let _ = ssh_cli::output::imprimir_erro_envelope(code, &e.to_string(), None);
            } else {
                eprintln!("{e}");
            }
            std::process::exit(code);
        }
    }
}