diff --git a/apps/server/src/provider/Drivers/CodexDriver.test.ts b/apps/server/src/provider/Drivers/CodexDriver.test.ts index 38de3c92a9570..c047336ef5dfc 100644 --- a/apps/server/src/provider/Drivers/CodexDriver.test.ts +++ b/apps/server/src/provider/Drivers/CodexDriver.test.ts @@ -478,6 +478,24 @@ it.layer(layerTest)("CodexDriver", (it) => { }).pipe(Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, noSpawn), Effect.scoped), ); + it.effect("uses each instance's environment CODEX_HOME for continuation", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const tempDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-codex-driver-" }); + for (const [index, account] of ["work", "personal", "work "].entries()) { + const codexHome = NodePath.join(tempDir, account); + const instance = yield* CodexDriver.create({ + instanceId: ProviderInstanceId.make(`account-${index}`), + displayName: account, + enabled: false, + environment: [{ name: "CODEX_HOME", value: codexHome, sensitive: false }], + config: CodexDriver.defaultConfig(), + }); + expect(instance.continuationIdentity.continuationKey).toBe(`codex:home:${codexHome}`); + } + }).pipe(Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, noSpawn), Effect.scoped), + ); + for (const fixture of [ { name: "leaves mise npm-backend installations manual-only", diff --git a/apps/server/src/provider/Drivers/CodexDriver.ts b/apps/server/src/provider/Drivers/CodexDriver.ts index 14cb4b6d25afb..61f26c3f8cc7d 100644 --- a/apps/server/src/provider/Drivers/CodexDriver.ts +++ b/apps/server/src/provider/Drivers/CodexDriver.ts @@ -154,7 +154,12 @@ export const CodexDriver: ProviderDriver< environment, yield* HostProcess.Environment, ); - const homeLayout = yield* resolveCodexHomeLayout(config); + const environmentHome = processEnv.CODEX_HOME; + const homeLayout = yield* resolveCodexHomeLayout( + !config.homePath.trim() && !config.shadowHomePath.trim() && environmentHome?.trim() + ? { ...config, homePath: environmentHome } + : config, + ); const continuationIdentity = codexContinuationIdentity(homeLayout); const stampIdentity = withInstanceIdentity({ instanceId,