claw10-domain 0.2.0

Domain models and types for Claw10 OS
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;

use crate::agent::AgentId;
use crate::budget::Budget;
use crate::evidence::Evidence;
use crate::mission::MissionId;
use crate::model::RiskLevel;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TaskId(pub Uuid);

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Task {
    pub id: TaskId,
    pub mission_id: MissionId,
    pub parent_task_id: Option<TaskId>,
    pub owner_id: AgentId,
    pub objective: String,
    pub dependencies: Vec<TaskId>,
    pub risk: RiskLevel,
    pub budget: Budget,
    pub deadline: Option<DateTime<Utc>>,
    pub input: serde_json::Value,
    pub output_contract: serde_json::Value,
    pub evidence_contract: Vec<String>,
    pub retry_policy: RetryPolicy,
    pub idempotency_key: Option<String>,
    pub lifecycle_mode: String,
    pub state: TaskState,
    pub evidence: Vec<Evidence>,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum TaskState {
    Created,
    Ready,
    Claimed,
    PolicyCheck,
    Denied,
    AwaitingApproval,
    Running,
    Waiting,
    EvidenceSubmitted,
    Verifying,
    RevisionRequired,
    Accepted,
    Closed,
    Failed,
    Retrying,
    Escalated,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetryPolicy {
    pub max_retries: u32,
    pub backoff_seconds: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskDependency {
    pub task_id: TaskId,
    pub depends_on: TaskId,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskLease {
    pub task_id: TaskId,
    pub agent_id: AgentId,
    pub acquired_at: DateTime<Utc>,
    pub expires_at: DateTime<Utc>,
}