Skip to content

Commit 2bde35d

Browse files
committed
fix: pass prepared CLI env to spawned process
1 parent 0adfca3 commit 2bde35d

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

src/agents/cli-runner.spawn.test.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ function buildPreparedCliRunContext(params: {
9292
sessionEntry?: PreparedCliRunContext["params"]["sessionEntry"];
9393
agentId?: string;
9494
backend?: Partial<PreparedCliRunContext["preparedBackend"]["backend"]>;
95+
preparedEnv?: PreparedCliRunContext["preparedBackend"]["env"];
9596
resolveExecutionArgs?: PreparedCliRunContext["backendResolved"]["resolveExecutionArgs"];
9697
config?: PreparedCliRunContext["params"]["config"];
9798
mcpConfigHash?: string;
@@ -162,7 +163,7 @@ function buildPreparedCliRunContext(params: {
162163
},
163164
preparedBackend: {
164165
backend,
165-
env: {},
166+
env: params.preparedEnv ?? {},
166167
...(params.mcpConfigHash ? { mcpConfigHash: params.mcpConfigHash } : {}),
167168
},
168169
reusableCliSession: {},
@@ -532,6 +533,35 @@ describe("runCliAgent spawn path", () => {
532533
expect(requireArgAfter(input.argv, "--effort")).toBe("high");
533534
});
534535

536+
it("passes prepared backend env to the spawned CLI process", async () => {
537+
mockSuccessfulCliRun();
538+
539+
await executePreparedCliRun(
540+
buildPreparedCliRunContext({
541+
provider: "codex-cli",
542+
model: "gpt-5.5",
543+
runId: "run-prepared-env",
544+
backend: {
545+
env: {
546+
GEMINI_CLI_HOME: "/ignored/static-home",
547+
STATIC_BACKEND_FLAG: "set",
548+
},
549+
},
550+
preparedEnv: {
551+
GEMINI_CLI_HOME: "/tmp/openclaw-gemini-profile-home",
552+
GEMINI_CLI_SYSTEM_SETTINGS_PATH: "/tmp/openclaw-gemini-system-settings.json",
553+
},
554+
}),
555+
);
556+
557+
const input = mockCallArg(supervisorSpawnMock) as { env?: Record<string, string> };
558+
expect(input.env?.STATIC_BACKEND_FLAG).toBe("set");
559+
expect(input.env?.GEMINI_CLI_HOME).toBe("/tmp/openclaw-gemini-profile-home");
560+
expect(input.env?.GEMINI_CLI_SYSTEM_SETTINGS_PATH).toBe(
561+
"/tmp/openclaw-gemini-system-settings.json",
562+
);
563+
});
564+
535565
it("passes OpenClaw skills to Claude as a session plugin", async () => {
536566
const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-cli-skills-"));
537567
const skillDir = path.join(workspaceDir, "skills", "weather");

src/agents/cli-runner/execute.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,12 +676,16 @@ export async function executePreparedCliRun(
676676
}
677677
delete next[key];
678678
}
679-
if (backend.env && Object.keys(backend.env).length > 0) {
679+
const backendEnv = {
680+
...(backend.env ?? {}),
681+
...(context.preparedBackend.env ?? {}),
682+
};
683+
if (Object.keys(backendEnv).length > 0) {
680684
Object.assign(
681685
next,
682686
sanitizeHostExecEnv({
683687
baseEnv: {},
684-
overrides: backend.env,
688+
overrides: backendEnv,
685689
blockPathOverrides: true,
686690
}),
687691
);

0 commit comments

Comments
 (0)