awaken-contract 0.4.0

Core types, traits, and state model for the Awaken AI agent runtime
Documentation
use thiserror::Error;

use crate::model::Phase;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnknownKeyPolicy {
    Error,
    Skip,
}

#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum StateError {
    #[error("revision conflict: expected {expected}, actual {actual}")]
    RevisionConflict { expected: u64, actual: u64 },
    #[error("patch base revision mismatch: {left} vs {right}")]
    MutationBaseRevisionMismatch { left: u64, right: u64 },
    #[error("plugin already installed: {name}")]
    PluginAlreadyInstalled { name: String },
    #[error("plugin not installed: {type_name}")]
    PluginNotInstalled { type_name: &'static str },
    #[error("key already registered: {key}")]
    KeyAlreadyRegistered { key: String },
    #[error("unknown key: {key}")]
    UnknownKey { key: String },
    #[error("failed to decode key {key}: {message}")]
    KeyDecode { key: String, message: String },
    #[error("failed to encode key {key}: {message}")]
    KeyEncode { key: String, message: String },
    #[error("scheduled action handler already registered: {key}")]
    HandlerAlreadyRegistered { key: String },
    #[error("effect handler already registered: {key}")]
    EffectHandlerAlreadyRegistered { key: String },
    #[error("phase {phase:?} did not converge after {max_rounds} rounds")]
    PhaseRunLoopExceeded { phase: Phase, max_rounds: usize },
    #[error("no scheduled action handler registered for {key}")]
    UnknownScheduledActionHandler { key: String },
    #[error("no effect handler registered for {key}")]
    UnknownEffectHandler { key: String },
    #[error("parallel merge conflict on exclusive key: {key}")]
    ParallelMergeConflict { key: String },
    #[error("tool already registered: {tool_id}")]
    ToolAlreadyRegistered { tool_id: String },
    #[error("operation cancelled")]
    Cancelled,
}