use crate::emit::emit_ops_event;
use crate::ops_event::OpsEvent;
use klieo_core::{ids::RunId, memory::EpisodicMemory};
use std::sync::Arc;
#[derive(Clone)]
pub struct OpsAuditSink {
episodic: Arc<dyn EpisodicMemory>,
run_id: RunId,
log_target: &'static str,
}
impl OpsAuditSink {
#[must_use]
pub fn new(episodic: Arc<dyn EpisodicMemory>, run_id: RunId, log_target: &'static str) -> Self {
Self {
episodic,
run_id,
log_target,
}
}
pub async fn emit(&self, event: OpsEvent) {
if let Err(err) = emit_ops_event(&*self.episodic, self.run_id, event).await {
tracing::warn!(
target: "klieo.ops.audit",
primitive = self.log_target,
error = %err,
"audit emit failed; episode not recorded"
);
}
}
}