unified-agent-api 0.3.5

Agent-agnostic facade and registry for wrapper backends
Documentation
use super::support::*;
use serde_json::json;

const MODEL_ID_KEY: &str = crate::EXT_AGENT_API_CONFIG_MODEL_V1;

#[test]
fn codex_policy_fork_model_override_is_rejected_pre_spawn() {
    let adapter = test_adapter();

    let request = AgentWrapperRunRequest {
        prompt: "hello".to_string(),
        extensions: [
            (
                EXT_SESSION_FORK_V1.to_string(),
                json!({
                    "selector": "last",
                }),
            ),
            (MODEL_ID_KEY.to_string(), json!("gpt-5-codex")),
        ]
        .into_iter()
        .collect(),
        ..Default::default()
    };

    let err = adapter
        .validate_and_extract_policy(&request)
        .expect_err("policy extraction should fail");
    match err {
        AgentWrapperError::Backend { message } => {
            assert_eq!(message, "model override unsupported for codex fork");
        }
        other => panic!("expected Backend error, got: {other:?}"),
    }
}

#[test]
fn codex_policy_fork_invalid_model_override_is_invalid_request() {
    let adapter = test_adapter();

    let request = AgentWrapperRunRequest {
        prompt: "hello".to_string(),
        extensions: [
            (
                EXT_SESSION_FORK_V1.to_string(),
                json!({
                    "selector": "last",
                }),
            ),
            (MODEL_ID_KEY.to_string(), json!("   ")),
        ]
        .into_iter()
        .collect(),
        ..Default::default()
    };

    let err = adapter
        .validate_and_extract_policy(&request)
        .expect_err("policy extraction should fail");
    match err {
        AgentWrapperError::InvalidRequest { message } => {
            assert_eq!(message, "invalid agent_api.config.model.v1");
        }
        other => panic!("expected InvalidRequest, got: {other:?}"),
    }
}