context-governor 0.2.0

Crate-agnostic governed context compaction with receipts, exact fallback references, and recall quality filters
Documentation
use context_governor::{
    compact_context, context_search, CompactRequest, CompactionPolicy, Message, SearchScope,
};

fn msg(role: &str, content: &str) -> Message {
    Message {
        id: None,
        role: role.into(),
        content: content.into(),
        name: None,
        metadata: Default::default(),
    }
}

#[test]
fn content_aware_summary_keeps_cargo_error_lines_not_bulk_noise() {
    let response = compact_context(CompactRequest {
        session_id: "content-compression".into(),
        messages: vec![
            msg("system", "system"),
            msg("tool", &format!("{}\nerror[E0425]: cannot find value `x`\nwarning: unused import\ntest result: FAILED\n{}", "bulk line\n".repeat(500), "tail noise\n".repeat(500))),
            msg("user", "latest"),
        ],
        policy: CompactionPolicy {
            target_tokens: 160,
            protect_first_n: 0,
            protect_last_n: 1,
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();

    let summary = response
        .compacted_messages
        .iter()
        .find(|m| m.content.contains("CONTEXT COMPACTION"))
        .unwrap();
    assert!(summary.content.contains("error[E0425]"));
    assert!(summary.content.contains("test result: FAILED"));
    assert!(summary.content.matches("bulk line").count() < 3);
}

#[test]
fn json_summary_keeps_keys_and_search_still_finds_exact_payload() {
    let json_payload = r#"{"alpha": 1, "beta": true, "nested": {"needle": "JSON_NEEDLE"}}"#;
    let response = compact_context(CompactRequest {
        session_id: "json-compression".into(),
        messages: vec![msg("assistant", json_payload), msg("user", "latest")],
        policy: CompactionPolicy {
            target_tokens: 20,
            protect_first_n: 0,
            protect_last_n: 1,
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();

    let summary = response
        .compacted_messages
        .iter()
        .find(|m| m.content.contains("CONTEXT COMPACTION"))
        .unwrap();
    assert!(summary.content.contains("json keys"));
    assert!(summary.content.contains("alpha"));
    assert!(summary.content.contains("nested"));

    let hits = context_search(&response, "JSON_NEEDLE", 5, SearchScope::ExactStore);
    assert_eq!(hits.len(), 1);
}

#[test]
fn search_result_summary_keeps_paths_and_match_lines_not_bulk_noise() {
    let search_payload = format!(
        "{}\n/home/demo/src/lib.rs:42: receipt_index_status includes store_bytes\n/home/demo/tests/store.rs:9: context_expand recovers exact omitted text\n{}",
        "irrelevant search noise\n".repeat(400),
        "tail noise\n".repeat(400)
    );
    let response = compact_context(CompactRequest {
        session_id: "search-result-compression".into(),
        messages: vec![msg("tool", &search_payload), msg("user", "latest")],
        policy: CompactionPolicy {
            target_tokens: 80,
            protect_first_n: 0,
            protect_last_n: 1,
            allocator: "aggressive_v1".into(),
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();

    let summary = response
        .compacted_messages
        .iter()
        .find(|m| m.content.contains("CONTEXT COMPACTION"))
        .unwrap();
    assert!(summary.content.contains("/home/demo/src/lib.rs"));
    assert!(summary.content.contains("store_bytes"));
    assert!(summary.content.matches("irrelevant search noise").count() < 3);
}