flag.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. function truthyValue(value: string | undefined) {
  2. const v = value?.toLowerCase()
  3. return v === "true" || v === "1"
  4. }
  5. function truthy(key: string) {
  6. return truthyValue(process.env[key])
  7. }
  8. export namespace Flag {
  9. export const OPENCODE_AUTO_SHARE = truthy("OPENCODE_AUTO_SHARE")
  10. export const OPENCODE_GIT_BASH_PATH = process.env["OPENCODE_GIT_BASH_PATH"]
  11. export const OPENCODE_CONFIG = process.env["OPENCODE_CONFIG"]
  12. export declare const OPENCODE_CONFIG_DIR: string | undefined
  13. export const OPENCODE_CONFIG_CONTENT = process.env["OPENCODE_CONFIG_CONTENT"]
  14. export const OPENCODE_DISABLE_AUTOUPDATE = truthy("OPENCODE_DISABLE_AUTOUPDATE")
  15. export const OPENCODE_DISABLE_PRUNE = truthy("OPENCODE_DISABLE_PRUNE")
  16. export const OPENCODE_DISABLE_TERMINAL_TITLE = truthy("OPENCODE_DISABLE_TERMINAL_TITLE")
  17. export const OPENCODE_PERMISSION = process.env["OPENCODE_PERMISSION"]
  18. export const OPENCODE_DISABLE_DEFAULT_PLUGINS = truthy("OPENCODE_DISABLE_DEFAULT_PLUGINS")
  19. export const OPENCODE_DISABLE_LSP_DOWNLOAD = truthy("OPENCODE_DISABLE_LSP_DOWNLOAD")
  20. export const OPENCODE_ENABLE_EXPERIMENTAL_MODELS = truthy("OPENCODE_ENABLE_EXPERIMENTAL_MODELS")
  21. export const OPENCODE_DISABLE_AUTOCOMPACT = truthy("OPENCODE_DISABLE_AUTOCOMPACT")
  22. export const OPENCODE_DISABLE_MODELS_FETCH = truthy("OPENCODE_DISABLE_MODELS_FETCH")
  23. export const OPENCODE_DISABLE_CLAUDE_CODE = truthy("OPENCODE_DISABLE_CLAUDE_CODE")
  24. export const OPENCODE_DISABLE_CLAUDE_CODE_PROMPT =
  25. OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT")
  26. export const OPENCODE_DISABLE_CLAUDE_CODE_SKILLS =
  27. OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS")
  28. export const OPENCODE_DISABLE_EXTERNAL_SKILLS =
  29. OPENCODE_DISABLE_CLAUDE_CODE_SKILLS || truthy("OPENCODE_DISABLE_EXTERNAL_SKILLS")
  30. export declare const OPENCODE_DISABLE_PROJECT_CONFIG: boolean
  31. export const OPENCODE_FAKE_VCS = process.env["OPENCODE_FAKE_VCS"]
  32. export declare const OPENCODE_CLIENT: string
  33. export const OPENCODE_SERVER_PASSWORD = process.env["OPENCODE_SERVER_PASSWORD"]
  34. export const OPENCODE_SERVER_USERNAME = process.env["OPENCODE_SERVER_USERNAME"]
  35. // Experimental
  36. export const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
  37. export const OPENCODE_EXPERIMENTAL_FILEWATCHER = truthy("OPENCODE_EXPERIMENTAL_FILEWATCHER")
  38. export const OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = truthy("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER")
  39. export const OPENCODE_EXPERIMENTAL_ICON_DISCOVERY =
  40. OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY")
  41. const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
  42. export const OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT =
  43. copy === undefined ? process.platform === "win32" : truthyValue(copy)
  44. export const OPENCODE_ENABLE_EXA =
  45. truthy("OPENCODE_ENABLE_EXA") || OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_EXA")
  46. export const OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS = number("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS")
  47. export const OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX = number("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX")
  48. export const OPENCODE_EXPERIMENTAL_OXFMT = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_OXFMT")
  49. export const OPENCODE_EXPERIMENTAL_LSP_TY = truthy("OPENCODE_EXPERIMENTAL_LSP_TY")
  50. export const OPENCODE_EXPERIMENTAL_LSP_TOOL = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_LSP_TOOL")
  51. export const OPENCODE_DISABLE_FILETIME_CHECK = truthy("OPENCODE_DISABLE_FILETIME_CHECK")
  52. export const OPENCODE_EXPERIMENTAL_PLAN_MODE = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE")
  53. export const OPENCODE_EXPERIMENTAL_MARKDOWN = truthy("OPENCODE_EXPERIMENTAL_MARKDOWN")
  54. export const OPENCODE_MODELS_URL = process.env["OPENCODE_MODELS_URL"]
  55. export const OPENCODE_MODELS_PATH = process.env["OPENCODE_MODELS_PATH"]
  56. function number(key: string) {
  57. const value = process.env[key]
  58. if (!value) return undefined
  59. const parsed = Number(value)
  60. return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined
  61. }
  62. }
  63. // Dynamic getter for OPENCODE_DISABLE_PROJECT_CONFIG
  64. // This must be evaluated at access time, not module load time,
  65. // because external tooling may set this env var at runtime
  66. Object.defineProperty(Flag, "OPENCODE_DISABLE_PROJECT_CONFIG", {
  67. get() {
  68. return truthy("OPENCODE_DISABLE_PROJECT_CONFIG")
  69. },
  70. enumerable: true,
  71. configurable: false,
  72. })
  73. // Dynamic getter for OPENCODE_CONFIG_DIR
  74. // This must be evaluated at access time, not module load time,
  75. // because external tooling may set this env var at runtime
  76. Object.defineProperty(Flag, "OPENCODE_CONFIG_DIR", {
  77. get() {
  78. return process.env["OPENCODE_CONFIG_DIR"]
  79. },
  80. enumerable: true,
  81. configurable: false,
  82. })
  83. // Dynamic getter for OPENCODE_CLIENT
  84. // This must be evaluated at access time, not module load time,
  85. // because some commands override the client at runtime
  86. Object.defineProperty(Flag, "OPENCODE_CLIENT", {
  87. get() {
  88. return process.env["OPENCODE_CLIENT"] ?? "cli"
  89. },
  90. enumerable: true,
  91. configurable: false,
  92. })