mirror of
https://github.com/openai/codex.git
synced 2026-04-27 08:05:51 +00:00
## Why `shell-tool-mcp` and the Bash fork are no longer needed, but the patched zsh fork is still relevant for shell escalation and for the DotSlash-backed zsh-fork integration tests. Deleting the old `shell-tool-mcp` workflow also deleted the only pipeline that rebuilt those patched zsh binaries. This keeps the package removal, while preserving a small release path that can be reused whenever `codex-rs/shell-escalation/patches/zsh-exec-wrapper.patch` changes. ## What changed - removed the `shell-tool-mcp` workspace package, its npm packaging/release jobs, the Bash test fixture, and the remaining Bash-specific compatibility wiring - deleted the old `.github/workflows/shell-tool-mcp.yml` and `.github/workflows/shell-tool-mcp-ci.yml` workflows now that their responsibilities have been replaced or removed - kept the zsh patch under `codex-rs/shell-escalation/patches/zsh-exec-wrapper.patch` and updated the `codex-rs/shell-escalation` docs/code to describe the zsh-based flow directly - added `.github/workflows/rust-release-zsh.yml` to build only the three zsh binaries that `codex-rs/app-server/tests/suite/zsh` needs today: - `aarch64-apple-darwin` on `macos-15` - `x86_64-unknown-linux-musl` on `ubuntu-24.04` - `aarch64-unknown-linux-musl` on `ubuntu-24.04` - extracted the shared zsh build/smoke-test/stage logic into `.github/scripts/build-zsh-release-artifact.sh`, made that helper directly executable, and now invoke it directly from the workflow so the Linux and macOS jobs only keep the OS-specific setup in YAML - wired those standalone `codex-zsh-*.tar.gz` assets into `rust-release.yml` and added `.github/dotslash-zsh-config.json` so releases also publish a `codex-zsh` DotSlash file - updated the checked-in `codex-rs/app-server/tests/suite/zsh` fixture comments to explain that new releases come from the standalone zsh assets, while the checked-in fixture remains pinned to the latest historical release until a newer zsh artifact is published - tightened a couple of follow-on cleanups in `codex-rs/shell-escalation`: the `ExecParams::command` comment now describes the shell `-c`/`-lc` string more clearly, and the README now points at the same `git.code.sf.net` zsh source URL that the workflow uses ## Testing - `cargo test -p codex-shell-escalation` - `just argument-comment-lint` - `bash -n .github/scripts/build-zsh-release-artifact.sh` - attempted `cargo test -p codex-core`; unrelated existing failures remain, but the touched `tools::runtimes::shell::unix_escalation::*` coverage passed during that run
35 lines
998 B
Diff
35 lines
998 B
Diff
diff --git a/Src/exec.c b/Src/exec.c
|
|
index 27bca11..baea760 100644
|
|
--- a/Src/exec.c
|
|
+++ b/Src/exec.c
|
|
@@ -507,7 +507,9 @@ zexecve(char *pth, char **argv, char **newenvp)
|
|
{
|
|
int eno;
|
|
static char buf[PATH_MAX * 2+1];
|
|
- char **eep;
|
|
+ char **eep, **exec_argv;
|
|
+ char *orig_pth = pth;
|
|
+ char *exec_wrapper;
|
|
|
|
unmetafy(pth, NULL);
|
|
for (eep = argv; *eep; eep++)
|
|
@@ -526,8 +528,17 @@ zexecve(char *pth, char **argv, char **newenvp)
|
|
|
|
if (newenvp == NULL)
|
|
newenvp = environ;
|
|
+ exec_argv = argv;
|
|
+ if ((exec_wrapper = getenv("EXEC_WRAPPER")) &&
|
|
+ *exec_wrapper && !inblank(*exec_wrapper)) {
|
|
+ exec_argv = argv - 2;
|
|
+ exec_argv[0] = exec_wrapper;
|
|
+ exec_argv[1] = orig_pth;
|
|
+ pth = exec_wrapper;
|
|
+ }
|
|
winch_unblock();
|
|
- execve(pth, argv, newenvp);
|
|
+ execve(pth, exec_argv, newenvp);
|
|
+ pth = orig_pth;
|
|
|
|
/* If the execve returns (which in general shouldn't happen), *
|
|
* then check for an errno equal to ENOEXEC. This errno is set *
|