@mastra/playground-ui 7.0.0-beta.24 → 7.0.0-beta.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useAssistantState, 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, ShieldAlert, ChevronDown, ChevronRight, RefreshCw, Tag, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, CheckCircleIcon, X, Share2, Check, Clock as Clock$1, PlayCircle, Workflow, Layers, List, CalendarClock, Timer, CornerDownRight, GitBranch, Repeat, Repeat1, Network, TriangleAlertIcon, XIcon, CalendarIcon, CircleAlertIcon, Braces, ChevronDownIcon, Brackets, PlusIcon, TrashIcon, Plus, Loader2, Circle, EyeOffIcon, EyeIcon, PauseIcon, HourglassIcon, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Maximize, AlertCircleIcon, CirclePause, StopCircle, Cpu, SearchIcon, ChevronsUpDown, Search, ArrowRight, ArrowLeft, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, Info, ExternalLink, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, ChevronRightIcon, GaugeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, Copy, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, CircleChevronUpIcon, CircleChevronDownIcon, FileIcon, ChevronsUpIcon, ChevronsDownIcon, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, CircleDashedIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, PanelRightIcon, KeyboardIcon, CircleSlash, Trash, Link2, MoveRight } from 'lucide-react';
3
+ import { CheckIcon as CheckIcon$1, CopyIcon, ShieldAlert, ChevronDown, ChevronRight, RefreshCw, Tag, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, CheckCircleIcon, X, Share2, Check, Clock as Clock$1, PlayCircle, Workflow, Layers, List, CalendarClock, Timer, CornerDownRight, GitBranch, Repeat, Repeat1, Network, TriangleAlertIcon, XIcon, CalendarIcon, CircleAlertIcon, Braces, ChevronDownIcon, Brackets, PlusIcon, TrashIcon, Plus, Loader2, Circle, EyeOffIcon, EyeIcon, PauseIcon, HourglassIcon, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Maximize, AlertCircleIcon, CirclePause, StopCircle, SearchIcon, Cpu, ChevronsUpDown, Search, ArrowRight, ArrowLeft, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, Info, ExternalLink, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, ChevronRightIcon, GaugeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, Copy, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, CircleChevronUpIcon, CircleChevronDownIcon, FileIcon, ChevronsUpIcon, ChevronsDownIcon, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, CircleDashedIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, PanelRightIcon, KeyboardIcon, CircleSlash, Trash, Link2, MoveRight } 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, useEffectEvent, Suspense, useLayoutEffect } from 'react';
6
6
  import { S as Shadows, G as Glows, B as BorderColors, C as Colors, a as Sizes, F as FontSizes, L as LineHeights, b as BorderRadius, c as Spacings } from './spacings-Ddc7umGk.js';
@@ -4306,6 +4306,36 @@ const AgentNetworkCoinIcon = (props) => /* @__PURE__ */ jsxs("svg", { width: "12
4306
4306
  ) }) })
4307
4307
  ] });
4308
4308
 
4309
+ function ProcessorIcon(props) {
4310
+ return /* @__PURE__ */ jsxs(
4311
+ "svg",
4312
+ {
4313
+ width: "24",
4314
+ height: "24",
4315
+ viewBox: "0 0 24 24",
4316
+ fill: "none",
4317
+ stroke: "currentColor",
4318
+ strokeWidth: "2",
4319
+ strokeLinecap: "round",
4320
+ strokeLinejoin: "round",
4321
+ xmlns: "http://www.w3.org/2000/svg",
4322
+ ...props,
4323
+ children: [
4324
+ /* @__PURE__ */ jsx("rect", { width: "16", height: "16", x: "4", y: "4", rx: "2" }),
4325
+ /* @__PURE__ */ jsx("rect", { width: "6", height: "6", x: "9", y: "9", rx: "1" }),
4326
+ /* @__PURE__ */ jsx("path", { d: "M15 2v2" }),
4327
+ /* @__PURE__ */ jsx("path", { d: "M15 20v2" }),
4328
+ /* @__PURE__ */ jsx("path", { d: "M2 15h2" }),
4329
+ /* @__PURE__ */ jsx("path", { d: "M2 9h2" }),
4330
+ /* @__PURE__ */ jsx("path", { d: "M20 15h2" }),
4331
+ /* @__PURE__ */ jsx("path", { d: "M20 9h2" }),
4332
+ /* @__PURE__ */ jsx("path", { d: "M9 2v2" }),
4333
+ /* @__PURE__ */ jsx("path", { d: "M9 20v2" })
4334
+ ]
4335
+ }
4336
+ );
4337
+ }
4338
+
4309
4339
  const variantClasses$1 = {
4310
4340
  warning: "bg-accent6Darker border-accent6/30 text-accent6",
4311
4341
  destructive: "bg-accent2Darker border-accent2/30 text-accent2",
@@ -4726,6 +4756,8 @@ function ToolCallProvider({
4726
4756
  children,
4727
4757
  approveToolcall,
4728
4758
  declineToolcall,
4759
+ approveToolcallGenerate,
4760
+ declineToolcallGenerate,
4729
4761
  approveNetworkToolcall,
4730
4762
  declineNetworkToolcall,
4731
4763
  isRunning,
@@ -4738,6 +4770,8 @@ function ToolCallProvider({
4738
4770
  value: {
4739
4771
  approveToolcall,
4740
4772
  declineToolcall,
4773
+ approveToolcallGenerate,
4774
+ declineToolcallGenerate,
4741
4775
  approveNetworkToolcall,
4742
4776
  declineNetworkToolcall,
4743
4777
  isRunning,
@@ -4761,11 +4795,14 @@ const ToolApprovalButtons = ({
4761
4795
  toolCallId,
4762
4796
  toolApprovalMetadata,
4763
4797
  toolName,
4764
- isNetwork
4798
+ isNetwork,
4799
+ isGenerateMode
4765
4800
  }) => {
4766
4801
  const {
4767
4802
  approveToolcall,
4768
4803
  declineToolcall,
4804
+ approveToolcallGenerate,
4805
+ declineToolcallGenerate,
4769
4806
  isRunning,
4770
4807
  toolCallApprovals,
4771
4808
  approveNetworkToolcall,
@@ -4775,6 +4812,8 @@ const ToolApprovalButtons = ({
4775
4812
  const handleApprove = () => {
4776
4813
  if (isNetwork) {
4777
4814
  approveNetworkToolcall(toolName, toolApprovalMetadata?.runId);
4815
+ } else if (isGenerateMode) {
4816
+ approveToolcallGenerate(toolCallId);
4778
4817
  } else {
4779
4818
  approveToolcall(toolCallId);
4780
4819
  }
@@ -4782,6 +4821,8 @@ const ToolApprovalButtons = ({
4782
4821
  const handleDecline = () => {
4783
4822
  if (isNetwork) {
4784
4823
  declineNetworkToolcall(toolName, toolApprovalMetadata?.runId);
4824
+ } else if (isGenerateMode) {
4825
+ declineToolcallGenerate(toolCallId);
4785
4826
  } else {
4786
4827
  declineToolcall(toolCallId);
4787
4828
  }
@@ -4883,7 +4924,8 @@ const ToolBadge = ({
4883
4924
  toolCallId,
4884
4925
  toolApprovalMetadata,
4885
4926
  toolName,
4886
- isNetwork
4927
+ isNetwork,
4928
+ isGenerateMode: metadata?.mode === "generate"
4887
4929
  }
4888
4930
  )
4889
4931
  ] })
@@ -4961,7 +5003,10 @@ const useWorkflows = () => {
4961
5003
  const { requestContext } = usePlaygroundStore();
4962
5004
  return useQuery({
4963
5005
  queryKey: ["workflows", requestContext],
4964
- queryFn: () => client.listWorkflows(requestContext)
5006
+ queryFn: async () => {
5007
+ const workflows = await client.listWorkflows(requestContext);
5008
+ return Object.fromEntries(Object.entries(workflows).filter(([_, workflow]) => !workflow.isProcessorWorkflow));
5009
+ }
4965
5010
  });
4966
5011
  };
4967
5012
 
@@ -8137,9 +8182,10 @@ const WorkflowInputData = ({
8137
8182
  isSubmitLoading,
8138
8183
  submitButtonLabel,
8139
8184
  onSubmit,
8140
- children
8185
+ children,
8186
+ isProcessorWorkflow
8141
8187
  }) => {
8142
- const [type, setType] = useState("form");
8188
+ const [type, setType] = useState(isProcessorWorkflow ? "simple" : "form");
8143
8189
  return /* @__PURE__ */ jsxs("div", { children: [
8144
8190
  /* @__PURE__ */ jsx(
8145
8191
  RadioGroup,
@@ -8149,6 +8195,10 @@ const WorkflowInputData = ({
8149
8195
  onValueChange: (value) => setType(value),
8150
8196
  className: "pb-4",
8151
8197
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-4", children: [
8198
+ isProcessorWorkflow && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
8199
+ /* @__PURE__ */ jsx(RadioGroupItem, { value: "simple", id: "simple" }),
8200
+ /* @__PURE__ */ jsx(Label, { htmlFor: "simple", className: "!text-neutral3 text-ui-sm", children: "Simple" })
8201
+ ] }),
8152
8202
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
8153
8203
  /* @__PURE__ */ jsx(RadioGroupItem, { value: "form", id: "form" }),
8154
8204
  /* @__PURE__ */ jsx(Label, { htmlFor: "form", className: "!text-neutral3 text-ui-sm", children: "Form" })
@@ -8166,7 +8216,18 @@ const WorkflowInputData = ({
8166
8216
  className: cn({
8167
8217
  "opacity-50 pointer-events-none": isSubmitLoading
8168
8218
  }),
8169
- children: type === "form" ? /* @__PURE__ */ jsx(
8219
+ children: type === "simple" && isProcessorWorkflow ? /* @__PURE__ */ jsx(
8220
+ SimpleProcessorInput,
8221
+ {
8222
+ schema,
8223
+ defaultValues,
8224
+ isSubmitLoading,
8225
+ submitButtonLabel,
8226
+ onSubmit,
8227
+ withoutSubmit,
8228
+ children
8229
+ }
8230
+ ) : type === "form" ? /* @__PURE__ */ jsx(
8170
8231
  DynamicForm,
8171
8232
  {
8172
8233
  schema,
@@ -8235,6 +8296,87 @@ const JSONInput = ({
8235
8296
  withoutSubmit ? null : /* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleSubmit, className: "w-full", size: "lg", children: isSubmitLoading ? /* @__PURE__ */ jsx(Loader2, { className: "animate-spin" }) : submitButtonLabel })
8236
8297
  ] });
8237
8298
  };
8299
+ const PROCESSOR_PHASES = [
8300
+ { value: "input", label: "Input - Process input messages before LLM" },
8301
+ { value: "inputStep", label: "Input Step - Process at each agentic loop step" },
8302
+ { value: "outputStream", label: "Output Stream - Process streaming chunks" },
8303
+ { value: "outputResult", label: "Output Result - Process complete output" },
8304
+ { value: "outputStep", label: "Output Step - Process after each LLM response" }
8305
+ ];
8306
+ const SimpleProcessorInput = ({
8307
+ schema,
8308
+ defaultValues,
8309
+ isSubmitLoading,
8310
+ submitButtonLabel,
8311
+ onSubmit,
8312
+ withoutSubmit,
8313
+ children
8314
+ }) => {
8315
+ const [message, setMessage] = useState("Hello, this is a test message.");
8316
+ const [phase, setPhase] = useState("input");
8317
+ const [errors, setErrors] = useState([]);
8318
+ const handleSubmit = () => {
8319
+ setErrors([]);
8320
+ const isOutputPhase = phase === "outputStep" || phase === "outputResult";
8321
+ const messageRole = isOutputPhase ? "assistant" : "user";
8322
+ const data = {
8323
+ messages: [
8324
+ {
8325
+ id: crypto.randomUUID(),
8326
+ role: messageRole,
8327
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
8328
+ content: {
8329
+ format: 2,
8330
+ parts: [{ type: "text", text: message }]
8331
+ }
8332
+ }
8333
+ ],
8334
+ phase
8335
+ };
8336
+ try {
8337
+ const result = schema.safeParse(data);
8338
+ if (!result.success) {
8339
+ setErrors(result.error.issues.map((e) => `[${e.path.join(".")}] ${e.message}`));
8340
+ } else {
8341
+ onSubmit(result.data);
8342
+ }
8343
+ } catch (e) {
8344
+ setErrors(["Error processing input"]);
8345
+ }
8346
+ };
8347
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
8348
+ errors.length > 0 && /* @__PURE__ */ jsxs("div", { className: "border border-accent2 rounded-lg p-2", children: [
8349
+ /* @__PURE__ */ jsxs(Txt, { as: "p", variant: "ui-md", className: "text-accent2 font-semibold", children: [
8350
+ errors.length,
8351
+ " errors found"
8352
+ ] }),
8353
+ /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside", children: errors.map((error, idx) => /* @__PURE__ */ jsx("li", { className: "text-ui-sm text-accent2", children: error }, idx)) })
8354
+ ] }),
8355
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
8356
+ /* @__PURE__ */ jsx(Txt, { as: "label", variant: "ui-sm", className: "text-neutral3", children: "Phase" }),
8357
+ /* @__PURE__ */ jsxs(Select, { value: phase, onValueChange: setPhase, children: [
8358
+ /* @__PURE__ */ jsx(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select phase" }) }),
8359
+ /* @__PURE__ */ jsx(SelectContent, { children: PROCESSOR_PHASES.map((p) => /* @__PURE__ */ jsx(SelectItem, { value: p.value, children: p.value }, p.value)) })
8360
+ ] }),
8361
+ /* @__PURE__ */ jsx(Txt, { variant: "ui-xs", className: "text-icon4", children: PROCESSOR_PHASES.find((p) => p.value === phase)?.label })
8362
+ ] }),
8363
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
8364
+ /* @__PURE__ */ jsx(Txt, { as: "label", variant: "ui-sm", className: "text-neutral3", children: "Test Message" }),
8365
+ /* @__PURE__ */ jsx(
8366
+ "textarea",
8367
+ {
8368
+ value: message,
8369
+ onChange: (e) => setMessage(e.target.value),
8370
+ placeholder: "Enter a test message...",
8371
+ rows: 4,
8372
+ className: "w-full bg-transparent border border-border1 rounded-md p-3 text-ui-sm text-neutral6 placeholder:text-neutral3 focus:outline-none focus:ring-2 focus:ring-accent1"
8373
+ }
8374
+ )
8375
+ ] }),
8376
+ children,
8377
+ withoutSubmit ? null : /* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleSubmit, className: "w-full", size: "lg", children: isSubmitLoading ? /* @__PURE__ */ jsx(Loader2, { className: "animate-spin" }) : submitButtonLabel })
8378
+ ] });
8379
+ };
8238
8380
 
8239
8381
  const formatJSON = async (code) => {
8240
8382
  const formatted = await prettier.format(code, {
@@ -9615,7 +9757,8 @@ function WorkflowTrigger({
9615
9757
  setPayload(data);
9616
9758
  handleExecuteWorkflow(data);
9617
9759
  },
9618
- withoutSubmit: !!paramsRunId
9760
+ withoutSubmit: !!paramsRunId,
9761
+ isProcessorWorkflow: workflow?.isProcessorWorkflow
9619
9762
  }
9620
9763
  ) : !!paramsRunId ? null : /* @__PURE__ */ jsx(
9621
9764
  Button,
@@ -10046,6 +10189,8 @@ const LinkComponentContext = createContext({
10046
10189
  networkThreadLink: () => "",
10047
10190
  scorerLink: () => "",
10048
10191
  toolLink: () => "",
10192
+ processorsLink: () => "",
10193
+ processorLink: () => "",
10049
10194
  mcpServerLink: () => "",
10050
10195
  mcpServerToolLink: () => "",
10051
10196
  workflowRunLink: () => ""
@@ -10062,7 +10207,7 @@ const useLinkComponent = () => {
10062
10207
  return ctx;
10063
10208
  };
10064
10209
 
10065
- const columns$4 = [
10210
+ const columns$5 = [
10066
10211
  {
10067
10212
  id: "name",
10068
10213
  header: "Name",
@@ -10072,10 +10217,7 @@ const columns$4 = [
10072
10217
  return /* @__PURE__ */ jsx(
10073
10218
  EntryCell,
10074
10219
  {
10075
- name: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
10076
- /* @__PURE__ */ jsx(Link, { href: paths.workflowLink(row.original.id), children: row.original.name }),
10077
- workflow.isProcessorWorkflow && /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(Cpu, { className: "h-3 w-3" }), className: "!h-badge-sm bg-violet-500/20 text-violet-400", children: "Processor" })
10078
- ] }),
10220
+ name: /* @__PURE__ */ jsx(Link, { href: paths.workflowLink(row.original.id), children: row.original.name }),
10079
10221
  description: workflow.description,
10080
10222
  meta: void 0
10081
10223
  }
@@ -10188,7 +10330,7 @@ function WorkflowTable({ workflows, isLoading }) {
10188
10330
  }, [workflows]);
10189
10331
  const table = useReactTable({
10190
10332
  data: workflowData,
10191
- columns: columns$4,
10333
+ columns: columns$5,
10192
10334
  getCoreRowModel: getCoreRowModel()
10193
10335
  });
10194
10336
  const ths = table.getHeaderGroups()[0];
@@ -11081,7 +11223,8 @@ const WorkflowBadge = ({
11081
11223
  toolCallId,
11082
11224
  toolApprovalMetadata,
11083
11225
  toolName,
11084
- isNetwork
11226
+ isNetwork,
11227
+ isGenerateMode: metadata?.mode === "generate"
11085
11228
  }
11086
11229
  )
11087
11230
  ]
@@ -11185,7 +11328,8 @@ const AgentBadge = ({
11185
11328
  toolCallId,
11186
11329
  toolApprovalMetadata,
11187
11330
  toolName,
11188
- isNetwork
11331
+ isNetwork,
11332
+ isGenerateMode: metadata?.mode === "generate"
11189
11333
  }
11190
11334
  )
11191
11335
  ]
@@ -11253,8 +11397,8 @@ const ToolFallbackInner = ({ toolName, result, args, metadata, toolCallId, ...pr
11253
11397
  const isNetwork = metadata?.mode === "network";
11254
11398
  const agentToolName = toolName.startsWith("agent-") ? toolName.substring("agent-".length) : toolName;
11255
11399
  const workflowToolName = toolName.startsWith("workflow-") ? toolName.substring("workflow-".length) : toolName;
11256
- const requireApprovalMetadata = (metadata?.mode === "stream" || metadata?.mode === "network") && metadata?.requireApprovalMetadata;
11257
- const suspendedTools = (metadata?.mode === "stream" || metadata?.mode === "network") && metadata?.suspendedTools;
11400
+ const requireApprovalMetadata = (metadata?.mode === "stream" || metadata?.mode === "network" || metadata?.mode === "generate") && metadata?.requireApprovalMetadata;
11401
+ const suspendedTools = (metadata?.mode === "stream" || metadata?.mode === "network" || metadata?.mode === "generate") && metadata?.suspendedTools;
11258
11402
  const toolApprovalMetadata = requireApprovalMetadata ? requireApprovalMetadata?.[toolName] ?? requireApprovalMetadata?.[toolCallId] : void 0;
11259
11403
  const suspendedToolMetadata = suspendedTools ? suspendedTools?.[toolName] : void 0;
11260
11404
  const toolCalled = metadata?.mode === "network" && metadata?.hasMoreMessages ? true : void 0;
@@ -13000,6 +13144,8 @@ function MastraRuntimeProvider({
13000
13144
  setMessages,
13001
13145
  approveToolCall,
13002
13146
  declineToolCall,
13147
+ approveToolCallGenerate,
13148
+ declineToolCallGenerate,
13003
13149
  toolCallApprovals,
13004
13150
  approveNetworkToolCall,
13005
13151
  declineNetworkToolCall,
@@ -13451,6 +13597,8 @@ function MastraRuntimeProvider({
13451
13597
  {
13452
13598
  approveToolcall: approveToolCall,
13453
13599
  declineToolcall: declineToolCall,
13600
+ approveToolcallGenerate: approveToolCallGenerate,
13601
+ declineToolcallGenerate: declineToolCallGenerate,
13454
13602
  isRunning: isRunningStream,
13455
13603
  toolCallApprovals,
13456
13604
  approveNetworkToolcall: approveNetworkToolCall,
@@ -14054,7 +14202,7 @@ const AgentSettings = ({ agentId }) => {
14054
14202
  ] });
14055
14203
  };
14056
14204
 
14057
- const NameCell$3 = ({ row }) => {
14205
+ const NameCell$4 = ({ row }) => {
14058
14206
  const { Link, paths } = useLinkComponent();
14059
14207
  return /* @__PURE__ */ jsx(
14060
14208
  EntryCell,
@@ -14064,11 +14212,11 @@ const NameCell$3 = ({ row }) => {
14064
14212
  }
14065
14213
  );
14066
14214
  };
14067
- const columns$3 = [
14215
+ const columns$4 = [
14068
14216
  {
14069
14217
  header: "Name",
14070
14218
  accessorKey: "name",
14071
- cell: NameCell$3
14219
+ cell: NameCell$4
14072
14220
  },
14073
14221
  {
14074
14222
  header: "Model",
@@ -14110,7 +14258,9 @@ const columns$3 = [
14110
14258
  const agentsCount = Object.keys(agent.agents || {}).length;
14111
14259
  const toolsCount = Object.keys(agent.tools || {}).length;
14112
14260
  const workflowsCount = Object.keys(agent.workflows || {}).length;
14113
- return /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsxs("span", { className: "flex flex-row gap-2 w-full items-center", children: [
14261
+ const inputProcessorsCount = (agent.inputProcessors || []).length;
14262
+ const outputProcessorsCount = (agent.outputProcessors || []).length;
14263
+ return /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsxs("span", { className: "flex flex-row gap-2 w-full items-center flex-wrap", children: [
14114
14264
  /* @__PURE__ */ jsxs(Badge, { variant: "default", icon: /* @__PURE__ */ jsx(AgentIcon, { className: "text-accent1" }), children: [
14115
14265
  agentsCount,
14116
14266
  " agent",
@@ -14125,6 +14275,22 @@ const columns$3 = [
14125
14275
  workflowsCount,
14126
14276
  " workflow",
14127
14277
  workflowsCount > 1 ? "s" : ""
14278
+ ] }),
14279
+ (inputProcessorsCount > 0 || outputProcessorsCount > 0) && /* @__PURE__ */ jsxs(Tooltip, { children: [
14280
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Badge, { variant: "default", icon: /* @__PURE__ */ jsx(ProcessorIcon, { className: "text-accent4" }) }) }),
14281
+ /* @__PURE__ */ jsxs(TooltipContent, { className: "flex flex-col gap-1", children: [
14282
+ /* @__PURE__ */ jsx(
14283
+ "a",
14284
+ {
14285
+ href: "https://mastra.ai/docs/agents/processors",
14286
+ target: "_blank",
14287
+ rel: "noopener noreferrer",
14288
+ className: "text-accent1 hover:underline",
14289
+ children: "Processors"
14290
+ }
14291
+ ),
14292
+ /* @__PURE__ */ jsx("span", { className: "text-icon3", children: [inputProcessorsCount > 0 && "input", outputProcessorsCount > 0 && "output"].filter(Boolean).join(", ") })
14293
+ ] })
14128
14294
  ] })
14129
14295
  ] }) });
14130
14296
  }
@@ -14137,7 +14303,7 @@ function AgentsTable({ agents, isLoading }) {
14137
14303
  const projectData = useMemo(() => Object.values(agents), [agents]);
14138
14304
  const table = useReactTable({
14139
14305
  data: projectData,
14140
- columns: columns$3,
14306
+ columns: columns$4,
14141
14307
  getCoreRowModel: getCoreRowModel()
14142
14308
  });
14143
14309
  const ths = table.getHeaderGroups()[0];
@@ -15183,7 +15349,7 @@ function ScorerCombobox({
15183
15349
  );
15184
15350
  }
15185
15351
 
15186
- const NameCell$2 = ({ row }) => {
15352
+ const NameCell$3 = ({ row }) => {
15187
15353
  const { Link, paths } = useLinkComponent();
15188
15354
  const scorer = row.original;
15189
15355
  return /* @__PURE__ */ jsx(
@@ -15194,11 +15360,11 @@ const NameCell$2 = ({ row }) => {
15194
15360
  }
15195
15361
  );
15196
15362
  };
15197
- const columns$2 = [
15363
+ const columns$3 = [
15198
15364
  {
15199
15365
  header: "Name",
15200
15366
  accessorKey: "name",
15201
- cell: NameCell$2
15367
+ cell: NameCell$3
15202
15368
  }
15203
15369
  ];
15204
15370
 
@@ -15217,7 +15383,7 @@ function ScorersTable({ scorers, isLoading }) {
15217
15383
  );
15218
15384
  const table = useReactTable({
15219
15385
  data: scorersData,
15220
- columns: columns$2,
15386
+ columns: columns$3,
15221
15387
  getCoreRowModel: getCoreRowModel()
15222
15388
  });
15223
15389
  const ths = table.getHeaderGroups()[0];
@@ -16157,6 +16323,8 @@ const AgentMetadata = ({ agentId }) => {
16157
16323
  const tools = Object.keys(agentTools).map((key) => agentTools[key]);
16158
16324
  const agentWorkflows = agent.workflows ?? {};
16159
16325
  const workflows = Object.keys(agentWorkflows).map((key) => ({ id: key, ...agentWorkflows[key] }));
16326
+ const inputProcessors = agent.inputProcessors ?? [];
16327
+ const outputProcessors = agent.outputProcessors ?? [];
16160
16328
  return /* @__PURE__ */ jsxs(AgentMetadataWrapper, { children: [
16161
16329
  agent?.description && /* @__PURE__ */ jsx(AgentMetadataSection, { title: "Description", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral6", children: agent.description }) }),
16162
16330
  agent.modelList ? /* @__PURE__ */ jsx(AgentMetadataSection, { title: "Models", children: /* @__PURE__ */ jsx(
@@ -16250,6 +16418,17 @@ const AgentMetadata = ({ agentId }) => {
16250
16418
  children: /* @__PURE__ */ jsx(AgentMetadataWorkflowList, { workflows })
16251
16419
  }
16252
16420
  ),
16421
+ (inputProcessors.length > 0 || outputProcessors.length > 0) && /* @__PURE__ */ jsx(
16422
+ AgentMetadataSection,
16423
+ {
16424
+ title: "Processors",
16425
+ hint: {
16426
+ link: "https://mastra.ai/docs/agents/processors",
16427
+ title: "Processors documentation"
16428
+ },
16429
+ children: /* @__PURE__ */ jsx(AgentMetadataCombinedProcessorList, { inputProcessors, outputProcessors })
16430
+ }
16431
+ ),
16253
16432
  /* @__PURE__ */ jsx(AgentMetadataSection, { title: "Scorers", children: /* @__PURE__ */ jsx(AgentMetadataScorerList, { entityId: agent.name, entityType: "AGENT" }) }),
16254
16433
  /* @__PURE__ */ jsx(AgentMetadataSection, { title: "System Prompt", children: /* @__PURE__ */ jsx(PromptEnhancer, { agentId }) })
16255
16434
  ] });
@@ -16286,6 +16465,21 @@ const AgentMetadataScorerList = ({ entityId, entityType }) => {
16286
16465
  }
16287
16466
  return /* @__PURE__ */ jsx(AgentMetadataList, { children: scorerList.map((scorer) => /* @__PURE__ */ jsx(AgentMetadataListItem, { children: /* @__PURE__ */ jsx(Link, { href: paths.scorerLink(scorer.id), "data-testid": "scorer-badge", children: /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(GaugeIcon, { className: "text-neutral3" }), children: scorer.scorer.config.name }) }) }, scorer.id)) });
16288
16467
  };
16468
+ const AgentMetadataCombinedProcessorList = ({
16469
+ inputProcessors,
16470
+ outputProcessors
16471
+ }) => {
16472
+ const { Link, paths } = useLinkComponent();
16473
+ if (inputProcessors.length === 0 && outputProcessors.length === 0) {
16474
+ return /* @__PURE__ */ jsx(AgentMetadataListEmpty, { children: "No processors" });
16475
+ }
16476
+ const inputProcessorId = inputProcessors[0]?.id;
16477
+ const outputProcessorId = outputProcessors[0]?.id;
16478
+ return /* @__PURE__ */ jsxs(AgentMetadataList, { children: [
16479
+ inputProcessors.length > 0 && inputProcessorId && /* @__PURE__ */ jsx(AgentMetadataListItem, { children: /* @__PURE__ */ jsx(Link, { href: `${paths.workflowLink(inputProcessorId)}/graph`, "data-testid": "processor-badge", children: /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(ProcessorIcon, { className: "text-accent4" }), children: "input" }) }) }),
16480
+ outputProcessors.length > 0 && outputProcessorId && /* @__PURE__ */ jsx(AgentMetadataListItem, { children: /* @__PURE__ */ jsx(Link, { href: `${paths.workflowLink(outputProcessorId)}/graph`, "data-testid": "processor-badge", children: /* @__PURE__ */ jsx(Badge, { icon: /* @__PURE__ */ jsx(ProcessorIcon, { className: "text-accent5" }), children: "output" }) }) })
16481
+ ] });
16482
+ };
16289
16483
 
16290
16484
  const AgentEntityHeader = ({ agentId }) => {
16291
16485
  const { data: agent, isLoading } = useAgent(agentId);
@@ -17485,6 +17679,320 @@ const AgentLayout = ({ agentId, children, leftSlot, rightSlot }) => {
17485
17679
  ] });
17486
17680
  };
17487
17681
 
17682
+ const NameCell$2 = ({ row }) => {
17683
+ const { Link, paths } = useLinkComponent();
17684
+ const processor = row.original;
17685
+ return /* @__PURE__ */ jsx(
17686
+ EntryCell,
17687
+ {
17688
+ name: /* @__PURE__ */ jsx(Link, { className: "w-full space-y-0", href: paths.processorLink(processor.id), children: processor.name || processor.id }),
17689
+ description: processor.description
17690
+ }
17691
+ );
17692
+ };
17693
+ const PhasesCell = ({ row }) => {
17694
+ const processor = row.original;
17695
+ const phases = processor.phases || [];
17696
+ const phaseLabels = {
17697
+ input: "Input",
17698
+ inputStep: "Input Step",
17699
+ outputStream: "Output Stream",
17700
+ outputResult: "Output Result",
17701
+ outputStep: "Output Step"
17702
+ };
17703
+ return /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: phases.map((phase) => /* @__PURE__ */ jsx(Badge, { variant: "default", children: phaseLabels[phase] || phase }, phase)) }) });
17704
+ };
17705
+ const AgentsCell = ({ row }) => {
17706
+ const processor = row.original;
17707
+ const agentsCount = processor.agentIds?.length || 0;
17708
+ return /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsxs(Badge, { variant: "default", icon: /* @__PURE__ */ jsx(AgentIcon, { className: "text-accent1" }), children: [
17709
+ agentsCount,
17710
+ " agent",
17711
+ agentsCount !== 1 ? "s" : ""
17712
+ ] }) });
17713
+ };
17714
+ const columns$2 = [
17715
+ {
17716
+ header: "Name",
17717
+ accessorKey: "name",
17718
+ cell: NameCell$2
17719
+ },
17720
+ {
17721
+ header: "Phases",
17722
+ accessorKey: "phases",
17723
+ cell: PhasesCell
17724
+ },
17725
+ {
17726
+ header: "Used by",
17727
+ accessorKey: "agentIds",
17728
+ cell: AgentsCell
17729
+ }
17730
+ ];
17731
+
17732
+ function ProcessorTable({ processors, isLoading }) {
17733
+ const [search, setSearch] = useState("");
17734
+ const { navigate, paths } = useLinkComponent();
17735
+ const processorData = useMemo(() => {
17736
+ return Object.values(processors ?? {}).filter((p) => p.phases && p.phases.length > 0);
17737
+ }, [processors]);
17738
+ const table = useReactTable({
17739
+ data: processorData,
17740
+ columns: columns$2,
17741
+ getCoreRowModel: getCoreRowModel()
17742
+ });
17743
+ const ths = table.getHeaderGroups()[0];
17744
+ const rows = table.getRowModel().rows.concat();
17745
+ if (rows.length === 0 && !isLoading) {
17746
+ return /* @__PURE__ */ jsx(EmptyProcessorsTable, {});
17747
+ }
17748
+ const filteredRows = rows.filter((row) => {
17749
+ const id = row.original.id.toLowerCase();
17750
+ const name = (row.original.name || "").toLowerCase();
17751
+ const searchLower = search.toLowerCase();
17752
+ return id.includes(searchLower) || name.includes(searchLower);
17753
+ });
17754
+ return /* @__PURE__ */ jsxs("div", { children: [
17755
+ /* @__PURE__ */ jsx(SearchbarWrapper, { children: /* @__PURE__ */ jsx(Searchbar, { onSearch: setSearch, label: "Search processors", placeholder: "Search processors" }) }),
17756
+ isLoading ? /* @__PURE__ */ jsx(ProcessorTableSkeleton, {}) : /* @__PURE__ */ jsx(ScrollableContainer, { children: /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Table, { children: [
17757
+ /* @__PURE__ */ jsx(Thead, { className: "sticky top-0", children: ths.headers.map((header) => /* @__PURE__ */ jsx(Th, { style: { width: header.column.getSize() ?? "auto" }, children: flexRender(header.column.columnDef.header, header.getContext()) }, header.id)) }),
17758
+ /* @__PURE__ */ jsx(Tbody, { children: filteredRows.map((row) => {
17759
+ return /* @__PURE__ */ jsx(
17760
+ Row,
17761
+ {
17762
+ onClick: () => {
17763
+ if (row.original.isWorkflow) {
17764
+ navigate(paths.workflowLink(row.original.id) + "/graph");
17765
+ } else {
17766
+ navigate(paths.processorLink(row.original.id));
17767
+ }
17768
+ },
17769
+ children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx(React__default.Fragment, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))
17770
+ },
17771
+ row.id
17772
+ );
17773
+ }) })
17774
+ ] }) }) })
17775
+ ] });
17776
+ }
17777
+ const ProcessorTableSkeleton = () => /* @__PURE__ */ jsxs(Table, { children: [
17778
+ /* @__PURE__ */ jsxs(Thead, { children: [
17779
+ /* @__PURE__ */ jsx(Th, { children: "Name" }),
17780
+ /* @__PURE__ */ jsx(Th, { children: "Phases" }),
17781
+ /* @__PURE__ */ jsx(Th, { children: "Used by" })
17782
+ ] }),
17783
+ /* @__PURE__ */ jsx(Tbody, { children: Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ jsxs(Row, { children: [
17784
+ /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-1/2" }) }),
17785
+ /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-1/2" }) }),
17786
+ /* @__PURE__ */ jsx(Cell, { children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-1/2" }) })
17787
+ ] }, index)) })
17788
+ ] });
17789
+ const EmptyProcessorsTable = () => /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx(
17790
+ EmptyState,
17791
+ {
17792
+ iconSlot: /* @__PURE__ */ jsx(Cpu, {}),
17793
+ titleSlot: "Configure Processors",
17794
+ descriptionSlot: "No processors are configured yet. Add input or output processors to your agents to transform messages.",
17795
+ actionSlot: /* @__PURE__ */ jsxs(
17796
+ Button,
17797
+ {
17798
+ size: "lg",
17799
+ className: "w-full",
17800
+ variant: "light",
17801
+ as: "a",
17802
+ href: "https://mastra.ai/en/docs/processors",
17803
+ target: "_blank",
17804
+ children: [
17805
+ /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Cpu, {}) }),
17806
+ "Docs"
17807
+ ]
17808
+ }
17809
+ )
17810
+ }
17811
+ ) });
17812
+
17813
+ const useProcessors = () => {
17814
+ const { requestContext } = usePlaygroundStore();
17815
+ const client = useMastraClient();
17816
+ return useQuery({
17817
+ queryKey: ["processors"],
17818
+ queryFn: () => client.listProcessors(requestContext)
17819
+ });
17820
+ };
17821
+ const useProcessor = (processorId, options) => {
17822
+ const client = useMastraClient();
17823
+ const { requestContext } = usePlaygroundStore();
17824
+ return useQuery({
17825
+ queryKey: ["processor", processorId],
17826
+ queryFn: () => client.getProcessor(processorId).details(requestContext),
17827
+ enabled: options?.enabled !== false && !!processorId
17828
+ });
17829
+ };
17830
+ const useExecuteProcessor = () => {
17831
+ const client = useMastraClient();
17832
+ const { requestContext } = usePlaygroundStore();
17833
+ return useMutation({
17834
+ mutationFn: async ({
17835
+ processorId,
17836
+ phase,
17837
+ messages,
17838
+ agentId
17839
+ }) => {
17840
+ return client.getProcessor(processorId).execute({
17841
+ phase,
17842
+ messages,
17843
+ agentId,
17844
+ requestContext
17845
+ });
17846
+ }
17847
+ });
17848
+ };
17849
+
17850
+ const PHASE_LABELS = {
17851
+ input: "Input - Process input messages before LLM (once at start)",
17852
+ inputStep: "Input Step - Process at each agentic loop step",
17853
+ outputStream: "Output Stream - Process streaming chunks",
17854
+ outputResult: "Output Result - Process complete output after streaming",
17855
+ outputStep: "Output Step - Process after each LLM response (before tools)"
17856
+ };
17857
+ function ProcessorPanel({ processorId }) {
17858
+ const { data: processor, isLoading, error } = useProcessor(processorId);
17859
+ useEffect(() => {
17860
+ if (error) {
17861
+ const errorMessage = error instanceof Error ? error.message : "Failed to load processor";
17862
+ toast.error(`Error loading processor: ${errorMessage}`);
17863
+ }
17864
+ }, [error]);
17865
+ if (isLoading) {
17866
+ return /* @__PURE__ */ jsxs("div", { className: "p-6", children: [
17867
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-48 mb-4" }),
17868
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-32 w-full" })
17869
+ ] });
17870
+ }
17871
+ if (error) return null;
17872
+ if (!processor)
17873
+ return /* @__PURE__ */ jsx("div", { className: "py-12 text-center px-6", children: /* @__PURE__ */ jsx(Txt, { variant: "header-md", className: "text-neutral3", children: "Processor not found" }) });
17874
+ return /* @__PURE__ */ jsx(ProcessorDetailPanel, { processor });
17875
+ }
17876
+ function ProcessorDetailPanel({ processor }) {
17877
+ const theme = useCodemirrorTheme$1();
17878
+ const formId = useId();
17879
+ const [selectedPhase, setSelectedPhase] = useState(processor.phases[0] || "input");
17880
+ const [selectedAgentId, setSelectedAgentId] = useState(processor.configurations[0]?.agentId || "");
17881
+ const [testMessage, setTestMessage] = useState("Hello, this is a test message.");
17882
+ const [result, setResult] = useState(null);
17883
+ const [errorString, setErrorString] = useState();
17884
+ const executeProcessor = useExecuteProcessor();
17885
+ const handleExecute = async () => {
17886
+ setErrorString(void 0);
17887
+ setResult(null);
17888
+ const isOutputPhase = selectedPhase === "outputStep" || selectedPhase === "outputResult";
17889
+ const messageRole = isOutputPhase ? "assistant" : "user";
17890
+ const messages = [
17891
+ {
17892
+ id: crypto.randomUUID(),
17893
+ role: messageRole,
17894
+ createdAt: /* @__PURE__ */ new Date(),
17895
+ content: {
17896
+ format: 2,
17897
+ parts: [{ type: "text", text: testMessage }]
17898
+ }
17899
+ }
17900
+ ];
17901
+ try {
17902
+ const response = await executeProcessor.mutateAsync({
17903
+ processorId: processor.id,
17904
+ phase: selectedPhase,
17905
+ messages,
17906
+ agentId: selectedAgentId || void 0
17907
+ });
17908
+ setResult(response);
17909
+ if (!response.success && response.error) {
17910
+ setErrorString(response.error);
17911
+ }
17912
+ } catch (error) {
17913
+ setErrorString(error.message || "An error occurred");
17914
+ }
17915
+ };
17916
+ const resultCode = result ? JSON.stringify(result, null, 2) : "{}";
17917
+ return /* @__PURE__ */ jsxs(MainContentContent, { hasLeftServiceColumn: true, className: "relative", children: [
17918
+ /* @__PURE__ */ jsxs("div", { className: "bg-surface2 border-r border-border1 w-[22rem] overflow-y-auto", children: [
17919
+ /* @__PURE__ */ jsx(ProcessorInformation, { processor }),
17920
+ /* @__PURE__ */ jsxs("div", { className: "p-5 space-y-5", children: [
17921
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
17922
+ /* @__PURE__ */ jsx(Txt, { as: "label", variant: "ui-sm", className: "text-icon3", children: "Phase" }),
17923
+ /* @__PURE__ */ jsxs(Select, { value: selectedPhase, onValueChange: (v) => setSelectedPhase(v), children: [
17924
+ /* @__PURE__ */ jsx(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select phase" }) }),
17925
+ /* @__PURE__ */ jsx(SelectContent, { children: processor.phases.map((phase) => /* @__PURE__ */ jsx(SelectItem, { value: phase, children: phase }, phase)) })
17926
+ ] }),
17927
+ /* @__PURE__ */ jsx(Txt, { variant: "ui-xs", className: "text-icon4", children: PHASE_LABELS[selectedPhase] })
17928
+ ] }),
17929
+ processor.configurations.length > 1 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
17930
+ /* @__PURE__ */ jsx(Txt, { as: "label", variant: "ui-sm", className: "text-icon3", children: "Agent Configuration" }),
17931
+ /* @__PURE__ */ jsxs(Select, { value: selectedAgentId, onValueChange: setSelectedAgentId, children: [
17932
+ /* @__PURE__ */ jsx(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select agent" }) }),
17933
+ /* @__PURE__ */ jsx(SelectContent, { children: processor.configurations.map((config) => /* @__PURE__ */ jsxs(SelectItem, { value: config.agentId, children: [
17934
+ config.agentName,
17935
+ " (",
17936
+ config.type,
17937
+ ")"
17938
+ ] }, config.agentId)) })
17939
+ ] })
17940
+ ] }),
17941
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
17942
+ /* @__PURE__ */ jsx(Txt, { as: "label", htmlFor: formId, variant: "ui-sm", className: "text-icon3", children: "Test Message" }),
17943
+ /* @__PURE__ */ jsx(
17944
+ "textarea",
17945
+ {
17946
+ id: formId,
17947
+ value: testMessage,
17948
+ onChange: (e) => setTestMessage(e.target.value),
17949
+ placeholder: "Enter a test message...",
17950
+ rows: 4,
17951
+ className: "w-full bg-transparent border border-border1 rounded-md p-3 text-ui-sm text-neutral6 placeholder:text-neutral3 focus:outline-none focus:ring-2 focus:ring-accent1"
17952
+ }
17953
+ )
17954
+ ] }),
17955
+ /* @__PURE__ */ jsx(
17956
+ Button,
17957
+ {
17958
+ onClick: handleExecute,
17959
+ disabled: executeProcessor.isPending || selectedPhase === "outputStream",
17960
+ className: "w-full",
17961
+ children: executeProcessor.isPending ? "Running..." : "Run Processor"
17962
+ }
17963
+ ),
17964
+ selectedPhase === "outputStream" && /* @__PURE__ */ jsx(Txt, { variant: "ui-xs", className: "text-accent6", children: "Output Stream phase cannot be executed directly. Use streaming instead." }),
17965
+ result && /* @__PURE__ */ jsxs("div", { className: "space-y-2 pt-4 border-t border-border1", children: [
17966
+ /* @__PURE__ */ jsx(Txt, { variant: "ui-sm", className: "text-icon3", children: "Status" }),
17967
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
17968
+ /* @__PURE__ */ jsx(Badge, { variant: result.success ? "success" : "error", children: result.success ? "Success" : "Failed" }),
17969
+ result.tripwire?.triggered && /* @__PURE__ */ jsx(Badge, { variant: "info", children: "Tripwire Triggered" })
17970
+ ] }),
17971
+ result.tripwire?.triggered && result.tripwire.reason && /* @__PURE__ */ jsxs("div", { className: "mt-2 p-3 bg-accent6Dark rounded-md border border-accent6/20", children: [
17972
+ /* @__PURE__ */ jsx(Txt, { variant: "ui-sm", className: "text-accent6 font-medium", children: "Tripwire Reason" }),
17973
+ /* @__PURE__ */ jsx(Txt, { variant: "ui-sm", className: "text-icon3 mt-1", children: result.tripwire.reason })
17974
+ ] })
17975
+ ] })
17976
+ ] })
17977
+ ] }),
17978
+ /* @__PURE__ */ jsx("div", { className: "absolute top-4 right-4 z-10", children: /* @__PURE__ */ jsx(CopyButton, { content: resultCode, tooltip: "Copy JSON result to clipboard" }) }),
17979
+ /* @__PURE__ */ jsx("div", { className: "p-5 h-full relative overflow-x-auto overflow-y-auto", children: /* @__PURE__ */ jsx(CodeMirror, { value: errorString || resultCode, editable: true, theme, extensions: [jsonLanguage] }) })
17980
+ ] });
17981
+ }
17982
+ function ProcessorInformation({ processor }) {
17983
+ return /* @__PURE__ */ jsxs("div", { className: "px-5 pt-5 pb-4 border-b border-border1", children: [
17984
+ /* @__PURE__ */ jsx(Txt, { variant: "header-md", className: "text-icon1 mb-2", children: processor.name || processor.id }),
17985
+ processor.name && processor.name !== processor.id && /* @__PURE__ */ jsx(Txt, { variant: "ui-sm", className: "text-icon4 mb-3", children: processor.id }),
17986
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1 mt-3", children: processor.phases.map((phase) => /* @__PURE__ */ jsx(Badge, { variant: "default", children: phase }, phase)) }),
17987
+ /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxs(Txt, { variant: "ui-xs", className: "text-icon4", children: [
17988
+ "Attached to ",
17989
+ processor.configurations.length,
17990
+ " agent",
17991
+ processor.configurations.length !== 1 ? "s" : ""
17992
+ ] }) })
17993
+ ] });
17994
+ }
17995
+
17488
17996
  const NameCell$1 = ({ row }) => {
17489
17997
  const { Link, paths } = useLinkComponent();
17490
17998
  const tool = row.original;
@@ -21589,5 +22097,5 @@ const useMastraPlatform = () => {
21589
22097
  return { isMastraPlatform, mastraPlatformEndpoint };
21590
22098
  };
21591
22099
 
21592
- export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentInformationLayout, AgentInformationTabLayout, AgentLayout, AgentMemory, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert, AlertDescription, AlertDialog, AlertTitle, ApiIcon, AutoForm, Avatar, Badge, BranchIcon, Breadcrumb, Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, Checkbox, ChevronIcon, CodeEditor, Collapsible, CollapsibleContent, CollapsibleTrigger, CombinedButtons, Combobox, CommitIcon, CopyButton, CrossIcon, Crumb, DatePicker, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DividerIcon, DocsIcon, DynamicForm, ElementSelect, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, Input, InputField, JudgeIcon, Kbd, KeyValueList, Label, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, MarkdownRenderer, MastraPackagesInfo, MastraVersionFooter, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, Notification, OpenAIIcon, PageHeader, PlaygroundConfigGuard, PlaygroundQueryClient, Popover, PopoverContent, PopoverTrigger, ProcessStepList, ProcessStepListItem, ProcessStepProgressBar, PromptIcon, RadioGroup, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, ScrollArea, ScrollBar, SearchField, Searchbar, SearchbarWrapper, Section, Sections, Select, SelectContent, SelectField$1 as SelectField, SelectGroup, SelectItem, SelectTrigger, SelectValue, SettingsIcon, ShadcnAutoFormFieldComponents, SideDialog, Skeleton, SlashIcon, Slider, SpanScoreList, SpanScoring, SpanTabs, Spinner, StudioConfigContext, StudioConfigForm, StudioConfigProvider, Switch, Tab, TabContent, TabList, Table, Tabs, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, TimePicker, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineSpan, TraceTimelineTools, TracesList, TracesTools, TracingSettingsContext, TracingSettingsProvider, TsIcon, Txt, TxtCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowLayout, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowStepDetailContext, WorkflowStepDetailProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, buttonVariants, cn, convertWorkflowRunStateToStreamResult, extractPrompt, fieldConfig, formatHierarchicalSpans, getColumnTemplate, getMainContentContentClassName, getShortId, getSpanTypeUi, getStatusIcon, getToNextEntryFn, getToPreviousEntryFn, highlight, inputVariants, parseError, providerMapToIcon, removeEmptyValues, resolveSerializedZodOutput, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentInformationSettings, useAgentInformationTab, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCloneThread, useCodemirrorTheme$1 as useCodemirrorTheme, useCurrentRun, useDeleteThread, useDeleteWorkflowRun, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMastraPackages, useMastraPlatform, useMemory, useMemoryConfig, useMemorySearch, usePackageUpdates, usePlaygroundStore, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useStudioConfig, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useTracingSettings, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRun, useWorkflowRuns, useWorkflowStepDetail, useWorkflows, useWorkingMemory };
22100
+ export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentInformationLayout, AgentInformationTabLayout, AgentLayout, AgentMemory, AgentMetadata, AgentMetadataCombinedProcessorList, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert, AlertDescription, AlertDialog, AlertTitle, ApiIcon, AutoForm, Avatar, Badge, BranchIcon, Breadcrumb, Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, Checkbox, ChevronIcon, CodeEditor, Collapsible, CollapsibleContent, CollapsibleTrigger, CombinedButtons, Combobox, CommitIcon, CopyButton, CrossIcon, Crumb, DatePicker, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DividerIcon, DocsIcon, DynamicForm, ElementSelect, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, Input, InputField, JudgeIcon, Kbd, KeyValueList, Label, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, MarkdownRenderer, MastraPackagesInfo, MastraVersionFooter, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, Notification, OpenAIIcon, PageHeader, PlaygroundConfigGuard, PlaygroundQueryClient, Popover, PopoverContent, PopoverTrigger, ProcessStepList, ProcessStepListItem, ProcessStepProgressBar, ProcessorIcon, ProcessorPanel, ProcessorTable, PromptIcon, RadioGroup, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, ScrollArea, ScrollBar, SearchField, Searchbar, SearchbarWrapper, Section, Sections, Select, SelectContent, SelectField$1 as SelectField, SelectGroup, SelectItem, SelectTrigger, SelectValue, SettingsIcon, ShadcnAutoFormFieldComponents, SideDialog, Skeleton, SlashIcon, Slider, SpanScoreList, SpanScoring, SpanTabs, Spinner, StudioConfigContext, StudioConfigForm, StudioConfigProvider, Switch, Tab, TabContent, TabList, Table, Tabs, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, TimePicker, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineSpan, TraceTimelineTools, TracesList, TracesTools, TracingSettingsContext, TracingSettingsProvider, TsIcon, Txt, TxtCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowLayout, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowStepDetailContext, WorkflowStepDetailProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, buttonVariants, cn, columns$2 as columns, convertWorkflowRunStateToStreamResult, extractPrompt, fieldConfig, formatHierarchicalSpans, getColumnTemplate, getMainContentContentClassName, getShortId, getSpanTypeUi, getStatusIcon, getToNextEntryFn, getToPreviousEntryFn, highlight, inputVariants, parseError, providerMapToIcon, removeEmptyValues, resolveSerializedZodOutput, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentInformationSettings, useAgentInformationTab, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCloneThread, useCodemirrorTheme$1 as useCodemirrorTheme, useCurrentRun, useDeleteThread, useDeleteWorkflowRun, useExecuteAgentTool, useExecuteMCPTool, useExecuteProcessor, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMastraPackages, useMastraPlatform, useMemory, useMemoryConfig, useMemorySearch, usePackageUpdates, usePlaygroundStore, useProcessor, useProcessors, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useStudioConfig, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useTracingSettings, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRun, useWorkflowRuns, useWorkflowStepDetail, useWorkflows, useWorkingMemory };
21593
22101
  //# sourceMappingURL=index.es.js.map