@mastra/playground-ui 43.0.0-alpha.4 → 43.0.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/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @mastra/playground-ui
2
2
 
3
+ ## 43.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed autoscroll scrollbars not becoming transparent. ([#20171](https://github.com/mastra-ai/mastra/pull/20171))
8
+
9
+ - Fixed Studio repeatedly polling observability endpoints when the observability storage domain is disabled. Studio now treats the disabled domain as an unavailable capability: score and log views stop polling, failed requests are not retried, and the Logs page shows a clear unavailable state instead of a generic error. Related to [#20157](https://github.com/mastra-ai/mastra/issues/20157). ([#20158](https://github.com/mastra-ai/mastra/pull/20158))
10
+
11
+ - Fixed the trace feedback panel continuing to poll every 3 seconds when the observability storage domain is disabled. Studio now also recognizes the "Scores storage domain is not available" response from the span scores endpoint, so span score polling stops for disabled scores storage as well. Follow-up to [#20158](https://github.com/mastra-ai/mastra/pull/20158). ([#20170](https://github.com/mastra-ai/mastra/pull/20170))
12
+
13
+ - Updated dependencies [[`c8d8a01`](https://github.com/mastra-ai/mastra/commit/c8d8a010ee2efe2b7bf4d07707382c34c87b14e4), [`df6a9ce`](https://github.com/mastra-ai/mastra/commit/df6a9ce87214f7aadb2edfe62f67605fe998a0a4), [`73839cb`](https://github.com/mastra-ai/mastra/commit/73839cb58322679c170627d1015669ede5f619aa), [`371cf60`](https://github.com/mastra-ai/mastra/commit/371cf6075cef88ac6919a08d59a82e485397364a), [`17e3206`](https://github.com/mastra-ai/mastra/commit/17e3206b044e704699bdda53db2d617beff3b9da), [`8e4dc79`](https://github.com/mastra-ai/mastra/commit/8e4dc793dcf035ea506f9ce79f56d2d501a4be14), [`2db93cc`](https://github.com/mastra-ai/mastra/commit/2db93ccd0b872e4de7853a93383efe0647901df8), [`3a507cb`](https://github.com/mastra-ai/mastra/commit/3a507cbd42da6d56be2975f374d53dafbce7c0d1), [`094ab61`](https://github.com/mastra-ai/mastra/commit/094ab6129a1a3ecf6eeb86decac17d5faea4e02a), [`fe80944`](https://github.com/mastra-ai/mastra/commit/fe80944f3ef6681fea6eae8200fce387b7bb3c2f), [`263d2ca`](https://github.com/mastra-ai/mastra/commit/263d2cac80ba3b03b9c0f008db6f1f1b9eb0278c), [`75f843d`](https://github.com/mastra-ai/mastra/commit/75f843d09f758223e6eeb321321bdcc5c7e779d0), [`e51e166`](https://github.com/mastra-ai/mastra/commit/e51e166c52e220abc9b64554ce37359dca8544b1)]:
14
+ - @mastra/core@1.53.0
15
+ - @mastra/client-js@1.34.0
16
+ - @mastra/react@1.3.2
17
+
18
+ ## 43.0.0-alpha.5
19
+
20
+ ### Patch Changes
21
+
22
+ - Fixed autoscroll scrollbars not becoming transparent. ([#20171](https://github.com/mastra-ai/mastra/pull/20171))
23
+
24
+ - Fixed the trace feedback panel continuing to poll every 3 seconds when the observability storage domain is disabled. Studio now also recognizes the "Scores storage domain is not available" response from the span scores endpoint, so span score polling stops for disabled scores storage as well. Follow-up to [#20158](https://github.com/mastra-ai/mastra/pull/20158). ([#20170](https://github.com/mastra-ai/mastra/pull/20170))
25
+
26
+ - Updated dependencies [[`73839cb`](https://github.com/mastra-ai/mastra/commit/73839cb58322679c170627d1015669ede5f619aa), [`8e4dc79`](https://github.com/mastra-ai/mastra/commit/8e4dc793dcf035ea506f9ce79f56d2d501a4be14), [`2db93cc`](https://github.com/mastra-ai/mastra/commit/2db93ccd0b872e4de7853a93383efe0647901df8), [`094ab61`](https://github.com/mastra-ai/mastra/commit/094ab6129a1a3ecf6eeb86decac17d5faea4e02a), [`fe80944`](https://github.com/mastra-ai/mastra/commit/fe80944f3ef6681fea6eae8200fce387b7bb3c2f), [`e51e166`](https://github.com/mastra-ai/mastra/commit/e51e166c52e220abc9b64554ce37359dca8544b1)]:
27
+ - @mastra/core@1.53.0-alpha.4
28
+ - @mastra/client-js@1.34.0-alpha.5
29
+ - @mastra/react@1.3.2-alpha.5
30
+
3
31
  ## 43.0.0-alpha.4
4
32
 
5
33
  ### Patch Changes
@@ -32,12 +32,7 @@ export type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' |
32
32
  * instead, like the trace branch support check above.
33
33
  */
34
34
  export declare function isUnsupportedObservabilityOperationError(error: unknown, operation: UnsupportedObservabilityOperation): boolean;
35
- /**
36
- * Check if an error came from a server whose observability storage domain is
37
- * unavailable — e.g. disabled with `domains: { observability: false }` on a
38
- * composite store. Affects every observability endpoint, so no operation
39
- * argument. Matches the stable message from the server's `getObservabilityStore()`.
40
- */
35
+ /** Check if an error came from a server whose observability storage domain is disabled. */
41
36
  export declare function isObservabilityUnavailableError(error: unknown): boolean;
42
37
  /**
43
38
  * Check if error has a status code that shouldn't be retried.
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
2
  @layer properties {
3
3
  @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {
4
4
  *, :before, :after, ::backdrop {
@@ -73,6 +73,8 @@
73
73
  --tw-duration: initial;
74
74
  --tw-ease: initial;
75
75
  --tw-content: "";
76
+ --tw-scrollbar-thumb: #0000;
77
+ --tw-scrollbar-track: #0000;
76
78
  --tw-mask-linear: linear-gradient(#fff, #fff);
77
79
  --tw-mask-radial: linear-gradient(#fff, #fff);
78
80
  --tw-mask-conic: linear-gradient(#fff, #fff);
@@ -145,7 +147,7 @@
145
147
  --color-gray-100: oklch(96.7% .003 264.542);
146
148
  --color-gray-300: oklch(87.2% .01 258.338);
147
149
  --color-gray-700: oklch(37.3% .034 259.733);
148
- --color-neutral-500: oklch(55.6% 0 0);
150
+ --color-neutral-500: oklch(55.6% 0 none);
149
151
  --color-black: #000;
150
152
  --color-white: #fff;
151
153
  --breakpoint-lg: 64rem;
@@ -350,7 +352,7 @@
350
352
  -webkit-text-size-adjust: 100%;
351
353
  tab-size: 4;
352
354
  line-height: 1.5;
353
- font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
355
+ font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
354
356
  font-feature-settings: var(--default-font-feature-settings, normal);
355
357
  font-variation-settings: var(--default-font-variation-settings, normal);
356
358
  -webkit-tap-highlight-color: transparent;
@@ -416,7 +418,7 @@
416
418
  border-collapse: collapse;
417
419
  }
418
420
 
419
- :-moz-focusring {
421
+ :-moz-focusring:where(:not(iframe)) {
420
422
  outline: auto;
421
423
  }
422
424
 
@@ -2317,7 +2319,6 @@
2317
2319
  .-translate-y-px {
2318
2320
  --tw-translate-y: calc(var(--spacing-px) * -1);
2319
2321
  translate: var(--tw-translate-x) var(--tw-translate-y);
2320
- translate: var(--tw-translate-x) var(--tw-translate-y);
2321
2322
  }
2322
2323
 
2323
2324
  .scale-50 {
@@ -2435,6 +2436,10 @@
2435
2436
  resize: vertical;
2436
2437
  }
2437
2438
 
2439
+ .\[scrollbar-width\:none\] {
2440
+ scrollbar-width: none;
2441
+ }
2442
+
2438
2443
  .list-decimal {
2439
2444
  list-style-type: decimal;
2440
2445
  }
@@ -4854,7 +4859,7 @@
4854
4859
  text-wrap: wrap;
4855
4860
  }
4856
4861
 
4857
- .break-words, .wrap-break-word, .wrap-break-word {
4862
+ .break-words, .wrap-break-word {
4858
4863
  overflow-wrap: break-word;
4859
4864
  }
4860
4865
 
@@ -5659,10 +5664,6 @@
5659
5664
  overflow-clip-margin: .75rem;
5660
5665
  }
5661
5666
 
5662
- .\[scrollbar-width\:none\] {
5663
- scrollbar-width: none;
5664
- }
5665
-
5666
5667
  .\[stroke-dasharray\:28\] {
5667
5668
  stroke-dasharray: 28;
5668
5669
  }
@@ -6231,7 +6232,6 @@
6231
6232
  }
6232
6233
 
6233
6234
  .after\:-left-px:after {
6234
- content: var(--tw-content);
6235
6235
  content: var(--tw-content);
6236
6236
  left: -1px;
6237
6237
  left: calc(var(--spacing-px) * -1);
@@ -6243,7 +6243,6 @@
6243
6243
  }
6244
6244
 
6245
6245
  .after\:h-px:after {
6246
- content: var(--tw-content);
6247
6246
  content: var(--tw-content);
6248
6247
  height: 1px;
6249
6248
  height: var(--spacing-px);
@@ -6255,7 +6254,6 @@
6255
6254
  }
6256
6255
 
6257
6256
  .after\:w-px:after {
6258
- content: var(--tw-content);
6259
6257
  content: var(--tw-content);
6260
6258
  width: 1px;
6261
6259
  width: var(--spacing-px);
@@ -7109,6 +7107,16 @@
7109
7107
  opacity: 1;
7110
7108
  }
7111
7109
 
7110
+ .data-autoscrolling\:scrollbar-thumb-transparent[data-autoscrolling] {
7111
+ --tw-scrollbar-thumb: transparent;
7112
+ scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);
7113
+ }
7114
+
7115
+ .data-autoscrolling\:scrollbar-track-transparent[data-autoscrolling] {
7116
+ --tw-scrollbar-track: transparent;
7117
+ scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);
7118
+ }
7119
+
7112
7120
  .data-disabled\:pointer-events-none[data-disabled] {
7113
7121
  pointer-events: none;
7114
7122
  }
@@ -8377,7 +8385,6 @@
8377
8385
  }
8378
8386
 
8379
8387
  .\[\&_\.data-list-row\]\:after\:-bottom-px .data-list-row:after {
8380
- content: var(--tw-content);
8381
8388
  content: var(--tw-content);
8382
8389
  bottom: -1px;
8383
8390
  bottom: calc(var(--spacing-px) * -1);
@@ -8389,7 +8396,6 @@
8389
8396
  }
8390
8397
 
8391
8398
  .\[\&_\.data-list-row\]\:after\:h-px .data-list-row:after {
8392
- content: var(--tw-content);
8393
8399
  content: var(--tw-content);
8394
8400
  height: 1px;
8395
8401
  height: var(--spacing-px);
@@ -8490,7 +8496,6 @@
8490
8496
  }
8491
8497
 
8492
8498
  .\[\&_\.data-list-top\>\*\:not\(\:first-child\)\]\:before\:w-px .data-list-top > :not(:first-child):before {
8493
- content: var(--tw-content);
8494
8499
  content: var(--tw-content);
8495
8500
  width: 1px;
8496
8501
  width: var(--spacing-px);
@@ -10253,6 +10258,18 @@ html.light {
10253
10258
  initial-value: "";
10254
10259
  }
10255
10260
 
10261
+ @property --tw-scrollbar-thumb {
10262
+ syntax: "<color>";
10263
+ inherits: false;
10264
+ initial-value: #0000;
10265
+ }
10266
+
10267
+ @property --tw-scrollbar-track {
10268
+ syntax: "<color>";
10269
+ inherits: false;
10270
+ initial-value: #0000;
10271
+ }
10272
+
10256
10273
  @property --tw-mask-linear {
10257
10274
  syntax: "*";
10258
10275
  inherits: false;
@@ -63,11 +63,15 @@ function isUnsupportedObservabilityOperationError(error, operation) {
63
63
  if (typeof message !== "string") return false;
64
64
  return message.includes(`does not support listing ${operation}`);
65
65
  }
66
+ const OBSERVABILITY_UNAVAILABLE_MESSAGES = [
67
+ "Observability storage domain is not available",
68
+ "Scores storage domain is not available"
69
+ ];
66
70
  function isObservabilityUnavailableError(error) {
67
71
  if (!error || typeof error !== "object" || !("message" in error)) return false;
68
72
  const message = error.message;
69
73
  if (typeof message !== "string") return false;
70
- return message.includes("Observability storage domain is not available");
74
+ return OBSERVABILITY_UNAVAILABLE_MESSAGES.some((m) => message.includes(m));
71
75
  }
72
76
  function isNonRetryableError(error) {
73
77
  if (!error || typeof error !== "object") return false;
@@ -1 +1 @@
1
- {"version":3,"file":"query-utils.cjs.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n * - 501: Not Implemented (capability gap, e.g. disabled storage domain, won't change)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404, 501];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n/**\n * Check if an error came from a server whose observability storage domain is\n * unavailable — e.g. disabled with `domains: { observability: false }` on a\n * composite store. Affects every observability endpoint, so no operation\n * argument. Matches the stable message from the server's `getObservabilityStore()`.\n */\nexport function isObservabilityUnavailableError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('Observability storage domain is not available');\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404) or 501 capability gaps.\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-utils.cjs.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n * - 501: Not Implemented (capability gap, e.g. disabled storage domain, won't change)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404, 501];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n// Span scores are backed by the separate `scores` domain. Explicit list: many\n// unrelated server domains share the \"storage domain is not available\" suffix.\nconst OBSERVABILITY_UNAVAILABLE_MESSAGES = [\n 'Observability storage domain is not available',\n 'Scores storage domain is not available',\n];\n\n/** Check if an error came from a server whose observability storage domain is disabled. */\nexport function isObservabilityUnavailableError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return OBSERVABILITY_UNAVAILABLE_MESSAGES.some(m => message.includes(m));\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404) or 501 capability gaps.\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
@@ -59,11 +59,15 @@ function isUnsupportedObservabilityOperationError(error, operation) {
59
59
  if (typeof message !== "string") return false;
60
60
  return message.includes(`does not support listing ${operation}`);
61
61
  }
62
+ const OBSERVABILITY_UNAVAILABLE_MESSAGES = [
63
+ "Observability storage domain is not available",
64
+ "Scores storage domain is not available"
65
+ ];
62
66
  function isObservabilityUnavailableError(error) {
63
67
  if (!error || typeof error !== "object" || !("message" in error)) return false;
64
68
  const message = error.message;
65
69
  if (typeof message !== "string") return false;
66
- return message.includes("Observability storage domain is not available");
70
+ return OBSERVABILITY_UNAVAILABLE_MESSAGES.some((m) => message.includes(m));
67
71
  }
68
72
  function isNonRetryableError(error) {
69
73
  if (!error || typeof error !== "object") return false;
@@ -1 +1 @@
1
- {"version":3,"file":"query-utils.es.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n * - 501: Not Implemented (capability gap, e.g. disabled storage domain, won't change)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404, 501];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n/**\n * Check if an error came from a server whose observability storage domain is\n * unavailable — e.g. disabled with `domains: { observability: false }` on a\n * composite store. Affects every observability endpoint, so no operation\n * argument. Matches the stable message from the server's `getObservabilityStore()`.\n */\nexport function isObservabilityUnavailableError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('Observability storage domain is not available');\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404) or 501 capability gaps.\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-utils.es.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n * - 501: Not Implemented (capability gap, e.g. disabled storage domain, won't change)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404, 501];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n// Span scores are backed by the separate `scores` domain. Explicit list: many\n// unrelated server domains share the \"storage domain is not available\" suffix.\nconst OBSERVABILITY_UNAVAILABLE_MESSAGES = [\n 'Observability storage domain is not available',\n 'Scores storage domain is not available',\n];\n\n/** Check if an error came from a server whose observability storage domain is disabled. */\nexport function isObservabilityUnavailableError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return OBSERVABILITY_UNAVAILABLE_MESSAGES.some(m => message.includes(m));\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404) or 501 capability gaps.\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/playground-ui",
3
3
  "type": "module",
4
- "version": "43.0.0-alpha.4",
4
+ "version": "43.0.0",
5
5
  "description": "Mastra Playground components",
6
6
  "sideEffects": [
7
7
  "**/*.css"
@@ -150,17 +150,17 @@
150
150
  "react": ">=19.0.0",
151
151
  "react-dom": ">=19.0.0",
152
152
  "tailwindcss": "^4.0.0",
153
- "@mastra/client-js": "^1.34.0-alpha.4",
154
- "@mastra/react": "1.3.2-alpha.4"
153
+ "@mastra/client-js": "^1.34.0",
154
+ "@mastra/react": "1.3.2"
155
155
  },
156
156
  "devDependencies": {
157
157
  "@storybook/addon-a11y": "^10.4.1",
158
158
  "@storybook/addon-docs": "^10.4.1",
159
159
  "@storybook/addon-mcp": "^0.6.0",
160
160
  "@storybook/react-vite": "^10.4.1",
161
- "@tailwindcss/postcss": "^4.2.2",
161
+ "@tailwindcss/postcss": "^4.3.3",
162
162
  "@tailwindcss/typography": "^0.5.19",
163
- "@tailwindcss/vite": "4.2.2",
163
+ "@tailwindcss/vite": "4.3.3",
164
164
  "@tanstack/react-query": "^5.90.21",
165
165
  "@testing-library/react": "^16.3.2",
166
166
  "@types/json-schema": "^7.0.15",
@@ -182,18 +182,18 @@
182
182
  "rollup-plugin-node-externals": "^8.1.2",
183
183
  "storybook": "^10.4.1",
184
184
  "tailwind-merge": "^3.5.0",
185
- "tailwindcss": "4.2.2",
185
+ "tailwindcss": "4.3.3",
186
186
  "tw-animate-css": "^1.4.0",
187
187
  "typescript": "^6.0.3",
188
188
  "vite": "^7.3.1",
189
189
  "vite-plugin-dts": "^4.5.4",
190
190
  "vite-plugin-lib-inject-css": "^2.2.2",
191
191
  "vitest": "4.1.10",
192
- "@internal/lint": "0.0.116",
193
- "@mastra/memory": "1.23.1",
194
- "@mastra/core": "1.53.0-alpha.3",
195
- "@mastra/client-js": "^1.34.0-alpha.4",
196
- "@mastra/react": "1.3.2-alpha.4"
192
+ "@internal/lint": "0.0.117",
193
+ "@mastra/core": "1.53.0",
194
+ "@mastra/react": "1.3.2",
195
+ "@mastra/client-js": "^1.34.0",
196
+ "@mastra/memory": "1.23.1"
197
197
  },
198
198
  "homepage": "https://mastra.ai",
199
199
  "repository": {