<div align="center">
  <img src="assets/img/banner.png" alt="Kodegen AI Banner" width="100%" />
</div>

# kodegen Daemon

A high-performance Unix daemon library with crossbeam-based service management.

## Features

- **Zero-allocation hot paths**: Uses crossbeam channels and fixed-size enums
- **True Unix daemon**: OS 
Service daemonization with systemd auto-detection  
- **Service management**: Supervise processes with automatic restart and health monitoring
- **System integration**: Self-installation with systemd/launchd support
- **Async compatible**: Can manage async applications while using sync internals

## Quick Start

### As a Library

Add to your `Cargo.toml`:

```toml
[dependencies]
kodegen-daemon = "0.1"
```

Use in your application:

```rust
use kodegen_daemon::{ServiceConfig, ServiceDefinition, ServiceManager, daemonise};
use std::path::Path;

fn main() -> anyhow::Result<()> {
    // Daemonize the process
    let pid_file = Path::new("/var/run/mydaemon.pid");
    daemonise(&pid_file)?;

    // Create service configuration
    let mut config = ServiceConfig::default();
    config.services.push(ServiceDefinition {
        name: "my-service".to_string(),
        command: "/usr/bin/my-app --daemon".to_string(),
        auto_restart: true,
        ..Default::default()
    });

    // Start daemon manager
    let manager = ServiceManager::new(&config)?;
    manager.run()?; // Runs until SIGTERM/SIGINT
    Ok(())
}
```

### As a Standalone Daemon

Build and install:

```bash
cargo build --release
sudo ./target/release/kodegend install
```

Configure services in `/etc/kodegend/services/`:

```toml
# /etc/kodegend/services/my-app.toml
name = "my-app"
command = "/usr/local/bin/my-app --serve"
auto_restart = true
user = "www-data"
restart_delay_s = 5

[health_check]
check_type = "http"
target = "http://localhost:8080/health"
interval_secs = 30
```

Start the daemon:

```bash
sudo systemctl start kodegend
```

## Architecture

- **ServiceManager**: Central event loop using crossbeam channels
- **ServiceWorker**: Individual service supervisor threads  
- **IPC**: Wait-free message passing with `Cmd`/`Evt` enums
- **Daemon**: Unix daemonization with systemd detection
- **Installer**: Self-installation with system integration

## System Requirements

- Unix-like OS (Linux, macOS)
- systemd (Linux) or launchd (macOS) for system integration
- Root privileges for installation

## License

Apache-2.0
