vv-agent 0.8.0

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use std::sync::Arc;

use chrono::{SecondsFormat, Utc};

use crate::events::RunEvent;
use crate::runtime::RunEventHandler;

pub(super) fn build_cli_event_handler(enabled: bool) -> Option<RunEventHandler> {
    if !enabled {
        return None;
    }
    Some(Arc::new(|event: &RunEvent| {
        let now = Utc::now().to_rfc3339_opts(SecondsFormat::Secs, true);
        let line = format_cli_event_line(&now, event);
        eprintln!("{line}");
    }))
}

fn format_cli_event_line(now: &str, event: &RunEvent) -> String {
    let wire = serde_json::to_value(event).unwrap_or_default();
    let event_type = wire
        .get("type")
        .and_then(serde_json::Value::as_str)
        .unwrap_or("run_event");
    format!("[{now}] [{event_type}] {wire}")
}