@mastra/server 1.0.0-beta.14 → 1.0.0-beta.16

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 (196) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/dist/{chunk-S3TIWWQL.cjs → chunk-3MN73W4B.cjs} +22 -18
  3. package/dist/chunk-3MN73W4B.cjs.map +1 -0
  4. package/dist/{chunk-FYY54HZC.js → chunk-3OUPQHSX.js} +12 -8
  5. package/dist/chunk-3OUPQHSX.js.map +1 -0
  6. package/dist/{chunk-DW3WE4M4.js → chunk-3REGEJEN.js} +4 -4
  7. package/dist/{chunk-DW3WE4M4.js.map → chunk-3REGEJEN.js.map} +1 -1
  8. package/dist/chunk-3W67K7YE.js +13 -0
  9. package/dist/chunk-3W67K7YE.js.map +1 -0
  10. package/dist/{chunk-Q7NPRJRV.cjs → chunk-4EYONQIW.cjs} +9 -15
  11. package/dist/chunk-4EYONQIW.cjs.map +1 -0
  12. package/dist/{chunk-AZIH2QEC.js → chunk-5NFRDYFN.js} +9 -15
  13. package/dist/chunk-5NFRDYFN.js.map +1 -0
  14. package/dist/{chunk-3SFLFUKY.js → chunk-5NXQ6QXL.js} +4 -4
  15. package/dist/{chunk-3SFLFUKY.js.map → chunk-5NXQ6QXL.js.map} +1 -1
  16. package/dist/{chunk-C3UIIRAT.cjs → chunk-5ZYHM57F.cjs} +39 -39
  17. package/dist/{chunk-C3UIIRAT.cjs.map → chunk-5ZYHM57F.cjs.map} +1 -1
  18. package/dist/{chunk-KPSSRYGH.js → chunk-6HKMJXTF.js} +3 -3
  19. package/dist/chunk-6HKMJXTF.js.map +1 -0
  20. package/dist/{chunk-BGSW46W5.cjs → chunk-6RQUU6C6.cjs} +6381 -1059
  21. package/dist/chunk-6RQUU6C6.cjs.map +1 -0
  22. package/dist/{chunk-I6LR6CPC.cjs → chunk-AVOFMAUS.cjs} +10 -10
  23. package/dist/{chunk-I6LR6CPC.cjs.map → chunk-AVOFMAUS.cjs.map} +1 -1
  24. package/dist/{chunk-X43DWDXB.cjs → chunk-B35F4QEM.cjs} +22 -22
  25. package/dist/{chunk-X43DWDXB.cjs.map → chunk-B35F4QEM.cjs.map} +1 -1
  26. package/dist/{chunk-7KOS32XA.cjs → chunk-BVIEHV3I.cjs} +96 -96
  27. package/dist/{chunk-7KOS32XA.cjs.map → chunk-BVIEHV3I.cjs.map} +1 -1
  28. package/dist/{chunk-XW2HXQDO.js → chunk-DUZRZLVR.js} +3 -3
  29. package/dist/{chunk-XW2HXQDO.js.map → chunk-DUZRZLVR.js.map} +1 -1
  30. package/dist/{chunk-3BXS37TQ.js → chunk-E4ZPLXZT.js} +13 -9
  31. package/dist/chunk-E4ZPLXZT.js.map +1 -0
  32. package/dist/{chunk-SXVANU23.js → chunk-FEEM6QFN.js} +60 -5
  33. package/dist/chunk-FEEM6QFN.js.map +1 -0
  34. package/dist/chunk-G2AMUTU4.js +250 -0
  35. package/dist/chunk-G2AMUTU4.js.map +1 -0
  36. package/dist/{chunk-BNGT3NIC.cjs → chunk-G3KUL3RL.cjs} +26 -26
  37. package/dist/{chunk-BNGT3NIC.cjs.map → chunk-G3KUL3RL.cjs.map} +1 -1
  38. package/dist/{chunk-LQSZ4FJJ.cjs → chunk-IQEVRCM6.cjs} +37 -37
  39. package/dist/{chunk-LQSZ4FJJ.cjs.map → chunk-IQEVRCM6.cjs.map} +1 -1
  40. package/dist/{chunk-HAJOEDNB.js → chunk-JXPRNYUC.js} +32 -27
  41. package/dist/chunk-JXPRNYUC.js.map +1 -0
  42. package/dist/chunk-K3LMK4KU.js +180 -0
  43. package/dist/chunk-K3LMK4KU.js.map +1 -0
  44. package/dist/{chunk-PUFCKXFW.cjs → chunk-KEW7MXUS.cjs} +11 -11
  45. package/dist/{chunk-PUFCKXFW.cjs.map → chunk-KEW7MXUS.cjs.map} +1 -1
  46. package/dist/{chunk-LKTCAPBD.cjs → chunk-L2E5RUVT.cjs} +13 -13
  47. package/dist/{chunk-LKTCAPBD.cjs.map → chunk-L2E5RUVT.cjs.map} +1 -1
  48. package/dist/chunk-L7ZFPOGS.js +44 -0
  49. package/dist/chunk-L7ZFPOGS.js.map +1 -0
  50. package/dist/chunk-LJ6YRVDI.cjs +15 -0
  51. package/dist/chunk-LJ6YRVDI.cjs.map +1 -0
  52. package/dist/{chunk-S5XBFHJL.js → chunk-MXJEVTGK.js} +3 -3
  53. package/dist/{chunk-S5XBFHJL.js.map → chunk-MXJEVTGK.js.map} +1 -1
  54. package/dist/{chunk-P6S2HIVE.cjs → chunk-MZXGNP3J.cjs} +68 -64
  55. package/dist/chunk-MZXGNP3J.cjs.map +1 -0
  56. package/dist/{chunk-MQLS6Z7A.js → chunk-OCJ3BRZM.js} +4 -4
  57. package/dist/{chunk-MQLS6Z7A.js.map → chunk-OCJ3BRZM.js.map} +1 -1
  58. package/dist/{chunk-UXGQZUYZ.js → chunk-ONN5EA7E.js} +13 -3
  59. package/dist/chunk-ONN5EA7E.js.map +1 -0
  60. package/dist/chunk-PNZQCQY4.cjs +252 -0
  61. package/dist/chunk-PNZQCQY4.cjs.map +1 -0
  62. package/dist/{chunk-BMYZ4DO6.cjs → chunk-R25YJP3Y.cjs} +3 -3
  63. package/dist/chunk-R25YJP3Y.cjs.map +1 -0
  64. package/dist/{chunk-6V57U52D.js → chunk-SEP5QUTR.js} +8 -8
  65. package/dist/{chunk-6V57U52D.js.map → chunk-SEP5QUTR.js.map} +1 -1
  66. package/dist/{chunk-V5WWQN7P.cjs → chunk-SUKFO7UM.cjs} +13 -2
  67. package/dist/chunk-SUKFO7UM.cjs.map +1 -0
  68. package/dist/{chunk-UWRAKVAJ.js → chunk-T2AYFHKB.js} +5 -5
  69. package/dist/{chunk-UWRAKVAJ.js.map → chunk-T2AYFHKB.js.map} +1 -1
  70. package/dist/chunk-T4SPG2GP.cjs +82 -0
  71. package/dist/chunk-T4SPG2GP.cjs.map +1 -0
  72. package/dist/{chunk-DRUNNM4C.js → chunk-TOGG5Q45.js} +4 -4
  73. package/dist/{chunk-DRUNNM4C.js.map → chunk-TOGG5Q45.js.map} +1 -1
  74. package/dist/{chunk-H2RMXG2Q.cjs → chunk-UKRDDBXY.cjs} +62 -4
  75. package/dist/chunk-UKRDDBXY.cjs.map +1 -0
  76. package/dist/chunk-V3RILBZM.cjs +186 -0
  77. package/dist/chunk-V3RILBZM.cjs.map +1 -0
  78. package/dist/{chunk-IEYXQTUW.cjs → chunk-VJNZJAIO.cjs} +42 -37
  79. package/dist/chunk-VJNZJAIO.cjs.map +1 -0
  80. package/dist/{chunk-YBYNF4PS.js → chunk-VN3XWLTP.js} +6303 -981
  81. package/dist/chunk-VN3XWLTP.js.map +1 -0
  82. package/dist/{chunk-JUYWLFVT.cjs → chunk-VYNS3ZKV.cjs} +5 -5
  83. package/dist/{chunk-JUYWLFVT.cjs.map → chunk-VYNS3ZKV.cjs.map} +1 -1
  84. package/dist/{chunk-SRQY5IWD.js → chunk-X5KAQFOV.js} +5 -5
  85. package/dist/{chunk-SRQY5IWD.js.map → chunk-X5KAQFOV.js.map} +1 -1
  86. package/dist/chunk-XAVPSRSG.cjs +46 -0
  87. package/dist/chunk-XAVPSRSG.cjs.map +1 -0
  88. package/dist/chunk-XOUK3IYU.js +77 -0
  89. package/dist/chunk-XOUK3IYU.js.map +1 -0
  90. package/dist/server/handlers/a2a.cjs +9 -9
  91. package/dist/server/handlers/a2a.js +1 -1
  92. package/dist/server/handlers/agent-builder.cjs +19 -19
  93. package/dist/server/handlers/agent-builder.d.ts +30 -6
  94. package/dist/server/handlers/agent-builder.d.ts.map +1 -1
  95. package/dist/server/handlers/agent-builder.js +1 -1
  96. package/dist/server/handlers/agents.cjs +24 -24
  97. package/dist/server/handlers/agents.js +1 -1
  98. package/dist/server/handlers/error.cjs +6 -2
  99. package/dist/server/handlers/error.d.ts +12 -0
  100. package/dist/server/handlers/error.d.ts.map +1 -1
  101. package/dist/server/handlers/error.js +1 -1
  102. package/dist/server/handlers/logs.cjs +4 -4
  103. package/dist/server/handlers/logs.js +1 -1
  104. package/dist/server/handlers/mcp.cjs +9 -9
  105. package/dist/server/handlers/mcp.js +1 -1
  106. package/dist/server/handlers/memory.cjs +24 -24
  107. package/dist/server/handlers/memory.js +1 -1
  108. package/dist/server/handlers/observability.cjs +7 -23
  109. package/dist/server/handlers/observability.d.ts +90 -93
  110. package/dist/server/handlers/observability.d.ts.map +1 -1
  111. package/dist/server/handlers/observability.js +1 -1
  112. package/dist/server/handlers/scores.cjs +7 -7
  113. package/dist/server/handlers/scores.d.ts +7 -7
  114. package/dist/server/handlers/scores.d.ts.map +1 -1
  115. package/dist/server/handlers/scores.js +1 -1
  116. package/dist/server/handlers/stored-agents.cjs +6 -6
  117. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  118. package/dist/server/handlers/stored-agents.js +1 -1
  119. package/dist/server/handlers/system.cjs +12 -0
  120. package/dist/server/handlers/system.cjs.map +1 -0
  121. package/dist/server/handlers/system.d.ts +7 -0
  122. package/dist/server/handlers/system.d.ts.map +1 -0
  123. package/dist/server/handlers/system.js +3 -0
  124. package/dist/server/handlers/system.js.map +1 -0
  125. package/dist/server/handlers/tools.cjs +6 -6
  126. package/dist/server/handlers/tools.js +1 -1
  127. package/dist/server/handlers/vector.cjs +13 -13
  128. package/dist/server/handlers/vector.js +1 -1
  129. package/dist/server/handlers/voice.cjs +8 -8
  130. package/dist/server/handlers/voice.d.ts +6 -6
  131. package/dist/server/handlers/voice.js +1 -1
  132. package/dist/server/handlers/workflows.cjs +27 -27
  133. package/dist/server/handlers/workflows.d.ts +41 -8
  134. package/dist/server/handlers/workflows.d.ts.map +1 -1
  135. package/dist/server/handlers/workflows.js +1 -1
  136. package/dist/server/handlers.cjs +27 -27
  137. package/dist/server/handlers.js +12 -12
  138. package/dist/server/schemas/agent-builder.d.ts +12 -0
  139. package/dist/server/schemas/agent-builder.d.ts.map +1 -1
  140. package/dist/server/schemas/agents.d.ts +3 -3
  141. package/dist/server/schemas/scores.d.ts +6 -6
  142. package/dist/server/schemas/system.d.ts +36 -0
  143. package/dist/server/schemas/system.d.ts.map +1 -0
  144. package/dist/server/schemas/workflows.d.ts +22 -7
  145. package/dist/server/schemas/workflows.d.ts.map +1 -1
  146. package/dist/server/server-adapter/index.cjs +164 -147
  147. package/dist/server/server-adapter/index.cjs.map +1 -1
  148. package/dist/server/server-adapter/index.js +22 -17
  149. package/dist/server/server-adapter/index.js.map +1 -1
  150. package/dist/server/server-adapter/routes/index.d.ts +1 -1
  151. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  152. package/dist/server/server-adapter/routes/route-builder.d.ts +60 -1
  153. package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
  154. package/dist/server/server-adapter/routes/system.d.ts +12 -0
  155. package/dist/server/server-adapter/routes/system.d.ts.map +1 -0
  156. package/dist/{token-6GSAFR2W-KVDFAJ2M-SDYXODLX.cjs → token-6GSAFR2W-K2BTU23I-5WBYUIGY.cjs} +8 -8
  157. package/dist/{token-6GSAFR2W-KVDFAJ2M-SDYXODLX.cjs.map → token-6GSAFR2W-K2BTU23I-5WBYUIGY.cjs.map} +1 -1
  158. package/dist/{token-6GSAFR2W-KVDFAJ2M-LNX5VF3I.js → token-6GSAFR2W-K2BTU23I-NW33N3NU.js} +5 -5
  159. package/dist/{token-6GSAFR2W-KVDFAJ2M-LNX5VF3I.js.map → token-6GSAFR2W-K2BTU23I-NW33N3NU.js.map} +1 -1
  160. package/dist/token-6GSAFR2W-VLY2XUPA-NCSASMWN.js +61 -0
  161. package/dist/token-6GSAFR2W-VLY2XUPA-NCSASMWN.js.map +1 -0
  162. package/dist/token-6GSAFR2W-VLY2XUPA-RKITWXKR.cjs +63 -0
  163. package/dist/token-6GSAFR2W-VLY2XUPA-RKITWXKR.cjs.map +1 -0
  164. package/dist/token-util-NEHG7TUY-KSXDO2NO-J6DEINGO.cjs +10 -0
  165. package/dist/token-util-NEHG7TUY-KSXDO2NO-J6DEINGO.cjs.map +1 -0
  166. package/dist/token-util-NEHG7TUY-KSXDO2NO-WH6I3PH3.js +8 -0
  167. package/dist/token-util-NEHG7TUY-KSXDO2NO-WH6I3PH3.js.map +1 -0
  168. package/dist/token-util-NEHG7TUY-TIJ3LMSH-ANFISSXX.cjs +10 -0
  169. package/dist/{token-util-NEHG7TUY-DJYRKLRD-MFJRDVVF.cjs.map → token-util-NEHG7TUY-TIJ3LMSH-ANFISSXX.cjs.map} +1 -1
  170. package/dist/token-util-NEHG7TUY-TIJ3LMSH-SGVKOKXF.js +8 -0
  171. package/dist/{token-util-NEHG7TUY-DJYRKLRD-BSQMRUEW.js.map → token-util-NEHG7TUY-TIJ3LMSH-SGVKOKXF.js.map} +1 -1
  172. package/package.json +4 -4
  173. package/dist/chunk-3BXS37TQ.js.map +0 -1
  174. package/dist/chunk-AZIH2QEC.js.map +0 -1
  175. package/dist/chunk-BGSW46W5.cjs.map +0 -1
  176. package/dist/chunk-BMYZ4DO6.cjs.map +0 -1
  177. package/dist/chunk-FYY54HZC.js.map +0 -1
  178. package/dist/chunk-GFF2I6UD.js +0 -354
  179. package/dist/chunk-GFF2I6UD.js.map +0 -1
  180. package/dist/chunk-H2RMXG2Q.cjs.map +0 -1
  181. package/dist/chunk-HAJOEDNB.js.map +0 -1
  182. package/dist/chunk-IEYXQTUW.cjs.map +0 -1
  183. package/dist/chunk-KPSSRYGH.js.map +0 -1
  184. package/dist/chunk-P6S2HIVE.cjs.map +0 -1
  185. package/dist/chunk-Q7NPRJRV.cjs.map +0 -1
  186. package/dist/chunk-S3TIWWQL.cjs.map +0 -1
  187. package/dist/chunk-SXVANU23.js.map +0 -1
  188. package/dist/chunk-TYZ6ZISQ.cjs +0 -368
  189. package/dist/chunk-TYZ6ZISQ.cjs.map +0 -1
  190. package/dist/chunk-UXGQZUYZ.js.map +0 -1
  191. package/dist/chunk-V5WWQN7P.cjs.map +0 -1
  192. package/dist/chunk-YBYNF4PS.js.map +0 -1
  193. package/dist/server/schemas/observability.d.ts +0 -402
  194. package/dist/server/schemas/observability.d.ts.map +0 -1
  195. package/dist/token-util-NEHG7TUY-DJYRKLRD-BSQMRUEW.js +0 -8
  196. package/dist/token-util-NEHG7TUY-DJYRKLRD-MFJRDVVF.cjs +0 -10
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var zodToJson = require('@mastra/core/utils/zod-to-json');
4
+ var zod = require('zod');
4
5
 
5
6
  // src/server/server-adapter/openapi-utils.ts
6
7
  function generateRouteOpenAPI({
@@ -138,8 +139,62 @@ function generateOpenAPIDocument(routes, info) {
138
139
  paths
139
140
  };
140
141
  }
141
-
142
- // src/server/server-adapter/routes/route-builder.ts
142
+ function pickParams(schema, params) {
143
+ const keys = Object.keys(schema.shape);
144
+ const result = {};
145
+ for (const key of keys) {
146
+ if (key in params) {
147
+ result[key] = params[key];
148
+ }
149
+ }
150
+ return result;
151
+ }
152
+ function jsonQueryParam(schema) {
153
+ return zod.z.union([
154
+ schema,
155
+ // Already the expected type (non-string input)
156
+ zod.z.string().transform((val, ctx) => {
157
+ try {
158
+ const parsed = JSON.parse(val);
159
+ const result = schema.safeParse(parsed);
160
+ if (!result.success) {
161
+ for (const issue of result.error.issues) {
162
+ ctx.addIssue({
163
+ code: zod.z.ZodIssueCode.custom,
164
+ message: issue.message,
165
+ path: issue.path
166
+ });
167
+ }
168
+ return zod.z.NEVER;
169
+ }
170
+ return result.data;
171
+ } catch (e) {
172
+ ctx.addIssue({
173
+ code: zod.z.ZodIssueCode.custom,
174
+ message: `Invalid JSON: ${e instanceof Error ? e.message : "parse error"}`
175
+ });
176
+ return zod.z.NEVER;
177
+ }
178
+ })
179
+ ]);
180
+ }
181
+ function isComplexType(schema) {
182
+ let inner = schema;
183
+ if (inner instanceof zod.ZodOptional) inner = inner.unwrap();
184
+ if (inner instanceof zod.ZodNullable) inner = inner.unwrap();
185
+ return inner instanceof zod.ZodArray || inner instanceof zod.ZodRecord || inner instanceof zod.ZodObject;
186
+ }
187
+ function wrapSchemaForQueryParams(schema) {
188
+ const newShape = {};
189
+ for (const [key, fieldSchema] of Object.entries(schema.shape)) {
190
+ if (isComplexType(fieldSchema)) {
191
+ newShape[key] = jsonQueryParam(fieldSchema);
192
+ } else {
193
+ newShape[key] = fieldSchema;
194
+ }
195
+ }
196
+ return zod.z.object(newShape);
197
+ }
143
198
  function createRoute(config) {
144
199
  const { summary, description, tags, deprecated, ...baseRoute } = config;
145
200
  const openapi = config.method !== "ALL" ? generateRouteOpenAPI({
@@ -163,5 +218,8 @@ function createRoute(config) {
163
218
 
164
219
  exports.createRoute = createRoute;
165
220
  exports.generateOpenAPIDocument = generateOpenAPIDocument;
166
- //# sourceMappingURL=chunk-H2RMXG2Q.cjs.map
167
- //# sourceMappingURL=chunk-H2RMXG2Q.cjs.map
221
+ exports.jsonQueryParam = jsonQueryParam;
222
+ exports.pickParams = pickParams;
223
+ exports.wrapSchemaForQueryParams = wrapSchemaForQueryParams;
224
+ //# sourceMappingURL=chunk-UKRDDBXY.cjs.map
225
+ //# sourceMappingURL=chunk-UKRDDBXY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/server-adapter/openapi-utils.ts","../src/server/server-adapter/routes/route-builder.ts"],"names":["zodToJsonSchema","z","ZodOptional","ZodNullable","ZodArray","ZodRecord","ZodObject"],"mappings":"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","file":"chunk-UKRDDBXY.cjs","sourcesContent":["import { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';\nimport type { ZodSchema } from 'zod';\nimport type { ServerRoute } from './routes';\n\ninterface RouteOpenAPIConfig {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n path: string;\n summary?: string;\n description?: string;\n tags?: string[];\n pathParamSchema?: ZodSchema;\n queryParamSchema?: ZodSchema;\n bodySchema?: ZodSchema;\n responseSchema?: ZodSchema;\n deprecated?: boolean;\n}\n\ninterface OpenAPIRoute {\n summary?: string;\n description?: string;\n tags?: string[];\n deprecated?: boolean;\n requestParams?: {\n path?: ZodSchema;\n query?: ZodSchema;\n };\n requestBody?: {\n content: {\n 'application/json': {\n schema: ZodSchema;\n };\n };\n };\n responses: {\n [statusCode: string]: {\n description: string;\n content?: {\n 'application/json': {\n schema: ZodSchema;\n };\n };\n };\n };\n}\n\n/**\n * Generates OpenAPI specification for a single route\n * Extracts path parameters, query parameters, request body, and response schemas\n */\nexport function generateRouteOpenAPI({\n method,\n path,\n summary,\n description,\n tags = [],\n pathParamSchema,\n queryParamSchema,\n bodySchema,\n responseSchema,\n deprecated,\n}: RouteOpenAPIConfig): OpenAPIRoute {\n const route: OpenAPIRoute = {\n summary: summary || `${method} ${path}`,\n description,\n tags,\n deprecated,\n responses: {\n 200: {\n description: 'Successful response',\n },\n },\n };\n\n // Add path and query parameters\n if (pathParamSchema || queryParamSchema) {\n route.requestParams = {};\n\n if (pathParamSchema) {\n route.requestParams.path = pathParamSchema;\n }\n\n if (queryParamSchema) {\n route.requestParams.query = queryParamSchema;\n }\n }\n\n // Add request body with raw Zod schema\n if (bodySchema) {\n route.requestBody = {\n content: {\n 'application/json': {\n schema: bodySchema,\n },\n },\n };\n }\n\n // Add response schema with raw Zod schema\n if (responseSchema) {\n route.responses[200] = {\n description: 'Successful response',\n content: {\n 'application/json': {\n schema: responseSchema,\n },\n },\n };\n }\n\n return route;\n}\n\n/**\n * Converts an OpenAPI route spec with Zod schemas to one with JSON Schema\n */\nfunction convertZodToJsonSchema(spec: OpenAPIRoute): any {\n const converted: any = {\n summary: spec.summary,\n description: spec.description,\n tags: spec.tags,\n responses: {},\n };\n\n const parameters: any[] = [];\n\n // Convert path parameters\n if (spec.requestParams?.path) {\n const pathSchema = zodToJsonSchema(spec.requestParams.path, 'openApi3', 'none') as any;\n const properties = pathSchema.properties || {};\n\n Object.entries(properties).forEach(([name, schema]) => {\n parameters.push({\n name,\n in: 'path',\n required: true,\n description: (schema as any).description || `The ${name} parameter`,\n schema,\n });\n });\n }\n\n // Convert query parameters\n if (spec.requestParams?.query) {\n const querySchema = zodToJsonSchema(spec.requestParams.query, 'openApi3', 'none') as any;\n const properties = querySchema.properties || {};\n const required = querySchema.required || [];\n\n Object.entries(properties).forEach(([name, schema]) => {\n parameters.push({\n name,\n in: 'query',\n required: required.includes(name),\n description: (schema as any).description || `Query parameter: ${name}`,\n schema,\n });\n });\n }\n\n if (parameters.length > 0) {\n converted.parameters = parameters;\n }\n\n // Convert request body\n if (spec.requestBody?.content?.['application/json']?.schema) {\n converted.requestBody = {\n required: true,\n content: {\n 'application/json': {\n schema: zodToJsonSchema(spec.requestBody.content['application/json'].schema, 'openApi3', 'none'),\n },\n },\n };\n }\n\n // Convert response schemas\n Object.entries(spec.responses).forEach(([statusCode, response]) => {\n converted.responses[statusCode] = {\n description: response.description,\n };\n\n if (response.content?.['application/json']?.schema) {\n converted.responses[statusCode].content = {\n 'application/json': {\n schema: zodToJsonSchema(response.content['application/json'].schema, 'openApi3', 'none'),\n },\n };\n }\n });\n\n return converted;\n}\n\n/**\n * Generates a complete OpenAPI 3.1.0 document from server routes\n * @param routes - Array of ServerRoute objects with OpenAPI specifications\n * @param info - API metadata (title, version, description)\n * @returns Complete OpenAPI 3.1.0 document\n */\nexport function generateOpenAPIDocument(\n routes: ServerRoute[],\n info: { title: string; version: string; description?: string },\n): any {\n const paths: Record<string, any> = {};\n\n // Build paths object from routes\n // Convert Express-style :param to OpenAPI-style {param}\n routes.forEach(route => {\n if (!route.openapi) return;\n\n const openapiPath = route.path.replace(/:(\\w+)/g, '{$1}');\n if (!paths[openapiPath]) {\n paths[openapiPath] = {};\n }\n\n // Convert Zod schemas to JSON Schema\n paths[openapiPath][route.method.toLowerCase()] = convertZodToJsonSchema(route.openapi);\n });\n\n return {\n openapi: '3.1.0',\n info: {\n title: info.title,\n version: info.version,\n description: info.description,\n },\n paths,\n };\n}\n","import { z, ZodArray, ZodNullable, ZodObject, ZodOptional, ZodRecord } from 'zod';\nimport type { ZodRawShape, ZodTypeAny } from 'zod';\nimport { generateRouteOpenAPI } from '../openapi-utils';\nimport type { InferParams, ResponseType, ServerRoute, ServerRouteHandler } from './index';\n\n/**\n * Extracts parameters matching a Zod schema's shape from a params object.\n * Useful for separating schema-defined params from ServerContext in handlers.\n *\n * @example\n * ```typescript\n * const querySchema = z.object({ page: z.number(), name: z.string() });\n *\n * handler: async (params) => {\n * const query = pickParams(querySchema, params);\n * // query is typed as { page: number, name: string }\n * }\n * ```\n */\nexport function pickParams<T extends z.ZodRawShape, P extends Record<string, unknown>>(\n schema: z.ZodObject<T>,\n params: P,\n): z.infer<z.ZodObject<T>> {\n const keys = Object.keys(schema.shape);\n const result = {} as z.infer<z.ZodObject<T>>;\n for (const key of keys) {\n if (key in params) {\n (result as any)[key] = params[key];\n }\n }\n return result;\n}\n\n/**\n * Wraps a Zod schema to accept either the expected type OR a JSON string.\n * Used for complex query parameters (arrays, objects) that are serialized as JSON in URLs.\n *\n * - If input is already the expected type, passes through to schema validation\n * - If input is a string, attempts JSON.parse then validates\n * - Provides clear error messages for JSON parse failures\n *\n * @example\n * ```typescript\n * const tagsSchema = jsonQueryParam(z.array(z.string()));\n * // Accepts: [\"tag1\", \"tag2\"] OR '[\"tag1\", \"tag2\"]'\n *\n * const dateRangeSchema = jsonQueryParam(z.object({ gte: z.coerce.date() }));\n * // Accepts: { gte: \"2024-01-01\" } OR '{\"gte\": \"2024-01-01\"}'\n * ```\n */\nexport function jsonQueryParam<T extends ZodTypeAny>(schema: T): z.ZodType<z.infer<T>> {\n return z.union([\n schema, // Already the expected type (non-string input)\n z.string().transform((val, ctx) => {\n try {\n const parsed = JSON.parse(val);\n const result = schema.safeParse(parsed);\n if (!result.success) {\n for (const issue of result.error.issues) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: issue.message,\n path: issue.path,\n });\n }\n return z.NEVER;\n }\n return result.data;\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid JSON: ${e instanceof Error ? e.message : 'parse error'}`,\n });\n return z.NEVER;\n }\n }),\n ]) as z.ZodType<z.infer<T>>;\n}\n\n/**\n * Checks if a Zod schema represents a complex type that needs JSON parsing from query strings.\n * Complex types: arrays, objects, records (these can't be represented as simple strings)\n * Simple types: strings, numbers, booleans, enums (can use z.coerce for conversion)\n */\nfunction isComplexType(schema: ZodTypeAny): boolean {\n // Unwrap optional/nullable to check the inner type\n let inner: ZodTypeAny = schema;\n if (inner instanceof ZodOptional) inner = inner.unwrap();\n if (inner instanceof ZodNullable) inner = inner.unwrap();\n\n // Complex types that need JSON parsing\n return inner instanceof ZodArray || inner instanceof ZodRecord || inner instanceof ZodObject;\n}\n\n/**\n * Wraps a Zod object schema for HTTP query parameter handling.\n * Automatically detects complex fields (arrays, objects, records) and wraps them\n * with jsonQueryParam() to accept JSON strings from query parameters.\n *\n * Simple fields (strings, numbers, booleans, enums) are left unchanged and should\n * use z.coerce for string-to-type conversion.\n *\n * @example\n * ```typescript\n * // Base schema (for internal/storage use)\n * const tracesFilterSchema = z.object({\n * tags: z.array(z.string()).optional(),\n * startedAt: dateRangeSchema.optional(),\n * perPage: z.coerce.number().optional(),\n * });\n *\n * // HTTP schema (accepts JSON strings for complex fields)\n * const httpTracesFilterSchema = wrapSchemaForQueryParams(tracesFilterSchema);\n *\n * // Now accepts:\n * // ?tags=[\"tag1\",\"tag2\"]&startedAt={\"gte\":\"2024-01-01\"}&perPage=10\n * ```\n */\nexport function wrapSchemaForQueryParams<T extends ZodRawShape>(schema: ZodObject<T>): ZodObject<ZodRawShape> {\n const newShape: ZodRawShape = {};\n\n for (const [key, fieldSchema] of Object.entries(schema.shape)) {\n if (isComplexType(fieldSchema as ZodTypeAny)) {\n // Wrap complex types to accept JSON strings\n newShape[key] = jsonQueryParam(fieldSchema as ZodTypeAny);\n } else {\n // Keep simple types as-is\n newShape[key] = fieldSchema as ZodTypeAny;\n }\n }\n\n return z.object(newShape);\n}\n\ninterface RouteConfig<\n TPathSchema extends z.ZodTypeAny | undefined = undefined,\n TQuerySchema extends z.ZodTypeAny | undefined = undefined,\n TBodySchema extends z.ZodTypeAny | undefined = undefined,\n TResponseSchema extends z.ZodTypeAny | undefined = undefined,\n TResponseType extends ResponseType = 'json',\n> {\n method: ServerRoute['method'];\n path: string;\n responseType: TResponseType;\n streamFormat?: 'sse' | 'stream'; // Only used when responseType is 'stream'\n handler: ServerRouteHandler<\n InferParams<TPathSchema, TQuerySchema, TBodySchema>,\n TResponseSchema extends z.ZodTypeAny ? z.infer<TResponseSchema> : unknown,\n TResponseType\n >;\n pathParamSchema?: TPathSchema;\n queryParamSchema?: TQuerySchema;\n bodySchema?: TBodySchema;\n responseSchema?: TResponseSchema;\n summary?: string;\n description?: string;\n tags?: string[];\n deprecated?: boolean;\n maxBodySize?: number;\n}\n\n/**\n * Creates a server route with auto-generated OpenAPI specification and type-safe handler inference.\n *\n * The handler parameters are automatically inferred from the provided schemas:\n * - pathParamSchema: Infers path parameter types (e.g., :agentId)\n * - queryParamSchema: Infers query parameter types\n * - bodySchema: Infers request body types\n * - Runtime context (mastra, requestContext, tools, taskStore) is always available\n *\n * @param config - Route configuration including schemas, handler, and metadata\n * @returns Complete ServerRoute with OpenAPI spec\n *\n * @example\n * ```typescript\n * export const getAgentRoute = createRoute({\n * method: 'GET',\n * path: '/api/agents/:agentId',\n * responseType: 'json',\n * pathParamSchema: z.object({ agentId: z.string() }),\n * responseSchema: serializedAgentSchema,\n * handler: async ({ agentId, mastra, requestContext }) => {\n * // agentId is typed as string\n * // mastra, requestContext, tools, taskStore are always available\n * return mastra.getAgentById(agentId);\n * },\n * summary: 'Get agent by ID',\n * description: 'Returns details for a specific agent',\n * tags: ['Agents'],\n * });\n * ```\n */\nexport function createRoute<\n TPathSchema extends z.ZodTypeAny | undefined = undefined,\n TQuerySchema extends z.ZodTypeAny | undefined = undefined,\n TBodySchema extends z.ZodTypeAny | undefined = undefined,\n TResponseSchema extends z.ZodTypeAny | undefined = undefined,\n TResponseType extends ResponseType = 'json',\n>(\n config: RouteConfig<TPathSchema, TQuerySchema, TBodySchema, TResponseSchema, TResponseType>,\n): ServerRoute<\n InferParams<TPathSchema, TQuerySchema, TBodySchema>,\n TResponseSchema extends z.ZodTypeAny ? z.infer<TResponseSchema> : unknown,\n TResponseType\n> {\n const { summary, description, tags, deprecated, ...baseRoute } = config;\n\n // Generate OpenAPI specification from the route config\n // Skip OpenAPI generation for 'ALL' method as it doesn't map to OpenAPI\n const openapi =\n config.method !== 'ALL'\n ? generateRouteOpenAPI({\n method: config.method as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n path: config.path,\n summary,\n description,\n tags,\n pathParamSchema: config.pathParamSchema,\n queryParamSchema: config.queryParamSchema,\n bodySchema: config.bodySchema,\n responseSchema: config.responseSchema,\n deprecated,\n })\n : undefined;\n\n return {\n ...baseRoute,\n openapi: openapi as any,\n deprecated,\n };\n}\n"]}
@@ -0,0 +1,186 @@
1
+ 'use strict';
2
+
3
+ var chunkUKRDDBXY_cjs = require('./chunk-UKRDDBXY.cjs');
4
+ var chunkSUKFO7UM_cjs = require('./chunk-SUKFO7UM.cjs');
5
+ var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
6
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
7
+ var evals = require('@mastra/core/evals');
8
+ var scoreTraces = require('@mastra/core/evals/scoreTraces');
9
+ var storage = require('@mastra/core/storage');
10
+ var zod = require('zod');
11
+
12
+ // src/server/handlers/observability.ts
13
+ var observability_exports = {};
14
+ chunkO7I5CWRX_cjs.__export(observability_exports, {
15
+ GET_TRACE_ROUTE: () => GET_TRACE_ROUTE,
16
+ LIST_SCORES_BY_SPAN_ROUTE: () => LIST_SCORES_BY_SPAN_ROUTE,
17
+ LIST_TRACES_ROUTE: () => LIST_TRACES_ROUTE,
18
+ SCORE_TRACES_ROUTE: () => SCORE_TRACES_ROUTE
19
+ });
20
+ var legacyQueryParamsSchema = zod.z.object({
21
+ // Old: dateRange was in pagination, now it's startedAt in filters
22
+ dateRange: storage.dateRangeSchema.optional(),
23
+ // Old: name matched span names like "agent run: 'myAgent'"
24
+ name: zod.z.string().optional(),
25
+ // entityType needs preprocessing to handle legacy 'workflow' value
26
+ entityType: zod.z.preprocess((val) => val === "workflow" ? "workflow_run" : val, zod.z.string().optional())
27
+ });
28
+ function transformLegacyParams(params) {
29
+ const result = { ...params };
30
+ if (result.entityType === "workflow") {
31
+ result.entityType = "workflow_run";
32
+ }
33
+ if (params.dateRange && !params.startedAt) {
34
+ result.startedAt = params.dateRange;
35
+ delete result.dateRange;
36
+ }
37
+ if (typeof params.name === "string" && !params.entityId) {
38
+ const agentMatch = params.name.match(/^agent run: '([^']+)'$/);
39
+ const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);
40
+ if (agentMatch) {
41
+ result.entityId = agentMatch[1];
42
+ result.entityType = "agent";
43
+ } else if (workflowMatch) {
44
+ result.entityId = workflowMatch[1];
45
+ result.entityType = "workflow_run";
46
+ }
47
+ delete result.name;
48
+ }
49
+ return result;
50
+ }
51
+ function getStorage(mastra) {
52
+ const storage = mastra.getStorage();
53
+ if (!storage) {
54
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not available" });
55
+ }
56
+ return storage;
57
+ }
58
+ async function getObservabilityStore(mastra) {
59
+ const storage = getStorage(mastra);
60
+ const observability = await storage.getStore("observability");
61
+ if (!observability) {
62
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Observability storage domain is not available" });
63
+ }
64
+ return observability;
65
+ }
66
+ async function getScoresStore(mastra) {
67
+ const storage = getStorage(mastra);
68
+ const scores = await storage.getStore("scores");
69
+ if (!scores) {
70
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scores storage domain is not available" });
71
+ }
72
+ return scores;
73
+ }
74
+ var LIST_TRACES_ROUTE = chunkUKRDDBXY_cjs.createRoute({
75
+ method: "GET",
76
+ path: "/api/observability/traces",
77
+ responseType: "json",
78
+ queryParamSchema: chunkUKRDDBXY_cjs.wrapSchemaForQueryParams(
79
+ storage.tracesFilterSchema.merge(storage.paginationArgsSchema).merge(storage.tracesOrderBySchema).merge(legacyQueryParamsSchema).partial()
80
+ ),
81
+ responseSchema: storage.listTracesResponseSchema,
82
+ summary: "List traces",
83
+ description: "Returns a paginated list of traces with optional filtering and sorting",
84
+ tags: ["Observability"],
85
+ handler: async ({ mastra, ...params }) => {
86
+ try {
87
+ const transformedParams = transformLegacyParams(params);
88
+ const filters = chunkUKRDDBXY_cjs.pickParams(storage.tracesFilterSchema, transformedParams);
89
+ const pagination = chunkUKRDDBXY_cjs.pickParams(storage.paginationArgsSchema, transformedParams);
90
+ const orderBy = chunkUKRDDBXY_cjs.pickParams(storage.tracesOrderBySchema, transformedParams);
91
+ const observabilityStore = await getObservabilityStore(mastra);
92
+ return await observabilityStore.listTraces({ filters, pagination, orderBy });
93
+ } catch (error) {
94
+ chunkSUKFO7UM_cjs.handleError(error, "Error listing traces");
95
+ }
96
+ }
97
+ });
98
+ var GET_TRACE_ROUTE = chunkUKRDDBXY_cjs.createRoute({
99
+ method: "GET",
100
+ path: "/api/observability/traces/:traceId",
101
+ responseType: "json",
102
+ pathParamSchema: storage.getTraceArgsSchema,
103
+ responseSchema: storage.getTraceResponseSchema,
104
+ summary: "Get AI trace by ID",
105
+ description: "Returns a complete AI trace with all spans by trace ID",
106
+ tags: ["Observability"],
107
+ handler: async ({ mastra, traceId }) => {
108
+ try {
109
+ const observabilityStore = await getObservabilityStore(mastra);
110
+ const trace = await observabilityStore.getTrace({ traceId });
111
+ if (!trace) {
112
+ throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Trace with ID '${traceId}' not found` });
113
+ }
114
+ return trace;
115
+ } catch (error) {
116
+ chunkSUKFO7UM_cjs.handleError(error, "Error getting trace");
117
+ }
118
+ }
119
+ });
120
+ var SCORE_TRACES_ROUTE = chunkUKRDDBXY_cjs.createRoute({
121
+ method: "POST",
122
+ path: "/api/observability/traces/score",
123
+ responseType: "json",
124
+ bodySchema: storage.scoreTracesRequestSchema,
125
+ responseSchema: storage.scoreTracesResponseSchema,
126
+ summary: "Score traces",
127
+ description: "Scores one or more traces using a specified scorer (fire-and-forget)",
128
+ tags: ["Observability"],
129
+ handler: async ({ mastra, ...params }) => {
130
+ try {
131
+ getStorage(mastra);
132
+ const { scorerName, targets } = params;
133
+ const scorer = mastra.getScorerById(scorerName);
134
+ if (!scorer) {
135
+ throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer '${scorerName}' not found` });
136
+ }
137
+ scoreTraces.scoreTraces({
138
+ scorerId: scorer.config.id || scorer.config.name,
139
+ targets,
140
+ mastra
141
+ }).catch((error) => {
142
+ const logger = mastra.getLogger();
143
+ logger?.error(`Background trace scoring failed: ${error.message}`, error);
144
+ });
145
+ return {
146
+ status: "success",
147
+ message: `Scoring started for ${targets.length} ${targets.length === 1 ? "trace" : "traces"}`,
148
+ traceCount: targets.length
149
+ };
150
+ } catch (error) {
151
+ chunkSUKFO7UM_cjs.handleError(error, "Error processing trace scoring");
152
+ }
153
+ }
154
+ });
155
+ var LIST_SCORES_BY_SPAN_ROUTE = chunkUKRDDBXY_cjs.createRoute({
156
+ method: "GET",
157
+ path: "/api/observability/traces/:traceId/:spanId/scores",
158
+ responseType: "json",
159
+ pathParamSchema: storage.spanIdsSchema,
160
+ queryParamSchema: storage.paginationArgsSchema,
161
+ responseSchema: evals.listScoresResponseSchema,
162
+ summary: "List scores by span",
163
+ description: "Returns all scores for a specific span within a trace",
164
+ tags: ["Observability"],
165
+ handler: async ({ mastra, ...params }) => {
166
+ try {
167
+ const pagination = chunkUKRDDBXY_cjs.pickParams(storage.paginationArgsSchema, params);
168
+ const spanIds = chunkUKRDDBXY_cjs.pickParams(storage.spanIdsSchema, params);
169
+ const scoresStore = await getScoresStore(mastra);
170
+ return await scoresStore.listScoresBySpan({
171
+ ...spanIds,
172
+ pagination
173
+ });
174
+ } catch (error) {
175
+ chunkSUKFO7UM_cjs.handleError(error, "Error getting scores by span");
176
+ }
177
+ }
178
+ });
179
+
180
+ exports.GET_TRACE_ROUTE = GET_TRACE_ROUTE;
181
+ exports.LIST_SCORES_BY_SPAN_ROUTE = LIST_SCORES_BY_SPAN_ROUTE;
182
+ exports.LIST_TRACES_ROUTE = LIST_TRACES_ROUTE;
183
+ exports.SCORE_TRACES_ROUTE = SCORE_TRACES_ROUTE;
184
+ exports.observability_exports = observability_exports;
185
+ //# sourceMappingURL=chunk-V3RILBZM.cjs.map
186
+ //# sourceMappingURL=chunk-V3RILBZM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/observability.ts"],"names":["__export","z","dateRangeSchema","HTTPException","createRoute","wrapSchemaForQueryParams","tracesFilterSchema","paginationArgsSchema","tracesOrderBySchema","listTracesResponseSchema","pickParams","handleError","getTraceArgsSchema","getTraceResponseSchema","scoreTracesRequestSchema","scoreTracesResponseSchema","scoreTraces","spanIdsSchema","listScoresResponseSchema"],"mappings":";;;;;;;;;;;;AAAA,IAAA,qBAAA,GAAA;AAAAA,0BAAA,CAAA,qBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA6BA,IAAM,uBAAA,GAA0BC,MAAE,MAAA,CAAO;AAAA;AAAA,EAEvC,SAAA,EAAWC,wBAAgB,QAAA,EAAS;AAAA;AAAA,EAEpC,IAAA,EAAMD,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,CAAA,GAAA,KAAQ,GAAA,KAAQ,UAAA,GAAa,cAAA,GAAiB,GAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAU;AACpG,CAAC,CAAA;AASD,SAAS,sBAAsB,MAAA,EAA0D;AACvF,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAG3B,EAAA,IAAI,MAAA,CAAO,eAAe,UAAA,EAAY;AACpC,IAAA,MAAA,CAAO,UAAA,GAAa,cAAA;AAAA,EACtB;AAGA,EAAA,IAAI,MAAA,CAAO,SAAA,IAAa,CAAC,MAAA,CAAO,SAAA,EAAW;AACzC,IAAA,MAAA,CAAO,YAAY,MAAA,CAAO,SAAA;AAC1B,IAAA,OAAO,MAAA,CAAO,SAAA;AAAA,EAChB;AAIA,EAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,CAAC,OAAO,QAAA,EAAU;AACvD,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,wBAAwB,CAAA;AAC7D,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,2BAA2B,CAAA;AAEnE,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,QAAA,GAAW,WAAW,CAAC,CAAA;AAC9B,MAAA,MAAA,CAAO,UAAA,GAAa,OAAA;AAAA,IACtB,WAAW,aAAA,EAAe;AACxB,MAAA,MAAA,CAAO,QAAA,GAAW,cAAc,CAAC,CAAA;AACjC,MAAA,MAAA,CAAO,UAAA,GAAa,cAAA;AAAA,IACtB;AACA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,WAAW,MAAA,EAA+B;AACjD,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAIE,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,4BAA4B,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,sBAAsB,MAAA,EAA+C;AAClF,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;AAEA,eAAe,eAAe,MAAA,EAAwC;AACpE,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAC9C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,oBAAoBC,6BAAA,CAAY;AAAA,EAC3C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkBC,0CAAA;AAAA,IAChBC,0BAAA,CACG,KAAA,CAAMC,4BAAoB,CAAA,CAC1B,KAAA,CAAMC,2BAAmB,CAAA,CACzB,KAAA,CAAM,uBAAuB,CAAA,CAC7B,OAAA;AAAQ,GACb;AAAA,EACA,cAAA,EAAgBC,gCAAA;AAAA,EAChB,OAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAa,wEAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,SAAS,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAO,KAAM;AACxC,IAAA,IAAI;AAEF,MAAA,MAAM,iBAAA,GAAoB,sBAAsB,MAAM,CAAA;AAEtD,MAAA,MAAM,OAAA,GAAUC,4BAAA,CAAWJ,0BAAA,EAAoB,iBAAiB,CAAA;AAChE,MAAA,MAAM,UAAA,GAAaI,4BAAA,CAAWH,4BAAA,EAAsB,iBAAiB,CAAA;AACrE,MAAA,MAAM,OAAA,GAAUG,4BAAA,CAAWF,2BAAA,EAAqB,iBAAiB,CAAA;AAEjE,MAAA,MAAM,kBAAA,GAAqB,MAAM,qBAAA,CAAsB,MAAM,CAAA;AAC7D,MAAA,OAAO,MAAM,kBAAA,CAAmB,UAAA,CAAW,EAAE,OAAA,EAAS,UAAA,EAAY,SAAS,CAAA;AAAA,IAC7E,SAAS,KAAA,EAAO;AACd,MAAAG,6BAAA,CAAY,OAAO,sBAAsB,CAAA;AAAA,IAC3C;AAAA,EACF;AACF,CAAC;AAEM,IAAM,kBAAkBP,6BAAA,CAAY;AAAA,EACzC,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBQ,0BAAA;AAAA,EACjB,cAAA,EAAgBC,8BAAA;AAAA,EAChB,OAAA,EAAS,oBAAA;AAAA,EACT,WAAA,EAAa,wDAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,SAAQ,KAAM;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,kBAAA,GAAqB,MAAM,qBAAA,CAAsB,MAAM,CAAA;AAC7D,MAAA,MAAM,QAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,SAAS,CAAA;AAE3D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAIV,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,eAAA,EAAkB,OAAO,eAAe,CAAA;AAAA,MAClF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAAQ,6BAAA,CAAY,OAAO,qBAAqB,CAAA;AAAA,IAC1C;AAAA,EACF;AACF,CAAC;AAEM,IAAM,qBAAqBP,6BAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAYU,gCAAA;AAAA,EACZ,cAAA,EAAgBC,iCAAA;AAAA,EAChB,OAAA,EAAS,cAAA;AAAA,EACT,WAAA,EAAa,sEAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,SAAS,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAO,KAAM;AACxC,IAAA,IAAI;AAEF,MAAA,UAAA,CAAW,MAAM,CAAA;AAEjB,MAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI,MAAA;AAEhC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,UAAU,CAAA;AAC9C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAIZ,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,QAAA,EAAW,UAAU,eAAe,CAAA;AAAA,MAC9E;AAEA,MAAAa,uBAAA,CAAY;AAAA,QACV,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,EAAA,IAAM,OAAO,MAAA,CAAO,IAAA;AAAA,QAC5C,OAAA;AAAA,QACA;AAAA,OACD,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAChB,QAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,QAAA,MAAA,EAAQ,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAA,CAAM,OAAO,IAAI,KAAK,CAAA;AAAA,MAC1E,CAAC,CAAA;AAED,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,uBAAuB,OAAA,CAAQ,MAAM,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAA,GAAU,QAAQ,CAAA,CAAA;AAAA,QAC3F,YAAY,OAAA,CAAQ;AAAA,OACtB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAAL,6BAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IACrD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,4BAA4BP,6BAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,mDAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBa,qBAAA;AAAA,EACjB,gBAAA,EAAkBV,4BAAA;AAAA,EAClB,cAAA,EAAgBW,8BAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,SAAS,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAO,KAAM;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAaR,4BAAA,CAAWH,4BAAA,EAAsB,MAAM,CAAA;AAC1D,MAAA,MAAM,OAAA,GAAUG,4BAAA,CAAWO,qBAAA,EAAe,MAAM,CAAA;AAEhD,MAAA,MAAM,WAAA,GAAc,MAAM,cAAA,CAAe,MAAM,CAAA;AAE/C,MAAA,OAAO,MAAM,YAAY,gBAAA,CAAiB;AAAA,QACxC,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAAN,6BAAA,CAAY,OAAO,8BAA8B,CAAA;AAAA,IACnD;AAAA,EACF;AACF,CAAC","file":"chunk-V3RILBZM.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport { listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport type { MastraStorage, ScoresStorage, ObservabilityStorage } from '@mastra/core/storage';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n paginationArgsSchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n dateRangeSchema,\n} from '@mastra/core/storage';\nimport { z } from 'zod';\nimport { HTTPException } from '../http-exception';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' (the Zod validation would have already transformed this)\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nfunction getStorage(mastra: Mastra): MastraStorage {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\nasync 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\nasync function getScoresStore(mastra: Mastra): Promise<ScoresStorage> {\n const storage = getStorage(mastra);\n const scores = await storage.getStore('scores');\n if (!scores) {\n throw new HTTPException(500, { message: 'Scores storage domain is not available' });\n }\n return scores;\n}\n\nexport const LIST_TRACES_ROUTE = createRoute({\n method: 'GET',\n path: '/api/observability/traces',\n responseType: 'json',\n queryParamSchema: wrapSchemaForQueryParams(\n tracesFilterSchema\n .merge(paginationArgsSchema)\n .merge(tracesOrderBySchema)\n .merge(legacyQueryParamsSchema) // Accept legacy params for backward compatibility\n .partial(),\n ),\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description: 'Returns a paginated list of traces with optional filtering and sorting',\n tags: ['Observability'],\n handler: async ({ mastra, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n const observabilityStore = await getObservabilityStore(mastra);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n handleError(error, 'Error listing traces');\n }\n },\n});\n\nexport const GET_TRACE_ROUTE = createRoute({\n method: 'GET',\n path: '/api/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema,\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n handleError(error, 'Error getting trace');\n }\n },\n});\n\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/api/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/api/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n queryParamSchema: paginationArgsSchema,\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n handleError(error, 'Error getting scores by span');\n }\n },\n});\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkMCYD5LW7_cjs = require('./chunk-MCYD5LW7.cjs');
4
- var chunkH2RMXG2Q_cjs = require('./chunk-H2RMXG2Q.cjs');
5
- var chunkV5WWQN7P_cjs = require('./chunk-V5WWQN7P.cjs');
4
+ var chunkUKRDDBXY_cjs = require('./chunk-UKRDDBXY.cjs');
5
+ var chunkSUKFO7UM_cjs = require('./chunk-SUKFO7UM.cjs');
6
6
  var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
7
7
  var z = require('zod');
8
8
 
@@ -63,7 +63,7 @@ var deleteStoredAgentResponseSchema = z__default.default.object({
63
63
  });
64
64
 
65
65
  // src/server/handlers/stored-agents.ts
66
- var LIST_STORED_AGENTS_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
66
+ var LIST_STORED_AGENTS_ROUTE = chunkUKRDDBXY_cjs.createRoute({
67
67
  method: "GET",
68
68
  path: "/api/stored/agents",
69
69
  responseType: "json",
@@ -76,23 +76,24 @@ var LIST_STORED_AGENTS_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
76
76
  try {
77
77
  const storage = mastra.getStorage();
78
78
  if (!storage) {
79
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage is not configured" });
79
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
80
80
  }
81
- if (!storage.supports.agents) {
82
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage does not support agents" });
81
+ const agentsStore = await storage.getStore("agents");
82
+ if (!agentsStore) {
83
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
83
84
  }
84
- const result = await storage.listAgents({
85
+ const result = await agentsStore.listAgents({
85
86
  page,
86
87
  perPage,
87
88
  orderBy
88
89
  });
89
90
  return result;
90
91
  } catch (error) {
91
- return chunkV5WWQN7P_cjs.handleError(error, "Error listing stored agents");
92
+ return chunkSUKFO7UM_cjs.handleError(error, "Error listing stored agents");
92
93
  }
93
94
  }
94
95
  });
95
- var GET_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
96
+ var GET_STORED_AGENT_ROUTE = chunkUKRDDBXY_cjs.createRoute({
96
97
  method: "GET",
97
98
  path: "/api/stored/agents/:storedAgentId",
98
99
  responseType: "json",
@@ -105,22 +106,23 @@ var GET_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
105
106
  try {
106
107
  const storage = mastra.getStorage();
107
108
  if (!storage) {
108
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage is not configured" });
109
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
109
110
  }
110
- if (!storage.supports.agents) {
111
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage does not support agents" });
111
+ const agentsStore = await storage.getStore("agents");
112
+ if (!agentsStore) {
113
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
112
114
  }
113
- const agent = await storage.getAgentById({ id: storedAgentId });
115
+ const agent = await agentsStore.getAgentById({ id: storedAgentId });
114
116
  if (!agent) {
115
117
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
116
118
  }
117
119
  return agent;
118
120
  } catch (error) {
119
- return chunkV5WWQN7P_cjs.handleError(error, "Error getting stored agent");
121
+ return chunkSUKFO7UM_cjs.handleError(error, "Error getting stored agent");
120
122
  }
121
123
  }
122
124
  });
123
- var CREATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
125
+ var CREATE_STORED_AGENT_ROUTE = chunkUKRDDBXY_cjs.createRoute({
124
126
  method: "POST",
125
127
  path: "/api/stored/agents",
126
128
  responseType: "json",
@@ -149,17 +151,18 @@ var CREATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
149
151
  try {
150
152
  const storage = mastra.getStorage();
151
153
  if (!storage) {
152
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage is not configured" });
154
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
153
155
  }
154
- if (!storage.supports.agents) {
155
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage does not support agents" });
156
+ const agentsStore = await storage.getStore("agents");
157
+ if (!agentsStore) {
158
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
156
159
  }
157
- const existing = await storage.getAgentById({ id });
160
+ const existing = await agentsStore.getAgentById({ id });
158
161
  if (existing) {
159
162
  throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Agent with id ${id} already exists` });
160
163
  }
161
164
  const toolsFromBody = Array.isArray(tools) ? tools : void 0;
162
- const agent = await storage.createAgent({
165
+ const agent = await agentsStore.createAgent({
163
166
  agent: {
164
167
  id,
165
168
  name,
@@ -179,11 +182,11 @@ var CREATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
179
182
  });
180
183
  return agent;
181
184
  } catch (error) {
182
- return chunkV5WWQN7P_cjs.handleError(error, "Error creating stored agent");
185
+ return chunkSUKFO7UM_cjs.handleError(error, "Error creating stored agent");
183
186
  }
184
187
  }
185
188
  });
186
- var UPDATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
189
+ var UPDATE_STORED_AGENT_ROUTE = chunkUKRDDBXY_cjs.createRoute({
187
190
  method: "PATCH",
188
191
  path: "/api/stored/agents/:storedAgentId",
189
192
  responseType: "json",
@@ -213,17 +216,18 @@ var UPDATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
213
216
  try {
214
217
  const storage = mastra.getStorage();
215
218
  if (!storage) {
216
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage is not configured" });
219
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
217
220
  }
218
- if (!storage.supports.agents) {
219
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage does not support agents" });
221
+ const agentsStore = await storage.getStore("agents");
222
+ if (!agentsStore) {
223
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
220
224
  }
221
- const existing = await storage.getAgentById({ id: storedAgentId });
225
+ const existing = await agentsStore.getAgentById({ id: storedAgentId });
222
226
  if (!existing) {
223
227
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
224
228
  }
225
229
  const toolsFromBody = Array.isArray(tools) ? tools : void 0;
226
- const agent = await storage.updateAgent({
230
+ const agent = await agentsStore.updateAgent({
227
231
  id: storedAgentId,
228
232
  name,
229
233
  description,
@@ -241,11 +245,11 @@ var UPDATE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
241
245
  });
242
246
  return agent;
243
247
  } catch (error) {
244
- return chunkV5WWQN7P_cjs.handleError(error, "Error updating stored agent");
248
+ return chunkSUKFO7UM_cjs.handleError(error, "Error updating stored agent");
245
249
  }
246
250
  }
247
251
  });
248
- var DELETE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
252
+ var DELETE_STORED_AGENT_ROUTE = chunkUKRDDBXY_cjs.createRoute({
249
253
  method: "DELETE",
250
254
  path: "/api/stored/agents/:storedAgentId",
251
255
  responseType: "json",
@@ -258,19 +262,20 @@ var DELETE_STORED_AGENT_ROUTE = chunkH2RMXG2Q_cjs.createRoute({
258
262
  try {
259
263
  const storage = mastra.getStorage();
260
264
  if (!storage) {
261
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage is not configured" });
265
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
262
266
  }
263
- if (!storage.supports.agents) {
264
- throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Storage does not support agents" });
267
+ const agentsStore = await storage.getStore("agents");
268
+ if (!agentsStore) {
269
+ throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
265
270
  }
266
- const existing = await storage.getAgentById({ id: storedAgentId });
271
+ const existing = await agentsStore.getAgentById({ id: storedAgentId });
267
272
  if (!existing) {
268
273
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
269
274
  }
270
- await storage.deleteAgent({ id: storedAgentId });
275
+ await agentsStore.deleteAgent({ id: storedAgentId });
271
276
  return { success: true, message: `Agent ${storedAgentId} deleted successfully` };
272
277
  } catch (error) {
273
- return chunkV5WWQN7P_cjs.handleError(error, "Error deleting stored agent");
278
+ return chunkSUKFO7UM_cjs.handleError(error, "Error deleting stored agent");
274
279
  }
275
280
  }
276
281
  });
@@ -280,5 +285,5 @@ exports.DELETE_STORED_AGENT_ROUTE = DELETE_STORED_AGENT_ROUTE;
280
285
  exports.GET_STORED_AGENT_ROUTE = GET_STORED_AGENT_ROUTE;
281
286
  exports.LIST_STORED_AGENTS_ROUTE = LIST_STORED_AGENTS_ROUTE;
282
287
  exports.UPDATE_STORED_AGENT_ROUTE = UPDATE_STORED_AGENT_ROUTE;
283
- //# sourceMappingURL=chunk-IEYXQTUW.cjs.map
284
- //# sourceMappingURL=chunk-IEYXQTUW.cjs.map
288
+ //# sourceMappingURL=chunk-VJNZJAIO.cjs.map
289
+ //# sourceMappingURL=chunk-VJNZJAIO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/schemas/stored-agents.ts","../src/server/handlers/stored-agents.ts"],"names":["z","createPagePaginationSchema","paginationInfoSchema","createRoute","HTTPException","handleError"],"mappings":"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","file":"chunk-VJNZJAIO.cjs","sourcesContent":["import z from 'zod';\nimport { paginationInfoSchema, createPagePaginationSchema } from './common';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameter for stored agent ID\n */\nexport const storedAgentIdPathParams = z.object({\n storedAgentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * Storage order by configuration\n */\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\n/**\n * GET /api/storage/agents - List stored agents\n */\nexport const listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\n/**\n * Scorer config schema with optional sampling\n */\nconst scorerConfigSchema = z.object({\n sampling: z\n .object({\n type: z.enum(['ratio', 'count']),\n rate: z.number().optional(),\n count: z.number().optional(),\n })\n .optional(),\n});\n\n/**\n * Base stored agent schema (shared fields)\n */\nconst storedAgentBaseSchema = z.object({\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: z.string().describe('System instructions for the agent'),\n model: z.record(z.string(), z.unknown()).describe('Model configuration (provider, name, etc.)'),\n tools: z.array(z.string()).optional().describe('Array of tool keys to resolve from Mastra registry'),\n defaultOptions: z.record(z.string(), z.unknown()).optional().describe('Default options for generate/stream calls'),\n workflows: z.array(z.string()).optional().describe('Array of workflow keys to resolve from Mastra registry'),\n agents: z.array(z.string()).optional().describe('Array of agent keys to resolve from Mastra registry'),\n inputProcessors: z.array(z.record(z.string(), z.unknown())).optional().describe('Input processor configurations'),\n outputProcessors: z.array(z.record(z.string(), z.unknown())).optional().describe('Output processor configurations'),\n memory: z.string().optional().describe('Memory key to resolve from Mastra registry'),\n scorers: z.record(z.string(), scorerConfigSchema).optional().describe('Scorer keys with optional sampling config'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n});\n\n/**\n * POST /api/storage/agents - Create stored agent body\n */\nexport const createStoredAgentBodySchema = storedAgentBaseSchema.extend({\n id: z.string().describe('Unique identifier for the agent'),\n});\n\n/**\n * PATCH /api/storage/agents/:storedAgentId - Update stored agent body\n */\nexport const updateStoredAgentBodySchema = storedAgentBaseSchema.partial();\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Stored agent object schema (full response)\n */\nexport const storedAgentSchema = storedAgentBaseSchema.extend({\n id: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\n/**\n * Response for GET /api/storage/agents\n */\nexport const listStoredAgentsResponseSchema = paginationInfoSchema.extend({\n agents: z.array(storedAgentSchema),\n});\n\n/**\n * Response for GET /api/storage/agents/:storedAgentId\n */\nexport const getStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for POST /api/storage/agents\n */\nexport const createStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for PATCH /api/storage/agents/:storedAgentId\n */\nexport const updateStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for DELETE /api/storage/agents/:storedAgentId\n */\nexport const deleteStoredAgentResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n","import { HTTPException } from '../http-exception';\nimport {\n storedAgentIdPathParams,\n listStoredAgentsQuerySchema,\n createStoredAgentBodySchema,\n updateStoredAgentBodySchema,\n listStoredAgentsResponseSchema,\n getStoredAgentResponseSchema,\n createStoredAgentResponseSchema,\n updateStoredAgentResponseSchema,\n deleteStoredAgentResponseSchema,\n} from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /api/stored/agents - List all stored agents\n */\nexport const LIST_STORED_AGENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/api/stored/agents',\n responseType: 'json',\n queryParamSchema: listStoredAgentsQuerySchema,\n responseSchema: listStoredAgentsResponseSchema,\n summary: 'List stored agents',\n description: 'Returns a paginated list of all agents stored in the database',\n tags: ['Stored Agents'],\n handler: async ({ mastra, page, perPage, orderBy }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const result = await agentsStore.listAgents({\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored agents');\n }\n },\n});\n\n/**\n * GET /api/stored/agents/:storedAgentId - Get a stored agent by ID\n */\nexport const GET_STORED_AGENT_ROUTE = createRoute({\n method: 'GET',\n path: '/api/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: getStoredAgentResponseSchema,\n summary: 'Get stored agent by ID',\n description: 'Returns a specific agent from storage by its unique identifier',\n tags: ['Stored Agents'],\n handler: async ({ mastra, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const agent = await agentsStore.getAgentById({ id: storedAgentId });\n\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n\n return agent;\n } catch (error) {\n return handleError(error, 'Error getting stored agent');\n }\n },\n});\n\n/**\n * POST /api/stored/agents - Create a new stored agent\n */\nexport const CREATE_STORED_AGENT_ROUTE = createRoute({\n method: 'POST',\n path: '/api/stored/agents',\n responseType: 'json',\n bodySchema: createStoredAgentBodySchema,\n responseSchema: createStoredAgentResponseSchema,\n summary: 'Create stored agent',\n description: 'Creates a new agent in storage with the provided configuration',\n tags: ['Stored Agents'],\n handler: async ({\n mastra,\n id,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent with this ID already exists\n const existing = await agentsStore.getAgentById({ id });\n if (existing) {\n throw new HTTPException(409, { message: `Agent with id ${id} already exists` });\n }\n\n // Only include tools if it's actually an array from the body (not {} from adapter)\n const toolsFromBody = Array.isArray(tools) ? tools : undefined;\n\n const agent = await agentsStore.createAgent({\n agent: {\n id,\n name,\n description,\n instructions,\n model,\n tools: toolsFromBody,\n defaultOptions,\n workflows,\n agents,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n metadata,\n },\n });\n\n return agent;\n } catch (error) {\n return handleError(error, 'Error creating stored agent');\n }\n },\n});\n\n/**\n * PATCH /api/stored/agents/:storedAgentId - Update a stored agent\n */\nexport const UPDATE_STORED_AGENT_ROUTE = createRoute({\n method: 'PATCH',\n path: '/api/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: updateStoredAgentBodySchema,\n responseSchema: updateStoredAgentResponseSchema,\n summary: 'Update stored agent',\n description: 'Updates an existing agent in storage with the provided fields',\n tags: ['Stored Agents'],\n handler: async ({\n mastra,\n storedAgentId,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getAgentById({ id: storedAgentId });\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n\n // Only include tools if it's actually an array from the body (not {} from adapter)\n const toolsFromBody = Array.isArray(tools) ? tools : undefined;\n\n const agent = await agentsStore.updateAgent({\n id: storedAgentId,\n name,\n description,\n instructions,\n model,\n tools: toolsFromBody,\n defaultOptions,\n workflows,\n agents,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n metadata,\n });\n\n return agent;\n } catch (error) {\n return handleError(error, 'Error updating stored agent');\n }\n },\n});\n\n/**\n * DELETE /api/stored/agents/:storedAgentId - Delete a stored agent\n */\nexport const DELETE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/api/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: deleteStoredAgentResponseSchema,\n summary: 'Delete stored agent',\n description: 'Deletes an agent from storage by its unique identifier',\n tags: ['Stored Agents'],\n handler: async ({ mastra, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getAgentById({ id: storedAgentId });\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n\n await agentsStore.deleteAgent({ id: storedAgentId });\n\n return { success: true, message: `Agent ${storedAgentId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored agent');\n }\n },\n});\n"]}