54 lines
1.6 KiB
Haskell
54 lines
1.6 KiB
Haskell
{-# LANGUAGE ScopedTypeVariables #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Main where
|
|
|
|
import Agent.Server.Config (Config, configFile, loadConfigOrDefault, saveConfig)
|
|
import Agent.Tools.Time ()
|
|
import Agent.Tools.Tool (Tool, getToolListTH, toMarkdownDL)
|
|
import Control.Concurrent (threadDelay)
|
|
import Control.Exception (AsyncException (UserInterrupt), bracket, catch)
|
|
import Control.Monad (when)
|
|
import qualified Data.ByteString as BS
|
|
import Data.Default
|
|
import Data.Either (fromRight, isRight)
|
|
import Data.Either.Extra (fromRight')
|
|
import Data.Proxy
|
|
import qualified Data.Text as T
|
|
import qualified Data.Text.IO as T
|
|
import Data.Yaml (decodeFileThrow)
|
|
import qualified Data.Yaml as YAML
|
|
import Language.Haskell.TH
|
|
import System.IO (hFlush, stdout)
|
|
|
|
main :: IO ()
|
|
main = do
|
|
(conf :: Config) <- (configFile >>= maybe (return def) decodeFileThrow)
|
|
|
|
let availableTools = ($(getToolListTH) :: [Tool])
|
|
putStrLn "# HAgent\n"
|
|
putStrLn "\n## Cofig\n"
|
|
BS.putStr $ (YAML.encode conf) <> "\n"
|
|
putStrLn "## Available Tools\n"
|
|
mapM_ T.putStrLn $ toMarkdownDL <$> availableTools
|
|
bracket acquireResource releaseResource $ \_ ->
|
|
mainLoop `catch` handler
|
|
where
|
|
acquireResource :: IO ()
|
|
acquireResource = putStrLn "Acquiring resource..."
|
|
|
|
releaseResource :: () -> IO ()
|
|
releaseResource _ = putStrLn "Releasing resource..."
|
|
|
|
mainLoop :: IO ()
|
|
mainLoop = do
|
|
putStr "waiting for work ...\r"
|
|
hFlush stdout
|
|
-- Simulate work
|
|
-- Add your main loop logic here
|
|
threadDelay 1000000
|
|
mainLoop
|
|
|
|
handler :: AsyncException -> IO ()
|
|
handler UserInterrupt = putStrLn "\nCaught Ctrl-C. Exiting gracefully."
|