Skip to main content

codetether_agent/session/tasks/
event.rs

1//! Event types for the session task log.
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6/// Lifecycle status for a single task.
7#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum TaskStatus {
10    Pending,
11    InProgress,
12    Done,
13    Blocked,
14    Cancelled,
15}
16
17/// A single durable event in the session task log.
18///
19/// The log is append-only; state changes are expressed as new events
20/// rather than in-place edits.
21#[derive(Clone, Debug, Serialize, Deserialize)]
22#[serde(tag = "kind", rename_all = "snake_case")]
23pub enum TaskEvent {
24    /// Goal declared (or re-declared) for the session.
25    GoalSet {
26        at: DateTime<Utc>,
27        objective: String,
28        #[serde(default)]
29        success_criteria: Vec<String>,
30        #[serde(default)]
31        forbidden: Vec<String>,
32    },
33    /// Agent explicitly reaffirmed progress toward the goal.
34    GoalReaffirmed {
35        at: DateTime<Utc>,
36        progress_note: String,
37    },
38    /// Goal cleared (task complete, abandoned, or superseded).
39    GoalCleared { at: DateTime<Utc>, reason: String },
40    /// Task added to the session's todo list.
41    TaskAdded {
42        at: DateTime<Utc>,
43        id: String,
44        content: String,
45        #[serde(default)]
46        parent_id: Option<String>,
47    },
48    /// Task status transition.
49    TaskStatus {
50        at: DateTime<Utc>,
51        id: String,
52        status: TaskStatus,
53        #[serde(default)]
54        note: Option<String>,
55    },
56    /// Governance middleware detected drift.
57    DriftDetected {
58        at: DateTime<Utc>,
59        tool_calls_since_reaffirm: u32,
60        errors_since_reaffirm: u32,
61    },
62}