33 lines
856 B
Rust
33 lines
856 B
Rust
use std::sync::Arc;
|
|
|
|
use crate::agent::{SkillEvent, SkillEventSink};
|
|
use crate::storage::SessionStore;
|
|
|
|
pub(crate) struct PersistentSkillEventSink {
|
|
store: Arc<SessionStore>,
|
|
session_id: String,
|
|
}
|
|
|
|
impl PersistentSkillEventSink {
|
|
pub(crate) fn new(store: Arc<SessionStore>, 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"
|
|
);
|
|
}
|
|
}
|
|
}
|