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