@mastra/server 1.65.0-alpha.4 → 1.65.0-alpha.6
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.
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +14 -1
- package/dist/{a2a-C7OgMND3.cjs → a2a-CW4FVjHx.cjs} +72 -21
- package/dist/a2a-CW4FVjHx.cjs.map +1 -0
- package/dist/{a2a-DdCHhKh5.js → a2a-Di7S6YaM.js} +72 -21
- package/dist/a2a-Di7S6YaM.js.map +1 -0
- package/dist/{api-schema-manifest-DWUCeCdk.js → api-schema-manifest-CSPluDJK.js} +2 -2
- package/dist/{api-schema-manifest-DWUCeCdk.js.map → api-schema-manifest-CSPluDJK.js.map} +1 -1
- package/dist/{api-schema-manifest-BAYXZRQV.cjs → api-schema-manifest-DeoaWexk.cjs} +2 -2
- package/dist/{api-schema-manifest-BAYXZRQV.cjs.map → api-schema-manifest-DeoaWexk.cjs.map} +1 -1
- package/dist/{dist-D5-KXzbU.cjs → dist-Ce2eoqqj.cjs} +2 -2
- package/dist/{dist-D5-KXzbU.cjs.map → dist-Ce2eoqqj.cjs.map} +1 -1
- package/dist/{dist-B7pj7Z5V.js → dist-HbVtRfZ7.js} +2 -2
- package/dist/{dist-B7pj7Z5V.js.map → dist-HbVtRfZ7.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{routes-D2mlusgM.js → routes-BHvMz2dW.js} +2 -2
- package/dist/{routes-D2mlusgM.js.map → routes-BHvMz2dW.js.map} +1 -1
- package/dist/{routes-DR75HxqP.cjs → routes-BsI2g0fK.cjs} +2 -2
- package/dist/{routes-DR75HxqP.cjs.map → routes-BsI2g0fK.cjs.map} +1 -1
- package/dist/server/a2a/tasks.d.ts +13 -1
- package/dist/server/a2a/tasks.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.d.ts.map +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/datasets.cjs +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/system.cjs +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers.cjs +1 -1
- package/dist/server/handlers.js +1 -1
- package/dist/server/server-adapter/index.cjs +2 -2
- package/dist/server/server-adapter/index.js +2 -2
- package/package.json +5 -5
- package/dist/a2a-C7OgMND3.cjs.map +0 -1
- package/dist/a2a-DdCHhKh5.js.map +0 -1
package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts
CHANGED
|
@@ -55,6 +55,19 @@ declare const MASTRA_AUTH_TOKEN_KEY = "mastra__authToken";
|
|
|
55
55
|
* nested delegated runs. Internal to delegation — do not set it yourself.
|
|
56
56
|
*/
|
|
57
57
|
declare const MASTRA_INHERITED_MEMORY_KEY = "mastra__inheritedMemory";
|
|
58
|
+
/**
|
|
59
|
+
* Reserved key naming who sent a user message: `{ id, name?, avatarUrl? }`.
|
|
60
|
+
* Set by the host that authenticated the request; the agent-controller copies
|
|
61
|
+
* it onto the sent message as `providerMetadata.mastra.author` so a shared
|
|
62
|
+
* thread can show who wrote what.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* // In your auth middleware:
|
|
67
|
+
* requestContext.setRaw(MASTRA_MESSAGE_AUTHOR_KEY, { id: user.id, name: user.name, avatarUrl: user.avatarUrl });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
declare const MASTRA_MESSAGE_AUTHOR_KEY = "mastra__messageAuthor";
|
|
58
71
|
type VersionSelector = {
|
|
59
72
|
versionId: string;
|
|
60
73
|
} | {
|
|
@@ -215,5 +228,5 @@ declare class RequestContext<Values extends Record<string, any> | unknown = unkn
|
|
|
215
228
|
get all(): Values extends Record<string, any> ? Values : Record<string, any>;
|
|
216
229
|
}
|
|
217
230
|
//#endregion
|
|
218
|
-
export { MASTRA_AUTH_TOKEN_KEY, MASTRA_INHERITED_MEMORY_KEY, MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, MASTRA_VERSIONS_KEY, RequestContext, VersionOverrides, VersionSelector, mergeVersionOverrides };
|
|
231
|
+
export { MASTRA_AUTH_TOKEN_KEY, MASTRA_INHERITED_MEMORY_KEY, MASTRA_MESSAGE_AUTHOR_KEY, MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, MASTRA_VERSIONS_KEY, RequestContext, VersionOverrides, VersionSelector, mergeVersionOverrides };
|
|
219
232
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -14,6 +14,7 @@ let dns_promises = require("dns/promises");
|
|
|
14
14
|
let http = require("http");
|
|
15
15
|
let https = require("https");
|
|
16
16
|
let net = require("net");
|
|
17
|
+
let _mastra_core_request_context = require("@mastra/core/request-context");
|
|
17
18
|
//#region ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js
|
|
18
19
|
var require_canonicalize = /* @__PURE__ */ require_rolldown_runtime.__commonJSMin(((exports, module) => {
|
|
19
20
|
module.exports = function serialize(object) {
|
|
@@ -349,17 +350,37 @@ function applyUpdateToTask(current, update) {
|
|
|
349
350
|
}
|
|
350
351
|
return newTask;
|
|
351
352
|
}
|
|
352
|
-
|
|
353
|
+
function usableId(value) {
|
|
354
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
355
|
+
}
|
|
356
|
+
function resolveTaskMemory({ task, agentId, requestContext, metadata, message }) {
|
|
357
|
+
const trustedResource = usableId(requestContext?.get(_mastra_core_request_context.MASTRA_RESOURCE_ID_KEY));
|
|
358
|
+
const trustedThread = usableId(requestContext?.get(_mastra_core_request_context.MASTRA_THREAD_ID_KEY));
|
|
359
|
+
const storedResource = usableId(task?.metadata?.resourceId);
|
|
360
|
+
if (task && (trustedResource && storedResource && trustedResource !== storedResource || trustedThread && trustedThread !== task.contextId)) throw _mastra_core_a2a.MastraA2AError.invalidRequest("Task memory identity conflicts with the authenticated request.");
|
|
361
|
+
return {
|
|
362
|
+
thread: task?.contextId ?? trustedThread ?? message?.contextId,
|
|
363
|
+
resource: task ? storedResource ?? trustedResource ?? agentId : trustedResource ?? usableId(metadata?.resourceId) ?? usableId(message?.metadata?.resourceId) ?? agentId
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
async function loadOrCreateTask({ agentId, taskId, taskStore, message, contextId, metadata, logger, requestContext }) {
|
|
353
367
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
354
368
|
const snapshot = taskStore.loadWithVersion({
|
|
355
369
|
agentId,
|
|
356
370
|
taskId
|
|
357
371
|
});
|
|
358
372
|
const data = snapshot?.task;
|
|
373
|
+
const memory = resolveTaskMemory({
|
|
374
|
+
task: data,
|
|
375
|
+
agentId,
|
|
376
|
+
requestContext,
|
|
377
|
+
metadata,
|
|
378
|
+
message
|
|
379
|
+
});
|
|
359
380
|
if (!data) {
|
|
360
381
|
const initialTask = {
|
|
361
382
|
id: taskId,
|
|
362
|
-
contextId: contextId || crypto.randomUUID(),
|
|
383
|
+
contextId: memory.thread || contextId || crypto.randomUUID(),
|
|
363
384
|
status: {
|
|
364
385
|
state: "submitted",
|
|
365
386
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -367,7 +388,10 @@ async function loadOrCreateTask({ agentId, taskId, taskStore, message, contextId
|
|
|
367
388
|
},
|
|
368
389
|
artifacts: [],
|
|
369
390
|
history: [message],
|
|
370
|
-
metadata
|
|
391
|
+
metadata: {
|
|
392
|
+
...metadata,
|
|
393
|
+
resourceId: memory.resource
|
|
394
|
+
},
|
|
371
395
|
kind: "task"
|
|
372
396
|
};
|
|
373
397
|
logger?.info(`[Task ${taskId}] Created new task.`);
|
|
@@ -388,6 +412,10 @@ async function loadOrCreateTask({ agentId, taskId, taskStore, message, contextId
|
|
|
388
412
|
if (isTerminalTaskState(status.state)) throw _mastra_core_a2a.MastraA2AError.invalidRequest(`Task ${taskId} is in terminal state ${status.state} and cannot be restarted.`);
|
|
389
413
|
let updatedData = {
|
|
390
414
|
...data,
|
|
415
|
+
metadata: {
|
|
416
|
+
...data.metadata,
|
|
417
|
+
resourceId: memory.resource
|
|
418
|
+
},
|
|
391
419
|
history: [...data.history || [], message]
|
|
392
420
|
};
|
|
393
421
|
if (status.state === "input-required" || status.state === "auth-required") {
|
|
@@ -1056,10 +1084,16 @@ function getTaskArtifactUpdates({ previous, next }) {
|
|
|
1056
1084
|
artifact: structuredClone(artifact)
|
|
1057
1085
|
}));
|
|
1058
1086
|
}
|
|
1059
|
-
async function executeMessageSend({ requestId, message,
|
|
1060
|
-
const { contextId } = message;
|
|
1087
|
+
async function executeMessageSend({ requestId, message, currentData, taskStore, pushNotificationSender, agent, agentId, logger, requestContext, resume }) {
|
|
1061
1088
|
try {
|
|
1062
|
-
const
|
|
1089
|
+
const memory = {
|
|
1090
|
+
...resolveTaskMemory({
|
|
1091
|
+
task: currentData,
|
|
1092
|
+
agentId,
|
|
1093
|
+
requestContext
|
|
1094
|
+
}),
|
|
1095
|
+
thread: currentData.contextId
|
|
1096
|
+
};
|
|
1063
1097
|
const result = resume ? await agent.resumeGenerate(normalizeResumeData(extractResumeData(message), resume.requiresApproval), {
|
|
1064
1098
|
runId: resume.runId,
|
|
1065
1099
|
...resume.toolCallId ? { toolCallId: resume.toolCallId } : {},
|
|
@@ -1067,10 +1101,7 @@ async function executeMessageSend({ requestId, message, metadata, currentData, t
|
|
|
1067
1101
|
}) : await agent.generate([convertToCoreMessage(message)], {
|
|
1068
1102
|
runId: currentData.id,
|
|
1069
1103
|
requestContext,
|
|
1070
|
-
|
|
1071
|
-
threadId: contextId,
|
|
1072
|
-
resourceId
|
|
1073
|
-
} : {}
|
|
1104
|
+
memory
|
|
1074
1105
|
});
|
|
1075
1106
|
const latestTask = await taskStore.load({
|
|
1076
1107
|
agentId,
|
|
@@ -1173,6 +1204,13 @@ async function handleMessageSend({ requestId, params, taskStore, pushNotificatio
|
|
|
1173
1204
|
taskId
|
|
1174
1205
|
})?.task;
|
|
1175
1206
|
if (message.taskId && !existingTask) throw _mastra_core_a2a.MastraA2AError.taskNotFound(message.taskId);
|
|
1207
|
+
resolveTaskMemory({
|
|
1208
|
+
task: existingTask,
|
|
1209
|
+
agentId,
|
|
1210
|
+
requestContext,
|
|
1211
|
+
metadata,
|
|
1212
|
+
message
|
|
1213
|
+
});
|
|
1176
1214
|
if (params.configuration?.blocking === false && existingTask?.status.state === "working") return createSuccessResponse(requestId, existingTask);
|
|
1177
1215
|
if (existingTask?.status.state === "working" && getSuspendedRunId(existingTask)) return createSuccessResponse(requestId, await waitForClaimedResume({
|
|
1178
1216
|
taskStore,
|
|
@@ -1200,7 +1238,8 @@ async function handleMessageSend({ requestId, params, taskStore, pushNotificatio
|
|
|
1200
1238
|
agentId,
|
|
1201
1239
|
message,
|
|
1202
1240
|
contextId,
|
|
1203
|
-
metadata
|
|
1241
|
+
metadata,
|
|
1242
|
+
requestContext
|
|
1204
1243
|
});
|
|
1205
1244
|
if (params.configuration?.pushNotificationConfig) resolvedPushNotificationStore.set({
|
|
1206
1245
|
agentId,
|
|
@@ -1228,7 +1267,6 @@ async function handleMessageSend({ requestId, params, taskStore, pushNotificatio
|
|
|
1228
1267
|
const execution = executeMessageSend({
|
|
1229
1268
|
requestId,
|
|
1230
1269
|
message,
|
|
1231
|
-
metadata,
|
|
1232
1270
|
currentData,
|
|
1233
1271
|
taskStore,
|
|
1234
1272
|
pushNotificationSender: resolvedPushNotificationSender,
|
|
@@ -1337,10 +1375,18 @@ async function* handleMessageStream({ requestId, params, taskStore, pushNotifica
|
|
|
1337
1375
|
const { message, metadata } = params;
|
|
1338
1376
|
const { contextId } = message;
|
|
1339
1377
|
const taskId = message.taskId || crypto.randomUUID();
|
|
1340
|
-
|
|
1378
|
+
const existingTask = taskStore.loadWithVersion({
|
|
1341
1379
|
agentId,
|
|
1342
1380
|
taskId
|
|
1343
|
-
})
|
|
1381
|
+
})?.task;
|
|
1382
|
+
if (message.taskId && !existingTask) throw _mastra_core_a2a.MastraA2AError.taskNotFound(message.taskId);
|
|
1383
|
+
resolveTaskMemory({
|
|
1384
|
+
task: existingTask,
|
|
1385
|
+
agentId,
|
|
1386
|
+
requestContext,
|
|
1387
|
+
metadata,
|
|
1388
|
+
message
|
|
1389
|
+
});
|
|
1344
1390
|
const resume = await claimInterruptedTaskResume({
|
|
1345
1391
|
taskStore,
|
|
1346
1392
|
agentId,
|
|
@@ -1356,7 +1402,8 @@ async function* handleMessageStream({ requestId, params, taskStore, pushNotifica
|
|
|
1356
1402
|
agentId,
|
|
1357
1403
|
message,
|
|
1358
1404
|
contextId,
|
|
1359
|
-
metadata
|
|
1405
|
+
metadata,
|
|
1406
|
+
requestContext
|
|
1360
1407
|
});
|
|
1361
1408
|
if (params.configuration?.pushNotificationConfig) resolvedPushNotificationStore.set({
|
|
1362
1409
|
agentId,
|
|
@@ -1389,7 +1436,14 @@ async function* handleMessageStream({ requestId, params, taskStore, pushNotifica
|
|
|
1389
1436
|
});
|
|
1390
1437
|
try {
|
|
1391
1438
|
yield createSuccessResponse(requestId, currentData);
|
|
1392
|
-
const
|
|
1439
|
+
const memory = {
|
|
1440
|
+
...resolveTaskMemory({
|
|
1441
|
+
task: currentData,
|
|
1442
|
+
agentId,
|
|
1443
|
+
requestContext
|
|
1444
|
+
}),
|
|
1445
|
+
thread: currentData.contextId
|
|
1446
|
+
};
|
|
1393
1447
|
const result = resume ? await agent.resumeStream(normalizeResumeData(extractResumeData(message), resume.requiresApproval), {
|
|
1394
1448
|
runId: resume.runId,
|
|
1395
1449
|
...resume.toolCallId ? { toolCallId: resume.toolCallId } : {},
|
|
@@ -1399,10 +1453,7 @@ async function* handleMessageStream({ requestId, params, taskStore, pushNotifica
|
|
|
1399
1453
|
runId: taskId,
|
|
1400
1454
|
requestContext,
|
|
1401
1455
|
abortSignal: taskAbortController.signal,
|
|
1402
|
-
|
|
1403
|
-
threadId: contextId,
|
|
1404
|
-
resourceId
|
|
1405
|
-
} : {}
|
|
1456
|
+
memory
|
|
1406
1457
|
});
|
|
1407
1458
|
let sawTextArtifact = false;
|
|
1408
1459
|
let pendingTextChunk;
|
|
@@ -2071,4 +2122,4 @@ Object.defineProperty(exports, "resolveA2AProtocolVersion", {
|
|
|
2071
2122
|
}
|
|
2072
2123
|
});
|
|
2073
2124
|
|
|
2074
|
-
//# sourceMappingURL=a2a-
|
|
2125
|
+
//# sourceMappingURL=a2a-CW4FVjHx.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-CW4FVjHx.cjs","names":["crypto","MastraA2AError","defaultLookup","httpsRequest","httpRequest","MASTRA_RESOURCE_ID_KEY","MASTRA_THREAD_ID_KEY","MastraA2AError","TaskStoreVersionConflictError","z","getAgentFromSystem","convertInstructionsToString","getPublicOrigin","MastraA2AError","TaskStoreVersionConflictError","createRoute","a2aAgentIdPathParams","agentCardResponseSchema","agentExecutionBodySchema","agentExecutionResponseSchema"],"sources":["../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js","../src/server/a2a/agent-card-signing.ts","../src/server/a2a/protocol.ts","../src/server/a2a/push-notification-sender.ts","../src/server/a2a/push-notification-store.ts","../src/server/a2a/task-state.ts","../src/server/a2a/tasks.ts","../src/server/handlers/a2a.ts"],"sourcesContent":["/* jshint esversion: 6 */\n/* jslint node: true */\n'use strict';\n\nmodule.exports = function serialize (object) {\n if (object === null || typeof object !== 'object' || object.toJSON != null) {\n return JSON.stringify(object);\n }\n\n if (Array.isArray(object)) {\n return '[' + object.reduce((t, cv, ci) => {\n const comma = ci === 0 ? '' : ',';\n const value = cv === undefined || typeof cv === 'symbol' ? null : cv;\n return t + comma + serialize(value);\n }, '') + ']';\n }\n\n return '{' + Object.keys(object).sort().reduce((t, cv, ci) => {\n if (object[cv] === undefined ||\n typeof object[cv] === 'symbol') {\n return t;\n }\n const comma = t.length === 0 ? '' : ',';\n return t + comma + serialize(cv) + ':' + serialize(object[cv]);\n }, '') + '}';\n};\n","import * as crypto from 'node:crypto';\nimport type { AgentCard, AgentCardSignature } from '@mastra/core/a2a';\nimport type { A2AAgentCardSigningConfig } from '@mastra/core/server';\nimport canonicalize from 'canonicalize';\n\nconst SUPPORTED_JWS_ALGORITHMS = new Set<string>([\n 'ES256',\n 'ES384',\n 'ES512',\n 'RS256',\n 'RS384',\n 'RS512',\n 'PS256',\n 'PS384',\n 'PS512',\n]);\n\nfunction stripAgentCardSignatures(agentCard: AgentCard): AgentCard {\n const unsignedCard = structuredClone(agentCard) as AgentCard & { signatures?: AgentCardSignature[] };\n delete unsignedCard.signatures;\n return unsignedCard;\n}\n\nfunction importSigningKey(signing: A2AAgentCardSigningConfig) {\n const { privateKey } = signing;\n\n if (typeof privateKey === 'string') {\n return crypto.createPrivateKey(privateKey);\n }\n\n return crypto.createPrivateKey({\n key: privateKey,\n format: 'jwk',\n });\n}\n\nfunction getProtectedHeader(signing: A2AAgentCardSigningConfig): Record<string, unknown> {\n const { alg, ...rest } = signing.protectedHeader;\n\n if (!SUPPORTED_JWS_ALGORITHMS.has(alg)) {\n throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${alg}`);\n }\n\n return {\n ...rest,\n alg,\n };\n}\n\ntype SignatureOptions = Pick<crypto.SignKeyObjectInput, 'dsaEncoding' | 'padding' | 'saltLength'>;\n\nfunction getSignatureOptions(algorithm: string): SignatureOptions {\n if (algorithm.startsWith('ES')) {\n return { dsaEncoding: 'ieee-p1363' as const };\n }\n\n if (algorithm.startsWith('PS')) {\n return {\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST,\n };\n }\n\n return {};\n}\n\nfunction getDigestAlgorithm(algorithm: string): string {\n if (algorithm.endsWith('256')) return 'sha256';\n if (algorithm.endsWith('384')) return 'sha384';\n if (algorithm.endsWith('512')) return 'sha512';\n throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${algorithm}`);\n}\n\nexport async function signAgentCard({\n agentCard,\n signing,\n}: {\n agentCard: AgentCard;\n signing: A2AAgentCardSigningConfig;\n}): Promise<AgentCard> {\n const canonicalPayload = canonicalize(stripAgentCardSignatures(agentCard));\n\n if (!canonicalPayload) {\n throw new Error('Failed to canonicalize A2A Agent Card for signing');\n }\n\n const key = importSigningKey(signing);\n const protectedHeader = getProtectedHeader(signing);\n const encodedHeader = Buffer.from(JSON.stringify(protectedHeader), 'utf8').toString('base64url');\n const encodedPayload = Buffer.from(canonicalPayload, 'utf8').toString('base64url');\n const signingInput = `${encodedHeader}.${encodedPayload}`;\n const signatureBuffer = crypto.sign(\n getDigestAlgorithm(String(protectedHeader.alg)),\n Buffer.from(signingInput, 'utf8'),\n {\n key,\n ...getSignatureOptions(String(protectedHeader.alg)),\n },\n );\n const signatureValue = signatureBuffer.toString('base64url');\n\n if (!encodedHeader || !signatureValue) {\n throw new Error('Failed to create compact JWS for A2A Agent Card');\n }\n\n const signature: AgentCardSignature = {\n protected: encodedHeader,\n signature: signatureValue,\n header: signing.header,\n };\n\n return {\n ...agentCard,\n signatures: [...(agentCard.signatures ?? []), signature],\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 === null) {\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 { lookup as defaultLookup } from 'node:dns/promises';\nimport { request as httpRequest } from 'node:http';\nimport { request as httpsRequest } from 'node:https';\nimport { isIP } from 'node:net';\nimport type { Task } from '@mastra/core/a2a';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { InMemoryPushNotificationStore } from './push-notification-store';\n\nexport const DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER = 'X-A2A-Notification-Token';\n\nfunction isDisallowedHostname(hostname: string) {\n const normalized = hostname.toLowerCase();\n\n return (\n normalized === 'localhost' ||\n normalized.endsWith('.localhost') ||\n normalized.endsWith('.local') ||\n normalized.endsWith('.internal') ||\n !normalized.includes('.')\n );\n}\n\nfunction isDisallowedIpv4(address: string) {\n const [first = -1, second = -1] = address.split('.').map(Number);\n\n return (\n first === 10 ||\n first === 127 ||\n (first === 169 && second === 254) ||\n (first === 172 && second >= 16 && second <= 31) ||\n (first === 192 && second === 168)\n );\n}\n\nfunction isDisallowedIpv6(address: string) {\n const normalized = address.toLowerCase();\n\n return (\n normalized === '::1' ||\n normalized.startsWith('fe8') ||\n normalized.startsWith('fe9') ||\n normalized.startsWith('fea') ||\n normalized.startsWith('feb') ||\n normalized.startsWith('fc') ||\n normalized.startsWith('fd')\n );\n}\n\nfunction isDisallowedIpAddress(address: string) {\n const version = isIP(address);\n if (version === 4) {\n return isDisallowedIpv4(address);\n }\n\n if (version === 6) {\n return isDisallowedIpv6(address);\n }\n\n return false;\n}\n\nexport class DefaultPushNotificationSender {\n constructor(\n private readonly pushNotificationStore: InMemoryPushNotificationStore,\n private readonly options: {\n timeout?: number;\n tokenHeaderName?: string;\n fetch?: typeof fetch;\n lookup?: typeof defaultLookup;\n allowedHosts?: string[];\n } = {},\n ) {}\n\n getStore() {\n return this.pushNotificationStore;\n }\n\n private async resolveValidatedDestination(rawUrl: string) {\n const url = new URL(rawUrl);\n\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new Error(`Push notification URL must use http or https: ${url.protocol}`);\n }\n\n const hostname = url.hostname.toLowerCase();\n if (this.options.allowedHosts && !this.options.allowedHosts.includes(hostname)) {\n throw new Error(`Push notification host is not allowed: ${hostname}`);\n }\n\n if (isDisallowedHostname(hostname)) {\n throw new Error(`Push notification URL must not target local or internal hosts: ${hostname}`);\n }\n\n if (isDisallowedIpAddress(hostname)) {\n throw new Error(`Push notification URL must not target local or private IPs: ${hostname}`);\n }\n\n const resolvedAddresses =\n isIP(hostname) === 0\n ? await (this.options.lookup ?? defaultLookup)(hostname, { all: true, verbatim: true })\n : [{ address: hostname, family: isIP(hostname) }];\n\n if (resolvedAddresses.some(result => isDisallowedIpAddress(result.address))) {\n throw new Error(`Push notification URL resolved to a local or private IP: ${hostname}`);\n }\n\n const requestUrl = new URL(url.toString());\n requestUrl.hostname = resolvedAddresses[0]!.address;\n\n return {\n originalUrl: url,\n requestUrl,\n hostHeader: url.host,\n servername: isIP(hostname) === 0 ? hostname : undefined,\n };\n }\n\n private async postTaskSnapshot({\n requestUrl,\n hostHeader,\n servername,\n headers,\n body,\n timeout,\n }: {\n requestUrl: URL;\n hostHeader: string;\n servername?: string;\n headers: Headers;\n body: string;\n timeout: number;\n }) {\n headers.set('host', hostHeader);\n const signal = typeof AbortSignal.timeout === 'function' ? AbortSignal.timeout(timeout) : undefined;\n\n if (this.options.fetch) {\n return this.options.fetch(requestUrl.toString(), {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n const transport = requestUrl.protocol === 'https:' ? httpsRequest : httpRequest;\n\n return await new Promise<{ ok: boolean; status: number; statusText: string }>((resolve, reject) => {\n const request = transport(\n {\n protocol: requestUrl.protocol,\n hostname: requestUrl.hostname,\n port: requestUrl.port || undefined,\n path: `${requestUrl.pathname}${requestUrl.search}`,\n method: 'POST',\n headers: Object.fromEntries(headers.entries()),\n servername,\n },\n response => {\n response.resume();\n response.on('end', () => {\n resolve({\n ok: !!response.statusCode && response.statusCode >= 200 && response.statusCode < 300,\n status: response.statusCode ?? 0,\n statusText: response.statusMessage ?? '',\n });\n });\n },\n );\n\n request.on('error', reject);\n\n if (signal) {\n signal.addEventListener(\n 'abort',\n () => {\n request.destroy(signal.reason instanceof Error ? signal.reason : new Error('Push notification timed out'));\n },\n { once: true },\n );\n }\n\n request.end(body);\n });\n }\n\n async sendNotifications({\n agentId,\n task,\n logger,\n }: {\n agentId: string;\n task: Task;\n logger?: IMastraLogger;\n }): Promise<void> {\n const configs = this.pushNotificationStore.list({\n agentId,\n params: { id: task.id },\n });\n\n if (configs.length === 0) {\n return;\n }\n\n await Promise.allSettled(\n configs.map(async config => {\n const headers = new Headers({\n 'content-type': 'application/json',\n });\n\n if (config.pushNotificationConfig.token) {\n headers.set(\n this.options.tokenHeaderName ?? DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER,\n config.pushNotificationConfig.token,\n );\n }\n\n const auth = config.pushNotificationConfig.authentication;\n if (auth?.credentials) {\n if (auth.schemes.includes('Bearer')) {\n headers.set('authorization', `Bearer ${auth.credentials}`);\n } else if (auth.schemes.includes('Basic')) {\n headers.set('authorization', `Basic ${auth.credentials}`);\n }\n }\n\n const { requestUrl, hostHeader, servername } = await this.resolveValidatedDestination(\n config.pushNotificationConfig.url,\n );\n const response = await this.postTaskSnapshot({\n requestUrl,\n hostHeader,\n servername,\n headers,\n body: JSON.stringify(task),\n timeout: this.options.timeout ?? 5_000,\n });\n\n if (!response.ok) {\n throw new Error(\n `Push notification failed with status ${response.status} ${response.statusText ?? ''}`.trim(),\n );\n }\n }),\n ).then(results => {\n for (const result of results) {\n if (result.status === 'rejected') {\n logger?.error('Failed to deliver A2A push notification', result.reason);\n }\n }\n });\n }\n}\n","import type {\n DeleteTaskPushNotificationConfigParams,\n GetTaskPushNotificationConfigParams,\n ListTaskPushNotificationConfigParams,\n TaskPushNotificationConfig,\n} from '@mastra/core/a2a';\n\nfunction normalizeConfigId(taskId: string, configId?: string) {\n return configId || taskId;\n}\n\nexport class InMemoryPushNotificationStore {\n private store = new Map<string, Map<string, TaskPushNotificationConfig>>();\n\n private getKey(agentId: string, taskId: string) {\n return JSON.stringify([agentId, taskId]);\n }\n\n set({ agentId, config }: { agentId: string; config: TaskPushNotificationConfig }): TaskPushNotificationConfig {\n const key = this.getKey(agentId, config.taskId);\n const configs = this.store.get(key) ?? new Map<string, TaskPushNotificationConfig>();\n const normalizedConfig: TaskPushNotificationConfig = {\n taskId: config.taskId,\n pushNotificationConfig: {\n ...config.pushNotificationConfig,\n id: normalizeConfigId(config.taskId, config.pushNotificationConfig.id),\n },\n };\n\n configs.set(normalizedConfig.pushNotificationConfig.id!, structuredClone(normalizedConfig));\n this.store.set(key, configs);\n\n return structuredClone(normalizedConfig);\n }\n\n get({\n agentId,\n params,\n }: {\n agentId: string;\n params: GetTaskPushNotificationConfigParams;\n }): TaskPushNotificationConfig | null {\n const key = this.getKey(agentId, params.id);\n const configId = normalizeConfigId(params.id, params.pushNotificationConfigId);\n const config = this.store.get(key)?.get(configId);\n return config ? structuredClone(config) : null;\n }\n\n list({\n agentId,\n params,\n }: {\n agentId: string;\n params: ListTaskPushNotificationConfigParams;\n }): TaskPushNotificationConfig[] {\n const key = this.getKey(agentId, params.id);\n return Array.from(this.store.get(key)?.values() ?? []).map(config => structuredClone(config));\n }\n\n delete({ agentId, params }: { agentId: string; params: DeleteTaskPushNotificationConfigParams }): boolean {\n const key = this.getKey(agentId, params.id);\n const configs = this.store.get(key);\n\n if (!configs) {\n return false;\n }\n\n const deleted = configs.delete(params.pushNotificationConfigId);\n if (configs.size === 0) {\n this.store.delete(key);\n }\n\n return deleted;\n }\n}\n","import type { TaskState } from '@mastra/core/a2a';\n\nexport function isTerminalTaskState(state: TaskState | undefined): boolean {\n return state === 'completed' || state === 'failed' || state === 'canceled' || state === 'rejected';\n}\n\nexport function isInterruptedTaskState(state: TaskState | undefined): boolean {\n return state === 'input-required' || state === 'auth-required';\n}\n","import type { Message, Task, TaskStatus, TaskContext, TaskArtifactUpdateEvent, Artifact } from '@mastra/core/a2a';\nimport { MastraA2AError } from '@mastra/core/a2a';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, type RequestContext } from '@mastra/core/request-context';\nimport { TaskStoreVersionConflictError, type InMemoryTaskStore } from './store';\nimport { isTerminalTaskState } from './task-state';\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\nfunction usableId(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function resolveTaskMemory({\n task,\n agentId,\n requestContext,\n metadata,\n message,\n}: {\n task?: Task;\n agentId: string;\n requestContext?: RequestContext;\n metadata?: Record<string, unknown>;\n message?: Message;\n}) {\n const trustedResource = usableId(requestContext?.get(MASTRA_RESOURCE_ID_KEY));\n const trustedThread = usableId(requestContext?.get(MASTRA_THREAD_ID_KEY));\n const storedResource = usableId(task?.metadata?.resourceId);\n\n if (\n task &&\n ((trustedResource && storedResource && trustedResource !== storedResource) ||\n (trustedThread && trustedThread !== task.contextId))\n ) {\n throw MastraA2AError.invalidRequest('Task memory identity conflicts with the authenticated request.');\n }\n\n return {\n thread: task?.contextId ?? trustedThread ?? message?.contextId,\n resource: task\n ? (storedResource ?? trustedResource ?? agentId)\n : (trustedResource ?? usableId(metadata?.resourceId) ?? usableId(message?.metadata?.resourceId) ?? agentId),\n };\n}\n\nexport async function loadOrCreateTask({\n agentId,\n taskId,\n taskStore,\n message,\n contextId,\n metadata,\n logger,\n requestContext,\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 requestContext?: RequestContext;\n}): Promise<Task> {\n for (let attempt = 0; attempt < 2; attempt++) {\n const snapshot = taskStore.loadWithVersion({ agentId, taskId });\n const data = snapshot?.task;\n const memory = resolveTaskMemory({ task: data, agentId, requestContext, metadata, message });\n\n if (!data) {\n const initialTask: Task = {\n id: taskId,\n contextId: memory.thread || 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, resourceId: memory.resource },\n kind: 'task',\n };\n\n logger?.info(`[Task ${taskId}] Created new task.`);\n try {\n await taskStore.save({ agentId, data: initialTask, expectedVersion: 0 });\n return initialTask;\n } catch (error) {\n if (error instanceof TaskStoreVersionConflictError) {\n continue;\n }\n throw error;\n }\n }\n\n logger?.info(`[Task ${taskId}] Loaded existing task.`);\n\n const { status } = data;\n if (isTerminalTaskState(status.state)) {\n throw MastraA2AError.invalidRequest(\n `Task ${taskId} is in terminal state ${status.state} and cannot be restarted.`,\n );\n }\n\n let updatedData: Task = {\n ...data,\n metadata: { ...data.metadata, resourceId: memory.resource },\n history: [...(data.history || []), message],\n };\n\n if (status.state === 'input-required' || status.state === 'auth-required') {\n logger?.info(`[Task ${taskId}] Changing state from '${status.state}' 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 try {\n await taskStore.save({ agentId, data: updatedData, expectedVersion: snapshot.version });\n return updatedData;\n } catch (error) {\n if (error instanceof TaskStoreVersionConflictError) {\n continue;\n }\n throw error;\n }\n }\n\n throw MastraA2AError.invalidRequest(`Task ${taskId} was updated concurrently. Retry the request.`);\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","import { isDeepStrictEqual } from 'node:util';\nimport { MastraA2AError } from '@mastra/core/a2a';\nimport type {\n MessageSendParams,\n TaskQueryParams,\n TaskIdParams,\n AgentCard,\n TaskStatus,\n TaskState,\n Task,\n TaskPushNotificationConfig,\n GetTaskPushNotificationConfigParams,\n ListTaskPushNotificationConfigParams,\n DeleteTaskPushNotificationConfigParams,\n Artifact,\n} from '@mastra/core/a2a';\nimport type { Agent } from '@mastra/core/agent';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { z } from 'zod/v4';\nimport { signAgentCard } from '../a2a/agent-card-signing';\nimport { convertToCoreMessage, normalizeError, createSuccessResponse } from '../a2a/protocol';\nimport { DefaultPushNotificationSender } from '../a2a/push-notification-sender';\nimport { InMemoryPushNotificationStore } from '../a2a/push-notification-store';\nimport { TaskStoreVersionConflictError, type InMemoryTaskStore } from '../a2a/store';\nimport { isInterruptedTaskState, isTerminalTaskState } from '../a2a/task-state';\nimport { applyUpdateToTask, loadOrCreateTask, resolveTaskMemory } from '../a2a/tasks';\nimport {\n a2aAgentIdPathParams,\n agentExecutionBodySchema,\n agentCardResponseSchema,\n agentExecutionResponseSchema,\n} from '../schemas/a2a';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { convertInstructionsToString } from '../utils';\nimport { getAgentFromSystem } from './agents';\nimport { getPublicOrigin } from './auth';\n\n// Mirrors @a2a-js/sdk's Part discriminated union (text | file | data) and the\n// part shape already declared in ../schemas/a2a.ts. Before this widening, the\n// schema hard-coded `kind: z.enum(['text'])` which rejected every non-text\n// part before the converter could see it — even though convertToCoreMessagePart\n// at ../a2a/protocol.ts already handles file and data parts. With this change,\n// FilePart (FileWithBytes | FileWithUri) and DataPart parse successfully and\n// reach the converter (data parts then throw a clear \"not supported in core\n// messages\" message; files convert natively to AI-SDK CoreMessage file parts).\nconst messagePartSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('text'),\n text: z.string(),\n metadata: z.record(z.string(), z.any()).optional(),\n }),\n z.object({\n kind: z.literal('file'),\n file: z.union([\n z.object({\n bytes: z.string(),\n mimeType: z.string().optional(),\n name: z.string().optional(),\n }),\n z.object({\n uri: z.string(),\n mimeType: z.string().optional(),\n name: z.string().optional(),\n }),\n ]),\n metadata: z.record(z.string(), z.any()).optional(),\n }),\n z.object({\n kind: z.literal('data'),\n data: z.record(z.string(), z.any()),\n metadata: z.record(z.string(), z.any()).optional(),\n }),\n]);\n\nconst messageSendParamsSchema = z.object({\n message: z.object({\n role: z.enum(['user', 'agent']),\n parts: z.array(messagePartSchema),\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.string(), z.any()).optional(),\n }),\n configuration: z\n .object({\n acceptedOutputModes: z.array(z.string()).optional(),\n blocking: z.boolean().optional(),\n returnImmediately: z.boolean().optional(),\n historyLength: z.number().optional(),\n pushNotificationConfig: z\n .object({\n url: z.string(),\n id: z.string().optional(),\n token: z.string().optional(),\n authentication: z\n .object({\n schemes: z.array(z.string()),\n credentials: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nconst defaultPushNotificationStore = new InMemoryPushNotificationStore();\nconst defaultPushNotificationSender = new DefaultPushNotificationSender(defaultPushNotificationStore);\n\nconst V1_TASK_STATES: Record<string, string> = {\n submitted: 'TASK_STATE_SUBMITTED',\n working: 'TASK_STATE_WORKING',\n completed: 'TASK_STATE_COMPLETED',\n failed: 'TASK_STATE_FAILED',\n canceled: 'TASK_STATE_CANCELED',\n 'input-required': 'TASK_STATE_INPUT_REQUIRED',\n rejected: 'TASK_STATE_REJECTED',\n 'auth-required': 'TASK_STATE_AUTH_REQUIRED',\n};\n\nfunction normalizeV1Part(part: Record<string, unknown>) {\n if ('text' in part) {\n return { kind: 'text', text: part.text, metadata: part.metadata };\n }\n if ('raw' in part) {\n return {\n kind: 'file',\n file: { bytes: part.raw, mimeType: part.mediaType, name: part.filename },\n metadata: part.metadata,\n };\n }\n if ('url' in part) {\n return {\n kind: 'file',\n file: { uri: part.url, mimeType: part.mediaType, name: part.filename },\n metadata: part.metadata,\n };\n }\n return { kind: 'data', data: part.data, metadata: part.metadata };\n}\n\nfunction normalizeV1Params(params: Record<string, any> | undefined): Record<string, any> | undefined {\n if (!params?.message) {\n return params;\n }\n\n const configuration = params.configuration;\n return {\n ...params,\n message: {\n ...params.message,\n kind: 'message',\n role: params.message.role === 'ROLE_AGENT' ? 'agent' : 'user',\n parts: params.message.parts.map((part: Record<string, unknown>) => normalizeV1Part(part)),\n },\n configuration: configuration\n ? {\n ...configuration,\n blocking: configuration.returnImmediately === undefined ? undefined : !configuration.returnImmediately,\n pushNotificationConfig: configuration.taskPushNotificationConfig,\n }\n : undefined,\n };\n}\n\nfunction toV1Part(part: any) {\n if (part.kind === 'text') {\n return { text: part.text, metadata: part.metadata };\n }\n if (part.kind === 'file') {\n return 'uri' in part.file\n ? { url: part.file.uri, filename: part.file.name, mediaType: part.file.mimeType, metadata: part.metadata }\n : { raw: part.file.bytes, filename: part.file.name, mediaType: part.file.mimeType, metadata: part.metadata };\n }\n return { data: part.data, metadata: part.metadata };\n}\n\nfunction toV1Message(message: any) {\n if (!message) return undefined;\n return {\n messageId: message.messageId,\n contextId: message.contextId,\n taskId: message.taskId,\n role: message.role === 'agent' ? 'ROLE_AGENT' : 'ROLE_USER',\n parts: message.parts?.map(toV1Part),\n metadata: message.metadata,\n extensions: message.extensions,\n referenceTaskIds: message.referenceTaskIds,\n };\n}\n\nfunction toV1Task(\n task: any,\n { includeArtifacts = true, historyLength }: { includeArtifacts?: boolean; historyLength?: number } = {},\n) {\n return {\n id: task.id,\n contextId: task.contextId,\n status: {\n state: V1_TASK_STATES[task.status.state] ?? 'TASK_STATE_UNSPECIFIED',\n message: toV1Message(task.status.message),\n timestamp: task.status.timestamp,\n },\n artifacts: includeArtifacts\n ? task.artifacts?.map((artifact: any) => ({\n artifactId: artifact.artifactId,\n name: artifact.name,\n description: artifact.description,\n parts: artifact.parts?.map(toV1Part),\n metadata: artifact.metadata,\n extensions: artifact.extensions,\n }))\n : undefined,\n history: task.history?.slice(historyLength === undefined ? 0 : -historyLength).map(toV1Message),\n metadata: task.metadata,\n };\n}\n\nfunction toV1Result(result: any, method: string) {\n if (method === 'message/send') {\n return result?.kind === 'message' ? { message: toV1Message(result) } : { task: toV1Task(result) };\n }\n if (method === 'message/stream' || method === 'tasks/resubscribe') {\n if (result?.kind === 'status-update') {\n return {\n statusUpdate: {\n taskId: result.taskId,\n contextId: result.contextId,\n status: {\n state: V1_TASK_STATES[result.status.state] ?? 'TASK_STATE_UNSPECIFIED',\n message: toV1Message(result.status.message),\n timestamp: result.status.timestamp,\n },\n final: result.final,\n metadata: result.metadata,\n },\n };\n }\n if (result?.kind === 'artifact-update') {\n return {\n artifactUpdate: {\n taskId: result.taskId,\n contextId: result.contextId,\n artifact: {\n ...result.artifact,\n parts: result.artifact.parts?.map(toV1Part),\n },\n append: result.append,\n lastChunk: result.lastChunk,\n metadata: result.metadata,\n },\n };\n }\n return result?.kind === 'message' ? { message: toV1Message(result) } : { task: toV1Task(result) };\n }\n if (method === 'tasks/get' || method === 'tasks/cancel') {\n return toV1Task(result);\n }\n return result;\n}\n\nfunction convertV1Response(response: any, method: string) {\n if (!response || !('result' in response)) return response;\n return { ...response, result: toV1Result(response.result, method) };\n}\n\nasync function* convertV1Stream(stream: AsyncIterable<any>, method: string) {\n for await (const response of stream) {\n yield convertV1Response(response, method);\n }\n}\n\nfunction createAgentCardDefaults({\n pushNotifications = false,\n}: {\n pushNotifications?: boolean;\n} = {}): Pick<\n AgentCard,\n | 'protocolVersion'\n | 'additionalInterfaces'\n | 'supportsAuthenticatedExtendedCard'\n | 'security'\n | 'securitySchemes'\n | 'capabilities'\n | 'defaultInputModes'\n | 'defaultOutputModes'\n> {\n return {\n protocolVersion: '0.3.0',\n additionalInterfaces: [],\n supportsAuthenticatedExtendedCard: false,\n security: [],\n securitySchemes: {},\n capabilities: {\n streaming: true,\n pushNotifications,\n stateTransitionHistory: false,\n extensions: [],\n },\n defaultInputModes: ['text/plain'],\n defaultOutputModes: ['text/plain'],\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 pushNotifications = false,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n agentId: keyof ReturnType<typeof mastra.listAgents>;\n executionUrl?: string;\n version?: string;\n provider?: {\n organization: string;\n url: string;\n };\n pushNotifications?: boolean;\n}): Promise<AgentCard> {\n const agent = await getAgentFromSystem({ mastra, agentId: agentId as string });\n\n const [instructions, tools]: [\n Awaited<ReturnType<typeof agent.getInstructions>>,\n Awaited<ReturnType<typeof agent.listTools>>,\n ] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);\n\n // Extract agent information to create the AgentCard\n const agentCard: AgentCard = {\n name: agent.id || (agentId as string),\n description: convertInstructionsToString(instructions),\n url: executionUrl,\n provider,\n version,\n ...createAgentCardDefaults({ pushNotifications }),\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: ('description' in tool && tool.description) || `Tool: ${toolId}`,\n // Optional fields\n tags: ['tool'],\n })),\n };\n\n const signing = mastra.getServer?.()?.a2a?.agentCardSigning;\n if (!signing) {\n return agentCard;\n }\n\n return signAgentCard({\n agentCard,\n signing,\n });\n}\n\nfunction getA2AExecutionUrl({\n agentId,\n request,\n routePrefix,\n}: {\n agentId: string;\n request?: Request;\n routePrefix?: string;\n}) {\n const executionPath = `${routePrefix ?? ''}/a2a/${agentId}`;\n\n if (!request) {\n return executionPath;\n }\n\n return `${getPublicOrigin(request)}${executionPath}`;\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).issues[0]!.message);\n }\n\n throw error;\n }\n}\n\nfunction createArtifactUpdate({\n taskId,\n contextId,\n text,\n data,\n}: {\n taskId: string;\n contextId: string;\n text?: string;\n data?: Record<string, unknown>;\n}) {\n const parts = [\n ...(text ? [{ kind: 'text' as const, text }] : []),\n ...(data ? [{ kind: 'data' as const, data }] : []),\n ];\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return {\n kind: 'artifact-update' as const,\n taskId,\n contextId,\n lastChunk: true,\n artifact: {\n artifactId: `${taskId}:response`,\n name: data ? 'response.json' : 'response.txt',\n parts,\n },\n };\n}\n\nfunction createTextChunkArtifactUpdate({\n taskId,\n contextId,\n text,\n append,\n lastChunk,\n}: {\n taskId: string;\n contextId: string;\n text: string;\n append?: boolean;\n lastChunk?: boolean;\n}) {\n return {\n kind: 'artifact-update' as const,\n taskId,\n contextId,\n ...(append ? { append: true } : {}),\n ...(lastChunk !== undefined ? { lastChunk } : {}),\n artifact: {\n artifactId: `${taskId}:response:text`,\n name: 'response.txt',\n parts: [{ kind: 'text' as const, text }],\n },\n };\n}\n\nfunction createDataArtifactUpdate({\n taskId,\n contextId,\n data,\n lastChunk,\n}: {\n taskId: string;\n contextId: string;\n data: Record<string, unknown>;\n lastChunk?: boolean;\n}) {\n return {\n kind: 'artifact-update' as const,\n taskId,\n contextId,\n ...(lastChunk !== undefined ? { lastChunk } : {}),\n artifact: {\n artifactId: `${taskId}:response:data`,\n name: 'response.json',\n parts: [{ kind: 'data' as const, data }],\n },\n };\n}\n\n/**\n * Task metadata keys that store the resume bookkeeping for a suspended agent\n * run so a follow-up message for an `input-required` task can resume it.\n */\nconst SUSPENDED_RUN_ID_METADATA_KEY = 'suspendedRunId';\nconst SUSPENDED_TOOL_CALL_ID_METADATA_KEY = 'suspendedToolCallId';\nconst SUSPENDED_REQUIRES_APPROVAL_METADATA_KEY = 'suspendedRequiresApproval';\n\nfunction toJsonSafe(value: unknown): unknown {\n if (value === undefined) {\n return undefined;\n }\n\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return undefined;\n }\n}\n\n/**\n * Builds the `input-required` status update for a suspended agent run.\n * The status message carries a human-readable prompt plus a data part with\n * the structured suspend payload and resume schema so A2A clients can\n * render/collect the required input (HITL per the A2A spec).\n */\nfunction createInputRequiredStatusUpdate({\n taskId,\n contextId,\n suspendPayload,\n resumeSchema,\n logger,\n}: {\n taskId: string;\n contextId: string;\n suspendPayload?: unknown;\n resumeSchema?: unknown;\n logger?: IMastraLogger;\n}): Omit<TaskStatus, 'timestamp'> {\n // Suspension payloads are `{ toolCallId, toolName, suspendPayload, ... }`\n // where the nested `suspendPayload` is the tool's own suspend() data. Use a\n // `message` string from either level as the human-readable prompt.\n const extractMessage = (value: unknown): string | undefined => {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n const messageValue = (value as { message?: unknown }).message;\n return typeof messageValue === 'string' && messageValue.length > 0 ? messageValue : undefined;\n };\n const promptText =\n extractMessage(suspendPayload) ??\n extractMessage((suspendPayload as { suspendPayload?: unknown } | undefined)?.suspendPayload) ??\n 'Additional input is required to continue this task.';\n\n const safeSuspendPayload = toJsonSafe(suspendPayload);\n const safeResumeSchema = toJsonSafe(resumeSchema);\n if (suspendPayload !== undefined && safeSuspendPayload === undefined) {\n logger?.warn(`[Task ${taskId}] Suspend payload is not JSON-serializable and was omitted from the status message.`);\n }\n if (resumeSchema !== undefined && safeResumeSchema === undefined) {\n logger?.warn(`[Task ${taskId}] Resume schema is not JSON-serializable and was omitted from the status message.`);\n }\n const data: Record<string, unknown> = {\n ...(safeSuspendPayload !== undefined ? { suspendPayload: safeSuspendPayload } : {}),\n ...(safeResumeSchema !== undefined ? { resumeSchema: safeResumeSchema } : {}),\n };\n\n return {\n state: 'input-required',\n message: {\n messageId: crypto.randomUUID(),\n kind: 'message',\n role: 'agent',\n taskId,\n contextId,\n parts: [\n { kind: 'text', text: promptText },\n ...(Object.keys(data).length > 0 ? [{ kind: 'data' as const, data }] : []),\n ],\n },\n };\n}\n\n/**\n * Extracts resume data from a follow-up message for an `input-required` task.\n * Prefers a structured data part; falls back to parsing the text as JSON\n * (the Mastra A2A client serializes structured resume data as JSON text),\n * and finally to the raw text.\n */\nfunction extractResumeData(message: MessageSendParams['message']): unknown {\n const dataPart = message.parts.find(part => part.kind === 'data');\n if (dataPart && 'data' in dataPart) {\n return dataPart.data;\n }\n\n const text = message.parts\n .filter((part): part is Extract<(typeof message.parts)[number], { kind: 'text' }> => part.kind === 'text')\n .map(part => part.text)\n .join('\\n')\n .trim();\n\n if (!text) {\n return undefined;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction getSuspendedRunId(task: Task | undefined | null): string | undefined {\n const value = task?.metadata?.[SUSPENDED_RUN_ID_METADATA_KEY];\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Approval suspensions (`requireApproval`) carry `{ toolCallId, toolName, args, resumeSchema }`\n * without a nested `suspendPayload`, while `suspend()` suspensions include one\n * (see `ToolCallApprovalPayload` / `ToolCallSuspendedPayload` in @mastra/core).\n */\nfunction isApprovalSuspension(suspendPayload: unknown): boolean {\n if (!suspendPayload || typeof suspendPayload !== 'object') {\n return false;\n }\n\n const payload = suspendPayload as { toolCallId?: unknown; suspendPayload?: unknown };\n return typeof payload.toolCallId === 'string' && payload.suspendPayload === undefined;\n}\n\nconst APPROVAL_AFFIRMATIVE_PATTERN = /^(y|yes|approve|approved|ok|okay|confirm|confirmed|true)[.!]?$/i;\nconst APPROVAL_NEGATIVE_PATTERN = /^(n|no|decline|declined|deny|denied|reject|rejected|false)[.!]?$/i;\n\n/**\n * Approval resumes are driven by `resumeData.approved` in the agentic loop, so\n * plain-text replies from A2A clients (\"yes\", \"no\") are coerced to the\n * `{ approved }` shape. Unrecognized values pass through unchanged.\n */\nfunction normalizeResumeData(resumeData: unknown, requiresApproval: boolean): unknown {\n if (!requiresApproval || typeof resumeData !== 'string') {\n return resumeData;\n }\n\n const text = resumeData.trim();\n if (APPROVAL_AFFIRMATIVE_PATTERN.test(text)) {\n return { approved: true };\n }\n if (APPROVAL_NEGATIVE_PATTERN.test(text)) {\n return { approved: false };\n }\n\n return resumeData;\n}\n\n/**\n * Marks a task `input-required` for a suspended agent run and records the\n * resume bookkeeping (runId, toolCallId, approval flag) in task metadata.\n * Shared by the send and stream paths so both report identical suspensions.\n */\nfunction applySuspensionToTask({\n task,\n suspendPayload,\n resumeSchema,\n runId,\n logger,\n}: {\n task: Task;\n suspendPayload?: unknown;\n resumeSchema?: unknown;\n runId: string;\n logger?: IMastraLogger;\n}): Task {\n const nextTask = applyUpdateToTask(\n task,\n createInputRequiredStatusUpdate({\n taskId: task.id,\n contextId: task.contextId,\n suspendPayload,\n resumeSchema,\n logger,\n }),\n );\n\n const payload = suspendPayload as { toolCallId?: unknown } | undefined;\n nextTask.metadata = {\n ...clearSuspensionMetadata(nextTask.metadata),\n [SUSPENDED_RUN_ID_METADATA_KEY]: runId,\n ...(typeof payload?.toolCallId === 'string' ? { [SUSPENDED_TOOL_CALL_ID_METADATA_KEY]: payload.toolCallId } : {}),\n ...(isApprovalSuspension(suspendPayload) ? { [SUSPENDED_REQUIRES_APPROVAL_METADATA_KEY]: true } : {}),\n };\n\n return nextTask;\n}\n\n/** Removes the suspension bookkeeping from task metadata once the run completes. */\nfunction clearSuspensionMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> {\n const {\n [SUSPENDED_RUN_ID_METADATA_KEY]: _runId,\n [SUSPENDED_TOOL_CALL_ID_METADATA_KEY]: _toolCallId,\n [SUSPENDED_REQUIRES_APPROVAL_METADATA_KEY]: _requiresApproval,\n ...rest\n } = metadata ?? {};\n return rest;\n}\n\ninterface ResumeClaim {\n runId: string;\n toolCallId?: string;\n requiresApproval: boolean;\n}\n\n/**\n * Claims an interrupted task for resume by transitioning it to `working`.\n * `loadWithVersion` and the body of `InMemoryTaskStore.save` both execute\n * synchronously, so two concurrent follow-up messages cannot both claim (and\n * double-resume) the same suspended run.\n */\nasync function claimInterruptedTaskResume({\n taskStore,\n agentId,\n taskId,\n}: {\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n}): Promise<ResumeClaim | undefined> {\n const snapshot = taskStore.loadWithVersion({ agentId, taskId });\n if (snapshot?.task.status.state !== 'input-required' && snapshot?.task.status.state !== 'auth-required') {\n return undefined;\n }\n\n const task = snapshot.task;\n const toolCallId = task.metadata?.[SUSPENDED_TOOL_CALL_ID_METADATA_KEY];\n const claim: ResumeClaim = {\n runId: getSuspendedRunId(task) ?? taskId,\n ...(typeof toolCallId === 'string' ? { toolCallId } : {}),\n requiresApproval: task.metadata?.[SUSPENDED_REQUIRES_APPROVAL_METADATA_KEY] === true,\n };\n\n try {\n await taskStore.save({\n agentId,\n data: applyUpdateToTask(task, { state: 'working' }),\n expectedVersion: snapshot.version,\n });\n } catch (error) {\n if (error instanceof TaskStoreVersionConflictError) {\n return undefined;\n }\n throw error;\n }\n\n return claim;\n}\n\nasync function waitForClaimedResume({\n taskStore,\n agentId,\n taskId,\n}: {\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n}): Promise<Task> {\n let snapshot = taskStore.loadWithVersion({ agentId, taskId });\n if (!snapshot) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n while (snapshot.task.status.state === 'working') {\n snapshot = await taskStore.waitForNextUpdate({\n agentId,\n taskId,\n afterVersion: snapshot.version,\n });\n }\n\n return snapshot.task;\n}\n\nfunction resolvePushNotificationPair({\n pushNotificationStore,\n pushNotificationSender,\n}: {\n pushNotificationStore?: InMemoryPushNotificationStore;\n pushNotificationSender?: DefaultPushNotificationSender;\n}) {\n if (pushNotificationSender) {\n return {\n pushNotificationStore: pushNotificationSender.getStore(),\n pushNotificationSender,\n };\n }\n\n if (pushNotificationStore) {\n return {\n pushNotificationStore,\n pushNotificationSender: new DefaultPushNotificationSender(pushNotificationStore),\n };\n }\n\n return {\n pushNotificationStore: defaultPushNotificationStore,\n pushNotificationSender: defaultPushNotificationSender,\n };\n}\n\nfunction createTaskPushNotificationConfig(\n taskId: string,\n pushNotificationConfig: TaskPushNotificationConfig['pushNotificationConfig'],\n): TaskPushNotificationConfig {\n return {\n taskId,\n pushNotificationConfig: {\n ...pushNotificationConfig,\n id: pushNotificationConfig.id ?? taskId,\n },\n };\n}\n\nfunction shouldSendPushNotification(previousTask: Task | undefined, nextTask: Task) {\n const pushTriggerStates: TaskState[] = [\n 'completed',\n 'failed',\n 'canceled',\n 'rejected',\n 'input-required',\n 'auth-required',\n ];\n\n if (!pushTriggerStates.includes(nextTask.status.state)) {\n return false;\n }\n\n return previousTask?.status.state !== nextTask.status.state;\n}\n\nfunction createLinkedAbortController(abortSignal?: AbortSignal) {\n const controller = new AbortController();\n\n if (!abortSignal) {\n return { controller, cleanup: () => {} };\n }\n\n const abortFromSignal = () => {\n if (!controller.signal.aborted) {\n controller.abort(abortSignal.reason);\n }\n };\n\n if (abortSignal.aborted) {\n abortFromSignal();\n } else {\n abortSignal.addEventListener('abort', abortFromSignal, { once: true });\n }\n\n return {\n controller,\n cleanup: () => abortSignal.removeEventListener('abort', abortFromSignal),\n };\n}\n\nasync function saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender,\n previousTask,\n nextTask,\n agentId,\n expectedVersion,\n logger,\n}: {\n taskStore: InMemoryTaskStore;\n pushNotificationSender: DefaultPushNotificationSender;\n previousTask?: Task;\n nextTask: Task;\n agentId: string;\n expectedVersion?: number;\n logger?: IMastraLogger;\n}): Promise<Task> {\n const storedTask = await taskStore.save({ agentId, data: nextTask, expectedVersion, skipIfCanceled: true });\n\n if (storedTask.status.state === 'canceled' && nextTask.status.state !== 'canceled') {\n return storedTask;\n }\n\n if (!shouldSendPushNotification(previousTask, storedTask)) {\n return storedTask;\n }\n\n void pushNotificationSender\n .sendNotifications({\n agentId,\n task: storedTask,\n logger,\n })\n .catch(error => {\n logger?.error('Failed to schedule A2A push notification', error);\n });\n\n return storedTask;\n}\n\nfunction extractFullStreamTextDelta(value: unknown): string | null {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return null;\n }\n\n const chunk = value as {\n type: string;\n payload?: { text?: string; delta?: string };\n textDelta?: string;\n text?: string;\n delta?: string;\n };\n\n switch (chunk.type) {\n case 'text-delta':\n if (typeof chunk.payload?.text === 'string') {\n return chunk.payload.text;\n }\n\n if (typeof chunk.payload?.delta === 'string') {\n return chunk.payload.delta;\n }\n\n if (typeof chunk.textDelta === 'string') {\n return chunk.textDelta;\n }\n\n if (typeof chunk.delta === 'string') {\n return chunk.delta;\n }\n\n if (typeof chunk.text === 'string') {\n return chunk.text;\n }\n\n return null;\n default:\n return null;\n }\n}\n\nfunction extractFinalStructuredObject(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return undefined;\n }\n\n const chunk = value as {\n type: string;\n object?: unknown;\n payload?: { object?: unknown };\n };\n\n if (chunk.type !== 'object-result') {\n return undefined;\n }\n\n const objectValue = chunk.payload?.object ?? chunk.object;\n return objectValue && typeof objectValue === 'object' ? (objectValue as Record<string, unknown>) : undefined;\n}\n\nfunction isSuspensionChunk(value: unknown): boolean {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return false;\n }\n\n const type = (value as { type: string }).type;\n return type === 'tool-call-suspended' || type === 'tool-call-approval';\n}\n\nfunction artifactIdentity(artifact: Artifact) {\n return artifact.artifactId || artifact.name;\n}\n\nfunction areArtifactPartsEqual(left: Artifact['parts'], right: Artifact['parts']) {\n if (left === right) {\n return true;\n }\n\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((part, index) => {\n const other = right[index];\n if (!other || part.kind !== other.kind) {\n return false;\n }\n\n if (part.kind === 'text' && other.kind === 'text') {\n return part.text === other.text;\n }\n\n return part === other;\n });\n}\n\nfunction areArtifactsEqual(left: Artifact | undefined, right: Artifact | undefined) {\n if (left === right) {\n return true;\n }\n\n if (!left || !right) {\n return left === right;\n }\n\n return (\n left.artifactId === right.artifactId &&\n left.name === right.name &&\n left.description === right.description &&\n left.metadata === right.metadata &&\n areArtifactPartsEqual(left.parts, right.parts)\n );\n}\n\nfunction areStatusMessagePartsEqual(\n left: NonNullable<Task['status']['message']>['parts'],\n right: NonNullable<Task['status']['message']>['parts'],\n) {\n return left === right || isDeepStrictEqual(left, right);\n}\n\nfunction areStatusMessagesEqual(left: Task['status']['message'], right: Task['status']['message']) {\n if (left === right) {\n return true;\n }\n\n if (!left || !right) {\n return left === right;\n }\n\n return (\n left.messageId === right.messageId &&\n left.kind === right.kind &&\n left.role === right.role &&\n left.contextId === right.contextId &&\n left.taskId === right.taskId &&\n isDeepStrictEqual(left.referenceTaskIds, right.referenceTaskIds) &&\n isDeepStrictEqual(left.extensions, right.extensions) &&\n isDeepStrictEqual(left.metadata, right.metadata) &&\n areStatusMessagePartsEqual(left.parts, right.parts)\n );\n}\n\nfunction didTaskStatusChange(previous: Task, next: Task) {\n return (\n previous.status.state !== next.status.state ||\n previous.status.timestamp !== next.status.timestamp ||\n !areStatusMessagesEqual(previous.status.message, next.status.message)\n );\n}\n\nfunction getTaskArtifactUpdates({ previous, next }: { previous: Task; next: Task }) {\n const previousArtifacts = new Map((previous.artifacts ?? []).map(artifact => [artifactIdentity(artifact), artifact]));\n const changedArtifacts = (next.artifacts ?? []).filter(artifact => {\n const priorArtifact = previousArtifacts.get(artifactIdentity(artifact));\n return !priorArtifact || !areArtifactsEqual(priorArtifact, artifact);\n });\n\n return changedArtifacts.map((artifact, index) => ({\n kind: 'artifact-update' as const,\n taskId: next.id,\n contextId: next.contextId,\n lastChunk: isTerminalTaskState(next.status.state) && index === changedArtifacts.length - 1,\n artifact: structuredClone(artifact),\n }));\n}\n\nasync function executeMessageSend({\n requestId,\n message,\n currentData,\n taskStore,\n pushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n resume,\n}: {\n requestId: number | string;\n message: MessageSendParams['message'];\n currentData: Task;\n taskStore: InMemoryTaskStore;\n pushNotificationSender: DefaultPushNotificationSender;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n requestContext: RequestContext;\n resume?: ResumeClaim;\n}) {\n try {\n const memory = {\n ...resolveTaskMemory({ task: currentData, agentId, requestContext }),\n thread: currentData.contextId,\n };\n const result = resume\n ? await agent.resumeGenerate(normalizeResumeData(extractResumeData(message), resume.requiresApproval), {\n runId: resume.runId,\n ...(resume.toolCallId ? { toolCallId: resume.toolCallId } : {}),\n requestContext,\n })\n : await agent.generate([convertToCoreMessage(message)], {\n runId: currentData.id,\n requestContext,\n memory,\n });\n\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask?.status.state === 'canceled') {\n return createSuccessResponse(requestId, latestTask);\n }\n currentData = latestTask ?? currentData;\n\n const artifactUpdate = createArtifactUpdate({\n taskId: currentData.id,\n contextId: currentData.contextId,\n text: result.text,\n data: result.object as Record<string, unknown> | undefined,\n });\n\n if (artifactUpdate) {\n currentData = applyUpdateToTask(currentData, artifactUpdate);\n }\n\n // Agent suspensions (tool approval, suspend()) surface as the A2A\n // `input-required` state so clients can provide the missing input and\n // continue the task (HITL per the A2A spec).\n if (result.finishReason === 'suspended') {\n const previousTask = currentData;\n currentData = applySuspensionToTask({\n task: currentData,\n suspendPayload: result.suspendPayload,\n resumeSchema: result.resumeSchema,\n runId: result.runId ?? currentData.id,\n logger,\n });\n\n await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\n\n return createSuccessResponse(requestId, currentData);\n }\n\n const previousTask = currentData;\n currentData = applyUpdateToTask(currentData, {\n state: 'completed',\n message: undefined,\n });\n\n // Store execution details in task metadata\n currentData.metadata = {\n ...clearSuspensionMetadata(currentData.metadata),\n execution: {\n toolCalls: result.toolCalls,\n toolResults: result.toolResults,\n usage: result.usage,\n finishReason: result.finishReason,\n },\n };\n\n await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\n } catch (handlerError) {\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask?.status.state === 'canceled') {\n return createSuccessResponse(requestId, latestTask);\n }\n currentData = latestTask ?? currentData;\n\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 const previousTask = currentData;\n currentData = applyUpdateToTask(currentData, failureStatusUpdate);\n\n try {\n await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\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 handleMessageSend({\n requestId,\n params,\n taskStore,\n pushNotificationStore,\n pushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n}: {\n requestId: number | string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n pushNotificationSender?: DefaultPushNotificationSender;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n requestContext: RequestContext;\n}) {\n validateMessageSendParams(params);\n\n const { message, metadata } = params;\n const { contextId } = message;\n const taskId = message.taskId || crypto.randomUUID();\n const existingTask = taskStore.loadWithVersion({ agentId, taskId })?.task;\n if (message.taskId && !existingTask) {\n throw MastraA2AError.taskNotFound(message.taskId);\n }\n resolveTaskMemory({ task: existingTask, agentId, requestContext, metadata, message });\n if (params.configuration?.blocking === false && existingTask?.status.state === 'working') {\n return createSuccessResponse(requestId, existingTask);\n }\n\n if (existingTask?.status.state === 'working' && getSuspendedRunId(existingTask)) {\n const task = await waitForClaimedResume({ taskStore, agentId, taskId });\n return createSuccessResponse(requestId, task);\n }\n\n // A follow-up message for an interrupted task resumes the suspended agent\n // run instead of starting a fresh generation (A2A HITL continuation).\n // The claim transitions the task to `working` synchronously so concurrent\n // follow-ups cannot double-resume the same run.\n const wasInterrupted = isInterruptedTaskState(existingTask?.status.state);\n const resume = await claimInterruptedTaskResume({ taskStore, agentId, taskId });\n if (wasInterrupted && !resume) {\n const task = await waitForClaimedResume({ taskStore, agentId, taskId });\n return createSuccessResponse(requestId, task);\n }\n const {\n pushNotificationStore: resolvedPushNotificationStore,\n pushNotificationSender: resolvedPushNotificationSender,\n } = resolvePushNotificationPair({\n pushNotificationStore,\n pushNotificationSender,\n });\n\n let currentData = await loadOrCreateTask({\n taskId,\n taskStore,\n agentId,\n message,\n contextId,\n metadata,\n requestContext,\n });\n\n if (params.configuration?.pushNotificationConfig) {\n resolvedPushNotificationStore.set({\n agentId,\n config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig),\n });\n }\n\n currentData = applyUpdateToTask(currentData, {\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 await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n\n const execution = executeMessageSend({\n requestId,\n message,\n currentData,\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n resume,\n });\n\n if (params.configuration?.blocking === false) {\n void execution.catch(error => {\n logger?.error(`Unexpected background failure for A2A task ${currentData.id}`, error);\n });\n return createSuccessResponse(requestId, currentData);\n }\n\n return execution;\n}\n\nexport async function handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId,\n}: {\n requestId: number | 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 function handleTaskList({\n requestId,\n taskStore,\n agentId,\n params,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n params: Record<string, any>;\n}) {\n const requestedPageSize = params.pageSize ?? 50;\n const offset = params.pageToken ? Number.parseInt(params.pageToken, 10) : 0;\n const start = Number.isFinite(offset) && offset >= 0 ? offset : 0;\n const status =\n typeof params.status === 'string'\n ? params.status\n .replace(/^TASK_STATE_/, '')\n .toLowerCase()\n .replaceAll('_', '-')\n : undefined;\n const timestampAfter = params.statusTimestampAfter ? Date.parse(params.statusTimestampAfter) : undefined;\n\n const matchingTasks = taskStore\n .list({ agentId })\n .filter(task => !params.contextId || task.contextId === params.contextId)\n .filter(task => !status || task.status.state === status)\n .filter(\n task =>\n !timestampAfter || (task.status.timestamp !== undefined && Date.parse(task.status.timestamp) >= timestampAfter),\n );\n const tasks = matchingTasks.slice(start, start + requestedPageSize).map(task =>\n toV1Task(task, {\n includeArtifacts: params.includeArtifacts ?? false,\n historyLength: params.historyLength,\n }),\n );\n const nextOffset = start + tasks.length;\n\n return createSuccessResponse(requestId, {\n tasks,\n nextPageToken: nextOffset < matchingTasks.length ? String(nextOffset) : '',\n pageSize: requestedPageSize,\n totalSize: matchingTasks.length,\n });\n}\n\nasync function loadTaskOrThrow({\n taskStore,\n agentId,\n taskId,\n}: {\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 task;\n}\n\nexport async function handleSetTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore,\n agentId,\n params,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n agentId: string;\n params: TaskPushNotificationConfig;\n}) {\n await loadTaskOrThrow({\n taskStore,\n agentId,\n taskId: params.taskId,\n });\n\n const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({\n pushNotificationStore,\n });\n const config = resolvedPushNotificationStore.set({\n agentId,\n config: createTaskPushNotificationConfig(params.taskId, params.pushNotificationConfig),\n });\n\n return createSuccessResponse(requestId, config);\n}\n\nexport async function handleGetTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore,\n agentId,\n params,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n agentId: string;\n params: GetTaskPushNotificationConfigParams;\n}) {\n await loadTaskOrThrow({\n taskStore,\n agentId,\n taskId: params.id,\n });\n\n const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({\n pushNotificationStore,\n });\n const config = resolvedPushNotificationStore.get({\n agentId,\n params,\n });\n\n if (!config) {\n throw MastraA2AError.invalidParams(\n `Push notification config not found: ${params.pushNotificationConfigId ?? params.id}`,\n );\n }\n\n return createSuccessResponse(requestId, config);\n}\n\nexport async function handleListTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore,\n agentId,\n params,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n agentId: string;\n params: ListTaskPushNotificationConfigParams;\n}) {\n await loadTaskOrThrow({\n taskStore,\n agentId,\n taskId: params.id,\n });\n\n const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({\n pushNotificationStore,\n });\n const configs = resolvedPushNotificationStore.list({\n agentId,\n params,\n });\n\n return createSuccessResponse(requestId, configs);\n}\n\nexport async function handleDeleteTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore,\n agentId,\n params,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n agentId: string;\n params: DeleteTaskPushNotificationConfigParams;\n}) {\n await loadTaskOrThrow({\n taskStore,\n agentId,\n taskId: params.id,\n });\n\n const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({\n pushNotificationStore,\n });\n const deleted = resolvedPushNotificationStore.delete({\n agentId,\n params,\n });\n\n if (!deleted) {\n throw MastraA2AError.invalidParams(`Push notification config not found: ${params.pushNotificationConfigId}`);\n }\n\n return createSuccessResponse(requestId, null);\n}\n\nexport async function* handleMessageStream({\n requestId,\n params,\n taskStore,\n pushNotificationStore,\n pushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n abortSignal,\n}: {\n requestId: number | string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n pushNotificationSender?: DefaultPushNotificationSender;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n requestContext: RequestContext;\n abortSignal?: AbortSignal;\n}) {\n validateMessageSendParams(params);\n\n const { message, metadata } = params;\n const { contextId } = message;\n const taskId = message.taskId || crypto.randomUUID();\n const existingTask = taskStore.loadWithVersion({ agentId, taskId })?.task;\n if (message.taskId && !existingTask) {\n throw MastraA2AError.taskNotFound(message.taskId);\n }\n resolveTaskMemory({ task: existingTask, agentId, requestContext, metadata, message });\n\n // A follow-up message for an interrupted task resumes the suspended agent\n // run instead of starting a fresh generation (A2A HITL continuation).\n // The claim transitions the task to `working` synchronously so concurrent\n // follow-ups cannot double-resume the same run.\n const resume = await claimInterruptedTaskResume({ taskStore, agentId, taskId });\n\n const {\n pushNotificationStore: resolvedPushNotificationStore,\n pushNotificationSender: resolvedPushNotificationSender,\n } = resolvePushNotificationPair({\n pushNotificationStore,\n pushNotificationSender,\n });\n\n let currentData = await loadOrCreateTask({\n taskId,\n taskStore,\n agentId,\n message,\n contextId,\n metadata,\n requestContext,\n });\n\n if (params.configuration?.pushNotificationConfig) {\n resolvedPushNotificationStore.set({\n agentId,\n config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig),\n });\n }\n\n currentData = applyUpdateToTask(currentData, {\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 await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n\n const { controller: taskAbortController, cleanup: cleanupLinkedAbortController } =\n createLinkedAbortController(abortSignal);\n const unregisterTaskAbortController = taskStore.registerAbortController({\n agentId,\n taskId,\n controller: taskAbortController,\n });\n\n try {\n yield createSuccessResponse(requestId, currentData);\n\n const memory = {\n ...resolveTaskMemory({ task: currentData, agentId, requestContext }),\n thread: currentData.contextId,\n };\n const result = resume\n ? await agent.resumeStream(normalizeResumeData(extractResumeData(message), resume.requiresApproval), {\n runId: resume.runId,\n ...(resume.toolCallId ? { toolCallId: resume.toolCallId } : {}),\n requestContext,\n abortSignal: taskAbortController.signal,\n })\n : await agent.stream([convertToCoreMessage(message)], {\n runId: taskId,\n requestContext,\n abortSignal: taskAbortController.signal,\n memory,\n });\n let sawTextArtifact = false;\n let pendingTextChunk: string | undefined;\n let structuredData: Record<string, unknown> | undefined;\n let suspended = false;\n let streamCanceled = false;\n\n for await (const chunk of result.fullStream) {\n if (taskAbortController.signal.aborted) {\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask) {\n currentData = latestTask;\n }\n streamCanceled = true;\n break;\n }\n\n if (isSuspensionChunk(chunk)) {\n suspended = true;\n continue;\n }\n\n const textDelta = extractFullStreamTextDelta(chunk);\n if (textDelta !== null) {\n if (!pendingTextChunk) {\n pendingTextChunk = textDelta;\n continue;\n }\n\n const textUpdate = createTextChunkArtifactUpdate({\n taskId: currentData.id,\n contextId: currentData.contextId,\n text: pendingTextChunk,\n append: sawTextArtifact,\n lastChunk: false,\n });\n\n currentData = applyUpdateToTask(currentData, textUpdate);\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n if (currentData.status.state === 'canceled') {\n streamCanceled = true;\n break;\n }\n yield createSuccessResponse(requestId, textUpdate);\n\n sawTextArtifact = true;\n pendingTextChunk = textDelta;\n continue;\n }\n\n const finalStructuredObject = extractFinalStructuredObject(chunk);\n if (finalStructuredObject) {\n structuredData = finalStructuredObject;\n }\n }\n\n if (!streamCanceled && taskAbortController.signal.aborted) {\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask) {\n currentData = latestTask;\n }\n streamCanceled = true;\n }\n\n if (streamCanceled && abortSignal?.aborted && currentData.status.state !== 'canceled') {\n const previousTask = currentData;\n currentData = applyUpdateToTask(currentData, {\n state: 'canceled',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [{ kind: 'text', text: 'Task canceled because the request was aborted.' }],\n kind: 'message',\n },\n });\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\n }\n\n if (!streamCanceled && suspended) {\n // Agent suspensions (tool approval, suspend()) surface as the A2A\n // `input-required` state so clients can provide the missing input and\n // continue the task (HITL per the A2A spec). Skip the completed path\n // and avoid awaiting result promises that only settle on completion.\n if (pendingTextChunk) {\n const textUpdate = createTextChunkArtifactUpdate({\n taskId: currentData.id,\n contextId: currentData.contextId,\n text: pendingTextChunk,\n append: sawTextArtifact,\n lastChunk: true,\n });\n\n currentData = applyUpdateToTask(currentData, textUpdate);\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n if (currentData.status.state === 'canceled') {\n streamCanceled = true;\n } else {\n yield createSuccessResponse(requestId, textUpdate);\n }\n }\n\n const suspensionTask = currentData;\n currentData = applySuspensionToTask({\n task: currentData,\n suspendPayload: await result.suspendPayload,\n resumeSchema: await result.resumeSchema,\n runId: result.runId ?? currentData.id,\n logger,\n });\n\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n previousTask: suspensionTask,\n nextTask: currentData,\n agentId,\n logger,\n });\n if (currentData.status.state === 'canceled') {\n streamCanceled = true;\n }\n }\n\n if (!streamCanceled && !suspended) {\n structuredData ??= (await result.object) as Record<string, unknown> | undefined;\n\n if (!pendingTextChunk && !sawTextArtifact) {\n const finalText = await result.text;\n if (finalText) {\n pendingTextChunk = finalText;\n }\n }\n\n if (pendingTextChunk) {\n const textUpdate = createTextChunkArtifactUpdate({\n taskId: currentData.id,\n contextId: currentData.contextId,\n text: pendingTextChunk,\n append: sawTextArtifact,\n lastChunk: !structuredData,\n });\n\n currentData = applyUpdateToTask(currentData, textUpdate);\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n if (currentData.status.state === 'canceled') {\n streamCanceled = true;\n } else {\n yield createSuccessResponse(requestId, textUpdate);\n }\n\n sawTextArtifact = true;\n pendingTextChunk = undefined;\n }\n\n if (!streamCanceled && structuredData) {\n const dataUpdate = createDataArtifactUpdate({\n taskId: currentData.id,\n contextId: currentData.contextId,\n data: structuredData,\n lastChunk: true,\n });\n\n currentData = applyUpdateToTask(currentData, dataUpdate);\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n nextTask: currentData,\n agentId,\n logger,\n });\n if (currentData.status.state === 'canceled') {\n streamCanceled = true;\n } else {\n yield createSuccessResponse(requestId, dataUpdate);\n }\n }\n\n if (!streamCanceled) {\n const previousTask = currentData;\n const completedTask = applyUpdateToTask(currentData, {\n state: 'completed',\n message: undefined,\n });\n\n completedTask.metadata = {\n ...clearSuspensionMetadata(completedTask.metadata),\n execution: {\n toolCalls: await result.toolCalls,\n toolResults: await result.toolResults,\n usage: await result.usage,\n finishReason: await result.finishReason,\n },\n };\n\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n previousTask,\n nextTask: completedTask,\n agentId,\n logger,\n });\n }\n }\n } catch (handlerError) {\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask?.status.state === 'canceled') {\n currentData = latestTask;\n } else if (taskAbortController.signal.aborted) {\n currentData = latestTask ?? currentData;\n if (abortSignal?.aborted) {\n const previousTask = currentData;\n currentData = applyUpdateToTask(currentData, {\n state: 'canceled',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [{ kind: 'text', text: 'Task canceled because the request was aborted.' }],\n kind: 'message',\n },\n });\n\n try {\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\n } catch (saveError) {\n // @ts-expect-error saveError is an unknown error\n logger?.error(`Failed to save task ${currentData.id} after request abort:`, saveError?.message);\n }\n }\n } else {\n currentData = latestTask ?? currentData;\n const previousTask = currentData;\n currentData = applyUpdateToTask(currentData, {\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\n try {\n currentData = await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n previousTask,\n nextTask: currentData,\n agentId,\n logger,\n });\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 } finally {\n unregisterTaskAbortController();\n cleanupLinkedAbortController();\n }\n\n const latestTask = await taskStore.load({ agentId, taskId: currentData.id });\n if (latestTask?.status.state === 'canceled') {\n currentData = latestTask;\n }\n\n yield createSuccessResponse(requestId, {\n kind: 'status-update',\n taskId: currentData.id,\n contextId: currentData.contextId,\n status: currentData.status,\n final: true,\n });\n}\n\nexport async function* handleTaskResubscribe({\n requestId,\n taskStore,\n agentId,\n taskId,\n abortSignal,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n abortSignal?: AbortSignal;\n}) {\n let snapshot = taskStore.loadWithVersion({ agentId, taskId });\n\n if (!snapshot) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n yield createSuccessResponse(requestId, snapshot.task);\n\n // Interrupted states produce no further updates until the client sends a\n // follow-up message, so the event stream ends here.\n if (isTerminalTaskState(snapshot.task.status.state) || isInterruptedTaskState(snapshot.task.status.state)) {\n return;\n }\n\n while (true) {\n const { task, version } = snapshot;\n const nextUpdate = await taskStore.waitForNextUpdate({\n agentId,\n taskId,\n afterVersion: version,\n signal: abortSignal,\n });\n\n for (const artifactUpdate of getTaskArtifactUpdates({ previous: task, next: nextUpdate.task })) {\n yield createSuccessResponse(requestId, artifactUpdate);\n }\n\n const nextState = nextUpdate.task.status.state;\n const streamEnded = isTerminalTaskState(nextState) || isInterruptedTaskState(nextState);\n\n if (didTaskStatusChange(task, nextUpdate.task)) {\n yield createSuccessResponse(requestId, {\n kind: 'status-update',\n taskId: nextUpdate.task.id,\n contextId: nextUpdate.task.contextId,\n status: nextUpdate.task.status,\n final: streamEnded,\n });\n }\n\n if (streamEnded) {\n return;\n }\n\n snapshot = nextUpdate;\n }\n}\n\nfunction getTaskIdFromParams(\n params: MessageSendParams | TaskQueryParams | TaskIdParams | Record<string, unknown> | undefined,\n) {\n if (!params || typeof params !== 'object') {\n return undefined;\n }\n\n if ('id' in params && typeof params.id === 'string') {\n return params.id;\n }\n\n if ('taskId' in params && typeof params.taskId === 'string') {\n return params.taskId;\n }\n\n if ('message' in params && params.message && typeof params.message === 'object' && 'taskId' in params.message) {\n return typeof params.message.taskId === 'string' ? params.message.taskId : undefined;\n }\n\n return undefined;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return !!value && typeof value === 'object' && Symbol.asyncIterator in value;\n}\n\nfunction createA2AJsonResponse(payload: unknown): Response {\n return Response.json(payload);\n}\n\nfunction createA2ASSEResponse(payload: AsyncIterable<unknown> | unknown): Response {\n const encoder = new TextEncoder();\n const iterable = isAsyncIterable(payload)\n ? payload\n : (async function* () {\n yield payload;\n })();\n\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const chunk of iterable) {\n controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\\n\\n`));\n }\n } catch (error) {\n controller.error(error);\n return;\n }\n\n controller.close();\n },\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n },\n });\n}\n\nexport async function handleTaskCancel({\n requestId,\n taskStore,\n pushNotificationSender,\n agentId,\n taskId,\n logger,\n}: {\n requestId: number | string;\n taskStore: InMemoryTaskStore;\n pushNotificationSender?: DefaultPushNotificationSender;\n agentId: string;\n taskId: string;\n logger?: IMastraLogger;\n}) {\n for (let attempt = 0; attempt < 2; attempt++) {\n const snapshot = taskStore.loadWithVersion({ agentId, taskId });\n const data = snapshot?.task;\n\n if (!data) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n if (isTerminalTaskState(data.status.state)) {\n logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);\n throw MastraA2AError.taskNotCancelable(taskId);\n }\n\n taskStore.activeCancellations.add(taskId);\n taskStore.abortTask({\n agentId,\n taskId,\n reason: new DOMException('Task cancelled by request.', 'AbortError'),\n });\n\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 const canceledTask = applyUpdateToTask(data, cancelUpdate);\n\n try {\n await saveTaskAndMaybeSendPushNotification({\n taskStore,\n pushNotificationSender: resolvePushNotificationPair({ pushNotificationSender }).pushNotificationSender,\n previousTask: data,\n nextTask: canceledTask,\n agentId,\n expectedVersion: snapshot.version,\n logger,\n });\n return createSuccessResponse(requestId, canceledTask);\n } catch (error) {\n if (!(error instanceof TaskStoreVersionConflictError)) {\n throw error;\n }\n } finally {\n taskStore.activeCancellations.delete(taskId);\n }\n }\n\n throw MastraA2AError.invalidRequest(`Task ${taskId} was updated concurrently. Retry the request.`);\n}\n\nexport async function getAgentExecutionHandler({\n requestId,\n mastra,\n agentId,\n requestContext,\n method,\n params,\n taskStore,\n pushNotificationStore,\n pushNotificationSender,\n logger,\n abortSignal,\n protocolVersion = '0.3',\n}: Context & {\n requestId: number | string;\n requestContext: RequestContext;\n agentId: string;\n method:\n | 'message/send'\n | 'message/stream'\n | 'tasks/get'\n | 'tasks/list'\n | 'tasks/cancel'\n | 'tasks/resubscribe'\n | 'tasks/pushNotificationConfig/set'\n | 'tasks/pushNotificationConfig/get'\n | 'tasks/pushNotificationConfig/list'\n | 'tasks/pushNotificationConfig/delete'\n | 'agent/getAuthenticatedExtendedCard';\n params?: MessageSendParams | TaskQueryParams | TaskIdParams | Record<string, unknown>;\n taskStore: InMemoryTaskStore;\n pushNotificationStore?: InMemoryPushNotificationStore;\n pushNotificationSender?: DefaultPushNotificationSender;\n logger?: IMastraLogger;\n abortSignal?: AbortSignal;\n protocolVersion?: A2AProtocolVersion;\n}): Promise<any> {\n const agent = await getAgentFromSystem({ mastra, agentId });\n const protocolParams = protocolVersion === '1.0' ? normalizeV1Params(params) : params;\n const {\n pushNotificationStore: resolvedPushNotificationStore,\n pushNotificationSender: resolvedPushNotificationSender,\n } = resolvePushNotificationPair({\n pushNotificationStore,\n pushNotificationSender,\n });\n\n let taskId: string | undefined; // For error context\n\n try {\n taskId = getTaskIdFromParams(protocolParams);\n\n // 2. Route based on method\n switch (method) {\n case 'message/send': {\n const result = await handleMessageSend({\n requestId,\n params: protocolParams as MessageSendParams,\n taskStore,\n pushNotificationStore: resolvedPushNotificationStore,\n pushNotificationSender: resolvedPushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n });\n return protocolVersion === '1.0' ? convertV1Response(result, method) : result;\n }\n case 'message/stream': {\n const result = await handleMessageStream({\n requestId,\n taskStore,\n params: protocolParams as MessageSendParams,\n pushNotificationStore: resolvedPushNotificationStore,\n pushNotificationSender: resolvedPushNotificationSender,\n agent,\n agentId,\n logger,\n requestContext,\n abortSignal,\n });\n return protocolVersion === '1.0' ? convertV1Stream(result, method) : result;\n }\n\n case 'tasks/get': {\n const result = await handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId: taskId || 'No task ID provided',\n });\n\n return protocolVersion === '1.0' ? convertV1Response(result, method) : result;\n }\n case 'tasks/list': {\n if (protocolVersion !== '1.0') {\n throw MastraA2AError.methodNotFound(method);\n }\n return handleTaskList({\n requestId,\n taskStore,\n agentId,\n params: protocolParams ?? {},\n });\n }\n case 'tasks/cancel': {\n const result = await handleTaskCancel({\n requestId,\n taskStore,\n pushNotificationSender: resolvedPushNotificationSender,\n agentId,\n taskId: taskId || 'No task ID provided',\n logger,\n });\n\n return protocolVersion === '1.0' ? convertV1Response(result, method) : result;\n }\n case 'tasks/resubscribe': {\n const result = handleTaskResubscribe({\n requestId,\n taskStore,\n agentId,\n taskId: taskId || 'No task ID provided',\n abortSignal,\n });\n return protocolVersion === '1.0' ? convertV1Stream(result, method) : result;\n }\n case 'tasks/pushNotificationConfig/set':\n return await handleSetTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore: resolvedPushNotificationStore,\n agentId,\n params: params as unknown as TaskPushNotificationConfig,\n });\n case 'tasks/pushNotificationConfig/get':\n return await handleGetTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore: resolvedPushNotificationStore,\n agentId,\n params: params as GetTaskPushNotificationConfigParams,\n });\n case 'tasks/pushNotificationConfig/list':\n return await handleListTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore: resolvedPushNotificationStore,\n agentId,\n params: params as ListTaskPushNotificationConfigParams,\n });\n case 'tasks/pushNotificationConfig/delete':\n return await handleDeleteTaskPushNotificationConfig({\n requestId,\n taskStore,\n pushNotificationStore: resolvedPushNotificationStore,\n agentId,\n params: params as DeleteTaskPushNotificationConfigParams,\n });\n case 'agent/getAuthenticatedExtendedCard':\n throw MastraA2AError.extendedAgentCardNotConfigured();\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\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport type A2AProtocolVersion = '0.3' | '1.0';\n\nexport function resolveA2AProtocolVersion(request?: Request): A2AProtocolVersion {\n const version = request?.headers.get('A2A-Version')?.trim();\n\n if (!version || version === '0.3') {\n return '0.3';\n }\n\n if (version === '1.0') {\n return '1.0';\n }\n\n throw MastraA2AError.versionNotSupported(version);\n}\n\nexport const GET_AGENT_CARD_ROUTE = createRoute({\n method: 'GET',\n path: '/.well-known/:agentId/agent-card.json',\n responseType: 'json',\n pathParamSchema: a2aAgentIdPathParams,\n responseSchema: agentCardResponseSchema,\n summary: 'Get agent card',\n description: 'Returns the agent card information for A2A protocol discovery',\n tags: ['Agent-to-Agent'],\n requiresAuth: true,\n handler: async ctx => {\n const executionUrl = getA2AExecutionUrl({\n agentId: ctx.agentId as string,\n request: (ctx as typeof ctx & { request?: Request }).request,\n routePrefix: ctx.routePrefix,\n });\n\n return getAgentCardByIdHandler({\n mastra: ctx.mastra,\n requestContext: ctx.requestContext,\n agentId: ctx.agentId,\n executionUrl,\n pushNotifications: true,\n });\n },\n});\n\nexport const AGENT_EXECUTION_ROUTE = createRoute({\n method: 'POST',\n path: '/a2a/:agentId',\n responseType: 'datastream-response',\n pathParamSchema: a2aAgentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: agentExecutionResponseSchema,\n summary: 'Execute agent',\n description: 'Executes an agent action via JSON-RPC 2.0 over A2A protocol',\n tags: ['Agent-to-Agent'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, requestContext, taskStore, abortSignal, request, ...bodyParams }) => {\n const { id: requestId, method } = bodyParams;\n const params = 'params' in bodyParams ? bodyParams.params : undefined;\n\n let protocolVersion: A2AProtocolVersion;\n try {\n protocolVersion = resolveA2AProtocolVersion(request);\n } catch (error) {\n return createA2AJsonResponse(normalizeError(error, requestId));\n }\n\n const result = await getAgentExecutionHandler({\n requestId,\n mastra,\n agentId: agentId as string,\n requestContext,\n method,\n params,\n taskStore: taskStore!,\n abortSignal,\n protocolVersion,\n });\n\n if (method === 'message/stream' || method === 'tasks/resubscribe') {\n return createA2ASSEResponse(result);\n }\n\n return createA2AJsonResponse(result);\n },\n});\n"],"x_google_ignoreList":[0],"mappings":"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"}
|