decision_cockpit 0.1.0

Layer — product decision memory with MCP tools and an embedded review dashboard
Documentation
use decision_cockpit::{config::Config, http, state::AppState};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    init_tracing();

    let config = Config::from_env()?;
    let state = AppState::connect(&config.database_url).await?;
    state.migrate().await?;

    let app = http::router(state, &config);

    let listener = tokio::net::TcpListener::bind(&config.api_bind_addr).await?;
    tracing::info!(addr = %config.api_bind_addr, "HTTP API listening");

    axum::serve(listener, app).await?;
    Ok(())
}

fn init_tracing() {
    let filter = EnvFilter::try_from_default_env()
        .unwrap_or_else(|_| EnvFilter::new("info,decision_cockpit=debug"));
    tracing_subscriber::registry()
        .with(filter)
        .with(tracing_subscriber::fmt::layer())
        .init();
}