flag.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { Config } from "effect"
  2. function truthy(key: string) {
  3. const value = process.env[key]?.toLowerCase()
  4. return value === "true" || value === "1"
  5. }
  6. const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
  7. const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
  8. function enabledByExperimental(key: string) {
  9. return process.env[key] === undefined ? OPENCODE_EXPERIMENTAL : truthy(key)
  10. }
  11. export const Flag = {
  12. OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"],
  13. OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"],
  14. OPENCODE_AUTO_HEAP_SNAPSHOT: truthy("OPENCODE_AUTO_HEAP_SNAPSHOT"),
  15. OPENCODE_GIT_BASH_PATH: process.env["OPENCODE_GIT_BASH_PATH"],
  16. OPENCODE_CONFIG: process.env["OPENCODE_CONFIG"],
  17. OPENCODE_CONFIG_CONTENT: process.env["OPENCODE_CONFIG_CONTENT"],
  18. OPENCODE_DISABLE_AUTOUPDATE: truthy("OPENCODE_DISABLE_AUTOUPDATE"),
  19. OPENCODE_ALWAYS_NOTIFY_UPDATE: truthy("OPENCODE_ALWAYS_NOTIFY_UPDATE"),
  20. OPENCODE_DISABLE_PRUNE: truthy("OPENCODE_DISABLE_PRUNE"),
  21. OPENCODE_DISABLE_TERMINAL_TITLE: truthy("OPENCODE_DISABLE_TERMINAL_TITLE"),
  22. OPENCODE_SHOW_TTFD: truthy("OPENCODE_SHOW_TTFD"),
  23. OPENCODE_DISABLE_AUTOCOMPACT: truthy("OPENCODE_DISABLE_AUTOCOMPACT"),
  24. OPENCODE_DISABLE_MODELS_FETCH: truthy("OPENCODE_DISABLE_MODELS_FETCH"),
  25. OPENCODE_DISABLE_MOUSE: truthy("OPENCODE_DISABLE_MOUSE"),
  26. OPENCODE_FAKE_VCS: process.env["OPENCODE_FAKE_VCS"],
  27. OPENCODE_SERVER_PASSWORD: process.env["OPENCODE_SERVER_PASSWORD"],
  28. OPENCODE_SERVER_USERNAME: process.env["OPENCODE_SERVER_USERNAME"],
  29. // Experimental
  30. OPENCODE_EXPERIMENTAL_FILEWATCHER: Config.boolean("OPENCODE_EXPERIMENTAL_FILEWATCHER").pipe(
  31. Config.withDefault(false),
  32. ),
  33. OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: Config.boolean("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe(
  34. Config.withDefault(false),
  35. ),
  36. OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT:
  37. copy === undefined ? process.platform === "win32" : truthy("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"),
  38. OPENCODE_MODELS_URL: process.env["OPENCODE_MODELS_URL"],
  39. OPENCODE_MODELS_PATH: process.env["OPENCODE_MODELS_PATH"],
  40. OPENCODE_DB: process.env["OPENCODE_DB"],
  41. OPENCODE_WORKSPACE_ID: process.env["OPENCODE_WORKSPACE_ID"],
  42. OPENCODE_EXPERIMENTAL_WORKSPACES: enabledByExperimental("OPENCODE_EXPERIMENTAL_WORKSPACES"),
  43. OPENCODE_EXPERIMENTAL_SESSION_SWITCHER: enabledByExperimental("OPENCODE_EXPERIMENTAL_SESSION_SWITCHER"),
  44. // Evaluated at access time (not module load) because tests, the CLI, and
  45. // external tooling set these env vars at runtime.
  46. get OPENCODE_DISABLE_PROJECT_CONFIG() {
  47. return truthy("OPENCODE_DISABLE_PROJECT_CONFIG")
  48. },
  49. get OPENCODE_TUI_CONFIG() {
  50. return process.env["OPENCODE_TUI_CONFIG"]
  51. },
  52. get OPENCODE_CONFIG_DIR() {
  53. return process.env["OPENCODE_CONFIG_DIR"]
  54. },
  55. get OPENCODE_PURE() {
  56. return truthy("OPENCODE_PURE")
  57. },
  58. get OPENCODE_PERMISSION() {
  59. return process.env["OPENCODE_PERMISSION"]
  60. },
  61. get OPENCODE_PLUGIN_META_FILE() {
  62. return process.env["OPENCODE_PLUGIN_META_FILE"]
  63. },
  64. get OPENCODE_CLIENT() {
  65. return process.env["OPENCODE_CLIENT"] ?? "cli"
  66. },
  67. }