{status === "executing" && !hasResult && (
-
+
Executing...
)}
- {hasResult && (
- <>
-
- {areResultsExpanded && (
-
-
-
- {result.content}
-
-
-
-
-
- )}
- >
+ {hasResult && resultContent && (
+
setAreResultsExpanded(!areResultsExpanded)}
+ previewContent={resultContent}
+ expandedContent={resultContent}
+ errorStyle={isError}
+ />
)}
diff --git a/ui/src/components/chat/AgentCallDisplay.tsx b/ui/src/components/chat/AgentCallDisplay.tsx
index 0c8dcd1be..52dda24ba 100644
--- a/ui/src/components/chat/AgentCallDisplay.tsx
+++ b/ui/src/components/chat/AgentCallDisplay.tsx
@@ -1,7 +1,7 @@
import { createContext, useContext, useMemo, useState, useEffect } from "react";
import { FunctionCall, TokenStats } from "@/types";
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
-import { convertToUserFriendlyName } from "@/lib/utils";
+import { convertToUserFriendlyName, isAgentToolName } from "@/lib/utils";
import { ChevronDown, ChevronUp, MessageSquare, Loader2, AlertCircle, CheckCircle, Activity } from "lucide-react";
import KagentLogo from "../kagent-logo";
import TokenStatsTooltip from "@/components/chat/TokenStatsTooltip";
@@ -9,6 +9,8 @@ import { getSubagentSessionWithEvents } from "@/app/actions/sessions";
import { Message, Task } from "@a2a-js/sdk";
import { extractMessagesFromTasks } from "@/lib/messageHandlers";
import ChatMessage from "@/components/chat/ChatMessage";
+import { SmartContent, parseJsonOrString } from "./SmartContent";
+import { CollapsibleSection } from "./CollapsibleSection";
// Track and avoid too deep nested agent viewing to avoid UI issues
// In theory this works for infinite depth
@@ -132,7 +134,9 @@ const AgentCallDisplay = ({ call, result, status = "requested", isError = false,
const activityDepth = useContext(ActivityDepthContext);
const agentDisplay = useMemo(() => convertToUserFriendlyName(call.name), [call.name]);
const hasResult = result !== undefined;
- const showActivitySection = !!subagentSessionId && !isError && activityDepth < MAX_ACTIVITY_DEPTH;
+const showActivitySection = !!subagentSessionId && !isError && activityDepth < MAX_ACTIVITY_DEPTH;
+
+ const isAgent = isAgentToolName(call.name);
const getStatusDisplay = () => {
if (isError && status === "executing") {
@@ -178,6 +182,12 @@ const AgentCallDisplay = ({ call, result, status = "requested", isError = false,
}
};
+ const parsedResult = hasResult && result?.content ? parseJsonOrString(result.content) : null;
+ const argsContent =
;
+ const resultContent = parsedResult !== null
+ ?
+ : null;
+
return (
@@ -186,51 +196,39 @@ const AgentCallDisplay = ({ call, result, status = "requested", isError = false,
{agentDisplay}
-