@mastra/server 0.13.2-alpha.0 → 0.13.2-alpha.2

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 (39) hide show
  1. package/dist/{chunk-VOY6MGKA.js → chunk-43YZEULM.js} +22 -4
  2. package/dist/chunk-43YZEULM.js.map +1 -0
  3. package/dist/{chunk-TRWPUPGD.js → chunk-JNWFG7JP.js} +106 -136
  4. package/dist/chunk-JNWFG7JP.js.map +1 -0
  5. package/dist/{chunk-GASWM5HJ.cjs → chunk-KXNFZXLG.cjs} +106 -136
  6. package/dist/chunk-KXNFZXLG.cjs.map +1 -0
  7. package/dist/{chunk-TXAQU2XN.js → chunk-L7YG7WQH.js} +3 -3
  8. package/dist/chunk-L7YG7WQH.js.map +1 -0
  9. package/dist/{chunk-VIGPWTDA.cjs → chunk-RQQNZZAI.cjs} +3 -3
  10. package/dist/chunk-RQQNZZAI.cjs.map +1 -0
  11. package/dist/{chunk-2XIJW7SV.cjs → chunk-RXHLHMI3.cjs} +22 -3
  12. package/dist/chunk-RXHLHMI3.cjs.map +1 -0
  13. package/dist/server/a2a/store.cjs +25 -0
  14. package/dist/server/a2a/store.cjs.map +1 -0
  15. package/dist/server/a2a/store.d.ts +3 -3
  16. package/dist/server/a2a/store.d.ts.map +1 -1
  17. package/dist/server/a2a/store.js +23 -0
  18. package/dist/server/a2a/store.js.map +1 -0
  19. package/dist/server/a2a/tasks.d.ts +6 -6
  20. package/dist/server/a2a/tasks.d.ts.map +1 -1
  21. package/dist/server/handlers/a2a.cjs +11 -11
  22. package/dist/server/handlers/a2a.d.ts +16 -14
  23. package/dist/server/handlers/a2a.d.ts.map +1 -1
  24. package/dist/server/handlers/a2a.js +1 -1
  25. package/dist/server/handlers/agents.cjs +12 -8
  26. package/dist/server/handlers/agents.d.ts +9 -1
  27. package/dist/server/handlers/agents.d.ts.map +1 -1
  28. package/dist/server/handlers/agents.js +1 -1
  29. package/dist/server/handlers/scores.cjs +7 -7
  30. package/dist/server/handlers/scores.js +1 -1
  31. package/dist/server/handlers.cjs +16 -16
  32. package/dist/server/handlers.js +5 -5
  33. package/package.json +13 -3
  34. package/dist/chunk-2XIJW7SV.cjs.map +0 -1
  35. package/dist/chunk-GASWM5HJ.cjs.map +0 -1
  36. package/dist/chunk-TRWPUPGD.js.map +0 -1
  37. package/dist/chunk-TXAQU2XN.js.map +0 -1
  38. package/dist/chunk-VIGPWTDA.cjs.map +0 -1
  39. package/dist/chunk-VOY6MGKA.js.map +0 -1
@@ -9,19 +9,19 @@ var a2a_exports = {};
9
9
  chunkQ7SFCCGT_cjs.__export(a2a_exports, {
10
10
  getAgentCardByIdHandler: () => getAgentCardByIdHandler,
11
11
  getAgentExecutionHandler: () => getAgentExecutionHandler,
12
+ handleMessageSend: () => handleMessageSend,
13
+ handleMessageStream: () => handleMessageStream,
12
14
  handleTaskCancel: () => handleTaskCancel,
13
- handleTaskGet: () => handleTaskGet,
14
- handleTaskSend: () => handleTaskSend,
15
- handleTaskSendSubscribe: () => handleTaskSendSubscribe
15
+ handleTaskGet: () => handleTaskGet
16
16
  });
17
17
  function normalizeError(error, reqId, taskId, logger) {
18
18
  let a2aError;
19
- if (error instanceof a2a.A2AError) {
19
+ if (error instanceof a2a.MastraA2AError) {
20
20
  a2aError = error;
21
21
  } else if (error instanceof Error) {
22
- a2aError = a2a.A2AError.internalError(error.message, { stack: error.stack });
22
+ a2aError = a2a.MastraA2AError.internalError(error.message, { stack: error.stack });
23
23
  } else {
24
- a2aError = a2a.A2AError.internalError("An unknown error occurred.", error);
24
+ a2aError = a2a.MastraA2AError.internalError("An unknown error occurred.", error);
25
25
  }
26
26
  if (taskId && !a2aError.taskId) {
27
27
  a2aError.taskId = taskId;
@@ -39,7 +39,7 @@ function createErrorResponse(id, error) {
39
39
  }
40
40
  function createSuccessResponse(id, result) {
41
41
  if (!id) {
42
- throw a2a.A2AError.internalError("Cannot create success response for null ID.");
42
+ throw a2a.MastraA2AError.internalError("Cannot create success response for null ID.");
43
43
  }
44
44
  return {
45
45
  jsonrpc: "2.0",
@@ -54,7 +54,7 @@ function convertToCoreMessage(message) {
54
54
  };
55
55
  }
56
56
  function convertToCoreMessagePart(part) {
57
- switch (part.type) {
57
+ switch (part.kind) {
58
58
  case "text":
59
59
  return {
60
60
  type: "text",
@@ -63,7 +63,7 @@ function convertToCoreMessagePart(part) {
63
63
  case "file":
64
64
  return {
65
65
  type: "file",
66
- data: new URL(part.file.uri),
66
+ data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
67
67
  mimeType: part.file.mimeType
68
68
  };
69
69
  case "data":
@@ -71,39 +71,15 @@ function convertToCoreMessagePart(part) {
71
71
  }
72
72
  }
73
73
 
74
- // src/server/a2a/store.ts
75
- var InMemoryTaskStore = class {
76
- store = /* @__PURE__ */ new Map();
77
- activeCancellations = /* @__PURE__ */ new Set();
78
- async load({ agentId, taskId }) {
79
- const entry = this.store.get(`${agentId}-${taskId}`);
80
- if (!entry) {
81
- return null;
82
- }
83
- return { task: { ...entry.task }, history: [...entry.history] };
84
- }
85
- async save({ agentId, data }) {
86
- const key = `${agentId}-${data.task.id}`;
87
- if (!data.task.id) {
88
- throw new Error("Task ID is required");
89
- }
90
- this.store.set(key, {
91
- task: { ...data.task },
92
- history: [...data.history]
93
- });
94
- }
95
- };
96
-
97
74
  // src/server/a2a/tasks.ts
98
75
  function isTaskStatusUpdate(update) {
99
76
  return "state" in update && !("parts" in update);
100
77
  }
101
78
  function isArtifactUpdate(update) {
102
- return "parts" in update;
79
+ return "kind" in update && update.kind === "artifact-update";
103
80
  }
104
- function applyUpdateToTaskAndHistory(current, update) {
105
- let newTask = structuredClone(current.task);
106
- let newHistory = structuredClone(current.history);
81
+ function applyUpdateToTask(current, update) {
82
+ let newTask = structuredClone(current);
107
83
  if (isTaskStatusUpdate(update)) {
108
84
  newTask.status = {
109
85
  ...newTask.status,
@@ -112,58 +88,42 @@ function applyUpdateToTaskAndHistory(current, update) {
112
88
  // Apply updates
113
89
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
114
90
  };
115
- if (update.message?.role === "agent") {
116
- newHistory.push(update.message);
117
- }
118
91
  } else if (isArtifactUpdate(update)) {
119
92
  if (!newTask.artifacts) {
120
93
  newTask.artifacts = [];
121
94
  } else {
122
95
  newTask.artifacts = [...newTask.artifacts];
123
96
  }
124
- const existingIndex = update.index ?? -1;
125
- let replaced = false;
126
- if (existingIndex >= 0 && existingIndex < newTask.artifacts.length) {
127
- const existingArtifact = newTask.artifacts[existingIndex];
97
+ const artifact = update.artifact;
98
+ const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
99
+ const existingArtifact = newTask.artifacts[existingIndex];
100
+ if (existingArtifact) {
128
101
  if (update.append) {
129
102
  const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
130
- appendedArtifact.parts.push(...update.parts);
131
- if (update.metadata) {
103
+ appendedArtifact.parts.push(...artifact.parts);
104
+ if (artifact.metadata) {
132
105
  appendedArtifact.metadata = {
133
106
  ...appendedArtifact.metadata || {},
134
- ...update.metadata
107
+ ...artifact.metadata
135
108
  };
136
109
  }
137
- if (update.lastChunk !== void 0) appendedArtifact.lastChunk = update.lastChunk;
138
- if (update.description) appendedArtifact.description = update.description;
110
+ if (artifact.description) appendedArtifact.description = artifact.description;
139
111
  newTask.artifacts[existingIndex] = appendedArtifact;
140
- replaced = true;
141
112
  } else {
142
- newTask.artifacts[existingIndex] = { ...update };
143
- replaced = true;
144
- }
145
- } else if (update.name) {
146
- const namedIndex = newTask.artifacts.findIndex((a) => a.name === update.name);
147
- if (namedIndex >= 0) {
148
- newTask.artifacts[namedIndex] = { ...update };
149
- replaced = true;
150
- }
151
- }
152
- if (!replaced) {
153
- newTask.artifacts.push({ ...update });
154
- if (newTask.artifacts.some((a) => a.index !== void 0)) {
155
- newTask.artifacts.sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
113
+ newTask.artifacts[existingIndex] = { ...artifact };
156
114
  }
115
+ } else {
116
+ newTask.artifacts.push({ ...artifact });
157
117
  }
158
118
  }
159
- return { task: newTask, history: newHistory };
119
+ return newTask;
160
120
  }
161
- async function loadOrCreateTaskAndHistory({
121
+ async function loadOrCreateTask({
162
122
  agentId,
163
123
  taskId,
164
124
  taskStore,
165
125
  message,
166
- sessionId,
126
+ contextId,
167
127
  metadata,
168
128
  logger
169
129
  }) {
@@ -171,47 +131,40 @@ async function loadOrCreateTaskAndHistory({
171
131
  if (!data) {
172
132
  const initialTask = {
173
133
  id: taskId,
174
- sessionId,
134
+ contextId: contextId || crypto.randomUUID(),
175
135
  status: {
176
136
  state: "submitted",
177
137
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
178
- message: null
138
+ message: void 0
179
139
  },
180
140
  artifacts: [],
181
- metadata
182
- };
183
- const initialData = {
184
- task: initialTask,
185
- history: [message]
141
+ history: [message],
142
+ metadata,
143
+ kind: "task"
186
144
  };
187
- logger?.info(`[Task ${taskId}] Created new task and history.`);
188
- await taskStore.save({ agentId, data: initialData });
189
- return initialData;
145
+ logger?.info(`[Task ${taskId}] Created new task.`);
146
+ await taskStore.save({ agentId, data: initialTask });
147
+ return initialTask;
190
148
  }
191
- logger?.info(`[Task ${taskId}] Loaded existing task and history.`);
192
- let updatedData = {
193
- task: data.task,
194
- history: [...data.history, message]
195
- };
196
- const { status } = data.task;
149
+ logger?.info(`[Task ${taskId}] Loaded existing task.`);
150
+ let updatedData = data;
151
+ updatedData.history = [...data.history || [], message];
152
+ const { status } = data;
197
153
  const finalStates = ["completed", "failed", "canceled"];
198
154
  if (finalStates.includes(status.state)) {
199
155
  logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
200
- updatedData = applyUpdateToTaskAndHistory(updatedData, {
156
+ updatedData = applyUpdateToTask(updatedData, {
201
157
  state: "submitted",
202
- message: null
158
+ message: void 0
203
159
  });
204
160
  } else if (status.state === "input-required") {
205
161
  logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
206
- updatedData = applyUpdateToTaskAndHistory(updatedData, { state: "working" });
162
+ updatedData = applyUpdateToTask(updatedData, { state: "working" });
207
163
  } else if (status.state === "working") {
208
164
  logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
209
165
  }
210
166
  await taskStore.save({ agentId, data: updatedData });
211
- return {
212
- task: { ...updatedData.task },
213
- history: [...updatedData.history]
214
- };
167
+ return updatedData;
215
168
  }
216
169
  function createTaskContext({
217
170
  task,
@@ -228,15 +181,22 @@ function createTaskContext({
228
181
  }
229
182
 
230
183
  // src/server/handlers/a2a.ts
231
- var taskSendParamsSchema = zod.z.object({
232
- id: zod.z.string().min(1, "Invalid or missing task ID (params.id)."),
184
+ var messageSendParamsSchema = zod.z.object({
233
185
  message: zod.z.object({
186
+ role: zod.z.enum(["user", "agent"]),
234
187
  parts: zod.z.array(
235
188
  zod.z.object({
236
- type: zod.z.enum(["text"]),
189
+ kind: zod.z.enum(["text"]),
237
190
  text: zod.z.string()
238
191
  })
239
- )
192
+ ),
193
+ kind: zod.z.literal("message"),
194
+ messageId: zod.z.string(),
195
+ contextId: zod.z.string().optional(),
196
+ taskId: zod.z.string().optional(),
197
+ referenceTaskIds: zod.z.array(zod.z.string()).optional(),
198
+ extensions: zod.z.array(zod.z.string()).optional(),
199
+ metadata: zod.z.record(zod.z.any()).optional()
240
200
  })
241
201
  });
242
202
  async function getAgentCardByIdHandler({
@@ -283,17 +243,17 @@ async function getAgentCardByIdHandler({
283
243
  };
284
244
  return agentCard;
285
245
  }
286
- function validateTaskSendParams(params) {
246
+ function validateMessageSendParams(params) {
287
247
  try {
288
- taskSendParamsSchema.parse(params);
248
+ messageSendParamsSchema.parse(params);
289
249
  } catch (error) {
290
250
  if (error instanceof zod.z.ZodError) {
291
- throw a2a.A2AError.invalidParams(error.errors[0].message);
251
+ throw a2a.MastraA2AError.invalidParams(error.errors[0].message);
292
252
  }
293
253
  throw error;
294
254
  }
295
255
  }
296
- async function handleTaskSend({
256
+ async function handleMessageSend({
297
257
  requestId,
298
258
  params,
299
259
  taskStore,
@@ -302,20 +262,22 @@ async function handleTaskSend({
302
262
  logger,
303
263
  runtimeContext
304
264
  }) {
305
- validateTaskSendParams(params);
306
- const { id: taskId, message, sessionId, metadata } = params;
307
- let currentData = await loadOrCreateTaskAndHistory({
265
+ validateMessageSendParams(params);
266
+ const { message, metadata } = params;
267
+ const { contextId } = message;
268
+ const taskId = message.taskId || crypto.randomUUID();
269
+ let currentData = await loadOrCreateTask({
308
270
  taskId,
309
271
  taskStore,
310
272
  agentId,
311
273
  message,
312
- sessionId,
274
+ contextId,
313
275
  metadata
314
276
  });
315
277
  createTaskContext({
316
- task: currentData.task,
278
+ task: currentData,
317
279
  userMessage: message,
318
- history: currentData.history,
280
+ history: currentData.history || [],
319
281
  activeCancellations: taskStore.activeCancellations
320
282
  });
321
283
  try {
@@ -323,16 +285,18 @@ async function handleTaskSend({
323
285
  runId: taskId,
324
286
  runtimeContext
325
287
  });
326
- currentData = applyUpdateToTaskAndHistory(currentData, {
288
+ currentData = applyUpdateToTask(currentData, {
327
289
  state: "completed",
328
290
  message: {
291
+ messageId: crypto.randomUUID(),
329
292
  role: "agent",
330
293
  parts: [
331
294
  {
332
- type: "text",
295
+ kind: "text",
333
296
  text
334
297
  }
335
- ]
298
+ ],
299
+ kind: "message"
336
300
  }
337
301
  });
338
302
  await taskStore.save({ agentId, data: currentData });
@@ -340,24 +304,26 @@ async function handleTaskSend({
340
304
  const failureStatusUpdate = {
341
305
  state: "failed",
342
306
  message: {
307
+ messageId: crypto.randomUUID(),
343
308
  role: "agent",
344
309
  parts: [
345
310
  {
346
- type: "text",
311
+ kind: "text",
347
312
  text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
348
313
  }
349
- ]
314
+ ],
315
+ kind: "message"
350
316
  }
351
317
  };
352
- currentData = applyUpdateToTaskAndHistory(currentData, failureStatusUpdate);
318
+ currentData = applyUpdateToTask(currentData, failureStatusUpdate);
353
319
  try {
354
320
  await taskStore.save({ agentId, data: currentData });
355
321
  } catch (saveError) {
356
- logger?.error(`Failed to save task ${taskId} after handler error:`, saveError?.message);
322
+ logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
357
323
  }
358
- return normalizeError(handlerError, requestId, taskId, logger);
324
+ return normalizeError(handlerError, requestId, currentData.id, logger);
359
325
  }
360
- return createSuccessResponse(requestId, currentData.task);
326
+ return createSuccessResponse(requestId, currentData);
361
327
  }
362
328
  async function handleTaskGet({
363
329
  requestId,
@@ -367,11 +333,11 @@ async function handleTaskGet({
367
333
  }) {
368
334
  const task = await taskStore.load({ agentId, taskId });
369
335
  if (!task) {
370
- throw a2a.A2AError.taskNotFound(taskId);
336
+ throw a2a.MastraA2AError.taskNotFound(taskId);
371
337
  }
372
338
  return createSuccessResponse(requestId, task);
373
339
  }
374
- async function* handleTaskSendSubscribe({
340
+ async function* handleMessageStream({
375
341
  requestId,
376
342
  params,
377
343
  taskStore,
@@ -383,13 +349,15 @@ async function* handleTaskSendSubscribe({
383
349
  yield createSuccessResponse(requestId, {
384
350
  state: "working",
385
351
  message: {
352
+ messageId: crypto.randomUUID(),
353
+ kind: "message",
386
354
  role: "agent",
387
- parts: [{ type: "text", text: "Generating response..." }]
355
+ parts: [{ kind: "text", text: "Generating response..." }]
388
356
  }
389
357
  });
390
358
  let result;
391
359
  try {
392
- result = await handleTaskSend({
360
+ result = await handleMessageSend({
393
361
  requestId,
394
362
  params,
395
363
  taskStore,
@@ -399,7 +367,7 @@ async function* handleTaskSendSubscribe({
399
367
  logger
400
368
  });
401
369
  } catch (err) {
402
- if (!(err instanceof a2a.A2AError)) {
370
+ if (!(err instanceof a2a.MastraA2AError)) {
403
371
  throw err;
404
372
  }
405
373
  result = createErrorResponse(requestId, err.toJSONRPCError());
@@ -418,25 +386,27 @@ async function handleTaskCancel({
418
386
  taskId
419
387
  });
420
388
  if (!data) {
421
- throw a2a.A2AError.taskNotFound(taskId);
389
+ throw a2a.MastraA2AError.taskNotFound(taskId);
422
390
  }
423
391
  const finalStates = ["completed", "failed", "canceled"];
424
- if (finalStates.includes(data.task.status.state)) {
425
- logger?.info(`Task ${taskId} already in final state ${data.task.status.state}, cannot cancel.`);
426
- return createSuccessResponse(requestId, data.task);
392
+ if (finalStates.includes(data.status.state)) {
393
+ logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
394
+ return createSuccessResponse(requestId, data);
427
395
  }
428
396
  taskStore.activeCancellations.add(taskId);
429
397
  const cancelUpdate = {
430
398
  state: "canceled",
431
399
  message: {
432
400
  role: "agent",
433
- parts: [{ type: "text", text: "Task cancelled by request." }]
401
+ parts: [{ kind: "text", text: "Task cancelled by request." }],
402
+ kind: "message",
403
+ messageId: crypto.randomUUID()
434
404
  }
435
405
  };
436
- data = applyUpdateToTaskAndHistory(data, cancelUpdate);
406
+ data = applyUpdateToTask(data, cancelUpdate);
437
407
  await taskStore.save({ agentId, data });
438
408
  taskStore.activeCancellations.delete(taskId);
439
- return createSuccessResponse(requestId, data.task);
409
+ return createSuccessResponse(requestId, data);
440
410
  }
441
411
  async function getAgentExecutionHandler({
442
412
  requestId,
@@ -445,16 +415,16 @@ async function getAgentExecutionHandler({
445
415
  runtimeContext,
446
416
  method,
447
417
  params,
448
- taskStore = new InMemoryTaskStore(),
418
+ taskStore,
449
419
  logger
450
420
  }) {
451
421
  const agent = mastra.getAgent(agentId);
452
422
  let taskId;
453
423
  try {
454
- taskId = params.id;
424
+ taskId = "id" in params ? params.id : params.message?.taskId || "No task ID provided";
455
425
  switch (method) {
456
- case "tasks/send": {
457
- const result2 = await handleTaskSend({
426
+ case "message/send": {
427
+ const result2 = await handleMessageSend({
458
428
  requestId,
459
429
  params,
460
430
  taskStore,
@@ -464,8 +434,8 @@ async function getAgentExecutionHandler({
464
434
  });
465
435
  return result2;
466
436
  }
467
- case "tasks/sendSubscribe":
468
- const result = await handleTaskSendSubscribe({
437
+ case "message/stream":
438
+ const result = await handleMessageStream({
469
439
  requestId,
470
440
  taskStore,
471
441
  params,
@@ -493,10 +463,10 @@ async function getAgentExecutionHandler({
493
463
  return result2;
494
464
  }
495
465
  default:
496
- throw a2a.A2AError.methodNotFound(method);
466
+ throw a2a.MastraA2AError.methodNotFound(method);
497
467
  }
498
468
  } catch (error) {
499
- if (error instanceof a2a.A2AError && taskId && !error.taskId) {
469
+ if (error instanceof a2a.MastraA2AError && taskId && !error.taskId) {
500
470
  error.taskId = taskId;
501
471
  }
502
472
  return normalizeError(error, requestId, taskId, logger);
@@ -506,9 +476,9 @@ async function getAgentExecutionHandler({
506
476
  exports.a2a_exports = a2a_exports;
507
477
  exports.getAgentCardByIdHandler = getAgentCardByIdHandler;
508
478
  exports.getAgentExecutionHandler = getAgentExecutionHandler;
479
+ exports.handleMessageSend = handleMessageSend;
480
+ exports.handleMessageStream = handleMessageStream;
509
481
  exports.handleTaskCancel = handleTaskCancel;
510
482
  exports.handleTaskGet = handleTaskGet;
511
- exports.handleTaskSend = handleTaskSend;
512
- exports.handleTaskSendSubscribe = handleTaskSendSubscribe;
513
- //# sourceMappingURL=chunk-GASWM5HJ.cjs.map
514
- //# sourceMappingURL=chunk-GASWM5HJ.cjs.map
483
+ //# sourceMappingURL=chunk-KXNFZXLG.cjs.map
484
+ //# sourceMappingURL=chunk-KXNFZXLG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/a2a.ts","../src/server/a2a/protocol.ts","../src/server/a2a/tasks.ts"],"names":["__export","MastraA2AError","z","result"],"mappings":"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","file":"chunk-KXNFZXLG.cjs","sourcesContent":["import { MastraA2AError } from '@mastra/core/a2a';\nimport type {\n MessageSendParams,\n TaskQueryParams,\n TaskIdParams,\n AgentCard,\n TaskStatus,\n TaskState,\n} from '@mastra/core/a2a';\nimport type { Agent } from '@mastra/core/agent';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport { z } from 'zod';\nimport { convertToCoreMessage, normalizeError, createSuccessResponse, createErrorResponse } from '../a2a/protocol';\nimport type { InMemoryTaskStore } from '../a2a/store';\nimport { applyUpdateToTask, createTaskContext, loadOrCreateTask } from '../a2a/tasks';\nimport type { Context } from '../types';\n\nconst messageSendParamsSchema = z.object({\n message: z.object({\n role: z.enum(['user', 'agent']),\n parts: z.array(\n z.object({\n kind: z.enum(['text']),\n text: z.string(),\n }),\n ),\n kind: z.literal('message'),\n messageId: z.string(),\n contextId: z.string().optional(),\n taskId: z.string().optional(),\n referenceTaskIds: z.array(z.string()).optional(),\n extensions: z.array(z.string()).optional(),\n metadata: z.record(z.any()).optional(),\n }),\n});\n\nexport async function getAgentCardByIdHandler({\n mastra,\n agentId,\n executionUrl = `/a2a/${agentId}`,\n provider = {\n organization: 'Mastra',\n url: 'https://mastra.ai',\n },\n version = '1.0',\n runtimeContext,\n}: Context & {\n runtimeContext: RuntimeContext;\n agentId: keyof ReturnType<typeof mastra.getAgents>;\n executionUrl?: string;\n version?: string;\n provider?: {\n organization: string;\n url: string;\n };\n}): Promise<AgentCard> {\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new Error(`Agent with ID ${agentId} not found`);\n }\n\n const [instructions, tools] = await Promise.all([\n agent.getInstructions({ runtimeContext }),\n agent.getTools({ runtimeContext }),\n ]);\n\n // Extract agent information to create the AgentCard\n const agentCard: AgentCard = {\n name: agent.id || agentId,\n description: instructions,\n url: executionUrl,\n provider,\n version,\n capabilities: {\n streaming: true, // All agents support streaming\n pushNotifications: false,\n stateTransitionHistory: false,\n },\n defaultInputModes: ['text'],\n defaultOutputModes: ['text'],\n // Convert agent tools to skills format for A2A protocol\n skills: Object.entries(tools).map(([toolId, tool]) => ({\n id: toolId,\n name: toolId,\n description: tool.description || `Tool: ${toolId}`,\n // Optional fields\n tags: ['tool'],\n })),\n };\n\n return agentCard;\n}\n\nfunction validateMessageSendParams(params: MessageSendParams) {\n try {\n messageSendParamsSchema.parse(params);\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw MastraA2AError.invalidParams((error as z.ZodError).errors[0]!.message);\n }\n\n throw error;\n }\n}\n\nexport async function handleMessageSend({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n logger,\n runtimeContext,\n}: {\n requestId: string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n runtimeContext: RuntimeContext;\n}) {\n validateMessageSendParams(params);\n\n const { message, metadata } = params;\n const { contextId } = message;\n const taskId = message.taskId || crypto.randomUUID();\n\n // Load or create task\n let currentData = await loadOrCreateTask({\n taskId,\n taskStore,\n agentId,\n message,\n contextId,\n metadata,\n });\n\n // Use the new TaskContext definition, passing history\n const context = createTaskContext({\n task: currentData,\n userMessage: message,\n history: currentData.history || [],\n activeCancellations: taskStore.activeCancellations,\n });\n\n try {\n const { text } = await agent.generate([convertToCoreMessage(message)], {\n runId: taskId,\n runtimeContext,\n });\n\n currentData = applyUpdateToTask(currentData, {\n state: 'completed',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [\n {\n kind: 'text',\n text: text,\n },\n ],\n kind: 'message',\n },\n });\n\n await taskStore.save({ agentId, data: currentData });\n context.task = currentData;\n } catch (handlerError) {\n // If handler throws, apply 'failed' status, save, and rethrow\n const failureStatusUpdate: Omit<TaskStatus, 'timestamp'> = {\n state: 'failed',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [\n {\n kind: 'text',\n text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`,\n },\n ],\n kind: 'message',\n },\n };\n currentData = applyUpdateToTask(currentData, failureStatusUpdate);\n\n try {\n await taskStore.save({ agentId, data: currentData });\n } catch (saveError) {\n // @ts-expect-error saveError is an unknown error\n logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);\n }\n\n return normalizeError(handlerError, requestId, currentData.id, logger); // Rethrow original error\n }\n\n // The loop finished, send the final task state\n return createSuccessResponse(requestId, currentData);\n}\n\nexport async function handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId,\n}: {\n requestId: string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n}) {\n const task = await taskStore.load({ agentId, taskId });\n\n if (!task) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n return createSuccessResponse(requestId, task);\n}\n\nexport async function* handleMessageStream({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n logger,\n runtimeContext,\n}: {\n requestId: string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n runtimeContext: RuntimeContext;\n}) {\n yield createSuccessResponse(requestId, {\n state: 'working',\n message: {\n messageId: crypto.randomUUID(),\n kind: 'message',\n role: 'agent',\n parts: [{ kind: 'text', text: 'Generating response...' }],\n },\n });\n\n let result;\n try {\n result = await handleMessageSend({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n runtimeContext,\n logger,\n });\n } catch (err) {\n if (!(err instanceof MastraA2AError)) {\n throw err;\n }\n\n result = createErrorResponse(requestId, err.toJSONRPCError());\n }\n\n yield result;\n}\n\nexport async function handleTaskCancel({\n requestId,\n taskStore,\n agentId,\n taskId,\n logger,\n}: {\n requestId: string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n logger?: IMastraLogger;\n}) {\n // Load task and history\n let data = await taskStore.load({\n agentId,\n taskId,\n });\n\n if (!data) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n // Check if cancelable (not already in a final state)\n const finalStates: TaskState[] = ['completed', 'failed', 'canceled'];\n\n if (finalStates.includes(data.status.state)) {\n logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);\n return createSuccessResponse(requestId, data);\n }\n\n // Signal cancellation\n taskStore.activeCancellations.add(taskId);\n\n // Apply 'canceled' state update\n const cancelUpdate: Omit<TaskStatus, 'timestamp'> = {\n state: 'canceled',\n message: {\n role: 'agent',\n parts: [{ kind: 'text', text: 'Task cancelled by request.' }],\n kind: 'message',\n messageId: crypto.randomUUID(),\n },\n };\n\n data = applyUpdateToTask(data, cancelUpdate);\n\n // Save the updated state\n await taskStore.save({ agentId, data });\n\n // Remove from active cancellations *after* saving\n taskStore.activeCancellations.delete(taskId);\n\n // Return the updated task object\n return createSuccessResponse(requestId, data);\n}\n\nexport async function getAgentExecutionHandler({\n requestId,\n mastra,\n agentId,\n runtimeContext,\n method,\n params,\n taskStore,\n logger,\n}: Context & {\n requestId: string;\n runtimeContext: RuntimeContext;\n agentId: string;\n method: 'message/send' | 'message/stream' | 'tasks/get' | 'tasks/cancel';\n params: MessageSendParams | TaskQueryParams | TaskIdParams;\n taskStore: InMemoryTaskStore;\n logger?: IMastraLogger;\n}): Promise<any> {\n const agent = mastra.getAgent(agentId);\n\n let taskId: string | undefined; // For error context\n\n try {\n // Attempt to get task ID early for error context. Cast params to any to access id.\n // Proper validation happens within specific handlers.\n taskId = 'id' in params ? params.id : params.message?.taskId || 'No task ID provided';\n\n // 2. Route based on method\n switch (method) {\n case 'message/send': {\n const result = await handleMessageSend({\n requestId,\n params: params as MessageSendParams,\n taskStore,\n agent,\n agentId,\n runtimeContext,\n });\n return result;\n }\n case 'message/stream':\n const result = await handleMessageStream({\n requestId,\n taskStore,\n params: params as MessageSendParams,\n agent,\n agentId,\n runtimeContext,\n });\n return result;\n\n case 'tasks/get': {\n const result = await handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId,\n });\n\n return result;\n }\n case 'tasks/cancel': {\n const result = await handleTaskCancel({\n requestId,\n taskStore,\n agentId,\n taskId,\n });\n\n return result;\n }\n default:\n throw MastraA2AError.methodNotFound(method);\n }\n } catch (error) {\n if (error instanceof MastraA2AError && taskId && !error.taskId) {\n error.taskId = taskId; // Add task ID context if missing\n }\n\n return normalizeError(error, requestId, taskId, logger);\n }\n}\n","import { MastraA2AError } from '@mastra/core/a2a';\n\nimport type { JSONRPCError, JSONRPCResponse, Message, Part } from '@mastra/core/a2a';\nimport type { CoreMessage } from '@mastra/core/llm';\nimport type { IMastraLogger } from '@mastra/core/logger';\n\nexport function normalizeError(\n error: any,\n reqId: number | string | null,\n taskId?: string,\n logger?: IMastraLogger,\n): JSONRPCResponse<null, unknown> {\n let a2aError: MastraA2AError;\n if (error instanceof MastraA2AError) {\n a2aError = error;\n } else if (error instanceof Error) {\n // Generic JS error\n a2aError = MastraA2AError.internalError(error.message, { stack: error.stack });\n } else {\n // Unknown error type\n a2aError = MastraA2AError.internalError('An unknown error occurred.', error);\n }\n\n // Ensure Task ID context is present if possible\n if (taskId && !a2aError.taskId) {\n a2aError.taskId = taskId;\n }\n\n logger?.error(`Error processing request (Task: ${a2aError.taskId ?? 'N/A'}, ReqID: ${reqId ?? 'N/A'}):`, a2aError);\n\n return createErrorResponse(reqId, a2aError.toJSONRPCError());\n}\n\nexport function createErrorResponse(\n id: number | string | null,\n error: JSONRPCError<unknown>,\n): JSONRPCResponse<null, unknown> {\n // For errors, ID should be the same as request ID, or null if that couldn't be determined\n return {\n jsonrpc: '2.0',\n id: id, // Can be null if request ID was invalid/missing\n error: error,\n };\n}\n\nexport function createSuccessResponse<T>(id: number | string | null, result: T): JSONRPCResponse<T> {\n if (!id) {\n // This shouldn't happen for methods that expect a response, but safeguard\n throw MastraA2AError.internalError('Cannot create success response for null ID.');\n }\n\n return {\n jsonrpc: '2.0',\n id: id,\n result: result,\n };\n}\n\nexport function convertToCoreMessage(message: Message): CoreMessage {\n return {\n role: message.role === 'user' ? 'user' : 'assistant',\n content: message.parts.map(msg => convertToCoreMessagePart(msg)),\n };\n}\n\nfunction convertToCoreMessagePart(part: Part) {\n switch (part.kind) {\n case 'text':\n return {\n type: 'text',\n text: part.text,\n } as const;\n case 'file':\n return {\n type: 'file',\n data: 'uri' in part.file ? new URL(part.file.uri) : part.file.bytes,\n mimeType: part.file.mimeType!,\n } as const;\n case 'data':\n throw new Error('Data parts are not supported in core messages');\n }\n}\n","import type {\n Message,\n Task,\n TaskState,\n TaskStatus,\n TaskContext,\n TaskArtifactUpdateEvent,\n Artifact,\n} from '@mastra/core/a2a';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { InMemoryTaskStore } from './store';\n\nfunction isTaskStatusUpdate(update: TaskStatus | TaskArtifactUpdateEvent): update is Omit<TaskStatus, 'timestamp'> {\n return 'state' in update && !('parts' in update);\n}\n\nfunction isArtifactUpdate(update: TaskStatus | TaskArtifactUpdateEvent): update is TaskArtifactUpdateEvent {\n return 'kind' in update && update.kind === 'artifact-update';\n}\n\nexport function applyUpdateToTask(\n current: Task,\n update: Omit<TaskStatus, 'timestamp'> | TaskArtifactUpdateEvent,\n): Task {\n let newTask = structuredClone(current);\n\n if (isTaskStatusUpdate(update)) {\n // Merge status update\n newTask.status = {\n ...newTask.status, // Keep existing properties if not overwritten\n ...update, // Apply updates\n timestamp: new Date().toISOString(),\n };\n } else if (isArtifactUpdate(update)) {\n // Handle artifact update\n if (!newTask.artifacts) {\n newTask.artifacts = [];\n } else {\n // Ensure we're working with a copy of the artifacts array\n newTask.artifacts = [...newTask.artifacts];\n }\n\n const artifact = update.artifact;\n const existingIndex = newTask.artifacts.findIndex(a => a.name === artifact.name);\n const existingArtifact = newTask.artifacts[existingIndex];\n\n if (existingArtifact) {\n if (update.append) {\n // Create a deep copy for modification to avoid mutating original\n const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact)) as Artifact;\n appendedArtifact.parts.push(...artifact.parts);\n if (artifact.metadata) {\n appendedArtifact.metadata = {\n ...(appendedArtifact.metadata || {}),\n ...artifact.metadata,\n };\n }\n if (artifact.description) appendedArtifact.description = artifact.description;\n newTask.artifacts[existingIndex] = appendedArtifact; // Replace with appended version\n } else {\n // Overwrite artifact at index (with a copy of the update)\n newTask.artifacts[existingIndex] = { ...artifact };\n }\n } else {\n newTask.artifacts.push({ ...artifact });\n }\n }\n\n return newTask;\n}\n\nexport async function loadOrCreateTask({\n agentId,\n taskId,\n taskStore,\n message,\n contextId,\n metadata,\n logger,\n}: {\n agentId: string;\n taskId: string;\n taskStore: InMemoryTaskStore;\n message: Message;\n contextId?: string;\n metadata?: Record<string, unknown>;\n logger?: IMastraLogger;\n}): Promise<Task> {\n const data = await taskStore.load({ agentId, taskId });\n\n // Create new task if none exists\n if (!data) {\n const initialTask: Task = {\n id: taskId,\n contextId: contextId || crypto.randomUUID(),\n status: {\n state: 'submitted',\n timestamp: new Date().toISOString(),\n message: undefined,\n },\n artifacts: [],\n history: [message],\n metadata: metadata,\n kind: 'task',\n };\n\n logger?.info(`[Task ${taskId}] Created new task.`);\n await taskStore.save({ agentId, data: initialTask });\n\n return initialTask;\n }\n\n // Handle existing task\n logger?.info(`[Task ${taskId}] Loaded existing task.`);\n\n // Add message to history and prepare updated data\n let updatedData = data;\n updatedData.history = [...(data.history || []), message];\n\n // Handle state transitions\n const { status } = data;\n const finalStates: TaskState[] = ['completed', 'failed', 'canceled'];\n\n if (finalStates.includes(status.state)) {\n logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);\n updatedData = applyUpdateToTask(updatedData, {\n state: 'submitted',\n message: undefined,\n });\n } else if (status.state === 'input-required') {\n logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);\n updatedData = applyUpdateToTask(updatedData, { state: 'working' });\n } else if (status.state === 'working') {\n logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);\n }\n\n await taskStore.save({ agentId, data: updatedData });\n\n return updatedData;\n}\n\nexport function createTaskContext({\n task,\n userMessage,\n history,\n activeCancellations,\n}: {\n task: Task;\n userMessage: Message;\n history: Message[];\n activeCancellations: Set<string>;\n}): TaskContext {\n return {\n task: structuredClone(task),\n userMessage,\n history: structuredClone(history),\n isCancelled: () => activeCancellations.has(task.id),\n };\n}\n"]}
@@ -30,7 +30,7 @@ async function getScorersFromSystem({
30
30
  scorersMap.set(scorerId, {
31
31
  workflowIds: [],
32
32
  ...scorer,
33
- agentIds: [agent.name]
33
+ agentIds: [agentId]
34
34
  });
35
35
  }
36
36
  }
@@ -147,5 +147,5 @@ async function saveScoreHandler({ mastra, score }) {
147
147
  }
148
148
 
149
149
  export { getScorerHandler, getScorersHandler, getScoresByEntityIdHandler, getScoresByRunIdHandler, getScoresByScorerIdHandler, saveScoreHandler, scores_exports };
150
- //# sourceMappingURL=chunk-TXAQU2XN.js.map
151
- //# sourceMappingURL=chunk-TXAQU2XN.js.map
150
+ //# sourceMappingURL=chunk-L7YG7WQH.js.map
151
+ //# sourceMappingURL=chunk-L7YG7WQH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-L7YG7WQH.js","sourcesContent":["import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { MastraScorerEntry, ScoreRowData } from '@mastra/core/scores';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport type { Context } from '../types';\nimport { handleError } from './error';\n\nasync function getScorersFromSystem({\n mastra,\n runtimeContext,\n}: Context & {\n runtimeContext: RuntimeContext;\n}) {\n const agents = mastra.getAgents();\n const workflows = mastra.getWorkflows();\n\n const scorersMap = new Map<string, MastraScorerEntry & { agentIds: string[]; workflowIds: string[] }>();\n\n for (const [agentId, agent] of Object.entries(agents)) {\n const scorers =\n (await agent.getScorers({\n runtimeContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [scorerId, scorer] of Object.entries(scorers)) {\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agentId);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentIds: [agentId],\n });\n }\n }\n }\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.getScorers({\n runtimeContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [scorerId, scorer] of Object.entries(scorers)) {\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerId, {\n agentIds: [],\n ...scorer,\n workflowIds: [workflowId],\n });\n }\n }\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\nexport async function getScorersHandler({ mastra, runtimeContext }: Context & { runtimeContext: RuntimeContext }) {\n const scorers = await getScorersFromSystem({\n mastra,\n runtimeContext,\n });\n\n return scorers;\n}\n\nexport async function getScorerHandler({\n mastra,\n scorerId,\n runtimeContext,\n}: Context & { scorerId: string; runtimeContext: RuntimeContext }) {\n const scorers = await getScorersFromSystem({\n mastra,\n runtimeContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n}\n\nexport async function getScoresByRunIdHandler({\n mastra,\n runId,\n pagination,\n}: Context & { runId: string; pagination: StoragePagination }) {\n try {\n const scores =\n (await mastra.getStorage()?.getScoresByRunId?.({\n runId,\n pagination,\n })) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n}\n\nexport async function getScoresByScorerIdHandler({\n mastra,\n scorerId,\n pagination,\n entityId,\n entityType,\n}: Context & { scorerId: string; pagination: StoragePagination; entityId?: string; entityType?: string }) {\n try {\n const scores =\n (await mastra.getStorage()?.getScoresByScorerId?.({\n scorerId,\n pagination,\n entityId,\n entityType,\n })) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n}\n\nexport async function getScoresByEntityIdHandler({\n mastra,\n entityId,\n entityType,\n pagination,\n}: Context & { entityId: string; entityType: string; pagination: StoragePagination }) {\n try {\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = mastra.getAgentById(entityId);\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const scores =\n (await mastra.getStorage()?.getScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || [];\n\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n}\n\nexport async function saveScoreHandler({ mastra, score }: Context & { score: ScoreRowData }) {\n try {\n const scores = (await mastra.getStorage()?.saveScore?.(score)) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n}\n"]}
@@ -32,7 +32,7 @@ async function getScorersFromSystem({
32
32
  scorersMap.set(scorerId, {
33
33
  workflowIds: [],
34
34
  ...scorer,
35
- agentIds: [agent.name]
35
+ agentIds: [agentId]
36
36
  });
37
37
  }
38
38
  }
@@ -155,5 +155,5 @@ exports.getScoresByRunIdHandler = getScoresByRunIdHandler;
155
155
  exports.getScoresByScorerIdHandler = getScoresByScorerIdHandler;
156
156
  exports.saveScoreHandler = saveScoreHandler;
157
157
  exports.scores_exports = scores_exports;
158
- //# sourceMappingURL=chunk-VIGPWTDA.cjs.map
159
- //# sourceMappingURL=chunk-VIGPWTDA.cjs.map
158
+ //# sourceMappingURL=chunk-RQQNZZAI.cjs.map
159
+ //# sourceMappingURL=chunk-RQQNZZAI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/scores.ts"],"names":["__export","handleError"],"mappings":"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","file":"chunk-RQQNZZAI.cjs","sourcesContent":["import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { MastraScorerEntry, ScoreRowData } from '@mastra/core/scores';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport type { Context } from '../types';\nimport { handleError } from './error';\n\nasync function getScorersFromSystem({\n mastra,\n runtimeContext,\n}: Context & {\n runtimeContext: RuntimeContext;\n}) {\n const agents = mastra.getAgents();\n const workflows = mastra.getWorkflows();\n\n const scorersMap = new Map<string, MastraScorerEntry & { agentIds: string[]; workflowIds: string[] }>();\n\n for (const [agentId, agent] of Object.entries(agents)) {\n const scorers =\n (await agent.getScorers({\n runtimeContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [scorerId, scorer] of Object.entries(scorers)) {\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agentId);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentIds: [agentId],\n });\n }\n }\n }\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.getScorers({\n runtimeContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [scorerId, scorer] of Object.entries(scorers)) {\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerId, {\n agentIds: [],\n ...scorer,\n workflowIds: [workflowId],\n });\n }\n }\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\nexport async function getScorersHandler({ mastra, runtimeContext }: Context & { runtimeContext: RuntimeContext }) {\n const scorers = await getScorersFromSystem({\n mastra,\n runtimeContext,\n });\n\n return scorers;\n}\n\nexport async function getScorerHandler({\n mastra,\n scorerId,\n runtimeContext,\n}: Context & { scorerId: string; runtimeContext: RuntimeContext }) {\n const scorers = await getScorersFromSystem({\n mastra,\n runtimeContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n}\n\nexport async function getScoresByRunIdHandler({\n mastra,\n runId,\n pagination,\n}: Context & { runId: string; pagination: StoragePagination }) {\n try {\n const scores =\n (await mastra.getStorage()?.getScoresByRunId?.({\n runId,\n pagination,\n })) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n}\n\nexport async function getScoresByScorerIdHandler({\n mastra,\n scorerId,\n pagination,\n entityId,\n entityType,\n}: Context & { scorerId: string; pagination: StoragePagination; entityId?: string; entityType?: string }) {\n try {\n const scores =\n (await mastra.getStorage()?.getScoresByScorerId?.({\n scorerId,\n pagination,\n entityId,\n entityType,\n })) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n}\n\nexport async function getScoresByEntityIdHandler({\n mastra,\n entityId,\n entityType,\n pagination,\n}: Context & { entityId: string; entityType: string; pagination: StoragePagination }) {\n try {\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = mastra.getAgentById(entityId);\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const scores =\n (await mastra.getStorage()?.getScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || [];\n\n return scores;\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n}\n\nexport async function saveScoreHandler({ mastra, score }: Context & { score: ScoreRowData }) {\n try {\n const scores = (await mastra.getStorage()?.saveScore?.(score)) || [];\n return scores;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n}\n"]}