flightrec 0.2.2

Git-like filesystem observability for AI agents
Documentation
use anyhow::Result;

use crate::storage;

pub fn run(path: Option<String>, since: Option<String>) -> Result<()> {
    let diffs = storage::list_diffs()?;
    for id in &diffs {
        let event = storage::load_diff(id)?;
        if let Some(ref s) = since {
            if &event.created_at < s {
                continue;
            }
        }
        let filtered: Vec<_> = event
            .changes
            .iter()
            .filter(|c| {
                path.as_ref()
                    .map(|p| c.path.contains(p.as_str()))
                    .unwrap_or(true)
            })
            .collect();
        if !filtered.is_empty() {
            println!("[{}] {}{} changes", event.created_at, id, filtered.len());
            for c in &filtered {
                println!("  [{:?}] {}", c.change_type, c.path);
            }
        }
    }
    Ok(())
}