@mastra/server 1.79.0-alpha.9 → 1.79.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-CHBSYHxu.js → a2a-BqLB3McP.js} +17 -16
- package/dist/a2a-BqLB3McP.js.map +1 -0
- package/dist/{a2a-B465DD1u.cjs → a2a-Uood_0DN.cjs} +19 -18
- package/dist/a2a-Uood_0DN.cjs.map +1 -0
- package/dist/agent-builder-CuBD1tpv.cjs +728 -0
- package/dist/agent-builder-CuBD1tpv.cjs.map +1 -0
- package/dist/agent-builder-VhM8ADW-.js +627 -0
- package/dist/agent-builder-VhM8ADW-.js.map +1 -0
- package/dist/{agents-X1E7fW3p.js → agents-BHLTMBff.js} +2 -2
- package/dist/{agents-X1E7fW3p.js.map → agents-BHLTMBff.js.map} +1 -1
- package/dist/agents-BOWEUKyV.cjs +3127 -0
- package/dist/agents-BOWEUKyV.cjs.map +1 -0
- package/dist/agents-DRQ3ScbX.js +2828 -0
- package/dist/agents-DRQ3ScbX.js.map +1 -0
- package/dist/{agents-DoNMSCMt.cjs → agents-T-OIM9IK.cjs} +2 -2
- package/dist/{agents-DoNMSCMt.cjs.map → agents-T-OIM9IK.cjs.map} +1 -1
- package/dist/{api-schema-manifest-CWRIJP-B.js → api-schema-manifest-CI90M4sX.js} +3 -3
- package/dist/{api-schema-manifest-CWRIJP-B.js.map → api-schema-manifest-CI90M4sX.js.map} +1 -1
- package/dist/{api-schema-manifest-DUseI2VG.cjs → api-schema-manifest-DIlNfbyw.cjs} +4 -4
- package/dist/{api-schema-manifest-DUseI2VG.cjs.map → api-schema-manifest-DIlNfbyw.cjs.map} +1 -1
- package/dist/{background-tasks-CabImVak.cjs → background-tasks-B3VAKTJh.cjs} +3 -3
- package/dist/{background-tasks-CabImVak.cjs.map → background-tasks-B3VAKTJh.cjs.map} +1 -1
- package/dist/{background-tasks-oBaLtnCn.js → background-tasks-Du2zYOPl.js} +2 -2
- package/dist/{background-tasks-oBaLtnCn.js.map → background-tasks-Du2zYOPl.js.map} +1 -1
- package/dist/{builder-registry-DOkLe8ES.js → builder-registry-DLdu9bWH.js} +3 -3
- package/dist/{builder-registry-DOkLe8ES.js.map → builder-registry-DLdu9bWH.js.map} +1 -1
- package/dist/{builder-registry-D0frV8lQ.cjs → builder-registry-DaFAaMTf.cjs} +3 -3
- package/dist/{builder-registry-D0frV8lQ.cjs.map → builder-registry-DaFAaMTf.cjs.map} +1 -1
- package/dist/{channels-CBIopVWd.cjs → channels-BnVRmnzK.cjs} +6 -3
- package/dist/{channels-CBIopVWd.cjs.map → channels-BnVRmnzK.cjs.map} +1 -1
- package/dist/{channels-BOxgHvzI.js → channels-Db-4pXVZ.js} +6 -3
- package/dist/{channels-BOxgHvzI.js.map → channels-Db-4pXVZ.js.map} +1 -1
- package/dist/conversations-8BWryNlF.js +165 -0
- package/dist/conversations-8BWryNlF.js.map +1 -0
- package/dist/conversations-C5MkQBB8.cjs +194 -0
- package/dist/conversations-C5MkQBB8.cjs.map +1 -0
- package/dist/{conversations-Bj5TLNqF.cjs → conversations-DasqEDCF.cjs} +3 -3
- package/dist/{conversations-Bj5TLNqF.cjs.map → conversations-DasqEDCF.cjs.map} +1 -1
- package/dist/{dist-9c3PXXpk.cjs → dist-B-bEVWlJ.cjs} +4733 -1251
- package/dist/dist-B-bEVWlJ.cjs.map +1 -0
- package/dist/dist-B3kC8Yd0.cjs +3 -0
- package/dist/{dist-CQ3FSKT-.cjs → dist-B9ery9Zw.cjs} +38 -35
- package/dist/{dist-CQ3FSKT-.cjs.map → dist-B9ery9Zw.cjs.map} +1 -1
- package/dist/{dist-BxMmGD3n.js → dist-BBOnrL_A.js} +10 -12
- package/dist/{dist-BxMmGD3n.js.map → dist-BBOnrL_A.js.map} +1 -1
- package/dist/{dist-DOWsEmo6.js → dist-BIrQLUV9.js} +20 -20
- package/dist/{dist-DOWsEmo6.js.map → dist-BIrQLUV9.js.map} +1 -1
- package/dist/dist-BM9J-PTK.js +1 -0
- package/dist/{dist-DC1Pewf5.cjs → dist-Bo3GdQwf.cjs} +21 -21
- package/dist/{dist-DC1Pewf5.cjs.map → dist-Bo3GdQwf.cjs.map} +1 -1
- package/dist/{dist-BwYL7Ykb.js → dist-CREG82cy.js} +37 -34
- package/dist/{dist-BwYL7Ykb.js.map → dist-CREG82cy.js.map} +1 -1
- package/dist/{dist-rDRetJVY.cjs → dist-CeTLA-e5.cjs} +2 -3
- package/dist/{dist-rDRetJVY.cjs.map → dist-CeTLA-e5.cjs.map} +1 -1
- package/dist/{dist-CBRJax5e.js → dist-DLld1qjf.js} +25 -31
- package/dist/{dist-CBRJax5e.js.map → dist-DLld1qjf.js.map} +1 -1
- package/dist/{dist-B_bet8uz.js → dist-DjkPkAzV.js} +2 -3
- package/dist/{dist-B_bet8uz.js.map → dist-DjkPkAzV.js.map} +1 -1
- package/dist/{dist-UKEksCGq.cjs → dist-DsrJXwic.cjs} +11 -13
- package/dist/{dist-UKEksCGq.cjs.map → dist-DsrJXwic.cjs.map} +1 -1
- package/dist/{dist-DGCnbhNe.js → dist-k77XQGUn.js} +4493 -1043
- package/dist/dist-k77XQGUn.js.map +1 -0
- package/dist/{dist-3FPW9nVj.cjs → dist-lT2rqyY9.cjs} +26 -32
- package/dist/{dist-3FPW9nVj.cjs.map → dist-lT2rqyY9.cjs.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-server-routes.md +159 -0
- package/dist/{dynamic-workflows-Rr_6ac1y.js → dynamic-workflows-CTUO0SFu.js} +3 -3
- package/dist/{dynamic-workflows-Rr_6ac1y.js.map → dynamic-workflows-CTUO0SFu.js.map} +1 -1
- package/dist/{dynamic-workflows-DXlkr-jK.cjs → dynamic-workflows-HwPX3mcf.cjs} +3 -3
- package/dist/{dynamic-workflows-DXlkr-jK.cjs.map → dynamic-workflows-HwPX3mcf.cjs.map} +1 -1
- package/dist/{editor-builder-BclcHxN6.cjs → editor-builder-BDtiWw0f.cjs} +2 -2
- package/dist/{editor-builder-BclcHxN6.cjs.map → editor-builder-BDtiWw0f.cjs.map} +1 -1
- package/dist/{editor-builder-D16kc1P6.js → editor-builder-ClFlGXoX.js} +4 -4
- package/dist/{editor-builder-D16kc1P6.js.map → editor-builder-ClFlGXoX.js.map} +1 -1
- package/dist/{editor-builder-s9WqPJgA.js → editor-builder-DnLCfqnY.js} +2 -2
- package/dist/{editor-builder-s9WqPJgA.js.map → editor-builder-DnLCfqnY.js.map} +1 -1
- package/dist/{editor-builder-DXHiPX1A.cjs → editor-builder-DtpP1FtW.cjs} +5 -5
- package/dist/{editor-builder-DXHiPX1A.cjs.map → editor-builder-DtpP1FtW.cjs.map} +1 -1
- package/dist/{helpers-ElhPeCSK.cjs → helpers-CAcEhq38.cjs} +21 -17
- package/dist/{helpers-ElhPeCSK.cjs.map → helpers-CAcEhq38.cjs.map} +1 -1
- package/dist/{helpers-DLhX1fqc.js → helpers-vrqddDd5.js} +21 -17
- package/dist/{helpers-DLhX1fqc.js.map → helpers-vrqddDd5.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/logs-CiSw7r0s.cjs +119 -0
- package/dist/logs-CiSw7r0s.cjs.map +1 -0
- package/dist/logs-CxfPk-iL.js +96 -0
- package/dist/logs-CxfPk-iL.js.map +1 -0
- package/dist/mcp-CWDfSu7w.js +474 -0
- package/dist/mcp-CWDfSu7w.js.map +1 -0
- package/dist/mcp-CWGJRqkC.cjs +563 -0
- package/dist/mcp-CWGJRqkC.cjs.map +1 -0
- package/dist/{mcp-DzpwLXEY.js → mcp-Drqt0GqD.js} +79 -4
- package/dist/mcp-Drqt0GqD.js.map +1 -0
- package/dist/{mcp-ShaKO7gA.cjs → mcp-ziWVk7Ol.cjs} +126 -3
- package/dist/mcp-ziWVk7Ol.cjs.map +1 -0
- package/dist/memory-BHtTSzvJ.js +1739 -0
- package/dist/memory-BHtTSzvJ.js.map +1 -0
- package/dist/memory-CwwkVDh1.cjs +1906 -0
- package/dist/memory-CwwkVDh1.cjs.map +1 -0
- package/dist/observability-BBMCMeT-.cjs +502 -0
- package/dist/observability-BBMCMeT-.cjs.map +1 -0
- package/dist/observability-ZRgRcvoX.js +431 -0
- package/dist/observability-ZRgRcvoX.js.map +1 -0
- package/dist/{observability-new-endpoints-BU8JYPfh.js → observability-new-endpoints-fjoZzEtk.js} +10 -9
- package/dist/{observability-new-endpoints-BU8JYPfh.js.map → observability-new-endpoints-fjoZzEtk.js.map} +1 -1
- package/dist/{observability-new-endpoints-AMp9bnMV.cjs → observability-new-endpoints-tG3-odLa.cjs} +11 -10
- package/dist/observability-new-endpoints-tG3-odLa.cjs.map +1 -0
- package/dist/plans-CiPgWBhO.cjs +68 -0
- package/dist/plans-CiPgWBhO.cjs.map +1 -0
- package/dist/plans-DCepEY7n.js +57 -0
- package/dist/plans-DCepEY7n.js.map +1 -0
- package/dist/{probe-image-size-DBGjhUtJ.cjs → probe-image-size-Alv3gwKl.cjs} +194 -184
- package/dist/probe-image-size-Alv3gwKl.cjs.map +1 -0
- package/dist/{probe-image-size-Dmoxv93t.js → probe-image-size-BdfbUHxx.js} +158 -148
- package/dist/probe-image-size-BdfbUHxx.js.map +1 -0
- package/dist/responses-4FwMNxoJ.js +628 -0
- package/dist/responses-4FwMNxoJ.js.map +1 -0
- package/dist/responses-CCRijwDF.cjs +651 -0
- package/dist/responses-CCRijwDF.cjs.map +1 -0
- package/dist/{responses-CKNdSRkS.cjs → responses-CfcIc53b.cjs} +2 -2
- package/dist/{responses-CKNdSRkS.cjs.map → responses-CfcIc53b.cjs.map} +1 -1
- package/dist/{rolldown-runtime-Bd6kNlEP.cjs → rolldown-runtime-BwC_XMyb.cjs} +2 -2
- package/dist/{rolldown-runtime-maW3aOIk.js → rolldown-runtime-D3Hj5m0v.js} +2 -2
- package/dist/{route-builder-BNZs643f.cjs → route-builder-B2Qhhd7C.cjs} +52 -66
- package/dist/route-builder-B2Qhhd7C.cjs.map +1 -0
- package/dist/{route-builder-BfQYtclb.js → route-builder-CjkWxv4E.js} +51 -65
- package/dist/route-builder-CjkWxv4E.js.map +1 -0
- package/dist/{routes-rwufkyUe.js → routes-BC20mdNN.js} +30 -26
- package/dist/routes-BC20mdNN.js.map +1 -0
- package/dist/{routes-Dl6_kWm7.js → routes-CKfXiwRc.js} +5 -3
- package/dist/routes-CKfXiwRc.js.map +1 -0
- package/dist/{routes-DPojsNf1.cjs → routes-DGLJyqjD.cjs} +203 -199
- package/dist/routes-DGLJyqjD.cjs.map +1 -0
- package/dist/{routes-BULZI-PU.cjs → routes-jXksmX9G.cjs} +5 -3
- package/dist/routes-jXksmX9G.cjs.map +1 -0
- package/dist/{schedules-Bj-giFbc.cjs → schedules-GokZKBYg.cjs} +6 -4
- package/dist/schedules-GokZKBYg.cjs.map +1 -0
- package/dist/{schedules-BQYgaz66.js → schedules-_3zPKyqm.js} +5 -3
- package/dist/schedules-_3zPKyqm.js.map +1 -0
- package/dist/{schema-e0VHpMt0-C0452jOk.cjs → schema-CzbEIyhE-20gGIWkz.cjs} +83 -88
- package/dist/schema-CzbEIyhE-20gGIWkz.cjs.map +1 -0
- package/dist/{schema-e0VHpMt0-CVP5Hnxy.js → schema-CzbEIyhE-BsMcj9Ws.js} +82 -87
- package/dist/schema-CzbEIyhE-BsMcj9Ws.js.map +1 -0
- package/dist/scores-D9UgETt_.js +288 -0
- package/dist/scores-D9UgETt_.js.map +1 -0
- package/dist/scores-DRdtS7NT.cjs +329 -0
- package/dist/scores-DRdtS7NT.cjs.map +1 -0
- package/dist/server/a2a/store.cjs +1 -1
- package/dist/server/auth/index.cjs +2 -2
- package/dist/server/auth/index.js +1 -1
- package/dist/server/browser-stream/index.cjs +9 -11
- package/dist/server/browser-stream/index.cjs.map +1 -1
- package/dist/server/browser-stream/index.js +8 -10
- package/dist/server/browser-stream/index.js.map +1 -1
- package/dist/server/handlers/a2a.cjs +2 -2
- package/dist/server/handlers/a2a.js +1 -2
- package/dist/server/handlers/agent-builder.cjs +18 -648
- package/dist/server/handlers/agent-builder.js +1 -627
- package/dist/server/handlers/agent-controller.cjs +5 -5
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.js +11 -9
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/agent-versions.cjs +15 -8
- package/dist/server/handlers/agent-versions.cjs.map +1 -1
- package/dist/server/handlers/agent-versions.js +14 -7
- package/dist/server/handlers/agent-versions.js.map +1 -1
- package/dist/server/handlers/agents.cjs +51 -2860
- package/dist/server/handlers/agents.js +1 -2806
- package/dist/server/handlers/auth.cjs +14 -12
- package/dist/server/handlers/auth.cjs.map +1 -1
- package/dist/server/handlers/auth.js +20 -16
- package/dist/server/handlers/auth.js.map +1 -1
- package/dist/server/handlers/author-enrichment.cjs +1 -1
- package/dist/server/handlers/authorship.cjs +1 -1
- package/dist/server/handlers/authorship.cjs.map +1 -1
- package/dist/server/handlers/background-tasks.cjs +2 -2
- package/dist/server/handlers/background-tasks.js +1 -2
- package/dist/server/handlers/builder-registry.cjs +2 -2
- package/dist/server/handlers/builder-registry.js +1 -2
- package/dist/server/handlers/channels.cjs +2 -2
- package/dist/server/handlers/channels.js +1 -2
- package/dist/server/handlers/conversations.cjs +6 -171
- package/dist/server/handlers/conversations.js +1 -162
- package/dist/server/handlers/datasets.cjs +2 -2
- package/dist/server/handlers/datasets.cjs.map +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/dynamic-workflows.cjs +2 -2
- package/dist/server/handlers/dynamic-workflows.js +1 -2
- package/dist/server/handlers/editor-builder.cjs +2 -2
- package/dist/server/handlers/editor-builder.js +1 -2
- package/dist/server/handlers/error.cjs +18 -13
- package/dist/server/handlers/error.cjs.map +1 -1
- package/dist/server/handlers/error.js +17 -12
- package/dist/server/handlers/error.js.map +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +2 -2
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/gateway-memory-client.cjs +1 -1
- package/dist/server/handlers/logs.cjs +5 -104
- package/dist/server/handlers/logs.js +1 -96
- package/dist/server/handlers/mcp-client-versions.cjs +15 -8
- package/dist/server/handlers/mcp-client-versions.cjs.map +1 -1
- package/dist/server/handlers/mcp-client-versions.js +14 -7
- package/dist/server/handlers/mcp-client-versions.js.map +1 -1
- package/dist/server/handlers/mcp.cjs +16 -289
- package/dist/server/handlers/mcp.d.ts +219 -0
- package/dist/server/handlers/mcp.d.ts.map +1 -1
- package/dist/server/handlers/mcp.js +1 -274
- package/dist/server/handlers/memory.cjs +29 -1763
- package/dist/server/handlers/memory.js +1 -1731
- package/dist/server/handlers/observability-list-query-schemas.cjs +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +2 -2
- package/dist/server/handlers/observability-new-endpoints.js +1 -2
- package/dist/server/handlers/observability-shared.cjs +2 -2
- package/dist/server/handlers/observability-shared.js +1 -1
- package/dist/server/handlers/observability-storage-schemas.cjs +1 -1
- package/dist/server/handlers/observability.cjs +14 -445
- package/dist/server/handlers/observability.js +3 -429
- package/dist/server/handlers/plans.cjs +3 -63
- package/dist/server/handlers/plans.js +1 -57
- package/dist/server/handlers/processor-providers.cjs +2 -2
- package/dist/server/handlers/processor-providers.cjs.map +1 -1
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +13 -15
- package/dist/server/handlers/processors.cjs.map +1 -1
- package/dist/server/handlers/processors.js +12 -14
- package/dist/server/handlers/processors.js.map +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +15 -8
- package/dist/server/handlers/prompt-block-versions.cjs.map +1 -1
- package/dist/server/handlers/prompt-block-versions.js +14 -7
- package/dist/server/handlers/prompt-block-versions.js.map +1 -1
- package/dist/server/handlers/responses.adapter.cjs +1 -1
- package/dist/server/handlers/responses.adapter.cjs.map +1 -1
- package/dist/server/handlers/responses.cjs +5 -632
- package/dist/server/handlers/responses.js +1 -624
- package/dist/server/handlers/responses.storage.cjs +2 -2
- package/dist/server/handlers/schedules-workflows-shim.cjs +1 -1
- package/dist/server/handlers/schedules.cjs +2 -2
- package/dist/server/handlers/schedules.d.ts +16 -0
- package/dist/server/handlers/schedules.d.ts.map +1 -1
- package/dist/server/handlers/schedules.js +1 -2
- package/dist/server/handlers/scorer-versions.cjs +15 -8
- package/dist/server/handlers/scorer-versions.cjs.map +1 -1
- package/dist/server/handlers/scorer-versions.js +14 -7
- package/dist/server/handlers/scorer-versions.js.map +1 -1
- package/dist/server/handlers/scores.cjs +8 -299
- package/dist/server/handlers/scores.js +1 -288
- package/dist/server/handlers/skills-sh-shared.cjs +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
- package/dist/server/handlers/stored-agent-favorites.js +3 -3
- package/dist/server/handlers/stored-agents.cjs +19 -13
- package/dist/server/handlers/stored-agents.cjs.map +1 -1
- package/dist/server/handlers/stored-agents.js +18 -12
- package/dist/server/handlers/stored-agents.js.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +8 -6
- package/dist/server/handlers/stored-mcp-clients.cjs.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +7 -5
- package/dist/server/handlers/stored-mcp-clients.js.map +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +3 -3
- 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.js +2 -2
- package/dist/server/handlers/stored-skill-favorites.cjs +4 -4
- package/dist/server/handlers/stored-skill-favorites.js +3 -3
- package/dist/server/handlers/stored-skills.cjs +6 -5
- package/dist/server/handlers/stored-skills.cjs.map +1 -1
- package/dist/server/handlers/stored-skills.js +5 -4
- package/dist/server/handlers/stored-skills.js.map +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +3 -3
- package/dist/server/handlers/stored-workspaces.js +2 -2
- package/dist/server/handlers/system.cjs +3 -3
- package/dist/server/handlers/system.cjs.map +1 -1
- package/dist/server/handlers/system.js +2 -2
- package/dist/server/handlers/test-utils.cjs +1 -1
- package/dist/server/handlers/tool-providers.cjs +2 -2
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tool-schema-overrides.cjs +1 -1
- package/dist/server/handlers/tools.cjs +7 -267
- package/dist/server/handlers/tools.js +1 -257
- package/dist/server/handlers/utils.cjs +2 -2
- package/dist/server/handlers/utils.js +1 -2
- package/dist/server/handlers/validate-agent-instructions.cjs +2 -2
- package/dist/server/handlers/validate-agent-instructions.js +1 -1
- package/dist/server/handlers/validate-avatar.cjs +2 -2
- package/dist/server/handlers/validate-avatar.cjs.map +1 -1
- package/dist/server/handlers/validate-avatar.js +1 -1
- package/dist/server/handlers/validate-avatar.js.map +1 -1
- package/dist/server/handlers/vector.cjs +17 -334
- package/dist/server/handlers/vector.js +1 -314
- package/dist/server/handlers/version-helpers.cjs +1 -1
- package/dist/server/handlers/voice.cjs +9 -35
- package/dist/server/handlers/voice.js +1 -23
- package/dist/server/handlers/workflow-builder.cjs +2 -2
- package/dist/server/handlers/workflow-builder.js +1 -2
- package/dist/server/handlers/workflows.cjs +30 -1293
- package/dist/server/handlers/workflows.js +1 -1257
- package/dist/server/handlers/workspace.cjs +27 -1176
- package/dist/server/handlers/workspace.js +1 -1146
- package/dist/server/handlers.cjs +33 -33
- package/dist/server/handlers.js +17 -17
- package/dist/server/schemas/index.cjs +7 -7
- package/dist/server/schemas/index.js +4 -4
- package/dist/server/schemas/mcp.d.ts +102 -0
- package/dist/server/schemas/mcp.d.ts.map +1 -1
- package/dist/server/schemas/schedules.d.ts +5 -0
- package/dist/server/schemas/schedules.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +5 -5
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.js +4 -4
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/mcp.d.ts +214 -0
- package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
- package/dist/tools-CmFSfDMn.js +256 -0
- package/dist/tools-CmFSfDMn.js.map +1 -0
- package/dist/tools-SPJtxG9N.cjs +291 -0
- package/dist/tools-SPJtxG9N.cjs.map +1 -0
- package/dist/{utils-DCgeTrq2.cjs → utils-CF76qzZR.cjs} +12 -17
- package/dist/{utils-DCgeTrq2.cjs.map → utils-CF76qzZR.cjs.map} +1 -1
- package/dist/{utils-DCAUeb6M.js → utils-aoLN3Wfi.js} +11 -16
- package/dist/{utils-DCAUeb6M.js.map → utils-aoLN3Wfi.js.map} +1 -1
- package/dist/{utils-Du-EpvDs.cjs → utils-dDLIDg8O.cjs} +2 -2
- package/dist/{utils-Du-EpvDs.cjs.map → utils-dDLIDg8O.cjs.map} +1 -1
- package/dist/vector-BKDD1kwc.cjs +409 -0
- package/dist/vector-BKDD1kwc.cjs.map +1 -0
- package/dist/vector-TWv4t-4g.js +314 -0
- package/dist/vector-TWv4t-4g.js.map +1 -0
- package/dist/voice-BnGwlZ75.cjs +70 -0
- package/dist/voice-BnGwlZ75.cjs.map +1 -0
- package/dist/voice-DjG8tBAD.js +23 -0
- package/dist/voice-DjG8tBAD.js.map +1 -0
- package/dist/{workflow-builder-Brj3IArM.cjs → workflow-builder-C9-8ZOWF.cjs} +5 -5
- package/dist/{workflow-builder-Brj3IArM.cjs.map → workflow-builder-C9-8ZOWF.cjs.map} +1 -1
- package/dist/{workflow-builder-DOa1Vx6w.js → workflow-builder-CjlLoQvo.js} +10 -8
- package/dist/{workflow-builder-DOa1Vx6w.js.map → workflow-builder-CjlLoQvo.js.map} +1 -1
- package/dist/workflows-DjqeJcdJ.cjs +1446 -0
- package/dist/workflows-DjqeJcdJ.cjs.map +1 -0
- package/dist/workflows-bb-otd2o.js +1273 -0
- package/dist/workflows-bb-otd2o.js.map +1 -0
- package/dist/workspace-B6kzp-bo.js +1154 -0
- package/dist/workspace-B6kzp-bo.js.map +1 -0
- package/dist/workspace-COKR1SxH.cjs +1309 -0
- package/dist/workspace-COKR1SxH.cjs.map +1 -0
- package/package.json +9 -9
- package/dist/a2a-B465DD1u.cjs.map +0 -1
- package/dist/a2a-CHBSYHxu.js.map +0 -1
- package/dist/dist-9c3PXXpk.cjs.map +0 -1
- package/dist/dist-B5OwHWTo.cjs +0 -2294
- package/dist/dist-B5OwHWTo.cjs.map +0 -1
- package/dist/dist-DGCnbhNe.js.map +0 -1
- package/dist/dist-DcoIg_tp.js +0 -2293
- package/dist/dist-DcoIg_tp.js.map +0 -1
- package/dist/mcp-DzpwLXEY.js.map +0 -1
- package/dist/mcp-ShaKO7gA.cjs.map +0 -1
- package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +0 -1
- package/dist/probe-image-size-DBGjhUtJ.cjs.map +0 -1
- package/dist/probe-image-size-Dmoxv93t.js.map +0 -1
- package/dist/route-builder-BNZs643f.cjs.map +0 -1
- package/dist/route-builder-BfQYtclb.js.map +0 -1
- package/dist/routes-BULZI-PU.cjs.map +0 -1
- package/dist/routes-DPojsNf1.cjs.map +0 -1
- package/dist/routes-Dl6_kWm7.js.map +0 -1
- package/dist/routes-rwufkyUe.js.map +0 -1
- package/dist/schedules-BQYgaz66.js.map +0 -1
- package/dist/schedules-Bj-giFbc.cjs.map +0 -1
- package/dist/schema-Drf2W04o.js +0 -2
- package/dist/schema-EQanefYq.cjs +0 -1
- package/dist/schema-e0VHpMt0-C0452jOk.cjs.map +0 -1
- package/dist/schema-e0VHpMt0-CVP5Hnxy.js.map +0 -1
- package/dist/server/handlers/agent-builder.cjs.map +0 -1
- package/dist/server/handlers/agent-builder.js.map +0 -1
- package/dist/server/handlers/agents.cjs.map +0 -1
- package/dist/server/handlers/agents.js.map +0 -1
- package/dist/server/handlers/conversations.cjs.map +0 -1
- package/dist/server/handlers/conversations.js.map +0 -1
- package/dist/server/handlers/logs.cjs.map +0 -1
- package/dist/server/handlers/logs.js.map +0 -1
- package/dist/server/handlers/mcp.cjs.map +0 -1
- package/dist/server/handlers/mcp.js.map +0 -1
- package/dist/server/handlers/memory.cjs.map +0 -1
- package/dist/server/handlers/memory.js.map +0 -1
- package/dist/server/handlers/observability.cjs.map +0 -1
- package/dist/server/handlers/observability.js.map +0 -1
- package/dist/server/handlers/plans.cjs.map +0 -1
- package/dist/server/handlers/plans.js.map +0 -1
- package/dist/server/handlers/responses.cjs.map +0 -1
- package/dist/server/handlers/responses.js.map +0 -1
- package/dist/server/handlers/scores.cjs.map +0 -1
- package/dist/server/handlers/scores.js.map +0 -1
- package/dist/server/handlers/tools.cjs.map +0 -1
- package/dist/server/handlers/tools.js.map +0 -1
- package/dist/server/handlers/vector.cjs.map +0 -1
- package/dist/server/handlers/vector.js.map +0 -1
- package/dist/server/handlers/voice.cjs.map +0 -1
- package/dist/server/handlers/voice.js.map +0 -1
- package/dist/server/handlers/workflows.cjs.map +0 -1
- package/dist/server/handlers/workflows.js.map +0 -1
- package/dist/server/handlers/workspace.cjs.map +0 -1
- package/dist/server/handlers/workspace.js.map +0 -1
- package/dist/sync-Ai_ZDz7U.js +0 -1700
- package/dist/sync-Ai_ZDz7U.js.map +0 -1
- package/dist/sync-BrO5MtSe.cjs +0 -1729
- package/dist/sync-BrO5MtSe.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processors.cjs","names":["createRoute","listProcessorsResponseSchema","handleError","processorIdPathParams","serializedProcessorDetailSchema","HTTPException","executeProcessorBodySchema","executeProcessorResponseSchema","MessageList"],"sources":["../../../src/server/handlers/processors.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent';\nimport type { MessageInput } from '@mastra/core/agent/message-list';\nimport { isProcessorWorkflow } from '@mastra/core/processors';\nimport type { Processor, ProcessorWorkflow } from '@mastra/core/processors';\n\nimport { HTTPException } from '../http-exception';\nimport {\n listProcessorsResponseSchema,\n serializedProcessorDetailSchema,\n processorIdPathParams,\n executeProcessorBodySchema,\n executeProcessorResponseSchema,\n} from '../schemas/processors';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\ntype ProcessorPhase =\n | 'input'\n | 'inputStep'\n | 'outputStream'\n | 'outputResult'\n | 'outputStep'\n | 'toolResult'\n | 'llmRequest';\n\n/**\n * Helper to extract text from messages for outputStep testing.\n * In real usage, the `text` field contains the assistant's response text.\n */\nfunction extractTextFromMessages(messages: unknown[]): string {\n if (!messages || !Array.isArray(messages) || messages.length === 0) {\n return '';\n }\n const firstMessage = messages[0] as any;\n if (firstMessage?.content?.parts) {\n const textParts = firstMessage.content.parts\n .filter((part: any) => part?.type === 'text')\n .map((part: any) => part?.text || '');\n return textParts.join('');\n }\n return '';\n}\n\n/**\n * Helper to detect phases for a processor.\n * For individual processors, checks which methods are implemented.\n * For workflow processors, returns all phases since createStep handles each phase\n * and it's a no-op if the underlying processor doesn't implement it.\n */\nfunction detectProcessorPhases(processor: any): ProcessorPhase[] {\n // Check if it's a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Workflow processors can potentially handle all phases\n // The createStep in workflows handles each phase and it's a no-op if not implemented\n return ['input', 'inputStep', 'outputStream', 'outputResult', 'outputStep', 'toolResult'];\n }\n\n // For individual processors, detect by checking which methods exist\n const phases: ProcessorPhase[] = [];\n if (typeof processor.processInput === 'function') {\n phases.push('input');\n }\n if (typeof processor.processInputStep === 'function') {\n phases.push('inputStep');\n }\n if (typeof processor.processOutputStream === 'function') {\n phases.push('outputStream');\n }\n if (typeof processor.processOutputResult === 'function') {\n phases.push('outputResult');\n }\n if (typeof processor.processOutputStep === 'function') {\n phases.push('outputStep');\n }\n if (typeof processor.processToolResult === 'function') {\n phases.push('toolResult');\n }\n if (typeof processor.processLLMRequest === 'function') {\n phases.push('llmRequest');\n }\n return phases;\n}\n\nexport const LIST_PROCESSORS_ROUTE = createRoute({\n method: 'GET',\n path: '/processors',\n responseType: 'json',\n responseSchema: listProcessorsResponseSchema,\n summary: 'List all processors',\n description: 'Returns a list of all available individual processors',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const processors = mastra.listProcessors() || {};\n const processorConfigurations = mastra.listProcessorConfigurations();\n const result: Record<\n string,\n {\n id: string;\n name?: string;\n description?: string;\n phases: ProcessorPhase[];\n agentIds: string[];\n configurations: Array<{ agentId: string; type: 'input' | 'output' }>;\n isWorkflow: boolean;\n }\n > = {};\n\n // Iterate through all individual processors registered with Mastra\n for (const [processorKey, processorEntry] of Object.entries(processors)) {\n const processor = processorEntry as Processor | ProcessorWorkflow;\n const processorId = processor.id || processorKey;\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processor);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processor);\n\n // Get agent configurations for this processor\n const configs = processorConfigurations.get(processorId) || [];\n const agentIds = [...new Set(configs.map(c => c.agentId))];\n const configurations = configs.map(c => ({ agentId: c.agentId, type: c.type }));\n\n result[processorId] = {\n id: processorId,\n name: processor.name || processorId,\n description: processor.description,\n phases,\n agentIds,\n configurations,\n isWorkflow,\n };\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error getting processors');\n }\n },\n});\n\nexport const GET_PROCESSOR_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/processors/:processorId',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n responseSchema: serializedProcessorDetailSchema,\n summary: 'Get processor by ID',\n description: 'Returns details for a specific processor including its phases and configurations',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId }) => {\n try {\n // Get the processor from Mastra's registered processors\n let processorEntry: Processor | ProcessorWorkflow | undefined;\n try {\n processorEntry = mastra.getProcessorById(processorId) as Processor | ProcessorWorkflow;\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processorEntry = processors[processorId as keyof typeof processors] as Processor | ProcessorWorkflow;\n }\n\n if (!processorEntry) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processorEntry);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processorEntry);\n\n // Get agent configurations for this processor\n const configs = mastra.getProcessorConfigurations(processorId);\n const agents = mastra.listAgents() || {};\n const configurations = configs.map(c => ({\n agentId: c.agentId,\n agentName: agents[c.agentId]?.name || c.agentId,\n type: c.type,\n }));\n\n return {\n id: processorEntry.id,\n name: processorEntry.name || processorEntry.id,\n description: processorEntry.description,\n phases,\n configurations,\n isWorkflow,\n };\n } catch (error) {\n return handleError(error, 'Error getting processor');\n }\n },\n});\n\nexport const EXECUTE_PROCESSOR_ROUTE = createRoute({\n method: 'POST',\n path: '/processors/:processorId/execute',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n bodySchema: executeProcessorBodySchema,\n responseSchema: executeProcessorResponseSchema,\n summary: 'Execute processor',\n description: 'Executes a specific processor with the provided input data',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId, ...bodyParams }) => {\n try {\n const { phase, messages } = bodyParams;\n\n if (!processorId) {\n throw new HTTPException(400, { message: 'Processor ID is required' });\n }\n\n if (!phase) {\n throw new HTTPException(400, { message: 'Phase is required' });\n }\n\n if (phase === 'llmRequest') {\n // processLLMRequest operates on the provider prompt, not on messages\n throw new HTTPException(400, {\n message: 'llmRequest phase cannot be executed directly. It runs on the provider prompt during an agent call.',\n });\n }\n\n if (!messages || !Array.isArray(messages)) {\n throw new HTTPException(400, { message: 'Messages array is required' });\n }\n\n // Get the processor from Mastra's registered processors\n let processor;\n try {\n processor = mastra.getProcessorById(processorId);\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processor = processors[processorId as keyof typeof processors];\n }\n\n if (!processor) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n const messageList = new MessageList();\n messageList.add(messages as unknown as MessageInput[], 'input');\n\n // Check if this is a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Execute workflow processor\n try {\n // Build inputData based on phase - each phase has different required fields\n const baseInputData = {\n phase: phase as 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult',\n messages: messageList.get.all.db(),\n messageList,\n retryCount: 0,\n };\n let inputData: typeof baseInputData & Record<string, unknown> = baseInputData;\n\n // Add phase-specific fields\n switch (phase) {\n case 'input':\n inputData = {\n ...inputData,\n systemMessages: [],\n };\n break;\n case 'inputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n model: '',\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n };\n break;\n case 'outputResult':\n inputData = {\n ...inputData,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n };\n break;\n case 'outputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n };\n break;\n case 'outputStream':\n inputData = {\n ...inputData,\n part: null,\n streamParts: [],\n state: {},\n };\n break;\n case 'toolResult':\n inputData = {\n ...inputData,\n stepNumber: 0,\n toolName: '',\n toolCallId: '',\n args: undefined,\n toolResultValue: undefined,\n providerExecuted: false,\n systemMessages: [],\n steps: [],\n };\n break;\n }\n\n const run = await processor.createRun();\n const result = await run.start({\n inputData,\n });\n\n // Check for tripwire status\n if (result.status === 'tripwire') {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: result.tripwire.reason || `Tripwire triggered in workflow ${processor.id}`,\n metadata: result.tripwire.metadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n\n // Check for execution failure\n if (result.status !== 'success') {\n throw new HTTPException(500, {\n message: `Processor workflow ${processor.id} failed with status: ${result.status}`,\n });\n }\n\n // Extract output from workflow result\n const output = result.result;\n let outputMessages = messages;\n\n if (output && typeof output === 'object') {\n if ('messages' in output && Array.isArray(output.messages)) {\n outputMessages = output.messages;\n } else if ('messageList' in output && output.messageList instanceof MessageList) {\n outputMessages = output.messageList.get.all.db();\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Re-throw HTTP exceptions\n if (error instanceof HTTPException) {\n throw error;\n }\n throw new HTTPException(500, {\n message: `Error executing processor workflow: ${error.message}`,\n });\n }\n }\n\n // Handle individual processor execution\n // Create the abort function for tripwire support\n let tripwireTriggered = false;\n let tripwireReason: string | undefined;\n let tripwireMetadata: unknown;\n\n const abort = (reason?: string, options?: { retry?: boolean; metadata?: unknown }) => {\n tripwireTriggered = true;\n tripwireReason = reason;\n tripwireMetadata = options?.metadata;\n throw new Error(`TRIPWIRE:${reason || 'Processor aborted'}`);\n };\n\n // Build the context based on phase\n const baseContext = {\n abort,\n retryCount: 0,\n messages: messageList.get.all.db(),\n messageList,\n state: {},\n };\n\n try {\n let result: any;\n\n // Execute the specific phase method on the individual processor\n switch (phase) {\n case 'input':\n if (!processor.processInput) {\n throw new HTTPException(400, { message: 'Processor does not support input phase' });\n }\n result = await processor.processInput({\n ...baseContext,\n systemMessages: [],\n });\n break;\n\n case 'inputStep':\n if (!processor.processInputStep) {\n throw new HTTPException(400, { message: 'Processor does not support inputStep phase' });\n }\n result = await processor.processInputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n // Pass empty/default values for all inputStep fields\n model: '' as any,\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n });\n break;\n\n case 'outputResult':\n if (!processor.processOutputResult) {\n throw new HTTPException(400, { message: 'Processor does not support outputResult phase' });\n }\n result = await processor.processOutputResult({\n ...baseContext,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n });\n break;\n\n case 'outputStep':\n if (!processor.processOutputStep) {\n throw new HTTPException(400, { message: 'Processor does not support outputStep phase' });\n }\n result = await processor.processOutputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n });\n break;\n\n case 'outputStream':\n // outputStream is for streaming chunks, not a simple execute\n throw new HTTPException(400, {\n message: 'outputStream phase cannot be executed directly. Use streaming instead.',\n });\n\n default:\n throw new HTTPException(400, { message: `Unknown phase: ${phase}` });\n }\n\n // Process the result\n let outputMessages = messages;\n if (result) {\n if (Array.isArray(result)) {\n outputMessages = result;\n } else if (result.get && result.get.all && typeof result.get.all.db === 'function') {\n // It's a MessageList\n outputMessages = result.get.all.db();\n } else if (result.messages) {\n outputMessages = result.messages;\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Check if it's a tripwire\n if (tripwireTriggered || error.message?.startsWith('TRIPWIRE:')) {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: tripwireReason || error.message?.replace('TRIPWIRE:', ''),\n metadata: tripwireMetadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n throw error;\n }\n } catch (error) {\n return handleError(error, 'Error executing processor');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processors.cjs","names":["isProcessorWorkflow","createRoute","listProcessorsResponseSchema","handleError","processorIdPathParams","serializedProcessorDetailSchema","HTTPException","executeProcessorBodySchema","executeProcessorResponseSchema","MessageList"],"sources":["../../../src/server/handlers/processors.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent';\nimport type { MessageInput } from '@mastra/core/agent/message-list';\nimport { isProcessorWorkflow } from '@mastra/core/processors';\nimport type { Processor, ProcessorWorkflow } from '@mastra/core/processors';\n\nimport { HTTPException } from '../http-exception';\nimport {\n listProcessorsResponseSchema,\n serializedProcessorDetailSchema,\n processorIdPathParams,\n executeProcessorBodySchema,\n executeProcessorResponseSchema,\n} from '../schemas/processors';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\ntype ProcessorPhase =\n | 'input'\n | 'inputStep'\n | 'outputStream'\n | 'outputResult'\n | 'outputStep'\n | 'toolResult'\n | 'llmRequest';\n\n/**\n * Helper to extract text from messages for outputStep testing.\n * In real usage, the `text` field contains the assistant's response text.\n */\nfunction extractTextFromMessages(messages: unknown[]): string {\n if (!messages || !Array.isArray(messages) || messages.length === 0) {\n return '';\n }\n const firstMessage = messages[0] as any;\n if (firstMessage?.content?.parts) {\n const textParts = firstMessage.content.parts\n .filter((part: any) => part?.type === 'text')\n .map((part: any) => part?.text || '');\n return textParts.join('');\n }\n return '';\n}\n\n/**\n * Helper to detect phases for a processor.\n * For individual processors, checks which methods are implemented.\n * For workflow processors, returns all phases since createStep handles each phase\n * and it's a no-op if the underlying processor doesn't implement it.\n */\nfunction detectProcessorPhases(processor: any): ProcessorPhase[] {\n // Check if it's a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Workflow processors can potentially handle all phases\n // The createStep in workflows handles each phase and it's a no-op if not implemented\n return ['input', 'inputStep', 'outputStream', 'outputResult', 'outputStep', 'toolResult'];\n }\n\n // For individual processors, detect by checking which methods exist\n const phases: ProcessorPhase[] = [];\n if (typeof processor.processInput === 'function') {\n phases.push('input');\n }\n if (typeof processor.processInputStep === 'function') {\n phases.push('inputStep');\n }\n if (typeof processor.processOutputStream === 'function') {\n phases.push('outputStream');\n }\n if (typeof processor.processOutputResult === 'function') {\n phases.push('outputResult');\n }\n if (typeof processor.processOutputStep === 'function') {\n phases.push('outputStep');\n }\n if (typeof processor.processToolResult === 'function') {\n phases.push('toolResult');\n }\n if (typeof processor.processLLMRequest === 'function') {\n phases.push('llmRequest');\n }\n return phases;\n}\n\nexport const LIST_PROCESSORS_ROUTE = createRoute({\n method: 'GET',\n path: '/processors',\n responseType: 'json',\n responseSchema: listProcessorsResponseSchema,\n summary: 'List all processors',\n description: 'Returns a list of all available individual processors',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const processors = mastra.listProcessors() || {};\n const processorConfigurations = mastra.listProcessorConfigurations();\n const result: Record<\n string,\n {\n id: string;\n name?: string;\n description?: string;\n phases: ProcessorPhase[];\n agentIds: string[];\n configurations: Array<{ agentId: string; type: 'input' | 'output' }>;\n isWorkflow: boolean;\n }\n > = {};\n\n // Iterate through all individual processors registered with Mastra\n for (const [processorKey, processorEntry] of Object.entries(processors)) {\n const processor = processorEntry as Processor | ProcessorWorkflow;\n const processorId = processor.id || processorKey;\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processor);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processor);\n\n // Get agent configurations for this processor\n const configs = processorConfigurations.get(processorId) || [];\n const agentIds = [...new Set(configs.map(c => c.agentId))];\n const configurations = configs.map(c => ({ agentId: c.agentId, type: c.type }));\n\n result[processorId] = {\n id: processorId,\n name: processor.name || processorId,\n description: processor.description,\n phases,\n agentIds,\n configurations,\n isWorkflow,\n };\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error getting processors');\n }\n },\n});\n\nexport const GET_PROCESSOR_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/processors/:processorId',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n responseSchema: serializedProcessorDetailSchema,\n summary: 'Get processor by ID',\n description: 'Returns details for a specific processor including its phases and configurations',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId }) => {\n try {\n // Get the processor from Mastra's registered processors\n let processorEntry: Processor | ProcessorWorkflow | undefined;\n try {\n processorEntry = mastra.getProcessorById(processorId) as Processor | ProcessorWorkflow;\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processorEntry = processors[processorId as keyof typeof processors] as Processor | ProcessorWorkflow;\n }\n\n if (!processorEntry) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processorEntry);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processorEntry);\n\n // Get agent configurations for this processor\n const configs = mastra.getProcessorConfigurations(processorId);\n const agents = mastra.listAgents() || {};\n const configurations = configs.map(c => ({\n agentId: c.agentId,\n agentName: agents[c.agentId]?.name || c.agentId,\n type: c.type,\n }));\n\n return {\n id: processorEntry.id,\n name: processorEntry.name || processorEntry.id,\n description: processorEntry.description,\n phases,\n configurations,\n isWorkflow,\n };\n } catch (error) {\n return handleError(error, 'Error getting processor');\n }\n },\n});\n\nexport const EXECUTE_PROCESSOR_ROUTE = createRoute({\n method: 'POST',\n path: '/processors/:processorId/execute',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n bodySchema: executeProcessorBodySchema,\n responseSchema: executeProcessorResponseSchema,\n summary: 'Execute processor',\n description: 'Executes a specific processor with the provided input data',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId, ...bodyParams }) => {\n try {\n const { phase, messages } = bodyParams;\n\n if (!processorId) {\n throw new HTTPException(400, { message: 'Processor ID is required' });\n }\n\n if (!phase) {\n throw new HTTPException(400, { message: 'Phase is required' });\n }\n\n if (phase === 'llmRequest') {\n // processLLMRequest operates on the provider prompt, not on messages\n throw new HTTPException(400, {\n message: 'llmRequest phase cannot be executed directly. It runs on the provider prompt during an agent call.',\n });\n }\n\n if (!messages || !Array.isArray(messages)) {\n throw new HTTPException(400, { message: 'Messages array is required' });\n }\n\n // Get the processor from Mastra's registered processors\n let processor;\n try {\n processor = mastra.getProcessorById(processorId);\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processor = processors[processorId as keyof typeof processors];\n }\n\n if (!processor) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n const messageList = new MessageList();\n messageList.add(messages as unknown as MessageInput[], 'input');\n\n // Check if this is a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Execute workflow processor\n try {\n // Build inputData based on phase - each phase has different required fields\n const baseInputData = {\n phase: phase as 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult',\n messages: messageList.get.all.db(),\n messageList,\n retryCount: 0,\n };\n let inputData: typeof baseInputData & Record<string, unknown> = baseInputData;\n\n // Add phase-specific fields\n switch (phase) {\n case 'input':\n inputData = {\n ...inputData,\n systemMessages: [],\n };\n break;\n case 'inputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n model: '',\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n };\n break;\n case 'outputResult':\n inputData = {\n ...inputData,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n };\n break;\n case 'outputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n };\n break;\n case 'outputStream':\n inputData = {\n ...inputData,\n part: null,\n streamParts: [],\n state: {},\n };\n break;\n case 'toolResult':\n inputData = {\n ...inputData,\n stepNumber: 0,\n toolName: '',\n toolCallId: '',\n args: undefined,\n toolResultValue: undefined,\n providerExecuted: false,\n systemMessages: [],\n steps: [],\n };\n break;\n }\n\n const run = await processor.createRun();\n const result = await run.start({\n inputData,\n });\n\n // Check for tripwire status\n if (result.status === 'tripwire') {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: result.tripwire.reason || `Tripwire triggered in workflow ${processor.id}`,\n metadata: result.tripwire.metadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n\n // Check for execution failure\n if (result.status !== 'success') {\n throw new HTTPException(500, {\n message: `Processor workflow ${processor.id} failed with status: ${result.status}`,\n });\n }\n\n // Extract output from workflow result\n const output = result.result;\n let outputMessages = messages;\n\n if (output && typeof output === 'object') {\n if ('messages' in output && Array.isArray(output.messages)) {\n outputMessages = output.messages;\n } else if ('messageList' in output && output.messageList instanceof MessageList) {\n outputMessages = output.messageList.get.all.db();\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Re-throw HTTP exceptions\n if (error instanceof HTTPException) {\n throw error;\n }\n throw new HTTPException(500, {\n message: `Error executing processor workflow: ${error.message}`,\n });\n }\n }\n\n // Handle individual processor execution\n // Create the abort function for tripwire support\n let tripwireTriggered = false;\n let tripwireReason: string | undefined;\n let tripwireMetadata: unknown;\n\n const abort = (reason?: string, options?: { retry?: boolean; metadata?: unknown }) => {\n tripwireTriggered = true;\n tripwireReason = reason;\n tripwireMetadata = options?.metadata;\n throw new Error(`TRIPWIRE:${reason || 'Processor aborted'}`);\n };\n\n // Build the context based on phase\n const baseContext = {\n abort,\n retryCount: 0,\n messages: messageList.get.all.db(),\n messageList,\n state: {},\n };\n\n try {\n let result: any;\n\n // Execute the specific phase method on the individual processor\n switch (phase) {\n case 'input':\n if (!processor.processInput) {\n throw new HTTPException(400, { message: 'Processor does not support input phase' });\n }\n result = await processor.processInput({\n ...baseContext,\n systemMessages: [],\n });\n break;\n\n case 'inputStep':\n if (!processor.processInputStep) {\n throw new HTTPException(400, { message: 'Processor does not support inputStep phase' });\n }\n result = await processor.processInputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n // Pass empty/default values for all inputStep fields\n model: '' as any,\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n });\n break;\n\n case 'outputResult':\n if (!processor.processOutputResult) {\n throw new HTTPException(400, { message: 'Processor does not support outputResult phase' });\n }\n result = await processor.processOutputResult({\n ...baseContext,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n });\n break;\n\n case 'outputStep':\n if (!processor.processOutputStep) {\n throw new HTTPException(400, { message: 'Processor does not support outputStep phase' });\n }\n result = await processor.processOutputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n });\n break;\n\n case 'outputStream':\n // outputStream is for streaming chunks, not a simple execute\n throw new HTTPException(400, {\n message: 'outputStream phase cannot be executed directly. Use streaming instead.',\n });\n\n default:\n throw new HTTPException(400, { message: `Unknown phase: ${phase}` });\n }\n\n // Process the result\n let outputMessages = messages;\n if (result) {\n if (Array.isArray(result)) {\n outputMessages = result;\n } else if (result.get && result.get.all && typeof result.get.all.db === 'function') {\n // It's a MessageList\n outputMessages = result.get.all.db();\n } else if (result.messages) {\n outputMessages = result.messages;\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Check if it's a tripwire\n if (tripwireTriggered || error.message?.startsWith('TRIPWIRE:')) {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: tripwireReason || error.message?.replace('TRIPWIRE:', ''),\n metadata: tripwireMetadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n throw error;\n }\n } catch (error) {\n return handleError(error, 'Error executing processor');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
2
|
-
import { n as createRoute } from "../../route-builder-
|
|
2
|
+
import { n as createRoute } from "../../route-builder-CjkWxv4E.js";
|
|
3
3
|
import { handleError } from "./error.js";
|
|
4
4
|
import { a as processorIdPathParams, n as executeProcessorResponseSchema, o as serializedProcessorDetailSchema, r as listProcessorsResponseSchema, t as executeProcessorBodySchema } from "../../processors-33IULT8X.js";
|
|
5
5
|
import { MessageList } from "@mastra/core/agent";
|
|
@@ -213,19 +213,17 @@ const EXECUTE_PROCESSOR_ROUTE = createRoute({
|
|
|
213
213
|
state: {}
|
|
214
214
|
};
|
|
215
215
|
break;
|
|
216
|
-
case "toolResult":
|
|
217
|
-
inputData
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
};
|
|
228
|
-
break;
|
|
216
|
+
case "toolResult": inputData = {
|
|
217
|
+
...inputData,
|
|
218
|
+
stepNumber: 0,
|
|
219
|
+
toolName: "",
|
|
220
|
+
toolCallId: "",
|
|
221
|
+
args: void 0,
|
|
222
|
+
toolResultValue: void 0,
|
|
223
|
+
providerExecuted: false,
|
|
224
|
+
systemMessages: [],
|
|
225
|
+
steps: []
|
|
226
|
+
};
|
|
229
227
|
}
|
|
230
228
|
const result = await (await processor.createRun()).start({ inputData });
|
|
231
229
|
if (result.status === "tripwire") return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processors.js","names":[],"sources":["../../../src/server/handlers/processors.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent';\nimport type { MessageInput } from '@mastra/core/agent/message-list';\nimport { isProcessorWorkflow } from '@mastra/core/processors';\nimport type { Processor, ProcessorWorkflow } from '@mastra/core/processors';\n\nimport { HTTPException } from '../http-exception';\nimport {\n listProcessorsResponseSchema,\n serializedProcessorDetailSchema,\n processorIdPathParams,\n executeProcessorBodySchema,\n executeProcessorResponseSchema,\n} from '../schemas/processors';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\ntype ProcessorPhase =\n | 'input'\n | 'inputStep'\n | 'outputStream'\n | 'outputResult'\n | 'outputStep'\n | 'toolResult'\n | 'llmRequest';\n\n/**\n * Helper to extract text from messages for outputStep testing.\n * In real usage, the `text` field contains the assistant's response text.\n */\nfunction extractTextFromMessages(messages: unknown[]): string {\n if (!messages || !Array.isArray(messages) || messages.length === 0) {\n return '';\n }\n const firstMessage = messages[0] as any;\n if (firstMessage?.content?.parts) {\n const textParts = firstMessage.content.parts\n .filter((part: any) => part?.type === 'text')\n .map((part: any) => part?.text || '');\n return textParts.join('');\n }\n return '';\n}\n\n/**\n * Helper to detect phases for a processor.\n * For individual processors, checks which methods are implemented.\n * For workflow processors, returns all phases since createStep handles each phase\n * and it's a no-op if the underlying processor doesn't implement it.\n */\nfunction detectProcessorPhases(processor: any): ProcessorPhase[] {\n // Check if it's a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Workflow processors can potentially handle all phases\n // The createStep in workflows handles each phase and it's a no-op if not implemented\n return ['input', 'inputStep', 'outputStream', 'outputResult', 'outputStep', 'toolResult'];\n }\n\n // For individual processors, detect by checking which methods exist\n const phases: ProcessorPhase[] = [];\n if (typeof processor.processInput === 'function') {\n phases.push('input');\n }\n if (typeof processor.processInputStep === 'function') {\n phases.push('inputStep');\n }\n if (typeof processor.processOutputStream === 'function') {\n phases.push('outputStream');\n }\n if (typeof processor.processOutputResult === 'function') {\n phases.push('outputResult');\n }\n if (typeof processor.processOutputStep === 'function') {\n phases.push('outputStep');\n }\n if (typeof processor.processToolResult === 'function') {\n phases.push('toolResult');\n }\n if (typeof processor.processLLMRequest === 'function') {\n phases.push('llmRequest');\n }\n return phases;\n}\n\nexport const LIST_PROCESSORS_ROUTE = createRoute({\n method: 'GET',\n path: '/processors',\n responseType: 'json',\n responseSchema: listProcessorsResponseSchema,\n summary: 'List all processors',\n description: 'Returns a list of all available individual processors',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const processors = mastra.listProcessors() || {};\n const processorConfigurations = mastra.listProcessorConfigurations();\n const result: Record<\n string,\n {\n id: string;\n name?: string;\n description?: string;\n phases: ProcessorPhase[];\n agentIds: string[];\n configurations: Array<{ agentId: string; type: 'input' | 'output' }>;\n isWorkflow: boolean;\n }\n > = {};\n\n // Iterate through all individual processors registered with Mastra\n for (const [processorKey, processorEntry] of Object.entries(processors)) {\n const processor = processorEntry as Processor | ProcessorWorkflow;\n const processorId = processor.id || processorKey;\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processor);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processor);\n\n // Get agent configurations for this processor\n const configs = processorConfigurations.get(processorId) || [];\n const agentIds = [...new Set(configs.map(c => c.agentId))];\n const configurations = configs.map(c => ({ agentId: c.agentId, type: c.type }));\n\n result[processorId] = {\n id: processorId,\n name: processor.name || processorId,\n description: processor.description,\n phases,\n agentIds,\n configurations,\n isWorkflow,\n };\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error getting processors');\n }\n },\n});\n\nexport const GET_PROCESSOR_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/processors/:processorId',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n responseSchema: serializedProcessorDetailSchema,\n summary: 'Get processor by ID',\n description: 'Returns details for a specific processor including its phases and configurations',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId }) => {\n try {\n // Get the processor from Mastra's registered processors\n let processorEntry: Processor | ProcessorWorkflow | undefined;\n try {\n processorEntry = mastra.getProcessorById(processorId) as Processor | ProcessorWorkflow;\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processorEntry = processors[processorId as keyof typeof processors] as Processor | ProcessorWorkflow;\n }\n\n if (!processorEntry) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processorEntry);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processorEntry);\n\n // Get agent configurations for this processor\n const configs = mastra.getProcessorConfigurations(processorId);\n const agents = mastra.listAgents() || {};\n const configurations = configs.map(c => ({\n agentId: c.agentId,\n agentName: agents[c.agentId]?.name || c.agentId,\n type: c.type,\n }));\n\n return {\n id: processorEntry.id,\n name: processorEntry.name || processorEntry.id,\n description: processorEntry.description,\n phases,\n configurations,\n isWorkflow,\n };\n } catch (error) {\n return handleError(error, 'Error getting processor');\n }\n },\n});\n\nexport const EXECUTE_PROCESSOR_ROUTE = createRoute({\n method: 'POST',\n path: '/processors/:processorId/execute',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n bodySchema: executeProcessorBodySchema,\n responseSchema: executeProcessorResponseSchema,\n summary: 'Execute processor',\n description: 'Executes a specific processor with the provided input data',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId, ...bodyParams }) => {\n try {\n const { phase, messages } = bodyParams;\n\n if (!processorId) {\n throw new HTTPException(400, { message: 'Processor ID is required' });\n }\n\n if (!phase) {\n throw new HTTPException(400, { message: 'Phase is required' });\n }\n\n if (phase === 'llmRequest') {\n // processLLMRequest operates on the provider prompt, not on messages\n throw new HTTPException(400, {\n message: 'llmRequest phase cannot be executed directly. It runs on the provider prompt during an agent call.',\n });\n }\n\n if (!messages || !Array.isArray(messages)) {\n throw new HTTPException(400, { message: 'Messages array is required' });\n }\n\n // Get the processor from Mastra's registered processors\n let processor;\n try {\n processor = mastra.getProcessorById(processorId);\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processor = processors[processorId as keyof typeof processors];\n }\n\n if (!processor) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n const messageList = new MessageList();\n messageList.add(messages as unknown as MessageInput[], 'input');\n\n // Check if this is a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Execute workflow processor\n try {\n // Build inputData based on phase - each phase has different required fields\n const baseInputData = {\n phase: phase as 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult',\n messages: messageList.get.all.db(),\n messageList,\n retryCount: 0,\n };\n let inputData: typeof baseInputData & Record<string, unknown> = baseInputData;\n\n // Add phase-specific fields\n switch (phase) {\n case 'input':\n inputData = {\n ...inputData,\n systemMessages: [],\n };\n break;\n case 'inputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n model: '',\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n };\n break;\n case 'outputResult':\n inputData = {\n ...inputData,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n };\n break;\n case 'outputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n };\n break;\n case 'outputStream':\n inputData = {\n ...inputData,\n part: null,\n streamParts: [],\n state: {},\n };\n break;\n case 'toolResult':\n inputData = {\n ...inputData,\n stepNumber: 0,\n toolName: '',\n toolCallId: '',\n args: undefined,\n toolResultValue: undefined,\n providerExecuted: false,\n systemMessages: [],\n steps: [],\n };\n break;\n }\n\n const run = await processor.createRun();\n const result = await run.start({\n inputData,\n });\n\n // Check for tripwire status\n if (result.status === 'tripwire') {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: result.tripwire.reason || `Tripwire triggered in workflow ${processor.id}`,\n metadata: result.tripwire.metadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n\n // Check for execution failure\n if (result.status !== 'success') {\n throw new HTTPException(500, {\n message: `Processor workflow ${processor.id} failed with status: ${result.status}`,\n });\n }\n\n // Extract output from workflow result\n const output = result.result;\n let outputMessages = messages;\n\n if (output && typeof output === 'object') {\n if ('messages' in output && Array.isArray(output.messages)) {\n outputMessages = output.messages;\n } else if ('messageList' in output && output.messageList instanceof MessageList) {\n outputMessages = output.messageList.get.all.db();\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Re-throw HTTP exceptions\n if (error instanceof HTTPException) {\n throw error;\n }\n throw new HTTPException(500, {\n message: `Error executing processor workflow: ${error.message}`,\n });\n }\n }\n\n // Handle individual processor execution\n // Create the abort function for tripwire support\n let tripwireTriggered = false;\n let tripwireReason: string | undefined;\n let tripwireMetadata: unknown;\n\n const abort = (reason?: string, options?: { retry?: boolean; metadata?: unknown }) => {\n tripwireTriggered = true;\n tripwireReason = reason;\n tripwireMetadata = options?.metadata;\n throw new Error(`TRIPWIRE:${reason || 'Processor aborted'}`);\n };\n\n // Build the context based on phase\n const baseContext = {\n abort,\n retryCount: 0,\n messages: messageList.get.all.db(),\n messageList,\n state: {},\n };\n\n try {\n let result: any;\n\n // Execute the specific phase method on the individual processor\n switch (phase) {\n case 'input':\n if (!processor.processInput) {\n throw new HTTPException(400, { message: 'Processor does not support input phase' });\n }\n result = await processor.processInput({\n ...baseContext,\n systemMessages: [],\n });\n break;\n\n case 'inputStep':\n if (!processor.processInputStep) {\n throw new HTTPException(400, { message: 'Processor does not support inputStep phase' });\n }\n result = await processor.processInputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n // Pass empty/default values for all inputStep fields\n model: '' as any,\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n });\n break;\n\n case 'outputResult':\n if (!processor.processOutputResult) {\n throw new HTTPException(400, { message: 'Processor does not support outputResult phase' });\n }\n result = await processor.processOutputResult({\n ...baseContext,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n });\n break;\n\n case 'outputStep':\n if (!processor.processOutputStep) {\n throw new HTTPException(400, { message: 'Processor does not support outputStep phase' });\n }\n result = await processor.processOutputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n });\n break;\n\n case 'outputStream':\n // outputStream is for streaming chunks, not a simple execute\n throw new HTTPException(400, {\n message: 'outputStream phase cannot be executed directly. Use streaming instead.',\n });\n\n default:\n throw new HTTPException(400, { message: `Unknown phase: ${phase}` });\n }\n\n // Process the result\n let outputMessages = messages;\n if (result) {\n if (Array.isArray(result)) {\n outputMessages = result;\n } else if (result.get && result.get.all && typeof result.get.all.db === 'function') {\n // It's a MessageList\n outputMessages = result.get.all.db();\n } else if (result.messages) {\n outputMessages = result.messages;\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Check if it's a tripwire\n if (tripwireTriggered || error.message?.startsWith('TRIPWIRE:')) {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: tripwireReason || error.message?.replace('TRIPWIRE:', ''),\n metadata: tripwireMetadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n throw error;\n }\n } catch (error) {\n return handleError(error, 'Error executing processor');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processors.js","names":[],"sources":["../../../src/server/handlers/processors.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent';\nimport type { MessageInput } from '@mastra/core/agent/message-list';\nimport { isProcessorWorkflow } from '@mastra/core/processors';\nimport type { Processor, ProcessorWorkflow } from '@mastra/core/processors';\n\nimport { HTTPException } from '../http-exception';\nimport {\n listProcessorsResponseSchema,\n serializedProcessorDetailSchema,\n processorIdPathParams,\n executeProcessorBodySchema,\n executeProcessorResponseSchema,\n} from '../schemas/processors';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\ntype ProcessorPhase =\n | 'input'\n | 'inputStep'\n | 'outputStream'\n | 'outputResult'\n | 'outputStep'\n | 'toolResult'\n | 'llmRequest';\n\n/**\n * Helper to extract text from messages for outputStep testing.\n * In real usage, the `text` field contains the assistant's response text.\n */\nfunction extractTextFromMessages(messages: unknown[]): string {\n if (!messages || !Array.isArray(messages) || messages.length === 0) {\n return '';\n }\n const firstMessage = messages[0] as any;\n if (firstMessage?.content?.parts) {\n const textParts = firstMessage.content.parts\n .filter((part: any) => part?.type === 'text')\n .map((part: any) => part?.text || '');\n return textParts.join('');\n }\n return '';\n}\n\n/**\n * Helper to detect phases for a processor.\n * For individual processors, checks which methods are implemented.\n * For workflow processors, returns all phases since createStep handles each phase\n * and it's a no-op if the underlying processor doesn't implement it.\n */\nfunction detectProcessorPhases(processor: any): ProcessorPhase[] {\n // Check if it's a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Workflow processors can potentially handle all phases\n // The createStep in workflows handles each phase and it's a no-op if not implemented\n return ['input', 'inputStep', 'outputStream', 'outputResult', 'outputStep', 'toolResult'];\n }\n\n // For individual processors, detect by checking which methods exist\n const phases: ProcessorPhase[] = [];\n if (typeof processor.processInput === 'function') {\n phases.push('input');\n }\n if (typeof processor.processInputStep === 'function') {\n phases.push('inputStep');\n }\n if (typeof processor.processOutputStream === 'function') {\n phases.push('outputStream');\n }\n if (typeof processor.processOutputResult === 'function') {\n phases.push('outputResult');\n }\n if (typeof processor.processOutputStep === 'function') {\n phases.push('outputStep');\n }\n if (typeof processor.processToolResult === 'function') {\n phases.push('toolResult');\n }\n if (typeof processor.processLLMRequest === 'function') {\n phases.push('llmRequest');\n }\n return phases;\n}\n\nexport const LIST_PROCESSORS_ROUTE = createRoute({\n method: 'GET',\n path: '/processors',\n responseType: 'json',\n responseSchema: listProcessorsResponseSchema,\n summary: 'List all processors',\n description: 'Returns a list of all available individual processors',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const processors = mastra.listProcessors() || {};\n const processorConfigurations = mastra.listProcessorConfigurations();\n const result: Record<\n string,\n {\n id: string;\n name?: string;\n description?: string;\n phases: ProcessorPhase[];\n agentIds: string[];\n configurations: Array<{ agentId: string; type: 'input' | 'output' }>;\n isWorkflow: boolean;\n }\n > = {};\n\n // Iterate through all individual processors registered with Mastra\n for (const [processorKey, processorEntry] of Object.entries(processors)) {\n const processor = processorEntry as Processor | ProcessorWorkflow;\n const processorId = processor.id || processorKey;\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processor);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processor);\n\n // Get agent configurations for this processor\n const configs = processorConfigurations.get(processorId) || [];\n const agentIds = [...new Set(configs.map(c => c.agentId))];\n const configurations = configs.map(c => ({ agentId: c.agentId, type: c.type }));\n\n result[processorId] = {\n id: processorId,\n name: processor.name || processorId,\n description: processor.description,\n phases,\n agentIds,\n configurations,\n isWorkflow,\n };\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error getting processors');\n }\n },\n});\n\nexport const GET_PROCESSOR_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/processors/:processorId',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n responseSchema: serializedProcessorDetailSchema,\n summary: 'Get processor by ID',\n description: 'Returns details for a specific processor including its phases and configurations',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId }) => {\n try {\n // Get the processor from Mastra's registered processors\n let processorEntry: Processor | ProcessorWorkflow | undefined;\n try {\n processorEntry = mastra.getProcessorById(processorId) as Processor | ProcessorWorkflow;\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processorEntry = processors[processorId as keyof typeof processors] as Processor | ProcessorWorkflow;\n }\n\n if (!processorEntry) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n // Check if it's a workflow processor\n const isWorkflow = isProcessorWorkflow(processorEntry);\n\n // Detect phases (handles both individual processors and workflow processors)\n const phases = detectProcessorPhases(processorEntry);\n\n // Get agent configurations for this processor\n const configs = mastra.getProcessorConfigurations(processorId);\n const agents = mastra.listAgents() || {};\n const configurations = configs.map(c => ({\n agentId: c.agentId,\n agentName: agents[c.agentId]?.name || c.agentId,\n type: c.type,\n }));\n\n return {\n id: processorEntry.id,\n name: processorEntry.name || processorEntry.id,\n description: processorEntry.description,\n phases,\n configurations,\n isWorkflow,\n };\n } catch (error) {\n return handleError(error, 'Error getting processor');\n }\n },\n});\n\nexport const EXECUTE_PROCESSOR_ROUTE = createRoute({\n method: 'POST',\n path: '/processors/:processorId/execute',\n responseType: 'json',\n pathParamSchema: processorIdPathParams,\n bodySchema: executeProcessorBodySchema,\n responseSchema: executeProcessorResponseSchema,\n summary: 'Execute processor',\n description: 'Executes a specific processor with the provided input data',\n tags: ['Processors'],\n requiresAuth: true,\n handler: async ({ mastra, processorId, ...bodyParams }) => {\n try {\n const { phase, messages } = bodyParams;\n\n if (!processorId) {\n throw new HTTPException(400, { message: 'Processor ID is required' });\n }\n\n if (!phase) {\n throw new HTTPException(400, { message: 'Phase is required' });\n }\n\n if (phase === 'llmRequest') {\n // processLLMRequest operates on the provider prompt, not on messages\n throw new HTTPException(400, {\n message: 'llmRequest phase cannot be executed directly. It runs on the provider prompt during an agent call.',\n });\n }\n\n if (!messages || !Array.isArray(messages)) {\n throw new HTTPException(400, { message: 'Messages array is required' });\n }\n\n // Get the processor from Mastra's registered processors\n let processor;\n try {\n processor = mastra.getProcessorById(processorId);\n } catch {\n // getProcessorById throws if not found, try by key\n const processors = mastra.listProcessors() || {};\n processor = processors[processorId as keyof typeof processors];\n }\n\n if (!processor) {\n throw new HTTPException(404, { message: 'Processor not found' });\n }\n\n const messageList = new MessageList();\n messageList.add(messages as unknown as MessageInput[], 'input');\n\n // Check if this is a workflow processor\n if (isProcessorWorkflow(processor)) {\n // Execute workflow processor\n try {\n // Build inputData based on phase - each phase has different required fields\n const baseInputData = {\n phase: phase as 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult',\n messages: messageList.get.all.db(),\n messageList,\n retryCount: 0,\n };\n let inputData: typeof baseInputData & Record<string, unknown> = baseInputData;\n\n // Add phase-specific fields\n switch (phase) {\n case 'input':\n inputData = {\n ...inputData,\n systemMessages: [],\n };\n break;\n case 'inputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n model: '',\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n };\n break;\n case 'outputResult':\n inputData = {\n ...inputData,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n };\n break;\n case 'outputStep':\n inputData = {\n ...inputData,\n stepNumber: 0,\n systemMessages: [],\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n };\n break;\n case 'outputStream':\n inputData = {\n ...inputData,\n part: null,\n streamParts: [],\n state: {},\n };\n break;\n case 'toolResult':\n inputData = {\n ...inputData,\n stepNumber: 0,\n toolName: '',\n toolCallId: '',\n args: undefined,\n toolResultValue: undefined,\n providerExecuted: false,\n systemMessages: [],\n steps: [],\n };\n break;\n }\n\n const run = await processor.createRun();\n const result = await run.start({\n inputData,\n });\n\n // Check for tripwire status\n if (result.status === 'tripwire') {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: result.tripwire.reason || `Tripwire triggered in workflow ${processor.id}`,\n metadata: result.tripwire.metadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n\n // Check for execution failure\n if (result.status !== 'success') {\n throw new HTTPException(500, {\n message: `Processor workflow ${processor.id} failed with status: ${result.status}`,\n });\n }\n\n // Extract output from workflow result\n const output = result.result;\n let outputMessages = messages;\n\n if (output && typeof output === 'object') {\n if ('messages' in output && Array.isArray(output.messages)) {\n outputMessages = output.messages;\n } else if ('messageList' in output && output.messageList instanceof MessageList) {\n outputMessages = output.messageList.get.all.db();\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Re-throw HTTP exceptions\n if (error instanceof HTTPException) {\n throw error;\n }\n throw new HTTPException(500, {\n message: `Error executing processor workflow: ${error.message}`,\n });\n }\n }\n\n // Handle individual processor execution\n // Create the abort function for tripwire support\n let tripwireTriggered = false;\n let tripwireReason: string | undefined;\n let tripwireMetadata: unknown;\n\n const abort = (reason?: string, options?: { retry?: boolean; metadata?: unknown }) => {\n tripwireTriggered = true;\n tripwireReason = reason;\n tripwireMetadata = options?.metadata;\n throw new Error(`TRIPWIRE:${reason || 'Processor aborted'}`);\n };\n\n // Build the context based on phase\n const baseContext = {\n abort,\n retryCount: 0,\n messages: messageList.get.all.db(),\n messageList,\n state: {},\n };\n\n try {\n let result: any;\n\n // Execute the specific phase method on the individual processor\n switch (phase) {\n case 'input':\n if (!processor.processInput) {\n throw new HTTPException(400, { message: 'Processor does not support input phase' });\n }\n result = await processor.processInput({\n ...baseContext,\n systemMessages: [],\n });\n break;\n\n case 'inputStep':\n if (!processor.processInputStep) {\n throw new HTTPException(400, { message: 'Processor does not support inputStep phase' });\n }\n result = await processor.processInputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n // Pass empty/default values for all inputStep fields\n model: '' as any,\n tools: {},\n toolChoice: undefined,\n activeTools: [],\n providerOptions: undefined,\n modelSettings: undefined,\n structuredOutput: undefined,\n });\n break;\n\n case 'outputResult':\n if (!processor.processOutputResult) {\n throw new HTTPException(400, { message: 'Processor does not support outputResult phase' });\n }\n result = await processor.processOutputResult({\n ...baseContext,\n state: {},\n result: {\n text: extractTextFromMessages(messages),\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n finishReason: 'unknown',\n steps: [],\n },\n });\n break;\n\n case 'outputStep':\n if (!processor.processOutputStep) {\n throw new HTTPException(400, { message: 'Processor does not support outputStep phase' });\n }\n result = await processor.processOutputStep({\n ...baseContext,\n systemMessages: [],\n stepNumber: 0,\n steps: [],\n finishReason: 'stop',\n toolCalls: [],\n text: extractTextFromMessages(messages),\n usage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },\n });\n break;\n\n case 'outputStream':\n // outputStream is for streaming chunks, not a simple execute\n throw new HTTPException(400, {\n message: 'outputStream phase cannot be executed directly. Use streaming instead.',\n });\n\n default:\n throw new HTTPException(400, { message: `Unknown phase: ${phase}` });\n }\n\n // Process the result\n let outputMessages = messages;\n if (result) {\n if (Array.isArray(result)) {\n outputMessages = result;\n } else if (result.get && result.get.all && typeof result.get.all.db === 'function') {\n // It's a MessageList\n outputMessages = result.get.all.db();\n } else if (result.messages) {\n outputMessages = result.messages;\n }\n }\n\n return {\n success: true,\n phase,\n messages: outputMessages,\n messageList: {\n messages: outputMessages,\n },\n };\n } catch (error: any) {\n // Check if it's a tripwire\n if (tripwireTriggered || error.message?.startsWith('TRIPWIRE:')) {\n return {\n success: false,\n phase,\n tripwire: {\n triggered: true,\n reason: tripwireReason || error.message?.replace('TRIPWIRE:', ''),\n metadata: tripwireMetadata,\n },\n messages,\n messageList: {\n messages,\n },\n };\n }\n throw error;\n }\n } catch (error) {\n return handleError(error, 'Error executing processor');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
require("../../rolldown-runtime-
|
|
2
|
+
require("../../rolldown-runtime-BwC_XMyb.cjs");
|
|
3
3
|
const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
|
|
4
|
-
const require_route_builder = require("../../route-builder-
|
|
5
|
-
const require_utils = require("../../utils-
|
|
4
|
+
const require_route_builder = require("../../route-builder-B2Qhhd7C.cjs");
|
|
5
|
+
const require_utils = require("../../utils-CF76qzZR.cjs");
|
|
6
6
|
const require_server_handlers_error = require("./error.cjs");
|
|
7
7
|
const require_server_handlers_version_helpers = require("./version-helpers.cjs");
|
|
8
8
|
const require_prompt_block_versions = require("../../prompt-block-versions-Cl3Lh4H-.cjs");
|
|
@@ -77,7 +77,8 @@ const CREATE_PROMPT_BLOCK_VERSION_ROUTE = require_route_builder.createRoute({
|
|
|
77
77
|
}
|
|
78
78
|
const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);
|
|
79
79
|
if (!promptBlock.activeVersionId && latestVersion) currentConfig = require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
80
|
-
const
|
|
80
|
+
const previousConfig = latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
|
|
81
|
+
const changedFields = require_server_handlers_version_helpers.calculateChangedFields(previousConfig, currentConfig);
|
|
81
82
|
const { versionId } = await require_server_handlers_version_helpers.createVersionWithRetry(promptBlockStore, promptBlockId, "blockId", currentConfig, changedFields, { changeMessage });
|
|
82
83
|
const version = await promptBlockStore.getVersion(versionId);
|
|
83
84
|
if (!version) throw new require_http_exception.HTTPException(500, { message: "Failed to retrieve created version" });
|
|
@@ -110,7 +111,8 @@ const GET_PROMPT_BLOCK_VERSION_ROUTE = require_route_builder.createRoute({
|
|
|
110
111
|
const version = await promptBlockStore.getVersion(versionId);
|
|
111
112
|
if (!version) throw new require_http_exception.HTTPException(404, { message: `Version with id ${versionId} not found` });
|
|
112
113
|
if (version.blockId !== promptBlockId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${versionId} not found for prompt block ${promptBlockId}` });
|
|
113
|
-
|
|
114
|
+
const promptBlock = await promptBlockStore.getById(promptBlockId);
|
|
115
|
+
require_utils.assertStoredResourceScope(promptBlock, await require_utils.getStoredResourceScope(mastra, requestContext));
|
|
114
116
|
return version;
|
|
115
117
|
} catch (error) {
|
|
116
118
|
return require_server_handlers_error.handleError(error, "Error getting prompt block version");
|
|
@@ -189,7 +191,9 @@ const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = require_route_builder.createRoute({
|
|
|
189
191
|
...restoredConfig
|
|
190
192
|
});
|
|
191
193
|
const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);
|
|
192
|
-
const
|
|
194
|
+
const previousConfig = latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
|
|
195
|
+
const changedFields = require_server_handlers_version_helpers.calculateChangedFields(previousConfig, restoredConfig);
|
|
196
|
+
const { versionId: newVersionId } = await require_server_handlers_version_helpers.createVersionWithRetry(promptBlockStore, promptBlockId, "blockId", restoredConfig, changedFields, { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
|
|
193
197
|
const newVersion = await promptBlockStore.getVersion(newVersionId);
|
|
194
198
|
if (!newVersion) throw new require_http_exception.HTTPException(500, { message: "Failed to retrieve created version" });
|
|
195
199
|
await require_server_handlers_version_helpers.enforceRetentionLimit(promptBlockStore, promptBlockId, "blockId", promptBlock.activeVersionId);
|
|
@@ -257,15 +261,18 @@ const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = require_route_builder.createRoute({
|
|
|
257
261
|
if (!storage) throw new require_http_exception.HTTPException(500, { message: "Storage is not configured" });
|
|
258
262
|
const promptBlockStore = await storage.getStore("promptBlocks");
|
|
259
263
|
if (!promptBlockStore) throw new require_http_exception.HTTPException(500, { message: "Prompt blocks storage domain is not available" });
|
|
260
|
-
|
|
264
|
+
const promptBlock = await promptBlockStore.getById(promptBlockId);
|
|
265
|
+
require_utils.assertStoredResourceScope(promptBlock, await require_utils.getStoredResourceScope(mastra, requestContext));
|
|
261
266
|
const fromVersion = await promptBlockStore.getVersion(from);
|
|
262
267
|
if (!fromVersion) throw new require_http_exception.HTTPException(404, { message: `Version with id ${from} not found` });
|
|
263
268
|
if (fromVersion.blockId !== promptBlockId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${from} not found for prompt block ${promptBlockId}` });
|
|
264
269
|
const toVersion = await promptBlockStore.getVersion(to);
|
|
265
270
|
if (!toVersion) throw new require_http_exception.HTTPException(404, { message: `Version with id ${to} not found` });
|
|
266
271
|
if (toVersion.blockId !== promptBlockId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${to} not found for prompt block ${promptBlockId}` });
|
|
272
|
+
const fromConfig = require_server_handlers_version_helpers.extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
273
|
+
const toConfig = require_server_handlers_version_helpers.extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
267
274
|
return {
|
|
268
|
-
diffs: require_server_handlers_version_helpers.computeVersionDiffs(
|
|
275
|
+
diffs: require_server_handlers_version_helpers.computeVersionDiffs(fromConfig, toConfig),
|
|
269
276
|
fromVersion,
|
|
270
277
|
toVersion
|
|
271
278
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-block-versions.cjs","names":["createRoute","promptBlockVersionPathParams","listPromptBlockVersionsQuerySchema","listPromptBlockVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createPromptBlockVersionBodySchema","createPromptBlockVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","promptBlockVersionIdPathParams","getPromptBlockVersionResponseSchema","activatePromptBlockVersionResponseSchema","restorePromptBlockVersionResponseSchema","deletePromptBlockVersionResponseSchema","comparePromptBlockVersionsQuerySchema","comparePromptBlockVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/prompt-block-versions.ts"],"sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n promptBlockVersionPathParams,\n promptBlockVersionIdPathParams,\n listPromptBlockVersionsQuerySchema,\n createPromptBlockVersionBodySchema,\n comparePromptBlockVersionsQuerySchema,\n listPromptBlockVersionsResponseSchema,\n getPromptBlockVersionResponseSchema,\n createPromptBlockVersionResponseSchema,\n activatePromptBlockVersionResponseSchema,\n restorePromptBlockVersionResponseSchema,\n deletePromptBlockVersionResponseSchema,\n comparePromptBlockVersionsResponseSchema,\n} from '../schemas/prompt-block-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = ['name', 'description', 'content', 'rules'] as const;\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions - List all versions for a prompt block\n */\nexport const LIST_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: listPromptBlockVersionsQuerySchema,\n responseSchema: listPromptBlockVersionsResponseSchema,\n summary: 'List prompt block versions',\n description: 'Returns a paginated list of all versions for a stored prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const result = await promptBlockStore.listVersions({\n blockId: promptBlockId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing prompt block versions');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions - Create a new version snapshot\n */\nexport const CREATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n bodySchema: createPromptBlockVersionBodySchema,\n responseSchema: createPromptBlockVersionResponseSchema,\n summary: 'Create prompt block version',\n description: 'Creates a new version snapshot of the current prompt block configuration',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (promptBlock.activeVersionId) {\n const activeVersion = await promptBlockStore.getVersion(promptBlock.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n\n // If no activeVersionId, fall back to latest version config\n if (!promptBlock.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/:versionId - Get a specific version\n */\nexport const GET_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: getPromptBlockVersionResponseSchema,\n summary: 'Get prompt block version',\n description: 'Returns a specific version of a prompt block by its version ID',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const version = await promptBlockStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: activatePromptBlockVersionResponseSchema,\n summary: 'Activate prompt block version',\n description: 'Sets a specific version as the active version for the prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n await promptBlockStore.update({\n id: promptBlockId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/restore - Restore prompt block to a version\n */\nexport const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: restorePromptBlockVersionResponseSchema,\n summary: 'Restore prompt block version',\n description: 'Restores the prompt block configuration from a version, creating a new version',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await promptBlockStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await promptBlockStore.update({\n id: promptBlockId,\n ...restoredConfig,\n });\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await promptBlockStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring prompt block version');\n }\n },\n});\n\n/**\n * DELETE /stored/prompt-blocks/:promptBlockId/versions/:versionId - Delete a version\n */\nexport const DELETE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: deletePromptBlockVersionResponseSchema,\n summary: 'Delete prompt block version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n if (promptBlock.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await promptBlockStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/compare - Compare two versions\n */\nexport const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: comparePromptBlockVersionsQuerySchema,\n responseSchema: comparePromptBlockVersionsResponseSchema,\n summary: 'Compare prompt block versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await promptBlockStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const toVersion = await promptBlockStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing prompt block versions');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompt-block-versions.cjs","names":["createRoute","promptBlockVersionPathParams","listPromptBlockVersionsQuerySchema","listPromptBlockVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createPromptBlockVersionBodySchema","createPromptBlockVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","promptBlockVersionIdPathParams","getPromptBlockVersionResponseSchema","activatePromptBlockVersionResponseSchema","restorePromptBlockVersionResponseSchema","deletePromptBlockVersionResponseSchema","comparePromptBlockVersionsQuerySchema","comparePromptBlockVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/prompt-block-versions.ts"],"sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n promptBlockVersionPathParams,\n promptBlockVersionIdPathParams,\n listPromptBlockVersionsQuerySchema,\n createPromptBlockVersionBodySchema,\n comparePromptBlockVersionsQuerySchema,\n listPromptBlockVersionsResponseSchema,\n getPromptBlockVersionResponseSchema,\n createPromptBlockVersionResponseSchema,\n activatePromptBlockVersionResponseSchema,\n restorePromptBlockVersionResponseSchema,\n deletePromptBlockVersionResponseSchema,\n comparePromptBlockVersionsResponseSchema,\n} from '../schemas/prompt-block-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = ['name', 'description', 'content', 'rules'] as const;\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions - List all versions for a prompt block\n */\nexport const LIST_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: listPromptBlockVersionsQuerySchema,\n responseSchema: listPromptBlockVersionsResponseSchema,\n summary: 'List prompt block versions',\n description: 'Returns a paginated list of all versions for a stored prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const result = await promptBlockStore.listVersions({\n blockId: promptBlockId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing prompt block versions');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions - Create a new version snapshot\n */\nexport const CREATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n bodySchema: createPromptBlockVersionBodySchema,\n responseSchema: createPromptBlockVersionResponseSchema,\n summary: 'Create prompt block version',\n description: 'Creates a new version snapshot of the current prompt block configuration',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (promptBlock.activeVersionId) {\n const activeVersion = await promptBlockStore.getVersion(promptBlock.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n\n // If no activeVersionId, fall back to latest version config\n if (!promptBlock.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/:versionId - Get a specific version\n */\nexport const GET_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: getPromptBlockVersionResponseSchema,\n summary: 'Get prompt block version',\n description: 'Returns a specific version of a prompt block by its version ID',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const version = await promptBlockStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: activatePromptBlockVersionResponseSchema,\n summary: 'Activate prompt block version',\n description: 'Sets a specific version as the active version for the prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n await promptBlockStore.update({\n id: promptBlockId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/restore - Restore prompt block to a version\n */\nexport const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: restorePromptBlockVersionResponseSchema,\n summary: 'Restore prompt block version',\n description: 'Restores the prompt block configuration from a version, creating a new version',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await promptBlockStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await promptBlockStore.update({\n id: promptBlockId,\n ...restoredConfig,\n });\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await promptBlockStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring prompt block version');\n }\n },\n});\n\n/**\n * DELETE /stored/prompt-blocks/:promptBlockId/versions/:versionId - Delete a version\n */\nexport const DELETE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: deletePromptBlockVersionResponseSchema,\n summary: 'Delete prompt block version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n if (promptBlock.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await promptBlockStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/compare - Compare two versions\n */\nexport const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: comparePromptBlockVersionsQuerySchema,\n responseSchema: comparePromptBlockVersionsResponseSchema,\n summary: 'Compare prompt block versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await promptBlockStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const toVersion = await promptBlockStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing prompt block versions');\n }\n },\n});\n"],"mappings":";;;;;;;;;AA4BA,MAAM,yBAAyB;CAAC;CAAQ;CAAe;CAAW;AAAO;;;;AAKzE,MAAa,mCAAmCA,sBAAAA,YAAY;CAC1D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBC,8BAAAA;CACjB,kBAAkBC,8BAAAA;CAClB,gBAAgBC,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,MAAM,SAAS,SAAS,qBAAqB;EACpF,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIC,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,IAAI,CAAC,aACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,wBAAwB,cAAc,YAAY,CAAC;GAE7F,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAS3F,OAAO,MAPc,iBAAiB,aAAa;IACjD,SAAS;IACT;IACA;IACA;GACF,CAAC;EAGH,SAAS,OAAO;GACd,OAAOC,8BAAAA,YAAY,OAAO,qCAAqC;EACjE;CACF;AACF,CAAC;;;;AAKD,MAAa,oCAAoCN,sBAAAA,YAAY;CAC3D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBC,8BAAAA;CACjB,YAAYM,8BAAAA;CACZ,gBAAgBC,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,eAAe,qBAAqB;EAC3E,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIJ,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,IAAI,CAAC,aACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,wBAAwB,cAAc,YAAY,CAAC;GAE7F,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,IAAI,gBAAyC,CAAC;GAC9C,IAAI,YAAY,iBAAiB;IAC/B,MAAM,gBAAgB,MAAM,iBAAiB,WAAW,YAAY,eAAe;IACnF,IAAI,eACF,gBAAgBI,wCAAAA,yBACd,eACA,sBACF;GAEJ;GAEA,MAAM,gBAAgB,MAAM,iBAAiB,iBAAiB,aAAa;GAG3E,IAAI,CAAC,YAAY,mBAAmB,eAClC,gBAAgBA,wCAAAA,yBACd,eACA,sBACF;GAEF,MAAM,iBAAiB,gBACnBA,wCAAAA,yBAAyB,eAAqD,sBAAsB,IACpG;GAEJ,MAAM,gBAAgBC,wCAAAA,uBAAuB,gBAAgB,aAAa;GAE1E,MAAM,EAAE,cAAc,MAAMC,wCAAAA,uBAC1B,kBACA,eACA,WACA,eACA,eACA,EAAE,cAAc,CAClB;GAEA,MAAM,UAAU,MAAM,iBAAiB,WAAW,SAAS;GAC3D,IAAI,CAAC,SACH,MAAM,IAAIP,uBAAAA,cAAc,KAAK,EAAE,SAAS,qCAAqC,CAAC;GAGhF,MAAMQ,wCAAAA,sBACJ,kBACA,eACA,WACA,YAAY,eACd;GAEA,OAAO;EACT,SAAS,OAAO;GACd,OAAON,8BAAAA,YAAY,OAAO,qCAAqC;EACjE;CACF;AACF,CAAC;;;;AAKD,MAAa,iCAAiCN,sBAAAA,YAAY;CACxD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBa,8BAAAA;CACjB,gBAAgBC,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,WAAW,qBAAqB;EACvE,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIV,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,UAAU,MAAM,iBAAiB,WAAW,SAAS;GAE3D,IAAI,CAAC,SACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,UAAU,YAAY,CAAC;GAGpF,IAAI,QAAQ,YAAY,eACtB,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,UAAU,8BAA8B,gBACtE,CAAC;GAEH,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,OAAO;EACT,SAAS,OAAO;GACd,OAAOC,8BAAAA,YAAY,OAAO,oCAAoC;EAChE;CACF;AACF,CAAC;;;;AAKD,MAAa,sCAAsCN,sBAAAA,YAAY;CAC7D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBa,8BAAAA;CACjB,gBAAgBE,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,WAAW,qBAAqB;EACvE,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIX,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,IAAI,CAAC,aACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,wBAAwB,cAAc,YAAY,CAAC;GAE7F,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,MAAM,UAAU,MAAM,iBAAiB,WAAW,SAAS;GAC3D,IAAI,CAAC,SACH,MAAM,IAAID,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,UAAU,YAAY,CAAC;GAEpF,IAAI,QAAQ,YAAY,eACtB,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,UAAU,8BAA8B,gBACtE,CAAC;GAGH,MAAM,iBAAiB,OAAO;IAC5B,IAAI;IACJ,iBAAiB;IACjB,QAAQ;GACV,CAAC;GAGD,OAAO,UAAU,CAAC,EAAE,OAAO,WAAW,aAAa;GAEnD,OAAO;IACL,SAAS;IACT,SAAS,WAAW,QAAQ,cAAc;IAC1C,iBAAiB;GACnB;EACF,SAAS,OAAO;GACd,OAAOE,8BAAAA,YAAY,OAAO,uCAAuC;EACnE;CACF;AACF,CAAC;;;;AAKD,MAAa,qCAAqCN,sBAAAA,YAAY;CAC5D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBa,8BAAAA;CACjB,gBAAgBG,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,WAAW,qBAAqB;EACvE,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIZ,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,IAAI,CAAC,aACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,wBAAwB,cAAc,YAAY,CAAC;GAE7F,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,MAAM,mBAAmB,MAAM,iBAAiB,WAAW,SAAS;GACpE,IAAI,CAAC,kBACH,MAAM,IAAID,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,UAAU,YAAY,CAAC;GAEpF,IAAI,iBAAiB,YAAY,eAC/B,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,UAAU,8BAA8B,gBACtE,CAAC;GAGH,MAAM,iBAAiBK,wCAAAA,yBACrB,kBACA,sBACF;GAEA,MAAM,iBAAiB,OAAO;IAC5B,IAAI;IACJ,GAAG;GACL,CAAC;GAED,MAAM,gBAAgB,MAAM,iBAAiB,iBAAiB,aAAa;GAC3E,MAAM,iBAAiB,gBACnBA,wCAAAA,yBAAyB,eAAqD,sBAAsB,IACpG;GAEJ,MAAM,gBAAgBC,wCAAAA,uBAAuB,gBAAgB,cAAc;GAE3E,MAAM,EAAE,WAAW,iBAAiB,MAAMC,wCAAAA,uBACxC,kBACA,eACA,WACA,gBACA,eACA,EACE,eAAe,yBAAyB,iBAAiB,gBAC3D,CACF;GAEA,MAAM,aAAa,MAAM,iBAAiB,WAAW,YAAY;GACjE,IAAI,CAAC,YACH,MAAM,IAAIP,uBAAAA,cAAc,KAAK,EAAE,SAAS,qCAAqC,CAAC;GAGhF,MAAMQ,wCAAAA,sBACJ,kBACA,eACA,WACA,YAAY,eACd;GAGA,OAAO,UAAU,CAAC,EAAE,OAAO,WAAW,aAAa;GAEnD,OAAO;EACT,SAAS,OAAO;GACd,OAAON,8BAAAA,YAAY,OAAO,sCAAsC;EAClE;CACF;AACF,CAAC;;;;AAKD,MAAa,oCAAoCN,sBAAAA,YAAY;CAC3D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBa,8BAAAA;CACjB,gBAAgBI,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,WAAW,qBAAqB;EACvE,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIb,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAG3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,IAAI,CAAC,aACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,wBAAwB,cAAc,YAAY,CAAC;GAE7F,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,MAAM,UAAU,MAAM,iBAAiB,WAAW,SAAS;GAC3D,IAAI,CAAC,SACH,MAAM,IAAID,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,UAAU,YAAY,CAAC;GAEpF,IAAI,QAAQ,YAAY,eACtB,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,UAAU,8BAA8B,gBACtE,CAAC;GAGH,IAAI,YAAY,oBAAoB,WAClC,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,wEACX,CAAC;GAGH,MAAM,iBAAiB,cAAc,SAAS;GAG9C,OAAO,UAAU,CAAC,EAAE,OAAO,WAAW,aAAa;GAEnD,OAAO;IACL,SAAS;IACT,SAAS,WAAW,QAAQ,cAAc;GAC5C;EACF,SAAS,OAAO;GACd,OAAOE,8BAAAA,YAAY,OAAO,qCAAqC;EACjE;CACF;AACF,CAAC;;;;AAKD,MAAa,sCAAsCN,sBAAAA,YAAY;CAC7D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,iBAAiBC,8BAAAA;CACjB,kBAAkBiB,8BAAAA;CAClB,gBAAgBC,8BAAAA;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,uBAAuB;CAC9B,SAAS,OAAO,EAAE,QAAQ,eAAe,MAAM,IAAI,qBAAqB;EACtE,IAAI;GACF,MAAM,UAAU,OAAO,WAAW;GAElC,IAAI,CAAC,SACH,MAAM,IAAIf,uBAAAA,cAAc,KAAK,EAAE,SAAS,4BAA4B,CAAC;GAGvE,MAAM,mBAAmB,MAAM,QAAQ,SAAS,cAAc;GAC9D,IAAI,CAAC,kBACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,gDAAgD,CAAC;GAE3F,MAAM,cAAc,MAAM,iBAAiB,QAAQ,aAAa;GAChE,cAAA,0BAA0B,aAAa,MAAMC,cAAAA,uBAAuB,QAAQ,cAAc,CAAC;GAE3F,MAAM,cAAc,MAAM,iBAAiB,WAAW,IAAI;GAC1D,IAAI,CAAC,aACH,MAAM,IAAID,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,KAAK,YAAY,CAAC;GAE/E,IAAI,YAAY,YAAY,eAC1B,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,KAAK,8BAA8B,gBACjE,CAAC;GAGH,MAAM,YAAY,MAAM,iBAAiB,WAAW,EAAE;GACtD,IAAI,CAAC,WACH,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAAE,SAAS,mBAAmB,GAAG,YAAY,CAAC;GAE7E,IAAI,UAAU,YAAY,eACxB,MAAM,IAAIA,uBAAAA,cAAc,KAAK,EAC3B,SAAS,mBAAmB,GAAG,8BAA8B,gBAC/D,CAAC;GAGH,MAAM,aAAaK,wCAAAA,yBACjB,aACA,sBACF;GACA,MAAM,WAAWA,wCAAAA,yBACf,WACA,sBACF;GAIA,OAAO;IACL,OAHYW,wCAAAA,oBAAoB,YAAY,QAGxC;IACJ;IACA;GACF;EACF,SAAS,OAAO;GACd,OAAOd,8BAAAA,YAAY,OAAO,uCAAuC;EACnE;CACF;AACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
2
|
-
import { n as createRoute } from "../../route-builder-
|
|
3
|
-
import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-
|
|
2
|
+
import { n as createRoute } from "../../route-builder-CjkWxv4E.js";
|
|
3
|
+
import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-aoLN3Wfi.js";
|
|
4
4
|
import { handleError } from "./error.js";
|
|
5
5
|
import { calculateChangedFields, computeVersionDiffs, createVersionWithRetry, enforceRetentionLimit, extractConfigFromVersion } from "./version-helpers.js";
|
|
6
6
|
import { a as createPromptBlockVersionResponseSchema, c as listPromptBlockVersionsQuerySchema, d as promptBlockVersionPathParams, i as createPromptBlockVersionBodySchema, l as listPromptBlockVersionsResponseSchema, n as comparePromptBlockVersionsQuerySchema, o as deletePromptBlockVersionResponseSchema, p as restorePromptBlockVersionResponseSchema, r as comparePromptBlockVersionsResponseSchema, s as getPromptBlockVersionResponseSchema, t as activatePromptBlockVersionResponseSchema, u as promptBlockVersionIdPathParams } from "../../prompt-block-versions-cfq_e1Zi.js";
|
|
@@ -75,7 +75,8 @@ const CREATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({
|
|
|
75
75
|
}
|
|
76
76
|
const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);
|
|
77
77
|
if (!promptBlock.activeVersionId && latestVersion) currentConfig = extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
78
|
-
const
|
|
78
|
+
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
|
|
79
|
+
const changedFields = calculateChangedFields(previousConfig, currentConfig);
|
|
79
80
|
const { versionId } = await createVersionWithRetry(promptBlockStore, promptBlockId, "blockId", currentConfig, changedFields, { changeMessage });
|
|
80
81
|
const version = await promptBlockStore.getVersion(versionId);
|
|
81
82
|
if (!version) throw new HTTPException(500, { message: "Failed to retrieve created version" });
|
|
@@ -108,7 +109,8 @@ const GET_PROMPT_BLOCK_VERSION_ROUTE = createRoute({
|
|
|
108
109
|
const version = await promptBlockStore.getVersion(versionId);
|
|
109
110
|
if (!version) throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
|
|
110
111
|
if (version.blockId !== promptBlockId) throw new HTTPException(404, { message: `Version with id ${versionId} not found for prompt block ${promptBlockId}` });
|
|
111
|
-
|
|
112
|
+
const promptBlock = await promptBlockStore.getById(promptBlockId);
|
|
113
|
+
assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));
|
|
112
114
|
return version;
|
|
113
115
|
} catch (error) {
|
|
114
116
|
return handleError(error, "Error getting prompt block version");
|
|
@@ -187,7 +189,9 @@ const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({
|
|
|
187
189
|
...restoredConfig
|
|
188
190
|
});
|
|
189
191
|
const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);
|
|
190
|
-
const
|
|
192
|
+
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
|
|
193
|
+
const changedFields = calculateChangedFields(previousConfig, restoredConfig);
|
|
194
|
+
const { versionId: newVersionId } = await createVersionWithRetry(promptBlockStore, promptBlockId, "blockId", restoredConfig, changedFields, { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
|
|
191
195
|
const newVersion = await promptBlockStore.getVersion(newVersionId);
|
|
192
196
|
if (!newVersion) throw new HTTPException(500, { message: "Failed to retrieve created version" });
|
|
193
197
|
await enforceRetentionLimit(promptBlockStore, promptBlockId, "blockId", promptBlock.activeVersionId);
|
|
@@ -255,15 +259,18 @@ const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({
|
|
|
255
259
|
if (!storage) throw new HTTPException(500, { message: "Storage is not configured" });
|
|
256
260
|
const promptBlockStore = await storage.getStore("promptBlocks");
|
|
257
261
|
if (!promptBlockStore) throw new HTTPException(500, { message: "Prompt blocks storage domain is not available" });
|
|
258
|
-
|
|
262
|
+
const promptBlock = await promptBlockStore.getById(promptBlockId);
|
|
263
|
+
assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));
|
|
259
264
|
const fromVersion = await promptBlockStore.getVersion(from);
|
|
260
265
|
if (!fromVersion) throw new HTTPException(404, { message: `Version with id ${from} not found` });
|
|
261
266
|
if (fromVersion.blockId !== promptBlockId) throw new HTTPException(404, { message: `Version with id ${from} not found for prompt block ${promptBlockId}` });
|
|
262
267
|
const toVersion = await promptBlockStore.getVersion(to);
|
|
263
268
|
if (!toVersion) throw new HTTPException(404, { message: `Version with id ${to} not found` });
|
|
264
269
|
if (toVersion.blockId !== promptBlockId) throw new HTTPException(404, { message: `Version with id ${to} not found for prompt block ${promptBlockId}` });
|
|
270
|
+
const fromConfig = extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
271
|
+
const toConfig = extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS);
|
|
265
272
|
return {
|
|
266
|
-
diffs: computeVersionDiffs(
|
|
273
|
+
diffs: computeVersionDiffs(fromConfig, toConfig),
|
|
267
274
|
fromVersion,
|
|
268
275
|
toVersion
|
|
269
276
|
};
|