@mastra/server 1.73.0-alpha.0 → 1.73.0
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/{a2a-rSyYjbA3.cjs → a2a-B6oAqhYI.cjs} +2 -2
- package/dist/a2a-B6oAqhYI.cjs.map +1 -0
- package/dist/{a2a-Dyd6lbnr.js → a2a-CfJMDEvo.js} +2 -2
- package/dist/a2a-CfJMDEvo.js.map +1 -0
- package/dist/{api-schema-manifest-azbFW2gh.cjs → api-schema-manifest-Blh5-4VH.cjs} +2 -2
- package/dist/{api-schema-manifest-azbFW2gh.cjs.map → api-schema-manifest-Blh5-4VH.cjs.map} +1 -1
- package/dist/{api-schema-manifest-btfn_x2G.js → api-schema-manifest-BmraF-WX.js} +2 -2
- package/dist/{api-schema-manifest-btfn_x2G.js.map → api-schema-manifest-BmraF-WX.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{routes-BqoNkLiT.js → routes-Boe1UThy.js} +2 -2
- package/dist/{routes-BqoNkLiT.js.map → routes-Boe1UThy.js.map} +1 -1
- package/dist/{routes-BaQVELB2.cjs → routes-CcjyQojv.cjs} +2 -2
- package/dist/{routes-BaQVELB2.cjs.map → routes-CcjyQojv.cjs.map} +1 -1
- package/dist/schema-e0VHpMt0-BS9KHnuT.cjs.map +1 -1
- package/dist/schema-e0VHpMt0-CvPvLS06.js.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-controller.cjs +66 -23
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.d.ts +14 -0
- package/dist/server/handlers/agent-controller.d.ts.map +1 -1
- package/dist/server/handlers/agent-controller.js +66 -23
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/agents.cjs +69 -34
- package/dist/server/handlers/agents.cjs.map +1 -1
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +70 -35
- package/dist/server/handlers/agents.js.map +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 +1 -1
- package/dist/server/server-adapter/index.js +1 -1
- package/package.json +9 -9
- package/dist/a2a-Dyd6lbnr.js.map +0 -1
- package/dist/a2a-rSyYjbA3.cjs.map +0 -1
|
@@ -141,7 +141,7 @@ const toolApprovalBodySchema = z.object({
|
|
|
141
141
|
requestContext: bodyRequestContextSchema
|
|
142
142
|
});
|
|
143
143
|
const toolSuspensionBodySchema = z.object({
|
|
144
|
-
toolCallId: z.string(),
|
|
144
|
+
toolCallId: z.string().min(1),
|
|
145
145
|
resumeData: z.unknown(),
|
|
146
146
|
requestContext: bodyRequestContextSchema
|
|
147
147
|
});
|
|
@@ -232,6 +232,15 @@ const createSessionResponseSchema = z.object({
|
|
|
232
232
|
threadId: z.string().optional()
|
|
233
233
|
});
|
|
234
234
|
const ackResponseSchema = z.object({ ok: z.boolean() });
|
|
235
|
+
const toolCommandAckResponseSchema = z.object({
|
|
236
|
+
ok: z.boolean(),
|
|
237
|
+
reason: z.enum([
|
|
238
|
+
"not_pending",
|
|
239
|
+
"stale_tool_call",
|
|
240
|
+
"aborting",
|
|
241
|
+
"no_pending_suspension"
|
|
242
|
+
]).optional()
|
|
243
|
+
});
|
|
235
244
|
/**
|
|
236
245
|
* Status-line relevant slice of the session's observational-memory progress.
|
|
237
246
|
* Mirrors the TUI status line: `msg pending/threshold ↓removal` (the active
|
|
@@ -605,7 +614,7 @@ const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
|
|
|
605
614
|
pathParamSchema: sessionPathParams,
|
|
606
615
|
queryParamSchema: sessionScopeQuerySchema,
|
|
607
616
|
bodySchema: toolApprovalBodySchema,
|
|
608
|
-
responseSchema:
|
|
617
|
+
responseSchema: toolCommandAckResponseSchema,
|
|
609
618
|
summary: "Respond to a controller tool approval",
|
|
610
619
|
description: "Approves or declines a pending tool call surfaced by the session.",
|
|
611
620
|
tags: ["AgentController"],
|
|
@@ -614,21 +623,36 @@ const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
|
|
|
614
623
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, toolCallId, approved, requestContext }) => {
|
|
615
624
|
try {
|
|
616
625
|
const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
|
|
617
|
-
if ((toolCallId ? session.approval.isArmed({ toolCallId }) : session.approval.isArmed()) || !toolCallId)
|
|
618
|
-
|
|
619
|
-
decision: approved ? "approve" : "decline",
|
|
620
|
-
requestContext
|
|
621
|
-
});
|
|
622
|
-
else ackBackgroundSessionWork({
|
|
623
|
-
work: session.respondToPersistedToolApproval({
|
|
626
|
+
if ((toolCallId ? session.approval.isArmed({ toolCallId }) : session.approval.isArmed()) || !toolCallId) {
|
|
627
|
+
const result = session.respondToToolApproval({
|
|
624
628
|
toolCallId,
|
|
625
|
-
approved,
|
|
629
|
+
decision: approved ? "approve" : "decline",
|
|
626
630
|
requestContext
|
|
627
|
-
})
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
631
|
+
});
|
|
632
|
+
if (!result.accepted) return {
|
|
633
|
+
ok: false,
|
|
634
|
+
reason: result.reason
|
|
635
|
+
};
|
|
636
|
+
} else {
|
|
637
|
+
if (!await session.hasPersistedToolApproval(toolCallId)) return {
|
|
638
|
+
ok: false,
|
|
639
|
+
reason: session.approval.isArmed() ? "stale_tool_call" : "not_pending"
|
|
640
|
+
};
|
|
641
|
+
if (!session.claimToolResponse(toolCallId)) return {
|
|
642
|
+
ok: false,
|
|
643
|
+
reason: "not_pending"
|
|
644
|
+
};
|
|
645
|
+
ackBackgroundSessionWork({
|
|
646
|
+
work: session.respondToPersistedToolApproval({
|
|
647
|
+
toolCallId,
|
|
648
|
+
approved,
|
|
649
|
+
requestContext
|
|
650
|
+
}).finally(() => session.releaseToolResponse(toolCallId)),
|
|
651
|
+
session,
|
|
652
|
+
mastra,
|
|
653
|
+
operation: "respondToPersistedToolApproval"
|
|
654
|
+
});
|
|
655
|
+
}
|
|
632
656
|
return { ok: true };
|
|
633
657
|
} catch (error) {
|
|
634
658
|
return handleError(error, "error responding to controller tool approval");
|
|
@@ -642,7 +666,7 @@ const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
|
|
|
642
666
|
pathParamSchema: sessionPathParams,
|
|
643
667
|
queryParamSchema: sessionScopeQuerySchema,
|
|
644
668
|
bodySchema: toolSuspensionBodySchema,
|
|
645
|
-
responseSchema:
|
|
669
|
+
responseSchema: toolCommandAckResponseSchema,
|
|
646
670
|
summary: "Respond to a suspended controller tool",
|
|
647
671
|
description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
|
|
648
672
|
tags: ["AgentController"],
|
|
@@ -651,12 +675,18 @@ const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
|
|
|
651
675
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, toolCallId, resumeData, requestContext }) => {
|
|
652
676
|
try {
|
|
653
677
|
const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
|
|
678
|
+
const claim = session.claimToolSuspension(toolCallId);
|
|
679
|
+
if (!claim.accepted) return {
|
|
680
|
+
ok: false,
|
|
681
|
+
reason: claim.reason
|
|
682
|
+
};
|
|
683
|
+
const claimedToolCallId = claim.toolCallId;
|
|
654
684
|
ackBackgroundSessionWork({
|
|
655
685
|
work: session.respondToToolSuspension({
|
|
656
686
|
toolCallId,
|
|
657
687
|
resumeData,
|
|
658
688
|
requestContext
|
|
659
|
-
}),
|
|
689
|
+
}).finally(() => session.releaseToolResponse(claimedToolCallId)),
|
|
660
690
|
session,
|
|
661
691
|
mastra,
|
|
662
692
|
operation: "respondToToolSuspension"
|
|
@@ -762,7 +792,10 @@ const SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
|
|
|
762
792
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, requestContext }) => {
|
|
763
793
|
try {
|
|
764
794
|
const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
|
|
765
|
-
if (session.thread.getId() !== threadId) await session.thread.switch({
|
|
795
|
+
if (session.thread.getId() !== threadId) await session.thread.switch({
|
|
796
|
+
threadId,
|
|
797
|
+
requestContext
|
|
798
|
+
});
|
|
766
799
|
return { ok: true };
|
|
767
800
|
} catch (error) {
|
|
768
801
|
return handleError(error, "error switching controller thread");
|
|
@@ -972,7 +1005,7 @@ const SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({
|
|
|
972
1005
|
coalesceKey,
|
|
973
1006
|
attributes,
|
|
974
1007
|
metadata
|
|
975
|
-
});
|
|
1008
|
+
}, { requestContext });
|
|
976
1009
|
return {
|
|
977
1010
|
accepted: result.accepted !== void 0,
|
|
978
1011
|
notificationId: result.record?.id,
|
|
@@ -999,7 +1032,10 @@ const CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
|
|
|
999
1032
|
requiresPermission: "agent-controller:execute",
|
|
1000
1033
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, title, requestContext }) => {
|
|
1001
1034
|
try {
|
|
1002
|
-
const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.create({
|
|
1035
|
+
const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.create({
|
|
1036
|
+
title,
|
|
1037
|
+
requestContext
|
|
1038
|
+
});
|
|
1003
1039
|
return {
|
|
1004
1040
|
id: thread.id,
|
|
1005
1041
|
title: thread.title,
|
|
@@ -1026,7 +1062,10 @@ const DELETE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
|
|
|
1026
1062
|
requiresPermission: "agent-controller:execute",
|
|
1027
1063
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, requestContext }) => {
|
|
1028
1064
|
try {
|
|
1029
|
-
await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.delete({
|
|
1065
|
+
await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.delete({
|
|
1066
|
+
threadId,
|
|
1067
|
+
requestContext
|
|
1068
|
+
});
|
|
1030
1069
|
return { ok: true };
|
|
1031
1070
|
} catch (error) {
|
|
1032
1071
|
return handleError(error, "error deleting controller thread");
|
|
@@ -1049,7 +1088,10 @@ const RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
|
|
|
1049
1088
|
handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, title, requestContext }) => {
|
|
1050
1089
|
try {
|
|
1051
1090
|
const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
|
|
1052
|
-
if (session.thread.getId() !== threadId) await session.thread.switch({
|
|
1091
|
+
if (session.thread.getId() !== threadId) await session.thread.switch({
|
|
1092
|
+
threadId,
|
|
1093
|
+
requestContext
|
|
1094
|
+
});
|
|
1053
1095
|
await session.thread.rename({ title });
|
|
1054
1096
|
return { ok: true };
|
|
1055
1097
|
} catch (error) {
|
|
@@ -1074,7 +1116,8 @@ const CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
|
|
|
1074
1116
|
try {
|
|
1075
1117
|
const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.clone({
|
|
1076
1118
|
sourceThreadId,
|
|
1077
|
-
title
|
|
1119
|
+
title,
|
|
1120
|
+
requestContext
|
|
1078
1121
|
});
|
|
1079
1122
|
return {
|
|
1080
1123
|
id: thread.id,
|