@mastra/playground-ui 7.0.0-beta.6 → 7.0.0-beta.7

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,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useMessagePart, useMessage, MessagePrimitive, ActionBarPrimitive, useComposerRuntime, useAttachment, ComposerPrimitive, AttachmentPrimitive, useComposer, ThreadPrimitive, CompositeAttachmentAdapter, SimpleImageAttachmentAdapter, SimpleTextAttachmentAdapter, WebSpeechSynthesisAdapter, useExternalStoreRuntime, AssistantRuntimeProvider } from '@assistant-ui/react';
3
- import { CheckIcon as CheckIcon$1, CopyIcon, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, X, Share2, Check, PlayCircle, Workflow, Layers, List, Clock as Clock$1, CalendarClock, Timer, CornerDownRight, GitBranch, RefreshCw, Repeat, Repeat1, Network, CalendarIcon, ChevronDown, Braces, ChevronDownIcon, Brackets, PlusIcon, TrashIcon, Plus, Loader2, Circle, EyeOffIcon, EyeIcon, PauseIcon, HourglassIcon, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Maximize, AlertCircleIcon, CirclePause, StopCircle, SearchIcon, ChevronsUpDown, Search, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, ExternalLink, TriangleAlertIcon, ChevronRightIcon, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, CircleAlertIcon, XIcon, PanelRightIcon, KeyboardIcon, GaugeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, Info, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, ChevronRight, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, ChevronsLeftRight, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, CircleSlash } from 'lucide-react';
3
+ import { CheckIcon as CheckIcon$1, CopyIcon, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, X, Share2, Check, PlayCircle, Workflow, Layers, List, Clock as Clock$1, CalendarClock, Timer, CornerDownRight, GitBranch, RefreshCw, Repeat, Repeat1, Network, CalendarIcon, ChevronDown, Braces, ChevronDownIcon, Brackets, PlusIcon, TrashIcon, Plus, Loader2, Circle, EyeOffIcon, EyeIcon, PauseIcon, HourglassIcon, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Maximize, AlertCircleIcon, CirclePause, StopCircle, SearchIcon, ChevronsUpDown, Search, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, ExternalLink, TriangleAlertIcon, ChevronRightIcon, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, CircleAlertIcon, XIcon, PanelRightIcon, KeyboardIcon, GaugeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, Info, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, ChevronRight, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, ChevronsLeftRight, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, CircleSlash, Trash, Link2 } from 'lucide-react';
4
4
  import * as React from 'react';
5
- import React__default, { forwardRef, memo, useState, useEffect, useRef, useCallback, useMemo, createContext, useContext, Fragment as Fragment$1, useId, Suspense } from 'react';
5
+ import React__default, { forwardRef, memo, useState, useEffect, useRef, useCallback, useMemo, createContext, useContext, Fragment as Fragment$1, useId, Suspense, useLayoutEffect } from 'react';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
8
8
  import { TooltipProvider as TooltipProvider$1 } from '@radix-ui/react-tooltip';
@@ -6626,7 +6626,7 @@ const SelectContent = React.forwardRef(({ className, children, position = "poppe
6626
6626
  {
6627
6627
  ref,
6628
6628
  className: cn(
6629
- "relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
6629
+ "relative z-50 min-w-[8rem] max-h-dropdown-max-height overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
6630
6630
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
6631
6631
  className
6632
6632
  ),
@@ -9593,7 +9593,7 @@ function Combobox({
9593
9593
  ref: listRef,
9594
9594
  id: "combobox-options",
9595
9595
  role: "listbox",
9596
- className: "max-h-[300px] overflow-y-auto overflow-x-hidden p-1",
9596
+ className: "max-h-dropdown-max-height overflow-y-auto overflow-x-hidden p-1",
9597
9597
  children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "py-6 text-center text-sm", children: emptyText }) : filteredOptions.map((option, index) => {
9598
9598
  const isSelected = value === option.value;
9599
9599
  const isHighlighted = index === highlightedIndex;
@@ -9802,16 +9802,12 @@ const AgentBadge = ({ agentId, messages = [], metadata, toolCallId, toolApproval
9802
9802
  );
9803
9803
  };
9804
9804
 
9805
- const useAgentMessages = ({
9806
- threadId,
9807
- agentId,
9808
- memory
9809
- }) => {
9805
+ const useAgentMessages = ({ threadId, agentId, memory }) => {
9810
9806
  const client = useMastraClient();
9811
9807
  const { requestContext } = usePlaygroundStore();
9812
9808
  return useQuery({
9813
9809
  queryKey: ["memory", "messages", threadId, agentId, "requestContext"],
9814
- queryFn: () => client.listThreadMessages(threadId, { agentId, requestContext }),
9810
+ queryFn: () => threadId ? client.listThreadMessages(threadId, { agentId, requestContext }) : null,
9815
9811
  enabled: memory && Boolean(threadId),
9816
9812
  staleTime: 0,
9817
9813
  gcTime: 0,
@@ -9828,7 +9824,7 @@ const AgentBadgeWrapper = ({
9828
9824
  toolApprovalMetadata
9829
9825
  }) => {
9830
9826
  const { data } = useAgentMessages({
9831
- threadId: result?.subAgentThreadId ?? "",
9827
+ threadId: result?.subAgentThreadId,
9832
9828
  agentId,
9833
9829
  memory: true
9834
9830
  });
@@ -12028,13 +12024,15 @@ const AgentChat = ({
12028
12024
  refreshThreadList,
12029
12025
  modelVersion,
12030
12026
  modelList,
12031
- messageId
12027
+ messageId,
12028
+ isNewThread
12032
12029
  }) => {
12033
12030
  const { settings } = useAgentSettings();
12034
12031
  const { requestContext } = usePlaygroundStore();
12035
12032
  const { data, isLoading: isMessagesLoading } = useAgentMessages({
12036
12033
  agentId,
12037
- threadId: threadId ?? "",
12034
+ threadId: isNewThread ? void 0 : threadId,
12035
+ // Prevent fetching when thread is new
12038
12036
  memory: memory ?? false
12039
12037
  });
12040
12038
  useEffect(() => {
@@ -12814,7 +12812,7 @@ function InputField({
12814
12812
  className: cn("text-[0.8125rem] text-icon3 flex justify-between items-center"),
12815
12813
  children: [
12816
12814
  label,
12817
- required && /* @__PURE__ */ jsx("i", { className: "text-icon2", children: "(required)" })
12815
+ required && /* @__PURE__ */ jsx("i", { className: "text-icon2 text-xs", children: "(required)" })
12818
12816
  ]
12819
12817
  }
12820
12818
  ) }),
@@ -18246,6 +18244,13 @@ function getSpanInfo({ span, withTraceId = true, withSpanId = true }) {
18246
18244
  value: span?.endedAt ? format(new Date(span.endedAt), "MMM dd, h:mm:ss.SSS aaa") : "-"
18247
18245
  }
18248
18246
  ];
18247
+ if (span?.attributes?.finishReason) {
18248
+ baseInfo.push({
18249
+ key: "finishReason",
18250
+ label: "Finish Reason",
18251
+ value: span.attributes.finishReason
18252
+ });
18253
+ }
18249
18254
  if (withSpanId) {
18250
18255
  baseInfo.unshift({
18251
18256
  key: "spanId",
@@ -18332,11 +18337,38 @@ const Tabs = Object.assign(TabsRoot, {
18332
18337
  Content: TabContent
18333
18338
  });
18334
18339
 
18340
+ function isTokenLimitExceeded(span) {
18341
+ return span?.attributes?.finishReason === "length";
18342
+ }
18343
+ function getTokenLimitMessage(span) {
18344
+ const usage = span?.attributes?.usage;
18345
+ if (!usage) {
18346
+ return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.`;
18347
+ }
18348
+ const inputTokens = usage.inputTokens ?? 0;
18349
+ const outputTokens = usage.outputTokens ?? 0;
18350
+ const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;
18351
+ if (inputTokens > 0 || outputTokens > 0) {
18352
+ return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.
18353
+
18354
+ Token usage: ${inputTokens} input + ${outputTokens} output = ${totalTokens} total`;
18355
+ }
18356
+ return `The model stopped generating because it reached the maximum token limit (${totalTokens} tokens). The response was truncated and may be incomplete.`;
18357
+ }
18358
+
18335
18359
  function SpanDetails({ span }) {
18336
18360
  if (!span) {
18337
18361
  return null;
18338
18362
  }
18363
+ const tokenLimitExceeded = isTokenLimitExceeded(span);
18339
18364
  return /* @__PURE__ */ jsxs(Fragment, { children: [
18365
+ tokenLimitExceeded && /* @__PURE__ */ jsx("div", { className: "bg-yellow-900/20 border border-yellow-200 rounded-md p-2 mb-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
18366
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "text-yellow-200 mt-0.5 flex-shrink-0", size: 20 }),
18367
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
18368
+ /* @__PURE__ */ jsx("h4", { className: "font-semibold text-yellow-200 mb-1 text-sm", children: "Token Limit Exceeded" }),
18369
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-mastra-el-3 whitespace-pre-line", children: getTokenLimitMessage(span) })
18370
+ ] })
18371
+ ] }) }),
18340
18372
  /* @__PURE__ */ jsx(
18341
18373
  SideDialog.CodeSection,
18342
18374
  {
@@ -19663,5 +19695,137 @@ function MCPServerCombobox({
19663
19695
  );
19664
19696
  }
19665
19697
 
19666
- export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentInformationLayout, AgentInformationTabLayout, AgentMemory, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, CommitIcon, CrossIcon, Crumb, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, Skeleton, SlashIcon, SpanScoreList, SpanScoring, SpanTabs, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TracingSettingsContext, TracingSettingsProvider, TsIcon, Txt, TxtCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, convertWorkflowRunStateToStreamResult, extractPrompt, formatHierarchicalSpans, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentInformationSettings, useAgentInformationTab, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, usePlaygroundStore, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useTracingSettings, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRunExecutionResult, useWorkflowRuns, useWorkflows, useWorkingMemory };
19698
+ const StudioConfigContext = createContext({
19699
+ baseUrl: "",
19700
+ headers: {},
19701
+ isLoading: false,
19702
+ setConfig: () => {
19703
+ }
19704
+ });
19705
+ const useStudioConfig = () => {
19706
+ return useContext(StudioConfigContext);
19707
+ };
19708
+ const LOCAL_STORAGE_KEY = "mastra-studio-config";
19709
+ const StudioConfigProvider = ({ children }) => {
19710
+ const [config, setConfig] = useState({
19711
+ baseUrl: "",
19712
+ headers: {},
19713
+ isLoading: true
19714
+ });
19715
+ useLayoutEffect(() => {
19716
+ const storedConfig = localStorage.getItem(LOCAL_STORAGE_KEY);
19717
+ if (storedConfig) {
19718
+ const parsedConfig = JSON.parse(storedConfig);
19719
+ if (typeof parsedConfig === "object" && parsedConfig !== null) {
19720
+ return setConfig({ ...parsedConfig, isLoading: false });
19721
+ }
19722
+ }
19723
+ return setConfig({ baseUrl: "", headers: {}, isLoading: false });
19724
+ }, []);
19725
+ const doSetConfig = (partialNewConfig) => {
19726
+ setConfig((prev) => {
19727
+ const nextConfig = { ...prev, ...partialNewConfig };
19728
+ localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(nextConfig));
19729
+ return nextConfig;
19730
+ });
19731
+ };
19732
+ return /* @__PURE__ */ jsx(StudioConfigContext.Provider, { value: { ...config, setConfig: doSetConfig }, children });
19733
+ };
19734
+
19735
+ const HeaderListForm = ({ headers, onAddHeader, onRemoveHeader }) => {
19736
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
19737
+ /* @__PURE__ */ jsx(Txt, { as: "h2", variant: "header-md", className: "text-icon6", children: "Headers" }),
19738
+ /* @__PURE__ */ jsxs("div", { className: "bg-surface4 rounded-lg p-4 border-sm border-border2 space-y-4", children: [
19739
+ headers.length > 0 && /* @__PURE__ */ jsx("ul", { className: "space-y-4", children: headers.map((header, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(HeaderListFormItem, { index, header, onRemove: () => onRemoveHeader(index) }) }, index)) }),
19740
+ /* @__PURE__ */ jsxs(
19741
+ Button$1,
19742
+ {
19743
+ type: "button",
19744
+ variant: "light",
19745
+ className: "w-full border-dashed !bg-surface4 !border-border2 hover:!bg-surface5",
19746
+ size: "lg",
19747
+ onClick: () => onAddHeader({ name: "", value: "" }),
19748
+ children: [
19749
+ /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Plus, {}) }),
19750
+ "Add Header"
19751
+ ]
19752
+ }
19753
+ )
19754
+ ] })
19755
+ ] });
19756
+ };
19757
+ const HeaderListFormItem = ({ index, header, onRemove }) => {
19758
+ const nameId = useId();
19759
+ const valueId = useId();
19760
+ return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] gap-4 items-end", children: [
19761
+ /* @__PURE__ */ jsx(
19762
+ InputField,
19763
+ {
19764
+ id: nameId,
19765
+ name: `headers.${index}.name`,
19766
+ label: "Name",
19767
+ placeholder: "e.g. Authorization",
19768
+ required: true,
19769
+ defaultValue: header.name
19770
+ }
19771
+ ),
19772
+ /* @__PURE__ */ jsx(
19773
+ InputField,
19774
+ {
19775
+ id: valueId,
19776
+ name: `headers.${index}.value`,
19777
+ label: "Value",
19778
+ placeholder: "e.g. Bearer <token>",
19779
+ required: true,
19780
+ defaultValue: header.value
19781
+ }
19782
+ ),
19783
+ /* @__PURE__ */ jsx(
19784
+ Button$1,
19785
+ {
19786
+ type: "button",
19787
+ variant: "light",
19788
+ className: "w-full !bg-surface4 !border-border2 hover:!bg-surface5",
19789
+ size: "lg",
19790
+ onClick: onRemove,
19791
+ children: /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Trash, { "aria-label": "Remove header" }) })
19792
+ }
19793
+ )
19794
+ ] });
19795
+ };
19796
+
19797
+ const StudioConfigForm = ({ initialConfig }) => {
19798
+ const { setConfig } = useStudioConfig();
19799
+ const [headers, setHeaders] = useState(() => {
19800
+ if (!initialConfig) return [];
19801
+ return Object.entries(initialConfig.headers).map(([name, value]) => ({ name, value }));
19802
+ });
19803
+ const handleSubmit = (e) => {
19804
+ e.preventDefault();
19805
+ const formData = new FormData(e.target);
19806
+ const formHeaders = {};
19807
+ for (let i = 0; i < headers.length; i++) {
19808
+ const headerName = formData.get(`headers.${i}.name`);
19809
+ const headerValue = formData.get(`headers.${i}.value`);
19810
+ formHeaders[headerName] = headerValue;
19811
+ }
19812
+ setConfig({ headers: formHeaders });
19813
+ toast$1.success("Configuration saved");
19814
+ };
19815
+ const handleAddHeader = (header) => {
19816
+ setHeaders((prev) => [...prev, header]);
19817
+ };
19818
+ const handleRemoveHeader = (index) => {
19819
+ setHeaders((prev) => prev.filter((_, i) => i !== index));
19820
+ };
19821
+ return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
19822
+ /* @__PURE__ */ jsx(HeaderListForm, { headers, onAddHeader: handleAddHeader, onRemoveHeader: handleRemoveHeader }),
19823
+ /* @__PURE__ */ jsxs(Button$1, { type: "submit", variant: "light", className: "w-full", size: "lg", children: [
19824
+ /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Link2, {}) }),
19825
+ "Set Configuration"
19826
+ ] })
19827
+ ] });
19828
+ };
19829
+
19830
+ export { AgentChat, AgentCoinIcon, AgentCombobox, AgentEntityHeader, AgentIcon, AgentInformation, AgentInformationLayout, AgentInformationTabLayout, AgentMemory, AgentMetadata, AgentMetadataList, AgentMetadataListEmpty, AgentMetadataListItem, AgentMetadataNetworkList, AgentMetadataScorerList, AgentMetadataSection, AgentMetadataToolList, AgentMetadataWorkflowList, AgentMetadataWrapper, AgentNetworkCoinIcon, AgentPromptExperimentProvider, AgentSettings, AgentSettingsContext, AgentSettingsProvider, AgentToolPanel, AgentsTable, AiIcon, Alert$1 as Alert, AlertDescription$1 as AlertDescription, AlertDialog, AlertTitle$1 as AlertTitle, ApiIcon, Badge, BranchIcon, Breadcrumb, Button$1 as Button, ButtonsGroup, Cell, ChatThreads, CheckIcon, ChevronIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, CommitIcon, CrossIcon, Crumb, DateTimeCell, DateTimePicker, DateTimePickerContent, DbIcon, DebugIcon, DefaultTrigger, DeploymentIcon, DividerIcon, DocsIcon, DynamicForm, EmptyState, Entity, EntityContent, EntityDescription, EntityHeader, EntityIcon, EntityName, Entry, EntryCell, EntryList, EntryListSkeleton, EnvIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, Header, HeaderAction, HeaderGroup, HeaderTitle, HomeIcon, Icon, InfoIcon, InputField, JudgeIcon, Kbd, KeyValueList, LatencyIcon, LinkComponentProvider, LogoWithoutText, LogsIcon, MCPDetail, MCPServerCombobox, MCPTable, MCPToolPanel, MainContentContent, MainContentLayout, MainSidebar, MainSidebarProvider, McpCoinIcon, McpServerIcon, MemoryIcon, MemorySearch, Notification, OpenAIIcon, PageHeader, PlaygroundQueryClient, PlaygroundTabs, PromptIcon, RadioGroup, RadioGroupItem, RepoIcon, RequestContext, RequestContextWrapper, Row, ScoreDialog, ScorerCombobox, ScorersTable, ScoresList, ScoresTools, SearchField, Searchbar, SearchbarWrapper, Section, Sections, SelectField, SettingsIcon, SideDialog, Skeleton, SlashIcon, SpanScoreList, SpanScoring, SpanTabs, StudioConfigContext, StudioConfigForm, StudioConfigProvider, Tab$1 as Tab, TabContent$1 as TabContent, TabList$1 as TabList, Table, Tbody, TemplateFailure, TemplateForm, TemplateInfo, TemplateInstallation, TemplateSuccess, TemplatesList, TemplatesTools, TextAndIcon, Th, Thead, ThreadDeleteButton, ThreadInputProvider, ThreadItem, ThreadLink, ThreadList, Threads, ToolCoinIcon, ToolCombobox, ToolFallback, ToolIconMap, ToolInformation, ToolPanel, ToolTable, ToolsIcon, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TraceDialog, TraceIcon, TraceTimeline, TraceTimelineLegend, TraceTimelineSpan, TracesList, TracesTools, TracingSettingsContext, TracingSettingsProvider, TsIcon, Txt, TxtCell, VariablesIcon, WorkflowCoinIcon, WorkflowCombobox, WorkflowGraph, WorkflowIcon, WorkflowInformation, WorkflowRunContext, WorkflowRunDetail, WorkflowRunList, WorkflowRunProvider, WorkflowTable, WorkflowTrigger, WorkingMemoryContext, WorkingMemoryProvider, convertWorkflowRunStateToStreamResult, extractPrompt, formatHierarchicalSpans, getColumnTemplate, getShortId, getSpanTypeUi, getToNextEntryFn, getToPreviousEntryFn, parseError, providerMapToIcon, scoresListColumns, spanTypePrefixes, toast, traceScoresListColumns, tracesListColumns, useAgent, useAgentInformationSettings, useAgentInformationTab, useAgentPromptExperiment, useAgentSettings, useAgents, useCancelWorkflowRun, useCurrentRun, useDeleteThread, useExecuteAgentTool, useExecuteMCPTool, useExecuteTool, useExecuteWorkflow, useInView, useLinkComponent, useMCPServerTool, useMCPServerTools, useMCPServers, useMainSidebar, useMemory, useMemoryConfig, useMemorySearch, usePlaygroundStore, useReorderModelList, useResetAgentModel, useScorer, useScorers, useScoresByScorerId, useSpeechRecognition, useStreamWorkflow, useStudioConfig, useThreadInput, useThreads, useTool, useTools, useTraceSpanScores, useTracingSettings, useUpdateAgentModel, useUpdateModelInModelList, useWorkflow, useWorkflowRunExecutionResult, useWorkflowRuns, useWorkflows, useWorkingMemory };
19667
19831
  //# sourceMappingURL=index.es.js.map