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_diff, context_expand, 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 expand_recovers_exact_omitted_text_by_item_id() {
    let response = compact_context(CompactRequest {
        session_id: "tools".into(),
        messages: vec![
            msg("system", "system"),
            msg("user", "start"),
            msg(
                "tool",
                &format!("{} UNIQUE_NEEDLE", "old verbose output ".repeat(500)),
            ),
            msg("user", "latest"),
        ],
        policy: CompactionPolicy {
            target_tokens: 120,
            protect_last_n: 1,
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();
    let item_id = response
        .exact_store
        .iter()
        .find(|i| i.content.contains("UNIQUE_NEEDLE"))
        .unwrap()
        .item_id
        .clone();
    let expanded = context_expand(&response, &item_id, 20_000).unwrap();
    assert!(expanded.content.contains("UNIQUE_NEEDLE"));
    assert!(!expanded.truncated);
}

#[test]
fn search_finds_receipt_and_exact_store_content_without_dumping_everything() {
    let response = compact_context(CompactRequest {
        session_id: "search".into(),
        messages: vec![
            msg("system", "system"),
            msg("user", "start"),
            msg("tool", &format!("{} rare_token_alpha", "bulk ".repeat(600))),
            msg("user", "latest"),
        ],
        policy: CompactionPolicy {
            target_tokens: 120,
            protect_last_n: 1,
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();
    let hits = context_search(&response, "rare_token_alpha", 5, SearchScope::All);
    assert_eq!(hits.len(), 1);
    assert!(hits[0].snippet.contains("rare_token_alpha"));
    assert!(hits[0].snippet.len() < 360);
}

#[test]
fn diff_reports_policy_counts() {
    let response = compact_context(CompactRequest {
        session_id: "diff".into(),
        messages: vec![
            msg("system", "system"),
            msg("user", "Acceptance gate: exact text must stay."),
            msg("tool", &"bulk ".repeat(600)),
            msg(
                "assistant",
                "This likely connects to something speculative.",
            ),
            msg("user", "latest"),
        ],
        policy: CompactionPolicy {
            target_tokens: 120,
            protect_last_n: 1,
            ..Default::default()
        },
        focus: None,
    })
    .unwrap();
    let diff = context_diff(&response);
    assert!(diff.kept_count >= 2);
    assert!(diff.summarized_count >= 1);
    assert!(diff.quarantined_count >= 1);
    assert!(diff.token_savings_estimate > 0);
}