use clap::Parser;
use claude_code_acp::{cli::Cli, run_acp_with_cli, shutdown_otel};
use std::io::IsTerminal;
use tokio::signal;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
let result = tokio::select! {
result = run_acp_with_cli(&cli) => result,
_ = signal::ctrl_c() => {
eprintln!("Received SIGINT, shutting down...");
Ok(())
}
_ = async {
#[cfg(unix)]
{
let mut sigterm = signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("Failed to register SIGTERM handler");
sigterm.recv().await
}
#[cfg(not(unix))]
{
std::future::pending::<()>().await
}
} => {
eprintln!("Received SIGTERM, shutting down...");
Ok(())
}
};
shutdown_otel();
if let Err(e) = result {
eprintln!("Error: {}", e);
if std::io::stdin().is_terminal() {
eprintln!("\nFor debugging, run with --diagnostic to log to a file.");
eprintln!("Or use -v/-vv/-vvv for more verbose logging.");
}
std::process::exit(1);
}
Ok(())
}