Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bf21d10
fix(env): proxy directly to process.env instead of snapshotting
jerome-benoit Apr 27, 2026
87ab94a
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 27, 2026
6b29710
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 27, 2026
6d9a331
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 27, 2026
f94cdf5
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 27, 2026
6c7c591
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 28, 2026
3deec72
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 28, 2026
69a6dbd
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 28, 2026
dbb73f4
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 28, 2026
d506d6a
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 29, 2026
7186b14
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 30, 2026
e6c72c9
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 30, 2026
0237fa9
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 30, 2026
7702475
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 30, 2026
84b46ff
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit Apr 30, 2026
45b50db
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit May 1, 2026
0ae35e0
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit May 1, 2026
873795f
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit May 2, 2026
414f6fb
Merge branch 'dev' into fix-env-caching-12698
jerome-benoit May 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/opencode/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,6 @@ export const layer = Layer.effect(
{ concurrency: 2 },
)
if (Option.isSome(tokenOpt)) {
process.env["OPENCODE_CONSOLE_TOKEN"] = tokenOpt.value
yield* env.set("OPENCODE_CONSOLE_TOKEN", tokenOpt.value)
}

Expand Down
31 changes: 14 additions & 17 deletions packages/opencode/src/env/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, Effect, Layer } from "effect"
import { InstanceState } from "@/effect/instance-state"

type State = Record<string, string | undefined>

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

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

export const layer = Layer.effect(
export const layer = Layer.succeed(
Service,
Effect.gen(function* () {
const state = yield* InstanceState.make<State>(Effect.fn("Env.state")(() => Effect.succeed({ ...process.env })))

const get = Effect.fn("Env.get")((key: string) => InstanceState.use(state, (env) => env[key]))
const all = Effect.fn("Env.all")(() => InstanceState.get(state))
const set = Effect.fn("Env.set")(function* (key: string, value: string) {
const env = yield* InstanceState.get(state)
env[key] = value
})
const remove = Effect.fn("Env.remove")(function* (key: string) {
const env = yield* InstanceState.get(state)
delete env[key]
})

return Service.of({ get, all, set, remove })
Service.of({
get: Effect.fn("Env.get")((key: string) => Effect.sync(() => process.env[key])),
all: Effect.fn("Env.all")(() => Effect.sync(() => ({ ...process.env }) as State)),
set: Effect.fn("Env.set")((key: string, value: string) =>
Effect.sync(() => {
process.env[key] = value
}),
),
remove: Effect.fn("Env.remove")((key: string) =>
Effect.sync(() => {
delete process.env[key]
}),
),
}),
)

Expand Down
4 changes: 0 additions & 4 deletions packages/opencode/src/provider/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {

const awsAccessKeyId = env["AWS_ACCESS_KEY_ID"]

// TODO: Using process.env directly because Env.set only updates a process.env shallow copy,
// until the scope of the Env API is clarified (test only or runtime?)
const awsBearerToken = iife(() => {
const envToken = process.env.AWS_BEARER_TOKEN_BEDROCK
if (envToken) return envToken
Expand Down Expand Up @@ -515,8 +513,6 @@ function custom(dep: CustomDep): Record<string, CustomLoader> {
}),
"sap-ai-core": Effect.fnUntraced(function* () {
const auth = yield* dep.auth("sap-ai-core")
// TODO: Using process.env directly because Env.set only updates a shallow copy (not process.env),
// until the scope of the Env API is clarified (test only or runtime?)
const envServiceKey = iife(() => {
const envAICoreServiceKey = process.env.AICORE_SERVICE_KEY
if (envAICoreServiceKey) return envAICoreServiceKey
Expand Down
14 changes: 14 additions & 0 deletions packages/opencode/test/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ delete process.env["AWS_ACCESS_KEY_ID"]
delete process.env["AWS_PROFILE"]
delete process.env["AWS_REGION"]
delete process.env["AWS_BEARER_TOKEN_BEDROCK"]
delete process.env["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"]
delete process.env["AWS_CONTAINER_CREDENTIALS_FULL_URI"]
delete process.env["AWS_WEB_IDENTITY_TOKEN_FILE"]
delete process.env["AWS_ROLE_ARN"]
delete process.env["OPENROUTER_API_KEY"]
delete process.env["LLM_GATEWAY_API_KEY"]
delete process.env["GROQ_API_KEY"]
Expand All @@ -72,6 +76,16 @@ delete process.env["DEEPSEEK_API_KEY"]
delete process.env["FIREWORKS_API_KEY"]
delete process.env["CEREBRAS_API_KEY"]
delete process.env["SAMBANOVA_API_KEY"]
delete process.env["AICORE_SERVICE_KEY"]
delete process.env["AICORE_DEPLOYMENT_ID"]
delete process.env["AICORE_RESOURCE_GROUP"]
delete process.env["GOOGLE_APPLICATION_CREDENTIALS"]
delete process.env["CLOUDFLARE_ACCOUNT_ID"]
delete process.env["CLOUDFLARE_GATEWAY_ID"]
delete process.env["CLOUDFLARE_API_TOKEN"]
delete process.env["SINGLE_ENV_KEY"]
delete process.env["MULTI_ENV_KEY_1"]
delete process.env["FALLBACK_KEY"]
delete process.env["OPENCODE_SERVER_PASSWORD"]
delete process.env["OPENCODE_SERVER_USERNAME"]

Expand Down
Loading