#![recursion_limit = "512"]
use clap::{Parser, Subcommand};
use tracing_subscriber::EnvFilter;
mod cmd;
mod output;
#[derive(Parser)]
#[command(
name = "lip",
version = env!("CARGO_PKG_VERSION"),
about = "LIP — Linked Incremental Protocol CLI"
)]
struct Cli {
#[command(subcommand)]
command: Commands,
#[arg(long, global = true, default_value = "warn", env = "LIP_LOG")]
log: String,
}
#[derive(Subcommand)]
enum Commands {
Daemon(cmd::daemon::DaemonArgs),
Index(cmd::index::IndexArgs),
Query(cmd::query::QueryArgs),
Import(cmd::import::ImportArgs),
Export(cmd::export::ExportArgs),
Lsp(cmd::lsp::LspArgs),
Fetch(cmd::fetch::FetchArgs),
Push(cmd::push::PushArgs),
Annotate(cmd::annotate::AnnotateArgs),
Mcp(cmd::mcp::McpArgs),
Slice(cmd::slice::SliceArgs),
StreamContext(cmd::stream_context::StreamContextArgs),
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::new(&cli.log))
.with_target(false)
.init();
match cli.command {
Commands::Daemon(args) => cmd::daemon::run(args).await,
Commands::Index(args) => cmd::index::run(args).await,
Commands::Query(args) => cmd::query::run(args).await,
Commands::Import(args) => cmd::import::run(args).await,
Commands::Export(args) => cmd::export::run(args).await,
Commands::Lsp(args) => cmd::lsp::run(args).await,
Commands::Fetch(args) => cmd::fetch::run(args).await,
Commands::Push(args) => cmd::push::run(args).await,
Commands::Annotate(args) => cmd::annotate::run(args).await,
Commands::Mcp(args) => cmd::mcp::run(args).await,
Commands::Slice(args) => cmd::slice::run(args).await,
Commands::StreamContext(args) => cmd::stream_context::run(args).await,
}
}