| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- import { Config } from "effect"
- import { InstallationChannel } from "../installation/version"
- function truthy(key: string) {
- const value = process.env[key]?.toLowerCase()
- return value === "true" || value === "1"
- }
- function falsy(key: string) {
- const value = process.env[key]?.toLowerCase()
- return value === "false" || value === "0"
- }
- // Channels that default to the new effect-httpapi server backend. The legacy
- // hono backend remains the default for stable (`prod`/`latest`) installs.
- const HTTPAPI_DEFAULT_ON_CHANNELS = new Set(["dev", "beta", "local"])
- function number(key: string) {
- const value = process.env[key]
- if (!value) return undefined
- const parsed = Number(value)
- return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined
- }
- const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
- const OPENCODE_DISABLE_CLAUDE_CODE = truthy("OPENCODE_DISABLE_CLAUDE_CODE")
- const OPENCODE_DISABLE_CLAUDE_CODE_SKILLS =
- OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS")
- const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
- export const Flag = {
- OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"],
- OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"],
- OPENCODE_AUTO_SHARE: truthy("OPENCODE_AUTO_SHARE"),
- OPENCODE_AUTO_HEAP_SNAPSHOT: truthy("OPENCODE_AUTO_HEAP_SNAPSHOT"),
- OPENCODE_GIT_BASH_PATH: process.env["OPENCODE_GIT_BASH_PATH"],
- OPENCODE_CONFIG: process.env["OPENCODE_CONFIG"],
- OPENCODE_CONFIG_CONTENT: process.env["OPENCODE_CONFIG_CONTENT"],
- OPENCODE_DISABLE_AUTOUPDATE: truthy("OPENCODE_DISABLE_AUTOUPDATE"),
- OPENCODE_ALWAYS_NOTIFY_UPDATE: truthy("OPENCODE_ALWAYS_NOTIFY_UPDATE"),
- OPENCODE_DISABLE_PRUNE: truthy("OPENCODE_DISABLE_PRUNE"),
- OPENCODE_DISABLE_TERMINAL_TITLE: truthy("OPENCODE_DISABLE_TERMINAL_TITLE"),
- OPENCODE_SHOW_TTFD: truthy("OPENCODE_SHOW_TTFD"),
- OPENCODE_PERMISSION: process.env["OPENCODE_PERMISSION"],
- OPENCODE_DISABLE_DEFAULT_PLUGINS: truthy("OPENCODE_DISABLE_DEFAULT_PLUGINS"),
- OPENCODE_DISABLE_LSP_DOWNLOAD: truthy("OPENCODE_DISABLE_LSP_DOWNLOAD"),
- OPENCODE_ENABLE_EXPERIMENTAL_MODELS: truthy("OPENCODE_ENABLE_EXPERIMENTAL_MODELS"),
- OPENCODE_DISABLE_AUTOCOMPACT: truthy("OPENCODE_DISABLE_AUTOCOMPACT"),
- OPENCODE_DISABLE_MODELS_FETCH: truthy("OPENCODE_DISABLE_MODELS_FETCH"),
- OPENCODE_DISABLE_MOUSE: truthy("OPENCODE_DISABLE_MOUSE"),
- OPENCODE_DISABLE_CLAUDE_CODE,
- OPENCODE_DISABLE_CLAUDE_CODE_PROMPT: OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT"),
- OPENCODE_DISABLE_CLAUDE_CODE_SKILLS,
- OPENCODE_DISABLE_EXTERNAL_SKILLS: truthy("OPENCODE_DISABLE_EXTERNAL_SKILLS"),
- OPENCODE_FAKE_VCS: process.env["OPENCODE_FAKE_VCS"],
- OPENCODE_SERVER_PASSWORD: process.env["OPENCODE_SERVER_PASSWORD"],
- OPENCODE_SERVER_USERNAME: process.env["OPENCODE_SERVER_USERNAME"],
- OPENCODE_ENABLE_QUESTION_TOOL: truthy("OPENCODE_ENABLE_QUESTION_TOOL"),
- // Experimental
- OPENCODE_EXPERIMENTAL,
- OPENCODE_EXPERIMENTAL_FILEWATCHER: Config.boolean("OPENCODE_EXPERIMENTAL_FILEWATCHER").pipe(
- Config.withDefault(false),
- ),
- OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: Config.boolean("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe(
- Config.withDefault(false),
- ),
- OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY"),
- OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT:
- copy === undefined ? process.platform === "win32" : truthy("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"),
- OPENCODE_ENABLE_EXA: truthy("OPENCODE_ENABLE_EXA") || OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_EXA"),
- OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS: number("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"),
- OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: number("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"),
- OPENCODE_EXPERIMENTAL_OXFMT: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_OXFMT"),
- OPENCODE_EXPERIMENTAL_LSP_TY: truthy("OPENCODE_EXPERIMENTAL_LSP_TY"),
- OPENCODE_EXPERIMENTAL_LSP_TOOL: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_LSP_TOOL"),
- OPENCODE_EXPERIMENTAL_PLAN_MODE: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE"),
- OPENCODE_EXPERIMENTAL_MARKDOWN: !falsy("OPENCODE_EXPERIMENTAL_MARKDOWN"),
- OPENCODE_MODELS_URL: process.env["OPENCODE_MODELS_URL"],
- OPENCODE_MODELS_PATH: process.env["OPENCODE_MODELS_PATH"],
- OPENCODE_DISABLE_EMBEDDED_WEB_UI: truthy("OPENCODE_DISABLE_EMBEDDED_WEB_UI"),
- OPENCODE_DB: process.env["OPENCODE_DB"],
- OPENCODE_DISABLE_CHANNEL_DB: truthy("OPENCODE_DISABLE_CHANNEL_DB"),
- OPENCODE_SKIP_MIGRATIONS: truthy("OPENCODE_SKIP_MIGRATIONS"),
- OPENCODE_STRICT_CONFIG_DEPS: truthy("OPENCODE_STRICT_CONFIG_DEPS"),
- OPENCODE_WORKSPACE_ID: process.env["OPENCODE_WORKSPACE_ID"],
- // Defaults to true on dev/beta/local channels so internal users exercise the
- // new effect-httpapi server backend. Stable (`prod`/`latest`) installs stay
- // on the legacy hono backend until the rollout is complete. An explicit env
- // var ("true"/"1" or "false"/"0") always wins, providing an opt-in for
- // stable users and an escape hatch for dev/beta users.
- OPENCODE_EXPERIMENTAL_HTTPAPI:
- truthy("OPENCODE_EXPERIMENTAL_HTTPAPI") ||
- (!falsy("OPENCODE_EXPERIMENTAL_HTTPAPI") && HTTPAPI_DEFAULT_ON_CHANNELS.has(InstallationChannel)),
- OPENCODE_EXPERIMENTAL_WORKSPACES: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WORKSPACES"),
- OPENCODE_EXPERIMENTAL_EVENT_SYSTEM: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_EVENT_SYSTEM"),
- // Evaluated at access time (not module load) because tests, the CLI, and
- // external tooling set these env vars at runtime.
- get OPENCODE_DISABLE_PROJECT_CONFIG() {
- return truthy("OPENCODE_DISABLE_PROJECT_CONFIG")
- },
- get OPENCODE_TUI_CONFIG() {
- return process.env["OPENCODE_TUI_CONFIG"]
- },
- get OPENCODE_CONFIG_DIR() {
- return process.env["OPENCODE_CONFIG_DIR"]
- },
- get OPENCODE_PURE() {
- return truthy("OPENCODE_PURE")
- },
- get OPENCODE_PLUGIN_META_FILE() {
- return process.env["OPENCODE_PLUGIN_META_FILE"]
- },
- get OPENCODE_CLIENT() {
- return process.env["OPENCODE_CLIENT"] ?? "cli"
- },
- }
|