use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LimitsSnapshot {
pub steps: u32,
pub cost: u64,
pub timeout: u64,
}
pub fn now_ms() -> u64 {
use std::time::{SystemTime, UNIX_EPOCH};
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as u64
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "event")]
pub enum ExecutionEvent {
ExecutionStarted {
ts: u64,
limits: LimitsSnapshot,
limits_set: String,
command: String,
},
ToolAllowed {
ts: u64,
tool: String,
},
ToolDenied {
ts: u64,
tool: String,
},
RuleDenied {
ts: u64,
tool: String,
rule_name: String,
},
ToolFailed {
ts: u64,
tool: String,
error: String,
},
StepCompleted {
ts: u64,
step: u32,
},
AgentScopeEntered {
ts: u64,
name: String,
limits: LimitsSnapshot,
},
AgentScopeExited {
ts: u64,
name: String,
},
ExecutionStopped {
ts: u64,
reason: String,
steps: u32,
cost_spent: u64,
elapsed_ms: u64,
},
}