use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TaskOperator {
ReadContext,
Decompose,
Edit,
Check,
Review,
ProposeDoc,
HumanApproval,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TaskState {
#[default]
Pending,
Ready,
Running,
Blocked,
Passed,
Failed,
Skipped,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TaskRisk {
Low,
#[default]
Medium,
High,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RetryPolicy {
pub max_attempts: u8,
pub backoff_ms: u64,
}
impl Default for RetryPolicy {
fn default() -> Self {
Self {
max_attempts: 1,
backoff_ms: 0,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskContextItem {
pub id: String,
pub title: String,
pub kind: String,
pub source: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskNode {
pub id: String,
pub title: String,
pub operator: TaskOperator,
#[serde(default)]
pub state: TaskState,
#[serde(default)]
pub depends_on: Vec<String>,
#[serde(default)]
pub inputs: Vec<String>,
#[serde(default)]
pub outputs: Vec<String>,
#[serde(default)]
pub required_checks: Vec<String>,
#[serde(default)]
pub tools: Vec<String>,
#[serde(default)]
pub retry: RetryPolicy,
#[serde(default)]
pub risk: TaskRisk,
#[serde(default)]
pub receipts: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskDag {
pub id: String,
pub title: String,
pub nodes: Vec<TaskNode>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskEvent {
pub task_id: String,
pub to: TaskState,
#[serde(default)]
pub evidence: Vec<String>,
#[serde(default)]
pub note: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskRun {
pub dag_id: String,
pub states: BTreeMap<String, TaskState>,
#[serde(default)]
pub events: Vec<TaskEvent>,
}