Skip to content

Commit 541b4d9

Browse files
committed
fix: allow experimental flags to override umbrella
1 parent d595e47 commit 541b4d9

3 files changed

Lines changed: 22 additions & 3 deletions

File tree

packages/core/src/flag/flag.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ function truthy(key: string) {
77

88
const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
99
const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
10+
const workspaces = process.env["OPENCODE_EXPERIMENTAL_WORKSPACES"]
1011

1112
export const Flag = {
1213
OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"],
@@ -42,7 +43,8 @@ export const Flag = {
4243
OPENCODE_DB: process.env["OPENCODE_DB"],
4344

4445
OPENCODE_WORKSPACE_ID: process.env["OPENCODE_WORKSPACE_ID"],
45-
OPENCODE_EXPERIMENTAL_WORKSPACES: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WORKSPACES"),
46+
OPENCODE_EXPERIMENTAL_WORKSPACES:
47+
workspaces === undefined ? OPENCODE_EXPERIMENTAL : truthy("OPENCODE_EXPERIMENTAL_WORKSPACES"),
4648

4749
// Evaluated at access time (not module load) because tests, the CLI, and
4850
// external tooling set these env vars at runtime.

packages/opencode/src/effect/runtime-flags.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Config, ConfigProvider, Context, Effect, Layer } from "effect"
1+
import { Config, ConfigProvider, Context, Effect, Layer, Option } from "effect"
22
import { ConfigService } from "@/effect/config-service"
33

44
const bool = (name: string) => Config.boolean(name).pipe(Config.withDefault(false))
@@ -9,7 +9,9 @@ const positiveInteger = (name: string) =>
99
)
1010
const experimental = bool("OPENCODE_EXPERIMENTAL")
1111
const enabledByExperimental = (name: string) =>
12-
Config.all({ experimental, enabled: bool(name) }).pipe(Config.map((flags) => flags.experimental || flags.enabled))
12+
Config.all({ experimental, enabled: Config.boolean(name).pipe(Config.option) }).pipe(
13+
Config.map((flags) => Option.getOrElse(flags.enabled, () => flags.experimental)),
14+
)
1315

1416
export class Service extends ConfigService.Service<Service>()("@opencode/RuntimeFlags", {
1517
autoShare: bool("OPENCODE_AUTO_SHARE"),

packages/opencode/test/effect/runtime-flags.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,21 @@ describe("RuntimeFlags", () => {
213213
}),
214214
)
215215

216+
it.effect("specific experimental flags override OPENCODE_EXPERIMENTAL", () =>
217+
Effect.gen(function* () {
218+
const flags = yield* readFlags.pipe(
219+
Effect.provide(
220+
fromConfig({
221+
OPENCODE_EXPERIMENTAL: "true",
222+
OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: "false",
223+
}),
224+
),
225+
)
226+
227+
expect(flags.experimentalIconDiscovery).toBe(false)
228+
}),
229+
)
230+
216231
it.effect("experimentalOxfmt defaults to false", () =>
217232
Effect.gen(function* () {
218233
const flags = yield* readFlags.pipe(Effect.provide(fromConfig({})))

0 commit comments

Comments
 (0)