beachcomber 0.1.1

A centralized daemon that caches shell state (git, battery, hostname, etc.) so every consumer reads from one fast cache instead of independently forking shells
Documentation
use beachcomber::daemon;
use std::path::PathBuf;
use tempfile::TempDir;
use tokio::net::UnixStream;

#[test]
fn pid_file_path() {
    let sock = PathBuf::from("/tmp/beachcomber-501/sock");
    let pid = daemon::pid_path_for_socket(&sock);
    assert_eq!(pid, PathBuf::from("/tmp/beachcomber-501/daemon.pid"));
}

#[test]
fn is_daemon_responsive_when_no_socket() {
    let path = PathBuf::from("/tmp/nonexistent-beachcomber-test/sock");
    assert!(
        !daemon::is_daemon_running(&path),
        "Should return false when socket doesn't exist"
    );
}

#[tokio::test]
async fn socket_activation_starts_daemon() {
    let tmp = TempDir::new().unwrap();
    let sock = tmp.path().join("sock");

    let config = beachcomber::config::Config::default();
    let handle = daemon::start_in_process(sock.clone(), config);

    tokio::time::sleep(std::time::Duration::from_millis(100)).await;

    let stream = UnixStream::connect(&sock).await;
    assert!(stream.is_ok(), "Should connect to daemon socket");

    handle.abort();
}