diff --git a/codex-rs/core/src/hook_runtime.rs b/codex-rs/core/src/hook_runtime.rs index d9064756e8..8acaee6a52 100644 --- a/codex-rs/core/src/hook_runtime.rs +++ b/codex-rs/core/src/hook_runtime.rs @@ -128,9 +128,7 @@ pub(crate) async fn run_pending_session_start_hooks( .run_session_start(request, Some(turn_context.sub_id.clone())) .await; emit_hook_completed_events(sess, turn_context, hook_events).await; - if let Some(env) = session_start_env { - sess.merge_session_start_env(env); - } + sess.merge_session_start_env(session_start_env); record_additional_contexts(sess, turn_context, additional_contexts).await; if should_stop { return true; diff --git a/codex-rs/hooks/src/events/session_start.rs b/codex-rs/hooks/src/events/session_start.rs index c51028bb3b..22479b05a8 100644 --- a/codex-rs/hooks/src/events/session_start.rs +++ b/codex-rs/hooks/src/events/session_start.rs @@ -83,7 +83,7 @@ pub struct SessionStartOutcome { pub should_stop: bool, pub stop_reason: Option, pub additional_contexts: Vec, - pub session_start_env: Option>, + pub session_start_env: HashMap, } #[derive(Debug, PartialEq, Eq)] @@ -123,7 +123,7 @@ pub(crate) async fn run( should_stop: false, stop_reason: None, additional_contexts: Vec::new(), - session_start_env: session_start_env_for_event(event_name), + session_start_env: HashMap::new(), }; } @@ -145,7 +145,6 @@ pub(crate) async fn run( turn_id, format!("failed to serialize session start hook input: {error}"), ), - event_name, ); } }; @@ -176,7 +175,6 @@ pub(crate) async fn run( Some(subagent_turn_id), format!("failed to serialize subagent start hook input: {error}"), ), - event_name, ); } }; @@ -203,9 +201,8 @@ pub(crate) async fn run( .iter() .map(|result| result.data.additional_contexts_for_model.as_slice()), ); - let session_start_env = (event_name == HookEventName::SessionStart).then(|| { - merge_session_start_env(results.iter().map(|result| &result.data.session_start_env)) - }); + let session_start_env = + merge_session_start_env(results.iter().map(|result| &result.data.session_start_env)); SessionStartOutcome { hook_events: results.into_iter().map(|result| result.completed).collect(), @@ -353,23 +350,16 @@ fn parse_completed( } } -fn serialization_failure_outcome( - hook_events: Vec, - event_name: HookEventName, -) -> SessionStartOutcome { +fn serialization_failure_outcome(hook_events: Vec) -> SessionStartOutcome { SessionStartOutcome { hook_events, should_stop: false, stop_reason: None, additional_contexts: Vec::new(), - session_start_env: session_start_env_for_event(event_name), + session_start_env: HashMap::new(), } } -fn session_start_env_for_event(event_name: HookEventName) -> Option> { - (event_name == HookEventName::SessionStart).then(HashMap::new) -} - fn merge_session_start_env<'a>( envs: impl IntoIterator>, ) -> HashMap {