mod launchd; mod lifecycle; mod registry; mod server; mod surface; use anyhow::Result; #[tokio::main] async fn main() -> Result<()> { let arg = std::env::args().nth(1); match arg.as_deref() { Some("install-agent") => { launchd::install_agent()?; println!("launchd agent installed"); Ok(()) } Some("--help") | Some("-h") => { println!("spaceshd [install-agent]"); Ok(()) } _ => run_daemon().await, } } async fn run_daemon() -> Result<()> { let Some(_lock) = lifecycle::acquire_instance_lock()? else { eprintln!("another spaceshd is already running"); return Ok(()); }; lifecycle::clear_stale_socket()?; let sock = lifecycle::socket_path()?; eprintln!("spaceshd listening on {}", sock.display()); server::serve(&sock).await }