From aa6bd7212ccbb6717f6aced44cd3ae79e665cab5 Mon Sep 17 00:00:00 2001 From: bft-codebot Date: Sun, 22 Mar 2026 17:26:26 +0000 Subject: [PATCH] sync(bfmono): feat(gambit): add explicit codex skip-sandbox yolo mode (+19 more) (bfmono@9ce3921c5) This PR is an automated gambitmono sync of bfmono Gambit packages. - Source: `packages/gambit/` - Core: `packages/gambit/packages/gambit-core/` - bfmono rev: 9ce3921c5 Changes: - e057eb2a8 feat(gambit): add explicit codex skip-sandbox yolo mode - ee1e87e8c feat(gambit): pass codex config through model additionalParams - 014903b22 feat(gambit): align codex provider prompt and config surfaces - 425535b7a fix(bfds): remove RouterLink from shared components - 2e7ad9752 fix(bfdesktop): persist desktop assistant turn state - 7ffc0e646 fix(gambit-codex): preserve assistant message ordering in bfdesktop - 6dc58b9c2 feat(gambit-codex): stream assistant deltas and progressive tool result updates - 53dade7a2 feat(workloops): cut over repo paths to workloops - 17294ccf2 fix(gambit): keep dnt import map relative to package root - 4f695500c fix(gambit): shorten external export bundle tar paths - 52961d921 test(gambit): speed up max-turn clamp coverage - eb8d77c1f fix(repo): repair root instruction symlinks - 8d0ed38ff docs(company-workloops): move team and initiative memos into company-workloops - 76a315199 docs(company-workloops): move company policy into company-workloops - 34f2db5a3 test(gambit-core): tighten worker runtime test timing - 64c46672f refactor(browser): remove legacy demo wrapper entrypoints - 31a22bd4d fix(gambit): stop auto-seeding test tab inputs - c696f8231 fix(gambit): clarify test tab scenario and assistant inputs - 0e122281f feat(browser): stabilize shared runtime migration surface - 2b29f9c74 refactor(browser-runtime): unify demo and e2e entrypoints Do not edit this repo directly; make changes in bfmono and re-run the sync. --- src/providers/codex.test.ts | 22 ++++++++++++++++++++++ src/providers/codex.ts | 13 +++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/providers/codex.test.ts b/src/providers/codex.test.ts index a5acf5bd..b9070d60 100644 --- a/src/providers/codex.test.ts +++ b/src/providers/codex.test.ts @@ -906,6 +906,7 @@ Deno.test("codex provider skips sandbox config when yolo env is enabled", () => cwd: "/tmp/test-cwd", }); const joined = args.join(" "); + assertEquals(joined.includes("--yolo"), true); assertEquals(joined.includes('approval_policy="never"'), true); assertEquals(joined.includes('sandbox_mode="workspace-write"'), false); assertEquals( @@ -921,6 +922,27 @@ Deno.test("codex provider skips sandbox config when yolo env is enabled", () => } }); +Deno.test("codex provider skips sandbox config when additionalParams.codex.skip_sandbox_config is true", () => { + const args = parseCodexArgsForTest({ + model: "codex-cli/default", + messages: [{ role: "user", content: "hi" }], + cwd: "/tmp/test-cwd", + params: { + codex: { + skip_sandbox_config: true, + }, + }, + }); + const joined = args.join(" "); + assertEquals(joined.includes("--yolo"), true); + assertEquals(joined.includes('approval_policy="never"'), true); + assertEquals(joined.includes('sandbox_mode="workspace-write"'), false); + assertEquals( + joined.includes("sandbox_workspace_write.writable_roots"), + false, + ); +}); + Deno.test("codex provider omits MCP root deck env when deck path is absent", () => { const args = parseCodexArgsForTest({ model: "codex-cli/default", diff --git a/src/providers/codex.ts b/src/providers/codex.ts index 42be1821..23ff40c3 100644 --- a/src/providers/codex.ts +++ b/src/providers/codex.ts @@ -120,6 +120,11 @@ function shouldSkipCodexSandboxConfig( ): boolean { const yolo = params?.gambitYolo; if (typeof yolo === "boolean") return yolo; + const codex = asRecord(params?.codex); + const codexSkipSandboxConfig = codex.skip_sandbox_config; + if (typeof codexSkipSandboxConfig === "boolean") { + return codexSkipSandboxConfig; + } const envRaw = Deno.env.get(CODEX_SKIP_SANDBOX_CONFIG_ENV); return Boolean(envRaw && parseTruthy(envRaw)); } @@ -1154,6 +1159,7 @@ export function createCodexProvider(opts?: { priorThreadId, }); const cwd = runCwd(); + const skipSandboxConfig = shouldSkipCodexSandboxConfig(input.params); const args = priorThreadId ? [ "exec", @@ -1162,6 +1168,9 @@ export function createCodexProvider(opts?: { "--json", ] : ["exec", "--skip-git-repo-check", "--json"]; + if (skipSandboxConfig) { + args.push("--yolo"); + } args.push( ...codexConfigArgs({ cwd, @@ -1410,9 +1419,13 @@ export function parseCodexArgsForTest(input: { messages: input.messages, priorThreadId, }); + const skipSandboxConfig = shouldSkipCodexSandboxConfig(input.params); const args = priorThreadId ? ["exec", "resume", "--skip-git-repo-check", "--json"] : ["exec", "--skip-git-repo-check", "--json"]; + if (skipSandboxConfig) { + args.push("--yolo"); + } args.push( ...codexConfigArgs({ cwd: input.cwd ?? runCwd(),