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

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 (53) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/index.cjs.js +357 -606
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.es.js +361 -600
  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/context/use-current-run.d.ts +2 -0
  19. package/dist/src/domains/workflows/workflow/workflow-default-node.d.ts +4 -0
  20. package/dist/src/domains/workflows/workflow/workflow-nested-node.d.ts +4 -0
  21. package/dist/src/domains/workflows/workflow/workflow-node-badges.d.ts +55 -0
  22. package/dist/src/domains/workflows/workflow/workflow-step-action-bar.d.ts +3 -1
  23. package/dist/src/ds/components/Table/Cells.d.ts +0 -3
  24. package/dist/src/index.d.ts +1 -2
  25. package/package.json +12 -10
  26. package/dist/src/components/assistant-ui/thread-list.d.ts +0 -2
  27. package/dist/src/components/assistant-ui/tools/tool-approval.d.ts +0 -8
  28. package/dist/src/components/icons/agent-icon.d.ts +0 -3
  29. package/dist/src/components/icons/automation-icon.d.ts +0 -3
  30. package/dist/src/components/ui/copyable-content.d.ts +0 -7
  31. package/dist/src/components/ui/dropdown-menu.d.ts +0 -42
  32. package/dist/src/components/ui/elements/entry-list/entry-list-toolbar.d.ts +0 -6
  33. package/dist/src/components/ui/elements/form-fields/form-actions.d.ts +0 -12
  34. package/dist/src/components/ui/elements/form-fields/radio-group-field.d.ts +0 -21
  35. package/dist/src/components/ui/elements/form-fields/slider-field.d.ts +0 -15
  36. package/dist/src/components/ui/elements/form-fields/textarea-field.d.ts +0 -11
  37. package/dist/src/components/ui/elements/headers/entity-main-header.d.ts +0 -11
  38. package/dist/src/components/ui/elements/side-dialog/side-dialog-footer.d.ts +0 -10
  39. package/dist/src/components/ui/formatted-date.d.ts +0 -3
  40. package/dist/src/components/ui/resizable.d.ts +0 -23
  41. package/dist/src/components/ui/score-indicator.d.ts +0 -3
  42. package/dist/src/components/ui/toggle.d.ts +0 -12
  43. package/dist/src/domains/agents/components/agent-metadata/connection-dot.d.ts +0 -6
  44. package/dist/src/domains/agents/components/agent-metadata/models.d.ts +0 -5
  45. package/dist/src/domains/agents/components/agent-metadata/provider-status-indicator.d.ts +0 -7
  46. package/dist/src/domains/resizable-panel.d.ts +0 -11
  47. package/dist/src/domains/scores/components/score-table.d.ts +0 -11
  48. package/dist/src/domains/tools/components/tool-table/types.d.ts +0 -2
  49. package/dist/src/domains/workflows/workflow/workflow-result.d.ts +0 -5
  50. package/dist/src/hooks/use-resize-column.d.ts +0 -12
  51. package/dist/src/lib/mastra-client.d.ts +0 -2
  52. package/dist/src/lib/pagination/types.d.ts +0 -11
  53. package/dist/src/lib/polls.d.ts +0 -36
package/dist/index.cjs.js CHANGED
@@ -26,6 +26,7 @@ const Dagre = require('@dagrejs/dagre');
26
26
  const prismReactRenderer = require('prism-react-renderer');
27
27
  const CollapsiblePrimitive = require('@radix-ui/react-collapsible');
28
28
  const ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
29
+ const view = require('@codemirror/view');
29
30
  const SliderPrimitive = require('@radix-ui/react-slider');
30
31
  const jsonSchemaToZod = require('json-schema-to-zod');
31
32
  const superjson = require('superjson');
@@ -4681,6 +4682,8 @@ function convertWorkflowRunStateToStreamResult(runState) {
4681
4682
  status: result.status,
4682
4683
  output: "output" in result ? result.output : void 0,
4683
4684
  payload: "payload" in result ? result.payload : void 0,
4685
+ suspendPayload: "suspendPayload" in result ? result.suspendPayload : void 0,
4686
+ suspendOutput: "suspendOutput" in result ? result.suspendOutput : void 0,
4684
4687
  resumePayload: "resumePayload" in result ? result.resumePayload : void 0,
4685
4688
  error: "error" in result ? result.error : void 0,
4686
4689
  startedAt: "startedAt" in result ? result.startedAt : Date.now(),
@@ -4759,6 +4762,26 @@ const lodashTitleCase = (str) => {
4759
4762
  return camelCased.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase()).trim();
4760
4763
  };
4761
4764
 
4765
+ const formatMappingLabel = (stepId, prevStepIds, nextStepIds) => {
4766
+ if (!stepId.startsWith("mapping_")) {
4767
+ return stepId;
4768
+ }
4769
+ const capitalizeWords = (str) => {
4770
+ return str.split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
4771
+ };
4772
+ const formatStepName = (id) => {
4773
+ const cleaned = id.replace(/Step$/, "").replace(/[-_]/g, " ").trim();
4774
+ return capitalizeWords(cleaned);
4775
+ };
4776
+ const formatMultipleSteps = (ids, isTarget) => {
4777
+ if (ids.length === 0) return isTarget ? "End" : "Start";
4778
+ if (ids.length === 1) return formatStepName(ids[0]);
4779
+ return `${ids.length} Steps`;
4780
+ };
4781
+ const fromLabel = formatMultipleSteps(prevStepIds, false);
4782
+ const toLabel = formatMultipleSteps(nextStepIds, true);
4783
+ return `${fromLabel} → ${toLabel} Map`;
4784
+ };
4762
4785
  const getLayoutedElements = (nodes, edges) => {
4763
4786
  const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({}));
4764
4787
  g.setGraph({ rankdir: "TB" });
@@ -4855,12 +4878,15 @@ const getStepNodeAndEdge = ({
4855
4878
  position: { x: xIndex * 300, y: (yIndex + (condition ? 1 : 0)) * 100 },
4856
4879
  type: hasGraph ? "nested-node" : "default-node",
4857
4880
  data: {
4858
- label: stepFlow.step.id,
4881
+ label: formatMappingLabel(stepFlow.step.id, prevStepIds, nextStepIds),
4882
+ stepId: stepFlow.step.id,
4859
4883
  description: stepFlow.step.description,
4860
4884
  withoutTopHandle: condition ? false : !prevNodeIds.length,
4861
4885
  withoutBottomHandle: !nextNodeIds.length,
4862
4886
  stepGraph: hasGraph ? stepFlow.step.serializedStepFlow : void 0,
4863
- mapConfig: stepFlow.step.mapConfig
4887
+ mapConfig: stepFlow.step.mapConfig,
4888
+ canSuspend: stepFlow.step.canSuspend,
4889
+ isForEach: stepFlow.type === "foreach"
4864
4890
  }
4865
4891
  }
4866
4892
  ];
@@ -4978,7 +5004,8 @@ const getStepNodeAndEdge = ({
4978
5004
  description: _step.description,
4979
5005
  withoutTopHandle: !prevNodeIds.length,
4980
5006
  withoutBottomHandle: false,
4981
- stepGraph: hasGraph ? _step.serializedStepFlow : void 0
5007
+ stepGraph: hasGraph ? _step.serializedStepFlow : void 0,
5008
+ canSuspend: _step.canSuspend
4982
5009
  }
4983
5010
  },
4984
5011
  {
@@ -5040,7 +5067,14 @@ const getStepNodeAndEdge = ({
5040
5067
  nextStepFlow,
5041
5068
  allPrevNodeIds
5042
5069
  });
5043
- nodes.push(..._nodes);
5070
+ const markedNodes = _nodes.map((node) => ({
5071
+ ...node,
5072
+ data: {
5073
+ ...node.data,
5074
+ isParallel: true
5075
+ }
5076
+ }));
5077
+ nodes.push(...markedNodes);
5044
5078
  edges.push(..._edges);
5045
5079
  nextPrevStepIds.push(..._nextPrevStepIds);
5046
5080
  });
@@ -5156,6 +5190,90 @@ const CollapsibleTrigger = (props) => {
5156
5190
  };
5157
5191
  const CollapsibleContent = CollapsiblePrimitive__namespace.CollapsibleContent;
5158
5192
 
5193
+ const BADGE_COLORS = {
5194
+ sleep: "#A855F7",
5195
+ // Purple
5196
+ forEach: "#F97316",
5197
+ // Orange
5198
+ map: "#F97316",
5199
+ // Orange
5200
+ parallel: "#3B82F6",
5201
+ // Blue
5202
+ suspend: "#EC4899",
5203
+ // Pink
5204
+ after: "#14B8A6",
5205
+ // Teal
5206
+ workflow: "#8B5CF6",
5207
+ // Purple
5208
+ // Condition colors
5209
+ when: "#ECB047",
5210
+ // Orange
5211
+ dountil: "#8B5CF6",
5212
+ // Purple
5213
+ dowhile: "#06B6D4",
5214
+ // Cyan
5215
+ until: "#F59E0B",
5216
+ // Amber
5217
+ while: "#10B981",
5218
+ // Green
5219
+ if: "#3B82F6",
5220
+ // Blue
5221
+ else: "#6B7280"
5222
+ // Gray
5223
+ };
5224
+ const BADGE_ICONS = {
5225
+ sleep: lucideReact.Timer,
5226
+ sleepUntil: lucideReact.CalendarClock,
5227
+ forEach: lucideReact.List,
5228
+ map: lucideReact.List,
5229
+ parallel: lucideReact.Workflow,
5230
+ suspend: lucideReact.PlayCircle,
5231
+ after: lucideReact.Clock,
5232
+ workflow: lucideReact.Layers,
5233
+ // Condition icons
5234
+ when: lucideReact.Network,
5235
+ dountil: lucideReact.Repeat1,
5236
+ dowhile: lucideReact.Repeat,
5237
+ until: lucideReact.Timer,
5238
+ while: lucideReact.RefreshCw,
5239
+ if: lucideReact.GitBranch,
5240
+ else: lucideReact.CornerDownRight
5241
+ };
5242
+ const getConditionIconAndColor = (type) => {
5243
+ switch (type) {
5244
+ case "when":
5245
+ return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };
5246
+ case "dountil":
5247
+ return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };
5248
+ case "dowhile":
5249
+ return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };
5250
+ case "until":
5251
+ return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };
5252
+ case "while":
5253
+ return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };
5254
+ case "if":
5255
+ return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };
5256
+ case "else":
5257
+ return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };
5258
+ default:
5259
+ return { icon: void 0, color: void 0 };
5260
+ }
5261
+ };
5262
+ const getNodeBadgeInfo = (data) => {
5263
+ const isSleepNode = Boolean(data.duration || data.date);
5264
+ const isForEachNode = Boolean(data.isForEach);
5265
+ const isMapNode = Boolean(data.mapConfig && !data.isForEach);
5266
+ const isNestedWorkflow = Boolean(data.stepGraph);
5267
+ const hasSpecialBadge = isSleepNode || data.canSuspend || data.isParallel || isForEachNode || isMapNode || isNestedWorkflow;
5268
+ return {
5269
+ isSleepNode,
5270
+ isForEachNode,
5271
+ isMapNode,
5272
+ isNestedWorkflow,
5273
+ hasSpecialBadge
5274
+ };
5275
+ };
5276
+
5159
5277
  const useAutoscroll = (ref, { enabled = true }) => {
5160
5278
  const shouldScrollRef = React.useRef(enabled);
5161
5279
  React.useEffect(() => {
@@ -5244,7 +5362,9 @@ const useCurrentRun = () => {
5244
5362
  status: value.status,
5245
5363
  output: "output" in value ? value.output : void 0,
5246
5364
  input: value.payload,
5247
- resumeData: "resumePayload" in value ? value.resumePayload : void 0
5365
+ resumeData: "resumePayload" in value ? value.resumePayload : void 0,
5366
+ suspendOutput: "suspendOutput" in value ? value.suspendOutput : void 0,
5367
+ suspendPayload: "suspendPayload" in value ? value.suspendPayload : void 0
5248
5368
  }
5249
5369
  };
5250
5370
  }, {});
@@ -5252,8 +5372,8 @@ const useCurrentRun = () => {
5252
5372
  };
5253
5373
 
5254
5374
  const useCodemirrorTheme$1 = () => {
5255
- return React.useMemo(
5256
- () => codemirrorThemeDracula.draculaInit({
5375
+ return React.useMemo(() => {
5376
+ const baseTheme = codemirrorThemeDracula.draculaInit({
5257
5377
  settings: {
5258
5378
  fontFamily: "var(--geist-mono)",
5259
5379
  fontSize: "0.8rem",
@@ -5263,9 +5383,20 @@ const useCodemirrorTheme$1 = () => {
5263
5383
  background: "transparent"
5264
5384
  },
5265
5385
  styles: [{ tag: [highlight$1.tags.className, highlight$1.tags.propertyName] }]
5266
- }),
5267
- []
5268
- );
5386
+ });
5387
+ const customLineNumberTheme = view.EditorView.theme({
5388
+ ".cm-editor": {
5389
+ colorScheme: "dark",
5390
+ // ensures color scheme
5391
+ backgroundColor: "transparent"
5392
+ },
5393
+ ".cm-lineNumbers .cm-gutterElement": {
5394
+ color: "#939393"
5395
+ // ← custom line number color
5396
+ }
5397
+ });
5398
+ return [baseTheme, customLineNumberTheme];
5399
+ }, []);
5269
5400
  };
5270
5401
  const SyntaxHighlighter$1 = ({ data }) => {
5271
5402
  const formattedCode = JSON.stringify(data, null, 2);
@@ -5299,9 +5430,11 @@ const WorkflowStepActionBar = ({
5299
5430
  input,
5300
5431
  output,
5301
5432
  resumeData,
5433
+ suspendOutput,
5302
5434
  error,
5303
5435
  mapConfig,
5304
5436
  stepName,
5437
+ stepId,
5305
5438
  onShowNestedGraph,
5306
5439
  status
5307
5440
  }) => {
@@ -5328,10 +5461,13 @@ const WorkflowStepActionBar = ({
5328
5461
  mapConfig && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5329
5462
  /* @__PURE__ */ jsxRuntime.jsx(Button$1, { onClick: () => setIsMapConfigOpen(true), children: "Map config" }),
5330
5463
  /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isMapConfigOpen, onOpenChange: setIsMapConfigOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: dialogContentClass, children: [
5331
- /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { className: dialogTitleClass, children: [
5332
- stepName,
5333
- " map config"
5334
- ] }),
5464
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: dialogTitleClass, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
5465
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
5466
+ stepName,
5467
+ " Map Config"
5468
+ ] }),
5469
+ stepId && stepId !== stepName && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-icon3 font-normal", children: stepId })
5470
+ ] }) }),
5335
5471
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(CodeDialogContent, { data: mapConfig }) })
5336
5472
  ] }) })
5337
5473
  ] }),
@@ -5355,14 +5491,14 @@ const WorkflowStepActionBar = ({
5355
5491
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(CodeDialogContent, { data: resumeData }) })
5356
5492
  ] }) })
5357
5493
  ] }),
5358
- output && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5494
+ (output ?? suspendOutput) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5359
5495
  /* @__PURE__ */ jsxRuntime.jsx(Button$1, { onClick: () => setIsOutputOpen(true), children: "Output" }),
5360
5496
  /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isOutputOpen, onOpenChange: setIsOutputOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: dialogContentClass, children: [
5361
5497
  /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { className: dialogTitleClass, children: [
5362
5498
  stepName,
5363
5499
  " output"
5364
5500
  ] }),
5365
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(CodeDialogContent, { data: output }) })
5501
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(CodeDialogContent, { data: output ?? suspendOutput }) })
5366
5502
  ] }) })
5367
5503
  ] }),
5368
5504
  error && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -5389,6 +5525,7 @@ function WorkflowConditionNode({ data }) {
5389
5525
  const { steps } = useCurrentRun();
5390
5526
  const previousStep = steps[previousStepId];
5391
5527
  const nextStep = steps[nextStepId];
5528
+ const { icon: IconComponent, color } = getConditionIconAndColor(type);
5392
5529
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5393
5530
  !withoutTopHandle && /* @__PURE__ */ jsxRuntime.jsx(react$1.Handle, { type: "target", position: react$1.Position.Top, style: { visibility: "hidden" } }),
5394
5531
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5415,7 +5552,13 @@ function WorkflowConditionNode({ data }) {
5415
5552
  },
5416
5553
  children: [
5417
5554
  /* @__PURE__ */ jsxRuntime.jsxs(CollapsibleTrigger, { className: "flex items-center justify-between w-full px-3 py-2", children: [
5418
- /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: type === "when" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Network, { className: "text-[#ECB047]" }) : null, children: type?.toUpperCase() }),
5555
+ /* @__PURE__ */ jsxRuntime.jsx(
5556
+ Badge,
5557
+ {
5558
+ icon: IconComponent ? /* @__PURE__ */ jsxRuntime.jsx(IconComponent, { className: "text-current", ...color ? { style: { color } } : {} }) : null,
5559
+ children: type?.toUpperCase()
5560
+ }
5561
+ ),
5419
5562
  isCollapsible && /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(
5420
5563
  lucideReact.ChevronDown,
5421
5564
  {
@@ -5426,6 +5569,21 @@ function WorkflowConditionNode({ data }) {
5426
5569
  ) })
5427
5570
  ] }),
5428
5571
  type === "else" ? null : /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContent, { className: "flex flex-col gap-2 pb-2", children: conditions.map((condition, index) => {
5572
+ const conjType = condition.conj || type;
5573
+ const { icon: ConjIconComponent, color: conjColor } = getConditionIconAndColor(conjType);
5574
+ const conjBadge = index === 0 ? null : /* @__PURE__ */ jsxRuntime.jsx(
5575
+ Badge,
5576
+ {
5577
+ icon: ConjIconComponent ? /* @__PURE__ */ jsxRuntime.jsx(
5578
+ ConjIconComponent,
5579
+ {
5580
+ className: "text-current",
5581
+ ...conjColor ? { style: { color: conjColor } } : {}
5582
+ }
5583
+ ) : null,
5584
+ children: condition.conj?.toLocaleUpperCase() || "WHEN"
5585
+ }
5586
+ );
5429
5587
  return condition.fnString ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3", children: [
5430
5588
  /* @__PURE__ */ jsxRuntime.jsx(prismReactRenderer.Highlight, { theme: prismReactRenderer.themes.oneDark, code: String(condition.fnString).trim(), language: "javascript", children: ({ className, style, tokens, getLineProps, getTokenProps }) => /* @__PURE__ */ jsxRuntime.jsx(
5431
5589
  "pre",
@@ -5471,7 +5629,7 @@ function WorkflowConditionNode({ data }) {
5471
5629
  ) })
5472
5630
  ] }) })
5473
5631
  ] }, `${condition.fnString}-${index}`) : /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: condition.ref?.step ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
5474
- index === 0 ? null : /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Network, { className: "text-[#ECB047]" }), children: condition.conj?.toLocaleUpperCase() || "WHEN" }),
5632
+ conjBadge,
5475
5633
  /* @__PURE__ */ jsxRuntime.jsxs(Text, { size: "xs", className: " text-mastra-el-3 flex-1", children: [
5476
5634
  condition.ref.step.id || condition.ref.step,
5477
5635
  "'s ",
@@ -5520,10 +5678,30 @@ const Clock = ({ startedAt, endedAt }) => {
5520
5678
  };
5521
5679
 
5522
5680
  function WorkflowDefaultNode({ data, parentWorkflowName }) {
5523
- const { steps, runId } = useCurrentRun();
5524
- const { label, description, withoutTopHandle, withoutBottomHandle, mapConfig, duration, date } = data;
5525
- const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;
5526
- const step = steps[fullLabel];
5681
+ const { steps } = useCurrentRun();
5682
+ const {
5683
+ label,
5684
+ stepId,
5685
+ description,
5686
+ withoutTopHandle,
5687
+ withoutBottomHandle,
5688
+ mapConfig,
5689
+ duration,
5690
+ date,
5691
+ isParallel,
5692
+ canSuspend,
5693
+ isForEach
5694
+ } = data;
5695
+ const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;
5696
+ const step = steps[stepKey];
5697
+ const { isSleepNode, isForEachNode, isMapNode, hasSpecialBadge } = getNodeBadgeInfo({
5698
+ duration,
5699
+ date,
5700
+ isForEach,
5701
+ mapConfig,
5702
+ canSuspend,
5703
+ isParallel
5704
+ });
5527
5705
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5528
5706
  !withoutTopHandle && /* @__PURE__ */ jsxRuntime.jsx(react$1.Handle, { type: "target", position: react$1.Position.Top, style: { visibility: "hidden" } }),
5529
5707
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5533,7 +5711,8 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5533
5711
  "data-workflow-step-status": step?.status ?? "idle",
5534
5712
  "data-testid": "workflow-default-node",
5535
5713
  className: cn(
5536
- "bg-surface3 rounded-lg w-[274px] border-sm border-border1 pt-2",
5714
+ "bg-surface3 rounded-lg w-[274px] border-sm border-border1",
5715
+ hasSpecialBadge ? "pt-0" : "pt-2",
5537
5716
  step?.status === "success" && "bg-accent1Darker",
5538
5717
  step?.status === "failed" && "bg-accent2Darker",
5539
5718
  step?.status === "suspended" && "bg-accent3Darker",
@@ -5541,6 +5720,19 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5541
5720
  step?.status === "running" && "bg-accent6Darker"
5542
5721
  ),
5543
5722
  children: [
5723
+ hasSpecialBadge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 pt-2 pb-1 flex gap-1.5 flex-wrap", children: [
5724
+ isSleepNode && /* @__PURE__ */ jsxRuntime.jsx(
5725
+ Badge,
5726
+ {
5727
+ icon: date ? /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.sleepUntil, { className: "text-current", style: { color: BADGE_COLORS.sleep } }) : /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.sleep, { className: "text-current", style: { color: BADGE_COLORS.sleep } }),
5728
+ children: date ? "SLEEP UNTIL" : "SLEEP"
5729
+ }
5730
+ ),
5731
+ canSuspend && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.suspend, { className: "text-current", style: { color: BADGE_COLORS.suspend } }), children: "SUSPEND/RESUME" }),
5732
+ isParallel && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.parallel, { className: "text-current", style: { color: BADGE_COLORS.parallel } }), children: "PARALLEL" }),
5733
+ isForEachNode && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.forEach, { className: "text-current", style: { color: BADGE_COLORS.forEach } }), children: "FOREACH" }),
5734
+ isMapNode && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.map, { className: "text-current", style: { color: BADGE_COLORS.map } }), children: "MAP" })
5735
+ ] }),
5544
5736
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 px-3", !description && "pb-2"), children: [
5545
5737
  /* @__PURE__ */ jsxRuntime.jsxs(Icon, { children: [
5546
5738
  step?.status === "failed" && /* @__PURE__ */ jsxRuntime.jsx(CrossIcon, { className: "text-accent2" }),
@@ -5572,9 +5764,11 @@ function WorkflowDefaultNode({ data, parentWorkflowName }) {
5572
5764
  WorkflowStepActionBar,
5573
5765
  {
5574
5766
  stepName: label,
5767
+ stepId,
5575
5768
  input: step?.input,
5576
5769
  resumeData: step?.resumeData,
5577
5770
  output: step?.output,
5771
+ suspendOutput: step?.suspendOutput,
5578
5772
  error: step?.error,
5579
5773
  mapConfig,
5580
5774
  status: step?.status
@@ -5599,23 +5793,15 @@ function WorkflowAfterNode({ data }) {
5599
5793
  children: [
5600
5794
  /* @__PURE__ */ jsxRuntime.jsx(react$1.Handle, { type: "target", position: react$1.Position.Top, style: { visibility: "hidden" } }),
5601
5795
  /* @__PURE__ */ jsxRuntime.jsxs(CollapsibleTrigger, { className: "flex items-center justify-between w-full", children: [
5602
- /* @__PURE__ */ jsxRuntime.jsx(
5603
- Text,
5604
- {
5605
- size: "xs",
5606
- weight: "medium",
5607
- className: "text-mastra-el-3 bg-mastra-bg-11 my-auto block rounded-[0.125rem] px-2 py-1 text-[10px] w-fit",
5608
- children: "AFTER"
5609
- }
5610
- ),
5611
- /* @__PURE__ */ jsxRuntime.jsx(
5796
+ /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.after, { className: "text-current", style: { color: BADGE_COLORS.after } }), children: "AFTER" }),
5797
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(
5612
5798
  lucideReact.ChevronDown,
5613
5799
  {
5614
- className: cn("w-4 h-4 transition-transform", {
5800
+ className: cn("transition-transform text-icon3", {
5615
5801
  "transform rotate-180": open
5616
5802
  })
5617
5803
  }
5618
- )
5804
+ ) })
5619
5805
  ] }),
5620
5806
  /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContent, { className: "flex flex-col gap-2", children: steps.map((step) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm bg-mastra-bg-9 flex items-center gap-[6px] rounded-sm p-2", children: [
5621
5807
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Footprints, { className: "text-current w-4 h-4" }),
@@ -5821,9 +6007,28 @@ function WorkflowNestedGraphProvider({ children }) {
5821
6007
  function WorkflowNestedNode({ data, parentWorkflowName }) {
5822
6008
  const { steps } = useCurrentRun();
5823
6009
  const { showNestedGraph } = React.useContext(WorkflowNestedGraphContext);
5824
- const { label, description, withoutTopHandle, withoutBottomHandle, stepGraph, mapConfig } = data;
6010
+ const {
6011
+ label,
6012
+ stepId,
6013
+ description,
6014
+ withoutTopHandle,
6015
+ withoutBottomHandle,
6016
+ stepGraph,
6017
+ mapConfig,
6018
+ isParallel,
6019
+ canSuspend,
6020
+ isForEach
6021
+ } = data;
5825
6022
  const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;
5826
- const step = steps[fullLabel];
6023
+ const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;
6024
+ const step = steps[stepKey];
6025
+ const { isForEachNode, isMapNode, isNestedWorkflow, hasSpecialBadge } = getNodeBadgeInfo({
6026
+ isForEach,
6027
+ mapConfig,
6028
+ canSuspend,
6029
+ isParallel,
6030
+ stepGraph
6031
+ });
5827
6032
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5828
6033
  !withoutTopHandle && /* @__PURE__ */ jsxRuntime.jsx(react$1.Handle, { type: "target", position: react$1.Position.Top, style: { visibility: "hidden" } }),
5829
6034
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5833,7 +6038,8 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5833
6038
  "data-workflow-node": true,
5834
6039
  "data-workflow-step-status": step?.status,
5835
6040
  className: cn(
5836
- "bg-surface3 rounded-lg w-[274px] border-sm border-border1 pt-2",
6041
+ "bg-surface3 rounded-lg w-[274px] border-sm border-border1",
6042
+ hasSpecialBadge ? "pt-0" : "pt-2",
5837
6043
  step?.status === "success" && "bg-accent1Darker",
5838
6044
  step?.status === "failed" && "bg-accent2Darker",
5839
6045
  step?.status === "suspended" && "bg-accent3Darker",
@@ -5841,6 +6047,13 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5841
6047
  step?.status === "running" && "bg-accent6Darker"
5842
6048
  ),
5843
6049
  children: [
6050
+ hasSpecialBadge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 pt-2 pb-1 flex gap-1.5 flex-wrap", children: [
6051
+ canSuspend && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.suspend, { className: "text-current", style: { color: BADGE_COLORS.suspend } }), children: "SUSPEND/RESUME" }),
6052
+ isParallel && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.parallel, { className: "text-current", style: { color: BADGE_COLORS.parallel } }), children: "PARALLEL" }),
6053
+ isNestedWorkflow && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.workflow, { className: "text-current", style: { color: BADGE_COLORS.workflow } }), children: "WORKFLOW" }),
6054
+ isForEachNode && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.forEach, { className: "text-current", style: { color: BADGE_COLORS.forEach } }), children: "FOREACH" }),
6055
+ isMapNode && /* @__PURE__ */ jsxRuntime.jsx(Badge, { icon: /* @__PURE__ */ jsxRuntime.jsx(BADGE_ICONS.map, { className: "text-current", style: { color: BADGE_COLORS.map } }), children: "MAP" })
6056
+ ] }),
5844
6057
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 px-3", !description && "pb-2"), children: [
5845
6058
  /* @__PURE__ */ jsxRuntime.jsxs(Icon, { children: [
5846
6059
  step?.status === "failed" && /* @__PURE__ */ jsxRuntime.jsx(CrossIcon, { className: "text-accent2" }),
@@ -5861,9 +6074,11 @@ function WorkflowNestedNode({ data, parentWorkflowName }) {
5861
6074
  WorkflowStepActionBar,
5862
6075
  {
5863
6076
  stepName: label,
6077
+ stepId,
5864
6078
  input: step?.input,
5865
6079
  resumeData: step?.resumeData,
5866
6080
  output: step?.output,
6081
+ suspendOutput: step?.suspendOutput,
5867
6082
  error: step?.error,
5868
6083
  mapConfig,
5869
6084
  onShowNestedGraph: () => showNestedGraph({ label, fullStep: fullLabel, stepGraph }),
@@ -7293,10 +7508,10 @@ function WorkflowTrigger({
7293
7508
  setCancelResponse(response);
7294
7509
  };
7295
7510
  const streamResultToUse = result ?? streamResult;
7296
- const suspendedSteps = Object.entries(streamResultToUse?.steps || {}).filter(([_, { status }]) => status === "suspended").map(([stepId, { payload: payload2 }]) => ({
7511
+ const suspendedSteps = Object.entries(streamResultToUse?.steps || {}).filter(([_, { status }]) => status === "suspended").map(([stepId, { suspendPayload }]) => ({
7297
7512
  stepId,
7298
7513
  runId: innerRunId,
7299
- suspendPayload: payload2,
7514
+ suspendPayload,
7300
7515
  isLoading: false
7301
7516
  }));
7302
7517
  React.useEffect(() => {
@@ -7407,11 +7622,23 @@ function WorkflowTrigger({
7407
7622
  /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "secondary", className: "px-4 text-mastra-el-3", size: "xs", children: "Status" }),
7408
7623
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 flex flex-col gap-4", children: Object.entries(workflowActivePaths).filter(([key, _]) => key !== "input" && !key.endsWith(".input")).map(([stepId, step]) => {
7409
7624
  const { status } = step;
7410
- let output = {};
7625
+ let output = void 0;
7626
+ let suspendOutput = void 0;
7627
+ if (step.status === "suspended") {
7628
+ suspendOutput = step.suspendOutput;
7629
+ }
7411
7630
  if (step.status === "success") {
7412
7631
  output = step.output;
7413
7632
  }
7414
- return /* @__PURE__ */ jsxRuntime.jsx(WorkflowStatus, { stepId, status, result: output }, stepId);
7633
+ return /* @__PURE__ */ jsxRuntime.jsx(
7634
+ WorkflowStatus,
7635
+ {
7636
+ stepId,
7637
+ status,
7638
+ result: output ?? suspendOutput ?? {}
7639
+ },
7640
+ stepId
7641
+ );
7415
7642
  }) })
7416
7643
  ] })
7417
7644
  ] })
@@ -7583,12 +7810,6 @@ const Cell = ({ className, children, ...props }) => {
7583
7810
  const TxtCell = ({ className, children }) => {
7584
7811
  return /* @__PURE__ */ jsxRuntime.jsx(Cell, { className, children: /* @__PURE__ */ jsxRuntime.jsx(Txt, { as: "span", variant: "ui-md", className: "w-full truncate", children }) });
7585
7812
  };
7586
- const UnitCell = ({ className, children, unit }) => {
7587
- return /* @__PURE__ */ jsxRuntime.jsx(Cell, { className, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center", children: [
7588
- /* @__PURE__ */ jsxRuntime.jsx(Txt, { as: "span", variant: "ui-md", className: "shrink-0", children }),
7589
- /* @__PURE__ */ jsxRuntime.jsx(Txt, { as: "span", variant: "ui-sm", className: "text-icon3 w-full truncate", children: unit })
7590
- ] }) });
7591
- };
7592
7813
  const DateTimeCell = ({ dateTime, ...props }) => {
7593
7814
  const { day, time } = formatDateCell(dateTime);
7594
7815
  return /* @__PURE__ */ jsxRuntime.jsx(Cell, { ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0", children: [
@@ -10474,32 +10695,6 @@ const useAgentSettings = () => {
10474
10695
  return React.useContext(AgentSettingsContext);
10475
10696
  };
10476
10697
 
10477
- const ModelResetContext = React.createContext(null);
10478
- function ModelResetProvider({ children }) {
10479
- const resetFnRef = React.useRef(null);
10480
- const registerResetFn = React.useCallback((fn) => {
10481
- resetFnRef.current = fn;
10482
- }, []);
10483
- const triggerReset = React.useCallback(() => {
10484
- if (resetFnRef.current) {
10485
- resetFnRef.current();
10486
- }
10487
- }, []);
10488
- return /* @__PURE__ */ jsxRuntime.jsx(ModelResetContext.Provider, { value: { registerResetFn, triggerReset }, children });
10489
- }
10490
- function useModelReset() {
10491
- const context = React.useContext(ModelResetContext);
10492
- if (!context) {
10493
- return {
10494
- registerResetFn: () => {
10495
- },
10496
- triggerReset: () => {
10497
- }
10498
- };
10499
- }
10500
- return context;
10501
- }
10502
-
10503
10698
  const resolveInstructionPart = (part) => {
10504
10699
  if (typeof part === "string") {
10505
10700
  return part.trim();
@@ -11860,104 +12055,6 @@ function InputField({
11860
12055
  );
11861
12056
  }
11862
12057
 
11863
- function TextareaField({
11864
- value,
11865
- label,
11866
- helpText,
11867
- className,
11868
- testId,
11869
- type,
11870
- disabled,
11871
- ...props
11872
- }) {
11873
- return /* @__PURE__ */ jsxRuntime.jsxs(
11874
- "div",
11875
- {
11876
- className: cn(
11877
- "grid gap-[.5rem] grid-rows-[auto_1fr]",
11878
- {
11879
- "grid-rows-[auto_1fr_auto]": helpText
11880
- },
11881
- className
11882
- ),
11883
- children: [
11884
- label && /* @__PURE__ */ jsxRuntime.jsx("label", { className: cn("text-[0.8125rem] text-icon3 flex justify-between items-center"), children: label }),
11885
- /* @__PURE__ */ jsxRuntime.jsx(
11886
- "textarea",
11887
- {
11888
- className: cn(
11889
- "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]",
11890
- "focus:outline-none focus:shadow-[inset_0_0_0_1px_#18fb6f]",
11891
- { "cursor-not-allowed opacity-50": disabled }
11892
- ),
11893
- "data-testid": testId,
11894
- ...props,
11895
- children: value
11896
- }
11897
- ),
11898
- helpText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpText })
11899
- ]
11900
- }
11901
- );
11902
- }
11903
-
11904
- const Button = React.forwardRef(
11905
- ({ className, variant = "outline", ...props }, ref) => {
11906
- return /* @__PURE__ */ jsxRuntime.jsx(
11907
- "button",
11908
- {
11909
- ref,
11910
- className: cn(
11911
- "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",
11912
- "[&:not(:disabled):hover]:border-[rgba(255,255,255,0.25)] [&:not(:disabled):hover]:text-[rgba(255,255,255,0.9)]",
11913
- "[&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:mx-[-0.3em] [&>svg]:opacity-70 [&>svg]:shrink-0",
11914
- "focus:outline-none focus:shadow-[inset_0_0_0_1px_rgba(24,251,111,0.75)]",
11915
- className,
11916
- {
11917
- "cursor-not-allowed opacity-50": props.disabled,
11918
- "bg-ui-primaryBtnBg text-ui-primaryBtnText hover:bg-surface6 leading-[0] font-semibold": variant === "primary",
11919
- "min-h-[2rem]": variant === "ghost",
11920
- "min-h-[2.5rem]": variant !== "ghost",
11921
- "border-[rgba(255,255,255,0.15)]": variant === "outline"
11922
- }
11923
- ),
11924
- ...props
11925
- }
11926
- );
11927
- }
11928
- );
11929
- Button.displayName = "Button";
11930
-
11931
- function FormActions({
11932
- children,
11933
- onSubmit,
11934
- onCancel,
11935
- className,
11936
- submitLabel,
11937
- cancelLabel,
11938
- isSubmitting,
11939
- variant = "toLeft"
11940
- }) {
11941
- if (!children && (!onSubmit || !onCancel)) {
11942
- console.warn("FormActions requires either children or onSubmit and onCancel props");
11943
- return null;
11944
- }
11945
- return /* @__PURE__ */ jsxRuntime.jsx(
11946
- "div",
11947
- {
11948
- className: cn(
11949
- "flex gap-[1rem] items-center justify-start",
11950
- { "justify-end": variant === "toRight", "grid w-full grid-cols-[1fr_auto]": variant === "stretch" },
11951
- className
11952
- ),
11953
- children: children ? children : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11954
- /* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: onSubmit, className: "min-w-[12rem]", disabled: isSubmitting, variant: "primary", children: submitLabel || "Submit" }),
11955
- /* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: onCancel, children: cancelLabel || "Cancel" })
11956
- ] })
11957
- }
11958
- );
11959
- }
11960
-
11961
12058
  function SelectField({
11962
12059
  name,
11963
12060
  value,
@@ -12006,158 +12103,6 @@ function SelectField({
12006
12103
  );
12007
12104
  }
12008
12105
 
12009
- function SliderField({
12010
- name,
12011
- value,
12012
- label,
12013
- className,
12014
- testId,
12015
- required,
12016
- disabled,
12017
- helpMsg,
12018
- errorMsg,
12019
- onChange,
12020
- ...props
12021
- }) {
12022
- return /* @__PURE__ */ jsxRuntime.jsxs(
12023
- "div",
12024
- {
12025
- className: cn(
12026
- "grid gap-[.5rem] grid-rows-[auto_1fr]",
12027
- {
12028
- "grid-rows-[auto_1fr_auto]": helpMsg
12029
- },
12030
- className
12031
- ),
12032
- children: [
12033
- /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cn("text-[0.8125rem] text-icon3 flex justify-between items-center"), children: [
12034
- label,
12035
- required && /* @__PURE__ */ jsxRuntime.jsx("i", { className: "text-icon2", children: "(required)" })
12036
- ] }),
12037
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid w-full items-center gap-[1rem] grid-cols-[1fr_auto]"), children: [
12038
- /* @__PURE__ */ jsxRuntime.jsxs(
12039
- SliderPrimitive__namespace.Root,
12040
- {
12041
- name,
12042
- className: cn("relative flex w-full touch-none select-none items-center ", className),
12043
- value,
12044
- disabled,
12045
- ...props,
12046
- children: [
12047
- /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.Track, { className: "relative h-[4px] w-full grow overflow-hidden rounded-full bg-gray-600", children: /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.Range, { className: "absolute h-full bg-gray-400" }) }),
12048
- /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.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" })
12049
- ]
12050
- }
12051
- ),
12052
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-icon4 text-[0.875rem] flex justify-end", children: value })
12053
- ] }),
12054
- helpMsg && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpMsg }),
12055
- errorMsg && /* @__PURE__ */ jsxRuntime.jsxs(
12056
- "p",
12057
- {
12058
- className: cn(
12059
- "text-[0.75rem] text-red-500 flex items-center gap-[.5rem]",
12060
- "[&>svg]:w-[1.1em] [&>svg]:h-[1.1em] [&>svg]:opacity-70"
12061
- ),
12062
- children: [
12063
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TriangleAlertIcon, {}),
12064
- " ",
12065
- errorMsg
12066
- ]
12067
- }
12068
- )
12069
- ]
12070
- }
12071
- );
12072
- }
12073
-
12074
- function RadioGroupField({
12075
- name,
12076
- value,
12077
- label,
12078
- className,
12079
- testId,
12080
- required,
12081
- disabled,
12082
- helpMsg,
12083
- errorMsg,
12084
- onChange,
12085
- options = [],
12086
- layout = "vertical",
12087
- onValueChange,
12088
- ...props
12089
- }) {
12090
- const Wrapper = layout === "horizontal" ? "div" : "fieldset";
12091
- return /* @__PURE__ */ jsxRuntime.jsxs(
12092
- Wrapper,
12093
- {
12094
- className: cn(
12095
- "w-full",
12096
- {
12097
- "flex items-center gap-[2rem]": layout === "horizontal"
12098
- },
12099
- className
12100
- ),
12101
- role: layout === "horizontal" ? "radiogroup" : void 0,
12102
- "aria-labelledby": layout === "horizontal" ? void 0 : `${name}-legend`,
12103
- children: [
12104
- /* @__PURE__ */ jsxRuntime.jsx("legend", { id: `${name}-legend`, className: cn("text-[0.8125rem] text-icon3"), children: label }),
12105
- /* @__PURE__ */ jsxRuntime.jsxs(
12106
- "div",
12107
- {
12108
- className: cn("grid gap-[2.5rem]", {
12109
- "mt-[0.5rem]": layout === "vertical",
12110
- "grid-rows-[1fr_auto]": helpMsg
12111
- }),
12112
- children: [
12113
- /* @__PURE__ */ jsxRuntime.jsx(
12114
- RadioGroupPrimitive__namespace.Root,
12115
- {
12116
- value,
12117
- onValueChange,
12118
- ...props,
12119
- className: cn({
12120
- "grid gap-[0.5rem]": layout === "vertical",
12121
- "flex gap-[1rem]": layout === "horizontal"
12122
- }),
12123
- children: options.map((option) => {
12124
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-[0.5rem] text-[0.875rem] text-icon4 ", children: [
12125
- /* @__PURE__ */ jsxRuntime.jsx(
12126
- RadioGroupPrimitive__namespace.Item,
12127
- {
12128
- 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 ",
12129
- value: option.value,
12130
- children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
12131
- }
12132
- ),
12133
- option.label
12134
- ] }, option.value);
12135
- })
12136
- }
12137
- ),
12138
- helpMsg && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-icon3 text-[0.75rem]", children: helpMsg }),
12139
- errorMsg && /* @__PURE__ */ jsxRuntime.jsxs(
12140
- "p",
12141
- {
12142
- className: cn(
12143
- "text-[0.75rem] text-red-500 flex items-center gap-[.5rem]",
12144
- "[&>svg]:w-[1.1em] [&>svg]:h-[1.1em] [&>svg]:opacity-70"
12145
- ),
12146
- children: [
12147
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TriangleAlertIcon, {}),
12148
- " ",
12149
- errorMsg
12150
- ]
12151
- }
12152
- )
12153
- ]
12154
- }
12155
- )
12156
- ]
12157
- }
12158
- );
12159
- }
12160
-
12161
12106
  function KeyValueList({ data, LinkComponent, className, labelsAreHidden, isLoading }) {
12162
12107
  const { Link } = useLinkComponent();
12163
12108
  const LabelWrapper = ({ children }) => {
@@ -12517,6 +12462,33 @@ function SideDialogRoot({
12517
12462
  ] }) });
12518
12463
  }
12519
12464
 
12465
+ const Button = React.forwardRef(
12466
+ ({ className, variant = "outline", ...props }, ref) => {
12467
+ return /* @__PURE__ */ jsxRuntime.jsx(
12468
+ "button",
12469
+ {
12470
+ ref,
12471
+ className: cn(
12472
+ "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",
12473
+ "[&:not(:disabled):hover]:border-[rgba(255,255,255,0.25)] [&:not(:disabled):hover]:text-[rgba(255,255,255,0.9)]",
12474
+ "[&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:mx-[-0.3em] [&>svg]:opacity-70 [&>svg]:shrink-0",
12475
+ "focus:outline-none focus:shadow-[inset_0_0_0_1px_rgba(24,251,111,0.75)]",
12476
+ className,
12477
+ {
12478
+ "cursor-not-allowed opacity-50": props.disabled,
12479
+ "bg-ui-primaryBtnBg text-ui-primaryBtnText hover:bg-surface6 leading-[0] font-semibold": variant === "primary",
12480
+ "min-h-[2rem]": variant === "ghost",
12481
+ "min-h-[2.5rem]": variant !== "ghost",
12482
+ "border-[rgba(255,255,255,0.15)]": variant === "outline"
12483
+ }
12484
+ ),
12485
+ ...props
12486
+ }
12487
+ );
12488
+ }
12489
+ );
12490
+ Button.displayName = "Button";
12491
+
12520
12492
  function MainContentLayout({
12521
12493
  children,
12522
12494
  className,
@@ -12745,39 +12717,6 @@ const SideDialog = Object.assign(SideDialogRoot, {
12745
12717
  Nav: SideDialogNav
12746
12718
  });
12747
12719
 
12748
- function EntityMainHeader({
12749
- title,
12750
- description,
12751
- icon,
12752
- children,
12753
- isLoading,
12754
- className,
12755
- placement = "page"
12756
- }) {
12757
- return /* @__PURE__ */ jsxRuntime.jsxs(
12758
- "header",
12759
- {
12760
- className: cn(
12761
- "grid gap-[.5rem]",
12762
- "[&>h1]:text-icon6 [&>h1]:text-[1.25rem] [&>h1]:font-normal [&>h1]:flex [&>h1]:items-center [&>h1]:gap-[0.5rem]",
12763
- "[&_svg]:w-[1.4rem] [&_svg]:h-[1.4rem] [&_svg]:text-icon3",
12764
- "[&>p]:text-icon4 [&>p]:text-[0.875rem] [&>p]:m-0",
12765
- { "pt-[2rem] pb-[2rem]": placement === "page" },
12766
- { "pt-[1.5em] pb-[1rem]": placement === "sidebar" },
12767
- className
12768
- ),
12769
- children: [
12770
- /* @__PURE__ */ jsxRuntime.jsxs("h1", { children: [
12771
- icon && icon,
12772
- " ",
12773
- title
12774
- ] }),
12775
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { children: description })
12776
- ]
12777
- }
12778
- );
12779
- }
12780
-
12781
12720
  function PageHeader({ title, description, icon, className }) {
12782
12721
  const titleIsLoading = title === "loading";
12783
12722
  const descriptionIsLoading = description === "loading";
@@ -13221,11 +13160,23 @@ function MainSidebarNavSeparator({ className }) {
13221
13160
  function MainSidebarRoot({ children, className }) {
13222
13161
  const { state, toggleSidebar } = useMainSidebar();
13223
13162
  const isCollapsed = state === "collapsed";
13163
+ React.useEffect(() => {
13164
+ const handleKeyDown = (event) => {
13165
+ if (event.ctrlKey && event.key === "b") {
13166
+ event.preventDefault();
13167
+ toggleSidebar();
13168
+ }
13169
+ };
13170
+ document.addEventListener("keydown", handleKeyDown);
13171
+ return () => {
13172
+ document.removeEventListener("keydown", handleKeyDown);
13173
+ };
13174
+ }, [toggleSidebar]);
13224
13175
  return /* @__PURE__ */ jsxRuntime.jsxs(
13225
13176
  "div",
13226
13177
  {
13227
13178
  className: cn(
13228
- "flex flex-col h-full px-[1rem] pb-[1rem] relative overflow-y-auto",
13179
+ "flex flex-col h-full px-[1rem] relative overflow-y-auto",
13229
13180
  {
13230
13181
  "lg:min-w-[13rem] xl:min-w-[14rem] 2xl:min-w-[15rem] 3xl:min-w-[16rem] 4xl:min-w-[17rem]": !isCollapsed
13231
13182
  },
@@ -13233,30 +13184,41 @@ function MainSidebarRoot({ children, className }) {
13233
13184
  ),
13234
13185
  children: [
13235
13186
  children,
13236
- /* @__PURE__ */ jsxRuntime.jsx(MainSidebarNavSeparator, {}),
13237
- /* @__PURE__ */ jsxRuntime.jsx(
13238
- "button",
13239
- {
13240
- onClick: toggleSidebar,
13241
- className: cn(
13242
- "inline-flex w-auto items-center text-icon3 h-[2rem] px-[0.75rem] rounded-md",
13243
- "hover:bg-surface4",
13244
- "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-icon3",
13245
- {
13246
- "ml-auto": !isCollapsed
13247
- }
13248
- ),
13249
- "aria-label": "Toggle sidebar",
13250
- children: /* @__PURE__ */ jsxRuntime.jsx(
13251
- lucideReact.PanelRightIcon,
13187
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-surface1 grid sticky bottom-0 pb-[.75rem] ", children: [
13188
+ /* @__PURE__ */ jsxRuntime.jsx(MainSidebarNavSeparator, {}),
13189
+ /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
13190
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
13191
+ "button",
13252
13192
  {
13253
- className: cn({
13254
- "rotate-180": isCollapsed
13255
- })
13193
+ onClick: toggleSidebar,
13194
+ className: cn(
13195
+ "inline-flex w-auto items-center text-icon3 h-[2rem] px-[0.75rem] rounded-md ml-auto",
13196
+ "hover:bg-surface4",
13197
+ "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-icon3",
13198
+ {
13199
+ "ml-auto": !isCollapsed
13200
+ }
13201
+ ),
13202
+ "aria-label": "Toggle sidebar",
13203
+ children: /* @__PURE__ */ jsxRuntime.jsx(
13204
+ lucideReact.PanelRightIcon,
13205
+ {
13206
+ className: cn({
13207
+ "rotate-180": isCollapsed
13208
+ })
13209
+ }
13210
+ )
13256
13211
  }
13257
- )
13258
- }
13259
- ),
13212
+ ) }),
13213
+ /* @__PURE__ */ jsxRuntime.jsxs(TooltipContent, { children: [
13214
+ "Toggle Sidebar",
13215
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 [&>svg]:w-[1em] [&>svg]:h-[1em]", children: [
13216
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyboardIcon, {}),
13217
+ " Ctrl+B"
13218
+ ] })
13219
+ ] })
13220
+ ] })
13221
+ ] }),
13260
13222
  /* @__PURE__ */ jsxRuntime.jsx(
13261
13223
  "button",
13262
13224
  {
@@ -13660,31 +13622,6 @@ function ScoresTools({ onEntityChange, onReset, selectedEntity, entityOptions, i
13660
13622
  ] });
13661
13623
  }
13662
13624
 
13663
- const useScoresByEntityId = (entityId, entityType, page = 0) => {
13664
- const client = react$3.useMastraClient();
13665
- const [scores, setScores] = React.useState(null);
13666
- const [isLoading, setIsLoading] = React.useState(true);
13667
- React.useEffect(() => {
13668
- const fetchScores = async () => {
13669
- setIsLoading(true);
13670
- try {
13671
- const res = await client.listScoresByEntityId({
13672
- entityId,
13673
- entityType,
13674
- page: page || 0,
13675
- perPage: 10
13676
- });
13677
- setScores(res);
13678
- setIsLoading(false);
13679
- } catch (error) {
13680
- setScores(null);
13681
- setIsLoading(false);
13682
- }
13683
- };
13684
- fetchScores();
13685
- }, [entityId, entityType, page]);
13686
- return { scores, isLoading };
13687
- };
13688
13625
  const useScoresByScorerId = ({ scorerId, page = 0, entityId, entityType }) => {
13689
13626
  const client = react$3.useMastraClient();
13690
13627
  return reactQuery.useQuery({
@@ -13869,6 +13806,20 @@ const useTraceSpanScores = ({ traceId = "", spanId = "", page }) => {
13869
13806
  });
13870
13807
  };
13871
13808
 
13809
+ const ModelResetContext = React.createContext(null);
13810
+ function useModelReset() {
13811
+ const context = React.useContext(ModelResetContext);
13812
+ if (!context) {
13813
+ return {
13814
+ registerResetFn: () => {
13815
+ },
13816
+ triggerReset: () => {
13817
+ }
13818
+ };
13819
+ }
13820
+ return context;
13821
+ }
13822
+
13872
13823
  const useAgentsModelProviders = () => {
13873
13824
  const client = react$3.useMastraClient();
13874
13825
  return reactQuery.useQuery({
@@ -18452,89 +18403,6 @@ const SpanScoring = ({ traceId, spanId, entityType }) => {
18452
18403
  ] });
18453
18404
  };
18454
18405
 
18455
- const useResizeColumn = ({
18456
- defaultWidth,
18457
- minimumWidth,
18458
- maximumWidth,
18459
- setCurrentWidth
18460
- }) => {
18461
- const [isDragging, setIsDragging] = React.useState(false);
18462
- const [sidebarWidth, setSidebarWidth] = React.useState(defaultWidth);
18463
- const containerRef = React.useRef(null);
18464
- const dragStartXRef = React.useRef(0);
18465
- const initialWidthRef = React.useRef(0);
18466
- const handleMouseDown = (e) => {
18467
- e.preventDefault();
18468
- setIsDragging(true);
18469
- dragStartXRef.current = e.clientX;
18470
- initialWidthRef.current = sidebarWidth;
18471
- };
18472
- React.useEffect(() => {
18473
- setSidebarWidth(defaultWidth);
18474
- setCurrentWidth?.(defaultWidth);
18475
- }, [defaultWidth]);
18476
- React.useEffect(() => {
18477
- const handleMouseMove = (e) => {
18478
- if (!isDragging || !containerRef.current) return;
18479
- const containerWidth = containerRef.current.offsetWidth;
18480
- const deltaX = dragStartXRef.current - e.clientX;
18481
- const deltaPercentage = deltaX / containerWidth * 100;
18482
- const newWidth = Math.min(Math.max(initialWidthRef.current + deltaPercentage, minimumWidth), maximumWidth);
18483
- setSidebarWidth(newWidth);
18484
- setCurrentWidth?.(newWidth);
18485
- };
18486
- const handleMouseUp = () => {
18487
- setIsDragging(false);
18488
- };
18489
- if (isDragging) {
18490
- window.addEventListener("mousemove", handleMouseMove);
18491
- window.addEventListener("mouseup", handleMouseUp);
18492
- }
18493
- return () => {
18494
- window.removeEventListener("mousemove", handleMouseMove);
18495
- window.removeEventListener("mouseup", handleMouseUp);
18496
- };
18497
- }, [isDragging]);
18498
- return { sidebarWidth, isDragging, handleMouseDown, containerRef };
18499
- };
18500
-
18501
- const MastraResizablePanel = ({
18502
- children,
18503
- defaultWidth,
18504
- minimumWidth,
18505
- maximumWidth,
18506
- className,
18507
- disabled = false,
18508
- setCurrentWidth,
18509
- dividerPosition = "left"
18510
- }) => {
18511
- const { sidebarWidth, isDragging, handleMouseDown, containerRef } = useResizeColumn({
18512
- defaultWidth: disabled ? 100 : defaultWidth,
18513
- minimumWidth,
18514
- maximumWidth,
18515
- setCurrentWidth
18516
- });
18517
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full h-full relative", className), ref: containerRef, style: { width: `${sidebarWidth}%` }, children: [
18518
- !disabled && dividerPosition === "left" ? /* @__PURE__ */ jsxRuntime.jsx(
18519
- "div",
18520
- {
18521
- 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
18522
- ${isDragging ? "bg-border2 w-1.5 cursor- col-resize" : ""}`,
18523
- onMouseDown: handleMouseDown
18524
- }
18525
- ) : null,
18526
- children,
18527
- !disabled && dividerPosition === "right" ? /* @__PURE__ */ jsxRuntime.jsx(
18528
- "div",
18529
- {
18530
- 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
18531
- ${isDragging ? "bg-border2 w-1.5 cursor- col-resize" : ""}`,
18532
- onMouseDown: handleMouseDown
18533
- }
18534
- ) : null
18535
- ] });
18536
- };
18537
-
18538
18406
  const Breadcrumb = ({ children, label }) => {
18539
18407
  return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": label, children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "gap-sm flex items-center", children }) });
18540
18408
  };
@@ -18624,113 +18492,6 @@ const EntityContent = ({ children, className }) => {
18624
18492
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children });
18625
18493
  };
18626
18494
 
18627
- function usePolling({
18628
- fetchFn,
18629
- interval = 3e3,
18630
- enabled = false,
18631
- onSuccess,
18632
- onError,
18633
- shouldContinue = () => true,
18634
- restartPolling = false
18635
- }) {
18636
- const [isPolling, setIsPolling] = React.useState(enabled);
18637
- const [error, setError] = React.useState(null);
18638
- const [data, setData] = React.useState(null);
18639
- const [isLoading, setIsLoading] = React.useState(false);
18640
- const [firstCallLoading, setFirstCallLoading] = React.useState(false);
18641
- const timeoutRef = React.useRef(null);
18642
- const mountedRef = React.useRef(true);
18643
- const [restart, setRestart] = React.useState(restartPolling);
18644
- const cleanup = React.useCallback(() => {
18645
- console.log("cleanup");
18646
- if (timeoutRef.current) {
18647
- clearTimeout(timeoutRef.current);
18648
- timeoutRef.current = null;
18649
- }
18650
- }, []);
18651
- const stopPolling = React.useCallback(() => {
18652
- console.log("stopPolling");
18653
- setIsPolling(false);
18654
- cleanup();
18655
- }, [cleanup]);
18656
- const startPolling = React.useCallback(() => {
18657
- console.log("startPolling");
18658
- setIsPolling(true);
18659
- setError(null);
18660
- }, []);
18661
- const executePoll = React.useCallback(
18662
- async (refetch2 = true) => {
18663
- if (!mountedRef.current) return;
18664
- setIsLoading(true);
18665
- try {
18666
- const result = await fetchFn();
18667
- setData(result);
18668
- setError(null);
18669
- onSuccess?.(result);
18670
- if (shouldContinue(result) && refetch2) {
18671
- timeoutRef.current = setTimeout(executePoll, interval);
18672
- } else {
18673
- stopPolling();
18674
- }
18675
- } catch (err) {
18676
- if (!mountedRef.current) return;
18677
- setError(err);
18678
- onError?.(err);
18679
- stopPolling();
18680
- } finally {
18681
- if (mountedRef.current) {
18682
- setFirstCallLoading(false);
18683
- setIsLoading(false);
18684
- }
18685
- }
18686
- },
18687
- [fetchFn, interval, onSuccess, onError, shouldContinue, stopPolling]
18688
- );
18689
- const refetch = React.useCallback(
18690
- (withPolling = false) => {
18691
- console.log("refetch", { withPolling });
18692
- if (withPolling) {
18693
- setIsPolling(true);
18694
- } else {
18695
- executePoll(false);
18696
- }
18697
- setError(null);
18698
- },
18699
- [executePoll]
18700
- );
18701
- React.useEffect(() => {
18702
- mountedRef.current = true;
18703
- if (enabled && isPolling) {
18704
- executePoll(true);
18705
- }
18706
- return () => {
18707
- console.log("cleanup poll");
18708
- mountedRef.current = false;
18709
- cleanup();
18710
- };
18711
- }, [enabled, isPolling, executePoll, cleanup]);
18712
- React.useEffect(() => {
18713
- setRestart(restartPolling);
18714
- }, [restartPolling]);
18715
- React.useEffect(() => {
18716
- if (restart && !isPolling) {
18717
- setIsPolling(true);
18718
- executePoll();
18719
- setRestart(false);
18720
- }
18721
- }, [restart]);
18722
- return {
18723
- isPolling,
18724
- isLoading,
18725
- error,
18726
- data,
18727
- startPolling,
18728
- stopPolling,
18729
- firstCallLoading,
18730
- refetch
18731
- };
18732
- }
18733
-
18734
18495
  const PlaygroundQueryClient = ({ children }) => {
18735
18496
  const queryClient = new reactQuery.QueryClient();
18736
18497
  return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClient, children });
@@ -19270,7 +19031,6 @@ exports.EntityContent = EntityContent;
19270
19031
  exports.EntityDescription = EntityDescription;
19271
19032
  exports.EntityHeader = EntityHeader;
19272
19033
  exports.EntityIcon = EntityIcon;
19273
- exports.EntityMainHeader = EntityMainHeader;
19274
19034
  exports.EntityName = EntityName;
19275
19035
  exports.Entry = Entry;
19276
19036
  exports.EntryCell = EntryCell;
@@ -19279,7 +19039,6 @@ exports.EntryListSkeleton = EntryListSkeleton;
19279
19039
  exports.EnvIcon = EnvIcon;
19280
19040
  exports.FiltersIcon = FiltersIcon;
19281
19041
  exports.FolderIcon = FolderIcon;
19282
- exports.FormActions = FormActions;
19283
19042
  exports.GithubCoinIcon = GithubCoinIcon;
19284
19043
  exports.GithubIcon = GithubIcon;
19285
19044
  exports.GoogleIcon = GoogleIcon;
@@ -19306,12 +19065,10 @@ exports.MainContentContent = MainContentContent;
19306
19065
  exports.MainContentLayout = MainContentLayout;
19307
19066
  exports.MainSidebar = MainSidebar;
19308
19067
  exports.MainSidebarProvider = MainSidebarProvider;
19309
- exports.MastraResizablePanel = MastraResizablePanel;
19310
19068
  exports.McpCoinIcon = McpCoinIcon;
19311
19069
  exports.McpServerIcon = McpServerIcon;
19312
19070
  exports.MemoryIcon = MemoryIcon;
19313
19071
  exports.MemorySearch = MemorySearch;
19314
- exports.ModelResetProvider = ModelResetProvider;
19315
19072
  exports.Notification = Notification;
19316
19073
  exports.OpenAIIcon = OpenAIIcon;
19317
19074
  exports.PageHeader = PageHeader;
@@ -19319,7 +19076,6 @@ exports.PlaygroundQueryClient = PlaygroundQueryClient;
19319
19076
  exports.PlaygroundTabs = PlaygroundTabs;
19320
19077
  exports.PromptIcon = PromptIcon;
19321
19078
  exports.RadioGroup = RadioGroup;
19322
- exports.RadioGroupField = RadioGroupField;
19323
19079
  exports.RadioGroupItem = RadioGroupItem;
19324
19080
  exports.RepoIcon = RepoIcon;
19325
19081
  exports.RequestContext = RequestContext;
@@ -19338,8 +19094,8 @@ exports.Sections = Sections;
19338
19094
  exports.SelectField = SelectField;
19339
19095
  exports.SettingsIcon = SettingsIcon;
19340
19096
  exports.SideDialog = SideDialog;
19097
+ exports.Skeleton = Skeleton;
19341
19098
  exports.SlashIcon = SlashIcon;
19342
- exports.SliderField = SliderField;
19343
19099
  exports.SpanScoreList = SpanScoreList;
19344
19100
  exports.SpanScoring = SpanScoring;
19345
19101
  exports.SpanTabs = SpanTabs;
@@ -19356,7 +19112,6 @@ exports.TemplateSuccess = TemplateSuccess;
19356
19112
  exports.TemplatesList = TemplatesList;
19357
19113
  exports.TemplatesTools = TemplatesTools;
19358
19114
  exports.TextAndIcon = TextAndIcon;
19359
- exports.TextareaField = TextareaField;
19360
19115
  exports.Th = Th;
19361
19116
  exports.Thead = Thead;
19362
19117
  exports.ThreadDeleteButton = ThreadDeleteButton;
@@ -19387,7 +19142,6 @@ exports.TracesTools = TracesTools;
19387
19142
  exports.TsIcon = TsIcon;
19388
19143
  exports.Txt = Txt;
19389
19144
  exports.TxtCell = TxtCell;
19390
- exports.UnitCell = UnitCell;
19391
19145
  exports.VariablesIcon = VariablesIcon;
19392
19146
  exports.WorkflowCoinIcon = WorkflowCoinIcon;
19393
19147
  exports.WorkflowCombobox = WorkflowCombobox;
@@ -19437,14 +19191,11 @@ exports.useMainSidebar = useMainSidebar;
19437
19191
  exports.useMemory = useMemory;
19438
19192
  exports.useMemoryConfig = useMemoryConfig;
19439
19193
  exports.useMemorySearch = useMemorySearch;
19440
- exports.useModelReset = useModelReset;
19441
19194
  exports.usePlaygroundStore = usePlaygroundStore;
19442
- exports.usePolling = usePolling;
19443
19195
  exports.useReorderModelList = useReorderModelList;
19444
19196
  exports.useResetAgentModel = useResetAgentModel;
19445
19197
  exports.useScorer = useScorer;
19446
19198
  exports.useScorers = useScorers;
19447
- exports.useScoresByEntityId = useScoresByEntityId;
19448
19199
  exports.useScoresByScorerId = useScoresByScorerId;
19449
19200
  exports.useSpeechRecognition = useSpeechRecognition;
19450
19201
  exports.useStreamWorkflow = useStreamWorkflow;