ccc 0.2.0

Unified Rust library and CLI for invoking coding-agent CLIs with shared parsing, planning, and transcript utilities
Documentation
use crate::invoke::Error;
use crate::invoke::Request;
use crate::parser::{parse_args, resolve_command_warnings, CccConfig};

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ParsedRequest {
    pub request: Request,
    pub warnings: Vec<String>,
}

pub fn parse_tokens<I, S>(tokens: I) -> Result<ParsedRequest, Error>
where
    I: IntoIterator<Item = S>,
    S: Into<String>,
{
    parse_tokens_with_config(tokens, &CccConfig::default())
}

pub fn parse_tokens_with_config<I, S>(tokens: I, config: &CccConfig) -> Result<ParsedRequest, Error>
where
    I: IntoIterator<Item = S>,
    S: Into<String>,
{
    let argv: Vec<String> = tokens.into_iter().map(Into::into).collect();
    let parsed = parse_args(&argv);
    let request = Request::from_parsed_args(&parsed).map_err(Error::InvalidRequest)?;
    let warnings =
        resolve_command_warnings(&parsed, Some(config)).map_err(Error::InvalidRequest)?;

    Ok(ParsedRequest { request, warnings })
}