@mastra/server 0.0.0-netlify-no-bundle-20251127120354 → 0.0.0-partial-response-backport-20251204204441
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/CHANGELOG.md +137 -656
- package/README.md +1 -1
- package/dist/{chunk-RCCWKKI3.js → chunk-2FBQWGK2.js} +31 -218
- package/dist/chunk-2FBQWGK2.js.map +1 -0
- package/dist/chunk-2S4IMB6E.cjs +130 -0
- package/dist/chunk-2S4IMB6E.cjs.map +1 -0
- package/dist/chunk-3SNGNFUJ.cjs +128 -0
- package/dist/chunk-3SNGNFUJ.cjs.map +1 -0
- package/dist/chunk-4QCXUEAT.js +25 -0
- package/dist/chunk-4QCXUEAT.js.map +1 -0
- package/dist/chunk-67GYDFSB.js +160 -0
- package/dist/chunk-67GYDFSB.js.map +1 -0
- package/dist/chunk-6ZR275MD.cjs +165 -0
- package/dist/chunk-6ZR275MD.cjs.map +1 -0
- package/dist/{chunk-64ITUOXI.cjs → chunk-7NADHFD2.cjs} +2 -2
- package/dist/{chunk-6QWQZI4Q.js.map → chunk-7NADHFD2.cjs.map} +1 -1
- package/dist/chunk-ABRFV4XP.js +83 -0
- package/dist/chunk-ABRFV4XP.js.map +1 -0
- package/dist/chunk-AHB4JCIQ.js +160 -0
- package/dist/chunk-AHB4JCIQ.js.map +1 -0
- package/dist/chunk-AW5BU3RQ.js +192 -0
- package/dist/chunk-AW5BU3RQ.js.map +1 -0
- package/dist/chunk-BATEJLED.js +124 -0
- package/dist/chunk-BATEJLED.js.map +1 -0
- package/dist/{chunk-UXGQZUYZ.js → chunk-CY4TP3FK.js} +3 -3
- package/dist/{chunk-UXGQZUYZ.js.map → chunk-CY4TP3FK.js.map} +1 -1
- package/dist/chunk-EP3JQDPD.cjs +131 -0
- package/dist/chunk-EP3JQDPD.cjs.map +1 -0
- package/dist/chunk-G4PUALCE.cjs +28 -0
- package/dist/chunk-G4PUALCE.cjs.map +1 -0
- package/dist/chunk-I3C4ODGV.cjs +335 -0
- package/dist/chunk-I3C4ODGV.cjs.map +1 -0
- package/dist/{chunk-UZ6CYAOG.cjs → chunk-JOBDMCQL.cjs} +21 -7
- package/dist/chunk-JOBDMCQL.cjs.map +1 -0
- package/dist/chunk-KPDPKARA.cjs +733 -0
- package/dist/chunk-KPDPKARA.cjs.map +1 -0
- package/dist/chunk-LLUOPR3J.js +323 -0
- package/dist/chunk-LLUOPR3J.js.map +1 -0
- package/dist/{chunk-6QWQZI4Q.js → chunk-MMROOK5J.js} +2 -2
- package/dist/chunk-MMROOK5J.js.map +1 -0
- package/dist/chunk-MYR4PVGN.js +123 -0
- package/dist/chunk-MYR4PVGN.js.map +1 -0
- package/dist/chunk-NT5XW5PI.cjs +596 -0
- package/dist/chunk-NT5XW5PI.cjs.map +1 -0
- package/dist/chunk-O5Q5JZMC.cjs +19565 -0
- package/dist/chunk-O5Q5JZMC.cjs.map +1 -0
- package/dist/chunk-PBXWFGEH.js +579 -0
- package/dist/chunk-PBXWFGEH.js.map +1 -0
- package/dist/{chunk-PDVJ2TTM.cjs → chunk-Q4WS5AH4.cjs} +31 -224
- package/dist/chunk-Q4WS5AH4.cjs.map +1 -0
- package/dist/chunk-QQXMIP6C.js +122 -0
- package/dist/chunk-QQXMIP6C.js.map +1 -0
- package/dist/{chunk-V272B7RM.cjs → chunk-QU6N55W6.cjs} +12 -11
- package/dist/chunk-QU6N55W6.cjs.map +1 -0
- package/dist/{chunk-V5WWQN7P.cjs → chunk-RE4RPXT2.cjs} +4 -4
- package/dist/{chunk-V5WWQN7P.cjs.map → chunk-RE4RPXT2.cjs.map} +1 -1
- package/dist/{chunk-YP34EWWK.js → chunk-SHWNNZBL.js} +10 -9
- package/dist/chunk-SHWNNZBL.js.map +1 -0
- package/dist/chunk-SPRRK3P7.cjs +200 -0
- package/dist/chunk-SPRRK3P7.cjs.map +1 -0
- package/dist/chunk-TM6RSSEG.js +711 -0
- package/dist/chunk-TM6RSSEG.js.map +1 -0
- package/dist/{chunk-ER3QM7DD.js → chunk-TOCYBDP2.js} +4 -4
- package/dist/{chunk-ER3QM7DD.js.map → chunk-TOCYBDP2.js.map} +1 -1
- package/dist/chunk-TRGAMKHX.cjs +167 -0
- package/dist/chunk-TRGAMKHX.cjs.map +1 -0
- package/dist/{chunk-G7BPNX2V.js → chunk-VN33BALN.js} +21 -7
- package/dist/chunk-VN33BALN.js.map +1 -0
- package/dist/chunk-VYX6MBSJ.js +909 -0
- package/dist/chunk-VYX6MBSJ.js.map +1 -0
- package/dist/chunk-VZX6AWAA.cjs +938 -0
- package/dist/chunk-VZX6AWAA.cjs.map +1 -0
- package/dist/{chunk-XQPJ63ZD.cjs → chunk-X6C7BUWN.cjs} +4 -4
- package/dist/{chunk-XQPJ63ZD.cjs.map → chunk-X6C7BUWN.cjs.map} +1 -1
- package/dist/chunk-XN74I6VW.cjs +88 -0
- package/dist/chunk-XN74I6VW.cjs.map +1 -0
- package/dist/chunk-XPQZ5C3T.js +19529 -0
- package/dist/chunk-XPQZ5C3T.js.map +1 -0
- package/dist/server/handlers/a2a.cjs +7 -15
- package/dist/server/handlers/a2a.d.ts +10 -492
- 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 +31 -43
- package/dist/server/handlers/agent-builder.d.ts +84 -598
- package/dist/server/handlers/agent-builder.d.ts.map +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agents.cjs +41 -49
- package/dist/server/handlers/agents.d.ts +149 -3275
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/error.cjs +2 -2
- package/dist/server/handlers/error.js +1 -1
- package/dist/server/handlers/legacyWorkflows.cjs +48 -0
- package/dist/server/handlers/legacyWorkflows.cjs.map +1 -0
- package/dist/server/handlers/legacyWorkflows.d.ts +59 -0
- package/dist/server/handlers/legacyWorkflows.d.ts.map +1 -0
- package/dist/server/handlers/legacyWorkflows.js +3 -0
- package/dist/server/handlers/legacyWorkflows.js.map +1 -0
- package/dist/server/handlers/logs.cjs +7 -7
- package/dist/server/handlers/logs.d.ts +27 -135
- package/dist/server/handlers/logs.d.ts.map +1 -1
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/memory.cjs +31 -63
- package/dist/server/handlers/memory.d.ts +103 -934
- package/dist/server/handlers/memory.d.ts.map +1 -1
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability.cjs +8 -24
- package/dist/server/handlers/observability.d.ts +21 -128
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +1 -1
- package/dist/server/handlers/scores.cjs +13 -13
- package/dist/server/handlers/scores.d.ts +141 -110
- package/dist/server/handlers/scores.d.ts.map +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/telemetry.cjs +20 -0
- package/dist/server/handlers/telemetry.cjs.map +1 -0
- package/dist/server/handlers/telemetry.d.ts +33 -0
- package/dist/server/handlers/telemetry.d.ts.map +1 -0
- package/dist/server/handlers/telemetry.js +3 -0
- package/dist/server/handlers/telemetry.js.map +1 -0
- package/dist/server/handlers/tools.cjs +11 -11
- package/dist/server/handlers/tools.d.ts +23 -69
- package/dist/server/handlers/tools.d.ts.map +1 -1
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +3 -11
- package/dist/server/handlers/utils.d.ts +0 -5
- package/dist/server/handlers/utils.d.ts.map +1 -1
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/vector.cjs +7 -31
- package/dist/server/handlers/vector.d.ts +9 -93
- package/dist/server/handlers/vector.d.ts.map +1 -1
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/voice.cjs +9 -21
- package/dist/server/handlers/voice.d.ts +40 -81
- package/dist/server/handlers/voice.d.ts.map +1 -1
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +59 -51
- package/dist/server/handlers/workflows.d.ts +140 -915
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers.cjs +36 -26
- package/dist/server/handlers.d.ts +2 -0
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/handlers.js +13 -11
- package/dist/server/http-exception.d.ts +5 -0
- package/dist/server/http-exception.d.ts.map +1 -1
- package/dist/server/utils.d.ts +3 -4
- package/dist/server/utils.d.ts.map +1 -1
- package/dist/{token-ZOD6YIQ3.cjs → token-375W3LEI.cjs} +8 -7
- package/dist/{token-VFONFWVS.cjs.map → token-375W3LEI.cjs.map} +1 -1
- package/dist/{token-JGA3ZWAN.js → token-C3IMNCC4.js} +6 -5
- package/dist/{token-GVZ7HRD7.js.map → token-C3IMNCC4.js.map} +1 -1
- package/dist/token-util-CV3RRG6K.cjs +9 -0
- package/dist/{token-util-BLJZJDBZ.cjs.map → token-util-CV3RRG6K.cjs.map} +1 -1
- package/dist/token-util-E5QO2RCL.js +7 -0
- package/dist/{token-util-7R2ZFIXO.js.map → token-util-E5QO2RCL.js.map} +1 -1
- package/package.json +15 -26
- package/dist/chunk-2NW6POYK.cjs +0 -89
- package/dist/chunk-2NW6POYK.cjs.map +0 -1
- package/dist/chunk-4JMHKKV3.cjs +0 -201
- package/dist/chunk-4JMHKKV3.cjs.map +0 -1
- package/dist/chunk-4O2QGUW3.js +0 -354
- package/dist/chunk-4O2QGUW3.js.map +0 -1
- package/dist/chunk-4W2SM6CG.js +0 -294
- package/dist/chunk-4W2SM6CG.js.map +0 -1
- package/dist/chunk-5W4RPVTK.cjs +0 -49
- package/dist/chunk-5W4RPVTK.cjs.map +0 -1
- package/dist/chunk-64ITUOXI.cjs.map +0 -1
- package/dist/chunk-6GHJDY7R.js +0 -23157
- package/dist/chunk-6GHJDY7R.js.map +0 -1
- package/dist/chunk-6KNI7VIX.js +0 -1021
- package/dist/chunk-6KNI7VIX.js.map +0 -1
- package/dist/chunk-A6MQQTHN.js +0 -310
- package/dist/chunk-A6MQQTHN.js.map +0 -1
- package/dist/chunk-AUQBEMDP.cjs +0 -322
- package/dist/chunk-AUQBEMDP.cjs.map +0 -1
- package/dist/chunk-CBDUTSTI.js +0 -192
- package/dist/chunk-CBDUTSTI.js.map +0 -1
- package/dist/chunk-FPCGLPLJ.cjs +0 -297
- package/dist/chunk-FPCGLPLJ.cjs.map +0 -1
- package/dist/chunk-G7BPNX2V.js.map +0 -1
- package/dist/chunk-IMK7366C.cjs +0 -346
- package/dist/chunk-IMK7366C.cjs.map +0 -1
- package/dist/chunk-LGG3N3AV.js +0 -116
- package/dist/chunk-LGG3N3AV.js.map +0 -1
- package/dist/chunk-LIDPFFPK.cjs +0 -23199
- package/dist/chunk-LIDPFFPK.cjs.map +0 -1
- package/dist/chunk-LZDCXQMX.js +0 -164
- package/dist/chunk-LZDCXQMX.js.map +0 -1
- package/dist/chunk-MH3A7RDQ.cjs +0 -1064
- package/dist/chunk-MH3A7RDQ.cjs.map +0 -1
- package/dist/chunk-MWQQRVQC.cjs +0 -259
- package/dist/chunk-MWQQRVQC.cjs.map +0 -1
- package/dist/chunk-PDVJ2TTM.cjs.map +0 -1
- package/dist/chunk-PKRHEXX7.js +0 -74
- package/dist/chunk-PKRHEXX7.js.map +0 -1
- package/dist/chunk-QDOIM3G5.cjs +0 -916
- package/dist/chunk-QDOIM3G5.cjs.map +0 -1
- package/dist/chunk-QVHQZUGJ.cjs +0 -368
- package/dist/chunk-QVHQZUGJ.cjs.map +0 -1
- package/dist/chunk-R4M3BSUG.js +0 -226
- package/dist/chunk-R4M3BSUG.js.map +0 -1
- package/dist/chunk-R6ZTXNN2.cjs +0 -797
- package/dist/chunk-R6ZTXNN2.cjs.map +0 -1
- package/dist/chunk-RCCWKKI3.js.map +0 -1
- package/dist/chunk-RIYA7ZCE.js +0 -887
- package/dist/chunk-RIYA7ZCE.js.map +0 -1
- package/dist/chunk-S6DFGBDD.cjs +0 -211
- package/dist/chunk-S6DFGBDD.cjs.map +0 -1
- package/dist/chunk-SAQSK4AG.cjs +0 -167
- package/dist/chunk-SAQSK4AG.cjs.map +0 -1
- package/dist/chunk-UCRV7PD3.js +0 -773
- package/dist/chunk-UCRV7PD3.js.map +0 -1
- package/dist/chunk-UZ6CYAOG.cjs.map +0 -1
- package/dist/chunk-V272B7RM.cjs.map +0 -1
- package/dist/chunk-XWGAT2DA.js +0 -44
- package/dist/chunk-XWGAT2DA.js.map +0 -1
- package/dist/chunk-YLQHE2S5.js +0 -204
- package/dist/chunk-YLQHE2S5.js.map +0 -1
- package/dist/chunk-YP34EWWK.js.map +0 -1
- package/dist/chunk-Z7R7CFVF.cjs +0 -125
- package/dist/chunk-Z7R7CFVF.cjs.map +0 -1
- package/dist/chunk-ZPZSAJAR.js +0 -328
- package/dist/chunk-ZPZSAJAR.js.map +0 -1
- package/dist/server/handlers/test-utils.cjs +0 -15
- package/dist/server/handlers/test-utils.cjs.map +0 -1
- package/dist/server/handlers/test-utils.d.ts +0 -6
- package/dist/server/handlers/test-utils.d.ts.map +0 -1
- package/dist/server/handlers/test-utils.js +0 -13
- package/dist/server/handlers/test-utils.js.map +0 -1
- package/dist/server/schemas/a2a.d.ts +0 -786
- package/dist/server/schemas/a2a.d.ts.map +0 -1
- package/dist/server/schemas/agent-builder.d.ts +0 -195
- package/dist/server/schemas/agent-builder.d.ts.map +0 -1
- package/dist/server/schemas/agents.d.ts +0 -1375
- package/dist/server/schemas/agents.d.ts.map +0 -1
- package/dist/server/schemas/common.d.ts +0 -165
- package/dist/server/schemas/common.d.ts.map +0 -1
- package/dist/server/schemas/logs.d.ts +0 -124
- package/dist/server/schemas/logs.d.ts.map +0 -1
- package/dist/server/schemas/memory.d.ts +0 -998
- package/dist/server/schemas/memory.d.ts.map +0 -1
- package/dist/server/schemas/observability.d.ts +0 -402
- package/dist/server/schemas/observability.d.ts.map +0 -1
- package/dist/server/schemas/scores.d.ts +0 -259
- package/dist/server/schemas/scores.d.ts.map +0 -1
- package/dist/server/schemas/vectors.d.ts +0 -107
- package/dist/server/schemas/vectors.d.ts.map +0 -1
- package/dist/server/schemas/workflows.d.ts +0 -608
- package/dist/server/schemas/workflows.d.ts.map +0 -1
- package/dist/server/server-adapter/index.cjs +0 -330
- package/dist/server/server-adapter/index.cjs.map +0 -1
- package/dist/server/server-adapter/index.d.ts +0 -52
- package/dist/server/server-adapter/index.d.ts.map +0 -1
- package/dist/server/server-adapter/index.js +0 -316
- package/dist/server/server-adapter/index.js.map +0 -1
- package/dist/server/server-adapter/openapi-utils.d.ts +0 -59
- package/dist/server/server-adapter/openapi-utils.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/a2a.d.ts +0 -3
- package/dist/server/server-adapter/routes/a2a.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/agent-builder.d.ts +0 -3
- package/dist/server/server-adapter/routes/agent-builder.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/agents.d.ts +0 -3
- package/dist/server/server-adapter/routes/agents.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/index.d.ts +0 -41
- package/dist/server/server-adapter/routes/index.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/legacy.d.ts +0 -7
- package/dist/server/server-adapter/routes/legacy.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/logs.d.ts +0 -3
- package/dist/server/server-adapter/routes/logs.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/memory.d.ts +0 -3
- package/dist/server/server-adapter/routes/memory.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/observability.d.ts +0 -3
- package/dist/server/server-adapter/routes/observability.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/route-builder.d.ts +0 -52
- package/dist/server/server-adapter/routes/route-builder.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/scorers.d.ts +0 -3
- package/dist/server/server-adapter/routes/scorers.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/stream-types.d.ts +0 -10
- package/dist/server/server-adapter/routes/stream-types.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/tools.d.ts +0 -3
- package/dist/server/server-adapter/routes/tools.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/vectors.d.ts +0 -3
- package/dist/server/server-adapter/routes/vectors.d.ts.map +0 -1
- package/dist/server/server-adapter/routes/workflows.d.ts +0 -3
- package/dist/server/server-adapter/routes/workflows.d.ts.map +0 -1
- package/dist/token-GVZ7HRD7.js +0 -62
- package/dist/token-JGA3ZWAN.js.map +0 -1
- package/dist/token-VFONFWVS.cjs +0 -64
- package/dist/token-ZOD6YIQ3.cjs.map +0 -1
- package/dist/token-util-7R2ZFIXO.js +0 -7
- package/dist/token-util-BLJZJDBZ.cjs +0 -9
- package/dist/token-util-VGZUWSNR.cjs +0 -9
- package/dist/token-util-VGZUWSNR.cjs.map +0 -1
- package/dist/token-util-VKTPZLSE.js +0 -7
- package/dist/token-util-VKTPZLSE.js.map +0 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ import { mastra } from './mastra-instance';
|
|
|
23
23
|
|
|
24
24
|
const app = new Hono();
|
|
25
25
|
|
|
26
|
-
app.get('/mastra/agents', ctx => handlers.agents.
|
|
26
|
+
app.get('/mastra/agents', ctx => handlers.agents.getAgentsHandler({ mastra, runtimeContext: ctx }));
|
|
27
27
|
app.post('/mastra/agents/:id/generate', async ctx => {
|
|
28
28
|
const body = await ctx.req.json();
|
|
29
29
|
return handlers.agents.generateHandler({
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { convertInstructionsToString } from './chunk-
|
|
2
|
-
import { createRoute } from './chunk-LZDCXQMX.js';
|
|
1
|
+
import { convertInstructionsToString } from './chunk-VN33BALN.js';
|
|
3
2
|
import { __export } from './chunk-PR4QN5HX.js';
|
|
4
3
|
import { MastraA2AError } from '@mastra/core/a2a';
|
|
5
|
-
import
|
|
4
|
+
import { z } from 'zod';
|
|
6
5
|
|
|
7
6
|
// src/server/handlers/a2a.ts
|
|
8
7
|
var a2a_exports = {};
|
|
9
8
|
__export(a2a_exports, {
|
|
10
|
-
AGENT_EXECUTION_ROUTE: () => AGENT_EXECUTION_ROUTE,
|
|
11
|
-
GET_AGENT_CARD_ROUTE: () => GET_AGENT_CARD_ROUTE,
|
|
12
9
|
getAgentCardByIdHandler: () => getAgentCardByIdHandler,
|
|
13
10
|
getAgentExecutionHandler: () => getAgentExecutionHandler,
|
|
14
11
|
handleMessageSend: () => handleMessageSend,
|
|
@@ -181,138 +178,24 @@ function createTaskContext({
|
|
|
181
178
|
isCancelled: () => activeCancellations.has(task.id)
|
|
182
179
|
};
|
|
183
180
|
}
|
|
184
|
-
var a2aAgentIdPathParams = z.object({
|
|
185
|
-
agentId: z.string().describe("Unique identifier for the agent")
|
|
186
|
-
});
|
|
187
|
-
a2aAgentIdPathParams.extend({
|
|
188
|
-
taskId: z.string().describe("Unique identifier for the task")
|
|
189
|
-
});
|
|
190
|
-
var pushNotificationAuthenticationInfoSchema = z.object({
|
|
191
|
-
schemes: z.array(z.string()).describe("Supported authentication schemes - e.g. Basic, Bearer"),
|
|
192
|
-
credentials: z.string().optional().describe("Optional credentials")
|
|
193
|
-
});
|
|
194
|
-
var pushNotificationConfigSchema = z.object({
|
|
195
|
-
url: z.string().describe("URL for sending the push notifications"),
|
|
196
|
-
id: z.string().optional().describe("Push Notification ID - created by server to support multiple callbacks"),
|
|
197
|
-
token: z.string().optional().describe("Token unique to this task/session"),
|
|
198
|
-
authentication: pushNotificationAuthenticationInfoSchema.optional()
|
|
199
|
-
});
|
|
200
|
-
var messageSendConfigurationSchema = z.object({
|
|
201
|
-
acceptedOutputModes: z.array(z.string()).describe("Accepted output modalities by the client"),
|
|
202
|
-
blocking: z.boolean().optional().describe("If the server should treat the client as a blocking request"),
|
|
203
|
-
historyLength: z.number().optional().describe("Number of recent messages to be retrieved"),
|
|
204
|
-
pushNotificationConfig: pushNotificationConfigSchema.optional()
|
|
205
|
-
});
|
|
206
|
-
var textPartSchema = z.object({
|
|
207
|
-
kind: z.literal("text").describe("Part type - text for TextParts"),
|
|
208
|
-
text: z.string().describe("Text content"),
|
|
209
|
-
metadata: z.record(z.unknown()).optional().describe("Optional metadata associated with the part")
|
|
210
|
-
});
|
|
211
|
-
var fileWithBytesSchema = z.object({
|
|
212
|
-
bytes: z.string().describe("base64 encoded content of the file"),
|
|
213
|
-
mimeType: z.string().optional().describe("Optional mimeType for the file"),
|
|
214
|
-
name: z.string().optional().describe("Optional name for the file")
|
|
215
|
-
});
|
|
216
|
-
var fileWithUriSchema = z.object({
|
|
217
|
-
uri: z.string().describe("URL for the File content"),
|
|
218
|
-
mimeType: z.string().optional().describe("Optional mimeType for the file"),
|
|
219
|
-
name: z.string().optional().describe("Optional name for the file")
|
|
220
|
-
});
|
|
221
|
-
var filePartSchema = z.object({
|
|
222
|
-
kind: z.literal("file").describe("Part type - file for FileParts"),
|
|
223
|
-
file: z.union([fileWithBytesSchema, fileWithUriSchema]).describe("File content either as url or bytes"),
|
|
224
|
-
metadata: z.record(z.unknown()).optional().describe("Optional metadata associated with the part")
|
|
225
|
-
});
|
|
226
|
-
var dataPartSchema = z.object({
|
|
227
|
-
kind: z.literal("data").describe("Part type - data for DataParts"),
|
|
228
|
-
data: z.record(z.unknown()).describe("Structured data content"),
|
|
229
|
-
metadata: z.record(z.unknown()).optional().describe("Optional metadata associated with the part")
|
|
230
|
-
});
|
|
231
|
-
var partSchema = z.union([textPartSchema, filePartSchema, dataPartSchema]);
|
|
232
|
-
var messageSchema = z.object({
|
|
233
|
-
kind: z.literal("message").describe("Event type"),
|
|
234
|
-
messageId: z.string().describe("Identifier created by the message creator"),
|
|
235
|
-
role: z.enum(["user", "agent"]).describe("Message sender's role"),
|
|
236
|
-
parts: z.array(partSchema).describe("Message content"),
|
|
237
|
-
contextId: z.string().optional().describe("The context the message is associated with"),
|
|
238
|
-
taskId: z.string().optional().describe("Identifier of task the message is related to"),
|
|
239
|
-
referenceTaskIds: z.array(z.string()).optional().describe("List of tasks referenced as context by this message"),
|
|
240
|
-
extensions: z.array(z.string()).optional().describe("The URIs of extensions that are present or contributed to this Message"),
|
|
241
|
-
metadata: z.record(z.unknown()).optional().describe("Extension metadata")
|
|
242
|
-
});
|
|
243
|
-
var messageSendParamsSchema = z.object({
|
|
244
|
-
message: messageSchema,
|
|
245
|
-
configuration: messageSendConfigurationSchema.optional(),
|
|
246
|
-
metadata: z.record(z.unknown()).optional().describe("Extension metadata")
|
|
247
|
-
});
|
|
248
|
-
var taskQueryParamsSchema = z.object({
|
|
249
|
-
id: z.string().describe("Task id"),
|
|
250
|
-
historyLength: z.number().optional().describe("Number of recent messages to be retrieved"),
|
|
251
|
-
metadata: z.record(z.unknown()).optional()
|
|
252
|
-
});
|
|
253
|
-
var taskIdParamsSchema = z.object({
|
|
254
|
-
id: z.string().describe("Task id"),
|
|
255
|
-
metadata: z.record(z.unknown()).optional()
|
|
256
|
-
});
|
|
257
|
-
z.object({
|
|
258
|
-
message: messageSchema,
|
|
259
|
-
metadata: z.record(z.any()).optional()
|
|
260
|
-
});
|
|
261
|
-
z.object({
|
|
262
|
-
id: z.string()
|
|
263
|
-
});
|
|
264
|
-
var agentExecutionParamsSchema = z.union([messageSendParamsSchema, taskQueryParamsSchema, taskIdParamsSchema]);
|
|
265
|
-
var agentExecutionBodySchema = z.object({
|
|
266
|
-
jsonrpc: z.literal("2.0"),
|
|
267
|
-
id: z.union([z.string(), z.number()]),
|
|
268
|
-
method: z.enum(["message/send", "message/stream", "tasks/get", "tasks/cancel"]),
|
|
269
|
-
params: agentExecutionParamsSchema
|
|
270
|
-
});
|
|
271
|
-
var agentCardResponseSchema = z.object({
|
|
272
|
-
name: z.string(),
|
|
273
|
-
description: z.string(),
|
|
274
|
-
url: z.string(),
|
|
275
|
-
provider: z.object({
|
|
276
|
-
organization: z.string(),
|
|
277
|
-
url: z.string()
|
|
278
|
-
}).optional(),
|
|
279
|
-
version: z.string(),
|
|
280
|
-
capabilities: z.object({
|
|
281
|
-
streaming: z.boolean().optional(),
|
|
282
|
-
pushNotifications: z.boolean().optional(),
|
|
283
|
-
stateTransitionHistory: z.boolean().optional()
|
|
284
|
-
}),
|
|
285
|
-
defaultInputModes: z.array(z.string()),
|
|
286
|
-
defaultOutputModes: z.array(z.string()),
|
|
287
|
-
skills: z.array(
|
|
288
|
-
z.object({
|
|
289
|
-
id: z.string(),
|
|
290
|
-
name: z.string(),
|
|
291
|
-
description: z.string(),
|
|
292
|
-
tags: z.array(z.string()).optional()
|
|
293
|
-
})
|
|
294
|
-
)
|
|
295
|
-
});
|
|
296
|
-
z.unknown();
|
|
297
|
-
var agentExecutionResponseSchema = z.unknown();
|
|
298
181
|
|
|
299
182
|
// src/server/handlers/a2a.ts
|
|
300
|
-
var
|
|
301
|
-
message: z
|
|
302
|
-
role: z
|
|
303
|
-
parts: z
|
|
304
|
-
z
|
|
305
|
-
kind: z
|
|
306
|
-
text: z
|
|
183
|
+
var messageSendParamsSchema = z.object({
|
|
184
|
+
message: z.object({
|
|
185
|
+
role: z.enum(["user", "agent"]),
|
|
186
|
+
parts: z.array(
|
|
187
|
+
z.object({
|
|
188
|
+
kind: z.enum(["text"]),
|
|
189
|
+
text: z.string()
|
|
307
190
|
})
|
|
308
191
|
),
|
|
309
|
-
kind: z
|
|
310
|
-
messageId: z
|
|
311
|
-
contextId: z
|
|
312
|
-
taskId: z
|
|
313
|
-
referenceTaskIds: z
|
|
314
|
-
extensions: z
|
|
315
|
-
metadata: z
|
|
192
|
+
kind: z.literal("message"),
|
|
193
|
+
messageId: z.string(),
|
|
194
|
+
contextId: z.string().optional(),
|
|
195
|
+
taskId: z.string().optional(),
|
|
196
|
+
referenceTaskIds: z.array(z.string()).optional(),
|
|
197
|
+
extensions: z.array(z.string()).optional(),
|
|
198
|
+
metadata: z.record(z.any()).optional()
|
|
316
199
|
})
|
|
317
200
|
});
|
|
318
201
|
async function getAgentCardByIdHandler({
|
|
@@ -324,15 +207,15 @@ async function getAgentCardByIdHandler({
|
|
|
324
207
|
url: "https://mastra.ai"
|
|
325
208
|
},
|
|
326
209
|
version = "1.0",
|
|
327
|
-
|
|
210
|
+
runtimeContext
|
|
328
211
|
}) {
|
|
329
212
|
const agent = mastra.getAgentById(agentId);
|
|
330
213
|
if (!agent) {
|
|
331
214
|
throw new Error(`Agent with ID ${agentId} not found`);
|
|
332
215
|
}
|
|
333
216
|
const [instructions, tools] = await Promise.all([
|
|
334
|
-
agent.getInstructions({
|
|
335
|
-
agent.
|
|
217
|
+
agent.getInstructions({ runtimeContext }),
|
|
218
|
+
agent.getTools({ runtimeContext })
|
|
336
219
|
]);
|
|
337
220
|
const agentCard = {
|
|
338
221
|
name: agent.id || agentId,
|
|
@@ -361,9 +244,9 @@ async function getAgentCardByIdHandler({
|
|
|
361
244
|
}
|
|
362
245
|
function validateMessageSendParams(params) {
|
|
363
246
|
try {
|
|
364
|
-
|
|
247
|
+
messageSendParamsSchema.parse(params);
|
|
365
248
|
} catch (error) {
|
|
366
|
-
if (error instanceof z
|
|
249
|
+
if (error instanceof z.ZodError) {
|
|
367
250
|
throw MastraA2AError.invalidParams(error.errors[0].message);
|
|
368
251
|
}
|
|
369
252
|
throw error;
|
|
@@ -376,7 +259,7 @@ async function handleMessageSend({
|
|
|
376
259
|
agent,
|
|
377
260
|
agentId,
|
|
378
261
|
logger,
|
|
379
|
-
|
|
262
|
+
runtimeContext
|
|
380
263
|
}) {
|
|
381
264
|
validateMessageSendParams(params);
|
|
382
265
|
const { message, metadata } = params;
|
|
@@ -399,7 +282,7 @@ async function handleMessageSend({
|
|
|
399
282
|
try {
|
|
400
283
|
const { text } = await agent.generate([convertToCoreMessage(message)], {
|
|
401
284
|
runId: taskId,
|
|
402
|
-
|
|
285
|
+
runtimeContext
|
|
403
286
|
});
|
|
404
287
|
currentData = applyUpdateToTask(currentData, {
|
|
405
288
|
state: "completed",
|
|
@@ -460,7 +343,7 @@ async function* handleMessageStream({
|
|
|
460
343
|
agent,
|
|
461
344
|
agentId,
|
|
462
345
|
logger,
|
|
463
|
-
|
|
346
|
+
runtimeContext
|
|
464
347
|
}) {
|
|
465
348
|
yield createSuccessResponse(requestId, {
|
|
466
349
|
state: "working",
|
|
@@ -479,7 +362,7 @@ async function* handleMessageStream({
|
|
|
479
362
|
taskStore,
|
|
480
363
|
agent,
|
|
481
364
|
agentId,
|
|
482
|
-
|
|
365
|
+
runtimeContext,
|
|
483
366
|
logger
|
|
484
367
|
});
|
|
485
368
|
} catch (err) {
|
|
@@ -528,7 +411,7 @@ async function getAgentExecutionHandler({
|
|
|
528
411
|
requestId,
|
|
529
412
|
mastra,
|
|
530
413
|
agentId,
|
|
531
|
-
|
|
414
|
+
runtimeContext,
|
|
532
415
|
method,
|
|
533
416
|
params,
|
|
534
417
|
taskStore,
|
|
@@ -546,7 +429,7 @@ async function getAgentExecutionHandler({
|
|
|
546
429
|
taskStore,
|
|
547
430
|
agent,
|
|
548
431
|
agentId,
|
|
549
|
-
|
|
432
|
+
runtimeContext
|
|
550
433
|
});
|
|
551
434
|
return result2;
|
|
552
435
|
}
|
|
@@ -557,7 +440,7 @@ async function getAgentExecutionHandler({
|
|
|
557
440
|
params,
|
|
558
441
|
agent,
|
|
559
442
|
agentId,
|
|
560
|
-
|
|
443
|
+
runtimeContext
|
|
561
444
|
});
|
|
562
445
|
return result;
|
|
563
446
|
case "tasks/get": {
|
|
@@ -588,77 +471,7 @@ async function getAgentExecutionHandler({
|
|
|
588
471
|
return normalizeError(error, requestId, taskId, logger);
|
|
589
472
|
}
|
|
590
473
|
}
|
|
591
|
-
var GET_AGENT_CARD_ROUTE = createRoute({
|
|
592
|
-
method: "GET",
|
|
593
|
-
path: "/.well-known/:agentId/agent-card.json",
|
|
594
|
-
responseType: "json",
|
|
595
|
-
pathParamSchema: a2aAgentIdPathParams,
|
|
596
|
-
responseSchema: agentCardResponseSchema,
|
|
597
|
-
summary: "Get agent card",
|
|
598
|
-
description: "Returns the agent card information for A2A protocol discovery",
|
|
599
|
-
tags: ["Agent-to-Agent"],
|
|
600
|
-
handler: async ({ mastra, agentId, requestContext }) => {
|
|
601
|
-
const executionUrl = `/a2a/${agentId}`;
|
|
602
|
-
const provider = {
|
|
603
|
-
organization: "Mastra",
|
|
604
|
-
url: "https://mastra.ai"
|
|
605
|
-
};
|
|
606
|
-
const version = "1.0";
|
|
607
|
-
const agent = mastra.getAgentById(agentId);
|
|
608
|
-
if (!agent) {
|
|
609
|
-
throw new Error(`Agent with ID ${agentId} not found`);
|
|
610
|
-
}
|
|
611
|
-
const [instructions, tools] = await Promise.all([
|
|
612
|
-
agent.getInstructions({ requestContext }),
|
|
613
|
-
agent.listTools({ requestContext })
|
|
614
|
-
]);
|
|
615
|
-
const agentCard = {
|
|
616
|
-
name: agent.id || agentId,
|
|
617
|
-
description: convertInstructionsToString(instructions),
|
|
618
|
-
url: executionUrl,
|
|
619
|
-
provider,
|
|
620
|
-
version,
|
|
621
|
-
capabilities: {
|
|
622
|
-
streaming: true,
|
|
623
|
-
pushNotifications: false,
|
|
624
|
-
stateTransitionHistory: false
|
|
625
|
-
},
|
|
626
|
-
defaultInputModes: ["text"],
|
|
627
|
-
defaultOutputModes: ["text"],
|
|
628
|
-
skills: Object.entries(tools).map(([toolId, tool]) => ({
|
|
629
|
-
id: toolId,
|
|
630
|
-
name: toolId,
|
|
631
|
-
description: tool.description || `Tool: ${toolId}`,
|
|
632
|
-
tags: ["tool"]
|
|
633
|
-
}))
|
|
634
|
-
};
|
|
635
|
-
return agentCard;
|
|
636
|
-
}
|
|
637
|
-
});
|
|
638
|
-
var AGENT_EXECUTION_ROUTE = createRoute({
|
|
639
|
-
method: "POST",
|
|
640
|
-
path: "/a2a/:agentId",
|
|
641
|
-
responseType: "json",
|
|
642
|
-
pathParamSchema: a2aAgentIdPathParams,
|
|
643
|
-
bodySchema: agentExecutionBodySchema,
|
|
644
|
-
responseSchema: agentExecutionResponseSchema,
|
|
645
|
-
summary: "Execute agent",
|
|
646
|
-
description: "Executes an agent action via JSON-RPC 2.0 over A2A protocol",
|
|
647
|
-
tags: ["Agent-to-Agent"],
|
|
648
|
-
handler: async ({ mastra, agentId, requestContext, taskStore, ...bodyParams }) => {
|
|
649
|
-
const { id: requestId, method, params } = bodyParams;
|
|
650
|
-
return await getAgentExecutionHandler({
|
|
651
|
-
requestId: String(requestId),
|
|
652
|
-
mastra,
|
|
653
|
-
agentId,
|
|
654
|
-
requestContext,
|
|
655
|
-
method,
|
|
656
|
-
params,
|
|
657
|
-
taskStore
|
|
658
|
-
});
|
|
659
|
-
}
|
|
660
|
-
});
|
|
661
474
|
|
|
662
|
-
export {
|
|
663
|
-
//# sourceMappingURL=chunk-
|
|
664
|
-
//# sourceMappingURL=chunk-
|
|
475
|
+
export { a2a_exports, getAgentCardByIdHandler, getAgentExecutionHandler, handleMessageSend, handleMessageStream, handleTaskCancel, handleTaskGet };
|
|
476
|
+
//# sourceMappingURL=chunk-2FBQWGK2.js.map
|
|
477
|
+
//# sourceMappingURL=chunk-2FBQWGK2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/a2a.ts","../src/server/a2a/protocol.ts","../src/server/a2a/tasks.ts"],"names":["MastraA2AError","result"],"mappings":"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","file":"chunk-2FBQWGK2.js","sourcesContent":["import { MastraA2AError } from '@mastra/core/a2a';\nimport type {\n MessageSendParams,\n TaskQueryParams,\n TaskIdParams,\n AgentCard,\n TaskStatus,\n TaskState,\n} from '@mastra/core/a2a';\nimport type { Agent } from '@mastra/core/agent';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport { z } from 'zod';\nimport { convertToCoreMessage, normalizeError, createSuccessResponse, createErrorResponse } from '../a2a/protocol';\nimport type { InMemoryTaskStore } from '../a2a/store';\nimport { applyUpdateToTask, createTaskContext, loadOrCreateTask } from '../a2a/tasks';\nimport type { Context } from '../types';\nimport { convertInstructionsToString } from '../utils';\n\nconst messageSendParamsSchema = z.object({\n message: z.object({\n role: z.enum(['user', 'agent']),\n parts: z.array(\n z.object({\n kind: z.enum(['text']),\n text: z.string(),\n }),\n ),\n kind: z.literal('message'),\n messageId: z.string(),\n contextId: z.string().optional(),\n taskId: z.string().optional(),\n referenceTaskIds: z.array(z.string()).optional(),\n extensions: z.array(z.string()).optional(),\n metadata: z.record(z.any()).optional(),\n }),\n});\n\nexport async function getAgentCardByIdHandler({\n mastra,\n agentId,\n executionUrl = `/a2a/${agentId}`,\n provider = {\n organization: 'Mastra',\n url: 'https://mastra.ai',\n },\n version = '1.0',\n runtimeContext,\n}: Context & {\n runtimeContext: RuntimeContext;\n agentId: keyof ReturnType<typeof mastra.getAgents>;\n executionUrl?: string;\n version?: string;\n provider?: {\n organization: string;\n url: string;\n };\n}): Promise<AgentCard> {\n const agent = mastra.getAgentById(agentId);\n\n if (!agent) {\n throw new Error(`Agent with ID ${agentId} not found`);\n }\n\n const [instructions, tools] = await Promise.all([\n agent.getInstructions({ runtimeContext }),\n agent.getTools({ runtimeContext }),\n ]);\n\n // Extract agent information to create the AgentCard\n const agentCard: AgentCard = {\n name: agent.id || agentId,\n description: convertInstructionsToString(instructions),\n url: executionUrl,\n provider,\n version,\n capabilities: {\n streaming: true, // All agents support streaming\n pushNotifications: false,\n stateTransitionHistory: false,\n },\n defaultInputModes: ['text'],\n defaultOutputModes: ['text'],\n // Convert agent tools to skills format for A2A protocol\n skills: Object.entries(tools).map(([toolId, tool]) => ({\n id: toolId,\n name: toolId,\n description: tool.description || `Tool: ${toolId}`,\n // Optional fields\n tags: ['tool'],\n })),\n };\n\n return agentCard;\n}\n\nfunction validateMessageSendParams(params: MessageSendParams) {\n try {\n messageSendParamsSchema.parse(params);\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw MastraA2AError.invalidParams((error as z.ZodError).errors[0]!.message);\n }\n\n throw error;\n }\n}\n\nexport async function handleMessageSend({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n logger,\n runtimeContext,\n}: {\n requestId: string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n runtimeContext: RuntimeContext;\n}) {\n validateMessageSendParams(params);\n\n const { message, metadata } = params;\n const { contextId } = message;\n const taskId = message.taskId || crypto.randomUUID();\n\n // Load or create task\n let currentData = await loadOrCreateTask({\n taskId,\n taskStore,\n agentId,\n message,\n contextId,\n metadata,\n });\n\n // Use the new TaskContext definition, passing history\n const context = createTaskContext({\n task: currentData,\n userMessage: message,\n history: currentData.history || [],\n activeCancellations: taskStore.activeCancellations,\n });\n\n try {\n const { text } = await agent.generate([convertToCoreMessage(message)], {\n runId: taskId,\n runtimeContext,\n });\n\n currentData = applyUpdateToTask(currentData, {\n state: 'completed',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [\n {\n kind: 'text',\n text: text,\n },\n ],\n kind: 'message',\n },\n });\n\n await taskStore.save({ agentId, data: currentData });\n context.task = currentData;\n } catch (handlerError) {\n // If handler throws, apply 'failed' status, save, and rethrow\n const failureStatusUpdate: Omit<TaskStatus, 'timestamp'> = {\n state: 'failed',\n message: {\n messageId: crypto.randomUUID(),\n role: 'agent',\n parts: [\n {\n kind: 'text',\n text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`,\n },\n ],\n kind: 'message',\n },\n };\n currentData = applyUpdateToTask(currentData, failureStatusUpdate);\n\n try {\n await taskStore.save({ agentId, data: currentData });\n } catch (saveError) {\n // @ts-expect-error saveError is an unknown error\n logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);\n }\n\n return normalizeError(handlerError, requestId, currentData.id, logger); // Rethrow original error\n }\n\n // The loop finished, send the final task state\n return createSuccessResponse(requestId, currentData);\n}\n\nexport async function handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId,\n}: {\n requestId: string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n}) {\n const task = await taskStore.load({ agentId, taskId });\n\n if (!task) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n return createSuccessResponse(requestId, task);\n}\n\nexport async function* handleMessageStream({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n logger,\n runtimeContext,\n}: {\n requestId: string;\n params: MessageSendParams;\n taskStore: InMemoryTaskStore;\n agent: Agent;\n agentId: string;\n logger?: IMastraLogger;\n runtimeContext: RuntimeContext;\n}) {\n yield createSuccessResponse(requestId, {\n state: 'working',\n message: {\n messageId: crypto.randomUUID(),\n kind: 'message',\n role: 'agent',\n parts: [{ kind: 'text', text: 'Generating response...' }],\n },\n });\n\n let result;\n try {\n result = await handleMessageSend({\n requestId,\n params,\n taskStore,\n agent,\n agentId,\n runtimeContext,\n logger,\n });\n } catch (err) {\n if (!(err instanceof MastraA2AError)) {\n throw err;\n }\n\n result = createErrorResponse(requestId, err.toJSONRPCError());\n }\n\n yield result;\n}\n\nexport async function handleTaskCancel({\n requestId,\n taskStore,\n agentId,\n taskId,\n logger,\n}: {\n requestId: string;\n taskStore: InMemoryTaskStore;\n agentId: string;\n taskId: string;\n logger?: IMastraLogger;\n}) {\n // Load task and history\n let data = await taskStore.load({\n agentId,\n taskId,\n });\n\n if (!data) {\n throw MastraA2AError.taskNotFound(taskId);\n }\n\n // Check if cancelable (not already in a final state)\n const finalStates: TaskState[] = ['completed', 'failed', 'canceled'];\n\n if (finalStates.includes(data.status.state)) {\n logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);\n return createSuccessResponse(requestId, data);\n }\n\n // Signal cancellation\n taskStore.activeCancellations.add(taskId);\n\n // Apply 'canceled' state update\n const cancelUpdate: Omit<TaskStatus, 'timestamp'> = {\n state: 'canceled',\n message: {\n role: 'agent',\n parts: [{ kind: 'text', text: 'Task cancelled by request.' }],\n kind: 'message',\n messageId: crypto.randomUUID(),\n },\n };\n\n data = applyUpdateToTask(data, cancelUpdate);\n\n // Save the updated state\n await taskStore.save({ agentId, data });\n\n // Remove from active cancellations *after* saving\n taskStore.activeCancellations.delete(taskId);\n\n // Return the updated task object\n return createSuccessResponse(requestId, data);\n}\n\nexport async function getAgentExecutionHandler({\n requestId,\n mastra,\n agentId,\n runtimeContext,\n method,\n params,\n taskStore,\n logger,\n}: Context & {\n requestId: string;\n runtimeContext: RuntimeContext;\n agentId: string;\n method: 'message/send' | 'message/stream' | 'tasks/get' | 'tasks/cancel';\n params: MessageSendParams | TaskQueryParams | TaskIdParams;\n taskStore: InMemoryTaskStore;\n logger?: IMastraLogger;\n}): Promise<any> {\n const agent = mastra.getAgentById(agentId);\n\n let taskId: string | undefined; // For error context\n\n try {\n // Attempt to get task ID early for error context. Cast params to any to access id.\n // Proper validation happens within specific handlers.\n taskId = 'id' in params ? params.id : params.message?.taskId || 'No task ID provided';\n\n // 2. Route based on method\n switch (method) {\n case 'message/send': {\n const result = await handleMessageSend({\n requestId,\n params: params as MessageSendParams,\n taskStore,\n agent,\n agentId,\n runtimeContext,\n });\n return result;\n }\n case 'message/stream':\n const result = await handleMessageStream({\n requestId,\n taskStore,\n params: params as MessageSendParams,\n agent,\n agentId,\n runtimeContext,\n });\n return result;\n\n case 'tasks/get': {\n const result = await handleTaskGet({\n requestId,\n taskStore,\n agentId,\n taskId,\n });\n\n return result;\n }\n case 'tasks/cancel': {\n const result = await handleTaskCancel({\n requestId,\n taskStore,\n agentId,\n taskId,\n });\n\n return result;\n }\n default:\n throw MastraA2AError.methodNotFound(method);\n }\n } catch (error) {\n if (error instanceof MastraA2AError && taskId && !error.taskId) {\n error.taskId = taskId; // Add task ID context if missing\n }\n\n return normalizeError(error, requestId, taskId, logger);\n }\n}\n","import { MastraA2AError } from '@mastra/core/a2a';\n\nimport type { JSONRPCError, JSONRPCResponse, Message, Part } from '@mastra/core/a2a';\nimport type { CoreMessage } from '@mastra/core/llm';\nimport type { IMastraLogger } from '@mastra/core/logger';\n\nexport function normalizeError(\n error: any,\n reqId: number | string | null,\n taskId?: string,\n logger?: IMastraLogger,\n): JSONRPCResponse<null, unknown> {\n let a2aError: MastraA2AError;\n if (error instanceof MastraA2AError) {\n a2aError = error;\n } else if (error instanceof Error) {\n // Generic JS error\n a2aError = MastraA2AError.internalError(error.message, { stack: error.stack });\n } else {\n // Unknown error type\n a2aError = MastraA2AError.internalError('An unknown error occurred.', error);\n }\n\n // Ensure Task ID context is present if possible\n if (taskId && !a2aError.taskId) {\n a2aError.taskId = taskId;\n }\n\n logger?.error(`Error processing request (Task: ${a2aError.taskId ?? 'N/A'}, ReqID: ${reqId ?? 'N/A'}):`, a2aError);\n\n return createErrorResponse(reqId, a2aError.toJSONRPCError());\n}\n\nexport function createErrorResponse(\n id: number | string | null,\n error: JSONRPCError<unknown>,\n): JSONRPCResponse<null, unknown> {\n // For errors, ID should be the same as request ID, or null if that couldn't be determined\n return {\n jsonrpc: '2.0',\n id: id, // Can be null if request ID was invalid/missing\n error: error,\n };\n}\n\nexport function createSuccessResponse<T>(id: number | string | null, result: T): JSONRPCResponse<T> {\n if (!id) {\n // This shouldn't happen for methods that expect a response, but safeguard\n throw MastraA2AError.internalError('Cannot create success response for null ID.');\n }\n\n return {\n jsonrpc: '2.0',\n id: id,\n result: result,\n };\n}\n\nexport function convertToCoreMessage(message: Message): CoreMessage {\n return {\n role: message.role === 'user' ? 'user' : 'assistant',\n content: message.parts.map(msg => convertToCoreMessagePart(msg)),\n };\n}\n\nfunction convertToCoreMessagePart(part: Part) {\n switch (part.kind) {\n case 'text':\n return {\n type: 'text',\n text: part.text,\n } as const;\n case 'file':\n return {\n type: 'file',\n data: 'uri' in part.file ? new URL(part.file.uri) : part.file.bytes,\n mimeType: part.file.mimeType!,\n } as const;\n case 'data':\n throw new Error('Data parts are not supported in core messages');\n }\n}\n","import type {\n Message,\n Task,\n TaskState,\n TaskStatus,\n TaskContext,\n TaskArtifactUpdateEvent,\n Artifact,\n} from '@mastra/core/a2a';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { InMemoryTaskStore } from './store';\n\nfunction isTaskStatusUpdate(update: TaskStatus | TaskArtifactUpdateEvent): update is Omit<TaskStatus, 'timestamp'> {\n return 'state' in update && !('parts' in update);\n}\n\nfunction isArtifactUpdate(update: TaskStatus | TaskArtifactUpdateEvent): update is TaskArtifactUpdateEvent {\n return 'kind' in update && update.kind === 'artifact-update';\n}\n\nexport function applyUpdateToTask(\n current: Task,\n update: Omit<TaskStatus, 'timestamp'> | TaskArtifactUpdateEvent,\n): Task {\n let newTask = structuredClone(current);\n\n if (isTaskStatusUpdate(update)) {\n // Merge status update\n newTask.status = {\n ...newTask.status, // Keep existing properties if not overwritten\n ...update, // Apply updates\n timestamp: new Date().toISOString(),\n };\n } else if (isArtifactUpdate(update)) {\n // Handle artifact update\n if (!newTask.artifacts) {\n newTask.artifacts = [];\n } else {\n // Ensure we're working with a copy of the artifacts array\n newTask.artifacts = [...newTask.artifacts];\n }\n\n const artifact = update.artifact;\n const existingIndex = newTask.artifacts.findIndex(a => a.name === artifact.name);\n const existingArtifact = newTask.artifacts[existingIndex];\n\n if (existingArtifact) {\n if (update.append) {\n // Create a deep copy for modification to avoid mutating original\n const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact)) as Artifact;\n appendedArtifact.parts.push(...artifact.parts);\n if (artifact.metadata) {\n appendedArtifact.metadata = {\n ...(appendedArtifact.metadata || {}),\n ...artifact.metadata,\n };\n }\n if (artifact.description) appendedArtifact.description = artifact.description;\n newTask.artifacts[existingIndex] = appendedArtifact; // Replace with appended version\n } else {\n // Overwrite artifact at index (with a copy of the update)\n newTask.artifacts[existingIndex] = { ...artifact };\n }\n } else {\n newTask.artifacts.push({ ...artifact });\n }\n }\n\n return newTask;\n}\n\nexport async function loadOrCreateTask({\n agentId,\n taskId,\n taskStore,\n message,\n contextId,\n metadata,\n logger,\n}: {\n agentId: string;\n taskId: string;\n taskStore: InMemoryTaskStore;\n message: Message;\n contextId?: string;\n metadata?: Record<string, unknown>;\n logger?: IMastraLogger;\n}): Promise<Task> {\n const data = await taskStore.load({ agentId, taskId });\n\n // Create new task if none exists\n if (!data) {\n const initialTask: Task = {\n id: taskId,\n contextId: contextId || crypto.randomUUID(),\n status: {\n state: 'submitted',\n timestamp: new Date().toISOString(),\n message: undefined,\n },\n artifacts: [],\n history: [message],\n metadata: metadata,\n kind: 'task',\n };\n\n logger?.info(`[Task ${taskId}] Created new task.`);\n await taskStore.save({ agentId, data: initialTask });\n\n return initialTask;\n }\n\n // Handle existing task\n logger?.info(`[Task ${taskId}] Loaded existing task.`);\n\n // Add message to history and prepare updated data\n let updatedData = data;\n updatedData.history = [...(data.history || []), message];\n\n // Handle state transitions\n const { status } = data;\n const finalStates: TaskState[] = ['completed', 'failed', 'canceled'];\n\n if (finalStates.includes(status.state)) {\n logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);\n updatedData = applyUpdateToTask(updatedData, {\n state: 'submitted',\n message: undefined,\n });\n } else if (status.state === 'input-required') {\n logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);\n updatedData = applyUpdateToTask(updatedData, { state: 'working' });\n } else if (status.state === 'working') {\n logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);\n }\n\n await taskStore.save({ agentId, data: updatedData });\n\n return updatedData;\n}\n\nexport function createTaskContext({\n task,\n userMessage,\n history,\n activeCancellations,\n}: {\n task: Task;\n userMessage: Message;\n history: Message[];\n activeCancellations: Set<string>;\n}): TaskContext {\n return {\n task: structuredClone(task),\n userMessage,\n history: structuredClone(history),\n isCancelled: () => activeCancellations.has(task.id),\n };\n}\n"]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkRE4RPXT2_cjs = require('./chunk-RE4RPXT2.cjs');
|
|
4
|
+
var chunk7NADHFD2_cjs = require('./chunk-7NADHFD2.cjs');
|
|
5
|
+
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
|
|
6
|
+
var scoreTraces = require('@mastra/core/scores/scoreTraces');
|
|
7
|
+
|
|
8
|
+
// src/server/handlers/observability.ts
|
|
9
|
+
var observability_exports = {};
|
|
10
|
+
chunkO7I5CWRX_cjs.__export(observability_exports, {
|
|
11
|
+
getAITraceHandler: () => getAITraceHandler,
|
|
12
|
+
getAITracesPaginatedHandler: () => getAITracesPaginatedHandler,
|
|
13
|
+
getScoresBySpan: () => getScoresBySpan,
|
|
14
|
+
scoreTracesHandler: () => scoreTracesHandler
|
|
15
|
+
});
|
|
16
|
+
async function getAITraceHandler({ mastra, traceId }) {
|
|
17
|
+
try {
|
|
18
|
+
if (!traceId) {
|
|
19
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Trace ID is required" });
|
|
20
|
+
}
|
|
21
|
+
const storage = mastra.getStorage();
|
|
22
|
+
if (!storage) {
|
|
23
|
+
throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
|
|
24
|
+
}
|
|
25
|
+
const trace = await storage.getAITrace(traceId);
|
|
26
|
+
if (!trace) {
|
|
27
|
+
throw new chunk7NADHFD2_cjs.HTTPException(404, { message: `Trace with ID '${traceId}' not found` });
|
|
28
|
+
}
|
|
29
|
+
return trace;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
chunkRE4RPXT2_cjs.handleError(error, "Error getting AI trace");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function getAITracesPaginatedHandler({ mastra, body }) {
|
|
35
|
+
try {
|
|
36
|
+
const storage = mastra.getStorage();
|
|
37
|
+
if (!storage) {
|
|
38
|
+
throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
|
|
39
|
+
}
|
|
40
|
+
if (!body) {
|
|
41
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Request body is required" });
|
|
42
|
+
}
|
|
43
|
+
const { filters, pagination } = body;
|
|
44
|
+
if (pagination?.page && pagination.page < 0) {
|
|
45
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Page must be a non-negative integer" });
|
|
46
|
+
}
|
|
47
|
+
if (pagination?.perPage && pagination.perPage < 0) {
|
|
48
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Per page must be a non-negative integer" });
|
|
49
|
+
}
|
|
50
|
+
if (pagination?.dateRange) {
|
|
51
|
+
const { start, end } = pagination.dateRange;
|
|
52
|
+
if (start && !(start instanceof Date)) {
|
|
53
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Invalid date format in date range" });
|
|
54
|
+
}
|
|
55
|
+
if (end && !(end instanceof Date)) {
|
|
56
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Invalid date format in date range" });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return storage.getAITracesPaginated({
|
|
60
|
+
pagination,
|
|
61
|
+
filters
|
|
62
|
+
});
|
|
63
|
+
} catch (error) {
|
|
64
|
+
chunkRE4RPXT2_cjs.handleError(error, "Error getting AI traces paginated");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function scoreTracesHandler({ mastra, body }) {
|
|
68
|
+
try {
|
|
69
|
+
if (!body) {
|
|
70
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Request body is required" });
|
|
71
|
+
}
|
|
72
|
+
const { scorerName, targets } = body;
|
|
73
|
+
if (!scorerName) {
|
|
74
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Scorer Name is required" });
|
|
75
|
+
}
|
|
76
|
+
if (!targets || targets.length === 0) {
|
|
77
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "At least one target is required" });
|
|
78
|
+
}
|
|
79
|
+
const storage = mastra.getStorage();
|
|
80
|
+
if (!storage) {
|
|
81
|
+
throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
|
|
82
|
+
}
|
|
83
|
+
const scorer = mastra.getScorerByName(scorerName);
|
|
84
|
+
if (!scorer) {
|
|
85
|
+
throw new chunk7NADHFD2_cjs.HTTPException(404, { message: `Scorer '${scorerName}' not found` });
|
|
86
|
+
}
|
|
87
|
+
const logger = mastra.getLogger();
|
|
88
|
+
scoreTraces.scoreTraces({
|
|
89
|
+
scorerName,
|
|
90
|
+
targets,
|
|
91
|
+
mastra
|
|
92
|
+
}).catch((error) => {
|
|
93
|
+
logger?.error(`Background trace scoring failed: ${error.message}`, error);
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
status: "success",
|
|
97
|
+
message: `Scoring started for ${targets.length} ${targets.length === 1 ? "trace" : "traces"}`,
|
|
98
|
+
traceCount: targets.length
|
|
99
|
+
};
|
|
100
|
+
} catch (error) {
|
|
101
|
+
chunkRE4RPXT2_cjs.handleError(error, "Error processing trace scoring");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function getScoresBySpan({
|
|
105
|
+
mastra,
|
|
106
|
+
traceId,
|
|
107
|
+
spanId,
|
|
108
|
+
pagination
|
|
109
|
+
}) {
|
|
110
|
+
try {
|
|
111
|
+
const storage = mastra.getStorage();
|
|
112
|
+
if (!storage) {
|
|
113
|
+
throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Storage is not available" });
|
|
114
|
+
}
|
|
115
|
+
if (!traceId || !spanId) {
|
|
116
|
+
throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Trace ID and span ID are required" });
|
|
117
|
+
}
|
|
118
|
+
return await storage.getScoresBySpan({ traceId, spanId, pagination });
|
|
119
|
+
} catch (error) {
|
|
120
|
+
return chunkRE4RPXT2_cjs.handleError(error, "Error getting scores by span");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
exports.getAITraceHandler = getAITraceHandler;
|
|
125
|
+
exports.getAITracesPaginatedHandler = getAITracesPaginatedHandler;
|
|
126
|
+
exports.getScoresBySpan = getScoresBySpan;
|
|
127
|
+
exports.observability_exports = observability_exports;
|
|
128
|
+
exports.scoreTracesHandler = scoreTracesHandler;
|
|
129
|
+
//# sourceMappingURL=chunk-2S4IMB6E.cjs.map
|
|
130
|
+
//# sourceMappingURL=chunk-2S4IMB6E.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/observability.ts"],"names":["__export","HTTPException","handleError","scoreTraces"],"mappings":"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","file":"chunk-2S4IMB6E.cjs","sourcesContent":["import type { AITracesPaginatedArg, StoragePagination } from '@mastra/core';\nimport { scoreTraces } from '@mastra/core/scores/scoreTraces';\nimport { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\nimport { handleError } from './error';\n\ninterface ObservabilityContext extends Context {\n traceId?: string;\n body?: AITracesPaginatedArg;\n}\n\ninterface ScoreTracesContext extends Context {\n body?: {\n scorerName: string;\n targets: Array<{\n traceId: string;\n spanId?: string;\n }>;\n };\n}\n\n/**\n * Get a complete AI trace by trace ID\n * Returns all spans in the trace with their parent-child relationships\n */\nexport async function getAITraceHandler({ mastra, traceId }: ObservabilityContext & { traceId: string }) {\n try {\n if (!traceId) {\n throw new HTTPException(400, { message: 'Trace ID is required' });\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n const trace = await storage.getAITrace(traceId);\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n handleError(error, 'Error getting AI trace');\n }\n}\n\n/**\n * Get paginated AI traces with filtering and pagination\n * Returns only root spans (parent spans) for pagination, not child spans\n */\nexport async function getAITracesPaginatedHandler({ mastra, body }: ObservabilityContext) {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n if (!body) {\n throw new HTTPException(400, { message: 'Request body is required' });\n }\n\n const { filters, pagination } = body;\n\n if (pagination?.page && pagination.page < 0) {\n throw new HTTPException(400, { message: 'Page must be a non-negative integer' });\n }\n\n if (pagination?.perPage && pagination.perPage < 0) {\n throw new HTTPException(400, { message: 'Per page must be a non-negative integer' });\n }\n\n if (pagination?.dateRange) {\n const { start, end } = pagination.dateRange;\n\n if (start && !(start instanceof Date)) {\n throw new HTTPException(400, { message: 'Invalid date format in date range' });\n }\n\n if (end && !(end instanceof Date)) {\n throw new HTTPException(400, { message: 'Invalid date format in date range' });\n }\n }\n\n return storage.getAITracesPaginated({\n pagination,\n filters,\n });\n } catch (error) {\n handleError(error, 'Error getting AI traces paginated');\n }\n}\n\n/**\n * Score traces using a specified scorer\n * Fire-and-forget approach - returns immediately while scoring runs in background\n */\nexport async function scoreTracesHandler({ mastra, body }: ScoreTracesContext) {\n try {\n if (!body) {\n throw new HTTPException(400, { message: 'Request body is required' });\n }\n\n const { scorerName, targets } = body;\n\n if (!scorerName) {\n throw new HTTPException(400, { message: 'Scorer Name is required' });\n }\n\n if (!targets || targets.length === 0) {\n throw new HTTPException(400, { message: 'At least one target is required' });\n }\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n const scorer = mastra.getScorerByName(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n const logger = mastra.getLogger();\n scoreTraces({\n scorerName,\n targets,\n mastra,\n }).catch(error => {\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n // Return immediate response\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n handleError(error, 'Error processing trace scoring');\n }\n}\n\nexport async function getScoresBySpan({\n mastra,\n traceId,\n spanId,\n pagination,\n}: Context & { traceId: string; spanId: string; pagination: StoragePagination }) {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n\n if (!traceId || !spanId) {\n throw new HTTPException(400, { message: 'Trace ID and span ID are required' });\n }\n\n return await storage.getScoresBySpan({ traceId, spanId, pagination });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n}\n"]}
|