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(())
}