agent-scroll 0.1.0

Canonical byte-deterministic transcript format for AI-agent conversations (Rust port of @p-vbordei/agent-scroll)
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use serde_json::Value;

use crate::canonical::canonical;
use crate::error::Error;
use crate::schema::{validate_sealed_turn, validate_turn};

pub fn serialize(value: &Value) -> Result<Vec<u8>, Error> {
    canonical(value)
}

pub fn deserialize(bytes: &[u8]) -> Result<Value, Error> {
    let parsed: Value = serde_json::from_slice(bytes)?;
    if validate_sealed_turn(&parsed).is_ok() {
        return Ok(parsed);
    }
    validate_turn(&parsed).map_err(|e| Error::Invalid(format!("deserialize: {e}")))?;
    Ok(parsed)
}