diff options
| author | Ben Sima <ben@bensima.com> | 2025-12-21 09:25:00 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bensima.com> | 2025-12-21 09:25:00 -0500 |
| commit | 0d57fbc4644bafdf5e4f0769a4807390e3045d51 (patch) | |
| tree | 1b7e39f5940c20a58b18ca50ffabc0483031473d /Omni/Ava/Web.hs | |
| parent | f10b5fda7f24f72ea51672f64c2d838a58c92b50 (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.hs | 14 |
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)) |
