kcode-k1-chat-codex-state 0.7.5

Deterministic open-format Codex K1 conversation state
Documentation
use crate::{ChatBox, ToolCallId, debug};

pub(super) fn recovered_sequence(session: [u8; 12], boxes: &[ChatBox]) -> Result<u64, String> {
    let mut maximum = 0;
    for box_ in boxes {
        if let Some(call) = box_.tool_call_metadata().map_err(debug)? {
            record_sequence(session, call.tool_call_id, &mut maximum)?;
        }
        if let Some(result) = box_.tool_result_metadata().map_err(debug)? {
            record_sequence(session, result.tool_call_id, &mut maximum)?;
        }
        if let Some(result) = box_.tool_result_v2_metadata().map_err(debug)? {
            record_sequence(session, result.tool_call_id, &mut maximum)?;
        }
    }
    Ok(maximum)
}

fn record_sequence(session: [u8; 12], id: ToolCallId, maximum: &mut u64) -> Result<(), String> {
    if id.nonce() != session {
        return Err("recovered ToolCallId belongs to another session".to_owned());
    }
    *maximum = (*maximum).max(id.sequence());
    Ok(())
}