From 2e5fea64eefcaa19f48458b2386011b619f69c70 Mon Sep 17 00:00:00 2001 From: jif Date: Wed, 30 Sep 2026 09:52:24 +0000 Subject: [PATCH 1/8] Add an opt-in model catalog to multi-agent context (#49560) ## Why Refreshing available model descriptions changes the `spawn_agent` tool schema. Keep model choices current while preserving tool definitions and earlier conversation input. ## What changed - Add the disabled-by-default `model_catalog_in_context` feature for multi-agent V1 and V2. When enabled and model overrides are available, move model listings from tool descriptions into developer `` messages. - Include picker-visible, compatible models with descriptions, reasoning efforts, and service tiers in a listing bounded to 1,000 bytes. Point `spawn_agent` guidance to the latest catalog. - Append updated listings only when their rendered content changes, restore missing listings, and invalidate retained catalogs when they no longer apply. ## Testing Extend integration coverage for V1 and V2 with the feature enabled and disabled. Verify that catalog refreshes preserve tool definitions and prior input when enabled, append the updated listing once, and retain the existing tool-description behavior when disabled. Add a request-history snapshot for the V1 opt-in path. GitOrigin-RevId: 67b11b4ad6c35f00d0e29edf6343bb0b4804d797 --- codex-rs/core/config.schema.json | 6 + codex-rs/core/src/context/world_state/mod.rs | 2 + .../src/context/world_state/model_catalog.rs | 144 ++++++++++++++ codex-rs/core/src/session/world_state.rs | 42 +++++ .../src/tools/handlers/multi_agents_spec.rs | 85 ++++++--- .../tools/handlers/multi_agents_spec_tests.rs | 130 +------------ codex-rs/core/src/tools/router.rs | 2 +- codex-rs/core/src/tools/spec_plan.rs | 14 +- .../common/context_snapshot/normalize.rs | 1 + codex-rs/core/tests/suite/scenarios.rs | 18 ++ ...g_refresh_preserves_tools_and_history.snap | 50 +++++ .../tests/suite/spawn_agent_description.rs | 177 ++++++++++++++---- codex-rs/features/src/lib.rs | 8 + 13 files changed, 491 insertions(+), 188 deletions(-) create mode 100644 codex-rs/core/src/context/world_state/model_catalog.rs create mode 100644 codex-rs/core/tests/suite/snapshots/all__suite__scenarios__model_catalog_refresh_preserves_tools_and_history.snap diff --git a/codex-rs/core/config.schema.json b/codex-rs/core/config.schema.json index bcc4a8ecceb2..43a322feacdd 100644 --- a/codex-rs/core/config.schema.json +++ b/codex-rs/core/config.schema.json @@ -975,6 +975,9 @@ "mentions_v2": { "type": "boolean" }, + "model_catalog_in_context": { + "type": "boolean" + }, "multi_agent": { "type": "boolean" }, @@ -7015,6 +7018,9 @@ "mentions_v2": { "type": "boolean" }, + "model_catalog_in_context": { + "type": "boolean" + }, "multi_agent": { "type": "boolean" }, diff --git a/codex-rs/core/src/context/world_state/mod.rs b/codex-rs/core/src/context/world_state/mod.rs index 1c4441f80e3a..62e5dcd7b907 100644 --- a/codex-rs/core/src/context/world_state/mod.rs +++ b/codex-rs/core/src/context/world_state/mod.rs @@ -7,6 +7,7 @@ mod environment; mod environments_instructions; mod managed_developer_instructions; mod model; +mod model_catalog; mod multi_agent_mode; mod multi_agent_usage_hint; mod permissions; @@ -46,6 +47,7 @@ pub(crate) use managed_developer_instructions::ManagedDeveloperInstructions; pub(crate) use managed_developer_instructions::ManagedDeveloperInstructionsState; pub(crate) use managed_developer_instructions::validate_managed_developer_instructions; pub(crate) use model::ModelInstructionsState; +pub(crate) use model_catalog::ModelCatalogState; pub(crate) use multi_agent_mode::MultiAgentModeState; pub(crate) use multi_agent_usage_hint::MultiAgentUsageHintState; pub(crate) use permissions::PermissionsState; diff --git a/codex-rs/core/src/context/world_state/model_catalog.rs b/codex-rs/core/src/context/world_state/model_catalog.rs new file mode 100644 index 000000000000..db685166a5d0 --- /dev/null +++ b/codex-rs/core/src/context/world_state/model_catalog.rs @@ -0,0 +1,144 @@ +//! Keeps spawn model choices in append-only context instead of the tool schema. +//! Snapshots compare the bounded text actually shown to the model; catalog refreshes +//! never rewrite earlier messages, and missing retained context gets a fresh catalog. + +use super::PreviousSectionState; +use super::WorldStateHash; +use super::WorldStateSection; +use crate::agent::child_config::MAX_SPAWN_AGENT_MODEL_OVERRIDES; +use crate::agent::child_config::model_supports_multi_agent_backend; +use crate::context::ContextualUserFragment; +use crate::context::environment_context::push_xml_escaped_text; +use codex_protocol::models::ContentItemKind; +use codex_protocol::openai_models::ModelPreset; +use codex_protocol::protocol::MultiAgentVersion; + +// Includes XML escaping and markers; at most 1,000 tokens even with byte fallback. +const MAX_RENDERED_BYTES: usize = 1_000; +const MAX_DESCRIPTION_CHARS: usize = 250; +const OMITTED_NOTICE: &str = "Additional model choices omitted.\n"; + +/// The current model choices, or an empty catalog to invalidate a retained listing. +#[derive(Clone, Default)] +pub(crate) struct ModelCatalogState { + catalog: String, +} + +impl ModelCatalogState { + pub(crate) fn new(models: &[ModelPreset], multi_agent_version: MultiAgentVersion) -> Self { + let mut catalog = String::new(); + let mut models = models + .iter() + .filter(|model| model.show_in_picker) + .filter(|model| model_supports_multi_agent_backend(model, multi_agent_version)) + .take(MAX_SPAWN_AGENT_MODEL_OVERRIDES) + .collect::>(); + // Stabilize the selected choices independently of their picker ordering. + models.sort_by(|left, right| left.model.cmp(&right.model)); + if models.is_empty() { + catalog.push_str("No picker-visible model overrides are currently loaded.\n"); + } + let (open, close) = Self::type_markers(); + let body_budget = MAX_RENDERED_BYTES - open.len() - close.len() - 2; + for model in models { + let mut line = format!("- `{}`: ", model.model); + line.extend(model.description.chars().take(MAX_DESCRIPTION_CHARS)); + if model.description.chars().count() > MAX_DESCRIPTION_CHARS { + line.push('…'); + } + if !model.supported_reasoning_efforts.is_empty() { + line.push_str(" Reasoning efforts: "); + for (index, preset) in model.supported_reasoning_efforts.iter().enumerate() { + if index > 0 { + line.push_str(", "); + } + line.push_str(preset.effort.as_str()); + if preset.effort == model.default_reasoning_effort { + line.push_str(" (default)"); + } + } + line.push('.'); + } + if !model.service_tiers.is_empty() { + line.push_str(" Service tiers: "); + for (index, tier) in model.service_tiers.iter().enumerate() { + if index > 0 { + line.push_str(", "); + } + line.push_str(tier.id.as_str()); + } + line.push('.'); + } + let mut escaped = String::new(); + push_xml_escaped_text(&mut escaped, &line); + if catalog.len() + escaped.len() + 1 + OMITTED_NOTICE.len() > body_budget { + // Keep identifiers and capability lists intact instead of advertising + // a truncated model ID, reasoning effort, or service tier. + catalog.push_str(OMITTED_NOTICE); + break; + } + catalog.push_str(&escaped); + catalog.push('\n'); + } + Self { catalog } + } +} + +impl ContextualUserFragment for ModelCatalogState { + fn content_kind(&self) -> ContentItemKind { + ContentItemKind("multi_agent.model_catalog".to_string()) + } + + fn role(&self) -> &'static str { + "developer" + } + + fn markers(&self) -> (&'static str, &'static str) { + Self::type_markers() + } + + fn type_markers() -> (&'static str, &'static str) { + ("", "") + } + + fn body(&self) -> String { + if self.catalog.is_empty() { + "\nThe previous spawn_agent model catalog no longer applies.\n".to_string() + } else { + format!("\n{}", self.catalog) + } + } +} + +impl WorldStateSection for ModelCatalogState { + const ID: &'static str = "model_catalog"; + type Snapshot = WorldStateHash; + + fn snapshot(&self) -> Self::Snapshot { + WorldStateHash::from_fragment(self) + } + + fn matches_legacy_fragment(role: &str, text: &str) -> bool { + role == "developer" && Self::matches_text(text) + } + + fn has_retained_fragment_matcher() -> bool { + true + } + + fn matches_retained_fragment(role: &str, text: &str) -> bool { + Self::matches_legacy_fragment(role, text) + } + + fn render_diff( + &self, + previous: PreviousSectionState<'_, Self::Snapshot>, + ) -> Option> { + if matches!(previous, PreviousSectionState::Known(previous) if previous == &self.snapshot()) + || self.catalog.is_empty() && matches!(previous, PreviousSectionState::Absent) + { + return None; + } + Some(Box::new(self.clone())) + } +} diff --git a/codex-rs/core/src/session/world_state.rs b/codex-rs/core/src/session/world_state.rs index c0d7dea64d78..1dc5b0f2191e 100644 --- a/codex-rs/core/src/session/world_state.rs +++ b/codex-rs/core/src/session/world_state.rs @@ -12,6 +12,7 @@ use crate::context::world_state::ContextWindowGuidanceState; use crate::context::world_state::EnvironmentsInstructionsState; use crate::context::world_state::EnvironmentsState; use crate::context::world_state::ManagedDeveloperInstructionsState; +use crate::context::world_state::ModelCatalogState; use crate::context::world_state::ModelInstructionsState; use crate::context::world_state::MultiAgentModeState; use crate::context::world_state::MultiAgentUsageHintState; @@ -21,6 +22,7 @@ use crate::context::world_state::PluginsInstructionsState; use crate::context::world_state::RealtimeState; use crate::context::world_state::ToolsState; use crate::context::world_state::WorldState; +use crate::tools::handlers::multi_agents_spec::MULTI_AGENT_V1_NAMESPACE; use codex_connectors::AppToolPolicyEvaluator; use codex_extension_api::WorldStateContributionInput; use codex_features::Feature; @@ -31,6 +33,7 @@ use codex_prompts::render_model_instructions; use codex_protocol::error::Result as CodexResult; use codex_protocol::models::BaseInstructionsProvenance; use codex_protocol::protocol::MultiAgentVersion; +use codex_tools::ToolName; const MAX_ENVIRONMENT_SUBAGENTS: usize = 8; const MAX_ENVIRONMENT_SUBAGENT_BYTES: usize = 1_024; @@ -324,6 +327,45 @@ impl Session { world_state.add_section(usage_hint); } world_state.add_section(multi_agent_mode); + let spawn_tool = match turn_context.multi_agent_version { + MultiAgentVersion::Disabled => None, + MultiAgentVersion::V1 => Some(ToolName::new( + Some(MULTI_AGENT_V1_NAMESPACE.to_string()), + "spawn_agent", + )), + MultiAgentVersion::V2 => turn_context + .config + .multi_agent_v2 + .expose_spawn_agent_model_overrides + .then(|| { + ToolName::new( + turn_context + .provider + .capabilities() + .namespace_tools + .then(|| turn_context.config.multi_agent_v2.tool_namespace.clone()) + .flatten(), + "spawn_agent", + ) + }), + }; + let model_overrides_available = + spawn_tool.is_some_and(|name| step_context.tool_router.exposes_tool(&name)); + world_state.add_section( + if model_overrides_available + && turn_context + .config + .features + .enabled(Feature::ModelCatalogInContext) + { + ModelCatalogState::new( + &turn_context.available_models, + turn_context.multi_agent_version, + ) + } else { + ModelCatalogState::default() + }, + ); if !crate::guardian::is_basic_session_source(&turn_context.session_source) { world_state.add_section(ManagedDeveloperInstructionsState::new( turn_context diff --git a/codex-rs/core/src/tools/handlers/multi_agents_spec.rs b/codex-rs/core/src/tools/handlers/multi_agents_spec.rs index 52c24f8f0611..27a7ab9a2606 100644 --- a/codex-rs/core/src/tools/handlers/multi_agents_spec.rs +++ b/codex-rs/core/src/tools/handlers/multi_agents_spec.rs @@ -15,6 +15,8 @@ pub const MULTI_AGENT_V1_NAMESPACE: &str = "multi_agent_v1"; const MULTI_AGENT_V1_NAMESPACE_DESCRIPTION: &str = "Tools for spawning and managing sub-agents."; const SPAWN_AGENT_INHERITED_MODEL_GUIDANCE: &str = "Spawned agents inherit your current model by default. Omit `model` to use that preferred default; set `model` only when an explicit override is needed."; +const SPAWN_AGENT_MODEL_CATALOG_GUIDANCE: &str = + "Pick model overrides from the latest listing."; const SPAWN_AGENT_TYPE_OVERRIDE_DESCRIPTION_V1: &str = "Agent type override for the new agent. Omit to inherit the parent agent type with a full-history fork; otherwise, `default` is used."; const SPAWN_AGENT_MODEL_OVERRIDE_DESCRIPTION: &str = "Model override for the new agent. Omit unless an explicit override is needed."; @@ -28,6 +30,7 @@ pub struct SpawnAgentToolOptions { pub hide_agent_type_model_reasoning: bool, pub expose_spawn_agent_model_overrides: bool, pub multi_agent_version: MultiAgentVersion, + pub model_catalog_in_context: bool, pub usage_hint_text: Option, } @@ -40,6 +43,7 @@ impl Default for SpawnAgentToolOptions { hide_agent_type_model_reasoning: false, expose_spawn_agent_model_overrides: false, multi_agent_version: MultiAgentVersion::Disabled, + model_catalog_in_context: false, usage_hint_text: None, } } @@ -63,9 +67,11 @@ impl Default for WaitAgentTimeoutOptions { } pub fn create_spawn_agent_tool_v1(options: SpawnAgentToolOptions) -> ToolSpec { - let available_models_description = (!options.hide_agent_type_model_reasoning).then(|| { - spawn_agent_models_description(&options.available_models, options.multi_agent_version) - }); + let available_models_description = (!options.model_catalog_in_context + && !options.hide_agent_type_model_reasoning) + .then(|| { + spawn_agent_models_description(&options.available_models, options.multi_agent_version) + }); let inherited_model_guidance = (!options.hide_agent_type_model_reasoning).then_some(SPAWN_AGENT_INHERITED_MODEL_GUIDANCE); let return_value_description = @@ -85,6 +91,7 @@ pub fn create_spawn_agent_tool_v1(options: SpawnAgentToolOptions) -> ToolSpec { name: "spawn_agent".to_string(), description: spawn_agent_tool_description( available_models_description.as_deref(), + options.model_catalog_in_context, inherited_model_guidance, return_value_description, options.usage_hint_text, @@ -101,9 +108,11 @@ pub fn create_spawn_agent_tool_v2( options: SpawnAgentToolOptions, description_override: Option<&str>, ) -> ToolSpec { - let available_models_description = options.expose_spawn_agent_model_overrides.then(|| { - spawn_agent_models_description(&options.available_models, options.multi_agent_version) - }); + let available_models_description = (!options.model_catalog_in_context + && options.expose_spawn_agent_model_overrides) + .then(|| { + spawn_agent_models_description(&options.available_models, options.multi_agent_version) + }); let inherited_model_guidance = (options.expose_spawn_agent_model_overrides && !options.hide_agent_type_model_reasoning) .then_some(SPAWN_AGENT_INHERITED_MODEL_GUIDANCE); @@ -127,6 +136,10 @@ pub fn create_spawn_agent_tool_v2( name: "spawn_agent".to_string(), description: spawn_agent_tool_description_v2( available_models_description.as_deref(), + options.model_catalog_in_context, + options + .expose_spawn_agent_model_overrides + .then_some(SPAWN_AGENT_MODEL_CATALOG_GUIDANCE), inherited_model_guidance, options.usage_hint_text, description_override, @@ -673,18 +686,30 @@ fn hide_spawn_agent_metadata_options(properties: &mut BTreeMap, + model_catalog_in_context: bool, inherited_model_guidance: Option<&str>, return_value_description: &str, usage_hint_text: Option, ) -> String { - let agent_role_guidance = available_models_description.unwrap_or_default(); + let model_catalog_guidance = inherited_model_guidance + .map(|_| SPAWN_AGENT_MODEL_CATALOG_GUIDANCE) + .unwrap_or_default(); let inherited_model_guidance = inherited_model_guidance.unwrap_or_default(); - let tool_description = format!( - r#" - {agent_role_guidance} + let tool_description = if model_catalog_in_context { + format!( + r#" + Spawn a sub-agent for a well-scoped task. {return_value_description} {inherited_model_guidance} +{model_catalog_guidance}"# + ) + } else { + let available_models_description = available_models_description.unwrap_or_default(); + format!( + r#" + {available_models_description} Spawn a sub-agent for a well-scoped task. {return_value_description} {inherited_model_guidance}"# - ); + ) + }; if let Some(usage_hint_text) = usage_hint_text { return format!( @@ -693,19 +718,20 @@ fn spawn_agent_tool_description( {usage_hint_text}"# ); } - let agent_role_usage_hint = available_models_description - .map(|_| { - "Agent-role guidance below only helps choose which agent to use after spawning is already authorized; it never authorizes spawning by itself." - }) - .unwrap_or_default(); + let agent_role_usage_hint = if model_catalog_in_context { + "" + } else if available_models_description.is_some() { + "\nAgent-role guidance below only helps choose which agent to use after spawning is already authorized; it never authorizes spawning by itself." + } else { + "\n" + }; format!( r#" {tool_description} This spawn_agent tool provides you access to sub-agents that inherit your current model by default. Do not set the `model` field unless the user explicitly asks for a different model. You should follow the rules and guidelines below to use this tool. Do not spawn sub-agents unless the user or applicable AGENTS.md/skill instructions explicitly ask for sub-agents, delegation, or parallel agent work. -Requests for depth, thoroughness, research, investigation, or detailed codebase analysis do not count as permission to spawn. -{agent_role_usage_hint} +Requests for depth, thoroughness, research, investigation, or detailed codebase analysis do not count as permission to spawn.{agent_role_usage_hint} ### When to delegate vs. do the subtask yourself - First, quickly analyze the overall user task and form a succinct high-level plan. Identify which tasks are immediate blockers on the critical path, and which tasks are sidecar tasks that are needed but can run in parallel without blocking the next local step. As part of that plan, explicitly decide what immediate task you should do locally right now. Do this planning step before delegating to agents so you do not hand off the immediate blocking task to a submodel and then waste time waiting on it. @@ -740,28 +766,37 @@ Requests for depth, thoroughness, research, investigation, or detailed codebase fn spawn_agent_tool_description_v2( available_models_description: Option<&str>, + model_catalog_in_context: bool, + model_catalog_guidance: Option<&str>, inherited_model_guidance: Option<&str>, usage_hint_text: Option, description: Option<&str>, ) -> String { - let agent_role_guidance = available_models_description.unwrap_or_default(); + let model_catalog_guidance = model_catalog_guidance.unwrap_or_default(); let inherited_model_guidance = inherited_model_guidance.unwrap_or_default(); + let (catalog_prefix, catalog_suffix) = if model_catalog_in_context { + (String::new(), format!("\n{model_catalog_guidance}")) + } else { + let available_models_description = available_models_description.unwrap_or_default(); + ( + format!(" {available_models_description}\n"), + String::new(), + ) + }; let tool_description = if let Some(description) = description { format!( r#" - {agent_role_guidance} - {description} -{inherited_model_guidance}"# +{catalog_prefix} {description} +{inherited_model_guidance}{catalog_suffix}"# ) } else { format!( r#" - {agent_role_guidance} - Spawns an agent to work on the specified task. If your current task is `/root/task1` and you spawn_agent with task_name "task_3" the agent will have canonical task name `/root/task1/task_3`. +{catalog_prefix} Spawns an agent to work on the specified task. If your current task is `/root/task1` and you spawn_agent with task_name "task_3" the agent will have canonical task name `/root/task1/task_3`. You are then able to refer to this agent as `task_3` or `/root/task1/task_3` interchangeably. However an agent `/root/task2/task_3` would only be able to communicate with this agent via its canonical name `/root/task1/task_3`. The spawned agent will have the same tools as you and the ability to spawn its own subagents. -{inherited_model_guidance} +{inherited_model_guidance}{catalog_suffix} It will be able to send you and other running agents messages, and its final answer will be provided to you when it finishes. The new agent's canonical task name will be provided to it along with the message. diff --git a/codex-rs/core/src/tools/handlers/multi_agents_spec_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_spec_tests.rs index e2f943c7ab86..493ba3f02afc 100644 --- a/codex-rs/core/src/tools/handlers/multi_agents_spec_tests.rs +++ b/codex-rs/core/src/tools/handlers/multi_agents_spec_tests.rs @@ -1,64 +1,19 @@ use super::*; -use codex_protocol::openai_models::ModelPreset; -use codex_protocol::openai_models::ModelServiceTier; -use codex_protocol::openai_models::ReasoningEffort; -use codex_protocol::openai_models::ReasoningEffortPreset; use codex_tools::JsonSchemaPrimitiveType; use codex_tools::JsonSchemaType; use pretty_assertions::assert_eq; use serde_json::json; -fn model_preset(id: &str, show_in_picker: bool) -> ModelPreset { - ModelPreset { - id: id.to_string(), - model: format!("{id}-model"), - display_name: format!("{id} display"), - description: format!("{id} description"), - model_specialty: None, - default_reasoning_effort: ReasoningEffort::Medium, - supported_reasoning_efforts: vec![ReasoningEffortPreset { - effort: ReasoningEffort::Medium, - description: "Balanced".to_string(), - }], - supports_personality: false, - additional_speed_tiers: Vec::new(), - service_tiers: vec![ModelServiceTier { - id: "priority".to_string(), - name: "Fast".to_string(), - description: "1.5x speed, increased usage".to_string(), - }], - default_service_tier: None, - available_access_programs: None, - is_default: false, - upgrade: None, - show_in_picker, - multi_agent_version: Some(MultiAgentVersion::V2), - availability_nux: None, - supported_in_api: true, - input_modalities: Vec::new(), - } -} - #[test] -fn spawn_agent_tool_v2_requires_task_name_and_lists_visible_models() { - let mut legacy = model_preset("legacy", /*show_in_picker*/ true); - legacy.multi_agent_version = Some(MultiAgentVersion::V1); - let mut disabled = model_preset("disabled", /*show_in_picker*/ true); - disabled.multi_agent_version = Some(MultiAgentVersion::Disabled); +fn spawn_agent_tool_v2_requires_task_name() { let tool = create_spawn_agent_tool_v2( SpawnAgentToolOptions { - available_models: vec![ - model_preset("visible", /*show_in_picker*/ true), - model_preset("hidden", /*show_in_picker*/ false), - legacy, - disabled, - ], agent_type_description: "role help".to_string(), expose_agent_type: true, hide_agent_type_model_reasoning: false, expose_spawn_agent_model_overrides: true, - multi_agent_version: MultiAgentVersion::V2, usage_hint_text: None, + ..Default::default() }, /*description_override*/ None, ); @@ -84,18 +39,6 @@ fn spawn_agent_tool_v2_requires_task_name_and_lists_visible_models() { assert!(description.contains("The spawned agent will have the same tools as you")); assert!(!description.contains("max_concurrent_threads_per_session")); assert!(description.contains(SPAWN_AGENT_INHERITED_MODEL_GUIDANCE)); - assert!( - description - .contains("Available model overrides (optional; inherited parent model is preferred):") - ); - assert!(description.contains( - "- `visible-model`: visible description Reasoning efforts: medium (default). Service tiers: priority." - )); - assert!(description.contains( - "- `legacy-model`: legacy description Reasoning efforts: medium (default). Service tiers: priority." - )); - assert!(!description.contains("hidden-model")); - assert!(!description.contains("disabled-model")); assert!(properties.contains_key("task_name")); assert!(properties.contains_key("message")); assert_eq!( @@ -133,10 +76,8 @@ fn spawn_agent_tool_v2_requires_task_name_and_lists_visible_models() { #[test] fn spawn_agent_catalog_description_preserves_generated_context() { let options = SpawnAgentToolOptions { - available_models: vec![model_preset("visible", /*show_in_picker*/ true)], agent_type_description: "Available agent roles: explorer".to_string(), expose_spawn_agent_model_overrides: true, - multi_agent_version: MultiAgentVersion::V2, usage_hint_text: Some("Local usage hint.".to_string()), ..Default::default() }; @@ -155,7 +96,6 @@ fn spawn_agent_catalog_description_preserves_generated_context() { .description .contains("Catalog spawning guidance.") ); - assert!(configured_tool.description.contains("`visible-model`")); assert!( configured_tool .description @@ -174,13 +114,12 @@ fn spawn_agent_catalog_description_preserves_generated_context() { #[test] fn spawn_agent_tool_v1_keeps_legacy_fork_context_field() { let tool = create_spawn_agent_tool_v1(SpawnAgentToolOptions { - available_models: Vec::new(), agent_type_description: "role help".to_string(), expose_agent_type: true, hide_agent_type_model_reasoning: false, expose_spawn_agent_model_overrides: true, - multi_agent_version: MultiAgentVersion::V1, usage_hint_text: None, + ..Default::default() }); let ToolSpec::Namespace(namespace) = tool else { @@ -224,73 +163,16 @@ fn spawn_agent_tool_v1_keeps_legacy_fork_context_field() { assert!(!properties.contains_key("service_tier")); } -#[test] -fn spawn_agent_tool_caps_visible_model_summaries() { - let tool = create_spawn_agent_tool_v2( - SpawnAgentToolOptions { - available_models: vec![ - model_preset("first", /*show_in_picker*/ true), - model_preset("second", /*show_in_picker*/ true), - model_preset("third", /*show_in_picker*/ true), - model_preset("fourth", /*show_in_picker*/ true), - model_preset("fifth", /*show_in_picker*/ true), - model_preset("sixth", /*show_in_picker*/ true), - ], - agent_type_description: "role help".to_string(), - expose_agent_type: true, - hide_agent_type_model_reasoning: false, - expose_spawn_agent_model_overrides: true, - multi_agent_version: MultiAgentVersion::V2, - usage_hint_text: None, - }, - /*description_override*/ None, - ); - - let ToolSpec::Function(ResponsesApiTool { description, .. }) = tool else { - panic!("spawn_agent should be a function tool"); - }; - - for model in ["first", "second", "third", "fourth", "fifth"] { - assert!( - description.contains(&format!("`{model}-model`")), - "expected {model} model summary in spawn_agent description: {description:?}" - ); - } - assert!(!description.contains("`sixth-model`")); -} - -#[test] -fn spawn_agent_tool_caps_reasoning_effort_value_length() { - let mut model = model_preset("visible", /*show_in_picker*/ true); - let custom_effort = ReasoningEffort::Custom( - "é".repeat(MAX_REASONING_EFFORT_CHARS_IN_SPAWN_AGENT_DESCRIPTION + 1), - ); - model.default_reasoning_effort = custom_effort.clone(); - model.supported_reasoning_efforts = vec![ReasoningEffortPreset { - effort: custom_effort, - description: "Model-defined".to_string(), - }]; - - assert_eq!( - spawn_agent_models_description(&[model], MultiAgentVersion::V2), - format!( - "Available model overrides (optional; inherited parent model is preferred):\n- `visible-model`: visible description Reasoning efforts: {} (default). Service tiers: priority.", - "é".repeat(MAX_REASONING_EFFORT_CHARS_IN_SPAWN_AGENT_DESCRIPTION) - ) - ); -} - #[test] fn spawn_agent_tool_keeps_model_controls_when_spawn_metadata_is_hidden() { let tool = create_spawn_agent_tool_v2( SpawnAgentToolOptions { - available_models: vec![model_preset("visible", /*show_in_picker*/ true)], agent_type_description: "role help".to_string(), expose_agent_type: false, hide_agent_type_model_reasoning: true, expose_spawn_agent_model_overrides: true, - multi_agent_version: MultiAgentVersion::V2, usage_hint_text: None, + ..Default::default() }, /*description_override*/ None, ); @@ -313,20 +195,18 @@ fn spawn_agent_tool_keeps_model_controls_when_spawn_metadata_is_hidden() { assert!(properties.contains_key("reasoning_effort")); assert!(!properties.contains_key("service_tier")); assert!(!description.contains(SPAWN_AGENT_INHERITED_MODEL_GUIDANCE)); - assert!(description.contains("Available model overrides")); } #[test] fn spawn_agent_tool_hides_model_controls_without_override_exposure() { let tool = create_spawn_agent_tool_v2( SpawnAgentToolOptions { - available_models: vec![model_preset("visible", /*show_in_picker*/ true)], agent_type_description: "role help".to_string(), expose_agent_type: false, hide_agent_type_model_reasoning: true, expose_spawn_agent_model_overrides: false, - multi_agent_version: MultiAgentVersion::V2, usage_hint_text: None, + ..Default::default() }, Some(""), ); diff --git a/codex-rs/core/src/tools/router.rs b/codex-rs/core/src/tools/router.rs index d9f1f63eed9c..fbf0e773be5b 100644 --- a/codex-rs/core/src/tools/router.rs +++ b/codex-rs/core/src/tools/router.rs @@ -173,7 +173,7 @@ impl ToolRouter { } // Answers if the tool plan lets the model invoke the tool directly, through code mode, or deferred tool search. - pub(super) fn exposes_tool(&self, name: &ToolName) -> bool { + pub(crate) fn exposes_tool(&self, name: &ToolName) -> bool { let name = name.clone().with_default_namespace(); if self .code_mode_tool_names diff --git a/codex-rs/core/src/tools/spec_plan.rs b/codex-rs/core/src/tools/spec_plan.rs index bb1474feb528..379facebdc62 100644 --- a/codex-rs/core/src/tools/spec_plan.rs +++ b/codex-rs/core/src/tools/spec_plan.rs @@ -1320,6 +1320,11 @@ fn add_collaboration_tools(context: &CoreToolPlanContext<'_>, registry: &mut Too SpawnAgentHandlerV2::new( SpawnAgentToolOptions { available_models: turn_context.available_models.clone(), + multi_agent_version: turn_context.multi_agent_version, + model_catalog_in_context: turn_context + .config + .features + .enabled(Feature::ModelCatalogInContext), agent_type_description, expose_agent_type: !turn_context.config.agent_roles.is_empty(), hide_agent_type_model_reasoning: hide_spawn_agent_metadata, @@ -1327,7 +1332,6 @@ fn add_collaboration_tools(context: &CoreToolPlanContext<'_>, registry: &mut Too .config .multi_agent_v2 .expose_spawn_agent_model_overrides, - multi_agent_version: turn_context.multi_agent_version, usage_hint_text: turn_context .config .multi_agent_v2 @@ -1337,7 +1341,7 @@ fn add_collaboration_tools(context: &CoreToolPlanContext<'_>, registry: &mut Too spawn_agent_description.map(str::to_owned), ), tool_namespace, - // Spawn composes the selected description with runtime model and usage guidance. + // Spawn composes the selected description with inheritance and usage guidance. /*description_override*/ None, model_messages.multi_agent_tool_parameters_override("spawn_agent"), @@ -1404,11 +1408,15 @@ fn add_collaboration_tools(context: &CoreToolPlanContext<'_>, registry: &mut Too registry.add_with_exposure( SpawnAgentHandler::new(SpawnAgentToolOptions { available_models: turn_context.available_models.clone(), + multi_agent_version: turn_context.multi_agent_version, + model_catalog_in_context: turn_context + .config + .features + .enabled(Feature::ModelCatalogInContext), agent_type_description, expose_agent_type: !turn_context.config.agent_roles.is_empty(), hide_agent_type_model_reasoning: false, expose_spawn_agent_model_overrides: true, - multi_agent_version: turn_context.multi_agent_version, usage_hint_text: turn_context.config.multi_agent_v2.usage_hint_text.clone(), }), exposure, diff --git a/codex-rs/core/tests/common/context_snapshot/normalize.rs b/codex-rs/core/tests/common/context_snapshot/normalize.rs index b9d82891ff1a..a4da82ad46dc 100644 --- a/codex-rs/core/tests/common/context_snapshot/normalize.rs +++ b/codex-rs/core/tests/common/context_snapshot/normalize.rs @@ -330,6 +330,7 @@ fn known_segment_name(text: &str, source: TextSource<'_>) -> Option { | "collaboration_mode" | "multi_agent_role" | "multi_agent_mode" + | "model_catalog" | "apps_instructions" | "skills_instructions" | "plugins_instructions" diff --git a/codex-rs/core/tests/suite/scenarios.rs b/codex-rs/core/tests/suite/scenarios.rs index 9f2e33dbfbb0..6c143ee22694 100644 --- a/codex-rs/core/tests/suite/scenarios.rs +++ b/codex-rs/core/tests/suite/scenarios.rs @@ -44,6 +44,8 @@ use codex_protocol::openai_models::ToolMessage; use codex_protocol::openai_models::ToolMode; use codex_protocol::protocol::EnvironmentConfigState; use codex_protocol::protocol::EventMsg; +#[cfg(not(target_os = "windows"))] +use codex_protocol::protocol::MultiAgentVersion; use codex_protocol::protocol::Op; use codex_protocol::protocol::TurnSettingsUpdate; use codex_protocol::protocol::TurnSettingsUpdateOutcome; @@ -1671,3 +1673,19 @@ async fn app_tool_exposure_request_history() -> Result<()> { ); Ok(()) } + +#[cfg(not(target_os = "windows"))] +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn model_catalog_refresh_preserves_tools_and_history() -> Result<()> { + let requests = super::spawn_agent_description::model_catalog_refresh_requests( + MultiAgentVersion::V1, + /*model_catalog_in_context*/ true, + ) + .await?; + insta::assert_snapshot!(context_snapshot::format_request_history_snapshot( + "Catalog refreshes append the updated listing once while preserving tools and prior input.", + &requests, + &ContextSnapshotOptions::default().include_request_settings(), + )); + Ok(()) +} diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__scenarios__model_catalog_refresh_preserves_tools_and_history.snap b/codex-rs/core/tests/suite/snapshots/all__suite__scenarios__model_catalog_refresh_preserves_tools_and_history.snap new file mode 100644 index 000000000000..682d909fb2e1 --- /dev/null +++ b/codex-rs/core/tests/suite/snapshots/all__suite__scenarios__model_catalog_refresh_preserves_tools_and_history.snap @@ -0,0 +1,50 @@ +--- +source: core/tests/suite/scenarios.rs +expression: "context_snapshot::format_request_history_snapshot(\"Catalog refreshes append the updated listing once while preserving tools and prior input.\",\n&requests, &ContextSnapshotOptions::default().include_request_settings(),)" +--- +Scenario: Catalog refreshes append the updated listing once while preserving tools and prior input. + +## Window 1 +Settings: + include: ["reasoning.encrypted_content"] + instructions: Test model instructions. + model: "visible-model" + parallel_tool_calls: true + prompt_cache_key: "" + reasoning: {"effort":"medium","summary":"auto"} + store: false + stream: true + tool_choice: "auto" + tools (6; hash=1ea0fa9abde186d4): + - function/exec_command: Runs a command in a PTY, returning output or a session ID for ongoing interaction.; args=[cmd, justification, login, max_output_tokens, prefix_rule, sandbox_permissions, shell, tty, workdir, yield_time_ms]; hash=c04108e51a8548c5 + - function/write_stdin: Writes characters to an existing unified exec session and returns recent output.; args=[chars, max_output_tokens, session_id, yield_time_ms]; hash=7fb62d8a3e2df4e2 + - function/request_user_input: Request user input for one to three short questions and wait for the response. This tool is only ...; args=[questions]; hash=64a729b25c424fc6 + - function/view_image: View a local image file from the filesystem when visual inspection is needed. Use this for images...; args=[path]; hash=1908de9c0be7118a + - namespace/multi_agent_v1: Tools for spawning and managing sub-agents.; hash=94c598b3c6ca141b + - function/close_agent + - function/resume_agent + - function/send_input + - function/spawn_agent + - function/wait_agent + - web_search; hash=8586237e354ee5ed +-- request 1 (turn) -- +00:message/developer[2]: + [01] + Filesystem sandboxing defines which files can be read or written. `sandbox_mode` is `danger-full-access`...ll commands are permitted. Network access is enabled. [hash=c134061cebb94a1b] + Approval policy is currently never. Do not provide the `sandbox_permissions` for any reason, commands will be rejected. + + [02] + - `visible-model`: Fast and capable Reasoning efforts: low, medium (default), high. Service tiers: priority. + +01:message/user: + hello +-- request 2 (turn) -- +02:message/developer: + + - `visible-model`: Updated picker copy Reasoning efforts: low, medium (default), high. Service tiers: priority. + +03:message/user: + after catalog refresh +-- request 3 (turn) -- +04:message/user: + without another catalog change diff --git a/codex-rs/core/tests/suite/spawn_agent_description.rs b/codex-rs/core/tests/suite/spawn_agent_description.rs index bc0eaf75806e..68bef0e2eae3 100644 --- a/codex-rs/core/tests/suite/spawn_agent_description.rs +++ b/codex-rs/core/tests/suite/spawn_agent_description.rs @@ -20,6 +20,7 @@ use codex_protocol::openai_models::ReasoningEffortPreset; use codex_protocol::openai_models::TruncationPolicyConfig; use codex_protocol::openai_models::default_input_modalities; use codex_protocol::protocol::MULTI_AGENT_MODE_OPEN_TAG; +use codex_protocol::protocol::MultiAgentVersion; use core_test_support::responses::ResponsesRequest; use core_test_support::responses::ev_completed; use core_test_support::responses::ev_response_created; @@ -30,6 +31,7 @@ use core_test_support::responses::namespace_child_tool; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; use core_test_support::test_codex::test_codex; +use pretty_assertions::assert_eq; use serde_json::Value; use std::time::Duration; use std::time::Instant; @@ -40,8 +42,8 @@ const MULTI_AGENT_V1_NAMESPACE: &str = "multi_agent_v1"; const MULTI_AGENT_V2_NAMESPACE: &str = "collaboration"; const SPAWN_AGENT_TOOL_NAME: &str = "spawn_agent"; -fn spawn_agent_description(body: &Value) -> Option { - namespace_child_tool(body, MULTI_AGENT_V1_NAMESPACE, SPAWN_AGENT_TOOL_NAME) +fn spawn_agent_description(body: &Value, namespace: &str) -> Option { + namespace_child_tool(body, namespace, SPAWN_AGENT_TOOL_NAME) .and_then(|tool| tool.get("description")) .and_then(Value::as_str) .map(str::to_string) @@ -148,8 +150,23 @@ async fn wait_for_model_available(manager: &SharedModelsManager, slug: &str) { } } +#[test_case(MultiAgentVersion::V1, false; "v1_default")] +#[test_case(MultiAgentVersion::V2, false; "v2_default")] +#[test_case(MultiAgentVersion::V2, true; "v2_context")] #[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn spawn_agent_description_lists_visible_models_and_reasoning_efforts() -> Result<()> { +async fn model_catalog_flag_controls_refresh( + multi_agent_version: MultiAgentVersion, + model_catalog_in_context: bool, +) -> Result<()> { + // The V1 opt-in case also snapshots the full request history in scenarios.rs. + model_catalog_refresh_requests(multi_agent_version, model_catalog_in_context).await?; + Ok(()) +} + +pub(super) async fn model_catalog_refresh_requests( + multi_agent_version: MultiAgentVersion, + model_catalog_in_context: bool, +) -> Result> { let server = start_mock_server().await; mount_models_once( &server, @@ -206,30 +223,64 @@ async fn spawn_agent_description_lists_visible_models_and_reasoning_efforts() -> let mut builder = test_codex() .with_auth(CodexAuth::create_dummy_chatgpt_auth_for_testing()) .with_model("visible-model") - .with_config(|config| { + .with_config(move |config| { config .features .enable(Feature::Collab) .expect("test config should allow feature update"); + config + .features + .set_enabled( + Feature::MultiAgentV2, + multi_agent_version == MultiAgentVersion::V2, + ) + .expect("set multi-agent version"); + if model_catalog_in_context { + config + .features + .enable(Feature::ModelCatalogInContext) + .expect("enable context catalogs"); + } config.multi_agent_v2.hide_spawn_agent_metadata = false; + config.base_instructions = Some("Test model instructions.".to_string()); + config.include_environment_context = false; }); - let test = builder.build(&server).await?; + let test = builder.build_with_auto_env(&server).await?; wait_for_model_available(&test.thread_manager.get_models_manager(), "visible-model").await; test.submit_turn("hello").await?; - let body = resp_mock.single_request().body_json(); - let description = - spawn_agent_description(&body).expect("spawn_agent description should be present"); + let request = resp_mock.single_request(); + let body = request.body_json(); + let namespace = match multi_agent_version { + MultiAgentVersion::V1 => MULTI_AGENT_V1_NAMESPACE, + MultiAgentVersion::V2 => MULTI_AGENT_V2_NAMESPACE, + MultiAgentVersion::Disabled => unreachable!("this scenario requires spawning"), + }; + let description = spawn_agent_description(&body, namespace) + .expect("spawn_agent description should be present"); + let catalog = request.message_input_texts("developer").join("\n"); + let listing = if model_catalog_in_context { + &catalog + } else { + &description + }; assert!( - description.contains("- `visible-model`: Fast and capable"), - "expected visible model summary in spawn_agent description: {description:?}" + listing.contains("- `visible-model`: Fast and capable"), + "expected visible model summary in model catalog: {catalog:?}" ); - assert!( - description - .contains("Available model overrides (optional; inherited parent model is preferred):"), - "expected model choices to be framed as overrides in spawn_agent description: {description:?}" + assert_eq!( + description.contains("Pick model overrides from the latest listing."), + model_catalog_in_context + ); + assert_eq!( + catalog.contains(""), + model_catalog_in_context + ); + assert_eq!( + description.contains("- `visible-model`: Fast and capable"), + !model_catalog_in_context ); assert!( description.contains( @@ -237,48 +288,106 @@ async fn spawn_agent_description_lists_visible_models_and_reasoning_efforts() -> ), "expected inherited-model guidance in spawn_agent description: {description:?}" ); - assert!( + if multi_agent_version == MultiAgentVersion::V1 { + assert!( description.contains( "Do not set the `model` field unless the user explicitly asks for a different model." ), "expected model override usage guidance in spawn_agent description: {description:?}" ); + } assert!( - description.contains("Reasoning efforts: low, medium (default), high."), - "expected default reasoning effort in spawn_agent description: {description:?}" + listing.contains("Reasoning efforts: low, medium (default), high."), + "expected default reasoning effort in model catalog: {catalog:?}" ); assert!( - description.contains("Service tiers: priority."), - "expected service tier guidance in spawn_agent description: {description:?}" + listing.contains("Service tiers: priority."), + "expected service tier guidance in model catalog: {catalog:?}" ); assert!( - !description.contains("hidden-model"), - "hidden picker model should be omitted from spawn_agent description: {description:?}" + !listing.contains("hidden-model"), + "hidden picker model should be omitted from model catalog: {catalog:?}" ); - assert!( + if multi_agent_version == MultiAgentVersion::V1 { + assert!( description.contains( "Do not spawn sub-agents unless the user or applicable AGENTS.md/skill instructions explicitly ask for sub-agents, delegation, or parallel agent work." ), "expected explicit authorization rule in spawn_agent description: {description:?}" ); - assert!( + assert!( description.contains( "Requests for depth, thoroughness, research, investigation, or detailed codebase analysis do not count as permission to spawn." ) && description.contains("### When to delegate vs. do the subtask yourself"), "expected delegation decision guidance in spawn_agent description: {description:?}" ); - assert!( - description.contains( - "Agent-role guidance below only helps choose which agent to use after spawning is already authorized; it never authorizes spawning by itself." - ), - "expected agent-role clarification in spawn_agent description: {description:?}" - ); - assert!( - !description.contains("A mini model can solve many tasks faster than the main model."), - "spawn_agent description should not encourage choosing a smaller model by default: {description:?}" - ); + assert!( + !description.contains("A mini model can solve many tasks faster than the main model."), + "spawn_agent description should not encourage choosing a smaller model by default: {description:?}" + ); + } - Ok(()) + // Only the opt-in path keeps the tool schema stable across a catalog refresh. + let manager = test.thread_manager.get_models_manager(); + let mut refreshed = manager + .raw_model_catalog(RefreshStrategy::Offline, test.config.http_client_factory()) + .await; + refreshed + .models + .iter_mut() + .find(|model| model.slug == "visible-model") + .expect("visible model") + .description = Some("Updated picker copy".to_string()); + mount_models_once(&server, refreshed.clone()).await; + assert_eq!( + manager + .raw_model_catalog(RefreshStrategy::Online, test.config.http_client_factory()) + .await + .models, + refreshed.models + ); + let expected_catalogs = request + .message_input_texts("developer") + .into_iter() + .filter(|text| text.starts_with("")) + .flat_map(|catalog| { + [ + catalog.clone(), + catalog.replace("Fast and capable", "Updated picker copy"), + ] + }) + .collect::>(); + let mut requests = vec![request]; + for turn in ["after catalog refresh", "without another catalog change"] { + let response = mount_sse_once(&server, sse(vec![ev_completed(turn)])).await; + test.submit_turn(turn).await?; + let current = response.single_request(); + if model_catalog_in_context { + assert_eq!(current.body_json()["tools"], body["tools"]); + } else { + let expected_tools = serde_json::to_string(&body["tools"])? + .replace("Fast and capable", "Updated picker copy"); + assert_eq!( + current.body_json()["tools"], + serde_json::from_str::(&expected_tools)? + ); + } + assert!( + current + .input() + .starts_with(&requests.last().unwrap().input()) + ); + assert_eq!( + current + .message_input_texts("developer") + .into_iter() + .filter(|text| text.starts_with("")) + .collect::>(), + expected_catalogs, + ); + requests.push(current); + } + Ok(requests) } #[test_case(false, false, MULTI_AGENT_V1_NAMESPACE; "v1 hides agent type without roles")] diff --git a/codex-rs/features/src/lib.rs b/codex-rs/features/src/lib.rs index 7f61ef3aee9a..a42a4b5db2e6 100644 --- a/codex-rs/features/src/lib.rs +++ b/codex-rs/features/src/lib.rs @@ -211,6 +211,8 @@ pub enum Feature { Collab, /// Enable task-path-based multi-agent routing. MultiAgentV2, + /// Keep spawn model choices in append-only context instead of tool descriptions. + ModelCatalogInContext, /// Keep sampling through reasoning and commentary boundaries when agent mail arrives. /// Pending mail is delivered at the next normal input boundary instead. DeferMailboxPreemption, @@ -1360,6 +1362,12 @@ pub const FEATURES: &[FeatureSpec] = &[ stage: Stage::Stable, default_enabled: false, }, + FeatureSpec { + id: Feature::ModelCatalogInContext, + key: "model_catalog_in_context", + stage: Stage::UnderDevelopment, + default_enabled: false, + }, FeatureSpec { id: Feature::DeferMailboxPreemption, key: "defer_mailbox_preemption", From 0b43721d8d1f734658e41bffe12a6ba6c9240abd Mon Sep 17 00:00:00 2001 From: Felipe Coury Date: Wed, 30 Sep 2026 10:11:19 +0000 Subject: [PATCH 2/8] Copy selected file paths as plain text in the TUI (#49564) ## Why Copying a rendered local file target such as `repo/foo_bar!` should preserve the selected path without adding Markdown escapes. ## What changed Treat selections contained within rendered file targets as plain text, including partial selections and targets in tables. Coalesce adjacent file targets and inline code into literal ranges while preserving Markdown escaping when the selection includes surrounding content. ## Testing Add regression coverage for partial paths, adjacent literal spans, styled links, table cells, special characters, and mixed selections at narrow and wide rendering widths. GitOrigin-RevId: 94bcdacf14b013f9198cb84adfdb237eb644dd48 --- codex-rs/tui/src/markdown_copy.rs | 34 +++++++++++++----- codex-rs/tui/src/markdown_copy/table.rs | 2 +- codex-rs/tui/src/markdown_render.rs | 4 +++ .../transcript_view/markdown_copy_tests.rs | 36 +++++++++++++++++++ ...election_copies_only_selected_content.snap | 18 ++++++++++ 5 files changed, 85 insertions(+), 9 deletions(-) diff --git a/codex-rs/tui/src/markdown_copy.rs b/codex-rs/tui/src/markdown_copy.rs index d2513211a828..ebc933a76b9f 100644 --- a/codex-rs/tui/src/markdown_copy.rs +++ b/codex-rs/tui/src/markdown_copy.rs @@ -26,6 +26,8 @@ pub(crate) enum Inline { Link(Arc), Delimiter(&'static str), Code, + /// Copy a generated file target literally without changing mixed-selection Markdown. + Literal, /// Balance parser events for links whose visible text has no copied wrapper. Ignored, } @@ -66,6 +68,7 @@ pub(crate) struct CopyLine { /// A visual separator inserted between sibling list items, never source content. pub(crate) omit: bool, runs: Vec<(Range, Vec)>, + literal_ranges: Vec>, } impl CopyLine { @@ -73,9 +76,13 @@ impl CopyLine { if length == 0 { return; } - let mut inline = inline[..inline.len().min(MAX_COPY_DEPTH)] + let inline = &inline[..inline.len().min(MAX_COPY_DEPTH)]; + let literal = inline .iter() - .filter(|mark| **mark != Inline::Ignored) + .any(|mark| matches!(mark, Inline::Code | Inline::Literal)); + let mut inline = inline + .iter() + .filter(|mark| !matches!(mark, Inline::Ignored | Inline::Literal)) .cloned() .collect::>(); inline.sort(); @@ -84,6 +91,16 @@ impl CopyLine { .runs .last() .map_or(/*default*/ 0, |(range, _)| range.end); + // Keep literal spans separate so they never split context-sensitive prose escaping. + if literal { + if let Some(range) = self.literal_ranges.last_mut() + && range.end == start + { + range.end += length; + } else { + self.literal_ranges.push(start..start + length); + } + } if let Some((range, previous)) = self.runs.last_mut() && previous == &inline { @@ -93,11 +110,12 @@ impl CopyLine { } } - fn is_inline_code(&self, range: &Range) -> bool { + fn is_literal(&self, range: &Range) -> bool { !range.is_empty() - && self.runs.iter().any(|(run, inline)| { - run.start <= range.start && range.end <= run.end && inline.contains(&Inline::Code) - }) + && self + .literal_ranges + .iter() + .any(|literal| literal.start <= range.start && range.end <= literal.end) } fn render(&self, text: &str, range: Range, depth: usize) -> String { @@ -172,7 +190,7 @@ impl CopyLine { .replace('\r', "%0D"); append_inline(&mut out, &format!("[{trimmed}](<{destination}>)")); } - Inline::Code | Inline::Ignored => unreachable!(), + Inline::Code | Inline::Literal | Inline::Ignored => unreachable!(), } out.push_str(&body[body.trim_end().len()..]); } @@ -267,7 +285,7 @@ pub(crate) fn selection(lines: &[SelectedLine], plain: &str) -> (String, CopyFor .source .copy .as_ref() - .is_some_and(|copy| copy.is_inline_code(&line.range)) + .is_some_and(|copy| copy.is_literal(&line.range)) { return (plain.to_owned(), CopyFormat::PlainText); } diff --git a/codex-rs/tui/src/markdown_copy/table.rs b/codex-rs/tui/src/markdown_copy/table.rs index affc6dcbfd24..54ff6d11b851 100644 --- a/codex-rs/tui/src/markdown_copy/table.rs +++ b/codex-rs/tui/src/markdown_copy/table.rs @@ -167,7 +167,7 @@ pub(super) fn render( && source .copy .as_ref() - .is_some_and(|copy| copy.is_inline_code(&source.range)) + .is_some_and(|copy| copy.is_literal(&source.range)) { return ( source.text[source.range.clone()].to_owned(), diff --git a/codex-rs/tui/src/markdown_render.rs b/codex-rs/tui/src/markdown_render.rs index c5033f8045b8..e07cb5686854 100644 --- a/codex-rs/tui/src/markdown_render.rs +++ b/codex-rs/tui/src/markdown_render.rs @@ -2211,7 +2211,9 @@ impl<'a, 'policy> Writer<'a, 'policy> { } self.push_span_to_table_cell(" (".into()); } + self.copy_inline.push(crate::markdown_copy::Inline::Literal); self.push_span_to_table_cell(span); + self.copy_inline.pop(); if show_label { self.push_span_to_table_cell(")".into()); } @@ -2231,7 +2233,9 @@ impl<'a, 'policy> Writer<'a, 'policy> { } self.push_span(" (".into()); } + self.copy_inline.push(crate::markdown_copy::Inline::Literal); self.push_span(span); + self.copy_inline.pop(); if show_label { self.push_span(")".into()); } diff --git a/codex-rs/tui/src/transcript_view/markdown_copy_tests.rs b/codex-rs/tui/src/transcript_view/markdown_copy_tests.rs index 6d7d5304a0f9..9c965bae0257 100644 --- a/codex-rs/tui/src/transcript_view/markdown_copy_tests.rs +++ b/codex-rs/tui/src/transcript_view/markdown_copy_tests.rs @@ -128,6 +128,23 @@ fn inline_code_selection_copies_only_selected_content() { ("before ``a`b`` after", "a`"), ("- **`café界_*`**", "café界_*"), ("before ` leading and trailing ` after", " leading"), + (r"before ``real\_literal\!`` after", r"real\_literal\!"), + ("before [`foo_bar!`](/repo/foo_bar!) after", "repo/foo_bar!"), + ("before [`foo_bar!`](/repo/foo_bar!) after", "bar!"), + ( + "[foo_bar!](/foo_bar!)[baz_qux!](/baz_qux!)", + "foo_bar!baz_qux!", + ), + ("`foo_bar!`[baz_qux!](/baz_qux!)", "foo_bar!baz_qux!"), + ("before **[file](/repo/foo_bar!)** after", "foo_bar!"), + ( + "| File |\n|---|\n| [`foo_bar!`](/repo/foo_bar!) |", + "foo_bar!", + ), + ( + "before [file]() after", + "repo/`*_[]<>~#|&!=-+.)", + ), ] { for width in [18, 80] { let layout = markdown_layout(source, width); @@ -146,6 +163,25 @@ fn inline_code_selection_copies_only_selected_content() { insta::assert_snapshot!(copies.join("\n")); } +#[test] +fn mixed_file_targets_preserve_markdown_escaping() { + for (source, expected) in [ + ("before [+](/+) after", "before + after"), + ("before [1.)]() after", "before 1.) after"), + ( + "| File |\n|---|\n| [`foo_bar!`](/repo/foo_bar!) |", + "| File |\n|---|\n| repo/foo\\_bar\\! |", + ), + ] { + let layout = markdown_layout(source, /*width*/ 80); + assert_eq!( + payload(&layout, 0..layout.text().len()), + (expected.into(), CopyFormat::Markdown), + "{source}" + ); + } +} + #[test] fn inline_boundaries_preserve_selected_text_and_formatting() { let mut copies = Vec::new(); diff --git a/codex-rs/tui/src/transcript_view/snapshots/codex_tui__transcript_view__markdown_copy_tests__inline_code_selection_copies_only_selected_content.snap b/codex-rs/tui/src/transcript_view/snapshots/codex_tui__transcript_view__markdown_copy_tests__inline_code_selection_copies_only_selected_content.snap index 9feeaa9dd6f8..8c2c1a888644 100644 --- a/codex-rs/tui/src/transcript_view/snapshots/codex_tui__transcript_view__markdown_copy_tests__inline_code_selection_copies_only_selected_content.snap +++ b/codex-rs/tui/src/transcript_view/snapshots/codex_tui__transcript_view__markdown_copy_tests__inline_code_selection_copies_only_selected_content.snap @@ -16,3 +16,21 @@ Selected "a`" → ("a`", PlainText) Selected "café界_*" → ("café界_*", PlainText) before ` leading and trailing ` after Selected " leading" → (" leading", PlainText) +before ``real\_literal\!`` after +Selected "real\\_literal\\!" → ("real\\_literal\\!", PlainText) +before [`foo_bar!`](/repo/foo_bar!) after +Selected "repo/foo_bar!" → ("repo/foo_bar!", PlainText) +before [`foo_bar!`](/repo/foo_bar!) after +Selected "bar!" → ("bar!", PlainText) +[foo_bar!](/foo_bar!)[baz_qux!](/baz_qux!) +Selected "foo_bar!baz_qux!" → ("foo_bar!baz_qux!", PlainText) +`foo_bar!`[baz_qux!](/baz_qux!) +Selected "foo_bar!baz_qux!" → ("foo_bar!baz_qux!", PlainText) +before **[file](/repo/foo_bar!)** after +Selected "foo_bar!" → ("foo_bar!", PlainText) +| File | +|---| +| [`foo_bar!`](/repo/foo_bar!) | +Selected "foo_bar!" → ("foo_bar!", PlainText) +before [file]() after +Selected "repo/`*_[]<>~#|&!=-+.)" → ("repo/`*_[]<>~#|&!=-+.)", PlainText) From a5cce8895a1400f94eb0a71771275284027fff17 Mon Sep 17 00:00:00 2001 From: jif Date: Wed, 30 Sep 2026 10:54:49 +0000 Subject: [PATCH 3/8] Skip host skill discovery for Guardian reviews (#49584) ## Why Guardian does not consume skills, but host skill discovery can block its startup or turn creation when the primary executor is offline. ## What changed Skip plugin and skill warmup during Guardian session initialization, and use an empty host skills snapshot when building Guardian turn contexts. ## Testing Add a regression test that discovers skills for the parent session, disconnects its primary executor, and verifies that Guardian still reviews and denies a network permission request. GitOrigin-RevId: 3c12129721c82cb78a3fa618d6b05faea631966a --- codex-rs/core/src/session/session.rs | 6 + codex-rs/core/src/session/turn_context.rs | 1 + .../suite/guardian_environments_tests.rs | 168 ++++++++++++++++++ codex-rs/core/tests/suite/remote_env.rs | 53 +++++- 4 files changed, 221 insertions(+), 7 deletions(-) diff --git a/codex-rs/core/src/session/session.rs b/codex-rs/core/src/session/session.rs index e92aaeef8ae5..68a9fef1c0e8 100644 --- a/codex-rs/core/src/session/session.rs +++ b/codex-rs/core/src/session/session.rs @@ -619,7 +619,12 @@ async fn warm_plugins_and_skills_for_session_init( skills_service: Arc, turn_environments: &TurnEnvironmentSnapshot, extensions: &codex_extension_api::ExtensionRegistry, + session_source: &SessionSource, ) -> Vec { + // Guardian does not consume skills, including the legacy empty-registry catalog. + if crate::guardian::is_basic_session_source(session_source) { + return Vec::new(); + } let plugins_input = config.plugins_config_input(); let plugin_outcome = plugins_manager.plugins_for_config(&plugins_input).await; if config.features.enabled(Feature::SkipHostSkillDiscovery) @@ -1450,6 +1455,7 @@ impl Session { Arc::clone(&skills_service), &resolved_environments, extensions.as_ref(), + &session_configuration.session_source, ) .instrument(info_span!( "session_init.plugin_skill_warmup", diff --git a/codex-rs/core/src/session/turn_context.rs b/codex-rs/core/src/session/turn_context.rs index 0d7b59d77ea6..777da7411bbe 100644 --- a/codex-rs/core/src/session/turn_context.rs +++ b/codex-rs/core/src/session/turn_context.rs @@ -1205,6 +1205,7 @@ impl Session { per_turn_config.codex_home.as_path(), ); let skills_snapshot = if matches!(build_mode, TurnContextBuildMode::InjectItems) + || crate::guardian::is_basic_session_source(&session_configuration.session_source) || (per_turn_config .features .enabled(Feature::SkipHostSkillDiscovery) diff --git a/codex-rs/core/tests/suite/guardian_environments_tests.rs b/codex-rs/core/tests/suite/guardian_environments_tests.rs index 2fceca3f12cb..452387a53e43 100644 --- a/codex-rs/core/tests/suite/guardian_environments_tests.rs +++ b/codex-rs/core/tests/suite/guardian_environments_tests.rs @@ -291,6 +291,174 @@ async fn guardian_reviews_target_environment_and_reuses_prefix(tool: &str) -> Re Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn guardian_reviews_with_offline_primary_executor() -> Result<()> { + skip_if_no_network!(Ok(())); + let listener = TcpListener::bind("127.0.0.1:0").await?; + let executor_url = format!("ws://{}", listener.local_addr()?); + let (attach, connection) = tokio::sync::oneshot::channel(); + let (disconnect, stop) = tokio::sync::oneshot::channel(); + let executor = AbortOnDropHandle::new(tokio::spawn(serve_environment_with_instruction_files( + listener, + "", + Some( + "---\nname: guardian-fixture-skill\ndescription: Source executor skill catalog entry.\n---\nUse the source skill.\n", + ), + connection, + stop, + ))); + attach.send(()).expect("attach primary executor"); + + let environment_id = "guardian-primary"; + let (request_permission, pending_permission) = tokio::sync::oneshot::channel(); + let (model, _) = start_streaming_sse_server(vec![ + vec![StreamingSseChunk { + gate: Some(pending_permission), + body: sse(vec![ + ev_function_call( + "permission", + "request_permissions", + &json!({ + "environment_id": environment_id, + "permissions": {"network": {"enabled": true}}, + "reason": "Review permission while the executor is offline.", + }) + .to_string(), + ), + ev_completed("parent"), + ]), + }], + vec![StreamingSseChunk { + gate: None, + body: sse(vec![ + ev_assistant_message("deny", r#"{"outcome":"deny"}"#), + ev_completed("review"), + ]), + }], + vec![StreamingSseChunk { + gate: None, + body: sse(vec![ev_completed("done")]), + }], + ]) + .await; + + let mut extensions = ExtensionRegistryBuilder::::new(); + codex_skills_extension::install(&mut extensions, |config: &Config| { + codex_skills_extension::SkillsExtensionConfig { + include_instructions: config.include_skill_instructions, + max_context_tokens: config.skill_max_context_tokens, + bundled_skills_enabled: false, + cloud_skill_enabled: false, + shadow_selection_enabled: false, + } + }); + let test = test_codex() + .with_extensions(Arc::new(extensions.build())) + .with_model_info_override("guardian-offline-skills-parent", |info| { + info.guardian = None; + info.auto_review_model_override = Some(info.slug.clone()); + }) + .with_config(|config| { + // Isolate skill discovery from the unchanged repository-instruction discovery path. + config.project_doc_max_bytes = 0; + config.permissions.approval_policy = Constrained::allow_any(AskForApproval::OnRequest); + // Start the reviewer only after the executor goes offline, not during prewarm. + config.approvals_reviewer = ApprovalsReviewer::User; + config + .permissions + .set_permission_profile(PermissionProfile::read_only()) + .expect("set read-only permissions"); + config + .features + .enable(Feature::RequestPermissionsTool) + .expect("enable permission requests"); + config + .features + .disable(Feature::SkipHostSkillDiscovery) + .expect("keep host skill discovery enabled for the parent"); + config + .features + .disable(Feature::DeferredExecutor) + .expect("disable deferred executor"); + }) + // This test supplies its own executor mock, using host-native paths. + .build_with_streaming_server(&model) + .await?; + let manager = test.thread_manager.environment_manager(); + manager.upsert_environment( + environment_id.to_owned(), + executor_url, + /*connect_timeout*/ None, + )?; + manager + .get_environment(environment_id) + .context("primary executor")? + .wait_until_ready() + .await?; + let mut primary = test.executor_environment().selection().clone(); + primary.environment_id = environment_id.to_owned(); + primary.config = + EnvironmentConfigState::Ready(environment_config_for_selection(&test.config, &primary)); + + test.codex + .start_or_steer_turn( + TurnInputRequest::user_input(vec![UserInput::Text { + text: "Do not grant network permission.".to_owned(), + text_elements: Vec::new(), + }]) + .with_thread_settings(ThreadSettingsOverrides { + approvals_reviewer: Some(ApprovalsReviewer::AutoReview), + environments: Some(TurnEnvironmentSelections::new( + test.config.cwd.clone(), + vec![primary], + )), + ..Default::default() + }), + ) + .await?; + timeout( + Duration::from_secs(/*secs*/ 10), + model.wait_for_request_count(/*count*/ 1), + ) + .await + .context("parent must discover skills and reach the model while online")?; + disconnect.send(()).expect("disconnect primary executor"); + executor.await?; + request_permission.send(()).expect("request permission"); + + timeout( + Duration::from_secs(/*secs*/ 10), + model.wait_for_request_count(/*count*/ 2), + ) + .await + .context("Guardian startup and turn creation must not wait for host skill discovery")?; + let requests = model.requests().await; + let parent: Value = serde_json::from_slice(&requests[0])?; + let review: Value = serde_json::from_slice(&requests[1])?; + assert!( + parent["input"] + .to_string() + .contains("guardian-fixture-skill"), + "parent must advertise the skill discovered on its executor" + ); + assert_eq!( + review["client_metadata"]["x-openai-subagent"], + json!("guardian") + ); + wait_for_event(&test.codex, |event| { + matches!(event, EventMsg::GuardianAssessment(assessment) + if assessment.status == GuardianAssessmentStatus::Denied) + }) + .await; + wait_for_event(&test.codex, |event| { + matches!(event, EventMsg::TurnComplete(_)) + }) + .await; + test.codex.shutdown_and_wait().await?; + model.shutdown().await; + Ok(()) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn guardian_revalidates_allow_with_offline_secondary_executor() -> Result<()> { skip_if_no_network!(Ok(())); diff --git a/codex-rs/core/tests/suite/remote_env.rs b/codex-rs/core/tests/suite/remote_env.rs index 4b8c9192402b..622a031e5222 100644 --- a/codex-rs/core/tests/suite/remote_env.rs +++ b/codex-rs/core/tests/suite/remote_env.rs @@ -1446,6 +1446,19 @@ async fn serve_environment_with_agents_md( listener: TcpListener, contents: &str, attach: tokio::sync::oneshot::Receiver<()>, + shutdown: tokio::sync::oneshot::Receiver<()>, +) -> usize { + serve_environment_with_instruction_files( + listener, contents, /*skill*/ None, attach, shutdown, + ) + .await +} + +async fn serve_environment_with_instruction_files( + listener: TcpListener, + contents: &str, + skill: Option<&str>, + attach: tokio::sync::oneshot::Receiver<()>, mut shutdown: tokio::sync::oneshot::Receiver<()>, ) -> usize { let mut websocket = accept_initialized_exec_server(listener).await; @@ -1461,6 +1474,10 @@ async fn serve_environment_with_agents_md( let is_agents_md = request["params"]["path"] .as_str() .is_some_and(|path| path.ends_with("/AGENTS.md")); + let is_skill_root = skill.is_some() + && request["params"]["path"] + .as_str() + .is_some_and(|path| path.ends_with("/.agents/skills")); let response = match request["method"].as_str() { Some("environment/info") => json!({ "id": request["id"], @@ -1470,16 +1487,38 @@ async fn serve_environment_with_agents_md( "id": request["id"], "result": { "path": request["params"]["path"] } }), - Some("fs/walk") => json!({ - "id": request["id"], - "result": { "entries": [], "errors": [], "truncated": false } - }), - Some("fs/getMetadata") if is_agents_md => { + Some("fs/walk") => { + let root = request["params"]["path"].as_str().expect("walk root"); + let entries = if is_skill_root { + vec![json!({ + "path": format!("{root}/guardian-fixture-skill/SKILL.md"), + "kind": "file", + })] + } else { + Vec::new() + }; + json!({ + "id": request["id"], + "result": { "entries": entries, "errors": [], "truncated": false } + }) + } + Some("fs/readFile") + if skill.is_some() + && request["params"]["path"] + .as_str() + .is_some_and(|path| path.ends_with("/guardian-fixture-skill/SKILL.md")) => + { + json!({ + "id": request["id"], + "result": { "dataBase64": BASE64_STANDARD.encode(skill.expect("skill contents")) } + }) + } + Some("fs/getMetadata") if is_agents_md || is_skill_root => { json!({ "id": request["id"], "result": { - "isDirectory": false, - "isFile": true, + "isDirectory": is_skill_root, + "isFile": is_agents_md, "isSymlink": false, "size": contents.len(), "createdAtMs": 0, From 1fc8d548077fc72c4e3d048a78173af07385217f Mon Sep 17 00:00:00 2001 From: jif Date: Wed, 30 Sep 2026 11:34:35 +0000 Subject: [PATCH 4/8] Make the strict network approval test independent of request order (#49595) ## Why Guardian and parent requests can arrive in either order after a command yields. A shared response sequence can let parent requests consume Guardian review decisions. ## What changed Match Guardian responses separately and drive parent responses from the latest tool output in the strict automatic network review test. Poll running sessions with `write_stdin` until the process exits, and assert that the command and network request each receive Guardian review. GitOrigin-RevId: 21300abd65a3b2d439e8c1ea04e4429d5bd528dd --- codex-rs/core/tests/suite/network_approval.rs | 126 ++++++++++++------ 1 file changed, 85 insertions(+), 41 deletions(-) diff --git a/codex-rs/core/tests/suite/network_approval.rs b/codex-rs/core/tests/suite/network_approval.rs index 4546185ed409..5dc35601a1fe 100644 --- a/codex-rs/core/tests/suite/network_approval.rs +++ b/codex-rs/core/tests/suite/network_approval.rs @@ -299,54 +299,81 @@ async fn strict_auto_review_routes_network_approval_to_guardian_when_user_review }), ..Default::default() }; - let responses = mount_sse_sequence( - &server, - vec![ - sse(vec![ - ev_response_created("resp-strict-network-permissions"), - ev_function_call( + // Guardian and parent requests can arrive in either order after the command yields. + // Only Guardian requests may consume these decisions. + let mut guardian_responses = Vec::new(); + for response_id in ["strict-command-guardian", "strict-network-guardian"] { + guardian_responses.push( + mount_sse_once_match( + &server, + is_guardian_request, + sse(vec![ + ev_response_created(response_id), + ev_assistant_message( + response_id, + r#"{"risk_level":"low","user_authorization":"high","outcome":"allow","rationale":"The strict-review request is safe."}"#, + ), + ev_completed(response_id), + ]), + ) + .await, + ); + } + let _parent = wiremock::Mock::given(wiremock::matchers::method("POST")) + .and(wiremock::matchers::path("/v1/responses")) + .and(|request: &wiremock::Request| !is_guardian_request(request)) + .respond_with(move |request: &wiremock::Request| { + let body: Value = serde_json::from_slice( + &decoded_request_body(request).expect("decode parent request"), + ) + .expect("parse parent request"); + let input = body["input"].as_array().expect("parent input"); + let output = input + .iter() + .rev() + .find(|item| item["type"] == "function_call_output"); + let response_id = format!("strict-parent-{}", input.len()); + let event = match output { + None => ev_function_call( permission_call_id, "request_permissions", - &serde_json::to_string(&json!({ + &json!({ "reason": "Require automatic review for the rest of this turn", "permissions": requested_permissions, - }))?, + }) + .to_string(), ), - ev_completed("resp-strict-network-permissions"), - ]), - sse(vec![ - ev_response_created("resp-strict-network-command"), - ev_function_call( + Some(output) if output["call_id"] == permission_call_id => ev_function_call( network_call_id, "exec_command", - &serde_json::to_string(&network_fetch_args(LOCAL_ENVIRONMENT_ID))?, - ), - ev_completed("resp-strict-network-command"), - ]), - sse(vec![ - ev_response_created("resp-strict-command-guardian"), - ev_assistant_message( - "msg-strict-command-guardian", - r#"{"risk_level":"low","user_authorization":"high","outcome":"allow","rationale":"The strict-review command is safe."}"#, - ), - ev_completed("resp-strict-command-guardian"), - ]), - sse(vec![ - ev_response_created("resp-strict-network-guardian"), - ev_assistant_message( - "msg-strict-network-guardian", - r#"{"risk_level":"low","user_authorization":"high","outcome":"allow","rationale":"The strict-review network request is safe."}"#, + &network_fetch_args(LOCAL_ENVIRONMENT_ID).to_string(), ), - ev_completed("resp-strict-network-guardian"), - ]), - sse(vec![ - ev_response_created("resp-strict-network-complete"), - ev_assistant_message("msg-strict-network-complete", "reviewed"), - ev_completed("resp-strict-network-complete"), - ]), - ], - ) - .await; + Some(output) => { + let output = output["output"].as_str().expect("process output"); + if let Some(session_id) = output + .lines() + .find_map(|line| line.strip_prefix("Process running with session ID ")) + { + ev_function_call( + &response_id, + "write_stdin", + &json!({ + "session_id": session_id.parse::().expect("session id"), + "chars": "", + "yield_time_ms": 1_000, + }) + .to_string(), + ) + } else { + assert!(output.contains("Process exited with code"), "{output}"); + ev_assistant_message("strict-parent-complete", "reviewed") + } + } + }; + sse_response(sse(vec![event, ev_completed(&response_id)])) + }) + .mount_as_scoped(&server) + .await; submit_managed_network_turn( &test, @@ -376,7 +403,24 @@ async fn strict_auto_review_routes_network_approval_to_guardian_when_user_review .await?; wait_for_completion_without_network_prompt(&test).await; - let actions = guardian_network_actions(&responses)?; + assert_eq!( + guardian_responses + .iter() + .flat_map(ResponseMock::requests) + .filter(|request| { + request.body_json()["client_metadata"]["x-openai-subagent"] == "guardian" + }) + .count(), + 2, + "the command and network request must each receive Guardian review", + ); + let actions = guardian_responses + .iter() + .map(guardian_network_actions) + .collect::>>()? + .into_iter() + .flatten() + .collect::>(); assert_eq!(actions.len(), 1); assert_eq!( actions[0] From de020167989fde4937204a064ea2fedd54f3c931 Mon Sep 17 00:00:00 2001 From: felixxia-oai Date: Wed, 30 Sep 2026 11:44:51 +0000 Subject: [PATCH 5/8] Persist explicit user goal edits in model history (#49598) ## Why User goal edits and clears need to reach the model as user instructions, including when a thread is unloaded or history is being compacted. Automatic goal lifecycle updates must not supply user authorization. ## What changed - Add optional `origin` values of `user` and `automatic` to `thread/goal/set` and `thread/goal/clear`, and mark TUI goal requests as user actions. Omitted origins do not supply user authorization. - Persist explicit user objective, status, and clear instructions before changing goal state. Recording failures leave goal state unchanged. - Coordinate goal edits with thread resume, reload stored history under writer ownership, and preserve edits accepted after the compaction input snapshot. - Update generated protocol schemas and TypeScript and Python bindings. ## Testing Add coverage for user edits and clears on loaded and unloaded threads, concurrent path-based resume, exclusion of automatic goals from user instructions, preservation of edits during compaction, and recording failures that leave goal state unchanged. GitOrigin-RevId: d779d7c678a0c32a6ef76975dbe5b1400d1df245 --- .../schema/json/ClientRequest.json | 30 ++++ .../codex_app_server_protocol.schemas.json | 30 ++++ .../codex_app_server_protocol.v2.schemas.json | 30 ++++ .../schema/json/v2/ThreadGoalClearParams.json | 21 +++ .../schema/json/v2/ThreadGoalSetParams.json | 19 +++ .../app-server-exports-experimental.json.zst | Bin 160624 -> 160869 bytes .../app-server-exports-stable.json.zst | Bin 156251 -> 156446 bytes .../typescript/v2/ThreadGoalClearParams.ts | 7 +- .../typescript/v2/ThreadGoalMutationOrigin.ts | 8 ++ .../typescript/v2/ThreadGoalSetParams.ts | 7 +- .../schema/typescript/v2/index.ts | 1 + .../src/protocol/common.rs | 3 + .../src/protocol/v2/thread.rs | 16 +++ .../thread_goal_processor.rs | 100 ++++++------- .../thread_goal_user_context.rs | 51 +++++++ .../request_processors/thread_processor.rs | 14 +- codex-rs/app-server/src/thread_state.rs | 16 +++ .../tests/suite/v2/guardian_goal_tests.rs | 131 ++++++++++++++++++ .../app-server/tests/suite/v2/guardian_v2.rs | 3 + codex-rs/core/src/codex_thread.rs | 3 +- codex-rs/core/src/compact.rs | 6 + codex-rs/core/src/compact_remote_v2.rs | 2 + .../core/src/compact_remote_v2_attempt.rs | 6 + codex-rs/core/src/context/user_goal.rs | 13 ++ .../core/src/guardian/review_session_tests.rs | 1 + codex-rs/core/src/guardian/tests.rs | 1 + codex-rs/core/src/session/mod.rs | 25 +++- codex-rs/core/src/session/retained_context.rs | 48 ++++++- codex-rs/core/src/session/session.rs | 29 ++++ codex-rs/core/src/session/tests.rs | 27 ++++ .../core/tests/suite/guardian_root_handoff.rs | 6 +- codex-rs/ext/goal/src/api.rs | 47 ++++--- .../ext/goal/tests/goal_extension_backend.rs | 59 ++++++-- codex-rs/tui/src/app_server_session.rs | 2 + .../src/openai_codex/generated/v2_all.py | 45 +++--- 35 files changed, 698 insertions(+), 109 deletions(-) create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalMutationOrigin.ts create mode 100644 codex-rs/app-server/src/request_processors/thread_goal_user_context.rs create mode 100644 codex-rs/app-server/tests/suite/v2/guardian_goal_tests.rs diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 458e63efca2f..156379baf5fd 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -4409,6 +4409,17 @@ }, "ThreadGoalClearParams": { "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "threadId": { "type": "string" } @@ -4429,6 +4440,14 @@ ], "type": "object" }, + "ThreadGoalMutationOrigin": { + "description": "Distinguishes explicit user actions from automatic goal lifecycle mutations.", + "enum": [ + "user", + "automatic" + ], + "type": "string" + }, "ThreadGoalSetParams": { "properties": { "objective": { @@ -4437,6 +4456,17 @@ "null" ] }, + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "status": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index 663cc473da03..04ae2b92867b 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -21560,6 +21560,17 @@ "ThreadGoalClearParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "threadId": { "type": "string" } @@ -21626,6 +21637,14 @@ "title": "ThreadGoalGetResponse", "type": "object" }, + "ThreadGoalMutationOrigin": { + "description": "Distinguishes explicit user actions from automatic goal lifecycle mutations.", + "enum": [ + "user", + "automatic" + ], + "type": "string" + }, "ThreadGoalSetParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -21635,6 +21654,17 @@ "null" ] }, + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "status": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index 8856accc957b..fcae8cbdd3e5 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -19274,6 +19274,17 @@ "ThreadGoalClearParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "threadId": { "type": "string" } @@ -19340,6 +19351,14 @@ "title": "ThreadGoalGetResponse", "type": "object" }, + "ThreadGoalMutationOrigin": { + "description": "Distinguishes explicit user actions from automatic goal lifecycle mutations.", + "enum": [ + "user", + "automatic" + ], + "type": "string" + }, "ThreadGoalSetParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -19349,6 +19368,17 @@ "null" ] }, + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "status": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalClearParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalClearParams.json index 99b32a7316b1..ffef6d9d3256 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalClearParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalClearParams.json @@ -1,6 +1,27 @@ { "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ThreadGoalMutationOrigin": { + "description": "Distinguishes explicit user actions from automatic goal lifecycle mutations.", + "enum": [ + "user", + "automatic" + ], + "type": "string" + } + }, "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "threadId": { "type": "string" } diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalSetParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalSetParams.json index 0087827c2138..b1aad0e2367c 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalSetParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadGoalSetParams.json @@ -1,6 +1,14 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { + "ThreadGoalMutationOrigin": { + "description": "Distinguishes explicit user actions from automatic goal lifecycle mutations.", + "enum": [ + "user", + "automatic" + ], + "type": "string" + }, "ThreadGoalStatus": { "enum": [ "active", @@ -20,6 +28,17 @@ "null" ] }, + "origin": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadGoalMutationOrigin" + }, + { + "type": "null" + } + ], + "description": "Missing provenance does not supply user authorization." + }, "status": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst index 2c53aa1783082ceb9a0eb20967f1bf2d7301d26f..9e6ab232b72312e566fe7e96ccd8c242ed04f677 100644 GIT binary patch delta 129587 zcmV(rK<>Zr<_YEK39x&50&K0beR`n+0uw@$AbrVyDXjGSgIE&)Gz3E+5CCxS5V2?? z5eVZEQCWT=)N=@J>Y1>hZ}&vPvNE^FnVA^&=jr0Pw1MNZnCqOxHBTJCBJQ;lS{!4A z@OrwEXw!UnFXI&>O7YgLfB@yZdZfsWy^IS~2VzgM{H4$2^CE9?*8S=rRdc%}W5hdC zY|R>f#F2}R@IQN`g*;3Nr=G9D^tAxseoa7u;}aBklex>Y6Pf3Kx6?;8htEZlxx%ZIkkqPH%+Yh4OX(o7 zB29#eJr-Wi>>J>!d15i1P5!VbAx1sp(Evh7o0|zw-JlgkNnpb(i5De-1XvijKKS_R zr1sPEfM5#e_i0i=df?n!)5!j1RV_!Ygm#d~p*Tz;Rk6j6@m!bY`TO9QwFc>M3K+0| z9tQiUXOm0J^_@*}4+U=J+m_%{(huC}HW+Cei(Qik+tTmQmG?Nr^Yossc1oX@%+pj8 z8UR_%jnEQ(*;JOVB6<lr8;59!FUs0^*BA*{GgFN!TD_CY*1xVQE- z(<(qo;zswm>vL3g227?$VbNR0&E!inm$)KSTsKdtD~ioU>MitQa^1 zgWyTeou<>HanFt?{L&pZI0krsC=}15qoj-?IAN+{8tBrx4KHlBjTHsfHgunXpOYi# zUg%ws@gpOG2cb~fX&#F7rpKR}T02F~V?%zV%bfZ*CQZGkXJFzoRnl>rpK8hzIGPRr zxw3T8Qi!`U{Y0`f^Hpt0$XGwbOwNg4*hwg-AA~~7XoJ(|6A_U4!V?&O!&(p|8^4pn zh%1WHoHpL5Mi_;alB3zP4!ka&A$+MFVas+vyex{Z( zlfAXxV}nb3Y76;A`W>WyWpRc(iLLlcbqR;E--UL`AV>?{prOfdlu1(8ZNb& zE9gT6&E%I^`($v{Awt`ov0eDkBw1@+x+X-Zm|>^7b9kwK{pC7;o+Na8&v>vY8p9%3gs%^ zmHTL)?QqzW>|883HH7vqNvL@5Fe=sDswhXewGFG9 zYnKd|cxxJ02f!+Sv#o)wpcHe!2n!|t7REvUed*9?RL@17I``&r#BOYJPF+bmS_?q3 zI&~})c521e+2;BKbBklR=_3^NiYwflbo~(djpMp_tin#dht;{raW=ca`kslWV@C*^ z8#ewnR#>ewG^sk2anM{L{uVm=r~6MO`EeWY!#E;N0u0K3Rsn)T-UcahKwkk59!4^D zk)L502#5QlGx&VF)LS^xf(0GbN7vl7Bz3BxkGOV<6FN;0oc))dKP5|-8^o^Dh>8^+ zGFc&x1}LSrR0hOjWl;9b9&&&`BN#golx29Qbbn@ca71R*ni^V+z`BNvhzSd>eQPyu zWqZMb?qeu_Em#6@rWFA+*-@%#i3f`&o`w;k3d^_k;5URPA$gJ?{`-r7h6a%9X9}za zysf=(nXVUJ8rS!C3lr{OhcL1Z70Rxf8|G9Mz~cme`C5F1;IUxyvA&@T1GjJf)HM>z zR)@6jeQDBQc13EzXHnB+aca}Iw*Lk6rMiyLd9^NoY0qDU)0_6x=1ULyhwz|zVy+M6 znuoDDmT6i2Gq0(5a3N$Y5Hor75ghegR8uo^SjLe;(;w^?zsa%M;64l4Ku#89%-n_k^xq@p%*$tey8 zB+(RI-onbg>i0nsXq^mGpN@aaQm9-q^*C*|pU7ZX5^`>(6`tk)tp~KNs#`>R2qR{( z#0X-qbHeYt$aLcFeFs~=Hrf^(1d_IDVI!}91)!7+V12AvOPY^chaQL1S3976lThyo zYJs$tp-t!9QMRgu(KGEPqQrH>Rgj|-q-zJrPh$lM=133Q)|dhx03F2bDof=L|8eEK zBe*SuJUYwGwuH)hhvh?amM)NIsiX3ClK?L)CS>yV+aww+@8$YqLU?eF`Fjn1ogBY^ zgAQz=%W)v$_K2IQMA{_z+kXn_wfG2JwH=&#{y{A=y~*DUP8yVVL>X*kFDPHC?6Gjv z#e~9>TA~2+n@}m9;;67NZ{)R>5~(JNi7=#%l`~u;g_YOeaVl|W=gPowEYq3A&60mM zn$GVOrh!JvV&}p;m3*-~!pvXJ`_}@0A9v2p=C0WpZ37`9l(`H15OY1o;9dJ$;N3CN@&NVW@MAa`X}ZxE?7nS~d^k$5 zyF#|I{^PMgTkG0n@To3TLopqHiJM5*565Hh&yOdj8o3T5>YH|l166;ZH%cY}2#C9O zfMYZ6{91N2U(&UWoF~HIe|>uSDL|$*1E!)Dri1xIBIPJDFWU+)(u|tFq~Y$q?V^bT#I7sYE`}~KN535lTokSh2H1Yz;sbi5F;7H=uOBd1vgkVZdb2Rh^9_C4 z>y|DlSoS&QrC5Or7vfTZ>kg|G6J%@6GwLK67sIdYzU+VONQeS|E&!xtxU^xD^ho@d z{!D*}C{5-HeJ|52bHIw7c*lC#UE-Azx?+p^Gh$X37EhB6I;EZ7&f+<{m9Q@Y+G!@U zWN5N}nj0i_Ow)_K{NoIcQIjXuS`7sbqUFW|ts1a427r^g zS}Ba$;?yY+DHgioWezQh>-z6Pz>o&Gsyf7Hg`^iliIZ&g_zKby6gOPgOtkqlPJ{u< zQKmR1Nz4^gETXy@NYPnCnLSg(wN;QJg@vz$Wn=kOH|ctR0cbLr$oeI9%bqgoI6L?g zi9cqRxm;W7zo$b+W;*?OE)ij`1Vrm<)w%zN<@3y&Tf{aQy~SWdEnqFkcxp&_XVXH> zP<956HwD_H+k{%$#EapN3P=U5Y<5P{lmC~al#aEBUh;ZZIICxLD{ID2kGvwQ6{Yw7 zk5-xiI5CBPRt1;zINfF@bixmKvQz;1tW?OS(ge zMcxE!-NhYQ;V63x%=XJt2M6j`($J$=9-Oa_x1N1QO17=-5LV#P3LcMALWWe&qt;I| zni?t63G@dl^ue*IL#J78RI`t)y;2OFRR|2&YiMVGbFdOomFs397p?edwx^`K_4}># zGU8Q8HfZy5!68;I5`VGbKhe3KrNCg*2%lSq3vU^#9!CAX${l1Gz*ic20qbakaK&26;>pn3Z^S)2e{EDx|#; z*+RcUvjYbr98F<10n~HZGjqZ)z#-MD2`lo&q0JxpMUBAA_(px|=pjJ|2quo|pXlSB z?67GJtiX3(-Uyx^FO8sF0`<<>VSjVCGW!;PapyKl9=?#VK!fhho?}@vF>`QXodNAUtXkC)x;KC<{l-km|mw zouMQ+sYD5hhK;MaZ)xBzrTc7Aly)a_bT57j_*iD`ep`f@-A&Rf)8=FgDYx9voh1W* z?t-4TH`2A(fprz!yZhn;AKn8mroMM9pNwef;#X5PEU);nH_tpgh>=szxGu@~i~-eB zev~cjaJjn$2I?zq7vMJX;&Sz$!c4Ku>hv)qUee&c+DB+!NpT6#I8$c8g^p0Hy#)ih zHFXE7x#w5!|DARtcc|-5&&cXZ>Beh+-6`HQV@#e!Ddp9S)H#)gE{DF(whS%?>uuNy zA%@>kD@t|}WNvf`Ye|x{kZMEhjVu1s{OITjKq#L!*mr&iRLN;_b;0XHFX4zyL4ZyP zjR^XBG`~*M=fX?<-i@p}s*3dN#_pr_hVaUh&;z*yYCo44uUatzWyBU5nDxnju??X) z2$1WD*aW?hNYeq38~56sjo-*2wxr-<1Y`+h)N1l$)o7gNv6~o-UX&7b)U_uIGK4pz z950RW`{fk{A;@_u+0dRZ`%$MlRJ?oABZ1ZZ_LRePEwoUDUE zx)G1eRbndqh{968VgQF{l?7{mu(g=cAvt|6khA5`A_nxGi57c!$UZ{PI8#Qg4WOJ_ zsKfYEZ!o)o#X=;1)f9FNB~p;RysuC2_$mR>2=@I8Xi1P!_?cpkZ&5VaQK&}k3^%Wt zin4?l{pcgk$VGZKjh7aVypk-bvA$LfiZf8<`w&8wisY(A$gaEijfEF~BxU&mC~kZs z1M2xryE_rIV->zu6V(jY0szgq#ZQ2e02inA$GtN$M#tFjn&gzn7;uhr3kD zNK&t@nwJ{8HIeQ6lI=ScZJ(A{nhx&=iRyDq6_3oWT>b-aneqS=i-U4Fv!Z1uykm=t6? z14R_*M8QA5oNXE%{}N+e8u#jP|eaH#wFm;%~=biY9+9l_Got!70r ze9pSeA>rffg@s4T*&&fQv^juR{`#gUv_mYNlxyzxs5XaTqP9MSQXlOe;tTCZgwhCW z@4S49oM(<`fsU0%?Q(T3jQryO&8YLS1%^%l*MA{PbGgx-{jDwZM`tfduv7$9`E&)Q z)3^u24niwdJL=AVdu_-HR4aki=oP61W8;;7<3gCkG~>vi74+ghEGGAMaE8b1(B<;k zMtZVrW2Y((0v5Q~VZUR*GPNwFYXJh%#~*UXIcjLH`DSrN+6Oixz7}dWA!C2q9Yp zK0t-R98zN@!}|Z;UMN}y8OF~*m`uFTu)RJeF%1bGdIL5%Qq;AMnZ~u|I3SE6Ci>uU z%o-s&GO^`C1We|S;T(ZC>;m=db(>9V`UD4Hy86C<*uctHlZXPlWgz1RXSZNW#Kll{ zZrO~_5RZ;Q7->`_bS1IIMn<{-o%cTVsLGXF*;wojpARFtihxt;)-m8Ns0AH9E1^$) zWxNJtb!zzvB;fqpy7FPq#jl42Mbu_NT(joQcgBlxavfTA9FBHYNEXua|Jp9vBVt{m zOG+kxXq|;@@89Fr6!2siG4m^}G^2KF=;KutVA8vT|iAC`n)7QDGVDn6}%0hj{fK2ue;48irfMb%ATQxYbkWDTGkV#7mCkII4^G;h>!EC%2IRqdE^Tui2eGctd2TW-LrUM*NMOw+C2nA#3%5 z$sNPNgOF1eI`87=*W!=xs(x8Ky|QP2moEM0D;muGKRvd<>3kU{lw5ALy%-zti2edh z8RQoS$ajDXbW}V|O91^~0S5|kB5#G35xg-7E;w&!BDsM9?ghvs{i;h-d+$gcDWn*6 zRKcY{(P|M38*^T%=UWhJi&85>;*=u)XL~CpP6Ok&Ig{6y1mrK3Xtf;N_b}3bL-v%D z0^?H-_VJ#d{P96XVHOX*{DD}}uW2LkW8A3pJXt7no3G4Bhp;OY7D6GOBb4!Gha&!S zpK;Gm75toUZLH0z2Om$11jX1zRFm)vxb?jRZZ(uk3U{d6@5oxJ)XHU)RCi*Xl424# zSUwbDL;_ZR+aPXCUt8qU%7Ng2p48)1d#$ATCgRd{a1Uj%9CNgk?Bn6dFy>;cU?jjc zIx3}O_P5tI2|5CEHeDfNV6(iPdW_dGCssLAY>Uj68&3TmZDoq<5m$6J`tDi{wyfA*}2p3MDhN);9copO~P3wq^8cNnhOh zLY`$#MryE!)ew`6@D{n-bK>Bf{hSM^aWoD3e(M!O9ccjIykXIAIs`((X(Em-j=aup zipQMWc-1m$Ud)3^8h&04NP#mU_x1}5RK;N=JUCV`we@dqHT-*KA?L`d(6Hp{z}0CI z?$M?O4Dv6@XdGi|s7||orHL(oW*LN7(brnx0d6ck-||fBp^H&kj6Y<9k@#kPKXWPa zCjV)>kf6@-doT>W2j!X+<8jjqSCwO5!}eogC3dK6@f@?TscfspE07Zu(&!wkzfzov z`WNLzh`-H_hYg&{cyYWE)_0Mnqwj`wbk012{LJ(al{z0*b_a%kV(Zrh8wePvP<;sM zW{4?9%VTo=k?DbQoBP`PH`@vKeXh5kAzR>BNjY{QD4G_KdQ2aSTwUk{#T#4jS*>dD zijk&D1!GVfMz~je+`FVA)Y>6)xWJFnKFCHo+?7${S9t7=ToeoI&grW~WbM+F5i#ne zhMg29zbx|95a8Z_K~v;F&{Nm9<>cq775n6{SSVG^7(rmFvdJl?UaFc}0maoP1NcId z&7=aSA=XrgcKx3iKe5v9xE656%o8hJ%vhqYVHR~UXRPt(%BoKyOog9aDVufsYHb;o z#e0&E&*HL_?S$yLEG-=?vyGf8T+H&}+;d>3ODUwdkzeh9;n8u((xU)s5%Rt@UPHzE z#=Q=5WRSZelKFIr8SmkI%a|p;_6o#YSoJqmt+?7|`N$z5rdcq%EBmAnO#i%op>#}C z$>Xbu6IJoNwi38G;700K>7-#YTo%)hKJQ*gk9UKs+zLRu$FOL49pEMmmZaGDRe&7%)m|JN^DASbIdcPl(I5QkzxdUC!RJ!o{DJQ`)}<{H z3zjlr=7KeXZVtg>qy~ z)2SMK7=CX1AD-jPw1RLpD-NbnrLfM3YE02pIAn(i4d1w^HV2ze=s@fW*`mf#*I45Z zn9;|7SD(vjOOBDkh#jpUpPIOy(r0)Vr)Q8P_zC<2# zn5_~x8ZtLnA8!Jqsv2pll2XMkp_%`%Ac$0dqCLeTuyGpB@k$Kd)Ki?GK~t?PWJ?oZs9ZRLX$A>@M(Q&-3TqTY2iA=ZzGrhz6d!M9SzE~9~qS(+;K!)#tF!}WqWZg7!h8WUP*eE zz{M4+_7utEA4LGuy&Bg1RRG|6j*Z&_{=I3Zr{$XD6BQ^Tp+h|GW@rSEL2j`>2cXV> zJY1@&B%r@Qm6>Z~aiR6hgk>?Y9uZ_f&L8OC7zx=4-LlF?2<@SfHq@ZgJl2KBy%pYN z#+pt30iuAtI)6`y%Gc-H#P3?}FFbb2OId9nAwh^)2ZllylhK(Pf8>ZV>f9Sc4O~m3 zQommAB`^SdB>cokLT{JMGfl0#F~{=MLy-Ow7RC6 z7D-9Qm%C z66rXGsH;0z@g|j1f8={&sKEbgV>s+cU6;7rT2~4#!kx=^NqEIeQpz8-RiNpskwutD z2yCsEROR#U;ju0%dDoFJIqM|LXyNdRLgp>?i^{!0fz9ptyLP zO~i?P-H`AYACN`K%j#@4TY+Fi1zy?_?5cf zgB1Uq8F80xDIcYPD;L3F0$VDvTIiQO%Xc!8Jh?NvuT8bJI&iuCE3)48HK-9G0+2yd z0ufF}Fg@4z@f{Bra!;2kC*~MOGcjB@3y*eCX&sb+K|V^Gq{oSn@l2L50^qoqu?HZN z=4C*KUE$+%e|WhPWTmq|FpN6IBxue$D|Agc=K-=5YJW@#2;xP5HqRPLmrF?@zF3Q7 zKl?fqC4LgeZ$hK8UMH3jWSzhj01`FiKiA26BFb@6(rLV80piZWJK{5dUb=V~j3$VX zGc8wP#fcX$QU#IfJGVh3nh|1W7-DKBGhqF|A<+O2f9cWyk4JUaE=g*-Xo0L;G5yvc zuU{O*@s?SbYq@nr@QQy%1cFqulrDP8rqjukSZ@kqvd$KpgY;7K!(;KUVV=OKf zquM7Je>zkv4j@aiTnMNuu0#8#TsKCoXWCQY%vE_W*uzPO_q+u!{pWo6uEIo8?{42_ z7)$!R+@6z`cS#$M3CwJf8b`x>3YS?#H|=_^uAn$6;i{B=x16%XWZO`B>h~;lII`D? zCRLQunvy%8QY`TZn)}f)%a$&~7onZxHz!6te?KNSE5??C8n1{$iKoI1a^yI? zzpDT6M;{VNrs*X_Pfly`mH=mUwQUtiORax$^|nNjM}p}0&1p8mx-@(aH5~MYUts)F zVeq-cAU=(~Nh*<|ujc}U)wVCwrbCg+oaYDvQ6>JJf1=`T0TNYfRi+jNwKF}?KV)bl zf4J3^cZBA+rPJhGF9pdH@ft2i-Q2jGwSyn3+tXVqqyE)jgrs>Nw;tvy(5Ly$Z+ASL zrBrEkj^04B%_sMR4vR6 zON<8tg?p`!fWP#owTKj?UPU>`yyEA4e+yZ8HcV()K#Kb3559Gsh#CEi z?Qiu>7c*)v96{5oY+7~p?0usq_f|vjQgND70!S~Rg2P0mZue#PV26{QUxYT&i_D^p z48M}ZGF?5Gpn`(cG_1CjaD0!{yZcsee2>G%ix6$%55Q87=XTLb7y70hnN1nxe?BuI zP*=YniYquIuQT@roN#3&_$Evo_5H~M(3iBEP~Q~_*w_*N)y=oo~!HnBDV)4k_cqq zRioOoEouN#vn;~_ajFn)oLR3cf1^StX>!K#l!^6aQ2Uf@Km9QF_cJof2 zb-MdOg2yI5q0h$eTUvETOeax#D^F0)A_0Y+U%2o}(m}P195Uo~f1wzeydtnel!UTC% znMxH`C9%t9!)n|)wy(2B!dB%BIw<{{Mocj*inRM&n8?3u2smHHSiKB!tJNmizy<7m z?5va4Mba19vj}X6p%M8EG1^tzjR8-n7Y<2jl@Vp;A?z6^$HrM9e_fP)|JC1=SYbDC z*(l-B5#KLP9#9wtoJlzNxS1+ceD&Os6~95hN@^HGd>#VFX2-+vz{}*ckhd@l%I;aR zyEjvdNp~zq%0Mii!GzB29jfOzx^KmKHBBWwP}S9+;7rx_@>E#>7*t_MqicsVg$J zflF!tXpzK*EBi0G=O)t+!#aKK)@7b|LG6Bk!%)Y)#129YerTQy$|$Jr%9*RM)s49x>T!tn}dt~+2~Vi`cJVn*EY7>VTHA(2Nw9yR#Q=$S$H zO|-S_fQ;3O(<|A5L4MRf)7GR`(b?*W0%rTVlFG|Ff55ya2=q60$L18*Nf%DYvWpjT z$iCOh78eQa(Ij0Xwkf%kh|HW+@U;&87ZX@qHo5tEXKC$Rp_%Ooa6!gN!LnP@mxUEq z)WHZpO^A-b(7J&(DJbo2CokzvSUNA?SL+Q8^&mX$8}@#vT7LS&?@pe8QN!f*q<@;& zUJDV$e}jVm2R9^*O9d!w1i;Fw3h$BXC`>|v!aHyd8HZURV@50DAyGVjfU!^l)?DmW zX}`Q+OkyrJXWGR30%Wa&B@W*A?Zw5~B4{}QLX~G&+~B<8vZu?;WcA*vy^m#F{?<~n zBy#}GJN;XZYg&(mE@}~1Wvv5wURqoGF1S_)e}YzmVUeBp;p&V!o=4NF!Sy&()rIWo zhWj`t5W;|g=P~%f$BRlirLzg1?PVQlh(UAinmBAICn^};cSi~F_K-RZsj)vM%xz5p z%tXOwLOH%eg2(rle0)z4$oB9CLKu<)H0`kH|vUET1Vjjxl2kA{8>0}HyV7{ul zf3t$raqz}SG`}T#9+!Z0Q!I?;XUH+SWurSQ5i{dOt~+bX{$x*Voo0~bQ~0_A-1`Mx zT*@OR&VV?;T@Ko_Nih?LmT3R?SZHA)yTaN>B8>XcXY(5_ZU6rOXySU(fB>$MAqx<_ z5ESZa2>$cZ*F)RXPEB?!o{JVXIVlUWe=Fq|#=`k-dn3UYaS49p_&7!CWFEjo&2&>Y z1ov$}jft^=le^JHD1FU5jOv1%C`^+_prPicXKePHZ?2^hO#sk#tCHu8wFH(+{lN4R zkn387c)N0VLb(5a_zYF`aM0zwCQx>k&_KJcj*wWM39Yzn*92M&w}hvn>ZX3(!;J zqQ>BuB;B#h=rbW71OKvF8L>=-S&8x#AARQZEiC?v$8P@P$ULDIyIt(hy;hay?o8H3 zunT?cpq%XNy`p{Dk+;_~O$)dWfB3|TNxj|Si{SuXXb)c+mT&O|g1In$6J&eI>*_%3 zn2A=<%fZ;?aqR|_#ta3aDsV5D8kpx9f=94#e&1h&MHpG->e)Xaz_B4ttoYK^DjSZv z?f&9rfubj}m}x0L@mA-zcagArPu$%s7;slpPZ%S}8Xuf?|2O$9sstC)ok;eW9P+y&%PWUD6 zWHx11%D57g(U7c?)l6t<1wt@@LlTQLPZ@JKEjX1R)O4yqFb=l+T=JuqR8+ zjhGI=Qi*s*+oYDUlYIbWf5eipuv&BaZUr08>|rhh_WPpds-i~wI2@TJuEVNPGWI19 z_ye=FEpU0?!!RsA&X`=k5c8I#t!8L)CDO2Geg*#7EsD#om~h&1s+B6m5Vnr zJ4X<+$EzE=XVuy3e|BAQuktD~u;yJb<<>?=Jh(7t53R)}VK_DqKb&vCNa1OQ0_NO` zsx_mpHZYQvWCC0OC!(A|$y77Sd{HViNSn1&) zZ6=~xS!>LT6$)Rr2Nc1}M}^3^C5B{}Nc61=9s^eV&Ewm^ZN{`FA=s9I+PI> zUYhGO#^)NIA~HOQ5lH!U9rv7!P-0s$z0?$Zizojmp1lP+OWTuH;K+ohxjd=zZ}X-sOf@jBdJTv;$?Ynq+Q+7mi(n8@mGnj z!?{>)_yx|;PjnJE$U_;*6$t7FRu^gj8ZiVJxXo}V_NIkL!BEK9x@^X{qf5eMqtTnjzba!ZMJXQX;*dy-rj4w@{ z47D%Fbft6-thC66#(x*o2ANMYt_?d3dG7pUt{JhO5m^BeU1!7{ZkSuB{9`PzMYm%C zDaR}i`1(X#U3ktd?0&M$Qr=PC6Qnkas%TX*ikUUGBFAQ>JPu$nnX{FKkcB8A4aMk> ze^9+gL*?czB=7pA)k1AxTN&4gR=y>mVT&{yJIHrsXE(4|!H;|Ad>S9n( z+@`R?2i-N{B8nAr9=tay{PYI68xBk5Of`Q>C^7QG9d|=j)xKq`D{FQ2e2TnWaDP1A zu}OJWzQF2t58PP6TY6tBIb$R73Ik8xjsCDn0iJPL1-o$&x^0t>L<&c6B5x}!e;lg( z<=pxZrfG|0ETEImn}P2%@?B#skMCpL>K`{AbR_Rub-C5_B|>*pbY1w&xiN zf*?acLYL>?;*;ZSI4^d5Q8Buif6<6_j3F|=%467G^7KYg>1q!I>Xq=M$YS*`Xffz1 z=~)MIoRy=yQT(r8V9S88F@?CpEM_Di-TJ%jLAv01*ypSr$3iW;h>ZcE>H{=i`I___ zI06^W?=)ZFSSBJB5gO^SGyj|5P**4Qf`i?batbhntG?Q_2#_Ppuvc`%)@!LC?f zEK|Qb(DPR=V(w0x;l@Mz=^N=DiN(n|m)^=~?s)k;NJUS(fOM136+=bzmJzNaR@ICV zbg%>$DK)N!@MI^PCIDoie+*j;VL}QOhd^#qTv`RRk{X*yEawnIOoGWMXhZ9QsFxFm z>*IE?)4>&%quWqfyTngDO~8e#-gzw{c~qL}Kj~qmZE;@E<)R~Pgka}5v*6!KL;Om( zc0B5Ve~L7zML<$6eEX?A z7C$fRvYBZ6S+iLr>V*v0;VT**I63A2O>q_)xbCx4f7nlpU%)R2clZ zSIzLfndD*A97@*M9l2V{nJl zI0|4;4WWW*Q_!o15bUUINE@I+0H-1S{GM2jP1JY|f32pFRJBSeO0sptJtT!B`GI2A zA6zh!aJ!T$6PDv5%QvpQ{mI`5J~H0g7R5WU-K+bwR)d(hns<1}2kOrpXiT_~`9m;# zZ!lYKs;XzTLC!IOJfrpW)C%bRR%k_t<#@>Ud`6l@tXnM}n^WM>Onk#A!Uq%zn6Q<@ zJXOCpe~oY=Vq#sS#k2{$T61Jy9jEU=U3@0Pi?l+6=ihXU%^QHv-f%I$*vZ7Ef=rGp zKuyGTSa=QRlHfb{pI1nzS-u?#ZUV1jS->G(1}tp>raZ4OaEm(p|NsAgt}a}COSX)R zQl>?gTAM_Yw6p+$$Q2DGaFmun%-aiMq|s7Be+~5iUY!7@0G|NQPqUuo_>*L1ze1lh zuKnIt^*Oy=Lw6jd`4mSudu}x|3C)B*lbo+a5D}TY!-oo5IHhM#S)Z10^+8GvxWHy! z!%yeJ>o5Inrv%Y}fOBrYN?q4(u!NoF5XmxYAnuCjfBr^P{Hmb``u+-k_EC$RH-t`9 ze|2Hg`YwkhhqD@SICj(zX@0g2yntpv+OWeZH@3|*b=uq8E0zPMEfkVYC@c{YwWur) zq4w_$2^w^AcH9trnk^Zkf%xv2yt@{@Z%wC|w8f1px=t6fL*pC4l@AJp6JL*6Zz&S!5UadW7e z$uhBEbT#zgX^;<){6LI}PJ*c}6DvAv`aEbSh(Qfo6QN>RBfYcCzAM_w1;GwS`sY?H zttB#RonqTGrwQT75qkSZ-uzrsKwAyC3_b~b*oPgNg*@Jr%qIFhdwt4`Z4rE8{|`f^X`%V%1mu{wbOAvnLsh814sR@8J7B z&Xb28vk<8OI+T)UKlPUQSHceeJxegSE;%{I_KfR-OkENC@+UIE$?@reXg8J`SI(bN z(gunZlW()C4Xgs1C`Wm8d>Dj$f8)27lQGy561vo4<$JLv5{hIevk6@#R+NeLWEQc` zYzaA!VvF+5r!J10dXBUIen=(r>fASeJBQ4%>1WUWXTFk->pJ7E7-ENdWnfL(0KmA& zIL}UN=@^N>N#=OzUUwwg9`*drkV9TSMFT_R$kUpp_EsWYx`7QYv&9;$e+a8~MZSNc znan~g4dRK(?w;bI43G<`6ntz~8bAj_FaQ7)FhnLGhy(IyEX%SVQ~*Mdj0+eJ1Q~;f zfd|1cFhmN3)<7r&K@@-kBtRhs0?;S}>;eD#JKIr4yuHxX%Lg;-w_h0DUiDrFF!EyM ztd!e933W?y&hE~OzsY@rf11)Az!;@C*Yw`|dBHM6wEIhv;^;#-E&F_xaq8WTxSy$X zcd$MXRNcdThiYGdKfoiA?Ai|rbL^~<4;>vL2xN0-8vNmNl@mH%N}vnwNa5#*)Vmq`6PRPeNdw#3UbKiLY6e&JmON`oMe&n`@nrf5Wb2hA~al)b8u- zOr|lEel=IUZI%bkrt*3b%(l*}MJ-2*H-`sNH09uhTA%`~`C7nBnP~Ed!^k&7kve?t zTdKj$1 zHEZfK13|Xpsl3aoS1|=m36lD0*Eq-1-MTE=?SMr7O;a2)dtJfsaZ+foh|}7_tDFDysT5BG=za4 zJ5f|QogEy!g`tiU0Mv2jX5N$humw265Y*nmu$6+%cKxXk(m%&Ep$ju$xlxKVEMA!A zk>3~%&Gkh$#}40BrRc2Y-F|Vfewt?{CZf+Lh04FgaOQrOa5!Ia5VwE3LBC4ZI{E0S=4!a{rPAg9BlKo%pBkYFd1 zbzb+O1;go&Ut*9*1>&H@8sksA1^(lFi*Um-zk|V9C{Q*XV{~d(M4JV8uWwFt-=cU@y z91Y}!uubDgA?7v^5fbqC55QJbNdg7h6zghqWaq4Q-#5^gP3LeLn;35>f>e5Bq{ZTive}6xA2;fQKq@5~! z%Hnb)j_q~2$=m@VTYjs0HIz?u;4H17mMlt~qWJmB(T#uqB{nKpzAj z1gvBx2bWL742_dwwbs_MX0U1CqNU>%;D9H!$WS5kb1l51wc8$St~g^+vT}rAzHtr9 z(tQsB@Aalmj)F~7?-jHghqkX^y6r0qf5pQA6hyd%5gwSK$9dk<(~JtfYP8p83CR|$ ze#iH&GbMP;pq%UAt0S~hRV2|SUNah1xEDG)@3v>Kg4=lu8~5#{?G1j5ewwE({iVKm z-}OxicjX%QA9|s?a$*=Jc&616eX`&PF^|aKK1^!USJofHqatz+nhz#?f$^!Gf7&Y_ z@`Q7t;cQ>6q15xmpe9Ye0BwtxgjrOB8I_BaDph}bGoG!74VNHrykl9f>AmFqpyCl2 zF2$Fse2rW9YI=LQn6e<(@n1EUrTXMGTJ*=Qp$DPv5Ua=2&`AWfGibG3J` zQ5)>qIf|m2WS>zuH(z&Le^}jf+6>;o`Pjcs&PS~Nx8%Svg#H+3*b<9jrR&KS=v9^02+rL@%e@t|cC8$J(}pK?)P5V- z3X_}9Sz|O$GsJS#0EHTn_-Jl z;L&XQuV7tIJ!CsCmVFo_e;m>`cMZ+%c&LLfodmV9?J7WiHRbqT#nFqy4p2f*vSnxt zx0h}S(Z#}FV*^S2vqwBJu*xlC10b)t3k(p@JFIQmaIA_`F$c~2d~5r5#E z(}!cSO(ey9Lqc8wc*C@S)KtR3bk*Q@_B8>^1e~TKIc-4`s1zlaf4*7oaeSMIb5J~^ z-x)z5Nnv1LaI!mBFUL<^63i6^1Rr40wo~FRe}KL}0PR4zZJ=6m0&T4VWz`{c+`G4= zYvZHs32r^Y>501xv{-1t4xU+z9{z1PNJ{y-_#28Y%K6$10LBwnsV!3UGEo&KUx-PP z^>^60`Jv_F7a0ksf3iB|kb**QXR9n$@7FtI;Hf9jnnwr$t*NOdNlI=PuSZbXQ<}__ zLJhNmN~E(?cY!_;aLD0=9rO0iCU=m^efo=fgjV*+Xc-7ReP5C1VU77X`dGH!>6-;W zB)Ax@6_jD7!3K4LJlW!9eeiCXhNMfpmsbN6kkoZYQFI_0e}K{g^<|~U|H{wE-Wx-@ zY9z{8&FW!(w(!qzvz z91Y!<4)kWOfnBECe|qz8Xd_6lonqrVa=S7#Jc??gG8Qy zef>NZ8Kj2Ce|y@qOLt)^YR8hKBV%i|*u=$X{zK?@DFz~y`dTb?F#h?!GY6NNl9LPl zJqDRpjMWFbF)DmS@yDo2@!=00(-^~OxlXLUhk`X0*``s;?U+jf8#Qaa2r~3xqGhuZ zuSk5W_G?n=GX@!t_X~$Ln_HY8*hIQ5CD{;p=K9XD%{kU2Ij1Co23iv}}V|Q(gk(I_w zp37AX|3fV@X764|oxCOIOSGzwR2jJ12(Rp9iCpYJj<%f6sZ&42)W4%4ybb{D6+ zh~VX-e-x?YCrlU6gG^r)*w0=IM233=r~gjfVa#LwLOD4wuR4R~NSK2#t5}uMv!CKf zPEE~hdT&o-?WpTAUc+$uO>9bP*rPCQezHZ8jaQ03)JDIWQ zh%J|IykuXVf1RReca7^~DHihNU{3RLgWn(Vryr1a z4Bi=iTOqpvX;Xx#!gX5WUAS5ay=ED%A2v+v05L$$ztaWH7EWWll1yK9m(l2dXefLT z|3ZM8_|MDi6OPQg;K)iExbSZ6Ir9$sno}Wp=)s-=TT0gU#7Tf|p}u6Zbx~(wu=vHK6U>B&UHpsc;lbGSg;O z7tP!DrA45FkCZ_chIY9fYP?cP!bas%A}4Lo5r4y6#vj6~etbhqj4o5Kj&hmwGD~8G zW1JJ1+*^Kd@Q6d^Nt=h4gGzW9S*1*#>JnE0`YhNs^$~U?^T|iMcW?Qo5o!|bK@yIS z9u$Y+{VVlg)Tqm2$~&m|IY>pPIicTs`h-#W1`C+)#9aL*;s;_~5gX-X zd4J--6yI}^igoWFO@{r;|MNhEfT9S@1?JzZ(CR`&aj91$bq>y1+t$@f3)cELc5GiW zEm_7g+y%|36fvJP7O8rYR?w^5<6AtEIc$Q)a)MgU8;}>@6{PmN*QG<F1F*s7lX_eH#E>I+cJ^QbO*qJm6Bj>xE0MsLC+c9i`Fa4j=f z7%*l)OVn6d=srCr3V)9@yL}F#J8B1u8#DA0ay5<(UlH?KcWc<@!E{{hKk>bt z+JF4{Ydk0EpB^-eGDN18+uZhqndN0NX3Z|v#KvY*ePJ&wk2CO|q5o=)y7ZrMh;E()uRyr7MqU+_h&a_!%4On30^Jl1eeAh#9UqSqlP| z3~N7HL*oBe3hd00k6q^zuDu`5&LM4X)OKFiu$Rj!Z^}|4oAGUiC7v{*{qVzI> zclqU#UaVp#ZMHE7avt2w*ngy0SHSRd3l13O1!SFR^tz=Bu%H`<+WaF3B}9Vl$U48_ z{)fD#Z(`gZ`sTii$(b>mFGN5(wx` zR2VN=ZBG?OQ{JD#B{Eb;j~MiDHrOD}8x-p`yxd?M(NmUS%yO9fCf@ta)u7osxR>L* z17P`YZkvgfVebU^Du1iJ5|ZLAFs{x09TN_z(d5mnM`8b0`Jqkw`bA8H^Fzr z0s|#hv^;_}Ib)s?#iSdNM32K&q(}AJ&p-B$#E}-yI7X7`eSd(%Y0ph})3wtl05lU( zND~%W3PF8b0rveU)#FNzs@Oj_Z7>M;B^Z@+NkZ2DDI**GG-<9Z&jz+1WEj7fhqvX| zX}ImQ;uvz5pe!lWl4xG}!!oJCe_Jb~0Q6J4Ju4}GqL$p#txr>Nt|i1udt%I#*lG0a zu)N+^lFC0dn1A#`c2Ni#8!$7E%g9SSfbXjeP7dv(995;0mYri0>Q{?fIJo!;T8m^7 z&|Z5ko`yCGbXL(i<>MA#Py3_;J%;X~`~kw=S-43(K>&(e5_PjIsl6YJbJwPQ?X>`| z`Ss*9p0QI=mZhByl=#uf_BdtJY!6)$U;xM-+zem7RDZ<`G-N>k;=I&(Uf$6vckW`s zoFP(cI(^I3zUSvAHTD6BxKnz?h?z`rZ@AP>N+@Dg@Y#P;v22=D=>i;RlhR=hB5wWf zd9Qnq?CcdS0k`;2Zs!~og;NG$(J?d8wJn~4Ssu3zDdK$YiK#Zq&6FA|7SC|6Lr6Gf zdk2w)c7N>eqMyF{y$+p~218BY*a>&x@Br*J)cry+LC`Nb9T`F_KM2v~TW3E*R*C=DtF?rN4Gi%uT;dXbL3KDLs%A>c6BNfCXLiB;1gm8SGKo@a(6kL@uS-v zn=g(BM+)%N5p>JBtA!FqvW7^j-lTbNqk?4}I<3{&nNp}z(Pa6-hJir+xkefC9^me8 zxPLNxzZjw_WSqogzM&{C6YVW>?lC6Gry=!1T>>*|>7&jdgTv04sfRmI3Qg2PK)f!k zK730S3A|zxXd(UuOL=FZfff%5SiAPx5Nq^4?qaVK488*vzTUDN1+cSJk2Y~#MjTKk zd81UxMO4~VM7OPK!>4YCS+RNnNZntJM1O-N2=tiA9ks-(7H0eHQs{T7A1}w3+^k`U zVN+9EWUCndXBp?4P#m|MO4F9CPC?1D8n#O{+EnhXSC^Ny=m|7HM!+ylYo|L^TIwrn z4G*%4iD7tPQ!Q`3HbOArJ+?)p5J11b=nt!?dO>+q3eO z%0^a8y-w}41Jbx77m*yg4-R%N)PJH>>R<#XN*fsq!a7o!iu_z7Z{MsIkAjElwEEc3 z=Pl)V-eIxt#}7ik#RcmIE!Io~ojXh8ly39mfQls|g6;Q?a5!3#1YeE4tc&w{;~>{l ziI9v@v43%2Ipnxp!nL~47FNW4jm;rkVGHLeqoq-zctN&6fAR%3Zo6vKB7c6$=AaXV@;Qndh-Z%*ngu+Wo4^*pO z2@8=k{bOSn!KRLXlh{Splhaq~EL0T%;rm&^yIBqcDRrj)1y?OLEU|9t_#KqI=X_u! z8JYnA<#dnm^HaDBGrskZihmxJbrS!uK|fYJICH&)V}|CqJ=M6;drLb-%NV{?ii~8k zJepi@^U>FeRdW=FN&m*76-8t(M*7B&u+=uX<+am&)ogvK`IXd~o5l=OM z-IERJgN30dZ_kS>21E~C}Rx1A_ z3jp3Rh9Y4l5{iRNLy@A6DumH}n|{KD+k!$y4;GX;vho6d8EiHBK;|Yf6Y&Ze2Ou(O zbxHDs_!V0B)ooGx&zh*#_W5H&w zlN)i>X@H7znYj;+CCtc)lN(LuZa`Zc{OYhwiD-PeRF=p$RhlmBhk@qU2NNNXG$hCg zoUl8wbsWW;tAcJ~L#go7k12tr&+H92Z3lF_o#@B2FP$;)jU+iTi1Y@_JAU@bHtrKuDqjaR^`$Y*RQszM+yj3MV7hCipwJ%GEX zhKW|u6oEuja`E4Iyaxci4RUMB0#=2-VjmzS*!2+mgpnnogEz)T;$c?Tt6Dw{VuWK- zq1;rW0WI+1GJAs}Fp)Y~T%jzz!U~jz2$<+}WFamMXobYwO-;L%V?F-~ctkI#L5Qc#Z`4u_vw7atg@kZ? z2FjF?C^9~KML8W?;Qiszzn2_uE%}qFWUpIo39giRV@r>T-;K-Ov=nE+wm4S$z2K5I`c8dCSAMHB(3)rayNCyX?f z`aK|F<6NI$5czTT+5dV_e4(KI77pJB#%J$Ge92OB}N{h?;QdHvLpBLffI2zPeHqRdT)DUUg5-77bDof zMt{mj?hJ;k4Dm_lm#}&0lfx3hRGvA>2xNeNat6pBdhA4>&RT#({~YOdr!IY!kq-hG z8dt1KyG1I9uh(2V)$k^7vd_PT#cv3J(-8l|!|bDcoc}RV=Acu~?aVPptKhNSNV0%y zWsP2&$V+#@1)^ow=F;`n8aK2My}ROycz*=bk3<&+5C4gc4gKcjrHM)oDjDsu=?O)= zUp8QEEK=Zt_4n3;w~T=-2AACxHiGXcCvA z_QQ|>=p55a+hR$wW7R-oP?=$#kSu^)zt*RhZyz+Wf0m4TSt{jyyJ_)P?MXBFIDe@h z%otMA?S@~X^@Eaq{%z`|e?8C@yEAklMI)$qs^!s{QJFBIRZHIxFKAfnQ6@2R*ML_4 zNw~6XK^{PPN)?K!Bz}9yj4|ksI3Om_$U!o;>0l!%45j9|*X$xPMaDN_@o2getM5ntYf;odtcyH1+kxIj16r6ebK0 z&?4R0X8?@Wkfnw$6Ndf%Gia*)EoE~dtR>Orv8jj-B{`I>j<4QP8!uB zqFjs;n3T5m`8}9n5a>Ie*~hud^N~ zIAT{2)fIk6ZhI=2%MHJu;|4yIJJ6fZB%XCKNEe2bn??;hk{B89f19NA3Wk0XAEdLD zwLwpQVrh5FJn4{DrL?ANi=-&k^wuKnDwju6)ZRBiV}%LzM)O@SP_eQlCo5euo*lJI zigY=38OGr7IOh6V1B`%$>3_(5A^ChuGx?OGdQ3)oFiR?iP2ERH1-xsYGIUbzY8F<_ z;w!BOzm*ob2!AUks8Wi`VTWBSjYK)JA_N#bKWzg)&36(8NBH2QU)8USUvkMoFkp%d z6&c{gKKe*7h7holX|IFoA%u@#BTVTbwF0mLm)7qxNwZU%R^Yz?f`57xspyWp3a&n( z-c?v{JTwaYw^S>u& zbY%l?CfSIV`e7A4M3|^-l!-JJqT1a`AOEB}JQa&*Iyjxf-MKY|y*AgGfP-?BM??Qk zWF5i*&4zSmsIYMx=zn=o@W4yTkB_J9((06kMM%R61j}^_+M4pjJr8f~CZw%?GvQ^^S-CkJOP@uFWg&r?WsYy5 zxE^I>v}^d~w3W+lria+g@WgODSUBl|&I=`=S#HZQMAxaLhgC$m3nv>-UcZ@HXp9$W z_L%b<+5D%5jihMcp=?%mJHFT})Xe8JYMPEZA{Ng?k$?FVuhu8}@W9B4P_x#i661bCZdHiD+7P|I_`})yK|3Tt5~UMqk-C%>bBO0BQ&2bVuli z$n>OAK7U}J0B;AWn&n8cX)$XVP$D$*jpi#Z9TWB#%wO0iE(-qq))`qJ4~GcQ=a0mf z%f>QFGzM04Rj1aJM6P$LmsM8-j7?a+S_MP=!o&j7L#zb+Jbxy6-JUhuL@yGzu9i?uR#U(|L;-w2 z2J=9;(3`z{_AiR}GzS-r+g2;F78=A`$305l{)Z;7+2B6fBD4L1@YKwNnoFJ#@Fi_L zcMznO;?i`~$^)$mnl92$3ruQnqUkENjOz3;vfd>#)qoBNn}ey<(UH zJb%rvI3Dv6FF#I6f`|tTTf^gMUDz8Hb!%7Nu_qC-mz>>=T`Rnf;cbSimQV*Qx0u*E z@+Ms$j0wLO9QVaUfq56DGRdWa?K;}E*O%X7QcA4-LDOAp&!Bi~Mm>p&IBhrc(l-=A znX)pH`gt}IR<6bnTcPiJml1e)rFeoWK7a3>-qxbnU2-oYMa6oc;JBdjinzzR@1;XX*A#UG(V=oc(hG~xM?aQwkJ#D*8gm6fh9>RpKEPqGbt(kn3 z@GWMd8DR!LLH%-+*(X6J;@l_>56g$0Zw8@6=<``d{?d+`U^MC7jc0x^jQd!#SKbij zH0J1YzK{)aovxGKGP^Hh|ks$v?vK*kjdC7Bse`Bp7vdVZ4OspTgd? z?T<5gzO_*@SzfQ~mVy9ObKk?IBbP1(>4=G|z8*b+G8LFFhQ?R2w149*FZj7C`1zZv z;P6eWB$#9aWn~FFE;J2lNMq7fN4A%qy{h^0g~-?{5B&p!qFlpNSPC>RZ!E1o)2iN97_P1Gz1tKum3i6?iRBcJfJU$PeC>TM2dB(!w? zo$TM?q%@C%!%(ncEPu8Uz2ATwu;tV^j;DTMm;gJ*KEYQ5$ID#=>k|+bex#%zan0ga z@6} z4f#mw3BHu`h$uK&q!JE;ouZ$pR>8^?51lDYL4T|D8=BRoc&BL64l}n{!LzHtf!Z&DbZ{J&8&fY}Rp zEBpGHQ9!&>iK|?(&Nw^sC7HDO91RH^t%9+oshq#A83Ip9z>`j$b_lJ|XKa=|_ z<**SD5`RG0Dd1)(dhw4L!!ZrBgHw$_?@hu|3pECtqd=W>eN8b9`YkR%##lf z!N}uANi^@5L#h15B1W@%pxNgFybNpUYde{qBvoJ+Odv;gH*cIw28^3 z1gc~qq`PN~7y~P{MTHnY%vE>ejH){eX^iTCRFM?rfKiE+JWty z6|y8cNKbIY!IZo*f6lNvrD1_n1Ru^IuHg0ya#5z0BhA5|k|0s_$F{`Fnsh8d1E5V$ zdK4`FaiX*ZUZJevBn3*erppV_@gOK%D!-m+Jw?N$9a1ugE8xi}@N7!nYT(vw+If0E zR)6sryRGG8l89e;{6mmuTrw}PC#YK=FSa%crJ)YzW>$jJOSi?Ws)uavl3MQ-*7%8n3t?EBk zzQH9YSQ>9xz@;BcAz(syABH#3zogj9mVY(i3e}!Eabq?G0goHaLZ1I$VlZsOdF~gL z3Dj(Ed{r+-SN~p?c`iQ=sFT4qjWO29byXcJ?y}Iqgudr(#K<&Nb3pt=yR+51E>Ep2|hHM1N~z zpT#_0)*jZq>r#8+ zw03BEIRkb(IIebhZ(5}jTZ!e$6g>aXo)JLA3-E-8UJfBi<^Rby>G<1|{J@{wkOjv_IJ?WzUhp*C|8F)jDp3>DL)ERJ}>RTFWL&(p_Flb!e#)RrBqP^(U7kY9Ppzo?lEfdgfBwJkMU&vC~PqLBVFp$ z{!6X=U-;7zX>{2Cj(TAE^p6xP$y-TZGm-SBQLw`XKSj0F+=A26@bOl=BFPi z7UZ4aO~yB(OSP~*tbh8b*2h^G+5T+qpd0P?@kwhgzCY+}GEk&0J-5eRJm#kj3^slH zR|z^+3{ytuUVW^`)L#--dc_AWnYLD$4*HH`5>6t@2iRafMPz}3c%cU;L&|_dV)=$p zuysjtubu~k!O*pFTSJ`Cf1;yCxV3WN7J7v%?`IOz>ry>mrGF5it2KesyMp*)_j6N< z^d{1*(9lAI34rO(TE6Ktfrs!#1nR-+^*Eze3=CWj09sN~jhRZ3l&%2{>eAkl=U2$l zo;4-xi1WX?%{m5DM`#wNEX_ z^1$duZ0@6}1Cvz!5PdMXi`ji$Yv6zxBb3ZdlKH!#u!oj1P{DDHmQQ5-!OL2Jz3j%J z19pnbT9KYS#4sO{Zt={C$H=(a9Nu%d%Jkj9ihCRQgnuJ~Ate}UK8|jXCk1NQW2vM9 zaLI@Y-Qi9O;&6A0O+J>>x6%TC=7u_n2gA_$jZrYf8Bap}v%-+u3Amo4$x2rn+(Bl0 zt(**u+08olfdPag04O?gX>W6Z^{DZ4Q3wGc7>E!O5fKr25{MuO5D3CS5QIYz1i>JL zP7nwoAb*5lgc(H$B};7#uC%nf9bkfZf30&T-qy#a=kh58t zdKM;VciJe@+GkNv zh3teu!5I3i1AN7uFR;0Z1A!D39dtls9Q`AEm=xXX4Z|Kx?LmFn>H>W`OMA%i2C`OX1h;=ZunF9HNpGQ@wi`1X&p^(drKl?^K`MmmDf zy!UJ?R1E%aEOlo;?af_YGvvtmAPFjJEpFlBjOV!`T#PWCnf?}Rx=mm zT$Y&kFW-`@U?SVFgp2hz#wxCAZlnQEi48fY$XBx)>`2fb8dc!Y z6i)e^v25E8uSd4$@iCxuq^{b~|l)qe(pikXLC zVjvQl;5)_kVA_TRv88OTBk-O{QNkoc14a0EO6SJ@`9jJa5_HNF3T!y?=otG(UWkCV z;k2uG?I-$;(YD0;@40(<1<`qe(RTH9Ul{Vqe3Q5$T!}}k`yhaLoKt^rXhb8xE0Crj z9T%I|G?8@W!La7W9}Yn11Ame!$$=IUrgp-RBc#nun;~`Oz!Pk#Ui`Zt4j!9FRMOfk zMZN6Vau?Wvz9l$dFb@o*JLP05s`v5~$3(0Y{WTPsept(3Sbv9=*Cc;XMub;0Fy=7% znA1Ta`kkfN=ba3c;cEe94l+z%6_r2YHOeKRyH?NVM|ejjJg=)Zi+{v-y`-T?fn#0p zTPJY@strZl!6QsUcR2?@o(RY+>e&k;GOc9Ntxhe*D##!}C=Uj%7s`*9hiOQE0SnN; zK3ymTn$Dbk{MAx#(*z`Q0Kxl_gu?y)r9TYr(Eco5dVHXSEZ28)?7|L9=}aY>c5HO+1>XojAsqc2He*$e|Q z2vnFUsyvBd5W_H(={_SMU@#aI1OXHRfq*d>2nLG5V2T(HVHk`-6A~g31BxlE1KF8{ zNJ?8y!!3m|#In^5dH27k^I5bqttFy=2>=W?nr6~yE2I0?8I$1rm{tPY! zpuubkK2MXO;&_5bB9n?;`s>VTfCKX%;=tsE0cL z3uF2y$MBCU4H!xL(r;>l)tn4GF>rZwS$n3dqU^&Yh;4>%)V2f?=NttHj6}pPrb!5e z$s+=lbNaYlQsA+RG2})!U~H-=7=X6R!@y|2CwA$G6sPYVyBX3aFRFw9Xi#Ett~$*G z`3F0@^nXtoP*NLh@aRnGKjTQ+jv_^0yo_yWq2F8(=(b9;Z5j;RXz+MhQAW);l z%j#Vl#$t()>!t0KYH|1E;Q}20YXBGR0xUDWHh-z&O40F;iyO?B5He4%NebfriCf{3 z)|a%q%yLzVG?s@C$J_Cyy}Q&v81&e@^08k{LyuO5HLO_()6cX=yXKAlF%EBajTXq0 zE=ZylEe6uGt+l2!FloxW1^Cu#A+C(o4Ph$Mq=j2`<^6 z2Y*~gqnccrwzZZ?QTfb#hm|4HtAlQ>`qKg*O%&z6sD+3}Zse?u(_nzw> zHzzTu9P~&F?6GcDu?M9tv4m$f50XWgDREx!Z4{sd z3Fj(l7lZ`jss>r(W@-PG)#Av3s4#oW-+AkOKf9@|YSwDW1#xTF*@W5|?5@0pJctB+ zZ&((nL$93!G-fD5bO9QzCmV5xNtyW>G6}^uE(p*W5$F-4iL91zfr`5PDs!P1HGg7$ zYtxb-j5JTgua6LSHJPVC3r!I%b#XNq<{Kd$5^;GTL9z_{{y8HYfYlhQ5YYqS=y-d9 z;AM^lBi2b0p+TB_MhmfkB!NG_B+TeqY~7u;^w%8d(FUy;Mlyt5DngW?olx z%0gq^8Yn{|L;pfCkJZM3Q-(?%{eOd+DNuerQrT2CwFiAzAFQBBN-9A9ld1~Qrm*9K z;tj?#JmSkH7-^vwZlu~IyZX}v*lObu6Uc~x>zd1^8<;BR&TM>Tw2t2*ch}k!xz?xu z$Qy+WOacq$Qb;AhFt%7Wgsr-1a*uSQw!6|BP=@ZFOltp46vb2(6Iq|8*MF9z=d2rd zC)?as~+AixZGX z;jdpkd$L0xY^5n+pDo0GH5&hA=Co(Sm~9%>ab(dmcMP zPO@|TV9O)R*usz`0S3l~m^Fz9A=S|Ss+SNm1r0*DVGQ+;Ml?@^twCUdM37(14SSHn ztOU)c;E)&+9)s`@1Amx2Naq*7Nrpwzvn?XGhy?jR5bl_0h8mRS=n>ACBCl3IxU93Q zmF9%;EeNN!!WjG9xDN({4}ul|WkVIYcMx9VHLeW?LzD2Ruox>cg1t$xfA7KT!K;-7 zAb1R52e2qTQ0e4|q^EY9=2gH|GDBZFNaKOC*0WMRLz`sjCx4o|s?vd%sGc~#Z0;D!k1(zdPN>P~T#A9LS?%=7fDC0Lp%w!0(PfLbF;QjD19o3~D_ zH)=v5382U#N~_Se9I+Et`UoL{k~SQ;wm0~W&wb!>*)#p$Kmwk8=)hG@OYG<-!_`cC zsDXWK2prYHbAL{>?9wBG@dFr06iM$f(Zv2d-?DT>{gpS%3Xc95l>pYKF3Sj3e3o4W z0QyTNq)PGAo}!aAV2cK81|nP_vb1A_bgOk&tHKLF|M4@U z5Fy3&#($J%(Sp}7@6Wk89bfQzMSIxAuzw+iVzcnZX!$@6?cvEm)p z_yR;zM8cIQJn@Oc;#o7&`NP?fqlG|_&q*kFp_ZIoR6)oFan?EXXq|(x3Y~tc!W^}z z^NQ4qiKEVJ;4@lA5^2Y3BL<@UkgAo@O&er&Tz@p={`?llQNEqOSPR8KUhV`S68-Cl zAR-7>0O-MgeK|Nzuw=l9FQFj@gTH4Snn-jB4FMP&?@t7JYdfEi=B0X|M{6yqdjP~TSib$=Za4iJ4@wvGtx}HbVA++5;#;HO(yaQsU02c@z z!GEh-)Rcn8Mt&Jg4kgncID0Gy;xOS*QuYo%utbpKVQQ1rSVoI^$S}ih{ecJ^Jl|3e z3{?o)a+nc9r(gNk((e|@3>&ZX`H-A7S^H+i@H(M)**m!#5&DTBjiMv+kSkJe{H3ZWp3N%}^>HfZr*z8Q>7{vW1Iv3H~x_ zcN>?j9gJ+;&?$x0mkpnY1BINg*$r;AYYlFUhv{p^oAK!!d9qYA_cRVwf{a3n1-M&~ zhdKa4&t#k3%9|-;nEP`ZO?w4xkM@*sce1EY)65KzV za?RXtFory1lkf`%5ROA3LfvFMklfMApO2W_T0;E7Kms-lj+3LXMQ}bgq)Cm?e~FvO z3Syy|^;*O&nYajyxCj|X=7CYTA{lh3!4%1`!xlXKjR|NY zy-S2Zu3MtI=3Hq00+7BN_dtEP4GFRshyDhlO78_1x}uZi5|bJcZ+{R>%6+>Dwt)8$ zAy7E~D%8|tq0*^xA)pdBjKC<_ue?wUcxVs;f-~O?w0I&kDWvG@2nWjFKZOiR_hRQGs}ZSdA=G@3^AK9D5P<50bozI;$442_XXC z9}@0t10?2ju&0vPQ-8!`PkEI+J#6ZdT)|Wxbb#vo8Kln)ekETkSY~p7-1Dgk@K8LX zjGX`j>7um+c@iq29t%nc1CHU%3#g%Ia0Gv)`+mW(l)|;gU$cVCta~D*PHt z1^gowQCM$+Y{){KfnFd;xayAz*=d`?9mivqAV@FiSuX|jM~XShifc*~kGhs|X#63!HqD~7g0fZVgq40)u>U7p=_3sk12#cP$8iB9&{!f)Sr^+R3`zSoq-K7L zq|KA4ox}-FV1M>W5k!Ky;rYxl)nOOBIN->1J{qtCNPuSmzW9;4^M3*4II8V`)L%Z|-@k5JmhYzSTZ=c}>=3W=%a&c?Unfmb zrOM_S*Px$?HenV=g}2!enVmCu<)qH6U3r}8Xcq_t}3Hz(U&vefl{o&AUiybuvL7 z)PX#O=?3|2&h`2BV`QZ!AzIQT*pSt1Fn=Af5K#KY##|J^it8b^FaoKz<;Vxk8jA)a zL}EJ8-!&JiL$pB!J!<>H4e2pG^Ey1zuRc6Nf~F8i5s&B{XhbccL#7Ww_1UaQVEQcD zkE7z#pJYsQV&@|W11+n1oRax7JCT*?^}-D^90co=5F4GsB<0}o*$GtPi(Q>>%YSz9 z3T@L5==A?-pe_!S}TSMG%1uz!r({9;w68Fqui&l?-i!q7WwmV6N0L|C5){@{yGQ zJNF_qBo+X|+-7q9-$sSsmGmEP?%5+eyyub5sX&*f-{3K8XT*5FOJKjbizCplrX`jY z*055vyhPnXP>9Had*9+_x92V&J zmIVER)NTobe(AMO&$zv8A8_-Flsk?kev2kP@XC+1Sbo`KmllK{%k2A4?r9+m-kApL z)%d?s8-U>QY*S`X7;5b~J+$4%I!;sZ11^OKjcLRr%Bqt1wB_U*ZGV)3A0l;*hJA-pJ9t`JX5G=LY#-v0oBqeDfFFeVFzz5?!ph;zi*^%w zS&#O!Bk9C?U;GyVb+GiAypJg3WR*@e1y?dqD_*YaAqd;ESdETTLd(XO__8B8bmh7B*BmK&tdbRZ4^2Ss(D0U+o10|c3{Rqo!Cve zMFgBEUUe5qxB$KKy>64@;a+M3IXfo`1Q$c7bPS)Db^GJwc9&t(7LQ#sbWJt+zlj3Y zO=!}8t#Ej@H}ebgNYX-PmN5!B+Y9%0O9M>y43CpNjr%`j;D2Pi8f5BXQCY?f6TP2I z+YVPbVN=0dq!q=LAX5_vXAA1lq3`s-kof6+vy(C#tYV@nLX~NXHZ};Zr>t>s z0rsQ35ApfC{$SPK0IK(heiJKWG9nIOr7kg5Y!f`SGHVBU+LG;bMFW7vpIMJS8piUmVpW>|*_v@=s%m9bJDeT^$iGMyhzxiHsMC zi#;OE@nT?+x)8UR*>03Kml0(T`9$5rn*{*u(^UPy(*p+K{D(*yOKS9H@+kB9bBUxs z5`c{)U4IaLO}}NMFbGI@-~Fl;VfqtqB+JG54~tauC+^1dZu&>32oIP@-{jA5CHlb0 z`x?&4U__Fyb(?h?qqq50C4PQ4u2LVWb(yYx8-go>UE0MqdDJ_}TUHYIBY3kM?`+L^ygkEc6u1!%0e*P9_qStk$nlm89bNEhT9SWGKm)s1qT{f`5@P zlVr@pD2=03>_UK>+-CXS0*asGNQDa-O!T3HU4#$xN>B(P#^Ixp*k& zCXl!~HUA;wlcmPijDkzwFvb2-XMZa`O#4lqOnmdNg5!KORlYg`bxN37kz|!Q?g%hV#67PcLgFgmYscP?*ddybKI36h1aS(SrZ#)c7atMpMUvAs4`8@ z<+G{tv?f886PDr;!L){}%W_Mn^4zbKnf#T)R?luaisHAdjA9_k-Hz=jOMb~pbz;Id zyC7?N2Cb6umu-qFd8e3*o?K*9~I_RB^pf> z{3|{2U-?o1Sn4|r3r!u0kbk;ynT4S+EYq(D-2e8&5>^DUln|GP6=GSAVnuzOh-wz0 z1N5d;c&4uRq!OV`NJ^L@l8#v+;zAEXnA<&*D${ku@m*;Mj5Mw3Y+Y{E+x!#4t&40Y z;1blNUi6o=&C;#r)v&47x07l5nF~-N_;sc}HmC3K&IFL}OpdJdxPNOVkWc#Ctrj)C znnwVjR>wYI5zheYKifUO;tZdPNN_z`pjjDs3lckcG+b9Gg04m4P9$-REOL{ti)DX_%kQtj-6EYi% zgb4S>l|Zl3B>|I-8Gp~ig_R`AkW!x_-b`e38j=ZQlh~BaV528e9L+!!Fr(c+~ zOdvdnL80g)vOs!pC|>IOF=P#_IR;dYDo@nKaI6*)$0b>*{ z#j_8c&crOG7m92yMx|(%qG2nQ{oUXC)Nv+YLe4~af_4B?K&-#K381zOF}JYaJ_O5L z7RY(!{Q(VvX;FHv*nNL%=O-<|#Za2z8o&myC~g+EG2p>IJ;XXYg`pe@s~ob* zg7nHwdX%1nHp0@mwGou8I)WPV5%diDz$|e$st{l{DI&BIURR{cF*J}5Pa0TwX%Jga4&8?b_ta7Tlen;4tc-w#OcKoCz+%GfCy zRD#e0HS694fRdaQj0HmDc&n?l4#$ALjz#|#h-jjGYg`#$F?F7%X!=;NJ%8$!%9+T4 zO|;~ch1~)d#Xf)4)4fHy?%#1MhmoB%kRXt5_r?~l^*FEQ{4&{9 zxo_Z*yihPYlRQF%DZdxuRWc)9J*mVi9VcGD{Jf6h^-AT3WDaF)#q-q18+2rC5pT3d z)}!wFuwsAxonR1J4njIiwmun3`>lLI_8*I#r@(NtfeR5w5a&>U(2K&%nW+%IG$ z{cSzdh+IM#AaQ*-bw4wFf&tPm$+VJn=lof+hNg`zCe~Y`r;uF8n*QGUHDpzq+swIG z>oItLhxcm2r|p-6Oi_$0GHDEe9{k&7j>brW*V2DVCYRQ9?4{L$WDEhOH5J6PG9;xd zQUr@~;P=21|H)mPVvmFt5J{Pg5P13mf~hnGoKly@=p{EuO_mXD=(V5&0zxswcq34< zOzR2P_p0-f&S{EiU2=v>REA=kN%%48V? zR$YG}F^PMmylhm{3kV2Eg*J2>$77#elEUoK`(+(Sj!AYD?&pj8%PKN!o-|YWE>9n0 zjCBL{8FtJ1k1P~3OLU8N?%8#L&+XDoVbUfwT2eI$+GRrctT^llS zCPCA7ow7fIO6Lh|61YuJ3a$gV_X6bp`eflEGj=`A?tXh)bUyk|MNG@sTiz=FW1@eF z-mYE11dX5A%o}}au%saRTVjW_I<~j3;70ohXn*vgYuq$Bk=9oW=Z787|I;IWS5)bM4BBUJ z_qf67!w|+pv!_hNqj+D62PM5_YWZIqLTOlonqN1L53)~gIzjNa!>IV%bz&v}v5{}} zqhi>IR{~r}GCyKz0jkCn2Z(H`3|f7QaajJXM#!Fn5m>>tk8e=n-zZG zS1@N;OC)4Y;I*1ZzfBH8J4m?YzVYn#*;qVnz6r?197^#*{U*{3|I zeF}%@mSAn4x_piCcgnRodBWNW4oe6N_(}@`6g3)>tT69I>!`+iLA>!e5TUiC0Y~sb zKN|W7hDOg1Jp#NUKnQ<4;F}P&I@g`9(=D+E>GBMBlv~VWS}8prx|cJMtVuU8 z!blTVre;`5U)}V(cp4Q&)N;KD>>2okBF$~UA7(IexR#&L<@1H0sQ2}9IIMh&@vI2| ztGaW0`MySE#KBT7uO?%y# z7evL23loRtsDsbRum(dQ5I}%{aG0P}Dvt-lG07nPBQTIa7#s$Ih+rUS2nYf}K_CDL z1OtIUAP|2r1cE_9Fjx?m#8WKn0nbwdqm)FF0Bm|t>~kJ!E^Wnp$XRoz!il z_t<}Mr!XMTWvtN|;LJ(Zh(v^2C$c$}oX&CCnlt17|3NgM5T`veu`*gj4+gP9X)$E@ zG#GS32R2-C$W~ZF#-1l+m?Y)#F<7dRt}Pk&l+yOqF>vHmx~(p3%F1iS|8<~f;#Km_EE=x122CbN$?UKP<2(iFeD0)5i4-(ushf33kh>{ z3M11%yns!_%lJsVa6D^IFYy9_EOHC=;#U(UI*x>GJ){ER;+^1J#Qva{F8V7%VY=KX z)5SuXF5LNplA1)ELJMyWRO?P|qSbfd7x!H-I2NNWyL4$MphlJQ59c%cH+hLd3Q>Re z%Ygy$y6as4<9U=vLkYk1fB#ke@+tP5)j~%_zkE79@mk0B$zBC|m;_f%W)PTwiHGHt zA`|=m{{1s;e^pZRG2Uj9KDY{WlGMUgEUpK^NX&m7Br!|s1G*kePj^@`iP=@ShFH%8(AGsc5JpUZzB^yCL#3y8*BGURenuk+iJ9XaU2w<>A(-%JngPW^Gt|HVm2z#U+1hSH>>!VkS>kxziZrw=z|_lv-_6t&vJ+PL zT_XfJ7FCJ%+V_eof!lwYV+7#9L;&Yy4B+rS6G!B#Im0|0arWUgFD+g}#dkfvceL_Y zfI_>m*kVR}dD5U300hKM1|n`a8;KhQETs##$^$r{H+brQ!yu^U_WcIbPISOfQfTHTl4oajmSXuI*>t=k&XHnZb)=tG^b=xh%K#2ULup=Y`Axt&g*87m@i z-3GMmHrRHOofgUUMI=e728-QM^QGl1T#nlA@x^m-2`ZHB6a zUzMRzFnSQga?Pk}E0WeQ;dy4jd7I3k+B`Oi-D5)r-++I~BCN!+(k>Ca<^cVLf6eYG zO*LPxyn~OAa5dTtHG8_DW)nNqknG3O7+ySo%c-YPgfVo2rkQM7Po1ziH^y-qkiv$l ze;W05O;MXU#`>C5wXYfNKwTZK5pAfwY^55WJO>>z&8*jd25}JSG_R6b5nn6Qgr8o^hI&+EA84Z_laL#0fIEGkG4(7)PcA^*FC)qq%gtY4NYuh^oh3kC~dQBdK{m)voWA>_HT_r>#NoH z+WYnhkKt?VaiXARscCzF)3v7E5@@xe|3^mfBwv3MIs{)B#txf_`#AxaFvM#=jyh-e zo1Kv}?{l|I-43xiKUSu}u^GVyTpK317%+;^gt^`rQx+Zq$*GO{91?C#jia^KbBdXZ#_Y2qNW3@X*lM_pA=P>yIX|QIk2)j*GsJvIKo+u^`zb4 zR?8FSMFWR`X?9o$zQ?A~vU1Qaz7N@`(otZN56A4&Kq1PAG7ES_46+95e zVZ02Za|CLy|1Mq*0 zx*DZ+iHfTsJ&;YN8MGpihEnzK!JNKFlOtdCrEBO|eFlUX(`Vsr2I%++fyd9y5LeTE zmX`qj!4TyMIBZB;7_r2KL5hw`1wB~v=`e_X(I#F{(9}8ZD+UZTGvz>0M`}dN$1htx z3aID4YrMn$^{rn$7eCw+b%i81HFJWDdeg>N3hfI416;Y z0`CpveAsCo+#2QdPK;zl;!};I&Z<#D%4nVYMaAPRr%D#^d_N0C5=`OqdhAUJ ztu+lGFq{1#@mlFaV1fW7WYCRXip;Ro9%lJukaomhgD(7O!k2%xL{NNY;!zV7kG{D@^%jqY4)0#5XlTyzzKMkPo2X-K(W?lY zaPMr<%qGByOoUT{50!o(e$7CJdGQh`qls8kng}ANiTe8jQ7#fKdF`i+jKHO^mjxkn zO&9#BE$*Vv>Ml~tq8yA4@THPq=02Y>LHIibehW7G{@u+*r9ywC_hi?D(`nw>5dzE< z%D-2m=5!d@7>UTl0`W3jWP(Pvisn=%`My>3OLG;adRNf}9hnnG%|=4&Ha;I^luctz z`;PP!_3vO=!bc2o1W^BPkru%<(>b#(io2eKt2#naSC4x}mK@Ha{;7JqOKV2XZK>TZ ze+nP{lSs=TLNtGz+*!EbX#}Oz8e5}>y-XG~Cm9z+jw_H#4rvlRIaGOB=nBwWz-;U1iQB89#tK#*E+S?hoKkm4Nyv5@fmM&->m9#z3A z&Htbc<8bxBKUY!@6=gF=UWrl-s%=d^Z8V&oe(Tm#un6OUY+{Dd%}shS4DRV8W^ zRLPV;=^kzf!MllFxMn{rSiG9;iCpIW0s=mGArHfIl5HcWN<+@Y$&!H{#8{I z`*311uQ3>ARO|Fp;0p8tVUqP8SOj@%pu--nv?qV4_K7o;Biyi$qSJ27>JTx-e70S8 zoL)?;vg{vF<=U()?VOhFS{oxblre>nh~}q6&%m3E|6_s^&R*prFpn1jHr7kqXb~)uq5i<3U9) zX0g0%fWUZ%MfnDb()>O(rl@8>#W<97vCV&%ukrNJ+rzQs_&X9(s7KY{q{++_a?iV< z8#VhYz8)CptH$98;IUu9FHBuji1djA+}GpH5#r4{gE-u(i^!G)mIq5VUpA4`-i(X1 zv@`|KW}R2M0=3Pn(=F2N zZkb)G65vpc8<+BWBZW*oZHE-D1g(|rB{$NNql78lH%xCrGK%^o60kJ6Z%e=JUk;QE zrg21Bn`4AV)6gx5yBxD?F@?AfKeT_k$3^R?JsO)O!~IE^tu0mQk>kGT_ed$1BhXYM zQ=jX^P65C=e$;q3aP1>n9+3^=*k;&tbOH|QXnWB9Hvvp0krkEdo0v|56wMmdOp7|R z7cz0xf_4W?%b4L22!>m(fL24xnV|ed`OA{fu7w-ADqtT1V_!5bhZN)|%pQML7TwC5 zQjj0@yuIJuNf1%Oj-#>mUJ7+?{y+X)J1eN*O457{K}!Gm-bFeRj>C+p`3UY_8m*V+ z_EX-A(>fJfAxT3#JZmIW8jqWnFaAk#crGegf4;q;x81(YdwD5>5dXgLcV@ijjzm-r zA4;Vq0e`-pf$YE-LZ_sfm7{;CCkeoUXaifb>Wp5badZ#)-ZoXh4zaH7KPw3B(oa|T zP?Cr}&-%#z7&8%yl$8YY)^eG$lNscc99klD#5s5=Avy*7syNHYWhZkXOdN`URKaPR zVUaGST|!>sL|U%{XXeMS?+9>U#aTt>$Mhwv`0?;_Unee=OPzP{`MgBn(Ue9x2#ane4I#yS&uHodq(&r*_0f%v31y_xLZC?}ke6-X< zo(VqWwWybuNN+|SXr6>oxa)kSjN!n@mD5ZOsVgl+jWQy}MiNX1n@Fs+#o-n(h13Lx zy{F`@kSGWT-bkCjIuU<{>r46!HLrnDBh0*saTwFB;CjVFadg;14vwY!<+4;V0&pun zw0-F_e-|GC@Dg`Ixp#7O(-@ApMh-%(nFhGxJVWy8uL107!&Kn#%V&$xHI%haOT)gs zbRV@?o7TO!3ZO^~SvNK8v{nU?*bku_hWAH-ye$zmQ7ZvlZlHg=hyDrus}N-dE`LwZ z#80ctE9q?2-@@b$waB8jD)3kG@Sr83)6VYjA&R7CU#2EtsN&rljM@4i z!Zo{)^sMc2ipGB@dzVI3ywH>=ItuQ=!r4$EdB(>ISX?%rHU-ql$ju?lgkDjKRjUBV zIo4RVFCQk(aeC2~ex*(UM*l#pw7RFPt1!&!@mz&-T=L_47KjiZSsWx&MXk`ogKzRC zDr9=~1I)kK(zMi+W3+{Zc=#|Llg0?}yQ9fjibOp6)!To!M5n$!aaB(05RdB9mrU+u5-8b$_#8ZpwTokfU@NaiN=`A;`=#V3KflMfUNT84ux%` z2N_!k%+r4YS4bcQYm1ug+NoHDYD*`r&(ZuED$fR23!JuGGwT^lTW+(AjxtFEX$wsv ze#aF7@#=!mmg@}wXv=k27A6wZu0g;u zNhWdH!*f~$~s$(ZqQrJZs4X3!r!TzHP3Reu3Bw)}jcXUZw$5ifeb)`xcQVgC?uQsN_Rkoj=&F`#uN zrCf+Up4Z9#CaG1e(mmNKX(Hp?Dq)`&gC>8B5yZQC8JI*&Co)p>M?%GajEtUSlC9-h zlorM(3F`!t>^7K0bA(A+0Pa*2CiTQH3AiYUu!H9z&_jWje&KoW)~NaeJuE9-#V@X2&M@N-QOZnbmt~2=RYFpLXa2c=hEpw^tHO#>CWXHCakLjT3ws3R634 zNH$a0b2)`ZGFiuE&sQ)h%QxgNyZZU|G+ClxsSy*Sxf+Bo0Rfqt0Sz8@+0a05WT5o^+8+{U#o%iNbU5lCNY@dl#vyivO+Ws|`be`_ci3Nh~ zC6iD!S4L%=D3-dnJn#QxUkdO29Vu|)WbJ#ThG@@I0FhfWn$*R-{F(TQXwd6U$1enz z05XOX5P*GfvLPuE!_2@88!pMAP6LAXe>BLNrEIv z5fO!le7GQ8TZYw1Oy!v6%DMkC~XjCX@aSaZ)z^g_CtT$DQ(^hRqn8&wH%%; zANJ4Q!KD_eV(r1LO4Z*Z?bxnL(CxTWv}b$t9zknz*itTxvZTyQO)586EI~ z%cYj&##buNNlg4TpA^6_+4W?Y0`y=&uw0eyyn3RYrcdY3TqdyQs8z!B3lA=xCsO>fxP51vpKB8 z=<^>>!askn@_qI~(Hi)w%J`#HvbTP~4m!wnp982KaG>ovtR^Exny*Ons|vkJE+-%# zIdZYGEMg0yLc8=HN$%zG*3!Y-mPiB`NR!|ro$KlDUh3*C3xlpJjZ#!gH;Sn8(9Tx$ zI!lr1+f(AGo(i~B&I-gwCR;$>VD)C&b9jX@TupzCHO#~e(^x>`PZ>F1u%)t^)pZ3o zp019>Fpo4z9w8gr%tM znj`5UzT-Sm57OJt`^mYN};TAYmOK=fh(5p}f|X z=9qusC0xBc4-=-c#dl4C=;~LH%dweM-I+UK@ev+YeG^?jfbeRA&a0}{pFp+JdJ9ZIv{oun#Fl(i_0Q!($5;24VqC%&Qj{G?=P^J_99}WSPH*GegQamO}fg~wR1IpFvem`Yp78s+Rt+wYyTU)AI}4^N#&#FYd&_ON#3)FS zT%rLGn&Z8Z27z_v88*O`gbJ$$Hp{9iGj)ROOPMJ2NgeG8!#Zl7Pm2nB+nI%;UDPqS zDveT2mr(a0I!OHg9T_(1_s@Ta_~LLoiwW=xhkk7V?bETr@!|(_Ovk>06%FD&p^g(O z&R%2(DwbvW0pv-qYm?O=^O@_YckHg9KMZQlO%4C#Q?3`y(iplIfzyZqsQ}Gvqazkd zl6AFCK?B`Sf?R%T5iTxXYZ-h=`{;RopBT9VYA7VRPVxAh0|lqgcjJGI=-f|-p{sDV z9c6)&Cr1sRzvWZ;L1ow;p+Zj>Ip?{qD{wscp49K8aASq^ZI$Q)$;K)bJ+n(=N+08D z8^hv)?VO!F#Wl528WNz>MkcLOkfb0Qo}sm)d@7fY(TZ$#ih}}v$i*WcfK=2IN7_zv zr8IsCc|?qaWufg8bsT>sn*`%JKgZ7)X-4A=CnTSzu_mljP*R5Lh?cf#;~*LU7e6V& z>Jbo*jETN9#B;JMBFLih!$T~kApz(`W4dU~9DeP}NvAq+{yopJ{t)!AtB(Kn4Z|P8 zHdYK(jVd$GqML@KKE{;=12eToibK5B6|}+J9DILR)L5bJ-MbmAJysyt z92uU5IE%#`Pr2%7B>`@FE1m65`EJ@xaN=kpj4&~hel}^i;1}XAf2EkSMWE|H|7)_9 z%k=_3nTrUNg)5t>fbu>af%R{yA9?73XORM)9MW!wFFqX9bb_6+QHK*{CF~fCt2-di zyP+Eos3&|mA?AN~@@z1UsF@S_GmRI_IHvq8?RPK5DG>{DFcE0vM_7xTB=CbAmEauR zqocEO^idKsrg!3ScF!!(c3rC&aeuBO<4YuiR_Qv4W&sPGt)kr;1PDVz#pPf5v}lZk2&${U^*doZlu<-7_B|;g%(7dmJE?^SDnlgmuRR{H`Mq5j^GQkRHMB zXgM-O)d%Na_54R6HF#xWh2Tdt6D2v=V`PG|K&Yh2xsnXpr$|fh4o$I<#CKf;88zqd zo9D!+_ge_Bh=Wk6Oe>b4MU1g{QGg3k{8^A25Ho)mKjwZeK{t4}u|yA2P?2GklB`e; zQXqeq*nk)?T}Y%vmg&TH`mbqfhud6?W}s!sYlZT0p_CMa{^ITevC{sg!^t(fkbUyQ zP#RO{R^qXY?LHAl$K;1Nw@%V2YZ4#k1idV7KGG!$T)!KNlRHmzDOPqabQxqOv$u(e zvbcYe;HfTOkDT&cBKG3Eq+a)ljD1)=%ofOQJOH{mXddWol1Mw4O(LGxe!03tab9LX~9A7&6KwrDkmTM^4srZ7nCl9N15*m=KZwNU#b!)-{+ zR6c<>^0(ILa-i%Tgy?7;vviE;-3MLS9-wLboUw4zJg7P5({X}v#$J+yv z3zYdmiXX(`{t(c1)X?lik1UKAJI==E!))+qFePjT!;l>U7TqJHoay}1$!ze?;kQL{ z-#h}aL?Xn*34W21y5E;w-5su1K%pzHrDqmhsFbxz7`@hMi@?)Qegw`TX*Y+^qi%m! zcjQLQ>h>mv>z-gLY9)Cs$BWHp!?gPRGkxtoR%;uD^A=(Pp9Fs;BaCO#ldqBHAVd*< zk$8pJ{-h>fR)R~NA^(i5n0iWGxwjx901Swg!lh*x8pYrGhOL0HOKpI!W1;(6JlSHf z^#JUnWiC;5XRWzP!jeiXKXyPf6{vrQ0rpYRO*V+pf`AO6^K1`0j|&iy)pmjS_Hct_ zx2dB&2tD2*inC6+VJQ;2XHd?*Go8e`p>~B43GYiR|1)dmTBMRnrpj=Uj70d5C5VX9 zgM?_tk8?nw(XAz!0wnID$jq{R0M1R)Dz&+X0CAoN#3J18$gnZC4t7=32rYla1q#Xh zft$HzX~uU|r2bZg*zMO7BwrLlJNgBIIU!H-aw$t2m$4)uq_2@_oSQjgv)piw^jK#Dh-USj&{IwX4FuuP!ytF z^?`_wc9+e{SXvACR<7bNbE$OyASoSf)n<$LDnU>g^{|H zK;1IS&Sbc938V!(?Whkw;!gni_LOp`wz7y11#)xtyTo+9!H5afNCpR)5Si^Q5c&|C zxsO~J1opP9_n4XA9_MnM>Yr&X&*>H zEA8VS*E7M#NnN43lTBuTgzx4wat@V;8c(n=3*)s-;!~clRG;Cg3`4hnDx3Ca)uhaQ z9-Igd_|8%@H08${c3G&%&o91Wq6Zw4|oC|{knj$sB=Jp$mp16sIOo@iz z7F(xr*wBAZ<^Y*v{68Nu>#oIMk0bWgHA zqBq!areDqI4V2vH73tRuK-1@r+mJt#O3o?W5L^@}1esWsjt3P&^IYV}#0oBZ>tHcC zV-C|K$Yi5Up&**`Y&vC}U^!JeqZ@p8cltSJ$aS@Geb~Nc!L=Qmx@tjL~y3PDuc1`Gr@Gf6+whe)?9Wt{&10hSq}p(5E7L%HkWb0!$OKF_*9B7 zwQCXwaD=%0*YXpHi~c{`o|%aD!RH8h3`rnCekZK$3*PlJEH&ad@a0X9dpjq)iB-4j z+a@q&OXVlyxJvQ57vN$)?ju+7>nTPO!9s6*=i< zbg%c)Wz*xKOC4n>i%~QNcG~Ouc&4M(Anet1A<)lkR`a zHt|tvo21QDi++oslPJs2U3vC)75>dIzs+9$YW}@tTj>DXR+2@Y`=1qd>V-Yg^hF*f zpP>2jF=p*l(f|9-ExCq-GV9|@LSZJW@nMB}^-%XqLOC888zewsJyg{dQ>$O1p&a!} zdqX-Y%^qhmu|Mho>>o`008U6u5Tk!lLMWqz5gwk!(I{G3G)hq?jRNx)K%Qxo)9g}p z&M}`Oy~D+6R3At1G9$x`i)g6?A2!k*O3Cwa`$K9(uC3sqnV$@#cBWjNn_;q=sbSJ2 z+%O4&m4@Ol(RZiY5HS}e6`3iA`{^n&c3(w8$5-BKV!Fo&$?9n}s44lac4dFS3GYlK zuy^8^d9}vK-GG~DGn47V7?kybiwZWg1K?k{GM-MBK zng^+1v2?jNXIz4Nd_`F=Br4hdz1$wCW2$PEwC79j;Ij}cq5x8f9vD!01OM+o8kjLN zMjRxM=&g~XxoD%Rs)yAx&7gn9?G(c#0Q|i4QjLm@tg0@uuNCFoYu8aL5cIfb)EV2K zcM2ag-Rfv7M=eX*d*yNr^zCO|%3Cq}GtZ2L;q3>wohIFhF-4a#;V0Y^=aKSajOw}$ zVWRiYbE(NThRLWif1D0O5Rkw?fkMPZQ;{?nj0Az&4x6le^xxJvA-GoFBV}1&f5Q4 zt%ix+Jo=)q(^XeLqeU|YUbDkbr00`m( z4IwtaT7s&4d=S0^cdYH`JECzx`hc7snv|Z~3nhYEi~|2fLqmTDuWB41^%I$ovUNNQ zdq1N7D`@)a5AuQ&fq3Vj>w_@%Hoo1;njLmVvZsOuJO1`7E1N`8+r-3|Qz*B5IA;8` z0R9YA`D`R%X1#p~f8i%BpvVWEPhVd97&H1(h#MX7M1l{_S&*E$ zE3>&UkgW0;8#^j1pFvm9T+IHCUOTe?Q@}mFg9FZBk@F(lX+~C;7fA`Xf8$v)p@n7> zKQ<055qUq0i)BIN8{ntnA|tYoih6j_d?8_#d4E3cBlmw?mAK(H(wECE1#g529mT-A zHK+oM)|gNH^cuSiM_NPxy8ynUWYD(L1}`QrhRpBPF5DwWn*j$#od2==ne26Uph(EQfDf5K z86{+?u)%+u3E7WL5_Cj#5IDb8)%yPm^T*28@zgqADWum z<$?;H8sLd zmuO|1fNFY=?%oj%XQb4DKdiVi3`P<-4XXoLZU;u9?H~w>M2XoOh(uQg*i3K&Z=tuY zq49ssP40#(!B+A~Hs&;yLTwQ%RZ>EqG;P@+>zM3KPX^D-@XT)gS{0mi*uz)B3kH=@ z1)lb&NpN&2d@NQ!=|8lZ$VtnL7dCC4-fmlZ>)ASvfxIA`5lPtrXUMRB_UQ4`(v;Vz zImHTVPSFdR6Y`X(y}8u)r#cm>Rh>d?KV*ODs#6;JgQ$E)+v<9v|gq- zOrXKfF5Q=&XFUiLXVW;VM&Lx4O^FF!WMNnwWz$SaN9gy~K{oxzk~ua__;6!v3XlpE zS)G^e!6lLGXRX5f#qvvee~-6kOSQdcFGEFv9HG(ZVX%Hhs0tJb})w+5Mc3xY;uAp%`& z{f}wr2;h8c^@=z&lZh{6kFa;2Jn?^`$5f?YZy&LvdUOoxf5MuN#vC5I`#2DB32t;C z6HLDnh2D6-yp&0u8_ZuCI|u&Gn)dO$|A68R9|QRhgj~V6q`(p(N^h9oSAs3@SITRI zIUc}`d=GDkjtyfAwW7Y|=o%22bJK970!>~AG|wG5NaW@Rm;UdJ6Jl*ptet-Y#EjT# z$pe9C3OUyjzuMf?pHi@jm0GXSlyQMtFVU%BBa{*rv^ppaA+b%6ba+w~L1`$-MpKlc z6$La=T7`giL@5zXyC6zKRYu#P6tyG$S(k|VYa}ss!BQxtpJ`}>(&`$~YSs~yp4k(W zdUjDvtDv;8XAOPCT}JK8w0?ijnA3HfjpV4R-q>S}s{khUGtg@Oy7Xmzt6xBG)>a(1e+;)8Z-2#C>c zJ&HO_6qGJ?xa}H7)JlIHGwJ(JGDgiwW-BwQ<0aGRnyb^tAIs%6!DeuskV5vd7ho>Z z9EBNKwd}~1@$C5A93!NHi}o4OvcS~8{3lZlr(QCTLGy4MFOV$woNvKy6QhY)4jX0>&5EyD8-CFxU-ru3x^J@bD)%!b4H696F7WXZS3 zR_&z;JtT$8Ij!YeHp$Yqyy)uTQxX3Xe7+A~8S;W;ZB^40`BGi?c@amRPJHEl^hTDK zOihKFN4s16@ekjcMyUi^g8f@fKY~SU&D*HK1fpa#(5jV%R&`Ib>O`Ye<3w6DV04m= zk`x-os7z(QrCxu>-u|khJuxNd*OBzvg9C|`JXIAbHX29&D^=~9VJo(CWcmv&w2dv= za^y!cLw-{d3dvT{BP>QyZR^pKJ#6zEeoT%;EM4JK)=@|;U?TiRfwyPnoQ=XV_!bTT zMRm3D{&v(M*E$F5~~}zGfRK@6bQqRw<~3NW`z6w^utCt zsB|{16&lgmNHwTtr@FLE#CGX-iDj%J&@)!i0O-QA4L^I?NX}$i(;~Hy-j9imL}GR`P4$;Y0Ln zyeTMvWR9jF+k{48CjNy%MpdVZ&*derfb>!c$}E3?dz+9XquU9$`_)tTVK(Rsb1PpC z_^6}h_6Xe261fK0ZAjlbER9&10dQq0`nmu#)_)~%X0#09=?M41R9E(Mqf6{e(3{sG zAP(hJK3@jdy~9^jCca8^9fPqHFXN}+g)SbkMbm@(6h-YH0(I|-tz)46g-H)0f)UKl zPnLg8kywHGSM*7M?D<#q%$V>k8gt1P64Guw$jg=V%*Iz`q1Qk_H%HNU73&An1=z-+R~?V@H0=05;^K1uv^EO-0#9eK`ASN1%-&U z`aEVTsu9{-T>SMAB>~Z*e~vI03Ko<^Hc1&!lJdAD5}{QV+5Ik`o{M}J4p$2EoDY97 z3tXP$5cHa{x3@sgI^e0op&!5{Ai2y_0CfO5x^x0?|41;4{pNY+?D|T-8ks}5;IKZU z$SgeQ3WA~Z+oh(4@TJ=p3kOu9-~7ex9a$@y_vynxzjLkpwG6Got`?9Yix9DNrj*or z1@i)_a}o2ro09{u`pFaZhTM4-X1sqhF0r6fjkP(D@H{1voT*j-F{7fkJ#}9tlRh%o z?^-#hz0|Uf(t&rQpXh=)QjF`)L5TZHwc>_8N5r2Bd}o6>Q>!qho%W^nkGNwGA9(nA zK>bc43=!wM%z$JJ>qS_Y9@rL&;u`lh9RyvbT1&IqB5j3>SoDjWQk4T#GNykO`O35k zQn-$jSkXDnR#rY_q=~I3paBNMsiyH|NB%yNchFpbMAvz_SQERI2&wSq7c8_ zR745CNwyO4WauuvrSDQiBa$3TEt%S(N(s#GMjQHpFWJ}A!4`Utbd8 z*>9Ug{5bwd#zMA{pmb)?a@c!+X1Hr!^+5||@~+pd)~~{Va17m5;SoZJhT02g{2=1| zc&V%h#=w_#c)YPRQVV7wo{=%-4zM`XUnDoJ_(LOeNjRzgR{HyyD(N1aB?Bg4H0x*S z?~9Lx$wNu}$?9D;zg=4s(Jr~Xv=qckI~pE#2S!!yB_!-oanAu0$%nCq7M(t!}azj~#BQRD&8EB>;I? zM6s+O?xC$lG1w%i5_$jw^?WevqXEoP7)`AiiR>ugTt|HnD=5BDa)~?ofnNc#ERvnV z*i4Twh_%3vIJ}B~jOcP7<4hxKH8~5R%}bT;J4X43TowlaP&WTRFtm;scty8U!v^_% z2#gVDb_GVaeO+Nny)1p0{O9vDm61jdFmcGn*-MF98RiaXcyx0DFHVq9V1R;czqa*2 z0p^@u3Dj~}{b-0wWK{Hd*xt<8OZ`}xyMX7P7!B;oW7(U3y!*FVAk*|_Hc_^=kl*fn zY(b5Uvt7bvM3U{im@>tI*d8LVUbj_18|Bu*1Nw+V%KlEk)3>vf#cA^i9d29Ar5evbWWTv=|fi$d=7qZvgqefUPn$ zHkpA}$9Vn;Tg9YHx~^esKCtfNi`ahW9w4@UFf(vIiW>K%7$ zeaGHf&FpWj+xE?~QYsqicF~rdgQQ6?#4=yD4eD@z#Hu5d*YKb#Ga`}o1y1o)vMI3H z?@#zXxI?o%3VbyD^<-f8)3o?RP_*E&$*Kw92dpopy`jfB-f%rGh?eOc0Dua$H4Bo*2?_C})oujNeaWOxdDxmYrmj z`1Qem-({d#=T0=BxJndWwCoVE2^g3JBRh)q_m9!sq1cRkigakhMh_Q+=?dG3{J{weG6 zy6CVM@@1Td49K#W(o#ila9Bkyrz+^bPBMHri&dUX?@jINEO`C zOD^csjyg`<;n`rq89eKhRdDUTB0b=*En%PVMXwV-(;-Sa4bIyShmSWz3`RF3@^3+Z z*kgk4GC1^I_9=XlGw9A33py%MQtJ4xOUGpc^{*hwSWm!sNu62;j4CBG5j?)|#koVu z1oT$U?I7UD4Ce|GR8Y==2D+DH1Ks<;f$lPNpmPKAy8|67?WJYvfsO@xpys0|@YdUN zzc~W8#cO@{>s*i=MyYOP8mWs|YRzeX877*@2Vhts9YAS z?!{nDDXO_lRkD;`aGPJwv`5L82au)DMX0%Yt&xWs83Z)fbua*aRc@8V!fT#?e>`L5 zVpYH7z9qMdski1Gu{gzs&z@}G%0i~c-v9J+6*;=qbK56%+2kZz8-T2)56MUNXMaR~ z3MS$M4}eH^7W&uLj8;~UC8|bZBc!ti3P+tMt@SkmIm@8I>Fhy!ts=7p%iEJh?G#(Wv$5;aFEL5 zJX*p@+eyxPY$%;1ZDt_Hb>assZK2vsw}K@0vNs)%0|~Z_rJXmZ7PZ7B&aBRyD-VT0^PCIxNccFazEa?do+8g|(bAjG<4R3kFR{W+k= z9|+Kzhv|f0dXyqBM4ml=LP+87?tUk>O5amo$A|gIP3f^8Jn>7jTJQ!Hz?cBZTdoGS z8qSe3xLZoq|IF$tGbUVu2Ny`84h|q$i60M$&rM+>5{h%x9c^vN@PFRK0!A0AC9;lj zT--vZrjBw(?2*J-J@Fi3Ci3nYfzib`@i3q2kWKx@>~Ep{8Hd?_3jLMacHjmq{e1?c z0lNt}v74lGG#Dx+g|f7x6pBrjup(J97Pn9$Qb|p$P5b2pVeTR+`$>Q}XeU4|#JQ^u zUrdmYH|dxcI`B`P%atLjOKZrr2D%_$-)=nC+tkega2lZfuZrW*HeE6KIYj@OlI2vY zNCdH?Ku{-**69a--e5`7U|&~dK_3KJBr?&YL_PDbm3p`~W%4^%RICzA6$pp_iF9ctT{WI ze)+ebiFIRs3eKk$OBaSYS(bVto7>0=R_n}Ke`z-rDP)I&vutc-44 zr&O{03jUaz!VHCrx-4d9Eu0(|#!$sh-VGh?eZa+X0@w#`ht_dD0LzNf7H(%_JpYN4 zGN?C-9kUdFGHuOJe7|*Ie79a()l?R-@ZlsQwTT!c2_Bnh zu~P3Xe?4Ch+)9=4P<_}734=VWjX=~LML$o=Y--AX%xZqu%(up7=d(A100C!K{n(Fs z+z&h?c%C@al)H)o=CFc&W2FL^YDTZbdNmHgz`$(usyrVGyF$RLBnBCzlwbJjvU6AU z@h}nFNnF)dK>}1f;0t9lzOZ?eDM)in@u=rVvktGYJ!i3A*Y1*I7+%be;dQ(;QJW#) z9;ttSZ-&GR84HAmmMd2UUanQS-7xnMyoepaYYntec)}SA%?ovneB#3tDJSxL236FP zml~LV$cwMp&nt=4raEbjmA~P3J}QN><6z81TnJ}=Kb~L)>klV>5$9;&63p-mX6-@X zyo3HXr0eU_X{29yFkRLsqd+Y3lHg$-j0n+xStA;%bBU_=EmRVB87&2NFfR#(E$wM- z1yV3VQ;Z!AFH4BdgI(1xq#frh@}UI69>>eJniN`k%8UcwDqGBY@|9k|j{$ngKmzg@ z0RMtTqD4HFA8-LjE2m)4wkCOjxtoMwV$?m+Lc-+?alqq+oeDq16)f%OL z9X9I!CRt!G6D1XE%b`#ANHrPlwHuANqJn;?;A8^!x2R2}iu3S^Oafx~;v^7tU*=yB z@m#PfP-2ipg311>L!eSkQ-9$w)ge8#@axTNWM_~j=13)k?8Eg=xoILn$kO47joFqo~QkQ@EID}FEU13E#@MBAKL>l zCTkA$P$5_jt6fCnimW3a06s*O+w^I_f{dKTd+Jc)o%(pDobwn#^gr)VN8*RM(P1ik zJ5cZf4#(z z0rGa%tt_7`TvfW2YZNGt74QUq8EAb^oa!$Xdf=5{EqxB5j;7;jpF;n!7_8Nvgtdl% z8{F{fW7@s5up%Ki6k{3rMie)jHVk9vZDkytu>>!eM9$4h^D6)Q<^mKM?(B~Z@b`Lv z03Z@)H&=-pF39UUQuiGt2rG*)MZ8Y^89{oig{7D<&-rqDT?JN+NJ&b6Vk8v9PqP6~ z))_Ja)+2(z`kh7>pe?Xo&BZEBN%JRYbXbx$*1ZoX0&6DJ1y-~qO@5!lBHYavT4gT! zw^qm^Q8*Cd239gec*aK03^j?HC~*h^ll=e@*hLshKsq)W-tHCuYd$A= zXRi51=!!MWmrlF|wV@V&ndlZCQ-u&A(JFi)yWh)DxcPF3e~8vWS;6W3vFADs@%FLl zv`Vo;T;s7mjyWD1K~Godbu1-a`)ZfN_I6bLnf?YgUmL4BU4)yCSutT^+w%{Z;zZ-V5bsX)?b}}P*J_d} zs863$Qx*+2(Ed7k(?0w7I5D$>!!%#atTSZjc9(ux%-8RyMno3nXM9F9hC?e)tV=dI zA~v5BoZ1d-SPHR!z_xk^AMv#oF$SWmJ|S_l5_%XX!jY5furq>>4+1#_5%a%Da_@{x zhuSS}VdBc#hv=&4PulaLDjvRtzIaCbrO`t6R{*dIH7|8puf7~3-D1xT4LkZcx@YpK z>AyDcLghZbEl8%^PU~uqhjZLOvvTx1Z<#!-qRtrFAPCTZsI(ve7pA5qty*{C{Ae}& zT!I)fuzY&?{F|1pZmg^fG9bb>*8!>RgB2ju@532PCkX5<4%)Nt`r#Ox)NX?bW&gGx z?ekxOZ%EMLDd)Vr{7GoV0{V$YWqD8aki{mzSnfN5gULaG85!KR6OKetbv#gg16zex zGj0C6Q)Kynue3G)^>fdEjctZV3vPh`P;$25zKi9h?W7d4p&Fn@=;+3E(7h#m)8X#VE%Nu|0FRx({ungAp%NGg^1=SF)9u5kEQ6 z-Omj%lM+Dogjp-(0f^4hRAY>%H#Cj}fZ%b(lJO(36jqYi&8e&t=Mzh<<^5 zq;W{1#b0MR-C5NC(iuv~^Rzt6|OTgSE>D2>3-QRiaONIXfViqj4d=;?L{EXTzazi%UYd#gE@@IU2(Vo6egt7-lwf!a!Cb?^>;!l(<$=qW8V6HMzmBN>SDyg z7EU*Yq5+CK@ri}6S3U`UL~pcTNlEB2Svi5|#1s{0;iH*rO9qWtg+;@^fy_L!fcZdp zmFd9Eg@SPAPvNzwq6k8v%;4b*zqnqPn1sBw&Zhv~jLY##GY{EbX=$=;x+eu#63eWC;jn{!eNIqb?Hp@ez~Pxz))`IMqeI;kj|NqnDXMHxrpuo0C|tefOY z&)Qc8Y-x4L$JBb3*mL+Q4>$b5|Wi-G^1at`&nfLEtMebQnW?E(#Os=jm z6n26>jX}ryqfKg+%Zz4tYXv48fy>=i&W!Rve1&s%*hx(_Sm8u6%q2lPA40yUFgcO5 zL0>a!_&9f$J^Q45LR4IfHW-|MOCW7I9RV634ft7HS2IR`0zeKIhDI1wv)bR}VJyPS zM(ywjN>&*XjY%vLHxpJOZPl6gYNiYuL7`%HwV4;4_!ObF;9`xe@;`(PbHZRySK}lR z$_fsex!njlo`g_*W()OmX{g@{YL;Pou=G;cX#HYESi6+D!=gBC_SBd>suWLCi;YP@ zj@4v?wP*5w4bLN&V3oKhPehojBZiGW8%^>0kR|VgZkG)kX(=mIYM0neKRSBne zy)LqUneYk&WPD@<9?KYf0TN;fma3DF(MG^Z`o)*X zfbmW6=n1eye=w(T)F1@%R5bRhq3nLcrKmuEUyHLlaWISSY91y92l`Tv#@wA0fF(Oj zpouK5Zv4D~cOMn;dpqbMZ@cVE^6GL(TabI$&ds5FG|g+JNPb9jO!8`GNg|tkAhc>o zg0heVj6eA^^-BGuLC>SJM_Q&;7<9Gn5zQ!Ab*du!yT8yk0iujh&*bVaEx?oLu!bLh z*m{*eTkkp37(m|9$i}U4$c(Hlx%!JiNSkA=9?Ao`(Z+$2@K^g3e>OXT5-^a0`E&N` zN$dqMH!PZ$W8ANKG7ES#6Bk@yOrItb4!)q8gwB_`bS4>+)CyFr;~1{q_*8;*3FL2U z3_*1SYEo>Uss$7t+P7v?bsz+uqDH8HFjn^j5Sq}L;Z-uG!kXVe`L?S^HmrdSQ(qj0 z%|!G@-AWJ?>*AU90}As#f&F+@$E0}zX-^mo!924lNl?JQa0BDtDpP*~ul%4iU3g6J zk3q%+%Li+bE?AjKAh?V~1}Fl+Xs3Vp5mts*_!yq?O%UL`^3!61g71GbdR5bZu_zA) z`WB5}z7V8WUv)<;65!mn^#pEMQ#C$Kk#qOTGCBGGz^Mz~rY5|7<%)PwUQ665u)BhIo#fD9_O*&T~|wp_^g!9C^7q#;4KAKg2>(dLbwc&<;6w z5G+UZednqqYJy_dpK*H6{Gi88S#Cr(l`C`L(ax+4!0H>?@6xtv_x9RD)hOp?ld-=5 zOX!GA(^#XC-ZEmDf>s)T(&{naE4Tny+~UY7NfxkCd)jS4mmu1Hd^v30?t!2KzTFl6 zJTm}$VrYUR42vPF`GY(&RY*dVmbWR7T{e7uZVuhaM-k zCnO)n6T#>M4T#~LNtPYFXZD}mq(ljZ;q|u|4lYBk_xX4;)%llD#3%>=!n>$sejC%Y z0$Qwe>+15!dd}Z}2Lmnc7o748N3(L{m^!45N7-l&bI<)>UIyR}$o=Q|N9qTZ$9~R( zQ0=wuU0EccRmIIeT8@0?CND1zAiX+3_!8hZ_%yW1NTP3W{6^qok;xKf>kuVUv0x26 z@n07D^aa?IZZ|K+0!Z2N4Bb}8HfbaDGb;!)G&Q*ZR?%f$nB54TZz{BWgt===aV;q=ijXnBktXWVm&9ua=ZYWL?~$NYsSQumDJMz#sK}-g#UA`&o|VNh27KkR$eJ1VSv%G2jKx=rL6IpTY!*(*+!Vw#>6(?1Bs=7J!qfok&`2H_?btwi_8PFu-K!3%dB6+e3ES~{CC|> zP+_bLx&}=0J%&U%?mbTMhi_zV&j?Cm_#!3tD74<=c41o?| z6{FshaBl1opq9Y)OkomO;wyzJNW~dHi=jU=TP%cs0V4#cCt~A1?(H^w!9|`5Jq2HC z3`6=)(ZxrVM$07q1XB!gG&|yce}J8Aq7JN^FhvApdjNt25f^}M1Bf{*IoTq4UcL~7 zqa@F+3|Nc`2#j#^jF+GU#R2e-iq#0Ulw|R1J7+c9+j&Xo0o!&VZiD*&j4_^09g(%4 z4TXMxsDod%8C~)=RZ%d1nm0iJa|t5*RT%R=F$p~JS^~<68jHmd%@;Pw z`>=-I2f*xy*Vx9pAauPrDC0W7c!%2H*2sl_^^)xRDYUE?B_lR$EfHn(OQo;~D}`Z@!^9HLDDDZZtal}Xa<|@xz;G;H!8N+= zHVI)ULltI#q1An0u;$s&ikWd|H&+PL8c$q_%WeoTK%K%$F}hfU-3xIn;Gk$48cw=@ zk6*};5T^<>{Qhu$g!WM^!vqgI6j!%I+EbixMZciB)sK8_m%7*A)1>Z+tj)y_>LzNJ z^R+*=*frfB5i7>fzzXuxeSn2{K~++peIY-U?nU<_c^JDf9EGmX1=U)hTOmpz6cUI+ z16=cd;gbRrERIGC+;ppf(w+sMdBV>Jj*ndQr2I?J-rxz3B+*2 zU@$&nFvE!%&NL41ducZ~bmdk?^AQB2DJn;i(j`s6SEmW@Y(}Z$VsqYnKdUYV& zk-sl)_$uY6V>m7prWi<;QP=F3{)@Gv&ye*p!nr{gvoYQ<0ivS^F89glvL1I~X`APw zgUQW1^SLI@tHW#OQg~iLdpoT<(tIH8Db6@+@+=f!w5l0KQ+@cupL9KVB!A*wNqBJl zOOo=GQ@^Go3eeEHTslgBiUb1}luSI@X=&-=CyhPrzeyCex}>&Anp$F1dr{R2k?cOZ z+UrR@S87CjomONhe0~@QFcC+Ok5{>&m+Fvb=Ye%R!YtDXFD@(s5>9w0|NT1xe>Do8 zr48~e?BB0EaDcsGSHW1ajQv%G8!6i|jn-y@3>XH45LNA6 zO`hef*IpAK94p7TyoDYeGHc|V`i3 z4I3kAxTeX${}U7XuoqUC#ebP!m%(C!df8l+iKB zPd4w0+J$PjW2Vc0Xj~heO|I0x!tNOSIEj`1gN9J+zzhtC`j7n{R{tp$G}2|o5z^Wc z$isD~@sRG_Mvp($uYtqZzZ#Y^4O)-w@U!ECNhlQ+udnQN(AUSt3vs-_Zb`AXLBRgv zqb})^u!3y?WeJAZidt9G$?gqpIP;>%%xSq13frLNJ*=vKn@om{>>peGM-fo$ZdOz< z+jgiara@wB?0f)p2dQ7On`HD$>XoIJNY~0Tl}{O_{wA>t{6@m;*uCDkByvW^6U0lQ z9#)iJfJ@}AL=WG5!6-kI*oYV-@ilXghPrA|<57iZ)mSti{P{Mbd(D-9jMr)E=-N4Y z=+2coo{YCh-D>QhVv)r1!OLP`h%O7e=T0&H;9K26n9A<^_S>%l%K##C7e z4{{JxAnP7{f&e({nj9;w!*6XFF%Y&`UJ$BAoeX?`Nsl|h2i5K-jm~BktaG2i26_F9 z?NK^W4CHIOj-RYdxDKyiHA-%`Ub7NTFQwYh;B6q+NVCl$l)>!_cc~fi0zY0+JetBy zk?Vv;fF~z4@zDPJLaG5+QNI*vvP{g)i#Sx1h2y37#Xu8ns)r3)i5=rGzRFYt{Ilu(Yt1` z_Ih&1Ucc0h!#q8B&@)~FQeVku^1a3xf}n z7Ra}{u(P{xREH4Qf*vyeu$2lqWC}NbWSUB^uoY7)WHdK&RnM`$5;D4nbO7PpNoR#+ zg3QNNJ_uN)@M<>xO{x1{LNXN}ODfkeJcMQWWqZt(elycvdkWsQ$Idm%N>@)STH+5d z!N=N=gk;c&;%J}e{&W-gnp?2RMMK34ro@zr}pwV#T(Q_1kECIzAq(|(iyM%b`q zmkZ7d)ef%SV`4yJRNjrAKPXWhFglO4#hxeFefGmmo#mLm< z#Z+lbP_`g!70yURV1giq864Vqpsj#r@RCR@&@mO{x^Rhk4%i8i6#|tEDBz-R-zf-# z+XpYC(DOWc4@{i@4V#7+$B@4D3iWLmAM0;)Sm!7>Y6~~!7{YUf|0xZBh>jb3jU1=g z9ls;v<>59|%QSxEvl2PSY!Ee(CxuUBGQ)rsJmTo!4C&)l1dj?GrzsIce3U4WmBB%g zKG>P{JB;%Tgl}jTLK*54Q~@Iw_)F0sCb56wRT!%luu@!7aXWZigwhh1c298BVpiUd z%Ysy*0sB}z;-It2?59V66KroecXojk;e`B6$*6YXAp#@Pa=Gn34bFyDaN0@N09s8HsbVv%E_0eGsshs^As;` zJO8E_L6XRuL^}~^J~;jv#b;nR801L=ePL#6&;~=^wi_ifQB;P1jHZmd35@k2;Nq}dznTa}*^AUod%+(W4IVoeD0Y-`%+=>YaWQEMJ^Fs%-^38xpQ!=d3 zspdFaI zLpvh>(7POm(V1{_W6i7+1r;GiMEuTSkBgfCN2l?BmJ&v*F&uk=iW4yx_CdPf2E*|k zk3uycH=&FJps)Zqf`vfh-w2f7jiCHQf*9w3`VNHQo)e0M@oGRBc!j_)>Ag%;ED80D z^^Io<{IRzH<(V*jCwW7smCldo*N$zb4SG6KtO}B z{`E$Ghv;H%uw^KrmH?xLbA(Y0f$j4pknYMrA87S9Ih}+92bvdR{~_-mCG8}U$`6dU zu?rC0)($)LKZ-%ff%+vh7GwY3WF`R?Ut==?SwnAN9ODixo{Xw`xVrps88NxQH%}Q# z(|y3;!E(d$|3-etFLIr3um3_fMlXXz1JQ$j@g6%BWO!QsPSS@;_vyhWdCtu#bNC0+ z`?_Araa*bb4HFDh8X6eDQgozCS^ls;`_dpZzg=nqyMRCVQUWOo=>89TCjSl-uCMkR zkU~R-lo!`tm<#aYq|;J%(m!}-U^{U+L6-1~e*^5o!i%LrbP7r`QEB=I(PRq3{f7;I zl9_?!TMr{KVYGldZirNtafJq4glOnMg8!Eb01AZX{RILMg8<~evYM%wJluc5oPt_G z2+zxV0!@INMZgL|ndmns+ZiC@DBcYG3yfe2fOh`}+Kl}SJLy}^CmcdFNZq8te*m2j z-@t0JIDf(rUsDE&_-6G#Bs0A;IIBc|Voxv@b2OlEg57_BoM=yf1Kz5;KZS4Hp67xN zfq)+HU_StlC!dU09;_WDm1qwB$7hg3+vn(-Pp5xz`;^xywqhS1Ii5$K7rO`?-7&LAG*l%!UZ*W9ub8m2VGIlatTwGjFb8TT`Z(MdVg!rh#uQ{_I2qX|p zAUsBg2n2$E1%V)dK_Cza1_D7(00AL@Kp+U<2p|v)0uUC1$e;*G z?b8AG-qythJz=x-H@Ce;i=o^$_xpA?I1RLmeZqjTw!sPKYp}NS6C3=aZEGyqV1b_P zoc|hX%Wa445yd;Q+f$^>fzimYvO1$55DgLb(w^4jhh$RjMA|B;{aJ=1%mG)~&9`h0FlD z#}@(0#=VU?D>`}JeyIR)-#<9}^$ON^i9H_Usg!NmzXZf}_Bfg-es(~!@$jxTEe{cg zDEweHr04{mj{@C3$&bMRNwQNY((U2JZX`PPPi-iQtJ?fP+~w<+7c z#6r6Ez65)`rpew;`^OITv;N3#-q*y2RAtEi!3eumk52np{*Hi57BXc`U=%CQVdd;B zjR{(2R~JoM6W;3`{oeI-5wI?@=(cp{_;(N|WhIc$_P218P;rdDxFm6mJB*5av@ts9 z8VlDNFe8PQdAK8g3ol%}}lbG!O1amBed)2fkjW`v@G|2wClK$ywCwqi`@5{uUm>ir3q)FE z{R|ZkS*su2fn%MGA+aCDx`SnMurSp$WN<1tcaH}<`v$CM1)l+w&{I&G)l3P7a&i@y zk52V}CYk7jrY5=Hx4Qj9QZL@?zf&d_UqbbR5#YH~h5nyd9sh;H)KDDmxawMnsL!VE z=_0b~4ZN5Jsj64$Rm(CBFwIjvBa}5msR!G#yi_kJpbSjsmQ_Ra)T6+tyg)T1g~v}l zv+(Q%E)|G~W|Tfv)i*PBD1~g|miGC8LWAUglR72YWDo-wp4>>iFv3~fSkS$)g%=w2 zufh~8R;et(TGUetGDL96*98V?p`PIZ8*MM4_q+p#jtAQ+Dvuu)m_=|4g1i9x^v(r| zX=hdhXgoa=lHs=cePD8@BP+-P*Tql55}j5*wRWVW^-ymSu&8@@J& zqE#$QZ+~Sb21{qhjNdEWc#z)eVD2%NFr_D=+4v(+wWuf^HGxp_CD5DveA5plaPl&v zJ1@{3H14Ok0U7DLkmf=6Zq7R}W2!a^HH!!&A!r_xc_lr`07Bw`` z!?plppo_-B=TkWyV^;nv^rN1{X|FO_UPAx$k~}yZpR=gd+Vff-b*rHm+RVZVU8cZ1X%5%9a3uUd%A6m)aglThxD^3T|2> z{aZTPpChtxq26COk)_ZBu7UJ_{f$TWc}ihABsh2KftK?5r(qjfPiH00;qx>Kyb+5O zs}Imgr=e|iUpZ!zd?rK0rarcA&vnQtBmM_^*PEWH>=KMI` zdV_No>}c>#sQfm7~(h*eFR*R`*?j^;FGE2BBd1FV2|TNSlD&wMMK!495~Epz6M z5$0ej_TQ1f%(n=%$bqnEmbo*-n@z;Ne^Lg@REq=@EZ(K-{ zTbCy02sUctZqM5G%TM9Y%{Ly*1M!&-4Q~SOT-Y@I^16^#KiQanfzFqwN~|9l+4lT; zgO@8JR~3@MWg*(-j}Q3jznaUb?YP_`MtOy&Ke52&C5;YliuRaR2O{PiuDBsQDJIHk z`DBIBt5vun%5vTorI(0OZDTp+LK;VYx*}9vuRQWk`Ph|HD}k<@EzDB4yb>!4D^JEN zZG_2Iky_=*3=HdkZ(E-RSpM`t1?nKEJnw*RMqv3_((`&dpzm z&Nlh?0t5~$PXfB|eyMbr{Pk9_8N^m#>u1yz<&mlf2q%Vru&4{4dai_dl~s~w#4JU@ z$*t0n9AUw__I>?NEq{+Z5wEH>3P}ZrgS=fB#ike{suCkFL?{M;1}L#xGMup5sNwj7rnlN%cs|Nr$GkEdMYD+!N|yjqTb?j~b;c`}SDZ+$iz%=j(>OFWy^ zhqSn}0p~!r{stCoF}{daUWg%8(SaB*$^vUDMfHon9}vc3sL@_LrvT+rlsm^)0!5R= zuTFf68@HNnaXSNw*us9uSEnrg{O2te@6;U@M_lMU2MkvaEAD-uo)%>Zs^VY?q&>=N zg9255Wj&WD1)e0{fwC1+oJR$(_S1Uv)lp_f9$*EVud^(7;!qK|E=KktUKE-5C1!b; z>`4`NiI*+F?ia<)kuI#7{>OEsxcdqgB5_thdLLgRz3hZQg|wt59-b^k6>(mwl&nR> z`Bu(_xENcAZxRs20b2otxMKv(WL*9Ni|Y@6U&N|wi^5V<`*3%HzzCA5dpx||AQ%*8 z0o~zn3Z}(*{S2^4Ib0FPT#TV+(Bbf6h7~^6UWE)4Q&f5#%#^YS)$k?a6khcpS54R~ zq*n4E7_SjB-0>lt!6SO=^|e$(P6DJWTRtL8ecDv%Yds@?$Qjmlg(F&+0H*~TD}_&g z9|y3j*FhBi_Mq3-moceQ))x0|upwe5HL8Rojxb~lDwTW@4tzW^5N#+C;gboCR!ya5 z{@_VN(Jaw?r|CKAL z@>uXhoKi0cl!~l^BVIsdW{RI&nBWnAMCriEQDG!_nZmbwQ@kT8p=_!6 zG6k91qneyP!cEv2uOetMVwuRG2@iM$44xR*^3?r zi(TPz+{vcy(;4y5+$#WoO{vMXj?>;DC4`s|<}Ne0$4m&lWC~6QEN^-r+qjaCV&+I9 z8mFMV+5ini$pt>shxN_u(uZ-zeGs!4hmcF%t_FWN8Al(T9{ZePJYq=PS1?XG%zlQg znwm*840O5<%uis6xRpd(e6+Z2dwU$m0&A(}?teI(VvQBm!_5YNCO6tV#le69K)P>y zB7Jo}6S+BfT1Q#*|Dm6!Cw>%8O>dTJ;<~8gEPOI?ssZYsZYG)r9TK^CN*scgLonr# zAejdnc`tsz*?dD-x$}o8`@OdzQw<_(5)$O5hTtTSiX;Jn77aO0X=&0T0kAZ>E>|S- z`2aHHc}yHbRMHNA^eBel(#+=y1nJNUhm2K}XrDrJPR!Qo^gRB`@uF^oWSh7jbXwLb z9B4{dBJUtj=3{=)?i5n7NITA@M=?-{DvgSY_@bc`(zQgbjT=QAhVit>nF=$4#31_c zp<9lk6$_(#zoX>}eXR{dbbOGchDwnwV*Pxe8gEjU@OF@Yz&si=x*^OtNPd0pnYDBd zM0hA9`SE5zIbSRsI2bWVINY#JnT@a)q%$?{6`MIF3W_#%~}PZ&Ii zG>$-Cr@O?D&{r)`xKmOw+-*=sca()~_SoOvHFj9@a1<%9C+h3qX&Zt2)#uh0i zPm-L-eW+(BtR|E=9%LWX2&2#mn{l;U*GH^w^dge7cQlgy@q&+CFFaS3r-kvvH7>>z zr*9&E_aFih6Hn6-cJ3nyOU3-qwSbV1;tpi$+=aH2MPdxYNV@~AQ*ZILcaCS$8y-~B4_OM5p45GvGym>@x zNqr(UU| zJ_NdW_+^N}W+BS=^oo0Ka9KRk93puhNV(y7No0*@%>x^4auf14bz~l*I^(+qGOirrR(zFSGk z6zCZ4-$ByR%7JLlNy|Y@nP>8sGP`oXWi#pY$QK~RQnsPae{l**2MGqGXa+{3qb`A3 ze?%Ue=vYV!mvSFzElC9(6ls!k5l=^2e-8U9YZ^sB!XfJX)N^DI8)P??p-8{Y@yC#; zg5>*HsyRfhopgTW5|C0s2{-B#Fh^BCD9Ip9B>gPjLu}<>0^lk~z~qz|EpS*nIplCd zH{EP#OAgP}Jg?COM&uYo4u1(Sq!Hxce@9T7$?y6jbW&mo9{}@+vE$5Psy7-UXF_Uh zAoe%rGILyN`C=+@kRwa(l(aq2LjU&d4iS}v#JHme~!^S zi7=HLXH#%*AScI)C5MeAQLsZ_@`A|nzk6( zj;0E@?Q71l-?@>jCF99SlGyteB>XIHT#+Dg1Fs>rl)6WJU~l6bOPmMzCosB=nWp?H zuRw7jmsj*MHjuuHq_ZP$Qzb}%fBVd))o0pJNv*WettIm5CQ)wvvr#WG zTZ@z}3Cac^RjNt&o!kNfJv&lOO86j6Y=~ilKh|JdT!xJRLSp(0#)xNQ-vdVGU~Czg z8~xy#&ewn_0L=w4F`I?wHTrO}%|5(F=o6}0547D5MVgZ?Kw5=2<5N{`fBMu6j3PJo zBW5Zh*!yhPRFRRMk&m7;%5N8Jyi)f_=HBa7Re@ZO@9%l8bTDk-qLO@KkW3u1j^oIc zt`?-MqEo6}zKqm+R0#3#6U~S_g(G+4l}lsolx$z7Bed zWEbs}1Qd(Nhx7CXvuKfve;nDwjqGKWw)C}1_&sWr{pO`#v7_p{Ci52TII%u;KSA*p z9d=7H8B|07Savd9ZgX>WbVYM>g8-=Fw*ev$1QZY$3dJl(LIfd4KN3J75C{f>a1aE6 z2oMBe2+{-yf*=S&fD;g62!TWzOx(=@@iGPTZcSy1A@qVW1>>`^e~~G0lLq^QOd$oL zkwtcHr>8MRUh%DpDF)=8wTUTAI36iak-&L}VG5)&06Lh$M#2FKrf5@tIe{t40;Z@d z6@|o`2Yb~0tVJ$xV-E}oATi$>hh2(6o$cXsE(N0pBOa(5KG(9Te(N)azWIS$-6XID zBI{LUjrlo(L;v>@e~}^~llK|Hlevjv4=7&*zZX!)#=KbskDVf4MR2fb<8?1vKQRM@ z6NPz1@L5Fg808Z-P1zCSyzGPf8Pyw8{mV_zcG?Nai;v6 zIvNzRM~I}c&t4KW)&h4|bdF8>O?cN^>1&I)QDkEO1nXI`-$UP#voG_mj~7?q4AFAh z^7-hd1lR9M#a-cPP32$F(8lU#N{E)L-+uWZFZzAMgvb3<<4Zjee|&2TlD*iKr|*UDV`1JsUDO!q=SQo)_o}`D1A#x)_x~M{CZ=zO-cQE- zx4$HTn}lWLajV0PBx$3LMi9R#8#SyVHZg^W@?XC23+v42P}1i*DalGXe>fHd3Er-FoJTXOLLit5?;v^z z;{Y!~$VHDel!H#{Y5)!hVf%Dod=z7%qnI2ob7@Wke*RBDGIkNQUDW-kHnp8Ag7Y3O z0bt~nmR&DK+$|Kb)TqSIxLRkUw=JW}a@&b0o9DwH54udeQ**l0)NW4bTqmEUypT7L z?0U)Pe{GRn%ZQJf%P^EvJqvox$G`=>dkZRbSul7j<^H!c+(R!RY=bRqGLDQ2wYe_h z4|316#ajBR%u$`X2uDfyU;i@~sricpRph{RLYH-k7t`s50CjbEoN^!Lpr1-7-`*8{ zhh<>zLQ!FK?i~_{XW&!;8KVLx{+W3qvG=3*e;G49A1A6`eB&M1#N&rCG{ro6!vSd? zJwA2^IvluN-2qI2|I!`m?05Ct0bpiqn>$qEj!1&T@)KyA&QdQk51F_F?w~1~0u34W zQ^fZb8|V+H3x0gBUI(MOq}KY3-RzUr#C7w>5Y!WxWbAqDSZG%V**h_x+#ZOkMs ze_0?-8XLNWGlKvOGwLxNkpL<*=*i?67@!xHuakc_PG*^>g0N1bk`|QIYq2jcUuQ{})a8!nZD+3|IF<*ZWO+br5C_&-nhX569LUmgf8-2Y z!Rav6KDxU@tL>*KY7*SeHozNda~j^a;lXJLfnljlLwt58L+3MO9)go;p{6V=U#8(v z^z`{MU}PG!s~sAtiT9IY!i#>`4MMjyM1!)12;AVEB>Jpt-)sq``nQMk{};`%+$4q> zVwmpXzd#@CWAQ@g-e$QYvc?V5e?h-(DB=O<)YkVfB9sgt26r8e={Q$~{&z4p?bfDy z%wq}v7d|%V(4@vIro67tR|GOn+#SlZh z0f_2u5ldQyxnVhr?WY}^&KN@fBrrn(-2{U zbbga3IqCO{SM*>L@?j!y&BxBg`!HRaDvJe(>FS=3(@2Gq-;FPR(XBurVTHLV(N#<| z^)g$H^6PqWO22{<=jv#kQYwCJIrtk4Q$Um}ZsA9kcQV{+4{mke^ImVOJ0D~&a^%@H zi$hc~8!vEXjFM=-aTG6nf1b+-5-)_4z5>WQu(YhXkW$izK+eeGU2_;=;+_ufg6-cI zak~IN|HQ=dIX-5@*JJ~EU)t)WG!T(;UD?c5Adn0k#wz&H;hQ^k{Cp052F75{lyTA3ge}imkX25abAF+Xc zZ0$E9vymeK*}C}d-fxeK+hq`kY#buIH8p94mnB<{R*0V=1*2#MpP=z}#Dtx9?GX&l zQ8VjXVH0BzU+p+&@1O-glS2HB1+$vL&-W&i&quuqNH5E4PZ(w4Rp3Yl;ErbTI4Tu< zi%>Zug;FL6RskMse+JGKizTj#q)+N2D!#cZat=d~RIkOL`Rx1=C|Gw&@Q^mT46KG_0Tpug$)H_lcExkb~nz8L1*`f zs7)SS*wDH>g_3Nv8Ul zj`g7*aeUI#!Y4gX3{F=I@|JHkNb~p{KKb%vh~wO$455=3eW5G*|L+I^PL2S^*%)dF zEofd!ziMNTZ`dKs(Z}ZS>8`d6{dz#A{N5h$u}IG&KC`~$u&foIMguDoM;;r-c6;Q- zQLK7iBd>j1e}C7Gs_*WeoTKm*@5J@dBl6LZY#>f>$T3ay!n$oP&f`wye=(}k*<6KaRf0=>;*RgE3@o9+iaI&3N_Q%He zj9WzhOHD1)Dq3#{BO;ohRK4X>j~E_5_zagWf&GL@0L=&kW-qg6;4~9YAhuVJ4As_6ufagZHV!W?0HL-$kH7b{pSiVm0nV`eChT zgR)I|^ecUxp19!LdtObWA7up)i#Ch06=F*Hf7Cr9_9%IUs!dBP!p{Z>r9r@wg)5q< zA155uWma0AVC7WL5c-M8db})6>Scc|=vN5P67++YN`~_0OXNY=5}Si1WPY&9!OxFV z8!b$C^oOu$#KgV!!ldAbSMUS#6Y4QAU+rfy2MQa`?EHk*;gp;@zj->p>FMz3{L-H& ze|W)Cq9|Lf<=DkS4{N-;3L~GF=ttsx#`@8oV;auGiyPbHu2u3xC5?`Rn8}8te+5mK zw1H{M?@fD*o)8R|)>z`DHEjaZn&p^#!k4oaZoO$y2a>`e5io#lf8S{vx(Oufu#D*5 z=J+u&PeL88bgLdI{pH^q@82O)yG%Ruf7hlKC9bA4p_&mn5CZ>$ALu1& z%}cb%OSHvHG{8$F5$_T`?h?V;B`UB>w5WB7#(>Ans3G$`5gJE;;^r6wVYlM}e+`Nj z9VCqYYq(y%jQ3Ozmdg^Zb(Go_+B&X~j!JzovikmJF3|L7@Mi5%QIWTy7^&w00ct3~>%8GSD-~sj{Y3Rdg zs#obrFnEI)`-~DM5#gg?U+B7QQUte|h||NKz^) z*nbejuVum6BiYVdye<9!pgjPSA%@rw|5lNpi1Ksm0O1~#dJYgZCNc6SC)aYiu(3G{ zP|8&N;1f{bKHYqbb6uDS!AytxekC9HavHE@qY;qTqZ>o|scfFEw2&9?!~FMx@3_G{ zM+Ykufv5)7k8*f9ul%9Ee+5GJ$MA)iH4UT~c*dQ6F)&WusHf-7Z$>FHsup=4_$obE zPKKWJI@h3lc@srp1kh-!w`{6hSWbAlX8b?+aq`Fn$bc}Li8~p{1g9bo47on$yfFbW z1SjcX7R{qBCg8T1K%%=Zq1x6}}l7+7+^v&&29SUkbjb2TyZD}(r{AY=CuNpu> zPaB;#-3k*Mluqj(2|l26`U)WpRLD6wW~qTt*kw`h?om`YbI8F2wVGt!PJc~JiM(!@ zB#(|?hY0D~87RK;f0FIjt5|kX)r@GcuMT4ystxwP-K+8VLIi>B>UVvbp!QX*(Sp3> z1jqkGOn$^^8pFMe_lGE-tiVkIaCp?*Uvt){DM0{P_zsT`JT{Eipf$;p+?BLzWBwCM zs7kBHdC9LfjVag(bJJ#+a5g!8Al0BIFrH4+LVs09hpDjbf6}5kUV%Rp`;7wA21zh~ zds77}y}HlRqPrkadlh_az$mSY7~s*Lv>T=^6oDwse2FMc{-F6!cpNV?4y<-BNfuBM zX_-)wp)LYlg7svySDf+actDwl0sp(&F#Mr{kK^P4uXhQ4WJh!laZbr7%hLM(tO0C& zd_FUWBHQqef8=9P8YRFL+ZPxbOKAz!+{PWG2-i;&(9-=i0~Z%-bh2iE`t{i%l+hmo z+M|YDoiI#^(|HRNG8K$Vq$#4&T>v^`HqpZf&GXd?#7!3K4S;9uM&5v|UOB$cO)70)C7hfpe$9it!bPmnQjObY*66d~S2Hfdvkk(1K3e3-qs!K12C)jxUOwsQ8Tl&lFUHh3Xk; zexLC~FQhm5!wH_$~tQdjb`)0X2X&6j?hicUPYni14Hx#1|%Fumfh7)*BE-JTq8te2~D^n;z`N84hhn2P;4!O7U=C1qe*ut>Qawf6n>U z^mBZl_fuz~GoNQ3cr#naj=s6lCnd>^8R;bJ<&_AV`&LjzM z8Rhoq#1TLw3sMOngU!96$MgNwfA~b?_I@xNzBRt6P}IvM_}F^$Iq??G*55#m7bg0k zmE@|_4>Wy;08vI@;dg(rOQdD7IdPow3$PN-9tcb&Mi4;Q2JWlesQNe%@NFPqA=y$j zzf@iLghG&=6}U>T3gng&?mQfiV()IQwBkXe->5;?5bcm zRf+rlBRLpKXJpvQ)SiCYZY$N(mrJBPxeYKbJA?N-1A?;wNnp}vG5!lO0p{nj5Lb(c zL{$sn!GaD*n@Cb23{ruf@-x@&3@1I>hZX--ubjQ%wAyE(O?;4Xsp4?v#SbK`mZT=W z69}0??g*KnGrYg{E^;Q^e~{z%9Y_>VENAI+Kw@uRdMkyekt%dAvt4sI|0W8+OrBtH z&uC@{ZGU)ZPS4DRMEO%5tpW+&8);sftJ4C;Zq7S?GkN_#Crp`Z&0baoT+48-Zpi(h z-u2tGvoHbmtvU{9RwePm0ib{k2UpVms5ErA7LStt=`~l|GtB8>e^HQCZY8G0VrUga z=rRatC>fZO#I9;- zjIwJR8?xSB6;`Mq(BeJaRZMG22j+uSj#@{%){ z%IF-_WX7y7e><7gLaQmG<)A0(ves*yuOMjd* z_vQ)^f4~{FS2Z;c^3`(rfY30=C*%8`AQ6T0%6_iBt>l=ap6UJa%uW-ZUHznb^dKnvzvbX;S8T zSD1mvGBz;@d@lbso=awJbUNJc`tKZd(t!zIe}6$K{SSsyDsTahp+*uwz>z_a7F~zVcB2QK?o*R| zndhn>Qzx0n%4Jei|Bs);HkS`SoCNQJ^QT!@jD|#HbV0xrKKq>svW4}ZmC*3sEWT}J ze@F}8ye2Oh5F=J-fe+i`ZvltF#Gk#Y1;qOwF<+mlQNA~)4OB?($NVw?7YGEq`4}n7 z`IrQYDRHt3X6BV>xX6II$8K2>m%uRp^J@ewlwd?Tqy7yJ+(s?N6TAXUU&o5^qnP9X z#YGChX8>6i41OSmZ=d8@c9Ibk|^s0c#IOkh!P{z zG3!OtvHfGzF&X8|YyfFcPK%C>sDPz~1e1#haW`zV!{Xl%)6nA@%@Cyn$8g}|Km0RP z)MQ+;T}Br_iUUs*WU;Z1KEE+75&%4DWvT6=%5_Od_o`nzbqCUc_`sI4Jy3cxe;$v3 zw=Q}mtogZ+p6IO+2Qh^!zNi+?O!1Fj&o7S;Xk{39I}8E;SX0nc9#$sCBz-MWhsm!; zr0}%hX00-~K4}CEeYl?*lA_4VqHNy^2?7Ff>Jt?mqEY;U%w`ztWYJg(dN?b-0CpMmffMw7VE@4q z^pc4A!TmOj`S*D8)ag;aaKa>>2v_N^TBRp-e+M3Uz7%<$L9??Q&;Os}f66$eC&+Kw zLf2*DwgHshz$!xRdpOL(;x`#eEc`vhl}g~{q}bt{B`kl7)d>?Fpw(E+1W?w+-Wq;< ztb+rYwCom3>0JlKUF;wDPr=0)Gd6%gs@O$4DAOr^K|}vG#qwX`M&{DZ7%(e162G8( zN!rKRshFUk-89&3TbLXRe+Njhb)M85lo?a29FdF@SY;P1WEd0dFDB*}kHmI@E@wgG z0++4A!k;6?%|^%(cB3vSh<7(I)7S}!bsLU25g7JPA9mK8ZX2I}7#YG5r)f|Ku6LNN zz=7bGcJw*>26sl$n9q?nIW&qq63!`40ZJZ3>uK{AG zq9bz7epo42L==k;3#_jP3AGx+Rb{O8a&V?j48G>hT?)!sv=)ahZ!Hq<4Ut}!voPPe z_rW#nb~%=m!`c`xfBE(^;7V}bF!yKv_Xg~lVA`R{WILj^^WB`SST@~2B(iE^7M*VoS#knx`^MB)A8z(B>#jmPn7SPE^ zgjWZe_oyipqDv@5giy!<`$y+dk3RTutPrRIh2?k_Xt5HKe~1fSS&oOn$n7=isgPad z*j<=@UR5-n?!dCe<4G&7z;c?v^7Xg1p5+c=hh=z9i$*%B*FA)qjeA&+IYO@aG{h8p z`mwL=RXi!BKPvw6+}ND={UOcFHN-%%qPdF7V2aAlU+#i=if`4zy`P2qHu|hy;a+To zyP4;YS7!oQf71R-=cV~QQ#@h@aD*AK*@DhUoBy2~fG~#i|C!B0vsH@cfC-UiXS{gn zXeTy06a#3)m|)A3cirTP9TisutSXssKTTXcYdtxfoD-L^iqRjuOeJ=F&CCSerF*uu zcb4ecCuw#a`F^RQd;dU?~(}~U1^50 z+V$a*RXKkRE}6srQE0Jaxt^#knba|ee^u@O!T$kIL959YeatWmguR$bQSI@#F=(Bw zj!*3mJ++@C{tk>6DBRT4o{)6pQY$5*D7n-=pDp>!%NCf}HRYr3MN)e)Qai~2Pw;`% zF8Qcke+~E2v@&XUH%UGI9R*G!7Fi^8Xa-!`c&OdZSM6@IPXtEtd22^E>Hn7xELiHF z2+%(z{g?0M-mi#5ND;@_n@nO-R@C*)O%0LdlPIfAQA6H!I0B$v6rA87NJul`1$2GU z2l7(=!r`Fm7@dA&NOn^6&7$ZxJvGlAvf&^#f16phpQ)SM`v)P zP2e)bUnr!H@kYfCzQDXGp*zwebi+jy|vt_?CUW! zQ(G)?KIB8R*9h^dGm-~NnQ!Y5X@@wCuA8aQ-7@55&e60Xxa*3+#%Rv^jV!yM4$J*76CvQ zvx$y@Q8)T>Ps>>crGGHz0KD2m#<_c|=)o~y2JJez^>ojnSdCN$ z!n!LqT#s=CT>@s^!J?BV%YX6qIfel)f1#eFjcp0i_3aoXmf_hN;VjP8!&xe=?`q zb|rUp4K*vKB6W>K)A>%Cs zyJz`(X)aR@L2X9Wtx-CV4zbhl<5Lf3qM2q~j)u=o{JPcvKAXLb0@fNV6LdXvD#b{g zi&3lF5wJm6Gh`G1xHEDiTg@;hf2$eNqNyFNQ7XDPTu=lV{j9N*&l++)YdmMV-OJ3Ez2NSs9cfVQMNjc{g+4hyRQ=91{~pukma%ZzY;JQJf8e#Q)){S% z^H)~%hBjXj+I&ZK3>bKk1-K3gml$fX#EB-)sf={n!PnC)H-8%EX}aqX7Xu z{}>Ozbb=WM9PlfYl?KF*e0W|^NWV~akees>1v!5h-WFpA9mrkYh)jj?fdzX?OfXnG z2vwYVB*|ZcGA(qDzRqY+Pub&42;c(tUI&d4)V1H;VIB6x+lzODf3o#OCtJRn_~F_) z5DiLDX1BJPA~?z*kUVNk55@O(REEGCS5T^U^Gte==B~J0WRzGWX25s{h|d+2;k5f9 z48gN-Ji4#*$?u{TvL)C3SWWP_JD^e-W4j<&X>0pAh+)h-jsqo8Dv-DL$EPD+ba*mN zcP`9jLfHI#Xg#6Be;7>`c%xEKWy`6(VPPv9{CW=DuQlPQ3NxM)}Vjyv6o6@eczCs%K$ zEH|8}o)ktsCX`7T6h_IW*iJDBq!uILgf-~_h#`WsIKr7C#=Vlw6dc|zF;g)3=#HGc zl_b9a*lBfce^)FbZE0?DZ*Xa2VQ_G6Z**mDX!8Ie@J*^cowQkGaY>rVKKcg(C(^` z2wx1E@i@&l9nOK-h}%3wDQGtL!$HeoZk&{WWys-Bg^R3^mu|J@ys!?&LczA4%N)0S8+#w4eL<^aQ z@eYaAf96ry7^se(LN+FuESycUq#4nhf+y2|KHKv#@lhU z&kVD8_oIXF%FW~+4*efH^S|LY0l6_9{BIhgs#;6Rr@1vNaaa!-59o3Uf1h+tYbS}++R2<=k*Xb01s%wG37CHb zke6%cC@{{08QV~k6q{++P8~*q9Pp~A#7y%B?Ih0*jzg!zV6oZpj=uc=*xhRwOn>Ys zyqHX2Wp^n)@Hk2+>_qHYzh|&p{{eDx$pE|BSPX%u?+?V7$pKl1D(1H-<+nM=Z;Qrn zf3uTX-Bn=Kgm($}xNoaWYudMM9|l5Rv%z4DRtD^BUo254H|_2or5;K|_o!`0*KHLX znSeuwH-u7A3l+rqMs$Zd^P&wV@qDHobjK{{j`1uB=D5B(BV-d$9u~996O=GDY{HWn zmjZ*BI4D%g9g6#5>nLb0YHyTgD4C&De?)C&-`Iwy_OG#xg4J2)@I;ouOfZ+NfA;R| z=&wH}5H_2qP~N_KRDQxQh)R%3p7wW-zEyuEUADRGztj@(30gl`w(3HUe`SLo>c~On z3BioXn!60uodF_TjS~f^?s(>PbP1(HrcAIM_k4E+3yr0NB%epE*K9>i@~JH)(&$yW zk`q6aIuwwRhHl?oQYPS3-Zu0|e;l}xIO;srRpQV?7mp2of_e_%YlIq&c41T>W<^T^ z6>Obp*T}rQzV5Vx_zfxfuSVk=8AqiRS05Bs0$SrFAOve_gpEIPJuP z?q1Ve*|$c)x|M_S&&FII$%iYiZO0vyJN=y?Hk`(c^lX@Thy83gKFJZ_sQx{!D~fxYSX!scnCt z&i8Z>v~@KnNa$jx^9fcSe`;X5N3#UY6{0StF?kayCZ}UY^u5w@RIU)S4;N=2(ce=6E4K-=eNNdGwr zRyf9fq^WEo&^G8{Hy45wyQxO!HCM9iAW>mb-!Z4XN;SgJS`=4j9Pc&O>ylv;>>k`x zcu|d#btW)V%SR{;F|Bq?Cdn4veSTT5zxJRyfwQh7d#(iGfs%oOFaYiYN`dzd*lgTnHnqN2D37Ek}`AF`eX%?NdO&_(;o`SQDaWk^4;SVU;`OVWp zJ+65c1en5)e@DwlP?b(l6A;Q5gyQL~qv=lPo|`d4sf2ote>cQ~wAbg742JzoiVkS3)RlUU z(=WZaP1~>d358Dw{bosuJT6kK9ia}EJvbFT1g&6aJP8{exH_DU58E%f_K z9|E_gCn4bTJUAIN(k6xuIGJK9DtB?3%n!ZZWSJjf^>0r<67{x^k4wz@tw5hEzU!5~~1-G#dRQTns1bl~m+wM8?lKOam zKJ3V9LHqPQ&;VH)X-50ZM<{L*;Wz)XpwFNZ*`sGpmWYUHQ|e#+jzh-5tId|G- zh3rhoB+Bp!DeW5SYZ`CiIRR*tG3G0;e`58qswADh1)j7w-y&xXd7-$fHwV7mNkrBi z0DOz&_ZCS#*h#8un7%9#EmB{}?p@b~-sD}!b@sKpj_Y_o&|PN$_L%t^FXf6U0Q19X z_p6v+41C?!f-yVS27pj7b_9JB6pRZLEGBtx>Ju#R31+YE7d^q?yJp@zs(E`Fe`ThU z)}MPG`@%Ik)PmsBb(Dsg-6>zW&IpM0ZSlV!^>KGCU*Hw8qWp1_VF_K~T7T1X z;zMH~tYjz!1MiJV}FPVEN8@T}W4ZS}Ps; z+wZ_ef9J{|qa5`OW}#G}HW8=;e`I8(P8eG`QQFY~uroj((vX%R0$f$VLuH8SOeA*U zcZ+o#+ugw!*u29i8(5%<%n6$DCNp(cw7B-byx0e7u~)_xuHEYjX62Y;`B4fQ;1FT< z(ZN1r4X5GUkG=1!;OhBsJL4e}0c+`ob-?^5L^Kv|`;}AsCSVd!iY+xKiS~hIgTd1OvPrd-AdAb4Y6xMh@yZvg7dYB#Ql43@qDpdG(6wML>5#Q4;r2}R(shJJC zVK}4T4>uc)Ecc!K=smi}A$AjL0*mVy^yZ7FoIV6gq2MCjW<#OSf8RnD1Qc1tW~LL0 z1!4*o4w)}F#!l*gTz1b8 zY>3)VoB%>0BcOW9zJc+B0&>f#qoc#Lzz2m+c&RN@9h-Vk6kguJIv<^qDC$XwAJND` zL00mPNZtfxpdFKoe;O1I(P35)c|#74BT$e*fnq`lnIKi9*8s_YK_M9U|9KY_z{AAD zKy&)v9F3X+Z3rD|RuQ_x_kY|yJ0+e8>ccky7@vU<B0SQ9`_LX z!7d?Nlwt;oOR7b-TWg>ic9_4$CI}E7i@2f2%JjP^Pz=}~f4bY4N9ygpHdICfETk3-xI`UM|FkK#TVQ2LwT3fSMlu#-2>Z%8wEm*~K$lM5c zb=q!l_*H1|t3ETN`wbz&wA#)7ME=IU>LLVJxjg~z0UyYm=&M3d#LibqYYEx05=B#> za&mfi##2BI6Ft8BnM{Q;S?Q(|d>h)hdXAq}+pn?ce*>4VYFZDAlY1s5_>cUezFkGX zl@PA*O0$jdC2+x z%Z{T}Cb8psTw}+zPDHeib7TbY8;5-Qje`OR`M-~iLmz-hLZ9Pc{#07xx_Hg&LNp_^ zqZ1NAe+a>|SHtu~oPi1t*Ha=wmdA_xG0UTq0hej{Zu37`1@~eI|B3HT`mLzQ4!mx@ zf(~KT@!U*cVSH3-KZQ=uf6X`MtL0BnsCeJMPvsDf;KUUvS6Gl6 z9cAMhj`$|XSLyyW%eKgqtY`0_0MLLXwy^&)%`$$byFZ!m@-sh&-OGVP8PS?AL|`Ne zYibsVjq-atD_9vIX3I)4sj~ibocYOs4Y0`j^L#95#Hcy=ehI_|@)^+s=g^nJw3`}2 ze|A$D?55V@x~asvDPMI{8Ff>(>8AF@v{iId#J^LRIEXE^gHmn^N0sM`AiZKm;e#jK z@S<3IBF_IA7~iINYerTvTr4L73CT9*QzL(o(H1$IPCRt$z|yR(_t_g(;O3+h#+Yeb z&8DhV&4@lA4*5rCdv@nm0w;{`>%_ZWe;>xCJleK4(0wFg!d~*Eb46qYaz*(|c{J49 znT=e^L7>QK6

p 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

o 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

2;3%W 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 N4^XU diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst index 1efda781c923bc7d4860149cbf22f96f39b7a447..6de2c0c5460b69af27265742fa3d2099d037f48e 100644 GIT binary patch delta 125472 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 delta 125279 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 E4w&SR)Bpeg diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalClearParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalClearParams.ts index efefc2538af4..1e944736d45c 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalClearParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalClearParams.ts @@ -1,5 +1,10 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadGoalMutationOrigin } from "./ThreadGoalMutationOrigin"; -export type ThreadGoalClearParams = { threadId: string, }; +export type ThreadGoalClearParams = { threadId: string, +/** + * Missing provenance does not supply user authorization. + */ +origin?: ThreadGoalMutationOrigin | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalMutationOrigin.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalMutationOrigin.ts new file mode 100644 index 000000000000..742419cba3d2 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalMutationOrigin.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Distinguishes explicit user actions from automatic goal lifecycle mutations. + */ +export type ThreadGoalMutationOrigin = "user" | "automatic"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalSetParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalSetParams.ts index b92720c17872..d6edcbddfd47 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalSetParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadGoalSetParams.ts @@ -1,6 +1,11 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ThreadGoalMutationOrigin } from "./ThreadGoalMutationOrigin"; import type { ThreadGoalStatus } from "./ThreadGoalStatus"; -export type ThreadGoalSetParams = { threadId: string, objective?: string | null, status?: ThreadGoalStatus | null, tokenBudget?: number | null, }; +export type ThreadGoalSetParams = { threadId: string, +/** + * Missing provenance does not supply user authorization. + */ +origin?: ThreadGoalMutationOrigin | null, objective?: string | null, status?: ThreadGoalStatus | null, tokenBudget?: number | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index b96f29ce44bb..24dc8f30a757 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -505,6 +505,7 @@ export type { ThreadGoalClearResponse } from "./ThreadGoalClearResponse"; export type { ThreadGoalClearedNotification } from "./ThreadGoalClearedNotification"; export type { ThreadGoalGetParams } from "./ThreadGoalGetParams"; export type { ThreadGoalGetResponse } from "./ThreadGoalGetResponse"; +export type { ThreadGoalMutationOrigin } from "./ThreadGoalMutationOrigin"; export type { ThreadGoalSetParams } from "./ThreadGoalSetParams"; export type { ThreadGoalSetResponse } from "./ThreadGoalSetResponse"; export type { ThreadGoalStatus } from "./ThreadGoalStatus"; diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index c6d6fad791b8..1aec8bbd4540 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -2522,6 +2522,7 @@ mod tests { let thread_goal_set = ClientRequest::ThreadGoalSet { request_id: request_id(), params: v2::ThreadGoalSetParams { + origin: None, thread_id: "goal-thread".to_string(), objective: Some("ship it".to_string()), status: None, @@ -4440,6 +4441,7 @@ mod tests { let set_request = ClientRequest::ThreadGoalSet { request_id: RequestId::Integer(1), params: v2::ThreadGoalSetParams { + origin: None, thread_id: "thr_123".to_string(), objective: Some("ship goal mode".to_string()), status: Some(v2::ThreadGoalStatus::Active), @@ -4455,6 +4457,7 @@ mod tests { let clear_request = ClientRequest::ThreadGoalClear { request_id: RequestId::Integer(3), params: v2::ThreadGoalClearParams { + origin: None, thread_id: "thr_123".to_string(), }, }; diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs index 2e166d5506b1..9eee37dcac97 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs @@ -841,11 +841,24 @@ impl From for ThreadGoal { } } +/// Distinguishes explicit user actions from automatic goal lifecycle mutations. +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub enum ThreadGoalMutationOrigin { + User, + Automatic, +} + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ThreadGoalSetParams { pub thread_id: String, + /// Missing provenance does not supply user authorization. + #[ts(optional = nullable)] + pub origin: Option, #[ts(optional = nullable)] pub objective: Option, #[ts(optional = nullable)] @@ -886,6 +899,9 @@ pub struct ThreadGoalGetResponse { #[ts(export_to = "v2/")] pub struct ThreadGoalClearParams { pub thread_id: String, + /// Missing provenance does not supply user authorization. + #[ts(optional = nullable)] + pub origin: Option, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] diff --git a/codex-rs/app-server/src/request_processors/thread_goal_processor.rs b/codex-rs/app-server/src/request_processors/thread_goal_processor.rs index 6d52f5b52f46..bada44de510d 100644 --- a/codex-rs/app-server/src/request_processors/thread_goal_processor.rs +++ b/codex-rs/app-server/src/request_processors/thread_goal_processor.rs @@ -2,6 +2,8 @@ use super::thread_input::DIRECT_INPUT_TO_MULTI_AGENT_V2_SUBAGENT_ERROR; use super::thread_input::can_accept_direct_input; use super::thread_input::ensure_direct_input_allowed; use super::*; +use codex_app_server_protocol::ThreadGoalMutationOrigin; +use codex_core::context::UserGoalUpdate; use codex_goal_extension::GoalObjectiveUpdate; use codex_goal_extension::GoalService; use codex_goal_extension::GoalServiceError; @@ -9,9 +11,11 @@ use codex_goal_extension::GoalSetRequest; use codex_goal_extension::GoalTokenBudgetUpdate; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::SubAgentSource; -use codex_protocol::protocol::ThreadSettingsAppliedEvent; -use codex_protocol::protocol::ThreadSettingsSnapshot; use codex_rollout::RolloutRecorder; +use codex_rollout::WriterLockCoordinator; + +#[path = "thread_goal_user_context.rs"] +mod user_context; enum GoalAccess { Read, @@ -27,6 +31,7 @@ pub(crate) struct ThreadGoalRequestProcessor { state_db: Option, goal_service: Arc, config_manager: ConfigManager, + writer_locks: Arc, } impl ThreadGoalRequestProcessor { @@ -39,6 +44,7 @@ impl ThreadGoalRequestProcessor { goal_service: Arc, config_manager: ConfigManager, ) -> Self { + let writer_locks = Arc::new(WriterLockCoordinator::new(&config.codex_home)); Self { thread_manager, outgoing, @@ -47,6 +53,7 @@ impl ThreadGoalRequestProcessor { state_db, goal_service, config_manager, + writer_locks, } } @@ -133,6 +140,7 @@ impl ThreadGoalRequestProcessor { } let thread_id = parse_thread_id_for_request(params.thread_id.as_str())?; + let _goal_resume_guard = self.thread_state_manager.lock_goal_resume(thread_id).await; let state_db = self .state_db_for_materialized_thread(thread_id, GoalAccess::Mutate) .await?; @@ -169,7 +177,7 @@ impl ThreadGoalRequestProcessor { thread_state.listener_command_tx() }; let status = params.status.map(ThreadGoalStatus::to_core); - let objective = params.objective.as_deref(); + let objective = params.objective.as_deref().map(str::trim); let outcome = self .goal_service @@ -187,45 +195,44 @@ impl ThreadGoalRequestProcessor { }, max_goal_token_budget, }, + Box::pin(async { + if params.origin == Some(ThreadGoalMutationOrigin::User) + && (objective.is_some() || status.is_some()) + { + self.record_user_goal_update( + thread_id, + UserGoalUpdate::Set { + objective: objective.map(str::to_owned), + status, + }, + ) + .await?; + } + Ok(()) + }), ) .await .map_err(goal_service_error)?; let goal = ThreadGoal::from(outcome.goal.clone()); let persist_result = match self.thread_manager.get_thread(thread_id).await { - Ok(thread) => match thread.rollout_path() { - Some(path) if codex_rollout::existing_rollout_path(&path).await.is_none() => { - // Goal-first threads need their settings captured when the goal creates the - // rollout. Once materialized, normal settings updates own this event. - let persisted_settings = thread.thread_settings_snapshot().await; - let items = [ - thread_settings_applied_item(thread_id, persisted_settings.clone()), - outcome.thread_goal_updated_item(), - ]; - match thread.append_rollout_items(&items).await { - Err(err) => Err(err), - Ok(()) => { - // Catch up a settings update queued while the rollout materialized. - let current_settings = thread.thread_settings_snapshot().await; - if current_settings == persisted_settings { - Ok(()) - } else { - thread - .append_rollout_items(&[thread_settings_applied_item( - thread_id, - current_settings, - )]) - .await - } - } + Ok(thread) => { + let needs_settings_checkpoint = match thread.rollout_path() { + Some(path) => codex_rollout::existing_rollout_path(&path).await.is_none(), + None => false, + }; + match thread + .append_rollout_items(&[outcome.thread_goal_updated_item()]) + .await + { + // Automatic and legacy callers still need goal-first settings persisted, + // even though they do not record a user instruction. + Ok(()) if needs_settings_checkpoint => { + thread.checkpoint_thread_settings().await } + result => result, } - Some(_) | None => { - thread - .append_rollout_items(&[outcome.thread_goal_updated_item()]) - .await - } - }, + } Err(_) => Ok(()), }; if let Err(err) = persist_result { @@ -275,6 +282,7 @@ impl ThreadGoalRequestProcessor { } let thread_id = parse_thread_id_for_request(params.thread_id.as_str())?; + let _goal_resume_guard = self.thread_state_manager.lock_goal_resume(thread_id).await; let state_db = self .state_db_for_materialized_thread(thread_id, GoalAccess::Mutate) .await?; @@ -288,7 +296,17 @@ impl ThreadGoalRequestProcessor { }; let cleared = self .goal_service - .clear_thread_goal(&state_db, thread_id) + .clear_thread_goal( + &state_db, + thread_id, + Box::pin(async { + if params.origin == Some(ThreadGoalMutationOrigin::User) { + self.record_user_goal_update(thread_id, UserGoalUpdate::Clear) + .await?; + } + Ok(()) + }), + ) .await .map_err(goal_service_error)?; @@ -504,18 +522,6 @@ impl ThreadGoalRequestProcessor { } } -fn thread_settings_applied_item( - thread_id: ThreadId, - thread_settings: ThreadSettingsSnapshot, -) -> RolloutItem { - RolloutItem::EventMsg(EventMsg::ThreadSettingsApplied( - ThreadSettingsAppliedEvent { - thread_id: Some(thread_id), - thread_settings, - }, - )) -} - pub(super) fn api_thread_goal_from_state(goal: codex_state::ThreadGoal) -> ThreadGoal { ThreadGoal { thread_id: goal.thread_id.to_string(), diff --git a/codex-rs/app-server/src/request_processors/thread_goal_user_context.rs b/codex-rs/app-server/src/request_processors/thread_goal_user_context.rs new file mode 100644 index 000000000000..c27c4a21ce59 --- /dev/null +++ b/codex-rs/app-server/src/request_processors/thread_goal_user_context.rs @@ -0,0 +1,51 @@ +//! Persists explicit user goal mutations with user provenance before goal work resumes. +//! Unloaded threads receive the same item on replay; tool-created goals never use this path. + +use super::*; +use codex_core::context::ContextualUserFragment; +use codex_core::context::UserGoalUpdate; +use codex_rollout::RolloutRecorderParams; + +impl ThreadGoalRequestProcessor { + pub(super) async fn record_user_goal_update( + &self, + thread_id: ThreadId, + update: UserGoalUpdate, + ) -> Result<(), GoalServiceError> { + if let Ok(thread) = self.thread_manager.get_thread(thread_id).await { + return thread.record_user_goal_update(update).await.map_err(|err| { + GoalServiceError::Internal(format!("failed to record goal instruction: {err}")) + }); + } + let item = ContextualUserFragment::into(update); + let record_error = + |err| GoalServiceError::Internal(format!("failed to record goal instruction: {err}")); + let writer_lock = Arc::new(self.writer_locks.acquire(thread_id).map_err(record_error)?); + let path = codex_rollout::find_thread_path_by_id_str( + &self.config.codex_home, + &thread_id.to_string(), + self.state_db.as_deref(), + ) + .await + .map_err(|err| { + GoalServiceError::Internal(format!("failed to locate thread id {thread_id}: {err}")) + })? + .ok_or_else(|| { + GoalServiceError::InvalidRequest(format!("thread not found: {thread_id}")) + })?; + // The writer owns the lock through background IO, even if this RPC is cancelled. + let recorder = RolloutRecorder::new_with_writer_lock( + self.config.as_ref(), + RolloutRecorderParams::resume(path), + writer_lock, + ) + .await + .map_err(record_error)?; + recorder + .record_canonical_items(&[RolloutItem::ResponseItem(item.into())]) + .await + .map_err(record_error)?; + // Shutdown flushes queued items before acknowledging the goal mutation. + recorder.shutdown().await.map_err(record_error) + } +} diff --git a/codex-rs/app-server/src/request_processors/thread_processor.rs b/codex-rs/app-server/src/request_processors/thread_processor.rs index 289cb6395366..e3ce2b0b22e6 100644 --- a/codex-rs/app-server/src/request_processors/thread_processor.rs +++ b/codex-rs/app-server/src/request_processors/thread_processor.rs @@ -3749,6 +3749,17 @@ impl ThreadRequestProcessor { } }; let (thread_history, resume_source_thread) = resume_result?; + // Path-based resume can use an empty request thread ID. Coordinate once its real + // identity is known; unrelated loaded threads never wait for this cold startup. + let _goal_resume_guard = if let InitialHistory::Resumed(resumed) = &thread_history { + Some( + self.thread_state_manager + .lock_goal_resume(resumed.conversation_id) + .await, + ) + } else { + None + }; if let InitialHistory::Resumed(resumed) = &thread_history && self .pending_thread_unloads @@ -3948,7 +3959,8 @@ impl ThreadRequestProcessor { let mut config = match prepared_config.take() { Some(prepared) if prepared.state == config_state => prepared.config, _ => { - // Config loading can call back into Desktop; release the permit during host work. + // Config loading can call back into Desktop; release both locks during host work. + drop(_goal_resume_guard); drop(_thread_list_state_permit); let config = self .config_manager diff --git a/codex-rs/app-server/src/thread_state.rs b/codex-rs/app-server/src/thread_state.rs index 8cfbc00983aa..a19c41b19ff8 100644 --- a/codex-rs/app-server/src/thread_state.rs +++ b/codex-rs/app-server/src/thread_state.rs @@ -99,6 +99,7 @@ pub(crate) struct TurnSummary { #[derive(Default)] pub(crate) struct ThreadState { + goal_resume_lock: Arc>, pub(crate) pending_interrupts: PendingInterruptQueue, pub(crate) turn_summary: TurnSummary, pub(crate) last_terminal_turn_id: Option, @@ -361,6 +362,21 @@ pub(crate) struct ThreadStateManager { } impl ThreadStateManager { + /// Coordinates goal edits with cold/path-based resume for just this thread. + pub(crate) async fn lock_goal_resume( + &self, + thread_id: ThreadId, + ) -> tokio::sync::OwnedMutexGuard<()> { + let lock = self + .thread_state(thread_id) + .await + .lock() + .await + .goal_resume_lock + .clone(); + lock.lock_owned().await + } + pub(crate) fn new() -> Self { Self::default() } diff --git a/codex-rs/app-server/tests/suite/v2/guardian_goal_tests.rs b/codex-rs/app-server/tests/suite/v2/guardian_goal_tests.rs new file mode 100644 index 000000000000..358114e4de5b --- /dev/null +++ b/codex-rs/app-server/tests/suite/v2/guardian_goal_tests.rs @@ -0,0 +1,131 @@ +//! Goal API edits and clears enter model history across loaded and cold-resume paths. + +use super::*; +use codex_app_server_protocol::ThreadGoalSetResponse; +use pretty_assertions::assert_eq; +use test_case::test_case; + +#[test_case(false; "loaded")] +#[test_case(true; "unloaded with path resume")] +#[tokio::test] +async fn user_goal_updates_survive_resume_and_clear(unloaded: bool) -> Result<()> { + skip_if_no_network!(Ok(())); + let server = responses::start_mock_server().await; + let mock = responses::mount_sse_once( + &server, + responses::sse(vec![responses::ev_completed("done")]), + ) + .await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&server.uri()) + .with_provider_config("supports_websockets = false") + .enable_feature(Feature::Goals) + .disable_feature(Feature::EnableRequestCompression) + .write(codex_home.path())?; + let mut app = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .without_managed_config() + .build_initialized_with_timeout(TIMEOUT) + .await?; + let thread_id = if unloaded { + create_fake_rollout( + codex_home.path(), + "2025-01-05T12-00-00", + "2025-01-05T12:00:00Z", + "", + Some("mock_provider"), + /*git_info*/ None, + )? + } else { + app.start_thread(ThreadStartParams::default()) + .await? + .thread + .id + }; + // Automatic lifecycle calls mutate goal state without creating user authorization. + let id = app + .send_raw_request( + "thread/goal/set", + Some(json!({ + "threadId": thread_id, "objective": "Automatically generated goal.", + "status": "paused", "origin": "automatic", + })), + ) + .await?; + let _: ThreadGoalSetResponse = app.read_response(id).await?; + let mut resume_request = None; + for objective in [ + "Send the approved report.", + "Draft the report, but do not send it.", + ] { + if unloaded && objective.starts_with("Draft") { + let path = codex_rollout::find_thread_path_by_id_str( + codex_home.path(), + &thread_id, + /*state_db_ctx*/ None, + ) + .await? + .expect("unloaded rollout"); + resume_request = Some( + app.send_thread_resume_request(ThreadResumeParams { + thread_id: String::new(), + path: Some(path), + ..Default::default() + }) + .await?, + ); + } + let id = app + .send_raw_request( + "thread/goal/set", + Some(json!({ + "threadId": thread_id, "objective": objective, "status": "paused", "origin": "user", + })), + ) + .await?; + let _: ThreadGoalSetResponse = app.read_response(id).await?; + } + if let Some(id) = resume_request { + let _: ThreadResumeResponse = app.read_response(id).await?; + } + let id = app + .send_raw_request( + "thread/goal/clear", + Some(json!({"threadId": thread_id, "origin": "user"})), + ) + .await?; + let _: codex_app_server_protocol::ThreadGoalClearResponse = app.read_response(id).await?; + let id = app + .send_turn_start_request(TurnStartParams { + thread_id, + input: vec![UserInput::Text { + text: "What is the status?".to_owned(), + text_elements: vec![], + }], + ..Default::default() + }) + .await?; + let _: TurnStartResponse = app.read_response(id).await?; + let completed: TurnCompletedNotification = + timeout(TIMEOUT, app.read_notification("turn/completed")).await??; + assert_eq!(completed.turn.status, TurnStatus::Completed); + let history = mock.single_request().message_input_texts("user").join("\n"); + assert!( + !history.contains("Automatically generated goal."), + "{history}" + ); + let old = history + .find("User set the goal: \"Send the approved report.\"") + .expect("original user goal"); + let new = history + .find("User set the goal: \"Draft the report, but do not send it.\"") + .expect("updated user goal"); + assert!(old < new, "{history}"); + assert!( + history.contains("User set goal status: \"paused\"."), + "{history}" + ); + assert!(history.contains("User cleared the goal."), "{history}"); + app.shutdown_gracefully().await?; + Ok(()) +} diff --git a/codex-rs/app-server/tests/suite/v2/guardian_v2.rs b/codex-rs/app-server/tests/suite/v2/guardian_v2.rs index b769a1682cc2..b084707a4ecd 100644 --- a/codex-rs/app-server/tests/suite/v2/guardian_v2.rs +++ b/codex-rs/app-server/tests/suite/v2/guardian_v2.rs @@ -78,6 +78,9 @@ use super::mcp_tool::start_mcp_server_with_tools; #[path = "guardian_sync_session_tests.rs"] mod sync_sessions; +#[path = "guardian_goal_tests.rs"] +mod goals; + #[path = "guardian_v2_history_tests.rs"] mod history; diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs index c54fd5454d18..7a002472217c 100644 --- a/codex-rs/core/src/codex_thread.rs +++ b/codex-rs/core/src/codex_thread.rs @@ -755,8 +755,7 @@ impl CodexThread { &self, update: crate::context::UserGoalUpdate, ) -> CodexResult<()> { - self.session.record_user_goal_update(update).await; - self.checkpoint_preparation().await?; + self.session.record_user_goal_update(update).await?; Ok(()) } diff --git a/codex-rs/core/src/compact.rs b/codex-rs/core/src/compact.rs index a937b39db0e4..6de37b1e0ae4 100644 --- a/codex-rs/core/src/compact.rs +++ b/codex-rs/core/src/compact.rs @@ -1,3 +1,5 @@ +use crate::context::UserGoalUpdate; +use std::collections::HashSet; use std::sync::Arc; use std::time::Instant; @@ -30,6 +32,7 @@ use codex_analytics::CompactionTrigger; use codex_analytics::now_unix_seconds; use codex_history::CodexHarnessMetadata; use codex_history::ResponseItemEnvelope; +use codex_protocol::ResponseItemId; use codex_protocol::error::CodexErr; use codex_protocol::error::CodexErrorDetails; use codex_protocol::error::Result as CodexResult; @@ -76,6 +79,7 @@ pub(crate) enum InitialContextInjection { /// `Session::replace_compacted_history` assigns missing item IDs before constructing the persisted /// `CompactedItem`, ensuring the live and persisted histories remain identical. pub(crate) struct CompactedHistoryMetadata { + pub(crate) input_goal_ids: HashSet, pub(crate) message: String, pub(crate) window_number: u64, pub(crate) window_ids: AutoCompactWindowIds, @@ -255,6 +259,7 @@ async fn run_compact_task_inner_impl( let initial_input_for_turn: ResponseInputItem = ResponseInputItem::from(input); let mut history = sess.clone_history().await; + let input_goal_ids = UserGoalUpdate::message_ids(history.raw_items()); history.record_items( &[initial_input_for_turn.into()], turn_context.model_info().truncation_policy.into(), @@ -381,6 +386,7 @@ async fn run_compact_task_inner_impl( reference_context_item, world_state_baseline, CompactedHistoryMetadata { + input_goal_ids, message: summary_text, window_number, window_ids, diff --git a/codex-rs/core/src/compact_remote_v2.rs b/codex-rs/core/src/compact_remote_v2.rs index 013a4faca473..56e4aace1b83 100644 --- a/codex-rs/core/src/compact_remote_v2.rs +++ b/codex-rs/core/src/compact_remote_v2.rs @@ -293,6 +293,7 @@ async fn run_remote_compact_task_inner_impl( } }; let RemoteCompactV2Attempt { + input_goal_ids, trace_input_history, prompt_input, prompt_input_metadata, @@ -361,6 +362,7 @@ async fn run_remote_compact_task_inner_impl( reference_context_item, world_state_baseline, CompactedHistoryMetadata { + input_goal_ids, message: String::new(), window_number: new_window_number, window_ids: new_window_ids, diff --git a/codex-rs/core/src/compact_remote_v2_attempt.rs b/codex-rs/core/src/compact_remote_v2_attempt.rs index 60b5b1b7721c..6f881e2868a0 100644 --- a/codex-rs/core/src/compact_remote_v2_attempt.rs +++ b/codex-rs/core/src/compact_remote_v2_attempt.rs @@ -1,3 +1,6 @@ +use crate::context::UserGoalUpdate; +use codex_protocol::ResponseItemId; +use std::collections::HashSet; use std::sync::Arc; use super::RemoteCompactionV2Output; @@ -17,6 +20,7 @@ use codex_rollout_trace::CompactionTraceContext; use tracing::info; pub(super) struct RemoteCompactV2Attempt { + pub(super) input_goal_ids: HashSet, pub(super) trace_input_history: Option>, pub(super) prompt_input: Vec, pub(super) prompt_input_metadata: Vec>, @@ -37,6 +41,7 @@ pub(super) async fn run_remote_compact_v2_attempt( ) -> CodexResult { let turn_context = &step_context.turn; let mut history = sess.clone_history().await; + let input_goal_ids = UserGoalUpdate::message_ids(history.raw_items()); let base_instructions = sess.get_prompt_base_instructions().await; let (rewritten_outputs, estimated_deleted_tokens) = trim_function_call_history_to_fit_context_window( @@ -122,6 +127,7 @@ pub(super) async fn run_remote_compact_v2_attempt( let mut prompt_input = prompt.input; prompt_input.pop(); Ok(RemoteCompactV2Attempt { + input_goal_ids, trace_input_history, prompt_input, prompt_input_metadata, diff --git a/codex-rs/core/src/context/user_goal.rs b/codex-rs/core/src/context/user_goal.rs index d20504159ff6..76d7c1c53281 100644 --- a/codex-rs/core/src/context/user_goal.rs +++ b/codex-rs/core/src/context/user_goal.rs @@ -3,10 +3,12 @@ //! Oversized objectives are omitted whole so truncation cannot turn a restriction into a grant. use super::ContextualUserFragment; +use codex_protocol::ResponseItemId; use codex_protocol::models::ContentItem; use codex_protocol::models::ContentItemKind; use codex_protocol::models::ResponseItem; use codex_protocol::protocol::ThreadGoalStatus; +use std::collections::HashSet; const MAX_OBJECTIVE_BYTES: usize = 700; @@ -23,6 +25,17 @@ pub enum UserGoalUpdate { impl UserGoalUpdate { pub(crate) const OMITTED_OBJECTIVE_KIND: &str = "user.goal.omitted"; + /// Captures accepted goal instructions at a compaction input boundary. + pub(crate) fn message_ids<'a>( + items: impl Iterator, + ) -> HashSet { + items + .filter(|item| Self::message_text(item).is_some()) + .filter_map(ResponseItem::id) + .cloned() + .collect() + } + /// Reads only a host-annotated goal instruction, never a matching text wrapper alone. pub(crate) fn message_text(item: &ResponseItem) -> Option<&str> { let ResponseItem::Message { diff --git a/codex-rs/core/src/guardian/review_session_tests.rs b/codex-rs/core/src/guardian/review_session_tests.rs index 0a2eaf9445f6..7414760c66a2 100644 --- a/codex-rs/core/src/guardian/review_session_tests.rs +++ b/codex-rs/core/src/guardian/review_session_tests.rs @@ -85,6 +85,7 @@ async fn run_review_preserves_evidence_during_parent_compaction() { /*reference_context_item*/ None, /*world_state_baseline*/ None, crate::compact::CompactedHistoryMetadata { + input_goal_ids: Default::default(), message: String::new(), window_number, window_ids, diff --git a/codex-rs/core/src/guardian/tests.rs b/codex-rs/core/src/guardian/tests.rs index 5e9ec6813fa6..88792b6ddadd 100644 --- a/codex-rs/core/src/guardian/tests.rs +++ b/codex-rs/core/src/guardian/tests.rs @@ -2657,6 +2657,7 @@ async fn guardian_reuses_prompt_cache_key_and_appends_prior_reviews() -> anyhow: /*reference_context_item*/ None, /*world_state_baseline*/ None, crate::compact::CompactedHistoryMetadata { + input_goal_ids: Default::default(), message: String::new(), window_number, window_ids, diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs index b87697684690..4708d2921e76 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs @@ -4055,7 +4055,6 @@ impl Session { .get_or_insert_default() .compaction_model_hash = metadata.compaction_model_hash; } - let replacement_history = items.clone(); // Wait for accepted updates to finish persisting, then keep later updates from // overtaking the current settings snapshot while its checkpoint is written. let _settings_guard = thread_settings::acquire_persistence_lock(self).await; @@ -4076,6 +4075,26 @@ impl Session { } (!retained.is_empty()).then(|| WorldStateSnapshot::from(&retained)) }); + // Goal edits are published outside the running task. Keep edits accepted after + // the compaction input snapshot, in their original order, after its replacement. + let replacement_goal_ids = crate::context::UserGoalUpdate::message_ids( + items.iter().map(|envelope| &envelope.item), + ); + items.extend( + state + .history + .annotated_items() + .iter() + .filter(|envelope| { + crate::context::UserGoalUpdate::message_text(&envelope.item).is_some() + && envelope.item.id().is_some_and(|id| { + !metadata.input_goal_ids.contains(id) + && !replacement_goal_ids.contains(id) + }) + }) + .cloned(), + ); + let replacement_history = items.clone(); state.replace_annotated_history( items, reference_context_item.clone(), @@ -4530,9 +4549,10 @@ impl Session { world_state: Arc, ) -> u64 { let turn_context = step_context.turn.as_ref(); + let history = self.clone_history().await; + let input_goal_ids = crate::context::UserGoalUpdate::message_ids(history.raw_items()); let retained_client_developer_messages = if self.enabled(Feature::RetainClientDeveloperMessages) { - let history = self.clone_history().await; crate::compact_remote_v2::truncate_retained_messages_for_remote_compaction( history .annotated_items() @@ -4565,6 +4585,7 @@ impl Session { Some(turn_context_item), Some(world_state), CompactedHistoryMetadata { + input_goal_ids, message: String::new(), window_number, window_ids, diff --git a/codex-rs/core/src/session/retained_context.rs b/codex-rs/core/src/session/retained_context.rs index c1724370e131..8c4203bf1335 100644 --- a/codex-rs/core/src/session/retained_context.rs +++ b/codex-rs/core/src/session/retained_context.rs @@ -1,5 +1,6 @@ //! Orders retained inputs at acceptance, assistant messages at stream start, //! and Code Mode messages at confirmed delivery. +//! Explicit goal authorization becomes live only after its persistence barrier succeeds. use std::collections::HashMap; use std::future::Future; @@ -11,10 +12,13 @@ use std::task::Poll; use crate::context::ContextualUserFragment; use crate::context::UserGoalUpdate; +use codex_history::CodexHarnessMetadata; +use codex_history::ResponseItemEnvelope; use codex_history::RetainedContextEvent; use codex_history::RetainedUserMessage; use codex_history::RolloutItem; use codex_protocol::models::ResponseItem; +use codex_thread_store::PersistContext; use tokio::sync::Semaphore; use tokio::sync::watch; use tokio::task::JoinHandle; @@ -77,17 +81,47 @@ impl Session { } /// Records authorization without adding pending input or reopening an active turn. - pub(crate) async fn record_user_goal_update(&self, update: UserGoalUpdate) { + pub(crate) async fn record_user_goal_update( + &self, + update: UserGoalUpdate, + ) -> std::io::Result<()> { // Goal metadata must not initialize a model step, even on a goal-first thread. // Keep context construction off callers' stacks, including the TUI RPC dispatcher. let context = Box::pin(self.new_inject_items_context()).await; + // Earlier Code Mode messages may need the persistence lock before this can return. + let user_input_order = self.reserve_user_input_order().await; let _guard = thread_settings::acquire_persistence_lock(self).await; - self.record_conversation_items( - &context, - context.model_info(), - &[ContextualUserFragment::into(update)], - ) - .await; + let mut item = ContextualUserFragment::into(update); + Self::stamp_response_item_for_history(&mut item, &context.sub_id); + Self::assign_missing_response_item_id(&mut item); + let mut item = ResponseItemEnvelope { + item, + metadata: Some(CodexHarnessMetadata { + user_input_order: Some(user_input_order), + ..Default::default() + }), + }; + if let Some(live_thread) = self.live_thread() { + // Capture settings under the same permit as the instruction, including when a + // goal creates the rollout. No fallible settings catch-up runs after publication. + live_thread + .append_items(&[ + RolloutItem::EventMsg(thread_settings::applied_event(self).await), + RolloutItem::ResponseItem(item.clone()), + ]) + .await + .map_err(std::io::Error::other)?; + } + // A failed append or checkpoint must not change live authorization or its revision. + self.try_ensure_rollout_materialized(PersistContext::ThreadPreparation) + .await?; + self.state.lock().await.history.record_annotated_items( + std::slice::from_mut(&mut item), + context.model_info().truncation_policy.into(), + ); + self.send_raw_response_items(&context, std::slice::from_ref(&item.item)) + .await; + Ok(()) } pub(crate) async fn reserve_user_input_order(&self) -> u64 { diff --git a/codex-rs/core/src/session/session.rs b/codex-rs/core/src/session/session.rs index 68a9fef1c0e8..966ce1f92db6 100644 --- a/codex-rs/core/src/session/session.rs +++ b/codex-rs/core/src/session/session.rs @@ -1192,6 +1192,35 @@ impl Session { e })?; let session_result: anyhow::Result> = async { + if let InitialHistory::Resumed(resumed) = &mut initial_history + // A header identifies a stored snapshot. Headerless histories are explicitly + // supplied by callers (for example, imports) and must not be replaced from disk. + && matches!( + resumed.history.first(), + Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == resumed.conversation_id + ) + && let Some(live_thread) = live_thread.as_ref() + && thread_store.as_any().is::() + { + // The initial snapshot predates writer ownership. A cold goal edit may have + // completed in between, including while V1 resume_agent was loading history. + // Reload under the live writer's ownership before publishing replayed context. + let items = match session_configuration.history_mode { + ThreadHistoryMode::Legacy => { + live_thread.load_history(/*include_archived*/ true).await?.items + } + ThreadHistoryMode::Paginated => { + thread_store + .load_latest_model_context(codex_thread_store::LoadThreadHistoryParams { + thread_id, + include_archived: true, + }) + .await? + .items + } + }; + resumed.history = Arc::new(items); + } let rollout_path = if let Some(live_thread) = live_thread.as_ref() { live_thread.local_rollout_path().await? } else { diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index 8221619a21c5..ccc0bfd5540f 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -5869,6 +5869,7 @@ async fn settings_checkpoint_waits_for_accepted_settings_persistence() { /*reference_context_item*/ None, /*world_state_baseline*/ None, CompactedHistoryMetadata { + input_goal_ids: Default::default(), message: "summary".to_string(), window_number, window_ids, @@ -6002,6 +6003,7 @@ async fn mcp_attribution_checkpoints_cover_batch_prefixes_compaction_and_restore /*reference_context_item*/ None, /*world_state_baseline*/ None, CompactedHistoryMetadata { + input_goal_ids: Default::default(), message: "summary".to_string(), window_number, window_ids, @@ -6125,7 +6127,25 @@ async fn compaction_persists_resume_metadata_and_companion_records() { thread_settings: session.thread_settings_snapshot().await, }; + let mut first_live_history = None; for with_baselines in [true, false] { + let input_goal_ids = + crate::context::UserGoalUpdate::message_ids(session.clone_history().await.raw_items()); + // The goal edit is accepted after the compaction input was captured. + let accepted_goal = if with_baselines { + session + .record_user_goal_update(crate::context::UserGoalUpdate::Clear) + .await + .expect("record concurrent clear"); + session + .clone_history() + .await + .annotated_items() + .last() + .cloned() + } else { + None + }; let (window_number, window_ids) = session.advance_auto_compact_window().await; session .replace_compacted_history( @@ -6133,6 +6153,7 @@ async fn compaction_persists_resume_metadata_and_companion_records() { with_baselines.then_some(turn_context_baseline.clone()), with_baselines.then_some(Arc::clone(&world_state)), CompactedHistoryMetadata { + input_goal_ids, message: String::new(), window_number, window_ids, @@ -6142,6 +6163,11 @@ async fn compaction_persists_resume_metadata_and_companion_records() { }, ) .await; + if let Some(accepted_goal) = accepted_goal { + let live_history = session.clone_history().await.annotated_items().to_vec(); + assert_eq!(&live_history[1..], &[accepted_goal]); + first_live_history = Some(live_history); + } } session.flush_rollout().await.expect("flush checkpoints"); @@ -6163,6 +6189,7 @@ async fn compaction_persists_resume_metadata_and_companion_records() { else { panic!("unexpected compaction records: {compaction_items:#?}"); }; + assert_eq!(first.replacement_history, first_live_history); assert_eq!(first.resume_metadata.as_ref(), Some(&expected)); assert_eq!(second.resume_metadata.as_ref(), Some(&expected)); assert_eq!( diff --git a/codex-rs/core/tests/suite/guardian_root_handoff.rs b/codex-rs/core/tests/suite/guardian_root_handoff.rs index 310f950a6c54..7f8fca4328c9 100644 --- a/codex-rs/core/tests/suite/guardian_root_handoff.rs +++ b/codex-rs/core/tests/suite/guardian_root_handoff.rs @@ -260,13 +260,15 @@ pub(crate) async fn handoff_scenario() -> Result> { let checkpoint: CompactedItem = serde_json::from_value(json!({ "message":"Root checkpoint.", "replacement_history":[], "retained_context":history.retained_context(), }))?; + test.codex + .append_rollout_items(&[RolloutItem::Compacted(checkpoint)]) + .await?; test.codex.flush_rollout().await?; - let mut rollout = test + let rollout = test .codex .load_history(/*include_archived*/ false) .await? .items; - rollout.push(RolloutItem::Compacted(checkpoint)); test.codex = crate::suite::guardian_checkpoint_migration::resume(&test, &test.codex, rollout).await?; expected.insert( diff --git a/codex-rs/ext/goal/src/api.rs b/codex-rs/ext/goal/src/api.rs index b414e9ccfb04..a2bd783dc8b0 100644 --- a/codex-rs/ext/goal/src/api.rs +++ b/codex-rs/ext/goal/src/api.rs @@ -141,10 +141,14 @@ impl GoalService { .map_err(|err| GoalServiceError::Internal(format!("failed to read thread goal: {err}"))) } + /// Records the user's instruction after validation and before changing goal state. + /// The recording future runs under the runtime's goal mutation permit; failure leaves + /// the goal unchanged. Recorded user intent remains valid if the database write fails. pub async fn set_thread_goal( &self, state_db: &codex_state::StateRuntime, request: GoalSetRequest<'_>, + record_user_instruction: impl Future> + Send, ) -> Result { let GoalSetRequest { thread_id, @@ -191,14 +195,21 @@ impl GoalService { tracing::warn!("failed to prepare external goal mutation: {err}"); } + let existing_goal = state_db + .thread_goals() + .get_thread_goal(thread_id) + .await + .map_err(|err| { + GoalServiceError::Internal(format!("failed to read thread goal: {err}")) + })?; + if objective.is_none() && existing_goal.is_none() { + return Err(GoalServiceError::InvalidRequest(format!( + "cannot update goal for thread {thread_id}: no goal exists" + ))); + } + record_user_instruction.await?; + let (goal, previous_goal) = if let Some(objective) = objective { - let existing_goal = state_db - .thread_goals() - .get_thread_goal(thread_id) - .await - .map_err(|err| { - GoalServiceError::Internal(format!("failed to read thread goal: {err}")) - })?; if let Some(existing_goal) = existing_goal.as_ref() { let previous_goal = PreviousGoalSnapshot::from(existing_goal); state_db @@ -238,18 +249,11 @@ impl GoalService { .map(|goal| (goal, None))? } } else { - let existing_goal = state_db - .thread_goals() - .get_thread_goal(thread_id) - .await - .map_err(|err| { - GoalServiceError::Internal(format!("failed to read thread goal: {err}")) - })? - .ok_or_else(|| { - GoalServiceError::InvalidRequest(format!( - "cannot update goal for thread {thread_id}: no goal exists" - )) - })?; + let existing_goal = existing_goal.ok_or_else(|| { + GoalServiceError::InvalidRequest(format!( + "cannot update goal for thread {thread_id}: no goal exists" + )) + })?; let previous_goal = PreviousGoalSnapshot::from(&existing_goal); let expected_goal_id = existing_goal.goal_id.clone(); state_db @@ -289,10 +293,12 @@ impl GoalService { }) } + /// Records a clear instruction even when no goal exists, then deletes goal state under the mutation permit. pub async fn clear_thread_goal( &self, state_db: &codex_state::StateRuntime, thread_id: ThreadId, + record_user_instruction: impl Future> + Send, ) -> Result { let runtime = self.runtime_for_thread(thread_id); // Hold this through the prepare/write window so idle continuation cannot @@ -312,6 +318,9 @@ impl GoalService { tracing::warn!("failed to prepare external goal mutation: {err}"); } + // A failed set can leave authorization in history without a goal row. + record_user_instruction.await?; + let cleared_goal = state_db .thread_goals() .delete_thread_goal(thread_id) diff --git a/codex-rs/ext/goal/tests/goal_extension_backend.rs b/codex-rs/ext/goal/tests/goal_extension_backend.rs index e0a952d1a8b0..c9a855b5552c 100644 --- a/codex-rs/ext/goal/tests/goal_extension_backend.rs +++ b/codex-rs/ext/goal/tests/goal_extension_backend.rs @@ -31,6 +31,7 @@ use codex_goal_extension::GoalExtensionConfig; use codex_goal_extension::GoalObjectiveUpdate; use codex_goal_extension::GoalRuntimeHandle; use codex_goal_extension::GoalService; +use codex_goal_extension::GoalServiceError; use codex_goal_extension::GoalSetRequest; use codex_goal_extension::GoalTokenBudgetUpdate; use codex_goal_extension::install_with_backend; @@ -1342,6 +1343,7 @@ async fn goal_service_external_set_active_preserves_concurrent_usage() -> anyhow token_budget: GoalTokenBudgetUpdate::Keep, max_goal_token_budget: None, }, + std::future::ready(Ok(())), ) .await?; harness @@ -1416,7 +1418,7 @@ async fn thread_stop_unregisters_goal_runtime_from_service() -> anyhow::Result<( assert!( harness .goal_service - .clear_thread_goal(runtime.as_ref(), thread_id) + .clear_thread_goal(runtime.as_ref(), thread_id, std::future::ready(Ok(()))) .await? ); assert_eq!(Vec::::new(), harness.sink.goal_events()); @@ -1483,17 +1485,28 @@ async fn goal_service_sets_gets_and_clears_thread_goal() -> anyhow::Result<()> { seed_thread_metadata(runtime.as_ref(), thread_id).await?; let api = GoalService::new(); - let set = api + let request = GoalSetRequest { + thread_id, + objective: GoalObjectiveUpdate::Set(" ship goal API ownership "), + status: None, + token_budget: GoalTokenBudgetUpdate::Set(Some(123)), + max_goal_token_budget: None, + }; + let failure = GoalServiceError::Internal("instruction recording failed".to_owned()); + let result = api .set_thread_goal( runtime.as_ref(), - GoalSetRequest { - thread_id, - objective: GoalObjectiveUpdate::Set(" ship goal API ownership "), - status: None, - token_budget: GoalTokenBudgetUpdate::Set(Some(123)), - max_goal_token_budget: None, - }, + request, + std::future::ready(Err(failure.clone())), ) + .await; + assert_eq!(result.unwrap_err(), failure); + assert_eq!( + api.get_thread_goal(runtime.as_ref(), thread_id).await?, + None + ); + let set = api + .set_thread_goal(runtime.as_ref(), request, std::future::ready(Ok(()))) .await?; let get = api .get_thread_goal(runtime.as_ref(), thread_id) @@ -1510,12 +1523,32 @@ async fn goal_service_sets_gets_and_clears_thread_goal() -> anyhow::Result<()> { assert_eq!(Some(123), get.token_budget); assert_eq!(Some("ship goal API ownership"), metadata.preview.as_deref()); - assert!(api.clear_thread_goal(runtime.as_ref(), thread_id).await?); + assert_eq!( + api.clear_thread_goal( + runtime.as_ref(), + thread_id, + std::future::ready(Err(failure.clone())) + ) + .await, + Err(failure), + ); + assert_eq!( + api.get_thread_goal(runtime.as_ref(), thread_id).await?, + Some(get) + ); + + assert!( + api.clear_thread_goal(runtime.as_ref(), thread_id, std::future::ready(Ok(()))) + .await? + ); assert_eq!( None, api.get_thread_goal(runtime.as_ref(), thread_id).await? ); - assert!(!api.clear_thread_goal(runtime.as_ref(), thread_id).await?); + assert!( + !api.clear_thread_goal(runtime.as_ref(), thread_id, std::future::ready(Ok(()))) + .await? + ); Ok(()) } @@ -1537,6 +1570,7 @@ async fn goal_service_enforces_maximum_token_budget_on_creation_and_updates() -> token_budget: GoalTokenBudgetUpdate::Keep, max_goal_token_budget: Some(100), }, + std::future::ready(Ok(())), ) .await?; assert_eq!(goal.goal.token_budget, Some(100)); @@ -1551,6 +1585,7 @@ async fn goal_service_enforces_maximum_token_budget_on_creation_and_updates() -> token_budget: GoalTokenBudgetUpdate::Set(Some(101)), max_goal_token_budget: Some(100), }, + std::future::ready(Ok(())), ) .await .expect_err("goal budget above the configured maximum should fail"); @@ -1577,6 +1612,7 @@ async fn goal_service_enforces_maximum_token_budget_on_creation_and_updates() -> token_budget: GoalTokenBudgetUpdate::Set(Some(99)), max_goal_token_budget: Some(100), }, + std::future::ready(Ok(())), ) .await?; assert_eq!(goal.goal.token_budget, Some(99)); @@ -1591,6 +1627,7 @@ async fn goal_service_enforces_maximum_token_budget_on_creation_and_updates() -> token_budget: GoalTokenBudgetUpdate::Set(None), max_goal_token_budget: Some(100), }, + std::future::ready(Ok(())), ) .await?; assert_eq!(goal.goal.token_budget, Some(100)); diff --git a/codex-rs/tui/src/app_server_session.rs b/codex-rs/tui/src/app_server_session.rs index f9c6f5fd7793..fac4b637022f 100644 --- a/codex-rs/tui/src/app_server_session.rs +++ b/codex-rs/tui/src/app_server_session.rs @@ -1493,6 +1493,7 @@ impl AppServerSession { .request_typed(ClientRequest::ThreadGoalSet { request_id, params: ThreadGoalSetParams { + origin: Some(codex_app_server_protocol::ThreadGoalMutationOrigin::User), thread_id: thread_id.to_string(), objective, status, @@ -1512,6 +1513,7 @@ impl AppServerSession { .request_typed(ClientRequest::ThreadGoalClear { request_id, params: ThreadGoalClearParams { + origin: Some(codex_app_server_protocol::ThreadGoalMutationOrigin::User), thread_id: thread_id.to_string(), }, }) diff --git a/sdk/python/src/openai_codex/generated/v2_all.py b/sdk/python/src/openai_codex/generated/v2_all.py index 6a2edc47255b..e2fef8e38359 100644 --- a/sdk/python/src/openai_codex/generated/v2_all.py +++ b/sdk/python/src/openai_codex/generated/v2_all.py @@ -5247,13 +5247,6 @@ class ThreadExtra(BaseModel): ) -class ThreadGoalClearParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - thread_id: Annotated[str, Field(alias="threadId")] - - class ThreadGoalClearResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -5275,6 +5268,11 @@ class ThreadGoalGetParams(BaseModel): thread_id: Annotated[str, Field(alias="threadId")] +class ThreadGoalMutationOrigin(Enum): + user = "user" + automatic = "automatic" + + class ThreadGoalStatus(Enum): active = "active" paused = "paused" @@ -6867,15 +6865,6 @@ class ThreadGoalGetRequest(BaseModel): params: ThreadGoalGetParams -class ThreadGoalClearRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[Literal["thread/goal/clear"], Field(title="Thread/goal/clearRequestMethod")] - params: ThreadGoalClearParams - - class ThreadMetadataUpdateRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -9812,6 +9801,17 @@ class ThreadGoal(BaseModel): updated_at: Annotated[int, Field(alias="updatedAt")] +class ThreadGoalClearParams(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + origin: Annotated[ + ThreadGoalMutationOrigin | None, + Field(description="Missing provenance does not supply user authorization."), + ] = None + thread_id: Annotated[str, Field(alias="threadId")] + + class ThreadGoalGetResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -9824,6 +9824,10 @@ class ThreadGoalSetParams(BaseModel): populate_by_name=True, ) objective: str | None = None + origin: Annotated[ + ThreadGoalMutationOrigin | None, + Field(description="Missing provenance does not supply user authorization."), + ] = None status: ThreadGoalStatus | None = None thread_id: Annotated[str, Field(alias="threadId")] token_budget: Annotated[int | None, Field(alias="tokenBudget")] = None @@ -10524,6 +10528,15 @@ class ThreadGoalSetRequest(BaseModel): params: ThreadGoalSetParams +class ThreadGoalClearRequest(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + id: RequestId + method: Annotated[Literal["thread/goal/clear"], Field(title="Thread/goal/clearRequestMethod")] + params: ThreadGoalClearParams + + class ThreadListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, From d7b0d4aa663172876871b605d53283bc0120882b Mon Sep 17 00:00:00 2001 From: felixxia-oai Date: Wed, 30 Sep 2026 11:44:52 +0000 Subject: [PATCH 6/8] Return authoritative replay history when resuming a thread (#49599) ## Why A stored history snapshot can become stale before a resumed thread acquires writer ownership. Resume must include writes committed before that acquisition. ## What changed Make `ThreadStore::resume_thread` return the replay context and use it for session restoration and metadata initialization. The local store refreshes stored snapshots while holding writer ownership, reads through the installed writer to honor explicit rollout paths, and releases the writer if loading context fails. Explicit histories without a canonical session header retain their override semantics. ## Testing Extend resume tests to cover edits made after the initial snapshot in both legacy and paginated history modes, stale SQLite rollout paths, and preservation of explicitly supplied history. GitOrigin-RevId: 2361f524d324c859f5dfcf2863320e2045736c2e --- codex-rs/core/src/session/session.rs | 63 +++++-------- .../tests/suite/guardian_persistence_tests.rs | 2 +- .../tests/suite/multi_agent_restore_tests.rs | 3 +- .../tests/suite/pending_input_persistence.rs | 2 +- codex-rs/thread-store/src/in_memory.rs | 28 ++++-- codex-rs/thread-store/src/live_thread.rs | 48 ++++------ .../thread-store/src/local/live_writer.rs | 90 ++++++++++++------- codex-rs/thread-store/src/local/mod.rs | 76 +++++++++++++--- codex-rs/thread-store/src/store.rs | 15 +++- codex-rs/thread-store/src/types.rs | 3 +- 10 files changed, 203 insertions(+), 127 deletions(-) diff --git a/codex-rs/core/src/session/session.rs b/codex-rs/core/src/session/session.rs index 966ce1f92db6..65cabca09d0a 100644 --- a/codex-rs/core/src/session/session.rs +++ b/codex-rs/core/src/session/session.rs @@ -1011,9 +1011,10 @@ impl Session { let mcp_auth = persistence_auth.clone(); let thread_persistence_fut = async { if config.ephemeral { - Ok::<_, anyhow::Error>((None, LiveThreadInitGuard::new(/*live_thread*/ None))) + Ok::<_, anyhow::Error>((None, LiveThreadInitGuard::new(/*live_thread*/ None), None)) } else { let mut local_guard = LiveThreadInitGuard::default(); + let mut resume_context = None; let mut managed_guard = match &startup { Some(startup) => Some(startup.persistence.lock().await), None => None, @@ -1096,16 +1097,23 @@ impl Session { }, }, }; - guard - .acquire(LiveThread::resume( - Arc::clone(&thread_store), - session_configuration.history_mode, - params, - )) - .await? + let store = Arc::clone(&thread_store); + let history_mode = session_configuration.history_mode; + let (context_tx, context_rx) = tokio::sync::oneshot::channel(); + let live_thread = guard + .acquire(async move { + let (live_thread, history) = + LiveThread::resume(store, history_mode, params).await?; + // Cancellation still leaves the writer with the acquisition guard. + let _ = context_tx.send(history); + Ok(live_thread) + }) + .await?; + resume_context = Some(context_rx.await?); + live_thread } }; - Ok((Some(live_thread), local_guard)) + Ok((Some(live_thread), local_guard, resume_context)) } } .instrument(info_span!( @@ -1187,39 +1195,16 @@ impl Session { let (thread_persistence_result, state_db_ctx, (auth, mcp_projection)) = tokio::join!(thread_persistence_fut, state_db_fut, auth_and_mcp_fut); - let (live_thread, mut live_thread_init) = thread_persistence_result.map_err(|e| { - error!("failed to initialize thread persistence: {e:#}"); - e - })?; + let (live_thread, mut live_thread_init, resume_context) = thread_persistence_result + .map_err(|e| { + error!("failed to initialize thread persistence: {e:#}"); + e + })?; let session_result: anyhow::Result> = async { if let InitialHistory::Resumed(resumed) = &mut initial_history - // A header identifies a stored snapshot. Headerless histories are explicitly - // supplied by callers (for example, imports) and must not be replaced from disk. - && matches!( - resumed.history.first(), - Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == resumed.conversation_id - ) - && let Some(live_thread) = live_thread.as_ref() - && thread_store.as_any().is::() + && let Some(history) = resume_context { - // The initial snapshot predates writer ownership. A cold goal edit may have - // completed in between, including while V1 resume_agent was loading history. - // Reload under the live writer's ownership before publishing replayed context. - let items = match session_configuration.history_mode { - ThreadHistoryMode::Legacy => { - live_thread.load_history(/*include_archived*/ true).await?.items - } - ThreadHistoryMode::Paginated => { - thread_store - .load_latest_model_context(codex_thread_store::LoadThreadHistoryParams { - thread_id, - include_archived: true, - }) - .await? - .items - } - }; - resumed.history = Arc::new(items); + resumed.history = history; } let rollout_path = if let Some(live_thread) = live_thread.as_ref() { live_thread.local_rollout_path().await? diff --git a/codex-rs/core/tests/suite/guardian_persistence_tests.rs b/codex-rs/core/tests/suite/guardian_persistence_tests.rs index f306967d3aa2..60a072856a5f 100644 --- a/codex-rs/core/tests/suite/guardian_persistence_tests.rs +++ b/codex-rs/core/tests/suite/guardian_persistence_tests.rs @@ -73,7 +73,7 @@ impl ThreadStore for GatedReviewerStore { } delegate_store_methods! { - fn resume_thread(params: ResumeThreadParams) -> (); + fn resume_thread(params: ResumeThreadParams) -> Arc>; fn append_items(params: AppendThreadItemsParams) -> (); fn discard_thread(thread_id: ThreadId) -> (); fn load_history(params: LoadThreadHistoryParams) -> StoredThreadHistory; diff --git a/codex-rs/core/tests/suite/multi_agent_restore_tests.rs b/codex-rs/core/tests/suite/multi_agent_restore_tests.rs index 6e7abcc142d2..906816fad78e 100644 --- a/codex-rs/core/tests/suite/multi_agent_restore_tests.rs +++ b/codex-rs/core/tests/suite/multi_agent_restore_tests.rs @@ -10,6 +10,7 @@ use super::request_has_model; use anyhow::Context; use anyhow::Result; use codex_features::Feature; +use codex_history::RolloutItem; use codex_protocol::ThreadId; use codex_protocol::error::CodexErrorDetails; use codex_protocol::protocol::EventMsg; @@ -76,7 +77,7 @@ impl ThreadStore for GatedChildMetadataStore { delegate_store_methods! { fn create_thread(params: CreateThreadParams) -> (); - fn resume_thread(params: ResumeThreadParams) -> (); + fn resume_thread(params: ResumeThreadParams) -> Arc>; fn append_items(params: AppendThreadItemsParams) -> (); fn flush_thread(thread_id: ThreadId) -> (); fn shutdown_thread(thread_id: ThreadId) -> (); diff --git a/codex-rs/core/tests/suite/pending_input_persistence.rs b/codex-rs/core/tests/suite/pending_input_persistence.rs index e94db8194660..9d84ca532473 100644 --- a/codex-rs/core/tests/suite/pending_input_persistence.rs +++ b/codex-rs/core/tests/suite/pending_input_persistence.rs @@ -104,7 +104,7 @@ impl ThreadStore for GatedCheckpointStore { delegate_store_methods! { fn create_thread(params: CreateThreadParams) -> (); - fn resume_thread(params: ResumeThreadParams) -> (); + fn resume_thread(params: ResumeThreadParams) -> Arc>; fn append_items(params: AppendThreadItemsParams) -> (); fn discard_thread(thread_id: ThreadId) -> (); fn load_history(params: LoadThreadHistoryParams) -> StoredThreadHistory; diff --git a/codex-rs/thread-store/src/in_memory.rs b/codex-rs/thread-store/src/in_memory.rs index b7a38992602f..7b11fab0962c 100644 --- a/codex-rs/thread-store/src/in_memory.rs +++ b/codex-rs/thread-store/src/in_memory.rs @@ -616,20 +616,33 @@ impl InMemoryThreadStore { Ok(()) } - async fn resume_thread(&self, params: ResumeThreadParams) -> ThreadStoreResult<()> { + async fn resume_thread( + &self, + params: ResumeThreadParams, + ) -> ThreadStoreResult>> { let mut state = self.state.lock().await; state.calls.resume_thread += 1; if let Some(history) = params.history { - state - .histories - .insert(params.thread_id, Arc::unwrap_or_clone(history)); + if matches!( + history.first(), + Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == params.thread_id + ) { + state + .histories + .entry(params.thread_id) + .or_insert_with(|| Arc::unwrap_or_clone(history)); + } else { + state + .histories + .insert(params.thread_id, Arc::unwrap_or_clone(history)); + } } else { state.histories.entry(params.thread_id).or_default(); } if let Some(rollout_path) = params.rollout_path { state.rollout_paths.insert(rollout_path, params.thread_id); } - Ok(()) + Ok(Arc::new(state.histories[¶ms.thread_id].clone())) } async fn append_items(&self, params: AppendThreadItemsParams) -> ThreadStoreResult<()> { @@ -900,7 +913,10 @@ impl ThreadStore for InMemoryThreadStore { Box::pin(InMemoryThreadStore::create_thread(self, params)) } - fn resume_thread(&self, params: ResumeThreadParams) -> ThreadStoreFuture<'_, ()> { + fn resume_thread( + &self, + params: ResumeThreadParams, + ) -> ThreadStoreFuture<'_, Arc>> { Box::pin(InMemoryThreadStore::resume_thread(self, params)) } diff --git a/codex-rs/thread-store/src/live_thread.rs b/codex-rs/thread-store/src/live_thread.rs index f6f57e6dd0a2..f9bb507fbc2b 100644 --- a/codex-rs/thread-store/src/live_thread.rs +++ b/codex-rs/thread-store/src/live_thread.rs @@ -179,14 +179,13 @@ impl LiveThread { Ok(live_thread) } + /// Reopens persistence and returns the replay history selected under writer ownership. pub async fn resume( thread_store: Arc, history_mode: ThreadHistoryMode, - params: ResumeThreadParams, - ) -> ThreadStoreResult { + mut params: ResumeThreadParams, + ) -> ThreadStoreResult<(Self, Arc>)> { let thread_id = params.thread_id; - let should_load_history = params.history.is_none(); - let include_archived = params.include_archived; let metadata = if history_mode == ThreadHistoryMode::Paginated && let Some(local_store) = thread_store.as_any().downcast_ref::() && let Some(state_db) = local_store.state_db().await @@ -200,34 +199,19 @@ impl LiveThread { } else { None }; - let mut metadata_sync = ThreadMetadataSync::for_resume(¶ms, metadata.as_ref()); - thread_store.resume_thread(params).await?; - if should_load_history { - match thread_store - .load_history(LoadThreadHistoryParams { - thread_id, - include_archived, - }) - .await - { - Ok(history) => metadata_sync.record_resume_history(&history.items), - Err(err) => { - if let Err(discard_err) = thread_store.discard_thread(thread_id).await { - warn!( - "failed to discard thread persistence after resume history load failed: {discard_err}" - ); - } - return Err(err); - } - } - } - Ok(Self { - thread_id, - history_mode, - thread_store, - metadata_sync: Arc::new(Mutex::new(metadata_sync)), - persistence_telemetry: RolloutPersistenceTelemetry::new(thread_id), - }) + let history = thread_store.resume_thread(params.clone()).await?; + params.history = Some(Arc::clone(&history)); + let metadata_sync = ThreadMetadataSync::for_resume(¶ms, metadata.as_ref()); + Ok(( + Self { + thread_id, + history_mode, + thread_store, + metadata_sync: Arc::new(Mutex::new(metadata_sync)), + persistence_telemetry: RolloutPersistenceTelemetry::new(thread_id), + }, + history, + )) } #[tracing::instrument( diff --git a/codex-rs/thread-store/src/local/live_writer.rs b/codex-rs/thread-store/src/local/live_writer.rs index 6a2d95f2b068..450f0304da0b 100644 --- a/codex-rs/thread-store/src/local/live_writer.rs +++ b/codex-rs/thread-store/src/local/live_writer.rs @@ -1,4 +1,5 @@ use std::path::PathBuf; +use std::sync::Arc; use codex_protocol::ThreadId; use codex_protocol::protocol::ThreadHistoryMode; @@ -14,7 +15,7 @@ use super::LocalThreadStore; use super::create_thread; use crate::AppendThreadItemsParams; use crate::CreateThreadParams; -use crate::ReadThreadParams; +use crate::LoadThreadHistoryParams; use crate::ResumeThreadParams; use crate::ThreadStoreError; use crate::ThreadStoreResult; @@ -40,13 +41,42 @@ pub(super) async fn create_thread( pub(super) async fn resume_thread( store: &LocalThreadStore, params: ResumeThreadParams, -) -> ThreadStoreResult<()> { +) -> ThreadStoreResult>> { let _live_writer_guard = store.live_writer_locks.lock(params.thread_id).await; store.ensure_live_recorder_absent(params.thread_id).await?; let writer_lock = store.acquire_writer_lock(params.thread_id)?; + let supplied_history = params + .history + .as_ref() + .filter(|history| { + !matches!( + history.first(), + Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == params.thread_id + ) + }) + .cloned(); + let rollout_path = match params.rollout_path { + Some(rollout_path) => rollout_path, + None => { + let resolved = if params.include_archived { + super::thread_rollout_resolver::resolve_current_including_archived( + store, + params.thread_id, + ) + .await? + } else { + super::thread_rollout_resolver::resolve_current(store, params.thread_id).await? + }; + resolved + .ok_or(ThreadStoreError::ThreadNotFound { + thread_id: params.thread_id, + })? + .path + } + }; let history_mode = if let Some(history) = params.history.as_deref() { canonical_history_mode_from_rollout_items(history) - } else if let Some(rollout_path) = params.rollout_path.as_ref() { + } else { super::read_thread::read_thread_by_rollout_path( store, rollout_path.clone(), @@ -55,36 +85,6 @@ pub(super) async fn resume_thread( ) .await? .history_mode - } else { - super::read_thread::read_thread( - store, - ReadThreadParams { - thread_id: params.thread_id, - include_archived: params.include_archived, - include_history: false, - }, - ) - .await? - .history_mode - }; - let rollout_path = match (params.rollout_path, params.history) { - (Some(rollout_path), _history) => rollout_path, - (None, history) => { - let thread = super::read_thread::read_thread( - store, - ReadThreadParams { - thread_id: params.thread_id, - include_archived: params.include_archived, - include_history: history.is_none(), - }, - ) - .await?; - thread - .rollout_path - .ok_or_else(|| ThreadStoreError::Internal { - message: format!("thread {} does not have a rollout path", params.thread_id), - })? - } }; let cwd = params .metadata @@ -122,7 +122,29 @@ pub(super) async fn resume_thread( history_mode, writer_lock, ) - .await + .await?; + if let Some(history) = supplied_history { + return Ok(history); + } + // Resolve through the installed writer so explicit paths and materialized compressed rollouts + // take precedence over SQLite. Both ownership guards remain held throughout this read. + let history = super::model_context::load_latest_model_context( + store, + LoadThreadHistoryParams { + thread_id: params.thread_id, + include_archived: params.include_archived, + }, + ) + .await; + if history.is_err() { + let entry = store.live_recorders.lock().await.remove(¶ms.thread_id); + if let Some(entry) = entry + && let Err(err) = entry.recorder.discard().await + { + warn!("failed to discard writer after resume history load failed: {err}"); + } + } + history.map(|history| Arc::new(history.items)) } #[tracing::instrument( diff --git a/codex-rs/thread-store/src/local/mod.rs b/codex-rs/thread-store/src/local/mod.rs index 05f2d9061da5..55822428a18c 100644 --- a/codex-rs/thread-store/src/local/mod.rs +++ b/codex-rs/thread-store/src/local/mod.rs @@ -44,6 +44,7 @@ mod timestamp_metadata_tests; use codex_protocol::ThreadId; use codex_protocol::protocol::ThreadHistoryMode; +use codex_rollout::RolloutItem; use codex_rollout::RolloutRecorder; use codex_rollout::StateDbHandle; use codex_rollout::WriterLockCoordinator; @@ -526,7 +527,10 @@ impl ThreadStore for LocalThreadStore { }) } - fn resume_thread(&self, params: ResumeThreadParams) -> ThreadStoreFuture<'_, ()> { + fn resume_thread( + &self, + params: ResumeThreadParams, + ) -> ThreadStoreFuture<'_, Arc>> { Box::pin(async move { live_writer::resume_thread(self, params).await }) } @@ -804,6 +808,7 @@ mod tests { use codex_protocol::items::TurnItem; use codex_protocol::items::UserMessageItem; use codex_protocol::models::BaseInstructions; + use codex_protocol::models::ContentItem; use codex_protocol::models::FunctionCallOutputPayload; use codex_protocol::models::MessagePhase; use codex_protocol::models::ResponseItem; @@ -992,13 +997,14 @@ mod tests { .await .expect("update stale sqlite rollout path"); - let resumed = LiveThread::resume( + let history = Arc::new(vec![user_message_item("bounded suffix")]); + let (resumed, supplied_history) = LiveThread::resume( store, ThreadHistoryMode::Paginated, ResumeThreadParams { thread_id, rollout_path: Some(rollout_path.clone()), - history: Some(Arc::new(vec![user_message_item("bounded suffix")])), + history: Some(Arc::clone(&history)), include_archived: false, metadata: ThreadPersistenceMetadata { cwd: Some(home.path().to_path_buf()), @@ -1009,6 +1015,7 @@ mod tests { ) .await .expect("resume paginated thread from its requested rollout"); + assert!(Arc::ptr_eq(&supplied_history, &history)); assert_eq!( resumed.local_rollout_path().await.expect("live rollout"), Some(rollout_path) @@ -1344,7 +1351,7 @@ mod tests { let thread_id = ThreadId::from_string(&uuid.to_string()).expect("valid thread id"); let rollout_path = write_session_file(home.path(), "2025-01-03T17-00-00", uuid).expect("session file"); - let live_thread = LiveThread::resume( + let (live_thread, _history) = LiveThread::resume( store, ThreadHistoryMode::Legacy, ResumeThreadParams { @@ -1399,7 +1406,7 @@ mod tests { let thread_id = ThreadId::from_string(&uuid.to_string()).expect("valid thread id"); let rollout_path = write_session_file(external_home.path(), "2025-01-03T17-30-00", uuid) .expect("external session file"); - let live_thread = LiveThread::resume( + let (live_thread, _history) = LiveThread::resume( store, ThreadHistoryMode::Legacy, ResumeThreadParams { @@ -1529,12 +1536,18 @@ mod tests { } #[tokio::test] - async fn resume_thread_reopens_live_writer_and_appends() { + async fn resume_thread_reopens_live_writer_and_appends_with_stale_sqlite_path() { let home = TempDir::new().expect("temp dir"); let config = test_config(home.path()); + let runtime = codex_state::StateRuntime::init( + config.sqlite.clone(), + config.default_model_provider_id.clone(), + ) + .await + .expect("state db should initialize"); let thread_id = ThreadId::default(); - let first_store = LocalThreadStore::new(config.clone(), /*state_db*/ None); + let first_store = LocalThreadStore::new(config.clone(), Some(runtime.clone())); first_store .create_thread(create_thread_params(thread_id)) .await @@ -1563,7 +1576,21 @@ mod tests { .await .expect("shutdown initial writer"); - let resumed_store = LocalThreadStore::new(config, /*state_db*/ None); + let mut builder = codex_state::ThreadMetadataBuilder::new( + thread_id, + home.path().join("missing-rollout.jsonl"), + chrono::Utc::now(), + SessionSource::Exec, + ); + builder.history_mode = ThreadHistoryMode::Legacy; + builder.cwd = home.path().to_path_buf(); + let metadata = builder.build("test-provider"); + runtime + .upsert_thread(&metadata) + .await + .expect("store stale sqlite path"); + + let resumed_store = LocalThreadStore::new(config, Some(runtime)); resumed_store .resume_thread(ResumeThreadParams { thread_id, @@ -1614,10 +1641,18 @@ mod tests { .live_rollout_path(thread_id) .await .expect("load rollout path"); + let mut expected = primary + .load_latest_model_context(LoadThreadHistoryParams { + thread_id, + include_archived: true, + }) + .await + .expect("load initial snapshot") + .items; let resume_params = ResumeThreadParams { thread_id, rollout_path: Some(rollout_path), - history: None, + history: Some(Arc::new(expected.clone())), include_archived: true, metadata: thread_metadata(), }; @@ -1634,14 +1669,35 @@ mod tests { .expect_err("competing resume should fail"); assert!(matches!(error, ThreadStoreError::Conflict { .. })); + let late_edit = RolloutItem::ResponseItem( + ResponseItem::Message { + id: None, + role: "user".to_string(), + content: vec![ContentItem::InputText { + text: "edit after the initial snapshot".to_string(), + }], + phase: None, + internal_chat_message_metadata_passthrough: None, + } + .into(), + ); + primary + .append_items(AppendThreadItemsParams { + thread_id, + items: vec![late_edit.clone()], + }) + .await + .expect("append before handing off writer ownership"); + expected.push(late_edit); primary .shutdown_thread(thread_id) .await .expect("shutdown should release writer ownership"); - secondary + let resumed = secondary .resume_thread(resume_params) .await .expect("resume after shutdown should acquire writer ownership"); + assert_eq!(serde_json::json!(*resumed), serde_json::json!(expected)); } } diff --git a/codex-rs/thread-store/src/store.rs b/codex-rs/thread-store/src/store.rs index d67c3b766a89..fb7b93803d6d 100644 --- a/codex-rs/thread-store/src/store.rs +++ b/codex-rs/thread-store/src/store.rs @@ -1,8 +1,10 @@ use codex_protocol::ThreadId; use codex_protocol::protocol::ThreadHistoryMode; +use codex_rollout::RolloutItem; use std::any::Any; use std::future::Future; use std::pin::Pin; +use std::sync::Arc; use crate::AddThreadAttachmentOutcome; use crate::AddThreadAttachmentParams; @@ -138,8 +140,17 @@ pub trait ThreadStore: Any + Send + Sync { }) } - /// Reopens an existing thread for live appends. - fn resume_thread(&self, params: ResumeThreadParams) -> ThreadStoreFuture<'_, ()>; + /// Reopens an existing thread for live appends and returns its authoritative replay context. + /// + /// Stored snapshots supplied by callers may predate writer acquisition. Implementations must + /// include writes committed before acquisition in the returned context. Explicitly supplied + /// histories without a canonical session header retain their import/override semantics. + /// Returned histories can share the caller's allocation when no refresh is needed. + /// On failure, implementations must release any writer acquired by this operation. + fn resume_thread( + &self, + params: ResumeThreadParams, + ) -> ThreadStoreFuture<'_, Arc>>; /// Appends raw rollout items to a live thread. /// diff --git a/codex-rs/thread-store/src/types.rs b/codex-rs/thread-store/src/types.rs index 5030f8864d3c..4e842556d3e6 100644 --- a/codex-rs/thread-store/src/types.rs +++ b/codex-rs/thread-store/src/types.rs @@ -125,7 +125,8 @@ pub struct ResumeThreadParams { pub thread_id: ThreadId, /// Known local rollout path when the caller resumed from a specific file. pub rollout_path: Option, - /// Known replay history for the resumed thread, if already loaded by the caller. + /// Previously loaded replay history. A canonical session header identifies a stored snapshot + /// that may need refreshing under writer ownership; other histories are explicit overrides. pub history: Option>>, /// Whether archived threads may be reopened. pub include_archived: bool, From 92bc601ad60542c92bf0bb1e7a2eb70b84ac49d2 Mon Sep 17 00:00:00 2001 From: felixxia-oai Date: Wed, 30 Sep 2026 11:44:52 +0000 Subject: [PATCH 7/8] Reuse unchanged history snapshots when resuming threads (#49600) ## Why Resuming a thread rereads persisted history even when a preloaded snapshot is unchanged. Reusing that snapshot must still account for writes committed before writer ownership is acquired. ## What changed - Carry optional, non-serialized revisions from stored history and model context through thread and agent resume paths. - Validate the revision under writer ownership and reuse the shared snapshot when it matches. Reload stored history when the revision is missing or changed, while preserving explicit history overrides. - Resolve the selected rollout before loading context, validate compressed snapshots before materialization, and enforce archived-thread restrictions on canonical paths. ## Testing Extend coverage for snapshot reuse and late-write refresh in legacy and paginated histories, compressed rollout reuse, archived rollout symlinks, and cold child restoration that includes edits made after preloading history. GitOrigin-RevId: e1fd7aee6ef2b30f41951e6b7e6b01c3e1420cab --- .../request_processors/thread_processor.rs | 20 ++--- codex-rs/core/src/agent/control/spawn.rs | 20 +++-- codex-rs/core/src/agent/control_tests.rs | 1 + .../src/session/reasoning_effort_tests.rs | 1 + .../session/rollout_reconstruction_tests.rs | 16 ++++ codex-rs/core/src/session/session.rs | 2 + codex-rs/core/src/session/tests.rs | 10 +++ codex-rs/core/src/thread_manager.rs | 2 + codex-rs/core/src/thread_manager_tests.rs | 3 + .../core/tests/suite/agent_control_tests.rs | 1 + codex-rs/core/tests/suite/agents_md.rs | 2 + codex-rs/core/tests/suite/compact.rs | 1 + codex-rs/core/tests/suite/fork_thread.rs | 3 + .../guardian_checkpoint_migration_tests.rs | 1 + codex-rs/core/tests/suite/guardian_history.rs | 1 + .../tests/suite/guardian_retained_context.rs | 2 + .../suite/guardian_subagent_authorization.rs | 1 + .../tests/suite/multi_agent_restore_tests.rs | 65 +++++++++++++++- .../tests/suite/pending_input_persistence.rs | 1 + codex-rs/core/tests/suite/resume.rs | 1 + codex-rs/core/tests/suite/resume_warning.rs | 1 + .../core/tests/suite/rollout_compression.rs | 1 + codex-rs/core/tests/suite/skills_extension.rs | 1 + .../src/sessions/append.rs | 1 + codex-rs/history/src/lib.rs | 3 + codex-rs/history/src/tests.rs | 2 + codex-rs/rollout/src/recorder.rs | 1 + codex-rs/thread-store/src/in_memory.rs | 5 ++ .../src/local/compression_writer_tests.rs | 20 +++++ .../thread-store/src/local/delete_thread.rs | 1 + .../src/local/history_revision.rs | 28 +++++++ .../thread-store/src/local/live_writer.rs | 76 ++++++++----------- codex-rs/thread-store/src/local/mod.rs | 73 ++++++++++++++---- .../thread-store/src/local/model_context.rs | 26 +++++-- .../src/local/model_context_tests.rs | 6 +- .../thread-store/src/local/read_thread.rs | 10 ++- .../thread-store/src/local/revert_thread.rs | 4 +- .../thread-store/src/local/rollout_lineage.rs | 19 ++++- .../src/local/rollout_lineage_tests.rs | 8 +- .../src/local/thread_history/read.rs | 8 +- .../src/local/thread_history/realtime.rs | 4 +- .../src/local/thread_history/search.rs | 4 +- .../thread_history_materialization_tests.rs | 2 + .../src/local/update_thread_metadata.rs | 3 + codex-rs/thread-store/src/store.rs | 3 +- .../thread-store/src/thread_metadata_sync.rs | 1 + codex-rs/thread-store/src/types.rs | 9 +++ 47 files changed, 372 insertions(+), 102 deletions(-) create mode 100644 codex-rs/thread-store/src/local/history_revision.rs diff --git a/codex-rs/app-server/src/request_processors/thread_processor.rs b/codex-rs/app-server/src/request_processors/thread_processor.rs index e3ce2b0b22e6..e36ca147e741 100644 --- a/codex-rs/app-server/src/request_processors/thread_processor.rs +++ b/codex-rs/app-server/src/request_processors/thread_processor.rs @@ -4598,6 +4598,7 @@ impl ThreadRequestProcessor { .await .map_err(thread_store_resume_read_error)?; let history = InitialHistory::Resumed(ResumedHistory { + history_revision: model_context.revision, conversation_id: model_context.thread_id, history: Arc::new(model_context.items), rollout_path: stored_thread.rollout_path.clone(), @@ -4692,18 +4693,15 @@ impl ThreadRequestProcessor { stored_thread: &mut StoredThread, ) -> Result { let thread_id = stored_thread.thread_id; - let history = stored_thread - .history - .take() - .map(|history| history.items) - .ok_or_else(|| { - internal_error(format!( - "thread {thread_id} did not include persisted history" - )) - })?; + let history = stored_thread.history.take().ok_or_else(|| { + internal_error(format!( + "thread {thread_id} did not include persisted history" + )) + })?; Ok(InitialHistory::Resumed(ResumedHistory { + history_revision: history.revision, conversation_id: thread_id, - history: Arc::new(history), + history: Arc::new(history.items), rollout_path: stored_thread.rollout_path.clone(), })) } @@ -5076,6 +5074,7 @@ impl ThreadRequestProcessor { // The fork cutoff can remove the only TurnContext that records the selected version. // Recover it from the untrimmed source or live parent, independently of permission overrides. let source_multi_agent_version = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: source_thread_id, history: Arc::clone(latest_context.as_ref().unwrap_or(&source_history_items)), rollout_path: source_thread.rollout_path.clone(), @@ -5203,6 +5202,7 @@ impl ThreadRequestProcessor { ForkSnapshot::Interrupted, fork_options, InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: source_thread_id, history: history_items, rollout_path: source_thread.rollout_path.clone(), diff --git a/codex-rs/core/src/agent/control/spawn.rs b/codex-rs/core/src/agent/control/spawn.rs index 277ce112bd84..7ca849717bb3 100644 --- a/codex-rs/core/src/agent/control/spawn.rs +++ b/codex-rs/core/src/agent/control/spawn.rs @@ -160,7 +160,7 @@ async fn load_agent_model_context( state: &ThreadManagerState, thread_id: ThreadId, history_mode: ThreadHistoryMode, -) -> CodexResult>> { +) -> CodexResult> { match history_mode { ThreadHistoryMode::Legacy => Ok(state .read_stored_thread(ReadThreadParams { @@ -170,15 +170,18 @@ async fn load_agent_model_context( }) .await? .history - .map(|history| history.items)), + .map(|history| codex_thread_store::StoredModelContext { + thread_id, + revision: history.revision, + items: history.items, + })), ThreadHistoryMode::Paginated => Ok(Some( state .load_latest_model_context(LoadThreadHistoryParams { thread_id, include_archived: true, }) - .await? - .items, + .await?, )), } } @@ -365,8 +368,9 @@ impl LocalAgentControl { .await? .ok_or(CodexErr::ThreadNotFound(thread_id))?; let initial_history = InitialHistory::Resumed(ResumedHistory { + history_revision: history.revision, conversation_id: thread_id, - history: Arc::new(history), + history: Arc::new(history.items), rollout_path: stored_thread.rollout_path, }); if initial_history.get_multi_agent_version() != Some(MultiAgentVersion::V2) { @@ -992,7 +996,8 @@ impl LocalAgentControl { CodexErr::Fatal(format!( "parent thread history unavailable for fork: {parent_thread_id}" )) - })?; + })? + .items; let selected_capability_roots = forked_rollout_items .iter() @@ -1351,8 +1356,9 @@ impl LocalAgentControl { .await? .ok_or(CodexErr::ThreadNotFound(thread_id))?; let initial_history = InitialHistory::Resumed(ResumedHistory { + history_revision: history.revision, conversation_id: thread_id, - history: Arc::new(history), + history: Arc::new(history.items), rollout_path: stored_thread.rollout_path, }); let parent_thread_id = stored_thread.parent_thread_id; diff --git a/codex-rs/core/src/agent/control_tests.rs b/codex-rs/core/src/agent/control_tests.rs index dbd89a5ccfe2..5d483f385389 100644 --- a/codex-rs/core/src/agent/control_tests.rs +++ b/codex-rs/core/src/agent/control_tests.rs @@ -1347,6 +1347,7 @@ async fn cold_resume_with_thread_instructions_preserves_lazy_v2_child_inheritanc .await .expect("read parent history"); let initial_history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: parent_thread_id, history: Arc::new(stored_parent.history.expect("parent history").items), rollout_path: stored_parent.rollout_path, diff --git a/codex-rs/core/src/session/reasoning_effort_tests.rs b/codex-rs/core/src/session/reasoning_effort_tests.rs index bee5f9f2a315..d9ff4ba24ef8 100644 --- a/codex-rs/core/src/session/reasoning_effort_tests.rs +++ b/codex-rs/core/src/session/reasoning_effort_tests.rs @@ -15,6 +15,7 @@ use test_case::test_case; #[test_case(InitialHistory::Forked(Vec::new()); "fork")] #[test_case(InitialHistory::Resumed(ResumedHistory { +history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(Vec::new()), rollout_path: None, diff --git a/codex-rs/core/src/session/rollout_reconstruction_tests.rs b/codex-rs/core/src/session/rollout_reconstruction_tests.rs index 5d750651f39c..05a7d37f9170 100644 --- a/codex-rs/core/src/session/rollout_reconstruction_tests.rs +++ b/codex-rs/core/src/session/rollout_reconstruction_tests.rs @@ -98,6 +98,7 @@ async fn recorded_questions_share_queued_input_order_across_resume() { let saved = serde_json::from_value(serde_json::to_value(saved).unwrap()).unwrap(); session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: session.thread_id, history: Arc::new(saved), rollout_path: None, @@ -307,6 +308,7 @@ async fn record_initial_history_reconstructs_typed_inter_agent_message() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(vec![RolloutItem::InterAgentCommunication( communication.clone(), @@ -334,6 +336,7 @@ async fn record_initial_history_ignores_security_risk_scores() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(vec![ RolloutItem::ResponseItem(ResponseItemEnvelope::new(user_item.clone())), @@ -394,6 +397,7 @@ async fn record_initial_history_restores_world_state_baseline(input: BaselineTur session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -467,6 +471,7 @@ async fn record_initial_history_resumed_bare_turn_context_does_not_hydrate_previ session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -552,6 +557,7 @@ async fn record_initial_history_resumed_hydrates_previous_turn_settings_from_lif session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -1180,6 +1186,7 @@ async fn record_initial_history_resumed_rollback_skips_only_user_turns() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -1274,6 +1281,7 @@ async fn record_initial_history_resumed_rollback_drops_incomplete_user_turn_comp session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -1341,6 +1349,7 @@ async fn record_initial_history_requires_surviving_full_snapshot_without_user_tu session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -1374,6 +1383,7 @@ async fn record_initial_history_resumed_does_not_seed_reference_context_item_aft session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -1986,6 +1996,7 @@ async fn record_initial_history_resumed_turn_context_after_compaction_reestablis session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -2154,6 +2165,7 @@ async fn record_initial_history_resumed_aborted_turn_without_id_clears_active_tu session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -2291,6 +2303,7 @@ async fn record_initial_history_resumed_unmatched_abort_preserves_active_turn_fo session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -2423,6 +2436,7 @@ async fn record_initial_history_resumed_trailing_incomplete_turn_compaction_clea session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -2476,6 +2490,7 @@ async fn record_initial_history_resumed_trailing_incomplete_turn_preserves_turn_ session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -2621,6 +2636,7 @@ async fn record_initial_history_resumed_replaced_incomplete_compacted_turn_clear session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), diff --git a/codex-rs/core/src/session/session.rs b/codex-rs/core/src/session/session.rs index 65cabca09d0a..b85caf05813c 100644 --- a/codex-rs/core/src/session/session.rs +++ b/codex-rs/core/src/session/session.rs @@ -1083,6 +1083,7 @@ impl Session { } InitialHistory::Resumed(resumed_history) => { let params = ResumeThreadParams { + history_revision: resumed_history.history_revision.clone(), thread_id: resumed_history.conversation_id, rollout_path: resumed_history.rollout_path.clone(), history: Some(resumed_history.history.clone()), @@ -1205,6 +1206,7 @@ impl Session { && let Some(history) = resume_context { resumed.history = history; + resumed.history_revision = None; } let rollout_path = if let Some(live_thread) = live_thread.as_ref() { live_thread.local_rollout_path().await? diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index ccc0bfd5540f..b3b682793608 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -2484,6 +2484,7 @@ async fn record_initial_history_reconstructs_resumed_transcript() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -3101,6 +3102,7 @@ async fn prepares_resumed_history_before_installing_it() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(vec![RolloutItem::ResponseItem(ResponseItemEnvelope { item: resumed_item, @@ -3161,6 +3163,7 @@ fn resolve_multi_agent_version_handles_unset_and_legacy_history() { assert_eq!( resolve_multi_agent_version( &InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -3172,6 +3175,7 @@ fn resolve_multi_agent_version_handles_unset_and_legacy_history() { assert_eq!( resolve_multi_agent_version( &InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -3183,6 +3187,7 @@ fn resolve_multi_agent_version_handles_unset_and_legacy_history() { assert_eq!( resolve_multi_agent_version( &InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(vec![session_meta_item( thread_id, @@ -3248,6 +3253,7 @@ async fn resumed_history_injects_initial_context_on_first_context_update_only() session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -3358,6 +3364,7 @@ async fn record_initial_history_seeds_token_info_from_rollout() { session .record_initial_history(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(rollout_items), rollout_path: Some(PathBuf::from("/tmp/resume.jsonl")), @@ -7296,6 +7303,7 @@ async fn resumed_root_session_uses_thread_id_as_session_id() { let thread_id = ThreadId::new(); let (session, rx_event) = make_session_with_history_source_and_agent_control_and_rx( InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -7331,6 +7339,7 @@ async fn resumed_subagent_session_restores_persisted_session_id() { }); let (session, rx_event) = make_session_with_history_source_and_agent_control_and_rx( InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(vec![RolloutItem::SessionMeta(SessionMetaLine { meta: SessionMeta { @@ -7392,6 +7401,7 @@ async fn resumed_copied_fork_ignores_source_history_base() { ]; let (session, _rx_event) = make_session_with_history_source_and_agent_control_and_rx( InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(history), rollout_path: None, diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index ba195d8e0cdb..187e1d793e56 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -1492,6 +1492,7 @@ impl ThreadManager { prepared: PreparedFork, ) -> CodexResult { let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: prepared.source_thread_id, history: Arc::clone(&prepared.model_context), rollout_path: None, @@ -2466,6 +2467,7 @@ fn stored_thread_to_initial_history( )) })?; Ok(InitialHistory::Resumed(ResumedHistory { + history_revision: history.revision, conversation_id: thread_id, history: Arc::new(history.items), rollout_path: rollout_path.or(stored_thread.rollout_path), diff --git a/codex-rs/core/src/thread_manager_tests.rs b/codex-rs/core/src/thread_manager_tests.rs index 99321ce694e7..af0848466e42 100644 --- a/codex-rs/core/src/thread_manager_tests.rs +++ b/codex-rs/core/src/thread_manager_tests.rs @@ -109,6 +109,7 @@ async fn live_fork_keeps_instructions_when_source_is_unloaded_during_setup() { .await .expect("start source"); let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: source.thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -323,6 +324,7 @@ async fn reserved_thread_id_is_used_without_changing_normal_id_generation() { .expect("start reserved thread"); let mut resumed_options = StartThreadOptions::new(config.clone()); resumed_options.initial_history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: reserved.thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -2459,6 +2461,7 @@ async fn rollout_path_resume_and_fork_read_history_through_thread_store() { .resume_thread_with_history( config.clone(), InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: source.thread_id, history: Arc::new(vec![RolloutItem::ResponseItem(user_msg("hello").into())]), rollout_path: Some(rollout_path.clone()), diff --git a/codex-rs/core/tests/suite/agent_control_tests.rs b/codex-rs/core/tests/suite/agent_control_tests.rs index 551b2cedb367..8e12fad0de29 100644 --- a/codex-rs/core/tests/suite/agent_control_tests.rs +++ b/codex-rs/core/tests/suite/agent_control_tests.rs @@ -405,6 +405,7 @@ async fn host_factory_follows_thread_lifecycle() -> anyhow::Result<()> { test.codex.flush_rollout().await?; let saved = test.codex.load_history(/*include_archived*/ false).await?; let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: root_id, history: Arc::new(saved.items), rollout_path: test.codex.rollout_path(), diff --git a/codex-rs/core/tests/suite/agents_md.rs b/codex-rs/core/tests/suite/agents_md.rs index 04f4d023f9cc..f2f72613605c 100644 --- a/codex-rs/core/tests/suite/agents_md.rs +++ b/codex-rs/core/tests/suite/agents_md.rs @@ -279,6 +279,7 @@ pub(super) async fn persisted_resume_history( Ok(( thread_id, InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new( store @@ -1588,6 +1589,7 @@ async fn fork_preserves_thread_instructions( }) .await?; let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: parent_id, history: Arc::new(stored.items), rollout_path: None, diff --git a/codex-rs/core/tests/suite/compact.rs b/codex-rs/core/tests/suite/compact.rs index 2dced3650df9..6549a92c8f55 100644 --- a/codex-rs/core/tests/suite/compact.rs +++ b/codex-rs/core/tests/suite/compact.rs @@ -4690,6 +4690,7 @@ async fn paginated_compaction_cold_resume_from_bounded_suffix() -> Result<()> { .resume_thread_with_history( test.config.clone(), codex_history::InitialHistory::Resumed(codex_history::ResumedHistory { + history_revision: None, conversation_id: context.thread_id, history: Arc::new(context.items), rollout_path: Some(path), diff --git a/codex-rs/core/tests/suite/fork_thread.rs b/codex-rs/core/tests/suite/fork_thread.rs index 4f5708b2204a..c90fb922467a 100644 --- a/codex-rs/core/tests/suite/fork_thread.rs +++ b/codex-rs/core/tests/suite/fork_thread.rs @@ -50,6 +50,7 @@ async fn ephemeral_fork_skips_stored_title_lookup() -> anyhow::Result<()> { ForkSnapshot::Interrupted, codex_core::StartThreadOptions::new(config), InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: test.session_configured.thread_id, history: Arc::new(Vec::new()), rollout_path: None, @@ -218,6 +219,7 @@ async fn fork_thread_restores_history_selection_and_preserves_explicit_clear() - ) .await?; let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: test.session_configured.thread_id, history: Arc::new(vec![thread_settings_applied_item( test.session_configured.thread_id, @@ -332,6 +334,7 @@ async fn assert_copied_fork_persists_inherited_history(history_mode: ThreadHisto ForkSnapshot::Interrupted, codex_core::StartThreadOptions::new(test.config.clone()), InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: test.session_configured.thread_id, history: Arc::new(supplied_history), rollout_path: None, diff --git a/codex-rs/core/tests/suite/guardian_checkpoint_migration_tests.rs b/codex-rs/core/tests/suite/guardian_checkpoint_migration_tests.rs index 6d3130968fee..2f77de01eb71 100644 --- a/codex-rs/core/tests/suite/guardian_checkpoint_migration_tests.rs +++ b/codex-rs/core/tests/suite/guardian_checkpoint_migration_tests.rs @@ -75,6 +75,7 @@ pub(super) async fn resume( .start_thread(StartThreadOptions { environments: Some(environments), initial_history: InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(history), rollout_path: None, diff --git a/codex-rs/core/tests/suite/guardian_history.rs b/codex-rs/core/tests/suite/guardian_history.rs index 6500826ba103..e0ad6f253fb2 100644 --- a/codex-rs/core/tests/suite/guardian_history.rs +++ b/codex-rs/core/tests/suite/guardian_history.rs @@ -110,6 +110,7 @@ async fn guardian_history_survives_restart_and_user_fork( let items: Vec = serde_json::from_value(serde_json::to_value(model_context.items)?)?; let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(items), rollout_path: None, diff --git a/codex-rs/core/tests/suite/guardian_retained_context.rs b/codex-rs/core/tests/suite/guardian_retained_context.rs index f4d8f0a55915..eb627c135c0d 100644 --- a/codex-rs/core/tests/suite/guardian_retained_context.rs +++ b/codex-rs/core/tests/suite/guardian_retained_context.rs @@ -226,6 +226,7 @@ async fn resume(test: &TestCodex, thread: &CodexThread) -> Result, gates: Mutex>>, failed_child: ThreadId, + edited_child: ThreadId, started: mpsc::UnboundedSender, completed: mpsc::UnboundedSender, } @@ -77,7 +81,6 @@ impl ThreadStore for GatedChildMetadataStore { delegate_store_methods! { fn create_thread(params: CreateThreadParams) -> (); - fn resume_thread(params: ResumeThreadParams) -> Arc>; fn append_items(params: AppendThreadItemsParams) -> (); fn flush_thread(thread_id: ThreadId) -> (); fn shutdown_thread(thread_id: ThreadId) -> (); @@ -92,6 +95,41 @@ impl ThreadStore for GatedChildMetadataStore { fn delete_thread(params: DeleteThreadParams) -> (); } + fn resume_thread( + &self, + params: ResumeThreadParams, + ) -> ThreadStoreFuture<'_, Arc>> { + Box::pin(async move { + assert!( + params.history_revision.is_some(), + "core must forward the revision" + ); + let supplied = params.history.as_ref().expect("preloaded history"); + let unchanged = self.inner.resume_thread(params.clone()).await?; + assert!(Arc::ptr_eq(supplied, &unchanged)); + if params.thread_id != self.edited_child { + return Ok(unchanged); + } + + // Commit an edit after core preloads history, before its writer acquisition finishes. + let edit: ResponseItem = serde_json::from_value(json!({ + "type": "message", "role": "user", + "content": [{"type": "input_text", "text": LATE_EDIT}], + })) + .expect("late user message"); + self.inner + .append_items(AppendThreadItemsParams { + thread_id: params.thread_id, + items: vec![RolloutItem::ResponseItem(edit.into())], + }) + .await?; + self.inner.shutdown_thread(params.thread_id).await?; + let refreshed = self.inner.resume_thread(params).await?; + assert!(!Arc::ptr_eq(&unchanged, &refreshed)); + Ok(refreshed) + }) + } + fn persist_thread( &self, thread_id: ThreadId, @@ -215,6 +253,7 @@ async fn cold_root_resume_overlaps_child_reads_and_applies_identities_in_graph_o (last, last_gate), ])), failed_child: failed, + edited_child: first, started: started_tx, completed: completed_tx, }); @@ -266,5 +305,27 @@ async fn cold_root_resume_overlaps_child_reads_and_applies_identities_in_graph_o assert!(resumed.thread_manager.get_thread(first).await.is_ok()); assert!(resumed.thread_manager.get_thread(last).await.is_err()); assert!(resumed.thread_manager.get_thread(failed).await.is_err()); + + mount_root_collaboration_call( + &server, + "continue restored child", + "resume-child", + "followup_task", + &json!({ "target": first.to_string(), "message": "continue after resume" }).to_string(), + ) + .await; + let followup = mount_sse_once_match( + &server, + |request: &wiremock::Request| request_has_model(request, ROLE_MODEL), + sse(vec![ev_completed("restored-child-followup")]), + ) + .await; + resumed.submit_turn("continue restored child").await?; + let child = resumed.thread_manager.get_thread(first).await?; + wait_for_event(child.as_ref(), |event| { + matches!(event, EventMsg::TurnComplete(_)) + }) + .await; + assert!(followup.single_request().body_contains_text(LATE_EDIT)); Ok(()) } diff --git a/codex-rs/core/tests/suite/pending_input_persistence.rs b/codex-rs/core/tests/suite/pending_input_persistence.rs index 9d84ca532473..e84680b572aa 100644 --- a/codex-rs/core/tests/suite/pending_input_persistence.rs +++ b/codex-rs/core/tests/suite/pending_input_persistence.rs @@ -509,6 +509,7 @@ async fn local_preparation_is_durable_before_first_input_and_survives_restart( .resume_thread_with_history( initial.config.clone(), InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: context.thread_id, history: Arc::new(context.items), rollout_path: Some(rollout_path), diff --git a/codex-rs/core/tests/suite/resume.rs b/codex-rs/core/tests/suite/resume.rs index 95d763644d13..a3bdb7257ae5 100644 --- a/codex-rs/core/tests/suite/resume.rs +++ b/codex-rs/core/tests/suite/resume.rs @@ -61,6 +61,7 @@ async fn local_thread_history_mode_survives_restart( .resume_thread_with_history( initial.config.clone(), InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: history.thread_id, history: Arc::new(history.items), rollout_path: initial.session_configured.rollout_path.clone(), diff --git a/codex-rs/core/tests/suite/resume_warning.rs b/codex-rs/core/tests/suite/resume_warning.rs index 3e4f6c199e23..fd53c8cfe22a 100644 --- a/codex-rs/core/tests/suite/resume_warning.rs +++ b/codex-rs/core/tests/suite/resume_warning.rs @@ -58,6 +58,7 @@ fn resume_history( }; InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: ThreadId::default(), history: Arc::new(vec![ RolloutItem::EventMsg(EventMsg::TurnStarted(TurnStartedEvent { diff --git a/codex-rs/core/tests/suite/rollout_compression.rs b/codex-rs/core/tests/suite/rollout_compression.rs index 1ab5986ae267..03f01be0b440 100644 --- a/codex-rs/core/tests/suite/rollout_compression.rs +++ b/codex-rs/core/tests/suite/rollout_compression.rs @@ -169,6 +169,7 @@ async fn compressed_shared_fork_resume_preserves_checkpoint_and_frozen_history() .resume_thread_with_history( config, InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: context.thread_id, history: Arc::new(context.items), rollout_path: Some(child_path), diff --git a/codex-rs/core/tests/suite/skills_extension.rs b/codex-rs/core/tests/suite/skills_extension.rs index 5f116a99d15a..72462e1e62e0 100644 --- a/codex-rs/core/tests/suite/skills_extension.rs +++ b/codex-rs/core/tests/suite/skills_extension.rs @@ -3089,6 +3089,7 @@ async fn production_turn_keeps_rebalanced_catalogs_stable_after_compaction_and_r .thread_manager .start_thread(StartThreadOptions { initial_history: InitialHistory::Resumed(ResumedHistory { + history_revision: history.revision, conversation_id: history.thread_id, history: Arc::new(history.items), rollout_path: cloud_thread.session_configured.rollout_path.clone(), diff --git a/codex-rs/external-agent-migration/src/sessions/append.rs b/codex-rs/external-agent-migration/src/sessions/append.rs index 70b4b30e94da..b77481afd3b2 100644 --- a/codex-rs/external-agent-migration/src/sessions/append.rs +++ b/codex-rs/external-agent-migration/src/sessions/append.rs @@ -71,6 +71,7 @@ pub async fn append_existing_session( } if thread_store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, diff --git a/codex-rs/history/src/lib.rs b/codex-rs/history/src/lib.rs index 090ca9178216..b117bfa558fd 100644 --- a/codex-rs/history/src/lib.rs +++ b/codex-rs/history/src/lib.rs @@ -359,6 +359,9 @@ pub struct RolloutLine { pub struct ResumedHistory { pub conversation_id: ThreadId, pub history: Arc>, + /// Store-issued revision for this exact snapshot; clear it when modifying the history. + #[serde(skip)] + pub history_revision: Option, pub rollout_path: Option, } diff --git a/codex-rs/history/src/tests.rs b/codex-rs/history/src/tests.rs index e0e46cfe67aa..0b04ff6fd1e3 100644 --- a/codex-rs/history/src/tests.rs +++ b/codex-rs/history/src/tests.rs @@ -959,6 +959,7 @@ fn copied_history_uses_persisted_history_mode() -> Result<()> { git: None, }); let history = InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(vec![session_meta.clone()]), rollout_path: None, @@ -978,6 +979,7 @@ fn copied_history_uses_persisted_history_mode() -> Result<()> { ); assert_eq!( InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id: thread_id, history: Arc::new(Vec::new()), rollout_path: None, diff --git a/codex-rs/rollout/src/recorder.rs b/codex-rs/rollout/src/recorder.rs index cd05f6149b3d..7422c7f4e761 100644 --- a/codex-rs/rollout/src/recorder.rs +++ b/codex-rs/rollout/src/recorder.rs @@ -1164,6 +1164,7 @@ impl RolloutRecorder { info!("Resumed rollout successfully from {path:?}"); Ok(InitialHistory::Resumed(ResumedHistory { + history_revision: None, conversation_id, history: Arc::new(items), rollout_path: Some(compression::plain_rollout_path(path)), diff --git a/codex-rs/thread-store/src/in_memory.rs b/codex-rs/thread-store/src/in_memory.rs index 7b11fab0962c..1e670fee7730 100644 --- a/codex-rs/thread-store/src/in_memory.rs +++ b/codex-rs/thread-store/src/in_memory.rs @@ -335,6 +335,7 @@ mod tests { .expect("create paginated thread"); store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path.clone()), history: None, @@ -397,6 +398,7 @@ mod tests { ); store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: None, history: None, @@ -680,6 +682,7 @@ impl InMemoryThreadStore { let history_mode = history_mode_from_state(&state, params.thread_id); reject_paginated_history_mode(history_mode)?; Ok(StoredThreadHistory { + revision: None, thread_id: params.thread_id, items: items.clone(), }) @@ -699,6 +702,7 @@ impl InMemoryThreadStore { thread_id: params.thread_id, })?; Ok(StoredModelContext { + revision: None, thread_id: params.thread_id, items: items.clone(), }) @@ -1082,6 +1086,7 @@ fn stored_thread_from_state( .ok_or(ThreadStoreError::ThreadNotFound { thread_id })?; let history_items = state.histories.get(&thread_id).cloned().unwrap_or_default(); let history = include_history.then(|| StoredThreadHistory { + revision: None, thread_id, items: history_items.clone(), }); diff --git a/codex-rs/thread-store/src/local/compression_writer_tests.rs b/codex-rs/thread-store/src/local/compression_writer_tests.rs index 448b0338a44d..1ea0161bbd0a 100644 --- a/codex-rs/thread-store/src/local/compression_writer_tests.rs +++ b/codex-rs/thread-store/src/local/compression_writer_tests.rs @@ -22,6 +22,7 @@ use uuid::Uuid; use super::LocalThreadStore; use super::test_support::test_config; use super::test_support::write_session_file; +use crate::LoadThreadHistoryParams; use crate::ResumeThreadParams; use crate::ThreadMetadataPatch; use crate::ThreadPersistenceMetadata; @@ -46,6 +47,7 @@ fn age(path: &Path) -> TestResult<()> { fn resume(thread_id: ThreadId, path: &Path, home: &Path) -> ResumeThreadParams { ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(path.to_path_buf()), history: None, @@ -186,6 +188,24 @@ async fn metadata_updates_share_ownership_and_resume_compressed_rollouts() -> Te json!(Some(RolloutItem::SessionMeta(expected.clone()))) ); + age(&path)?; + compress(home.path()).await?; + let snapshot = competitor + .load_history(LoadThreadHistoryParams { + thread_id, + include_archived: true, + }) + .await?; + let history = Arc::new(snapshot.items); + let resumed = competitor + .resume_thread(ResumeThreadParams { + history: Some(Arc::clone(&history)), + history_revision: snapshot.revision, + ..resume(thread_id, &path, home.path()) + }) + .await?; + assert!(Arc::ptr_eq(&history, &resumed)); + competitor.shutdown_thread(thread_id).await?; age(&path)?; compress(home.path()).await?; patch.patch.memory_mode = Some(ThreadMemoryMode::Enabled); diff --git a/codex-rs/thread-store/src/local/delete_thread.rs b/codex-rs/thread-store/src/local/delete_thread.rs index 103b12d49fd9..75e55ef84f1b 100644 --- a/codex-rs/thread-store/src/local/delete_thread.rs +++ b/codex-rs/thread-store/src/local/delete_thread.rs @@ -794,6 +794,7 @@ SELECT store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, diff --git a/codex-rs/thread-store/src/local/history_revision.rs b/codex-rs/thread-store/src/local/history_revision.rs new file mode 100644 index 000000000000..ad241a49a24f --- /dev/null +++ b/codex-rs/thread-store/src/local/history_revision.rs @@ -0,0 +1,28 @@ +//! Validates snapshots of append-only local rollouts before reusing them for resume. +//! +//! Capture before and after reading; any change or unavailable metadata disables reuse. The +//! selected path prevents reuse for a different rollout. Validate under writer ownership, +//! before opening the recorder can materialize a compressed file. + +use std::path::Path; + +pub(super) async fn read(path: &Path) -> Option { + let path = codex_rollout::existing_rollout_path(path).await?; + let path = tokio::fs::canonicalize(path).await.ok()?; + let metadata = tokio::fs::metadata(&path).await.ok()?; + let modified = metadata.modified().ok()?; + let created = metadata.created().ok(); + #[cfg(unix)] + let identity = { + use std::os::unix::fs::MetadataExt; + Some(( + metadata.dev(), + metadata.ino(), + metadata.ctime(), + metadata.ctime_nsec(), + )) + }; + #[cfg(not(unix))] + let identity: Option<(u64, u64, i64, i64)> = None; + serde_json::to_string(&("local", path, metadata.len(), modified, created, identity)).ok() +} diff --git a/codex-rs/thread-store/src/local/live_writer.rs b/codex-rs/thread-store/src/local/live_writer.rs index 450f0304da0b..f78dba45313d 100644 --- a/codex-rs/thread-store/src/local/live_writer.rs +++ b/codex-rs/thread-store/src/local/live_writer.rs @@ -15,7 +15,6 @@ use super::LocalThreadStore; use super::create_thread; use crate::AppendThreadItemsParams; use crate::CreateThreadParams; -use crate::LoadThreadHistoryParams; use crate::ResumeThreadParams; use crate::ThreadStoreError; use crate::ThreadStoreResult; @@ -45,16 +44,6 @@ pub(super) async fn resume_thread( let _live_writer_guard = store.live_writer_locks.lock(params.thread_id).await; store.ensure_live_recorder_absent(params.thread_id).await?; let writer_lock = store.acquire_writer_lock(params.thread_id)?; - let supplied_history = params - .history - .as_ref() - .filter(|history| { - !matches!( - history.first(), - Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == params.thread_id - ) - }) - .cloned(); let rollout_path = match params.rollout_path { Some(rollout_path) => rollout_path, None => { @@ -74,18 +63,38 @@ pub(super) async fn resume_thread( .path } }; - let history_mode = if let Some(history) = params.history.as_deref() { - canonical_history_mode_from_rollout_items(history) - } else { - super::read_thread::read_thread_by_rollout_path( - store, - rollout_path.clone(), - params.include_archived, - /*include_history*/ false, - ) - .await? - .history_mode + let rollout_path = + super::read_thread::resolve_requested_rollout_path(store, rollout_path).await?; + if !params.include_archived + && super::helpers::rollout_path_is_archived(&store.config.codex_home, &rollout_path) + { + return Err(ThreadStoreError::InvalidRequest { + message: format!("thread {} is archived", params.thread_id), + }); + } + let history = match params.history { + Some(history) + if !matches!( + history.first(), + Some(RolloutItem::SessionMeta(meta)) if meta.meta.id == params.thread_id + ) => + { + history + } + Some(history) + if params.history_revision.is_some() + && params.history_revision + == super::history_revision::read(&rollout_path).await => + { + history + } + _ => Arc::new( + super::model_context::load_from_rollout_path(store, params.thread_id, &rollout_path) + .await? + .items, + ), }; + let history_mode = canonical_history_mode_from_rollout_items(&history); let cwd = params .metadata .cwd @@ -123,28 +132,7 @@ pub(super) async fn resume_thread( writer_lock, ) .await?; - if let Some(history) = supplied_history { - return Ok(history); - } - // Resolve through the installed writer so explicit paths and materialized compressed rollouts - // take precedence over SQLite. Both ownership guards remain held throughout this read. - let history = super::model_context::load_latest_model_context( - store, - LoadThreadHistoryParams { - thread_id: params.thread_id, - include_archived: params.include_archived, - }, - ) - .await; - if history.is_err() { - let entry = store.live_recorders.lock().await.remove(¶ms.thread_id); - if let Some(entry) = entry - && let Err(err) = entry.recorder.discard().await - { - warn!("failed to discard writer after resume history load failed: {err}"); - } - } - history.map(|history| Arc::new(history.items)) + Ok(history) } #[tracing::instrument( diff --git a/codex-rs/thread-store/src/local/mod.rs b/codex-rs/thread-store/src/local/mod.rs index 55822428a18c..e492b9ab664b 100644 --- a/codex-rs/thread-store/src/local/mod.rs +++ b/codex-rs/thread-store/src/local/mod.rs @@ -2,6 +2,7 @@ mod archive_thread; mod create_thread; mod delete_thread; mod helpers; +mod history_revision; mod list_threads; mod live_writer; mod model_context; @@ -1002,6 +1003,7 @@ mod tests { store, ThreadHistoryMode::Paginated, ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path.clone()), history: Some(Arc::clone(&history)), @@ -1018,7 +1020,7 @@ mod tests { assert!(Arc::ptr_eq(&supplied_history, &history)); assert_eq!( resumed.local_rollout_path().await.expect("live rollout"), - Some(rollout_path) + Some(std::fs::canonicalize(rollout_path).expect("canonical rollout path")) ); resumed.shutdown().await.expect("shutdown resumed writer"); @@ -1355,6 +1357,7 @@ mod tests { store, ThreadHistoryMode::Legacy, ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1410,6 +1413,7 @@ mod tests { store, ThreadHistoryMode::Legacy, ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1593,6 +1597,7 @@ mod tests { let resumed_store = LocalThreadStore::new(config, Some(runtime)); resumed_store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: None, history: None, @@ -1641,15 +1646,16 @@ mod tests { .live_rollout_path(thread_id) .await .expect("load rollout path"); - let mut expected = primary + let snapshot = primary .load_latest_model_context(LoadThreadHistoryParams { thread_id, include_archived: true, }) .await - .expect("load initial snapshot") - .items; + .expect("load initial snapshot"); + let mut expected = snapshot.items; let resume_params = ResumeThreadParams { + history_revision: snapshot.revision, thread_id, rollout_path: Some(rollout_path), history: Some(Arc::new(expected.clone())), @@ -1669,6 +1675,19 @@ mod tests { .expect_err("competing resume should fail"); assert!(matches!(error, ThreadStoreError::Conflict { .. })); + primary + .shutdown_thread(thread_id) + .await + .expect("release writer"); + let unchanged = secondary + .resume_thread(resume_params.clone()) + .await + .expect("resume unchanged snapshot"); + assert!(Arc::ptr_eq( + &unchanged, + resume_params.history.as_ref().unwrap() + )); + let late_edit = RolloutItem::ResponseItem( ResponseItem::Message { id: None, @@ -1681,7 +1700,7 @@ mod tests { } .into(), ); - primary + secondary .append_items(AppendThreadItemsParams { thread_id, items: vec![late_edit.clone()], @@ -1689,11 +1708,11 @@ mod tests { .await .expect("append before handing off writer ownership"); expected.push(late_edit); - primary + secondary .shutdown_thread(thread_id) .await .expect("shutdown should release writer ownership"); - let resumed = secondary + let resumed = primary .resume_thread(resume_params) .await .expect("resume after shutdown should acquire writer ownership"); @@ -1737,6 +1756,7 @@ mod tests { .expect("live rollout path"); let err = store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1766,6 +1786,7 @@ mod tests { .expect("session file"); let err = store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path.clone()), history: None, @@ -1784,6 +1805,7 @@ mod tests { competing_store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1806,6 +1828,7 @@ mod tests { store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1854,6 +1877,7 @@ mod tests { store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path.clone()), history: None, @@ -1872,7 +1896,10 @@ mod tests { .await .expect("read external live thread"); - assert_eq!(thread.rollout_path, Some(rollout_path)); + assert_eq!( + thread.rollout_path, + Some(std::fs::canonicalize(rollout_path).expect("canonical rollout path")) + ); assert!(thread.history.expect("history").items.iter().any(|item| { matches!( item, @@ -1898,15 +1925,30 @@ mod tests { let thread_id = ThreadId::from_string(&uuid.to_string()).expect("valid thread id"); let rollout_path = write_archived_session_file(home.path(), "2025-01-04T10-30-00", uuid) .expect("archived session file"); + #[cfg(unix)] + let rollout_path = { + let alias = home.path().join("active-alias.jsonl"); + std::os::unix::fs::symlink(&rollout_path, &alias).expect("symlink archived rollout"); + alias + }; + let mut resume_params = ResumeThreadParams { + history_revision: None, + thread_id, + rollout_path: Some(rollout_path), + history: None, + include_archived: false, + metadata: thread_metadata(), + }; + let err = store + .resume_thread(resume_params.clone()) + .await + .expect_err("active-only resume should reject archived rollout targets"); + assert!(matches!(err, ThreadStoreError::InvalidRequest { .. })); + assert!(err.to_string().contains("archived")); + resume_params.include_archived = true; store - .resume_thread(ResumeThreadParams { - thread_id, - rollout_path: Some(rollout_path), - history: None, - include_archived: true, - metadata: thread_metadata(), - }) + .resume_thread(resume_params) .await .expect("resume live archived thread"); store @@ -2071,6 +2113,7 @@ mod tests { ); store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, diff --git a/codex-rs/thread-store/src/local/model_context.rs b/codex-rs/thread-store/src/local/model_context.rs index 7e898add6dff..13a81b71ad8d 100644 --- a/codex-rs/thread-store/src/local/model_context.rs +++ b/codex-rs/thread-store/src/local/model_context.rs @@ -1,6 +1,7 @@ //! Reconstructs model context and preserves source runtime metadata across fork cutoffs. use std::io; +use std::path::Path; use codex_protocol::protocol::HistoryPosition; use codex_protocol::protocol::SessionMetaLine; @@ -48,31 +49,44 @@ pub(super) async fn load_latest_model_context( message: format!("no rollout found for thread id {}", params.thread_id), })?; - let session_meta = codex_rollout::read_session_meta_line(path.as_path()) + load_from_rollout_path(store, params.thread_id, &path).await +} + +pub(super) async fn load_from_rollout_path( + store: &LocalThreadStore, + thread_id: codex_protocol::ThreadId, + path: &Path, +) -> ThreadStoreResult { + let before = super::history_revision::read(path).await; + let session_meta = codex_rollout::read_session_meta_line(path) .await .map_err(|err| ThreadStoreError::Internal { message: format!("failed to read session metadata {}: {err}", path.display()), })?; - if session_meta.meta.id != params.thread_id { + if session_meta.meta.id != thread_id { return Err(ThreadStoreError::InvalidRequest { message: format!( "rollout at {} belongs to thread {}, not {}", path.display(), session_meta.meta.id, - params.thread_id + thread_id ), }); } let items = if matches!(session_meta.meta.history_mode, ThreadHistoryMode::Paginated) { - let lineage = store.resolve_rollout_lineage(params.thread_id).await?; + let lineage = store + .resolve_rollout_lineage(thread_id, Some(path.to_path_buf())) + .await?; scan_model_context_from_lineage(lineage, session_meta).await? } else { - read_thread::load_history_items(path.as_path()).await? + read_thread::load_history_items(path).await? }; + let after = super::history_revision::read(path).await; Ok(StoredModelContext { - thread_id: params.thread_id, + revision: before.filter(|revision| Some(revision) == after.as_ref()), + thread_id, items, }) } diff --git a/codex-rs/thread-store/src/local/model_context_tests.rs b/codex-rs/thread-store/src/local/model_context_tests.rs index eeef222d75d5..7be08ce485a8 100644 --- a/codex-rs/thread-store/src/local/model_context_tests.rs +++ b/codex-rs/thread-store/src/local/model_context_tests.rs @@ -153,7 +153,7 @@ async fn fork_context_excludes_items_after_frozen_cutoff() { append_items(path.as_path(), [user_message("later message")]); let store = LocalThreadStore::new(test_config(home.path()), /*state_db*/ None); let lineage = store - .resolve_rollout_lineage(thread_id) + .resolve_rollout_lineage(thread_id, /*initial_path*/ None) .await .expect("resolve source lineage"); let session_meta = codex_rollout::read_session_meta_line(path.as_path()) @@ -230,7 +230,7 @@ async fn fork_version_stops_before_older_segments_once_resolved() { ); let store = LocalThreadStore::new(test_config(home.path()), /*state_db*/ None); let lineage = store - .resolve_rollout_lineage(child_id) + .resolve_rollout_lineage(child_id, /*initial_path*/ None) .await .expect("resolve source lineage"); // The usable compaction should stop the scan before it reaches this missing segment. @@ -282,7 +282,7 @@ async fn fork_version_respects_inherited_segment_cutoffs() { ); let store = LocalThreadStore::new(test_config(home.path()), /*state_db*/ None); let lineage = store - .resolve_rollout_lineage(child_id) + .resolve_rollout_lineage(child_id, /*initial_path*/ None) .await .expect("resolve source lineage"); let mut source_meta = codex_rollout::read_session_meta_line(&child_path) diff --git a/codex-rs/thread-store/src/local/read_thread.rs b/codex-rs/thread-store/src/local/read_thread.rs index 2c613b0f0d11..3401702d75d5 100644 --- a/codex-rs/thread-store/src/local/read_thread.rs +++ b/codex-rs/thread-store/src/local/read_thread.rs @@ -199,7 +199,7 @@ fn reject_paginated_history(thread: &StoredThread, include_history: bool) -> Thr Ok(()) } -async fn resolve_requested_rollout_path( +pub(super) async fn resolve_requested_rollout_path( store: &LocalThreadStore, rollout_path: std::path::PathBuf, ) -> ThreadStoreResult { @@ -253,8 +253,14 @@ async fn attach_history_if_requested( message: format!("failed to load thread history for thread {thread_id}"), }); }; + let before = super::history_revision::read(&path).await; let items = load_history_items(&path).await?; - thread.history = Some(StoredThreadHistory { thread_id, items }); + let after = super::history_revision::read(&path).await; + thread.history = Some(StoredThreadHistory { + revision: before.filter(|revision| Some(revision) == after.as_ref()), + thread_id, + items, + }); Ok(()) } diff --git a/codex-rs/thread-store/src/local/revert_thread.rs b/codex-rs/thread-store/src/local/revert_thread.rs index 5aeebce31ee4..424a0f54c165 100644 --- a/codex-rs/thread-store/src/local/revert_thread.rs +++ b/codex-rs/thread-store/src/local/revert_thread.rs @@ -79,7 +79,9 @@ pub(super) async fn revert( // Preserve old-reader compatibility when introducing the first reference to a standalone // source. Already-shared ancestors stay read-only; their offsets address decoded JSONL bytes. - let mut lineage = store.resolve_rollout_lineage(thread_id).await?; + let mut lineage = store + .resolve_rollout_lineage(thread_id, /*initial_path*/ None) + .await?; for segment in &mut lineage.segments { if segment.rollout_id() == current_rollout.rollout_id && source_meta.history_base.is_none() { diff --git a/codex-rs/thread-store/src/local/rollout_lineage.rs b/codex-rs/thread-store/src/local/rollout_lineage.rs index ae3e1bec62f9..556ca03767bc 100644 --- a/codex-rs/thread-store/src/local/rollout_lineage.rs +++ b/codex-rs/thread-store/src/local/rollout_lineage.rs @@ -33,10 +33,12 @@ impl LocalThreadStore { pub(super) async fn resolve_rollout_lineage( &self, requested_thread_id: ThreadId, + initial_path: Option, ) -> ThreadStoreResult { self.resolve_rollout_lineage_with_representation( requested_thread_id, LineageRepresentation::Existing, + initial_path, ) .await } @@ -48,6 +50,7 @@ impl LocalThreadStore { self.resolve_rollout_lineage_with_representation( requested_thread_id, LineageRepresentation::PlainForReference, + /*initial_path*/ None, ) .await } @@ -56,6 +59,7 @@ impl LocalThreadStore { &self, requested_thread_id: ThreadId, representation: LineageRepresentation, + mut initial_path: Option, ) -> ThreadStoreResult { let mut segments = Vec::new(); let mut seen = HashSet::new(); @@ -70,14 +74,23 @@ impl LocalThreadStore { Some(self.live_writer_locks.lock(coordination_id).await) } }; - let (rollout_id, rollout_path) = match next_rollout_id { - Some(rollout_id) => { + let (rollout_id, rollout_path) = match (next_rollout_id, initial_path.take()) { + (Some(rollout_id), _) => { let rollout_path = resolve_rollout_path_by_id(self, rollout_id) .await? .ok_or_else(|| malformed_lineage(rollout_id, "missing source rollout"))?; (rollout_id, rollout_path) } - None => { + (None, Some(path)) => { + let rollout_id = + thread_rollout_resolver::rollout_id_from_path_or_legacy_thread_id( + &path, + requested_thread_id, + ThreadHistoryMode::Paginated, + )?; + (rollout_id, path) + } + (None, None) => { let resolved = thread_rollout_resolver::resolve_current_including_archived( self, requested_thread_id, diff --git a/codex-rs/thread-store/src/local/rollout_lineage_tests.rs b/codex-rs/thread-store/src/local/rollout_lineage_tests.rs index 6b8c88d118e8..be93f4a38cc1 100644 --- a/codex-rs/thread-store/src/local/rollout_lineage_tests.rs +++ b/codex-rs/thread-store/src/local/rollout_lineage_tests.rs @@ -74,7 +74,7 @@ async fn resolves_nested_lineage_with_empty_intermediate_segments() { ); let lineage = store - .resolve_rollout_lineage(child) + .resolve_rollout_lineage(child, /*initial_path*/ None) .await .expect("resolve nested lineage"); @@ -127,7 +127,7 @@ async fn resolves_archived_ancestors() { ); let lineage = store - .resolve_rollout_lineage(child) + .resolve_rollout_lineage(child, /*initial_path*/ None) .await .expect("resolve archived ancestor"); @@ -155,7 +155,7 @@ async fn resolves_lineage_at_explicit_history_position() { ); let lineage = store - .resolve_rollout_lineage(child) + .resolve_rollout_lineage(child, /*initial_path*/ None) .await .expect("resolve child lineage") .truncate_at(end) @@ -246,7 +246,7 @@ async fn rejects_missing_cycles_and_out_of_bounds_offsets() { async fn assert_invalid_lineage(store: &LocalThreadStore, thread_id: ThreadId, detail: &str) { let err = store - .resolve_rollout_lineage(thread_id) + .resolve_rollout_lineage(thread_id, /*initial_path*/ None) .await .expect_err("lineage should be invalid"); assert!(err.to_string().contains(detail), "{err}"); diff --git a/codex-rs/thread-store/src/local/thread_history/read.rs b/codex-rs/thread-store/src/local/thread_history/read.rs index dad2a2646778..49c326c1a4bb 100644 --- a/codex-rs/thread-store/src/local/thread_history/read.rs +++ b/codex-rs/thread-store/src/local/thread_history/read.rs @@ -110,7 +110,9 @@ pub(in crate::local) async fn list_turns( ) .await?; validate_page_size(params.page_size)?; - let lineage = store.resolve_rollout_lineage(params.thread_id).await?; + let lineage = store + .resolve_rollout_lineage(params.thread_id, /*initial_path*/ None) + .await?; let pool = store.thread_history_db().await?; let page = page_turn_rows( pool, @@ -168,7 +170,9 @@ pub(in crate::local) async fn list_items( ) .await?; validate_page_size(params.page_size)?; - let lineage = store.resolve_rollout_lineage(params.thread_id).await?; + let lineage = store + .resolve_rollout_lineage(params.thread_id, /*initial_path*/ None) + .await?; let pool = store.thread_history_db().await?; let page = page_item_rows(pool, &lineage, ¶ms).await?; diff --git a/codex-rs/thread-store/src/local/thread_history/realtime.rs b/codex-rs/thread-store/src/local/thread_history/realtime.rs index 0dd233b77670..cfb897caf349 100644 --- a/codex-rs/thread-store/src/local/thread_history/realtime.rs +++ b/codex-rs/thread-store/src/local/thread_history/realtime.rs @@ -52,7 +52,9 @@ pub(in crate::local) async fn list_timeline( .await?; validate_page_size(params.page_size)?; - let lineage = store.resolve_rollout_lineage(params.thread_id).await?; + let lineage = store + .resolve_rollout_lineage(params.thread_id, /*initial_path*/ None) + .await?; let pool = store.thread_history_db().await?; let cursor = params .cursor diff --git a/codex-rs/thread-store/src/local/thread_history/search.rs b/codex-rs/thread-store/src/local/thread_history/search.rs index f93fe61eb30d..7fa10e2419d1 100644 --- a/codex-rs/thread-store/src/local/thread_history/search.rs +++ b/codex-rs/thread-store/src/local/thread_history/search.rs @@ -74,7 +74,9 @@ pub(in crate::local) async fn search_thread_occurrences( ¶ms.search_term, )?; let matcher = LiteralMatcher::new(params.search_term.as_str()); - let lineage = store.resolve_rollout_lineage(params.thread_id).await?; + let lineage = store + .resolve_rollout_lineage(params.thread_id, /*initial_path*/ None) + .await?; let cursor_segment = cursor .as_ref() .map(|cursor| { diff --git a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs index d9034acd56be..07713ea56c01 100644 --- a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs +++ b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs @@ -195,6 +195,7 @@ async fn split_homes_support_backfill_listing_and_paginated_history() { store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(rollout_path), history: None, @@ -1091,6 +1092,7 @@ async fn paginated_fork_reads_compressed_shared_lineage_without_materializing() fs::rename(&source_compressed_path, &external_path).expect("move shared source outside home"); store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id: source_thread_id, rollout_path: Some(external_path), history: None, diff --git a/codex-rs/thread-store/src/local/update_thread_metadata.rs b/codex-rs/thread-store/src/local/update_thread_metadata.rs index 76bc877d5ea5..d8074171c194 100644 --- a/codex-rs/thread-store/src/local/update_thread_metadata.rs +++ b/codex-rs/thread-store/src/local/update_thread_metadata.rs @@ -1287,6 +1287,7 @@ mod tests { let path = write_session_file(home.path(), "2025-01-03T12-00-00", uuid)?; store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(path.clone()), history: None, @@ -1506,6 +1507,7 @@ mod tests { store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(path.clone()), history: None, @@ -2393,6 +2395,7 @@ mod tests { .await; store .resume_thread(ResumeThreadParams { + history_revision: None, thread_id, rollout_path: Some(archived_path.clone()), history: None, diff --git a/codex-rs/thread-store/src/store.rs b/codex-rs/thread-store/src/store.rs index fb7b93803d6d..87f6d40c0ab3 100644 --- a/codex-rs/thread-store/src/store.rs +++ b/codex-rs/thread-store/src/store.rs @@ -145,7 +145,8 @@ pub trait ThreadStore: Any + Send + Sync { /// Stored snapshots supplied by callers may predate writer acquisition. Implementations must /// include writes committed before acquisition in the returned context. Explicitly supplied /// histories without a canonical session header retain their import/override semantics. - /// Returned histories can share the caller's allocation when no refresh is needed. + /// A supplied revision may enable reuse of the shared snapshot after validation; missing or + /// unrecognized revisions must not be treated as proof that stored history is unchanged. /// On failure, implementations must release any writer acquired by this operation. fn resume_thread( &self, diff --git a/codex-rs/thread-store/src/thread_metadata_sync.rs b/codex-rs/thread-store/src/thread_metadata_sync.rs index 8e1fc670409a..55edd7472eda 100644 --- a/codex-rs/thread-store/src/thread_metadata_sync.rs +++ b/codex-rs/thread-store/src/thread_metadata_sync.rs @@ -872,6 +872,7 @@ mod tests { fn resume_params(thread_id: ThreadId, history: Vec) -> ResumeThreadParams { ResumeThreadParams { + history_revision: None, thread_id, rollout_path: None, history: Some(Arc::new(history)), diff --git a/codex-rs/thread-store/src/types.rs b/codex-rs/thread-store/src/types.rs index 4e842556d3e6..7cc8a70b2150 100644 --- a/codex-rs/thread-store/src/types.rs +++ b/codex-rs/thread-store/src/types.rs @@ -128,6 +128,9 @@ pub struct ResumeThreadParams { /// Previously loaded replay history. A canonical session header identifies a stored snapshot /// that may need refreshing under writer ownership; other histories are explicit overrides. pub history: Option>>, + /// Opaque revision paired with `history`, validated by the store under writer ownership. + #[serde(skip)] + pub history_revision: Option, /// Whether archived threads may be reopened. pub include_archived: bool, /// Metadata for future writes appended to the resumed live thread. @@ -176,6 +179,9 @@ pub struct StoredThreadHistory { pub thread_id: ThreadId, /// Persisted rollout items in replay order. pub items: Vec, + /// Optional revision for reusing this exact snapshot within the current process. + #[serde(skip)] + pub revision: Option, } /// Persisted rollout items needed to reconstruct the latest model-visible context. @@ -189,6 +195,9 @@ pub struct StoredModelContext { pub thread_id: ThreadId, /// Persisted rollout items in replay order. pub items: Vec, + /// Optional revision for reusing this exact snapshot within the current process. + #[serde(skip)] + pub revision: Option, } /// Requested boundary for inheriting a paginated thread's history. From 7219fd735bef2f9cfd0363fecdbbb212e3df5255 Mon Sep 17 00:00:00 2001 From: cooper-oai Date: Wed, 30 Sep 2026 13:05:14 +0000 Subject: [PATCH 8/8] Use server authentication for explicit remote session commands (#49624) ## Why Session commands with `--remote` should use the selected server's authentication and execution environment, even when the caller has workload identity configured and cannot read its identity token. ## What changed Connect `queue`, `archive`, `unarchive`, and `delete` directly to the explicit remote app server after validating configuration. Skip caller credential and runtime initialization, use remote thread parameters, and preserve the caller's working-directory override. ## Testing Add end-to-end coverage with an unreadable caller identity token to verify queued turns use the server's API key and remote archive, unarchive, and deletion operate on the selected server. Add configuration-validation coverage for all four commands and `--no-daemon` rejection coverage for remote unarchive and delete. GitOrigin-RevId: 5da7abbb40506cd754a8863e1a9d8fad9b1f09a9 --- codex-rs/Cargo.lock | 1 + codex-rs/cli/Cargo.toml | 1 + codex-rs/cli/tests/features.rs | 2 + codex-rs/cli/tests/queue.rs | 292 ++++++++++++++++++- codex-rs/tui/src/session_archive_commands.rs | 22 ++ 5 files changed, 316 insertions(+), 2 deletions(-) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index ea897239537d..a8e086b4924b 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -2507,6 +2507,7 @@ dependencies = [ "clap_complete", "codex-api", "codex-app-server", + "codex-app-server-client", "codex-app-server-daemon", "codex-app-server-protocol", "codex-app-server-test-client", diff --git a/codex-rs/cli/Cargo.toml b/codex-rs/cli/Cargo.toml index 399230d3f4d1..0c67a20cd206 100644 --- a/codex-rs/cli/Cargo.toml +++ b/codex-rs/cli/Cargo.toml @@ -123,6 +123,7 @@ windows-sys = { version = "0.52", features = [ app_test_support = { workspace = true } assert_cmd = { workspace = true } assert_matches = { workspace = true } +codex-app-server-client = { workspace = true } codex-utils-cargo-bin = { workspace = true } codex-utils-pty = { workspace = true } flate2 = { workspace = true } diff --git a/codex-rs/cli/tests/features.rs b/codex-rs/cli/tests/features.rs index 4beebb0d3f2d..d55a3f4e77b0 100644 --- a/codex-rs/cli/tests/features.rs +++ b/codex-rs/cli/tests/features.rs @@ -363,6 +363,8 @@ fn no_daemon_rejects_agents_and_explicit_remote_targets() -> Result<()> { "--no-daemon --remote ws://localhost:9999 agents", "--no-daemon --remote ws://localhost:9999", "--no-daemon --remote ws://localhost:9999 archive example", + "--no-daemon --remote ws://localhost:9999 unarchive example", + "--no-daemon --remote ws://localhost:9999 delete --force 123e4567-e89b-12d3-a456-426614174000", "--no-daemon --remote ws://localhost:9999 queue --thread example --message hello", "--remote ws://localhost:9999 resume --no-daemon --last", "--no-daemon fork --remote ws://localhost:9999 session-name", diff --git a/codex-rs/cli/tests/queue.rs b/codex-rs/cli/tests/queue.rs index 4275ed7b94af..b4f5f77a59a8 100644 --- a/codex-rs/cli/tests/queue.rs +++ b/codex-rs/cli/tests/queue.rs @@ -22,6 +22,16 @@ enum QueueResponse { UnknownMethodVariant, } +#[cfg(unix)] +fn socket_test_home() -> Result { + // macOS temporary paths can exceed the Unix socket path limit. + #[cfg(target_os = "macos")] + let home = tempfile::tempdir_in("/tmp")?; + #[cfg(not(target_os = "macos"))] + let home = TempDir::new()?; + Ok(home) +} + async fn respond_to_queue_request( stream: S, codex_home: &Path, @@ -188,10 +198,288 @@ async fn run_remote_queue_command(response: QueueResponse) -> Result<(Output, Va Ok((output, server.await??)) } +#[cfg(unix)] +#[tokio::test] +async fn remote_session_commands_with_workload_identity_use_server_auth() -> Result<()> { + use std::time::Duration; + + use app_test_support::MockResponsesConfig; + use app_test_support::TestAppServer; + use app_test_support::create_final_assistant_message_sse_response; + use app_test_support::create_mock_responses_server_sequence_unchecked; + use codex_app_server_client::AppServerEvent; + use codex_app_server_client::DEFAULT_IN_PROCESS_CHANNEL_CAPACITY; + use codex_app_server_client::RemoteAppServerClient; + use codex_app_server_client::RemoteAppServerConnectArgs; + use codex_app_server_client::RemoteAppServerEndpoint; + use codex_app_server_protocol::ClientRequest; + use codex_app_server_protocol::RequestId; + use codex_app_server_protocol::ServerNotification; + use codex_app_server_protocol::ThreadListParams; + use codex_app_server_protocol::ThreadListResponse; + use codex_app_server_protocol::ThreadQueueListParams; + use codex_app_server_protocol::ThreadQueueListResponse; + use codex_app_server_protocol::ThreadSetNameParams; + use codex_app_server_protocol::ThreadSetNameResponse; + use codex_app_server_protocol::ThreadStartParams; + use codex_app_server_protocol::ThreadStartResponse; + use codex_app_server_protocol::TurnStatus; + use codex_protocol::shell_environment::OPENAI_FEDERATION_RULE_ID_ENV_VAR; + use codex_protocol::shell_environment::OPENAI_IDENTITY_TOKEN_FILE_ENV_VAR; + use tokio::process::Command; + use tokio::time::timeout; + + let codex_home = socket_test_home()?; + let codex = codex_utils_cargo_bin::cargo_bin("codex")?; + let model = create_mock_responses_server_sequence_unchecked(vec![ + create_final_assistant_message_sse_response("queued message consumed")?, + ]) + .await; + MockResponsesConfig::new(&model.uri()) + .with_root_config("features.plugins = false\nanalytics.enabled = false") + .with_provider_config("env_key = \"CODEX_QUEUE_SERVER_API_KEY\"") + .write(codex_home.path())?; + let _server = TestAppServer::builder() + .with_program(&codex) + .with_codex_home(codex_home.path()) + .with_plugin_startup_tasks() + .without_managed_config() + .with_args(&["app-server", "--listen", "unix://"]) + .with_env_overrides(&[ + ("OPENAI_API_KEY", None), + ("CODEX_API_KEY", None), + ("CODEX_ACCESS_TOKEN", None), + (OPENAI_FEDERATION_RULE_ID_ENV_VAR, None), + (OPENAI_IDENTITY_TOKEN_FILE_ENV_VAR, None), + ("CODEX_QUEUE_SERVER_API_KEY", Some("server-only-test-key")), + ]) + .build() + .await?; + let socket_path = codex_app_server::app_server_control_socket_path(codex_home.path())?; + timeout(Duration::from_secs(30), async { + while !socket_path.as_path().try_exists()? { + tokio::time::sleep(Duration::from_millis(10)).await; + } + Ok::<_, anyhow::Error>(()) + }) + .await??; + + let endpoint = format!("unix://{}", socket_path.as_path().display()); + let mut app = RemoteAppServerClient::connect(RemoteAppServerConnectArgs { + endpoint: RemoteAppServerEndpoint::UnixSocket { socket_path }, + client_name: "queue-e2e-test".to_string(), + client_version: "0.1.0".to_string(), + experimental_api: true, + mcp_server_openai_form_elicitation: false, + opt_out_notification_methods: Vec::new(), + channel_capacity: DEFAULT_IN_PROCESS_CHANNEL_CAPACITY, + }) + .await?; + let started: ThreadStartResponse = app + .request_typed(ClientRequest::ThreadStart { + request_id: RequestId::Integer(1), + params: ThreadStartParams::default(), + }) + .await?; + let thread_id = started.thread.id; + let message = "synthetic WIF queue end-to-end message"; + let output = timeout( + Duration::from_secs(30), + Command::new(&codex) + .env("CODEX_HOME", codex_home.path()) + .env(OPENAI_FEDERATION_RULE_ID_ENV_VAR, "rule-test") + .env( + OPENAI_IDENTITY_TOKEN_FILE_ENV_VAR, + codex_home.path().join("missing-identity-token"), + ) + .env_remove("CODEX_QUEUE_SERVER_API_KEY") + .kill_on_drop(true) + .args(["queue", "--remote", "unix://"]) + .args(["--thread", &thread_id, "--message", message]) + .output(), + ) + .await??; + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let completed = timeout(Duration::from_secs(30), async { + while let Some(event) = app.next_event().await { + if let AppServerEvent::ServerNotification(notification) = event + && let ServerNotification::TurnCompleted(completed) = *notification + { + return Ok::<_, anyhow::Error>(completed); + } + } + anyhow::bail!("app server disconnected before the queued turn completed") + }) + .await??; + assert_eq!(completed.thread_id, thread_id); + assert_eq!(completed.turn.status, TurnStatus::Completed); + let queue: ThreadQueueListResponse = app + .request_typed(ClientRequest::ThreadQueueList { + request_id: RequestId::Integer(2), + params: ThreadQueueListParams { + thread_id: thread_id.clone(), + cursor: None, + limit: None, + }, + }) + .await?; + assert!(queue.data.is_empty()); + + let requests = model + .received_requests() + .await + .context("model request capture unavailable")?; + let request = requests + .iter() + .find(|request| request.url.path().ends_with("/responses")) + .context("queued message did not reach the model")?; + assert!( + request.body_json::()?["input"] + .to_string() + .contains(message) + ); + assert_eq!( + request.headers["authorization"].to_str()?, + "Bearer server-only-test-key" + ); + let metadata: Value = serde_json::from_str(request.headers["x-codex-turn-metadata"].to_str()?)?; + assert_eq!(metadata["turn_trigger"], "queue"); + + let name = "remote-session-lifecycle"; + let _: ThreadSetNameResponse = app + .request_typed(ClientRequest::ThreadSetName { + request_id: RequestId::Integer(3), + params: ThreadSetNameParams { + thread_id: thread_id.clone(), + name: name.to_string(), + }, + }) + .await?; + // A separate caller home makes name resolution rely on the selected server. + let caller_home = TempDir::new()?; + let remote_command = || { + let mut command = Command::new(&codex); + command + .env("CODEX_HOME", caller_home.path()) + .current_dir(caller_home.path()) + .env(OPENAI_FEDERATION_RULE_ID_ENV_VAR, "rule-test") + .env( + OPENAI_IDENTITY_TOKEN_FILE_ENV_VAR, + caller_home.path().join("missing-identity-token"), + ) + .env_remove("CODEX_QUEUE_SERVER_API_KEY") + .kill_on_drop(true) + .args(["--remote", &endpoint]); + command + }; + let output = timeout( + Duration::from_secs(30), + remote_command().args(["delete", &thread_id]).output(), + ) + .await??; + assert!(!output.status.success()); + assert!(String::from_utf8(output.stderr)?.contains("cannot confirm session deletion")); + + let cases: &[(&[&str], Option)] = &[ + (&["archive", name], Some(true)), + (&["unarchive", name], Some(false)), + (&["delete", "--force", &thread_id], None), + ]; + for &(args, expected_archived) in cases { + let output = timeout( + Duration::from_secs(30), + remote_command().args(args).output(), + ) + .await??; + assert!( + output.status.success(), + "{args:?}: {}", + String::from_utf8_lossy(&output.stderr) + ); + for archived in [false, true] { + let threads: ThreadListResponse = app + .request_typed(ClientRequest::ThreadList { + request_id: RequestId::Integer(4), + params: ThreadListParams { + cursor: None, + limit: None, + sort_key: None, + sort_direction: None, + model_providers: None, + source_kinds: None, + originators: None, + archived: Some(archived), + section_id: None, + project_id: None, + cwd: None, + use_state_db_only: false, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!( + threads.data.iter().any(|thread| thread.id == thread_id), + expected_archived == Some(archived), + "{args:?}: archived={archived}" + ); + } + } + Ok(()) +} + +#[test] +fn remote_session_commands_validate_config() -> Result<()> { + let cases: &[(&[&str], &str, &str)] = &[ + ( + &["--strict-config"], + "config.toml", + "unknown_queue_option = true\n", + ), + (&["--profile", "queue"], "queue.config.toml", "model = 42\n"), + ( + &[], + "config.toml", + "experimental_thread_store_endpoint = \"https://example.com\"\n", + ), + ]; + let commands: &[&[&str]] = &[ + &["queue", "--thread", THREAD_ID, "--message", "do the thing"], + &["archive", THREAD_ID], + &["unarchive", THREAD_ID], + &["delete", "--force", THREAD_ID], + ]; + for &command in commands { + for &(args, config_file, config) in cases { + let codex_home = TempDir::new()?; + std::fs::write(codex_home.path().join(config_file), config)?; + let output = std::process::Command::new(codex_utils_cargo_bin::cargo_bin("codex")?) + .env("CODEX_HOME", codex_home.path()) + .current_dir(codex_home.path()) + .args(args) + .args(["--remote", "ws://127.0.0.1:1"]) + .args(command) + .output()?; + let stderr = String::from_utf8(output.stderr)?; + assert!(!output.status.success()); + assert!( + stderr.contains("failed to load config.toml"), + "{command:?}, {config:?}: {stderr}" + ); + } + } + Ok(()) +} + #[cfg(unix)] #[tokio::test] async fn queue_rejects_local_daemon_that_does_not_support_queueing() -> Result<()> { - let codex_home = tempfile::tempdir_in("/tmp")?; + let codex_home = socket_test_home()?; let socket_path = codex_app_server::app_server_control_socket_path(codex_home.path())?; std::fs::create_dir_all( socket_path @@ -232,7 +520,7 @@ async fn queue_rejects_local_daemon_that_does_not_support_queueing() -> Result<( #[cfg(unix)] #[tokio::test] async fn queue_rejects_overrides_that_bypass_local_daemon() -> Result<()> { - let codex_home = tempfile::tempdir_in("/tmp")?; + let codex_home = socket_test_home()?; let socket_path = codex_app_server::app_server_control_socket_path(codex_home.path())?; std::fs::create_dir_all( socket_path diff --git a/codex-rs/tui/src/session_archive_commands.rs b/codex-rs/tui/src/session_archive_commands.rs index 0da6c2a4959f..ea37b0fe209c 100644 --- a/codex-rs/tui/src/session_archive_commands.rs +++ b/codex-rs/tui/src/session_archive_commands.rs @@ -2,6 +2,8 @@ //! //! The CLI commands are thin app-server clients: resolve a user-provided UUID or exact session //! name, then call the corresponding app-server RPC. +//! Explicit remote session commands, including queue, leave authentication and execution to +//! the selected server without initializing the caller's credentials or runtime. use std::io::IsTerminal; use std::io::Write; @@ -11,6 +13,7 @@ use std::sync::Arc; use crate::Cli; use crate::app_server_session::AppServerSession; +use crate::app_server_session::ThreadParamsMode; use crate::legacy_core::config::ConfigBuilder; use crate::legacy_core::config::ConfigOverrides; use crate::legacy_core::config::load_config_toml_with_layer_stack; @@ -247,6 +250,25 @@ pub(super) async fn start_app_server_for_session_command( launch_loader_overrides.user_config_profile = Some(profile_v2.clone()); } + if let Some(endpoint) = explicit_remote_endpoint { + // Validate config before connecting, but leave authentication and execution + // to the selected server even when this caller has workload identity set. + launch_loader_overrides.ignore_login_requirements = true; + ConfigBuilder::default() + .codex_home(codex_home) + .cli_overrides(cli_kv_overrides) + .loader_overrides(launch_loader_overrides) + .strict_config(strict_config) + .build() + .await + .wrap_err("failed to load config.toml")?; + return Ok(AppServerSession::new( + super::connect_remote_app_server(endpoint).await?, + ThreadParamsMode::Remote, + ) + .with_remote_cwd_override(cli.cwd.clone())); + } + let workload_identity_selected = codex_login::is_workload_identity_selected(); let reuse_implicit_local_daemon = !cli.no_daemon && !workload_identity_selected