use std::env;
use std::time::Duration;
const RELAY_HOST_SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(5);
fn main() {
let arguments: Vec<String> = env::args().skip(1).collect();
let is_relay_host = matches!(
(arguments.first(), arguments.get(1)),
(Some(first), Some(second)) if first == "host" && second == "relay"
);
let runtime = match tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
{
Ok(runtime) => runtime,
Err(source) => {
eprintln!("agentmux: failed to build async runtime: {source}");
std::process::exit(1);
}
};
let exit_code = runtime.block_on(async move {
match agentmux::commands::run_agentmux(arguments).await {
Ok(()) => 0,
Err(err) => {
eprintln!("agentmux: {err}");
1
}
}
});
if is_relay_host {
runtime.shutdown_timeout(RELAY_HOST_SHUTDOWN_TIMEOUT);
} else {
drop(runtime);
}
std::process::exit(exit_code);
}