claw10-domain 0.2.3

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::lifecycle::LifecycleMode;
use crate::mission::MissionId;
use crate::permissions::Permission;

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

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpawnRequest {
    pub id: SpawnRequestId,
    pub mission_id: MissionId,
    pub task_id: Option<String>,
    pub requested_by: AgentId,
    pub reason: String,
    pub team: SwarmTeamSpec,
    pub children: Vec<ChildSpec>,
    pub child_spawn_policy: ChildSpawnPolicy,
    pub termination: TerminationPolicy,
    pub state: SpawnState,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SwarmTeamSpec {
    pub name: String,
    pub lifecycle_mode: LifecycleMode,
    pub ttl_seconds: Option<u64>,
    pub idle_timeout_seconds: Option<u64>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChildSpec {
    pub role: String,
    pub objective: String,
    pub budget_usd: f64,
    pub model_profile: String,
    pub max_turns: u32,
    pub custom_permissions: Option<Vec<Permission>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChildSpawnPolicy {
    pub allowed: bool,
    pub max_depth: Option<u32>,
    pub max_children: Option<u32>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TerminationPolicy {
    pub on_task_complete: bool,
    pub on_parent_terminated: bool,
    pub on_budget_exhausted: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum SpawnState {
    Pending,
    Validating,
    Approved,
    Denied,
    Provisioning,
    Completed,
    Failed,
}