blob: 77a0408315d84141b7a752dbc82f0c9f850152b7 (
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 #-}
-- | Omni Bot - Family assistant via Telegram.
--
-- Usage:
-- bot # Uses TELEGRAM_BOT_TOKEN env var
-- bot --token=XXX # Explicit token
-- bot --model=MODEL # Override LLM model
--
-- : out bot
-- : dep aeson
-- : dep http-conduit
-- : dep stm
module Omni.Bot 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|
bot - Omni family assistant via Telegram
Usage:
bot [--token=TOKEN] [--model=MODEL]
bot test
bot (-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.Bot"
[ Test.unit "help is non-empty" <| do
let usage = str (Docopt.usage help) :: String
null usage Test.@=? False
]
|