use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TaskStatus {
Pending,
InProgress,
Done,
Blocked,
Cancelled,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum TaskEvent {
GoalSet {
at: DateTime<Utc>,
objective: String,
#[serde(default)]
success_criteria: Vec<String>,
#[serde(default)]
forbidden: Vec<String>,
},
GoalReaffirmed {
at: DateTime<Utc>,
progress_note: String,
},
GoalCleared { at: DateTime<Utc>, reason: String },
TaskAdded {
at: DateTime<Utc>,
id: String,
content: String,
#[serde(default)]
parent_id: Option<String>,
},
TaskStatus {
at: DateTime<Utc>,
id: String,
status: TaskStatus,
#[serde(default)]
note: Option<String>,
},
DriftDetected {
at: DateTime<Utc>,
tool_calls_since_reaffirm: u32,
errors_since_reaffirm: u32,
},
}