summaryrefslogtreecommitdiff
path: root/Omni/Ava.hs
blob: 2dfecb14000a388eee5f1910dcd33b54636a1c73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/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

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
  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
    ]