ai-agent 0.88.0

Idiomatic agent sdk inspired by the claude code source leak
Documentation
use std::collections::VecDeque;

pub struct SlidingWindow<T> {
    window: VecDeque<T>,
    capacity: usize,
}

impl<T> SlidingWindow<T> {
    pub fn new(capacity: usize) -> Self {
        SlidingWindow {
            window: VecDeque::with_capacity(capacity),
            capacity,
        }
    }

    pub fn push(&mut self, item: T) {
        if self.window.len() >= self.capacity {
            self.window.pop_front();
        }
        self.window.push_back(item);
    }

    pub fn get(&self, index: usize) -> Option<&T> {
        self.window.get(index)
    }

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

    pub fn is_empty(&self) -> bool {
        self.window.is_empty()
    }

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

    pub fn iter(&self) -> impl Iterator<Item = &T> {
        self.window.iter()
    }

    pub fn to_vec(&self) -> Vec<&T> {
        self.window.iter().collect()
    }

    pub fn front(&self) -> Option<&T> {
        self.window.front()
    }

    pub fn back(&self) -> Option<&T> {
        self.window.back()
    }
}

impl<T: Clone> SlidingWindow<T> {
    pub fn latest(&self) -> Option<T> {
        self.window.back().cloned()
    }

    pub fn oldest(&self) -> Option<T> {
        self.window.front().cloned()
    }
}