use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use chrono::{DateTime, Utc};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Task {
pub id: String,
pub request: String,
pub status: TaskStatus,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub result: Option<TaskResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TaskStatus {
Pending,
InProgress,
Completed,
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskResult {
pub success: bool,
pub summary: String,
pub details: Option<String>,
pub execution_time: Option<u64>,
pub task_plan: Option<TaskPlan>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskPlan {
pub understanding: String,
pub approach: String,
pub complexity: TaskComplexity,
pub estimated_steps: Option<u32>,
pub requirements: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TaskComplexity {
Simple, Moderate, Complex, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionContext {
pub task_id: String,
pub plan: TaskPlan,
pub current_step: u32,
pub results: Vec<ExecutionStep>,
pub variables: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionStep {
pub step_number: u32,
pub action: Action,
pub result: Option<StepResult>,
pub timestamp: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Action {
pub action_type: ActionType,
pub reasoning: String,
pub confidence: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ActionType {
UseTool {
tool_name: String,
arguments: HashMap<String, serde_json::Value>,
},
Think {
reasoning: String,
},
Complete {
summary: String,
},
AskClarification {
question: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StepResult {
pub success: bool,
pub output: serde_json::Value,
pub error: Option<String>,
pub execution_time: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionDecision {
pub action_type: ActionType,
pub reasoning: String,
pub confidence: f32,
}
#[derive(Debug, Clone)]
pub struct ExecutionResult {
pub success: bool,
pub summary: String,
pub details: String,
pub execution_time: u64,
}