mdstream 0.2.0

Streaming-first Markdown middleware for LLM output (committed + pending blocks, render-agnostic).
Documentation
use mdstream::{AnalyzedStream, MathAnalyzer, MathMeta, Options};

#[test]
fn math_analyzer_marks_pending_unbalanced_then_committed_balanced() {
    let mut s = AnalyzedStream::new(Options::default(), MathAnalyzer);

    let u1 = s.append("$$\nE = mc^2\n");
    assert!(u1.update.committed.is_empty());
    let pending = u1.update.pending.expect("pending");
    assert_eq!(pending.kind, mdstream::BlockKind::MathBlock);
    assert_eq!(
        u1.pending_meta,
        Some(mdstream::BlockMeta {
            id: pending.id,
            meta: MathMeta { balanced: false }
        })
    );

    let u2 = s.append("$$\n\nAfter\n");
    assert!(u2.committed_meta.iter().any(|m| m.meta.balanced));
    assert_eq!(u2.update.pending.as_ref().unwrap().raw, "After\n");
}