refactor: unify zsh fork shell tool with fd-based bridge

This commit is contained in:
Michael Bolin
2026-02-22 20:01:03 -08:00
parent e8949f4507
commit 4cfc116d7f
12 changed files with 174 additions and 271 deletions

View File

@@ -24,6 +24,7 @@ anyhow = { workspace = true }
async-trait = { workspace = true }
clap = { workspace = true, features = ["derive"] }
codex-core = { workspace = true }
codex-shell-exec-bridge = { workspace = true }
codex-execpolicy = { workspace = true }
codex-protocol = { workspace = true }
codex-shell-command = { workspace = true }

View File

@@ -73,14 +73,20 @@ use tracing_subscriber::EnvFilter;
use tracing_subscriber::{self};
use crate::posix::mcp_escalation_policy::ExecPolicyOutcome;
use codex_shell_exec_bridge::ESCALATE_SOCKET_ENV_VAR;
use codex_shell_exec_bridge::EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::EscalateAction;
use codex_shell_exec_bridge::EscalateRequest;
use codex_shell_exec_bridge::EscalateResponse;
use codex_shell_exec_bridge::LEGACY_BASH_EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::SuperExecMessage;
use codex_shell_exec_bridge::SuperExecResult;
mod escalate_client;
mod escalate_protocol;
mod escalate_server;
mod escalation_policy;
mod mcp;
mod mcp_escalation_policy;
mod socket;
mod stopwatch;
pub use mcp::ExecResult;

View File

@@ -4,17 +4,16 @@ use std::os::fd::FromRawFd as _;
use std::os::fd::OwnedFd;
use anyhow::Context as _;
use crate::posix::escalate_protocol::ESCALATE_SOCKET_ENV_VAR;
use crate::posix::escalate_protocol::EXEC_WRAPPER_ENV_VAR;
use crate::posix::escalate_protocol::EscalateAction;
use crate::posix::escalate_protocol::EscalateRequest;
use crate::posix::escalate_protocol::EscalateResponse;
use crate::posix::escalate_protocol::LEGACY_BASH_EXEC_WRAPPER_ENV_VAR;
use crate::posix::escalate_protocol::SuperExecMessage;
use crate::posix::escalate_protocol::SuperExecResult;
use crate::posix::socket::AsyncDatagramSocket;
use crate::posix::socket::AsyncSocket;
use codex_shell_exec_bridge::AsyncDatagramSocket;
use codex_shell_exec_bridge::AsyncSocket;
use codex_shell_exec_bridge::ESCALATE_SOCKET_ENV_VAR;
use codex_shell_exec_bridge::EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::EscalateAction;
use codex_shell_exec_bridge::EscalateRequest;
use codex_shell_exec_bridge::EscalateResponse;
use codex_shell_exec_bridge::LEGACY_BASH_EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::SuperExecMessage;
use codex_shell_exec_bridge::SuperExecResult;
fn get_escalate_client() -> anyhow::Result<AsyncDatagramSocket> {
// TODO: we should defensively require only calling this once, since AsyncSocket will take ownership of the fd.

View File

@@ -12,21 +12,21 @@ use codex_core::SandboxState;
use codex_core::exec::process_exec_tool_call;
use codex_core::sandboxing::SandboxPermissions;
use codex_protocol::config_types::WindowsSandboxLevel;
use codex_shell_exec_bridge::AsyncDatagramSocket;
use codex_shell_exec_bridge::AsyncSocket;
use codex_shell_exec_bridge::ESCALATE_SOCKET_ENV_VAR;
use codex_shell_exec_bridge::EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::EscalateAction;
use codex_shell_exec_bridge::EscalateRequest;
use codex_shell_exec_bridge::EscalateResponse;
use codex_shell_exec_bridge::LEGACY_BASH_EXEC_WRAPPER_ENV_VAR;
use codex_shell_exec_bridge::SuperExecMessage;
use codex_shell_exec_bridge::SuperExecResult;
use tokio::process::Command;
use tokio_util::sync::CancellationToken;
use crate::posix::escalate_protocol::ESCALATE_SOCKET_ENV_VAR;
use crate::posix::escalate_protocol::EXEC_WRAPPER_ENV_VAR;
use crate::posix::escalate_protocol::EscalateAction;
use crate::posix::escalate_protocol::EscalateRequest;
use crate::posix::escalate_protocol::EscalateResponse;
use crate::posix::escalate_protocol::LEGACY_BASH_EXEC_WRAPPER_ENV_VAR;
use crate::posix::escalate_protocol::SuperExecMessage;
use crate::posix::escalate_protocol::SuperExecResult;
use crate::posix::escalation_policy::EscalationPolicy;
use crate::posix::mcp::ExecParams;
use crate::posix::socket::AsyncDatagramSocket;
use crate::posix::socket::AsyncSocket;
use codex_core::exec::ExecExpiration;
pub(crate) struct EscalateServer {