From f2dd34871c1563a7fe0c52b558b86cdaea2a2d9f Mon Sep 17 00:00:00 2001 From: viyatb-oai Date: Wed, 11 Feb 2026 20:30:47 -0800 Subject: [PATCH] fix(core): force retry approval for network-context denials --- codex-rs/core/src/tools/orchestrator.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/codex-rs/core/src/tools/orchestrator.rs b/codex-rs/core/src/tools/orchestrator.rs index 3bc2041295..869755cea8 100644 --- a/codex-rs/core/src/tools/orchestrator.rs +++ b/codex-rs/core/src/tools/orchestrator.rs @@ -153,7 +153,11 @@ impl ToolOrchestrator { } // Ask for approval before retrying with the escalated sandbox. - if !tool.should_bypass_approval(approval_policy, already_approved) { + let should_bypass_retry_approval = should_bypass_retry_approval( + tool.should_bypass_approval(approval_policy, already_approved), + retry_details.network_approval_context.is_some(), + ); + if !should_bypass_retry_approval { let approval_ctx = ApprovalCtx { session: tool_ctx.session, turn: turn_ctx, @@ -260,6 +264,13 @@ fn can_retry_without_sandbox( ) } +fn should_bypass_retry_approval( + tool_wants_to_bypass_approval: bool, + has_network_approval_context: bool, +) -> bool { + tool_wants_to_bypass_approval && !has_network_approval_context +} + fn extract_network_approval_context(output: &ExecToolCallOutput) -> Option { [ output.stderr.text.as_str(), @@ -418,4 +429,14 @@ mod tests { false )); } + + #[test] + fn retry_approval_not_bypassed_when_network_context_present() { + assert!(!should_bypass_retry_approval(true, true)); + } + + #[test] + fn retry_approval_bypassed_without_network_context() { + assert!(should_bypass_retry_approval(true, false)); + } }