@mastra/server 0.0.0-fix-ai-sdk-dependency-20251124104209 → 0.0.0-fix-backport-setserver-20251201151948

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 (262) hide show
  1. package/CHANGELOG.md +105 -656
  2. package/README.md +1 -1
  3. package/dist/chunk-2S4IMB6E.cjs +130 -0
  4. package/dist/chunk-2S4IMB6E.cjs.map +1 -0
  5. package/dist/chunk-3SNGNFUJ.cjs +128 -0
  6. package/dist/chunk-3SNGNFUJ.cjs.map +1 -0
  7. package/dist/{chunk-6BISSAIF.js → chunk-4ML6U6RF.js} +1165 -5130
  8. package/dist/chunk-4ML6U6RF.js.map +1 -0
  9. package/dist/chunk-4QCXUEAT.js +25 -0
  10. package/dist/chunk-4QCXUEAT.js.map +1 -0
  11. package/dist/chunk-67GYDFSB.js +160 -0
  12. package/dist/chunk-67GYDFSB.js.map +1 -0
  13. package/dist/chunk-6N3HC6O4.js +705 -0
  14. package/dist/chunk-6N3HC6O4.js.map +1 -0
  15. package/dist/chunk-6ZR275MD.cjs +165 -0
  16. package/dist/chunk-6ZR275MD.cjs.map +1 -0
  17. package/dist/{chunk-64ITUOXI.cjs → chunk-7NADHFD2.cjs} +2 -2
  18. package/dist/{chunk-6QWQZI4Q.js.map → chunk-7NADHFD2.cjs.map} +1 -1
  19. package/dist/{chunk-4ECGVOJZ.cjs → chunk-7RGKOGE4.cjs} +33 -226
  20. package/dist/chunk-7RGKOGE4.cjs.map +1 -0
  21. package/dist/chunk-ABRFV4XP.js +83 -0
  22. package/dist/chunk-ABRFV4XP.js.map +1 -0
  23. package/dist/chunk-AHB4JCIQ.js +160 -0
  24. package/dist/chunk-AHB4JCIQ.js.map +1 -0
  25. package/dist/chunk-AW5BU3RQ.js +192 -0
  26. package/dist/chunk-AW5BU3RQ.js.map +1 -0
  27. package/dist/chunk-BATEJLED.js +124 -0
  28. package/dist/chunk-BATEJLED.js.map +1 -0
  29. package/dist/{chunk-UXGQZUYZ.js → chunk-CY4TP3FK.js} +3 -3
  30. package/dist/{chunk-UXGQZUYZ.js.map → chunk-CY4TP3FK.js.map} +1 -1
  31. package/dist/chunk-CY6R3HLM.cjs +727 -0
  32. package/dist/chunk-CY6R3HLM.cjs.map +1 -0
  33. package/dist/chunk-EP3JQDPD.cjs +131 -0
  34. package/dist/chunk-EP3JQDPD.cjs.map +1 -0
  35. package/dist/chunk-G4PUALCE.cjs +28 -0
  36. package/dist/chunk-G4PUALCE.cjs.map +1 -0
  37. package/dist/chunk-H33KYEMY.cjs +720 -0
  38. package/dist/chunk-H33KYEMY.cjs.map +1 -0
  39. package/dist/chunk-I3C4ODGV.cjs +335 -0
  40. package/dist/chunk-I3C4ODGV.cjs.map +1 -0
  41. package/dist/{chunk-3R5EV3HV.js → chunk-IAE7SFBS.js} +33 -220
  42. package/dist/chunk-IAE7SFBS.js.map +1 -0
  43. package/dist/chunk-LLUOPR3J.js +323 -0
  44. package/dist/chunk-LLUOPR3J.js.map +1 -0
  45. package/dist/{chunk-6QWQZI4Q.js → chunk-MMROOK5J.js} +2 -2
  46. package/dist/chunk-MMROOK5J.js.map +1 -0
  47. package/dist/chunk-MYR4PVGN.js +123 -0
  48. package/dist/chunk-MYR4PVGN.js.map +1 -0
  49. package/dist/chunk-NT5XW5PI.cjs +596 -0
  50. package/dist/chunk-NT5XW5PI.cjs.map +1 -0
  51. package/dist/chunk-PBXWFGEH.js +579 -0
  52. package/dist/chunk-PBXWFGEH.js.map +1 -0
  53. package/dist/chunk-PY2K7VNW.js +698 -0
  54. package/dist/chunk-PY2K7VNW.js.map +1 -0
  55. package/dist/chunk-QQXMIP6C.js +122 -0
  56. package/dist/chunk-QQXMIP6C.js.map +1 -0
  57. package/dist/{chunk-V5WWQN7P.cjs → chunk-RE4RPXT2.cjs} +4 -4
  58. package/dist/{chunk-V5WWQN7P.cjs.map → chunk-RE4RPXT2.cjs.map} +1 -1
  59. package/dist/chunk-SPRRK3P7.cjs +200 -0
  60. package/dist/chunk-SPRRK3P7.cjs.map +1 -0
  61. package/dist/chunk-TRGAMKHX.cjs +167 -0
  62. package/dist/chunk-TRGAMKHX.cjs.map +1 -0
  63. package/dist/{chunk-TBVUN4XN.cjs → chunk-USGGDGWL.cjs} +1998 -5969
  64. package/dist/chunk-USGGDGWL.cjs.map +1 -0
  65. package/dist/{chunk-UZ6CYAOG.cjs → chunk-VY4ENABS.cjs} +7 -6
  66. package/dist/chunk-VY4ENABS.cjs.map +1 -0
  67. package/dist/chunk-XN74I6VW.cjs +88 -0
  68. package/dist/chunk-XN74I6VW.cjs.map +1 -0
  69. package/dist/{chunk-G7BPNX2V.js → chunk-YWOK4F5A.js} +7 -6
  70. package/dist/chunk-YWOK4F5A.js.map +1 -0
  71. package/dist/server/handlers/a2a.cjs +7 -15
  72. package/dist/server/handlers/a2a.d.ts +10 -492
  73. package/dist/server/handlers/a2a.d.ts.map +1 -1
  74. package/dist/server/handlers/a2a.js +1 -1
  75. package/dist/server/handlers/agent-builder.cjs +31 -43
  76. package/dist/server/handlers/agent-builder.d.ts +84 -592
  77. package/dist/server/handlers/agent-builder.d.ts.map +1 -1
  78. package/dist/server/handlers/agent-builder.js +1 -1
  79. package/dist/server/handlers/agents.cjs +41 -49
  80. package/dist/server/handlers/agents.d.ts +148 -3275
  81. package/dist/server/handlers/agents.d.ts.map +1 -1
  82. package/dist/server/handlers/agents.js +1 -1
  83. package/dist/server/handlers/error.cjs +2 -2
  84. package/dist/server/handlers/error.js +1 -1
  85. package/dist/server/handlers/legacyWorkflows.cjs +48 -0
  86. package/dist/server/handlers/legacyWorkflows.cjs.map +1 -0
  87. package/dist/server/handlers/legacyWorkflows.d.ts +59 -0
  88. package/dist/server/handlers/legacyWorkflows.d.ts.map +1 -0
  89. package/dist/server/handlers/legacyWorkflows.js +3 -0
  90. package/dist/server/handlers/legacyWorkflows.js.map +1 -0
  91. package/dist/server/handlers/logs.cjs +7 -7
  92. package/dist/server/handlers/logs.d.ts +27 -135
  93. package/dist/server/handlers/logs.d.ts.map +1 -1
  94. package/dist/server/handlers/logs.js +1 -1
  95. package/dist/server/handlers/memory.cjs +31 -63
  96. package/dist/server/handlers/memory.d.ts +103 -934
  97. package/dist/server/handlers/memory.d.ts.map +1 -1
  98. package/dist/server/handlers/memory.js +1 -1
  99. package/dist/server/handlers/observability.cjs +8 -24
  100. package/dist/server/handlers/observability.d.ts +21 -128
  101. package/dist/server/handlers/observability.d.ts.map +1 -1
  102. package/dist/server/handlers/observability.js +1 -1
  103. package/dist/server/handlers/scores.cjs +13 -13
  104. package/dist/server/handlers/scores.d.ts +141 -110
  105. package/dist/server/handlers/scores.d.ts.map +1 -1
  106. package/dist/server/handlers/scores.js +1 -1
  107. package/dist/server/handlers/telemetry.cjs +20 -0
  108. package/dist/server/handlers/telemetry.cjs.map +1 -0
  109. package/dist/server/handlers/telemetry.d.ts +33 -0
  110. package/dist/server/handlers/telemetry.d.ts.map +1 -0
  111. package/dist/server/handlers/telemetry.js +3 -0
  112. package/dist/server/handlers/telemetry.js.map +1 -0
  113. package/dist/server/handlers/tools.cjs +11 -11
  114. package/dist/server/handlers/tools.d.ts +23 -69
  115. package/dist/server/handlers/tools.d.ts.map +1 -1
  116. package/dist/server/handlers/tools.js +1 -1
  117. package/dist/server/handlers/utils.cjs +3 -11
  118. package/dist/server/handlers/utils.d.ts +0 -5
  119. package/dist/server/handlers/utils.d.ts.map +1 -1
  120. package/dist/server/handlers/utils.js +1 -1
  121. package/dist/server/handlers/vector.cjs +7 -31
  122. package/dist/server/handlers/vector.d.ts +9 -93
  123. package/dist/server/handlers/vector.d.ts.map +1 -1
  124. package/dist/server/handlers/vector.js +1 -1
  125. package/dist/server/handlers/voice.cjs +9 -21
  126. package/dist/server/handlers/voice.d.ts +40 -81
  127. package/dist/server/handlers/voice.d.ts.map +1 -1
  128. package/dist/server/handlers/voice.js +1 -1
  129. package/dist/server/handlers/workflows.cjs +45 -37
  130. package/dist/server/handlers/workflows.d.ts +83 -597
  131. package/dist/server/handlers/workflows.d.ts.map +1 -1
  132. package/dist/server/handlers/workflows.js +1 -1
  133. package/dist/server/handlers.cjs +36 -26
  134. package/dist/server/handlers.d.ts +2 -0
  135. package/dist/server/handlers.d.ts.map +1 -1
  136. package/dist/server/handlers.js +13 -11
  137. package/dist/server/http-exception.d.ts +5 -0
  138. package/dist/server/http-exception.d.ts.map +1 -1
  139. package/dist/server/utils.d.ts +2 -3
  140. package/dist/server/utils.d.ts.map +1 -1
  141. package/package.json +15 -26
  142. package/dist/chunk-2NW6POYK.cjs +0 -89
  143. package/dist/chunk-2NW6POYK.cjs.map +0 -1
  144. package/dist/chunk-35NT4TMQ.cjs +0 -201
  145. package/dist/chunk-35NT4TMQ.cjs.map +0 -1
  146. package/dist/chunk-3R5EV3HV.js.map +0 -1
  147. package/dist/chunk-4ECGVOJZ.cjs.map +0 -1
  148. package/dist/chunk-5PONYNYP.cjs +0 -125
  149. package/dist/chunk-5PONYNYP.cjs.map +0 -1
  150. package/dist/chunk-5W4RPVTK.cjs +0 -49
  151. package/dist/chunk-5W4RPVTK.cjs.map +0 -1
  152. package/dist/chunk-64ITUOXI.cjs.map +0 -1
  153. package/dist/chunk-6BISSAIF.js.map +0 -1
  154. package/dist/chunk-6DTV6NEW.js +0 -116
  155. package/dist/chunk-6DTV6NEW.js.map +0 -1
  156. package/dist/chunk-AEO6IHLK.cjs +0 -368
  157. package/dist/chunk-AEO6IHLK.cjs.map +0 -1
  158. package/dist/chunk-ASZUOBKV.js +0 -310
  159. package/dist/chunk-ASZUOBKV.js.map +0 -1
  160. package/dist/chunk-ECIVTQ4E.js +0 -354
  161. package/dist/chunk-ECIVTQ4E.js.map +0 -1
  162. package/dist/chunk-FAQICBMH.js +0 -164
  163. package/dist/chunk-FAQICBMH.js.map +0 -1
  164. package/dist/chunk-FXDZLX2Y.js +0 -192
  165. package/dist/chunk-FXDZLX2Y.js.map +0 -1
  166. package/dist/chunk-G7BPNX2V.js.map +0 -1
  167. package/dist/chunk-I5VZ5SKG.js +0 -328
  168. package/dist/chunk-I5VZ5SKG.js.map +0 -1
  169. package/dist/chunk-ICANWSEW.js +0 -204
  170. package/dist/chunk-ICANWSEW.js.map +0 -1
  171. package/dist/chunk-KB5NSROG.cjs +0 -211
  172. package/dist/chunk-KB5NSROG.cjs.map +0 -1
  173. package/dist/chunk-MWQQRVQC.cjs +0 -259
  174. package/dist/chunk-MWQQRVQC.cjs.map +0 -1
  175. package/dist/chunk-NDFAQBQD.cjs +0 -792
  176. package/dist/chunk-NDFAQBQD.cjs.map +0 -1
  177. package/dist/chunk-PKRHEXX7.js +0 -74
  178. package/dist/chunk-PKRHEXX7.js.map +0 -1
  179. package/dist/chunk-QGWCNTG6.cjs +0 -797
  180. package/dist/chunk-QGWCNTG6.cjs.map +0 -1
  181. package/dist/chunk-R4M3BSUG.js +0 -226
  182. package/dist/chunk-R4M3BSUG.js.map +0 -1
  183. package/dist/chunk-TBVUN4XN.cjs.map +0 -1
  184. package/dist/chunk-UJNHKFBR.cjs +0 -167
  185. package/dist/chunk-UJNHKFBR.cjs.map +0 -1
  186. package/dist/chunk-UOFV2ZCI.js +0 -878
  187. package/dist/chunk-UOFV2ZCI.js.map +0 -1
  188. package/dist/chunk-UZ6CYAOG.cjs.map +0 -1
  189. package/dist/chunk-VQAT5HX6.js +0 -756
  190. package/dist/chunk-VQAT5HX6.js.map +0 -1
  191. package/dist/chunk-XWGAT2DA.js +0 -44
  192. package/dist/chunk-XWGAT2DA.js.map +0 -1
  193. package/dist/chunk-YJ3VDL3Z.cjs +0 -346
  194. package/dist/chunk-YJ3VDL3Z.cjs.map +0 -1
  195. package/dist/chunk-Z36N2OQA.cjs +0 -907
  196. package/dist/chunk-Z36N2OQA.cjs.map +0 -1
  197. package/dist/chunk-ZLRTFRL4.js +0 -773
  198. package/dist/chunk-ZLRTFRL4.js.map +0 -1
  199. package/dist/chunk-ZODCSH2W.cjs +0 -322
  200. package/dist/chunk-ZODCSH2W.cjs.map +0 -1
  201. package/dist/server/handlers/test-utils.cjs +0 -15
  202. package/dist/server/handlers/test-utils.cjs.map +0 -1
  203. package/dist/server/handlers/test-utils.d.ts +0 -6
  204. package/dist/server/handlers/test-utils.d.ts.map +0 -1
  205. package/dist/server/handlers/test-utils.js +0 -13
  206. package/dist/server/handlers/test-utils.js.map +0 -1
  207. package/dist/server/schemas/a2a.d.ts +0 -786
  208. package/dist/server/schemas/a2a.d.ts.map +0 -1
  209. package/dist/server/schemas/agent-builder.d.ts +0 -195
  210. package/dist/server/schemas/agent-builder.d.ts.map +0 -1
  211. package/dist/server/schemas/agents.d.ts +0 -1375
  212. package/dist/server/schemas/agents.d.ts.map +0 -1
  213. package/dist/server/schemas/common.d.ts +0 -165
  214. package/dist/server/schemas/common.d.ts.map +0 -1
  215. package/dist/server/schemas/logs.d.ts +0 -124
  216. package/dist/server/schemas/logs.d.ts.map +0 -1
  217. package/dist/server/schemas/memory.d.ts +0 -998
  218. package/dist/server/schemas/memory.d.ts.map +0 -1
  219. package/dist/server/schemas/observability.d.ts +0 -402
  220. package/dist/server/schemas/observability.d.ts.map +0 -1
  221. package/dist/server/schemas/scores.d.ts +0 -259
  222. package/dist/server/schemas/scores.d.ts.map +0 -1
  223. package/dist/server/schemas/vectors.d.ts +0 -107
  224. package/dist/server/schemas/vectors.d.ts.map +0 -1
  225. package/dist/server/schemas/workflows.d.ts +0 -505
  226. package/dist/server/schemas/workflows.d.ts.map +0 -1
  227. package/dist/server/server-adapter/index.cjs +0 -323
  228. package/dist/server/server-adapter/index.cjs.map +0 -1
  229. package/dist/server/server-adapter/index.d.ts +0 -52
  230. package/dist/server/server-adapter/index.d.ts.map +0 -1
  231. package/dist/server/server-adapter/index.js +0 -309
  232. package/dist/server/server-adapter/index.js.map +0 -1
  233. package/dist/server/server-adapter/openapi-utils.d.ts +0 -59
  234. package/dist/server/server-adapter/openapi-utils.d.ts.map +0 -1
  235. package/dist/server/server-adapter/routes/a2a.d.ts +0 -3
  236. package/dist/server/server-adapter/routes/a2a.d.ts.map +0 -1
  237. package/dist/server/server-adapter/routes/agent-builder.d.ts +0 -3
  238. package/dist/server/server-adapter/routes/agent-builder.d.ts.map +0 -1
  239. package/dist/server/server-adapter/routes/agents.d.ts +0 -3
  240. package/dist/server/server-adapter/routes/agents.d.ts.map +0 -1
  241. package/dist/server/server-adapter/routes/index.d.ts +0 -41
  242. package/dist/server/server-adapter/routes/index.d.ts.map +0 -1
  243. package/dist/server/server-adapter/routes/legacy.d.ts +0 -7
  244. package/dist/server/server-adapter/routes/legacy.d.ts.map +0 -1
  245. package/dist/server/server-adapter/routes/logs.d.ts +0 -3
  246. package/dist/server/server-adapter/routes/logs.d.ts.map +0 -1
  247. package/dist/server/server-adapter/routes/memory.d.ts +0 -3
  248. package/dist/server/server-adapter/routes/memory.d.ts.map +0 -1
  249. package/dist/server/server-adapter/routes/observability.d.ts +0 -3
  250. package/dist/server/server-adapter/routes/observability.d.ts.map +0 -1
  251. package/dist/server/server-adapter/routes/route-builder.d.ts +0 -52
  252. package/dist/server/server-adapter/routes/route-builder.d.ts.map +0 -1
  253. package/dist/server/server-adapter/routes/scorers.d.ts +0 -3
  254. package/dist/server/server-adapter/routes/scorers.d.ts.map +0 -1
  255. package/dist/server/server-adapter/routes/stream-types.d.ts +0 -10
  256. package/dist/server/server-adapter/routes/stream-types.d.ts.map +0 -1
  257. package/dist/server/server-adapter/routes/tools.d.ts +0 -3
  258. package/dist/server/server-adapter/routes/tools.d.ts.map +0 -1
  259. package/dist/server/server-adapter/routes/vectors.d.ts +0 -3
  260. package/dist/server/server-adapter/routes/vectors.d.ts.map +0 -1
  261. package/dist/server/server-adapter/routes/workflows.d.ts +0 -3
  262. package/dist/server/server-adapter/routes/workflows.d.ts.map +0 -1
package/README.md CHANGED
@@ -23,7 +23,7 @@ import { mastra } from './mastra-instance';
23
23
 
24
24
  const app = new Hono();
25
25
 
26
- app.get('/mastra/agents', ctx => handlers.agents.listAgentsHandler({ mastra, runtimeContext: ctx }));
26
+ app.get('/mastra/agents', ctx => handlers.agents.getAgentsHandler({ mastra, runtimeContext: ctx }));
27
27
  app.post('/mastra/agents/:id/generate', async ctx => {
28
28
  const body = await ctx.req.json();
29
29
  return handlers.agents.generateHandler({
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ var chunkRE4RPXT2_cjs = require('./chunk-RE4RPXT2.cjs');
4
+ var chunk7NADHFD2_cjs = require('./chunk-7NADHFD2.cjs');
5
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
6
+ var scoreTraces = require('@mastra/core/scores/scoreTraces');
7
+
8
+ // src/server/handlers/observability.ts
9
+ var observability_exports = {};
10
+ chunkO7I5CWRX_cjs.__export(observability_exports, {
11
+ getAITraceHandler: () => getAITraceHandler,
12
+ getAITracesPaginatedHandler: () => getAITracesPaginatedHandler,
13
+ getScoresBySpan: () => getScoresBySpan,
14
+ scoreTracesHandler: () => scoreTracesHandler
15
+ });
16
+ async function getAITraceHandler({ mastra, traceId }) {
17
+ try {
18
+ if (!traceId) {
19
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Trace ID is required" });
20
+ }
21
+ const storage = mastra.getStorage();
22
+ if (!storage) {
23
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
24
+ }
25
+ const trace = await storage.getAITrace(traceId);
26
+ if (!trace) {
27
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: `Trace with ID '${traceId}' not found` });
28
+ }
29
+ return trace;
30
+ } catch (error) {
31
+ chunkRE4RPXT2_cjs.handleError(error, "Error getting AI trace");
32
+ }
33
+ }
34
+ async function getAITracesPaginatedHandler({ mastra, body }) {
35
+ try {
36
+ const storage = mastra.getStorage();
37
+ if (!storage) {
38
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
39
+ }
40
+ if (!body) {
41
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Request body is required" });
42
+ }
43
+ const { filters, pagination } = body;
44
+ if (pagination?.page && pagination.page < 0) {
45
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Page must be a non-negative integer" });
46
+ }
47
+ if (pagination?.perPage && pagination.perPage < 0) {
48
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Per page must be a non-negative integer" });
49
+ }
50
+ if (pagination?.dateRange) {
51
+ const { start, end } = pagination.dateRange;
52
+ if (start && !(start instanceof Date)) {
53
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Invalid date format in date range" });
54
+ }
55
+ if (end && !(end instanceof Date)) {
56
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Invalid date format in date range" });
57
+ }
58
+ }
59
+ return storage.getAITracesPaginated({
60
+ pagination,
61
+ filters
62
+ });
63
+ } catch (error) {
64
+ chunkRE4RPXT2_cjs.handleError(error, "Error getting AI traces paginated");
65
+ }
66
+ }
67
+ async function scoreTracesHandler({ mastra, body }) {
68
+ try {
69
+ if (!body) {
70
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Request body is required" });
71
+ }
72
+ const { scorerName, targets } = body;
73
+ if (!scorerName) {
74
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Scorer Name is required" });
75
+ }
76
+ if (!targets || targets.length === 0) {
77
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "At least one target is required" });
78
+ }
79
+ const storage = mastra.getStorage();
80
+ if (!storage) {
81
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
82
+ }
83
+ const scorer = mastra.getScorerByName(scorerName);
84
+ if (!scorer) {
85
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: `Scorer '${scorerName}' not found` });
86
+ }
87
+ const logger = mastra.getLogger();
88
+ scoreTraces.scoreTraces({
89
+ scorerName,
90
+ targets,
91
+ mastra
92
+ }).catch((error) => {
93
+ logger?.error(`Background trace scoring failed: ${error.message}`, error);
94
+ });
95
+ return {
96
+ status: "success",
97
+ message: `Scoring started for ${targets.length} ${targets.length === 1 ? "trace" : "traces"}`,
98
+ traceCount: targets.length
99
+ };
100
+ } catch (error) {
101
+ chunkRE4RPXT2_cjs.handleError(error, "Error processing trace scoring");
102
+ }
103
+ }
104
+ async function getScoresBySpan({
105
+ mastra,
106
+ traceId,
107
+ spanId,
108
+ pagination
109
+ }) {
110
+ try {
111
+ const storage = mastra.getStorage();
112
+ if (!storage) {
113
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
114
+ }
115
+ if (!traceId || !spanId) {
116
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Trace ID and span ID are required" });
117
+ }
118
+ return await storage.getScoresBySpan({ traceId, spanId, pagination });
119
+ } catch (error) {
120
+ return chunkRE4RPXT2_cjs.handleError(error, "Error getting scores by span");
121
+ }
122
+ }
123
+
124
+ exports.getAITraceHandler = getAITraceHandler;
125
+ exports.getAITracesPaginatedHandler = getAITracesPaginatedHandler;
126
+ exports.getScoresBySpan = getScoresBySpan;
127
+ exports.observability_exports = observability_exports;
128
+ exports.scoreTracesHandler = scoreTracesHandler;
129
+ //# sourceMappingURL=chunk-2S4IMB6E.cjs.map
130
+ //# sourceMappingURL=chunk-2S4IMB6E.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/observability.ts"],"names":["__export","HTTPException","handleError","scoreTraces"],"mappings":"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","file":"chunk-2S4IMB6E.cjs","sourcesContent":["import type { AITracesPaginatedArg, StoragePagination } from '@mastra/core';\nimport { scoreTraces } from '@mastra/core/scores/scoreTraces';\nimport { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\nimport { handleError } from './error';\n\ninterface ObservabilityContext extends Context {\n traceId?: string;\n body?: AITracesPaginatedArg;\n}\n\ninterface ScoreTracesContext extends Context {\n body?: {\n scorerName: string;\n targets: Array<{\n traceId: string;\n spanId?: string;\n }>;\n };\n}\n\n/**\n * Get a complete AI trace by trace ID\n * Returns all spans in the trace with their parent-child relationships\n */\nexport async function getAITraceHandler({ mastra, traceId }: ObservabilityContext & { traceId: string }) {\n try {\n if (!traceId) {\n throw new HTTPException(400, { message: 'Trace ID is required' });\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n const trace = await storage.getAITrace(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 AI trace');\n }\n}\n\n/**\n * Get paginated AI traces with filtering and pagination\n * Returns only root spans (parent spans) for pagination, not child spans\n */\nexport async function getAITracesPaginatedHandler({ mastra, body }: ObservabilityContext) {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n if (!body) {\n throw new HTTPException(400, { message: 'Request body is required' });\n }\n\n const { filters, pagination } = body;\n\n if (pagination?.page && pagination.page < 0) {\n throw new HTTPException(400, { message: 'Page must be a non-negative integer' });\n }\n\n if (pagination?.perPage && pagination.perPage < 0) {\n throw new HTTPException(400, { message: 'Per page must be a non-negative integer' });\n }\n\n if (pagination?.dateRange) {\n const { start, end } = pagination.dateRange;\n\n if (start && !(start instanceof Date)) {\n throw new HTTPException(400, { message: 'Invalid date format in date range' });\n }\n\n if (end && !(end instanceof Date)) {\n throw new HTTPException(400, { message: 'Invalid date format in date range' });\n }\n }\n\n return storage.getAITracesPaginated({\n pagination,\n filters,\n });\n } catch (error) {\n handleError(error, 'Error getting AI traces paginated');\n }\n}\n\n/**\n * Score traces using a specified scorer\n * Fire-and-forget approach - returns immediately while scoring runs in background\n */\nexport async function scoreTracesHandler({ mastra, body }: ScoreTracesContext) {\n try {\n if (!body) {\n throw new HTTPException(400, { message: 'Request body is required' });\n }\n\n const { scorerName, targets } = body;\n\n if (!scorerName) {\n throw new HTTPException(400, { message: 'Scorer Name is required' });\n }\n\n if (!targets || targets.length === 0) {\n throw new HTTPException(400, { message: 'At least one target is required' });\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n const scorer = mastra.getScorerByName(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n const logger = mastra.getLogger();\n scoreTraces({\n scorerName,\n targets,\n mastra,\n }).catch(error => {\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n // Return immediate response\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\nexport async function getScoresBySpan({\n mastra,\n traceId,\n spanId,\n pagination,\n}: Context & { traceId: string; spanId: string; pagination: StoragePagination }) {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n if (!traceId || !spanId) {\n throw new HTTPException(400, { message: 'Trace ID and span ID are required' });\n }\n\n return await storage.getScoresBySpan({ traceId, spanId, pagination });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n}\n"]}
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var chunkG4PUALCE_cjs = require('./chunk-G4PUALCE.cjs');
4
+ var chunkRE4RPXT2_cjs = require('./chunk-RE4RPXT2.cjs');
5
+ var chunk7NADHFD2_cjs = require('./chunk-7NADHFD2.cjs');
6
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
7
+ var stream = require('stream');
8
+ var error = require('@mastra/core/error');
9
+
10
+ // src/server/handlers/voice.ts
11
+ var voice_exports = {};
12
+ chunkO7I5CWRX_cjs.__export(voice_exports, {
13
+ generateSpeechHandler: () => generateSpeechHandler,
14
+ getListenerHandler: () => getListenerHandler,
15
+ getSpeakersHandler: () => getSpeakersHandler,
16
+ transcribeSpeechHandler: () => transcribeSpeechHandler
17
+ });
18
+ async function getSpeakersHandler({ mastra, agentId, runtimeContext }) {
19
+ try {
20
+ if (!agentId) {
21
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
22
+ }
23
+ const agent = mastra.getAgent(agentId);
24
+ if (!agent) {
25
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
26
+ }
27
+ const voice = await agent.getVoice({ runtimeContext });
28
+ if (!voice) {
29
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
30
+ }
31
+ const speakers = await voice.getSpeakers();
32
+ return speakers;
33
+ } catch (error) {
34
+ return chunkRE4RPXT2_cjs.handleError(error, "Error getting speakers");
35
+ }
36
+ }
37
+ async function generateSpeechHandler({
38
+ mastra,
39
+ agentId,
40
+ body,
41
+ runtimeContext
42
+ }) {
43
+ try {
44
+ if (!agentId) {
45
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
46
+ }
47
+ chunkG4PUALCE_cjs.validateBody({
48
+ text: body?.text
49
+ });
50
+ const agent = mastra.getAgent(agentId);
51
+ if (!agent) {
52
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
53
+ }
54
+ const voice = await agent.getVoice({ runtimeContext });
55
+ if (!voice) {
56
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
57
+ }
58
+ const audioStream = await Promise.resolve().then(() => voice.speak(body.text, { speaker: body.speakerId })).catch((err) => {
59
+ if (err instanceof error.MastraError) {
60
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: err.message });
61
+ }
62
+ throw err;
63
+ });
64
+ if (!audioStream) {
65
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Failed to generate speech" });
66
+ }
67
+ return audioStream;
68
+ } catch (error) {
69
+ return chunkRE4RPXT2_cjs.handleError(error, "Error generating speech");
70
+ }
71
+ }
72
+ async function transcribeSpeechHandler({
73
+ mastra,
74
+ agentId,
75
+ body,
76
+ runtimeContext
77
+ }) {
78
+ try {
79
+ if (!agentId) {
80
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
81
+ }
82
+ if (!body?.audioData) {
83
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Audio data is required" });
84
+ }
85
+ const agent = mastra.getAgent(agentId);
86
+ if (!agent) {
87
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
88
+ }
89
+ const voice = await agent.getVoice({ runtimeContext });
90
+ if (!voice) {
91
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
92
+ }
93
+ const audioStream = new stream.Readable();
94
+ audioStream.push(body.audioData);
95
+ audioStream.push(null);
96
+ const text = await voice.listen(audioStream, body.options);
97
+ return { text };
98
+ } catch (error) {
99
+ return chunkRE4RPXT2_cjs.handleError(error, "Error transcribing speech");
100
+ }
101
+ }
102
+ async function getListenerHandler({ mastra, agentId, runtimeContext }) {
103
+ try {
104
+ if (!agentId) {
105
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
106
+ }
107
+ const agent = mastra.getAgent(agentId);
108
+ if (!agent) {
109
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
110
+ }
111
+ const voice = await agent.getVoice({ runtimeContext });
112
+ if (!voice) {
113
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
114
+ }
115
+ const listeners = await voice.getListener();
116
+ return listeners;
117
+ } catch (error) {
118
+ return chunkRE4RPXT2_cjs.handleError(error, "Error getting listeners");
119
+ }
120
+ }
121
+
122
+ exports.generateSpeechHandler = generateSpeechHandler;
123
+ exports.getListenerHandler = getListenerHandler;
124
+ exports.getSpeakersHandler = getSpeakersHandler;
125
+ exports.transcribeSpeechHandler = transcribeSpeechHandler;
126
+ exports.voice_exports = voice_exports;
127
+ //# sourceMappingURL=chunk-3SNGNFUJ.cjs.map
128
+ //# sourceMappingURL=chunk-3SNGNFUJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/voice.ts"],"names":["__export","HTTPException","handleError","validateBody","MastraError","Readable"],"mappings":"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","file":"chunk-3SNGNFUJ.cjs","sourcesContent":["import { Readable } from 'stream';\nimport type { Agent } from '@mastra/core/agent';\nimport { MastraError } from '@mastra/core/error';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\n\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\ninterface VoiceContext extends Context {\n agentId?: string;\n runtimeContext?: RuntimeContext;\n}\n\n/**\n * Get available speakers for an agent\n */\nexport async function getSpeakersHandler({ mastra, agentId, runtimeContext }: VoiceContext) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const speakers = await voice.getSpeakers();\n return speakers;\n } catch (error) {\n return handleError(error, 'Error getting speakers');\n }\n}\n\n/**\n * Generate speech from text\n */\nexport async function generateSpeechHandler({\n mastra,\n agentId,\n body,\n runtimeContext,\n}: VoiceContext & {\n body?: {\n text?: string;\n speakerId?: string;\n };\n}) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n validateBody({\n text: body?.text,\n });\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const audioStream = await Promise.resolve()\n .then(() => voice.speak(body!.text!, { speaker: body!.speakerId! }))\n .catch(err => {\n if (err instanceof MastraError) {\n throw new HTTPException(400, { message: err.message });\n }\n\n throw err;\n });\n\n if (!audioStream) {\n throw new HTTPException(500, { message: 'Failed to generate speech' });\n }\n\n return audioStream;\n } catch (error) {\n return handleError(error, 'Error generating speech');\n }\n}\n\n/**\n * Transcribe speech to text\n */\nexport async function transcribeSpeechHandler({\n mastra,\n agentId,\n body,\n runtimeContext,\n}: VoiceContext & {\n body?: {\n audioData?: Buffer;\n options?: Parameters<NonNullable<Agent['voice']>['listen']>[1];\n };\n}) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n if (!body?.audioData) {\n throw new HTTPException(400, { message: 'Audio data is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const audioStream = new Readable();\n audioStream.push(body.audioData);\n audioStream.push(null);\n\n const text = await voice.listen(audioStream, body.options);\n return { text };\n } catch (error) {\n return handleError(error, 'Error transcribing speech');\n }\n}\n\n/**\n * Get available listeners for an agent\n */\nexport async function getListenerHandler({ mastra, agentId, runtimeContext }: VoiceContext) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const listeners = await voice.getListener();\n return listeners;\n } catch (error) {\n return handleError(error, 'Error getting listeners');\n }\n}\n"]}