Fix hook environment cwd routing

This commit is contained in:
starr-openai
2026-05-28 22:54:33 -07:00
parent db42755366
commit 0453652972
16 changed files with 179 additions and 25 deletions
+20
View File
@@ -1,3 +1,4 @@
use std::collections::HashMap;
use std::future::Future;
use std::sync::Arc;
use std::time::Duration;
@@ -43,6 +44,17 @@ use crate::event_mapping::parse_turn_item;
use crate::session::TurnInput;
use crate::session::session::Session;
use crate::session::turn_context::TurnContext;
fn hook_environment_cwds(
turn_context: &TurnContext,
) -> HashMap<String, codex_utils_absolute_path::AbsolutePathBuf> {
turn_context
.environments
.turn_environments
.iter()
.map(|environment| (environment.environment_id.clone(), environment.cwd.clone()))
.collect()
}
use crate::tools::hook_names::HookToolName;
use crate::tools::sandboxing::PermissionRequestPayload;
@@ -128,6 +140,7 @@ pub(crate) async fn run_pending_session_start_hooks(
session_id: sess.session_id().into(),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
@@ -170,6 +183,7 @@ pub(crate) async fn run_pre_tool_use_hooks(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
@@ -231,6 +245,7 @@ pub(crate) async fn run_permission_request_hooks(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.to_path_buf(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
@@ -273,6 +288,7 @@ pub(crate) async fn run_post_tool_use_hooks(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
@@ -346,6 +362,7 @@ pub(crate) async fn run_turn_stop_hooks(
turn_id: turn_context.sub_id.clone(),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
@@ -372,6 +389,7 @@ pub(crate) async fn run_pre_compact_hooks(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
trigger: compaction_trigger_label(trigger).to_string(),
@@ -411,6 +429,7 @@ pub(crate) async fn run_post_compact_hooks(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
trigger: compaction_trigger_label(trigger).to_string(),
@@ -507,6 +526,7 @@ pub(crate) async fn inspect_pending_input(
subagent: thread_spawn_subagent_hook_context(sess, turn_context),
#[allow(deprecated)]
cwd: turn_context.cwd.clone(),
environment_cwds: hook_environment_cwds(turn_context),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: hook_permission_mode(turn_context),
+1
View File
@@ -3311,6 +3311,7 @@ async fn build_hooks_for_config(
plugin_hook_load_warnings,
shell_program: Some(hook_shell_program),
shell_args: hook_shell_argv,
local_cwd: config.cwd.clone(),
environment_manager,
})
}
+3
View File
@@ -558,6 +558,7 @@ async fn preview_session_start_hooks(
hooks.preview_session_start(&codex_hooks::SessionStartRequest {
session_id: ThreadId::new(),
cwd: config.cwd.clone(),
environment_cwds: Default::default(),
transcript_path: None,
model: "gpt-5.2".to_string(),
permission_mode: "default".to_string(),
@@ -1329,6 +1330,7 @@ async fn reload_user_config_layer_refreshes_hooks() -> anyhow::Result<()> {
let request = codex_hooks::SessionStartRequest {
session_id: session.conversation_id,
cwd: session.get_config().await.cwd.clone(),
environment_cwds: Default::default(),
transcript_path: None,
model: "gpt-5.2".to_string(),
permission_mode: "default".to_string(),
@@ -1437,6 +1439,7 @@ async fn refresh_runtime_config_refreshes_hooks() -> anyhow::Result<()> {
let request = codex_hooks::SessionStartRequest {
session_id: session.conversation_id,
cwd: session.get_config().await.cwd.clone(),
environment_cwds: Default::default(),
transcript_path: None,
model: "gpt-5.2".to_string(),
permission_mode: "default".to_string(),