use super::NormalizedUsageAggregate;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::path::PathBuf;
pub const MAX_SUBAGENT_TASKS: usize = 10;
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct SubagentTaskResult {
pub id: String,
pub status: SubagentStatus,
pub intent: String,
pub agent: Option<String>,
pub identity: Option<String>,
pub cwd: PathBuf,
pub session_id: Option<String>,
pub session_path: Option<PathBuf>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub usage: Option<NormalizedUsageAggregate>,
pub changed_files: Vec<PathBuf>,
pub output: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub structured_output: Option<Value>,
pub output_truncated: bool,
pub error: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum SubagentStatus {
Completed,
Failed,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct SubagentsSummary {
pub total: usize,
pub completed: usize,
pub failed: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<u64>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct SubagentsOutput {
pub summary: SubagentsSummary,
pub results: Vec<SubagentTaskResult>,
}