use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum StopReason {
MaxStepsReached,
BudgetExhausted,
TimeoutExpired,
ToolDenied { tool_name: String },
RuleDenied { rule_name: String },
ManualStop,
AgentCompleted,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ExecutionState {
Initialized,
Running,
Stopped { reason: StopReason },
Failed { error: String },
}
impl ExecutionState {
pub fn is_terminal(&self) -> bool {
matches!(self, ExecutionState::Stopped { .. } | ExecutionState::Failed { .. })
}
}