ai-agent 0.13.4

Idiomatic agent sdk inspired by the claude code source leak
Documentation
pub struct EventEmitter<T> {
    listeners: Vec<Box<dyn Fn(T) + Send + Sync>>,
}

impl<T: Send + 'static> EventEmitter<T> {
    pub fn new() -> Self {
        Self {
            listeners: Vec::new(),
        }
    }

    pub fn on<F>(&mut self, callback: F)
    where
        F: Fn(T) + Send + Sync + 'static,
    {
        self.listeners.push(Box::new(callback));
    }

    pub fn emit(&self, event: T) {
        for listener in &self.listeners {
            listener(event.clone());
        }
    }

    pub fn clear(&mut self) {
        self.listeners.clear();
    }

    pub fn listener_count(&self) -> usize {
        self.listeners.len()
    }
}

impl<T> Default for EventEmitter<T> {
    fn default() -> Self {
        Self::new()
    }
}