diff options
Diffstat (limited to 'Omni/Agent/Log.hs')
| -rw-r--r-- | Omni/Agent/Log.hs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Omni/Agent/Log.hs b/Omni/Agent/Log.hs new file mode 100644 index 0000000..c93479b --- /dev/null +++ b/Omni/Agent/Log.hs @@ -0,0 +1,71 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# 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 |
