rho-coding-agent 0.4.0

A lightweight agent harness inspired by Pi
use crate::model::{AuthMode, DynModelProvider, ModelError, OpenAiProvider};

pub fn reasoning_config_value(value: &str) -> Option<String> {
    let value = value.trim();
    if value.is_empty() || value.eq_ignore_ascii_case("none") {
        None
    } else {
        Some(value.to_string())
    }
}

pub fn build_provider(
    provider: &str,
    model: &str,
    reasoning_effort: Option<String>,
    reasoning_summary: Option<String>,
) -> anyhow::Result<DynModelProvider> {
    let provider = match provider {
        "openai" => OpenAiProvider::new_with_reasoning(
            model.to_string(),
            AuthMode::ApiKey,
            reasoning_effort,
            reasoning_summary,
        ),
        "openai-codex" => OpenAiProvider::new_with_reasoning(
            model.to_string(),
            AuthMode::Codex,
            reasoning_effort,
            reasoning_summary,
        ),
        other => return Err(ModelError::UnsupportedProvider(other.to_string()).into()),
    }?;
    Ok(Box::new(provider))
}