use clap::{Parser, Subcommand};
use agent_memgc::cli::*;
use agent_memgc::mcp::McpServer;
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "agent-memgc",
author = "Ronit Gupta <ronitgupta138@gmail.com>",
version,
about = "High-performance linter, cache-layout optimizer, and garbage collector for AI agent instruction files (AGENTS.md, CLAUDE.md, .cursorrules)",
long_about = None
)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand, Debug)]
enum Commands {
Check {
file: PathBuf,
#[arg(long, default_value = ".")]
root: PathBuf,
#[arg(long, default_value_t = false)]
json: bool,
},
Fix {
file: PathBuf,
#[arg(long, default_value = ".")]
root: PathBuf,
#[arg(long, default_value_t = false)]
dry_run: bool,
},
Stats {
file: PathBuf,
#[arg(long, default_value = ".")]
root: PathBuf,
},
Mcp,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Check { file, root, json } => {
let ok = cmd_check(&file, &root, json)?;
if !ok {
std::process::exit(1);
}
}
Commands::Fix { file, root, dry_run } => {
cmd_fix(&file, &root, dry_run)?;
}
Commands::Stats { file, root } => {
cmd_stats(&file, &root)?;
}
Commands::Mcp => {
let server = McpServer::new();
server.run_stdio().await?;
}
}
Ok(())
}