1import type { ProviderInstanceEnvironment } from "@t3tools/contracts";
2import * as HostProcess from "@t3tools/shared/HostProcess";
3import * as Effect from "effect/Effect";
4
5import { expandHomePath } from "./pathExpansion.ts";
6
7export const mergeProviderInstanceEnvironment = Effect.fn(function* (
8 environment: ProviderInstanceEnvironment | undefined,
9 baseEnv: NodeJS.ProcessEnv = process.env,
10) {
11 if (!environment || environment.length === 0) {
12 return baseEnv;
13 }
14
15 const home = yield* HostProcess.HomeDirectory;
16 const next: NodeJS.ProcessEnv = { ...baseEnv };
17 for (const variable of environment) {
18 // Child processes do not apply shell expansion to environment values.
19 next[variable.name] =
20 variable.name === "CODEX_HOME" || variable.name === "CLAUDE_CONFIG_DIR"
21 ? expandHomePath(variable.value, home)
22 : variable.value;
23 }
24 return next;
25});