@@ -92,6 +92,7 @@ function buildPreparedCliRunContext(params: {
|
92 | 92 | sessionEntry?: PreparedCliRunContext["params"]["sessionEntry"]; |
93 | 93 | agentId?: string; |
94 | 94 | backend?: Partial<PreparedCliRunContext["preparedBackend"]["backend"]>; |
| 95 | +preparedEnv?: PreparedCliRunContext["preparedBackend"]["env"]; |
95 | 96 | resolveExecutionArgs?: PreparedCliRunContext["backendResolved"]["resolveExecutionArgs"]; |
96 | 97 | config?: PreparedCliRunContext["params"]["config"]; |
97 | 98 | mcpConfigHash?: string; |
@@ -162,7 +163,7 @@ function buildPreparedCliRunContext(params: {
|
162 | 163 | }, |
163 | 164 | preparedBackend: { |
164 | 165 | backend, |
165 | | -env: {}, |
| 166 | +env: params.preparedEnv ?? {}, |
166 | 167 | ...(params.mcpConfigHash ? { mcpConfigHash: params.mcpConfigHash } : {}), |
167 | 168 | }, |
168 | 169 | reusableCliSession: {}, |
@@ -532,6 +533,35 @@ describe("runCliAgent spawn path", () => {
|
532 | 533 | expect(requireArgAfter(input.argv, "--effort")).toBe("high"); |
533 | 534 | }); |
534 | 535 | |
| 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 | + |
535 | 565 | it("passes OpenClaw skills to Claude as a session plugin", async () => { |
536 | 566 | const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-cli-skills-")); |
537 | 567 | const skillDir = path.join(workspaceDir, "skills", "weather"); |
|