@mastra/server 0.0.0-update-scorers-api-20250801170445 → 0.0.0-usechat-duplicate-20251016110554

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 (234) hide show
  1. package/CHANGELOG.md +4048 -0
  2. package/README.md +0 -5
  3. package/dist/chunk-2PLXW4ZX.cjs +2777 -0
  4. package/dist/chunk-2PLXW4ZX.cjs.map +1 -0
  5. package/dist/chunk-2S4IMB6E.cjs +130 -0
  6. package/dist/chunk-2S4IMB6E.cjs.map +1 -0
  7. package/dist/{chunk-X5SDJOY6.cjs → chunk-3LTO44EP.cjs} +66 -53
  8. package/dist/chunk-3LTO44EP.cjs.map +1 -0
  9. package/dist/{chunk-4US5W7PH.cjs → chunk-3SNGNFUJ.cjs} +23 -15
  10. package/dist/chunk-3SNGNFUJ.cjs.map +1 -0
  11. package/dist/{chunk-OW4FX5TS.js → chunk-4QCXUEAT.js} +10 -3
  12. package/dist/chunk-4QCXUEAT.js.map +1 -0
  13. package/dist/{chunk-SQ7KKIH3.js → chunk-67GYDFSB.js} +22 -5
  14. package/dist/chunk-67GYDFSB.js.map +1 -0
  15. package/dist/{chunk-ILCWPBYQ.cjs → chunk-6ZR275MD.cjs} +23 -5
  16. package/dist/chunk-6ZR275MD.cjs.map +1 -0
  17. package/dist/chunk-7HDOBOGG.cjs +17517 -0
  18. package/dist/chunk-7HDOBOGG.cjs.map +1 -0
  19. package/dist/{chunk-4MQU6AJN.js → chunk-ABRFV4XP.js} +4 -4
  20. package/dist/{chunk-4MQU6AJN.js.map → chunk-ABRFV4XP.js.map} +1 -1
  21. package/dist/{chunk-YS66MFDY.js → chunk-AHB4JCIQ.js} +48 -12
  22. package/dist/chunk-AHB4JCIQ.js.map +1 -0
  23. package/dist/{chunk-TXAQU2XN.js → chunk-AW5BU3RQ.js} +63 -22
  24. package/dist/chunk-AW5BU3RQ.js.map +1 -0
  25. package/dist/chunk-BATEJLED.js +124 -0
  26. package/dist/chunk-BATEJLED.js.map +1 -0
  27. package/dist/chunk-BZLZFHAT.cjs +682 -0
  28. package/dist/chunk-BZLZFHAT.cjs.map +1 -0
  29. package/dist/{chunk-BUOJL3MN.js → chunk-DB63UMTV.js} +220 -89
  30. package/dist/chunk-DB63UMTV.js.map +1 -0
  31. package/dist/{chunk-NCS2OXX6.cjs → chunk-EP3JQDPD.cjs} +4 -4
  32. package/dist/{chunk-NCS2OXX6.cjs.map → chunk-EP3JQDPD.cjs.map} +1 -1
  33. package/dist/chunk-FWO7VQDC.js +17481 -0
  34. package/dist/chunk-FWO7VQDC.js.map +1 -0
  35. package/dist/chunk-FZNS32WJ.js +46 -0
  36. package/dist/chunk-FZNS32WJ.js.map +1 -0
  37. package/dist/{chunk-4QSNRCOT.cjs → chunk-G4PUALCE.cjs} +10 -2
  38. package/dist/chunk-G4PUALCE.cjs.map +1 -0
  39. package/dist/chunk-GU4EWMZB.cjs +769 -0
  40. package/dist/chunk-GU4EWMZB.cjs.map +1 -0
  41. package/dist/{chunk-TRWPUPGD.js → chunk-HPXAM2PG.js} +109 -138
  42. package/dist/chunk-HPXAM2PG.js.map +1 -0
  43. package/dist/{chunk-JGVY3KWV.cjs → chunk-I3C4ODGV.cjs} +12 -11
  44. package/dist/chunk-I3C4ODGV.cjs.map +1 -0
  45. package/dist/chunk-JSLAYFEW.js +662 -0
  46. package/dist/chunk-JSLAYFEW.js.map +1 -0
  47. package/dist/chunk-LF2ZLOFP.js +767 -0
  48. package/dist/chunk-LF2ZLOFP.js.map +1 -0
  49. package/dist/{chunk-UVOSITKU.js → chunk-LLUOPR3J.js} +11 -10
  50. package/dist/chunk-LLUOPR3J.js.map +1 -0
  51. package/dist/chunk-LPM6BBAX.cjs +1043 -0
  52. package/dist/chunk-LPM6BBAX.cjs.map +1 -0
  53. package/dist/{chunk-S37KCGOR.cjs → chunk-MQDBNHBT.cjs} +222 -88
  54. package/dist/chunk-MQDBNHBT.cjs.map +1 -0
  55. package/dist/{chunk-G7NVCO5M.js → chunk-MYR4PVGN.js} +3 -3
  56. package/dist/{chunk-G7NVCO5M.js.map → chunk-MYR4PVGN.js.map} +1 -1
  57. package/dist/chunk-O7I5CWRX.cjs +44 -0
  58. package/dist/{chunk-Q7SFCCGT.cjs.map → chunk-O7I5CWRX.cjs.map} +1 -1
  59. package/dist/{chunk-HXIOPAHT.js → chunk-OEOGYAQC.js} +54 -42
  60. package/dist/chunk-OEOGYAQC.js.map +1 -0
  61. package/dist/chunk-OYL5TBJW.cjs +48 -0
  62. package/dist/chunk-OYL5TBJW.cjs.map +1 -0
  63. package/dist/chunk-PR4QN5HX.js +39 -0
  64. package/dist/{chunk-PZ5AY32C.js.map → chunk-PR4QN5HX.js.map} +1 -1
  65. package/dist/{chunk-HWHKM67I.js → chunk-QQXMIP6C.js} +21 -13
  66. package/dist/chunk-QQXMIP6C.js.map +1 -0
  67. package/dist/chunk-RQK4FQUD.js +1012 -0
  68. package/dist/chunk-RQK4FQUD.js.map +1 -0
  69. package/dist/chunk-SIW6CYO3.js +254 -0
  70. package/dist/chunk-SIW6CYO3.js.map +1 -0
  71. package/dist/{chunk-VIGPWTDA.cjs → chunk-SPRRK3P7.cjs} +64 -23
  72. package/dist/chunk-SPRRK3P7.cjs.map +1 -0
  73. package/dist/{chunk-GASWM5HJ.cjs → chunk-TOP25AIO.cjs} +110 -139
  74. package/dist/chunk-TOP25AIO.cjs.map +1 -0
  75. package/dist/{chunk-O4I563YW.cjs → chunk-TRGAMKHX.cjs} +50 -13
  76. package/dist/chunk-TRGAMKHX.cjs.map +1 -0
  77. package/dist/chunk-VY4ENABS.cjs +135 -0
  78. package/dist/chunk-VY4ENABS.cjs.map +1 -0
  79. package/dist/{chunk-BED2O446.cjs → chunk-XN74I6VW.cjs} +7 -7
  80. package/dist/{chunk-BED2O446.cjs.map → chunk-XN74I6VW.cjs.map} +1 -1
  81. package/dist/chunk-XVPBGW6Y.cjs +256 -0
  82. package/dist/chunk-XVPBGW6Y.cjs.map +1 -0
  83. package/dist/chunk-YWOK4F5A.js +131 -0
  84. package/dist/chunk-YWOK4F5A.js.map +1 -0
  85. package/dist/chunk-ZULZ2752.js +2774 -0
  86. package/dist/chunk-ZULZ2752.js.map +1 -0
  87. package/dist/dist-4MVGNSRL.cjs +1150 -0
  88. package/dist/dist-4MVGNSRL.cjs.map +1 -0
  89. package/dist/dist-FZYCV3VB.cjs +940 -0
  90. package/dist/dist-FZYCV3VB.cjs.map +1 -0
  91. package/dist/dist-G2BYZJOC.cjs +928 -0
  92. package/dist/dist-G2BYZJOC.cjs.map +1 -0
  93. package/dist/dist-P4MXBQ3U.cjs +16 -0
  94. package/dist/dist-P4MXBQ3U.cjs.map +1 -0
  95. package/dist/dist-PQZUVLPC.js +937 -0
  96. package/dist/dist-PQZUVLPC.js.map +1 -0
  97. package/dist/dist-R7WYX6LC.js +925 -0
  98. package/dist/dist-R7WYX6LC.js.map +1 -0
  99. package/dist/dist-RFMYFILX.cjs +764 -0
  100. package/dist/dist-RFMYFILX.cjs.map +1 -0
  101. package/dist/dist-X7XR3M3Z.js +1147 -0
  102. package/dist/dist-X7XR3M3Z.js.map +1 -0
  103. package/dist/dist-XVBSOGFK.js +761 -0
  104. package/dist/dist-XVBSOGFK.js.map +1 -0
  105. package/dist/dist-YREX2TJT.js +3 -0
  106. package/dist/dist-YREX2TJT.js.map +1 -0
  107. package/dist/index.cjs +4 -0
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.js +3 -0
  110. package/dist/index.js.map +1 -1
  111. package/dist/server/a2a/store.cjs +25 -0
  112. package/dist/server/a2a/store.cjs.map +1 -0
  113. package/dist/server/a2a/store.d.ts +3 -3
  114. package/dist/server/a2a/store.d.ts.map +1 -1
  115. package/dist/server/a2a/store.js +23 -0
  116. package/dist/server/a2a/store.js.map +1 -0
  117. package/dist/server/a2a/tasks.d.ts +7 -7
  118. package/dist/server/a2a/tasks.d.ts.map +1 -1
  119. package/dist/server/handlers/a2a.cjs +11 -11
  120. package/dist/server/handlers/a2a.d.ts +17 -15
  121. package/dist/server/handlers/a2a.d.ts.map +1 -1
  122. package/dist/server/handlers/a2a.js +1 -1
  123. package/dist/server/handlers/agent-builder.cjs +68 -0
  124. package/dist/server/handlers/agent-builder.cjs.map +1 -0
  125. package/dist/server/handlers/agent-builder.d.ts +94 -0
  126. package/dist/server/handlers/agent-builder.d.ts.map +1 -0
  127. package/dist/server/handlers/agent-builder.js +3 -0
  128. package/dist/server/handlers/agent-builder.js.map +1 -0
  129. package/dist/server/handlers/agents.cjs +53 -9
  130. package/dist/server/handlers/agents.d.ts +156 -33
  131. package/dist/server/handlers/agents.d.ts.map +1 -1
  132. package/dist/server/handlers/agents.js +1 -1
  133. package/dist/server/handlers/legacyWorkflows.cjs +11 -11
  134. package/dist/server/handlers/legacyWorkflows.d.ts +1 -1
  135. package/dist/server/handlers/legacyWorkflows.d.ts.map +1 -1
  136. package/dist/server/handlers/legacyWorkflows.js +1 -1
  137. package/dist/server/handlers/logs.cjs +4 -4
  138. package/dist/server/handlers/logs.js +1 -1
  139. package/dist/server/handlers/memory.cjs +19 -15
  140. package/dist/server/handlers/memory.d.ts +24 -19
  141. package/dist/server/handlers/memory.d.ts.map +1 -1
  142. package/dist/server/handlers/memory.js +1 -1
  143. package/dist/server/handlers/observability.cjs +24 -0
  144. package/dist/server/handlers/observability.cjs.map +1 -0
  145. package/dist/server/handlers/observability.d.ts +49 -0
  146. package/dist/server/handlers/observability.d.ts.map +1 -0
  147. package/dist/server/handlers/observability.js +3 -0
  148. package/dist/server/handlers/observability.js.map +1 -0
  149. package/dist/server/handlers/scores.cjs +7 -7
  150. package/dist/server/handlers/scores.d.ts +110 -7
  151. package/dist/server/handlers/scores.d.ts.map +1 -1
  152. package/dist/server/handlers/scores.js +1 -1
  153. package/dist/server/handlers/telemetry.cjs +7 -3
  154. package/dist/server/handlers/telemetry.d.ts +2 -1
  155. package/dist/server/handlers/telemetry.d.ts.map +1 -1
  156. package/dist/server/handlers/telemetry.js +1 -1
  157. package/dist/server/handlers/tools.cjs +9 -5
  158. package/dist/server/handlers/tools.d.ts +5 -1
  159. package/dist/server/handlers/tools.d.ts.map +1 -1
  160. package/dist/server/handlers/tools.js +1 -1
  161. package/dist/server/handlers/utils.cjs +6 -2
  162. package/dist/server/handlers/utils.d.ts +6 -0
  163. package/dist/server/handlers/utils.d.ts.map +1 -1
  164. package/dist/server/handlers/utils.js +1 -1
  165. package/dist/server/handlers/vector.cjs +7 -7
  166. package/dist/server/handlers/vector.d.ts +1 -1
  167. package/dist/server/handlers/vector.js +1 -1
  168. package/dist/server/handlers/voice.cjs +5 -5
  169. package/dist/server/handlers/voice.d.ts +7 -5
  170. package/dist/server/handlers/voice.d.ts.map +1 -1
  171. package/dist/server/handlers/voice.js +1 -1
  172. package/dist/server/handlers/workflows.cjs +28 -16
  173. package/dist/server/handlers/workflows.d.ts +37 -34
  174. package/dist/server/handlers/workflows.d.ts.map +1 -1
  175. package/dist/server/handlers/workflows.js +1 -1
  176. package/dist/server/handlers.cjs +38 -33
  177. package/dist/server/handlers.d.ts +13 -12
  178. package/dist/server/handlers.d.ts.map +1 -1
  179. package/dist/server/handlers.js +13 -12
  180. package/dist/server/utils.d.ts +44 -0
  181. package/dist/server/utils.d.ts.map +1 -0
  182. package/dist/token-53CFGXUO.cjs +64 -0
  183. package/dist/token-53CFGXUO.cjs.map +1 -0
  184. package/dist/token-WAEKDUVY.js +62 -0
  185. package/dist/token-WAEKDUVY.js.map +1 -0
  186. package/dist/token-util-LY37VCIN.js +7 -0
  187. package/dist/token-util-LY37VCIN.js.map +1 -0
  188. package/dist/token-util-S4A355II.cjs +9 -0
  189. package/dist/token-util-S4A355II.cjs.map +1 -0
  190. package/package.json +36 -14
  191. package/dist/chunk-2XIJW7SV.cjs +0 -310
  192. package/dist/chunk-2XIJW7SV.cjs.map +0 -1
  193. package/dist/chunk-4CEZIJWJ.cjs +0 -150
  194. package/dist/chunk-4CEZIJWJ.cjs.map +0 -1
  195. package/dist/chunk-4QSNRCOT.cjs.map +0 -1
  196. package/dist/chunk-4US5W7PH.cjs.map +0 -1
  197. package/dist/chunk-7FHF55WA.js +0 -2041
  198. package/dist/chunk-7FHF55WA.js.map +0 -1
  199. package/dist/chunk-BUOJL3MN.js.map +0 -1
  200. package/dist/chunk-GASWM5HJ.cjs.map +0 -1
  201. package/dist/chunk-HWHKM67I.js.map +0 -1
  202. package/dist/chunk-HXIOPAHT.js.map +0 -1
  203. package/dist/chunk-ILCWPBYQ.cjs.map +0 -1
  204. package/dist/chunk-JGVY3KWV.cjs.map +0 -1
  205. package/dist/chunk-LRUH33B4.cjs +0 -2044
  206. package/dist/chunk-LRUH33B4.cjs.map +0 -1
  207. package/dist/chunk-O4I563YW.cjs.map +0 -1
  208. package/dist/chunk-OW4FX5TS.js.map +0 -1
  209. package/dist/chunk-PZ5AY32C.js +0 -9
  210. package/dist/chunk-Q7SFCCGT.cjs +0 -11
  211. package/dist/chunk-S37KCGOR.cjs.map +0 -1
  212. package/dist/chunk-SQ7KKIH3.js.map +0 -1
  213. package/dist/chunk-TRWPUPGD.js.map +0 -1
  214. package/dist/chunk-TXAQU2XN.js.map +0 -1
  215. package/dist/chunk-UVOSITKU.js.map +0 -1
  216. package/dist/chunk-VIGPWTDA.cjs.map +0 -1
  217. package/dist/chunk-VOY6MGKA.js +0 -301
  218. package/dist/chunk-VOY6MGKA.js.map +0 -1
  219. package/dist/chunk-X5SDJOY6.cjs.map +0 -1
  220. package/dist/chunk-Y3J45CVZ.js +0 -144
  221. package/dist/chunk-Y3J45CVZ.js.map +0 -1
  222. package/dist/chunk-YS66MFDY.js.map +0 -1
  223. package/dist/server/handlers/network.cjs +0 -24
  224. package/dist/server/handlers/network.cjs.map +0 -1
  225. package/dist/server/handlers/network.d.ts +0 -50
  226. package/dist/server/handlers/network.d.ts.map +0 -1
  227. package/dist/server/handlers/network.js +0 -3
  228. package/dist/server/handlers/network.js.map +0 -1
  229. package/dist/server/handlers/vNextNetwork.cjs +0 -220
  230. package/dist/server/handlers/vNextNetwork.cjs.map +0 -1
  231. package/dist/server/handlers/vNextNetwork.d.ts +0 -179
  232. package/dist/server/handlers/vNextNetwork.d.ts.map +0 -1
  233. package/dist/server/handlers/vNextNetwork.js +0 -213
  234. package/dist/server/handlers/vNextNetwork.js.map +0 -1
@@ -1,27 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var chunkQ7SFCCGT_cjs = require('./chunk-Q7SFCCGT.cjs');
3
+ var chunkVY4ENABS_cjs = require('./chunk-VY4ENABS.cjs');
4
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
4
5
  var a2a = require('@mastra/core/a2a');
5
6
  var zod = require('zod');
6
7
 
7
8
  // src/server/handlers/a2a.ts
8
9
  var a2a_exports = {};
9
- chunkQ7SFCCGT_cjs.__export(a2a_exports, {
10
+ chunkO7I5CWRX_cjs.__export(a2a_exports, {
10
11
  getAgentCardByIdHandler: () => getAgentCardByIdHandler,
11
12
  getAgentExecutionHandler: () => getAgentExecutionHandler,
13
+ handleMessageSend: () => handleMessageSend,
14
+ handleMessageStream: () => handleMessageStream,
12
15
  handleTaskCancel: () => handleTaskCancel,
13
- handleTaskGet: () => handleTaskGet,
14
- handleTaskSend: () => handleTaskSend,
15
- handleTaskSendSubscribe: () => handleTaskSendSubscribe
16
+ handleTaskGet: () => handleTaskGet
16
17
  });
17
18
  function normalizeError(error, reqId, taskId, logger) {
18
19
  let a2aError;
19
- if (error instanceof a2a.A2AError) {
20
+ if (error instanceof a2a.MastraA2AError) {
20
21
  a2aError = error;
21
22
  } else if (error instanceof Error) {
22
- a2aError = a2a.A2AError.internalError(error.message, { stack: error.stack });
23
+ a2aError = a2a.MastraA2AError.internalError(error.message, { stack: error.stack });
23
24
  } else {
24
- a2aError = a2a.A2AError.internalError("An unknown error occurred.", error);
25
+ a2aError = a2a.MastraA2AError.internalError("An unknown error occurred.", error);
25
26
  }
26
27
  if (taskId && !a2aError.taskId) {
27
28
  a2aError.taskId = taskId;
@@ -39,7 +40,7 @@ function createErrorResponse(id, error) {
39
40
  }
40
41
  function createSuccessResponse(id, result) {
41
42
  if (!id) {
42
- throw a2a.A2AError.internalError("Cannot create success response for null ID.");
43
+ throw a2a.MastraA2AError.internalError("Cannot create success response for null ID.");
43
44
  }
44
45
  return {
45
46
  jsonrpc: "2.0",
@@ -54,7 +55,7 @@ function convertToCoreMessage(message) {
54
55
  };
55
56
  }
56
57
  function convertToCoreMessagePart(part) {
57
- switch (part.type) {
58
+ switch (part.kind) {
58
59
  case "text":
59
60
  return {
60
61
  type: "text",
@@ -63,7 +64,7 @@ function convertToCoreMessagePart(part) {
63
64
  case "file":
64
65
  return {
65
66
  type: "file",
66
- data: new URL(part.file.uri),
67
+ data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
67
68
  mimeType: part.file.mimeType
68
69
  };
69
70
  case "data":
@@ -71,39 +72,15 @@ function convertToCoreMessagePart(part) {
71
72
  }
72
73
  }
73
74
 
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
75
  // src/server/a2a/tasks.ts
98
76
  function isTaskStatusUpdate(update) {
99
77
  return "state" in update && !("parts" in update);
100
78
  }
101
79
  function isArtifactUpdate(update) {
102
- return "parts" in update;
80
+ return "kind" in update && update.kind === "artifact-update";
103
81
  }
104
- function applyUpdateToTaskAndHistory(current, update) {
105
- let newTask = structuredClone(current.task);
106
- let newHistory = structuredClone(current.history);
82
+ function applyUpdateToTask(current, update) {
83
+ let newTask = structuredClone(current);
107
84
  if (isTaskStatusUpdate(update)) {
108
85
  newTask.status = {
109
86
  ...newTask.status,
@@ -112,58 +89,42 @@ function applyUpdateToTaskAndHistory(current, update) {
112
89
  // Apply updates
113
90
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
114
91
  };
115
- if (update.message?.role === "agent") {
116
- newHistory.push(update.message);
117
- }
118
92
  } else if (isArtifactUpdate(update)) {
119
93
  if (!newTask.artifacts) {
120
94
  newTask.artifacts = [];
121
95
  } else {
122
96
  newTask.artifacts = [...newTask.artifacts];
123
97
  }
124
- const existingIndex = update.index ?? -1;
125
- let replaced = false;
126
- if (existingIndex >= 0 && existingIndex < newTask.artifacts.length) {
127
- const existingArtifact = newTask.artifacts[existingIndex];
98
+ const artifact = update.artifact;
99
+ const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
100
+ const existingArtifact = newTask.artifacts[existingIndex];
101
+ if (existingArtifact) {
128
102
  if (update.append) {
129
103
  const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
130
- appendedArtifact.parts.push(...update.parts);
131
- if (update.metadata) {
104
+ appendedArtifact.parts.push(...artifact.parts);
105
+ if (artifact.metadata) {
132
106
  appendedArtifact.metadata = {
133
107
  ...appendedArtifact.metadata || {},
134
- ...update.metadata
108
+ ...artifact.metadata
135
109
  };
136
110
  }
137
- if (update.lastChunk !== void 0) appendedArtifact.lastChunk = update.lastChunk;
138
- if (update.description) appendedArtifact.description = update.description;
111
+ if (artifact.description) appendedArtifact.description = artifact.description;
139
112
  newTask.artifacts[existingIndex] = appendedArtifact;
140
- replaced = true;
141
113
  } 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));
114
+ newTask.artifacts[existingIndex] = { ...artifact };
156
115
  }
116
+ } else {
117
+ newTask.artifacts.push({ ...artifact });
157
118
  }
158
119
  }
159
- return { task: newTask, history: newHistory };
120
+ return newTask;
160
121
  }
161
- async function loadOrCreateTaskAndHistory({
122
+ async function loadOrCreateTask({
162
123
  agentId,
163
124
  taskId,
164
125
  taskStore,
165
126
  message,
166
- sessionId,
127
+ contextId,
167
128
  metadata,
168
129
  logger
169
130
  }) {
@@ -171,47 +132,40 @@ async function loadOrCreateTaskAndHistory({
171
132
  if (!data) {
172
133
  const initialTask = {
173
134
  id: taskId,
174
- sessionId,
135
+ contextId: contextId || crypto.randomUUID(),
175
136
  status: {
176
137
  state: "submitted",
177
138
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
178
- message: null
139
+ message: void 0
179
140
  },
180
141
  artifacts: [],
181
- metadata
182
- };
183
- const initialData = {
184
- task: initialTask,
185
- history: [message]
142
+ history: [message],
143
+ metadata,
144
+ kind: "task"
186
145
  };
187
- logger?.info(`[Task ${taskId}] Created new task and history.`);
188
- await taskStore.save({ agentId, data: initialData });
189
- return initialData;
146
+ logger?.info(`[Task ${taskId}] Created new task.`);
147
+ await taskStore.save({ agentId, data: initialTask });
148
+ return initialTask;
190
149
  }
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;
150
+ logger?.info(`[Task ${taskId}] Loaded existing task.`);
151
+ let updatedData = data;
152
+ updatedData.history = [...data.history || [], message];
153
+ const { status } = data;
197
154
  const finalStates = ["completed", "failed", "canceled"];
198
155
  if (finalStates.includes(status.state)) {
199
156
  logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
200
- updatedData = applyUpdateToTaskAndHistory(updatedData, {
157
+ updatedData = applyUpdateToTask(updatedData, {
201
158
  state: "submitted",
202
- message: null
159
+ message: void 0
203
160
  });
204
161
  } else if (status.state === "input-required") {
205
162
  logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
206
- updatedData = applyUpdateToTaskAndHistory(updatedData, { state: "working" });
163
+ updatedData = applyUpdateToTask(updatedData, { state: "working" });
207
164
  } else if (status.state === "working") {
208
165
  logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
209
166
  }
210
167
  await taskStore.save({ agentId, data: updatedData });
211
- return {
212
- task: { ...updatedData.task },
213
- history: [...updatedData.history]
214
- };
168
+ return updatedData;
215
169
  }
216
170
  function createTaskContext({
217
171
  task,
@@ -228,15 +182,22 @@ function createTaskContext({
228
182
  }
229
183
 
230
184
  // 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)."),
185
+ var messageSendParamsSchema = zod.z.object({
233
186
  message: zod.z.object({
187
+ role: zod.z.enum(["user", "agent"]),
234
188
  parts: zod.z.array(
235
189
  zod.z.object({
236
- type: zod.z.enum(["text"]),
190
+ kind: zod.z.enum(["text"]),
237
191
  text: zod.z.string()
238
192
  })
239
- )
193
+ ),
194
+ kind: zod.z.literal("message"),
195
+ messageId: zod.z.string(),
196
+ contextId: zod.z.string().optional(),
197
+ taskId: zod.z.string().optional(),
198
+ referenceTaskIds: zod.z.array(zod.z.string()).optional(),
199
+ extensions: zod.z.array(zod.z.string()).optional(),
200
+ metadata: zod.z.record(zod.z.any()).optional()
240
201
  })
241
202
  });
242
203
  async function getAgentCardByIdHandler({
@@ -260,7 +221,7 @@ async function getAgentCardByIdHandler({
260
221
  ]);
261
222
  const agentCard = {
262
223
  name: agent.id || agentId,
263
- description: instructions,
224
+ description: chunkVY4ENABS_cjs.convertInstructionsToString(instructions),
264
225
  url: executionUrl,
265
226
  provider,
266
227
  version,
@@ -283,17 +244,17 @@ async function getAgentCardByIdHandler({
283
244
  };
284
245
  return agentCard;
285
246
  }
286
- function validateTaskSendParams(params) {
247
+ function validateMessageSendParams(params) {
287
248
  try {
288
- taskSendParamsSchema.parse(params);
249
+ messageSendParamsSchema.parse(params);
289
250
  } catch (error) {
290
251
  if (error instanceof zod.z.ZodError) {
291
- throw a2a.A2AError.invalidParams(error.errors[0].message);
252
+ throw a2a.MastraA2AError.invalidParams(error.errors[0].message);
292
253
  }
293
254
  throw error;
294
255
  }
295
256
  }
296
- async function handleTaskSend({
257
+ async function handleMessageSend({
297
258
  requestId,
298
259
  params,
299
260
  taskStore,
@@ -302,20 +263,22 @@ async function handleTaskSend({
302
263
  logger,
303
264
  runtimeContext
304
265
  }) {
305
- validateTaskSendParams(params);
306
- const { id: taskId, message, sessionId, metadata } = params;
307
- let currentData = await loadOrCreateTaskAndHistory({
266
+ validateMessageSendParams(params);
267
+ const { message, metadata } = params;
268
+ const { contextId } = message;
269
+ const taskId = message.taskId || crypto.randomUUID();
270
+ let currentData = await loadOrCreateTask({
308
271
  taskId,
309
272
  taskStore,
310
273
  agentId,
311
274
  message,
312
- sessionId,
275
+ contextId,
313
276
  metadata
314
277
  });
315
278
  createTaskContext({
316
- task: currentData.task,
279
+ task: currentData,
317
280
  userMessage: message,
318
- history: currentData.history,
281
+ history: currentData.history || [],
319
282
  activeCancellations: taskStore.activeCancellations
320
283
  });
321
284
  try {
@@ -323,16 +286,18 @@ async function handleTaskSend({
323
286
  runId: taskId,
324
287
  runtimeContext
325
288
  });
326
- currentData = applyUpdateToTaskAndHistory(currentData, {
289
+ currentData = applyUpdateToTask(currentData, {
327
290
  state: "completed",
328
291
  message: {
292
+ messageId: crypto.randomUUID(),
329
293
  role: "agent",
330
294
  parts: [
331
295
  {
332
- type: "text",
296
+ kind: "text",
333
297
  text
334
298
  }
335
- ]
299
+ ],
300
+ kind: "message"
336
301
  }
337
302
  });
338
303
  await taskStore.save({ agentId, data: currentData });
@@ -340,24 +305,26 @@ async function handleTaskSend({
340
305
  const failureStatusUpdate = {
341
306
  state: "failed",
342
307
  message: {
308
+ messageId: crypto.randomUUID(),
343
309
  role: "agent",
344
310
  parts: [
345
311
  {
346
- type: "text",
312
+ kind: "text",
347
313
  text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
348
314
  }
349
- ]
315
+ ],
316
+ kind: "message"
350
317
  }
351
318
  };
352
- currentData = applyUpdateToTaskAndHistory(currentData, failureStatusUpdate);
319
+ currentData = applyUpdateToTask(currentData, failureStatusUpdate);
353
320
  try {
354
321
  await taskStore.save({ agentId, data: currentData });
355
322
  } catch (saveError) {
356
- logger?.error(`Failed to save task ${taskId} after handler error:`, saveError?.message);
323
+ logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
357
324
  }
358
- return normalizeError(handlerError, requestId, taskId, logger);
325
+ return normalizeError(handlerError, requestId, currentData.id, logger);
359
326
  }
360
- return createSuccessResponse(requestId, currentData.task);
327
+ return createSuccessResponse(requestId, currentData);
361
328
  }
362
329
  async function handleTaskGet({
363
330
  requestId,
@@ -367,11 +334,11 @@ async function handleTaskGet({
367
334
  }) {
368
335
  const task = await taskStore.load({ agentId, taskId });
369
336
  if (!task) {
370
- throw a2a.A2AError.taskNotFound(taskId);
337
+ throw a2a.MastraA2AError.taskNotFound(taskId);
371
338
  }
372
339
  return createSuccessResponse(requestId, task);
373
340
  }
374
- async function* handleTaskSendSubscribe({
341
+ async function* handleMessageStream({
375
342
  requestId,
376
343
  params,
377
344
  taskStore,
@@ -383,13 +350,15 @@ async function* handleTaskSendSubscribe({
383
350
  yield createSuccessResponse(requestId, {
384
351
  state: "working",
385
352
  message: {
353
+ messageId: crypto.randomUUID(),
354
+ kind: "message",
386
355
  role: "agent",
387
- parts: [{ type: "text", text: "Generating response..." }]
356
+ parts: [{ kind: "text", text: "Generating response..." }]
388
357
  }
389
358
  });
390
359
  let result;
391
360
  try {
392
- result = await handleTaskSend({
361
+ result = await handleMessageSend({
393
362
  requestId,
394
363
  params,
395
364
  taskStore,
@@ -399,7 +368,7 @@ async function* handleTaskSendSubscribe({
399
368
  logger
400
369
  });
401
370
  } catch (err) {
402
- if (!(err instanceof a2a.A2AError)) {
371
+ if (!(err instanceof a2a.MastraA2AError)) {
403
372
  throw err;
404
373
  }
405
374
  result = createErrorResponse(requestId, err.toJSONRPCError());
@@ -418,25 +387,27 @@ async function handleTaskCancel({
418
387
  taskId
419
388
  });
420
389
  if (!data) {
421
- throw a2a.A2AError.taskNotFound(taskId);
390
+ throw a2a.MastraA2AError.taskNotFound(taskId);
422
391
  }
423
392
  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);
393
+ if (finalStates.includes(data.status.state)) {
394
+ logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
395
+ return createSuccessResponse(requestId, data);
427
396
  }
428
397
  taskStore.activeCancellations.add(taskId);
429
398
  const cancelUpdate = {
430
399
  state: "canceled",
431
400
  message: {
432
401
  role: "agent",
433
- parts: [{ type: "text", text: "Task cancelled by request." }]
402
+ parts: [{ kind: "text", text: "Task cancelled by request." }],
403
+ kind: "message",
404
+ messageId: crypto.randomUUID()
434
405
  }
435
406
  };
436
- data = applyUpdateToTaskAndHistory(data, cancelUpdate);
407
+ data = applyUpdateToTask(data, cancelUpdate);
437
408
  await taskStore.save({ agentId, data });
438
409
  taskStore.activeCancellations.delete(taskId);
439
- return createSuccessResponse(requestId, data.task);
410
+ return createSuccessResponse(requestId, data);
440
411
  }
441
412
  async function getAgentExecutionHandler({
442
413
  requestId,
@@ -445,16 +416,16 @@ async function getAgentExecutionHandler({
445
416
  runtimeContext,
446
417
  method,
447
418
  params,
448
- taskStore = new InMemoryTaskStore(),
419
+ taskStore,
449
420
  logger
450
421
  }) {
451
422
  const agent = mastra.getAgent(agentId);
452
423
  let taskId;
453
424
  try {
454
- taskId = params.id;
425
+ taskId = "id" in params ? params.id : params.message?.taskId || "No task ID provided";
455
426
  switch (method) {
456
- case "tasks/send": {
457
- const result2 = await handleTaskSend({
427
+ case "message/send": {
428
+ const result2 = await handleMessageSend({
458
429
  requestId,
459
430
  params,
460
431
  taskStore,
@@ -464,8 +435,8 @@ async function getAgentExecutionHandler({
464
435
  });
465
436
  return result2;
466
437
  }
467
- case "tasks/sendSubscribe":
468
- const result = await handleTaskSendSubscribe({
438
+ case "message/stream":
439
+ const result = await handleMessageStream({
469
440
  requestId,
470
441
  taskStore,
471
442
  params,
@@ -493,10 +464,10 @@ async function getAgentExecutionHandler({
493
464
  return result2;
494
465
  }
495
466
  default:
496
- throw a2a.A2AError.methodNotFound(method);
467
+ throw a2a.MastraA2AError.methodNotFound(method);
497
468
  }
498
469
  } catch (error) {
499
- if (error instanceof a2a.A2AError && taskId && !error.taskId) {
470
+ if (error instanceof a2a.MastraA2AError && taskId && !error.taskId) {
500
471
  error.taskId = taskId;
501
472
  }
502
473
  return normalizeError(error, requestId, taskId, logger);
@@ -506,9 +477,9 @@ async function getAgentExecutionHandler({
506
477
  exports.a2a_exports = a2a_exports;
507
478
  exports.getAgentCardByIdHandler = getAgentCardByIdHandler;
508
479
  exports.getAgentExecutionHandler = getAgentExecutionHandler;
480
+ exports.handleMessageSend = handleMessageSend;
481
+ exports.handleMessageStream = handleMessageStream;
509
482
  exports.handleTaskCancel = handleTaskCancel;
510
483
  exports.handleTaskGet = handleTaskGet;
511
- exports.handleTaskSend = handleTaskSend;
512
- exports.handleTaskSendSubscribe = handleTaskSendSubscribe;
513
- //# sourceMappingURL=chunk-GASWM5HJ.cjs.map
514
- //# sourceMappingURL=chunk-GASWM5HJ.cjs.map
484
+ //# sourceMappingURL=chunk-TOP25AIO.cjs.map
485
+ //# sourceMappingURL=chunk-TOP25AIO.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","convertInstructionsToString","result"],"mappings":"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","file":"chunk-TOP25AIO.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';\nimport { convertInstructionsToString } from '../utils';\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: convertInstructionsToString(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"]}