8c94e9005f
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Affan Ali <93028901+affanali2k3@users.noreply.github.com> Co-authored-by: affanali2k3 <affanalikhanxx@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Ben Guthrie <benjee.012@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
78 lines
3.8 KiB
TypeScript
78 lines
3.8 KiB
TypeScript
import { Config, ConfigProvider, Context, Effect, Layer, Option } from "effect"
|
|
import { ConfigService } from "@/effect/config-service"
|
|
|
|
const bool = (name: string) => Config.boolean(name).pipe(Config.withDefault(false))
|
|
const positiveInteger = (name: string) =>
|
|
Config.number(name).pipe(
|
|
Config.map((value) => (Number.isInteger(value) && value > 0 ? value : undefined)),
|
|
Config.orElse(() => Config.succeed(undefined)),
|
|
)
|
|
const experimental = bool("OPENCODE_EXPERIMENTAL")
|
|
const enabledByExperimental = (name: string) =>
|
|
Config.all({ experimental, enabled: Config.boolean(name).pipe(Config.option) }).pipe(
|
|
Config.map((flags) => Option.getOrElse(flags.enabled, () => flags.experimental)),
|
|
)
|
|
|
|
export class Service extends ConfigService.Service<Service>()("@opencode/RuntimeFlags", {
|
|
autoShare: bool("OPENCODE_AUTO_SHARE"),
|
|
pure: bool("OPENCODE_PURE"),
|
|
disableDefaultPlugins: bool("OPENCODE_DISABLE_DEFAULT_PLUGINS"),
|
|
disableEmbeddedWebUi: bool("OPENCODE_DISABLE_EMBEDDED_WEB_UI"),
|
|
disableExternalSkills: bool("OPENCODE_DISABLE_EXTERNAL_SKILLS"),
|
|
disableLspDownload: bool("OPENCODE_DISABLE_LSP_DOWNLOAD"),
|
|
disableClaudeCodePrompt: Config.all({
|
|
broad: bool("OPENCODE_DISABLE_CLAUDE_CODE"),
|
|
direct: bool("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT"),
|
|
}).pipe(Config.map((flags) => flags.broad || flags.direct)),
|
|
disableClaudeCodeSkills: Config.all({
|
|
broad: bool("OPENCODE_DISABLE_CLAUDE_CODE"),
|
|
direct: bool("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS"),
|
|
}).pipe(Config.map((flags) => flags.broad || flags.direct)),
|
|
enableExa: Config.all({
|
|
experimental,
|
|
enabled: bool("OPENCODE_ENABLE_EXA"),
|
|
legacy: bool("OPENCODE_EXPERIMENTAL_EXA"),
|
|
}).pipe(Config.map((flags) => flags.experimental || flags.enabled || flags.legacy)),
|
|
enableParallel: Config.all({
|
|
enabled: bool("OPENCODE_ENABLE_PARALLEL"),
|
|
legacy: bool("OPENCODE_EXPERIMENTAL_PARALLEL"),
|
|
}).pipe(Config.map((flags) => flags.enabled || flags.legacy)),
|
|
enableExperimentalModels: bool("OPENCODE_ENABLE_EXPERIMENTAL_MODELS"),
|
|
enableQuestionTool: bool("OPENCODE_ENABLE_QUESTION_TOOL"),
|
|
experimentalReferences: enabledByExperimental("OPENCODE_EXPERIMENTAL_REFERENCES"),
|
|
experimentalBackgroundSubagents: enabledByExperimental("OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS"),
|
|
experimentalLspTy: bool("OPENCODE_EXPERIMENTAL_LSP_TY"),
|
|
experimentalLspTool: enabledByExperimental("OPENCODE_EXPERIMENTAL_LSP_TOOL"),
|
|
experimentalOxfmt: enabledByExperimental("OPENCODE_EXPERIMENTAL_OXFMT"),
|
|
experimentalPlanMode: enabledByExperimental("OPENCODE_EXPERIMENTAL_PLAN_MODE"),
|
|
experimentalEventSystem: enabledByExperimental("OPENCODE_EXPERIMENTAL_EVENT_SYSTEM"),
|
|
experimentalWorkspaces: enabledByExperimental("OPENCODE_EXPERIMENTAL_WORKSPACES"),
|
|
experimentalIconDiscovery: enabledByExperimental("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY"),
|
|
outputTokenMax: positiveInteger("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"),
|
|
bashDefaultTimeoutMs: positiveInteger("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"),
|
|
experimentalNativeLlm: bool("OPENCODE_EXPERIMENTAL_NATIVE_LLM"),
|
|
experimentalWebSockets: bool("OPENCODE_EXPERIMENTAL_WEBSOCKETS"),
|
|
client: Config.string("OPENCODE_CLIENT").pipe(Config.withDefault("cli")),
|
|
}) {}
|
|
|
|
export type Info = Context.Service.Shape<typeof Service>
|
|
|
|
const emptyConfigLayer = Service.layer.pipe(
|
|
Layer.provide(ConfigProvider.layer(ConfigProvider.fromUnknown({}))),
|
|
Layer.orDie,
|
|
)
|
|
|
|
export const layer = (overrides: Partial<Info> = {}) =>
|
|
Layer.effect(
|
|
Service,
|
|
Effect.gen(function* () {
|
|
const flags = yield* Service
|
|
return Service.of({ ...flags, ...overrides })
|
|
}),
|
|
).pipe(Layer.provide(emptyConfigLayer))
|
|
|
|
export const node = LayerNode.make({ service: Service, layer: Service.layer.pipe(Layer.orDie), deps: [] })
|
|
|
|
export * as RuntimeFlags from "./runtime-flags"
|
|
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
|