stasis-rs 0.1.0

Durable AI orchestration framework with runtime jobs, lineage, and memory integration
Documentation
use chrono::{DateTime, Utc};

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OutboxPublishPolicy {
    pub max_attempts: u32,
    pub base_delay_seconds: i64,
    pub max_delay_seconds: i64,
}

impl Default for OutboxPublishPolicy {
    fn default() -> Self {
        Self {
            max_attempts: 8,
            base_delay_seconds: 2,
            max_delay_seconds: 300,
        }
    }
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub enum RuntimeEventType {
    JobSucceeded,
    JobRetryScheduled,
    JobDeadLettered,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RuntimeEvent {
    pub event_type: RuntimeEventType,
    pub job_id: String,
    pub thread_id: Option<String>,
    pub correlation_id: String,
    pub causation_id: String,
    pub trace_id: String,
    pub sttp_input_node_id: String,
    pub sttp_output_node_id: Option<String>,
    pub execution_id: Option<String>,
    pub input_memory_query_id: Option<String>,
    pub input_memory_query_fingerprint: Option<String>,
    pub output_memory_node_id: Option<String>,
    pub retrieval_path: Option<String>,
    pub occurred_at: DateTime<Utc>,
    pub message: Option<String>,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub enum OutboxStatus {
    Pending,
    Published,
    Failed,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct OutboxEvent {
    pub event_id: String,
    pub status: OutboxStatus,
    pub publish_attempts: u32,
    pub published_at: Option<DateTime<Utc>>,
    pub next_attempt_at: Option<DateTime<Utc>>,
    pub last_publish_error: Option<String>,
    pub event: RuntimeEvent,
}