@mastra/core 0.24.0 → 0.24.1

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 (132) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/index.cjs +13 -13
  4. package/dist/agent/index.js +2 -2
  5. package/dist/agent/input-processor/index.cjs +6 -6
  6. package/dist/agent/input-processor/index.js +1 -1
  7. package/dist/agent/message-list/index.d.ts.map +1 -1
  8. package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -1
  9. package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
  10. package/dist/ai-tracing/index.cjs +36 -36
  11. package/dist/ai-tracing/index.js +1 -1
  12. package/dist/bundler/index.cjs +2 -2
  13. package/dist/bundler/index.d.ts +2 -0
  14. package/dist/bundler/index.d.ts.map +1 -1
  15. package/dist/bundler/index.js +1 -1
  16. package/dist/{chunk-MCASUJWY.cjs → chunk-5D6TMUAG.cjs} +6 -6
  17. package/dist/{chunk-MCASUJWY.cjs.map → chunk-5D6TMUAG.cjs.map} +1 -1
  18. package/dist/{chunk-KDX3ZMQ2.js → chunk-5X4TQR6K.js} +3 -3
  19. package/dist/{chunk-KDX3ZMQ2.js.map → chunk-5X4TQR6K.js.map} +1 -1
  20. package/dist/{chunk-253FBVD4.cjs → chunk-6OGG24PY.cjs} +46 -45
  21. package/dist/chunk-6OGG24PY.cjs.map +1 -0
  22. package/dist/chunk-AAYCOJUL.cjs +14 -0
  23. package/dist/{chunk-SSULK22X.cjs.map → chunk-AAYCOJUL.cjs.map} +1 -1
  24. package/dist/{chunk-7J3XX4AO.cjs → chunk-BCFLCIAX.cjs} +8 -8
  25. package/dist/{chunk-7J3XX4AO.cjs.map → chunk-BCFLCIAX.cjs.map} +1 -1
  26. package/dist/{chunk-BWGXM3D4.js → chunk-CESZ2AOS.js} +5 -5
  27. package/dist/{chunk-BWGXM3D4.js.map → chunk-CESZ2AOS.js.map} +1 -1
  28. package/dist/{chunk-ZMELUU72.js → chunk-CNMPROPI.js} +2 -2
  29. package/dist/chunk-CNMPROPI.js.map +1 -0
  30. package/dist/{chunk-E3PG7G6E.js → chunk-DNYWTNND.js} +39 -33
  31. package/dist/chunk-DNYWTNND.js.map +1 -0
  32. package/dist/{chunk-2B3VLGTH.js → chunk-EDVPIVAB.js} +3 -3
  33. package/dist/{chunk-2B3VLGTH.js.map → chunk-EDVPIVAB.js.map} +1 -1
  34. package/dist/{chunk-MJMID7LX.cjs → chunk-EJPCH5WB.cjs} +40 -34
  35. package/dist/chunk-EJPCH5WB.cjs.map +1 -0
  36. package/dist/{chunk-3VXXCPKX.js → chunk-HKT62GIP.js} +3 -3
  37. package/dist/{chunk-3VXXCPKX.js.map → chunk-HKT62GIP.js.map} +1 -1
  38. package/dist/{chunk-QFF5JUKT.cjs → chunk-HQDX7PWJ.cjs} +2 -2
  39. package/dist/chunk-HQDX7PWJ.cjs.map +1 -0
  40. package/dist/{chunk-FHVFGVIO.js → chunk-II37LKES.js} +4 -4
  41. package/dist/{chunk-FHVFGVIO.js.map → chunk-II37LKES.js.map} +1 -1
  42. package/dist/{chunk-LZUSZT7R.cjs → chunk-IJRERAWQ.cjs} +6 -3
  43. package/dist/chunk-IJRERAWQ.cjs.map +1 -0
  44. package/dist/{chunk-ROS5CMJS.cjs → chunk-KDNLQBCW.cjs} +11 -11
  45. package/dist/{chunk-ROS5CMJS.cjs.map → chunk-KDNLQBCW.cjs.map} +1 -1
  46. package/dist/{chunk-HEQTUMUA.cjs → chunk-LILCMG3L.cjs} +8 -8
  47. package/dist/{chunk-HEQTUMUA.cjs.map → chunk-LILCMG3L.cjs.map} +1 -1
  48. package/dist/{chunk-DTTOVV72.js → chunk-MBMPTC7F.js} +2 -2
  49. package/dist/{chunk-DTTOVV72.js.map → chunk-MBMPTC7F.js.map} +1 -1
  50. package/dist/{chunk-Z4RIRDU3.js → chunk-MXLKXD6Q.js} +4 -4
  51. package/dist/{chunk-Z4RIRDU3.js.map → chunk-MXLKXD6Q.js.map} +1 -1
  52. package/dist/{chunk-P35FNLTQ.cjs → chunk-O5PROZMW.cjs} +2 -2
  53. package/dist/{chunk-P35FNLTQ.cjs.map → chunk-O5PROZMW.cjs.map} +1 -1
  54. package/dist/{chunk-6C7VGVK4.js → chunk-Q7VW22SF.js} +5 -5
  55. package/dist/{chunk-6C7VGVK4.js.map → chunk-Q7VW22SF.js.map} +1 -1
  56. package/dist/{chunk-GB5BIA4V.js → chunk-SL7VKAQ3.js} +6 -3
  57. package/dist/chunk-SL7VKAQ3.js.map +1 -0
  58. package/dist/{chunk-77JHIM4E.cjs → chunk-TPYSVJ5T.cjs} +12 -12
  59. package/dist/{chunk-77JHIM4E.cjs.map → chunk-TPYSVJ5T.cjs.map} +1 -1
  60. package/dist/{chunk-ABZOBBLL.cjs → chunk-TVZB5572.cjs} +12 -12
  61. package/dist/{chunk-ABZOBBLL.cjs.map → chunk-TVZB5572.cjs.map} +1 -1
  62. package/dist/{chunk-C7OVZMPW.cjs → chunk-UBVIPDVD.cjs} +4 -4
  63. package/dist/{chunk-C7OVZMPW.cjs.map → chunk-UBVIPDVD.cjs.map} +1 -1
  64. package/dist/{chunk-NR77P3TK.js → chunk-V66IXQAJ.js} +3 -3
  65. package/dist/{chunk-NR77P3TK.js.map → chunk-V66IXQAJ.js.map} +1 -1
  66. package/dist/{chunk-UZKIGB7M.cjs → chunk-VBQZFQXS.cjs} +4 -4
  67. package/dist/{chunk-UZKIGB7M.cjs.map → chunk-VBQZFQXS.cjs.map} +1 -1
  68. package/dist/{chunk-KAEQISOW.js → chunk-Z3BWWT7E.js} +3 -3
  69. package/dist/{chunk-KAEQISOW.js.map → chunk-Z3BWWT7E.js.map} +1 -1
  70. package/dist/{chunk-LG5B3KIW.js → chunk-ZVAWVX5J.js} +11 -10
  71. package/dist/chunk-ZVAWVX5J.js.map +1 -0
  72. package/dist/deployer/index.cjs +2 -2
  73. package/dist/deployer/index.js +1 -1
  74. package/dist/index.cjs +51 -51
  75. package/dist/index.js +9 -9
  76. package/dist/llm/index.cjs +7 -7
  77. package/dist/llm/index.js +1 -1
  78. package/dist/llm/model/gateways/constants.d.ts.map +1 -1
  79. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  80. package/dist/loop/index.cjs +2 -2
  81. package/dist/loop/index.js +1 -1
  82. package/dist/loop/network/index.d.ts.map +1 -1
  83. package/dist/mastra/index.cjs +2 -2
  84. package/dist/mastra/index.js +1 -1
  85. package/dist/memory/index.cjs +4 -4
  86. package/dist/memory/index.js +1 -1
  87. package/dist/models-dev-BL5TAKE6.js +3 -0
  88. package/dist/{models-dev-4VGIWYS3.js.map → models-dev-BL5TAKE6.js.map} +1 -1
  89. package/dist/models-dev-HZ3LZHPX.cjs +12 -0
  90. package/dist/{models-dev-AXZASLL2.cjs.map → models-dev-HZ3LZHPX.cjs.map} +1 -1
  91. package/dist/processors/index.cjs +11 -11
  92. package/dist/processors/index.js +1 -1
  93. package/dist/relevance/index.cjs +4 -4
  94. package/dist/relevance/index.js +1 -1
  95. package/dist/scores/index.cjs +9 -9
  96. package/dist/scores/index.js +2 -2
  97. package/dist/scores/scoreTraces/index.cjs +8 -8
  98. package/dist/scores/scoreTraces/index.js +3 -3
  99. package/dist/server/index.cjs +2 -1
  100. package/dist/server/index.cjs.map +1 -1
  101. package/dist/server/index.d.ts +4 -0
  102. package/dist/server/index.d.ts.map +1 -1
  103. package/dist/server/index.js +2 -1
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/storage/index.cjs +3 -3
  106. package/dist/storage/index.js +1 -1
  107. package/dist/stream/index.cjs +11 -11
  108. package/dist/stream/index.js +2 -2
  109. package/dist/test-utils/llm-mock.cjs +2 -2
  110. package/dist/test-utils/llm-mock.js +1 -1
  111. package/dist/tools/tool-builder/builder.d.ts +2 -70
  112. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  113. package/dist/utils.cjs +17 -17
  114. package/dist/utils.js +1 -1
  115. package/dist/workflows/evented/index.cjs +10 -10
  116. package/dist/workflows/evented/index.js +1 -1
  117. package/dist/workflows/index.cjs +14 -14
  118. package/dist/workflows/index.js +1 -1
  119. package/dist/workflows/legacy/index.cjs +22 -22
  120. package/dist/workflows/legacy/index.js +1 -1
  121. package/package.json +6 -5
  122. package/dist/chunk-253FBVD4.cjs.map +0 -1
  123. package/dist/chunk-E3PG7G6E.js.map +0 -1
  124. package/dist/chunk-GB5BIA4V.js.map +0 -1
  125. package/dist/chunk-LG5B3KIW.js.map +0 -1
  126. package/dist/chunk-LZUSZT7R.cjs.map +0 -1
  127. package/dist/chunk-MJMID7LX.cjs.map +0 -1
  128. package/dist/chunk-QFF5JUKT.cjs.map +0 -1
  129. package/dist/chunk-SSULK22X.cjs +0 -14
  130. package/dist/chunk-ZMELUU72.js.map +0 -1
  131. package/dist/models-dev-4VGIWYS3.js +0 -3
  132. package/dist/models-dev-AXZASLL2.cjs +0 -12
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/llm/model/gateway-resolver.ts","../src/llm/model/gateways/constants.ts","../src/llm/model/gateways/models-dev.ts"],"names":["MastraModelGateway","createOpenAI","createGoogleGenerativeAI","createAnthropic","createOpenRouter","createXai","createOpenAICompatible"],"mappings":"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","file":"chunk-LZUSZT7R.cjs","sourcesContent":["export type ResolvedModelConfig = {\n url: string | false;\n headers: Record<string, string>;\n resolvedModelId: string;\n fullModelId: string;\n};\n\nexport function parseModelRouterId(routerId: string, gatewayPrefix?: string): { providerId: string; modelId: string } {\n if (gatewayPrefix && !routerId.startsWith(`${gatewayPrefix}/`)) {\n throw new Error(`Expected ${gatewayPrefix}/ in model router ID ${routerId}`);\n }\n\n const idParts = routerId.split('/');\n\n if (gatewayPrefix && idParts.length < 3) {\n throw new Error(\n `Expected atleast 3 id parts ${gatewayPrefix}/provider/model, but only saw ${idParts.length} in ${routerId}`,\n );\n }\n\n const providerId = idParts.at(gatewayPrefix ? 1 : 0);\n const modelId = idParts.slice(gatewayPrefix ? 2 : 1).join(`/`);\n\n if (!routerId.includes(`/`) || !providerId || !modelId) {\n throw new Error(\n `Attempted to parse provider/model from ${routerId} but this ID doesn't appear to contain a provider`,\n );\n }\n\n return {\n providerId,\n modelId,\n };\n}\n","// anything in this list will use the corresponding ai sdk package instead of using openai-compat endpoints\nexport const PROVIDERS_WITH_INSTALLED_PACKAGES = ['anthropic', 'google', 'openai', 'openrouter', 'xai'];\n\n// anything here doesn't show up in model router. for now that's just copilot which requires a special oauth flow\nexport const EXCLUDED_PROVIDERS = ['github-copilot'];\n","import { createAnthropic } from '@ai-sdk/anthropic-v5';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google-v5';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';\nimport { createOpenAI } from '@ai-sdk/openai-v5';\nimport type { LanguageModelV2 } from '@ai-sdk/provider-v5';\nimport { createXai } from '@ai-sdk/xai-v5';\nimport { createOpenRouter } from '@openrouter/ai-sdk-provider-v5';\nimport { parseModelRouterId } from '../gateway-resolver.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\nimport { EXCLUDED_PROVIDERS, PROVIDERS_WITH_INSTALLED_PACKAGES } from './constants.js';\n\ninterface ModelsDevProviderInfo {\n id: string;\n name: string;\n models: Record<string, any>;\n env?: string[]; // Array of env var names\n api?: string; // Base API URL\n npm?: string; // NPM package name\n doc?: string; // Documentation URL\n}\n\ninterface ModelsDevResponse {\n [providerId: string]: ModelsDevProviderInfo;\n}\n\n// Special cases: providers that are OpenAI-compatible but have their own SDKs\n// These providers work with OpenAI-compatible endpoints even though models.dev\n// might list them with their own SDK packages\n// This constant is ONLY used during generation in fetchProviders() to determine\n// which providers from models.dev should be included in the registry.\n// At runtime, buildUrl() and buildHeaders() use the pre-generated PROVIDER_REGISTRY instead.\nconst OPENAI_COMPATIBLE_OVERRIDES: Record<string, Partial<ProviderConfig>> = {\n cerebras: {\n url: 'https://api.cerebras.ai/v1',\n },\n mistral: {\n url: 'https://api.mistral.ai/v1',\n },\n groq: {\n url: 'https://api.groq.com/openai/v1',\n },\n togetherai: {\n url: 'https://api.together.xyz/v1',\n },\n deepinfra: {\n url: 'https://api.deepinfra.com/v1/openai',\n },\n perplexity: {\n url: 'https://api.perplexity.ai',\n },\n vercel: {\n url: 'https://ai-gateway.vercel.sh/v1',\n apiKeyEnvVar: 'AI_GATEWAY_API_KEY',\n },\n};\n\nexport class ModelsDevGateway extends MastraModelGateway {\n readonly name = 'models.dev';\n readonly prefix = undefined; // No prefix for registry gateway\n\n private providerConfigs: Record<string, ProviderConfig> = {};\n\n constructor(providerConfigs?: Record<string, ProviderConfig>) {\n super();\n if (providerConfigs) this.providerConfigs = providerConfigs;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const response = await fetch('https://models.dev/api.json');\n if (!response.ok) {\n throw new Error(`Failed to fetch from models.dev: ${response.statusText}`);\n }\n\n const data = (await response.json()) as ModelsDevResponse;\n\n const providerConfigs: Record<string, ProviderConfig> = {};\n\n for (const [providerId, providerInfo] of Object.entries(data)) {\n // Skip excluded providers\n if (EXCLUDED_PROVIDERS.includes(providerId)) continue;\n // Skip non-provider entries (if any)\n if (!providerInfo || typeof providerInfo !== 'object' || !providerInfo.models) continue;\n\n // Use provider ID as-is (keep hyphens for consistency)\n const normalizedId = providerId;\n\n // Check if this is OpenAI-compatible based on npm package or overrides\n const isOpenAICompatible =\n providerInfo.npm === '@ai-sdk/openai-compatible' ||\n providerInfo.npm === '@ai-sdk/gateway' || // Vercel AI Gateway is OpenAI-compatible\n normalizedId in OPENAI_COMPATIBLE_OVERRIDES;\n\n // these have their ai sdk provider package installed and don't use openai-compat\n const hasInstalledPackage = PROVIDERS_WITH_INSTALLED_PACKAGES.includes(providerId);\n\n // Also include providers that have an API URL and env vars (likely OpenAI-compatible)\n const hasApiAndEnv = providerInfo.api && providerInfo.env && providerInfo.env.length > 0;\n\n if (isOpenAICompatible || hasInstalledPackage || hasApiAndEnv) {\n // Get model IDs from the models object\n const modelIds = Object.keys(providerInfo.models).sort();\n\n // Get the API URL from the provider info or overrides\n const url = providerInfo.api || OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.url;\n\n // Skip if we don't have a URL\n if (!hasInstalledPackage && !url) {\n continue;\n }\n\n // Get the API key env var from the provider info\n // Convert hyphens to underscores for env var naming convention\n const apiKeyEnvVar = providerInfo.env?.[0] || `${normalizedId.toUpperCase().replace(/-/g, '_')}_API_KEY`;\n\n // Determine the API key header (special case for Anthropic)\n const apiKeyHeader = !hasInstalledPackage\n ? OPENAI_COMPATIBLE_OVERRIDES[normalizedId]?.apiKeyHeader || 'Authorization'\n : undefined;\n\n providerConfigs[normalizedId] = {\n url,\n apiKeyEnvVar,\n apiKeyHeader,\n name: providerInfo.name || providerId.charAt(0).toUpperCase() + providerId.slice(1),\n models: modelIds,\n docUrl: providerInfo.doc, // Include documentation URL if available\n gateway: `models.dev`,\n };\n }\n }\n\n // Store for later use in buildUrl and buildHeaders\n this.providerConfigs = providerConfigs;\n\n return providerConfigs;\n }\n\n buildUrl(routerId: string, envVars?: typeof process.env): string | undefined {\n const { providerId } = parseModelRouterId(routerId);\n\n const config = this.providerConfigs[providerId];\n\n if (!config?.url) {\n return;\n }\n\n // Check for custom base URL from env vars\n const baseUrlEnvVar = `${providerId.toUpperCase().replace(/-/g, '_')}_BASE_URL`;\n const customBaseUrl = envVars?.[baseUrlEnvVar] || process.env[baseUrlEnvVar];\n\n return customBaseUrl || config.url;\n }\n\n getApiKey(modelId: string): Promise<string> {\n const [provider, model] = modelId.split('/');\n if (!provider || !model) {\n throw new Error(`Could not identify provider from model id ${modelId}`);\n }\n const config = this.providerConfigs[provider];\n\n if (!config) {\n throw new Error(`Could not find config for provider ${provider} with model id ${modelId}`);\n }\n\n const apiKey = typeof config.apiKeyEnvVar === `string` ? process.env[config.apiKeyEnvVar] : undefined; // we only use single string env var for models.dev for now\n\n if (!apiKey) {\n throw new Error(`Could not find API key process.env.${config.apiKeyEnvVar} for model id ${modelId}`);\n }\n\n return Promise.resolve(apiKey);\n }\n\n async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n }): Promise<LanguageModelV2> {\n const baseURL = this.buildUrl(`${providerId}/${modelId}`);\n\n switch (providerId) {\n case 'openai':\n return createOpenAI({ apiKey }).responses(modelId);\n case 'gemini':\n case 'google':\n return createGoogleGenerativeAI({\n apiKey,\n }).chat(modelId);\n case 'anthropic':\n return createAnthropic({ apiKey })(modelId);\n case 'openrouter':\n return createOpenRouter({ apiKey })(modelId);\n case 'xai':\n return createXai({\n apiKey,\n })(modelId);\n default:\n if (!baseURL) throw new Error(`No API URL found for ${providerId}/${modelId}`);\n return createOpenAICompatible({ name: providerId, apiKey, baseURL, supportsStructuredOutputs: true }).chatModel(\n modelId,\n );\n }\n }\n}\n"]}