abstract-cli 0.1.9

A high-performance Rust-native CLI coding agent
use cersei::Agent;
use cersei_compression::CompressionLevel;
use std::sync::Arc;

pub fn run(args: &str, agent: Option<&Arc<Agent>>) -> anyhow::Result<()> {
    let Some(agent) = agent else {
        eprintln!("\x1b[33mCompression can only be toggled from the interactive REPL.\x1b[0m");
        return Ok(());
    };

    if args.trim().is_empty() {
        let current = agent.compression_level();
        eprintln!("Tool-output compression: \x1b[1m{current}\x1b[0m");
        eprintln!("\x1b[90mUsage: /compression on | off | minimal | aggressive\x1b[0m");
        return Ok(());
    }

    let level: CompressionLevel = match args.trim().parse() {
        Ok(l) => l,
        Err(e) => {
            eprintln!("\x1b[31m{e}\x1b[0m");
            eprintln!("\x1b[90mAccepted: off, on, minimal, aggressive\x1b[0m");
            return Ok(());
        }
    };

    agent.set_compression_level(level);
    eprintln!("\x1b[90mTool-output compression set to: {level}\x1b[0m");
    eprintln!("\x1b[90mTakes effect on the next tool call.\x1b[0m");
    Ok(())
}