@mastra/server 0.0.0-vector-sources-20250516175436 → 0.0.0-vector-query-tool-provider-options-20250828222356

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/LICENSE.md +11 -42
  2. package/dist/{chunk-5SN4U5AC.cjs → chunk-3THIIWWW.cjs} +113 -137
  3. package/dist/chunk-3THIIWWW.cjs.map +1 -0
  4. package/dist/{chunk-57CJTIPW.cjs → chunk-4QSNRCOT.cjs} +4 -2
  5. package/dist/chunk-4QSNRCOT.cjs.map +1 -0
  6. package/dist/{chunk-P6SCPDYW.js → chunk-5QUKZCEF.js} +112 -136
  7. package/dist/chunk-5QUKZCEF.js.map +1 -0
  8. package/dist/{chunk-OCWPVYNI.cjs → chunk-7NADHFD2.cjs} +3 -0
  9. package/dist/chunk-7NADHFD2.cjs.map +1 -0
  10. package/dist/chunk-7QEJ5QG5.js +151 -0
  11. package/dist/chunk-7QEJ5QG5.js.map +1 -0
  12. package/dist/{chunk-ZE5AAC4I.cjs → chunk-A3FNPSBB.cjs} +36 -39
  13. package/dist/chunk-A3FNPSBB.cjs.map +1 -0
  14. package/dist/{chunk-MHKNLNAN.cjs → chunk-B2L53BNJ.cjs} +14 -9
  15. package/dist/chunk-B2L53BNJ.cjs.map +1 -0
  16. package/dist/{chunk-C7564HUT.js → chunk-B43YAQJR.js} +6 -4
  17. package/dist/chunk-B43YAQJR.js.map +1 -0
  18. package/dist/{chunk-TJKLBTFB.js → chunk-BUMPRH7R.js} +23 -26
  19. package/dist/chunk-BUMPRH7R.js.map +1 -0
  20. package/dist/chunk-CY4TP3FK.js +16 -0
  21. package/dist/chunk-CY4TP3FK.js.map +1 -0
  22. package/dist/chunk-D32MNBNS.js +17597 -0
  23. package/dist/chunk-D32MNBNS.js.map +1 -0
  24. package/dist/chunk-EMMSS5I5.cjs +37 -0
  25. package/dist/chunk-EMMSS5I5.cjs.map +1 -0
  26. package/dist/chunk-G3PMV62Z.js +33 -0
  27. package/dist/chunk-G3PMV62Z.js.map +1 -0
  28. package/dist/chunk-GU4EWMZB.cjs +769 -0
  29. package/dist/chunk-GU4EWMZB.cjs.map +1 -0
  30. package/dist/chunk-GUI3CROV.cjs +159 -0
  31. package/dist/chunk-GUI3CROV.cjs.map +1 -0
  32. package/dist/chunk-ID37OH5Z.js +517 -0
  33. package/dist/chunk-ID37OH5Z.js.map +1 -0
  34. package/dist/{chunk-VPNDC2DI.cjs → chunk-JGD42NME.cjs} +16 -14
  35. package/dist/chunk-JGD42NME.cjs.map +1 -0
  36. package/dist/chunk-JPY7GWFC.cjs +17614 -0
  37. package/dist/chunk-JPY7GWFC.cjs.map +1 -0
  38. package/dist/chunk-KLCYAQBL.cjs +120 -0
  39. package/dist/chunk-KLCYAQBL.cjs.map +1 -0
  40. package/dist/chunk-KNGXRN26.cjs +335 -0
  41. package/dist/chunk-KNGXRN26.cjs.map +1 -0
  42. package/dist/chunk-L265APUD.cjs +69 -0
  43. package/dist/chunk-L265APUD.cjs.map +1 -0
  44. package/dist/chunk-LF2ZLOFP.js +767 -0
  45. package/dist/chunk-LF2ZLOFP.js.map +1 -0
  46. package/dist/chunk-LUPY3MQY.js +571 -0
  47. package/dist/chunk-LUPY3MQY.js.map +1 -0
  48. package/dist/{chunk-NYN7KFXL.js → chunk-MMROOK5J.js} +3 -0
  49. package/dist/chunk-MMROOK5J.js.map +1 -0
  50. package/dist/chunk-NPE3X7FQ.cjs +88 -0
  51. package/dist/chunk-NPE3X7FQ.cjs.map +1 -0
  52. package/dist/{chunk-H5PTF3Y4.js → chunk-OW4FX5TS.js} +3 -1
  53. package/dist/chunk-OW4FX5TS.js.map +1 -0
  54. package/dist/{chunk-OR3CIE2H.js → chunk-PHZHWQZP.js} +10 -5
  55. package/dist/chunk-PHZHWQZP.js.map +1 -0
  56. package/dist/{chunk-HFWCEP5S.js → chunk-QBWF6U7Z.js} +36 -11
  57. package/dist/chunk-QBWF6U7Z.js.map +1 -0
  58. package/dist/chunk-R7NOGUZG.js +65 -0
  59. package/dist/chunk-R7NOGUZG.js.map +1 -0
  60. package/dist/chunk-RE4RPXT2.cjs +18 -0
  61. package/dist/chunk-RE4RPXT2.cjs.map +1 -0
  62. package/dist/chunk-ROA7BCHD.js +83 -0
  63. package/dist/chunk-ROA7BCHD.js.map +1 -0
  64. package/dist/{chunk-BNEY4P4P.cjs → chunk-T3TIA3O6.cjs} +20 -18
  65. package/dist/chunk-T3TIA3O6.cjs.map +1 -0
  66. package/dist/{chunk-EJO45KYT.js → chunk-TTHEEIZ3.js} +53 -50
  67. package/dist/chunk-TTHEEIZ3.js.map +1 -0
  68. package/dist/chunk-UVKXRPMV.cjs +588 -0
  69. package/dist/chunk-UVKXRPMV.cjs.map +1 -0
  70. package/dist/chunk-V5EWBGBF.cjs +534 -0
  71. package/dist/chunk-V5EWBGBF.cjs.map +1 -0
  72. package/dist/{chunk-55DOQLP6.js → chunk-WHN4VX55.js} +5 -3
  73. package/dist/chunk-WHN4VX55.js.map +1 -0
  74. package/dist/index.cjs +2 -0
  75. package/dist/index.cjs.map +1 -0
  76. package/dist/index.d.ts +1 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +2 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/server/a2a/protocol.d.ts +8 -0
  81. package/dist/server/a2a/protocol.d.ts.map +1 -0
  82. package/dist/server/a2a/store.cjs +25 -0
  83. package/dist/server/a2a/store.cjs.map +1 -0
  84. package/dist/server/a2a/store.d.ts +14 -0
  85. package/dist/server/a2a/store.d.ts.map +1 -0
  86. package/dist/server/a2a/store.js +23 -0
  87. package/dist/server/a2a/store.js.map +1 -0
  88. package/dist/server/a2a/tasks.d.ts +20 -0
  89. package/dist/server/a2a/tasks.d.ts.map +1 -0
  90. package/dist/server/handlers/a2a.cjs +13 -11
  91. package/dist/server/handlers/a2a.cjs.map +1 -0
  92. package/dist/server/handlers/a2a.d.ts +68 -6
  93. package/dist/server/handlers/a2a.d.ts.map +1 -0
  94. package/dist/server/handlers/a2a.js +3 -1
  95. package/dist/server/handlers/a2a.js.map +1 -0
  96. package/dist/server/handlers/agents.cjs +29 -7
  97. package/dist/server/handlers/agents.cjs.map +1 -0
  98. package/dist/server/handlers/agents.d.ts +111 -6
  99. package/dist/server/handlers/agents.d.ts.map +1 -0
  100. package/dist/server/handlers/agents.js +3 -1
  101. package/dist/server/handlers/agents.js.map +1 -0
  102. package/dist/server/handlers/error.cjs +4 -2
  103. package/dist/server/handlers/error.cjs.map +1 -0
  104. package/dist/server/handlers/error.d.ts +2 -1
  105. package/dist/server/handlers/error.d.ts.map +1 -0
  106. package/dist/server/handlers/error.js +3 -1
  107. package/dist/server/handlers/error.js.map +1 -0
  108. package/dist/server/handlers/legacyWorkflows.cjs +48 -0
  109. package/dist/server/handlers/legacyWorkflows.cjs.map +1 -0
  110. package/dist/server/handlers/legacyWorkflows.d.ts +59 -0
  111. package/dist/server/handlers/legacyWorkflows.d.ts.map +1 -0
  112. package/dist/server/handlers/legacyWorkflows.js +3 -0
  113. package/dist/server/handlers/legacyWorkflows.js.map +1 -0
  114. package/dist/server/handlers/logs.cjs +6 -4
  115. package/dist/server/handlers/logs.cjs.map +1 -0
  116. package/dist/server/handlers/logs.d.ts +34 -3
  117. package/dist/server/handlers/logs.d.ts.map +1 -0
  118. package/dist/server/handlers/logs.js +3 -1
  119. package/dist/server/handlers/logs.js.map +1 -0
  120. package/dist/server/handlers/memory.cjs +39 -9
  121. package/dist/server/handlers/memory.cjs.map +1 -0
  122. package/dist/server/handlers/memory.d.ts +118 -8
  123. package/dist/server/handlers/memory.d.ts.map +1 -0
  124. package/dist/server/handlers/memory.js +3 -1
  125. package/dist/server/handlers/memory.js.map +1 -0
  126. package/dist/server/handlers/network.cjs +7 -5
  127. package/dist/server/handlers/network.cjs.map +1 -0
  128. package/dist/server/handlers/network.d.ts +50 -4
  129. package/dist/server/handlers/network.d.ts.map +1 -0
  130. package/dist/server/handlers/network.js +3 -1
  131. package/dist/server/handlers/network.js.map +1 -0
  132. package/dist/server/handlers/observability.cjs +16 -0
  133. package/dist/server/handlers/observability.cjs.map +1 -0
  134. package/dist/server/handlers/observability.d.ts +23 -0
  135. package/dist/server/handlers/observability.d.ts.map +1 -0
  136. package/dist/server/handlers/observability.js +3 -0
  137. package/dist/server/handlers/observability.js.map +1 -0
  138. package/dist/server/handlers/scores.cjs +32 -0
  139. package/dist/server/handlers/scores.cjs.map +1 -0
  140. package/dist/server/handlers/scores.d.ts +49 -0
  141. package/dist/server/handlers/scores.d.ts.map +1 -0
  142. package/dist/server/handlers/scores.js +3 -0
  143. package/dist/server/handlers/scores.js.map +1 -0
  144. package/dist/server/handlers/telemetry.cjs +5 -3
  145. package/dist/server/handlers/telemetry.cjs.map +1 -0
  146. package/dist/server/handlers/telemetry.d.ts +32 -2
  147. package/dist/server/handlers/telemetry.d.ts.map +1 -0
  148. package/dist/server/handlers/telemetry.js +3 -1
  149. package/dist/server/handlers/telemetry.js.map +1 -0
  150. package/dist/server/handlers/tools.cjs +7 -5
  151. package/dist/server/handlers/tools.cjs.map +1 -0
  152. package/dist/server/handlers/tools.d.ts +21 -4
  153. package/dist/server/handlers/tools.d.ts.map +1 -0
  154. package/dist/server/handlers/tools.js +3 -1
  155. package/dist/server/handlers/tools.js.map +1 -0
  156. package/dist/server/handlers/utils.cjs +4 -2
  157. package/dist/server/handlers/utils.cjs.map +1 -0
  158. package/dist/server/handlers/utils.d.ts +2 -1
  159. package/dist/server/handlers/utils.d.ts.map +1 -0
  160. package/dist/server/handlers/utils.js +3 -1
  161. package/dist/server/handlers/utils.js.map +1 -0
  162. package/dist/server/handlers/vNextNetwork.cjs +220 -0
  163. package/dist/server/handlers/vNextNetwork.cjs.map +1 -0
  164. package/dist/server/handlers/vNextNetwork.d.ts +179 -0
  165. package/dist/server/handlers/vNextNetwork.d.ts.map +1 -0
  166. package/dist/server/handlers/vNextNetwork.js +213 -0
  167. package/dist/server/handlers/vNextNetwork.js.map +1 -0
  168. package/dist/server/handlers/vector.cjs +9 -7
  169. package/dist/server/handlers/vector.cjs.map +1 -0
  170. package/dist/server/handlers/vector.d.ts +51 -6
  171. package/dist/server/handlers/vector.d.ts.map +1 -0
  172. package/dist/server/handlers/vector.js +3 -1
  173. package/dist/server/handlers/vector.js.map +1 -0
  174. package/dist/server/handlers/voice.cjs +10 -4
  175. package/dist/server/handlers/voice.cjs.map +1 -0
  176. package/dist/server/handlers/voice.d.ts +39 -3
  177. package/dist/server/handlers/voice.d.ts.map +1 -0
  178. package/dist/server/handlers/voice.js +3 -1
  179. package/dist/server/handlers/voice.js.map +1 -0
  180. package/dist/server/handlers/workflows.cjs +35 -13
  181. package/dist/server/handlers/workflows.cjs.map +1 -0
  182. package/dist/server/handlers/workflows.d.ts +72 -10
  183. package/dist/server/handlers/workflows.d.ts.map +1 -0
  184. package/dist/server/handlers/workflows.js +3 -1
  185. package/dist/server/handlers/workflows.js.map +1 -0
  186. package/dist/server/handlers.cjs +45 -33
  187. package/dist/server/handlers.cjs.map +1 -0
  188. package/dist/server/handlers.d.ts +14 -11
  189. package/dist/server/handlers.d.ts.map +1 -0
  190. package/dist/server/handlers.js +15 -11
  191. package/dist/server/handlers.js.map +1 -0
  192. package/dist/server/http-exception.d.ts +87 -0
  193. package/dist/server/http-exception.d.ts.map +1 -0
  194. package/dist/server/types.d.ts +10 -0
  195. package/dist/server/types.d.ts.map +1 -0
  196. package/dist/server/utils.d.ts +3 -0
  197. package/dist/server/utils.d.ts.map +1 -0
  198. package/package.json +39 -20
  199. package/dist/_tsup-dts-rollup.d.cts +0 -816
  200. package/dist/_tsup-dts-rollup.d.ts +0 -816
  201. package/dist/chunk-64U3UDTH.cjs +0 -13
  202. package/dist/chunk-75ZPJI57.cjs +0 -9
  203. package/dist/chunk-D4IRYCUI.cjs +0 -235
  204. package/dist/chunk-DJJIUEL2.js +0 -211
  205. package/dist/chunk-HWZVAG3H.js +0 -49
  206. package/dist/chunk-I2B73Y4I.cjs +0 -332
  207. package/dist/chunk-LIVAK2DM.js +0 -2001
  208. package/dist/chunk-M5ABIP7D.js +0 -11
  209. package/dist/chunk-MIQYDLLM.js +0 -329
  210. package/dist/chunk-MLKGABMK.js +0 -7
  211. package/dist/chunk-OGCNNUHF.cjs +0 -54
  212. package/dist/chunk-UCTEMO2Q.cjs +0 -341
  213. package/dist/chunk-WUC6LSTW.js +0 -227
  214. package/dist/chunk-Y7UWRW5X.cjs +0 -221
  215. package/dist/chunk-YBVOQN4M.cjs +0 -94
  216. package/dist/chunk-YWLUOY3D.cjs +0 -2004
  217. package/dist/index.d.cts +0 -1
  218. package/dist/server/handlers/a2a.d.cts +0 -6
  219. package/dist/server/handlers/agents.d.cts +0 -6
  220. package/dist/server/handlers/error.d.cts +0 -1
  221. package/dist/server/handlers/logs.d.cts +0 -3
  222. package/dist/server/handlers/memory.d.cts +0 -8
  223. package/dist/server/handlers/network.d.cts +0 -4
  224. package/dist/server/handlers/telemetry.d.cts +0 -2
  225. package/dist/server/handlers/tools.d.cts +0 -4
  226. package/dist/server/handlers/utils.d.cts +0 -1
  227. package/dist/server/handlers/vNextWorkflows.cjs +0 -46
  228. package/dist/server/handlers/vNextWorkflows.d.cts +0 -10
  229. package/dist/server/handlers/vNextWorkflows.d.ts +0 -10
  230. package/dist/server/handlers/vNextWorkflows.js +0 -1
  231. package/dist/server/handlers/vector.d.cts +0 -6
  232. package/dist/server/handlers/voice.d.cts +0 -3
  233. package/dist/server/handlers/workflows.d.cts +0 -10
  234. package/dist/server/handlers.d.cts +0 -11
package/LICENSE.md CHANGED
@@ -1,46 +1,15 @@
1
- # Elastic License 2.0 (ELv2)
1
+ # Apache License 2.0
2
2
 
3
- Copyright (c) 2025 Mastra AI, Inc.
3
+ Copyright (c) 2025 Kepler Software, Inc.
4
4
 
5
- **Acceptance**
6
- By using the software, you agree to all of the terms and conditions below.
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
7
8
 
8
- **Copyright License**
9
- The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations and conditions below
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
10
 
11
- **Limitations**
12
- You may not provide the software to third parties as a hosted or managed service, where the service provides users with access to any substantial set of the features or functionality of the software.
13
-
14
- You may not move, change, disable, or circumvent the license key functionality in the software, and you may not remove or obscure any functionality in the software that is protected by the license key.
15
-
16
- You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor’s trademarks is subject to applicable law.
17
-
18
- **Patents**
19
- The licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
20
-
21
- **Notices**
22
- You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms.
23
-
24
- If you modify the software, you must include in any modified copies of the software prominent notices stating that you have modified the software.
25
-
26
- **No Other Rights**
27
- These terms do not imply any licenses other than those expressly granted in these terms.
28
-
29
- **Termination**
30
- If you use the software in violation of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently.
31
-
32
- **No Liability**
33
- As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.
34
-
35
- **Definitions**
36
- The _licensor_ is the entity offering these terms, and the _software_ is the software the licensor makes available under these terms, including any portion of it.
37
-
38
- _you_ refers to the individual or entity agreeing to these terms.
39
-
40
- _your company_ is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. _control_ means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
41
-
42
- _your licenses_ are all the licenses granted to you for the software under these terms.
43
-
44
- _use_ means anything you do with the software requiring one of your licenses.
45
-
46
- _trademark_ means trademarks, service marks, and similar rights.
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
@@ -1,27 +1,27 @@
1
1
  'use strict';
2
2
 
3
- var chunk75ZPJI57_cjs = require('./chunk-75ZPJI57.cjs');
3
+ var chunkEMMSS5I5_cjs = require('./chunk-EMMSS5I5.cjs');
4
4
  var a2a = require('@mastra/core/a2a');
5
5
  var zod = require('zod');
6
6
 
7
7
  // src/server/handlers/a2a.ts
8
8
  var a2a_exports = {};
9
- chunk75ZPJI57_cjs.__export(a2a_exports, {
9
+ chunkEMMSS5I5_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,39 +243,41 @@ 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,
300
260
  agent,
261
+ agentId,
301
262
  logger,
302
263
  runtimeContext
303
264
  }) {
304
- validateTaskSendParams(params);
305
- const agentId = agent.id;
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,37 +333,41 @@ 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,
378
344
  agent,
345
+ agentId,
379
346
  logger,
380
347
  runtimeContext
381
348
  }) {
382
349
  yield createSuccessResponse(requestId, {
383
350
  state: "working",
384
351
  message: {
352
+ messageId: crypto.randomUUID(),
353
+ kind: "message",
385
354
  role: "agent",
386
- parts: [{ type: "text", text: "Generating response..." }]
355
+ parts: [{ kind: "text", text: "Generating response..." }]
387
356
  }
388
357
  });
389
358
  let result;
390
359
  try {
391
- result = await handleTaskSend({
360
+ result = await handleMessageSend({
392
361
  requestId,
393
362
  params,
394
363
  taskStore,
395
364
  agent,
365
+ agentId,
396
366
  runtimeContext,
397
367
  logger
398
368
  });
399
369
  } catch (err) {
400
- if (!(err instanceof a2a.A2AError)) {
370
+ if (!(err instanceof a2a.MastraA2AError)) {
401
371
  throw err;
402
372
  }
403
373
  result = createErrorResponse(requestId, err.toJSONRPCError());
@@ -416,25 +386,27 @@ async function handleTaskCancel({
416
386
  taskId
417
387
  });
418
388
  if (!data) {
419
- throw a2a.A2AError.taskNotFound(taskId);
389
+ throw a2a.MastraA2AError.taskNotFound(taskId);
420
390
  }
421
391
  const finalStates = ["completed", "failed", "canceled"];
422
- if (finalStates.includes(data.task.status.state)) {
423
- logger?.info(`Task ${taskId} already in final state ${data.task.status.state}, cannot cancel.`);
424
- 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);
425
395
  }
426
396
  taskStore.activeCancellations.add(taskId);
427
397
  const cancelUpdate = {
428
398
  state: "canceled",
429
399
  message: {
430
400
  role: "agent",
431
- parts: [{ type: "text", text: "Task cancelled by request." }]
401
+ parts: [{ kind: "text", text: "Task cancelled by request." }],
402
+ kind: "message",
403
+ messageId: crypto.randomUUID()
432
404
  }
433
405
  };
434
- data = applyUpdateToTaskAndHistory(data, cancelUpdate);
406
+ data = applyUpdateToTask(data, cancelUpdate);
435
407
  await taskStore.save({ agentId, data });
436
408
  taskStore.activeCancellations.delete(taskId);
437
- return createSuccessResponse(requestId, data.task);
409
+ return createSuccessResponse(requestId, data);
438
410
  }
439
411
  async function getAgentExecutionHandler({
440
412
  requestId,
@@ -443,30 +415,32 @@ async function getAgentExecutionHandler({
443
415
  runtimeContext,
444
416
  method,
445
417
  params,
446
- taskStore = new InMemoryTaskStore(),
418
+ taskStore,
447
419
  logger
448
420
  }) {
449
421
  const agent = mastra.getAgent(agentId);
450
422
  let taskId;
451
423
  try {
452
- taskId = params.id;
424
+ taskId = "id" in params ? params.id : params.message?.taskId || "No task ID provided";
453
425
  switch (method) {
454
- case "tasks/send": {
455
- const result2 = await handleTaskSend({
426
+ case "message/send": {
427
+ const result2 = await handleMessageSend({
456
428
  requestId,
457
429
  params,
458
430
  taskStore,
459
431
  agent,
432
+ agentId,
460
433
  runtimeContext
461
434
  });
462
435
  return result2;
463
436
  }
464
- case "tasks/sendSubscribe":
465
- const result = await handleTaskSendSubscribe({
437
+ case "message/stream":
438
+ const result = await handleMessageStream({
466
439
  requestId,
467
440
  taskStore,
468
441
  params,
469
442
  agent,
443
+ agentId,
470
444
  runtimeContext
471
445
  });
472
446
  return result;
@@ -489,10 +463,10 @@ async function getAgentExecutionHandler({
489
463
  return result2;
490
464
  }
491
465
  default:
492
- throw a2a.A2AError.methodNotFound(method);
466
+ throw a2a.MastraA2AError.methodNotFound(method);
493
467
  }
494
468
  } catch (error) {
495
- if (error instanceof a2a.A2AError && taskId && !error.taskId) {
469
+ if (error instanceof a2a.MastraA2AError && taskId && !error.taskId) {
496
470
  error.taskId = taskId;
497
471
  }
498
472
  return normalizeError(error, requestId, taskId, logger);
@@ -502,7 +476,9 @@ async function getAgentExecutionHandler({
502
476
  exports.a2a_exports = a2a_exports;
503
477
  exports.getAgentCardByIdHandler = getAgentCardByIdHandler;
504
478
  exports.getAgentExecutionHandler = getAgentExecutionHandler;
479
+ exports.handleMessageSend = handleMessageSend;
480
+ exports.handleMessageStream = handleMessageStream;
505
481
  exports.handleTaskCancel = handleTaskCancel;
506
482
  exports.handleTaskGet = handleTaskGet;
507
- exports.handleTaskSend = handleTaskSend;
508
- exports.handleTaskSendSubscribe = handleTaskSendSubscribe;
483
+ //# sourceMappingURL=chunk-3THIIWWW.cjs.map
484
+ //# sourceMappingURL=chunk-3THIIWWW.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-3THIIWWW.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"]}