use std::sync::Arc; use crate::agent::{SkillEvent, SkillEventSink}; use crate::storage::SessionStore; pub(crate) struct PersistentSkillEventSink { store: Arc, session_id: String, } impl PersistentSkillEventSink { pub(crate) fn new(store: Arc, session_id: String) -> Self { Self { store, session_id } } } impl SkillEventSink for PersistentSkillEventSink { fn record_skill_event(&self, event: SkillEvent) { if let Err(err) = self.store.append_skill_event( Some(&self.session_id), &event.event_type, event.skill_name.as_deref(), &event.payload, ) { tracing::warn!( error = %err, event_type = %event.event_type, "Failed to record skill event" ); } } }