magi-code 0.96.1

Repository-aware CLI coding agent for terminal work
Documentation
//! Session accounting is independent of the bounded transcript and activity tree.
use crate::output::NormalizedUsageSnapshot;
pub(crate) use crate::sessions::usage::{
    SessionUsageLedger, SessionUsageRecord, USAGE_ACTIVITY_PREFIX,
};

impl super::state::MissionControlState {
    pub(crate) fn session_usage_totals(&self) -> NormalizedUsageSnapshot {
        let mut usage = self.session_usage.totals();
        usage.cache_known &= self.session_usage_is_complete();
        usage
    }

    /// False for legacy/malformed history whose full request totals cannot be recovered.
    pub(crate) fn session_usage_is_complete(&self) -> bool {
        self.session_usage.is_complete()
    }

    pub(crate) fn session_cache_percent(&self) -> Option<u64> {
        let usage = self.session_usage_totals();
        if usage.cache_known && usage.effective_input > 0 {
            Some(
                (u128::from(usage.cache_read) * 100 / u128::from(usage.effective_input)).min(100)
                    as u64,
            )
        } else {
            self.last_known_session_cache_percent
        }
    }

    pub(crate) fn refresh_session_cache_percent(&mut self) {
        self.last_known_session_cache_percent = self.session_cache_percent();
    }
}

pub(crate) use crate::sessions::usage_recorder::SessionUsageRecorder;