pub struct ObservingEventStore<S, F> { /* private fields */ }Expand description
An EventStore decorator that invokes a callback on every appended
envelope, then delegates all storage to an inner store.
This is the reusable, blessed way to “stream to stdout” (or to any live
observer) with the SDK: the agent loop writes every AgentEventEnvelope
through the configured event store, so wrapping a store lets you watch
events as they happen — printing TextDeltas, forwarding to a UI channel —
without hand-rolling the full five-method EventStore surface or wiring an
in-process channel. The callback runs before the inner store records the
envelope.
§Example
use agent_sdk_tools::stores::{InMemoryEventStore, ObservingEventStore};
use agent_sdk_foundation::events::AgentEvent;
let _store = ObservingEventStore::new(InMemoryEventStore::new(), |envelope| {
if let AgentEvent::TextDelta { delta, .. } = &envelope.event {
print!("{delta}");
}
});Implementations§
Source§impl<S, F> ObservingEventStore<S, F>
impl<S, F> ObservingEventStore<S, F>
Trait Implementations§
Source§impl<S, F> EventStore for ObservingEventStore<S, F>
impl<S, F> EventStore for ObservingEventStore<S, F>
Source§fn append<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
envelope: AgentEventEnvelope,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn append<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
envelope: AgentEventEnvelope,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append an event envelope for the given thread and turn. Read more
Source§fn finish_turn<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn finish_turn<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Mark the given turn as finished and flush any buffered writes. Read more
Source§fn get_turn<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredTurnEvents>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_turn<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredTurnEvents>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve the stored data for a single turn. Read more
Source§fn get_turns<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredTurnEvents>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_turns<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredTurnEvents>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve all stored turns for the given thread in ascending turn order. Read more
Source§fn get_events<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentEventEnvelope>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_events<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentEventEnvelope>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve all event envelopes for the given thread across every stored turn. Read more
Source§fn event_count<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn event_count<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Count the stored events for
thread_id without materializing them. Read moreSource§fn get_events_since<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
offset: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentEventEnvelope>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_events_since<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
offset: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentEventEnvelope>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve event envelopes for
thread_id from offset onward, in overall
append order, skipping the earlier ones. Read moreAuto Trait Implementations§
impl<S, F> Freeze for ObservingEventStore<S, F>
impl<S, F> RefUnwindSafe for ObservingEventStore<S, F>where
S: RefUnwindSafe,
F: RefUnwindSafe,
impl<S, F> Send for ObservingEventStore<S, F>
impl<S, F> Sync for ObservingEventStore<S, F>
impl<S, F> Unpin for ObservingEventStore<S, F>
impl<S, F> UnsafeUnpin for ObservingEventStore<S, F>where
S: UnsafeUnpin,
F: UnsafeUnpin,
impl<S, F> UnwindSafe for ObservingEventStore<S, F>where
S: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more