summaryrefslogtreecommitdiff
path: root/Omni/Jr/Web.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Jr/Web.hs')
-rw-r--r--Omni/Jr/Web.hs21
1 files changed, 20 insertions, 1 deletions
diff --git a/Omni/Jr/Web.hs b/Omni/Jr/Web.hs
index aa97d96..94b5766 100644
--- a/Omni/Jr/Web.hs
+++ b/Omni/Jr/Web.hs
@@ -2527,11 +2527,12 @@ renderAssistantTimelineEvent content _actor timestamp now =
renderToolCallTimelineEvent :: (Monad m) => Text -> TaskCore.CommentAuthor -> UTCTime -> UTCTime -> Lucid.HtmlT m ()
renderToolCallTimelineEvent content _actor timestamp now =
let (toolName, args) = parseToolCallContent content
+ summary = formatToolCallSummary toolName args
in Lucid.details_ [Lucid.class_ "timeline-tool-call"] <| do
Lucid.summary_ <| do
Lucid.span_ [Lucid.class_ "event-icon"] "🔧"
Lucid.span_ [Lucid.class_ "tool-name"] (Lucid.toHtml toolName)
- renderActorLabel TaskCore.Junior
+ Lucid.span_ [Lucid.class_ "tool-summary"] (Lucid.toHtml summary)
renderRelativeTimestamp now timestamp
Lucid.div_ [Lucid.class_ "event-content tool-args"] <| do
renderCollapsibleOutput args
@@ -2596,6 +2597,24 @@ parseToolCallContent content =
| Text.null rest -> (content, "")
| otherwise -> (Text.strip name, Text.strip (Text.drop 1 rest))
+formatToolCallSummary :: Text -> Text -> Text
+formatToolCallSummary toolName argsJson =
+ case Aeson.decode (LBS.fromStrict (str argsJson)) of
+ Just (Aeson.Object obj) ->
+ let keyArg = case toolName of
+ "run_bash" -> KeyMap.lookup "command" obj
+ "read_file" -> KeyMap.lookup "path" obj
+ "edit_file" -> KeyMap.lookup "path" obj
+ "write_file" -> KeyMap.lookup "path" obj
+ "search_codebase" -> KeyMap.lookup "pattern" obj
+ "glob_files" -> KeyMap.lookup "pattern" obj
+ "list_directory" -> KeyMap.lookup "path" obj
+ _ -> Nothing
+ in case keyArg of
+ Just (Aeson.String s) -> "`" <> Text.take 100 s <> "`"
+ _ -> Text.take 80 argsJson
+ _ -> Text.take 80 argsJson
+
renderCollapsibleOutput :: (Monad m) => Text -> Lucid.HtmlT m ()
renderCollapsibleOutput content =
let lineCount = length (Text.lines content)