mirror of
https://github.com/openai/codex.git
synced 2026-09-08 15:50:34 +00:00
fix(windows-sandbox): surface refresh helper failures
This commit is contained in:
@@ -184,6 +184,16 @@ fn run_setup_refresh_inner(
|
||||
let json = serde_json::to_vec(&payload)?;
|
||||
let b64 = BASE64_STANDARD.encode(json);
|
||||
let exe = find_setup_exe();
|
||||
let cleared_report = match clear_setup_error_report(request.codex_home) {
|
||||
Ok(()) => true,
|
||||
Err(err) => {
|
||||
log_note(
|
||||
&format!("setup refresh: failed to clear setup_error.json before launch: {err}"),
|
||||
Some(&sandbox_dir(request.codex_home)),
|
||||
);
|
||||
false
|
||||
}
|
||||
};
|
||||
// Refresh should never request elevation; ensure verb isn't set and we don't trigger UAC.
|
||||
let mut cmd = Command::new(&exe);
|
||||
cmd.arg(&b64).stdout(Stdio::null()).stderr(Stdio::null());
|
||||
@@ -212,7 +222,17 @@ fn run_setup_refresh_inner(
|
||||
&format!("setup refresh: exited with status {status:?}"),
|
||||
Some(&sandbox_dir(request.codex_home)),
|
||||
);
|
||||
return Err(anyhow!("setup refresh failed with status {status}"));
|
||||
return Err(report_helper_failure(
|
||||
request.codex_home,
|
||||
cleared_report,
|
||||
status.code(),
|
||||
));
|
||||
}
|
||||
if let Err(err) = clear_setup_error_report(request.codex_home) {
|
||||
log_note(
|
||||
&format!("setup refresh: failed to clear setup_error.json after success: {err}"),
|
||||
Some(&sandbox_dir(request.codex_home)),
|
||||
);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -869,8 +889,12 @@ mod tests {
|
||||
use super::offline_proxy_settings_from_env;
|
||||
use super::profile_read_roots;
|
||||
use super::proxy_ports_from_env;
|
||||
use super::report_helper_failure;
|
||||
use crate::helper_materialization::helper_bin_dir;
|
||||
use crate::policy::SandboxPolicy;
|
||||
use crate::setup_error::SetupErrorCode;
|
||||
use crate::setup_error::SetupErrorReport;
|
||||
use crate::write_setup_error_report;
|
||||
use codex_protocol::protocol::ReadOnlyAccess;
|
||||
use codex_utils_absolute_path::AbsolutePathBuf;
|
||||
use pretty_assertions::assert_eq;
|
||||
@@ -933,6 +957,30 @@ mod tests {
|
||||
assert_eq!(proxy_ports_from_env(&env), vec![1081, 8080]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn report_helper_failure_uses_structured_helper_report_when_available() {
|
||||
let tmp = TempDir::new().expect("tempdir");
|
||||
write_setup_error_report(
|
||||
tmp.path(),
|
||||
&SetupErrorReport {
|
||||
code: SetupErrorCode::HelperFirewallRuleCreateOrAddFailed,
|
||||
message: "SetRemoteAddresses failed".to_string(),
|
||||
},
|
||||
)
|
||||
.expect("write setup error report");
|
||||
|
||||
let err = report_helper_failure(tmp.path(), true, Some(1));
|
||||
let failure = err
|
||||
.downcast_ref::<crate::setup_error::SetupFailure>()
|
||||
.expect("structured setup failure");
|
||||
|
||||
assert_eq!(
|
||||
failure.code,
|
||||
SetupErrorCode::HelperFirewallRuleCreateOrAddFailed
|
||||
);
|
||||
assert_eq!(failure.message, "SetRemoteAddresses failed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn offline_proxy_settings_ignore_proxy_env_when_online_identity_selected() {
|
||||
let mut env = HashMap::new();
|
||||
|
||||
Reference in New Issue
Block a user