@mastra/playground-ui 6.7.2 → 6.9.0-alpha.0

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
@@ -16,7 +16,8 @@ import { jsonLanguage, json } from '@codemirror/lang-json';
16
16
  import { tags } from '@lezer/highlight';
17
17
  import { draculaInit } from '@uiw/codemirror-theme-dracula';
18
18
  import CodeMirror, { EditorView } from '@uiw/react-codemirror';
19
- import { toast } from 'sonner';
19
+ import { toast as toast$1 } from 'sonner';
20
+ import './index.css';export { Toaster } from 'sonner';
20
21
  import * as DialogPrimitive from '@radix-ui/react-dialog';
21
22
  import { MarkerType, Handle, Position, useViewport, useReactFlow, Panel, useNodesState, useEdgesState, ReactFlow, Background, BackgroundVariant, ReactFlowProvider } from '@xyflow/react';
22
23
  import '@xyflow/react/dist/style.css';
@@ -51,7 +52,7 @@ import z$2 from 'zod/v4';
51
52
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
52
53
  import { useMastraClient, mapWorkflowStreamChunkToWatchResult, resolveToChildMessages, useChat, toAssistantUIMessage } from '@mastra/react';
53
54
  import { useQuery, useMutation, useQueryClient, QueryClient, QueryClientProvider } from '@tanstack/react-query';
54
- import './index.css';export * from '@tanstack/react-query';
55
+ export * from '@tanstack/react-query';
55
56
  import { useReactTable, getCoreRowModel, flexRender } from '@tanstack/react-table';
56
57
  import { RuntimeContext as RuntimeContext$1 } from '@mastra/core/runtime-context';
57
58
  import { I as IconColors } from './colors-Br49332d.js';
@@ -4299,7 +4300,7 @@ function useCopyToClipboard({ text, copyMessage = "Copied to clipboard!" }) {
4299
4300
  const timeoutRef = useRef(null);
4300
4301
  const handleCopy = useCallback(() => {
4301
4302
  navigator.clipboard.writeText(text).then(() => {
4302
- toast.success(copyMessage);
4303
+ toast$1.success(copyMessage);
4303
4304
  setIsCopied(true);
4304
4305
  if (timeoutRef.current) {
4305
4306
  clearTimeout(timeoutRef.current);
@@ -4309,7 +4310,7 @@ function useCopyToClipboard({ text, copyMessage = "Copied to clipboard!" }) {
4309
4310
  setIsCopied(false);
4310
4311
  }, 2e3);
4311
4312
  }).catch(() => {
4312
- toast.error("Failed to copy to clipboard.");
4313
+ toast$1.error("Failed to copy to clipboard.");
4313
4314
  });
4314
4315
  }, [text, copyMessage]);
4315
4316
  return { isCopied, handleCopy };
@@ -5340,7 +5341,7 @@ const WorkflowRunEventForm = ({ event, runId, onSendEvent }) => {
5340
5341
  try {
5341
5342
  setError(null);
5342
5343
  const result = await onSendEvent({ event, data, runId });
5343
- toast.success(result.message);
5344
+ toast$1.success(result.message);
5344
5345
  } catch (error2) {
5345
5346
  console.error("Error sending event", error2);
5346
5347
  setError("Error sending event");
@@ -7426,7 +7427,7 @@ function WorkflowTrigger({
7426
7427
  streamWorkflow({ workflowId, runId, inputData: data, runtimeContext });
7427
7428
  } catch (err) {
7428
7429
  setIsRunning(false);
7429
- toast.error("Error executing workflow");
7430
+ toast$1.error("Error executing workflow");
7430
7431
  }
7431
7432
  };
7432
7433
  const handleResumeWorkflow = async (step) => {
@@ -8098,6 +8099,110 @@ const useWorkflows = () => {
8098
8099
  });
8099
8100
  };
8100
8101
 
8102
+ const defaultOptions = {
8103
+ duration: 3e3,
8104
+ cancel: {
8105
+ label: /* @__PURE__ */ jsx(X, { size: "14" }),
8106
+ onClick: () => {
8107
+ }
8108
+ },
8109
+ unstyled: true,
8110
+ classNames: {
8111
+ toast: "bg-[#0F0F0F] w-full backdrop-accent h-auto rounded-lg gap-2 border border p-4 flex items-start rounded-lg pointer-events-auto",
8112
+ title: "text-white font-semibold text-xs mb-1 -mt-1",
8113
+ description: "!text-text text-sm !font-light",
8114
+ cancelButton: "self-start !bg-transparent !p-0 flex items-center justify-center !text-text opacity-50 order-last hover:opacity-100",
8115
+ actionButton: "!bg-white flex items-center justify-center font-medium !text-black order-last hover:opacity-80"
8116
+ }
8117
+ };
8118
+ function getToastOptions(options) {
8119
+ const { classNames, ...rest } = defaultOptions;
8120
+ const { classNames: optionsClassNames, ...restOptions } = options || {};
8121
+ return {
8122
+ ...rest,
8123
+ classNames: {
8124
+ ...classNames,
8125
+ title: cn(classNames?.title, "mt-auto", optionsClassNames?.title),
8126
+ toast: cn(classNames?.toast, "!items-center", optionsClassNames?.toast),
8127
+ cancelButton: cn(classNames?.cancelButton, "!self-center", optionsClassNames?.cancelButton),
8128
+ actionButton: cn(classNames?.actionButton, optionsClassNames?.actionButton)
8129
+ },
8130
+ ...restOptions
8131
+ };
8132
+ }
8133
+ const toast = (message, options = {}) => {
8134
+ if (Array.isArray(message)) {
8135
+ return message.forEach((msg) => toast$1(msg, getToastOptions(options)));
8136
+ } else if (React__default.isValidElement(message)) {
8137
+ return toast$1(message, getToastOptions(options));
8138
+ } else if (typeof message === "string") {
8139
+ return toast$1(message, getToastOptions(options));
8140
+ }
8141
+ throw new Error("Invalid message type");
8142
+ };
8143
+ toast.success = (message, options = {}) => {
8144
+ switch (typeof message) {
8145
+ case "string":
8146
+ return toast$1.success(message, getToastOptions(options));
8147
+ case "object":
8148
+ return message.forEach((message2) => toast$1.success(message2, getToastOptions(options)));
8149
+ }
8150
+ };
8151
+ toast.error = (message, options = {}) => {
8152
+ switch (typeof message) {
8153
+ case "string":
8154
+ return toast$1.error(message, getToastOptions(options));
8155
+ case "object":
8156
+ return message.forEach((message2) => toast$1.error(message2, getToastOptions(options)));
8157
+ }
8158
+ };
8159
+ toast.warning = (message, options = {}) => {
8160
+ switch (typeof message) {
8161
+ case "string":
8162
+ return toast$1.warning(message, getToastOptions(options));
8163
+ case "object":
8164
+ return message.forEach((message2) => toast$1.warning(message2, getToastOptions(options)));
8165
+ }
8166
+ };
8167
+ toast.info = (message, options = {}) => {
8168
+ switch (typeof message) {
8169
+ case "string":
8170
+ return toast$1.info(message, getToastOptions(options));
8171
+ case "object":
8172
+ return message.forEach((message2) => toast$1.info(message2, getToastOptions(options)));
8173
+ }
8174
+ };
8175
+ toast.custom = (message, options = {}) => {
8176
+ return toast$1(message, getToastOptions(options));
8177
+ };
8178
+ toast.dismiss = (toastId) => {
8179
+ if (toastId) {
8180
+ toast$1.dismiss(toastId);
8181
+ }
8182
+ };
8183
+ toast.promise = ({
8184
+ myPromise,
8185
+ loadingMessage,
8186
+ successMessage,
8187
+ errorMessage,
8188
+ onSuccess,
8189
+ onError,
8190
+ options = {}
8191
+ }) => {
8192
+ return toast$1.promise(myPromise, {
8193
+ loading: loadingMessage ?? "Loading...",
8194
+ success: (data) => {
8195
+ onSuccess?.(data);
8196
+ return successMessage;
8197
+ },
8198
+ error: (err) => {
8199
+ onError?.(err);
8200
+ return errorMessage || err?.message || "Error...";
8201
+ },
8202
+ ...getToastOptions(options)
8203
+ });
8204
+ };
8205
+
8101
8206
  const useExecuteWorkflow = () => {
8102
8207
  const client = useMastraClient();
8103
8208
  const createWorkflowRun = useMutation({
@@ -8194,6 +8299,23 @@ const useStreamWorkflow = () => {
8194
8299
  }
8195
8300
  };
8196
8301
  }, []);
8302
+ const handleStreamError = (err, defaultMessage, setIsStreaming2) => {
8303
+ if (err instanceof TypeError) {
8304
+ return;
8305
+ }
8306
+ const errorMessage = err instanceof Error ? err.message : defaultMessage;
8307
+ toast.error(errorMessage);
8308
+ setIsStreaming2?.(false);
8309
+ };
8310
+ const handleWorkflowFinish = (value) => {
8311
+ if (value.type === "workflow-finish") {
8312
+ const streamStatus = value.payload?.workflowStatus;
8313
+ const metadata = value.payload?.metadata;
8314
+ if (streamStatus === "failed") {
8315
+ throw new Error(metadata?.errorMessage || "Workflow execution failed");
8316
+ }
8317
+ }
8318
+ };
8197
8319
  const streamWorkflow = useMutation({
8198
8320
  mutationFn: async ({
8199
8321
  workflowId,
@@ -8213,7 +8335,9 @@ const useStreamWorkflow = () => {
8213
8335
  });
8214
8336
  const workflow = client.getWorkflow(workflowId);
8215
8337
  const stream = await workflow.streamVNext({ runId, inputData, runtimeContext, closeOnSuspend: true });
8216
- if (!stream) throw new Error("No stream returned");
8338
+ if (!stream) {
8339
+ return handleStreamError(new Error("No stream returned"), "No stream returned", setIsStreaming);
8340
+ }
8217
8341
  const reader = stream.getReader();
8218
8342
  readerRef.current = reader;
8219
8343
  try {
@@ -8232,10 +8356,13 @@ const useStreamWorkflow = () => {
8232
8356
  if (value.type === "workflow-step-suspended") {
8233
8357
  setIsStreaming(false);
8234
8358
  }
8359
+ if (value.type === "workflow-finish") {
8360
+ handleWorkflowFinish(value);
8361
+ }
8235
8362
  }
8236
8363
  }
8237
- } catch (error) {
8238
- console.error("Error streaming workflow:", error);
8364
+ } catch (err) {
8365
+ handleStreamError(err, "Error streaming workflow");
8239
8366
  } finally {
8240
8367
  if (isMountedRef.current) {
8241
8368
  setIsStreaming(false);
@@ -8265,7 +8392,9 @@ const useStreamWorkflow = () => {
8265
8392
  }
8266
8393
  const workflow = client.getWorkflow(workflowId);
8267
8394
  const stream = await workflow.observeStreamVNext({ runId });
8268
- if (!stream) throw new Error("No stream returned");
8395
+ if (!stream) {
8396
+ return handleStreamError(new Error("No stream returned"), "No stream returned", setIsStreaming);
8397
+ }
8269
8398
  const reader = stream.getReader();
8270
8399
  observerRef.current = reader;
8271
8400
  try {
@@ -8284,10 +8413,13 @@ const useStreamWorkflow = () => {
8284
8413
  if (value.type === "workflow-step-suspended") {
8285
8414
  setIsStreaming(false);
8286
8415
  }
8416
+ if (value.type === "workflow-finish") {
8417
+ handleWorkflowFinish(value);
8418
+ }
8287
8419
  }
8288
8420
  }
8289
- } catch (error) {
8290
- console.error("Error streaming workflow:", error);
8421
+ } catch (err) {
8422
+ handleStreamError(err, "Error observing workflow");
8291
8423
  } finally {
8292
8424
  if (isMountedRef.current) {
8293
8425
  setIsStreaming(false);
@@ -8318,7 +8450,9 @@ const useStreamWorkflow = () => {
8318
8450
  runtimeContext.set(key, value);
8319
8451
  });
8320
8452
  const stream = await workflow.resumeStreamVNext({ runId, step, resumeData, runtimeContext });
8321
- if (!stream) throw new Error("No stream returned");
8453
+ if (!stream) {
8454
+ return handleStreamError(new Error("No stream returned"), "No stream returned", setIsStreaming);
8455
+ }
8322
8456
  const reader = stream.getReader();
8323
8457
  resumeStreamRef.current = reader;
8324
8458
  try {
@@ -8337,10 +8471,13 @@ const useStreamWorkflow = () => {
8337
8471
  if (value.type === "workflow-step-suspended") {
8338
8472
  setIsStreaming(false);
8339
8473
  }
8474
+ if (value.type === "workflow-finish") {
8475
+ handleWorkflowFinish(value);
8476
+ }
8340
8477
  }
8341
8478
  }
8342
- } catch (error) {
8343
- console.error("Error resuming workflow stream:", error);
8479
+ } catch (err) {
8480
+ handleStreamError(err, "Error resuming workflow stream");
8344
8481
  } finally {
8345
8482
  if (isMountedRef.current) {
8346
8483
  setIsStreaming(false);
@@ -8574,9 +8711,10 @@ const useAgentMessages = ({
8574
8711
  memory
8575
8712
  }) => {
8576
8713
  const client = useMastraClient();
8714
+ const { runtimeContext } = usePlaygroundStore();
8577
8715
  return useQuery({
8578
- queryKey: ["memory", "messages", threadId, agentId],
8579
- queryFn: () => client.getThreadMessages(threadId, { agentId }),
8716
+ queryKey: ["memory", "messages", threadId, agentId, "runtimeContext"],
8717
+ queryFn: () => client.getThreadMessages(threadId, { agentId, runtimeContext }),
8580
8718
  enabled: memory && Boolean(threadId),
8581
8719
  staleTime: 0,
8582
8720
  gcTime: 0,
@@ -9974,6 +10112,7 @@ function useAgentWorkingMemory(agentId, threadId, resourceId) {
9974
10112
  const [workingMemoryFormat, setWorkingMemoryFormat] = useState("markdown");
9975
10113
  const [isLoading, setIsLoading] = useState(true);
9976
10114
  const [isUpdating, setIsUpdating] = useState(false);
10115
+ const { runtimeContext } = usePlaygroundStore();
9977
10116
  const refetch = useCallback(async () => {
9978
10117
  setIsLoading(true);
9979
10118
  try {
@@ -9982,7 +10121,7 @@ function useAgentWorkingMemory(agentId, threadId, resourceId) {
9982
10121
  setIsLoading(false);
9983
10122
  return;
9984
10123
  }
9985
- const res = await client.getWorkingMemory({ agentId, threadId, resourceId });
10124
+ const res = await client.getWorkingMemory({ agentId, threadId, resourceId, runtimeContext });
9986
10125
  const { workingMemory, source, workingMemoryTemplate, threadExists: threadExists2 } = res;
9987
10126
  setThreadExists(threadExists2);
9988
10127
  setWorkingMemoryData(workingMemory);
@@ -10021,7 +10160,7 @@ function useAgentWorkingMemory(agentId, threadId, resourceId) {
10021
10160
  throw new Error("Invalid JSON working memory");
10022
10161
  }
10023
10162
  }
10024
- await client.updateWorkingMemory({ agentId, threadId, workingMemory: newMemory, resourceId });
10163
+ await client.updateWorkingMemory({ agentId, threadId, workingMemory: newMemory, resourceId, runtimeContext });
10025
10164
  refetch();
10026
10165
  } catch (error) {
10027
10166
  console.error("Error updating working memory", error);
@@ -11820,7 +11959,7 @@ const RuntimeContext = () => {
11820
11959
  useEffect(() => {
11821
11960
  const run = async () => {
11822
11961
  if (!isValidJson(runtimeContextStr)) {
11823
- toast.error("Invalid JSON");
11962
+ toast$1.error("Invalid JSON");
11824
11963
  return;
11825
11964
  }
11826
11965
  const formatted = await formatJSON(runtimeContextStr);
@@ -11832,16 +11971,16 @@ const RuntimeContext = () => {
11832
11971
  try {
11833
11972
  const parsedContext = JSON.parse(runtimeContextValue);
11834
11973
  setRuntimeContext(parsedContext);
11835
- toast.success("Runtime context saved successfully");
11974
+ toast$1.success("Runtime context saved successfully");
11836
11975
  } catch (error) {
11837
11976
  console.error("error", error);
11838
- toast.error("Invalid JSON");
11977
+ toast$1.error("Invalid JSON");
11839
11978
  }
11840
11979
  };
11841
11980
  const buttonClass = "text-icon3 hover:text-icon6";
11842
11981
  const formatRuntimeContext = async () => {
11843
11982
  if (!isValidJson(runtimeContextValue)) {
11844
- toast.error("Invalid JSON");
11983
+ toast$1.error("Invalid JSON");
11845
11984
  return;
11846
11985
  }
11847
11986
  const formatted = await formatJSON(runtimeContextValue);
@@ -13854,7 +13993,7 @@ const useScorer = (scorerId) => {
13854
13993
  } catch (error) {
13855
13994
  setScorer(null);
13856
13995
  console.error("Error fetching scorer", error);
13857
- toast.error("Error fetching scorer");
13996
+ toast$1.error("Error fetching scorer");
13858
13997
  } finally {
13859
13998
  setIsLoading(false);
13860
13999
  }
@@ -13968,6 +14107,7 @@ const AgentMetadataModelSwitcher = ({
13968
14107
  defaultProvider,
13969
14108
  defaultModel,
13970
14109
  updateModel,
14110
+ resetModel,
13971
14111
  apiUrl = "/api/agents/providers"
13972
14112
  }) => {
13973
14113
  const [originalProvider] = useState(defaultProvider);
@@ -13985,6 +14125,10 @@ const AgentMetadataModelSwitcher = ({
13985
14125
  const [providersLoading, setProvidersLoading] = useState(true);
13986
14126
  const [highlightedProviderIndex, setHighlightedProviderIndex] = useState(-1);
13987
14127
  const [highlightedModelIndex, setHighlightedModelIndex] = useState(-1);
14128
+ useEffect(() => {
14129
+ setSelectedModel(defaultModel);
14130
+ setSelectedProvider(defaultProvider || "");
14131
+ }, [defaultModel, defaultProvider]);
13988
14132
  const modelInputRef = useRef(null);
13989
14133
  const providerInputRef = useRef(null);
13990
14134
  useEffect(() => {
@@ -14138,8 +14282,10 @@ const AgentMetadataModelSwitcher = ({
14138
14282
  ] });
14139
14283
  }
14140
14284
  const handleReset = async () => {
14141
- setSelectedProvider(cleanProviderId(originalProvider));
14142
- setSelectedModel(originalModel);
14285
+ if (!resetModel) {
14286
+ console.warn("Reset model function not provided");
14287
+ return;
14288
+ }
14143
14289
  setProviderSearch("");
14144
14290
  setModelSearch("");
14145
14291
  setIsSearchingProvider(false);
@@ -14148,10 +14294,7 @@ const AgentMetadataModelSwitcher = ({
14148
14294
  setShowModelSuggestions(false);
14149
14295
  try {
14150
14296
  setLoading(true);
14151
- await updateModel({
14152
- provider: originalProvider,
14153
- modelId: originalModel
14154
- });
14297
+ await resetModel();
14155
14298
  } catch (error) {
14156
14299
  console.error("Failed to reset model:", error);
14157
14300
  } finally {
@@ -14559,7 +14702,6 @@ Switch.displayName = SwitchPrimitives.Root.displayName;
14559
14702
 
14560
14703
  const AgentMetadataModelList = ({
14561
14704
  modelList,
14562
- modelProviders,
14563
14705
  updateModelInModelList,
14564
14706
  reorderModelList
14565
14707
  }) => {
@@ -14597,7 +14739,6 @@ const AgentMetadataModelList = ({
14597
14739
  AgentMetadataModelListItem,
14598
14740
  {
14599
14741
  modelConfig,
14600
- modelProviders,
14601
14742
  updateModelInModelList: updateModel,
14602
14743
  showDragHandle: hasMultipleModels,
14603
14744
  dragHandleProps: provided2.dragHandleProps
@@ -14608,7 +14749,6 @@ const AgentMetadataModelList = ({
14608
14749
  };
14609
14750
  const AgentMetadataModelListItem = ({
14610
14751
  modelConfig,
14611
- modelProviders,
14612
14752
  updateModelInModelList,
14613
14753
  showDragHandle,
14614
14754
  dragHandleProps
@@ -14622,7 +14762,6 @@ const AgentMetadataModelListItem = ({
14622
14762
  defaultProvider: modelConfig.model.provider,
14623
14763
  defaultModel: modelConfig.model.modelId,
14624
14764
  updateModel: (params) => updateModelInModelList({ modelConfigId: modelConfig.id, model: params }),
14625
- modelProviders,
14626
14765
  autoSave: true
14627
14766
  }
14628
14767
  ) }),
@@ -14653,7 +14792,7 @@ const AgentMetadata = ({
14653
14792
  promptSlot,
14654
14793
  hasMemoryEnabled,
14655
14794
  updateModel,
14656
- modelProviders,
14795
+ resetModel,
14657
14796
  updateModelInModelList,
14658
14797
  reorderModelList,
14659
14798
  modelVersion
@@ -14669,7 +14808,6 @@ const AgentMetadata = ({
14669
14808
  AgentMetadataModelList,
14670
14809
  {
14671
14810
  modelList: agent.modelList,
14672
- modelProviders,
14673
14811
  updateModelInModelList,
14674
14812
  reorderModelList
14675
14813
  }
@@ -14688,7 +14826,7 @@ const AgentMetadata = ({
14688
14826
  defaultProvider: agent.provider,
14689
14827
  defaultModel: agent.modelId,
14690
14828
  updateModel,
14691
- modelProviders
14829
+ resetModel
14692
14830
  }
14693
14831
  )
14694
14832
  }
@@ -15018,13 +15156,6 @@ const useAgents = () => {
15018
15156
  queryFn: () => client.getAgents(runtimeContext)
15019
15157
  });
15020
15158
  };
15021
- const useModelProviders = () => {
15022
- const client = useMastraClient();
15023
- return useQuery({
15024
- queryKey: ["model-providers"],
15025
- queryFn: () => client.getModelProviders()
15026
- });
15027
- };
15028
15159
  const useUpdateAgentModel = (agentId) => {
15029
15160
  const client = useMastraClient();
15030
15161
  const queryClient = useQueryClient();
@@ -15064,6 +15195,19 @@ const useUpdateModelInModelList = (agentId) => {
15064
15195
  }
15065
15196
  });
15066
15197
  };
15198
+ const useResetAgentModel = (agentId) => {
15199
+ const client = useMastraClient();
15200
+ const queryClient = useQueryClient();
15201
+ return useMutation({
15202
+ mutationFn: async () => client.getAgent(agentId).resetModel(),
15203
+ onSuccess: () => {
15204
+ queryClient.invalidateQueries({ queryKey: ["agent", agentId] });
15205
+ },
15206
+ onError: (err) => {
15207
+ console.error("Error resetting model", err);
15208
+ }
15209
+ });
15210
+ };
15067
15211
 
15068
15212
  const useAgent = (agentId) => {
15069
15213
  const client = useMastraClient();
@@ -15089,7 +15233,7 @@ const useExecuteAgentTool = () => {
15089
15233
  const response = await agent.executeTool(toolId, { data: input, runtimeContext });
15090
15234
  return response;
15091
15235
  } catch (error) {
15092
- toast.error("Error executing agent tool");
15236
+ toast$1.error("Error executing agent tool");
15093
15237
  console.error("Error executing tool:", error);
15094
15238
  throw error;
15095
15239
  }
@@ -15179,9 +15323,10 @@ const AgentToolPanel = ({ toolId, agentId }) => {
15179
15323
 
15180
15324
  const useMemory = (agentId) => {
15181
15325
  const client = useMastraClient();
15326
+ const { runtimeContext } = usePlaygroundStore();
15182
15327
  return useQuery({
15183
15328
  queryKey: ["memory", agentId],
15184
- queryFn: () => agentId ? client.getMemoryStatus(agentId) : null,
15329
+ queryFn: () => agentId ? client.getMemoryStatus(agentId, runtimeContext) : null,
15185
15330
  enabled: Boolean(agentId),
15186
15331
  staleTime: 5 * 60 * 1e3,
15187
15332
  // 5 minutes
@@ -15192,9 +15337,10 @@ const useMemory = (agentId) => {
15192
15337
  };
15193
15338
  const useMemoryConfig = (agentId) => {
15194
15339
  const client = useMastraClient();
15340
+ const { runtimeContext } = usePlaygroundStore();
15195
15341
  return useQuery({
15196
15342
  queryKey: ["memory", "config", agentId],
15197
- queryFn: () => agentId ? client.getMemoryConfig({ agentId }) : null,
15343
+ queryFn: () => agentId ? client.getMemoryConfig({ agentId, runtimeContext }) : null,
15198
15344
  enabled: Boolean(agentId),
15199
15345
  staleTime: 5 * 60 * 1e3,
15200
15346
  // 5 minutes
@@ -15210,9 +15356,10 @@ const useThreads = ({
15210
15356
  isMemoryEnabled
15211
15357
  }) => {
15212
15358
  const client = useMastraClient();
15359
+ const { runtimeContext } = usePlaygroundStore();
15213
15360
  return useQuery({
15214
15361
  queryKey: ["memory", "threads", resourceId, agentId],
15215
- queryFn: () => isMemoryEnabled ? client.getMemoryThreads({ resourceId, agentId }) : null,
15362
+ queryFn: () => isMemoryEnabled ? client.getMemoryThreads({ resourceId, agentId, runtimeContext }) : null,
15216
15363
  enabled: Boolean(isMemoryEnabled),
15217
15364
  staleTime: 0,
15218
15365
  gcTime: 0,
@@ -15223,8 +15370,9 @@ const useThreads = ({
15223
15370
  const useDeleteThread = () => {
15224
15371
  const client = useMastraClient();
15225
15372
  const queryClient = useQueryClient();
15373
+ const { runtimeContext } = usePlaygroundStore();
15226
15374
  return useMutation({
15227
- mutationFn: ({ threadId, agentId, networkId }) => client.deleteThread(threadId, { agentId, networkId }),
15375
+ mutationFn: ({ threadId, agentId, networkId }) => client.deleteThread(threadId, { agentId, networkId, runtimeContext }),
15228
15376
  onSuccess: (_, variables) => {
15229
15377
  const { agentId, networkId } = variables;
15230
15378
  if (agentId) {
@@ -15233,10 +15381,10 @@ const useDeleteThread = () => {
15233
15381
  if (networkId) {
15234
15382
  queryClient.invalidateQueries({ queryKey: ["network", "threads", networkId, networkId] });
15235
15383
  }
15236
- toast.success("Chat deleted successfully");
15384
+ toast$1.success("Chat deleted successfully");
15237
15385
  },
15238
15386
  onError: () => {
15239
- toast.error("Failed to delete chat");
15387
+ toast$1.error("Failed to delete chat");
15240
15388
  }
15241
15389
  });
15242
15390
  };
@@ -15245,6 +15393,7 @@ const useMemorySearch = ({
15245
15393
  resourceId,
15246
15394
  threadId
15247
15395
  }) => {
15396
+ const { runtimeContext } = usePlaygroundStore();
15248
15397
  const searchMemory = async (searchQuery, memoryConfig) => {
15249
15398
  if (!searchQuery.trim()) {
15250
15399
  return { results: [], count: 0, query: searchQuery };
@@ -15252,7 +15401,8 @@ const useMemorySearch = ({
15252
15401
  const params = new URLSearchParams({
15253
15402
  searchQuery,
15254
15403
  resourceId,
15255
- agentId
15404
+ agentId,
15405
+ runtimeContext: btoa(JSON.stringify(runtimeContext))
15256
15406
  });
15257
15407
  if (threadId) {
15258
15408
  params.append("threadId", threadId);
@@ -15490,7 +15640,7 @@ const AgentWorkingMemory = ({ agentId }) => {
15490
15640
  setIsEditing(false);
15491
15641
  } catch (error) {
15492
15642
  console.error("Failed to update working memory:", error);
15493
- toast.error("Failed to update working memory");
15643
+ toast$1.error("Failed to update working memory");
15494
15644
  }
15495
15645
  },
15496
15646
  disabled: isUpdating,
@@ -16612,8 +16762,8 @@ function AgentPromptEnhancer({ agentId }) {
16612
16762
 
16613
16763
  function AgentInformation({ agentId, threadId }) {
16614
16764
  const { data: agent, isLoading } = useAgent(agentId);
16615
- const { data: modelProviders } = useModelProviders();
16616
16765
  const { mutateAsync: updateModel } = useUpdateAgentModel(agentId);
16766
+ const { mutateAsync: resetModel } = useResetAgentModel(agentId);
16617
16767
  const { mutate: reorderModelList } = useReorderModelList(agentId);
16618
16768
  const { mutateAsync: updateModelInModelList } = useUpdateModelInModelList(agentId);
16619
16769
  const { data: memory, isLoading: isMemoryLoading } = useMemory(agentId);
@@ -16658,9 +16808,9 @@ function AgentInformation({ agentId, threadId }) {
16658
16808
  agentId,
16659
16809
  agent,
16660
16810
  updateModel,
16811
+ resetModel,
16661
16812
  updateModelInModelList,
16662
16813
  reorderModelList,
16663
- modelProviders: modelProviders || [],
16664
16814
  hasMemoryEnabled: Boolean(memory?.result),
16665
16815
  promptSlot: /* @__PURE__ */ jsx(AgentPromptEnhancer, { agentId }),
16666
16816
  modelVersion: agent.modelVersion
@@ -16822,7 +16972,7 @@ const useExecuteTool = () => {
16822
16972
  const response = await tool.execute({ data: input, runtimeContext });
16823
16973
  return response;
16824
16974
  } catch (error) {
16825
- toast.error("Error executing dev tool");
16975
+ toast$1.error("Error executing dev tool");
16826
16976
  console.error("Error executing dev tool:", error);
16827
16977
  throw error;
16828
16978
  }
@@ -17240,7 +17390,6 @@ function TemplateForm({
17240
17390
  updateModel: onModelUpdate || (() => Promise.resolve({ message: "Updated" })),
17241
17391
  closeEditor: () => {
17242
17392
  },
17243
- modelProviders: ["openai", "anthropic", "google", "xai", "groq"],
17244
17393
  autoSave: true,
17245
17394
  selectProviderPlaceholder: "Provider"
17246
17395
  }
@@ -20114,7 +20263,7 @@ const MCPToolPanel = ({ toolId, serverId }) => {
20114
20263
  zodInputSchema = resolveSerializedZodOutput(jsonSchemaToZod(tool.inputSchema));
20115
20264
  } catch (e) {
20116
20265
  console.error("Error processing input schema:", e);
20117
- toast.error("Failed to process tool input schema.");
20266
+ toast$1.error("Failed to process tool input schema.");
20118
20267
  zodInputSchema = z.object({});
20119
20268
  }
20120
20269
  return /* @__PURE__ */ jsx(
@@ -20304,5 +20453,5 @@ const useEvalsByAgentId = (agentId, type) => {
20304
20453
  });
20305
20454
  };
20306
20455
 
20307
- export { AgentChat, AgentCoinIcon, AgentEntityHeader, AgentEvals, AgentIcon, AgentInformation, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataPrompt, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge$1 as Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, CommitIcon, CrossIcon, Crumb, DarkLogo, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityMainHeader, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, EvaluatorCoinIcon, FiltersIcon, FolderIcon, FormActions, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogsIcon, MCPDetail, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, MastraResizablePanel, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, ModelResetProvider, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupField, RadioGroupItem, RepoIcon, Row, RuntimeContext, RuntimeContextWrapper, ScoreDialog, ScoreIcon, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, SlashIcon, SliderField, SpanScoreList, SpanScoring, SpanTabs, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table$1 as Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, TextareaField, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TracesView, TracesViewSkeleton, TsIcon, Txt, TxtCell, UnitCell, VariablesIcon, WorkflowCoinIcon, WorkflowGraph, WorkflowIcon, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, allowedAiSpanAttributes, cleanString, convertWorkflowRunStateToStreamResult, extractPrompt, formatDuration, formatHierarchicalSpans, formatOtelTimestamp, formatOtelTimestamp2, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, traceScoresListColumns, tracesListColumns, transformKey, useAgent, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useEvalsByAgentId, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, useModelProviders, useModelReset, usePlaygroundStore, usePolling, useReorderModelList, useScorer, useScorers, useScoresByEntityId, useScoresByScorerId, useSendWorkflowRunEvent, useSpeechRecognition, useStreamWorkflow, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRuns, useWorkflows, useWorkingMemory };
20456
+ export { AgentChat, AgentCoinIcon, AgentEntityHeader, AgentEvals, AgentIcon, AgentInformation, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataPrompt, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge$1 as Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, CommitIcon, CrossIcon, Crumb, DarkLogo, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityMainHeader, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, EvaluatorCoinIcon, FiltersIcon, FolderIcon, FormActions, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogsIcon, MCPDetail, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, MastraResizablePanel, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, ModelResetProvider, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupField, RadioGroupItem, RepoIcon, Row, RuntimeContext, RuntimeContextWrapper, ScoreDialog, ScoreIcon, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, SlashIcon, SliderField, SpanScoreList, SpanScoring, SpanTabs, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table$1 as Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, TextareaField, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TracesView, TracesViewSkeleton, TsIcon, Txt, TxtCell, UnitCell, VariablesIcon, WorkflowCoinIcon, WorkflowGraph, WorkflowIcon, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, allowedAiSpanAttributes, cleanString, convertWorkflowRunStateToStreamResult, extractPrompt, formatDuration, formatHierarchicalSpans, formatOtelTimestamp, formatOtelTimestamp2, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, transformKey, useAgent, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useEvalsByAgentId, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, useModelReset, usePlaygroundStore, usePolling, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByEntityId, useScoresByScorerId, useSendWorkflowRunEvent, useSpeechRecognition, useStreamWorkflow, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRuns, useWorkflows, useWorkingMemory };
20308
20457
  //# sourceMappingURL=index.es.js.map