Skip to content

Commit 4c6de47

Browse files
committed
fix(env): proxy directly to process.env instead of snapshotting
1 parent 0e86466 commit 4c6de47

3 files changed

Lines changed: 19 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
@@ -256,8 +256,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {
256256

257257
const awsAccessKeyId = env["AWS_ACCESS_KEY_ID"]
258258

259-
// TODO: Using process.env directly because Env.set only updates a process.env shallow copy,
260-
// until the scope of the Env API is clarified (test only or runtime?)
261259
const awsBearerToken = iife(() => {
262260
const envToken = process.env.AWS_BEARER_TOKEN_BEDROCK
263261
if (envToken) return envToken
@@ -474,8 +472,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {
474472
}),
475473
"sap-ai-core": Effect.fnUntraced(function* () {
476474
const auth = yield* dep.auth("sap-ai-core")
477-
// TODO: Using process.env directly because Env.set only updates a shallow copy (not process.env),
478-
// until the scope of the Env API is clarified (test only or runtime?)
479475
const envServiceKey = iife(() => {
480476
const envAICoreServiceKey = process.env.AICORE_SERVICE_KEY
481477
if (envAICoreServiceKey) return envAICoreServiceKey

packages/opencode/test/preload.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ 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"]
6466
delete process.env["OPENROUTER_API_KEY"]
6567
delete process.env["GROQ_API_KEY"]
6668
delete process.env["MISTRAL_API_KEY"]
@@ -71,6 +73,9 @@ delete process.env["DEEPSEEK_API_KEY"]
7173
delete process.env["FIREWORKS_API_KEY"]
7274
delete process.env["CEREBRAS_API_KEY"]
7375
delete process.env["SAMBANOVA_API_KEY"]
76+
delete process.env["AICORE_SERVICE_KEY"]
77+
delete process.env["AICORE_DEPLOYMENT_ID"]
78+
delete process.env["AICORE_RESOURCE_GROUP"]
7479
delete process.env["OPENCODE_SERVER_PASSWORD"]
7580
delete process.env["OPENCODE_SERVER_USERNAME"]
7681

0 commit comments

Comments
 (0)