use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "codebase-recall",
version,
about = "CLI codebase context dumper for LLMs and code relation grapher",
propagate_version = true
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand, Debug)]
pub enum Command {
Dump(DumpArgs),
Init(InitArgs),
Sync(SyncArgs),
Graph(GraphArgs),
Serve(ServeArgs),
}
#[derive(Parser, Debug)]
pub struct DumpArgs {
#[arg(default_value = ".")]
pub path: PathBuf,
#[arg(short = 'f', long = "file", default_value = "codebase-context.md")]
pub output: PathBuf,
#[arg(long, default_value_t = 50)]
pub max_size_kb: u64,
#[arg(short = 'r', long = "relation")]
pub relation: Option<String>,
#[arg(long, default_value_t = 2)]
pub depth: u32,
#[arg(long)]
pub no_sync: bool,
}
#[derive(Parser, Debug)]
pub struct InitArgs {
#[arg(long, default_value = ".")]
pub project: PathBuf,
#[arg(long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct SyncArgs {
#[arg(long, default_value = ".")]
pub project: PathBuf,
#[arg(long, default_value_t = 512)]
pub max_file_kb: u64,
#[arg(long, value_delimiter = ',')]
pub language: Vec<String>,
}
#[derive(Parser, Debug)]
pub struct GraphQuery {
#[arg(long, default_value = ".")]
pub project: PathBuf,
#[arg(long, default_value = "both")]
pub scope: String,
#[arg(long, value_delimiter = ',', default_value = "imports,calls,contains")]
pub kinds: Vec<String>,
#[arg(long)]
pub path: Option<String>,
#[arg(long)]
pub focus: Option<String>,
#[arg(long, default_value_t = 2)]
pub depth: u32,
#[arg(long, default_value_t = 0.4)]
pub min_confidence: f32,
#[arg(long)]
pub include_external: bool,
#[arg(long, default_value_t = 4000)]
pub max_nodes: usize,
#[arg(long)]
pub no_sync: bool,
}
#[derive(Parser, Debug)]
pub struct GraphArgs {
#[command(flatten)]
pub query: GraphQuery,
#[arg(long, value_delimiter = ',', default_value = "html")]
pub format: Vec<String>,
#[arg(short = 'o', long)]
pub output: Option<PathBuf>,
}
#[derive(Parser, Debug)]
pub struct ServeArgs {
#[command(flatten)]
pub query: GraphQuery,
#[arg(long, default_value_t = 0)]
pub port: u16,
#[arg(long)]
pub no_open: bool,
}