mod agents;
mod bash_danger;
mod bash_mutations;
mod chardiff;
mod cli;
mod elicitation;
mod files;
mod image;
mod live;
mod model;
mod parse;
mod path;
mod plan;
mod recover;
mod search;
mod session;
mod show;
mod stats;
mod subagent;
mod text;
mod time_window;
mod timez;
mod turns;
mod whoami;
use std::process::ExitCode;
use anyhow::Result;
use crate::cli::{parse_argv, Cli, Command};
#[global_allocator]
static GLOBAL_ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc;
fn main() -> ExitCode {
let cli = parse_argv();
if let Some(dir) = cli.claude_home.clone() {
path::set_claude_home_override(dir);
}
match run(cli) {
Ok(()) => ExitCode::SUCCESS,
Err(err) => {
eprintln!("csift: error: {err:#}");
ExitCode::FAILURE
}
}
}
fn run(cli: Cli) -> Result<()> {
match cli.command {
Command::List(args) => session::run_list(&args),
Command::Search(args) => search::run_search(&args),
Command::Show(args) => show::run_show(&args),
Command::Stats(args) => stats::run_stats(&args),
Command::Whoami(args) => whoami::run_whoami(&args),
Command::Agents(args) => agents::run_agents(&args),
Command::Files(args) => files::run_files(&args),
Command::Recover(args) => recover::run_recover(&args),
Command::Plan(args) => plan::run_plan(&args),
Command::Verbatim(args) => turns::run_verbatim(&args),
Command::Image(args) => image::run_image(&args),
Command::Status(args) => live::run_status(&args),
Command::Wait(args) => live::run_wait(&args),
Command::Send(args) => live::channel::run_send(&args),
Command::Msg(args) => live::channel::run_msg(&args),
Command::Ack(args) => live::channel::run_ack(&args),
Command::Turns(_) => anyhow::bail!(
"`csift turns` was RENAMED to `csift verbatim` in v0.5 — same command, same \
flags (reconstruct the VERBATIM turns a compaction summary clipped): re-run \
as `csift verbatim …`. To simply READ a session's recent turns (no compaction \
involved), that is `csift show <target> --turn -3..`."
),
Command::Deliver(args) => live::channel::run_deliver(&args),
}
}