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::permissions::Permission;

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

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Skill {
    pub id: SkillId,
    pub name: String,
    pub purpose: String,
    pub version: String,
    pub input_schema: serde_json::Value,
    pub output_schema: serde_json::Value,
    pub steps: Vec<String>,
    pub required_tools: Vec<String>,
    pub required_permissions: Vec<Permission>,
    pub state: SkillState,
    pub signature: Option<String>,
    pub cost_profile: SkillCostProfile,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum SkillState {
    Candidate,
    Scanning,
    Rejected,
    Testing,
    Failed,
    Review,
    Approved,
    Staged,
    Active,
    Deprecated,
    Quarantined,
    Retired,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillCostProfile {
    pub estimated_cost_usd: f64,
    pub average_duration_seconds: f64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillVersion {
    pub skill_id: SkillId,
    pub version: String,
    pub previous_version: Option<String>,
    pub change_log: String,
    pub is_deprecated: bool,
    pub created_at: DateTime<Utc>,
}