summaryrefslogtreecommitdiffhomepage
path: root/packages/core/src/flag
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/flag')
-rw-r--r--packages/core/src/flag/flag.ts107
1 files changed, 107 insertions, 0 deletions
diff --git a/packages/core/src/flag/flag.ts b/packages/core/src/flag/flag.ts
new file mode 100644
index 000000000..72c8931f5
--- /dev/null
+++ b/packages/core/src/flag/flag.ts
@@ -0,0 +1,107 @@
+import { Config } from "effect"
+
+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"
+}
+
+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: OPENCODE_DISABLE_CLAUDE_CODE_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"],
+ OPENCODE_EXPERIMENTAL_HTTPAPI: truthy("OPENCODE_EXPERIMENTAL_HTTPAPI"),
+ OPENCODE_EXPERIMENTAL_WORKSPACES: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WORKSPACES"),
+
+ // 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"
+ },
+}