@mastra/server 1.58.0-alpha.8 → 1.58.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/CHANGELOG.md +273 -0
- package/dist/{a2a-_D2EA4oa.js → a2a-CUkzkdTZ.js} +3 -3
- package/dist/{a2a-_D2EA4oa.js.map → a2a-CUkzkdTZ.js.map} +1 -1
- package/dist/{a2a-B6YkZ2i9.cjs → a2a-DzZHH3OH.cjs} +3 -3
- package/dist/{a2a-B6YkZ2i9.cjs.map → a2a-DzZHH3OH.cjs.map} +1 -1
- package/dist/{agent-versions-DBwhQgbJ.js → agent-versions-CWEnD62A.js} +3 -3
- package/dist/{agent-versions-DBwhQgbJ.js.map → agent-versions-CWEnD62A.js.map} +1 -1
- package/dist/{agent-versions-znzuht90.cjs → agent-versions-xeysPGel.cjs} +3 -3
- package/dist/{agent-versions-znzuht90.cjs.map → agent-versions-xeysPGel.cjs.map} +1 -1
- package/dist/{agents--m8fNv8n.cjs → agents-0Tw3kkD_.cjs} +8 -4
- package/dist/agents-0Tw3kkD_.cjs.map +1 -0
- package/dist/{agents-DpZKzU92.js → agents-uT8ZDE4k.js} +8 -4
- package/dist/agents-uT8ZDE4k.js.map +1 -0
- package/dist/{api-schema-manifest-ShM6oDjl.cjs → api-schema-manifest-BPk3u4B-.cjs} +3 -3
- package/dist/{api-schema-manifest-ShM6oDjl.cjs.map → api-schema-manifest-BPk3u4B-.cjs.map} +1 -1
- package/dist/{api-schema-manifest-BEbcI0wc.js → api-schema-manifest-DSelT9XK.js} +3 -3
- package/dist/{api-schema-manifest-BEbcI0wc.js.map → api-schema-manifest-DSelT9XK.js.map} +1 -1
- package/dist/{background-tasks-DnmhLalp.js → background-tasks-BtWM0sZs.js} +2 -2
- package/dist/{background-tasks-DnmhLalp.js.map → background-tasks-BtWM0sZs.js.map} +1 -1
- package/dist/{background-tasks-CYgzzUnb.cjs → background-tasks-C5G2jJax.cjs} +2 -2
- package/dist/{background-tasks-CYgzzUnb.cjs.map → background-tasks-C5G2jJax.cjs.map} +1 -1
- package/dist/{builder-registry-DE5w7bNk.js → builder-registry-B8KyPAOP.js} +3 -3
- package/dist/{builder-registry-DE5w7bNk.js.map → builder-registry-B8KyPAOP.js.map} +1 -1
- package/dist/{builder-registry-BoaXBdm_.cjs → builder-registry-Dcou-kzd.cjs} +3 -3
- package/dist/{builder-registry-BoaXBdm_.cjs.map → builder-registry-Dcou-kzd.cjs.map} +1 -1
- package/dist/{channels-BqkOxxEk.js → channels-B9yt3a2P.js} +2 -2
- package/dist/{channels-BqkOxxEk.js.map → channels-B9yt3a2P.js.map} +1 -1
- package/dist/{channels-BonQBJT0.cjs → channels-BRoq3VKR.cjs} +2 -2
- package/dist/{channels-BonQBJT0.cjs.map → channels-BRoq3VKR.cjs.map} +1 -1
- package/dist/{default-options-BcPyp2Gx.cjs → default-options-C9HZGjYi.cjs} +6 -3
- package/dist/{default-options-BcPyp2Gx.cjs.map → default-options-C9HZGjYi.cjs.map} +1 -1
- package/dist/{default-options-DGCDKR3I.js → default-options-C9JVjlto.js} +6 -3
- package/dist/{default-options-DGCDKR3I.js.map → default-options-C9JVjlto.js.map} +1 -1
- package/dist/{dist-D-2BtcNU.js → dist-7r8jzEWH.js} +68 -1303
- package/dist/dist-7r8jzEWH.js.map +1 -0
- package/dist/{dist-DhqgxyoU.cjs → dist-DEgLyP8h.cjs} +77 -1315
- package/dist/dist-DEgLyP8h.cjs.map +1 -0
- package/dist/docs/SKILL.md +2 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-server-custom-adapters.md +1 -1
- package/dist/docs/references/docs-server-custom-api-routes.md +375 -0
- package/dist/docs/references/reference-server-create-route.md +27 -1
- package/dist/{dynamic-workflows-B4LI2B52.js → dynamic-workflows-B0TE8mjA.js} +2 -2
- package/dist/{dynamic-workflows-B4LI2B52.js.map → dynamic-workflows-B0TE8mjA.js.map} +1 -1
- package/dist/{dynamic-workflows-BXeywVEf.cjs → dynamic-workflows-C-6vmau5.cjs} +2 -2
- package/dist/{dynamic-workflows-BXeywVEf.cjs.map → dynamic-workflows-C-6vmau5.cjs.map} +1 -1
- package/dist/{editor-builder-DTC6ejp8.js → editor-builder-Byg6wbi6.js} +3 -3
- package/dist/{editor-builder-DTC6ejp8.js.map → editor-builder-Byg6wbi6.js.map} +1 -1
- package/dist/{editor-builder-CIKX5MYh.cjs → editor-builder-C3ZvffGu.cjs} +2 -2
- package/dist/{editor-builder-CIKX5MYh.cjs.map → editor-builder-C3ZvffGu.cjs.map} +1 -1
- package/dist/{editor-builder-D20yfDgw.js → editor-builder-DJUxdzC8.js} +2 -2
- package/dist/{editor-builder-D20yfDgw.js.map → editor-builder-DJUxdzC8.js.map} +1 -1
- package/dist/{editor-builder-B7yBsr6o.cjs → editor-builder-DT7ypWfa.cjs} +3 -3
- package/dist/{editor-builder-B7yBsr6o.cjs.map → editor-builder-DT7ypWfa.cjs.map} +1 -1
- package/dist/{observability-new-endpoints-Dk3oatL8.cjs → observability-new-endpoints-BC-dasRY.cjs} +2 -2
- package/dist/{observability-new-endpoints-Dk3oatL8.cjs.map → observability-new-endpoints-BC-dasRY.cjs.map} +1 -1
- package/dist/{observability-new-endpoints-YK2DjZto.js → observability-new-endpoints-Drx0C8uc.js} +2 -2
- package/dist/{observability-new-endpoints-YK2DjZto.js.map → observability-new-endpoints-Drx0C8uc.js.map} +1 -1
- package/dist/{probe-image-size-DYJVSL0b.cjs → probe-image-size-C2F59z8Z.cjs} +56 -1707
- package/dist/probe-image-size-C2F59z8Z.cjs.map +1 -0
- package/dist/{probe-image-size-BQgIJeY_.js → probe-image-size-mXCWYNrz.js} +22 -1673
- package/dist/probe-image-size-mXCWYNrz.js.map +1 -0
- package/dist/{route-builder-CgLVYL1c.cjs → route-builder-BAAedfru.cjs} +11 -2
- package/dist/route-builder-BAAedfru.cjs.map +1 -0
- package/dist/{route-builder-CIk5k35M.js → route-builder-YQ_gLIvW.js} +11 -2
- package/dist/route-builder-YQ_gLIvW.js.map +1 -0
- package/dist/{routes-UhNfqEIU.cjs → routes-0BEh3stO.cjs} +10 -10
- package/dist/{routes-UhNfqEIU.cjs.map → routes-0BEh3stO.cjs.map} +1 -1
- package/dist/{routes-CQgza68o.js → routes-BsMPy5bu.js} +10 -10
- package/dist/{routes-CQgza68o.js.map → routes-BsMPy5bu.js.map} +1 -1
- package/dist/{schedules-CK3-IE0h.cjs → schedules-DOK225ZZ.cjs} +2 -2
- package/dist/{schedules-CK3-IE0h.cjs.map → schedules-DOK225ZZ.cjs.map} +1 -1
- package/dist/{schedules-qxFoU-Tb.js → schedules-RjPcNOmY.js} +2 -2
- package/dist/{schedules-qxFoU-Tb.js.map → schedules-RjPcNOmY.js.map} +1 -1
- package/dist/{schema-Bv9OdW1f-BY6u3u8K.cjs → schema-Bv9OdW1f-CHHI-NTr.cjs} +2 -76
- package/dist/schema-Bv9OdW1f-CHHI-NTr.cjs.map +1 -0
- package/dist/{schema-Bv9OdW1f-CIOfv-3w.js → schema-Bv9OdW1f-DLSJSqQv.js} +2 -76
- package/dist/schema-Bv9OdW1f-DLSJSqQv.js.map +1 -0
- package/dist/schema-CGeYTFwm.js +2 -0
- package/dist/schema-DkBbires.cjs +1 -0
- package/dist/{scorer-versions-PL0wCOT-.cjs → scorer-versions-CYXtxMTU.cjs} +2 -2
- package/dist/{scorer-versions-PL0wCOT-.cjs.map → scorer-versions-CYXtxMTU.cjs.map} +1 -1
- package/dist/{scorer-versions-DNdVTLOq.js → scorer-versions-CdVjOtQO.js} +2 -2
- package/dist/{scorer-versions-DNdVTLOq.js.map → scorer-versions-CdVjOtQO.js.map} +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.d.ts +545 -505
- 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 +4 -4
- package/dist/server/handlers/agent-builder.d.ts +1069 -764
- package/dist/server/handlers/agent-builder.d.ts.map +1 -1
- package/dist/server/handlers/agent-builder.js +4 -4
- package/dist/server/handlers/agent-controller.cjs +61 -11
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.d.ts +1547 -893
- package/dist/server/handlers/agent-controller.d.ts.map +1 -1
- package/dist/server/handlers/agent-controller.js +61 -11
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/agent-versions.cjs +3 -3
- package/dist/server/handlers/agent-versions.d.ts +8504 -8312
- package/dist/server/handlers/agent-versions.d.ts.map +1 -1
- package/dist/server/handlers/agent-versions.js +3 -3
- package/dist/server/handlers/agents.cjs +6 -6
- package/dist/server/handlers/agents.d.ts +9984 -9826
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +6 -6
- package/dist/server/handlers/auth.cjs +1 -1
- package/dist/server/handlers/auth.d.ts +693 -297
- package/dist/server/handlers/auth.d.ts.map +1 -1
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/background-tasks.cjs +1 -1
- package/dist/server/handlers/background-tasks.d.ts +190 -130
- package/dist/server/handlers/background-tasks.d.ts.map +1 -1
- package/dist/server/handlers/background-tasks.js +1 -1
- package/dist/server/handlers/builder-registry.cjs +1 -1
- package/dist/server/handlers/builder-registry.d.ts +218 -121
- package/dist/server/handlers/builder-registry.d.ts.map +1 -1
- package/dist/server/handlers/builder-registry.js +1 -1
- package/dist/server/handlers/channels.cjs +1 -1
- package/dist/server/handlers/channels.d.ts +157 -77
- package/dist/server/handlers/channels.d.ts.map +1 -1
- package/dist/server/handlers/channels.js +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.d.ts +221 -141
- package/dist/server/handlers/conversations.d.ts.map +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +1 -1
- package/dist/server/handlers/datasets.d.ts +2669 -2234
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/dynamic-workflows.cjs +1 -1
- package/dist/server/handlers/dynamic-workflows.d.ts +506 -426
- package/dist/server/handlers/dynamic-workflows.d.ts.map +1 -1
- package/dist/server/handlers/dynamic-workflows.js +1 -1
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.d.ts +305 -245
- package/dist/server/handlers/editor-builder.d.ts.map +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +1 -1
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/logs.cjs +1 -1
- package/dist/server/handlers/logs.d.ts +245 -185
- package/dist/server/handlers/logs.d.ts.map +1 -1
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +2 -2
- package/dist/server/handlers/mcp-client-versions.d.ts +447 -307
- package/dist/server/handlers/mcp-client-versions.d.ts.map +1 -1
- package/dist/server/handlers/mcp-client-versions.js +2 -2
- package/dist/server/handlers/mcp.cjs +1 -1
- package/dist/server/handlers/mcp.d.ts +357 -156
- package/dist/server/handlers/mcp.d.ts.map +1 -1
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +1 -1
- package/dist/server/handlers/memory.d.ts +1723 -1223
- package/dist/server/handlers/memory.d.ts.map +1 -1
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
- package/dist/server/handlers/observability-new-endpoints.d.ts +3239 -2158
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability-shared.cjs +1 -1
- package/dist/server/handlers/observability-shared.js +1 -1
- package/dist/server/handlers/observability.cjs +2 -2
- package/dist/server/handlers/observability.d.ts +267 -149
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +1 -1
- package/dist/server/handlers/processor-providers.d.ts +74 -34
- package/dist/server/handlers/processor-providers.d.ts.map +1 -1
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +1 -1
- package/dist/server/handlers/processors.d.ts +222 -173
- package/dist/server/handlers/processors.d.ts.map +1 -1
- package/dist/server/handlers/processors.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +2 -2
- package/dist/server/handlers/prompt-block-versions.d.ts +646 -506
- package/dist/server/handlers/prompt-block-versions.d.ts.map +1 -1
- package/dist/server/handlers/prompt-block-versions.js +2 -2
- package/dist/server/handlers/responses.cjs +1 -1
- package/dist/server/handlers/responses.d.ts +352 -362
- package/dist/server/handlers/responses.d.ts.map +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/schedules.cjs +1 -1
- package/dist/server/handlers/schedules.d.ts +1190 -1028
- package/dist/server/handlers/schedules.d.ts.map +1 -1
- package/dist/server/handlers/schedules.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +3 -3
- package/dist/server/handlers/scorer-versions.d.ts +551 -411
- package/dist/server/handlers/scorer-versions.d.ts.map +1 -1
- package/dist/server/handlers/scorer-versions.js +3 -3
- package/dist/server/handlers/scores.cjs +1 -1
- package/dist/server/handlers/scores.d.ts +287 -167
- package/dist/server/handlers/scores.d.ts.map +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
- package/dist/server/handlers/stored-agent-favorites.d.ts +62 -22
- package/dist/server/handlers/stored-agent-favorites.d.ts.map +1 -1
- package/dist/server/handlers/stored-agent-favorites.js +4 -4
- package/dist/server/handlers/stored-agents.cjs +4 -4
- package/dist/server/handlers/stored-agents.d.ts +12056 -16152
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +4 -4
- package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
- package/dist/server/handlers/stored-mcp-clients.d.ts +417 -324
- package/dist/server/handlers/stored-mcp-clients.d.ts.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +2 -2
- package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
- package/dist/server/handlers/stored-prompt-blocks.d.ts +603 -555
- package/dist/server/handlers/stored-prompt-blocks.d.ts.map +1 -1
- package/dist/server/handlers/stored-prompt-blocks.js +2 -2
- package/dist/server/handlers/stored-scorers.cjs +3 -3
- package/dist/server/handlers/stored-scorers.d.ts +556 -472
- package/dist/server/handlers/stored-scorers.d.ts.map +1 -1
- package/dist/server/handlers/stored-scorers.js +3 -3
- package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
- package/dist/server/handlers/stored-skill-favorites.d.ts +62 -22
- package/dist/server/handlers/stored-skill-favorites.d.ts.map +1 -1
- package/dist/server/handlers/stored-skill-favorites.js +3 -3
- package/dist/server/handlers/stored-skills.cjs +3 -3
- package/dist/server/handlers/stored-skills.d.ts +632 -515
- package/dist/server/handlers/stored-skills.d.ts.map +1 -1
- package/dist/server/handlers/stored-skills.js +3 -3
- package/dist/server/handlers/stored-workspaces.cjs +2 -2
- package/dist/server/handlers/stored-workspaces.d.ts +646 -546
- package/dist/server/handlers/stored-workspaces.d.ts.map +1 -1
- package/dist/server/handlers/stored-workspaces.js +2 -2
- package/dist/server/handlers/system.cjs +2 -2
- package/dist/server/handlers/system.d.ts +146 -106
- package/dist/server/handlers/system.d.ts.map +1 -1
- package/dist/server/handlers/system.js +2 -2
- package/dist/server/handlers/tool-providers.cjs +1 -1
- package/dist/server/handlers/tool-providers.d.ts +580 -331
- package/dist/server/handlers/tool-providers.d.ts.map +1 -1
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +5 -5
- package/dist/server/handlers/tools.d.ts +177 -77
- package/dist/server/handlers/tools.d.ts.map +1 -1
- package/dist/server/handlers/tools.js +5 -5
- package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
- package/dist/server/handlers/validate-agent-instructions.js +1 -1
- package/dist/server/handlers/vector.cjs +1 -1
- package/dist/server/handlers/vector.d.ts +282 -126
- package/dist/server/handlers/vector.d.ts.map +1 -1
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/workflows.cjs +3 -3
- package/dist/server/handlers/workflows.d.ts +1703 -1181
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +3 -3
- package/dist/server/handlers/workspace.cjs +1 -1
- package/dist/server/handlers/workspace.d.ts +1936 -1150
- package/dist/server/handlers/workspace.d.ts.map +1 -1
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +2 -2
- package/dist/server/handlers.js +2 -2
- package/dist/server/schemas/agent-versions.d.ts +70 -10
- package/dist/server/schemas/agent-versions.d.ts.map +1 -1
- package/dist/server/schemas/agents.d.ts +23 -3
- package/dist/server/schemas/agents.d.ts.map +1 -1
- package/dist/server/schemas/default-options.d.ts +7 -1
- package/dist/server/schemas/default-options.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +7 -7
- package/dist/server/schemas/index.js +7 -7
- package/dist/server/schemas/stored-agents.d.ts +140 -20
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +28 -7
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +14 -1
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +28 -7
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/openapi-utils.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/a2a.d.ts +544 -504
- package/dist/server/server-adapter/routes/a2a.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/agent-builder.d.ts +1054 -749
- package/dist/server/server-adapter/routes/agent-builder.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/channels.d.ts +153 -73
- package/dist/server/server-adapter/routes/channels.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/conversations.d.ts +218 -138
- package/dist/server/server-adapter/routes/conversations.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +2312 -1877
- package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/editor-builder.d.ts +506 -349
- package/dist/server/server-adapter/routes/editor-builder.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/legacy.d.ts +615 -629
- package/dist/server/server-adapter/routes/legacy.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/logs.d.ts +243 -183
- package/dist/server/server-adapter/routes/logs.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/mcp.d.ts +347 -147
- package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/memory.d.ts +1699 -1199
- package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +2761 -2103
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/processor-providers.d.ts +70 -30
- package/dist/server/server-adapter/routes/processor-providers.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/processors.d.ts +220 -171
- package/dist/server/server-adapter/routes/processors.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/responses.d.ts +350 -360
- package/dist/server/server-adapter/routes/responses.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/route-builder.d.ts +6 -2
- package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/scorers.d.ts +282 -162
- package/dist/server/server-adapter/routes/scorers.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-mcp-clients.d.ts +821 -588
- package/dist/server/server-adapter/routes/stored-mcp-clients.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-prompt-blocks.d.ts +1252 -1064
- package/dist/server/server-adapter/routes/stored-prompt-blocks.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-scorers.d.ts +1046 -822
- package/dist/server/server-adapter/routes/stored-scorers.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-skills.d.ts +683 -526
- package/dist/server/server-adapter/routes/stored-skills.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-workspaces.d.ts +637 -537
- package/dist/server/server-adapter/routes/stored-workspaces.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/system.d.ts +145 -105
- package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/tool-providers.d.ts +566 -317
- package/dist/server/server-adapter/routes/tool-providers.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/tools.d.ts +103 -43
- package/dist/server/server-adapter/routes/tools.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/vectors.d.ts +275 -119
- package/dist/server/server-adapter/routes/vectors.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/workflows.d.ts +1586 -1104
- package/dist/server/server-adapter/routes/workflows.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/workspace.d.ts +1026 -613
- package/dist/server/server-adapter/routes/workspace.d.ts.map +1 -1
- package/dist/{stored-agents-CWC-Nj6N.js → stored-agents-BRBZM-Xl.js} +2 -2
- package/dist/{stored-agents-CWC-Nj6N.js.map → stored-agents-BRBZM-Xl.js.map} +1 -1
- package/dist/{stored-agents-d2kvyKAb.cjs → stored-agents-CPxfYRH9.cjs} +2 -2
- package/dist/{stored-agents-d2kvyKAb.cjs.map → stored-agents-CPxfYRH9.cjs.map} +1 -1
- package/dist/{stored-scorers-yaft2JFH.js → stored-scorers-B__LF0Cy.js} +2 -2
- package/dist/{stored-scorers-yaft2JFH.js.map → stored-scorers-B__LF0Cy.js.map} +1 -1
- package/dist/{stored-scorers-Dm0HwOZe.cjs → stored-scorers-Cml7jPJv.cjs} +2 -2
- package/dist/{stored-scorers-Dm0HwOZe.cjs.map → stored-scorers-Cml7jPJv.cjs.map} +1 -1
- package/dist/sync-BHatXKfg.cjs +1679 -0
- package/dist/sync-BHatXKfg.cjs.map +1 -0
- package/dist/sync-djJ8Lmds.js +1656 -0
- package/dist/sync-djJ8Lmds.js.map +1 -0
- package/dist/{utils-wESuBh27.cjs → utils-Bna_JCkb.cjs} +3 -3
- package/dist/{utils-wESuBh27.cjs.map → utils-Bna_JCkb.cjs.map} +1 -1
- package/dist/{utils-BUK03Frl.js → utils-QXKhjIm6.js} +3 -3
- package/dist/{utils-BUK03Frl.js.map → utils-QXKhjIm6.js.map} +1 -1
- package/package.json +9 -9
- package/dist/agents--m8fNv8n.cjs.map +0 -1
- package/dist/agents-DpZKzU92.js.map +0 -1
- package/dist/dist-D-2BtcNU.js.map +0 -1
- package/dist/dist-DhqgxyoU.cjs.map +0 -1
- package/dist/probe-image-size-BQgIJeY_.js.map +0 -1
- package/dist/probe-image-size-DYJVSL0b.cjs.map +0 -1
- package/dist/route-builder-CIk5k35M.js.map +0 -1
- package/dist/route-builder-CgLVYL1c.cjs.map +0 -1
- package/dist/schema-B8-5YCsA.js +0 -2
- package/dist/schema-BieM1qrc.cjs +0 -1
- package/dist/schema-Bv9OdW1f-BY6u3u8K.cjs.map +0 -1
- package/dist/schema-Bv9OdW1f-CIOfv-3w.js.map +0 -1
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-server
|
|
|
3
3
|
description: Documentation for @mastra/server. Use when working with @mastra/server APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/server"
|
|
6
|
-
version: "1.58.0
|
|
6
|
+
version: "1.58.0"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
@@ -18,6 +18,7 @@ Read the individual reference documents for detailed explanations and code examp
|
|
|
18
18
|
|
|
19
19
|
- [A2A](references/docs-agents-a2a.md) - Expose and call remote Mastra agents over the Agent-to-Agent protocol.
|
|
20
20
|
- [Custom adapters](references/docs-server-custom-adapters.md) - Create a custom server adapter for frameworks other than Hono or Express.
|
|
21
|
+
- [Custom API routes](references/docs-server-custom-api-routes.md) - Expose additional HTTP endpoints from your Mastra server.
|
|
21
22
|
- [Middleware](references/docs-server-middleware.md) - Apply custom middleware functions to intercept requests.
|
|
22
23
|
|
|
23
24
|
### Reference
|
|
@@ -6,7 +6,7 @@ Create a custom adapter when the prebuilt server adapters (Hono, Express, Fastif
|
|
|
6
6
|
|
|
7
7
|
A custom adapter translates between Mastra's route definitions and your framework's routing system. You'll implement methods that register middleware, handle requests, and send responses using your framework's APIs.
|
|
8
8
|
|
|
9
|
-
> **
|
|
9
|
+
> **Note:** Use any of these prebuilt server adapters:
|
|
10
10
|
>
|
|
11
11
|
> - [@mastra/hono](https://mastra.ai/reference/server/hono-adapter)
|
|
12
12
|
> - [@mastra/express](https://mastra.ai/reference/server/express-adapter)
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
> Discover all available pages from the documentation index: https://mastra.ai/llms.txt
|
|
2
|
+
|
|
3
|
+
# Custom API routes
|
|
4
|
+
|
|
5
|
+
By default, Mastra automatically exposes registered agents and workflows via its server. For additional behavior you can define your own HTTP routes.
|
|
6
|
+
|
|
7
|
+
Routes are provided with a helper `registerApiRoute()` from `@mastra/core/server`. Routes can live in the same file as the `Mastra` instance but separating them helps keep configuration concise.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { Mastra } from '@mastra/core'
|
|
11
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
12
|
+
|
|
13
|
+
export const mastra = new Mastra({
|
|
14
|
+
server: {
|
|
15
|
+
apiRoutes: [
|
|
16
|
+
registerApiRoute('/my-custom-route', {
|
|
17
|
+
method: 'GET',
|
|
18
|
+
handler: async c => {
|
|
19
|
+
const mastra = c.get('mastra')
|
|
20
|
+
const agent = await mastra.getAgent('my-agent')
|
|
21
|
+
|
|
22
|
+
return c.json({ message: 'Custom route' })
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
})
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Once registered, a custom route will be accessible from the root of the server. For example:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl http://localhost:4111/my-custom-route
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Each route's handler receives the Hono `Context`. Within the handler you can access the `Mastra` instance to fetch or call agents and workflows.
|
|
37
|
+
|
|
38
|
+
## Schema validation
|
|
39
|
+
|
|
40
|
+
Use [`createRoute()`](https://mastra.ai/reference/server/create-route) in `apiRoutes` to parse and validate path parameters, query parameters, and request bodies with Zod. The schemas also infer the handler parameters and generate OpenAPI metadata.
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { Mastra } from '@mastra/core'
|
|
44
|
+
import { createRoute } from '@mastra/server/server-adapter'
|
|
45
|
+
import { z } from 'zod'
|
|
46
|
+
|
|
47
|
+
const createItemRoute = createRoute({
|
|
48
|
+
method: 'POST',
|
|
49
|
+
path: '/items',
|
|
50
|
+
responseType: 'json',
|
|
51
|
+
bodySchema: z.object({
|
|
52
|
+
name: z.string().min(1),
|
|
53
|
+
}),
|
|
54
|
+
responseSchema: z.object({
|
|
55
|
+
id: z.string(),
|
|
56
|
+
name: z.string(),
|
|
57
|
+
}),
|
|
58
|
+
handler: async ({ name }) => ({
|
|
59
|
+
id: crypto.randomUUID(),
|
|
60
|
+
name,
|
|
61
|
+
}),
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
export const mastra = new Mastra({
|
|
65
|
+
server: {
|
|
66
|
+
apiRoutes: [createItemRoute],
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
By default, Mastra returns a `400` response when validation fails. The `onValidationError` callback can override the status and response body. Validated values and the `Mastra` server context are passed directly to the handler.
|
|
72
|
+
|
|
73
|
+
## Middleware
|
|
74
|
+
|
|
75
|
+
To add route-specific middleware pass a `middleware` array when calling `registerApiRoute()`.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { Mastra } from '@mastra/core'
|
|
79
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
80
|
+
|
|
81
|
+
export const mastra = new Mastra({
|
|
82
|
+
server: {
|
|
83
|
+
apiRoutes: [
|
|
84
|
+
registerApiRoute('/my-custom-route', {
|
|
85
|
+
method: 'GET',
|
|
86
|
+
middleware: [
|
|
87
|
+
async (c, next) => {
|
|
88
|
+
console.log(`${c.req.method} ${c.req.url}`)
|
|
89
|
+
await next()
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
handler: async c => {
|
|
93
|
+
return c.json({ message: 'Custom route with middleware' })
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
})
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## OpenAPI documentation
|
|
102
|
+
|
|
103
|
+
Custom routes can include OpenAPI metadata to appear in the Swagger UI alongside Mastra server routes. You can access the OpenAPI spec at `/api/openapi.json`, where both custom routes and built-in routes are listed. Pass an `openapi` option with standard OpenAPI operation fields.
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import { Mastra } from '@mastra/core'
|
|
107
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
108
|
+
import { z } from 'zod'
|
|
109
|
+
|
|
110
|
+
export const mastra = new Mastra({
|
|
111
|
+
server: {
|
|
112
|
+
apiRoutes: [
|
|
113
|
+
registerApiRoute('/items/:itemId', {
|
|
114
|
+
method: 'GET',
|
|
115
|
+
openapi: {
|
|
116
|
+
summary: 'Get item by ID',
|
|
117
|
+
description: 'Retrieves a single item by its unique identifier',
|
|
118
|
+
tags: ['Items'],
|
|
119
|
+
parameters: [
|
|
120
|
+
{
|
|
121
|
+
name: 'itemId',
|
|
122
|
+
in: 'path',
|
|
123
|
+
required: true,
|
|
124
|
+
description: 'The item ID',
|
|
125
|
+
schema: { type: 'string' },
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
responses: {
|
|
129
|
+
200: {
|
|
130
|
+
description: 'Item found',
|
|
131
|
+
content: {
|
|
132
|
+
'application/json': {
|
|
133
|
+
schema: {
|
|
134
|
+
type: 'object',
|
|
135
|
+
properties: {
|
|
136
|
+
id: { type: 'string' },
|
|
137
|
+
name: { type: 'string' },
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
404: {
|
|
144
|
+
description: 'Item not found',
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
handler: async c => {
|
|
149
|
+
const itemId = c.req.param('itemId')
|
|
150
|
+
return c.json({ id: itemId, name: 'Example Item' })
|
|
151
|
+
},
|
|
152
|
+
}),
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
})
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Using Zod Schemas
|
|
159
|
+
|
|
160
|
+
Zod schemas in the `openapi` configuration are converted to JSON Schema when the OpenAPI document is generated:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import { Mastra } from '@mastra/core'
|
|
164
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
165
|
+
import { z } from 'zod'
|
|
166
|
+
|
|
167
|
+
const ItemSchema = z.object({
|
|
168
|
+
id: z.string(),
|
|
169
|
+
name: z.string(),
|
|
170
|
+
price: z.number(),
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
const CreateItemSchema = z.object({
|
|
174
|
+
name: z.string().min(1),
|
|
175
|
+
price: z.number().positive(),
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
export const mastra = new Mastra({
|
|
179
|
+
server: {
|
|
180
|
+
apiRoutes: [
|
|
181
|
+
registerApiRoute('/items', {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
openapi: {
|
|
184
|
+
summary: 'Create a new item',
|
|
185
|
+
tags: ['Items'],
|
|
186
|
+
requestBody: {
|
|
187
|
+
required: true,
|
|
188
|
+
content: {
|
|
189
|
+
'application/json': {
|
|
190
|
+
schema: CreateItemSchema,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
responses: {
|
|
195
|
+
201: {
|
|
196
|
+
description: 'Item created',
|
|
197
|
+
content: {
|
|
198
|
+
'application/json': {
|
|
199
|
+
schema: ItemSchema,
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
handler: async c => {
|
|
206
|
+
const body = await c.req.json()
|
|
207
|
+
return c.json({ id: 'new-id', ...body }, 201)
|
|
208
|
+
},
|
|
209
|
+
}),
|
|
210
|
+
],
|
|
211
|
+
},
|
|
212
|
+
})
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Viewing in Swagger UI
|
|
216
|
+
|
|
217
|
+
When running in development mode (`mastra dev`) or with `swaggerUI: true` in build options, your custom routes appear in the Swagger UI at `/swagger-ui`.
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
export const mastra = new Mastra({
|
|
221
|
+
server: {
|
|
222
|
+
build: {
|
|
223
|
+
swaggerUI: true, // Enable in production builds
|
|
224
|
+
},
|
|
225
|
+
apiRoutes: [
|
|
226
|
+
// Your routes...
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
})
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Authentication
|
|
233
|
+
|
|
234
|
+
When authentication is configured on your Mastra server, custom API routes require authentication by default. To make a route publicly accessible, set `requiresAuth: false`:
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
import { Mastra } from '@mastra/core'
|
|
238
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
239
|
+
import { MastraJwtAuth } from '@mastra/auth'
|
|
240
|
+
|
|
241
|
+
export const mastra = new Mastra({
|
|
242
|
+
server: {
|
|
243
|
+
auth: new MastraJwtAuth({
|
|
244
|
+
secret: process.env.MASTRA_JWT_SECRET,
|
|
245
|
+
}),
|
|
246
|
+
apiRoutes: [
|
|
247
|
+
// Protected route (default behavior)
|
|
248
|
+
registerApiRoute('/protected-data', {
|
|
249
|
+
method: 'GET',
|
|
250
|
+
handler: async c => {
|
|
251
|
+
// Access authenticated user from request context
|
|
252
|
+
const user = c.get('requestContext').get('user')
|
|
253
|
+
return c.json({ message: 'Authenticated user', user })
|
|
254
|
+
},
|
|
255
|
+
}),
|
|
256
|
+
|
|
257
|
+
// Public route (no authentication required)
|
|
258
|
+
registerApiRoute('/webhooks/github', {
|
|
259
|
+
method: 'POST',
|
|
260
|
+
requiresAuth: false, // Explicitly opt out of authentication
|
|
261
|
+
handler: async c => {
|
|
262
|
+
const payload = await c.req.json()
|
|
263
|
+
// Process webhook without authentication
|
|
264
|
+
return c.json({ received: true })
|
|
265
|
+
},
|
|
266
|
+
}),
|
|
267
|
+
],
|
|
268
|
+
},
|
|
269
|
+
})
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Authentication behavior
|
|
273
|
+
|
|
274
|
+
- **No auth configured**: All routes (built-in and custom) are public
|
|
275
|
+
|
|
276
|
+
- **Auth configured**:
|
|
277
|
+
|
|
278
|
+
- Mastra-provided routes (`/api/agents/*`, `/api/workflows/*`, etc.) require authentication
|
|
279
|
+
- Custom routes require authentication by default
|
|
280
|
+
- Custom routes can opt out with `requiresAuth: false`
|
|
281
|
+
|
|
282
|
+
### Accessing user information
|
|
283
|
+
|
|
284
|
+
When a request is authenticated, the user object is available in the request context:
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
registerApiRoute('/user-profile', {
|
|
288
|
+
method: 'GET',
|
|
289
|
+
handler: async c => {
|
|
290
|
+
const requestContext = c.get('requestContext')
|
|
291
|
+
const user = requestContext.get('user')
|
|
292
|
+
|
|
293
|
+
return c.json({ user })
|
|
294
|
+
},
|
|
295
|
+
})
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
For more information about authentication providers, see the [Auth documentation](https://mastra.ai/docs/server/auth).
|
|
299
|
+
|
|
300
|
+
## Continue generation after client disconnect
|
|
301
|
+
|
|
302
|
+
Built-in streaming helpers such as [`chatRoute()`](https://mastra.ai/reference/ai-sdk/chat-route) forward the incoming request's `AbortSignal` to `agent.stream()`. That's the right default when a browser disconnect should cancel the model call.
|
|
303
|
+
|
|
304
|
+
For custom streaming routes that should stop when the client disconnects, pass `c.req.raw.signal` to long-running work such as `agent.stream()`. Mastra's Node-based adapters also stop reading streamed `Response` bodies from custom routes when the client connection closes. Streamed response body errors that aren't caused by client disconnects still propagate through the adapter's normal error handling. In Hono, disconnect behavior depends on the host runtime forwarding connection closes to `request.signal`.
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
registerApiRoute('/stream', {
|
|
308
|
+
method: 'GET',
|
|
309
|
+
handler: async c => {
|
|
310
|
+
const stream = await agent.stream(prompt, {
|
|
311
|
+
abortSignal: c.req.raw.signal,
|
|
312
|
+
})
|
|
313
|
+
|
|
314
|
+
return stream.toTextStreamResponse()
|
|
315
|
+
},
|
|
316
|
+
})
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
If you want the server to keep generating and persist the final response even after the client disconnects, build a custom route around the underlying `MastraModelOutput`. Start the agent stream without forwarding `c.req.raw.signal`, then call `consumeStream()` in the background so generation continues server-side.
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
import {
|
|
323
|
+
createUIMessageStream,
|
|
324
|
+
createUIMessageStreamResponse,
|
|
325
|
+
InferUIMessageChunk,
|
|
326
|
+
UIMessage,
|
|
327
|
+
} from 'ai'
|
|
328
|
+
import { toAISdkStream } from '@mastra/ai-sdk'
|
|
329
|
+
import { Mastra } from '@mastra/core'
|
|
330
|
+
import { registerApiRoute } from '@mastra/core/server'
|
|
331
|
+
|
|
332
|
+
export const mastra = new Mastra({
|
|
333
|
+
server: {
|
|
334
|
+
apiRoutes: [
|
|
335
|
+
registerApiRoute('/chat/persist/:agentId', {
|
|
336
|
+
method: 'POST',
|
|
337
|
+
handler: async c => {
|
|
338
|
+
const { messages, memory } = await c.req.json()
|
|
339
|
+
const mastra = c.get('mastra')
|
|
340
|
+
const agent = mastra.getAgent(c.req.param('agentId'))
|
|
341
|
+
|
|
342
|
+
const stream = await agent.stream(messages, {
|
|
343
|
+
memory,
|
|
344
|
+
// Do not pass c.req.raw.signal if this route should keep running
|
|
345
|
+
// after the client disconnects.
|
|
346
|
+
})
|
|
347
|
+
|
|
348
|
+
void stream.consumeStream().catch(error => {
|
|
349
|
+
mastra.getLogger()?.error('Background stream consumption failed', { error })
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
const uiStream = createUIMessageStream({
|
|
353
|
+
originalMessages: messages,
|
|
354
|
+
execute: async ({ writer }) => {
|
|
355
|
+
for await (const part of toAISdkStream(stream, { from: 'agent' })) {
|
|
356
|
+
writer.write(part as InferUIMessageChunk<UIMessage>)
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
})
|
|
360
|
+
|
|
361
|
+
return createUIMessageStreamResponse({ stream: uiStream })
|
|
362
|
+
},
|
|
363
|
+
}),
|
|
364
|
+
],
|
|
365
|
+
},
|
|
366
|
+
})
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
> **Note:** Use this pattern only when you intentionally want work to continue after the HTTP client is gone. If you want disconnects to cancel generation, keep using `chatRoute()` or forward the request `AbortSignal` yourself.
|
|
370
|
+
|
|
371
|
+
## Related
|
|
372
|
+
|
|
373
|
+
- [registerApiRoute() Reference](https://mastra.ai/reference/server/register-api-route): Full API reference
|
|
374
|
+
- [Server Middleware](https://mastra.ai/docs/server/middleware): Global middleware configuration
|
|
375
|
+
- [Mastra Server](https://mastra.ai/docs/server/mastra-server): Server configuration options
|
|
@@ -72,10 +72,36 @@ handler: async params => {
|
|
|
72
72
|
|
|
73
73
|
## Return value
|
|
74
74
|
|
|
75
|
-
Returns a `ServerRoute` object that can be registered with an adapter.
|
|
75
|
+
Returns a `ServerRoute` object that can be registered with an adapter or passed to `server.apiRoutes` on the `Mastra` instance.
|
|
76
76
|
|
|
77
77
|
## Examples
|
|
78
78
|
|
|
79
|
+
### Register through `server.apiRoutes`
|
|
80
|
+
|
|
81
|
+
Routes created with `createRoute()` can be passed to `server.apiRoutes`. The adapter registers them with runtime validation, typed handler parameters, and generated OpenAPI metadata. See [Custom API routes](https://mastra.ai/docs/server/custom-api-routes) for details.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { Mastra } from '@mastra/core'
|
|
85
|
+
import { createRoute } from '@mastra/server/server-adapter'
|
|
86
|
+
import { z } from 'zod'
|
|
87
|
+
|
|
88
|
+
const createItemRoute = createRoute({
|
|
89
|
+
method: 'POST',
|
|
90
|
+
path: '/items',
|
|
91
|
+
responseType: 'json',
|
|
92
|
+
bodySchema: z.object({
|
|
93
|
+
name: z.string(),
|
|
94
|
+
}),
|
|
95
|
+
handler: async ({ name }) => ({ id: 'new-id', name }),
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
export const mastra = new Mastra({
|
|
99
|
+
server: {
|
|
100
|
+
apiRoutes: [createItemRoute],
|
|
101
|
+
},
|
|
102
|
+
})
|
|
103
|
+
```
|
|
104
|
+
|
|
79
105
|
### GET route with path params
|
|
80
106
|
|
|
81
107
|
```typescript
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __exportAll } from "./rolldown-runtime-DuvcJU0W.js";
|
|
2
2
|
import { t as HTTPException } from "./http-exception-CyfxZB6W.js";
|
|
3
|
-
import { n as createRoute } from "./route-builder-
|
|
3
|
+
import { n as createRoute } from "./route-builder-YQ_gLIvW.js";
|
|
4
4
|
import { handleError } from "./server/handlers/error.js";
|
|
5
5
|
import { z } from "zod/v4";
|
|
6
6
|
//#region src/server/schemas/dynamic-workflows.ts
|
|
@@ -335,4 +335,4 @@ const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({
|
|
|
335
335
|
//#endregion
|
|
336
336
|
export { dynamic_workflows_exports as a, UPSERT_DYNAMIC_WORKFLOW_ROUTE as i, GET_DYNAMIC_WORKFLOW_ROUTE as n, LIST_DYNAMIC_WORKFLOWS_ROUTE as r, DELETE_DYNAMIC_WORKFLOW_ROUTE as t };
|
|
337
337
|
|
|
338
|
-
//# sourceMappingURL=dynamic-workflows-
|
|
338
|
+
//# sourceMappingURL=dynamic-workflows-B0TE8mjA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-workflows-B4LI2B52.js","names":[],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The Zod schema output is structurally compatible with\n // DynamicWorkflowGraph but TS can't prove every arm:\n // - sleepUntil.date is an ISO string on the wire, Date on the\n // runtime type; the rehydrator parses it via `new Date(...)`.\n // - conditional/loop's `serializedConditions`/`serializedCondition`\n // debug labels are emitted by the fluent builder at rehydration\n // time; clients don't send them.\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration; the cast documents this boundary.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dynamic-workflows-B0TE8mjA.js","names":[],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-CVvi-lCc.cjs");
|
|
2
2
|
const require_http_exception = require("./http-exception-CKDHupKw.cjs");
|
|
3
|
-
const require_route_builder = require("./route-builder-
|
|
3
|
+
const require_route_builder = require("./route-builder-BAAedfru.cjs");
|
|
4
4
|
const require_server_handlers_error = require("./server/handlers/error.cjs");
|
|
5
5
|
let zod_v4 = require("zod/v4");
|
|
6
6
|
//#region src/server/schemas/dynamic-workflows.ts
|
|
@@ -364,4 +364,4 @@ Object.defineProperty(exports, "dynamic_workflows_exports", {
|
|
|
364
364
|
}
|
|
365
365
|
});
|
|
366
366
|
|
|
367
|
-
//# sourceMappingURL=dynamic-workflows-
|
|
367
|
+
//# sourceMappingURL=dynamic-workflows-C-6vmau5.cjs.map
|