mirror of
https://github.com/openai/codex.git
synced 2026-05-14 00:02:33 +00:00
## Summary Adds the standalone `codex-rollout-trace` crate, which defines the raw trace event format, replay/reduction model, writer, and reducer logic for reconstructing model-visible conversation/runtime state from recorded rollout data. The crate-level design is documented in [`codex-rs/rollout-trace/README.md`](https://github.com/openai/codex/blob/codex/rollout-trace-crate/codex-rs/rollout-trace/README.md). ## Stack This is PR 1/5 in the rollout trace stack. - [#18876](https://github.com/openai/codex/pull/18876): Add rollout trace crate - [#18877](https://github.com/openai/codex/pull/18877): Record core session rollout traces - [#18878](https://github.com/openai/codex/pull/18878): Trace tool and code-mode boundaries - [#18879](https://github.com/openai/codex/pull/18879): Trace sessions and multi-agent edges - [#18880](https://github.com/openai/codex/pull/18880): Add debug trace reduction command ## Review Notes This PR intentionally does not wire tracing into live Codex execution. It establishes the data model and reducer contract first, with crate-local tests covering conversation reconstruction, compaction boundaries, tool/session edges, and code-cell lifecycle reduction. Later PRs emit into this model. The README is the best entry point for reviewing the intended trace format and reduction semantics before diving into the reducer modules.
50 lines
1.7 KiB
Rust
50 lines
1.7 KiB
Rust
//! 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(),
|
|
}
|
|
}
|
|
}
|