haematite-cli 0.21.1

The haematite command: serve a store, its door and Studio, answer MCP, query with jq, and host the store's assistant seat
Documentation
use super::handshake::{Version, capabilities};
use serde_json::json;

#[test]
fn r1_rows_6_7_v1_load_and_v2_session_name_the_resume_capability() -> anyhow::Result<()> {
    let (version, resumable, capability) =
        capabilities(json!({"protocolVersion":1,"agentCapabilities":{"loadSession":true}}))?;
    assert_eq!(version, Version::One);
    assert!(resumable);
    assert_eq!(capability, "agentCapabilities.loadSession");
    let (version, resumable, capability) = capabilities(
        json!({"protocolVersion":2,"info":{"name":"fake","version":"1"},"capabilities":{"session":{}}}),
    )?;
    assert_eq!(version, Version::Two);
    assert!(resumable);
    assert_eq!(
        capability,
        "capabilities.session (schema 1.5.0 includes resume)"
    );
    assert!(
        capabilities(
            json!({"protocolVersion":2,"info":{"name":"fake","version":"1"},"capabilities":{}})
        )
        .is_err()
    );
    Ok(())
}

#[test]
fn r1_all_session_response_types_are_selected_by_version_and_operation() -> anyhow::Result<()> {
    for version in [Version::One, Version::Two] {
        for prior in [None, Some("saved")] {
            let answer = if prior.is_some() {
                json!({})
            } else {
                json!({"sessionId":"new"})
            };
            let (id, config) = super::handshake::session_answer(version, prior, answer)?;
            assert_eq!(id, prior.unwrap_or("new"));
            assert_eq!(config, json!([]));
            let error =
                super::handshake::session_answer(version, prior, json!("fixture-private-value"))
                    .err()
                    .ok_or_else(|| anyhow::anyhow!("malformed session reply accepted"))?;
            assert!(!error.to_string().contains("fixture-private-value"));
            assert!(error.to_string().contains(if prior.is_none() {
                "session_new"
            } else if version == Version::One {
                "session_load"
            } else {
                "session_resume"
            }));
        }
    }
    let (version, resumable, capability) =
        capabilities(json!({"protocolVersion":1,"agentCapabilities":{"loadSession":false}}))?;
    assert_eq!(version, Version::One);
    assert!(!resumable);
    assert_eq!(capability, "agentCapabilities.loadSession");
    Ok(())
}