@mastra/playground-ui 7.0.0-beta.0 → 7.0.0-beta.1

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/index.cjs.js +330 -598
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.es.js +334 -592
  5. package/dist/index.es.js.map +1 -1
  6. package/dist/src/components/syntax-highlighter.d.ts +2 -1
  7. package/dist/src/components/ui/elements/form-fields/index.d.ts +0 -4
  8. package/dist/src/components/ui/elements/headers/index.d.ts +0 -1
  9. package/dist/src/components/ui/elements/main-sidebar/main-sidebar.d.ts +1 -1
  10. package/dist/src/components/ui/input.d.ts +1 -1
  11. package/dist/src/components/ui/syntax-highlighter.d.ts +1 -1
  12. package/dist/src/components/ui/textarea.d.ts +1 -1
  13. package/dist/src/domains/agents/context/index.d.ts +0 -1
  14. package/dist/src/domains/agents/context/model-reset-context.d.ts +0 -4
  15. package/dist/src/domains/scores/hooks/use-scorers.d.ts +2 -6
  16. package/dist/src/domains/scores/index.d.ts +1 -1
  17. package/dist/src/domains/tools/components/ToolExecutor.d.ts +1 -1
  18. package/dist/src/domains/workflows/workflow/workflow-default-node.d.ts +4 -0
  19. package/dist/src/domains/workflows/workflow/workflow-nested-node.d.ts +4 -0
  20. package/dist/src/domains/workflows/workflow/workflow-node-badges.d.ts +55 -0
  21. package/dist/src/domains/workflows/workflow/workflow-step-action-bar.d.ts +2 -1
  22. package/dist/src/ds/components/Table/Cells.d.ts +0 -3
  23. package/dist/src/index.d.ts +1 -2
  24. package/package.json +11 -9
  25. package/dist/src/components/assistant-ui/thread-list.d.ts +0 -2
  26. package/dist/src/components/assistant-ui/tools/tool-approval.d.ts +0 -8
  27. package/dist/src/components/icons/agent-icon.d.ts +0 -3
  28. package/dist/src/components/icons/automation-icon.d.ts +0 -3
  29. package/dist/src/components/ui/copyable-content.d.ts +0 -7
  30. package/dist/src/components/ui/dropdown-menu.d.ts +0 -42
  31. package/dist/src/components/ui/elements/entry-list/entry-list-toolbar.d.ts +0 -6
  32. package/dist/src/components/ui/elements/form-fields/form-actions.d.ts +0 -12
  33. package/dist/src/components/ui/elements/form-fields/radio-group-field.d.ts +0 -21
  34. package/dist/src/components/ui/elements/form-fields/slider-field.d.ts +0 -15
  35. package/dist/src/components/ui/elements/form-fields/textarea-field.d.ts +0 -11
  36. package/dist/src/components/ui/elements/headers/entity-main-header.d.ts +0 -11
  37. package/dist/src/components/ui/elements/side-dialog/side-dialog-footer.d.ts +0 -10
  38. package/dist/src/components/ui/formatted-date.d.ts +0 -3
  39. package/dist/src/components/ui/resizable.d.ts +0 -23
  40. package/dist/src/components/ui/score-indicator.d.ts +0 -3
  41. package/dist/src/components/ui/toggle.d.ts +0 -12
  42. package/dist/src/domains/agents/components/agent-metadata/connection-dot.d.ts +0 -6
  43. package/dist/src/domains/agents/components/agent-metadata/models.d.ts +0 -5
  44. package/dist/src/domains/agents/components/agent-metadata/provider-status-indicator.d.ts +0 -7
  45. package/dist/src/domains/resizable-panel.d.ts +0 -11
  46. package/dist/src/domains/scores/components/score-table.d.ts +0 -11
  47. package/dist/src/domains/tools/components/tool-table/types.d.ts +0 -2
  48. package/dist/src/domains/workflows/workflow/workflow-result.d.ts +0 -5
  49. package/dist/src/hooks/use-resize-column.d.ts +0 -12
  50. package/dist/src/lib/mastra-client.d.ts +0 -2
  51. package/dist/src/lib/pagination/types.d.ts +0 -11
  52. package/dist/src/lib/polls.d.ts +0 -36
package/dist/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useMessagePart, useMessage, MessagePrimitive, ActionBarPrimitive, useComposerRuntime, useAttachment, ComposerPrimitive, AttachmentPrimitive, useComposer, ThreadPrimitive, CompositeAttachmentAdapter, SimpleImageAttachmentAdapter, SimpleTextAttachmentAdapter, WebSpeechSynthesisAdapter, useExternalStoreRuntime, AssistantRuntimeProvider } from '@assistant-ui/react';
3
- import { CheckIcon as CheckIcon$1, CopyIcon, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, X, Share2, Check, Network, ChevronDown, PauseIcon, HourglassIcon, Loader2, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Plus, Maximize, Workflow, AlertCircleIcon, ChevronDownIcon, CirclePause, CalendarIcon, Braces, Brackets, PlusIcon, TrashIcon, Circle, StopCircle, SearchIcon, ChevronsUpDown, Search, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, RefreshCw, ExternalLink, TriangleAlertIcon, ChevronRightIcon, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, CircleAlertIcon, XIcon, PanelRightIcon, GaugeIcon, EyeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, Info, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, ChevronRight, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, ChevronsLeftRight, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, CircleSlash, Clock as Clock$1 } from 'lucide-react';
3
+ import { CheckIcon as CheckIcon$1, CopyIcon, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, X, Share2, Check, PlayCircle, Workflow, Layers, List, Clock as Clock$1, CalendarClock, Timer, CornerDownRight, GitBranch, RefreshCw, Repeat, Repeat1, Network, ChevronDown, PauseIcon, HourglassIcon, Loader2, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Plus, Maximize, AlertCircleIcon, ChevronDownIcon, CirclePause, CalendarIcon, Braces, Brackets, PlusIcon, TrashIcon, Circle, StopCircle, SearchIcon, ChevronsUpDown, Search, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, ExternalLink, TriangleAlertIcon, ChevronRightIcon, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, CircleAlertIcon, XIcon, PanelRightIcon, KeyboardIcon, GaugeIcon, EyeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, Info, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, ChevronRight, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, ChevronsLeftRight, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, CircleSlash } from 'lucide-react';
4
4
  import * as React from 'react';
5
5
  import React__default, { forwardRef, memo, useState, useEffect, useRef, useCallback, useMemo, createContext, useContext, Fragment as Fragment$1, useId, Suspense } from 'react';
6
6
  import { Slot } from '@radix-ui/react-slot';
@@ -15,7 +15,7 @@ import { coldarkDark } from 'react-syntax-highlighter/dist/cjs/styles/prism';
15
15
  import { jsonLanguage, json } from '@codemirror/lang-json';
16
16
  import { tags } from '@lezer/highlight';
17
17
  import { draculaInit } from '@uiw/codemirror-theme-dracula';
18
- import CodeMirror, { EditorView } from '@uiw/react-codemirror';
18
+ import CodeMirror, { EditorView as EditorView$1 } from '@uiw/react-codemirror';
19
19
  import { toast as toast$1 } from 'sonner';
20
20
  import './index.css';export { Toaster } from 'sonner';
21
21
  import * as DialogPrimitive from '@radix-ui/react-dialog';
@@ -25,6 +25,7 @@ import Dagre from '@dagrejs/dagre';
25
25
  import { Highlight, themes } from 'prism-react-renderer';
26
26
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
27
27
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
28
+ import { EditorView } from '@codemirror/view';
28
29
  import * as SliderPrimitive from '@radix-ui/react-slider';
29
30
  import jsonSchemaToZod from 'json-schema-to-zod';
30
31
  import { parse } from 'superjson';
@@ -4725,6 +4726,26 @@ const lodashTitleCase = (str) => {
4725
4726
  return camelCased.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase()).trim();
4726
4727
  };
4727
4728
 
4729
+ const formatMappingLabel = (stepId, prevStepIds, nextStepIds) => {
4730
+ if (!stepId.startsWith("mapping_")) {
4731
+ return stepId;
4732
+ }
4733
+ const capitalizeWords = (str) => {
4734
+ return str.split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
4735
+ };
4736
+ const formatStepName = (id) => {
4737
+ const cleaned = id.replace(/Step$/, "").replace(/[-_]/g, " ").trim();
4738
+ return capitalizeWords(cleaned);
4739
+ };
4740
+ const formatMultipleSteps = (ids, isTarget) => {
4741
+ if (ids.length === 0) return isTarget ? "End" : "Start";
4742
+ if (ids.length === 1) return formatStepName(ids[0]);
4743
+ return `${ids.length} Steps`;
4744
+ };
4745
+ const fromLabel = formatMultipleSteps(prevStepIds, false);
4746
+ const toLabel = formatMultipleSteps(nextStepIds, true);
4747
+ return `${fromLabel} → ${toLabel} Map`;
4748
+ };
4728
4749
  const getLayoutedElements = (nodes, edges) => {
4729
4750
  const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({}));
4730
4751
  g.setGraph({ rankdir: "TB" });
@@ -4821,12 +4842,15 @@ const getStepNodeAndEdge = ({
4821
4842
  position: { x: xIndex * 300, y: (yIndex + (condition ? 1 : 0)) * 100 },
4822
4843
  type: hasGraph ? "nested-node" : "default-node",
4823
4844
  data: {
4824
- label: stepFlow.step.id,
4845
+ label: formatMappingLabel(stepFlow.step.id, prevStepIds, nextStepIds),
4846
+ stepId: stepFlow.step.id,
4825
4847
  description: stepFlow.step.description,
4826
4848
  withoutTopHandle: condition ? false : !prevNodeIds.length,
4827
4849
  withoutBottomHandle: !nextNodeIds.length,
4828
4850
  stepGraph: hasGraph ? stepFlow.step.serializedStepFlow : void 0,
4829
- mapConfig: stepFlow.step.mapConfig
4851
+ mapConfig: stepFlow.step.mapConfig,
4852
+ canSuspend: stepFlow.step.canSuspend,
4853
+ isForEach: stepFlow.type === "foreach"
4830
4854
  }
4831
4855
  }
4832
4856
  ];
@@ -4944,7 +4968,8 @@ const getStepNodeAndEdge = ({
4944
4968
  description: _step.description,
4945
4969
  withoutTopHandle: !prevNodeIds.length,
4946
4970
  withoutBottomHandle: false,
4947
- stepGraph: hasGraph ? _step.serializedStepFlow : void 0
4971
+ stepGraph: hasGraph ? _step.serializedStepFlow : void 0,
4972
+ canSuspend: _step.canSuspend
4948
4973
  }
4949
4974
  },
4950
4975
  {
@@ -5006,7 +5031,14 @@ const getStepNodeAndEdge = ({
5006
5031
  nextStepFlow,
5007
5032
  allPrevNodeIds
5008
5033
  });
5009
- nodes.push(..._nodes);
5034
+ const markedNodes = _nodes.map((node) => ({
5035
+ ...node,
5036
+ data: {
5037
+ ...node.data,
5038
+ isParallel: true
5039
+ }
5040
+ }));
5041
+ nodes.push(...markedNodes);
5010
5042
  edges.push(..._edges);
5011
5043
  nextPrevStepIds.push(..._nextPrevStepIds);
5012
5044
  });
@@ -5122,6 +5154,90 @@ const CollapsibleTrigger = (props) => {
5122
5154
  };
5123
5155
  const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;
5124
5156
 
5157
+ const BADGE_COLORS = {
5158
+ sleep: "#A855F7",
5159
+ // Purple
5160
+ forEach: "#F97316",
5161
+ // Orange
5162
+ map: "#F97316",
5163
+ // Orange
5164
+ parallel: "#3B82F6",
5165
+ // Blue
5166
+ suspend: "#EC4899",
5167
+ // Pink
5168
+ after: "#14B8A6",
5169
+ // Teal
5170
+ workflow: "#8B5CF6",
5171
+ // Purple
5172
+ // Condition colors
5173
+ when: "#ECB047",
5174
+ // Orange
5175
+ dountil: "#8B5CF6",
5176
+ // Purple
5177
+ dowhile: "#06B6D4",
5178
+ // Cyan
5179
+ until: "#F59E0B",
5180
+ // Amber
5181
+ while: "#10B981",
5182
+ // Green
5183
+ if: "#3B82F6",
5184
+ // Blue
5185
+ else: "#6B7280"
5186
+ // Gray
5187
+ };
5188
+ const BADGE_ICONS = {
5189
+ sleep: Timer,
5190
+ sleepUntil: CalendarClock,
5191
+ forEach: List,
5192
+ map: List,
5193
+ parallel: Workflow,
5194
+ suspend: PlayCircle,
5195
+ after: Clock$1,
5196
+ workflow: Layers,
5197
+ // Condition icons
5198
+ when: Network,
5199
+ dountil: Repeat1,
5200
+ dowhile: Repeat,
5201
+ until: Timer,
5202
+ while: RefreshCw,
5203
+ if: GitBranch,
5204
+ else: CornerDownRight
5205
+ };
5206
+ const getConditionIconAndColor = (type) => {
5207
+ switch (type) {
5208
+ case "when":
5209
+ return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };
5210
+ case "dountil":
5211
+ return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };
5212
+ case "dowhile":
5213
+ return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };
5214
+ case "until":
5215
+ return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };
5216
+ case "while":
5217
+ return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };
5218
+ case "if":
5219
+ return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };
5220
+ case "else":
5221
+ return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };
5222
+ default:
5223
+ return { icon: void 0, color: void 0 };
5224
+ }
5225
+ };
5226
+ const getNodeBadgeInfo = (data) => {
5227
+ const isSleepNode = Boolean(data.duration || data.date);
5228
+ const isForEachNode = Boolean(data.isForEach);
5229
+ const isMapNode = Boolean(data.mapConfig && !data.isForEach);
5230
+ const isNestedWorkflow = Boolean(data.stepGraph);
5231
+ const hasSpecialBadge = isSleepNode || data.canSuspend || data.isParallel || isForEachNode || isMapNode || isNestedWorkflow;
5232
+ return {
5233
+ isSleepNode,
5234
+ isForEachNode,
5235
+ isMapNode,
5236
+ isNestedWorkflow,
5237
+ hasSpecialBadge
5238
+ };
5239
+ };
5240
+
5125
5241
  const useAutoscroll = (ref, { enabled = true }) => {
5126
5242
  const shouldScrollRef = useRef(enabled);
5127
5243
  React__default.useEffect(() => {
@@ -5218,8 +5334,8 @@ const useCurrentRun = () => {
5218
5334
  };
5219
5335
 
5220
5336
  const useCodemirrorTheme$1 = () => {
5221
- return useMemo(
5222
- () => draculaInit({
5337
+ return useMemo(() => {
5338
+ const baseTheme = draculaInit({
5223
5339
  settings: {
5224
5340
  fontFamily: "var(--geist-mono)",
5225
5341
  fontSize: "0.8rem",
@@ -5229,9 +5345,20 @@ const useCodemirrorTheme$1 = () => {
5229
5345
  background: "transparent"
5230
5346
  },
5231
5347
  styles: [{ tag: [tags.className, tags.propertyName] }]
5232
- }),
5233
- []
5234
- );
5348
+ });
5349
+ const customLineNumberTheme = EditorView.theme({
5350
+ ".cm-editor": {
5351
+ colorScheme: "dark",
5352
+ // ensures color scheme
5353
+ backgroundColor: "transparent"
5354
+ },
5355
+ ".cm-lineNumbers .cm-gutterElement": {
5356
+ color: "#939393"
5357
+ // ← custom line number color
5358
+ }
5359
+ });
5360
+ return [baseTheme, customLineNumberTheme];
5361
+ }, []);
5235
5362
  };
5236
5363
  const SyntaxHighlighter$1 = ({ data }) => {
5237
5364
  const formattedCode = JSON.stringify(data, null, 2);
@@ -5268,6 +5395,7 @@ const WorkflowStepActionBar = ({
5268
5395
  error,
5269
5396
  mapConfig,
5270
5397
  stepName,
5398
+ stepId,
5271
5399
  onShowNestedGraph,
5272
5400
  status
5273
5401
  }) => {
@@ -5294,10 +5422,13 @@ const WorkflowStepActionBar = ({
5294
5422
  mapConfig && /* @__PURE__ */ jsxs(Fragment, { children: [
5295
5423
  /* @__PURE__ */ jsx(Button$1, { onClick: () => setIsMapConfigOpen(true), children: "Map config" }),
5296
5424
  /* @__PURE__ */ jsx(Dialog, { open: isMapConfigOpen, onOpenChange: setIsMapConfigOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: dialogContentClass, children: [
5297
- /* @__PURE__ */ jsxs(DialogTitle, { className: dialogTitleClass, children: [
5298
- stepName,
5299
- " map config"
5300
- ] }),
5425
+ /* @__PURE__ */ jsx(DialogTitle, { className: dialogTitleClass, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
5426
+ /* @__PURE__ */ jsxs("div", { children: [
5427
+ stepName,
5428
+ " Map Config"
5429
+ ] }),
5430
+ stepId && stepId !== stepName && /* @__PURE__ */ jsx("div", { className: "text-xs text-icon3 font-normal", children: stepId })
5431
+ ] }) }),
5301
5432
  /* @__PURE__ */ jsx("div", { className: "px-4 overflow-hidden", children: /* @__PURE__ */ jsx(CodeDialogContent, { data: mapConfig }) })
5302
5433
  ] }) })
5303
5434
  ] }),
@@ -5355,6 +5486,7 @@ function WorkflowConditionNode({ data }) {
5355
5486
  const { steps } = useCurrentRun();
5356
5487
  const previousStep = steps[previousStepId];
5357
5488
  const nextStep = steps[nextStepId];
5489
+ const { icon: IconComponent, color } = getConditionIconAndColor(type);
5358
5490
  return /* @__PURE__ */ jsxs(Fragment, { children: [
5359
5491
  !withoutTopHandle && /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: { visibility: "hidden" } }),
5360
5492
  /* @__PURE__ */ jsxs(
@@ -5381,7 +5513,13 @@ function WorkflowConditionNode({ data }) {
5381
5513
  },
5382
5514
  children: [
5383
5515
  /* @__PURE__ */ jsxs(CollapsibleTrigger, { className: "flex items-center justify-between w-full px-3 py-2", children: [
5384
- /* @__PURE__ */ jsx(Badge, { icon: type === "when" ? /* @__PURE__ */ jsx(Network, { className: "text-[#ECB047]" }) : null, children: type?.toUpperCase() }),
5516
+ /* @__PURE__ */ jsx(
5517
+ Badge,
5518
+ {
5519
+ icon: IconComponent ? /* @__PURE__ */ jsx(IconComponent, { className: "text-current", ...color ? { style: { color } } : {} }) : null,
5520
+ children: type?.toUpperCase()
5521
+ }
5522
+ ),
5385
5523
  isCollapsible && /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(
5386
5524
  ChevronDown,
5387
5525
  {
@@ -5392,6 +5530,21 @@ function WorkflowConditionNode({ data }) {
5392
5530
  ) })
5393
5531
  ] }),
5394
5532
  type === "else" ? null : /* @__PURE__ */ jsx(CollapsibleContent, { className: "flex flex-col gap-2 pb-2", children: conditions.map((condition, index) => {
5533
+ const conjType = condition.conj || type;
5534
+ const { icon: ConjIconComponent, color: conjColor } = getConditionIconAndColor(conjType);
5535
+ const conjBadge = index === 0 ? null : /* @__PURE__ */ jsx(
5536
+ Badge,
5537
+ {
5538
+ icon: ConjIconComponent ? /* @__PURE__ */ jsx(
5539
+ ConjIconComponent,
5540
+ {
5541
+ className: "text-current",
5542
+ ...conjColor ? { style: { color: conjColor } } : {}
5543
+ }
5544
+ ) : null,
5545
+ children: condition.conj?.toLocaleUpperCase() || "WHEN"
5546
+ }
5547
+ );
5395
5548
  return condition.fnString ? /* @__PURE__ */ jsxs("div", { className: "px-3", children: [
5396
5549
  /* @__PURE__ */ jsx(Highlight, { theme: themes.oneDark, code: String(condition.fnString).trim(), language: "javascript", children: ({ className, style, tokens, getLineProps, getTokenProps }) => /* @__PURE__ */ jsx(
5397
5550
  "pre",
@@ -5437,7 +5590,7 @@ function WorkflowConditionNode({ data }) {
5437
5590
  ) })
5438
5591
  ] }) })
5439
5592
  ] }, `${condition.fnString}-${index}`) : /* @__PURE__ */ jsx(Fragment$1, { children: condition.ref?.step ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
5440
- index === 0 ? null : /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(Network, { className: "text-[#ECB047]" }), children: condition.conj?.toLocaleUpperCase() || "WHEN" }),
5593
+ conjBadge,
5441
5594
  /* @__PURE__ */ jsxs(Text, { size: "xs", className: " text-mastra-el-3 flex-1", children: [
5442
5595
  condition.ref.step.id || condition.ref.step,
5443
5596
  "'s ",
@@ -5487,9 +5640,29 @@ const Clock = ({ startedAt, endedAt }) => {
5487
5640
 
5488
5641
  function WorkflowDefaultNode({ data, parentWorkflowName }) {
5489
5642
  const { steps, runId } = useCurrentRun();
5490
- const { label, description, withoutTopHandle, withoutBottomHandle, mapConfig, duration, date } = data;
5491
- const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;
5492
- const step = steps[fullLabel];
5643
+ const {
5644
+ label,
5645
+ stepId,
5646
+ description,
5647
+ withoutTopHandle,
5648
+ withoutBottomHandle,
5649
+ mapConfig,
5650
+ duration,
5651
+ date,
5652
+ isParallel,
5653
+ canSuspend,
5654
+ isForEach
5655
+ } = data;
5656
+ const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;
5657
+ const step = steps[stepKey];
5658
+ const { isSleepNode, isForEachNode, isMapNode, hasSpecialBadge } = getNodeBadgeInfo({
5659
+ duration,
5660
+ date,
5661
+ isForEach,
5662
+ mapConfig,
5663
+ canSuspend,
5664
+ isParallel
5665
+ });
5493
5666
  return /* @__PURE__ */ jsxs(Fragment, { children: [
5494
5667
  !withoutTopHandle && /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: { visibility: "hidden" } }),
5495
5668
  /* @__PURE__ */ jsxs(
@@ -5499,7 +5672,8 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5499
5672
  "data-workflow-step-status": step?.status ?? "idle",
5500
5673
  "data-testid": "workflow-default-node",
5501
5674
  className: cn(
5502
- "bg-surface3 rounded-lg w-[274px] border-sm border-border1 pt-2",
5675
+ "bg-surface3 rounded-lg w-[274px] border-sm border-border1",
5676
+ hasSpecialBadge ? "pt-0" : "pt-2",
5503
5677
  step?.status === "success" && "bg-accent1Darker",
5504
5678
  step?.status === "failed" && "bg-accent2Darker",
5505
5679
  step?.status === "suspended" && "bg-accent3Darker",
@@ -5507,6 +5681,19 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5507
5681
  step?.status === "running" && "bg-accent6Darker"
5508
5682
  ),
5509
5683
  children: [
5684
+ hasSpecialBadge && /* @__PURE__ */ jsxs("div", { className: "px-3 pt-2 pb-1 flex gap-1.5 flex-wrap", children: [
5685
+ isSleepNode && /* @__PURE__ */ jsx(
5686
+ Badge,
5687
+ {
5688
+ icon: date ? /* @__PURE__ */ jsx(BADGE_ICONS.sleepUntil, { className: "text-current", style: { color: BADGE_COLORS.sleep } }) : /* @__PURE__ */ jsx(BADGE_ICONS.sleep, { className: "text-current", style: { color: BADGE_COLORS.sleep } }),
5689
+ children: date ? "SLEEP UNTIL" : "SLEEP"
5690
+ }
5691
+ ),
5692
+ canSuspend && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.suspend, { className: "text-current", style: { color: BADGE_COLORS.suspend } }), children: "SUSPEND/RESUME" }),
5693
+ isParallel && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.parallel, { className: "text-current", style: { color: BADGE_COLORS.parallel } }), children: "PARALLEL" }),
5694
+ isForEachNode && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.forEach, { className: "text-current", style: { color: BADGE_COLORS.forEach } }), children: "FOREACH" }),
5695
+ isMapNode && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.map, { className: "text-current", style: { color: BADGE_COLORS.map } }), children: "MAP" })
5696
+ ] }),
5510
5697
  /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 px-3", !description && "pb-2"), children: [
5511
5698
  /* @__PURE__ */ jsxs(Icon, { children: [
5512
5699
  step?.status === "failed" && /* @__PURE__ */ jsx(CrossIcon, { className: "text-accent2" }),
@@ -5538,6 +5725,7 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5538
5725
  WorkflowStepActionBar,
5539
5726
  {
5540
5727
  stepName: label,
5728
+ stepId,
5541
5729
  input: step?.input,
5542
5730
  resumeData: step?.resumeData,
5543
5731
  output: step?.output,
@@ -5565,23 +5753,15 @@ function WorkflowAfterNode({ data }) {
5565
5753
  children: [
5566
5754
  /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: { visibility: "hidden" } }),
5567
5755
  /* @__PURE__ */ jsxs(CollapsibleTrigger, { className: "flex items-center justify-between w-full", children: [
5568
- /* @__PURE__ */ jsx(
5569
- Text,
5570
- {
5571
- size: "xs",
5572
- weight: "medium",
5573
- className: "text-mastra-el-3 bg-mastra-bg-11 my-auto block rounded-[0.125rem] px-2 py-1 text-[10px] w-fit",
5574
- children: "AFTER"
5575
- }
5576
- ),
5577
- /* @__PURE__ */ jsx(
5756
+ /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.after, { className: "text-current", style: { color: BADGE_COLORS.after } }), children: "AFTER" }),
5757
+ /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(
5578
5758
  ChevronDown,
5579
5759
  {
5580
- className: cn("w-4 h-4 transition-transform", {
5760
+ className: cn("transition-transform text-icon3", {
5581
5761
  "transform rotate-180": open
5582
5762
  })
5583
5763
  }
5584
- )
5764
+ ) })
5585
5765
  ] }),
5586
5766
  /* @__PURE__ */ jsx(CollapsibleContent, { className: "flex flex-col gap-2", children: steps.map((step) => /* @__PURE__ */ jsxs("div", { className: "text-sm bg-mastra-bg-9 flex items-center gap-[6px] rounded-sm p-2", children: [
5587
5767
  /* @__PURE__ */ jsx(Footprints, { className: "text-current w-4 h-4" }),
@@ -5787,9 +5967,28 @@ function WorkflowNestedGraphProvider({ children }) {
5787
5967
  function WorkflowNestedNode({ data, parentWorkflowName }) {
5788
5968
  const { steps } = useCurrentRun();
5789
5969
  const { showNestedGraph } = useContext(WorkflowNestedGraphContext);
5790
- const { label, description, withoutTopHandle, withoutBottomHandle, stepGraph, mapConfig } = data;
5970
+ const {
5971
+ label,
5972
+ stepId,
5973
+ description,
5974
+ withoutTopHandle,
5975
+ withoutBottomHandle,
5976
+ stepGraph,
5977
+ mapConfig,
5978
+ isParallel,
5979
+ canSuspend,
5980
+ isForEach
5981
+ } = data;
5791
5982
  const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;
5792
- const step = steps[fullLabel];
5983
+ const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;
5984
+ const step = steps[stepKey];
5985
+ const { isForEachNode, isMapNode, isNestedWorkflow, hasSpecialBadge } = getNodeBadgeInfo({
5986
+ isForEach,
5987
+ mapConfig,
5988
+ canSuspend,
5989
+ isParallel,
5990
+ stepGraph
5991
+ });
5793
5992
  return /* @__PURE__ */ jsxs(Fragment, { children: [
5794
5993
  !withoutTopHandle && /* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: { visibility: "hidden" } }),
5795
5994
  /* @__PURE__ */ jsxs(
@@ -5799,7 +5998,8 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5799
5998
  "data-workflow-node": true,
5800
5999
  "data-workflow-step-status": step?.status,
5801
6000
  className: cn(
5802
- "bg-surface3 rounded-lg w-[274px] border-sm border-border1 pt-2",
6001
+ "bg-surface3 rounded-lg w-[274px] border-sm border-border1",
6002
+ hasSpecialBadge ? "pt-0" : "pt-2",
5803
6003
  step?.status === "success" && "bg-accent1Darker",
5804
6004
  step?.status === "failed" && "bg-accent2Darker",
5805
6005
  step?.status === "suspended" && "bg-accent3Darker",
@@ -5807,6 +6007,13 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5807
6007
  step?.status === "running" && "bg-accent6Darker"
5808
6008
  ),
5809
6009
  children: [
6010
+ hasSpecialBadge && /* @__PURE__ */ jsxs("div", { className: "px-3 pt-2 pb-1 flex gap-1.5 flex-wrap", children: [
6011
+ canSuspend && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.suspend, { className: "text-current", style: { color: BADGE_COLORS.suspend } }), children: "SUSPEND/RESUME" }),
6012
+ isParallel && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.parallel, { className: "text-current", style: { color: BADGE_COLORS.parallel } }), children: "PARALLEL" }),
6013
+ isNestedWorkflow && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.workflow, { className: "text-current", style: { color: BADGE_COLORS.workflow } }), children: "WORKFLOW" }),
6014
+ isForEachNode && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.forEach, { className: "text-current", style: { color: BADGE_COLORS.forEach } }), children: "FOREACH" }),
6015
+ isMapNode && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(BADGE_ICONS.map, { className: "text-current", style: { color: BADGE_COLORS.map } }), children: "MAP" })
6016
+ ] }),
5810
6017
  /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 px-3", !description && "pb-2"), children: [
5811
6018
  /* @__PURE__ */ jsxs(Icon, { children: [
5812
6019
  step?.status === "failed" && /* @__PURE__ */ jsx(CrossIcon, { className: "text-accent2" }),
@@ -5827,6 +6034,7 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5827
6034
  WorkflowStepActionBar,
5828
6035
  {
5829
6036
  stepName: label,
6037
+ stepId,
5830
6038
  input: step?.input,
5831
6039
  resumeData: step?.resumeData,
5832
6040
  output: step?.output,
@@ -7549,12 +7757,6 @@ const Cell = ({ className, children, ...props }) => {
7549
7757
  const TxtCell = ({ className, children }) => {
7550
7758
  return /* @__PURE__ */ jsx(Cell, { className, children: /* @__PURE__ */ jsx(Txt, { as: "span", variant: "ui-md", className: "w-full truncate", children }) });
7551
7759
  };
7552
- const UnitCell = ({ className, children, unit }) => {
7553
- return /* @__PURE__ */ jsx(Cell, { className, children: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center", children: [
7554
- /* @__PURE__ */ jsx(Txt, { as: "span", variant: "ui-md", className: "shrink-0", children }),
7555
- /* @__PURE__ */ jsx(Txt, { as: "span", variant: "ui-sm", className: "text-icon3 w-full truncate", children: unit })
7556
- ] }) });
7557
- };
7558
7760
  const DateTimeCell = ({ dateTime, ...props }) => {
7559
7761
  const { day, time } = formatDateCell(dateTime);
7560
7762
  return /* @__PURE__ */ jsx(Cell, { ...props, children: /* @__PURE__ */ jsxs("div", { className: "shrink-0", children: [
@@ -10440,32 +10642,6 @@ const useAgentSettings = () => {
10440
10642
  return useContext(AgentSettingsContext);
10441
10643
  };
10442
10644
 
10443
- const ModelResetContext = createContext(null);
10444
- function ModelResetProvider({ children }) {
10445
- const resetFnRef = useRef(null);
10446
- const registerResetFn = useCallback((fn) => {
10447
- resetFnRef.current = fn;
10448
- }, []);
10449
- const triggerReset = useCallback(() => {
10450
- if (resetFnRef.current) {
10451
- resetFnRef.current();
10452
- }
10453
- }, []);
10454
- return /* @__PURE__ */ jsx(ModelResetContext.Provider, { value: { registerResetFn, triggerReset }, children });
10455
- }
10456
- function useModelReset() {
10457
- const context = useContext(ModelResetContext);
10458
- if (!context) {
10459
- return {
10460
- registerResetFn: () => {
10461
- },
10462
- triggerReset: () => {
10463
- }
10464
- };
10465
- }
10466
- return context;
10467
- }
10468
-
10469
10645
  const resolveInstructionPart = (part) => {
10470
10646
  if (typeof part === "string") {
10471
10647
  return part.trim();
@@ -11826,104 +12002,6 @@ function InputField({
11826
12002
  );
11827
12003
  }
11828
12004
 
11829
- function TextareaField({
11830
- value,
11831
- label,
11832
- helpText,
11833
- className,
11834
- testId,
11835
- type,
11836
- disabled,
11837
- ...props
11838
- }) {
11839
- return /* @__PURE__ */ jsxs(
11840
- "div",
11841
- {
11842
- className: cn(
11843
- "grid gap-[.5rem] grid-rows-[auto_1fr]",
11844
- {
11845
- "grid-rows-[auto_1fr_auto]": helpText
11846
- },
11847
- className
11848
- ),
11849
- children: [
11850
- label && /* @__PURE__ */ jsx("label", { className: cn("text-[0.8125rem] text-icon3 flex justify-between items-center"), children: label }),
11851
- /* @__PURE__ */ jsx(
11852
- "textarea",
11853
- {
11854
- className: cn(
11855
- "flex w-full items-center leading-[1.6] text-[0.875rem] text-[rgba(255,255,255,0.7)] border border-[rgba(255,255,255,0.15)] rounded-lg bg-transparent py-[0.5rem] px-[0.75rem] min-h-[6rem]",
11856
- "focus:outline-none focus:shadow-[inset_0_0_0_1px_#18fb6f]",
11857
- { "cursor-not-allowed opacity-50": disabled }
11858
- ),
11859
- "data-testid": testId,
11860
- ...props,
11861
- children: value
11862
- }
11863
- ),
11864
- helpText && /* @__PURE__ */ jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpText })
11865
- ]
11866
- }
11867
- );
11868
- }
11869
-
11870
- const Button = React__default.forwardRef(
11871
- ({ className, variant = "outline", ...props }, ref) => {
11872
- return /* @__PURE__ */ jsx(
11873
- "button",
11874
- {
11875
- ref,
11876
- className: cn(
11877
- "text-[.875rem] inline-flex items-center justify-center rounded-lg px-[1rem] gap-[.75rem] leading-0 border bg-transparent text-[rgba(255,255,255,0.7)] whitespace-nowrap",
11878
- "[&:not(:disabled):hover]:border-[rgba(255,255,255,0.25)] [&:not(:disabled):hover]:text-[rgba(255,255,255,0.9)]",
11879
- "[&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:mx-[-0.3em] [&>svg]:opacity-70 [&>svg]:shrink-0",
11880
- "focus:outline-none focus:shadow-[inset_0_0_0_1px_rgba(24,251,111,0.75)]",
11881
- className,
11882
- {
11883
- "cursor-not-allowed opacity-50": props.disabled,
11884
- "bg-ui-primaryBtnBg text-ui-primaryBtnText hover:bg-surface6 leading-[0] font-semibold": variant === "primary",
11885
- "min-h-[2rem]": variant === "ghost",
11886
- "min-h-[2.5rem]": variant !== "ghost",
11887
- "border-[rgba(255,255,255,0.15)]": variant === "outline"
11888
- }
11889
- ),
11890
- ...props
11891
- }
11892
- );
11893
- }
11894
- );
11895
- Button.displayName = "Button";
11896
-
11897
- function FormActions({
11898
- children,
11899
- onSubmit,
11900
- onCancel,
11901
- className,
11902
- submitLabel,
11903
- cancelLabel,
11904
- isSubmitting,
11905
- variant = "toLeft"
11906
- }) {
11907
- if (!children && (!onSubmit || !onCancel)) {
11908
- console.warn("FormActions requires either children or onSubmit and onCancel props");
11909
- return null;
11910
- }
11911
- return /* @__PURE__ */ jsx(
11912
- "div",
11913
- {
11914
- className: cn(
11915
- "flex gap-[1rem] items-center justify-start",
11916
- { "justify-end": variant === "toRight", "grid w-full grid-cols-[1fr_auto]": variant === "stretch" },
11917
- className
11918
- ),
11919
- children: children ? children : /* @__PURE__ */ jsxs(Fragment, { children: [
11920
- /* @__PURE__ */ jsx(Button, { onClick: onSubmit, className: "min-w-[12rem]", disabled: isSubmitting, variant: "primary", children: submitLabel || "Submit" }),
11921
- /* @__PURE__ */ jsx(Button, { onClick: onCancel, children: cancelLabel || "Cancel" })
11922
- ] })
11923
- }
11924
- );
11925
- }
11926
-
11927
12005
  function SelectField({
11928
12006
  name,
11929
12007
  value,
@@ -11972,158 +12050,6 @@ function SelectField({
11972
12050
  );
11973
12051
  }
11974
12052
 
11975
- function SliderField({
11976
- name,
11977
- value,
11978
- label,
11979
- className,
11980
- testId,
11981
- required,
11982
- disabled,
11983
- helpMsg,
11984
- errorMsg,
11985
- onChange,
11986
- ...props
11987
- }) {
11988
- return /* @__PURE__ */ jsxs(
11989
- "div",
11990
- {
11991
- className: cn(
11992
- "grid gap-[.5rem] grid-rows-[auto_1fr]",
11993
- {
11994
- "grid-rows-[auto_1fr_auto]": helpMsg
11995
- },
11996
- className
11997
- ),
11998
- children: [
11999
- /* @__PURE__ */ jsxs("label", { className: cn("text-[0.8125rem] text-icon3 flex justify-between items-center"), children: [
12000
- label,
12001
- required && /* @__PURE__ */ jsx("i", { className: "text-icon2", children: "(required)" })
12002
- ] }),
12003
- /* @__PURE__ */ jsxs("div", { className: cn("grid w-full items-center gap-[1rem] grid-cols-[1fr_auto]"), children: [
12004
- /* @__PURE__ */ jsxs(
12005
- SliderPrimitive.Root,
12006
- {
12007
- name,
12008
- className: cn("relative flex w-full touch-none select-none items-center ", className),
12009
- value,
12010
- disabled,
12011
- ...props,
12012
- children: [
12013
- /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-[4px] w-full grow overflow-hidden rounded-full bg-gray-600", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-gray-400" }) }),
12014
- /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-4 w-4 rounded-full bg-gray-400 shadow transition-colors focus:outline-none focus:bg-[#18fb6f] disabled:pointer-events-none disabled:opacity-50" })
12015
- ]
12016
- }
12017
- ),
12018
- /* @__PURE__ */ jsx("span", { className: "text-icon4 text-[0.875rem] flex justify-end", children: value })
12019
- ] }),
12020
- helpMsg && /* @__PURE__ */ jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpMsg }),
12021
- errorMsg && /* @__PURE__ */ jsxs(
12022
- "p",
12023
- {
12024
- className: cn(
12025
- "text-[0.75rem] text-red-500 flex items-center gap-[.5rem]",
12026
- "[&>svg]:w-[1.1em] [&>svg]:h-[1.1em] [&>svg]:opacity-70"
12027
- ),
12028
- children: [
12029
- /* @__PURE__ */ jsx(TriangleAlertIcon, {}),
12030
- " ",
12031
- errorMsg
12032
- ]
12033
- }
12034
- )
12035
- ]
12036
- }
12037
- );
12038
- }
12039
-
12040
- function RadioGroupField({
12041
- name,
12042
- value,
12043
- label,
12044
- className,
12045
- testId,
12046
- required,
12047
- disabled,
12048
- helpMsg,
12049
- errorMsg,
12050
- onChange,
12051
- options = [],
12052
- layout = "vertical",
12053
- onValueChange,
12054
- ...props
12055
- }) {
12056
- const Wrapper = layout === "horizontal" ? "div" : "fieldset";
12057
- return /* @__PURE__ */ jsxs(
12058
- Wrapper,
12059
- {
12060
- className: cn(
12061
- "w-full",
12062
- {
12063
- "flex items-center gap-[2rem]": layout === "horizontal"
12064
- },
12065
- className
12066
- ),
12067
- role: layout === "horizontal" ? "radiogroup" : void 0,
12068
- "aria-labelledby": layout === "horizontal" ? void 0 : `${name}-legend`,
12069
- children: [
12070
- /* @__PURE__ */ jsx("legend", { id: `${name}-legend`, className: cn("text-[0.8125rem] text-icon3"), children: label }),
12071
- /* @__PURE__ */ jsxs(
12072
- "div",
12073
- {
12074
- className: cn("grid gap-[2.5rem]", {
12075
- "mt-[0.5rem]": layout === "vertical",
12076
- "grid-rows-[1fr_auto]": helpMsg
12077
- }),
12078
- children: [
12079
- /* @__PURE__ */ jsx(
12080
- RadioGroupPrimitive.Root,
12081
- {
12082
- value,
12083
- onValueChange,
12084
- ...props,
12085
- className: cn({
12086
- "grid gap-[0.5rem]": layout === "vertical",
12087
- "flex gap-[1rem]": layout === "horizontal"
12088
- }),
12089
- children: options.map((option) => {
12090
- return /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-[0.5rem] text-[0.875rem] text-icon4 ", children: [
12091
- /* @__PURE__ */ jsx(
12092
- RadioGroupPrimitive.Item,
12093
- {
12094
- className: "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ",
12095
- value: option.value,
12096
- children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
12097
- }
12098
- ),
12099
- option.label
12100
- ] }, option.value);
12101
- })
12102
- }
12103
- ),
12104
- helpMsg && /* @__PURE__ */ jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpMsg }),
12105
- errorMsg && /* @__PURE__ */ jsxs(
12106
- "p",
12107
- {
12108
- className: cn(
12109
- "text-[0.75rem] text-red-500 flex items-center gap-[.5rem]",
12110
- "[&>svg]:w-[1.1em] [&>svg]:h-[1.1em] [&>svg]:opacity-70"
12111
- ),
12112
- children: [
12113
- /* @__PURE__ */ jsx(TriangleAlertIcon, {}),
12114
- " ",
12115
- errorMsg
12116
- ]
12117
- }
12118
- )
12119
- ]
12120
- }
12121
- )
12122
- ]
12123
- }
12124
- );
12125
- }
12126
-
12127
12053
  function KeyValueList({ data, LinkComponent, className, labelsAreHidden, isLoading }) {
12128
12054
  const { Link } = useLinkComponent();
12129
12055
  const LabelWrapper = ({ children }) => {
@@ -12483,6 +12409,33 @@ function SideDialogRoot({
12483
12409
  ] }) });
12484
12410
  }
12485
12411
 
12412
+ const Button = React__default.forwardRef(
12413
+ ({ className, variant = "outline", ...props }, ref) => {
12414
+ return /* @__PURE__ */ jsx(
12415
+ "button",
12416
+ {
12417
+ ref,
12418
+ className: cn(
12419
+ "text-[.875rem] inline-flex items-center justify-center rounded-lg px-[1rem] gap-[.75rem] leading-0 border bg-transparent text-[rgba(255,255,255,0.7)] whitespace-nowrap",
12420
+ "[&:not(:disabled):hover]:border-[rgba(255,255,255,0.25)] [&:not(:disabled):hover]:text-[rgba(255,255,255,0.9)]",
12421
+ "[&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:mx-[-0.3em] [&>svg]:opacity-70 [&>svg]:shrink-0",
12422
+ "focus:outline-none focus:shadow-[inset_0_0_0_1px_rgba(24,251,111,0.75)]",
12423
+ className,
12424
+ {
12425
+ "cursor-not-allowed opacity-50": props.disabled,
12426
+ "bg-ui-primaryBtnBg text-ui-primaryBtnText hover:bg-surface6 leading-[0] font-semibold": variant === "primary",
12427
+ "min-h-[2rem]": variant === "ghost",
12428
+ "min-h-[2.5rem]": variant !== "ghost",
12429
+ "border-[rgba(255,255,255,0.15)]": variant === "outline"
12430
+ }
12431
+ ),
12432
+ ...props
12433
+ }
12434
+ );
12435
+ }
12436
+ );
12437
+ Button.displayName = "Button";
12438
+
12486
12439
  function MainContentLayout({
12487
12440
  children,
12488
12441
  className,
@@ -12614,7 +12567,7 @@ function SideDialogCodeSection({ codeStr = "", title, icon, simplified = false }
12614
12567
  hasMultilineText && /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: () => setShowAsMultilineText(!showAsMultilineText), children: showAsMultilineText ? /* @__PURE__ */ jsx(AlignLeftIcon, {}) : /* @__PURE__ */ jsx(AlignJustifyIcon, {}) })
12615
12568
  ] })
12616
12569
  ] }),
12617
- codeStr && /* @__PURE__ */ jsx("div", { className: "bg-black/20 p-[1rem] overflow-hidden rounded-xl border border-white/10 text-icon4 text-[0.875rem] break-all", children: simplified ? /* @__PURE__ */ jsx("div", { className: "text-icon4 font-mono break-all px-[0.5rem]", children: /* @__PURE__ */ jsx("pre", { className: "text-wrap", children: codeStr }) }) : /* @__PURE__ */ jsx(CodeMirror, { extensions: [json(), EditorView.lineWrapping], theme, value: finalCodeStr }) })
12570
+ codeStr && /* @__PURE__ */ jsx("div", { className: "bg-black/20 p-[1rem] overflow-hidden rounded-xl border border-white/10 text-icon4 text-[0.875rem] break-all", children: simplified ? /* @__PURE__ */ jsx("div", { className: "text-icon4 font-mono break-all px-[0.5rem]", children: /* @__PURE__ */ jsx("pre", { className: "text-wrap", children: codeStr }) }) : /* @__PURE__ */ jsx(CodeMirror, { extensions: [json(), EditorView$1.lineWrapping], theme, value: finalCodeStr }) })
12618
12571
  ] });
12619
12572
  }
12620
12573
  function containsInnerNewline(obj) {
@@ -12711,39 +12664,6 @@ const SideDialog = Object.assign(SideDialogRoot, {
12711
12664
  Nav: SideDialogNav
12712
12665
  });
12713
12666
 
12714
- function EntityMainHeader({
12715
- title,
12716
- description,
12717
- icon,
12718
- children,
12719
- isLoading,
12720
- className,
12721
- placement = "page"
12722
- }) {
12723
- return /* @__PURE__ */ jsxs(
12724
- "header",
12725
- {
12726
- className: cn(
12727
- "grid gap-[.5rem]",
12728
- "[&>h1]:text-icon6 [&>h1]:text-[1.25rem] [&>h1]:font-normal [&>h1]:flex [&>h1]:items-center [&>h1]:gap-[0.5rem]",
12729
- "[&_svg]:w-[1.4rem] [&_svg]:h-[1.4rem] [&_svg]:text-icon3",
12730
- "[&>p]:text-icon4 [&>p]:text-[0.875rem] [&>p]:m-0",
12731
- { "pt-[2rem] pb-[2rem]": placement === "page" },
12732
- { "pt-[1.5em] pb-[1rem]": placement === "sidebar" },
12733
- className
12734
- ),
12735
- children: [
12736
- /* @__PURE__ */ jsxs("h1", { children: [
12737
- icon && icon,
12738
- " ",
12739
- title
12740
- ] }),
12741
- description && /* @__PURE__ */ jsx("p", { children: description })
12742
- ]
12743
- }
12744
- );
12745
- }
12746
-
12747
12667
  function PageHeader({ title, description, icon, className }) {
12748
12668
  const titleIsLoading = title === "loading";
12749
12669
  const descriptionIsLoading = description === "loading";
@@ -13187,11 +13107,23 @@ function MainSidebarNavSeparator({ className }) {
13187
13107
  function MainSidebarRoot({ children, className }) {
13188
13108
  const { state, toggleSidebar } = useMainSidebar();
13189
13109
  const isCollapsed = state === "collapsed";
13110
+ useEffect(() => {
13111
+ const handleKeyDown = (event) => {
13112
+ if (event.ctrlKey && event.key === "b") {
13113
+ event.preventDefault();
13114
+ toggleSidebar();
13115
+ }
13116
+ };
13117
+ document.addEventListener("keydown", handleKeyDown);
13118
+ return () => {
13119
+ document.removeEventListener("keydown", handleKeyDown);
13120
+ };
13121
+ }, [toggleSidebar]);
13190
13122
  return /* @__PURE__ */ jsxs(
13191
13123
  "div",
13192
13124
  {
13193
13125
  className: cn(
13194
- "flex flex-col h-full px-[1rem] pb-[1rem] relative overflow-y-auto",
13126
+ "flex flex-col h-full px-[1rem] relative overflow-y-auto",
13195
13127
  {
13196
13128
  "lg:min-w-[13rem] xl:min-w-[14rem] 2xl:min-w-[15rem] 3xl:min-w-[16rem] 4xl:min-w-[17rem]": !isCollapsed
13197
13129
  },
@@ -13199,30 +13131,41 @@ function MainSidebarRoot({ children, className }) {
13199
13131
  ),
13200
13132
  children: [
13201
13133
  children,
13202
- /* @__PURE__ */ jsx(MainSidebarNavSeparator, {}),
13203
- /* @__PURE__ */ jsx(
13204
- "button",
13205
- {
13206
- onClick: toggleSidebar,
13207
- className: cn(
13208
- "inline-flex w-auto items-center text-icon3 h-[2rem] px-[0.75rem] rounded-md",
13209
- "hover:bg-surface4",
13210
- "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-icon3",
13211
- {
13212
- "ml-auto": !isCollapsed
13213
- }
13214
- ),
13215
- "aria-label": "Toggle sidebar",
13216
- children: /* @__PURE__ */ jsx(
13217
- PanelRightIcon,
13134
+ /* @__PURE__ */ jsxs("div", { className: "bg-surface1 grid sticky bottom-0 pb-[.75rem] ", children: [
13135
+ /* @__PURE__ */ jsx(MainSidebarNavSeparator, {}),
13136
+ /* @__PURE__ */ jsxs(Tooltip, { children: [
13137
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
13138
+ "button",
13218
13139
  {
13219
- className: cn({
13220
- "rotate-180": isCollapsed
13221
- })
13140
+ onClick: toggleSidebar,
13141
+ className: cn(
13142
+ "inline-flex w-auto items-center text-icon3 h-[2rem] px-[0.75rem] rounded-md ml-auto",
13143
+ "hover:bg-surface4",
13144
+ "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-icon3",
13145
+ {
13146
+ "ml-auto": !isCollapsed
13147
+ }
13148
+ ),
13149
+ "aria-label": "Toggle sidebar",
13150
+ children: /* @__PURE__ */ jsx(
13151
+ PanelRightIcon,
13152
+ {
13153
+ className: cn({
13154
+ "rotate-180": isCollapsed
13155
+ })
13156
+ }
13157
+ )
13222
13158
  }
13223
- )
13224
- }
13225
- ),
13159
+ ) }),
13160
+ /* @__PURE__ */ jsxs(TooltipContent, { children: [
13161
+ "Toggle Sidebar",
13162
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 [&>svg]:w-[1em] [&>svg]:h-[1em]", children: [
13163
+ /* @__PURE__ */ jsx(KeyboardIcon, {}),
13164
+ " Ctrl+B"
13165
+ ] })
13166
+ ] })
13167
+ ] })
13168
+ ] }),
13226
13169
  /* @__PURE__ */ jsx(
13227
13170
  "button",
13228
13171
  {
@@ -13626,31 +13569,6 @@ function ScoresTools({ onEntityChange, onReset, selectedEntity, entityOptions, i
13626
13569
  ] });
13627
13570
  }
13628
13571
 
13629
- const useScoresByEntityId = (entityId, entityType, page = 0) => {
13630
- const client = useMastraClient();
13631
- const [scores, setScores] = useState(null);
13632
- const [isLoading, setIsLoading] = useState(true);
13633
- useEffect(() => {
13634
- const fetchScores = async () => {
13635
- setIsLoading(true);
13636
- try {
13637
- const res = await client.listScoresByEntityId({
13638
- entityId,
13639
- entityType,
13640
- page: page || 0,
13641
- perPage: 10
13642
- });
13643
- setScores(res);
13644
- setIsLoading(false);
13645
- } catch (error) {
13646
- setScores(null);
13647
- setIsLoading(false);
13648
- }
13649
- };
13650
- fetchScores();
13651
- }, [entityId, entityType, page]);
13652
- return { scores, isLoading };
13653
- };
13654
13572
  const useScoresByScorerId = ({ scorerId, page = 0, entityId, entityType }) => {
13655
13573
  const client = useMastraClient();
13656
13574
  return useQuery({
@@ -13835,6 +13753,20 @@ const useTraceSpanScores = ({ traceId = "", spanId = "", page }) => {
13835
13753
  });
13836
13754
  };
13837
13755
 
13756
+ const ModelResetContext = createContext(null);
13757
+ function useModelReset() {
13758
+ const context = useContext(ModelResetContext);
13759
+ if (!context) {
13760
+ return {
13761
+ registerResetFn: () => {
13762
+ },
13763
+ triggerReset: () => {
13764
+ }
13765
+ };
13766
+ }
13767
+ return context;
13768
+ }
13769
+
13838
13770
  const useAgentsModelProviders = () => {
13839
13771
  const client = useMastraClient();
13840
13772
  return useQuery({
@@ -14521,7 +14453,7 @@ const PromptEnhancer = ({ agentId }) => {
14521
14453
  {
14522
14454
  value: prompt,
14523
14455
  editable: true,
14524
- extensions: [markdown({ base: markdownLanguage, codeLanguages: languages }), EditorView.lineWrapping],
14456
+ extensions: [markdown({ base: markdownLanguage, codeLanguages: languages }), EditorView$1.lineWrapping],
14525
14457
  onChange: setPrompt,
14526
14458
  theme: githubDarkInit({
14527
14459
  settings: {
@@ -18418,89 +18350,6 @@ const SpanScoring = ({ traceId, spanId, entityType }) => {
18418
18350
  ] });
18419
18351
  };
18420
18352
 
18421
- const useResizeColumn = ({
18422
- defaultWidth,
18423
- minimumWidth,
18424
- maximumWidth,
18425
- setCurrentWidth
18426
- }) => {
18427
- const [isDragging, setIsDragging] = useState(false);
18428
- const [sidebarWidth, setSidebarWidth] = useState(defaultWidth);
18429
- const containerRef = useRef(null);
18430
- const dragStartXRef = useRef(0);
18431
- const initialWidthRef = useRef(0);
18432
- const handleMouseDown = (e) => {
18433
- e.preventDefault();
18434
- setIsDragging(true);
18435
- dragStartXRef.current = e.clientX;
18436
- initialWidthRef.current = sidebarWidth;
18437
- };
18438
- useEffect(() => {
18439
- setSidebarWidth(defaultWidth);
18440
- setCurrentWidth?.(defaultWidth);
18441
- }, [defaultWidth]);
18442
- useEffect(() => {
18443
- const handleMouseMove = (e) => {
18444
- if (!isDragging || !containerRef.current) return;
18445
- const containerWidth = containerRef.current.offsetWidth;
18446
- const deltaX = dragStartXRef.current - e.clientX;
18447
- const deltaPercentage = deltaX / containerWidth * 100;
18448
- const newWidth = Math.min(Math.max(initialWidthRef.current + deltaPercentage, minimumWidth), maximumWidth);
18449
- setSidebarWidth(newWidth);
18450
- setCurrentWidth?.(newWidth);
18451
- };
18452
- const handleMouseUp = () => {
18453
- setIsDragging(false);
18454
- };
18455
- if (isDragging) {
18456
- window.addEventListener("mousemove", handleMouseMove);
18457
- window.addEventListener("mouseup", handleMouseUp);
18458
- }
18459
- return () => {
18460
- window.removeEventListener("mousemove", handleMouseMove);
18461
- window.removeEventListener("mouseup", handleMouseUp);
18462
- };
18463
- }, [isDragging]);
18464
- return { sidebarWidth, isDragging, handleMouseDown, containerRef };
18465
- };
18466
-
18467
- const MastraResizablePanel = ({
18468
- children,
18469
- defaultWidth,
18470
- minimumWidth,
18471
- maximumWidth,
18472
- className,
18473
- disabled = false,
18474
- setCurrentWidth,
18475
- dividerPosition = "left"
18476
- }) => {
18477
- const { sidebarWidth, isDragging, handleMouseDown, containerRef } = useResizeColumn({
18478
- defaultWidth: disabled ? 100 : defaultWidth,
18479
- minimumWidth,
18480
- maximumWidth,
18481
- setCurrentWidth
18482
- });
18483
- return /* @__PURE__ */ jsxs("div", { className: cn("w-full h-full relative", className), ref: containerRef, style: { width: `${sidebarWidth}%` }, children: [
18484
- !disabled && dividerPosition === "left" ? /* @__PURE__ */ jsx(
18485
- "div",
18486
- {
18487
- className: `w-px bg-border1 h-full cursor-col-resize hover:w-1.5 hover:bg-mastra-border-2 hover:bg-[#424242] active:bg-mastra-border-3 active:bg-[#3e3e3e] transition-colors absolute inset-y-0 z-10
18488
- ${isDragging ? "bg-border2 w-1.5 cursor- col-resize" : ""}`,
18489
- onMouseDown: handleMouseDown
18490
- }
18491
- ) : null,
18492
- children,
18493
- !disabled && dividerPosition === "right" ? /* @__PURE__ */ jsx(
18494
- "div",
18495
- {
18496
- className: `w-px bg-border1 h-full cursor-col-resize hover:w-1.5 hover:bg-border2 active:bg-border3 transition-colors absolute inset-y-0 z-10
18497
- ${isDragging ? "bg-border2 w-1.5 cursor- col-resize" : ""}`,
18498
- onMouseDown: handleMouseDown
18499
- }
18500
- ) : null
18501
- ] });
18502
- };
18503
-
18504
18353
  const Breadcrumb = ({ children, label }) => {
18505
18354
  return /* @__PURE__ */ jsx("nav", { "aria-label": label, children: /* @__PURE__ */ jsx("ol", { className: "gap-sm flex items-center", children }) });
18506
18355
  };
@@ -18590,113 +18439,6 @@ const EntityContent = ({ children, className }) => {
18590
18439
  return /* @__PURE__ */ jsx("div", { className, children });
18591
18440
  };
18592
18441
 
18593
- function usePolling({
18594
- fetchFn,
18595
- interval = 3e3,
18596
- enabled = false,
18597
- onSuccess,
18598
- onError,
18599
- shouldContinue = () => true,
18600
- restartPolling = false
18601
- }) {
18602
- const [isPolling, setIsPolling] = useState(enabled);
18603
- const [error, setError] = useState(null);
18604
- const [data, setData] = useState(null);
18605
- const [isLoading, setIsLoading] = useState(false);
18606
- const [firstCallLoading, setFirstCallLoading] = useState(false);
18607
- const timeoutRef = useRef(null);
18608
- const mountedRef = useRef(true);
18609
- const [restart, setRestart] = useState(restartPolling);
18610
- const cleanup = useCallback(() => {
18611
- console.log("cleanup");
18612
- if (timeoutRef.current) {
18613
- clearTimeout(timeoutRef.current);
18614
- timeoutRef.current = null;
18615
- }
18616
- }, []);
18617
- const stopPolling = useCallback(() => {
18618
- console.log("stopPolling");
18619
- setIsPolling(false);
18620
- cleanup();
18621
- }, [cleanup]);
18622
- const startPolling = useCallback(() => {
18623
- console.log("startPolling");
18624
- setIsPolling(true);
18625
- setError(null);
18626
- }, []);
18627
- const executePoll = useCallback(
18628
- async (refetch2 = true) => {
18629
- if (!mountedRef.current) return;
18630
- setIsLoading(true);
18631
- try {
18632
- const result = await fetchFn();
18633
- setData(result);
18634
- setError(null);
18635
- onSuccess?.(result);
18636
- if (shouldContinue(result) && refetch2) {
18637
- timeoutRef.current = setTimeout(executePoll, interval);
18638
- } else {
18639
- stopPolling();
18640
- }
18641
- } catch (err) {
18642
- if (!mountedRef.current) return;
18643
- setError(err);
18644
- onError?.(err);
18645
- stopPolling();
18646
- } finally {
18647
- if (mountedRef.current) {
18648
- setFirstCallLoading(false);
18649
- setIsLoading(false);
18650
- }
18651
- }
18652
- },
18653
- [fetchFn, interval, onSuccess, onError, shouldContinue, stopPolling]
18654
- );
18655
- const refetch = useCallback(
18656
- (withPolling = false) => {
18657
- console.log("refetch", { withPolling });
18658
- if (withPolling) {
18659
- setIsPolling(true);
18660
- } else {
18661
- executePoll(false);
18662
- }
18663
- setError(null);
18664
- },
18665
- [executePoll]
18666
- );
18667
- useEffect(() => {
18668
- mountedRef.current = true;
18669
- if (enabled && isPolling) {
18670
- executePoll(true);
18671
- }
18672
- return () => {
18673
- console.log("cleanup poll");
18674
- mountedRef.current = false;
18675
- cleanup();
18676
- };
18677
- }, [enabled, isPolling, executePoll, cleanup]);
18678
- useEffect(() => {
18679
- setRestart(restartPolling);
18680
- }, [restartPolling]);
18681
- useEffect(() => {
18682
- if (restart && !isPolling) {
18683
- setIsPolling(true);
18684
- executePoll();
18685
- setRestart(false);
18686
- }
18687
- }, [restart]);
18688
- return {
18689
- isPolling,
18690
- isLoading,
18691
- error,
18692
- data,
18693
- startPolling,
18694
- stopPolling,
18695
- firstCallLoading,
18696
- refetch
18697
- };
18698
- }
18699
-
18700
18442
  const PlaygroundQueryClient = ({ children }) => {
18701
18443
  const queryClient = new QueryClient();
18702
18444
  return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children });
@@ -19171,5 +18913,5 @@ function MCPServerCombobox({
19171
18913
  );
19172
18914
  }
19173
18915
 
19174
- export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, CommitIcon, CrossIcon, Crumb, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityMainHeader, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, FormActions, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, MastraResizablePanel, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, ModelResetProvider, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupField, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, SlashIcon, SliderField, SpanScoreList, SpanScoring, SpanTabs, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, TextareaField, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TsIcon, Txt, TxtCell, UnitCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, convertWorkflowRunStateToStreamResult, extractPrompt, formatHierarchicalSpans, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, useModelReset, usePlaygroundStore, usePolling, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByEntityId, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRunExecutionResult, useWorkflowRuns, useWorkflows, useWorkingMemory };
18916
+ export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, CommitIcon, CrossIcon, Crumb, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, Skeleton, SlashIcon, SpanScoreList, SpanScoring, SpanTabs, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TsIcon, Txt, TxtCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, convertWorkflowRunStateToStreamResult, extractPrompt, formatHierarchicalSpans, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, usePlaygroundStore, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRunExecutionResult, useWorkflowRuns, useWorkflows, useWorkingMemory };
19175
18917
  //# sourceMappingURL=index.es.js.map