@mastra/server 1.36.0-alpha.2 → 1.36.0-alpha.4

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +506 -28
  3. package/dist/{api-schema-manifest-CF2WPQBA.cjs → api-schema-manifest-HYLH35UU.cjs} +4 -4
  4. package/dist/{api-schema-manifest-CF2WPQBA.cjs.map → api-schema-manifest-HYLH35UU.cjs.map} +1 -1
  5. package/dist/{api-schema-manifest-YS3FEIFG.js → api-schema-manifest-WY623UST.js} +3 -3
  6. package/dist/{api-schema-manifest-YS3FEIFG.js.map → api-schema-manifest-WY623UST.js.map} +1 -1
  7. package/dist/{chunk-BYX5LHPW.cjs → chunk-2R76OYDZ.cjs} +22 -5
  8. package/dist/chunk-2R76OYDZ.cjs.map +1 -0
  9. package/dist/{chunk-K6AEVBZQ.js → chunk-2YUSBWAC.js} +8 -5
  10. package/dist/chunk-2YUSBWAC.js.map +1 -0
  11. package/dist/{chunk-QGPIJ3KB.cjs → chunk-3AWUH2DT.cjs} +82 -55
  12. package/dist/chunk-3AWUH2DT.cjs.map +1 -0
  13. package/dist/{chunk-KTOJ2F6V.js → chunk-4KSV4WWQ.js} +3 -3
  14. package/dist/{chunk-KTOJ2F6V.js.map → chunk-4KSV4WWQ.js.map} +1 -1
  15. package/dist/{chunk-CJFSLVFA.js → chunk-4RLRTJ5M.js} +22 -5
  16. package/dist/chunk-4RLRTJ5M.js.map +1 -0
  17. package/dist/{chunk-IIGNRK55.cjs → chunk-5OGVOPLG.cjs} +4 -4
  18. package/dist/{chunk-IIGNRK55.cjs.map → chunk-5OGVOPLG.cjs.map} +1 -1
  19. package/dist/{chunk-NRRAME2S.js → chunk-6HR2SJBP.js} +5 -2
  20. package/dist/chunk-6HR2SJBP.js.map +1 -0
  21. package/dist/{chunk-CKCZVUUB.js → chunk-7X6KGLPA.js} +3 -3
  22. package/dist/{chunk-CKCZVUUB.js.map → chunk-7X6KGLPA.js.map} +1 -1
  23. package/dist/{chunk-MXMOHULN.js → chunk-APCBVLVG.js} +2 -2
  24. package/dist/{chunk-MXMOHULN.js.map → chunk-APCBVLVG.js.map} +1 -1
  25. package/dist/{chunk-HXEMVATM.cjs → chunk-CY2WDWFQ.cjs} +3 -3
  26. package/dist/{chunk-HXEMVATM.cjs.map → chunk-CY2WDWFQ.cjs.map} +1 -1
  27. package/dist/{chunk-EX3XD2F5.js → chunk-E3UHRQZ7.js} +15 -14
  28. package/dist/chunk-E3UHRQZ7.js.map +1 -0
  29. package/dist/{chunk-7BZ2N56X.js → chunk-FKQCQSXF.js} +42 -15
  30. package/dist/chunk-FKQCQSXF.js.map +1 -0
  31. package/dist/{chunk-U6QDJKSZ.cjs → chunk-FP3SA3LK.cjs} +74 -74
  32. package/dist/{chunk-U6QDJKSZ.cjs.map → chunk-FP3SA3LK.cjs.map} +1 -1
  33. package/dist/{chunk-K74VFJKF.js → chunk-G6W3FFTU.js} +2 -2
  34. package/dist/{chunk-K74VFJKF.js.map → chunk-G6W3FFTU.js.map} +1 -1
  35. package/dist/{chunk-QLX34MAR.js → chunk-HFESVWJ6.js} +4 -4
  36. package/dist/{chunk-QLX34MAR.js.map → chunk-HFESVWJ6.js.map} +1 -1
  37. package/dist/{chunk-J6IRCLC6.cjs → chunk-HKM5KOOK.cjs} +3 -3
  38. package/dist/{chunk-J6IRCLC6.cjs.map → chunk-HKM5KOOK.cjs.map} +1 -1
  39. package/dist/{chunk-RJF75FEP.cjs → chunk-JZ2K5LY4.cjs} +12 -12
  40. package/dist/{chunk-RJF75FEP.cjs.map → chunk-JZ2K5LY4.cjs.map} +1 -1
  41. package/dist/{chunk-SKLREO5Z.cjs → chunk-L6U4LZZX.cjs} +3 -3
  42. package/dist/{chunk-SKLREO5Z.cjs.map → chunk-L6U4LZZX.cjs.map} +1 -1
  43. package/dist/{chunk-CM2C2H2Y.cjs → chunk-NHJWT4KF.cjs} +8 -5
  44. package/dist/chunk-NHJWT4KF.cjs.map +1 -0
  45. package/dist/{chunk-HX5WL5ZF.js → chunk-OORAVFI4.js} +3 -3
  46. package/dist/{chunk-HX5WL5ZF.js.map → chunk-OORAVFI4.js.map} +1 -1
  47. package/dist/{chunk-QKAIQUSC.js → chunk-QUVYOHFH.js} +176 -50
  48. package/dist/chunk-QUVYOHFH.js.map +1 -0
  49. package/dist/{chunk-3ZWALPHI.cjs → chunk-REJUB2HI.cjs} +5 -2
  50. package/dist/chunk-REJUB2HI.cjs.map +1 -0
  51. package/dist/{chunk-LG57RYYL.cjs → chunk-RJUQQE46.cjs} +2 -2
  52. package/dist/{chunk-LG57RYYL.cjs.map → chunk-RJUQQE46.cjs.map} +1 -1
  53. package/dist/{chunk-OXSAN74Y.cjs → chunk-S77FIEDZ.cjs} +2 -2
  54. package/dist/{chunk-OXSAN74Y.cjs.map → chunk-S77FIEDZ.cjs.map} +1 -1
  55. package/dist/{chunk-CRTDKNOZ.cjs → chunk-TNXHSUIL.cjs} +98 -97
  56. package/dist/chunk-TNXHSUIL.cjs.map +1 -0
  57. package/dist/{chunk-YETIPEQM.cjs → chunk-U72BY62E.cjs} +228 -101
  58. package/dist/chunk-U72BY62E.cjs.map +1 -0
  59. package/dist/{chunk-N7CG7MFQ.js → chunk-WM2RUEBO.js} +3 -3
  60. package/dist/{chunk-N7CG7MFQ.js.map → chunk-WM2RUEBO.js.map} +1 -1
  61. package/dist/{chunk-IXRARW5C.cjs → chunk-WNPUO7IZ.cjs} +112 -18
  62. package/dist/chunk-WNPUO7IZ.cjs.map +1 -0
  63. package/dist/{chunk-4L2UVFJO.js → chunk-WYP25ZMM.js} +120 -5
  64. package/dist/chunk-WYP25ZMM.js.map +1 -0
  65. package/dist/{chunk-WD2L3ZU3.js → chunk-XM54QZ3G.js} +3 -3
  66. package/dist/{chunk-WD2L3ZU3.js.map → chunk-XM54QZ3G.js.map} +1 -1
  67. package/dist/chunk-YRLCLLKR.js +14 -0
  68. package/dist/chunk-YRLCLLKR.js.map +1 -0
  69. package/dist/{chunk-SUT6SU4I.cjs → chunk-Z4PDJRZT.cjs} +124 -5
  70. package/dist/chunk-Z4PDJRZT.cjs.map +1 -0
  71. package/dist/{chunk-UOKSQHJY.js → chunk-ZJVB5TZ4.js} +112 -18
  72. package/dist/chunk-ZJVB5TZ4.js.map +1 -0
  73. package/dist/chunk-ZNP74O27.cjs +19 -0
  74. package/dist/chunk-ZNP74O27.cjs.map +1 -0
  75. package/dist/{dist-5OGIQLEZ.js → dist-7I6EPNH3.js} +5 -5
  76. package/dist/{dist-5OGIQLEZ.js.map → dist-7I6EPNH3.js.map} +1 -1
  77. package/dist/{dist-ON3E5YMU.cjs → dist-HR6TOFJM.cjs} +20 -20
  78. package/dist/{dist-ON3E5YMU.cjs.map → dist-HR6TOFJM.cjs.map} +1 -1
  79. package/dist/docs/SKILL.md +1 -1
  80. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  81. package/dist/{observational-memory-J73GEMRQ-FRFHLHXN.cjs → observational-memory-KFKHBTCB-RMGPISAP.cjs} +26 -26
  82. package/dist/{observational-memory-J73GEMRQ-FRFHLHXN.cjs.map → observational-memory-KFKHBTCB-RMGPISAP.cjs.map} +1 -1
  83. package/dist/{observational-memory-J73GEMRQ-KNLGLGBD.js → observational-memory-KFKHBTCB-RX2CEPSU.js} +3 -3
  84. package/dist/{observational-memory-J73GEMRQ-KNLGLGBD.js.map → observational-memory-KFKHBTCB-RX2CEPSU.js.map} +1 -1
  85. package/dist/server/handlers/agent-builder.cjs +16 -16
  86. package/dist/server/handlers/agent-builder.js +1 -1
  87. package/dist/server/handlers/conversations.cjs +5 -5
  88. package/dist/server/handlers/conversations.js +1 -1
  89. package/dist/server/handlers/memory.cjs +27 -27
  90. package/dist/server/handlers/memory.d.ts +36 -36
  91. package/dist/server/handlers/memory.js +1 -1
  92. package/dist/server/handlers/observability-list-query-schemas.cjs +24 -0
  93. package/dist/server/handlers/observability-list-query-schemas.cjs.map +1 -0
  94. package/dist/server/handlers/observability-list-query-schemas.d.ts +29 -0
  95. package/dist/server/handlers/observability-list-query-schemas.d.ts.map +1 -0
  96. package/dist/server/handlers/observability-list-query-schemas.js +3 -0
  97. package/dist/server/handlers/observability-list-query-schemas.js.map +1 -0
  98. package/dist/server/handlers/observability-new-endpoints.cjs +32 -28
  99. package/dist/server/handlers/observability-new-endpoints.d.ts +326 -48
  100. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  101. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  102. package/dist/server/handlers/observability-shared.cjs +23 -7
  103. package/dist/server/handlers/observability-shared.d.ts +22 -1
  104. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  105. package/dist/server/handlers/observability-shared.js +1 -1
  106. package/dist/server/handlers/observability.cjs +43 -39
  107. package/dist/server/handlers/observability.d.ts +18 -8
  108. package/dist/server/handlers/observability.d.ts.map +1 -1
  109. package/dist/server/handlers/observability.js +2 -2
  110. package/dist/server/handlers/responses.cjs +4 -4
  111. package/dist/server/handlers/responses.js +1 -1
  112. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  113. package/dist/server/handlers/stored-agent-favorites.d.ts.map +1 -1
  114. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  115. package/dist/server/handlers/stored-agents.cjs +7 -7
  116. package/dist/server/handlers/stored-agents.js +1 -1
  117. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  118. package/dist/server/handlers/stored-skill-favorites.d.ts.map +1 -1
  119. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  120. package/dist/server/handlers/stored-skills.cjs +7 -7
  121. package/dist/server/handlers/stored-skills.js +1 -1
  122. package/dist/server/handlers/system.cjs +3 -3
  123. package/dist/server/handlers/system.js +1 -1
  124. package/dist/server/handlers.cjs +15 -15
  125. package/dist/server/handlers.js +6 -6
  126. package/dist/server/schemas/index.cjs +75 -75
  127. package/dist/server/schemas/index.js +3 -3
  128. package/dist/server/schemas/memory.d.ts +25 -19
  129. package/dist/server/schemas/memory.d.ts.map +1 -1
  130. package/dist/server/server-adapter/index.cjs +13 -13
  131. package/dist/server/server-adapter/index.js +2 -2
  132. package/dist/server/server-adapter/routes/memory.d.ts +36 -36
  133. package/dist/server/server-adapter/routes/observability.d.ts +176 -28
  134. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  135. package/package.json +4 -4
  136. package/dist/chunk-3ZWALPHI.cjs.map +0 -1
  137. package/dist/chunk-4L2UVFJO.js.map +0 -1
  138. package/dist/chunk-7BZ2N56X.js.map +0 -1
  139. package/dist/chunk-BYX5LHPW.cjs.map +0 -1
  140. package/dist/chunk-CJFSLVFA.js.map +0 -1
  141. package/dist/chunk-CM2C2H2Y.cjs.map +0 -1
  142. package/dist/chunk-CRTDKNOZ.cjs.map +0 -1
  143. package/dist/chunk-EX3XD2F5.js.map +0 -1
  144. package/dist/chunk-IXRARW5C.cjs.map +0 -1
  145. package/dist/chunk-K6AEVBZQ.js.map +0 -1
  146. package/dist/chunk-NRRAME2S.js.map +0 -1
  147. package/dist/chunk-QGPIJ3KB.cjs.map +0 -1
  148. package/dist/chunk-QKAIQUSC.js.map +0 -1
  149. package/dist/chunk-SUT6SU4I.cjs.map +0 -1
  150. package/dist/chunk-UOKSQHJY.js.map +0 -1
  151. package/dist/chunk-YETIPEQM.cjs.map +0 -1
@@ -1,7 +1,24 @@
1
+ import { deltaLimitSchema, deltaCursorSchema, listModeSchema, paginationArgsSchema } from './chunk-YRLCLLKR.js';
2
+ import { wrapSchemaForQueryParams } from './chunk-F2FAL5CZ.js';
1
3
  import { HTTPException } from './chunk-6QWQZI4Q.js';
4
+ import { coreFeatures } from '@mastra/core/features';
5
+ import { z } from 'zod/v4';
2
6
 
3
- // src/server/handlers/observability-shared.ts
4
- var NEW_OBSERVABILITY_UPGRADE_MESSAGE = "New observability endpoints require a newer @mastra/core. Please upgrade.";
7
+ var OBSERVABILITY_DELTA_POLLING_FEATURE = "observability-delta-polling";
8
+ var OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE = "Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.";
9
+ var OBSERVABILITY_LIST_ENDPOINTS = {
10
+ traces: "traces",
11
+ branches: "branches",
12
+ logs: "logs",
13
+ metrics: "metrics",
14
+ scores: "scores",
15
+ feedback: "feedback"
16
+ };
17
+ var OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = "delta-polling";
18
+ function getFeatures(observabilityStore) {
19
+ const candidate = observabilityStore;
20
+ return candidate.getFeatures?.();
21
+ }
5
22
  function getStorage(mastra) {
6
23
  const storage = mastra.getStorage();
7
24
  if (!storage) {
@@ -17,7 +34,26 @@ async function getObservabilityStore(mastra) {
17
34
  }
18
35
  return observability;
19
36
  }
37
+ function assertObservabilityDeltaSupported(observabilityStore, endpoint) {
38
+ if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {
39
+ throw new HTTPException(501, {
40
+ message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`
41
+ });
42
+ }
43
+ if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {
44
+ return;
45
+ }
46
+ throw new HTTPException(501, {
47
+ message: `Delta polling is not supported by the configured observability store for ${endpoint}`
48
+ });
49
+ }
20
50
  var NEW_ROUTE_DEFS = {
51
+ LIST_METRICS: {
52
+ method: "GET",
53
+ path: "/observability/metrics",
54
+ summary: "List metrics",
55
+ description: "Returns a paginated list of metrics with optional filtering and sorting"
56
+ },
21
57
  LIST_LOGS: {
22
58
  method: "GET",
23
59
  path: "/observability/logs",
@@ -187,7 +223,86 @@ var NEW_ROUTE_DEFS = {
187
223
  description: "Returns distinct tags with optional entity type filtering"
188
224
  }
189
225
  };
226
+ function createObservabilityListQuerySchema(filterSchema, orderBySchema) {
227
+ const unwrapDefault = (schema) => {
228
+ const zodSchema = schema;
229
+ return zodSchema instanceof z.ZodDefault ? zodSchema.unwrap() : zodSchema;
230
+ };
231
+ const paginationShape = paginationArgsSchema.shape;
232
+ const orderByShape = orderBySchema.shape;
233
+ const pageSchema = unwrapDefault(paginationShape.page);
234
+ const perPageSchema = unwrapDefault(paginationShape.perPage);
235
+ const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : z.never().optional();
236
+ const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : z.never().optional();
237
+ return wrapSchemaForQueryParams(
238
+ z.object({
239
+ ...filterSchema.shape,
240
+ page: pageSchema,
241
+ perPage: perPageSchema,
242
+ field: fieldSchema,
243
+ direction: directionSchema,
244
+ mode: listModeSchema.optional(),
245
+ after: deltaCursorSchema.optional(),
246
+ limit: deltaLimitSchema
247
+ }).partial()
248
+ ).superRefine((value, ctx) => {
249
+ const isDelta = value.mode === "delta";
250
+ const hasPagination = value.page !== void 0 || value.perPage !== void 0;
251
+ const hasOrderBy = value.field !== void 0 || value.direction !== void 0;
252
+ const hasAfter = value.after !== void 0;
253
+ const hasLimit = value.limit !== void 0;
254
+ if (isDelta) {
255
+ if (hasPagination) {
256
+ if (value.page !== void 0) {
257
+ ctx.addIssue({
258
+ code: z.ZodIssueCode.custom,
259
+ path: ["page"],
260
+ message: "`page` is not allowed when `mode=delta`"
261
+ });
262
+ }
263
+ if (value.perPage !== void 0) {
264
+ ctx.addIssue({
265
+ code: z.ZodIssueCode.custom,
266
+ path: ["perPage"],
267
+ message: "`perPage` is not allowed when `mode=delta`"
268
+ });
269
+ }
270
+ }
271
+ if (hasOrderBy) {
272
+ if (value.field !== void 0) {
273
+ ctx.addIssue({
274
+ code: z.ZodIssueCode.custom,
275
+ path: ["field"],
276
+ message: "`field` is not allowed when `mode=delta`"
277
+ });
278
+ }
279
+ if (value.direction !== void 0) {
280
+ ctx.addIssue({
281
+ code: z.ZodIssueCode.custom,
282
+ path: ["direction"],
283
+ message: "`direction` is not allowed when `mode=delta`"
284
+ });
285
+ }
286
+ }
287
+ return;
288
+ }
289
+ if (hasAfter) {
290
+ ctx.addIssue({
291
+ code: z.ZodIssueCode.custom,
292
+ path: ["after"],
293
+ message: "`after` is only allowed when `mode=delta`"
294
+ });
295
+ }
296
+ if (hasLimit) {
297
+ ctx.addIssue({
298
+ code: z.ZodIssueCode.custom,
299
+ path: ["limit"],
300
+ message: "`limit` is only allowed when `mode=delta`"
301
+ });
302
+ }
303
+ });
304
+ }
190
305
 
191
- export { NEW_OBSERVABILITY_UPGRADE_MESSAGE, NEW_ROUTE_DEFS, getObservabilityStore, getStorage };
192
- //# sourceMappingURL=chunk-4L2UVFJO.js.map
193
- //# sourceMappingURL=chunk-4L2UVFJO.js.map
306
+ export { NEW_ROUTE_DEFS, OBSERVABILITY_DELTA_POLLING_FEATURE, OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE, OBSERVABILITY_LIST_ENDPOINTS, assertObservabilityDeltaSupported, createObservabilityListQuerySchema, getObservabilityStore, getStorage };
307
+ //# sourceMappingURL=chunk-WYP25ZMM.js.map
308
+ //# sourceMappingURL=chunk-WYP25ZMM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/observability-shared.ts"],"names":[],"mappings":"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","file":"chunk-WYP25ZMM.js","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport { coreFeatures } from '@mastra/core/features';\nimport type { MastraCompositeStore, ObservabilityStorage } from '@mastra/core/storage';\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport {\n deltaCursorSchema,\n deltaLimitSchema,\n listModeSchema,\n paginationArgsSchema,\n} from './observability-list-query-schemas';\n\nexport const OBSERVABILITY_DELTA_POLLING_FEATURE = 'observability-delta-polling';\nexport const OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE =\n 'Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.';\n\nexport const OBSERVABILITY_LIST_ENDPOINTS = {\n traces: 'traces',\n branches: 'branches',\n logs: 'logs',\n metrics: 'metrics',\n scores: 'scores',\n feedback: 'feedback',\n} as const;\n\nexport type ObservabilityListEndpoint =\n (typeof OBSERVABILITY_LIST_ENDPOINTS)[keyof typeof OBSERVABILITY_LIST_ENDPOINTS];\nconst OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = 'delta-polling';\n\nfunction getFeatures(observabilityStore: ObservabilityStorage): readonly string[] | undefined {\n const candidate = observabilityStore as ObservabilityStorage & {\n getFeatures?: () => readonly string[] | undefined;\n };\n return candidate.getFeatures?.();\n}\n\n/** Retrieves MastraCompositeStore or throws 500 if unavailable. */\nexport function getStorage(mastra: Mastra): MastraCompositeStore {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\n/** Retrieves the observability storage domain or throws 500 if unavailable. */\nexport async function getObservabilityStore(mastra: Mastra): Promise<ObservabilityStorage> {\n const storage = getStorage(mastra);\n const observability = await storage.getStore('observability');\n if (!observability) {\n throw new HTTPException(500, { message: 'Observability storage domain is not available' });\n }\n return observability;\n}\n\nexport function assertObservabilityDeltaSupported(\n observabilityStore: ObservabilityStorage,\n endpoint: ObservabilityListEndpoint,\n) {\n if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {\n throw new HTTPException(501, {\n message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`,\n });\n }\n\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {\n return;\n }\n\n throw new HTTPException(501, {\n message: `Delta polling is not supported by the configured observability store for ${endpoint}`,\n });\n}\n\nexport interface RouteDetails {\n method: ServerRoute['method'];\n path: `/${string}`;\n summary: string;\n description: string;\n requiresPermission?: ServerRoute['requiresPermission'];\n}\n\nexport const NEW_ROUTE_DEFS = {\n LIST_METRICS: {\n method: 'GET',\n path: '/observability/metrics',\n summary: 'List metrics',\n description: 'Returns a paginated list of metrics with optional filtering and sorting',\n },\n\n LIST_LOGS: {\n method: 'GET',\n path: '/observability/logs',\n summary: 'List logs',\n description: 'Returns a paginated list of logs with optional filtering and sorting',\n },\n\n LIST_SCORES: {\n method: 'GET',\n path: '/observability/scores',\n summary: 'List scores',\n description: 'Returns a paginated list of scores with optional filtering and sorting',\n },\n\n CREATE_SCORE: {\n method: 'POST',\n path: '/observability/scores',\n summary: 'Create a score',\n description: 'Creates a single score record in the observability store',\n },\n\n GET_SCORE: {\n method: 'GET',\n path: '/observability/scores/:scoreId',\n summary: 'Get score',\n description: 'Returns a single score by scoreId',\n },\n\n GET_SCORE_AGGREGATE: {\n method: 'POST',\n path: '/observability/scores/aggregate',\n summary: 'Get score aggregate',\n description: 'Returns an aggregated score value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_BREAKDOWN: {\n method: 'POST',\n path: '/observability/scores/breakdown',\n summary: 'Get score breakdown',\n description: 'Returns score values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_TIME_SERIES: {\n method: 'POST',\n path: '/observability/scores/timeseries',\n summary: 'Get score time series',\n description: 'Returns score values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_PERCENTILES: {\n method: 'POST',\n path: '/observability/scores/percentiles',\n summary: 'Get score percentiles',\n description: 'Returns percentile values for a score bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n LIST_FEEDBACK: {\n method: 'GET',\n path: '/observability/feedback',\n summary: 'List feedback',\n description: 'Returns a paginated list of feedback with optional filtering and sorting',\n },\n\n CREATE_FEEDBACK: {\n method: 'POST',\n path: '/observability/feedback',\n summary: 'Create feedback',\n description: 'Creates a single feedback record in the observability store',\n },\n\n GET_FEEDBACK_AGGREGATE: {\n method: 'POST',\n path: '/observability/feedback/aggregate',\n summary: 'Get feedback aggregate',\n description: 'Returns an aggregated numeric feedback value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_BREAKDOWN: {\n method: 'POST',\n path: '/observability/feedback/breakdown',\n summary: 'Get feedback breakdown',\n description: 'Returns numeric feedback values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_TIME_SERIES: {\n method: 'POST',\n path: '/observability/feedback/timeseries',\n summary: 'Get feedback time series',\n description: 'Returns numeric feedback values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_PERCENTILES: {\n method: 'POST',\n path: '/observability/feedback/percentiles',\n summary: 'Get feedback percentiles',\n description: 'Returns percentile values for numeric feedback bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n\nexport function createObservabilityListQuerySchema<\n TFilter extends z.ZodObject<z.ZodRawShape>,\n TOrderBy extends z.ZodObject<z.ZodRawShape>,\n>(filterSchema: TFilter, orderBySchema: TOrderBy) {\n const unwrapDefault = (schema: unknown) => {\n const zodSchema = schema as z.ZodTypeAny;\n return zodSchema instanceof z.ZodDefault ? zodSchema.unwrap() : zodSchema;\n };\n const paginationShape = paginationArgsSchema.shape as unknown as Record<string, z.ZodTypeAny>;\n const orderByShape = orderBySchema.shape as unknown as Record<string, z.ZodTypeAny>;\n\n const pageSchema = unwrapDefault(paginationShape.page);\n const perPageSchema = unwrapDefault(paginationShape.perPage);\n const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : z.never().optional();\n const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : z.never().optional();\n\n return wrapSchemaForQueryParams(\n z\n .object({\n ...filterSchema.shape,\n page: pageSchema,\n perPage: perPageSchema,\n field: fieldSchema,\n direction: directionSchema,\n mode: listModeSchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .partial(),\n ).superRefine((value, ctx) => {\n const isDelta = value.mode === 'delta';\n const hasPagination = value.page !== undefined || value.perPage !== undefined;\n const hasOrderBy = value.field !== undefined || value.direction !== undefined;\n const hasAfter = value.after !== undefined;\n const hasLimit = value.limit !== undefined;\n\n if (isDelta) {\n if (hasPagination) {\n if (value.page !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['page'],\n message: '`page` is not allowed when `mode=delta`',\n });\n }\n if (value.perPage !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['perPage'],\n message: '`perPage` is not allowed when `mode=delta`',\n });\n }\n }\n if (hasOrderBy) {\n if (value.field !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['field'],\n message: '`field` is not allowed when `mode=delta`',\n });\n }\n if (value.direction !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['direction'],\n message: '`direction` is not allowed when `mode=delta`',\n });\n }\n }\n return;\n }\n\n if (hasAfter) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['after'],\n message: '`after` is only allowed when `mode=delta`',\n });\n }\n if (hasLimit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['limit'],\n message: '`limit` is only allowed when `mode=delta`',\n });\n }\n });\n}\n"]}
@@ -13,7 +13,7 @@ var GET_API_SCHEMA_ROUTE = createRoute({
13
13
  tags: ["System"],
14
14
  requiresAuth: true,
15
15
  handler: async () => {
16
- const { buildApiSchemaManifest } = await import('./api-schema-manifest-YS3FEIFG.js');
16
+ const { buildApiSchemaManifest } = await import('./api-schema-manifest-WY623UST.js');
17
17
  return buildApiSchemaManifest();
18
18
  }
19
19
  });
@@ -60,5 +60,5 @@ var GET_SYSTEM_PACKAGES_ROUTE = createRoute({
60
60
  });
61
61
 
62
62
  export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE };
63
- //# sourceMappingURL=chunk-WD2L3ZU3.js.map
64
- //# sourceMappingURL=chunk-WD2L3ZU3.js.map
63
+ //# sourceMappingURL=chunk-XM54QZ3G.js.map
64
+ //# sourceMappingURL=chunk-XM54QZ3G.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":";;;;;AAOO,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,yBAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,YAAY;AAEnB,IAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,mCAAuC,CAAA;AACvF,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AACF,CAAC;AAEM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,+BAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,QAAQ,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,WAA4B,EAAC;AAEjC,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,YAAA,CAAa,gBAAA,EAAkB,OAAO,CAAA;AAC1D,UAAA,QAAA,GAAW,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,QACnC,CAAA,CAAA,MAAQ;AACN,UAAA,QAAA,GAAW,EAAC;AAAA,QACd;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,MAAA,MAAM,cAAc,OAAA,EAAS,IAAA;AAC7B,MAAA,MAAM,oBAAA,GAAuB,SAAS,MAAA,EAAQ,aAAA;AAC9C,MAAA,MAAM,wBAAA,GAA2B,sBAAsB,WAAA,CAAY,IAAA;AACnE,MAAA,MAAM,+BAA+B,oBAAA,EAAsB,sBAAA;AAC3D,MAAA,MAAM,oBAAA,GAAuB,CAAC,CAAC,MAAA,CAAO,cAAc,kBAAA,EAAmB;AAEvE,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,KAAe,MAAA;AAAA,QAClC,UAAA,EAAY,CAAC,CAAC,MAAA,CAAO,SAAA,EAAU;AAAA,QAC/B,oBAAA;AAAA,QACA,WAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC","file":"chunk-WD2L3ZU3.js","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!mastra.getEditor(),\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":";;;;;AAOO,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,yBAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,YAAY;AAEnB,IAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,mCAAuC,CAAA;AACvF,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AACF,CAAC;AAEM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,+BAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,QAAQ,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,WAA4B,EAAC;AAEjC,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,YAAA,CAAa,gBAAA,EAAkB,OAAO,CAAA;AAC1D,UAAA,QAAA,GAAW,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,QACnC,CAAA,CAAA,MAAQ;AACN,UAAA,QAAA,GAAW,EAAC;AAAA,QACd;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,MAAA,MAAM,cAAc,OAAA,EAAS,IAAA;AAC7B,MAAA,MAAM,oBAAA,GAAuB,SAAS,MAAA,EAAQ,aAAA;AAC9C,MAAA,MAAM,wBAAA,GAA2B,sBAAsB,WAAA,CAAY,IAAA;AACnE,MAAA,MAAM,+BAA+B,oBAAA,EAAsB,sBAAA;AAC3D,MAAA,MAAM,oBAAA,GAAuB,CAAC,CAAC,MAAA,CAAO,cAAc,kBAAA,EAAmB;AAEvE,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,KAAe,MAAA;AAAA,QAClC,UAAA,EAAY,CAAC,CAAC,MAAA,CAAO,SAAA,EAAU;AAAA,QAC/B,oBAAA;AAAA,QACA,WAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC","file":"chunk-XM54QZ3G.js","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!mastra.getEditor(),\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod/v4';
2
+
3
+ // src/server/handlers/observability-list-query-schemas.ts
4
+ var paginationArgsSchema = z.object({
5
+ page: z.coerce.number().int().min(0).optional().default(0).describe("Zero-indexed page number"),
6
+ perPage: z.coerce.number().int().min(1).max(100).optional().default(10).describe("Number of items per page")
7
+ }).describe("Pagination options for list queries");
8
+ var deltaCursorSchema = z.string().min(1).describe("Opaque cursor value for incremental polling");
9
+ var listModeSchema = z.enum(["page", "delta"]).describe("List mode: 'page' | 'delta', defaults to 'page' when omitted.");
10
+ var deltaLimitSchema = z.coerce.number().int().min(1).max(100).optional().describe("Maximum number of updates to return in one delta poll");
11
+
12
+ export { deltaCursorSchema, deltaLimitSchema, listModeSchema, paginationArgsSchema };
13
+ //# sourceMappingURL=chunk-YRLCLLKR.js.map
14
+ //# sourceMappingURL=chunk-YRLCLLKR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/observability-list-query-schemas.ts"],"names":[],"mappings":";;;AAoBO,IAAM,oBAAA,GAAuB,EACjC,MAAA,CAAO;AAAA,EACN,MAAM,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,UAAS,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,SAAS,0BAA0B,CAAA;AAAA,EAC9F,SAAS,CAAA,CAAE,MAAA,CAAO,QAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,0BAA0B;AAC7G,CAAC,CAAA,CACA,SAAS,qCAAqC;AAE1C,IAAM,iBAAA,GAAoB,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,6CAA6C;AAElG,IAAM,cAAA,GAAiB,EAC3B,IAAA,CAAK,CAAC,QAAQ,OAAO,CAAC,CAAA,CACtB,QAAA,CAAS,+DAA+D;AAEpE,IAAM,mBAAmB,CAAA,CAAE,MAAA,CAC/B,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,uDAAuD","file":"chunk-YRLCLLKR.js","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Server-local route-layer query schemas for observability list endpoints.\n *\n * Why these live in @mastra/server instead of importing the newer shared core\n * exports directly:\n * - `mode`, `after`, and `limit` were added after older @mastra/core versions\n * that @mastra/server still needs to tolerate at runtime.\n * - Direct named imports of newly-added schema exports create module-link-time\n * failures when a newer server is paired with an older core.\n * - These are route parsing concerns, so mirroring the current core schema\n * semantics here keeps the server backward-compatible without forcing a peer\n * dependency lockstep upgrade.\n *\n * TODO(Mastra 2.0): remove this shim and import the shared observability list\n * query schemas directly once server/core no longer need to tolerate older\n * mixed-version pairings.\n */\n\nexport const paginationArgsSchema = z\n .object({\n page: z.coerce.number().int().min(0).optional().default(0).describe('Zero-indexed page number'),\n perPage: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Number of items per page'),\n })\n .describe('Pagination options for list queries');\n\nexport const deltaCursorSchema = z.string().min(1).describe('Opaque cursor value for incremental polling');\n\nexport const listModeSchema = z\n .enum(['page', 'delta'])\n .describe(\"List mode: 'page' | 'delta', defaults to 'page' when omitted.\");\n\nexport const deltaLimitSchema = z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Maximum number of updates to return in one delta poll');\n"]}
@@ -1,9 +1,26 @@
1
1
  'use strict';
2
2
 
3
+ var chunkZNP74O27_cjs = require('./chunk-ZNP74O27.cjs');
4
+ var chunkXTFWFQZ7_cjs = require('./chunk-XTFWFQZ7.cjs');
3
5
  var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
6
+ var features = require('@mastra/core/features');
7
+ var v4 = require('zod/v4');
4
8
 
5
- // src/server/handlers/observability-shared.ts
6
- var NEW_OBSERVABILITY_UPGRADE_MESSAGE = "New observability endpoints require a newer @mastra/core. Please upgrade.";
9
+ var OBSERVABILITY_DELTA_POLLING_FEATURE = "observability-delta-polling";
10
+ var OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE = "Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.";
11
+ var OBSERVABILITY_LIST_ENDPOINTS = {
12
+ traces: "traces",
13
+ branches: "branches",
14
+ logs: "logs",
15
+ metrics: "metrics",
16
+ scores: "scores",
17
+ feedback: "feedback"
18
+ };
19
+ var OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = "delta-polling";
20
+ function getFeatures(observabilityStore) {
21
+ const candidate = observabilityStore;
22
+ return candidate.getFeatures?.();
23
+ }
7
24
  function getStorage(mastra) {
8
25
  const storage = mastra.getStorage();
9
26
  if (!storage) {
@@ -19,7 +36,26 @@ async function getObservabilityStore(mastra) {
19
36
  }
20
37
  return observability;
21
38
  }
39
+ function assertObservabilityDeltaSupported(observabilityStore, endpoint) {
40
+ if (!features.coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {
41
+ throw new chunk64ITUOXI_cjs.HTTPException(501, {
42
+ message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`
43
+ });
44
+ }
45
+ if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {
46
+ return;
47
+ }
48
+ throw new chunk64ITUOXI_cjs.HTTPException(501, {
49
+ message: `Delta polling is not supported by the configured observability store for ${endpoint}`
50
+ });
51
+ }
22
52
  var NEW_ROUTE_DEFS = {
53
+ LIST_METRICS: {
54
+ method: "GET",
55
+ path: "/observability/metrics",
56
+ summary: "List metrics",
57
+ description: "Returns a paginated list of metrics with optional filtering and sorting"
58
+ },
23
59
  LIST_LOGS: {
24
60
  method: "GET",
25
61
  path: "/observability/logs",
@@ -189,10 +225,93 @@ var NEW_ROUTE_DEFS = {
189
225
  description: "Returns distinct tags with optional entity type filtering"
190
226
  }
191
227
  };
228
+ function createObservabilityListQuerySchema(filterSchema, orderBySchema) {
229
+ const unwrapDefault = (schema) => {
230
+ const zodSchema = schema;
231
+ return zodSchema instanceof v4.z.ZodDefault ? zodSchema.unwrap() : zodSchema;
232
+ };
233
+ const paginationShape = chunkZNP74O27_cjs.paginationArgsSchema.shape;
234
+ const orderByShape = orderBySchema.shape;
235
+ const pageSchema = unwrapDefault(paginationShape.page);
236
+ const perPageSchema = unwrapDefault(paginationShape.perPage);
237
+ const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : v4.z.never().optional();
238
+ const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : v4.z.never().optional();
239
+ return chunkXTFWFQZ7_cjs.wrapSchemaForQueryParams(
240
+ v4.z.object({
241
+ ...filterSchema.shape,
242
+ page: pageSchema,
243
+ perPage: perPageSchema,
244
+ field: fieldSchema,
245
+ direction: directionSchema,
246
+ mode: chunkZNP74O27_cjs.listModeSchema.optional(),
247
+ after: chunkZNP74O27_cjs.deltaCursorSchema.optional(),
248
+ limit: chunkZNP74O27_cjs.deltaLimitSchema
249
+ }).partial()
250
+ ).superRefine((value, ctx) => {
251
+ const isDelta = value.mode === "delta";
252
+ const hasPagination = value.page !== void 0 || value.perPage !== void 0;
253
+ const hasOrderBy = value.field !== void 0 || value.direction !== void 0;
254
+ const hasAfter = value.after !== void 0;
255
+ const hasLimit = value.limit !== void 0;
256
+ if (isDelta) {
257
+ if (hasPagination) {
258
+ if (value.page !== void 0) {
259
+ ctx.addIssue({
260
+ code: v4.z.ZodIssueCode.custom,
261
+ path: ["page"],
262
+ message: "`page` is not allowed when `mode=delta`"
263
+ });
264
+ }
265
+ if (value.perPage !== void 0) {
266
+ ctx.addIssue({
267
+ code: v4.z.ZodIssueCode.custom,
268
+ path: ["perPage"],
269
+ message: "`perPage` is not allowed when `mode=delta`"
270
+ });
271
+ }
272
+ }
273
+ if (hasOrderBy) {
274
+ if (value.field !== void 0) {
275
+ ctx.addIssue({
276
+ code: v4.z.ZodIssueCode.custom,
277
+ path: ["field"],
278
+ message: "`field` is not allowed when `mode=delta`"
279
+ });
280
+ }
281
+ if (value.direction !== void 0) {
282
+ ctx.addIssue({
283
+ code: v4.z.ZodIssueCode.custom,
284
+ path: ["direction"],
285
+ message: "`direction` is not allowed when `mode=delta`"
286
+ });
287
+ }
288
+ }
289
+ return;
290
+ }
291
+ if (hasAfter) {
292
+ ctx.addIssue({
293
+ code: v4.z.ZodIssueCode.custom,
294
+ path: ["after"],
295
+ message: "`after` is only allowed when `mode=delta`"
296
+ });
297
+ }
298
+ if (hasLimit) {
299
+ ctx.addIssue({
300
+ code: v4.z.ZodIssueCode.custom,
301
+ path: ["limit"],
302
+ message: "`limit` is only allowed when `mode=delta`"
303
+ });
304
+ }
305
+ });
306
+ }
192
307
 
193
- exports.NEW_OBSERVABILITY_UPGRADE_MESSAGE = NEW_OBSERVABILITY_UPGRADE_MESSAGE;
194
308
  exports.NEW_ROUTE_DEFS = NEW_ROUTE_DEFS;
309
+ exports.OBSERVABILITY_DELTA_POLLING_FEATURE = OBSERVABILITY_DELTA_POLLING_FEATURE;
310
+ exports.OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE = OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE;
311
+ exports.OBSERVABILITY_LIST_ENDPOINTS = OBSERVABILITY_LIST_ENDPOINTS;
312
+ exports.assertObservabilityDeltaSupported = assertObservabilityDeltaSupported;
313
+ exports.createObservabilityListQuerySchema = createObservabilityListQuerySchema;
195
314
  exports.getObservabilityStore = getObservabilityStore;
196
315
  exports.getStorage = getStorage;
197
- //# sourceMappingURL=chunk-SUT6SU4I.cjs.map
198
- //# sourceMappingURL=chunk-SUT6SU4I.cjs.map
316
+ //# sourceMappingURL=chunk-Z4PDJRZT.cjs.map
317
+ //# sourceMappingURL=chunk-Z4PDJRZT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/observability-shared.ts"],"names":["HTTPException","coreFeatures","z","paginationArgsSchema","wrapSchemaForQueryParams","listModeSchema","deltaCursorSchema","deltaLimitSchema"],"mappings":";;;;;;;;AAcO,IAAM,mCAAA,GAAsC;AAC5C,IAAM,2CAAA,GACX;AAEK,IAAM,4BAAA,GAA+B;AAAA,EAC1C,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU;AACZ;AAIA,IAAM,2CAAA,GAA8C,eAAA;AAEpD,SAAS,YAAY,kBAAA,EAAyE;AAC5F,EAAA,MAAM,SAAA,GAAY,kBAAA;AAGlB,EAAA,OAAO,UAAU,WAAA,IAAc;AACjC;AAGO,SAAS,WAAW,MAAA,EAAsC;AAC/D,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,4BAA4B,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT;AAGA,eAAsB,sBAAsB,MAAA,EAA+C;AACzF,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,EAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA;AAC5D,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,iDAAiD,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO,aAAA;AACT;AAEO,SAAS,iCAAA,CACd,oBACA,QAAA,EACA;AACA,EAAA,IAAI,CAACC,qBAAA,CAAa,GAAA,CAAI,mCAAmC,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAID,gCAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EAAS,CAAA,EAAG,2CAA2C,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA;AAAA,KAC/E,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAA,CAAY,kBAAkB,CAAA,EAAG,QAAA,CAAS,2CAA2C,CAAA,EAAG;AAC1F,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK;AAAA,IAC3B,OAAA,EAAS,4EAA4E,QAAQ,CAAA;AAAA,GAC9F,CAAA;AACH;AAUO,IAAM,cAAA,GAAiB;AAAA,EAC5B,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,uBAAA;AAAA,IACN,OAAA,EAAS,aAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,uBAAA;AAAA,IACN,OAAA,EAAS,gBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,gCAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,mBAAA,EAAqB;AAAA,IACnB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iCAAA;AAAA,IACN,OAAA,EAAS,qBAAA;AAAA,IACT,WAAA,EAAa,+EAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,mBAAA,EAAqB;AAAA,IACnB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iCAAA;AAAA,IACN,OAAA,EAAS,qBAAA;AAAA,IACT,WAAA,EAAa,sDAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,kCAAA;AAAA,IACN,OAAA,EAAS,uBAAA;AAAA,IACT,WAAA,EAAa,uEAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,mCAAA;AAAA,IACN,OAAA,EAAS,uBAAA;AAAA,IACT,WAAA,EAAa,iEAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,yBAAA;AAAA,IACN,OAAA,EAAS,eAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,yBAAA;AAAA,IACN,OAAA,EAAS,iBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,mCAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,WAAA,EAAa,0FAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,mCAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,WAAA,EAAa,iEAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,oCAAA;AAAA,IACN,OAAA,EAAS,0BAAA;AAAA,IACT,WAAA,EAAa,kFAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,qCAAA;AAAA,IACN,OAAA,EAAS,0BAAA;AAAA,IACT,WAAA,EAAa,0EAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,oBAAA,EAAsB;AAAA,IACpB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,kCAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,WAAA,EAAa,gFAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,oBAAA,EAAsB;AAAA,IACpB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,kCAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,WAAA,EAAa,uDAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,mCAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,WAAA,EAAa,wEAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,oCAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,WAAA,EAAa,kEAAA;AAAA,IACb,kBAAA,EAAoB;AAAA,GACtB;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,OAAA,EAAS,kBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,qBAAA,EAAuB;AAAA,IACrB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,4CAAA;AAAA,IACN,OAAA,EAAS,uBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,uBAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,8CAAA;AAAA,IACN,OAAA,EAAS,kBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,OAAA,EAAS,kBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,OAAA,EAAS,kBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,iBAAA,EAAmB;AAAA,IACjB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,wCAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,OAAA,EAAS,kBAAA;AAAA,IACT,WAAA,EAAa;AAAA,GACf;AAAA,EAEA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,+BAAA;AAAA,IACN,OAAA,EAAS,UAAA;AAAA,IACT,WAAA,EAAa;AAAA;AAEjB;AAKO,SAAS,kCAAA,CAGd,cAAuB,aAAA,EAAyB;AAChD,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAAoB;AACzC,IAAA,MAAM,SAAA,GAAY,MAAA;AAClB,IAAA,OAAO,SAAA,YAAqBE,IAAA,CAAE,UAAA,GAAa,SAAA,CAAU,QAAO,GAAI,SAAA;AAAA,EAClE,CAAA;AACA,EAAA,MAAM,kBAAkBC,sCAAA,CAAqB,KAAA;AAC7C,EAAA,MAAM,eAAe,aAAA,CAAc,KAAA;AAEnC,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,eAAA,CAAgB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,eAAA,CAAgB,OAAO,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,KAAA,GAAQ,aAAA,CAAc,YAAA,CAAa,KAAK,CAAA,GAAID,IAAA,CAAE,KAAA,EAAM,CAAE,QAAA,EAAS;AAChG,EAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,SAAA,GAAY,aAAA,CAAc,YAAA,CAAa,SAAS,CAAA,GAAIA,IAAA,CAAE,KAAA,EAAM,CAAE,QAAA,EAAS;AAE5G,EAAA,OAAOE,0CAAA;AAAA,IACLF,KACG,MAAA,CAAO;AAAA,MACN,GAAG,YAAA,CAAa,KAAA;AAAA,MAChB,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAO,WAAA;AAAA,MACP,SAAA,EAAW,eAAA;AAAA,MACX,IAAA,EAAMG,iCAAe,QAAA,EAAS;AAAA,MAC9B,KAAA,EAAOC,oCAAkB,QAAA,EAAS;AAAA,MAClC,KAAA,EAAOC;AAAA,KACR,EACA,OAAA;AAAQ,GACb,CAAE,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC5B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,KAAS,OAAA;AAC/B,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,KAAS,MAAA,IAAa,MAAM,OAAA,KAAY,MAAA;AACpE,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,MAAM,SAAA,KAAc,MAAA;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,KAAU,MAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,KAAU,MAAA;AAEjC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW;AAC5B,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAML,KAAE,YAAA,CAAa,MAAA;AAAA,YACrB,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,YACb,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AACA,QAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAMA,KAAE,YAAA,CAAa,MAAA;AAAA,YACrB,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,YAChB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAW;AAC7B,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAMA,KAAE,YAAA,CAAa,MAAA;AAAA,YACrB,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,YACd,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AACA,QAAA,IAAI,KAAA,CAAM,cAAc,MAAA,EAAW;AACjC,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAMA,KAAE,YAAA,CAAa,MAAA;AAAA,YACrB,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,YAClB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAMA,KAAE,YAAA,CAAa,MAAA;AAAA,QACrB,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAMA,KAAE,YAAA,CAAa,MAAA;AAAA,QACrB,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACH","file":"chunk-Z4PDJRZT.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport { coreFeatures } from '@mastra/core/features';\nimport type { MastraCompositeStore, ObservabilityStorage } from '@mastra/core/storage';\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport {\n deltaCursorSchema,\n deltaLimitSchema,\n listModeSchema,\n paginationArgsSchema,\n} from './observability-list-query-schemas';\n\nexport const OBSERVABILITY_DELTA_POLLING_FEATURE = 'observability-delta-polling';\nexport const OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE =\n 'Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.';\n\nexport const OBSERVABILITY_LIST_ENDPOINTS = {\n traces: 'traces',\n branches: 'branches',\n logs: 'logs',\n metrics: 'metrics',\n scores: 'scores',\n feedback: 'feedback',\n} as const;\n\nexport type ObservabilityListEndpoint =\n (typeof OBSERVABILITY_LIST_ENDPOINTS)[keyof typeof OBSERVABILITY_LIST_ENDPOINTS];\nconst OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = 'delta-polling';\n\nfunction getFeatures(observabilityStore: ObservabilityStorage): readonly string[] | undefined {\n const candidate = observabilityStore as ObservabilityStorage & {\n getFeatures?: () => readonly string[] | undefined;\n };\n return candidate.getFeatures?.();\n}\n\n/** Retrieves MastraCompositeStore or throws 500 if unavailable. */\nexport function getStorage(mastra: Mastra): MastraCompositeStore {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\n/** Retrieves the observability storage domain or throws 500 if unavailable. */\nexport async function getObservabilityStore(mastra: Mastra): Promise<ObservabilityStorage> {\n const storage = getStorage(mastra);\n const observability = await storage.getStore('observability');\n if (!observability) {\n throw new HTTPException(500, { message: 'Observability storage domain is not available' });\n }\n return observability;\n}\n\nexport function assertObservabilityDeltaSupported(\n observabilityStore: ObservabilityStorage,\n endpoint: ObservabilityListEndpoint,\n) {\n if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {\n throw new HTTPException(501, {\n message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`,\n });\n }\n\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {\n return;\n }\n\n throw new HTTPException(501, {\n message: `Delta polling is not supported by the configured observability store for ${endpoint}`,\n });\n}\n\nexport interface RouteDetails {\n method: ServerRoute['method'];\n path: `/${string}`;\n summary: string;\n description: string;\n requiresPermission?: ServerRoute['requiresPermission'];\n}\n\nexport const NEW_ROUTE_DEFS = {\n LIST_METRICS: {\n method: 'GET',\n path: '/observability/metrics',\n summary: 'List metrics',\n description: 'Returns a paginated list of metrics with optional filtering and sorting',\n },\n\n LIST_LOGS: {\n method: 'GET',\n path: '/observability/logs',\n summary: 'List logs',\n description: 'Returns a paginated list of logs with optional filtering and sorting',\n },\n\n LIST_SCORES: {\n method: 'GET',\n path: '/observability/scores',\n summary: 'List scores',\n description: 'Returns a paginated list of scores with optional filtering and sorting',\n },\n\n CREATE_SCORE: {\n method: 'POST',\n path: '/observability/scores',\n summary: 'Create a score',\n description: 'Creates a single score record in the observability store',\n },\n\n GET_SCORE: {\n method: 'GET',\n path: '/observability/scores/:scoreId',\n summary: 'Get score',\n description: 'Returns a single score by scoreId',\n },\n\n GET_SCORE_AGGREGATE: {\n method: 'POST',\n path: '/observability/scores/aggregate',\n summary: 'Get score aggregate',\n description: 'Returns an aggregated score value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_BREAKDOWN: {\n method: 'POST',\n path: '/observability/scores/breakdown',\n summary: 'Get score breakdown',\n description: 'Returns score values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_TIME_SERIES: {\n method: 'POST',\n path: '/observability/scores/timeseries',\n summary: 'Get score time series',\n description: 'Returns score values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_PERCENTILES: {\n method: 'POST',\n path: '/observability/scores/percentiles',\n summary: 'Get score percentiles',\n description: 'Returns percentile values for a score bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n LIST_FEEDBACK: {\n method: 'GET',\n path: '/observability/feedback',\n summary: 'List feedback',\n description: 'Returns a paginated list of feedback with optional filtering and sorting',\n },\n\n CREATE_FEEDBACK: {\n method: 'POST',\n path: '/observability/feedback',\n summary: 'Create feedback',\n description: 'Creates a single feedback record in the observability store',\n },\n\n GET_FEEDBACK_AGGREGATE: {\n method: 'POST',\n path: '/observability/feedback/aggregate',\n summary: 'Get feedback aggregate',\n description: 'Returns an aggregated numeric feedback value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_BREAKDOWN: {\n method: 'POST',\n path: '/observability/feedback/breakdown',\n summary: 'Get feedback breakdown',\n description: 'Returns numeric feedback values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_TIME_SERIES: {\n method: 'POST',\n path: '/observability/feedback/timeseries',\n summary: 'Get feedback time series',\n description: 'Returns numeric feedback values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_PERCENTILES: {\n method: 'POST',\n path: '/observability/feedback/percentiles',\n summary: 'Get feedback percentiles',\n description: 'Returns percentile values for numeric feedback bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n\nexport function createObservabilityListQuerySchema<\n TFilter extends z.ZodObject<z.ZodRawShape>,\n TOrderBy extends z.ZodObject<z.ZodRawShape>,\n>(filterSchema: TFilter, orderBySchema: TOrderBy) {\n const unwrapDefault = (schema: unknown) => {\n const zodSchema = schema as z.ZodTypeAny;\n return zodSchema instanceof z.ZodDefault ? zodSchema.unwrap() : zodSchema;\n };\n const paginationShape = paginationArgsSchema.shape as unknown as Record<string, z.ZodTypeAny>;\n const orderByShape = orderBySchema.shape as unknown as Record<string, z.ZodTypeAny>;\n\n const pageSchema = unwrapDefault(paginationShape.page);\n const perPageSchema = unwrapDefault(paginationShape.perPage);\n const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : z.never().optional();\n const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : z.never().optional();\n\n return wrapSchemaForQueryParams(\n z\n .object({\n ...filterSchema.shape,\n page: pageSchema,\n perPage: perPageSchema,\n field: fieldSchema,\n direction: directionSchema,\n mode: listModeSchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .partial(),\n ).superRefine((value, ctx) => {\n const isDelta = value.mode === 'delta';\n const hasPagination = value.page !== undefined || value.perPage !== undefined;\n const hasOrderBy = value.field !== undefined || value.direction !== undefined;\n const hasAfter = value.after !== undefined;\n const hasLimit = value.limit !== undefined;\n\n if (isDelta) {\n if (hasPagination) {\n if (value.page !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['page'],\n message: '`page` is not allowed when `mode=delta`',\n });\n }\n if (value.perPage !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['perPage'],\n message: '`perPage` is not allowed when `mode=delta`',\n });\n }\n }\n if (hasOrderBy) {\n if (value.field !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['field'],\n message: '`field` is not allowed when `mode=delta`',\n });\n }\n if (value.direction !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['direction'],\n message: '`direction` is not allowed when `mode=delta`',\n });\n }\n }\n return;\n }\n\n if (hasAfter) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['after'],\n message: '`after` is only allowed when `mode=delta`',\n });\n }\n if (hasLimit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['limit'],\n message: '`limit` is only allowed when `mode=delta`',\n });\n }\n });\n}\n"]}