use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReasoningSession {
pub id: Uuid,
pub goal: String,
pub state: SessionState,
pub steps: Vec<ReasoningStep>,
pub max_iterations: usize,
pub current_iteration: usize,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub start_time: DateTime<Utc>,
pub end_time: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SessionState {
Active,
Completed,
Failed,
Cancelled,
Timeout,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReasoningStep {
pub id: Uuid,
pub step_type: ReasoningStepType,
pub description: String,
pub content: String,
pub timestamp: DateTime<Utc>,
pub metadata: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum ReasoningStepType {
Analysis,
Planning,
Implementation,
Verification,
Debugging,
Review,
Reason,
Act,
Observe,
Conclude,
}