unified-agent-api 0.3.5

Agent-agnostic facade and registry for wrapper backends
Documentation
use crate::{AgentWrapperEvent, AgentWrapperEventKind, AgentWrapperKind};

fn status_event(message: Option<String>) -> AgentWrapperEvent {
    AgentWrapperEvent {
        agent_kind: AgentWrapperKind(super::AGENT_KIND.to_string()),
        kind: AgentWrapperEventKind::Status,
        channel: Some("status".to_string()),
        text: None,
        message,
        data: None,
    }
}

fn text_event(text: String) -> AgentWrapperEvent {
    AgentWrapperEvent {
        agent_kind: AgentWrapperKind(super::AGENT_KIND.to_string()),
        kind: AgentWrapperEventKind::TextOutput,
        channel: Some("assistant".to_string()),
        text: Some(text),
        message: None,
        data: None,
    }
}

fn unknown_event() -> AgentWrapperEvent {
    AgentWrapperEvent {
        agent_kind: AgentWrapperKind(super::AGENT_KIND.to_string()),
        kind: AgentWrapperEventKind::Unknown,
        channel: None,
        text: None,
        message: None,
        data: None,
    }
}

fn error_event(message: String) -> AgentWrapperEvent {
    AgentWrapperEvent {
        agent_kind: AgentWrapperKind(super::AGENT_KIND.to_string()),
        kind: AgentWrapperEventKind::Error,
        channel: Some("error".to_string()),
        text: None,
        message: Some(message),
        data: None,
    }
}

pub(super) fn map_run_json_event(event: opencode::OpencodeRunJsonEvent) -> Vec<AgentWrapperEvent> {
    match event {
        opencode::OpencodeRunJsonEvent::Text { text, .. } => vec![text_event(text)],
        opencode::OpencodeRunJsonEvent::StepStart { .. } => {
            vec![status_event(Some("step_start".to_string()))]
        }
        opencode::OpencodeRunJsonEvent::StepFinish { .. } => {
            vec![status_event(Some("step_finish".to_string()))]
        }
        opencode::OpencodeRunJsonEvent::Unknown { .. } => vec![unknown_event()],
        opencode::OpencodeRunJsonEvent::TerminalError { message, .. } => vec![error_event(message)],
    }
}