use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum StopReason {
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 { .. }
)
}
}