#12822 · @jerome-benoit · opened Feb 9, 2026 at 1:35 PM UTC · last updated Mar 21, 2026 at 11:31 AM UTC
fix(env): remove Env namespace, use direct process.env access
Score breakdown
Impact
Clarity
Urgency
Ease Of Review
Guidelines
Readiness
Size
Trust
Traction
Summary
This PR removes the problematic Env namespace, which caused environment variables to become stale and broke dynamic provider detection. It replaces all usages with direct process.env access, fixing a long-standing issue and simplifying the codebase. This is a critical bug fix for dynamic configurations.
Description
Summary
Removes the Env namespace entirely. Fixes #12698.
Why Remove Instead of Conditional Caching?
The suggested fix proposed conditional caching. However, the Env namespace has caused repeated issues:
- #11481:
Env.set()mutates internal copy, notprocess.env— breaks provider SDKs - #12698:
Env.all()returns stale snapshot - 7ebe352af (#11482): workaround bypassing
Envin provider code
The API semantics are misleading: Env.set(key, value) appears to set an env var but external code (AWS SDK, child processes) never sees the change. Removal eliminates this leaky and not thread-safe abstraction.
Changes
| Area | Change |
|------|--------|
| src/env/index.ts | Deleted |
| src/**/*.ts | Env.* → process.env[key] |
| test/preload.ts | Env snapshot/restore per test |
| test/provider/*.test.ts | Remove Env imports |
Linked Issues
#12698 Env.all() caches process.env snapshot, preventing detection of env vars set after initialization
View issueComments
No comments.
Changed Files
.gitignore
+1−0packages/opencode/src/cli/cmd/github.ts
+9−9packages/opencode/src/cli/cmd/tui/context/route.tsx
+2−2packages/opencode/src/cli/cmd/tui/util/clipboard.ts
+2−2packages/opencode/src/cli/cmd/tui/util/editor.ts
+1−1packages/opencode/src/config/config.ts
+0−2packages/opencode/src/env/index.ts
+0−28packages/opencode/src/flag/flag.ts
+14−14packages/opencode/src/ide/index.ts
+3−3packages/opencode/src/lsp/server.ts
+11−11packages/opencode/src/provider/provider.ts
+24−29packages/opencode/src/share/share-next.ts
+1−1packages/opencode/src/util/proxied.ts
+6−1packages/opencode/test/config/config.test.ts
+48−48packages/opencode/test/ide/ide.test.ts
+17−17packages/opencode/test/preload.ts
+54−30packages/opencode/test/provider/amazon-bedrock.test.ts
+18−19packages/opencode/test/provider/gitlab-duo.test.ts
+14−15packages/opencode/test/provider/provider.test.ts
+57−58packages/opencode/test/session/instruction.test.ts
+6−6