use serde::Serialize;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, clap::ValueEnum)]
pub enum OutputFormat {
#[default]
Text,
Json,
}
#[derive(Debug, Serialize)]
pub struct RunOutput {
pub run_id: String,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub duration_ms: u64,
pub artifacts_count: usize,
}
#[derive(Debug, Serialize)]
pub struct ListRunsOutput {
pub runs: Vec<ListRunEntry>,
}
#[derive(Debug, Serialize)]
pub struct ListRunEntry {
pub run_id: String,
pub status: String,
pub spec_path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub pid: Option<u32>,
}
#[derive(Debug, Serialize)]
pub struct ListWorkersOutput {
pub workers: Vec<WorkerEntry>,
}
#[derive(Debug, Serialize)]
pub struct WorkerEntry {
pub name: String,
pub worker_type: String,
pub runtime: String,
}
#[derive(Debug, Serialize)]
pub struct ListPatternsOutput {
pub patterns: Vec<PatternEntry>,
}
#[derive(Debug, Serialize)]
pub struct PatternEntry {
pub name: String,
pub description: String,
}
#[derive(Debug, Serialize)]
pub struct ListTemplatesOutput {
pub templates: Vec<String>,
}
#[derive(Debug, Serialize)]
pub struct AgentCardOutput {
pub name: String,
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub capabilities: Option<Vec<String>>,
}