use std::sync::Arc;
use super::types::{SourceKind, TriggerState};
use crate::trigger_engine::execution::types::TriggerPromptRequest;
pub type TriggerListener = Arc<dyn Fn(TriggerEvent) + Send + Sync>;
#[derive(Clone, Debug)]
pub enum TriggerEvent {
TriggerHandlingStart {
idempotency_key: String,
source_kind: SourceKind,
source_label: String,
event_label: String,
trace_id: String,
},
TriggerHandled {
idempotency_key: String,
trace_id: String,
state: TriggerState,
audit_entry_id: Option<String>,
evaluator_decision: Option<serde_json::Value>,
},
TriggerPromptRequest { request: TriggerPromptRequest },
PersistenceError {
context: String,
message: String,
},
TriggerExecutionStarted {
trace_id: String,
source_label: String,
event_label: String,
prompt_preview: String,
},
TriggerCompleted {
trace_id: String,
summary: Option<String>,
cost_usd: Option<f64>,
details: serde_json::Value,
},
TriggerFailed { trace_id: String, reason: String },
TriggerRequestsMainRun { trace_id: String },
TriggerPromoted {
trace_id: String,
promote_kind: String,
inserted_entry_id: String,
template_name: Option<String>,
redaction_status: String,
},
PromotionPending {
trace_id: String,
promote_kind: String,
template_name: Option<String>,
preview: Option<String>,
},
}