@mastra/server 1.60.0-alpha.8 → 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 +140 -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-CpxQhZED.js → dist-Cw-T1gX6.js} +2818 -309
- 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-CpaK1qK1.cjs → dist-DERatX43.cjs} +2819 -310
- 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 +8 -8
- package/dist/constants-CXPpy-Ef.cjs.map +0 -1
- package/dist/constants-CutMu4A_.js.map +0 -1
- package/dist/dist-CpaK1qK1.cjs.map +0 -1
- package/dist/dist-CpxQhZED.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
|
@@ -1939,7 +1939,7 @@ export declare const LIST_EXPERIMENT_RESULTS_ROUTE: Omit<import("@mastra/core/se
|
|
|
1939
1939
|
traceId: string | null;
|
|
1940
1940
|
createdAt: Date;
|
|
1941
1941
|
expectedTrajectory?: unknown;
|
|
1942
|
-
status?: "
|
|
1942
|
+
status?: "complete" | "needs-review" | "reviewed" | null | undefined;
|
|
1943
1943
|
tags?: string[] | null | undefined;
|
|
1944
1944
|
comment?: string | null | undefined;
|
|
1945
1945
|
toolMockReport?: {
|
|
@@ -2007,9 +2007,9 @@ export declare const LIST_EXPERIMENT_RESULTS_ROUTE: Omit<import("@mastra/core/se
|
|
|
2007
2007
|
retryCount: z.ZodNumber;
|
|
2008
2008
|
traceId: z.ZodNullable<z.ZodString>;
|
|
2009
2009
|
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
2010
|
+
complete: "complete";
|
|
2010
2011
|
"needs-review": "needs-review";
|
|
2011
2012
|
reviewed: "reviewed";
|
|
2012
|
-
complete: "complete";
|
|
2013
2013
|
}>>>;
|
|
2014
2014
|
tags: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
2015
2015
|
comment: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -2061,7 +2061,7 @@ export declare const UPDATE_EXPERIMENT_RESULT_ROUTE: Omit<import("@mastra/core/s
|
|
|
2061
2061
|
experimentId: string;
|
|
2062
2062
|
resultId: string;
|
|
2063
2063
|
} & {
|
|
2064
|
-
status?: "
|
|
2064
|
+
status?: "complete" | "needs-review" | "reviewed" | null | undefined;
|
|
2065
2065
|
tags?: string[] | undefined;
|
|
2066
2066
|
comment?: string | null | undefined;
|
|
2067
2067
|
} & import("../server-adapter").ServerContext): Promise<{
|
|
@@ -2083,7 +2083,7 @@ export declare const UPDATE_EXPERIMENT_RESULT_ROUTE: Omit<import("@mastra/core/s
|
|
|
2083
2083
|
traceId: string | null;
|
|
2084
2084
|
createdAt: Date;
|
|
2085
2085
|
expectedTrajectory?: unknown;
|
|
2086
|
-
status?: "
|
|
2086
|
+
status?: "complete" | "needs-review" | "reviewed" | null | undefined;
|
|
2087
2087
|
tags?: string[] | null | undefined;
|
|
2088
2088
|
comment?: string | null | undefined;
|
|
2089
2089
|
toolMockReport?: {
|
|
@@ -2124,9 +2124,9 @@ export declare const UPDATE_EXPERIMENT_RESULT_ROUTE: Omit<import("@mastra/core/s
|
|
|
2124
2124
|
resultId: z.ZodString;
|
|
2125
2125
|
}, z.core.$strip>, undefined, z.ZodObject<{
|
|
2126
2126
|
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
2127
|
+
complete: "complete";
|
|
2127
2128
|
"needs-review": "needs-review";
|
|
2128
2129
|
reviewed: "reviewed";
|
|
2129
|
-
complete: "complete";
|
|
2130
2130
|
}>>>;
|
|
2131
2131
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
2132
2132
|
comment: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -2149,9 +2149,9 @@ export declare const UPDATE_EXPERIMENT_RESULT_ROUTE: Omit<import("@mastra/core/s
|
|
|
2149
2149
|
retryCount: z.ZodNumber;
|
|
2150
2150
|
traceId: z.ZodNullable<z.ZodString>;
|
|
2151
2151
|
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
2152
|
+
complete: "complete";
|
|
2152
2153
|
"needs-review": "needs-review";
|
|
2153
2154
|
reviewed: "reviewed";
|
|
2154
|
-
complete: "complete";
|
|
2155
2155
|
}>>>;
|
|
2156
2156
|
tags: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
2157
2157
|
comment: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
2
2
|
import { d as successResponseSchema } from "../../common-5ZZuR6wj.js";
|
|
3
3
|
import { n as createRoute } from "../../route-builder-YQ_gLIvW.js";
|
|
4
|
-
import {
|
|
4
|
+
import { p as isReservedRequestContextKey } from "../../constants-0jFCWoex.js";
|
|
5
5
|
import { handleError } from "./error.js";
|
|
6
6
|
import { A as listExperimentResultsResponseSchema, B as triggerExperimentBodySchema, C as experimentSummaryResponseSchema, F as listItemsResponseSchema, H as updateExperimentResultBodySchema, I as paginationQuerySchema, L as reviewSummaryResponseSchema, M as listExperimentsResponseSchema, N as listItemVersionsResponseSchema, O as listDatasetVersionsResponseSchema, P as listItemsQuerySchema, T as generateItemsResponseSchema, U as updateItemBodySchema, V as updateDatasetBodySchema, a as batchInsertItemsResponseSchema, b as experimentResultIdPathParams, c as compareExperimentsBodySchema, d as datasetAndExperimentIdPathParams, f as datasetAndItemIdPathParams, g as datasetResponseSchema, h as datasetItemVersionPathParams, i as batchInsertItemsBodySchema, j as listExperimentsQuerySchema, k as listDatasetsResponseSchema, l as comparisonResponseSchema, m as datasetItemResponseSchema, n as batchDeleteItemsBodySchema, o as clusterFailuresBodySchema, p as datasetIdPathParams, r as batchDeleteItemsResponseSchema, s as clusterFailuresResponseSchema, t as addItemBodySchema, u as createDatasetBodySchema, w as generateItemsBodySchema, x as experimentResultResponseSchema, y as experimentResponseSchema, z as tenancyQuerySchema } from "../../datasets-Dr1pCC6P.js";
|
|
7
7
|
import { z as z$1 } from "zod";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
3
|
+
const require_dynamic_workflows = require("../../dynamic-workflows-BZ5ru36x.cjs");
|
|
3
4
|
exports.DELETE_DYNAMIC_WORKFLOW_ROUTE = require_dynamic_workflows.DELETE_DYNAMIC_WORKFLOW_ROUTE;
|
|
4
5
|
exports.GET_DYNAMIC_WORKFLOW_ROUTE = require_dynamic_workflows.GET_DYNAMIC_WORKFLOW_ROUTE;
|
|
5
6
|
exports.LIST_DYNAMIC_WORKFLOWS_ROUTE = require_dynamic_workflows.LIST_DYNAMIC_WORKFLOWS_ROUTE;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as UPSERT_DYNAMIC_WORKFLOW_ROUTE, n as GET_DYNAMIC_WORKFLOW_ROUTE, r as LIST_DYNAMIC_WORKFLOWS_ROUTE, t as DELETE_DYNAMIC_WORKFLOW_ROUTE } from "../../dynamic-workflows-
|
|
1
|
+
import { i as UPSERT_DYNAMIC_WORKFLOW_ROUTE, n as GET_DYNAMIC_WORKFLOW_ROUTE, r as LIST_DYNAMIC_WORKFLOWS_ROUTE, t as DELETE_DYNAMIC_WORKFLOW_ROUTE } from "../../dynamic-workflows-C6U0Rdoc.js";
|
|
2
2
|
export { DELETE_DYNAMIC_WORKFLOW_ROUTE, GET_DYNAMIC_WORKFLOW_ROUTE, LIST_DYNAMIC_WORKFLOWS_ROUTE, UPSERT_DYNAMIC_WORKFLOW_ROUTE };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
3
|
+
const require_editor_builder = require("../../editor-builder-BmRQift0.cjs");
|
|
3
4
|
exports.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = require_editor_builder.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE;
|
|
4
5
|
exports.GET_EDITOR_BUILDER_SETTINGS_ROUTE = require_editor_builder.GET_EDITOR_BUILDER_SETTINGS_ROUTE;
|
|
5
6
|
exports.GET_INFRASTRUCTURE_STATUS_ROUTE = require_editor_builder.GET_INFRASTRUCTURE_STATUS_ROUTE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.cjs","names":["HTTPException"],"sources":["../../../src/server/handlers/error.ts"],"sourcesContent":["import type { ZodError } from 'zod';\n\nimport { HTTPException } from '../http-exception';\nimport type { StatusCode } from '../http-exception';\nimport type { ApiError } from '../types';\n\n/**\n * Duck-typed interface for ZodError-like objects.\n * Note: Zod v4 uses PropertyKey[] (string | number | symbol) for path.\n */\nexport interface ZodErrorLike {\n issues: Array<{\n path: PropertyKey[];\n message: string;\n }>;\n}\n\n/**\n * Recognition for `ModelNotAllowedError` from `@mastra/core/agent-builder/ee`.\n *\n * Inlined as a duck check rather than imported so that `handleError` (wired\n * into every route) does not force a load-time dependency on the\n * `@mastra/core/agent-builder/ee` subpath. That subpath only ships in\n * `@mastra/core >= 1.34.0`; deploys whose bundled `@mastra/server` resolves\n * against an older core would otherwise crash at startup with\n * `ERR_MODULE_NOT_FOUND` on `@mastra/core/dist/agent-builder/ee/index.js`.\n */\nconst MODEL_NOT_ALLOWED_CODE = 'MODEL_NOT_ALLOWED';\n\ninterface ModelNotAllowedErrorLike extends Error {\n code: typeof MODEL_NOT_ALLOWED_CODE;\n allowed?: unknown;\n attempted?: unknown;\n offendingLabel?: string;\n}\n\nfunction isModelNotAllowedError(error: unknown): error is ModelNotAllowedErrorLike {\n return error instanceof Error && (error as { code?: unknown }).code === MODEL_NOT_ALLOWED_CODE;\n}\n\nconst WORKFLOW_SCHEMA_VALIDATION_FAILED_CODE = 'WORKFLOW_SCHEMA_VALIDATION_FAILED';\n\nfunction isWorkflowSchemaValidationError(error: unknown): error is Error {\n return error instanceof Error && (error as { id?: unknown }).id === WORKFLOW_SCHEMA_VALIDATION_FAILED_CODE;\n}\n\n/**\n * Structural check for ZodError instances.\n *\n * Avoids `instanceof ZodError` because consumers can resolve `'zod'` to a\n * different package instance (e.g. `zod@^3`) than the one a server adapter is\n * bundled with (`zod@^4`). In that case `instanceof` is false and validation\n * errors fall through to a generic response that drops field-path information.\n *\n * See https://github.com/mastra-ai/mastra/issues/17167.\n */\nexport function isZodError(error: unknown): error is ZodError<any> {\n return (\n !!error &&\n typeof error === 'object' &&\n (error as { name?: unknown }).name === 'ZodError' &&\n Array.isArray((error as { issues?: unknown }).issues)\n );\n}\n\n/**\n * Formats a ZodError into a structured validation error response.\n * Returns an object with an error message and an array of field-specific issues.\n */\nexport function formatZodError(\n error: ZodErrorLike,\n context: string,\n): { error: string; issues: Array<{ field: string; message: string }> } {\n const issues = error.issues.map(e => ({\n field: e.path.length > 0 ? e.path.map(p => String(p)).join('.') : 'root',\n message: e.message,\n }));\n\n return {\n error: `Invalid ${context}`,\n issues,\n };\n}\n\n// Helper to handle errors consistently\nexport function handleError(error: unknown, defaultMessage: string): never {\n if (isModelNotAllowedError(error)) {\n const body = {\n error: {\n code: error.code,\n message: error.message,\n allowed: error.allowed,\n attempted: error.attempted,\n offendingLabel: error.offendingLabel,\n },\n };\n const res = new Response(JSON.stringify(body), {\n status: 422,\n headers: { 'content-type': 'application/json' },\n });\n throw new HTTPException(422, {\n res,\n message: error.message,\n cause: error,\n });\n }\n\n if (isWorkflowSchemaValidationError(error)) {\n throw new HTTPException(400, {\n message: error.message,\n stack: error.stack,\n cause: error,\n });\n }\n\n const apiError = error as ApiError;\n\n const apiErrorStatus = apiError.status || apiError.details?.status || 500;\n\n throw new HTTPException(apiErrorStatus as StatusCode, {\n message: apiError.message || defaultMessage,\n stack: apiError.stack,\n cause: apiError.cause,\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"error.cjs","names":["HTTPException"],"sources":["../../../src/server/handlers/error.ts"],"sourcesContent":["import type { ZodError } from 'zod';\n\nimport { HTTPException } from '../http-exception';\nimport type { StatusCode } from '../http-exception';\nimport type { ApiError } from '../types';\n\n/**\n * Duck-typed interface for ZodError-like objects.\n * Note: Zod v4 uses PropertyKey[] (string | number | symbol) for path.\n */\nexport interface ZodErrorLike {\n issues: Array<{\n path: PropertyKey[];\n message: string;\n }>;\n}\n\n/**\n * Recognition for `ModelNotAllowedError` from `@mastra/core/agent-builder/ee`.\n *\n * Inlined as a duck check rather than imported so that `handleError` (wired\n * into every route) does not force a load-time dependency on the\n * `@mastra/core/agent-builder/ee` subpath. That subpath only ships in\n * `@mastra/core >= 1.34.0`; deploys whose bundled `@mastra/server` resolves\n * against an older core would otherwise crash at startup with\n * `ERR_MODULE_NOT_FOUND` on `@mastra/core/dist/agent-builder/ee/index.js`.\n */\nconst MODEL_NOT_ALLOWED_CODE = 'MODEL_NOT_ALLOWED';\n\ninterface ModelNotAllowedErrorLike extends Error {\n code: typeof MODEL_NOT_ALLOWED_CODE;\n allowed?: unknown;\n attempted?: unknown;\n offendingLabel?: string;\n}\n\nfunction isModelNotAllowedError(error: unknown): error is ModelNotAllowedErrorLike {\n return error instanceof Error && (error as { code?: unknown }).code === MODEL_NOT_ALLOWED_CODE;\n}\n\nconst WORKFLOW_SCHEMA_VALIDATION_FAILED_CODE = 'WORKFLOW_SCHEMA_VALIDATION_FAILED';\n\nfunction isWorkflowSchemaValidationError(error: unknown): error is Error {\n return error instanceof Error && (error as { id?: unknown }).id === WORKFLOW_SCHEMA_VALIDATION_FAILED_CODE;\n}\n\n/**\n * Structural check for ZodError instances.\n *\n * Avoids `instanceof ZodError` because consumers can resolve `'zod'` to a\n * different package instance (e.g. `zod@^3`) than the one a server adapter is\n * bundled with (`zod@^4`). In that case `instanceof` is false and validation\n * errors fall through to a generic response that drops field-path information.\n *\n * See https://github.com/mastra-ai/mastra/issues/17167.\n */\nexport function isZodError(error: unknown): error is ZodError<any> {\n return (\n !!error &&\n typeof error === 'object' &&\n (error as { name?: unknown }).name === 'ZodError' &&\n Array.isArray((error as { issues?: unknown }).issues)\n );\n}\n\n/**\n * Formats a ZodError into a structured validation error response.\n * Returns an object with an error message and an array of field-specific issues.\n */\nexport function formatZodError(\n error: ZodErrorLike,\n context: string,\n): { error: string; issues: Array<{ field: string; message: string }> } {\n const issues = error.issues.map(e => ({\n field: e.path.length > 0 ? e.path.map(p => String(p)).join('.') : 'root',\n message: e.message,\n }));\n\n return {\n error: `Invalid ${context}`,\n issues,\n };\n}\n\n// Helper to handle errors consistently\nexport function handleError(error: unknown, defaultMessage: string): never {\n if (isModelNotAllowedError(error)) {\n const body = {\n error: {\n code: error.code,\n message: error.message,\n allowed: error.allowed,\n attempted: error.attempted,\n offendingLabel: error.offendingLabel,\n },\n };\n const res = new Response(JSON.stringify(body), {\n status: 422,\n headers: { 'content-type': 'application/json' },\n });\n throw new HTTPException(422, {\n res,\n message: error.message,\n cause: error,\n });\n }\n\n if (isWorkflowSchemaValidationError(error)) {\n throw new HTTPException(400, {\n message: error.message,\n stack: error.stack,\n cause: error,\n });\n }\n\n const apiError = error as ApiError;\n\n const apiErrorStatus = apiError.status || apiError.details?.status || 500;\n\n throw new HTTPException(apiErrorStatus as StatusCode, {\n message: apiError.message || defaultMessage,\n stack: apiError.stack,\n cause: apiError.cause,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,MAAM,yBAAyB;AAS/B,SAAS,uBAAuB,OAAmD;CACjF,OAAO,iBAAiB,SAAU,MAA6B,SAAS;AAC1E;AAEA,MAAM,yCAAyC;AAE/C,SAAS,gCAAgC,OAAgC;CACvE,OAAO,iBAAiB,SAAU,MAA2B,OAAO;AACtE;;;;;;;;;;;AAYA,SAAgB,WAAW,OAAwC;CACjE,OACE,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAA6B,SAAS,cACvC,MAAM,QAAS,MAA+B,MAAM;AAExD;;;;;AAMA,SAAgB,eACd,OACA,SACsE;CACtE,MAAM,SAAS,MAAM,OAAO,KAAI,OAAM;EACpC,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAI,MAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;EAClE,SAAS,EAAE;CACb,EAAE;CAEF,OAAO;EACL,OAAO,WAAW;EAClB;CACF;AACF;AAGA,SAAgB,YAAY,OAAgB,gBAA+B;CACzE,IAAI,uBAAuB,KAAK,GAAG;EACjC,MAAM,OAAO,EACX,OAAO;GACL,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,SAAS,MAAM;GACf,WAAW,MAAM;GACjB,gBAAgB,MAAM;EACxB,EACF;EAKA,MAAM,IAAIA,uBAAAA,cAAc,KAAK;GAC3B,KAAA,IALc,SAAS,KAAK,UAAU,IAAI,GAAG;IAC7C,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;GAChD,CAEI;GACF,SAAS,MAAM;GACf,OAAO;EACT,CAAC;CACH;CAEA,IAAI,gCAAgC,KAAK,GACvC,MAAM,IAAIA,uBAAAA,cAAc,KAAK;EAC3B,SAAS,MAAM;EACf,OAAO,MAAM;EACb,OAAO;CACT,CAAC;CAGH,MAAM,WAAW;CAIjB,MAAM,IAAIA,uBAAAA,cAFa,SAAS,UAAU,SAAS,SAAS,UAAU,KAEhB;EACpD,SAAS,SAAS,WAAW;EAC7B,OAAO,SAAS;EAChB,OAAO,SAAS;CAClB,CAAC;AACH"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
2
3
|
const require_server_handlers_authorship = require("./authorship.cjs");
|
|
3
|
-
const require_editor_builder = require("../../editor-builder-
|
|
4
|
+
const require_editor_builder = require("../../editor-builder-BmRQift0.cjs");
|
|
4
5
|
//#region src/server/handlers/favorites-enrichment.ts
|
|
5
6
|
/**
|
|
6
7
|
* Resolve the EE feature flag plus the caller's favorited set for a list of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favorites-enrichment.cjs","names":["isBuilderFeatureEnabled","getCallerAuthorId"],"sources":["../../../src/server/handlers/favorites-enrichment.ts"],"sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"favorites-enrichment.cjs","names":["isBuilderFeatureEnabled","getCallerAuthorId"],"sources":["../../../src/server/handlers/favorites-enrichment.ts"],"sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"],"mappings":";;;;;;;;;;;AAyBA,eAAsB,2BACpB,QACA,gBACA,YACA,WACqC;CACrC,IAAI,CAAE,MAAMA,uBAAAA,wBAAwB,QAAQ,WAAW,GAAI,OAAO;CAElE,MAAM,SAASC,mCAAAA,kBAAkB,cAAc;CAC/C,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,UAAU,OAAO,WAAW;CAClC,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,iBAAiB,MAAM,QAAQ,SAAS,WAAW;CACzD,IAAI,CAAC,gBAAgB,OAAO;CAM5B,OAAO;EAAE;EAAQ,YAHf,UAAU,WAAW,oBACjB,IAAI,IAAY,IAChB,MAAM,eAAe,iBAAiB;GAAE;GAAQ;GAAY;EAAU,CAAC;EAChD;CAAe;AAC9C;;;;;AAMA,SAAgB,oBAAsC,QAAc;CAClE,IAAI,iBAAiB,UAAU,mBAAmB,QAAQ;EACxD,MAAM,OAAO,EAAE,GAAG,OAAO;EACzB,OAAO,KAAK;EACZ,OAAO,KAAK;EACZ,OAAO;CACT;CACA,OAAO;AACT;;;;;;;;AASA,eAAsB,uBACpB,QACA,gBACA,YACA,QACY;CACZ,MAAM,aAAa,MAAM,2BAA2B,QAAQ,gBAAgB,YAAY,CAAC,OAAO,EAAE,CAAC;CACnG,IAAI,YACF,OAAO;EAAE,GAAG;EAAQ,aAAa,WAAW,WAAW,IAAI,OAAO,EAAE;CAAE;CAExE,OAAO,oBAAoB,MAAM;AACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-memory-client.cjs","names":[],"sources":["../../../src/server/handlers/gateway-memory-client.ts"],"sourcesContent":["/**\n * HTTP client for the Gateway memory REST API.\n * Used to proxy memory operations from the local Mastra server to the remote gateway\n * when agents use `mastra/` model strings.\n */\n\ninterface GatewayThread {\n id: string;\n projectId: string;\n resourceId: string;\n title: string | null;\n metadata: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface GatewayMessage {\n id: string;\n threadId: string;\n role: string;\n content: unknown;\n type: string;\n createdAt: string;\n}\n\ninterface GatewayBufferedObservationChunk {\n id?: string;\n cycleId: string;\n observations: string;\n tokenCount: number;\n messageIds?: string[];\n messageTokens: number;\n lastObservedAt?: string | null;\n createdAt?: string | null;\n suggestedContinuation?: string;\n currentTask?: string;\n threadTitle?: string;\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n}\n\ninterface GatewayOMRecord {\n id: string;\n scope: string;\n threadId: string | null;\n resourceId: string;\n createdAt: string;\n updatedAt: string;\n lastObservedAt: string | null;\n originType: string;\n generationCount: number;\n activeObservations: unknown;\n totalTokensObserved: number;\n observationTokenCount: number;\n pendingMessageTokens: number;\n isReflecting: boolean;\n isObserving: boolean;\n isBufferingObservation: boolean;\n isBufferingReflection: boolean;\n config?: Record<string, unknown>;\n bufferedObservationChunks?: GatewayBufferedObservationChunk[];\n bufferedReflection?: string | null;\n bufferedReflectionTokens?: number | null;\n bufferedReflectionInputTokens?: number | null;\n}\n\nexport class GatewayMemoryClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n // Strip trailing slashes and /v1 suffix so both URL forms resolve correctly\n this.baseUrl = baseUrl.replace(/\\/+$/, '').replace(/\\/v1$/, '') + '/v1/memory';\n this.apiKey = apiKey;\n }\n\n private threadPath(threadId: string): string {\n return `/threads/${encodeURIComponent(threadId)}`;\n }\n\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const res = await fetch(url, {\n ...options,\n signal: options.signal ?? controller.signal,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n ...((options.headers as Record<string, string>) || {}),\n },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n throw new Error(`Gateway API error ${res.status}: ${body}`);\n }\n\n return res.json() as Promise<T>;\n } finally {\n clearTimeout(timeout);\n }\n }\n\n // ── Threads ──────────────────────────────────────────────────\n\n async listThreads(params: {\n resourceId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ threads: GatewayThread[]; total: number }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n return this.request(`/threads${qs ? '?' + qs : ''}`);\n }\n\n async getThread(threadId: string): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId));\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async createThread(params: {\n id?: string;\n resourceId: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }): Promise<{ thread: GatewayThread }> {\n return this.request('/threads', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async updateThread(\n threadId: string,\n params: { title?: string; metadata?: Record<string, unknown> },\n ): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId), {\n method: 'PATCH',\n body: JSON.stringify(params),\n });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async deleteThread(threadId: string): Promise<{ ok: boolean }> {\n try {\n return await this.request(this.threadPath(threadId), { method: 'DELETE' });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { ok: false };\n throw e;\n }\n }\n\n // ── Messages ─────────────────────────────────────────────────\n\n async listMessages(\n threadId: string,\n params: { limit?: number; offset?: number; order?: string },\n ): Promise<{ messages: GatewayMessage[]; total: number } | null> {\n const query = new URLSearchParams();\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n if (params.order) query.set('order', params.order);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/messages${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n // ── Observational Memory ─────────────────────────────────────\n\n async getObservations(threadId: string, resourceId?: string): Promise<{ observations: unknown }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n return this.request(`${this.threadPath(threadId)}/observations${qs ? '?' + qs : ''}`);\n }\n\n async getObservationRecord(threadId: string, resourceId?: string): Promise<{ record: GatewayOMRecord | null }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/record${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { record: null };\n throw e;\n }\n }\n\n async getObservationHistory(\n threadId: string,\n params: { resourceId?: string; limit?: number; from?: Date; to?: Date; offset?: number },\n ): Promise<{ records: GatewayOMRecord[] }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.from) query.set('from', params.from.toISOString());\n if (params.to) query.set('to', params.to.toISOString());\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/history${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { records: [] };\n throw e;\n }\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────\n\n/**\n * Convert a gateway thread to the local server thread format.\n */\nexport function toLocalThread(gt: GatewayThread) {\n return {\n id: gt.id,\n resourceId: gt.resourceId,\n title: gt.title ?? '',\n metadata: gt.metadata ?? {},\n createdAt: new Date(gt.createdAt),\n updatedAt: new Date(gt.updatedAt),\n };\n}\n\n/**\n * Convert a gateway message to the local server message format.\n */\nexport function toLocalMessage(gm: GatewayMessage) {\n return {\n id: gm.id,\n threadId: gm.threadId,\n role: gm.role,\n content: gm.content,\n type: gm.type,\n createdAt: new Date(gm.createdAt),\n };\n}\n\n/**\n * Convert a gateway OM record to the local server OM record format.\n */\nexport function toLocalOMRecord(gr: GatewayOMRecord) {\n return {\n id: gr.id,\n scope: gr.scope as 'thread' | 'resource',\n threadId: gr.threadId,\n resourceId: gr.resourceId,\n createdAt: new Date(gr.createdAt),\n updatedAt: new Date(gr.updatedAt),\n lastObservedAt: gr.lastObservedAt ? new Date(gr.lastObservedAt) : undefined,\n originType: gr.originType as 'initial' | 'reflection' | 'observation',\n generationCount: gr.generationCount,\n activeObservations: (gr.activeObservations ?? '') as string,\n totalTokensObserved: gr.totalTokensObserved,\n observationTokenCount: gr.observationTokenCount,\n pendingMessageTokens: gr.pendingMessageTokens,\n isReflecting: gr.isReflecting,\n isObserving: gr.isObserving,\n isBufferingObservation: gr.isBufferingObservation,\n isBufferingReflection: gr.isBufferingReflection,\n config: gr.config ?? {},\n bufferedObservationChunks: gr.bufferedObservationChunks?.map(chunk => ({\n ...chunk,\n lastObservedAt: chunk.lastObservedAt ? new Date(chunk.lastObservedAt) : undefined,\n createdAt: chunk.createdAt ? new Date(chunk.createdAt) : undefined,\n })),\n bufferedReflection: gr.bufferedReflection ?? undefined,\n bufferedReflectionTokens: gr.bufferedReflectionTokens ?? undefined,\n bufferedReflectionInputTokens: gr.bufferedReflectionInputTokens ?? undefined,\n };\n}\n\n// Singleton-ish lazy instance\nlet _gatewayClient: GatewayMemoryClient | null | undefined;\n\n/**\n * Get a GatewayMemoryClient instance, or null if gateway is not configured.\n */\nexport function getGatewayClient(): GatewayMemoryClient | null {\n if (_gatewayClient !== undefined) return _gatewayClient;\n const url = process.env.MASTRA_GATEWAY_URL || 'https://gateway-api.mastra.ai';\n const key = process.env.MASTRA_GATEWAY_API_KEY;\n if (!key) {\n _gatewayClient = null;\n return null;\n }\n _gatewayClient = new GatewayMemoryClient(url, key);\n return _gatewayClient;\n}\n\n/**\n * Check if an agent uses a gateway model (mastra/ prefix).\n * Sync version — can only check agent.model string directly.\n */\n\nexport function isGatewayAgent(agent: any): boolean {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n } catch {\n // Ignore errors during detection\n }\n return false;\n}\n\n/**\n * Async version of isGatewayAgent that can await getLLM().\n * Checks multiple paths to detect if an agent uses a mastra/ gateway model:\n * 1. agent.model as raw string (most reliable for directly configured agents)\n * 2. Resolved LLM's underlying ModelRouterLanguageModel config.routerId\n * 3. Resolved LLM's getModel() to access the router's config\n */\n\nexport async function isGatewayAgentAsync(agent: any): Promise<boolean> {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n\n // Check 1: agent.model is a raw string like 'mastra/openai/gpt-5-mini'\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n\n // Check 2: Resolve the LLM and check the router's config.routerId\n // llm.getModelId() returns stripped ID (e.g., 'gpt-5-mini'), so we need\n // to access the underlying ModelRouterLanguageModel's config.routerId\n if (typeof agent.getLLM === 'function') {\n const llm = await Promise.resolve(agent.getLLM({}));\n if (llm) {\n // Try to access the underlying model's routerId via getModel()\n const llmAny = llm as Record<string, unknown>;\n if (typeof llmAny.getModel === 'function') {\n const underlyingModel = (llmAny as { getModel: () => unknown }).getModel();\n const modelAny = underlyingModel as Record<string, unknown>;\n // ModelRouterLanguageModel stores routerId in private config\n if (modelAny?.config && typeof modelAny.config === 'object') {\n const routerId = (modelAny.config as Record<string, unknown>).routerId;\n if (typeof routerId === 'string' && routerId.startsWith('mastra/')) {\n return true;\n }\n }\n }\n }\n }\n } catch {\n // Detection failed — not a gateway agent\n }\n return false;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway-memory-client.cjs","names":[],"sources":["../../../src/server/handlers/gateway-memory-client.ts"],"sourcesContent":["/**\n * HTTP client for the Gateway memory REST API.\n * Used to proxy memory operations from the local Mastra server to the remote gateway\n * when agents use `mastra/` model strings.\n */\n\ninterface GatewayThread {\n id: string;\n projectId: string;\n resourceId: string;\n title: string | null;\n metadata: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface GatewayMessage {\n id: string;\n threadId: string;\n role: string;\n content: unknown;\n type: string;\n createdAt: string;\n}\n\ninterface GatewayBufferedObservationChunk {\n id?: string;\n cycleId: string;\n observations: string;\n tokenCount: number;\n messageIds?: string[];\n messageTokens: number;\n lastObservedAt?: string | null;\n createdAt?: string | null;\n suggestedContinuation?: string;\n currentTask?: string;\n threadTitle?: string;\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n}\n\ninterface GatewayOMRecord {\n id: string;\n scope: string;\n threadId: string | null;\n resourceId: string;\n createdAt: string;\n updatedAt: string;\n lastObservedAt: string | null;\n originType: string;\n generationCount: number;\n activeObservations: unknown;\n totalTokensObserved: number;\n observationTokenCount: number;\n pendingMessageTokens: number;\n isReflecting: boolean;\n isObserving: boolean;\n isBufferingObservation: boolean;\n isBufferingReflection: boolean;\n config?: Record<string, unknown>;\n bufferedObservationChunks?: GatewayBufferedObservationChunk[];\n bufferedReflection?: string | null;\n bufferedReflectionTokens?: number | null;\n bufferedReflectionInputTokens?: number | null;\n}\n\nexport class GatewayMemoryClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n // Strip trailing slashes and /v1 suffix so both URL forms resolve correctly\n this.baseUrl = baseUrl.replace(/\\/+$/, '').replace(/\\/v1$/, '') + '/v1/memory';\n this.apiKey = apiKey;\n }\n\n private threadPath(threadId: string): string {\n return `/threads/${encodeURIComponent(threadId)}`;\n }\n\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const res = await fetch(url, {\n ...options,\n signal: options.signal ?? controller.signal,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n ...((options.headers as Record<string, string>) || {}),\n },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n throw new Error(`Gateway API error ${res.status}: ${body}`);\n }\n\n return res.json() as Promise<T>;\n } finally {\n clearTimeout(timeout);\n }\n }\n\n // ── Threads ──────────────────────────────────────────────────\n\n async listThreads(params: {\n resourceId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ threads: GatewayThread[]; total: number }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n return this.request(`/threads${qs ? '?' + qs : ''}`);\n }\n\n async getThread(threadId: string): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId));\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async createThread(params: {\n id?: string;\n resourceId: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }): Promise<{ thread: GatewayThread }> {\n return this.request('/threads', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async updateThread(\n threadId: string,\n params: { title?: string; metadata?: Record<string, unknown> },\n ): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId), {\n method: 'PATCH',\n body: JSON.stringify(params),\n });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async deleteThread(threadId: string): Promise<{ ok: boolean }> {\n try {\n return await this.request(this.threadPath(threadId), { method: 'DELETE' });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { ok: false };\n throw e;\n }\n }\n\n // ── Messages ─────────────────────────────────────────────────\n\n async listMessages(\n threadId: string,\n params: { limit?: number; offset?: number; order?: string },\n ): Promise<{ messages: GatewayMessage[]; total: number } | null> {\n const query = new URLSearchParams();\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n if (params.order) query.set('order', params.order);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/messages${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n // ── Observational Memory ─────────────────────────────────────\n\n async getObservations(threadId: string, resourceId?: string): Promise<{ observations: unknown }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n return this.request(`${this.threadPath(threadId)}/observations${qs ? '?' + qs : ''}`);\n }\n\n async getObservationRecord(threadId: string, resourceId?: string): Promise<{ record: GatewayOMRecord | null }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/record${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { record: null };\n throw e;\n }\n }\n\n async getObservationHistory(\n threadId: string,\n params: { resourceId?: string; limit?: number; from?: Date; to?: Date; offset?: number },\n ): Promise<{ records: GatewayOMRecord[] }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.from) query.set('from', params.from.toISOString());\n if (params.to) query.set('to', params.to.toISOString());\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/history${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { records: [] };\n throw e;\n }\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────\n\n/**\n * Convert a gateway thread to the local server thread format.\n */\nexport function toLocalThread(gt: GatewayThread) {\n return {\n id: gt.id,\n resourceId: gt.resourceId,\n title: gt.title ?? '',\n metadata: gt.metadata ?? {},\n createdAt: new Date(gt.createdAt),\n updatedAt: new Date(gt.updatedAt),\n };\n}\n\n/**\n * Convert a gateway message to the local server message format.\n */\nexport function toLocalMessage(gm: GatewayMessage) {\n return {\n id: gm.id,\n threadId: gm.threadId,\n role: gm.role,\n content: gm.content,\n type: gm.type,\n createdAt: new Date(gm.createdAt),\n };\n}\n\n/**\n * Convert a gateway OM record to the local server OM record format.\n */\nexport function toLocalOMRecord(gr: GatewayOMRecord) {\n return {\n id: gr.id,\n scope: gr.scope as 'thread' | 'resource',\n threadId: gr.threadId,\n resourceId: gr.resourceId,\n createdAt: new Date(gr.createdAt),\n updatedAt: new Date(gr.updatedAt),\n lastObservedAt: gr.lastObservedAt ? new Date(gr.lastObservedAt) : undefined,\n originType: gr.originType as 'initial' | 'reflection' | 'observation',\n generationCount: gr.generationCount,\n activeObservations: (gr.activeObservations ?? '') as string,\n totalTokensObserved: gr.totalTokensObserved,\n observationTokenCount: gr.observationTokenCount,\n pendingMessageTokens: gr.pendingMessageTokens,\n isReflecting: gr.isReflecting,\n isObserving: gr.isObserving,\n isBufferingObservation: gr.isBufferingObservation,\n isBufferingReflection: gr.isBufferingReflection,\n config: gr.config ?? {},\n bufferedObservationChunks: gr.bufferedObservationChunks?.map(chunk => ({\n ...chunk,\n lastObservedAt: chunk.lastObservedAt ? new Date(chunk.lastObservedAt) : undefined,\n createdAt: chunk.createdAt ? new Date(chunk.createdAt) : undefined,\n })),\n bufferedReflection: gr.bufferedReflection ?? undefined,\n bufferedReflectionTokens: gr.bufferedReflectionTokens ?? undefined,\n bufferedReflectionInputTokens: gr.bufferedReflectionInputTokens ?? undefined,\n };\n}\n\n// Singleton-ish lazy instance\nlet _gatewayClient: GatewayMemoryClient | null | undefined;\n\n/**\n * Get a GatewayMemoryClient instance, or null if gateway is not configured.\n */\nexport function getGatewayClient(): GatewayMemoryClient | null {\n if (_gatewayClient !== undefined) return _gatewayClient;\n const url = process.env.MASTRA_GATEWAY_URL || 'https://gateway-api.mastra.ai';\n const key = process.env.MASTRA_GATEWAY_API_KEY;\n if (!key) {\n _gatewayClient = null;\n return null;\n }\n _gatewayClient = new GatewayMemoryClient(url, key);\n return _gatewayClient;\n}\n\n/**\n * Check if an agent uses a gateway model (mastra/ prefix).\n * Sync version — can only check agent.model string directly.\n */\n\nexport function isGatewayAgent(agent: any): boolean {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n } catch {\n // Ignore errors during detection\n }\n return false;\n}\n\n/**\n * Async version of isGatewayAgent that can await getLLM().\n * Checks multiple paths to detect if an agent uses a mastra/ gateway model:\n * 1. agent.model as raw string (most reliable for directly configured agents)\n * 2. Resolved LLM's underlying ModelRouterLanguageModel config.routerId\n * 3. Resolved LLM's getModel() to access the router's config\n */\n\nexport async function isGatewayAgentAsync(agent: any): Promise<boolean> {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n\n // Check 1: agent.model is a raw string like 'mastra/openai/gpt-5-mini'\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n\n // Check 2: Resolve the LLM and check the router's config.routerId\n // llm.getModelId() returns stripped ID (e.g., 'gpt-5-mini'), so we need\n // to access the underlying ModelRouterLanguageModel's config.routerId\n if (typeof agent.getLLM === 'function') {\n const llm = await Promise.resolve(agent.getLLM({}));\n if (llm) {\n // Try to access the underlying model's routerId via getModel()\n const llmAny = llm as Record<string, unknown>;\n if (typeof llmAny.getModel === 'function') {\n const underlyingModel = (llmAny as { getModel: () => unknown }).getModel();\n const modelAny = underlyingModel as Record<string, unknown>;\n // ModelRouterLanguageModel stores routerId in private config\n if (modelAny?.config && typeof modelAny.config === 'object') {\n const routerId = (modelAny.config as Record<string, unknown>).routerId;\n if (typeof routerId === 'string' && routerId.startsWith('mastra/')) {\n return true;\n }\n }\n }\n }\n }\n } catch {\n // Detection failed — not a gateway agent\n }\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
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_common = require("../../common-DQn8jX5T.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_logs = require("../../logs-BDuGFqxu.cjs");
|
|
8
8
|
//#region src/server/handlers/logs.ts
|
|
9
9
|
var logs_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as __exportAll } from "../../rolldown-runtime-maW3aOIk.js";
|
|
2
2
|
import { l as runIdSchema } from "../../common-5ZZuR6wj.js";
|
|
3
3
|
import { n as createRoute } from "../../route-builder-YQ_gLIvW.js";
|
|
4
4
|
import { handleError } from "./error.js";
|
|
5
|
-
import { c as validateBody, i as parseFilters } from "../../utils-
|
|
5
|
+
import { c as validateBody, i as parseFilters } from "../../utils-Hz8Hc2cd.js";
|
|
6
6
|
import { n as listLogsQuerySchema, r as listLogsResponseSchema, t as listLogTransportsResponseSchema } from "../../logs-Cz5NiwGP.js";
|
|
7
7
|
//#region src/server/handlers/logs.ts
|
|
8
8
|
var logs_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -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_mcp_client_versions = require("../../mcp-client-versions-CG7po4hq.cjs");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client-versions.cjs","names":["createRoute","mcpClientVersionPathParams","listMCPClientVersionsQuerySchema","listMCPClientVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createMCPClientVersionBodySchema","createMCPClientVersionResponseSchema","extractConfigFromVersion","MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","mcpClientVersionIdPathParams","getMCPClientVersionResponseSchema","activateMCPClientVersionResponseSchema","restoreMCPClientVersionResponseSchema","deleteMCPClientVersionResponseSchema","compareMCPClientVersionsQuerySchema","compareMCPClientVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/mcp-client-versions.ts"],"sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n mcpClientVersionPathParams,\n mcpClientVersionIdPathParams,\n listMCPClientVersionsQuerySchema,\n createMCPClientVersionBodySchema,\n compareMCPClientVersionsQuerySchema,\n listMCPClientVersionsResponseSchema,\n getMCPClientVersionResponseSchema,\n createMCPClientVersionResponseSchema,\n activateMCPClientVersionResponseSchema,\n restoreMCPClientVersionResponseSchema,\n deleteMCPClientVersionResponseSchema,\n compareMCPClientVersionsResponseSchema,\n} from '../schemas/mcp-client-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 MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions - List all versions for an MCP client\n */\nexport const LIST_MCP_CLIENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n queryParamSchema: listMCPClientVersionsQuerySchema,\n responseSchema: listMCPClientVersionsResponseSchema,\n summary: 'List MCP client versions',\n description: 'Returns a paginated list of all versions for a stored MCP client',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const result = await mcpClientStore.listVersions({\n mcpClientId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing MCP client versions');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions - Create a new version snapshot\n */\nexport const CREATE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n bodySchema: createMCPClientVersionBodySchema,\n responseSchema: createMCPClientVersionResponseSchema,\n summary: 'Create MCP client version',\n description: 'Creates a new version snapshot of the current MCP client configuration',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (mcpClient.activeVersionId) {\n const activeVersion = await mcpClientStore.getVersion(mcpClient.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await mcpClientStore.getLatestVersion(mcpClientId);\n\n // If no activeVersionId, fall back to latest version config\n if (!mcpClient.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n )\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n mcpClient.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating MCP client version');\n }\n },\n});\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions/:versionId - Get a specific version\n */\nexport const GET_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: getMCPClientVersionResponseSchema,\n summary: 'Get MCP client version',\n description: 'Returns a specific version of an MCP client by its version ID',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const version = await mcpClientStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting MCP client version');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: activateMCPClientVersionResponseSchema,\n summary: 'Activate MCP client version',\n description: 'Sets a specific version as the active version for the MCP client',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n await mcpClientStore.update({\n id: mcpClientId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\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 MCP client version');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions/:versionId/restore - Restore MCP client to a version\n */\nexport const RESTORE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: restoreMCPClientVersionResponseSchema,\n summary: 'Restore MCP client version',\n description: 'Restores the MCP client configuration from a version, creating a new version',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await mcpClientStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n\n await mcpClientStore.update({\n id: mcpClientId,\n ...restoredConfig,\n });\n\n const latestVersion = await mcpClientStore.getLatestVersion(mcpClientId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n )\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await mcpClientStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n mcpClient.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring MCP client version');\n }\n },\n});\n\n/**\n * DELETE /stored/mcp-clients/:mcpClientId/versions/:versionId - Delete a version\n */\nexport const DELETE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: deleteMCPClientVersionResponseSchema,\n summary: 'Delete MCP client version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n if (mcpClient.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await mcpClientStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting MCP client version');\n }\n },\n});\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions/compare - Compare two versions\n */\nexport const COMPARE_MCP_CLIENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n queryParamSchema: compareMCPClientVersionsQuerySchema,\n responseSchema: compareMCPClientVersionsResponseSchema,\n summary: 'Compare MCP client versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await mcpClientStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const toVersion = await mcpClientStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_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 MCP client versions');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-client-versions.cjs","names":["createRoute","mcpClientVersionPathParams","listMCPClientVersionsQuerySchema","listMCPClientVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createMCPClientVersionBodySchema","createMCPClientVersionResponseSchema","extractConfigFromVersion","MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","mcpClientVersionIdPathParams","getMCPClientVersionResponseSchema","activateMCPClientVersionResponseSchema","restoreMCPClientVersionResponseSchema","deleteMCPClientVersionResponseSchema","compareMCPClientVersionsQuerySchema","compareMCPClientVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/mcp-client-versions.ts"],"sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n mcpClientVersionPathParams,\n mcpClientVersionIdPathParams,\n listMCPClientVersionsQuerySchema,\n createMCPClientVersionBodySchema,\n compareMCPClientVersionsQuerySchema,\n listMCPClientVersionsResponseSchema,\n getMCPClientVersionResponseSchema,\n createMCPClientVersionResponseSchema,\n activateMCPClientVersionResponseSchema,\n restoreMCPClientVersionResponseSchema,\n deleteMCPClientVersionResponseSchema,\n compareMCPClientVersionsResponseSchema,\n} from '../schemas/mcp-client-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 MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions - List all versions for an MCP client\n */\nexport const LIST_MCP_CLIENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n queryParamSchema: listMCPClientVersionsQuerySchema,\n responseSchema: listMCPClientVersionsResponseSchema,\n summary: 'List MCP client versions',\n description: 'Returns a paginated list of all versions for a stored MCP client',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const result = await mcpClientStore.listVersions({\n mcpClientId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing MCP client versions');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions - Create a new version snapshot\n */\nexport const CREATE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n bodySchema: createMCPClientVersionBodySchema,\n responseSchema: createMCPClientVersionResponseSchema,\n summary: 'Create MCP client version',\n description: 'Creates a new version snapshot of the current MCP client configuration',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (mcpClient.activeVersionId) {\n const activeVersion = await mcpClientStore.getVersion(mcpClient.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await mcpClientStore.getLatestVersion(mcpClientId);\n\n // If no activeVersionId, fall back to latest version config\n if (!mcpClient.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n )\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n mcpClient.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating MCP client version');\n }\n },\n});\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions/:versionId - Get a specific version\n */\nexport const GET_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: getMCPClientVersionResponseSchema,\n summary: 'Get MCP client version',\n description: 'Returns a specific version of an MCP client by its version ID',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const version = await mcpClientStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting MCP client version');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: activateMCPClientVersionResponseSchema,\n summary: 'Activate MCP client version',\n description: 'Sets a specific version as the active version for the MCP client',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n await mcpClientStore.update({\n id: mcpClientId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\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 MCP client version');\n }\n },\n});\n\n/**\n * POST /stored/mcp-clients/:mcpClientId/versions/:versionId/restore - Restore MCP client to a version\n */\nexport const RESTORE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: restoreMCPClientVersionResponseSchema,\n summary: 'Restore MCP client version',\n description: 'Restores the MCP client configuration from a version, creating a new version',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await mcpClientStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n\n await mcpClientStore.update({\n id: mcpClientId,\n ...restoredConfig,\n });\n\n const latestVersion = await mcpClientStore.getLatestVersion(mcpClientId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n )\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await mcpClientStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n mcpClientStore as unknown as VersionedStoreInterface,\n mcpClientId,\n 'mcpClientId',\n mcpClient.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring MCP client version');\n }\n },\n});\n\n/**\n * DELETE /stored/mcp-clients/:mcpClientId/versions/:versionId - Delete a version\n */\nexport const DELETE_MCP_CLIENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/mcp-clients/:mcpClientId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionIdPathParams,\n responseSchema: deleteMCPClientVersionResponseSchema,\n summary: 'Delete MCP client version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n if (!mcpClient) {\n throw new HTTPException(404, { message: `MCP client with id ${mcpClientId} not found` });\n }\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const version = await mcpClientStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for MCP client ${mcpClientId}`,\n });\n }\n\n if (mcpClient.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await mcpClientStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.mcp.clearCache(mcpClientId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting MCP client version');\n }\n },\n});\n\n/**\n * GET /stored/mcp-clients/:mcpClientId/versions/compare - Compare two versions\n */\nexport const COMPARE_MCP_CLIENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/mcp-clients/:mcpClientId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: mcpClientVersionPathParams,\n queryParamSchema: compareMCPClientVersionsQuerySchema,\n responseSchema: compareMCPClientVersionsResponseSchema,\n summary: 'Compare MCP client versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['MCP Client Versions'],\n handler: async ({ mastra, mcpClientId, 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 mcpClientStore = await storage.getStore('mcpClients');\n if (!mcpClientStore) {\n throw new HTTPException(500, { message: 'MCP clients storage domain is not available' });\n }\n const mcpClient = await mcpClientStore.getById(mcpClientId);\n assertStoredResourceScope(mcpClient, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await mcpClientStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const toVersion = await mcpClientStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.mcpClientId !== mcpClientId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for MCP client ${mcpClientId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n MCP_CLIENT_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 MCP client 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 { MCP_CLIENT_SNAPSHOT_CONFIG_FIELDS, calculateChangedFields, computeVersionDiffs, createVersionWithRetry, enforceRetentionLimit, extractConfigFromVersion } from "./version-helpers.js";
|
|
6
6
|
import { a as createMCPClientVersionResponseSchema, c as listMCPClientVersionsQuerySchema, d as mcpClientVersionPathParams, i as createMCPClientVersionBodySchema, l as listMCPClientVersionsResponseSchema, n as compareMCPClientVersionsQuerySchema, o as deleteMCPClientVersionResponseSchema, p as restoreMCPClientVersionResponseSchema, r as compareMCPClientVersionsResponseSchema, s as getMCPClientVersionResponseSchema, t as activateMCPClientVersionResponseSchema, u as mcpClientVersionIdPathParams } from "../../mcp-client-versions-Co8d39A6.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
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_mcp = require("../../mcp-Buvksst5.cjs");
|
|
6
6
|
//#region src/server/handlers/mcp.ts
|
|
7
7
|
var mcp_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as __exportAll } from "../../rolldown-runtime-maW3aOIk.js";
|
|
2
2
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
3
3
|
import { n as createRoute } from "../../route-builder-YQ_gLIvW.js";
|
|
4
4
|
import { a as listMcpServerToolsResponseSchema, c as listResourcesResponseSchema, d as mcpServerResourcePathParams, f as mcpServerToolPathParams, g as serverDetailSchema, h as readResourceResponseSchema, l as mcpServerDetailPathParams, m as readResourceBodySchema, n as executeToolResponseSchema, o as listMcpServersQuerySchema, p as mcpToolInfoSchema, r as getMcpServerDetailQuerySchema, s as listMcpServersResponseSchema, t as executeToolBodySchema, u as mcpServerIdPathParams } from "../../mcp-oOFVSK8L.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
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_memory = require("../../memory-D0prxytx.cjs");
|
|
8
8
|
const require_server_handlers_gateway_memory_client = require("./gateway-memory-client.cjs");
|
|
9
9
|
let _mastra_core_agent = require("@mastra/core/agent");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as __exportAll } from "../../rolldown-runtime-maW3aOIk.js";
|
|
2
2
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
3
3
|
import { n as createRoute } from "../../route-builder-YQ_gLIvW.js";
|
|
4
4
|
import { handleError } from "./error.js";
|
|
5
|
-
import { c as validateBody, d as MastraFGAPermissions, n as getEffectiveResourceId, r as getEffectiveThreadId, t as enforceThreadAccess } from "../../utils-
|
|
5
|
+
import { c as validateBody, d as MastraFGAPermissions, n as getEffectiveResourceId, r as getEffectiveThreadId, t as enforceThreadAccess } from "../../utils-Hz8Hc2cd.js";
|
|
6
6
|
import { A as listThreadsResponseSchema, B as updateThreadBodySchema, C as getWorkingMemoryQuerySchema, D as listMessagesResponseSchema, E as listMessagesQuerySchema, F as saveMessagesNetworkQuerySchema, H as updateWorkingMemoryBodySchema, I as saveMessagesResponseSchema, L as searchMemoryQuerySchema, M as memoryStatusResponseSchema, O as listThreadsNetworkQuerySchema, P as saveMessagesBodySchema, R as searchMemoryResponseSchema, S as getThreadByIdResponseSchema, T as listMessagesNetworkQuerySchema, U as updateWorkingMemoryResponseSchema, V as updateThreadNetworkQuerySchema, _ as getMemoryStatusQuerySchema, a as cloneThreadResponseSchema, b as getThreadByIdNetworkQuerySchema, c as deleteMessagesBodySchema, d as deleteMessagesResponseSchema, f as deleteThreadNetworkQuerySchema, g as getMemoryStatusNetworkQuerySchema, h as getMemoryConfigQuerySchema, i as cloneThreadBodySchema, j as memoryConfigResponseSchema, k as listThreadsQuerySchema, l as deleteMessagesNetworkQuerySchema, m as deleteThreadResponseSchema, n as awaitBufferStatusBodySchema, o as createThreadBodySchema, p as deleteThreadQuerySchema, r as awaitBufferStatusResponseSchema, s as createThreadNetworkQuerySchema, t as agentIdQuerySchema, u as deleteMessagesQuerySchema, v as getObservationalMemoryQuerySchema, w as getWorkingMemoryResponseSchema, x as getThreadByIdQuerySchema, y as getObservationalMemoryResponseSchema, z as threadIdPathParams } from "../../memory-CBLqn9xl.js";
|
|
7
7
|
import { getGatewayClient, isGatewayAgentAsync, toLocalMessage, toLocalOMRecord, toLocalThread } from "./gateway-memory-client.js";
|
|
8
8
|
import { Agent } from "@mastra/core/agent";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-list-query-schemas.cjs","names":["z"],"sources":["../../../src/server/handlers/observability-list-query-schemas.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Server-local route-layer query schemas for observability list endpoints.\n *\n * Why these live in @mastra/server instead of importing the newer shared core\n * exports directly:\n * - `mode`, `after`, and `limit` were added after older @mastra/core versions\n * that @mastra/server still needs to tolerate at runtime.\n * - Direct named imports of newly-added schema exports create module-link-time\n * failures when a newer server is paired with an older core.\n * - These are route parsing concerns, so mirroring the current core schema\n * semantics here keeps the server backward-compatible without forcing a peer\n * dependency lockstep upgrade.\n *\n * TODO(Mastra 2.0): remove this shim and import the shared observability list\n * query schemas directly once server/core no longer need to tolerate older\n * mixed-version pairings.\n */\n\nexport const paginationArgsSchema = z\n .object({\n page: z.coerce.number().int().min(0).optional().default(0).describe('Zero-indexed page number'),\n perPage: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Number of items per page'),\n })\n .describe('Pagination options for list queries');\n\nexport const deltaCursorSchema = z.string().min(1).describe('Opaque cursor value for incremental polling');\n\nexport const listModeSchema = z\n .enum(['page', 'delta'])\n .describe(\"List mode: 'page' | 'delta', defaults to 'page' when omitted.\");\n\nexport const deltaLimitSchema = z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Maximum number of updates to return in one delta poll');\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"observability-list-query-schemas.cjs","names":["z"],"sources":["../../../src/server/handlers/observability-list-query-schemas.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Server-local route-layer query schemas for observability list endpoints.\n *\n * Why these live in @mastra/server instead of importing the newer shared core\n * exports directly:\n * - `mode`, `after`, and `limit` were added after older @mastra/core versions\n * that @mastra/server still needs to tolerate at runtime.\n * - Direct named imports of newly-added schema exports create module-link-time\n * failures when a newer server is paired with an older core.\n * - These are route parsing concerns, so mirroring the current core schema\n * semantics here keeps the server backward-compatible without forcing a peer\n * dependency lockstep upgrade.\n *\n * TODO(Mastra 2.0): remove this shim and import the shared observability list\n * query schemas directly once server/core no longer need to tolerate older\n * mixed-version pairings.\n */\n\nexport const paginationArgsSchema = z\n .object({\n page: z.coerce.number().int().min(0).optional().default(0).describe('Zero-indexed page number'),\n perPage: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Number of items per page'),\n })\n .describe('Pagination options for list queries');\n\nexport const deltaCursorSchema = z.string().min(1).describe('Opaque cursor value for incremental polling');\n\nexport const listModeSchema = z\n .enum(['page', 'delta'])\n .describe(\"List mode: 'page' | 'delta', defaults to 'page' when omitted.\");\n\nexport const deltaLimitSchema = z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Maximum number of updates to return in one delta poll');\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,uBAAuBA,OAAAA,EACjC,OAAO;CACN,MAAMA,OAAAA,EAAE,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,0BAA0B;CAC9F,SAASA,OAAAA,EAAE,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,0BAA0B;AAC7G,CAAC,CAAC,CACD,SAAS,qCAAqC;AAEjD,MAAa,oBAAoBA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,6CAA6C;AAEzG,MAAa,iBAAiBA,OAAAA,EAC3B,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC,CACvB,SAAS,+DAA+D;AAE3E,MAAa,mBAAmBA,OAAAA,EAAE,OAC/B,OAAO,CAAC,CACR,IAAI,CAAC,CACL,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,SAAS,CAAC,CACV,SAAS,uDAAuD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
|
|
2
|
+
require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
3
|
+
const require_observability_new_endpoints = require("../../observability-new-endpoints-gRCFhnRr.cjs");
|
|
3
4
|
exports.CREATE_FEEDBACK = require_observability_new_endpoints.CREATE_FEEDBACK;
|
|
4
5
|
exports.CREATE_SCORE = require_observability_new_endpoints.CREATE_SCORE;
|
|
5
6
|
exports.GET_ENTITY_NAMES = require_observability_new_endpoints.GET_ENTITY_NAMES;
|
|
@@ -1,6 +1,7 @@
|
|
|
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_route_builder = require("../../route-builder-CWsok5ci.cjs");
|
|
4
5
|
const require_server_handlers_observability_list_query_schemas = require("./observability-list-query-schemas.cjs");
|
|
5
6
|
let zod_v4 = require("zod/v4");
|
|
6
7
|
let _mastra_core_features = require("@mastra/core/features");
|