use crate::events::{AgentEvent, TraceContext};
use std::sync::Arc;
pub trait AgentObserver: Send {
fn on_event(&mut self, message: &AgentEvent);
fn tool_trace_context(&self, _tool_id: &str) -> Option<TraceContext> {
None
}
}
pub trait McpRequestInstrumentation: Send {
fn trace_context(&self) -> Option<TraceContext>;
fn finish(self: Box<Self>, error: Option<&str>);
}
pub trait ObserverFactory: Send + Sync {
fn agent(&self, parent: Option<&TraceContext>) -> Box<dyn AgentObserver>;
fn tool_call_request(&self, tool_name: &str, parent: Option<&TraceContext>) -> Box<dyn McpRequestInstrumentation>;
}
pub type DynObserverFactory = Arc<dyn ObserverFactory>;