rollout-trace/src/bundle.rs
49 lines
//! Trace bundle manifest and local layout constants.use serde::Deserialize;use serde::Serialize;use crate::model::AgentThreadId;pub(crate) const MANIFEST_FILE_NAME: &str = "manifest.json";pub(crate) const RAW_EVENT_LOG_FILE_NAME: &str = "trace.jsonl";pub(crate) const PAYLOADS_DIR_NAME: &str = "payloads";/// Conventional file name for a reducer-written `RolloutTrace` cache.pub const REDUCED_STATE_FILE_NAME: &str = "state.json";pub(crate) const TRACE_MANIFEST_SCHEMA_VERSION: u32 = 1;pub(crate) const REDUCED_TRACE_SCHEMA_VERSION: u32 = 1;/// Manifest stored at the root of a trace bundle.#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]pub(crate) struct TraceBundleManifest { pub(crate) schema_version: u32, pub(crate) trace_id: String, pub(crate) rollout_id: String, /// Root thread for the recorded rollout. Replay should fail rather than /// inventing a placeholder, because every reduced object is scoped back to /// this thread tree. pub(crate) root_thread_id: AgentThreadId, pub(crate) started_at_unix_ms: i64, pub(crate) raw_event_log: String, pub(crate) payloads_dir: String,}impl TraceBundleManifest { /// Builds a manifest that uses the standard local bundle layout. pub(crate) fn new( trace_id: String, rollout_id: String, root_thread_id: AgentThreadId, started_at_unix_ms: i64, ) -> Self { Self { schema_version: TRACE_MANIFEST_SCHEMA_VERSION, trace_id, rollout_id, root_thread_id, started_at_unix_ms, raw_event_log: RAW_EVENT_LOG_FILE_NAME.to_string(), payloads_dir: PAYLOADS_DIR_NAME.to_string(), } }}