packages feed

claude-gate-1.0.0: src/Claude/Gate/GateConfig.hs

-- | Environment-tunable gate configuration: the skip flags and the integer
-- knobs (round caps, timeouts) each phase reads.
module Claude.Gate.GateConfig
  ( phaseDisabled
  , envInt
  , envStr
  ) where

import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Data.Text qualified as Text
import System.Environment (lookupEnv)
import Text.Read (readMaybe)

-- | A @CLAUDE_SKIP_*@ flag is set when it equals exactly "1".
phaseDisabled :: String -> IO Bool
phaseDisabled name = (== Just "1") <$> lookupEnv name

-- | Read an integer environment knob, falling back to the default when it is
-- unset or not a number.
envInt :: String -> Int -> IO Int
envInt name fallback = do
  value <- lookupEnv name
  pure (fromMaybe fallback (value >>= readMaybe))

-- | Read a string environment knob (e.g. a model override), with a default.
envStr :: String -> Text -> IO Text
envStr name fallback = maybe fallback Text.pack <$> lookupEnv name