claw10-domain 0.2.0

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

use crate::agent::AgentId;
use crate::evidence::EvidenceId;
use crate::task::TaskId;

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

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Memory {
    pub id: MemoryId,
    pub tenant_id: String,
    pub scope: String,
    pub memory_type: MemoryType,
    pub content: String,
    pub source: MemorySource,
    pub confidence: f64,
    pub classification: String,
    pub status: MemoryStatus,
    pub verified_by: Vec<AgentId>,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
}

#[derive(Debug, Clone, PartialEq, Display, EnumString, Serialize, Deserialize)]
pub enum MemoryType {
    Working,
    Episodic,
    Semantic,
    Procedural,
    User,
    Organization,
    Mission,
    AgentContinuity,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemorySource {
    pub agent_id: AgentId,
    pub task_id: TaskId,
    pub evidence_id: Option<EvidenceId>,
}

#[derive(Debug, Clone, PartialEq, Eq, Display, EnumString, Serialize, Deserialize)]
pub enum MemoryStatus {
    Candidate,
    Scanning,
    Verified,
    Active,
    Rejected,
    Expired,
}