import { Config, ConfigProvider, Context, Effect, Layer } from "effect" import { ConfigService } from "@/effect/config-service" export class Service extends ConfigService.Service()("@opencode/RuntimeFlags", { pure: Config.boolean("OPENCODE_PURE").pipe(Config.withDefault(false)), disableDefaultPlugins: Config.boolean("OPENCODE_DISABLE_DEFAULT_PLUGINS").pipe(Config.withDefault(false)), }) {} export type Info = Context.Service.Shape const emptyConfigLayer = Service.defaultLayer.pipe( Layer.provide(ConfigProvider.layer(ConfigProvider.fromUnknown({}))), Layer.orDie, ) export const layer = (overrides: Partial = {}) => Layer.effect( Service, Effect.gen(function* () { const flags = yield* Service return Service.of({ ...flags, ...overrides }) }), ).pipe(Layer.provide(emptyConfigLayer)) export const defaultLayer = Service.defaultLayer.pipe(Layer.orDie) export * as RuntimeFlags from "./runtime-flags"