llman 0.0.30

A tool for managing LLM application rules(prompts) ...
Documentation
use crate::x::claude_code::config as claude_code_config;
use crate::x::codex::config as codex_config;
use crate::x::sdd_eval::playbook;
use anyhow::{Context, Result, bail};
use std::collections::HashMap;

#[derive(Debug, Clone)]
pub struct ResolvedPreset {
    pub env: HashMap<String, String>,
}

pub fn resolve_env(kind: playbook::AgentKind, preset: &str) -> Result<ResolvedPreset> {
    match kind {
        playbook::AgentKind::ClaudeCode => resolve_claude_code_env(preset),
        playbook::AgentKind::Codex => resolve_codex_env(preset),
        playbook::AgentKind::Fake => Ok(ResolvedPreset {
            env: HashMap::new(),
        }),
    }
}

fn resolve_claude_code_env(group: &str) -> Result<ResolvedPreset> {
    let config = claude_code_config::Config::load()
        .with_context(|| "load Claude Code config (claude-code.toml)")?;

    let Some(env) = config.get_group(group) else {
        bail!("Claude Code preset group not found: {group}");
    };

    Ok(ResolvedPreset { env: env.clone() })
}

fn resolve_codex_env(group: &str) -> Result<ResolvedPreset> {
    let config = codex_config::Config::load().with_context(|| "load Codex config (codex.toml)")?;
    let Some(provider) = config.get_provider(group) else {
        bail!("Codex preset group not found: {group}");
    };

    Ok(ResolvedPreset {
        env: provider.env.clone(),
    })
}