agentos-protocol 0.2.0

Agent OS extension protocol types
Documentation
use agentos_protocol::generated::v1::{
    AcpCreateSessionRequest, AcpRequest, AcpResponse, AcpRuntimeKind, AcpSessionCreatedResponse,
};

#[test]
fn acp_protocol_round_trips_create_session() {
    let request = AcpRequest::AcpCreateSessionRequest(AcpCreateSessionRequest {
        agent_type: String::from("codex"),
        runtime: AcpRuntimeKind::JavaScript,
        adapter_entrypoint: String::from("/root/node_modules/agent/adapter.mjs"),
        cwd: String::from("/home/agentos"),
        args: vec![String::from("--model"), String::from("gpt-5")],
        env: [(
            String::from("SECURE_EXEC_KEEP_STDIN_OPEN"),
            String::from("1"),
        )]
        .into_iter()
        .collect(),
        protocol_version: 1,
        client_capabilities: String::from("{}"),
        mcp_servers: String::from("{}"),
        skip_os_instructions: false,
        additional_instructions: Some(String::from("be concise")),
    });

    let encoded = serde_bare::to_vec(&request).expect("encode acp request");
    let decoded: AcpRequest = serde_bare::from_slice(&encoded).expect("decode acp request");
    assert_eq!(decoded, request);
}

#[test]
fn acp_protocol_round_trips_session_created_response() {
    let response = AcpResponse::AcpSessionCreatedResponse(AcpSessionCreatedResponse {
        session_id: String::from("acp-session-1"),
        pid: Some(42),
        modes: Some(String::from(r#"{"currentModeId":"default"}"#)),
        config_options: vec![String::from(r#"{"id":"model","values":["gpt-5"]}"#)],
        agent_capabilities: Some(String::from("{}")),
        agent_info: None,
    });

    let encoded = serde_bare::to_vec(&response).expect("encode acp response");
    let decoded: AcpResponse = serde_bare::from_slice(&encoded).expect("decode acp response");
    assert_eq!(decoded, response);
}