use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::ids::{RunId, ThreadId};
use crate::llm::{Message, ToolCall};
pub const CHECKPOINT_BUCKET: &str = "klieo.run-checkpoints";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct RunCheckpoint {
pub run_id: RunId,
pub step_index: u32,
pub thread_id: ThreadId,
pub messages: Vec<Message>,
pub pending_tool_calls: Option<Vec<ToolCall>>,
#[serde(default)]
pub resume_attempted: bool,
pub created_at: DateTime<Utc>,
}
impl RunCheckpoint {
#[cfg(test)]
pub(crate) fn for_test() -> Self {
Self {
run_id: RunId::new(),
step_index: 1,
thread_id: ThreadId::new("t-test"),
messages: vec![],
pending_tool_calls: None,
resume_attempted: false,
created_at: Utc::now(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub enum ApprovalDecision {
Approved,
Rejected {
reason: String,
},
}