use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::domain::batch::BatchStrategy;
use crate::domain::mode::PermissionMode;
use crate::domain::signals::Usage;
pub const SCHEMA_VERSION: &str = "0.1";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum OutputFormat {
Text,
Json,
StreamJson,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "kebab-case")]
pub enum Status {
Ok,
Nonzero,
Timeout,
SpawnError,
Skipped,
Planned,
}
#[derive(Debug, Clone)]
pub struct Capture {
pub status: Status,
pub exit_code: Option<i32>,
pub duration_ms: Option<u128>,
pub stdout: String,
pub stderr: String,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct RunResult {
pub harness: String,
pub bin: String,
pub available: bool,
pub status: Status,
pub prompt: Option<String>,
pub exit_code: Option<i32>,
pub duration_ms: Option<u128>,
pub command: Vec<String>,
pub output_format: OutputFormat,
pub text: Option<String>,
pub text_source: Option<String>,
pub usage: Usage,
pub usage_source: Option<String>,
pub session_id: Option<String>,
pub structured: Option<Value>,
pub schema_valid: Option<bool>,
pub schema_attempts: Option<u32>,
pub schema_error: Option<String>,
pub failure_kind: Option<String>,
pub failure_kind_source: Option<String>,
pub stdout: String,
pub stderr: String,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct RunReport {
pub schema_version: &'static str,
pub oneharness_version: &'static str,
pub prompt: String,
pub model: Option<String>,
pub resume: Option<String>,
pub fork: bool,
pub permission_mode: PermissionMode,
pub bypass_permissions: bool,
pub dry_run: bool,
pub schema: Option<Value>,
pub schema_max_retries: Option<u32>,
pub batch: Option<BatchReport>,
pub config_files: Vec<String>,
pub results: Vec<RunResult>,
}
#[derive(Debug, Clone, Serialize)]
pub struct BatchReport {
pub strategy: BatchStrategy,
pub prompt_count: usize,
pub forked: bool,
}