PicoBot/src/gateway/skill_event_sink.rs
2026-04-28 14:49:31 +08:00

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"
);
}
}
}