csusage-adapter-amp 0.0.2

Coding agent CLI usage reports (ccusage fork with Claude Science support)
use crate::{
    LoadedEntry, PricingMap, Result, cli::SharedArgs, collect_files_with_extension, debug_log,
    parse_tz, read_files_parallel,
};

use super::{parser, paths};

pub fn load_entries(shared: &SharedArgs, pricing: &PricingMap) -> Result<Vec<LoadedEntry>> {
    crate::progress::track_usage_load(crate::progress::UsageLoadAgent("Amp"), shared.json, || {
        load_entries_inner(shared, pricing)
    })
}

fn load_entries_inner(shared: &SharedArgs, pricing: &PricingMap) -> Result<Vec<LoadedEntry>> {
    let mut entries = Vec::new();
    let tz = parse_tz(shared.timezone.as_deref());
    for path in paths::paths()? {
        let threads_dir = path.join("threads");
        let mut files = Vec::new();
        collect_files_with_extension(&threads_dir, "json", &mut files);
        let per_file = read_files_parallel(&files, shared.single_thread, |file| {
            parser::read_thread_file(file, tz.as_ref(), shared.mode, Some(pricing)).unwrap_or_else(
                |error| {
                    debug_log(
                        shared,
                        format!("Failed to read Amp thread file {}: {error}", file.display()),
                    );
                    Vec::new()
                },
            )
        });
        for file_entries in per_file {
            entries.extend(file_entries);
        }
    }
    entries.sort_by_key(|entry| entry.timestamp);
    Ok(entries)
}