unified-agent-api 0.3.5

Agent-agnostic facade and registry for wrapper backends
Documentation
use std::ffi::OsString;

use crate::mcp::AgentWrapperMcpAddTransport;

pub(super) fn codex_mcp_list_argv() -> Vec<OsString> {
    vec![
        OsString::from("mcp"),
        OsString::from("list"),
        OsString::from("--json"),
    ]
}

pub(super) fn codex_mcp_get_argv(name: &str) -> Vec<OsString> {
    vec![
        OsString::from("mcp"),
        OsString::from("get"),
        OsString::from("--json"),
        OsString::from(name),
    ]
}

pub(super) fn codex_mcp_remove_argv(name: &str) -> Vec<OsString> {
    vec![
        OsString::from("mcp"),
        OsString::from("remove"),
        OsString::from(name),
    ]
}

pub(super) fn codex_mcp_add_argv(
    name: &str,
    transport: &AgentWrapperMcpAddTransport,
) -> Vec<OsString> {
    let mut argv = vec![
        OsString::from("mcp"),
        OsString::from("add"),
        OsString::from(name),
    ];

    match transport {
        AgentWrapperMcpAddTransport::Stdio { command, args, env } => {
            for (key, value) in env {
                argv.push(OsString::from("--env"));
                argv.push(OsString::from(format!("{key}={value}")));
            }
            argv.push(OsString::from("--"));
            argv.extend(command.iter().cloned().map(OsString::from));
            argv.extend(args.iter().cloned().map(OsString::from));
        }
        AgentWrapperMcpAddTransport::Url {
            url,
            bearer_token_env_var,
        } => {
            argv.push(OsString::from("--url"));
            argv.push(OsString::from(url));
            if let Some(env_var) = bearer_token_env_var {
                argv.push(OsString::from("--bearer-token-env-var"));
                argv.push(OsString::from(env_var));
            }
        }
    }

    argv
}