@mastra/server 1.20.0 → 1.21.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/{chunk-NCCK5NVX.cjs → chunk-22YG2467.cjs} +3 -3
  3. package/dist/{chunk-NCCK5NVX.cjs.map → chunk-22YG2467.cjs.map} +1 -1
  4. package/dist/chunk-3VVDBDS5.cjs +694 -0
  5. package/dist/chunk-3VVDBDS5.cjs.map +1 -0
  6. package/dist/{chunk-3W54ZNYP.cjs → chunk-5IKQNFW5.cjs} +3 -3
  7. package/dist/{chunk-3W54ZNYP.cjs.map → chunk-5IKQNFW5.cjs.map} +1 -1
  8. package/dist/chunk-6MFKRF4K.cjs +176 -0
  9. package/dist/chunk-6MFKRF4K.cjs.map +1 -0
  10. package/dist/{chunk-G726SOOJ.cjs → chunk-7G44ZSFS.cjs} +3 -3
  11. package/dist/{chunk-G726SOOJ.cjs.map → chunk-7G44ZSFS.cjs.map} +1 -1
  12. package/dist/{chunk-TYYGY4H4.cjs → chunk-7HOYCW7S.cjs} +3 -3
  13. package/dist/{chunk-TYYGY4H4.cjs.map → chunk-7HOYCW7S.cjs.map} +1 -1
  14. package/dist/{chunk-MH2WUZWZ.js → chunk-7KJ4NUEH.js} +3 -3
  15. package/dist/{chunk-MH2WUZWZ.js.map → chunk-7KJ4NUEH.js.map} +1 -1
  16. package/dist/chunk-AJYJ4H7P.js +438 -0
  17. package/dist/chunk-AJYJ4H7P.js.map +1 -0
  18. package/dist/{chunk-ULLR3RN3.cjs → chunk-AYD7DM5U.cjs} +3 -3
  19. package/dist/{chunk-ULLR3RN3.cjs.map → chunk-AYD7DM5U.cjs.map} +1 -1
  20. package/dist/chunk-B6HNPO67.cjs +195 -0
  21. package/dist/chunk-B6HNPO67.cjs.map +1 -0
  22. package/dist/chunk-BQXQZPYZ.js +189 -0
  23. package/dist/chunk-BQXQZPYZ.js.map +1 -0
  24. package/dist/{chunk-UE4FGLA3.cjs → chunk-EDP2Y6XD.cjs} +21 -21
  25. package/dist/{chunk-UE4FGLA3.cjs.map → chunk-EDP2Y6XD.cjs.map} +1 -1
  26. package/dist/chunk-FCCXLAOT.js +153 -0
  27. package/dist/chunk-FCCXLAOT.js.map +1 -0
  28. package/dist/chunk-FURWD3DL.cjs +180 -0
  29. package/dist/chunk-FURWD3DL.cjs.map +1 -0
  30. package/dist/{chunk-23U24RPR.cjs → chunk-G5IQN5ZG.cjs} +3 -3
  31. package/dist/{chunk-23U24RPR.cjs.map → chunk-G5IQN5ZG.cjs.map} +1 -1
  32. package/dist/{chunk-UFK5THVP.cjs → chunk-GANMD6GP.cjs} +3 -3
  33. package/dist/{chunk-UFK5THVP.cjs.map → chunk-GANMD6GP.cjs.map} +1 -1
  34. package/dist/chunk-GWPNQNXF.cjs +45 -0
  35. package/dist/chunk-GWPNQNXF.cjs.map +1 -0
  36. package/dist/{chunk-G2ZZKKQI.js → chunk-L7PDVJZD.js} +3 -3
  37. package/dist/{chunk-G2ZZKKQI.js.map → chunk-L7PDVJZD.js.map} +1 -1
  38. package/dist/{chunk-K6RNBFGH.js → chunk-M4BZ2B7D.js} +3 -3
  39. package/dist/{chunk-K6RNBFGH.js.map → chunk-M4BZ2B7D.js.map} +1 -1
  40. package/dist/{chunk-4D7KSU4X.js → chunk-MWRVCCZE.js} +3 -3
  41. package/dist/{chunk-4D7KSU4X.js.map → chunk-MWRVCCZE.js.map} +1 -1
  42. package/dist/{chunk-MKW43AJ3.js → chunk-NL7Y763D.js} +3 -3
  43. package/dist/{chunk-MKW43AJ3.js.map → chunk-NL7Y763D.js.map} +1 -1
  44. package/dist/{chunk-XDFOXO76.js → chunk-O7CC4J2Y.js} +6 -6
  45. package/dist/{chunk-XDFOXO76.js.map → chunk-O7CC4J2Y.js.map} +1 -1
  46. package/dist/chunk-OJ72T77G.cjs +452 -0
  47. package/dist/chunk-OJ72T77G.cjs.map +1 -0
  48. package/dist/{chunk-5YMAXL54.js → chunk-QSA443WV.js} +3 -3
  49. package/dist/{chunk-5YMAXL54.js.map → chunk-QSA443WV.js.map} +1 -1
  50. package/dist/{chunk-4NRXB7VI.js → chunk-SNGR4M5I.js} +3 -3
  51. package/dist/{chunk-4NRXB7VI.js.map → chunk-SNGR4M5I.js.map} +1 -1
  52. package/dist/{chunk-WPBRQTMO.js → chunk-VCA6BSYU.js} +3 -3
  53. package/dist/{chunk-WPBRQTMO.js.map → chunk-VCA6BSYU.js.map} +1 -1
  54. package/dist/chunk-VGHQI3X3.js +689 -0
  55. package/dist/chunk-VGHQI3X3.js.map +1 -0
  56. package/dist/{chunk-HHF4VF75.js → chunk-VHUB2TYN.js} +3 -3
  57. package/dist/{chunk-HHF4VF75.js.map → chunk-VHUB2TYN.js.map} +1 -1
  58. package/dist/chunk-VKIIGA2F.js +35 -0
  59. package/dist/chunk-VKIIGA2F.js.map +1 -0
  60. package/dist/{chunk-2QCTUEHS.cjs → chunk-VVWHCAF2.cjs} +3 -3
  61. package/dist/{chunk-2QCTUEHS.cjs.map → chunk-VVWHCAF2.cjs.map} +1 -1
  62. package/dist/{chunk-A5J2TY2W.cjs → chunk-XKKTZVZX.cjs} +3 -3
  63. package/dist/{chunk-A5J2TY2W.cjs.map → chunk-XKKTZVZX.cjs.map} +1 -1
  64. package/dist/chunk-ZA3NGM3L.js +174 -0
  65. package/dist/chunk-ZA3NGM3L.js.map +1 -0
  66. package/dist/docs/SKILL.md +1 -1
  67. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  68. package/dist/docs/references/reference-server-routes.md +22 -1
  69. package/dist/server/handlers/agent-builder.cjs +16 -16
  70. package/dist/server/handlers/agent-builder.js +1 -1
  71. package/dist/server/handlers/conversations.cjs +24 -0
  72. package/dist/server/handlers/conversations.cjs.map +1 -0
  73. package/dist/server/handlers/conversations.d.ts +153 -0
  74. package/dist/server/handlers/conversations.d.ts.map +1 -0
  75. package/dist/server/handlers/conversations.js +3 -0
  76. package/dist/server/handlers/conversations.js.map +1 -0
  77. package/dist/server/handlers/datasets.cjs +26 -26
  78. package/dist/server/handlers/datasets.js +1 -1
  79. package/dist/server/handlers/logs.cjs +4 -4
  80. package/dist/server/handlers/logs.js +1 -1
  81. package/dist/server/handlers/responses.adapter.cjs +60 -0
  82. package/dist/server/handlers/responses.adapter.cjs.map +1 -0
  83. package/dist/server/handlers/responses.adapter.d.ts +98 -0
  84. package/dist/server/handlers/responses.adapter.d.ts.map +1 -0
  85. package/dist/server/handlers/responses.adapter.js +3 -0
  86. package/dist/server/handlers/responses.adapter.js.map +1 -0
  87. package/dist/server/handlers/responses.cjs +20 -0
  88. package/dist/server/handlers/responses.cjs.map +1 -0
  89. package/dist/server/handlers/responses.d.ts +387 -0
  90. package/dist/server/handlers/responses.d.ts.map +1 -0
  91. package/dist/server/handlers/responses.js +3 -0
  92. package/dist/server/handlers/responses.js.map +1 -0
  93. package/dist/server/handlers/responses.storage.cjs +28 -0
  94. package/dist/server/handlers/responses.storage.cjs.map +1 -0
  95. package/dist/server/handlers/responses.storage.d.ts +97 -0
  96. package/dist/server/handlers/responses.storage.d.ts.map +1 -0
  97. package/dist/server/handlers/responses.storage.js +3 -0
  98. package/dist/server/handlers/responses.storage.js.map +1 -0
  99. package/dist/server/handlers/scores.cjs +7 -7
  100. package/dist/server/handlers/scores.js +1 -1
  101. package/dist/server/handlers/stored-agents.cjs +7 -7
  102. package/dist/server/handlers/stored-agents.js +1 -1
  103. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  104. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  105. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  106. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  107. package/dist/server/handlers/stored-scorers.cjs +6 -6
  108. package/dist/server/handlers/stored-scorers.js +1 -1
  109. package/dist/server/handlers/tools.cjs +6 -6
  110. package/dist/server/handlers/tools.js +1 -1
  111. package/dist/server/handlers/workflows.cjs +24 -24
  112. package/dist/server/handlers/workflows.js +1 -1
  113. package/dist/server/handlers.cjs +26 -16
  114. package/dist/server/handlers.d.ts +2 -0
  115. package/dist/server/handlers.d.ts.map +1 -1
  116. package/dist/server/handlers.js +8 -6
  117. package/dist/server/schemas/conversations.d.ts +74 -0
  118. package/dist/server/schemas/conversations.d.ts.map +1 -0
  119. package/dist/server/schemas/index.cjs +185 -91
  120. package/dist/server/schemas/index.d.ts +2 -0
  121. package/dist/server/schemas/index.d.ts.map +1 -1
  122. package/dist/server/schemas/index.js +5 -3
  123. package/dist/server/schemas/responses.d.ts +341 -0
  124. package/dist/server/schemas/responses.d.ts.map +1 -0
  125. package/dist/server/server-adapter/index.cjs +123 -108
  126. package/dist/server/server-adapter/index.cjs.map +1 -1
  127. package/dist/server/server-adapter/index.js +29 -14
  128. package/dist/server/server-adapter/index.js.map +1 -1
  129. package/dist/server/server-adapter/routes/conversations.d.ts +150 -0
  130. package/dist/server/server-adapter/routes/conversations.d.ts.map +1 -0
  131. package/dist/server/server-adapter/routes/index.d.ts +4 -0
  132. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  133. package/dist/server/server-adapter/routes/responses.d.ts +385 -0
  134. package/dist/server/server-adapter/routes/responses.d.ts.map +1 -0
  135. package/package.json +5 -5
@@ -0,0 +1,438 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { isProviderDefinedTool } from '@mastra/core/tools';
3
+ import { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';
4
+
5
+ // src/server/handlers/responses.adapter.ts
6
+ function normalizeMessageContent(content) {
7
+ if (typeof content === "string") {
8
+ return content;
9
+ }
10
+ return content.map((part) => part.text).join("");
11
+ }
12
+ function getMessageText(message) {
13
+ const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];
14
+ return parts.flatMap((part) => part.type === "text" ? [part.text] : []).filter((text) => typeof text === "string").join("");
15
+ }
16
+ function isRecord(value) {
17
+ return typeof value === "object" && value !== null && !Array.isArray(value);
18
+ }
19
+ function getMessageRole(message) {
20
+ return message.role ?? "";
21
+ }
22
+ function getToolKey(toolCallId, messageId, partIndex) {
23
+ return `${messageId}:${partIndex}`;
24
+ }
25
+ function normalizeToolParameters(schema) {
26
+ if (!isRecord(schema)) {
27
+ return schema;
28
+ }
29
+ if (isRecord(schema.json) && Object.keys(schema).length === 1) {
30
+ return schema.json;
31
+ }
32
+ return schema;
33
+ }
34
+ function mapMastraToolsToResponseTools(tools) {
35
+ if (!tools) {
36
+ return [];
37
+ }
38
+ return Object.values(tools).flatMap((tool) => {
39
+ if (!isRecord(tool)) {
40
+ return [];
41
+ }
42
+ const name = typeof tool.id === "string" ? tool.id : typeof tool.name === "string" ? tool.name : null;
43
+ if (!name) {
44
+ return [];
45
+ }
46
+ const description = typeof tool.description === "string" ? tool.description : void 0;
47
+ let parameters;
48
+ if (isProviderDefinedTool(tool)) {
49
+ const resolvedSchema = typeof tool.inputSchema === "function" ? tool.inputSchema() : tool.inputSchema;
50
+ parameters = isRecord(resolvedSchema) && "jsonSchema" in resolvedSchema ? normalizeToolParameters(resolvedSchema.jsonSchema) : void 0;
51
+ } else if ("inputSchema" in tool && tool.inputSchema) {
52
+ parameters = normalizeToolParameters(zodToJsonSchema(tool.inputSchema));
53
+ }
54
+ return [
55
+ {
56
+ type: "function",
57
+ name,
58
+ ...description ? { description } : {},
59
+ ...parameters !== void 0 ? { parameters: JSON.parse(JSON.stringify(parameters)) } : {}
60
+ }
61
+ ];
62
+ });
63
+ }
64
+ function stringifyToolPayload(value) {
65
+ if (typeof value === "string") {
66
+ return value;
67
+ }
68
+ return JSON.stringify(value ?? {});
69
+ }
70
+ function createOutputMessage({
71
+ messageId,
72
+ status,
73
+ text
74
+ }) {
75
+ const responseStatus = status === "completed" ? "completed" : "incomplete";
76
+ return {
77
+ id: messageId,
78
+ type: "message",
79
+ role: "assistant",
80
+ status: responseStatus,
81
+ content: [createOutputTextPart(text)]
82
+ };
83
+ }
84
+ function createConversationMessage({
85
+ messageId,
86
+ role,
87
+ text
88
+ }) {
89
+ return {
90
+ id: messageId,
91
+ type: "message",
92
+ role,
93
+ status: "completed",
94
+ content: [
95
+ role === "assistant" ? createOutputTextPart(text) : {
96
+ type: "input_text",
97
+ text
98
+ }
99
+ ]
100
+ };
101
+ }
102
+ function createFunctionCallItem({
103
+ itemId,
104
+ callId,
105
+ name,
106
+ args
107
+ }) {
108
+ return {
109
+ id: itemId,
110
+ type: "function_call",
111
+ call_id: callId,
112
+ name,
113
+ arguments: stringifyToolPayload(args),
114
+ status: "completed"
115
+ };
116
+ }
117
+ function createFunctionCallOutputItem({ itemId, callId, output }) {
118
+ return {
119
+ id: itemId,
120
+ type: "function_call_output",
121
+ call_id: callId,
122
+ output: stringifyToolPayload(output)
123
+ };
124
+ }
125
+ function collectToolResultCallIds(messages) {
126
+ const toolResultCallIds = /* @__PURE__ */ new Set();
127
+ for (const message of messages) {
128
+ const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];
129
+ for (const [partIndex, part] of parts.entries()) {
130
+ if (!isRecord(part) || part.type !== "tool-invocation" || !isRecord(part.toolInvocation)) {
131
+ continue;
132
+ }
133
+ const toolInvocation = part.toolInvocation;
134
+ const toolCallId = typeof toolInvocation.toolCallId === "string" ? toolInvocation.toolCallId : getToolKey(null, message.id, partIndex);
135
+ if (getMessageRole(message) === "tool" && toolInvocation.result !== void 0) {
136
+ toolResultCallIds.add(toolCallId);
137
+ }
138
+ }
139
+ }
140
+ return toolResultCallIds;
141
+ }
142
+ function mapMastraMessageToResponseToolItems({
143
+ message,
144
+ toolResultCallIds,
145
+ emittedCallIds,
146
+ emittedResultCallIds
147
+ }) {
148
+ const items = [];
149
+ const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];
150
+ for (const [partIndex, part] of parts.entries()) {
151
+ if (!isRecord(part) || part.type !== "tool-invocation" || !isRecord(part.toolInvocation)) {
152
+ continue;
153
+ }
154
+ const toolInvocation = part.toolInvocation;
155
+ const toolName = typeof toolInvocation.toolName === "string" ? toolInvocation.toolName : null;
156
+ const toolCallId = typeof toolInvocation.toolCallId === "string" ? toolInvocation.toolCallId : getToolKey(null, message.id, partIndex);
157
+ if (getMessageRole(message) === "assistant" && toolName && !emittedCallIds.has(toolCallId)) {
158
+ items.push(
159
+ createFunctionCallItem({
160
+ itemId: `${message.id}:${partIndex}:call`,
161
+ callId: toolCallId,
162
+ name: toolName,
163
+ args: toolInvocation.args
164
+ })
165
+ );
166
+ emittedCallIds.add(toolCallId);
167
+ }
168
+ if (toolInvocation.result !== void 0 && !emittedResultCallIds.has(toolCallId) && (getMessageRole(message) === "tool" || !toolResultCallIds.has(toolCallId))) {
169
+ items.push(
170
+ createFunctionCallOutputItem({
171
+ itemId: `${message.id}:${partIndex}:output`,
172
+ callId: toolCallId,
173
+ output: toolInvocation.result
174
+ })
175
+ );
176
+ emittedResultCallIds.add(toolCallId);
177
+ }
178
+ }
179
+ return items;
180
+ }
181
+ function mapMastraMessagesToConversationItems(messages) {
182
+ if (!messages.length) {
183
+ return [];
184
+ }
185
+ const items = [];
186
+ const toolResultCallIds = collectToolResultCallIds(messages);
187
+ const emittedCallIds = /* @__PURE__ */ new Set();
188
+ const emittedResultCallIds = /* @__PURE__ */ new Set();
189
+ for (const message of messages) {
190
+ items.push(
191
+ ...mapMastraMessageToResponseToolItems({
192
+ message,
193
+ toolResultCallIds,
194
+ emittedCallIds,
195
+ emittedResultCallIds
196
+ })
197
+ );
198
+ const role = getMessageRole(message);
199
+ const text = getMessageText(message);
200
+ if ((role === "user" || role === "system" || role === "assistant") && text) {
201
+ items.push(
202
+ createConversationMessage({
203
+ messageId: message.id,
204
+ role,
205
+ text
206
+ })
207
+ );
208
+ continue;
209
+ }
210
+ if (role === "assistant" && !text) {
211
+ const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];
212
+ const hasOnlyToolInvocations = parts.every(
213
+ (part) => isRecord(part) && part.type === "tool-invocation" && isRecord(part.toolInvocation)
214
+ );
215
+ if (hasOnlyToolInvocations) {
216
+ continue;
217
+ }
218
+ }
219
+ if (role === "tool") {
220
+ continue;
221
+ }
222
+ }
223
+ return items;
224
+ }
225
+ function mapMastraMessagesToResponseOutputItems({
226
+ messages,
227
+ outputMessageId,
228
+ status,
229
+ fallbackText
230
+ }) {
231
+ if (!messages?.length) {
232
+ return [createOutputMessage({ messageId: outputMessageId, status, text: fallbackText })];
233
+ }
234
+ const output = [];
235
+ const lastAssistantIndex = [...messages].map((message) => message.role).lastIndexOf("assistant");
236
+ const toolResultCallIds = collectToolResultCallIds(messages);
237
+ const emittedCallIds = /* @__PURE__ */ new Set();
238
+ const emittedResultCallIds = /* @__PURE__ */ new Set();
239
+ for (const [messageIndex, message] of messages.entries()) {
240
+ output.push(
241
+ ...mapMastraMessageToResponseToolItems({
242
+ message,
243
+ toolResultCallIds,
244
+ emittedCallIds,
245
+ emittedResultCallIds
246
+ })
247
+ );
248
+ const text = getMessageText(message);
249
+ if (getMessageRole(message) === "assistant" && text) {
250
+ output.push(
251
+ createOutputMessage({
252
+ messageId: messageIndex === lastAssistantIndex ? outputMessageId : message.id,
253
+ status,
254
+ text
255
+ })
256
+ );
257
+ }
258
+ }
259
+ if (!output.some((item) => item.type === "message") && fallbackText) {
260
+ output.push(createOutputMessage({ messageId: outputMessageId, status, text: fallbackText }));
261
+ }
262
+ return output;
263
+ }
264
+ function createMessageId() {
265
+ return `msg_${randomUUID()}`;
266
+ }
267
+ function mapResponseInputToExecutionMessages(input) {
268
+ if (typeof input === "string") {
269
+ return [{ role: "user", content: input }];
270
+ }
271
+ return input.map((message) => ({
272
+ role: message.role === "developer" ? "system" : message.role,
273
+ content: normalizeMessageContent(message.content)
274
+ }));
275
+ }
276
+ function toResponseUsage(usage) {
277
+ if (!usage) {
278
+ return null;
279
+ }
280
+ const inputTokens = usage.inputTokens ?? usage.promptTokens ?? 0;
281
+ const outputTokens = usage.outputTokens ?? usage.completionTokens ?? 0;
282
+ const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;
283
+ return {
284
+ input_tokens: inputTokens,
285
+ output_tokens: outputTokens,
286
+ total_tokens: totalTokens,
287
+ input_tokens_details: {
288
+ cached_tokens: 0
289
+ },
290
+ output_tokens_details: {
291
+ reasoning_tokens: 0
292
+ }
293
+ };
294
+ }
295
+ function toResponseStatus(finishReason) {
296
+ if (finishReason === "suspended" || finishReason === "error") {
297
+ return "incomplete";
298
+ }
299
+ return "completed";
300
+ }
301
+ function createOutputTextPart(text) {
302
+ return {
303
+ type: "output_text",
304
+ text,
305
+ annotations: [],
306
+ logprobs: []
307
+ };
308
+ }
309
+ function buildCompletedResponse({
310
+ responseId,
311
+ outputMessageId,
312
+ model,
313
+ createdAt,
314
+ completedAt,
315
+ status,
316
+ text,
317
+ usage,
318
+ instructions,
319
+ textConfig,
320
+ previousResponseId,
321
+ conversationId,
322
+ providerOptions,
323
+ tools,
324
+ store,
325
+ messages
326
+ }) {
327
+ return {
328
+ id: responseId,
329
+ object: "response",
330
+ created_at: createdAt,
331
+ completed_at: completedAt,
332
+ model,
333
+ status,
334
+ output: mapMastraMessagesToResponseOutputItems({
335
+ messages,
336
+ outputMessageId,
337
+ status,
338
+ fallbackText: text
339
+ }),
340
+ usage: toResponseUsage(usage),
341
+ error: null,
342
+ incomplete_details: null,
343
+ instructions: instructions ?? null,
344
+ text: textConfig ?? null,
345
+ previous_response_id: previousResponseId ?? null,
346
+ conversation_id: conversationId ?? null,
347
+ providerOptions,
348
+ tools,
349
+ store
350
+ };
351
+ }
352
+ function buildInProgressResponse({
353
+ responseId,
354
+ model,
355
+ createdAt,
356
+ instructions,
357
+ textConfig,
358
+ previousResponseId,
359
+ conversationId,
360
+ tools,
361
+ store
362
+ }) {
363
+ return {
364
+ id: responseId,
365
+ object: "response",
366
+ created_at: createdAt,
367
+ completed_at: null,
368
+ model,
369
+ status: "in_progress",
370
+ output: [],
371
+ usage: null,
372
+ error: null,
373
+ incomplete_details: null,
374
+ instructions: instructions ?? null,
375
+ text: textConfig ?? null,
376
+ previous_response_id: previousResponseId ?? null,
377
+ conversation_id: conversationId ?? null,
378
+ tools: tools ?? [],
379
+ store
380
+ };
381
+ }
382
+ function mapResponseTurnRecordToResponse(match) {
383
+ return {
384
+ id: match.message.id,
385
+ object: "response",
386
+ created_at: match.metadata.createdAt,
387
+ completed_at: match.metadata.completedAt,
388
+ model: match.metadata.model,
389
+ status: match.metadata.status,
390
+ output: mapMastraMessagesToResponseOutputItems({
391
+ messages: match.messages,
392
+ outputMessageId: match.message.id,
393
+ status: match.metadata.status,
394
+ fallbackText: getMessageText(match.message)
395
+ }),
396
+ usage: match.metadata.usage,
397
+ error: null,
398
+ incomplete_details: null,
399
+ instructions: match.metadata.instructions ?? null,
400
+ text: match.metadata.text ?? null,
401
+ previous_response_id: match.metadata.previousResponseId ?? null,
402
+ conversation_id: match.thread.id,
403
+ providerOptions: match.metadata.providerOptions,
404
+ tools: match.metadata.tools,
405
+ store: match.metadata.store
406
+ };
407
+ }
408
+ function formatSseEvent(event, data) {
409
+ return new TextEncoder().encode(`event: ${event}
410
+ data: ${JSON.stringify(data)}
411
+
412
+ `);
413
+ }
414
+ function extractTextDelta(value) {
415
+ if (typeof value !== "object" || value === null || !("type" in value)) {
416
+ return null;
417
+ }
418
+ const chunk = value;
419
+ switch (chunk.type) {
420
+ case "text-delta":
421
+ if (typeof chunk.payload?.text === "string") {
422
+ return chunk.payload.text;
423
+ }
424
+ if (typeof chunk.textDelta === "string") {
425
+ return chunk.textDelta;
426
+ }
427
+ if (typeof chunk.text === "string") {
428
+ return chunk.text;
429
+ }
430
+ return null;
431
+ default:
432
+ return null;
433
+ }
434
+ }
435
+
436
+ export { buildCompletedResponse, buildInProgressResponse, createMessageId, createOutputTextPart, extractTextDelta, formatSseEvent, mapMastraMessagesToConversationItems, mapMastraMessagesToResponseOutputItems, mapMastraToolsToResponseTools, mapResponseInputToExecutionMessages, mapResponseTurnRecordToResponse, toResponseStatus, toResponseUsage };
437
+ //# sourceMappingURL=chunk-AJYJ4H7P.js.map
438
+ //# sourceMappingURL=chunk-AJYJ4H7P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/responses.adapter.ts"],"names":[],"mappings":"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","file":"chunk-AJYJ4H7P.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { isProviderDefinedTool } from '@mastra/core/tools';\nimport { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';\nimport type {\n ConversationItem,\n ResponseInputMessage,\n ResponseObject,\n ResponseOutputItem,\n ResponseTextConfig,\n ResponseTool,\n} from '../schemas/responses';\nimport type { ProviderMetadataLike, ResponseTurnRecord, UsageLike } from './responses.storage';\n\nexport type ResponseExecutionMessage = {\n role: 'system' | 'user' | 'assistant';\n content: string;\n};\n\n/**\n * Flattens Responses API message content into the plain-text shape Mastra agent\n * execution expects today.\n */\nfunction normalizeMessageContent(content: ResponseInputMessage['content']): string {\n if (typeof content === 'string') {\n return content;\n }\n\n return content.map(part => part.text).join('');\n}\n\n/**\n * Extracts the human-readable text represented by a persisted Mastra message.\n */\nfunction getMessageText(message: MastraDBMessage): string {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n return parts\n .flatMap(part => (part.type === 'text' ? [part.text] : []))\n .filter((text): text is string => typeof text === 'string')\n .join('');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getMessageRole(message: MastraDBMessage): string {\n return (message as { role?: string }).role ?? '';\n}\n\n/**\n * Creates a stable fallback key for tool items when a tool call id is missing\n * from the stored message payload.\n */\nfunction getToolKey(toolCallId: string | null, messageId: string, partIndex: number) {\n return toolCallId ?? `${messageId}:${partIndex}`;\n}\n\n/**\n * Normalizes tool parameter schemas so the Responses API always exposes the\n * plain JSON Schema object regardless of whether the source tool came from a\n * provider-defined tool or a Mastra/Zod tool definition.\n */\nfunction normalizeToolParameters(schema: unknown): unknown {\n if (!isRecord(schema)) {\n return schema;\n }\n\n if (isRecord(schema.json) && Object.keys(schema).length === 1) {\n return schema.json;\n }\n\n return schema;\n}\n\n/**\n * Maps configured Mastra tools into Responses API tool definitions.\n */\nexport function mapMastraToolsToResponseTools(tools: Record<string, unknown> | undefined): ResponseTool[] {\n if (!tools) {\n return [];\n }\n\n return Object.values(tools).flatMap(tool => {\n if (!isRecord(tool)) {\n return [];\n }\n\n const name = typeof tool.id === 'string' ? tool.id : typeof tool.name === 'string' ? tool.name : null;\n if (!name) {\n return [];\n }\n\n const description = typeof tool.description === 'string' ? tool.description : undefined;\n\n let parameters: unknown;\n if (isProviderDefinedTool(tool)) {\n const resolvedSchema = typeof tool.inputSchema === 'function' ? tool.inputSchema() : tool.inputSchema;\n parameters =\n isRecord(resolvedSchema) && 'jsonSchema' in resolvedSchema\n ? normalizeToolParameters(resolvedSchema.jsonSchema)\n : undefined;\n } else if ('inputSchema' in tool && tool.inputSchema) {\n parameters = normalizeToolParameters(zodToJsonSchema(tool.inputSchema as never));\n }\n\n return [\n {\n type: 'function',\n name,\n ...(description ? { description } : {}),\n ...(parameters !== undefined ? { parameters: JSON.parse(JSON.stringify(parameters)) } : {}),\n } satisfies ResponseTool,\n ];\n });\n}\n\nfunction stringifyToolPayload(value: unknown) {\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value ?? {});\n}\n\nfunction createOutputMessage({\n messageId,\n status,\n text,\n}: {\n messageId: string;\n status: ResponseObject['status'];\n text: string;\n}) {\n const responseStatus: Extract<ResponseObject['output'][number], { type: 'message' }>['status'] =\n status === 'completed' ? 'completed' : 'incomplete';\n\n return {\n id: messageId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: responseStatus,\n content: [createOutputTextPart(text)],\n };\n}\n\nfunction createConversationMessage({\n messageId,\n role,\n text,\n}: {\n messageId: string;\n role: 'system' | 'user' | 'assistant';\n text: string;\n}) {\n return {\n id: messageId,\n type: 'message' as const,\n role,\n status: 'completed' as const,\n content: [\n role === 'assistant'\n ? createOutputTextPart(text)\n : {\n type: 'input_text' as const,\n text,\n },\n ],\n };\n}\n\nfunction createFunctionCallItem({\n itemId,\n callId,\n name,\n args,\n}: {\n itemId: string;\n callId: string;\n name: string;\n args: unknown;\n}) {\n return {\n id: itemId,\n type: 'function_call' as const,\n call_id: callId,\n name,\n arguments: stringifyToolPayload(args),\n status: 'completed' as const,\n };\n}\n\nfunction createFunctionCallOutputItem({ itemId, callId, output }: { itemId: string; callId: string; output: unknown }) {\n return {\n id: itemId,\n type: 'function_call_output' as const,\n call_id: callId,\n output: stringifyToolPayload(output),\n };\n}\n\ntype ResponseToolItem = Extract<ConversationItem, { type: 'function_call' | 'function_call_output' }>;\n\n/**\n * Records which tool call ids already have dedicated tool-result messages so we can\n * avoid duplicating `function_call_output` items when assistant messages echo the\n * result inline.\n */\nfunction collectToolResultCallIds(messages: MastraDBMessage[]) {\n const toolResultCallIds = new Set<string>();\n\n for (const message of messages) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'tool' && toolInvocation.result !== undefined) {\n toolResultCallIds.add(toolCallId);\n }\n }\n }\n\n return toolResultCallIds;\n}\n\n/**\n * Maps one persisted Mastra message into the tool-related Responses items that\n * it contributes to the conversation timeline.\n */\nfunction mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n}: {\n message: MastraDBMessage;\n toolResultCallIds: Set<string>;\n emittedCallIds: Set<string>;\n emittedResultCallIds: Set<string>;\n}): ResponseToolItem[] {\n const items: ResponseToolItem[] = [];\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolName = typeof toolInvocation.toolName === 'string' ? toolInvocation.toolName : null;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'assistant' && toolName && !emittedCallIds.has(toolCallId)) {\n items.push(\n createFunctionCallItem({\n itemId: `${message.id}:${partIndex}:call`,\n callId: toolCallId,\n name: toolName,\n args: toolInvocation.args,\n }),\n );\n emittedCallIds.add(toolCallId);\n }\n\n if (\n toolInvocation.result !== undefined &&\n !emittedResultCallIds.has(toolCallId) &&\n (getMessageRole(message) === 'tool' || !toolResultCallIds.has(toolCallId))\n ) {\n items.push(\n createFunctionCallOutputItem({\n itemId: `${message.id}:${partIndex}:output`,\n callId: toolCallId,\n output: toolInvocation.result,\n }),\n );\n emittedResultCallIds.add(toolCallId);\n }\n }\n\n return items;\n}\n\n/**\n * Maps Mastra thread messages into OpenAI-style conversation items.\n */\nexport function mapMastraMessagesToConversationItems(messages: MastraDBMessage[]): ConversationItem[] {\n if (!messages.length) {\n return [];\n }\n\n const items: ConversationItem[] = [];\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n\n for (const message of messages) {\n items.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const role = getMessageRole(message);\n const text = getMessageText(message);\n\n if ((role === 'user' || role === 'system' || role === 'assistant') && text) {\n items.push(\n createConversationMessage({\n messageId: message.id,\n role,\n text,\n }),\n );\n continue;\n }\n\n if (role === 'assistant' && !text) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n const hasOnlyToolInvocations = parts.every(\n part => isRecord(part) && part.type === 'tool-invocation' && isRecord(part.toolInvocation),\n );\n\n if (hasOnlyToolInvocations) {\n continue;\n }\n }\n\n if (role === 'tool') {\n continue;\n }\n }\n\n return items;\n}\n\n/**\n * Maps the stored Mastra messages for one response turn back into OpenAI-style\n * `response.output` items, preserving tool/message ordering from the thread.\n */\nexport function mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText,\n}: {\n messages: MastraDBMessage[] | undefined;\n outputMessageId: string;\n status: ResponseObject['status'];\n fallbackText: string;\n}): ResponseOutputItem[] {\n if (!messages?.length) {\n return [createOutputMessage({ messageId: outputMessageId, status, text: fallbackText })];\n }\n\n const output: ResponseOutputItem[] = [];\n const lastAssistantIndex = [...messages].map(message => message.role).lastIndexOf('assistant');\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n\n for (const [messageIndex, message] of messages.entries()) {\n output.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const text = getMessageText(message);\n if (getMessageRole(message) === 'assistant' && text) {\n output.push(\n createOutputMessage({\n messageId: messageIndex === lastAssistantIndex ? outputMessageId : message.id,\n status,\n text,\n }),\n );\n }\n }\n\n if (!output.some(item => item.type === 'message') && fallbackText) {\n output.push(createOutputMessage({ messageId: outputMessageId, status, text: fallbackText }));\n }\n\n return output;\n}\n\n/**\n * Creates a stable assistant-message-backed response identifier.\n */\nexport function createMessageId() {\n return `msg_${randomUUID()}`;\n}\n\n/**\n * Maps Responses API input into the plain execution messages Mastra agents expect.\n */\nexport function mapResponseInputToExecutionMessages(\n input: ResponseInputMessage[] | string,\n): ResponseExecutionMessage[] {\n if (typeof input === 'string') {\n return [{ role: 'user', content: input }];\n }\n\n return input.map(message => ({\n role: message.role === 'developer' ? 'system' : message.role,\n content: normalizeMessageContent(message.content),\n }));\n}\n\n/**\n * Converts usage details to the Responses API usage shape.\n */\nexport function toResponseUsage(usage: UsageLike): ResponseObject['usage'] {\n if (!usage) {\n return null;\n }\n\n const inputTokens = usage.inputTokens ?? usage.promptTokens ?? 0;\n const outputTokens = usage.outputTokens ?? usage.completionTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n\n return {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: totalTokens,\n input_tokens_details: {\n cached_tokens: 0,\n },\n output_tokens_details: {\n reasoning_tokens: 0,\n },\n };\n}\n\n/**\n * Maps model finish reasons onto the Responses API status field.\n */\nexport function toResponseStatus(finishReason: string | undefined): ResponseObject['status'] {\n if (finishReason === 'suspended' || finishReason === 'error') {\n return 'incomplete';\n }\n\n return 'completed';\n}\n\n/**\n * Formats a text response part using the OpenAI-compatible Responses shape.\n */\nexport function createOutputTextPart(text: string) {\n return {\n type: 'output_text' as const,\n text,\n annotations: [] as unknown[],\n logprobs: [] as unknown[],\n };\n}\n\n/**\n * Builds a completed Responses API object from Mastra execution state.\n */\nexport function buildCompletedResponse({\n responseId,\n outputMessageId,\n model,\n createdAt,\n completedAt,\n status,\n text,\n usage,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n providerOptions,\n tools,\n store,\n messages,\n}: {\n responseId: string;\n outputMessageId: string;\n model: string;\n createdAt: number;\n completedAt: number | null;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n providerOptions?: ProviderMetadataLike;\n tools: ResponseTool[];\n store: boolean;\n messages?: MastraDBMessage[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: completedAt,\n model,\n status,\n output: mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText: text,\n }),\n usage: toResponseUsage(usage),\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n providerOptions,\n tools,\n store,\n };\n}\n\n/**\n * Builds the initial in-progress Responses API object emitted at stream start.\n */\nexport function buildInProgressResponse({\n responseId,\n model,\n createdAt,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n tools,\n store,\n}: {\n responseId: string;\n model: string;\n createdAt: number;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n store: boolean;\n tools?: ResponseTool[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: null,\n model,\n status: 'in_progress',\n output: [],\n usage: null,\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n tools: tools ?? [],\n store,\n };\n}\n\n/**\n * Reconstructs a Responses API object from a stored response-turn record.\n */\nexport function mapResponseTurnRecordToResponse(match: ResponseTurnRecord): ResponseObject {\n return {\n id: match.message.id,\n object: 'response',\n created_at: match.metadata.createdAt,\n completed_at: match.metadata.completedAt,\n model: match.metadata.model,\n status: match.metadata.status,\n output: mapMastraMessagesToResponseOutputItems({\n messages: match.messages,\n outputMessageId: match.message.id,\n status: match.metadata.status,\n fallbackText: getMessageText(match.message),\n }),\n usage: match.metadata.usage,\n error: null,\n incomplete_details: null,\n instructions: match.metadata.instructions ?? null,\n text: match.metadata.text ?? null,\n previous_response_id: match.metadata.previousResponseId ?? null,\n conversation_id: match.thread.id,\n providerOptions: match.metadata.providerOptions,\n tools: match.metadata.tools,\n store: match.metadata.store,\n };\n}\n\n/**\n * Formats an SSE event line for the streaming Responses route.\n */\nexport function formatSseEvent(event: string, data: unknown): Uint8Array {\n return new TextEncoder().encode(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n}\n\n/**\n * Extracts text deltas from the Mastra stream chunk variants used by the route.\n */\nexport function extractTextDelta(value: unknown): string | null {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return null;\n }\n\n const chunk = value as { type: string; payload?: { text?: string }; textDelta?: string; text?: string };\n\n switch (chunk.type) {\n case 'text-delta':\n if (typeof chunk.payload?.text === 'string') {\n return chunk.payload.text;\n }\n\n if (typeof chunk.textDelta === 'string') {\n return chunk.textDelta;\n }\n\n if (typeof chunk.text === 'string') {\n return chunk.text;\n }\n\n return null;\n default:\n return null;\n }\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  var chunkE63CFDUE_cjs = require('./chunk-E63CFDUE.cjs');
4
4
  var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
5
5
  var chunkWC4OPIB4_cjs = require('./chunk-WC4OPIB4.cjs');
6
- var chunkEES2ZZGL_cjs = require('./chunk-EES2ZZGL.cjs');
7
6
  var chunkB34S64RC_cjs = require('./chunk-B34S64RC.cjs');
7
+ var chunkEES2ZZGL_cjs = require('./chunk-EES2ZZGL.cjs');
8
8
  var chunkEGSCXVMR_cjs = require('./chunk-EGSCXVMR.cjs');
9
9
  var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
10
10
 
@@ -277,5 +277,5 @@ exports.DELETE_STORED_SCORER_ROUTE = DELETE_STORED_SCORER_ROUTE;
277
277
  exports.GET_STORED_SCORER_ROUTE = GET_STORED_SCORER_ROUTE;
278
278
  exports.LIST_STORED_SCORERS_ROUTE = LIST_STORED_SCORERS_ROUTE;
279
279
  exports.UPDATE_STORED_SCORER_ROUTE = UPDATE_STORED_SCORER_ROUTE;
280
- //# sourceMappingURL=chunk-ULLR3RN3.cjs.map
281
- //# sourceMappingURL=chunk-ULLR3RN3.cjs.map
280
+ //# sourceMappingURL=chunk-AYD7DM5U.cjs.map
281
+ //# sourceMappingURL=chunk-AYD7DM5U.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":["createRoute","listStoredScorersQuerySchema","listStoredScorersResponseSchema","HTTPException","handleError","storedScorerIdPathParams","statusQuerySchema","getStoredScorerResponseSchema","createStoredScorerBodySchema","createStoredScorerResponseSchema","toSlug","updateStoredScorerBodySchema","updateStoredScorerResponseSchema","handleAutoVersioning","deleteStoredScorerResponseSchema"],"mappings":";;;;;;;;;;;AAoBA,IAAM,6BAAA,GAAgC;AAAA,EACpC,MAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AASO,IAAM,4BAA4BA,6BAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkBC,8CAAA;AAAA,EAClB,cAAA,EAAgBC,iDAAA;AAAA,EAChB,OAAA,EAAS,gCAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAS,KAAM;AACjF,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAIC,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,YAAA,CAAa;AAAA,QAC5C,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,0BAA0BJ,6BAAA,CAAY;AAAA,EACjD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBK,0CAAA;AAAA,EACjB,gBAAA,EAAkBC,mCAAA;AAAA,EAClB,cAAA,EAAgBC,+CAAA;AAAA,EAChB,OAAA,EAAS,oCAAA;AAAA,EACT,WAAA,EACE,4MAAA;AAAA,EACF,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAO,KAAM;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAIJ,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAEA,MAAA,MAAM,SAAS,MAAM,WAAA,CAAY,gBAAgB,cAAA,EAAgB,EAAE,QAAQ,CAAA;AAE3E,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,wCAAwC,CAAA;AAAA,IACpE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6BJ,6BAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAYQ,8CAAA;AAAA,EACZ,cAAA,EAAgBC,kDAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,4EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,EAAA,EAAI,UAAA;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAIN,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,EAAA,GAAK,UAAA,IAAcO,wBAAA,CAAO,IAAI,CAAA;AAEpC,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAIP,gCAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,0BAAA,EAA6B,EAAE,mBAAmB,CAAA;AAAA,MAC5F;AAEA,MAAA,MAAM,YAAY,MAAA,CAAO;AAAA,QACvB,gBAAA,EAAkB;AAAA,UAChB,EAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA;AAAA,UACA,YAAA;AAAA,UACA,UAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AAID,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,eAAA,CAAgB,IAAI,EAAE,MAAA,EAAQ,SAAS,CAAA;AAC1E,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,+CAA+C,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6BJ,6BAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBK,0CAAA;AAAA,EACjB,UAAA,EAAYM,8CAAA;AAAA,EACZ,cAAA,EAAgBC,kDAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,cAAA;AAAA;AAAA,IAEA,QAAA;AAAA,IACA,QAAA;AAAA;AAAA,IAEA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAIT,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,MAAA,CAAO;AAAA,QAC7C,EAAA,EAAI,cAAA;AAAA,QACJ,QAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAGD,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,IAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,oBAAA,GAAuB,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,QAAQ,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAS,CAAC,CAAA;AAKhH,MAAA,MAAMU,sCAAA;AAAA,QACJ,WAAA;AAAA,QACA,cAAA;AAAA,QACA,oBAAA;AAAA,QACA,6BAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,WAAW,cAAc,CAAA;AAAA,MACzC;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,eAAA,CAAgB,gBAAgB,EAAE,MAAA,EAAQ,SAAS,CAAA;AACtF,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIV,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,+CAA+C,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6BJ,6BAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBK,0CAAA;AAAA,EACjB,cAAA,EAAgBS,kDAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,mEAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,gBAAe,KAAM;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAIX,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AAEA,MAAA,MAAM,WAAA,CAAY,OAAO,cAAc,CAAA;AAGvC,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,MAAA,CAAO,UAAA,CAAW,cAAc,CAAA;AAEpD,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,kBAAA,EAAqB,cAAc,CAAA,qBAAA,CAAA,EAAwB;AAAA,IAC9F,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC","file":"chunk-ULLR3RN3.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":["createRoute","listStoredScorersQuerySchema","listStoredScorersResponseSchema","HTTPException","handleError","storedScorerIdPathParams","statusQuerySchema","getStoredScorerResponseSchema","createStoredScorerBodySchema","createStoredScorerResponseSchema","toSlug","updateStoredScorerBodySchema","updateStoredScorerResponseSchema","handleAutoVersioning","deleteStoredScorerResponseSchema"],"mappings":"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","file":"chunk-AYD7DM5U.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId }) => {\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 scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}