@mastra/server 1.81.0-alpha.0 → 1.81.0-alpha.2

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.
Files changed (187) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +11 -0
  2. package/dist/{a2a-CSz0rw8E.js → a2a-UYs7rzN2.js} +2 -2
  3. package/dist/{a2a-CSz0rw8E.js.map → a2a-UYs7rzN2.js.map} +1 -1
  4. package/dist/{a2a-CmMIWPuz.cjs → a2a-eUB3oDRN.cjs} +2 -2
  5. package/dist/{a2a-CmMIWPuz.cjs.map → a2a-eUB3oDRN.cjs.map} +1 -1
  6. package/dist/{agent-builder-XhBB0Svr.js → agent-builder-5dpawFJf.js} +2 -2
  7. package/dist/{agent-builder-XhBB0Svr.js.map → agent-builder-5dpawFJf.js.map} +1 -1
  8. package/dist/{agent-builder-DIEX-as5.cjs → agent-builder-DwfHzUnt.cjs} +2 -2
  9. package/dist/{agent-builder-DIEX-as5.cjs.map → agent-builder-DwfHzUnt.cjs.map} +1 -1
  10. package/dist/{agents-D36tukip.cjs → agents-BjdRPzyV.cjs} +3 -2
  11. package/dist/agents-BjdRPzyV.cjs.map +1 -0
  12. package/dist/{agents-BVjnYswL.js → agents-BuI0JjjX.js} +3 -2
  13. package/dist/agents-BuI0JjjX.js.map +1 -0
  14. package/dist/{api-schema-manifest-BVPhF1ZS.js → api-schema-manifest-DafznVYs.js} +2 -2
  15. package/dist/{api-schema-manifest-BVPhF1ZS.js.map → api-schema-manifest-DafznVYs.js.map} +1 -1
  16. package/dist/{api-schema-manifest-BWId44SV.cjs → api-schema-manifest-GgyfF4dw.cjs} +2 -2
  17. package/dist/{api-schema-manifest-BWId44SV.cjs.map → api-schema-manifest-GgyfF4dw.cjs.map} +1 -1
  18. package/dist/{builder-registry-DWusXgse.cjs → builder-registry-CamBJItc.cjs} +2 -2
  19. package/dist/{builder-registry-DWusXgse.cjs.map → builder-registry-CamBJItc.cjs.map} +1 -1
  20. package/dist/{builder-registry-CtGv0Gj6.js → builder-registry-DHVK50Ba.js} +2 -2
  21. package/dist/{builder-registry-CtGv0Gj6.js.map → builder-registry-DHVK50Ba.js.map} +1 -1
  22. package/dist/{conversations-CJn0ioOZ.cjs → conversations-ORTpTqBg.cjs} +2 -2
  23. package/dist/{conversations-CJn0ioOZ.cjs.map → conversations-ORTpTqBg.cjs.map} +1 -1
  24. package/dist/{conversations-CABVTBQY.js → conversations-fdXV9K0J.js} +2 -2
  25. package/dist/{conversations-CABVTBQY.js.map → conversations-fdXV9K0J.js.map} +1 -1
  26. package/dist/{dist-BK1fCE4z.cjs → dist-BEtxPxkM.cjs} +1 -1
  27. package/dist/dist-BQ1uFC_1.js +1 -0
  28. package/dist/{dist-OpNBTIST.cjs → dist-CR3PolEz.cjs} +5 -4
  29. package/dist/{dist-OpNBTIST.cjs.map → dist-CR3PolEz.cjs.map} +1 -1
  30. package/dist/{dist-BLjE21MA.js → dist-CmG4sN60.js} +5 -4
  31. package/dist/{dist-BLjE21MA.js.map → dist-CmG4sN60.js.map} +1 -1
  32. package/dist/docs/SKILL.md +2 -2
  33. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  34. package/dist/docs/references/reference-observability-tracing-advanced-queries.md +226 -86
  35. package/dist/docs/references/reference-server-routes.md +18 -14
  36. package/dist/{editor-builder-CeiISBIO.cjs → editor-builder-6l27BFzD.cjs} +2 -2
  37. package/dist/{editor-builder-CeiISBIO.cjs.map → editor-builder-6l27BFzD.cjs.map} +1 -1
  38. package/dist/{editor-builder-DeD6EVm8.js → editor-builder-DxGZ7IN5.js} +2 -2
  39. package/dist/{editor-builder-DeD6EVm8.js.map → editor-builder-DxGZ7IN5.js.map} +1 -1
  40. package/dist/{mcp-Bt3h1lO7.cjs → mcp-B7Q8qwjn.cjs} +118 -3
  41. package/dist/mcp-B7Q8qwjn.cjs.map +1 -0
  42. package/dist/{mcp-mpYrlkUA.cjs → mcp-CMw0sq0y.cjs} +177 -4
  43. package/dist/mcp-CMw0sq0y.cjs.map +1 -0
  44. package/dist/{mcp-D4Cprr8R.js → mcp-CQ_pR-JC.js} +77 -4
  45. package/dist/mcp-CQ_pR-JC.js.map +1 -0
  46. package/dist/{mcp-D3F3iYew.js → mcp-DN9mT9q4.js} +154 -5
  47. package/dist/mcp-DN9mT9q4.js.map +1 -0
  48. package/dist/{observability-DHuljMXO.cjs → observability-DRbDeN1X.cjs} +2 -2
  49. package/dist/{observability-DHuljMXO.cjs.map → observability-DRbDeN1X.cjs.map} +1 -1
  50. package/dist/{observability-new-endpoints-CaTskbSh.cjs → observability-new-endpoints-BrB2CKix.cjs} +15 -4
  51. package/dist/observability-new-endpoints-BrB2CKix.cjs.map +1 -0
  52. package/dist/{observability-new-endpoints-CsUP8y2j.js → observability-new-endpoints-CQNVjYYq.js} +16 -5
  53. package/dist/observability-new-endpoints-CQNVjYYq.js.map +1 -0
  54. package/dist/{observability-BgIU0otL.js → observability-pX3wmG8T.js} +2 -2
  55. package/dist/{observability-BgIU0otL.js.map → observability-pX3wmG8T.js.map} +1 -1
  56. package/dist/{plans-Dydti0sT.cjs → plans-BHQFsFRU.cjs} +2 -2
  57. package/dist/{plans-Dydti0sT.cjs.map → plans-BHQFsFRU.cjs.map} +1 -1
  58. package/dist/{plans-B5GgYqx-.js → plans-D9BGMVkL.js} +2 -2
  59. package/dist/{plans-B5GgYqx-.js.map → plans-D9BGMVkL.js.map} +1 -1
  60. package/dist/{probe-image-size-BqH96zcz.js → probe-image-size-BjNoJxWf.js} +2 -2
  61. package/dist/{probe-image-size-BqH96zcz.js.map → probe-image-size-BjNoJxWf.js.map} +1 -1
  62. package/dist/{probe-image-size-BIZUe8Bp.cjs → probe-image-size-jS0ECSlc.cjs} +2 -2
  63. package/dist/{probe-image-size-BIZUe8Bp.cjs.map → probe-image-size-jS0ECSlc.cjs.map} +1 -1
  64. package/dist/{responses-CxvSoOLt.cjs → responses-4_RCBNJB.cjs} +2 -2
  65. package/dist/{responses-CxvSoOLt.cjs.map → responses-4_RCBNJB.cjs.map} +1 -1
  66. package/dist/{responses-DbiqhxP3.js → responses-Cb-9JV9A.js} +2 -2
  67. package/dist/{responses-DbiqhxP3.js.map → responses-Cb-9JV9A.js.map} +1 -1
  68. package/dist/{routes-CBrxFxzL.js → routes-4X2kSYEG.js} +19 -15
  69. package/dist/{routes-CBrxFxzL.js.map → routes-4X2kSYEG.js.map} +1 -1
  70. package/dist/{routes-By3cLbPV.cjs → routes-BqWcvAcz.cjs} +19 -15
  71. package/dist/routes-BqWcvAcz.cjs.map +1 -0
  72. package/dist/{scores-CnozEyM4.cjs → scores-DnEcBe2i.cjs} +2 -2
  73. package/dist/{scores-CnozEyM4.cjs.map → scores-DnEcBe2i.cjs.map} +1 -1
  74. package/dist/{scores-BjclMqFa.js → scores-DqImg-o-.js} +2 -2
  75. package/dist/{scores-BjclMqFa.js.map → scores-DqImg-o-.js.map} +1 -1
  76. package/dist/server/handlers/a2a.cjs +1 -1
  77. package/dist/server/handlers/a2a.js +1 -1
  78. package/dist/server/handlers/agent-builder.cjs +1 -1
  79. package/dist/server/handlers/agent-builder.js +1 -1
  80. package/dist/server/handlers/agents.cjs +1 -1
  81. package/dist/server/handlers/agents.d.ts.map +1 -1
  82. package/dist/server/handlers/agents.js +1 -1
  83. package/dist/server/handlers/builder-registry.cjs +1 -1
  84. package/dist/server/handlers/builder-registry.js +1 -1
  85. package/dist/server/handlers/conversations.cjs +1 -1
  86. package/dist/server/handlers/conversations.js +1 -1
  87. package/dist/server/handlers/editor-builder.cjs +1 -1
  88. package/dist/server/handlers/editor-builder.js +1 -1
  89. package/dist/server/handlers/error.cjs +5 -4
  90. package/dist/server/handlers/error.cjs.map +1 -1
  91. package/dist/server/handlers/error.d.ts.map +1 -1
  92. package/dist/server/handlers/error.js +5 -4
  93. package/dist/server/handlers/error.js.map +1 -1
  94. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  95. package/dist/server/handlers/favorites-enrichment.js +1 -1
  96. package/dist/server/handlers/mcp.cjs +5 -1
  97. package/dist/server/handlers/mcp.d.ts +507 -245
  98. package/dist/server/handlers/mcp.d.ts.map +1 -1
  99. package/dist/server/handlers/mcp.js +1 -1
  100. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  101. package/dist/server/handlers/observability-new-endpoints.d.ts +80 -16
  102. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  103. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  104. package/dist/server/handlers/observability-shared.cjs +56 -0
  105. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  106. package/dist/server/handlers/observability-shared.d.ts +29 -0
  107. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  108. package/dist/server/handlers/observability-shared.js +50 -1
  109. package/dist/server/handlers/observability-shared.js.map +1 -1
  110. package/dist/server/handlers/observability.cjs +2 -2
  111. package/dist/server/handlers/observability.js +2 -2
  112. package/dist/server/handlers/plans.cjs +1 -1
  113. package/dist/server/handlers/plans.js +1 -1
  114. package/dist/server/handlers/responses.cjs +1 -1
  115. package/dist/server/handlers/responses.js +1 -1
  116. package/dist/server/handlers/scores.cjs +1 -1
  117. package/dist/server/handlers/scores.js +1 -1
  118. package/dist/server/handlers/stored-agent-favorites.cjs +1 -1
  119. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  120. package/dist/server/handlers/stored-agents.cjs +1 -1
  121. package/dist/server/handlers/stored-agents.js +1 -1
  122. package/dist/server/handlers/stored-skill-favorites.cjs +1 -1
  123. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  124. package/dist/server/handlers/stored-skills.cjs +1 -1
  125. package/dist/server/handlers/stored-skills.js +1 -1
  126. package/dist/server/handlers/system.cjs +2 -2
  127. package/dist/server/handlers/system.d.ts +8 -0
  128. package/dist/server/handlers/system.d.ts.map +1 -1
  129. package/dist/server/handlers/system.js +2 -2
  130. package/dist/server/handlers/tools.cjs +1 -1
  131. package/dist/server/handlers/tools.js +1 -1
  132. package/dist/server/handlers/workspace.cjs +1 -1
  133. package/dist/server/handlers/workspace.d.ts +4 -0
  134. package/dist/server/handlers/workspace.d.ts.map +1 -1
  135. package/dist/server/handlers/workspace.js +1 -1
  136. package/dist/server/handlers.cjs +11 -11
  137. package/dist/server/handlers.js +11 -11
  138. package/dist/server/schemas/index.cjs +3 -3
  139. package/dist/server/schemas/index.js +3 -3
  140. package/dist/server/schemas/mcp.d.ts +141 -0
  141. package/dist/server/schemas/mcp.d.ts.map +1 -1
  142. package/dist/server/schemas/system.d.ts +8 -0
  143. package/dist/server/schemas/system.d.ts.map +1 -1
  144. package/dist/server/schemas/workspace.d.ts +2 -0
  145. package/dist/server/schemas/workspace.d.ts.map +1 -1
  146. package/dist/server/server-adapter/index.cjs +1 -1
  147. package/dist/server/server-adapter/index.js +1 -1
  148. package/dist/server/server-adapter/routes/mcp.d.ts +256 -0
  149. package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
  150. package/dist/server/server-adapter/routes/observability.d.ts +42 -10
  151. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  152. package/dist/server/server-adapter/routes/system.d.ts +8 -0
  153. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  154. package/dist/server/server-adapter/routes/workspace.d.ts +4 -0
  155. package/dist/server/server-adapter/routes/workspace.d.ts.map +1 -1
  156. package/dist/{system-BxHpBJiq.cjs → system-CHCn8IQ3.cjs} +5 -1
  157. package/dist/system-CHCn8IQ3.cjs.map +1 -0
  158. package/dist/{system-CxwzIMsy.js → system-DOwo7OGf.js} +5 -1
  159. package/dist/system-DOwo7OGf.js.map +1 -0
  160. package/dist/{tools-Ck35EVD7.js → tools-BFpuzQsz.js} +2 -2
  161. package/dist/{tools-Ck35EVD7.js.map → tools-BFpuzQsz.js.map} +1 -1
  162. package/dist/{tools-CeJrnYDf.cjs → tools-Dy_j6URC.cjs} +2 -2
  163. package/dist/{tools-CeJrnYDf.cjs.map → tools-Dy_j6URC.cjs.map} +1 -1
  164. package/dist/{workspace-CyH_iu8w.cjs → workspace-BU6sQpbV.cjs} +14 -10
  165. package/dist/{workspace-C9dE6D1U.js.map → workspace-BU6sQpbV.cjs.map} +1 -1
  166. package/dist/{workspace-KeHGZvNV.cjs → workspace-C5BBUatQ.cjs} +3 -1
  167. package/dist/workspace-C5BBUatQ.cjs.map +1 -0
  168. package/dist/{workspace-C9dE6D1U.js → workspace-CS-GYTve.js} +14 -10
  169. package/dist/workspace-CS-GYTve.js.map +1 -0
  170. package/dist/{workspace-muaSMxVS.js → workspace-DBDA3UQl.js} +3 -1
  171. package/dist/workspace-DBDA3UQl.js.map +1 -0
  172. package/package.json +4 -4
  173. package/dist/agents-BVjnYswL.js.map +0 -1
  174. package/dist/agents-D36tukip.cjs.map +0 -1
  175. package/dist/dist-_M1jEPcL.js +0 -1
  176. package/dist/mcp-Bt3h1lO7.cjs.map +0 -1
  177. package/dist/mcp-D3F3iYew.js.map +0 -1
  178. package/dist/mcp-D4Cprr8R.js.map +0 -1
  179. package/dist/mcp-mpYrlkUA.cjs.map +0 -1
  180. package/dist/observability-new-endpoints-CaTskbSh.cjs.map +0 -1
  181. package/dist/observability-new-endpoints-CsUP8y2j.js.map +0 -1
  182. package/dist/routes-By3cLbPV.cjs.map +0 -1
  183. package/dist/system-BxHpBJiq.cjs.map +0 -1
  184. package/dist/system-CxwzIMsy.js.map +0 -1
  185. package/dist/workspace-CyH_iu8w.cjs.map +0 -1
  186. package/dist/workspace-KeHGZvNV.cjs.map +0 -1
  187. package/dist/workspace-muaSMxVS.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  const require_http_exception = require("./http-exception-Co3MbFUf.cjs");
2
2
  const require_route_builder = require("./route-builder-CvARmqnA.cjs");
3
3
  const require_server_handlers_error = require("./server/handlers/error.cjs");
4
- const require_agents = require("./agents-D36tukip.cjs");
4
+ const require_agents = require("./agents-BjdRPzyV.cjs");
5
5
  const require_editor_builder = require("./editor-builder-B8Mf4kJo.cjs");
6
6
  // src/server/utils/resolve-builder-model-policy.ts
7
7
  /**
@@ -362,4 +362,4 @@ Object.defineProperty(exports, "requireBuilderFeature", {
362
362
  }
363
363
  });
364
364
 
365
- //# sourceMappingURL=editor-builder-CeiISBIO.cjs.map
365
+ //# sourceMappingURL=editor-builder-6l27BFzD.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-CeiISBIO.cjs","names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor-builder-6l27BFzD.cjs","names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as HTTPException } from "./http-exception-CzaWkxMl.js";
2
2
  import { n as createRoute } from "./route-builder-BxPrwNog.js";
3
3
  import { handleError } from "./server/handlers/error.js";
4
- import { U as buildProvidersList } from "./agents-BVjnYswL.js";
4
+ import { U as buildProvidersList } from "./agents-BuI0JjjX.js";
5
5
  import { i as builderAvailableModelsResponseSchema, l as infrastructureStatusResponseSchema, n as agentFeaturesSchema, s as builderSettingsResponseSchema } from "./editor-builder-PKGDfYNc.js";
6
6
  // src/server/utils/resolve-builder-model-policy.ts
7
7
  /**
@@ -333,4 +333,4 @@ const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({
333
333
  });
334
334
  export { requireBuilderFeature as a, isBuilderFeatureEnabled as i, GET_EDITOR_BUILDER_SETTINGS_ROUTE as n, GET_INFRASTRUCTURE_STATUS_ROUTE as r, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE as t };
335
335
 
336
- //# sourceMappingURL=editor-builder-DeD6EVm8.js.map
336
+ //# sourceMappingURL=editor-builder-DxGZ7IN5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-DeD6EVm8.js","names":[],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor-builder-DxGZ7IN5.js","names":[],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
@@ -27,7 +27,8 @@ const serverInfoSchema = zod_v4.z.object({
27
27
  /** Omitted by servers that predate transport reporting; treat absence as `['streamable-http', 'sse']`. */
28
28
  transports: zod_v4.z.array(mcpServerTransportSchema).optional(),
29
29
  /** Whether the server declares event types (experimental); see `GET /mcp/:serverId/events`. */
30
- events_capability: zod_v4.z.boolean().optional()
30
+ events_capability: zod_v4.z.boolean().optional(),
31
+ tasks_capability: zod_v4.z.boolean().optional()
31
32
  });
32
33
  const listMcpServersResponseSchema = zod_v4.z.object({
33
34
  servers: zod_v4.z.array(serverInfoSchema),
@@ -45,7 +46,8 @@ const serverDetailSchema = zod_v4.z.object({
45
46
  /** Omitted by servers that predate transport reporting; treat absence as `['streamable-http', 'sse']`. */
46
47
  transports: zod_v4.z.array(mcpServerTransportSchema).optional(),
47
48
  /** Whether the server declares event types (experimental); see `GET /mcp/:serverId/events`. */
48
- events_capability: zod_v4.z.boolean().optional()
49
+ events_capability: zod_v4.z.boolean().optional(),
50
+ tasks_capability: zod_v4.z.boolean().optional()
49
51
  });
50
52
  const mcpToolInfoSchema = zod_v4.z.object({
51
53
  /** Tool id as registered on the server; present when the MCP server reports it. */
@@ -160,6 +162,83 @@ const mcpServerEventStreamFrameSchema = zod_v4.z.discriminatedUnion("type", [
160
162
  ]);
161
163
  const emitMcpServerEventBodySchema = zod_v4.z.object({ data: jsonObjectSchema });
162
164
  const emitMcpServerEventResponseSchema = zod_v4.z.object({ occurrence: mcpServerEventOccurrenceSchema });
165
+ const mcpServerTaskPathParams = zod_v4.z.object({
166
+ serverId: zod_v4.z.string().describe("MCP server ID"),
167
+ taskKey: zod_v4.z.string().describe("Task key (a hash of the task id, as listed)")
168
+ });
169
+ const mcpServerTaskStatusSchema = zod_v4.z.enum([
170
+ "working",
171
+ "input_required",
172
+ "completed",
173
+ "failed",
174
+ "cancelled"
175
+ ]);
176
+ const listMcpServerTasksQuerySchema = zod_v4.z.object({
177
+ /** How many of the most recent tasks to list; defaults to 50, at most 200. */
178
+ limit: zod_v4.z.coerce.number().int().min(1).max(200).optional(),
179
+ /** `nextCursor` of the previous page. */
180
+ cursor: zod_v4.z.string().min(1).optional(),
181
+ status: mcpServerTaskStatusSchema.optional(),
182
+ /** The tool, workflow or agent name. */
183
+ surface: zod_v4.z.string().min(1).optional(),
184
+ /** A client key (`principalKey`) as listed. */
185
+ client: zod_v4.z.string().min(1).optional(),
186
+ /** A task key as listed, to read one task. */
187
+ key: zod_v4.z.string().min(1).optional()
188
+ });
189
+ /** The raw MCP task id goes in the body so it never lands in URLs or access logs. */
190
+ const findMcpServerTaskBodySchema = zod_v4.z.object({ taskId: zod_v4.z.string().min(1).max(512) });
191
+ const mcpServerTaskSurfaceSchema = zod_v4.z.object({
192
+ name: zod_v4.z.string(),
193
+ type: zod_v4.z.enum([
194
+ "tool",
195
+ "workflow",
196
+ "agent"
197
+ ]),
198
+ mode: zod_v4.z.enum(["auto", "always"]),
199
+ recover: zod_v4.z.boolean(),
200
+ /** Clients that don't declare the tasks extension are refused for this surface. */
201
+ required: zod_v4.z.boolean(),
202
+ ttlMs: zod_v4.z.number().nullable()
203
+ });
204
+ const mcpServerTaskSummarySchema = zod_v4.z.object({
205
+ taskKey: zod_v4.z.string(),
206
+ surface: zod_v4.z.string(),
207
+ status: mcpServerTaskStatusSchema,
208
+ statusMessage: zod_v4.z.string().optional(),
209
+ createdAt: zod_v4.z.string(),
210
+ lastUpdatedAt: zod_v4.z.string(),
211
+ expiresAt: zod_v4.z.string().optional(),
212
+ principalKey: zod_v4.z.string(),
213
+ clientLabel: zod_v4.z.string().optional(),
214
+ inputRequests: zod_v4.z.record(zod_v4.z.string(), zod_v4.z.object({
215
+ method: zod_v4.z.string(),
216
+ params: jsonObjectSchema.optional()
217
+ }).passthrough()).optional(),
218
+ result: jsonObjectSchema.optional(),
219
+ error: jsonObjectSchema.optional()
220
+ });
221
+ const listMcpServerTasksResponseSchema = zod_v4.z.object({
222
+ surfaces: zod_v4.z.array(mcpServerTaskSurfaceSchema),
223
+ /**
224
+ * Why `tasks` is empty regardless of what exists: the task store can't be listed, or the
225
+ * caller is scoped to a resource, which has no mapping to MCP principals.
226
+ */
227
+ unavailable: zod_v4.z.enum(["not_listable", "resource_scoped"]).optional(),
228
+ /** The most recent matching tasks first, at most `limit`. */
229
+ tasks: zod_v4.z.array(mcpServerTaskSummarySchema),
230
+ /** Pass as `cursor` for the next page; absent when no older task matches. */
231
+ nextCursor: zod_v4.z.string().optional()
232
+ });
233
+ const findMcpServerTaskResponseSchema = zod_v4.z.object({ task: mcpServerTaskSummarySchema });
234
+ const answerMcpServerTaskBodySchema = zod_v4.z.object({ inputResponses: zod_v4.z.record(zod_v4.z.string(), jsonObjectSchema) });
235
+ const mcpServerTaskActionResponseSchema = zod_v4.z.object({ success: zod_v4.z.literal(true) });
236
+ Object.defineProperty(exports, "answerMcpServerTaskBodySchema", {
237
+ enumerable: true,
238
+ get: function() {
239
+ return answerMcpServerTaskBodySchema;
240
+ }
241
+ });
163
242
  Object.defineProperty(exports, "emitMcpServerEventBodySchema", {
164
243
  enumerable: true,
165
244
  get: function() {
@@ -184,6 +263,18 @@ Object.defineProperty(exports, "executeToolResponseSchema", {
184
263
  return executeToolResponseSchema;
185
264
  }
186
265
  });
266
+ Object.defineProperty(exports, "findMcpServerTaskBodySchema", {
267
+ enumerable: true,
268
+ get: function() {
269
+ return findMcpServerTaskBodySchema;
270
+ }
271
+ });
272
+ Object.defineProperty(exports, "findMcpServerTaskResponseSchema", {
273
+ enumerable: true,
274
+ get: function() {
275
+ return findMcpServerTaskResponseSchema;
276
+ }
277
+ });
187
278
  Object.defineProperty(exports, "getMcpServerDetailQuerySchema", {
188
279
  enumerable: true,
189
280
  get: function() {
@@ -202,6 +293,18 @@ Object.defineProperty(exports, "listMcpServerEventsResponseSchema", {
202
293
  return listMcpServerEventsResponseSchema;
203
294
  }
204
295
  });
296
+ Object.defineProperty(exports, "listMcpServerTasksQuerySchema", {
297
+ enumerable: true,
298
+ get: function() {
299
+ return listMcpServerTasksQuerySchema;
300
+ }
301
+ });
302
+ Object.defineProperty(exports, "listMcpServerTasksResponseSchema", {
303
+ enumerable: true,
304
+ get: function() {
305
+ return listMcpServerTasksResponseSchema;
306
+ }
307
+ });
205
308
  Object.defineProperty(exports, "listMcpServerToolsResponseSchema", {
206
309
  enumerable: true,
207
310
  get: function() {
@@ -256,6 +359,18 @@ Object.defineProperty(exports, "mcpServerResourcePathParams", {
256
359
  return mcpServerResourcePathParams;
257
360
  }
258
361
  });
362
+ Object.defineProperty(exports, "mcpServerTaskActionResponseSchema", {
363
+ enumerable: true,
364
+ get: function() {
365
+ return mcpServerTaskActionResponseSchema;
366
+ }
367
+ });
368
+ Object.defineProperty(exports, "mcpServerTaskPathParams", {
369
+ enumerable: true,
370
+ get: function() {
371
+ return mcpServerTaskPathParams;
372
+ }
373
+ });
259
374
  Object.defineProperty(exports, "mcpServerToolPathParams", {
260
375
  enumerable: true,
261
376
  get: function() {
@@ -317,4 +432,4 @@ Object.defineProperty(exports, "versionDetailSchema", {
317
432
  }
318
433
  });
319
434
 
320
- //# sourceMappingURL=mcp-Bt3h1lO7.cjs.map
435
+ //# sourceMappingURL=mcp-B7Q8qwjn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-B7Q8qwjn.cjs","names":["z","createCombinedPaginationSchema"],"sources":["../src/server/schemas/mcp.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { createCombinedPaginationSchema } from './common';\n\n// Path parameters\nexport const mcpServerIdPathParams = z.object({\n serverId: z.string().describe('MCP server ID'),\n});\n\nexport const mcpServerDetailPathParams = z.object({\n id: z.string().describe('MCP server ID'),\n});\n\nexport const mcpServerToolPathParams = z.object({\n serverId: z.string().describe('MCP server ID'),\n toolId: z.string().describe('Tool ID'),\n});\n\nexport const executeToolBodySchema = z.object({\n data: z.unknown().optional(),\n resumeData: z\n .unknown()\n .optional()\n .describe('Answer for a tool that reported `status: \"suspended\"`; 2026-07-28 servers only'),\n suspendPayload: z\n .unknown()\n .optional()\n .describe('The `suspendPayload` from the suspended response, echoed back with `resumeData`'),\n});\n\n// Query parameters\n// Supports both page/perPage and limit/offset for backwards compatibility\nexport const listMcpServersQuerySchema = createCombinedPaginationSchema();\n\nexport const getMcpServerDetailQuerySchema = z.object({\n version: z.string().optional(),\n});\n\n// Response schemas\nexport const versionDetailSchema = z.object({\n version: z.string(),\n release_date: z.string(),\n is_latest: z.boolean(),\n});\n\nexport const mcpServerTransportSchema = z.enum(['streamable-http', 'sse']);\n\n/** Protocol transports the Studio/REST API exposes for a registered MCP server. */\nexport type MCPServerTransport = z.infer<typeof mcpServerTransportSchema>;\n\nexport const serverInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n version_detail: versionDetailSchema,\n /** Omitted by servers that predate transport reporting; treat absence as `['streamable-http', 'sse']`. */\n transports: z.array(mcpServerTransportSchema).optional(),\n /** Whether the server declares event types (experimental); see `GET /mcp/:serverId/events`. */\n events_capability: z.boolean().optional(),\n tasks_capability: z.boolean().optional(),\n});\n\nexport const listMcpServersResponseSchema = z.object({\n servers: z.array(serverInfoSchema),\n total_count: z.number(),\n next: z.string().nullable(),\n});\n\nexport const serverDetailSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n version_detail: versionDetailSchema,\n package_canonical: z.string().optional(),\n packages: z.array(z.unknown()).optional(),\n remotes: z.array(z.unknown()).optional(),\n /** Omitted by servers that predate transport reporting; treat absence as `['streamable-http', 'sse']`. */\n transports: z.array(mcpServerTransportSchema).optional(),\n /** Whether the server declares event types (experimental); see `GET /mcp/:serverId/events`. */\n events_capability: z.boolean().optional(),\n tasks_capability: z.boolean().optional(),\n});\n\n// Tool schemas\nexport const mcpToolInfoSchema = z.object({\n /** Tool id as registered on the server; present when the MCP server reports it. */\n id: z.string().optional(),\n name: z.string(),\n description: z.string().optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown().optional(),\n toolType: z.string().optional(),\n _meta: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const listMcpServerToolsResponseSchema = z.object({\n tools: z.array(mcpToolInfoSchema),\n});\n\nexport const executeToolResponseSchema = z.union([\n z.object({\n result: z.unknown(),\n }),\n z.object({\n status: z.literal('suspended').describe('The tool paused and asked for input; it did not complete'),\n suspendPayload: z.unknown().describe('What the tool suspended with'),\n resumeSchema: z.unknown().optional().describe('JSON Schema of the input the tool needs to resume'),\n }),\n]);\n\n// Resource schemas\nexport const mcpServerResourcePathParams = z.object({\n serverId: z.string().describe('MCP server ID'),\n});\n\nexport const readResourceBodySchema = z.object({\n uri: z.string().describe('Resource URI to read'),\n});\n\nexport const resourceContentSchema = z.object({\n uri: z.string(),\n text: z.string().optional(),\n blob: z.string().optional(),\n mimeType: z.string().optional(),\n _meta: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const readResourceResponseSchema = z.object({\n contents: z.array(resourceContentSchema),\n});\n\nexport const resourceInfoSchema = z.object({\n uri: z.string(),\n name: z.string(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n _meta: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const listResourcesResponseSchema = z.object({\n resources: z.array(resourceInfoSchema),\n});\n\n// JSON-RPC error response schema\nexport const jsonRpcErrorSchema = z.object({\n jsonrpc: z.literal('2.0'),\n error: z.object({\n code: z.number(),\n message: z.string(),\n }),\n id: z.null(),\n});\n\n// Event schemas (experimental)\nexport const mcpServerEventPathParams = z.object({\n serverId: z.string().describe('MCP server ID'),\n eventName: z.string().describe('Event type name'),\n});\n\nconst jsonObjectSchema = z.record(z.string(), z.unknown());\nconst eventCursorSchema = z.string().nullable();\n\nexport const mcpServerEventInfoSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n delivery: z.array(z.enum(['push', 'poll', 'webhook'])),\n inputSchema: jsonObjectSchema.optional(),\n payloadSchema: jsonObjectSchema.optional(),\n /** Fed by `server.events.emit()`, so it can receive test events. */\n emittable: z.boolean(),\n});\n\nexport const listMcpServerEventsResponseSchema = z.object({\n events: z.array(mcpServerEventInfoSchema),\n /** Whether `POST /mcp/:serverId/events/:eventName/emit` is served (only under `mastra dev`). */\n testEmit: z.boolean(),\n});\n\nexport const mcpServerEventOccurrenceSchema = z.object({\n eventId: z.string(),\n name: z.string(),\n timestamp: z.string(),\n data: jsonObjectSchema,\n cursor: eventCursorSchema.optional(),\n _meta: jsonObjectSchema.optional(),\n});\n\nexport const pollMcpServerEventBodySchema = z.object({\n arguments: jsonObjectSchema.optional(),\n cursor: eventCursorSchema.optional(),\n maxEvents: z.number().int().min(1).max(1000).optional(),\n});\n\nexport const pollMcpServerEventResponseSchema = z.object({\n events: z.array(mcpServerEventOccurrenceSchema),\n cursor: eventCursorSchema,\n hasMore: z.boolean().optional(),\n truncated: z.boolean().optional(),\n nextPollMs: z.number().optional(),\n});\n\nexport const streamMcpServerEventBodySchema = z.object({\n arguments: jsonObjectSchema.optional(),\n cursor: eventCursorSchema.optional(),\n});\n\n/** One SSE frame of `POST /mcp/:serverId/events/:eventName/stream`. */\nexport const mcpServerEventStreamFrameSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('active'), cursor: eventCursorSchema, truncated: z.boolean() }),\n z.object({ type: z.literal('event'), occurrence: mcpServerEventOccurrenceSchema }),\n z.object({ type: z.literal('heartbeat'), cursor: eventCursorSchema }),\n z.object({ type: z.literal('error'), message: z.string() }),\n z.object({ type: z.literal('terminated') }),\n]);\n\nexport const emitMcpServerEventBodySchema = z.object({\n data: jsonObjectSchema,\n});\n\nexport const emitMcpServerEventResponseSchema = z.object({\n occurrence: mcpServerEventOccurrenceSchema,\n});\n\n// Task schemas (experimental; Studio admin view)\nexport const mcpServerTaskPathParams = z.object({\n serverId: z.string().describe('MCP server ID'),\n taskKey: z.string().describe('Task key (a hash of the task id, as listed)'),\n});\n\n/** Tasks listed when the caller doesn't ask for a number. */\nexport const DEFAULT_MCP_SERVER_TASKS_LIMIT = 50;\n\nconst mcpServerTaskStatusSchema = z.enum(['working', 'input_required', 'completed', 'failed', 'cancelled']);\n\nexport const listMcpServerTasksQuerySchema = z.object({\n /** How many of the most recent tasks to list; defaults to 50, at most 200. */\n limit: z.coerce.number().int().min(1).max(200).optional(),\n /** `nextCursor` of the previous page. */\n cursor: z.string().min(1).optional(),\n status: mcpServerTaskStatusSchema.optional(),\n /** The tool, workflow or agent name. */\n surface: z.string().min(1).optional(),\n /** A client key (`principalKey`) as listed. */\n client: z.string().min(1).optional(),\n /** A task key as listed, to read one task. */\n key: z.string().min(1).optional(),\n});\n\n/** The raw MCP task id goes in the body so it never lands in URLs or access logs. */\nexport const findMcpServerTaskBodySchema = z.object({\n taskId: z.string().min(1).max(512),\n});\n\nexport const mcpServerTaskSurfaceSchema = z.object({\n name: z.string(),\n type: z.enum(['tool', 'workflow', 'agent']),\n mode: z.enum(['auto', 'always']),\n recover: z.boolean(),\n /** Clients that don't declare the tasks extension are refused for this surface. */\n required: z.boolean(),\n ttlMs: z.number().nullable(),\n});\n\nexport const mcpServerTaskSummarySchema = z.object({\n taskKey: z.string(),\n surface: z.string(),\n status: mcpServerTaskStatusSchema,\n statusMessage: z.string().optional(),\n createdAt: z.string(),\n lastUpdatedAt: z.string(),\n expiresAt: z.string().optional(),\n principalKey: z.string(),\n clientLabel: z.string().optional(),\n inputRequests: z\n .record(z.string(), z.object({ method: z.string(), params: jsonObjectSchema.optional() }).passthrough())\n .optional(),\n result: jsonObjectSchema.optional(),\n error: jsonObjectSchema.optional(),\n});\n\nexport const listMcpServerTasksResponseSchema = z.object({\n surfaces: z.array(mcpServerTaskSurfaceSchema),\n /**\n * Why `tasks` is empty regardless of what exists: the task store can't be listed, or the\n * caller is scoped to a resource, which has no mapping to MCP principals.\n */\n unavailable: z.enum(['not_listable', 'resource_scoped']).optional(),\n /** The most recent matching tasks first, at most `limit`. */\n tasks: z.array(mcpServerTaskSummarySchema),\n /** Pass as `cursor` for the next page; absent when no older task matches. */\n nextCursor: z.string().optional(),\n});\n\nexport const findMcpServerTaskResponseSchema = z.object({ task: mcpServerTaskSummarySchema });\n\nexport const answerMcpServerTaskBodySchema = z.object({\n inputResponses: z.record(z.string(), jsonObjectSchema),\n});\n\nexport const mcpServerTaskActionResponseSchema = z.object({ success: z.literal(true) });\n"],"mappings":"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"}