sqz-engine 2.1.1

Context compression engine behind sqz: per-command formatters, SHA-256 session dedup, AST structural summaries, token counting and budget tracking for AI coding agents
Documentation
pub const CAP_ERRORS: usize = 30;
pub const CAP_WARNINGS: usize = 15;
pub const CAP_LIST: usize = 30;

pub fn truncate_lines(lines: &[&str], cap: usize) -> String {
    if lines.len() <= cap {
        return lines.join("\n");
    }
    let mut result: Vec<&str> = lines[..cap].to_vec();
    result.push(&"");
    let omitted = lines.len() - cap;
    let suffix = format!("...+{} more", omitted);
    let mut out = result.join("\n");
    out.push_str(&suffix);
    out
}

pub fn truncate_items(items: &[String], cap: usize) -> String {
    if items.len() <= cap {
        return items.join("\n");
    }
    let visible: Vec<&str> = items[..cap].iter().map(|s| s.as_str()).collect();
    let omitted = items.len() - cap;
    format!("{}\n...+{} more", visible.join("\n"), omitted)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn no_truncation_under_cap() {
        let lines = vec!["a", "b", "c"];
        assert_eq!(truncate_lines(&lines, 5), "a\nb\nc");
    }

    #[test]
    fn truncates_at_cap() {
        let lines = vec!["a", "b", "c", "d", "e"];
        let result = truncate_lines(&lines, 3);
        assert!(result.contains("a\nb\nc"));
        assert!(result.contains("...+2 more"));
    }

    #[test]
    fn truncate_items_works() {
        let items: Vec<String> = (0..10).map(|i| format!("item_{}", i)).collect();
        let result = truncate_items(&items, 3);
        assert!(result.contains("item_0"));
        assert!(result.contains("item_2"));
        assert!(result.contains("...+7 more"));
    }
}