From 4a1534cacdb9c6767427319e21b2dd772e4438c3 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sun, 12 Jul 2026 23:12:20 +0200 Subject: [PATCH] Show only commands in Codex shell tool calls (#2029) * fix(codex): hide shell launchers from command summaries Codex only unwrapped POSIX shells from /bin. Commands launched through /usr/bin/zsh therefore exposed the wrapper in the tool-call row. * test(codex): preserve shell wrapper path coverage --- .../providers/codex/tool-call-mapper.test.ts | 35 ++++++++++--------- .../agent/providers/codex/tool-call-mapper.ts | 4 ++- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts b/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts index 32ca89563..6c8919e52 100644 --- a/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts +++ b/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts @@ -51,23 +51,26 @@ describe("codex tool-call mapper", () => { }); }); - it("unwraps shell wrapper strings for commandExecution", () => { - const item = expectMapped( - mapCodexToolCallFromThreadItem({ - type: "commandExecution", - id: "codex-call-wrapper-string", - status: "running", - command: '/bin/zsh -lc "echo hello"', - cwd: "/tmp/repo", - }), - ); + it.each(['/bin/zsh -lc "echo hello"', '/usr/bin/zsh -lc "echo hello"'])( + "unwraps zsh wrapper strings for commandExecution: %s", + (command) => { + const item = expectMapped( + mapCodexToolCallFromThreadItem({ + type: "commandExecution", + id: "codex-call-wrapper-string", + status: "running", + command, + cwd: "/tmp/repo", + }), + ); - expect(item.detail).toEqual({ - type: "shell", - command: "echo hello", - cwd: "/tmp/repo", - }); - }); + expect(item.detail).toEqual({ + type: "shell", + command: "echo hello", + cwd: "/tmp/repo", + }); + }, + ); it("unwraps pwsh wrapper strings for commandExecution on Windows", () => { const item = expectMapped( diff --git a/packages/server/src/server/agent/providers/codex/tool-call-mapper.ts b/packages/server/src/server/agent/providers/codex/tool-call-mapper.ts index 710529af0..5f488cc4a 100644 --- a/packages/server/src/server/agent/providers/codex/tool-call-mapper.ts +++ b/packages/server/src/server/agent/providers/codex/tool-call-mapper.ts @@ -221,7 +221,9 @@ const CodexThreadItemSchema = z.discriminatedUnion("type", [ function maybeUnwrapShellWrapperCommand(command: string): string { const trimmed = command.trim(); - const unixWrapperMatch = trimmed.match(/^(?:\/bin\/)?(?:zsh|bash|sh)\s+-(?:lc|c)\s+([\s\S]+)$/); + const unixWrapperMatch = trimmed.match( + /^(?:(?:\/[^/\s]+)*\/)?(?:zsh|bash|sh)\s+-(?:lc|c)\s+([\s\S]+)$/, + ); if (unixWrapperMatch) { const candidate = unixWrapperMatch[1]?.trim() ?? ""; if (!candidate) {