use std::path::PathBuf; use clap::Parser; use color_eyre::eyre::Result; use omnigraph_server::{ServerConfig, init_tracing, load_server_settings, serve}; #[derive(Debug, Parser)] #[command(name = "omnigraph-server")] #[command(about = "HTTP server for the Omnigraph graph database")] struct Cli { /// Boot from a cluster: either a config directory (storage resolved /// through cluster.yaml) or a storage-root URI directly /// (s3://bucket/prefix — config-free serving from the bucket). /// The server's only boot source (RFC-011 cluster-only). #[arg(long)] cluster: Option, #[arg(long)] bind: Option, /// Run without bearer tokens and without a policy file (MR-723). /// Required when neither is configured — otherwise the server /// refuses to start to prevent shipping the illusion of protection. /// Equivalent to setting `OMNIGRAPH_UNAUTHENTICATED=1`. #[arg(long)] unauthenticated: bool, /// Fail startup if any applied graph is quarantined or fails to open. /// By default, graph-local failures are logged and healthy graphs still /// serve. Equivalent to setting `OMNIGRAPH_REQUIRE_ALL_GRAPHS=1`. #[arg(long)] require_all_graphs: bool, } #[tokio::main] async fn main() -> Result<()> { color_eyre::install()?; init_tracing(); let cli = Cli::parse(); let settings: ServerConfig = load_server_settings( cli.cluster.as_ref(), cli.bind, cli.unauthenticated, cli.require_all_graphs, ) .await?; serve(settings).await }