build world state in session

This commit is contained in:
pakrym-oai
2026-06-20 11:47:35 -07:00
parent 8ed21ed0d4
commit 4a68660476
3 changed files with 33 additions and 19 deletions
+10 -19
View File
@@ -1,6 +1,5 @@
use crate::context::CollaborationModeInstructions;
use crate::context::ContextualUserFragment;
use crate::context::EnvironmentsState;
use crate::context::ModelSwitchInstructions;
use crate::context::MultiAgentModeInstructions;
use crate::context::PermissionsInstructions;
@@ -9,6 +8,8 @@ use crate::context::RealtimeEndInstructions;
use crate::context::RealtimeStartInstructions;
use crate::context::RealtimeStartWithInstructions;
use crate::session::PreviousTurnSettings;
use crate::session::build_world_state_from_turn_context;
use crate::session::build_world_state_from_turn_context_item;
use crate::session::turn_context::TurnContext;
use codex_execpolicy::Policy;
use codex_features::Feature;
@@ -19,19 +20,6 @@ use codex_protocol::models::ResponseItem;
use codex_protocol::openai_models::ModelInfo;
use codex_protocol::protocol::TurnContextItem;
fn build_environment_update_item(
previous: Option<&TurnContextItem>,
next: &TurnContext,
) -> Option<ResponseItem> {
if !next.config.include_environment_context {
return None;
}
let prev = previous?;
let previous = EnvironmentsState::from_turn_context_item(prev);
EnvironmentsState::from_turn_context(next).render_diff(&previous)
}
fn build_permissions_update_item(
previous: Option<&TurnContextItem>,
next: &TurnContext,
@@ -240,7 +228,12 @@ pub(crate) fn build_settings_update_items(
// model-visible item emitted by build_initial_context. Persist the remaining
// inputs or add explicit replay events so fork/resume can diff everything
// deterministically.
let contextual_user_message = build_environment_update_item(previous, next);
let world_state_updates = previous
.map(|previous| {
let previous = build_world_state_from_turn_context_item(previous);
build_world_state_from_turn_context(next).render_diff(&previous)
})
.unwrap_or_default();
let developer_update_sections = [
// Keep model-switch instructions first so model-specific guidance is read before
// any other context diffs on this turn.
@@ -255,12 +248,10 @@ pub(crate) fn build_settings_update_items(
.flatten()
.collect();
let mut items = Vec::with_capacity(2);
let mut items = Vec::with_capacity(1 + world_state_updates.len());
if let Some(developer_message) = build_developer_update_item(developer_update_sections) {
items.push(developer_message);
}
if let Some(contextual_user_message) = contextual_user_message {
items.push(contextual_user_message);
}
items.extend(world_state_updates);
items
}
+3
View File
@@ -222,6 +222,7 @@ pub(crate) mod time_reminder;
mod token_budget;
pub(crate) mod turn;
pub(crate) mod turn_context;
mod world_state;
use self::config_lock::export_config_lock_if_configured;
use self::config_lock::validate_config_lock_if_configured;
#[cfg(test)]
@@ -242,6 +243,8 @@ use self::turn::collect_explicit_app_ids_from_skill_items;
use self::turn::realtime_text_for_event;
use self::turn_context::TurnContext;
use self::turn_context::TurnSkillsContext;
pub(crate) use self::world_state::build_world_state_from_turn_context;
pub(crate) use self::world_state::build_world_state_from_turn_context_item;
#[cfg(test)]
mod rollout_reconstruction_tests;
+20
View File
@@ -0,0 +1,20 @@
use super::turn_context::TurnContext;
use crate::context::EnvironmentsState;
use crate::context::world_state::WorldState;
use codex_protocol::protocol::TurnContextItem;
pub(crate) fn build_world_state_from_turn_context(turn_context: &TurnContext) -> WorldState {
let mut world_state = WorldState::default();
if turn_context.config.include_environment_context {
world_state.add_section(EnvironmentsState::from_turn_context(turn_context));
}
world_state
}
pub(crate) fn build_world_state_from_turn_context_item(
turn_context_item: &TurnContextItem,
) -> WorldState {
let mut world_state = WorldState::default();
world_state.add_section(EnvironmentsState::from_turn_context_item(turn_context_item));
world_state
}