summaryrefslogtreecommitdiff
path: root/Omni/Jr
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-01 14:13:41 -0500
committerBen Sima <ben@bensima.com>2025-12-01 14:13:41 -0500
commit45841c3f948dabcc177d2306246020bc339709ae (patch)
tree3f179386b47f6ee87f9d056789539e9843bce0e1 /Omni/Jr
parent9c3034853c3cacea8a77358467acf46e75c982f5 (diff)
Show tool call arguments inline instead of JSON blob
- Add formatToolCallSummary to extract key argument from JSON - Shows run_bash command, file paths for read/edit/write, patterns for search - Display summary inline in tool call header (e.g., run_bash: `ls -la`) - Increase token guardrail from 1M to 2M to prevent premature stops Task-Id: t-212
Diffstat (limited to 'Omni/Jr')
-rw-r--r--Omni/Jr/Web.hs21
-rw-r--r--Omni/Jr/Web/Style.hs5
2 files changed, 25 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)
diff --git a/Omni/Jr/Web/Style.hs b/Omni/Jr/Web/Style.hs
index 9a0c12d..bb74ce9 100644
--- a/Omni/Jr/Web/Style.hs
+++ b/Omni/Jr/Web/Style.hs
@@ -1488,6 +1488,11 @@ timelineEventStyles = do
".tool-name" ? do
fontFamily ["SF Mono", "Monaco", "Consolas", "monospace"] [monospace]
color "#3b82f6"
+ ".tool-summary" ? do
+ fontFamily ["SF Mono", "Monaco", "Consolas", "monospace"] [monospace]
+ fontSize (px 12)
+ color "#6b7280"
+ marginLeft (px 8)
".tool-args" ? do
marginTop (px 4)
paddingLeft (px 20)