blob: 33b9722226a69700918dd106c05a471f5d6ae331 (
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
|
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Omni.Agent.Log
( LogEntry (..),
parseLine,
format,
)
where
import Alpha
import Data.Aeson (FromJSON (..), (.:), (.:?))
import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as BSL
data LogEntry = LogEntry
{ leMessage :: Text,
leLevel :: Maybe Text,
leToolName :: Maybe Text,
leBatches :: Maybe [[Text]],
leMethod :: Maybe Text,
lePath :: Maybe Text
}
deriving (Show, Eq, Generic)
instance FromJSON LogEntry where
parseJSON = Aeson.withObject "LogEntry" <| \v ->
LogEntry
<$> v .: "message"
<*> v .:? "level"
<*> v .:? "toolName"
<*> v .:? "batches"
<*> v .:? "method"
<*> v .:? "path"
parseLine :: Text -> Maybe LogEntry
parseLine line = Aeson.decode <| BSL.fromStrict <| encodeUtf8 line
format :: LogEntry -> Maybe Text
format e =
case leMessage e of
"executing 1 tools in 1 batch(es)" ->
let tool = case leBatches e of
Just ((t : _) : _) -> t
_ -> "unknown"
in Just <| "🤖 THOUGHT: Planning tool execution (" <> tool <> ")"
"Tool Bash permitted - action: allow" ->
Just "🔧 TOOL: Bash command executed"
msg
| "Processing tool completion for ledger" == msg && isJust (leToolName e) ->
Just <| "✅ TOOL: " <> fromMaybe "" (leToolName e) <> " completed"
"ide-fs" ->
case leMethod e of
Just "readFile" -> Just <| "📂 READ: " <> fromMaybe "" (lePath e)
_ -> Nothing
"System prompt build complete (no changes)" ->
Just "🧠 THINKING..."
"System prompt build complete (first build)" ->
Just "🚀 STARTING new task context"
msg ->
case leLevel e of
Just "error" -> Just <| "❌ ERROR: " <> msg
_ -> Nothing
|