use crate::commands::doctor::{run_doctor, run_stats, DoctorArgs, StatsArgs};
use crate::commands::index::{run_index, run_rebuild, IndexArgs, RebuildArgs};
use crate::commands::memory::{
run_delta, run_eval, run_memories, run_memory_show, run_read_resource, run_related,
run_resources, DeltaArgs, EvalArgs, MemoriesArgs, MemoryShowArgs, ReadResourceArgs,
RelatedArgs, ResourcesArgs,
};
use crate::commands::pins::{run_pin, run_pins, run_unpin, PinArgs, PinsArgs, UnpinArgs};
use crate::commands::recent::{run_day, run_recent, DayArgs, RecentArgs};
use crate::commands::search::{run_bundle, run_search, run_show, BundleArgs, SearchArgs, ShowArgs};
use crate::commands::watch::{run_status, run_watch, StatusArgs, WatchArgs};
use anyhow::Result;
use clap::{CommandFactory, Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(
version,
about = "Local search and recall for Codex session JSONL archives"
)]
struct Cli {
#[command(subcommand)]
command: Option<Command>,
}
#[derive(Debug, Subcommand)]
enum Command {
Index(IndexArgs),
Rebuild(RebuildArgs),
Watch(WatchArgs),
Status(StatusArgs),
Search(SearchArgs),
Recent(RecentArgs),
Day(DayArgs),
Bundle(BundleArgs),
Show(ShowArgs),
Memories(MemoriesArgs),
MemoryShow(MemoryShowArgs),
Delta(DeltaArgs),
Related(RelatedArgs),
Eval(EvalArgs),
Resources(ResourcesArgs),
ReadResource(ReadResourceArgs),
Pin(PinArgs),
Pins(PinsArgs),
Unpin(UnpinArgs),
Doctor(DoctorArgs),
Stats(StatsArgs),
}
pub fn run(args: impl IntoIterator<Item = String>) -> Result<()> {
let cli = Cli::parse_from(std::iter::once("codex-recall".to_owned()).chain(args));
match cli.command {
Some(Command::Index(args)) => run_index(args),
Some(Command::Rebuild(args)) => run_rebuild(args),
Some(Command::Watch(args)) => run_watch(args),
Some(Command::Status(args)) => run_status(args),
Some(Command::Search(args)) => run_search(args),
Some(Command::Recent(args)) => run_recent(args),
Some(Command::Day(args)) => run_day(args),
Some(Command::Bundle(args)) => run_bundle(args),
Some(Command::Show(args)) => run_show(args),
Some(Command::Memories(args)) => run_memories(args),
Some(Command::MemoryShow(args)) => run_memory_show(args),
Some(Command::Delta(args)) => run_delta(args),
Some(Command::Related(args)) => run_related(args),
Some(Command::Eval(args)) => run_eval(args),
Some(Command::Resources(args)) => run_resources(args),
Some(Command::ReadResource(args)) => run_read_resource(args),
Some(Command::Pin(args)) => run_pin(args),
Some(Command::Pins(args)) => run_pins(args),
Some(Command::Unpin(args)) => run_unpin(args),
Some(Command::Doctor(args)) => run_doctor(args),
Some(Command::Stats(args)) => run_stats(args),
None => {
Cli::command().print_help()?;
println!();
Ok(())
}
}
}