#!/usr/bin/env run.sh {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE NoImplicitPrelude #-} -- | Ava - AI assistant via Telegram. -- -- Usage: -- ava # Uses TELEGRAM_BOT_TOKEN env var -- ava --token=XXX # Explicit token -- ava --model=MODEL # Override LLM model -- -- : out ava -- : dep aeson -- : dep http-conduit -- : dep stm module Omni.Ava where import Alpha import qualified Data.Text as Text import qualified Omni.Agent.Telegram as Telegram import qualified Omni.Cli as Cli import qualified Omni.Test as Test import qualified System.Console.Docopt as Docopt import qualified System.IO as IO main :: IO () main = Cli.main plan plan :: Cli.Plan () plan = Cli.Plan { Cli.help = help, Cli.move = move, Cli.test = test, Cli.tidy = \_ -> pure () } help :: Cli.Docopt help = [Cli.docopt| ava - AI assistant via Telegram Usage: ava [--token=TOKEN] [--model=MODEL] ava test ava (-h | --help) Options: -h --help Show this help --token=TOKEN Telegram bot token (or use TELEGRAM_BOT_TOKEN env) --model=MODEL LLM model to use [default: anthropic/claude-sonnet-4] |] move :: Cli.Arguments -> IO () move args = do IO.hSetBuffering IO.stdout IO.LineBuffering IO.hSetBuffering IO.stderr IO.LineBuffering let maybeToken = fmap Text.pack (Cli.getArg args (Cli.longOption "token")) Telegram.startBot maybeToken test :: Test.Tree test = Test.group "Omni.Ava" [ Test.unit "help is non-empty" <| do let usage = str (Docopt.usage help) :: String null usage Test.@=? False ]