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::mission::MissionId;
use crate::task::TaskId;
use crate::worker::WorkerId;

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

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Tool {
    pub id: ToolId,
    pub name: String,
    pub category: ToolCategory,
    pub schema: serde_json::Value,
    pub side_effect_class: SideEffectClass,
    pub is_active: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ToolCategory {
    Filesystem,
    Shell,
    Browser,
    Http,
    Database,
    SourceControl,
    Communication,
    Document,
    Spreadsheet,
    Media,
    Cloud,
    Infrastructure,
    Hardware,
    Mcp,
    CustomApi,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SideEffectClass {
    ReadOnly,
    ReversibleWrite,
    ControlledWrite,
    ExternalCommunication,
    ProductionMutation,
    Destructive,
    Physical,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolInvocation {
    pub id: ToolInvocationId,
    pub tool_id: ToolId,
    pub agent_id: AgentId,
    pub worker_id: WorkerId,
    pub mission_id: MissionId,
    pub task_id: TaskId,
    pub input: serde_json::Value,
    pub output: Option<serde_json::Value>,
    pub idempotency_key: String,
    pub risk_level: String,
    pub approval_id: Option<String>,
    pub state: InvocationState,
    pub cost_usd: f64,
    pub started_at: DateTime<Utc>,
    pub completed_at: Option<DateTime<Utc>>,
}

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

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum InvocationState {
    Pending,
    Approved,
    Running,
    Completed,
    Failed,
    Cancelled,
}