@mastra/playground-ui 28.0.0 → 28.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,8 @@ export type TracesListViewTrace = {
10
10
  traceId: string;
11
11
  /** Required for branch rows; absent on plain trace rows (which are root-rooted). */
12
12
  spanId?: string | null;
13
+ /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */
14
+ parentSpanId?: string | null;
13
15
  name: string;
14
16
  entityType?: string | null;
15
17
  entityId?: string | null;
@@ -18,7 +20,6 @@ export type TracesListViewTrace = {
18
20
  input?: unknown;
19
21
  startedAt?: Date | string | null;
20
22
  createdAt: Date | string;
21
- threadId?: string | null;
22
23
  };
23
24
  export type TracesListViewProps = {
24
25
  traces: TracesListViewTrace[];
@@ -36,12 +37,9 @@ export type TracesListViewProps = {
36
37
  featuredSpanId?: string | null;
37
38
  /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */
38
39
  onTraceClick: (trace: TracesListViewTrace) => void;
39
- groupByThread?: boolean;
40
- threadTitles?: Record<string, string>;
41
40
  };
42
41
  /**
43
- * Virtualized presentational list. Flattens optional thread groups into a single
44
- * indexed item array, renders only the visible window via TanStack Virtual, and
42
+ * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and
45
43
  * uses DataList primitives for layout (CSS Grid with subgrid rows).
46
44
  */
47
- export declare function TracesListView({ traces, isLoading, isFetchingNextPage, hasNextPage, setEndOfListElement, filtersApplied, featuredTraceId, featuredSpanId, onTraceClick, groupByThread, threadTitles, }: TracesListViewProps): import("react/jsx-runtime").JSX.Element;
45
+ export declare function TracesListView({ traces, isLoading, isFetchingNextPage, hasNextPage, setEndOfListElement, filtersApplied, featuredTraceId, featuredSpanId, onTraceClick, }: TracesListViewProps): import("react/jsx-runtime").JSX.Element;
@@ -7,11 +7,8 @@ export interface TracesFilters {
7
7
  }
8
8
  /** Returns the next page number if the server indicates more pages are available. */
9
9
  export declare function getTracesNextPageParam(lastPage: ListTracesResponse | ListBranchesResponse | undefined, _allPages: unknown, lastPageParam: number): number | undefined;
10
- type TracesPageResponse = (ListTracesResponse | ListBranchesResponse) & {
11
- threadTitles?: Record<string, string>;
12
- };
13
- /** Deduplicates trace/branch rows by traceId + spanId across all loaded pages.
14
- * Also merges threadTitles from all pages for thread grouping display. */
10
+ type TracesPageResponse = ListTracesResponse | ListBranchesResponse;
11
+ /** Deduplicates trace/branch rows by traceId + spanId across all loaded pages. */
15
12
  export declare function selectUniqueTraces(data: {
16
13
  pages: TracesPageResponse[];
17
14
  }): {
@@ -60,7 +57,6 @@ export declare function selectUniqueTraces(data: {
60
57
  rootEntityVersionId?: string | null | undefined;
61
58
  parentSpanId?: string | null | undefined;
62
59
  }[];
63
- threadTitles: Record<string, string>;
64
60
  };
65
61
  export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
66
62
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -110,7 +106,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
110
106
  rootEntityVersionId?: string | null | undefined;
111
107
  parentSpanId?: string | null | undefined;
112
108
  }[];
113
- threadTitles: Record<string, string>;
114
109
  };
115
110
  error: Error;
116
111
  isError: true;
@@ -167,7 +162,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
167
162
  rootEntityVersionId?: string | null | undefined;
168
163
  parentSpanId?: string | null | undefined;
169
164
  }[];
170
- threadTitles: Record<string, string>;
171
165
  }, Error>>;
172
166
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
173
167
  spans: {
@@ -215,7 +209,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
215
209
  rootEntityVersionId?: string | null | undefined;
216
210
  parentSpanId?: string | null | undefined;
217
211
  }[];
218
- threadTitles: Record<string, string>;
219
212
  }, Error>>;
220
213
  hasNextPage: boolean;
221
214
  hasPreviousPage: boolean;
@@ -282,7 +275,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
282
275
  rootEntityVersionId?: string | null | undefined;
283
276
  parentSpanId?: string | null | undefined;
284
277
  }[];
285
- threadTitles: Record<string, string>;
286
278
  }, Error>>;
287
279
  fetchStatus: import('@tanstack/react-query').FetchStatus;
288
280
  promise: Promise<{
@@ -331,7 +323,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
331
323
  rootEntityVersionId?: string | null | undefined;
332
324
  parentSpanId?: string | null | undefined;
333
325
  }[];
334
- threadTitles: Record<string, string>;
335
326
  }>;
336
327
  } | {
337
328
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -381,7 +372,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
381
372
  rootEntityVersionId?: string | null | undefined;
382
373
  parentSpanId?: string | null | undefined;
383
374
  }[];
384
- threadTitles: Record<string, string>;
385
375
  };
386
376
  error: null;
387
377
  isError: false;
@@ -440,7 +430,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
440
430
  rootEntityVersionId?: string | null | undefined;
441
431
  parentSpanId?: string | null | undefined;
442
432
  }[];
443
- threadTitles: Record<string, string>;
444
433
  }, Error>>;
445
434
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
446
435
  spans: {
@@ -488,7 +477,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
488
477
  rootEntityVersionId?: string | null | undefined;
489
478
  parentSpanId?: string | null | undefined;
490
479
  }[];
491
- threadTitles: Record<string, string>;
492
480
  }, Error>>;
493
481
  hasNextPage: boolean;
494
482
  hasPreviousPage: boolean;
@@ -553,7 +541,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
553
541
  rootEntityVersionId?: string | null | undefined;
554
542
  parentSpanId?: string | null | undefined;
555
543
  }[];
556
- threadTitles: Record<string, string>;
557
544
  }, Error>>;
558
545
  fetchStatus: import('@tanstack/react-query').FetchStatus;
559
546
  promise: Promise<{
@@ -602,7 +589,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
602
589
  rootEntityVersionId?: string | null | undefined;
603
590
  parentSpanId?: string | null | undefined;
604
591
  }[];
605
- threadTitles: Record<string, string>;
606
592
  }>;
607
593
  } | {
608
594
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -664,7 +650,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
664
650
  rootEntityVersionId?: string | null | undefined;
665
651
  parentSpanId?: string | null | undefined;
666
652
  }[];
667
- threadTitles: Record<string, string>;
668
653
  }, Error>>;
669
654
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
670
655
  spans: {
@@ -712,7 +697,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
712
697
  rootEntityVersionId?: string | null | undefined;
713
698
  parentSpanId?: string | null | undefined;
714
699
  }[];
715
- threadTitles: Record<string, string>;
716
700
  }, Error>>;
717
701
  hasNextPage: boolean;
718
702
  hasPreviousPage: boolean;
@@ -777,7 +761,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
777
761
  rootEntityVersionId?: string | null | undefined;
778
762
  parentSpanId?: string | null | undefined;
779
763
  }[];
780
- threadTitles: Record<string, string>;
781
764
  }, Error>>;
782
765
  fetchStatus: import('@tanstack/react-query').FetchStatus;
783
766
  promise: Promise<{
@@ -826,7 +809,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
826
809
  rootEntityVersionId?: string | null | undefined;
827
810
  parentSpanId?: string | null | undefined;
828
811
  }[];
829
- threadTitles: Record<string, string>;
830
812
  }>;
831
813
  } | {
832
814
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -888,7 +870,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
888
870
  rootEntityVersionId?: string | null | undefined;
889
871
  parentSpanId?: string | null | undefined;
890
872
  }[];
891
- threadTitles: Record<string, string>;
892
873
  }, Error>>;
893
874
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
894
875
  spans: {
@@ -936,7 +917,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
936
917
  rootEntityVersionId?: string | null | undefined;
937
918
  parentSpanId?: string | null | undefined;
938
919
  }[];
939
- threadTitles: Record<string, string>;
940
920
  }, Error>>;
941
921
  hasNextPage: boolean;
942
922
  hasPreviousPage: boolean;
@@ -1001,7 +981,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1001
981
  rootEntityVersionId?: string | null | undefined;
1002
982
  parentSpanId?: string | null | undefined;
1003
983
  }[];
1004
- threadTitles: Record<string, string>;
1005
984
  }, Error>>;
1006
985
  fetchStatus: import('@tanstack/react-query').FetchStatus;
1007
986
  promise: Promise<{
@@ -1050,7 +1029,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1050
1029
  rootEntityVersionId?: string | null | undefined;
1051
1030
  parentSpanId?: string | null | undefined;
1052
1031
  }[];
1053
- threadTitles: Record<string, string>;
1054
1032
  }>;
1055
1033
  } | {
1056
1034
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -1111,7 +1089,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1111
1089
  rootEntityVersionId?: string | null | undefined;
1112
1090
  parentSpanId?: string | null | undefined;
1113
1091
  }[];
1114
- threadTitles: Record<string, string>;
1115
1092
  }, Error>>;
1116
1093
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
1117
1094
  spans: {
@@ -1159,7 +1136,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1159
1136
  rootEntityVersionId?: string | null | undefined;
1160
1137
  parentSpanId?: string | null | undefined;
1161
1138
  }[];
1162
- threadTitles: Record<string, string>;
1163
1139
  }, Error>>;
1164
1140
  hasNextPage: boolean;
1165
1141
  hasPreviousPage: boolean;
@@ -1225,7 +1201,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1225
1201
  rootEntityVersionId?: string | null | undefined;
1226
1202
  parentSpanId?: string | null | undefined;
1227
1203
  }[];
1228
- threadTitles: Record<string, string>;
1229
1204
  }, Error>>;
1230
1205
  fetchStatus: import('@tanstack/react-query').FetchStatus;
1231
1206
  promise: Promise<{
@@ -1274,7 +1249,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1274
1249
  rootEntityVersionId?: string | null | undefined;
1275
1250
  parentSpanId?: string | null | undefined;
1276
1251
  }[];
1277
- threadTitles: Record<string, string>;
1278
1252
  }>;
1279
1253
  } | {
1280
1254
  setEndOfListElement: (node: HTMLDivElement | null) => (() => void) | undefined;
@@ -1324,7 +1298,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1324
1298
  rootEntityVersionId?: string | null | undefined;
1325
1299
  parentSpanId?: string | null | undefined;
1326
1300
  }[];
1327
- threadTitles: Record<string, string>;
1328
1301
  };
1329
1302
  isError: false;
1330
1303
  error: null;
@@ -1383,7 +1356,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1383
1356
  rootEntityVersionId?: string | null | undefined;
1384
1357
  parentSpanId?: string | null | undefined;
1385
1358
  }[];
1386
- threadTitles: Record<string, string>;
1387
1359
  }, Error>>;
1388
1360
  fetchPreviousPage: (options?: import('@tanstack/react-query').FetchPreviousPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<{
1389
1361
  spans: {
@@ -1431,7 +1403,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1431
1403
  rootEntityVersionId?: string | null | undefined;
1432
1404
  parentSpanId?: string | null | undefined;
1433
1405
  }[];
1434
- threadTitles: Record<string, string>;
1435
1406
  }, Error>>;
1436
1407
  hasNextPage: boolean;
1437
1408
  hasPreviousPage: boolean;
@@ -1496,7 +1467,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1496
1467
  rootEntityVersionId?: string | null | undefined;
1497
1468
  parentSpanId?: string | null | undefined;
1498
1469
  }[];
1499
- threadTitles: Record<string, string>;
1500
1470
  }, Error>>;
1501
1471
  fetchStatus: import('@tanstack/react-query').FetchStatus;
1502
1472
  promise: Promise<{
@@ -1545,7 +1515,6 @@ export declare const useTraces: ({ filters, listMode }: TracesFilters) => {
1545
1515
  rootEntityVersionId?: string | null | undefined;
1546
1516
  parentSpanId?: string | null | undefined;
1547
1517
  }[];
1548
- threadTitles: Record<string, string>;
1549
1518
  }>;
1550
1519
  };
1551
1520
  export {};
@@ -39,7 +39,7 @@ export declare const TRACE_STATUS_OPTIONS: readonly [{
39
39
  /** Field ids for "synthetic" filter entries — they live in dedicated URL params
40
40
  * rather than the generic `filter*` set, but appear as rows in the Filter
41
41
  * popover so users can manage all filters from one place. */
42
- export declare const TRACE_SYNTHETIC_FILTER_FIELD_IDS: readonly ["rootEntityType", "status", "mode"];
42
+ export declare const TRACE_SYNTHETIC_FILTER_FIELD_IDS: readonly ["rootEntityType", "status"];
43
43
  export declare const TRACE_ROOT_ENTITY_TYPE_PARAM = "rootEntityType";
44
44
  export declare const TRACE_STATUS_PARAM = "status";
45
45
  export declare const TRACE_LIST_MODE_PARAM = "listMode";
@@ -1,2 +1 @@
1
- export { groupTracesByThread } from './group-traces-by-thread';
2
1
  export { getInputPreview, isTokenLimitExceeded, getTokenLimitMessage } from './span-utils';
@@ -2,6 +2,11 @@ export interface TracesDataListIdCellProps {
2
2
  traceId: string;
3
3
  }
4
4
  export declare function TracesDataListIdCell({ traceId }: TracesDataListIdCellProps): import("react/jsx-runtime").JSX.Element;
5
+ export interface TracesDataListKindCellProps {
6
+ /** `null`/missing → root span (Trace). Set → nested span (Subtrace). */
7
+ parentSpanId?: string | null;
8
+ }
9
+ export declare function TracesDataListKindCell({ parentSpanId }: TracesDataListKindCellProps): import("react/jsx-runtime").JSX.Element;
5
10
  export interface TracesDataListDateCellProps {
6
11
  timestamp: Date | string;
7
12
  }
@@ -5,17 +5,20 @@ import { DataListRoot } from '../data-list-root';
5
5
  import { DataListSpacer } from '../data-list-spacer';
6
6
  import { DataListSubHeading } from '../data-list-subheading';
7
7
  import { DataListTop } from '../data-list-top';
8
- import { TracesDataListIdCell, TracesDataListDateCell, TracesDataListTimeCell, TracesDataListNameCell, TracesDataListInputCell, TracesDataListEntityCell, TracesDataListStatusCell } from './traces-data-list-cells';
8
+ import { DataListTopCellWithTooltip } from '../data-list-top-cell';
9
+ import { TracesDataListIdCell, TracesDataListKindCell, TracesDataListDateCell, TracesDataListTimeCell, TracesDataListNameCell, TracesDataListInputCell, TracesDataListEntityCell, TracesDataListStatusCell } from './traces-data-list-cells';
9
10
  declare function TracesDataListRoot(props: ComponentProps<typeof DataListRoot>): import("react/jsx-runtime").JSX.Element;
10
11
  export declare const TracesDataList: typeof TracesDataListRoot & {
11
12
  Top: typeof DataListTop;
12
13
  TopCell: import('react').ForwardRefExoticComponent<import('../data-list-top-cell').DataListTopCellProps & import('react').RefAttributes<HTMLSpanElement>>;
14
+ TopCellWithTooltip: typeof DataListTopCellWithTooltip;
13
15
  RowButton: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
14
16
  NoMatch: typeof DataListNoMatch;
15
17
  Subheader: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
16
18
  SubHeading: typeof DataListSubHeading;
17
19
  Spacer: typeof DataListSpacer;
18
20
  IdCell: typeof TracesDataListIdCell;
21
+ KindCell: typeof TracesDataListKindCell;
19
22
  DateCell: typeof TracesDataListDateCell;
20
23
  TimeCell: typeof TracesDataListTimeCell;
21
24
  NameCell: typeof TracesDataListNameCell;
@@ -6,7 +6,7 @@ export type DataListTopCellProps = {
6
6
  export declare const DataListTopCell: import('react').ForwardRefExoticComponent<DataListTopCellProps & import('react').RefAttributes<HTMLSpanElement>>;
7
7
  export type DataListTopCellWithTooltipProps = {
8
8
  children: ReactNode;
9
- tooltip: string;
9
+ tooltip: ReactNode;
10
10
  className?: string;
11
11
  };
12
12
  export declare function DataListTopCellWithTooltip({ children, tooltip, className }: DataListTopCellWithTooltipProps): import("react/jsx-runtime").JSX.Element;
@@ -9,6 +9,14 @@ export declare function is401UnauthorizedError(error: unknown): boolean;
9
9
  * Handles both direct status property and client-js error message format.
10
10
  */
11
11
  export declare function is403ForbiddenError(error: unknown): boolean;
12
+ /**
13
+ * Check if an error came from a storage provider that does not implement `listBranches`.
14
+ *
15
+ * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,
16
+ * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —
17
+ * we match on the message text from `core/.../observability/base.ts` instead.
18
+ */
19
+ export declare function isBranchesNotSupportedError(error: unknown): boolean;
12
20
  /**
13
21
  * Check if error has a status code that shouldn't be retried.
14
22
  * Used to prevent retrying client errors that won't resolve.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/playground-ui",
3
3
  "type": "module",
4
- "version": "28.0.0",
4
+ "version": "28.0.1-alpha.1",
5
5
  "description": "Mastra Playground components",
6
6
  "main": "dist/index.umd.js",
7
7
  "module": "dist/index.es.js",
@@ -100,8 +100,8 @@
100
100
  "react": ">=19.0.0",
101
101
  "react-dom": ">=19.0.0",
102
102
  "tailwindcss": "^4.0.0",
103
- "@mastra/client-js": "^1.19.0",
104
- "@mastra/react": "0.3.2"
103
+ "@mastra/client-js": "^1.19.1-alpha.1",
104
+ "@mastra/react": "0.3.3-alpha.1"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@storybook/addon-a11y": "^10.3.6",
@@ -137,10 +137,10 @@
137
137
  "vite-plugin-dts": "^4.5.4",
138
138
  "vite-plugin-lib-inject-css": "^2.2.2",
139
139
  "vitest": "4.1.5",
140
- "@mastra/react": "0.3.2",
141
140
  "@internal/lint": "0.0.95",
142
- "@mastra/core": "1.34.0",
143
- "@mastra/client-js": "^1.19.0"
141
+ "@mastra/client-js": "^1.19.1-alpha.1",
142
+ "@mastra/core": "1.35.0-alpha.1",
143
+ "@mastra/react": "0.3.3-alpha.1"
144
144
  },
145
145
  "homepage": "https://mastra.ai",
146
146
  "repository": {
@@ -1,20 +0,0 @@
1
- /** Minimal trace shape required by groupTracesByThread */
2
- export type GroupableTrace = {
3
- threadId?: string | null;
4
- createdAt: Date | string;
5
- };
6
- export type ThreadGroup<T extends GroupableTrace = GroupableTrace> = {
7
- threadId: string;
8
- traces: T[];
9
- };
10
- export type GroupedTraces<T extends GroupableTrace = GroupableTrace> = {
11
- groups: ThreadGroup<T>[];
12
- ungrouped: T[];
13
- };
14
- /**
15
- * Groups traces by their threadId field.
16
- * Traces without a threadId are placed in the `ungrouped` bucket.
17
- * Groups are ordered by the most recent trace's createdAt (descending).
18
- * Within each group, traces maintain their original order.
19
- */
20
- export declare function groupTracesByThread<T extends GroupableTrace>(traces: T[]): GroupedTraces<T>;