|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| mod bob;
|
| mod config;
|
| mod errant_ffi;
|
| mod grpc;
|
| mod http;
|
| mod nats_bus;
|
|
|
| use std::sync::Arc;
|
| use anyhow::Result;
|
| use tracing::{info, warn, error};
|
|
|
| #[tokio::main]
|
| async fn main() -> Result<()> {
|
| let cfg = config::Config::from_env();
|
|
|
|
|
| tracing_subscriber::fmt()
|
| .with_env_filter(&cfg.log_level)
|
| .json()
|
| .init();
|
|
|
| print_banner(&cfg);
|
|
|
|
|
| {
|
| let check = errant_ffi::verify_named(&["PUSH_UN", "SEAL"]);
|
| if check.ok {
|
| info!("liberrant {} online Β· FIPS SHA-256 verified", errant_ffi::version());
|
| } else {
|
| error!("liberrant self-check FAILED: {}", check.error);
|
| std::process::exit(1);
|
| }
|
| }
|
|
|
|
|
| let nats = match nats_bus::NatsBus::connect(&cfg.nats_url).await {
|
| Ok(bus) => {
|
| info!("NATS connected: {}", cfg.nats_url);
|
| Some(Arc::new(bus))
|
| }
|
| Err(e) => {
|
| warn!("NATS unavailable ({}): running in local mode", e);
|
| None
|
| }
|
| };
|
|
|
|
|
| let http_state = http::AppState {
|
| config: Arc::new(cfg.clone()),
|
| nats: nats.clone(),
|
| worm_url: format!("{}/api/labs/ledge/seal", cfg.os_url),
|
| };
|
|
|
|
|
| let http_addr: std::net::SocketAddr = cfg.http_addr().parse()?;
|
| let app = http::router(http_state)
|
| .layer(tower_http::cors::CorsLayer::permissive())
|
| .layer(tower_http::trace::TraceLayer::new_for_http());
|
|
|
| info!("REST/SSE listening on http://{}", http_addr);
|
| info!("gRPC endpoint defined at :{} (enable: install protoc, run cargo build)", cfg.grpc_port);
|
| info!("magmad online Β· EVIDENCE OR SILENCE Β· Ξ©βΊΞ¨βΊΞβΊΞβΊΞ£βΊΞ¦βΊΞ±");
|
|
|
| let listener = tokio::net::TcpListener::bind(http_addr).await?;
|
|
|
| tokio::select! {
|
| r = axum::serve(listener, app) => {
|
| if let Err(e) = r { error!("HTTP server error: {e}"); }
|
| }
|
| _ = tokio::signal::ctrl_c() => {
|
| info!("Ξ© β magmad shutting down");
|
| }
|
| }
|
|
|
| Ok(())
|
| }
|
|
|
| fn print_banner(cfg: &config::Config) {
|
| eprintln!(r#"
|
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| β ββββ ββββ ββββββ βββββββ ββββ ββββ ββββββ βββββββ β
|
| β βββββ βββββββββββββββββββββ βββββ βββββββββββββββββββββ β
|
| β ββββββββββββββββββββββ ββββββββββββββββββββββββββ βββ β
|
| β ββββββββββββββββββββββ βββββββββββββββββββββββββ βββ β
|
| β βββ βββ ββββββ βββββββββββββββ βββ ββββββ βββββββββββ β
|
| β βββ ββββββ βββ βββββββ βββ ββββββ ββββββββββ β
|
| β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
|
| β Sovereign Agentic Daemon v{} β
|
| β BOB: TRUST-DEED-GATE β MAMBA β WATSON β PROLOG β SEAL β
|
| β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
|
| β REST/SSE http://0.0.0.0:{} β
|
| β gRPC :{} (stub β install protoc to activate) β
|
| β NATS {}
|
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| "#,
|
| env!("CARGO_PKG_VERSION"),
|
| cfg.http_port,
|
| cfg.grpc_port,
|
| cfg.nats_url,
|
| );
|
| }
|
|
|