akashic 0.2.0

Reader-agnostic Markdown knowledge graph engine
Documentation
use clap::Parser;
use std::process;

use akashic::cli::{Cli, Commands};

fn main() {
    let cli = Cli::parse();
    let exit_code = match cli.command {
        Commands::Inspect { path, json } => {
            if let Err(err) = akashic::cli::run_inspect(&path, json) {
                eprintln!("Error: {}", err);
                1
            } else {
                0
            }
        }
        Commands::Lint { path, json } => match akashic::cli::run_lint(&path, json) {
            Ok(healthy) => {
                if healthy {
                    0
                } else {
                    1
                }
            }
            Err(err) => {
                eprintln!("Error: {}", err);
                1
            }
        },
        Commands::Query {
            vault,
            seed,
            mode,
            as_of,
            scope,
            json,
        } => match akashic::cli::run_query(&vault, &seed, mode, as_of.as_deref(), &scope, json) {
            Ok(code) => code,
            Err(err) => {
                eprintln!("Error: {}", err);
                1
            }
        },
        Commands::Plan { vault, out } => {
            if let Err(err) = akashic::cli::run_plan(&vault, out.as_deref()) {
                eprintln!("Error: {}", err);
                1
            } else {
                0
            }
        }
        Commands::Apply {
            vault,
            plan,
            dry_run,
        } => {
            if let Err(err) = akashic::cli::run_apply(&vault, &plan, dry_run) {
                eprintln!("Error: {}", err);
                1
            } else {
                0
            }
        }
        Commands::Export {
            vault,
            format,
            out,
            json,
        } => {
            if let Err(err) = akashic::cli::run_export(&vault, &format, &out, json) {
                eprintln!("Error: {}", err);
                1
            } else {
                0
            }
        }
        Commands::Mcp { vault } => {
            let rt = tokio::runtime::Builder::new_multi_thread()
                .enable_all()
                .build()
                .expect("Failed to initialize Tokio runtime");
            if let Err(err) = rt.block_on(akashic::mcp::run_mcp_server(vault)) {
                eprintln!("Error: {}", err);
                1
            } else {
                0
            }
        }
    };

    if exit_code != 0 {
        process::exit(exit_code);
    }
}