diff options
Diffstat (limited to 'Omni/Jr/Web.hs')
| -rw-r--r-- | Omni/Jr/Web.hs | 21 |
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) |
