use super::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubagentKind {
BuiltinTask,
Workflow,
Teammate,
}
impl SubagentKind {
#[must_use]
pub fn label(self) -> &'static str {
match self {
SubagentKind::BuiltinTask => "builtin-task",
SubagentKind::Workflow => "workflow",
SubagentKind::Teammate => "teammate",
}
}
}
#[derive(Debug, Clone)]
pub struct Subagent {
pub agent_id: String,
pub kind: SubagentKind,
pub path: PathBuf,
pub parent_session_id: String,
pub workflow_id: Option<String>,
pub spawn_tool_use_id: Option<String>,
pub name: Option<String>,
pub team_name: Option<String>,
pub agent_type: Option<String>,
pub description: Option<String>,
pub meta_parent_agent_id: Option<String>,
}
#[derive(Debug, Clone)]
pub struct SubagentLifecycle {
pub agent_type: Option<String>,
pub description: Option<String>,
pub started_utc: Option<String>,
pub completed_utc: Option<String>,
pub status: SubagentStatus,
pub pending: Option<PendingToolUse>,
pub skipped_lines: usize,
pub fork_parent_last_uuid: Option<String>,
pub fork_context_length: Option<u64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubagentStatus {
Completed,
Running,
Unknown,
}
impl SubagentStatus {
#[must_use]
pub fn label(self) -> &'static str {
match self {
SubagentStatus::Completed => "completed",
SubagentStatus::Running => "running",
SubagentStatus::Unknown => "unknown",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PendingClassification {
EscalationBlocked,
AwaitingExecution,
}
impl PendingClassification {
#[must_use]
pub fn label(self) -> &'static str {
match self {
PendingClassification::EscalationBlocked => "escalation-blocked",
PendingClassification::AwaitingExecution => "awaiting-execution",
}
}
}
#[derive(Debug, Clone)]
pub struct PendingToolUse {
pub tool_use_id: String,
pub tool_name: String,
pub command: Option<String>,
pub since_utc: Option<String>,
}