@mastra/server 1.60.0-alpha.9 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +133 -0
- package/dist/{a2a-Eeib3vfP.cjs → a2a-BtXFFv-0.cjs} +4 -4
- package/dist/{a2a-Eeib3vfP.cjs.map → a2a-BtXFFv-0.cjs.map} +1 -1
- package/dist/{a2a-B5m54dOP.js → a2a-DZhtQeFL.js} +3 -3
- package/dist/{a2a-B5m54dOP.js.map → a2a-DZhtQeFL.js.map} +1 -1
- package/dist/{agent-versions-xeysPGel.cjs → agent-versions-MYjO6Wl1.cjs} +2 -2
- package/dist/{agent-versions-xeysPGel.cjs.map → agent-versions-MYjO6Wl1.cjs.map} +1 -1
- package/dist/{agent-versions-CWEnD62A.js → agent-versions-mFXaw5ma.js} +2 -2
- package/dist/{agent-versions-CWEnD62A.js.map → agent-versions-mFXaw5ma.js.map} +1 -1
- package/dist/{api-schema-manifest-BKTXRheC.js → api-schema-manifest-Bx_zU5qw.js} +2 -2
- package/dist/{api-schema-manifest-BKTXRheC.js.map → api-schema-manifest-Bx_zU5qw.js.map} +1 -1
- package/dist/{api-schema-manifest-BbNdh5Ck.cjs → api-schema-manifest-DPgfugJT.cjs} +4 -3
- package/dist/{api-schema-manifest-BbNdh5Ck.cjs.map → api-schema-manifest-DPgfugJT.cjs.map} +1 -1
- package/dist/{background-tasks-C5G2jJax.cjs → background-tasks-8M9W_27g.cjs} +2 -2
- package/dist/{background-tasks-C5G2jJax.cjs.map → background-tasks-8M9W_27g.cjs.map} +1 -1
- package/dist/{builder-registry-CyaUg_iP.cjs → builder-registry-Dcd_ApmT.cjs} +3 -3
- package/dist/{builder-registry-CyaUg_iP.cjs.map → builder-registry-Dcd_ApmT.cjs.map} +1 -1
- package/dist/{builder-registry-CqLsr39q.js → builder-registry-DnEa4qnF.js} +2 -2
- package/dist/{builder-registry-CqLsr39q.js.map → builder-registry-DnEa4qnF.js.map} +1 -1
- package/dist/{channels-BnFQESMf.js → channels-BO3Zd38V.js} +2 -2
- package/dist/{channels-BnFQESMf.js.map → channels-BO3Zd38V.js.map} +1 -1
- package/dist/{channels-Dzy6VM3w.cjs → channels-D9WRnKzU.cjs} +3 -3
- package/dist/{channels-Dzy6VM3w.cjs.map → channels-D9WRnKzU.cjs.map} +1 -1
- package/dist/{constants-CutMu4A_.js → constants-0jFCWoex.js} +13 -2
- package/dist/constants-0jFCWoex.js.map +1 -0
- package/dist/{constants-CXPpy-Ef.cjs → constants-4IJp_uzj.cjs} +18 -1
- package/dist/constants-4IJp_uzj.cjs.map +1 -0
- package/dist/{conversations-CcFLCCeF.cjs → conversations-PF0eKhIu.cjs} +3 -3
- package/dist/{conversations-CcFLCCeF.cjs.map → conversations-PF0eKhIu.cjs.map} +1 -1
- package/dist/{dist-CAVC0nWG.cjs → dist-2zVeGGHi.cjs} +3 -2
- package/dist/{dist-CAVC0nWG.cjs.map → dist-2zVeGGHi.cjs.map} +1 -1
- package/dist/{dist-D7GkGue6.cjs → dist-8-Z5v77M.cjs} +3 -2
- package/dist/{dist-D7GkGue6.cjs.map → dist-8-Z5v77M.cjs.map} +1 -1
- package/dist/{dist-SKhVwZMV.cjs → dist-Be7Caz3Z.cjs} +3 -2
- package/dist/{dist-SKhVwZMV.cjs.map → dist-Be7Caz3Z.cjs.map} +1 -1
- package/dist/{dist-18h28zlO.cjs → dist-BfVTO0pC.cjs} +3 -2
- package/dist/{dist-18h28zlO.cjs.map → dist-BfVTO0pC.cjs.map} +1 -1
- package/dist/{dist-BD0I5lxM.js → dist-CHJcZQdS.js} +2 -2
- package/dist/{dist-BD0I5lxM.js.map → dist-CHJcZQdS.js.map} +1 -1
- package/dist/{dist-BpRGQqjE.cjs → dist-CJKQBH69.cjs} +2 -2
- package/dist/{dist-BpRGQqjE.cjs.map → dist-CJKQBH69.cjs.map} +1 -1
- package/dist/{dist-sUhxlnJz.js → dist-CRgxcDTg.js} +2 -2
- package/dist/{dist-sUhxlnJz.js.map → dist-CRgxcDTg.js.map} +1 -1
- package/dist/{dist-JdnTASYe.js → dist-CscF1cF8.js} +2 -2
- package/dist/{dist-JdnTASYe.js.map → dist-CscF1cF8.js.map} +1 -1
- package/dist/{dist-DNaReo7-.js → dist-Cw-T1gX6.js} +2754 -304
- package/dist/dist-Cw-T1gX6.js.map +1 -0
- package/dist/{dist-DBP9kw_8.cjs → dist-D4NzuG3G.cjs} +3 -2
- package/dist/{dist-DBP9kw_8.cjs.map → dist-D4NzuG3G.cjs.map} +1 -1
- package/dist/{dist-C2O8fRb-.cjs → dist-DERatX43.cjs} +2755 -305
- package/dist/dist-DERatX43.cjs.map +1 -0
- package/dist/{dist-mcwHCl2a.js → dist-F_Ql1co6.js} +2 -2
- package/dist/{dist-mcwHCl2a.js.map → dist-F_Ql1co6.js.map} +1 -1
- package/dist/{dist-C-9xUY65.js → dist-Jn3uXsoB.js} +2 -2
- package/dist/{dist-C-9xUY65.js.map → dist-Jn3uXsoB.js.map} +1 -1
- package/dist/{dist-DyBO3IVt.js → dist-bAFqx06T.js} +2 -2
- package/dist/{dist-DyBO3IVt.js.map → dist-bAFqx06T.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{dynamic-workflows-C-6vmau5.cjs → dynamic-workflows-BZ5ru36x.cjs} +3 -3
- package/dist/{dynamic-workflows-C-6vmau5.cjs.map → dynamic-workflows-BZ5ru36x.cjs.map} +1 -1
- package/dist/{dynamic-workflows-B0TE8mjA.js → dynamic-workflows-C6U0Rdoc.js} +2 -2
- package/dist/{dynamic-workflows-B0TE8mjA.js.map → dynamic-workflows-C6U0Rdoc.js.map} +1 -1
- package/dist/{editor-builder-1L3OIY4K.cjs → editor-builder-BmRQift0.cjs} +2 -2
- package/dist/{editor-builder-1L3OIY4K.cjs.map → editor-builder-BmRQift0.cjs.map} +1 -1
- package/dist/{helpers-C54OMiDG.cjs → helpers-BWxRRShz.cjs} +2 -2
- package/dist/{helpers-C54OMiDG.cjs.map → helpers-BWxRRShz.cjs.map} +1 -1
- package/dist/{helpers-Da9nPOFL.js → helpers-DBAYsA50.js} +2 -2
- package/dist/{helpers-Da9nPOFL.js.map → helpers-DBAYsA50.js.map} +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/{observability-new-endpoints-BC-dasRY.cjs → observability-new-endpoints-gRCFhnRr.cjs} +2 -2
- package/dist/{observability-new-endpoints-BC-dasRY.cjs.map → observability-new-endpoints-gRCFhnRr.cjs.map} +1 -1
- package/dist/{probe-image-size-C2F59z8Z.cjs → probe-image-size-CDCRrXNo.cjs} +140 -33
- package/dist/probe-image-size-CDCRrXNo.cjs.map +1 -0
- package/dist/{probe-image-size-mXCWYNrz.js → probe-image-size-Tf8sNZhU.js} +137 -33
- package/dist/probe-image-size-Tf8sNZhU.js.map +1 -0
- package/dist/{responses-BI25doe1.cjs → responses-CKNdSRkS.cjs} +2 -2
- package/dist/{responses-BI25doe1.cjs.map → responses-CKNdSRkS.cjs.map} +1 -1
- package/dist/{rolldown-runtime-CVvi-lCc.cjs → rolldown-runtime-Bd6kNlEP.cjs} +21 -0
- package/dist/{rolldown-runtime-DuvcJU0W.js → rolldown-runtime-maW3aOIk.js} +10 -1
- package/dist/{route-builder-BAAedfru.cjs → route-builder-CWsok5ci.cjs} +2 -2
- package/dist/{route-builder-BAAedfru.cjs.map → route-builder-CWsok5ci.cjs.map} +1 -1
- package/dist/{routes-iUe0w9eL.js → routes-Bh2p-WqG.js} +5 -5
- package/dist/{routes-iUe0w9eL.js.map → routes-Bh2p-WqG.js.map} +1 -1
- package/dist/{routes-mK_LlDMo.cjs → routes-CdbboDwv.cjs} +10 -10
- package/dist/{routes-mK_LlDMo.cjs.map → routes-CdbboDwv.cjs.map} +1 -1
- package/dist/{schedules-DOK225ZZ.cjs → schedules-7YUg_TRM.cjs} +2 -2
- package/dist/{schedules-DOK225ZZ.cjs.map → schedules-7YUg_TRM.cjs.map} +1 -1
- package/dist/{schema-Bv9OdW1f-CHHI-NTr.cjs → schema-Bv9OdW1f-CxTiW8RD.cjs} +2 -2
- package/dist/{schema-Bv9OdW1f-CHHI-NTr.cjs.map → schema-Bv9OdW1f-CxTiW8RD.cjs.map} +1 -1
- package/dist/schema-CNKnRmv1.cjs +1 -0
- package/dist/{scorer-versions-CdVjOtQO.js → scorer-versions-D0_KP67E.js} +2 -2
- package/dist/{scorer-versions-CdVjOtQO.js.map → scorer-versions-D0_KP67E.js.map} +1 -1
- package/dist/{scorer-versions-CYXtxMTU.cjs → scorer-versions-mL--H4LL.cjs} +2 -2
- package/dist/{scorer-versions-CYXtxMTU.cjs.map → scorer-versions-mL--H4LL.cjs.map} +1 -1
- package/dist/server/a2a/store.cjs +1 -0
- package/dist/server/a2a/store.cjs.map +1 -1
- package/dist/server/auth/index.cjs +3 -2
- package/dist/server/auth/index.js +2 -2
- package/dist/server/browser-stream/index.cjs +1 -0
- package/dist/server/browser-stream/index.cjs.map +1 -1
- package/dist/server/constants.d.ts +11 -0
- package/dist/server/constants.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +2 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +4 -4
- package/dist/server/handlers/agent-builder.js +3 -3
- package/dist/server/handlers/agent-controller.cjs +53 -36
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.d.ts +22 -2
- package/dist/server/handlers/agent-controller.d.ts.map +1 -1
- package/dist/server/handlers/agent-controller.js +51 -35
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/agent-versions.cjs +4 -3
- package/dist/server/handlers/agent-versions.cjs.map +1 -1
- package/dist/server/handlers/agent-versions.js +2 -2
- package/dist/server/handlers/agents.cjs +8 -8
- package/dist/server/handlers/agents.d.ts +8 -0
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +5 -5
- package/dist/server/handlers/auth.cjs +16 -7
- package/dist/server/handlers/auth.cjs.map +1 -1
- package/dist/server/handlers/auth.d.ts +10 -4
- package/dist/server/handlers/auth.d.ts.map +1 -1
- package/dist/server/handlers/auth.js +14 -6
- package/dist/server/handlers/auth.js.map +1 -1
- package/dist/server/handlers/author-enrichment.cjs +1 -0
- package/dist/server/handlers/author-enrichment.cjs.map +1 -1
- package/dist/server/handlers/authorship.cjs +2 -1
- package/dist/server/handlers/authorship.cjs.map +1 -1
- package/dist/server/handlers/authorship.js +1 -1
- package/dist/server/handlers/background-tasks.cjs +2 -1
- package/dist/server/handlers/builder-registry.cjs +2 -1
- package/dist/server/handlers/builder-registry.js +1 -1
- package/dist/server/handlers/channels.cjs +2 -1
- package/dist/server/handlers/channels.js +1 -1
- package/dist/server/handlers/conversations.cjs +4 -4
- package/dist/server/handlers/conversations.js +2 -2
- package/dist/server/handlers/datasets.cjs +3 -2
- package/dist/server/handlers/datasets.cjs.map +1 -1
- package/dist/server/handlers/datasets.d.ts +6 -6
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/dynamic-workflows.cjs +2 -1
- package/dist/server/handlers/dynamic-workflows.js +1 -1
- package/dist/server/handlers/editor-builder.cjs +2 -1
- package/dist/server/handlers/error.cjs +1 -0
- package/dist/server/handlers/error.cjs.map +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +2 -1
- package/dist/server/handlers/favorites-enrichment.cjs.map +1 -1
- package/dist/server/handlers/gateway-memory-client.cjs +1 -0
- package/dist/server/handlers/gateway-memory-client.cjs.map +1 -1
- package/dist/server/handlers/logs.cjs +3 -3
- package/dist/server/handlers/logs.js +2 -2
- package/dist/server/handlers/mcp-client-versions.cjs +3 -2
- package/dist/server/handlers/mcp-client-versions.cjs.map +1 -1
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/mcp.cjs +2 -2
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +3 -3
- package/dist/server/handlers/memory.js +2 -2
- package/dist/server/handlers/observability-list-query-schemas.cjs +1 -0
- package/dist/server/handlers/observability-list-query-schemas.cjs.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +2 -1
- package/dist/server/handlers/observability-shared.cjs +2 -1
- package/dist/server/handlers/observability-shared.cjs.map +1 -1
- package/dist/server/handlers/observability-storage-schemas.cjs +1 -1
- package/dist/server/handlers/observability.cjs +8 -5
- package/dist/server/handlers/observability.cjs.map +1 -1
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +7 -4
- package/dist/server/handlers/observability.js.map +1 -1
- package/dist/server/handlers/plans.cjs +3 -3
- package/dist/server/handlers/plans.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +2 -1
- package/dist/server/handlers/processor-providers.cjs.map +1 -1
- package/dist/server/handlers/processors.cjs +2 -1
- package/dist/server/handlers/processors.cjs.map +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +3 -2
- package/dist/server/handlers/prompt-block-versions.cjs.map +1 -1
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/responses.adapter.cjs +1 -0
- package/dist/server/handlers/responses.adapter.cjs.map +1 -1
- package/dist/server/handlers/responses.cjs +4 -4
- package/dist/server/handlers/responses.js +2 -2
- package/dist/server/handlers/responses.storage.cjs +2 -1
- package/dist/server/handlers/responses.storage.cjs.map +1 -1
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/schedules-workflows-shim.cjs +1 -1
- package/dist/server/handlers/schedules.cjs +2 -1
- package/dist/server/handlers/scorer-versions.cjs +4 -3
- package/dist/server/handlers/scorer-versions.cjs.map +1 -1
- package/dist/server/handlers/scorer-versions.js +2 -2
- package/dist/server/handlers/scores.cjs +2 -2
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/skills-sh-shared.cjs +1 -0
- package/dist/server/handlers/skills-sh-shared.cjs.map +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +5 -4
- package/dist/server/handlers/stored-agent-favorites.cjs.map +1 -1
- package/dist/server/handlers/stored-agent-favorites.js +2 -2
- package/dist/server/handlers/stored-agents.cjs +7 -5
- package/dist/server/handlers/stored-agents.cjs.map +1 -1
- package/dist/server/handlers/stored-agents.d.ts +32 -0
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +4 -3
- package/dist/server/handlers/stored-agents.js.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +3 -2
- package/dist/server/handlers/stored-mcp-clients.cjs.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +3 -2
- package/dist/server/handlers/stored-prompt-blocks.cjs.map +1 -1
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +4 -3
- package/dist/server/handlers/stored-scorers.cjs.map +1 -1
- package/dist/server/handlers/stored-scorers.js +2 -2
- package/dist/server/handlers/stored-skill-favorites.cjs +4 -3
- package/dist/server/handlers/stored-skill-favorites.cjs.map +1 -1
- package/dist/server/handlers/stored-skill-favorites.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +4 -3
- package/dist/server/handlers/stored-skills.cjs.map +1 -1
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +3 -2
- package/dist/server/handlers/stored-workspaces.cjs.map +1 -1
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/system.cjs +3 -2
- package/dist/server/handlers/system.cjs.map +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/test-utils.cjs +1 -0
- package/dist/server/handlers/test-utils.cjs.map +1 -1
- package/dist/server/handlers/tool-providers.cjs +3 -2
- package/dist/server/handlers/tool-providers.cjs.map +1 -1
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tool-schema-overrides.cjs +1 -0
- package/dist/server/handlers/tool-schema-overrides.cjs.map +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +3 -3
- package/dist/server/handlers/utils.cjs +2 -1
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/validate-agent-instructions.cjs +2 -1
- package/dist/server/handlers/validate-agent-instructions.cjs.map +1 -1
- package/dist/server/handlers/validate-agent-instructions.js +1 -1
- package/dist/server/handlers/validate-avatar.cjs +1 -0
- package/dist/server/handlers/validate-avatar.cjs.map +1 -1
- package/dist/server/handlers/vector.cjs +2 -2
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/version-helpers.cjs +1 -0
- package/dist/server/handlers/version-helpers.cjs.map +1 -1
- package/dist/server/handlers/voice.cjs +1 -1
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +4 -4
- package/dist/server/handlers/workflows.js +3 -3
- package/dist/server/handlers/workspace.cjs +2 -2
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +3 -2
- package/dist/server/handlers.js +2 -2
- package/dist/server/schemas/datasets.d.ts +3 -3
- package/dist/server/schemas/index.cjs +7 -6
- package/dist/server/schemas/index.js +4 -4
- package/dist/server/schemas/stored-agents.d.ts +40 -7
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +6 -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/routes/datasets.d.ts +6 -6
- package/dist/{stored-agents-CPxfYRH9.cjs → stored-agents-D6JEb3zN.cjs} +15 -3
- package/dist/stored-agents-D6JEb3zN.cjs.map +1 -0
- package/dist/{stored-agents-BRBZM-Xl.js → stored-agents-DMW5wrF7.js} +15 -3
- package/dist/stored-agents-DMW5wrF7.js.map +1 -0
- package/dist/{stored-scorers-B__LF0Cy.js → stored-scorers-BA4suzgn.js} +2 -2
- package/dist/{stored-scorers-B__LF0Cy.js.map → stored-scorers-BA4suzgn.js.map} +1 -1
- package/dist/{stored-scorers-Cml7jPJv.cjs → stored-scorers-D8IwVM0S.cjs} +2 -2
- package/dist/{stored-scorers-Cml7jPJv.cjs.map → stored-scorers-D8IwVM0S.cjs.map} +1 -1
- package/dist/{sync-djJ8Lmds.js → sync-BG15Yae1.js} +22 -22
- package/dist/{sync-djJ8Lmds.js.map → sync-BG15Yae1.js.map} +1 -1
- package/dist/{sync-BHatXKfg.cjs → sync-C4LbbSKR.cjs} +22 -22
- package/dist/{sync-BHatXKfg.cjs.map → sync-C4LbbSKR.cjs.map} +1 -1
- package/dist/{utils-CljhO7OY.js → utils-B2vd77Fi.js} +2 -2
- package/dist/{utils-CljhO7OY.js.map → utils-B2vd77Fi.js.map} +1 -1
- package/dist/{utils-BkPZAGxS.cjs → utils-CmYnjLcY.cjs} +4 -4
- package/dist/{utils-BkPZAGxS.cjs.map → utils-CmYnjLcY.cjs.map} +1 -1
- package/dist/{utils-CXbhpYYv.cjs → utils-DJMUhfvY.cjs} +3 -3
- package/dist/{utils-CXbhpYYv.cjs.map → utils-DJMUhfvY.cjs.map} +1 -1
- package/dist/{utils-qMLbyf2U.js → utils-Hz8Hc2cd.js} +2 -2
- package/dist/{utils-qMLbyf2U.js.map → utils-Hz8Hc2cd.js.map} +1 -1
- package/package.json +9 -9
- package/dist/constants-CXPpy-Ef.cjs.map +0 -1
- package/dist/constants-CutMu4A_.js.map +0 -1
- package/dist/dist-C2O8fRb-.cjs.map +0 -1
- package/dist/dist-DNaReo7-.js.map +0 -1
- package/dist/probe-image-size-C2F59z8Z.cjs.map +0 -1
- package/dist/probe-image-size-mXCWYNrz.js.map +0 -1
- package/dist/schema-DkBbires.cjs +0 -1
- package/dist/stored-agents-BRBZM-Xl.js.map +0 -1
- package/dist/stored-agents-CPxfYRH9.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 = 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult';\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 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 (!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":["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 = 'input' | 'inputStep' | 'outputStream' | 'outputResult' | 'outputStep' | 'toolResult';\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 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 (!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,7 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
2
3
|
const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
|
|
3
|
-
const require_route_builder = require("../../route-builder-
|
|
4
|
-
const require_utils = require("../../utils-
|
|
4
|
+
const require_route_builder = require("../../route-builder-CWsok5ci.cjs");
|
|
5
|
+
const require_utils = require("../../utils-CmYnjLcY.cjs");
|
|
5
6
|
const require_server_handlers_error = require("./error.cjs");
|
|
6
7
|
const require_server_handlers_version_helpers = require("./version-helpers.cjs");
|
|
7
8
|
const require_prompt_block_versions = require("../../prompt-block-versions-Cgt_Grk2.cjs");
|
|
@@ -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":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
2
2
|
import { n as createRoute } from "../../route-builder-YQ_gLIvW.js";
|
|
3
|
-
import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-
|
|
3
|
+
import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-B2vd77Fi.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-CBjHhMVK.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
2
3
|
let _mastra_core_utils_zod_to_json = require("@mastra/core/utils/zod-to-json");
|
|
3
4
|
let _mastra_core_tools = require("@mastra/core/tools");
|
|
4
5
|
let crypto = require("crypto");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.adapter.cjs","names":[],"sources":["../../../src/server/handlers/responses.adapter.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { isProviderDefinedTool } from '@mastra/core/tools';\nimport { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';\nimport type {\n ConversationItem,\n ResponseInputMessage,\n ResponseObject,\n ResponseOutputItem,\n ResponseTextConfig,\n ResponseTool,\n} from '../schemas/responses';\nimport type { ProviderMetadataLike, ResponseTurnRecord, UsageLike } from './responses.storage';\n\nexport type ResponseExecutionMessage = {\n role: 'system' | 'user' | 'assistant';\n content: string;\n};\n\n/**\n * Flattens Responses API message content into the plain-text shape Mastra agent\n * execution expects today.\n */\nfunction normalizeMessageContent(content: ResponseInputMessage['content']): string {\n if (typeof content === 'string') {\n return content;\n }\n\n return content.map(part => part.text).join('');\n}\n\n/**\n * Extracts the human-readable text represented by a persisted Mastra message.\n */\nfunction getMessageText(message: MastraDBMessage): string {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n return parts\n .flatMap(part => (part.type === 'text' ? [part.text] : []))\n .filter((text): text is string => typeof text === 'string')\n .join('');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getMessageRole(message: MastraDBMessage): string {\n return (message as { role?: string }).role ?? '';\n}\n\n/**\n * Creates a stable fallback key for tool items when a tool call id is missing\n * from the stored message payload.\n */\nfunction getToolKey(toolCallId: string | null, messageId: string, partIndex: number) {\n return toolCallId ?? `${messageId}:${partIndex}`;\n}\n\nfunction getFunctionCallOutputItemId(toolCallId: string) {\n return `${toolCallId}:output`;\n}\n\n/**\n * Normalizes tool parameter schemas so the Responses API always exposes the\n * plain JSON Schema object regardless of whether the source tool came from a\n * provider-defined tool or a Mastra/Zod tool definition.\n */\nfunction normalizeToolParameters(schema: unknown): unknown {\n if (!isRecord(schema)) {\n return schema;\n }\n\n if (isRecord(schema.json) && Object.keys(schema).length === 1) {\n return schema.json;\n }\n\n return schema;\n}\n\n/**\n * Maps configured Mastra tools into Responses API tool definitions.\n */\nexport function mapMastraToolsToResponseTools(tools: Record<string, unknown> | undefined): ResponseTool[] {\n if (!tools) {\n return [];\n }\n\n return Object.values(tools).flatMap(tool => {\n if (!isRecord(tool)) {\n return [];\n }\n\n const name = typeof tool.id === 'string' ? tool.id : typeof tool.name === 'string' ? tool.name : null;\n if (!name) {\n return [];\n }\n\n const description = typeof tool.description === 'string' ? tool.description : undefined;\n\n let parameters: unknown;\n if (isProviderDefinedTool(tool)) {\n const resolvedSchema = typeof tool.inputSchema === 'function' ? tool.inputSchema() : tool.inputSchema;\n parameters =\n isRecord(resolvedSchema) && 'jsonSchema' in resolvedSchema\n ? normalizeToolParameters(resolvedSchema.jsonSchema)\n : undefined;\n } else if ('inputSchema' in tool && tool.inputSchema) {\n parameters = normalizeToolParameters(zodToJsonSchema(tool.inputSchema as never));\n }\n\n return [\n {\n type: 'function',\n name,\n ...(description ? { description } : {}),\n ...(parameters !== undefined ? { parameters: JSON.parse(JSON.stringify(parameters)) } : {}),\n } satisfies ResponseTool,\n ];\n });\n}\n\nfunction stringifyToolPayload(value: unknown) {\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value === undefined ? {} : value);\n}\n\nfunction stringifyToolArguments(value: unknown) {\n if (isRecord(value) && typeof value.__raw === 'string') {\n return value.__raw;\n }\n\n return stringifyToolPayload(value === null ? undefined : value);\n}\n\nfunction createOutputMessage({\n messageId,\n status,\n text,\n}: {\n messageId: string;\n status: ResponseObject['status'];\n text: string;\n}) {\n const responseStatus: Extract<ResponseObject['output'][number], { type: 'message' }>['status'] =\n status === 'completed' ? 'completed' : 'incomplete';\n\n return {\n id: messageId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: responseStatus,\n content: [createOutputTextPart(text)],\n };\n}\n\nfunction createConversationMessage({\n messageId,\n role,\n text,\n}: {\n messageId: string;\n role: 'system' | 'user' | 'assistant';\n text: string;\n}) {\n return {\n id: messageId,\n type: 'message' as const,\n role,\n status: 'completed' as const,\n content: [\n role === 'assistant'\n ? createOutputTextPart(text)\n : {\n type: 'input_text' as const,\n text,\n },\n ],\n };\n}\n\nfunction createFunctionCallItem({\n itemId,\n callId,\n name,\n args,\n}: {\n itemId: string;\n callId: string;\n name: string;\n args: unknown;\n}) {\n return {\n id: itemId,\n type: 'function_call' as const,\n call_id: callId,\n name,\n arguments: stringifyToolArguments(args),\n status: 'completed' as const,\n };\n}\n\nfunction createFunctionCallOutputItem({ itemId, callId, output }: { itemId: string; callId: string; output: unknown }) {\n return {\n id: itemId,\n type: 'function_call_output' as const,\n call_id: callId,\n output: stringifyToolPayload(output),\n };\n}\n\ntype ResponseToolItem = Extract<ConversationItem, { type: 'function_call' | 'function_call_output' }>;\n\n/**\n * Records which tool call ids already have dedicated tool-result messages so we can\n * avoid duplicating `function_call_output` items when assistant messages echo the\n * result inline.\n */\nfunction collectToolResultCallIds(messages: MastraDBMessage[]) {\n const toolResultCallIds = new Set<string>();\n\n for (const message of messages) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'tool' && toolInvocation.result !== undefined) {\n toolResultCallIds.add(toolCallId);\n }\n }\n }\n\n return toolResultCallIds;\n}\n\n/**\n * Maps one persisted Mastra message into the tool-related Responses items that\n * it contributes to the conversation timeline.\n */\nfunction mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n}: {\n message: MastraDBMessage;\n toolResultCallIds: Set<string>;\n emittedCallIds: Set<string>;\n emittedResultCallIds: Set<string>;\n}): ResponseToolItem[] {\n const items: ResponseToolItem[] = [];\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolName = typeof toolInvocation.toolName === 'string' ? toolInvocation.toolName : null;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'assistant' && toolName && !emittedCallIds.has(toolCallId)) {\n items.push(\n createFunctionCallItem({\n itemId: toolCallId,\n callId: toolCallId,\n name: toolName,\n args: toolInvocation.args,\n }),\n );\n emittedCallIds.add(toolCallId);\n }\n\n if (\n toolInvocation.result !== undefined &&\n !emittedResultCallIds.has(toolCallId) &&\n (getMessageRole(message) === 'tool' || !toolResultCallIds.has(toolCallId))\n ) {\n items.push(\n createFunctionCallOutputItem({\n itemId: getFunctionCallOutputItemId(toolCallId),\n callId: toolCallId,\n output: toolInvocation.result,\n }),\n );\n emittedResultCallIds.add(toolCallId);\n }\n }\n\n return items;\n}\n\n/**\n * Maps Mastra thread messages into OpenAI-style conversation items.\n */\nexport function mapMastraMessagesToConversationItems(messages: MastraDBMessage[]): ConversationItem[] {\n if (!messages.length) {\n return [];\n }\n\n const items: ConversationItem[] = [];\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n\n for (const message of messages) {\n items.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const role = getMessageRole(message);\n const text = getMessageText(message);\n\n if ((role === 'user' || role === 'system' || role === 'assistant') && text) {\n items.push(\n createConversationMessage({\n messageId: message.id,\n role,\n text,\n }),\n );\n continue;\n }\n\n if (role === 'assistant' && !text) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n const hasOnlyToolInvocations = parts.every(\n part => isRecord(part) && part.type === 'tool-invocation' && isRecord(part.toolInvocation),\n );\n\n if (hasOnlyToolInvocations) {\n continue;\n }\n }\n\n if (role === 'tool') {\n continue;\n }\n }\n\n return items;\n}\n\nfunction mergeFallbackOutputItems({\n output,\n fallbackOutputItems,\n}: {\n output: ResponseOutputItem[];\n fallbackOutputItems: ResponseOutputItem[];\n}): ResponseOutputItem[] {\n if (!fallbackOutputItems.length) {\n return output;\n }\n\n const outputById = new Map(output.map(item => [item.id, item]));\n const fallbackIds = new Set(fallbackOutputItems.map(item => item.id));\n\n return [\n ...fallbackOutputItems.map(item => outputById.get(item.id) ?? item),\n ...output.filter(item => !fallbackIds.has(item.id)),\n ];\n}\n\nfunction getOutputMessageText(item: Extract<ResponseOutputItem, { type: 'message' }>): string {\n return item.content.map(part => part.text).join('');\n}\n\n/**\n * Maps the stored Mastra messages for one response turn back into OpenAI-style\n * `response.output` items, preserving tool/message ordering from the thread.\n */\nexport function mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText,\n fallbackOutputItems = [],\n}: {\n messages: MastraDBMessage[] | undefined;\n outputMessageId: string;\n status: ResponseObject['status'];\n fallbackText: string;\n fallbackOutputItems?: ResponseOutputItem[];\n}): ResponseOutputItem[] {\n if (!messages?.length) {\n if (fallbackOutputItems.length) {\n return fallbackOutputItems;\n }\n\n return [createOutputMessage({ messageId: outputMessageId, status, text: fallbackText })];\n }\n\n const output: ResponseOutputItem[] = [];\n const lastAssistantIndex = [...messages].map(message => message.role).lastIndexOf('assistant');\n const outputMessageIndex =\n [...messages]\n .map((message, index) => ({ index, message }))\n .reverse()\n .find(({ message }) => getMessageRole(message) === 'assistant' && getMessageText(message))?.index ??\n lastAssistantIndex;\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n const fallbackMessageItems = fallbackOutputItems.filter(\n (item): item is Extract<ResponseOutputItem, { type: 'message' }> => item.type === 'message',\n );\n const emittedFallbackMessageIds = new Set<string>();\n\n const getOutputMessageId = ({\n message,\n text,\n useOutputMessageId,\n }: {\n message: MastraDBMessage;\n text: string;\n useOutputMessageId: boolean;\n }) => {\n const directFallbackItem = fallbackMessageItems.find(item => item.id === message.id);\n if (directFallbackItem) {\n emittedFallbackMessageIds.add(directFallbackItem.id);\n return directFallbackItem.id;\n }\n\n if (useOutputMessageId) {\n const matchingFallbackItem = fallbackMessageItems.find(\n item =>\n item.id !== outputMessageId && !emittedFallbackMessageIds.has(item.id) && getOutputMessageText(item) === text,\n );\n if (matchingFallbackItem) {\n emittedFallbackMessageIds.add(matchingFallbackItem.id);\n return matchingFallbackItem.id;\n }\n }\n\n return useOutputMessageId ? outputMessageId : message.id;\n };\n\n for (const [messageIndex, message] of messages.entries()) {\n output.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const text = getMessageText(message);\n if (getMessageRole(message) === 'assistant' && text) {\n const useOutputMessageId = messageIndex === outputMessageIndex;\n output.push(\n createOutputMessage({\n messageId: getOutputMessageId({ message, text, useOutputMessageId }),\n status,\n text,\n }),\n );\n }\n }\n\n if (!output.some(item => item.type === 'message') && fallbackText) {\n output.push(createOutputMessage({ messageId: outputMessageId, status, text: fallbackText }));\n }\n\n return mergeFallbackOutputItems({ output, fallbackOutputItems });\n}\n\n/**\n * Creates a stable assistant-message-backed response identifier.\n */\nexport function createMessageId() {\n return `msg_${randomUUID()}`;\n}\n\n/**\n * Maps Responses API input into the plain execution messages Mastra agents expect.\n */\nexport function mapResponseInputToExecutionMessages(\n input: ResponseInputMessage[] | string,\n): ResponseExecutionMessage[] {\n if (typeof input === 'string') {\n return [{ role: 'user', content: input }];\n }\n\n return input.map(message => ({\n role: message.role === 'developer' ? 'system' : message.role,\n content: normalizeMessageContent(message.content),\n }));\n}\n\n/**\n * Converts usage details to the Responses API usage shape.\n */\nexport function toResponseUsage(usage: UsageLike): ResponseObject['usage'] {\n if (!usage) {\n return null;\n }\n\n const inputTokens = usage.inputTokens ?? usage.promptTokens ?? 0;\n const outputTokens = usage.outputTokens ?? usage.completionTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n\n return {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: totalTokens,\n input_tokens_details: {\n cached_tokens: 0,\n },\n output_tokens_details: {\n reasoning_tokens: 0,\n },\n };\n}\n\n/**\n * Maps model finish reasons onto the Responses API status field.\n */\nexport function toResponseStatus(finishReason: string | undefined): ResponseObject['status'] {\n if (finishReason === 'suspended' || finishReason === 'error') {\n return 'incomplete';\n }\n\n return 'completed';\n}\n\n/**\n * Formats a text response part using the OpenAI-compatible Responses shape.\n */\nexport function createOutputTextPart(text: string) {\n return {\n type: 'output_text' as const,\n text,\n annotations: [] as unknown[],\n logprobs: [] as unknown[],\n };\n}\n\n/**\n * Builds a completed Responses API object from Mastra execution state.\n */\nexport function buildCompletedResponse({\n responseId,\n outputMessageId,\n model,\n createdAt,\n completedAt,\n status,\n text,\n usage,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n providerOptions,\n tools,\n store,\n messages,\n fallbackOutputItems,\n}: {\n responseId: string;\n outputMessageId: string;\n model: string;\n createdAt: number;\n completedAt: number | null;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n providerOptions?: ProviderMetadataLike;\n tools: ResponseTool[];\n store: boolean;\n messages?: MastraDBMessage[];\n fallbackOutputItems?: ResponseOutputItem[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: completedAt,\n model,\n status,\n output: mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText: text,\n fallbackOutputItems,\n }),\n usage: toResponseUsage(usage),\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n providerOptions,\n tools,\n store,\n };\n}\n\n/**\n * Builds the initial in-progress Responses API object emitted at stream start.\n */\nexport function buildInProgressResponse({\n responseId,\n model,\n createdAt,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n tools,\n store,\n}: {\n responseId: string;\n model: string;\n createdAt: number;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n store: boolean;\n tools?: ResponseTool[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: null,\n model,\n status: 'in_progress',\n output: [],\n usage: null,\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n tools: tools ?? [],\n store,\n };\n}\n\n/**\n * Reconstructs a Responses API object from a stored response-turn record.\n */\nexport function mapResponseTurnRecordToResponse(match: ResponseTurnRecord): ResponseObject {\n return {\n id: match.message.id,\n object: 'response',\n created_at: match.metadata.createdAt,\n completed_at: match.metadata.completedAt,\n model: match.metadata.model,\n status: match.metadata.status,\n output: mapMastraMessagesToResponseOutputItems({\n messages: match.messages,\n outputMessageId: match.message.id,\n status: match.metadata.status,\n fallbackText: getMessageText(match.message),\n fallbackOutputItems: match.metadata.outputItems,\n }),\n usage: match.metadata.usage,\n error: null,\n incomplete_details: null,\n instructions: match.metadata.instructions ?? null,\n text: match.metadata.text ?? null,\n previous_response_id: match.metadata.previousResponseId ?? null,\n conversation_id: match.thread.id,\n providerOptions: match.metadata.providerOptions,\n tools: match.metadata.tools,\n store: match.metadata.store,\n };\n}\n\n/**\n * Formats an SSE event line for the streaming Responses route.\n */\nexport function formatSseEvent(event: string, data: unknown): Uint8Array {\n return new TextEncoder().encode(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n}\n\n/**\n * Extracts text deltas from the Mastra stream chunk variants used by the route.\n */\nexport function extractTextDelta(value: unknown): string | null {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return null;\n }\n\n const chunk = value as { type: string; payload?: { text?: string }; textDelta?: string; text?: string };\n\n switch (chunk.type) {\n case 'text-delta':\n if (typeof chunk.payload?.text === 'string') {\n return chunk.payload.text;\n }\n\n if (typeof chunk.textDelta === 'string') {\n return chunk.textDelta;\n }\n\n if (typeof chunk.text === 'string') {\n return chunk.text;\n }\n\n return null;\n default:\n return null;\n }\n}\n\ntype ResponseOutputItemAddedPayload = {\n type: 'response.output_item.added';\n output_index: number;\n item: ResponseOutputItem;\n};\n\ntype ResponseContentPartAddedPayload = {\n type: 'response.content_part.added';\n output_index: number;\n content_index: number;\n item_id: string;\n part: ReturnType<typeof createOutputTextPart>;\n};\n\ntype ResponseOutputTextDeltaPayload = {\n type: 'response.output_text.delta';\n output_index: number;\n content_index: number;\n item_id: string;\n delta: string;\n};\n\ntype ResponseFunctionCallArgumentsDeltaPayload = {\n type: 'response.function_call_arguments.delta';\n output_index: number;\n item_id: string;\n delta: string;\n};\n\ntype ResponseFunctionCallArgumentsDonePayload = {\n type: 'response.function_call_arguments.done';\n output_index: number;\n item_id: string;\n name: string;\n arguments: string;\n};\n\ntype ResponseOutputItemDonePayload = {\n type: 'response.output_item.done';\n output_index: number;\n item: ResponseOutputItem;\n};\n\ntype ResponseOutputTextDonePayload = {\n type: 'response.output_text.done';\n output_index: number;\n content_index: number;\n item_id: string;\n text: string;\n};\n\ntype ResponseContentPartDonePayload = {\n type: 'response.content_part.done';\n output_index: number;\n content_index: number;\n item_id: string;\n part: ReturnType<typeof createOutputTextPart>;\n};\n\ntype ResponseSsePayload =\n | ResponseOutputItemAddedPayload\n | ResponseContentPartAddedPayload\n | ResponseOutputTextDeltaPayload\n | ResponseFunctionCallArgumentsDeltaPayload\n | ResponseFunctionCallArgumentsDonePayload\n | ResponseOutputItemDonePayload\n | ResponseOutputTextDonePayload\n | ResponseContentPartDonePayload;\n\ntype ResponseSseEvent<TPayload extends ResponseSsePayload = ResponseSsePayload> = {\n event: TPayload['type'];\n payload: TPayload;\n};\n\nfunction createResponseSseEvent<TPayload extends ResponseSsePayload>(payload: TPayload): ResponseSseEvent<TPayload> {\n return { event: payload.type, payload };\n}\n\ntype ToolCallStreamState = {\n argumentsText: string;\n completed: boolean;\n itemId: string;\n name: string;\n outputIndex: number;\n zeroArgumentInputEnded: boolean;\n};\n\ntype ToolResultStreamState = {\n args: unknown;\n result: unknown;\n toolCallId: string;\n toolName?: string;\n};\n\nfunction getChunkPayload(value: unknown): Record<string, unknown> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n return isRecord(value.payload) ? value.payload : value;\n}\n\nfunction stringifyResponsePayload(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value === undefined ? {} : value);\n}\n\nfunction stringifyFunctionCallArguments(value: unknown, fallback = ''): string {\n const serialized = value === undefined || value === null ? fallback : stringifyResponsePayload(value);\n return serialized || fallback || '{}';\n}\n\nfunction removeWhitespaceOutsideJsonStrings(value: string): string {\n let inString = false;\n let escaped = false;\n let result = '';\n\n for (const char of value) {\n if (escaped) {\n escaped = false;\n result += char;\n continue;\n }\n\n if (char === '\\\\' && inString) {\n escaped = true;\n result += char;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n result += char;\n continue;\n }\n\n if (!inString && /\\s/.test(char)) {\n continue;\n }\n\n result += char;\n }\n\n return result;\n}\n\nfunction getRemainingArgumentsDelta(current: string, canonical: string): string | null {\n if (!current) {\n return canonical;\n }\n\n if (canonical.startsWith(current)) {\n return canonical.slice(current.length);\n }\n\n const compactCurrent = removeWhitespaceOutsideJsonStrings(current);\n const compactCanonical = removeWhitespaceOutsideJsonStrings(canonical);\n if (compactCurrent && compactCanonical.startsWith(compactCurrent)) {\n return compactCanonical.slice(compactCurrent.length);\n }\n\n return null;\n}\n\nfunction isCompleteJsonString(value: string): boolean {\n if (!value) {\n return true;\n }\n\n try {\n JSON.parse(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction serializeToolError(error: unknown) {\n if (error instanceof Error) {\n return { error: error.message };\n }\n\n return { error };\n}\n\nfunction getToolCallStart(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-input-streaming-start') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n const toolName = payload?.toolName;\n if (typeof toolCallId !== 'string' || typeof toolName !== 'string') {\n return null;\n }\n\n return { toolCallId, toolName };\n}\n\nfunction getToolCallDelta(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-delta') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n // Mastra/AI SDK stream chunks have used different names for streamed tool\n // argument text across versions; normalize them to the Responses delta shape.\n const delta = payload?.argsTextDelta ?? payload?.inputTextDelta ?? payload?.argsDelta ?? payload?.delta;\n if (!payload || typeof toolCallId !== 'string' || typeof delta !== 'string') {\n return null;\n }\n\n return {\n toolCallId,\n toolName: typeof payload.toolName === 'string' ? payload.toolName : undefined,\n delta,\n };\n}\n\nfunction getToolCall(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n const toolName = payload?.toolName;\n const args = payload?.args ?? payload?.input;\n if (typeof toolCallId !== 'string' || typeof toolName !== 'string') {\n return null;\n }\n\n return { toolCallId, toolName, args };\n}\n\nfunction getToolCallEnd(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-input-streaming-end') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n if (typeof toolCallId !== 'string') {\n return null;\n }\n\n return { toolCallId };\n}\n\nfunction getToolResult(value: unknown) {\n if (!isRecord(value) || (value.type !== 'tool-result' && value.type !== 'tool-error')) {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n if (!payload || typeof toolCallId !== 'string') {\n return null;\n }\n\n const toolName = typeof payload.toolName === 'string' ? payload.toolName : undefined;\n const args = payload.args ?? payload.input;\n\n if (value.type === 'tool-error') {\n return { toolCallId, toolName, args, result: serializeToolError(payload.error) };\n }\n\n const outputValue = payload.result !== undefined ? payload.result : payload.output;\n const result = payload.isError ? serializeToolError(outputValue) : outputValue;\n\n return { toolCallId, toolName, args, result };\n}\n\nexport function createResponseStreamEventTranslator(responseId: string) {\n // Keep emitted SSE terminal payloads and the final completed response output\n // aligned. Once a tool call is completed, later duplicate/canonical chunks are\n // ignored because Responses SSE has no replacement event for arguments.done.\n let text = '';\n let nextOutputIndex = 0;\n let textOutputIndex: number | null = null;\n const completedToolResultCallIds = new Set<string>();\n const pendingToolResults = new Map<string, ToolResultStreamState>();\n const toolCalls = new Map<string, ToolCallStreamState>();\n const outputItems = new Map<number, ResponseOutputItem>();\n\n const ensureTextOutputItem = (): { events: ResponseSseEvent[]; outputIndex: number } => {\n if (textOutputIndex !== null) {\n return { events: [], outputIndex: textOutputIndex };\n }\n\n textOutputIndex = nextOutputIndex++;\n return {\n outputIndex: textOutputIndex,\n events: [\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: textOutputIndex,\n item: {\n id: responseId,\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [],\n },\n }),\n createResponseSseEvent({\n type: 'response.content_part.added',\n output_index: textOutputIndex,\n content_index: 0,\n item_id: responseId,\n part: createOutputTextPart(''),\n }),\n ],\n };\n };\n\n const ensureToolCallItem = ({\n toolCallId,\n toolName,\n }: {\n toolCallId: string;\n toolName: string;\n }): { events: ResponseSseEvent[]; state: ToolCallStreamState } => {\n const existing = toolCalls.get(toolCallId);\n if (existing) {\n if (!existing.completed && toolName && existing.name !== toolName) {\n existing.name = toolName;\n }\n\n return { events: [], state: existing };\n }\n\n const state = {\n argumentsText: '',\n completed: false,\n itemId: toolCallId,\n name: toolName,\n outputIndex: nextOutputIndex++,\n zeroArgumentInputEnded: false,\n };\n toolCalls.set(toolCallId, state);\n\n return {\n state,\n events: [\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: state.outputIndex,\n item: {\n id: state.itemId,\n type: 'function_call',\n call_id: toolCallId,\n name: toolName,\n arguments: '',\n status: 'in_progress',\n },\n }),\n ],\n };\n };\n\n const completeToolCallItem = ({\n events,\n state,\n toolCallId,\n toolName,\n args,\n }: {\n events: ResponseSseEvent[];\n state: ToolCallStreamState;\n toolCallId: string;\n toolName: string;\n args: string;\n }): ResponseSseEvent[] => {\n if (state.completed) {\n return events;\n }\n\n const item = {\n id: state.itemId,\n type: 'function_call' as const,\n call_id: toolCallId,\n name: toolName,\n arguments: args,\n status: 'completed' as const,\n };\n\n state.argumentsText = args;\n state.completed = true;\n outputItems.set(state.outputIndex, item);\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.done',\n item_id: state.itemId,\n output_index: state.outputIndex,\n name: toolName,\n arguments: args,\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: state.outputIndex,\n item,\n }),\n ];\n };\n\n const completeToolResultItem = ({\n events,\n toolResult,\n }: {\n events: ResponseSseEvent[];\n toolResult: ToolResultStreamState;\n }): ResponseSseEvent[] => {\n if (completedToolResultCallIds.has(toolResult.toolCallId)) {\n return events;\n }\n completedToolResultCallIds.add(toolResult.toolCallId);\n pendingToolResults.delete(toolResult.toolCallId);\n\n const outputIndex = nextOutputIndex++;\n const item = {\n id: getFunctionCallOutputItemId(toolResult.toolCallId),\n type: 'function_call_output' as const,\n call_id: toolResult.toolCallId,\n output: stringifyResponsePayload(toolResult.result),\n };\n outputItems.set(outputIndex, item);\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: outputIndex,\n item,\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: outputIndex,\n item,\n }),\n ];\n };\n\n return {\n get text() {\n return text;\n },\n\n getOutputItems({ text, status }: { text: string; status: ResponseObject['status'] }) {\n const items = new Map(outputItems);\n if (text) {\n const messageOutputIndex = textOutputIndex ?? nextOutputIndex;\n items.set(messageOutputIndex, createOutputMessage({ messageId: responseId, status, text }));\n }\n\n return [...items.entries()].sort(([left], [right]) => left - right).map(([, item]) => item);\n },\n\n consume(value: unknown): ResponseSseEvent[] {\n const textDelta = extractTextDelta(value);\n if (textDelta) {\n const { events, outputIndex } = ensureTextOutputItem();\n text += textDelta;\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_text.delta',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n delta: textDelta,\n }),\n ];\n }\n\n const toolCallStart = getToolCallStart(value);\n if (toolCallStart) {\n return ensureToolCallItem(toolCallStart).events;\n }\n\n const toolCallDelta = getToolCallDelta(value);\n if (toolCallDelta) {\n const existing = toolCalls.get(toolCallDelta.toolCallId);\n if (!existing && !toolCallDelta.toolName) {\n return [];\n }\n if (existing?.completed) {\n return [];\n }\n\n const ensured = ensureToolCallItem({\n toolCallId: toolCallDelta.toolCallId,\n toolName: toolCallDelta.toolName ?? existing!.name,\n });\n\n ensured.state.argumentsText += toolCallDelta.delta;\n ensured.state.zeroArgumentInputEnded = false;\n return [\n ...ensured.events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.delta',\n item_id: ensured.state.itemId,\n output_index: ensured.state.outputIndex,\n delta: toolCallDelta.delta,\n }),\n ];\n }\n\n const toolCallEnd = getToolCallEnd(value);\n if (toolCallEnd) {\n const state = toolCalls.get(toolCallEnd.toolCallId);\n if (!state || state.completed) {\n return [];\n }\n\n state.zeroArgumentInputEnded = !state.argumentsText;\n return [];\n }\n\n const toolCall = getToolCall(value);\n if (toolCall) {\n const { events, state } = ensureToolCallItem(toolCall);\n const canonicalArgs = stringifyFunctionCallArguments(toolCall.args, state.argumentsText);\n if (state.completed) {\n const nextEvents = completeToolCallItem({\n events,\n state,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: canonicalArgs,\n });\n\n const pendingToolResult = pendingToolResults.get(toolCall.toolCallId);\n return pendingToolResult\n ? completeToolResultItem({ events: nextEvents, toolResult: pendingToolResult })\n : nextEvents;\n }\n\n const remainingArgsDelta = getRemainingArgumentsDelta(state.argumentsText, canonicalArgs);\n const args =\n remainingArgsDelta === null\n ? // If both strings are valid but disagree, keep the bytes already emitted\n // as deltas so arguments.done and response.output stay consistent.\n isCompleteJsonString(state.argumentsText)\n ? state.argumentsText\n : canonicalArgs\n : state.argumentsText + remainingArgsDelta;\n const nextEvents = remainingArgsDelta\n ? [\n ...events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.delta',\n item_id: state.itemId,\n output_index: state.outputIndex,\n delta: remainingArgsDelta,\n }),\n ]\n : events;\n\n const completedEvents = completeToolCallItem({\n events: nextEvents,\n state,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args,\n });\n\n const pendingToolResult = pendingToolResults.get(toolCall.toolCallId);\n return pendingToolResult\n ? completeToolResultItem({ events: completedEvents, toolResult: pendingToolResult })\n : completedEvents;\n }\n\n const toolResult = getToolResult(value);\n if (toolResult) {\n const existingToolCallState = toolCalls.get(toolResult.toolCallId);\n if (!existingToolCallState && !toolResult.toolName) {\n return [];\n }\n\n const { events: toolCallEvents, state: toolCallState } = ensureToolCallItem({\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? existingToolCallState!.name,\n });\n\n if (completedToolResultCallIds.has(toolResult.toolCallId)) {\n return [];\n }\n\n const events: ResponseSseEvent[] = [...toolCallEvents];\n if (!toolCallState.completed) {\n const args = stringifyFunctionCallArguments(toolResult.args, toolCallState.argumentsText || '{}');\n const hasZeroArgumentHint = toolCallState.zeroArgumentInputEnded && !toolCallState.argumentsText;\n if (\n toolResult.args === undefined &&\n !hasZeroArgumentHint &&\n (!toolCallState.argumentsText || !isCompleteJsonString(toolCallState.argumentsText))\n ) {\n pendingToolResults.set(toolResult.toolCallId, toolResult);\n return events;\n }\n\n events.push(\n ...completeToolCallItem({\n events: [],\n state: toolCallState,\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? toolCallState.name,\n args,\n }),\n );\n }\n\n return completeToolResultItem({ events, toolResult });\n }\n\n return [];\n },\n\n flushPendingToolResults(): ResponseSseEvent[] {\n const events: ResponseSseEvent[] = [];\n for (const toolResult of pendingToolResults.values()) {\n const toolCallState = toolCalls.get(toolResult.toolCallId);\n if (!toolCallState) {\n continue;\n }\n\n if (!toolCallState.completed) {\n const safeFallbackArgs = isCompleteJsonString(toolCallState.argumentsText)\n ? toolCallState.argumentsText\n : '{}';\n events.push(\n ...completeToolCallItem({\n events: [],\n state: toolCallState,\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? toolCallState.name,\n args: stringifyFunctionCallArguments(toolResult.args, safeFallbackArgs),\n }),\n );\n }\n\n events.push(...completeToolResultItem({ events: [], toolResult }));\n }\n\n return events;\n },\n\n completeText(text: string, completedItem: Extract<ResponseOutputItem, { type: 'message' }>): ResponseSseEvent[] {\n const { events, outputIndex } = ensureTextOutputItem();\n const completedTextItem = {\n ...completedItem,\n content: [createOutputTextPart(text)],\n };\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_text.done',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n text,\n }),\n createResponseSseEvent({\n type: 'response.content_part.done',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n part: createOutputTextPart(text),\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: outputIndex,\n item: completedTextItem,\n }),\n ];\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"responses.adapter.cjs","names":[],"sources":["../../../src/server/handlers/responses.adapter.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { isProviderDefinedTool } from '@mastra/core/tools';\nimport { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';\nimport type {\n ConversationItem,\n ResponseInputMessage,\n ResponseObject,\n ResponseOutputItem,\n ResponseTextConfig,\n ResponseTool,\n} from '../schemas/responses';\nimport type { ProviderMetadataLike, ResponseTurnRecord, UsageLike } from './responses.storage';\n\nexport type ResponseExecutionMessage = {\n role: 'system' | 'user' | 'assistant';\n content: string;\n};\n\n/**\n * Flattens Responses API message content into the plain-text shape Mastra agent\n * execution expects today.\n */\nfunction normalizeMessageContent(content: ResponseInputMessage['content']): string {\n if (typeof content === 'string') {\n return content;\n }\n\n return content.map(part => part.text).join('');\n}\n\n/**\n * Extracts the human-readable text represented by a persisted Mastra message.\n */\nfunction getMessageText(message: MastraDBMessage): string {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n return parts\n .flatMap(part => (part.type === 'text' ? [part.text] : []))\n .filter((text): text is string => typeof text === 'string')\n .join('');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getMessageRole(message: MastraDBMessage): string {\n return (message as { role?: string }).role ?? '';\n}\n\n/**\n * Creates a stable fallback key for tool items when a tool call id is missing\n * from the stored message payload.\n */\nfunction getToolKey(toolCallId: string | null, messageId: string, partIndex: number) {\n return toolCallId ?? `${messageId}:${partIndex}`;\n}\n\nfunction getFunctionCallOutputItemId(toolCallId: string) {\n return `${toolCallId}:output`;\n}\n\n/**\n * Normalizes tool parameter schemas so the Responses API always exposes the\n * plain JSON Schema object regardless of whether the source tool came from a\n * provider-defined tool or a Mastra/Zod tool definition.\n */\nfunction normalizeToolParameters(schema: unknown): unknown {\n if (!isRecord(schema)) {\n return schema;\n }\n\n if (isRecord(schema.json) && Object.keys(schema).length === 1) {\n return schema.json;\n }\n\n return schema;\n}\n\n/**\n * Maps configured Mastra tools into Responses API tool definitions.\n */\nexport function mapMastraToolsToResponseTools(tools: Record<string, unknown> | undefined): ResponseTool[] {\n if (!tools) {\n return [];\n }\n\n return Object.values(tools).flatMap(tool => {\n if (!isRecord(tool)) {\n return [];\n }\n\n const name = typeof tool.id === 'string' ? tool.id : typeof tool.name === 'string' ? tool.name : null;\n if (!name) {\n return [];\n }\n\n const description = typeof tool.description === 'string' ? tool.description : undefined;\n\n let parameters: unknown;\n if (isProviderDefinedTool(tool)) {\n const resolvedSchema = typeof tool.inputSchema === 'function' ? tool.inputSchema() : tool.inputSchema;\n parameters =\n isRecord(resolvedSchema) && 'jsonSchema' in resolvedSchema\n ? normalizeToolParameters(resolvedSchema.jsonSchema)\n : undefined;\n } else if ('inputSchema' in tool && tool.inputSchema) {\n parameters = normalizeToolParameters(zodToJsonSchema(tool.inputSchema as never));\n }\n\n return [\n {\n type: 'function',\n name,\n ...(description ? { description } : {}),\n ...(parameters !== undefined ? { parameters: JSON.parse(JSON.stringify(parameters)) } : {}),\n } satisfies ResponseTool,\n ];\n });\n}\n\nfunction stringifyToolPayload(value: unknown) {\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value === undefined ? {} : value);\n}\n\nfunction stringifyToolArguments(value: unknown) {\n if (isRecord(value) && typeof value.__raw === 'string') {\n return value.__raw;\n }\n\n return stringifyToolPayload(value === null ? undefined : value);\n}\n\nfunction createOutputMessage({\n messageId,\n status,\n text,\n}: {\n messageId: string;\n status: ResponseObject['status'];\n text: string;\n}) {\n const responseStatus: Extract<ResponseObject['output'][number], { type: 'message' }>['status'] =\n status === 'completed' ? 'completed' : 'incomplete';\n\n return {\n id: messageId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: responseStatus,\n content: [createOutputTextPart(text)],\n };\n}\n\nfunction createConversationMessage({\n messageId,\n role,\n text,\n}: {\n messageId: string;\n role: 'system' | 'user' | 'assistant';\n text: string;\n}) {\n return {\n id: messageId,\n type: 'message' as const,\n role,\n status: 'completed' as const,\n content: [\n role === 'assistant'\n ? createOutputTextPart(text)\n : {\n type: 'input_text' as const,\n text,\n },\n ],\n };\n}\n\nfunction createFunctionCallItem({\n itemId,\n callId,\n name,\n args,\n}: {\n itemId: string;\n callId: string;\n name: string;\n args: unknown;\n}) {\n return {\n id: itemId,\n type: 'function_call' as const,\n call_id: callId,\n name,\n arguments: stringifyToolArguments(args),\n status: 'completed' as const,\n };\n}\n\nfunction createFunctionCallOutputItem({ itemId, callId, output }: { itemId: string; callId: string; output: unknown }) {\n return {\n id: itemId,\n type: 'function_call_output' as const,\n call_id: callId,\n output: stringifyToolPayload(output),\n };\n}\n\ntype ResponseToolItem = Extract<ConversationItem, { type: 'function_call' | 'function_call_output' }>;\n\n/**\n * Records which tool call ids already have dedicated tool-result messages so we can\n * avoid duplicating `function_call_output` items when assistant messages echo the\n * result inline.\n */\nfunction collectToolResultCallIds(messages: MastraDBMessage[]) {\n const toolResultCallIds = new Set<string>();\n\n for (const message of messages) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'tool' && toolInvocation.result !== undefined) {\n toolResultCallIds.add(toolCallId);\n }\n }\n }\n\n return toolResultCallIds;\n}\n\n/**\n * Maps one persisted Mastra message into the tool-related Responses items that\n * it contributes to the conversation timeline.\n */\nfunction mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n}: {\n message: MastraDBMessage;\n toolResultCallIds: Set<string>;\n emittedCallIds: Set<string>;\n emittedResultCallIds: Set<string>;\n}): ResponseToolItem[] {\n const items: ResponseToolItem[] = [];\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n\n for (const [partIndex, part] of parts.entries()) {\n if (!isRecord(part) || part.type !== 'tool-invocation' || !isRecord(part.toolInvocation)) {\n continue;\n }\n\n const toolInvocation = part.toolInvocation;\n const toolName = typeof toolInvocation.toolName === 'string' ? toolInvocation.toolName : null;\n const toolCallId =\n typeof toolInvocation.toolCallId === 'string'\n ? toolInvocation.toolCallId\n : getToolKey(null, message.id, partIndex);\n\n if (getMessageRole(message) === 'assistant' && toolName && !emittedCallIds.has(toolCallId)) {\n items.push(\n createFunctionCallItem({\n itemId: toolCallId,\n callId: toolCallId,\n name: toolName,\n args: toolInvocation.args,\n }),\n );\n emittedCallIds.add(toolCallId);\n }\n\n if (\n toolInvocation.result !== undefined &&\n !emittedResultCallIds.has(toolCallId) &&\n (getMessageRole(message) === 'tool' || !toolResultCallIds.has(toolCallId))\n ) {\n items.push(\n createFunctionCallOutputItem({\n itemId: getFunctionCallOutputItemId(toolCallId),\n callId: toolCallId,\n output: toolInvocation.result,\n }),\n );\n emittedResultCallIds.add(toolCallId);\n }\n }\n\n return items;\n}\n\n/**\n * Maps Mastra thread messages into OpenAI-style conversation items.\n */\nexport function mapMastraMessagesToConversationItems(messages: MastraDBMessage[]): ConversationItem[] {\n if (!messages.length) {\n return [];\n }\n\n const items: ConversationItem[] = [];\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n\n for (const message of messages) {\n items.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const role = getMessageRole(message);\n const text = getMessageText(message);\n\n if ((role === 'user' || role === 'system' || role === 'assistant') && text) {\n items.push(\n createConversationMessage({\n messageId: message.id,\n role,\n text,\n }),\n );\n continue;\n }\n\n if (role === 'assistant' && !text) {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n const hasOnlyToolInvocations = parts.every(\n part => isRecord(part) && part.type === 'tool-invocation' && isRecord(part.toolInvocation),\n );\n\n if (hasOnlyToolInvocations) {\n continue;\n }\n }\n\n if (role === 'tool') {\n continue;\n }\n }\n\n return items;\n}\n\nfunction mergeFallbackOutputItems({\n output,\n fallbackOutputItems,\n}: {\n output: ResponseOutputItem[];\n fallbackOutputItems: ResponseOutputItem[];\n}): ResponseOutputItem[] {\n if (!fallbackOutputItems.length) {\n return output;\n }\n\n const outputById = new Map(output.map(item => [item.id, item]));\n const fallbackIds = new Set(fallbackOutputItems.map(item => item.id));\n\n return [\n ...fallbackOutputItems.map(item => outputById.get(item.id) ?? item),\n ...output.filter(item => !fallbackIds.has(item.id)),\n ];\n}\n\nfunction getOutputMessageText(item: Extract<ResponseOutputItem, { type: 'message' }>): string {\n return item.content.map(part => part.text).join('');\n}\n\n/**\n * Maps the stored Mastra messages for one response turn back into OpenAI-style\n * `response.output` items, preserving tool/message ordering from the thread.\n */\nexport function mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText,\n fallbackOutputItems = [],\n}: {\n messages: MastraDBMessage[] | undefined;\n outputMessageId: string;\n status: ResponseObject['status'];\n fallbackText: string;\n fallbackOutputItems?: ResponseOutputItem[];\n}): ResponseOutputItem[] {\n if (!messages?.length) {\n if (fallbackOutputItems.length) {\n return fallbackOutputItems;\n }\n\n return [createOutputMessage({ messageId: outputMessageId, status, text: fallbackText })];\n }\n\n const output: ResponseOutputItem[] = [];\n const lastAssistantIndex = [...messages].map(message => message.role).lastIndexOf('assistant');\n const outputMessageIndex =\n [...messages]\n .map((message, index) => ({ index, message }))\n .reverse()\n .find(({ message }) => getMessageRole(message) === 'assistant' && getMessageText(message))?.index ??\n lastAssistantIndex;\n const toolResultCallIds = collectToolResultCallIds(messages);\n const emittedCallIds = new Set<string>();\n const emittedResultCallIds = new Set<string>();\n const fallbackMessageItems = fallbackOutputItems.filter(\n (item): item is Extract<ResponseOutputItem, { type: 'message' }> => item.type === 'message',\n );\n const emittedFallbackMessageIds = new Set<string>();\n\n const getOutputMessageId = ({\n message,\n text,\n useOutputMessageId,\n }: {\n message: MastraDBMessage;\n text: string;\n useOutputMessageId: boolean;\n }) => {\n const directFallbackItem = fallbackMessageItems.find(item => item.id === message.id);\n if (directFallbackItem) {\n emittedFallbackMessageIds.add(directFallbackItem.id);\n return directFallbackItem.id;\n }\n\n if (useOutputMessageId) {\n const matchingFallbackItem = fallbackMessageItems.find(\n item =>\n item.id !== outputMessageId && !emittedFallbackMessageIds.has(item.id) && getOutputMessageText(item) === text,\n );\n if (matchingFallbackItem) {\n emittedFallbackMessageIds.add(matchingFallbackItem.id);\n return matchingFallbackItem.id;\n }\n }\n\n return useOutputMessageId ? outputMessageId : message.id;\n };\n\n for (const [messageIndex, message] of messages.entries()) {\n output.push(\n ...mapMastraMessageToResponseToolItems({\n message,\n toolResultCallIds,\n emittedCallIds,\n emittedResultCallIds,\n }),\n );\n\n const text = getMessageText(message);\n if (getMessageRole(message) === 'assistant' && text) {\n const useOutputMessageId = messageIndex === outputMessageIndex;\n output.push(\n createOutputMessage({\n messageId: getOutputMessageId({ message, text, useOutputMessageId }),\n status,\n text,\n }),\n );\n }\n }\n\n if (!output.some(item => item.type === 'message') && fallbackText) {\n output.push(createOutputMessage({ messageId: outputMessageId, status, text: fallbackText }));\n }\n\n return mergeFallbackOutputItems({ output, fallbackOutputItems });\n}\n\n/**\n * Creates a stable assistant-message-backed response identifier.\n */\nexport function createMessageId() {\n return `msg_${randomUUID()}`;\n}\n\n/**\n * Maps Responses API input into the plain execution messages Mastra agents expect.\n */\nexport function mapResponseInputToExecutionMessages(\n input: ResponseInputMessage[] | string,\n): ResponseExecutionMessage[] {\n if (typeof input === 'string') {\n return [{ role: 'user', content: input }];\n }\n\n return input.map(message => ({\n role: message.role === 'developer' ? 'system' : message.role,\n content: normalizeMessageContent(message.content),\n }));\n}\n\n/**\n * Converts usage details to the Responses API usage shape.\n */\nexport function toResponseUsage(usage: UsageLike): ResponseObject['usage'] {\n if (!usage) {\n return null;\n }\n\n const inputTokens = usage.inputTokens ?? usage.promptTokens ?? 0;\n const outputTokens = usage.outputTokens ?? usage.completionTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n\n return {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: totalTokens,\n input_tokens_details: {\n cached_tokens: 0,\n },\n output_tokens_details: {\n reasoning_tokens: 0,\n },\n };\n}\n\n/**\n * Maps model finish reasons onto the Responses API status field.\n */\nexport function toResponseStatus(finishReason: string | undefined): ResponseObject['status'] {\n if (finishReason === 'suspended' || finishReason === 'error') {\n return 'incomplete';\n }\n\n return 'completed';\n}\n\n/**\n * Formats a text response part using the OpenAI-compatible Responses shape.\n */\nexport function createOutputTextPart(text: string) {\n return {\n type: 'output_text' as const,\n text,\n annotations: [] as unknown[],\n logprobs: [] as unknown[],\n };\n}\n\n/**\n * Builds a completed Responses API object from Mastra execution state.\n */\nexport function buildCompletedResponse({\n responseId,\n outputMessageId,\n model,\n createdAt,\n completedAt,\n status,\n text,\n usage,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n providerOptions,\n tools,\n store,\n messages,\n fallbackOutputItems,\n}: {\n responseId: string;\n outputMessageId: string;\n model: string;\n createdAt: number;\n completedAt: number | null;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n providerOptions?: ProviderMetadataLike;\n tools: ResponseTool[];\n store: boolean;\n messages?: MastraDBMessage[];\n fallbackOutputItems?: ResponseOutputItem[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: completedAt,\n model,\n status,\n output: mapMastraMessagesToResponseOutputItems({\n messages,\n outputMessageId,\n status,\n fallbackText: text,\n fallbackOutputItems,\n }),\n usage: toResponseUsage(usage),\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n providerOptions,\n tools,\n store,\n };\n}\n\n/**\n * Builds the initial in-progress Responses API object emitted at stream start.\n */\nexport function buildInProgressResponse({\n responseId,\n model,\n createdAt,\n instructions,\n textConfig,\n previousResponseId,\n conversationId,\n tools,\n store,\n}: {\n responseId: string;\n model: string;\n createdAt: number;\n instructions?: string;\n textConfig?: ResponseTextConfig;\n previousResponseId?: string;\n conversationId?: string;\n store: boolean;\n tools?: ResponseTool[];\n}): ResponseObject {\n return {\n id: responseId,\n object: 'response',\n created_at: createdAt,\n completed_at: null,\n model,\n status: 'in_progress',\n output: [],\n usage: null,\n error: null,\n incomplete_details: null,\n instructions: instructions ?? null,\n text: textConfig ?? null,\n previous_response_id: previousResponseId ?? null,\n conversation_id: conversationId ?? null,\n tools: tools ?? [],\n store,\n };\n}\n\n/**\n * Reconstructs a Responses API object from a stored response-turn record.\n */\nexport function mapResponseTurnRecordToResponse(match: ResponseTurnRecord): ResponseObject {\n return {\n id: match.message.id,\n object: 'response',\n created_at: match.metadata.createdAt,\n completed_at: match.metadata.completedAt,\n model: match.metadata.model,\n status: match.metadata.status,\n output: mapMastraMessagesToResponseOutputItems({\n messages: match.messages,\n outputMessageId: match.message.id,\n status: match.metadata.status,\n fallbackText: getMessageText(match.message),\n fallbackOutputItems: match.metadata.outputItems,\n }),\n usage: match.metadata.usage,\n error: null,\n incomplete_details: null,\n instructions: match.metadata.instructions ?? null,\n text: match.metadata.text ?? null,\n previous_response_id: match.metadata.previousResponseId ?? null,\n conversation_id: match.thread.id,\n providerOptions: match.metadata.providerOptions,\n tools: match.metadata.tools,\n store: match.metadata.store,\n };\n}\n\n/**\n * Formats an SSE event line for the streaming Responses route.\n */\nexport function formatSseEvent(event: string, data: unknown): Uint8Array {\n return new TextEncoder().encode(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n}\n\n/**\n * Extracts text deltas from the Mastra stream chunk variants used by the route.\n */\nexport function extractTextDelta(value: unknown): string | null {\n if (typeof value !== 'object' || value === null || !('type' in value)) {\n return null;\n }\n\n const chunk = value as { type: string; payload?: { text?: string }; textDelta?: string; text?: string };\n\n switch (chunk.type) {\n case 'text-delta':\n if (typeof chunk.payload?.text === 'string') {\n return chunk.payload.text;\n }\n\n if (typeof chunk.textDelta === 'string') {\n return chunk.textDelta;\n }\n\n if (typeof chunk.text === 'string') {\n return chunk.text;\n }\n\n return null;\n default:\n return null;\n }\n}\n\ntype ResponseOutputItemAddedPayload = {\n type: 'response.output_item.added';\n output_index: number;\n item: ResponseOutputItem;\n};\n\ntype ResponseContentPartAddedPayload = {\n type: 'response.content_part.added';\n output_index: number;\n content_index: number;\n item_id: string;\n part: ReturnType<typeof createOutputTextPart>;\n};\n\ntype ResponseOutputTextDeltaPayload = {\n type: 'response.output_text.delta';\n output_index: number;\n content_index: number;\n item_id: string;\n delta: string;\n};\n\ntype ResponseFunctionCallArgumentsDeltaPayload = {\n type: 'response.function_call_arguments.delta';\n output_index: number;\n item_id: string;\n delta: string;\n};\n\ntype ResponseFunctionCallArgumentsDonePayload = {\n type: 'response.function_call_arguments.done';\n output_index: number;\n item_id: string;\n name: string;\n arguments: string;\n};\n\ntype ResponseOutputItemDonePayload = {\n type: 'response.output_item.done';\n output_index: number;\n item: ResponseOutputItem;\n};\n\ntype ResponseOutputTextDonePayload = {\n type: 'response.output_text.done';\n output_index: number;\n content_index: number;\n item_id: string;\n text: string;\n};\n\ntype ResponseContentPartDonePayload = {\n type: 'response.content_part.done';\n output_index: number;\n content_index: number;\n item_id: string;\n part: ReturnType<typeof createOutputTextPart>;\n};\n\ntype ResponseSsePayload =\n | ResponseOutputItemAddedPayload\n | ResponseContentPartAddedPayload\n | ResponseOutputTextDeltaPayload\n | ResponseFunctionCallArgumentsDeltaPayload\n | ResponseFunctionCallArgumentsDonePayload\n | ResponseOutputItemDonePayload\n | ResponseOutputTextDonePayload\n | ResponseContentPartDonePayload;\n\ntype ResponseSseEvent<TPayload extends ResponseSsePayload = ResponseSsePayload> = {\n event: TPayload['type'];\n payload: TPayload;\n};\n\nfunction createResponseSseEvent<TPayload extends ResponseSsePayload>(payload: TPayload): ResponseSseEvent<TPayload> {\n return { event: payload.type, payload };\n}\n\ntype ToolCallStreamState = {\n argumentsText: string;\n completed: boolean;\n itemId: string;\n name: string;\n outputIndex: number;\n zeroArgumentInputEnded: boolean;\n};\n\ntype ToolResultStreamState = {\n args: unknown;\n result: unknown;\n toolCallId: string;\n toolName?: string;\n};\n\nfunction getChunkPayload(value: unknown): Record<string, unknown> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n return isRecord(value.payload) ? value.payload : value;\n}\n\nfunction stringifyResponsePayload(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value === undefined ? {} : value);\n}\n\nfunction stringifyFunctionCallArguments(value: unknown, fallback = ''): string {\n const serialized = value === undefined || value === null ? fallback : stringifyResponsePayload(value);\n return serialized || fallback || '{}';\n}\n\nfunction removeWhitespaceOutsideJsonStrings(value: string): string {\n let inString = false;\n let escaped = false;\n let result = '';\n\n for (const char of value) {\n if (escaped) {\n escaped = false;\n result += char;\n continue;\n }\n\n if (char === '\\\\' && inString) {\n escaped = true;\n result += char;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n result += char;\n continue;\n }\n\n if (!inString && /\\s/.test(char)) {\n continue;\n }\n\n result += char;\n }\n\n return result;\n}\n\nfunction getRemainingArgumentsDelta(current: string, canonical: string): string | null {\n if (!current) {\n return canonical;\n }\n\n if (canonical.startsWith(current)) {\n return canonical.slice(current.length);\n }\n\n const compactCurrent = removeWhitespaceOutsideJsonStrings(current);\n const compactCanonical = removeWhitespaceOutsideJsonStrings(canonical);\n if (compactCurrent && compactCanonical.startsWith(compactCurrent)) {\n return compactCanonical.slice(compactCurrent.length);\n }\n\n return null;\n}\n\nfunction isCompleteJsonString(value: string): boolean {\n if (!value) {\n return true;\n }\n\n try {\n JSON.parse(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction serializeToolError(error: unknown) {\n if (error instanceof Error) {\n return { error: error.message };\n }\n\n return { error };\n}\n\nfunction getToolCallStart(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-input-streaming-start') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n const toolName = payload?.toolName;\n if (typeof toolCallId !== 'string' || typeof toolName !== 'string') {\n return null;\n }\n\n return { toolCallId, toolName };\n}\n\nfunction getToolCallDelta(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-delta') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n // Mastra/AI SDK stream chunks have used different names for streamed tool\n // argument text across versions; normalize them to the Responses delta shape.\n const delta = payload?.argsTextDelta ?? payload?.inputTextDelta ?? payload?.argsDelta ?? payload?.delta;\n if (!payload || typeof toolCallId !== 'string' || typeof delta !== 'string') {\n return null;\n }\n\n return {\n toolCallId,\n toolName: typeof payload.toolName === 'string' ? payload.toolName : undefined,\n delta,\n };\n}\n\nfunction getToolCall(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n const toolName = payload?.toolName;\n const args = payload?.args ?? payload?.input;\n if (typeof toolCallId !== 'string' || typeof toolName !== 'string') {\n return null;\n }\n\n return { toolCallId, toolName, args };\n}\n\nfunction getToolCallEnd(value: unknown) {\n if (!isRecord(value) || value.type !== 'tool-call-input-streaming-end') {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n if (typeof toolCallId !== 'string') {\n return null;\n }\n\n return { toolCallId };\n}\n\nfunction getToolResult(value: unknown) {\n if (!isRecord(value) || (value.type !== 'tool-result' && value.type !== 'tool-error')) {\n return null;\n }\n\n const payload = getChunkPayload(value);\n const toolCallId = payload?.toolCallId;\n if (!payload || typeof toolCallId !== 'string') {\n return null;\n }\n\n const toolName = typeof payload.toolName === 'string' ? payload.toolName : undefined;\n const args = payload.args ?? payload.input;\n\n if (value.type === 'tool-error') {\n return { toolCallId, toolName, args, result: serializeToolError(payload.error) };\n }\n\n const outputValue = payload.result !== undefined ? payload.result : payload.output;\n const result = payload.isError ? serializeToolError(outputValue) : outputValue;\n\n return { toolCallId, toolName, args, result };\n}\n\nexport function createResponseStreamEventTranslator(responseId: string) {\n // Keep emitted SSE terminal payloads and the final completed response output\n // aligned. Once a tool call is completed, later duplicate/canonical chunks are\n // ignored because Responses SSE has no replacement event for arguments.done.\n let text = '';\n let nextOutputIndex = 0;\n let textOutputIndex: number | null = null;\n const completedToolResultCallIds = new Set<string>();\n const pendingToolResults = new Map<string, ToolResultStreamState>();\n const toolCalls = new Map<string, ToolCallStreamState>();\n const outputItems = new Map<number, ResponseOutputItem>();\n\n const ensureTextOutputItem = (): { events: ResponseSseEvent[]; outputIndex: number } => {\n if (textOutputIndex !== null) {\n return { events: [], outputIndex: textOutputIndex };\n }\n\n textOutputIndex = nextOutputIndex++;\n return {\n outputIndex: textOutputIndex,\n events: [\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: textOutputIndex,\n item: {\n id: responseId,\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [],\n },\n }),\n createResponseSseEvent({\n type: 'response.content_part.added',\n output_index: textOutputIndex,\n content_index: 0,\n item_id: responseId,\n part: createOutputTextPart(''),\n }),\n ],\n };\n };\n\n const ensureToolCallItem = ({\n toolCallId,\n toolName,\n }: {\n toolCallId: string;\n toolName: string;\n }): { events: ResponseSseEvent[]; state: ToolCallStreamState } => {\n const existing = toolCalls.get(toolCallId);\n if (existing) {\n if (!existing.completed && toolName && existing.name !== toolName) {\n existing.name = toolName;\n }\n\n return { events: [], state: existing };\n }\n\n const state = {\n argumentsText: '',\n completed: false,\n itemId: toolCallId,\n name: toolName,\n outputIndex: nextOutputIndex++,\n zeroArgumentInputEnded: false,\n };\n toolCalls.set(toolCallId, state);\n\n return {\n state,\n events: [\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: state.outputIndex,\n item: {\n id: state.itemId,\n type: 'function_call',\n call_id: toolCallId,\n name: toolName,\n arguments: '',\n status: 'in_progress',\n },\n }),\n ],\n };\n };\n\n const completeToolCallItem = ({\n events,\n state,\n toolCallId,\n toolName,\n args,\n }: {\n events: ResponseSseEvent[];\n state: ToolCallStreamState;\n toolCallId: string;\n toolName: string;\n args: string;\n }): ResponseSseEvent[] => {\n if (state.completed) {\n return events;\n }\n\n const item = {\n id: state.itemId,\n type: 'function_call' as const,\n call_id: toolCallId,\n name: toolName,\n arguments: args,\n status: 'completed' as const,\n };\n\n state.argumentsText = args;\n state.completed = true;\n outputItems.set(state.outputIndex, item);\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.done',\n item_id: state.itemId,\n output_index: state.outputIndex,\n name: toolName,\n arguments: args,\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: state.outputIndex,\n item,\n }),\n ];\n };\n\n const completeToolResultItem = ({\n events,\n toolResult,\n }: {\n events: ResponseSseEvent[];\n toolResult: ToolResultStreamState;\n }): ResponseSseEvent[] => {\n if (completedToolResultCallIds.has(toolResult.toolCallId)) {\n return events;\n }\n completedToolResultCallIds.add(toolResult.toolCallId);\n pendingToolResults.delete(toolResult.toolCallId);\n\n const outputIndex = nextOutputIndex++;\n const item = {\n id: getFunctionCallOutputItemId(toolResult.toolCallId),\n type: 'function_call_output' as const,\n call_id: toolResult.toolCallId,\n output: stringifyResponsePayload(toolResult.result),\n };\n outputItems.set(outputIndex, item);\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_item.added',\n output_index: outputIndex,\n item,\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: outputIndex,\n item,\n }),\n ];\n };\n\n return {\n get text() {\n return text;\n },\n\n getOutputItems({ text, status }: { text: string; status: ResponseObject['status'] }) {\n const items = new Map(outputItems);\n if (text) {\n const messageOutputIndex = textOutputIndex ?? nextOutputIndex;\n items.set(messageOutputIndex, createOutputMessage({ messageId: responseId, status, text }));\n }\n\n return [...items.entries()].sort(([left], [right]) => left - right).map(([, item]) => item);\n },\n\n consume(value: unknown): ResponseSseEvent[] {\n const textDelta = extractTextDelta(value);\n if (textDelta) {\n const { events, outputIndex } = ensureTextOutputItem();\n text += textDelta;\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_text.delta',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n delta: textDelta,\n }),\n ];\n }\n\n const toolCallStart = getToolCallStart(value);\n if (toolCallStart) {\n return ensureToolCallItem(toolCallStart).events;\n }\n\n const toolCallDelta = getToolCallDelta(value);\n if (toolCallDelta) {\n const existing = toolCalls.get(toolCallDelta.toolCallId);\n if (!existing && !toolCallDelta.toolName) {\n return [];\n }\n if (existing?.completed) {\n return [];\n }\n\n const ensured = ensureToolCallItem({\n toolCallId: toolCallDelta.toolCallId,\n toolName: toolCallDelta.toolName ?? existing!.name,\n });\n\n ensured.state.argumentsText += toolCallDelta.delta;\n ensured.state.zeroArgumentInputEnded = false;\n return [\n ...ensured.events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.delta',\n item_id: ensured.state.itemId,\n output_index: ensured.state.outputIndex,\n delta: toolCallDelta.delta,\n }),\n ];\n }\n\n const toolCallEnd = getToolCallEnd(value);\n if (toolCallEnd) {\n const state = toolCalls.get(toolCallEnd.toolCallId);\n if (!state || state.completed) {\n return [];\n }\n\n state.zeroArgumentInputEnded = !state.argumentsText;\n return [];\n }\n\n const toolCall = getToolCall(value);\n if (toolCall) {\n const { events, state } = ensureToolCallItem(toolCall);\n const canonicalArgs = stringifyFunctionCallArguments(toolCall.args, state.argumentsText);\n if (state.completed) {\n const nextEvents = completeToolCallItem({\n events,\n state,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: canonicalArgs,\n });\n\n const pendingToolResult = pendingToolResults.get(toolCall.toolCallId);\n return pendingToolResult\n ? completeToolResultItem({ events: nextEvents, toolResult: pendingToolResult })\n : nextEvents;\n }\n\n const remainingArgsDelta = getRemainingArgumentsDelta(state.argumentsText, canonicalArgs);\n const args =\n remainingArgsDelta === null\n ? // If both strings are valid but disagree, keep the bytes already emitted\n // as deltas so arguments.done and response.output stay consistent.\n isCompleteJsonString(state.argumentsText)\n ? state.argumentsText\n : canonicalArgs\n : state.argumentsText + remainingArgsDelta;\n const nextEvents = remainingArgsDelta\n ? [\n ...events,\n createResponseSseEvent({\n type: 'response.function_call_arguments.delta',\n item_id: state.itemId,\n output_index: state.outputIndex,\n delta: remainingArgsDelta,\n }),\n ]\n : events;\n\n const completedEvents = completeToolCallItem({\n events: nextEvents,\n state,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args,\n });\n\n const pendingToolResult = pendingToolResults.get(toolCall.toolCallId);\n return pendingToolResult\n ? completeToolResultItem({ events: completedEvents, toolResult: pendingToolResult })\n : completedEvents;\n }\n\n const toolResult = getToolResult(value);\n if (toolResult) {\n const existingToolCallState = toolCalls.get(toolResult.toolCallId);\n if (!existingToolCallState && !toolResult.toolName) {\n return [];\n }\n\n const { events: toolCallEvents, state: toolCallState } = ensureToolCallItem({\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? existingToolCallState!.name,\n });\n\n if (completedToolResultCallIds.has(toolResult.toolCallId)) {\n return [];\n }\n\n const events: ResponseSseEvent[] = [...toolCallEvents];\n if (!toolCallState.completed) {\n const args = stringifyFunctionCallArguments(toolResult.args, toolCallState.argumentsText || '{}');\n const hasZeroArgumentHint = toolCallState.zeroArgumentInputEnded && !toolCallState.argumentsText;\n if (\n toolResult.args === undefined &&\n !hasZeroArgumentHint &&\n (!toolCallState.argumentsText || !isCompleteJsonString(toolCallState.argumentsText))\n ) {\n pendingToolResults.set(toolResult.toolCallId, toolResult);\n return events;\n }\n\n events.push(\n ...completeToolCallItem({\n events: [],\n state: toolCallState,\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? toolCallState.name,\n args,\n }),\n );\n }\n\n return completeToolResultItem({ events, toolResult });\n }\n\n return [];\n },\n\n flushPendingToolResults(): ResponseSseEvent[] {\n const events: ResponseSseEvent[] = [];\n for (const toolResult of pendingToolResults.values()) {\n const toolCallState = toolCalls.get(toolResult.toolCallId);\n if (!toolCallState) {\n continue;\n }\n\n if (!toolCallState.completed) {\n const safeFallbackArgs = isCompleteJsonString(toolCallState.argumentsText)\n ? toolCallState.argumentsText\n : '{}';\n events.push(\n ...completeToolCallItem({\n events: [],\n state: toolCallState,\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName ?? toolCallState.name,\n args: stringifyFunctionCallArguments(toolResult.args, safeFallbackArgs),\n }),\n );\n }\n\n events.push(...completeToolResultItem({ events: [], toolResult }));\n }\n\n return events;\n },\n\n completeText(text: string, completedItem: Extract<ResponseOutputItem, { type: 'message' }>): ResponseSseEvent[] {\n const { events, outputIndex } = ensureTextOutputItem();\n const completedTextItem = {\n ...completedItem,\n content: [createOutputTextPart(text)],\n };\n\n return [\n ...events,\n createResponseSseEvent({\n type: 'response.output_text.done',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n text,\n }),\n createResponseSseEvent({\n type: 'response.content_part.done',\n output_index: outputIndex,\n content_index: 0,\n item_id: responseId,\n part: createOutputTextPart(text),\n }),\n createResponseSseEvent({\n type: 'response.output_item.done',\n output_index: outputIndex,\n item: completedTextItem,\n }),\n ];\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_rolldown_runtime = require("../../rolldown-runtime-
|
|
2
|
+
const require_rolldown_runtime = require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
3
3
|
const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
|
|
4
|
-
const require_route_builder = require("../../route-builder-
|
|
4
|
+
const require_route_builder = require("../../route-builder-CWsok5ci.cjs");
|
|
5
5
|
const require_server_handlers_error = require("./error.cjs");
|
|
6
|
-
const require_utils = require("../../utils-
|
|
6
|
+
const require_utils = require("../../utils-DJMUhfvY.cjs");
|
|
7
7
|
const require_server_handlers_agents = require("./agents.cjs");
|
|
8
|
-
const require_responses = require("../../responses-
|
|
8
|
+
const require_responses = require("../../responses-CKNdSRkS.cjs");
|
|
9
9
|
const require_server_handlers_responses_adapter = require("./responses.adapter.cjs");
|
|
10
10
|
const require_server_handlers_responses_storage = require("./responses.storage.cjs");
|
|
11
11
|
let crypto = require("crypto");
|