use super::{GoalSourceKind, SessionTaskStatus};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[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>,
#[serde(default)]
source_session_id: String,
#[serde(default)]
source_turn_id: String,
#[serde(default)]
source_text_hash: String,
#[serde(default)]
source_kind: GoalSourceKind,
#[serde(default)]
confidence: f32,
},
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: SessionTaskStatus,
#[serde(default)]
note: Option<String>,
},
DriftDetected {
at: DateTime<Utc>,
tool_calls_since_reaffirm: u32,
errors_since_reaffirm: u32,
},
}