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<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn append<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
envelope: AgentEventEnvelope,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn finish_turn<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
turn: usize,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn get_turns<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredTurnEvents>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn get_events<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentEventEnvelope>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn event_count<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<usize, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: '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>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
Retrieve event envelopes for
thread_id from offset onward, in overall
append order, skipping the earlier ones. Read moreSource§fn clear<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
fn clear<'life0, 'life1, 'async_trait>(
&'life0 self,
thread_id: &'life1 ThreadId,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ObservingEventStore<S, F>: 'async_trait,
Clear all events for the given thread. Read more
Auto 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