lean-ctx 3.9.15

Context Runtime for AI Agents with CCP. 71 MCP tools, 10 read modes, 95+ compression patterns, cross-session memory (CCP), persistent AI knowledge with temporal facts + contradiction detection, multi-agent context sharing, LITM-aware positioning, AAAK compact format, adaptive compression with Thompson Sampling bandits. Supports 24+ AI tools. Reduces LLM token consumption by up to 99%.
Documentation
#[cfg(test)]
mod tests {
    use std::collections::HashMap;

    use super::super::capsule_wire::{self, ContextCapsuleV1};
    use super::super::etpao::{EtpaoMetrics, EtpaoTracker};
    use super::super::knowledge_health;
    use super::super::result_fusion::{self, ChildResult, FusionStrategy};
    use super::super::types::{ContextReceiptV1, ReceiptOutcome};

    fn receipt(id: &str, delivered_tokens: usize, cache_hits: usize) -> ContextReceiptV1 {
        ContextReceiptV1 {
            receipt_id: format!("receipt:{id}"),
            plan_id: format!("plan:{id}"),
            delivered_tokens,
            cache_hits,
            cache_misses: usize::from(cache_hits == 0),
            outcome: ReceiptOutcome::Accepted,
            quality_signals: Vec::new(),
            feedback_attribution: HashMap::new(),
        }
    }

    fn capsule(owner: &str, refs: Vec<String>, budget: u64) -> ContextCapsuleV1 {
        ContextCapsuleV1::new("multi-agent-e2e", refs, budget, owner)
    }

    fn child_result(
        agent_id: &str,
        evidence: &[&str],
        confidence: f64,
        quality_score: f64,
        contradicts: &[&str],
    ) -> ChildResult {
        ChildResult {
            agent_id: agent_id.to_owned(),
            receipt_ref: format!("receipt:{agent_id}"),
            evidence: evidence.iter().map(|item| (*item).to_owned()).collect(),
            confidence,
            quality_score,
            contradicts: contradicts
                .iter()
                .map(|agent| (*agent).to_owned())
                .collect(),
        }
    }

    #[test]
    fn three_deep_chain_budget_cascade() {
        let mut tracker = EtpaoTracker::default();
        let mut parent = capsule("parent", vec!["ref:root".to_owned()], 10_000);

        let mut child = capsule("child", vec!["ref:child".to_owned()], 5_000);
        child.parent_capsule = Some(parent.capsule_id.clone());
        parent.budget_remaining = parent.budget_remaining.saturating_sub(child.budget_tokens);
        tracker.record_receipt(
            "parent",
            &receipt("parent-to-child", 5_000, 0),
            ReceiptOutcome::Accepted,
        );

        let mut grandchild = capsule("grandchild", vec!["ref:grandchild".to_owned()], 2_500);
        grandchild.parent_capsule = Some(child.capsule_id.clone());
        child.budget_remaining = child
            .budget_remaining
            .saturating_sub(grandchild.budget_tokens);
        tracker.record_receipt(
            "child",
            &receipt("child-to-grandchild", 2_500, 0),
            ReceiptOutcome::Accepted,
        );

        assert_eq!(parent.budget_remaining, 5_000);
        assert_eq!(child.budget_remaining, 2_500);
        assert_eq!(grandchild.budget_remaining, 2_500);
        assert!(grandchild.budget_remaining <= child.budget_remaining);
        assert!(child.budget_remaining <= parent.budget_remaining);
        assert_eq!(
            tracker.get("parent").map(|metrics| metrics.tokens_input),
            Some(5_000)
        );
        assert_eq!(
            tracker.get("child").map(|metrics| metrics.tokens_input),
            Some(2_500)
        );
    }

    #[test]
    fn sibling_context_dedup() {
        let shared = ["ref:A", "ref:B"];
        let siblings: Vec<_> = ["ref:one", "ref:two", "ref:three"]
            .into_iter()
            .enumerate()
            .map(|(index, unique)| {
                capsule(
                    &format!("sibling-{index}"),
                    shared
                        .into_iter()
                        .chain([unique])
                        .map(str::to_owned)
                        .collect(),
                    1_000,
                )
            })
            .collect();

        let report = capsule_wire::dedup_siblings(&siblings);

        assert_eq!(report.shared_refs, vec!["ref:A", "ref:B"]);
        assert!(report.dedup_ratio > 0.0);
        assert!(report.unique_per_capsule.iter().all(|refs| refs.len() == 1));
    }

    #[test]
    fn delta_transfer_smaller_than_full() {
        let original_refs: Vec<_> = (0..10)
            .map(|index| format!("ref:original-context-object-{index:02}-with-stable-metadata"))
            .collect();
        let base = capsule("parent", original_refs.clone(), 5_000);
        let mut updated_refs = original_refs[..8].to_vec();
        updated_refs.extend([
            "ref:new-context-object-10-with-stable-metadata".to_owned(),
            "ref:new-context-object-11-with-stable-metadata".to_owned(),
        ]);
        let mut updated = capsule("parent", updated_refs, 5_000);
        updated.created_at_epoch = base.created_at_epoch;

        let delta = capsule_wire::compute_delta(&base, &updated);
        let delta_size = serde_json::to_vec(&delta).expect("delta serializes").len();
        let full_size = serde_json::to_vec(&updated)
            .expect("capsule serializes")
            .len();
        let applied = capsule_wire::apply_delta(&base, &delta);

        assert!(delta_size * 2 < full_size);
        assert_eq!(applied, updated);
    }

    #[test]
    fn result_fusion_resolves_contradiction() {
        let results = [
            child_result("agent-a", &["finding:accepted"], 0.95, 0.95, &["agent-b"]),
            child_result("agent-b", &["finding:rejected"], 0.80, 0.90, &["agent-a"]),
            child_result("agent-c", &["finding:accepted"], 0.85, 0.90, &[]),
        ];

        let report = result_fusion::fuse_results(&results, FusionStrategy::WeightedMerge);

        assert!(report.conflicts.iter().any(|conflict| {
            (conflict.agent_a == "agent-a" && conflict.agent_b == "agent-b")
                || (conflict.agent_a == "agent-b" && conflict.agent_b == "agent-a")
        }));
        assert_eq!(report.winning_agent, "agent-a");
        assert!(
            report
                .merged_evidence
                .contains(&"finding:accepted".to_owned())
        );
    }

    #[test]
    fn etpao_improves_with_context_reuse() {
        let mut tracker = EtpaoTracker::default();
        for index in 0..5 {
            tracker.record_receipt(
                "chain",
                &receipt(&format!("uncached-{index}"), 1_000, 0),
                ReceiptOutcome::Accepted,
            );
        }
        let first: EtpaoMetrics = tracker.aggregate();
        let first_etpao = first.etpao();

        for index in 0..5 {
            tracker.record_receipt(
                "chain",
                &receipt(&format!("cached-{index}"), 100, 1),
                ReceiptOutcome::Accepted,
            );
        }
        let second_etpao = tracker.aggregate().etpao();

        assert!(second_etpao < first_etpao);
    }

    #[test]
    fn knowledge_health_detects_stale_facts() {
        let mut facts = vec![(true, false); 3];
        facts.extend([(false, false); 5]);
        facts.extend([(false, true); 2]);

        let report = knowledge_health::assess_health(&facts, 0, 0, 0, 0);

        assert!((report.freshness_score - 0.3).abs() < f64::EPSILON);
        assert!((report.stale_ratio - 0.7).abs() < f64::EPSILON);
        assert!((report.contradiction_rate - 0.2).abs() < f64::EPSILON);
    }
}