{-# LANGUAGE OverloadedStrings #-}
module Free.Agent.Cli.Config
( Backend (..),
HermesConfig (..),
KimiConfig (..),
LlmConfig (..),
CommandConfig (..),
GatewayCliConfig (..),
defaultHermesConfig,
defaultKimiConfig,
defaultLlmConfig,
defaultCommandConfig,
parseHermesConfig,
parseKimiConfig,
parseLlmConfig,
parseCommandConfig,
parseGatewayConfig,
commonAgentOptions,
rootOpt,
namesOpt,
promptOpt,
sessionOpt,
modelOpt,
providerOpt,
quiesceOpt,
pitbossOpt,
)
where
import Circuit.Agent (Name)
import Data.Text (Text)
import Data.Text qualified as T
import Options.Applicative
data Backend
= BackendHermes HermesConfig
| BackendKimi KimiConfig
| BackendLlm LlmConfig
| BackendCommand CommandConfig
| BackendGateway GatewayCliConfig
deriving (Int -> Backend -> ShowS
[Backend] -> ShowS
Backend -> String
(Int -> Backend -> ShowS)
-> (Backend -> String) -> ([Backend] -> ShowS) -> Show Backend
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Backend -> ShowS
showsPrec :: Int -> Backend -> ShowS
$cshow :: Backend -> String
show :: Backend -> String
$cshowList :: [Backend] -> ShowS
showList :: [Backend] -> ShowS
Show)
data HermesConfig = HermesConfig
{ HermesConfig -> String
hcRoot :: FilePath,
HermesConfig -> [Name]
hcNames :: [Name],
HermesConfig -> String
hcPromptFile :: FilePath,
HermesConfig -> Maybe String
hcSessionFile :: Maybe FilePath,
HermesConfig -> Maybe Name
hcModel :: Maybe Text,
HermesConfig -> Maybe Name
hcProvider :: Maybe Text,
HermesConfig -> Bool
hcYolo :: Bool,
HermesConfig -> Maybe Int
hcQuiesce :: Maybe Int,
HermesConfig -> Maybe Name
hcPitboss :: Maybe Name
}
deriving (Int -> HermesConfig -> ShowS
[HermesConfig] -> ShowS
HermesConfig -> String
(Int -> HermesConfig -> ShowS)
-> (HermesConfig -> String)
-> ([HermesConfig] -> ShowS)
-> Show HermesConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HermesConfig -> ShowS
showsPrec :: Int -> HermesConfig -> ShowS
$cshow :: HermesConfig -> String
show :: HermesConfig -> String
$cshowList :: [HermesConfig] -> ShowS
showList :: [HermesConfig] -> ShowS
Show)
data KimiConfig = KimiConfig
{ KimiConfig -> String
kcRoot :: FilePath,
KimiConfig -> [Name]
kcNames :: [Name],
KimiConfig -> String
kcPromptFile :: FilePath,
KimiConfig -> Maybe String
kcSessionFile :: Maybe FilePath,
KimiConfig -> Maybe Name
kcModel :: Maybe Text,
KimiConfig -> Maybe Name
kcProvider :: Maybe Text,
KimiConfig -> Maybe Int
kcQuiesce :: Maybe Int,
KimiConfig -> Maybe Name
kcPitboss :: Maybe Name
}
deriving (Int -> KimiConfig -> ShowS
[KimiConfig] -> ShowS
KimiConfig -> String
(Int -> KimiConfig -> ShowS)
-> (KimiConfig -> String)
-> ([KimiConfig] -> ShowS)
-> Show KimiConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> KimiConfig -> ShowS
showsPrec :: Int -> KimiConfig -> ShowS
$cshow :: KimiConfig -> String
show :: KimiConfig -> String
$cshowList :: [KimiConfig] -> ShowS
showList :: [KimiConfig] -> ShowS
Show)
data LlmConfig = LlmConfig
{ LlmConfig -> String
lcRoot :: FilePath,
LlmConfig -> [Name]
lcNames :: [Name],
LlmConfig -> String
lcPromptFile :: FilePath,
LlmConfig -> Maybe Name
lcModel :: Maybe Text,
LlmConfig -> Name
lcBaseUrl :: Text,
LlmConfig -> String
lcKeyEnv :: String,
LlmConfig -> Maybe Int
lcQuiesce :: Maybe Int,
LlmConfig -> Maybe Name
lcPitboss :: Maybe Name
}
deriving (Int -> LlmConfig -> ShowS
[LlmConfig] -> ShowS
LlmConfig -> String
(Int -> LlmConfig -> ShowS)
-> (LlmConfig -> String)
-> ([LlmConfig] -> ShowS)
-> Show LlmConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LlmConfig -> ShowS
showsPrec :: Int -> LlmConfig -> ShowS
$cshow :: LlmConfig -> String
show :: LlmConfig -> String
$cshowList :: [LlmConfig] -> ShowS
showList :: [LlmConfig] -> ShowS
Show)
data CommandConfig = CommandConfig
{ CommandConfig -> String
ccRoot :: FilePath,
CommandConfig -> [Name]
ccNames :: [Name],
CommandConfig -> String
ccCmd :: FilePath,
CommandConfig -> [String]
ccArgs :: [String],
CommandConfig -> Maybe Int
ccQuiesce :: Maybe Int,
CommandConfig -> Maybe Name
ccPitboss :: Maybe Name
}
deriving (Int -> CommandConfig -> ShowS
[CommandConfig] -> ShowS
CommandConfig -> String
(Int -> CommandConfig -> ShowS)
-> (CommandConfig -> String)
-> ([CommandConfig] -> ShowS)
-> Show CommandConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CommandConfig -> ShowS
showsPrec :: Int -> CommandConfig -> ShowS
$cshow :: CommandConfig -> String
show :: CommandConfig -> String
$cshowList :: [CommandConfig] -> ShowS
showList :: [CommandConfig] -> ShowS
Show)
data GatewayCliConfig = GatewayCliConfig
{ GatewayCliConfig -> String
gcwRoot :: FilePath,
GatewayCliConfig -> [Name]
gcwNames :: [Name],
GatewayCliConfig -> String
gcwPromptFile :: FilePath,
GatewayCliConfig -> Name
gcwBaseUrl :: Text,
GatewayCliConfig -> String
gcwKeyEnv :: String,
GatewayCliConfig -> Maybe Int
gcwQuiesce :: Maybe Int,
GatewayCliConfig -> Maybe Name
gcwPitboss :: Maybe Name
}
deriving (Int -> GatewayCliConfig -> ShowS
[GatewayCliConfig] -> ShowS
GatewayCliConfig -> String
(Int -> GatewayCliConfig -> ShowS)
-> (GatewayCliConfig -> String)
-> ([GatewayCliConfig] -> ShowS)
-> Show GatewayCliConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GatewayCliConfig -> ShowS
showsPrec :: Int -> GatewayCliConfig -> ShowS
$cshow :: GatewayCliConfig -> String
show :: GatewayCliConfig -> String
$cshowList :: [GatewayCliConfig] -> ShowS
showList :: [GatewayCliConfig] -> ShowS
Show)
defaultHermesConfig :: HermesConfig
defaultHermesConfig :: HermesConfig
defaultHermesConfig =
HermesConfig
{ hcRoot :: String
hcRoot = String
".",
hcNames :: [Name]
hcNames = [],
hcPromptFile :: String
hcPromptFile = String
"",
hcSessionFile :: Maybe String
hcSessionFile = Maybe String
forall a. Maybe a
Nothing,
hcModel :: Maybe Name
hcModel = Maybe Name
forall a. Maybe a
Nothing,
hcProvider :: Maybe Name
hcProvider = Maybe Name
forall a. Maybe a
Nothing,
hcYolo :: Bool
hcYolo = Bool
True,
hcQuiesce :: Maybe Int
hcQuiesce = Maybe Int
forall a. Maybe a
Nothing,
hcPitboss :: Maybe Name
hcPitboss = Maybe Name
forall a. Maybe a
Nothing
}
defaultKimiConfig :: KimiConfig
defaultKimiConfig :: KimiConfig
defaultKimiConfig =
KimiConfig
{ kcRoot :: String
kcRoot = String
".",
kcNames :: [Name]
kcNames = [],
kcPromptFile :: String
kcPromptFile = String
"",
kcSessionFile :: Maybe String
kcSessionFile = Maybe String
forall a. Maybe a
Nothing,
kcModel :: Maybe Name
kcModel = Maybe Name
forall a. Maybe a
Nothing,
kcProvider :: Maybe Name
kcProvider = Maybe Name
forall a. Maybe a
Nothing,
kcQuiesce :: Maybe Int
kcQuiesce = Maybe Int
forall a. Maybe a
Nothing,
kcPitboss :: Maybe Name
kcPitboss = Maybe Name
forall a. Maybe a
Nothing
}
defaultLlmConfig :: LlmConfig
defaultLlmConfig :: LlmConfig
defaultLlmConfig =
LlmConfig
{ lcRoot :: String
lcRoot = String
".",
lcNames :: [Name]
lcNames = [],
lcPromptFile :: String
lcPromptFile = String
"",
lcModel :: Maybe Name
lcModel = Maybe Name
forall a. Maybe a
Nothing,
lcBaseUrl :: Name
lcBaseUrl = Name
"https://api.deepseek.com/v1",
lcKeyEnv :: String
lcKeyEnv = String
"DEEPSEEK_API_KEY",
lcQuiesce :: Maybe Int
lcQuiesce = Maybe Int
forall a. Maybe a
Nothing,
lcPitboss :: Maybe Name
lcPitboss = Maybe Name
forall a. Maybe a
Nothing
}
defaultCommandConfig :: CommandConfig
defaultCommandConfig :: CommandConfig
defaultCommandConfig =
CommandConfig
{ ccRoot :: String
ccRoot = String
".",
ccNames :: [Name]
ccNames = [],
ccCmd :: String
ccCmd = String
"",
ccArgs :: [String]
ccArgs = [],
ccQuiesce :: Maybe Int
ccQuiesce = Maybe Int
forall a. Maybe a
Nothing,
ccPitboss :: Maybe Name
ccPitboss = Maybe Name
forall a. Maybe a
Nothing
}
rootOpt :: Parser FilePath
rootOpt :: Parser String
rootOpt =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"root"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'r'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ROOT"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasValue f => a -> Mod f a
value String
"."
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Mod OptionFields String
forall a (f :: * -> *). Show a => Mod f a
showDefault
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Bus root directory containing log.jsonl"
)
namesOpt :: Parser [Name]
namesOpt :: Parser [Name]
namesOpt =
Parser Name -> Parser [Name]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some
( ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"name"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'n'
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"NAME"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"Subscriber name (repeatable)"
)
)
promptOpt :: Parser FilePath
promptOpt :: Parser String
promptOpt =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"prompt"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'p'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PROMPT.md"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"System prompt markdown file"
)
sessionOpt :: Parser (Maybe FilePath)
sessionOpt :: Parser (Maybe String)
sessionOpt =
Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser String -> Parser (Maybe String))
-> Parser String -> Parser (Maybe String)
forall a b. (a -> b) -> a -> b
$
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"session"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
's'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILE"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Session file (default: ROOT/.sessions/<name>.sid)"
)
modelOpt :: Parser (Maybe Text)
modelOpt :: Parser (Maybe Name)
modelOpt =
Parser Name -> Parser (Maybe Name)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Name -> Parser (Maybe Name))
-> Parser Name -> Parser (Maybe Name)
forall a b. (a -> b) -> a -> b
$
ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"model"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'm'
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"MODEL"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"Model passed to the backend"
)
providerOpt :: Parser (Maybe Text)
providerOpt :: Parser (Maybe Name)
providerOpt =
Parser Name -> Parser (Maybe Name)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Name -> Parser (Maybe Name))
-> Parser Name -> Parser (Maybe Name)
forall a b. (a -> b) -> a -> b
$
ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"provider"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PROVIDER"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"Provider passed to the backend"
)
quiesceOpt :: Parser (Maybe Int)
quiesceOpt :: Parser (Maybe Int)
quiesceOpt =
Parser Int -> Parser (Maybe Int)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Int -> Parser (Maybe Int))
-> Parser Int -> Parser (Maybe Int)
forall a b. (a -> b) -> a -> b
$
ReadM Int -> Mod OptionFields Int -> Parser Int
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
ReadM Int
forall a. Read a => ReadM a
auto
( String -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"quiesce"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"N"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. String -> Mod f a
help String
"Exit after N empty one-second cycles"
)
pitbossOpt :: Parser (Maybe Name)
pitbossOpt :: Parser (Maybe Name)
pitbossOpt =
Parser Name -> Parser (Maybe Name)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Name -> Parser (Maybe Name))
-> Parser Name -> Parser (Maybe Name)
forall a b. (a -> b) -> a -> b
$
ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"pitboss"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"NAME"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"Recipient for the quiescence marker (default: pitboss)"
)
commonAgentOptions ::
Parser FilePath ->
Parser (Maybe FilePath) ->
Parser (Maybe Int) ->
Parser (Maybe Name) ->
Parser (FilePath, [Name], FilePath, Maybe FilePath, Maybe Text, Maybe Text, Maybe Int, Maybe Name)
commonAgentOptions :: Parser String
-> Parser (Maybe String)
-> Parser (Maybe Int)
-> Parser (Maybe Name)
-> Parser
(String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name)
commonAgentOptions Parser String
rootP Parser (Maybe String)
sessP Parser (Maybe Int)
quiesceP Parser (Maybe Name)
pitbossP =
(,,,,,,,)
(String
-> [Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser String
-> Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootP
Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser [Name]
-> Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser String
-> Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
promptOpt
Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser (Maybe String)
-> Parser
(Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe String)
sessP
Parser
(Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser (Maybe Name)
-> Parser
(Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
modelOpt
Parser
(Maybe Name
-> Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser (Maybe Name)
-> Parser
(Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
providerOpt
Parser
(Maybe Int
-> Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser (Maybe Int)
-> Parser
(Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceP
Parser
(Maybe Name
-> (String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name))
-> Parser (Maybe Name)
-> Parser
(String, [Name], String, Maybe String, Maybe Name, Maybe Name,
Maybe Int, Maybe Name)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossP
parseHermesConfig :: Parser HermesConfig
parseHermesConfig :: Parser HermesConfig
parseHermesConfig =
String
-> [Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig
HermesConfig
(String
-> [Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
-> Parser String
-> Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootOpt
Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
-> Parser [Name]
-> Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
-> Parser String
-> Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
promptOpt
Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Bool
-> Maybe Int
-> Maybe Name
-> HermesConfig)
-> Parser (Maybe String)
-> Parser
(Maybe Name
-> Maybe Name -> Bool -> Maybe Int -> Maybe Name -> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe String)
sessionOpt
Parser
(Maybe Name
-> Maybe Name -> Bool -> Maybe Int -> Maybe Name -> HermesConfig)
-> Parser (Maybe Name)
-> Parser
(Maybe Name -> Bool -> Maybe Int -> Maybe Name -> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
modelOpt
Parser
(Maybe Name -> Bool -> Maybe Int -> Maybe Name -> HermesConfig)
-> Parser (Maybe Name)
-> Parser (Bool -> Maybe Int -> Maybe Name -> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
providerOpt
Parser (Bool -> Maybe Int -> Maybe Name -> HermesConfig)
-> Parser Bool -> Parser (Maybe Int -> Maybe Name -> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool
yoloOpt
Parser (Maybe Int -> Maybe Name -> HermesConfig)
-> Parser (Maybe Int) -> Parser (Maybe Name -> HermesConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceOpt
Parser (Maybe Name -> HermesConfig)
-> Parser (Maybe Name) -> Parser HermesConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossOpt
where
yoloOpt :: Parser Bool
yoloOpt = Bool -> Bool
not (Bool -> Bool) -> Parser Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod FlagFields Bool -> Parser Bool
switch (String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-yolo" Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Do not pass --yolo to hermes")
parseKimiConfig :: Parser KimiConfig
parseKimiConfig :: Parser KimiConfig
parseKimiConfig =
String
-> [Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig
KimiConfig
(String
-> [Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
-> Parser String
-> Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootOpt
Parser
([Name]
-> String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
-> Parser [Name]
-> Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String
-> Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
-> Parser String
-> Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
promptOpt
Parser
(Maybe String
-> Maybe Name
-> Maybe Name
-> Maybe Int
-> Maybe Name
-> KimiConfig)
-> Parser (Maybe String)
-> Parser
(Maybe Name -> Maybe Name -> Maybe Int -> Maybe Name -> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe String)
sessionOpt
Parser
(Maybe Name -> Maybe Name -> Maybe Int -> Maybe Name -> KimiConfig)
-> Parser (Maybe Name)
-> Parser (Maybe Name -> Maybe Int -> Maybe Name -> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
modelOpt
Parser (Maybe Name -> Maybe Int -> Maybe Name -> KimiConfig)
-> Parser (Maybe Name)
-> Parser (Maybe Int -> Maybe Name -> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
providerOpt
Parser (Maybe Int -> Maybe Name -> KimiConfig)
-> Parser (Maybe Int) -> Parser (Maybe Name -> KimiConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceOpt
Parser (Maybe Name -> KimiConfig)
-> Parser (Maybe Name) -> Parser KimiConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossOpt
parseLlmConfig :: Parser LlmConfig
parseLlmConfig :: Parser LlmConfig
parseLlmConfig =
String
-> [Name]
-> String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig
LlmConfig
(String
-> [Name]
-> String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig)
-> Parser String
-> Parser
([Name]
-> String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootOpt
Parser
([Name]
-> String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig)
-> Parser [Name]
-> Parser
(String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String
-> Maybe Name
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> LlmConfig)
-> Parser String
-> Parser
(Maybe Name
-> Name -> String -> Maybe Int -> Maybe Name -> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
promptOpt
Parser
(Maybe Name
-> Name -> String -> Maybe Int -> Maybe Name -> LlmConfig)
-> Parser (Maybe Name)
-> Parser (Name -> String -> Maybe Int -> Maybe Name -> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
modelOpt
Parser (Name -> String -> Maybe Int -> Maybe Name -> LlmConfig)
-> Parser Name
-> Parser (String -> Maybe Int -> Maybe Name -> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
baseUrlOpt
Parser (String -> Maybe Int -> Maybe Name -> LlmConfig)
-> Parser String -> Parser (Maybe Int -> Maybe Name -> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
keyEnvOpt
Parser (Maybe Int -> Maybe Name -> LlmConfig)
-> Parser (Maybe Int) -> Parser (Maybe Name -> LlmConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceOpt
Parser (Maybe Name -> LlmConfig)
-> Parser (Maybe Name) -> Parser LlmConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossOpt
where
baseUrlOpt :: Parser Name
baseUrlOpt =
ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"base-url"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"URL"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Name -> Mod OptionFields Name
forall (f :: * -> *) a. HasValue f => a -> Mod f a
value (LlmConfig -> Name
lcBaseUrl LlmConfig
defaultLlmConfig)
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Mod OptionFields Name
forall a (f :: * -> *). Show a => Mod f a
showDefault
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"OpenAI-compatible API base URL"
)
keyEnvOpt :: Parser String
keyEnvOpt =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"key-env"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"NAME"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasValue f => a -> Mod f a
value (LlmConfig -> String
lcKeyEnv LlmConfig
defaultLlmConfig)
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Mod OptionFields String
forall a (f :: * -> *). Show a => Mod f a
showDefault
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Environment variable holding the API key"
)
parseCommandConfig :: Parser CommandConfig
parseCommandConfig :: Parser CommandConfig
parseCommandConfig =
String
-> [Name]
-> String
-> [String]
-> Maybe Int
-> Maybe Name
-> CommandConfig
CommandConfig
(String
-> [Name]
-> String
-> [String]
-> Maybe Int
-> Maybe Name
-> CommandConfig)
-> Parser String
-> Parser
([Name]
-> String -> [String] -> Maybe Int -> Maybe Name -> CommandConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootOpt
Parser
([Name]
-> String -> [String] -> Maybe Int -> Maybe Name -> CommandConfig)
-> Parser [Name]
-> Parser
(String -> [String] -> Maybe Int -> Maybe Name -> CommandConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String -> [String] -> Maybe Int -> Maybe Name -> CommandConfig)
-> Parser String
-> Parser ([String] -> Maybe Int -> Maybe Name -> CommandConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
cmdOpt
Parser ([String] -> Maybe Int -> Maybe Name -> CommandConfig)
-> Parser [String]
-> Parser (Maybe Int -> Maybe Name -> CommandConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [String]
argsOpt
Parser (Maybe Int -> Maybe Name -> CommandConfig)
-> Parser (Maybe Int) -> Parser (Maybe Name -> CommandConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceOpt
Parser (Maybe Name -> CommandConfig)
-> Parser (Maybe Name) -> Parser CommandConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossOpt
where
cmdOpt :: Parser String
cmdOpt =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"cmd"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"CMD"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"External command to invoke per post"
)
argsOpt :: Parser [String]
argsOpt =
Parser String -> Parser [String]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many
( ReadM String -> Mod ArgumentFields String -> Parser String
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument
ReadM String
forall s. IsString s => ReadM s
str
(String -> Mod ArgumentFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ARG..." Mod ArgumentFields String
-> Mod ArgumentFields String -> Mod ArgumentFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Arguments passed to CMD")
)
parseGatewayConfig :: Parser GatewayCliConfig
parseGatewayConfig :: Parser GatewayCliConfig
parseGatewayConfig =
String
-> [Name]
-> String
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> GatewayCliConfig
GatewayCliConfig
(String
-> [Name]
-> String
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> GatewayCliConfig)
-> Parser String
-> Parser
([Name]
-> String
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> GatewayCliConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String
rootOpt
Parser
([Name]
-> String
-> Name
-> String
-> Maybe Int
-> Maybe Name
-> GatewayCliConfig)
-> Parser [Name]
-> Parser
(String
-> Name -> String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser [Name]
namesOpt
Parser
(String
-> Name -> String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
-> Parser String
-> Parser
(Name -> String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
promptOpt
Parser
(Name -> String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
-> Parser Name
-> Parser (String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
baseUrlOpt
Parser (String -> Maybe Int -> Maybe Name -> GatewayCliConfig)
-> Parser String
-> Parser (Maybe Int -> Maybe Name -> GatewayCliConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
keyEnvOpt
Parser (Maybe Int -> Maybe Name -> GatewayCliConfig)
-> Parser (Maybe Int) -> Parser (Maybe Name -> GatewayCliConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Int)
quiesceOpt
Parser (Maybe Name -> GatewayCliConfig)
-> Parser (Maybe Name) -> Parser GatewayCliConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe Name)
pitbossOpt
where
baseUrlOpt :: Parser Name
baseUrlOpt =
ReadM Name -> Mod OptionFields Name -> Parser Name
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
(String -> Name
T.pack (String -> Name) -> ReadM String -> ReadM Name
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM String
forall s. IsString s => ReadM s
str)
( String -> Mod OptionFields Name
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"base-url"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"URL"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Name -> Mod OptionFields Name
forall (f :: * -> *) a. HasValue f => a -> Mod f a
value Name
"http://127.0.0.1:8642"
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> Mod OptionFields Name
forall a (f :: * -> *). Show a => Mod f a
showDefault
Mod OptionFields Name
-> Mod OptionFields Name -> Mod OptionFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"Hermes gateway api_server base URL"
)
keyEnvOpt :: Parser String
keyEnvOpt =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"key-env"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"NAME"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasValue f => a -> Mod f a
value String
"API_SERVER_KEY"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Mod OptionFields String
forall a (f :: * -> *). Show a => Mod f a
showDefault
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Environment variable holding the api_server Bearer key"
)