Spread AbsolutePathBuf (#17792)

Mechanical change to promote absolute paths through code.
This commit is contained in:
pakrym-oai
2026-04-14 14:26:10 -07:00
committed by GitHub
Unverified
parent dae56994da
commit dd1321d11b
166 changed files with 1638 additions and 1214 deletions
+34 -42
View File
@@ -1,7 +1,6 @@
use std::collections::HashMap;
use std::collections::HashSet;
use std::fmt::Debug;
use std::path::Path;
use std::path::PathBuf;
use std::sync::Arc;
use std::sync::atomic::AtomicU64;
@@ -650,7 +649,7 @@ impl Codex {
network_sandbox_policy: config.permissions.network_sandbox_policy,
windows_sandbox_level: WindowsSandboxLevel::from_config(&config),
cwd: config.cwd.clone(),
codex_home: config.codex_home.to_path_buf(),
codex_home: config.codex_home.clone(),
thread_name: None,
original_config_do_not_use: Arc::clone(&config),
metrics_service_name,
@@ -1132,7 +1131,7 @@ fn local_time_context() -> (String, String) {
async fn thread_title_from_state_db(
state_db: Option<&state_db::StateDbHandle>,
codex_home: &Path,
codex_home: &AbsolutePathBuf,
conversation_id: ThreadId,
) -> Option<String> {
if let Some(metadata) = state_db
@@ -1189,7 +1188,7 @@ pub(crate) struct SessionConfiguration {
/// the process-wide current working directory.
cwd: AbsolutePathBuf,
/// Directory containing all Codex state for this session.
codex_home: PathBuf,
codex_home: AbsolutePathBuf,
/// Optional user-facing name for the thread, updated during the session.
thread_name: Option<String>,
@@ -1208,7 +1207,7 @@ pub(crate) struct SessionConfiguration {
}
impl SessionConfiguration {
pub(crate) fn codex_home(&self) -> &PathBuf {
pub(crate) fn codex_home(&self) -> &AbsolutePathBuf {
&self.codex_home
}
@@ -1220,7 +1219,7 @@ impl SessionConfiguration {
approval_policy: self.approval_policy.value(),
approvals_reviewer: self.approvals_reviewer,
sandbox_policy: self.sandbox_policy.get().clone(),
cwd: self.cwd.to_path_buf(),
cwd: self.cwd.clone(),
ephemeral: self.original_config_do_not_use.ephemeral,
reasoning_effort: self.collaboration_mode.reasoning_effort(),
personality: self.personality,
@@ -1471,7 +1470,7 @@ impl Session {
per_turn_config
}
pub(crate) async fn codex_home(&self) -> PathBuf {
pub(crate) async fn codex_home(&self) -> AbsolutePathBuf {
let state = self.state.lock().await;
state.session_configuration.codex_home().clone()
}
@@ -1572,7 +1571,7 @@ impl Session {
conversation_id.to_string(),
&session_source,
sub_id.clone(),
cwd.to_path_buf(),
cwd.clone(),
session_configuration.sandbox_policy.get(),
session_configuration.windows_sandbox_level,
));
@@ -1927,9 +1926,9 @@ impl Session {
tx
} else {
ShellSnapshot::start_snapshotting(
config.codex_home.to_path_buf(),
config.codex_home.clone(),
conversation_id,
session_configuration.cwd.to_path_buf(),
session_configuration.cwd.clone(),
&mut default_shell,
session_telemetry.clone(),
)
@@ -2133,7 +2132,7 @@ impl Session {
approval_policy: session_configuration.approval_policy.value(),
approvals_reviewer: session_configuration.approvals_reviewer,
sandbox_policy: session_configuration.sandbox_policy.get().clone(),
cwd: session_configuration.cwd.to_path_buf(),
cwd: session_configuration.cwd.clone(),
reasoning_effort: session_configuration.collaboration_mode.reasoning_effort(),
history_log_id,
history_entry_count,
@@ -2492,9 +2491,9 @@ impl Session {
fn maybe_refresh_shell_snapshot_for_cwd(
&self,
previous_cwd: &Path,
next_cwd: &Path,
codex_home: &Path,
previous_cwd: &AbsolutePathBuf,
next_cwd: &AbsolutePathBuf,
codex_home: &AbsolutePathBuf,
session_source: &SessionSource,
) {
if previous_cwd == next_cwd {
@@ -2513,9 +2512,9 @@ impl Session {
}
ShellSnapshot::refresh_snapshot(
codex_home.to_path_buf(),
codex_home.clone(),
self.conversation_id,
next_cwd.to_path_buf(),
next_cwd.clone(),
self.services.user_shell.as_ref().clone(),
self.services.shell_snapshot_tx.clone(),
self.services.session_telemetry.clone(),
@@ -2779,14 +2778,6 @@ impl Session {
}
};
let config_toml_path = match AbsolutePathBuf::try_from(config_toml_path) {
Ok(path) => path,
Err(err) => {
warn!("failed to resolve user config path while reloading layer: {err}");
return;
}
};
let mut state = self.state.lock().await;
let mut config = (*state.session_configuration.original_config_do_not_use).clone();
config.config_layer_stack = config
@@ -3184,7 +3175,7 @@ impl Session {
call_id: String,
approval_id: Option<String>,
command: Vec<String>,
cwd: PathBuf,
cwd: AbsolutePathBuf,
reason: Option<String>,
network_approval_context: Option<NetworkApprovalContext>,
proposed_execpolicy_amendment: Option<ExecPolicyAmendment>,
@@ -5395,9 +5386,12 @@ mod handlers {
cwds: Vec<PathBuf>,
force_reload: bool,
) {
let cwds = if cwds.is_empty() {
let default_cwd = {
let state = sess.state.lock().await;
vec![state.session_configuration.cwd.to_path_buf()]
state.session_configuration.cwd.to_path_buf()
};
let cwds = if cwds.is_empty() {
vec![default_cwd]
} else {
cwds
};
@@ -5412,14 +5406,13 @@ mod handlers {
let cwd_abs = match AbsolutePathBuf::relative_to_current_dir(cwd.as_path()) {
Ok(path) => path,
Err(err) => {
let message = err.to_string();
let cwd_for_entry = cwd.clone();
let error_path = cwd.clone();
skills.push(SkillsListEntry {
cwd: cwd_for_entry.clone(),
cwd,
skills: Vec::new(),
errors: vec![SkillErrorInfo {
path: cwd_for_entry,
message,
path: error_path,
message: err.to_string(),
}],
});
continue;
@@ -5436,14 +5429,13 @@ mod handlers {
{
Ok(config_layer_stack) => config_layer_stack,
Err(err) => {
let message = err.to_string();
let cwd_for_entry = cwd.clone();
let error_path = cwd.clone();
skills.push(SkillsListEntry {
cwd: cwd_for_entry.clone(),
cwd,
skills: Vec::new(),
errors: vec![SkillErrorInfo {
path: cwd_for_entry,
message,
path: error_path,
message: err.to_string(),
}],
});
continue;
@@ -5456,7 +5448,7 @@ mod handlers {
)
.await;
let skills_input = crate::SkillsLoadInput::new(
cwd_abs,
cwd_abs.clone(),
effective_skill_roots,
config_layer_stack,
config.bundled_skills_enabled(),
@@ -5870,7 +5862,7 @@ mod handlers {
sess.maybe_emit_unknown_model_warning_for_turn(turn_context.as_ref())
.await;
sess.refresh_mcp_servers_if_requested(&turn_context).await;
match resolve_review_request(review_request, turn_context.cwd.as_path()) {
match resolve_review_request(review_request, &turn_context.cwd) {
Ok(resolved) => {
spawn_review_thread(
Arc::clone(sess),
@@ -5986,7 +5978,7 @@ async fn spawn_review_thread(
sess.conversation_id.to_string(),
&session_source,
review_turn_id.clone(),
parent_turn_context.cwd.to_path_buf(),
parent_turn_context.cwd.clone(),
parent_turn_context.sandbox_policy.get(),
parent_turn_context.windows_sandbox_level,
));
@@ -6501,7 +6493,7 @@ pub(crate) async fn run_turn(
let stop_request = codex_hooks::StopRequest {
session_id: sess.conversation_id,
turn_id: turn_context.sub_id.clone(),
cwd: turn_context.cwd.to_path_buf(),
cwd: turn_context.cwd.clone(),
transcript_path: sess.hook_transcript_path().await,
model: turn_context.model_info.slug.clone(),
permission_mode: stop_hook_permission_mode,
@@ -6551,7 +6543,7 @@ pub(crate) async fn run_turn(
.hooks()
.dispatch(HookPayload {
session_id: sess.conversation_id,
cwd: turn_context.cwd.to_path_buf(),
cwd: turn_context.cwd.clone(),
client: turn_context.app_server_client_name.clone(),
triggered_at: chrono::Utc::now(),
hook_event: HookEvent::AfterAgent {