Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions codex-rs/app-server/tests/common/rollout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ fn create_fake_rollout_with_source_and_parent_thread_id(
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -333,6 +334,7 @@ pub fn create_fake_rollout_with_text_elements(
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/app-server/tests/suite/v2/thread_resume.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2588,6 +2588,7 @@ stream_max_retries = 0
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/core/tests/suite/sqlite_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ async fn backfill_scans_existing_rollouts() -> Result<()> {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
15 changes: 15 additions & 0 deletions codex-rs/protocol/src/protocol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3049,6 +3049,16 @@ impl SessionContextWindow {
}
}

/// Exclusive position in another thread's paginated rollout history.
#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, JsonSchema, TS)]
pub struct HistoryPosition {
pub thread_id: ThreadId,
/// First rollout ordinal not included from the prefix file.
pub end_ordinal_exclusive: u64,
/// Byte offset immediately after the last included JSONL record from the prefix file.
pub end_byte_offset: u64,
}

/// SessionMeta contains session-level data that doesn't correspond to a specific turn.
///
/// NOTE: There used to be an `instructions` field here, which stored user_instructions, but we
Expand Down Expand Up @@ -3098,6 +3108,9 @@ pub struct SessionMeta {
pub memory_mode: Option<String>,
#[serde(default)]
pub history_mode: ThreadHistoryMode,
/// Exclusive prefix of another paginated rollout inherited by this thread.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub history_base: Option<HistoryPosition>,
/// First rollout ordinal that belongs to this subagent's own projected history.
///
/// Earlier rollout records are inherited model context and stay out of child
Expand Down Expand Up @@ -3134,6 +3147,7 @@ impl Default for SessionMeta {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: ThreadHistoryMode::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -5854,6 +5868,7 @@ mod tests {
}))?;

assert_eq!(session_meta.history_mode, ThreadHistoryMode::Legacy);
assert_eq!(session_meta.history_base, None);
let serialized = serde_json::to_value(&session_meta)?;
assert_eq!(serialized["history_mode"], json!("legacy"));
let mut unknown = serialized;
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/compression_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,7 @@ fn write_rollout(path: &std::path::Path, thread_id: ThreadId, message: &str) ->
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
3 changes: 3 additions & 0 deletions codex-rs/rollout/src/metadata_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ async fn extract_metadata_from_rollout_uses_session_meta() {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: ThreadHistoryMode::Paginated,
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -150,6 +151,7 @@ async fn extract_metadata_from_rollout_returns_latest_memory_mode() {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -424,6 +426,7 @@ fn write_rollout_in_sessions_with_cwd(
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/recorder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,7 @@ impl RolloutRecorder {
selected_capability_roots,
memory_mode: (!config.generate_memories()).then_some("disabled".to_string()),
history_mode,
history_base: None,
subagent_history_start_ordinal,
multi_agent_version,
context_window: initial_window_id.map(SessionContextWindow::new),
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/recorder_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ async fn state_db_init_backfills_before_returning() -> anyhow::Result<()> {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/session_index_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ fn write_rollout_with_metadata(path: &Path, thread_id: ThreadId) -> std::io::Res
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/state_db_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ fn write_rollout_with_user_message(
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/rollout/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,7 @@ async fn test_updated_at_uses_file_mtime() -> Result<()> {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
2 changes: 2 additions & 0 deletions codex-rs/state/src/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ mod tests {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -629,6 +630,7 @@ mod tests {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: ThreadHistoryMode::Legacy,
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
2 changes: 2 additions & 0 deletions codex-rs/state/src/runtime/threads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2183,6 +2183,7 @@ mod tests {
selected_capability_roots: Vec::new(),
memory_mode: Some("polluted".to_string()),
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down Expand Up @@ -2249,6 +2250,7 @@ mod tests {
selected_capability_roots: Vec::new(),
memory_mode: None,
history_mode: Default::default(),
history_base: None,
subagent_history_start_ordinal: None,
multi_agent_version: None,
context_window: None,
Expand Down
1 change: 1 addition & 0 deletions codex-rs/thread-store/src/in_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ impl InMemoryThreadStore {
memory_mode: matches!(params.metadata.memory_mode, ThreadMemoryMode::Disabled)
.then_some("disabled".to_string()),
history_mode: params.history_mode,
history_base: None,
subagent_history_start_ordinal: params.subagent_history_start_ordinal,
multi_agent_version: params.multi_agent_version,
context_window: Some(SessionContextWindow::new(params.initial_window_id.clone())),
Expand Down
Loading