summaryrefslogtreecommitdiff
path: root/Omni/Ava/Web.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-21 09:25:00 -0500
committerBen Sima <ben@bensima.com>2025-12-21 09:25:00 -0500
commit0d57fbc4644bafdf5e4f0769a4807390e3045d51 (patch)
tree1b7e39f5940c20a58b18ca50ffabc0483031473d /Omni/Ava/Web.hs
parentf10b5fda7f24f72ea51672f64c2d838a58c92b50 (diff)
Omni/Ava: improve trace viewer and subagent notifications
- Add subagent completion callback to notify user when subagent finishes - Show tool name in 'view trace' link (e.g. 'view web_search trace') - Pretty-print JSON on trace web page using aeson-pretty Amp-Thread-ID: https://ampcode.com/threads/T-019b3a13-bc75-7368-9ec9-362d462a022c Co-authored-by: Amp <amp@ampcode.com>
Diffstat (limited to 'Omni/Ava/Web.hs')
-rw-r--r--Omni/Ava/Web.hs14
1 files changed, 12 insertions, 2 deletions
diff --git a/Omni/Ava/Web.hs b/Omni/Ava/Web.hs
index c1eaa48..25c3352 100644
--- a/Omni/Ava/Web.hs
+++ b/Omni/Ava/Web.hs
@@ -15,6 +15,7 @@
-- : dep lucid
-- : dep http-types
-- : dep aeson
+-- : dep aeson-pretty
-- : dep text
-- : dep bytestring
-- : dep sqlite-simple
@@ -28,7 +29,10 @@ where
import Alpha
import qualified Data.Aeson as Aeson
+import qualified Data.Aeson.Encode.Pretty as AesonPretty
+import qualified Data.ByteString.Lazy as BL
import qualified Data.Text as Text
+import qualified Data.Text.Encoding as TE
import qualified Database.SQLite.Simple as SQL
import qualified Lucid
import qualified Network.Wai.Handler.Warp as Warp
@@ -107,7 +111,7 @@ instance Lucid.ToHtml TracePage where
Lucid.button_ [Lucid.class_ "copy-btn", Lucid.data_ "target" "input-content"] "Copy"
Lucid.div_ [Lucid.class_ "section-content", Lucid.id_ "input-content"]
<| Lucid.pre_
- <| Lucid.toHtml (Trace.trcInput rec)
+ <| Lucid.toHtml (prettyJson (Trace.trcInput rec))
Lucid.div_ [Lucid.class_ "section", Lucid.id_ "output-section"] <| do
Lucid.div_ [Lucid.class_ "section-header"] <| do
@@ -115,7 +119,7 @@ instance Lucid.ToHtml TracePage where
Lucid.button_ [Lucid.class_ "copy-btn", Lucid.data_ "target" "output-content"] "Copy"
Lucid.div_ [Lucid.class_ "section-content", Lucid.id_ "output-content"]
<| Lucid.pre_
- <| Lucid.toHtml (Trace.trcOutput rec)
+ <| Lucid.toHtml (prettyJson (Trace.trcOutput rec))
Lucid.p_ [Lucid.class_ "footer"] <| Lucid.toHtml ("Trace ID: " <> Trace.trcId rec)
@@ -166,3 +170,9 @@ traceScript =
" });",
"});"
]
+
+prettyJson :: Text -> Text
+prettyJson t =
+ case Aeson.decode (BL.fromStrict (TE.encodeUtf8 t)) :: Maybe Aeson.Value of
+ Nothing -> t
+ Just v -> TE.decodeUtf8 (BL.toStrict (AesonPretty.encodePretty v))