Skip to content

Commit 290d33d

Browse files
committed
fix(env): proxy directly to process.env instead of snapshotting
1 parent 9b6db08 commit 290d33d

3 files changed

Lines changed: 28 additions & 21 deletions

File tree

packages/opencode/src/env/index.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Context, Effect, Layer } from "effect"
2-
import { InstanceState } from "@/effect"
32

43
type State = Record<string, string | undefined>
54

@@ -12,23 +11,21 @@ export interface Interface {
1211

1312
export class Service extends Context.Service<Service, Interface>()("@opencode/Env") {}
1413

15-
export const layer = Layer.effect(
14+
export const layer = Layer.succeed(
1615
Service,
17-
Effect.gen(function* () {
18-
const state = yield* InstanceState.make<State>(Effect.fn("Env.state")(() => Effect.succeed({ ...process.env })))
19-
20-
const get = Effect.fn("Env.get")((key: string) => InstanceState.use(state, (env) => env[key]))
21-
const all = Effect.fn("Env.all")(() => InstanceState.get(state))
22-
const set = Effect.fn("Env.set")(function* (key: string, value: string) {
23-
const env = yield* InstanceState.get(state)
24-
env[key] = value
25-
})
26-
const remove = Effect.fn("Env.remove")(function* (key: string) {
27-
const env = yield* InstanceState.get(state)
28-
delete env[key]
29-
})
30-
31-
return Service.of({ get, all, set, remove })
16+
Service.of({
17+
get: Effect.fn("Env.get")((key: string) => Effect.sync(() => process.env[key])),
18+
all: Effect.fn("Env.all")(() => Effect.sync(() => ({ ...process.env }) as State)),
19+
set: Effect.fn("Env.set")((key: string, value: string) =>
20+
Effect.sync(() => {
21+
process.env[key] = value
22+
}),
23+
),
24+
remove: Effect.fn("Env.remove")((key: string) =>
25+
Effect.sync(() => {
26+
delete process.env[key]
27+
}),
28+
),
3229
}),
3330
)
3431

packages/opencode/src/provider/provider.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {
258258

259259
const awsAccessKeyId = env["AWS_ACCESS_KEY_ID"]
260260

261-
// TODO: Using process.env directly because Env.set only updates a process.env shallow copy,
262-
// until the scope of the Env API is clarified (test only or runtime?)
263261
const awsBearerToken = iife(() => {
264262
const envToken = process.env.AWS_BEARER_TOKEN_BEDROCK
265263
if (envToken) return envToken
@@ -497,8 +495,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {
497495
}),
498496
"sap-ai-core": Effect.fnUntraced(function* () {
499497
const auth = yield* dep.auth("sap-ai-core")
500-
// TODO: Using process.env directly because Env.set only updates a shallow copy (not process.env),
501-
// until the scope of the Env API is clarified (test only or runtime?)
502498
const envServiceKey = iife(() => {
503499
const envAICoreServiceKey = process.env.AICORE_SERVICE_KEY
504500
if (envAICoreServiceKey) return envAICoreServiceKey

packages/opencode/test/preload.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ delete process.env["AWS_ACCESS_KEY_ID"]
6161
delete process.env["AWS_PROFILE"]
6262
delete process.env["AWS_REGION"]
6363
delete process.env["AWS_BEARER_TOKEN_BEDROCK"]
64+
delete process.env["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"]
65+
delete process.env["AWS_CONTAINER_CREDENTIALS_FULL_URI"]
66+
delete process.env["AWS_WEB_IDENTITY_TOKEN_FILE"]
67+
delete process.env["AWS_ROLE_ARN"]
6468
delete process.env["OPENROUTER_API_KEY"]
6569
delete process.env["LLM_GATEWAY_API_KEY"]
6670
delete process.env["GROQ_API_KEY"]
@@ -72,6 +76,16 @@ delete process.env["DEEPSEEK_API_KEY"]
7276
delete process.env["FIREWORKS_API_KEY"]
7377
delete process.env["CEREBRAS_API_KEY"]
7478
delete process.env["SAMBANOVA_API_KEY"]
79+
delete process.env["AICORE_SERVICE_KEY"]
80+
delete process.env["AICORE_DEPLOYMENT_ID"]
81+
delete process.env["AICORE_RESOURCE_GROUP"]
82+
delete process.env["GOOGLE_APPLICATION_CREDENTIALS"]
83+
delete process.env["CLOUDFLARE_ACCOUNT_ID"]
84+
delete process.env["CLOUDFLARE_GATEWAY_ID"]
85+
delete process.env["CLOUDFLARE_API_TOKEN"]
86+
delete process.env["SINGLE_ENV_KEY"]
87+
delete process.env["MULTI_ENV_KEY_1"]
88+
delete process.env["FALLBACK_KEY"]
7589
delete process.env["OPENCODE_SERVER_PASSWORD"]
7690
delete process.env["OPENCODE_SERVER_USERNAME"]
7791

0 commit comments

Comments
 (0)