feat(daemon): entrypoint with single-instance lock and lazy socket bind

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-09 20:00:41 +07:00
parent 531f89eb73
commit 4b1a544923
2 changed files with 33 additions and 2 deletions
+29 -2
View File
@@ -1,8 +1,35 @@
mod launchd;
mod lifecycle;
mod registry;
mod server;
mod surface;
fn main() {
println!("spaceshd skeleton");
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
}