summaryrefslogtreecommitdiff
path: root/Omni/Ava.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-19 21:54:54 -0500
committerBen Sima <ben@bensima.com>2025-12-19 21:54:54 -0500
commitfcb8629182fa1552e4a840ccd4ec0aa2b8042cc0 (patch)
treee389479cf9349fbdab107da739bceef11cf8e7ee /Omni/Ava.hs
parente856c766584ed933bed0b79c7ef47b6d98b0fb7e (diff)
feat(ava): add tool trace viewer mini-app
- Add SQLite storage for tool traces (Omni/Ava/Trace.hs) - Add web server to serve trace viewer (Omni/Ava/Web.hs) - Add HTML/CSS/JS trace viewer UI (Omni/Ava/Web/trace.html) - Integrate trace storage into Engine.hs tool execution callback - Add trace links to Telegram responses when AVA_WEB_URL is set - Configure Tailscale Funnel for public access - Fix pre-push hook variable scope bug - Add direnv, bash, nix to Ava service PATH - Add mustache dep to Ava.hs for template rendering Epic: t-272
Diffstat (limited to 'Omni/Ava.hs')
-rwxr-xr-xOmni/Ava.hs11
1 files changed, 11 insertions, 0 deletions
diff --git a/Omni/Ava.hs b/Omni/Ava.hs
index 3640fc2..6058425 100755
--- a/Omni/Ava.hs
+++ b/Omni/Ava.hs
@@ -14,22 +14,29 @@
-- : out ava
-- : dep aeson
-- : dep http-conduit
+-- : dep http-types
+-- : dep mustache
-- : dep stm
-- : dep time
-- : dep uuid
+-- : dep wai
+-- : dep warp
module Omni.Ava where
import Alpha
+import qualified Control.Concurrent as Concurrent
import qualified Data.Aeson as Aeson
import qualified Data.Text as Text
import qualified Data.Text.IO as TextIO
import qualified Data.Time as Time
import qualified Omni.Agent.AuditLog as AuditLog
import qualified Omni.Agent.Telegram as Telegram
+import qualified Omni.Ava.Web as Web
import qualified Omni.Cli as Cli
import qualified Omni.Test as Test
import qualified System.Console.Docopt as Docopt
import qualified System.Directory as Dir
+import qualified System.Environment as Environment
import qualified System.IO as IO
main :: IO ()
@@ -70,6 +77,10 @@ move args = do
if args `Cli.has` Cli.command "logs"
then showLogs args
else do
+ webPort <- Environment.lookupEnv "AVA_WEB_PORT" /> maybe Web.defaultPort (fromMaybe Web.defaultPort <. readMaybe)
+ dataRoot <- Environment.getEnv "AVA_DATA_ROOT"
+ let dbPath = dataRoot <> "/ava.db"
+ _ <- Concurrent.forkIO <| Web.startWebServer webPort dbPath
let maybeToken = fmap Text.pack (Cli.getArg args (Cli.longOption "token"))
Telegram.startBot maybeToken