swarm-engine-core 0.1.6

Core types and orchestration for SwarmEngine
Documentation
//! Escalation - Worker から Manager への介入要求

/// Escalation 理由
///
/// Worker が Manager に介入を求める理由。
/// システム検知(連続失敗)と Agent 申告の両方をサポート。
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EscalationReason {
    /// 連続失敗(システムが自動検知)
    ConsecutiveFailures(u32),
    /// リソース不足
    ResourceExhausted,
    /// タイムアウト
    Timeout,
    /// Agent 自身の判断による申告
    AgentRequested(String),
    /// 不明なエラー
    Unknown(String),
}

/// Escalation 情報(WorkerState に保存)
#[derive(Debug, Clone)]
pub struct Escalation {
    /// 理由
    pub reason: EscalationReason,
    /// 発生 tick
    pub raised_at_tick: u64,
    /// 追加コンテキスト
    pub context: Option<String>,
}

impl Escalation {
    /// 連続失敗による Escalation を作成
    pub fn consecutive_failures(count: u32, tick: u64) -> Self {
        Self {
            reason: EscalationReason::ConsecutiveFailures(count),
            raised_at_tick: tick,
            context: None,
        }
    }

    /// Agent 申告による Escalation を作成
    pub fn agent_requested(reason: impl Into<String>, tick: u64) -> Self {
        Self {
            reason: EscalationReason::AgentRequested(reason.into()),
            raised_at_tick: tick,
            context: None,
        }
    }

    /// コンテキストを追加
    pub fn with_context(mut self, ctx: impl Into<String>) -> Self {
        self.context = Some(ctx.into());
        self
    }
}