@supyagent/sdk 0.1.37 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.cjs CHANGED
@@ -37,6 +37,7 @@ __export(react_exports, {
37
37
  CalendlyFormatter: () => CalendlyFormatter,
38
38
  CollapsibleResult: () => CollapsibleResult,
39
39
  ComputeFormatter: () => ComputeFormatter,
40
+ ContextIndicator: () => ContextIndicator,
40
41
  DiscordFormatter: () => DiscordFormatter,
41
42
  DocsFormatter: () => DocsFormatter,
42
43
  DriveFileFormatter: () => DriveFileFormatter,
@@ -59,6 +60,7 @@ __export(react_exports, {
59
60
  SlackMessageFormatter: () => SlackMessageFormatter,
60
61
  SlidesFormatter: () => SlidesFormatter,
61
62
  StripeFormatter: () => StripeFormatter,
63
+ SummaryMessage: () => SummaryMessage,
62
64
  SupyagentToolAction: () => SupyagentToolAction,
63
65
  SupyagentToolCall: () => SupyagentToolCall,
64
66
  SupyagentToolResult: () => SupyagentToolResult,
@@ -77,6 +79,7 @@ __export(react_exports, {
77
79
  getProviderLabel: () => getProviderLabel,
78
80
  getSummary: () => getSummary,
79
81
  humanizeToolName: () => humanizeToolName,
82
+ isContextSummary: () => isContextSummary,
80
83
  maybeNormalize: () => maybeNormalize,
81
84
  normalizeMicrosoftCalendar: () => normalizeMicrosoftCalendar,
82
85
  normalizeMicrosoftDrive: () => normalizeMicrosoftDrive,
@@ -3530,10 +3533,107 @@ function ToolInput({ args }) {
3530
3533
  }) });
3531
3534
  }
3532
3535
 
3533
- // src/ui/tool-action.tsx
3536
+ // src/ui/context-indicator.tsx
3537
+ var import_jsx_runtime35 = require("react/jsx-runtime");
3538
+ function ContextIndicator({
3539
+ messages,
3540
+ maxTokens = 128e3,
3541
+ className
3542
+ }) {
3543
+ const lastContext = findLastContextMetadata(messages);
3544
+ if (!lastContext) return null;
3545
+ const ratio = Math.min(lastContext.usageRatio ?? 0, 1);
3546
+ const percent = Math.round(ratio * 100);
3547
+ const totalTokens = lastContext.totalTokens ?? 0;
3548
+ const color = ratio < 0.5 ? "bg-emerald-500" : ratio < 0.75 ? "bg-yellow-500" : ratio < 0.9 ? "bg-orange-500" : "bg-red-500";
3549
+ const label = formatTokens(totalTokens);
3550
+ const maxLabel = formatTokens(maxTokens);
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3552
+ "div",
3553
+ {
3554
+ className,
3555
+ title: `Context: ${label} / ${maxLabel} tokens (${percent}%)`,
3556
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
3557
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "h-1.5 w-16 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3558
+ "div",
3559
+ {
3560
+ className: `h-full rounded-full transition-all duration-500 ${color}`,
3561
+ style: { width: `${percent}%` }
3562
+ }
3563
+ ) }),
3564
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "tabular-nums", children: [
3565
+ percent,
3566
+ "%"
3567
+ ] })
3568
+ ] })
3569
+ }
3570
+ );
3571
+ }
3572
+ function findLastContextMetadata(messages) {
3573
+ for (let i = messages.length - 1; i >= 0; i--) {
3574
+ const meta = messages[i].metadata;
3575
+ if (meta?.context) return meta.context;
3576
+ }
3577
+ return null;
3578
+ }
3579
+ function formatTokens(n) {
3580
+ if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
3581
+ if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
3582
+ return `${n}`;
3583
+ }
3584
+
3585
+ // src/ui/summary-message.tsx
3534
3586
  var import_react3 = require("react");
3587
+ var import_jsx_runtime36 = require("react/jsx-runtime");
3588
+ function SummaryMessage({ message, className }) {
3589
+ const [expanded, setExpanded] = (0, import_react3.useState)(false);
3590
+ const meta = message.metadata;
3591
+ const summaryText = message.parts.find((p) => p.type === "text");
3592
+ const messageCount = meta?.messagesSummarized ?? 0;
3593
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3594
+ "div",
3595
+ {
3596
+ className: `rounded-lg border border-dashed border-border bg-muted/30 px-4 py-3 ${className ?? ""}`,
3597
+ children: [
3598
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3599
+ "button",
3600
+ {
3601
+ type: "button",
3602
+ onClick: () => setExpanded(!expanded),
3603
+ className: "flex w-full items-center gap-2 text-left text-xs text-muted-foreground hover:text-foreground transition-colors",
3604
+ children: [
3605
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3606
+ "svg",
3607
+ {
3608
+ className: `h-3 w-3 shrink-0 transition-transform ${expanded ? "rotate-90" : ""}`,
3609
+ fill: "none",
3610
+ viewBox: "0 0 24 24",
3611
+ stroke: "currentColor",
3612
+ strokeWidth: 2,
3613
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" })
3614
+ }
3615
+ ),
3616
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-medium", children: [
3617
+ "Context summarized",
3618
+ messageCount > 0 && ` (${messageCount} messages)`
3619
+ ] })
3620
+ ]
3621
+ }
3622
+ ),
3623
+ expanded && summaryText?.text && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mt-2 border-t border-border pt-2 text-sm text-muted-foreground whitespace-pre-wrap", children: summaryText.text })
3624
+ ]
3625
+ }
3626
+ );
3627
+ }
3628
+ function isContextSummary(message) {
3629
+ const meta = message.metadata;
3630
+ return meta?.type === "context-summary";
3631
+ }
3632
+
3633
+ // src/ui/tool-action.tsx
3634
+ var import_react4 = require("react");
3535
3635
  var import_lucide_react32 = require("lucide-react");
3536
- var import_jsx_runtime35 = require("react/jsx-runtime");
3636
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3537
3637
  var BADGE_STYLES2 = {
3538
3638
  default: "bg-muted text-muted-foreground",
3539
3639
  success: "bg-green-500/10 text-green-500",
@@ -3541,7 +3641,7 @@ var BADGE_STYLES2 = {
3541
3641
  warning: "bg-yellow-500/10 text-yellow-600"
3542
3642
  };
3543
3643
  function SupyagentToolAction({ part, defaultExpanded = false }) {
3544
- const [expanded, setExpanded] = (0, import_react3.useState)(defaultExpanded);
3644
+ const [expanded, setExpanded] = (0, import_react4.useState)(defaultExpanded);
3545
3645
  const toolName = extractToolName(part);
3546
3646
  const state = extractState(part);
3547
3647
  const args = extractArgs(part);
@@ -3566,59 +3666,59 @@ function SupyagentToolAction({ part, defaultExpanded = false }) {
3566
3666
  const hasArgs = args && Object.keys(args).length > 0;
3567
3667
  const hasExpandableContent = hasArgs || formatterOutput;
3568
3668
  const canExpand = !isStreaming && hasExpandableContent;
3569
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3669
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
3570
3670
  "div",
3571
3671
  {
3572
3672
  className: "rounded-lg border border-border bg-card overflow-hidden",
3573
3673
  "data-state": isDone ? "done" : isError ? "error" : isStreaming ? "streaming" : "pending",
3574
3674
  children: [
3575
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3675
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
3576
3676
  "button",
3577
3677
  {
3578
3678
  type: "button",
3579
3679
  onClick: () => canExpand && setExpanded(!expanded),
3580
3680
  className: `flex items-center gap-2 w-full px-3 py-2 text-left transition-colors ${canExpand ? "hover:bg-muted cursor-pointer" : "cursor-default"}`,
3581
3681
  children: [
3582
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "relative shrink-0", children: [
3583
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
3584
- isStreaming && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react32.Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
3682
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "relative shrink-0", children: [
3683
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
3684
+ isStreaming && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react32.Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
3585
3685
  ] }),
3586
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
3587
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm text-foreground", children: actionLabel }),
3588
- summary && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
3589
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-muted-foreground text-xs", children: "\xB7" }),
3590
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm text-muted-foreground flex-1 truncate", children: summary.text })
3686
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
3687
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-sm text-foreground", children: actionLabel }),
3688
+ summary && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
3689
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-muted-foreground text-xs", children: "\xB7" }),
3690
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-sm text-muted-foreground flex-1 truncate", children: summary.text })
3591
3691
  ] }),
3592
- !summary && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "flex-1" }),
3593
- summary?.badge && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3692
+ !summary && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "flex-1" }),
3693
+ summary?.badge && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3594
3694
  "span",
3595
3695
  {
3596
3696
  className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium shrink-0 ${BADGE_STYLES2[summary.badge.variant || "default"]}`,
3597
3697
  children: summary.badge.text
3598
3698
  }
3599
3699
  ),
3600
- isDone && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react32.Check, { className: "h-3.5 w-3.5 text-green-500 shrink-0" }),
3601
- isError && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive shrink-0", children: [
3602
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react32.AlertCircle, { className: "h-3 w-3" }),
3700
+ isDone && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react32.Check, { className: "h-3.5 w-3.5 text-green-500 shrink-0" }),
3701
+ isError && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive shrink-0", children: [
3702
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react32.AlertCircle, { className: "h-3 w-3" }),
3603
3703
  "Error"
3604
3704
  ] }),
3605
- isStreaming && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse shrink-0", children: "Calling..." }),
3606
- canExpand && (expanded ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react32.ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react32.ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }))
3705
+ isStreaming && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse shrink-0", children: "Calling..." }),
3706
+ canExpand && (expanded ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react32.ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react32.ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }))
3607
3707
  ]
3608
3708
  }
3609
3709
  ),
3610
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3710
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3611
3711
  "div",
3612
3712
  {
3613
3713
  className: "grid transition-[grid-template-rows] duration-200 ease-out",
3614
3714
  style: { gridTemplateRows: expanded ? "1fr" : "0fr" },
3615
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "border-t border-border px-3 py-2 space-y-3", children: [
3616
- args && Object.keys(args).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
3617
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Input" }),
3618
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ToolInput, { args })
3715
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "border-t border-border px-3 py-2 space-y-3", children: [
3716
+ args && Object.keys(args).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
3717
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Input" }),
3718
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ToolInput, { args })
3619
3719
  ] }),
3620
- formatterOutput && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
3621
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Output" }),
3720
+ formatterOutput && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
3721
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Output" }),
3622
3722
  formatterOutput
3623
3723
  ] })
3624
3724
  ] }) })
@@ -3630,9 +3730,9 @@ function SupyagentToolAction({ part, defaultExpanded = false }) {
3630
3730
  }
3631
3731
 
3632
3732
  // src/ui/tool-call.tsx
3633
- var import_react4 = require("react");
3733
+ var import_react5 = require("react");
3634
3734
  var import_lucide_react33 = require("lucide-react");
3635
- var import_jsx_runtime36 = require("react/jsx-runtime");
3735
+ var import_jsx_runtime38 = require("react/jsx-runtime");
3636
3736
  function extractToolName2(part) {
3637
3737
  if (part.type.startsWith("tool-") && part.type !== "tool-invocation") {
3638
3738
  return part.type.slice(5);
@@ -3651,7 +3751,7 @@ function extractArgs2(part) {
3651
3751
  return part.input || part.args || part.toolInvocation?.args;
3652
3752
  }
3653
3753
  function SupyagentToolCall({ part }) {
3654
- const [expanded, setExpanded] = (0, import_react4.useState)(false);
3754
+ const [expanded, setExpanded] = (0, import_react5.useState)(false);
3655
3755
  const toolName = extractToolName2(part);
3656
3756
  const state = extractState2(part);
3657
3757
  const args = extractArgs2(part);
@@ -3661,39 +3761,39 @@ function SupyagentToolCall({ part }) {
3661
3761
  const isStreaming = state === "input-streaming";
3662
3762
  const isError = state === "output-error";
3663
3763
  const isDone = state === "output-available";
3664
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3764
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3665
3765
  "div",
3666
3766
  {
3667
3767
  className: "rounded-lg border border-border bg-card overflow-hidden",
3668
3768
  "data-state": isDone ? "done" : isError ? "error" : isStreaming ? "streaming" : "pending",
3669
3769
  children: [
3670
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3770
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3671
3771
  "button",
3672
3772
  {
3673
3773
  type: "button",
3674
3774
  onClick: () => args && setExpanded(!expanded),
3675
3775
  className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted transition-colors",
3676
3776
  children: [
3677
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "relative", children: [
3678
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
3679
- isStreaming && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react33.Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
3777
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "relative", children: [
3778
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
3779
+ isStreaming && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react33.Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
3680
3780
  ] }),
3681
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
3682
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-sm text-foreground flex-1", children: actionLabel }),
3683
- isDone && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-500/10 px-2 py-0.5 text-xs text-green-500", children: [
3684
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react33.Check, { className: "h-3 w-3" }),
3781
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
3782
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-sm text-foreground flex-1", children: actionLabel }),
3783
+ isDone && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-500/10 px-2 py-0.5 text-xs text-green-500", children: [
3784
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react33.Check, { className: "h-3 w-3" }),
3685
3785
  "Completed"
3686
3786
  ] }),
3687
- isError && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive", children: [
3688
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react33.AlertCircle, { className: "h-3 w-3" }),
3787
+ isError && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive", children: [
3788
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react33.AlertCircle, { className: "h-3 w-3" }),
3689
3789
  "Error"
3690
3790
  ] }),
3691
- isStreaming && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse", children: "Calling..." }),
3692
- args && (expanded ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react33.ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react33.ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground" }))
3791
+ isStreaming && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse", children: "Calling..." }),
3792
+ args && (expanded ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react33.ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react33.ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground" }))
3693
3793
  ]
3694
3794
  }
3695
3795
  ),
3696
- expanded && args && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "border-t border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("pre", { className: "text-xs text-muted-foreground overflow-x-auto", children: JSON.stringify(args, null, 2) }) })
3796
+ expanded && args && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "border-t border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("pre", { className: "text-xs text-muted-foreground overflow-x-auto", children: JSON.stringify(args, null, 2) }) })
3697
3797
  ]
3698
3798
  }
3699
3799
  );
@@ -3706,6 +3806,7 @@ function SupyagentToolCall({ part }) {
3706
3806
  CalendlyFormatter,
3707
3807
  CollapsibleResult,
3708
3808
  ComputeFormatter,
3809
+ ContextIndicator,
3709
3810
  DiscordFormatter,
3710
3811
  DocsFormatter,
3711
3812
  DriveFileFormatter,
@@ -3728,6 +3829,7 @@ function SupyagentToolCall({ part }) {
3728
3829
  SlackMessageFormatter,
3729
3830
  SlidesFormatter,
3730
3831
  StripeFormatter,
3832
+ SummaryMessage,
3731
3833
  SupyagentToolAction,
3732
3834
  SupyagentToolCall,
3733
3835
  SupyagentToolResult,
@@ -3746,6 +3848,7 @@ function SupyagentToolCall({ part }) {
3746
3848
  getProviderLabel,
3747
3849
  getSummary,
3748
3850
  humanizeToolName,
3851
+ isContextSummary,
3749
3852
  maybeNormalize,
3750
3853
  normalizeMicrosoftCalendar,
3751
3854
  normalizeMicrosoftDrive,