@mastra/core 1.23.1-alpha.0 → 1.24.0-alpha.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 (204) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/dist/agent/index.cjs +13 -13
  3. package/dist/agent/index.js +2 -2
  4. package/dist/agent/message-list/adapters/AIV5Adapter.d.ts.map +1 -1
  5. package/dist/agent/message-list/conversion/input-converter.d.ts.map +1 -1
  6. package/dist/agent/message-list/index.cjs +19 -19
  7. package/dist/agent/message-list/index.js +1 -1
  8. package/dist/agent/message-list/message-list.d.ts.map +1 -1
  9. package/dist/agent/message-list/state/types.d.ts +7 -4
  10. package/dist/agent/message-list/state/types.d.ts.map +1 -1
  11. package/dist/agent/message-list/utils/stamp-part.d.ts +4 -0
  12. package/dist/agent/message-list/utils/stamp-part.d.ts.map +1 -0
  13. package/dist/browser/index.cjs +2 -2
  14. package/dist/browser/index.js +1 -1
  15. package/dist/channels/index.cjs +4 -4
  16. package/dist/channels/index.js +1 -1
  17. package/dist/{chunk-LB3GO6MV.js → chunk-234T424F.js} +5 -5
  18. package/dist/{chunk-LB3GO6MV.js.map → chunk-234T424F.js.map} +1 -1
  19. package/dist/{chunk-WCQOOGVM.cjs → chunk-365PDOQ4.cjs} +9 -9
  20. package/dist/{chunk-WCQOOGVM.cjs.map → chunk-365PDOQ4.cjs.map} +1 -1
  21. package/dist/{chunk-N7W2KRUH.js → chunk-3RI7ILBW.js} +3 -3
  22. package/dist/{chunk-N7W2KRUH.js.map → chunk-3RI7ILBW.js.map} +1 -1
  23. package/dist/{chunk-B4OOPFD3.cjs → chunk-4FFOOHE5.cjs} +27 -2
  24. package/dist/chunk-4FFOOHE5.cjs.map +1 -0
  25. package/dist/{chunk-S2546L42.js → chunk-7BBERBXP.js} +6 -6
  26. package/dist/{chunk-S2546L42.js.map → chunk-7BBERBXP.js.map} +1 -1
  27. package/dist/{chunk-BG3IPQZ7.cjs → chunk-B2FQ6L2I.cjs} +21 -21
  28. package/dist/{chunk-BG3IPQZ7.cjs.map → chunk-B2FQ6L2I.cjs.map} +1 -1
  29. package/dist/{chunk-UNQCLA7I.cjs → chunk-BFOZOAU2.cjs} +54 -26
  30. package/dist/chunk-BFOZOAU2.cjs.map +1 -0
  31. package/dist/{chunk-JC2RW3N5.js → chunk-CN6AFOVV.js} +4 -4
  32. package/dist/{chunk-JC2RW3N5.js.map → chunk-CN6AFOVV.js.map} +1 -1
  33. package/dist/{chunk-IAUQYADS.cjs → chunk-CY4AMNDV.cjs} +7 -7
  34. package/dist/{chunk-IAUQYADS.cjs.map → chunk-CY4AMNDV.cjs.map} +1 -1
  35. package/dist/{chunk-MW6HBUMV.cjs → chunk-D64ZY3NT.cjs} +29 -27
  36. package/dist/chunk-D64ZY3NT.cjs.map +1 -0
  37. package/dist/{chunk-JVXQTSRU.js → chunk-E7PBOS66.js} +3 -3
  38. package/dist/{chunk-JVXQTSRU.js.map → chunk-E7PBOS66.js.map} +1 -1
  39. package/dist/{chunk-GBUKRAUU.cjs → chunk-EAQQP6OK.cjs} +75 -75
  40. package/dist/{chunk-GBUKRAUU.cjs.map → chunk-EAQQP6OK.cjs.map} +1 -1
  41. package/dist/chunk-EGIEQEHP.js +35 -0
  42. package/dist/chunk-EGIEQEHP.js.map +1 -0
  43. package/dist/{chunk-C3RGHCOG.js → chunk-EJ62D3QH.js} +7 -7
  44. package/dist/{chunk-C3RGHCOG.js.map → chunk-EJ62D3QH.js.map} +1 -1
  45. package/dist/{chunk-J5JND5CL.cjs → chunk-FCW225T4.cjs} +84 -84
  46. package/dist/{chunk-J5JND5CL.cjs.map → chunk-FCW225T4.cjs.map} +1 -1
  47. package/dist/{chunk-OVQVLGT2.cjs → chunk-FLMCO42Y.cjs} +4 -4
  48. package/dist/{chunk-OVQVLGT2.cjs.map → chunk-FLMCO42Y.cjs.map} +1 -1
  49. package/dist/{chunk-RNKRA4W6.js → chunk-GAW7WFCY.js} +6 -6
  50. package/dist/{chunk-RNKRA4W6.js.map → chunk-GAW7WFCY.js.map} +1 -1
  51. package/dist/{chunk-7CWIKWHN.js → chunk-I7DUPZFN.js} +90 -43
  52. package/dist/chunk-I7DUPZFN.js.map +1 -0
  53. package/dist/{chunk-HMVCVSAM.js → chunk-IKUMKFM4.js} +5 -5
  54. package/dist/{chunk-HMVCVSAM.js.map → chunk-IKUMKFM4.js.map} +1 -1
  55. package/dist/{chunk-YTLU3Q7Q.js → chunk-JBFAGOAG.js} +13 -11
  56. package/dist/chunk-JBFAGOAG.js.map +1 -0
  57. package/dist/{chunk-6WRVZNQL.cjs → chunk-L56725IW.cjs} +7 -2
  58. package/dist/chunk-L56725IW.cjs.map +1 -0
  59. package/dist/{chunk-FDSY7ZGW.cjs → chunk-L73KZFX6.cjs} +10 -10
  60. package/dist/{chunk-FDSY7ZGW.cjs.map → chunk-L73KZFX6.cjs.map} +1 -1
  61. package/dist/{chunk-QX5YBALM.js → chunk-LUEXY2QV.js} +3 -3
  62. package/dist/{chunk-QX5YBALM.js.map → chunk-LUEXY2QV.js.map} +1 -1
  63. package/dist/{chunk-235IILEY.js → chunk-MD3VGE3F.js} +7 -2
  64. package/dist/chunk-MD3VGE3F.js.map +1 -0
  65. package/dist/{chunk-Q2RTFBSF.js → chunk-MK5IF24D.js} +8 -8
  66. package/dist/{chunk-Q2RTFBSF.js.map → chunk-MK5IF24D.js.map} +1 -1
  67. package/dist/{chunk-PJ5YCHXB.js → chunk-MZJQ7OKW.js} +3 -3
  68. package/dist/{chunk-PJ5YCHXB.js.map → chunk-MZJQ7OKW.js.map} +1 -1
  69. package/dist/{chunk-3UBTJXPW.cjs → chunk-P5C4HEAB.cjs} +32 -32
  70. package/dist/{chunk-3UBTJXPW.cjs.map → chunk-P5C4HEAB.cjs.map} +1 -1
  71. package/dist/{chunk-AMQICJHD.js → chunk-PCHML5XO.js} +11 -11
  72. package/dist/{chunk-AMQICJHD.js.map → chunk-PCHML5XO.js.map} +1 -1
  73. package/dist/{chunk-4LJ4M2DI.js → chunk-PQKSETS5.js} +3 -3
  74. package/dist/{chunk-4LJ4M2DI.js.map → chunk-PQKSETS5.js.map} +1 -1
  75. package/dist/{chunk-PHSDY5MP.cjs → chunk-QFGYBEP3.cjs} +10 -10
  76. package/dist/{chunk-PHSDY5MP.cjs.map → chunk-QFGYBEP3.cjs.map} +1 -1
  77. package/dist/{chunk-2M6QAFRM.cjs → chunk-RJAOQKHJ.cjs} +90 -43
  78. package/dist/chunk-RJAOQKHJ.cjs.map +1 -0
  79. package/dist/{chunk-WXCT24DY.cjs → chunk-SRQR5UN6.cjs} +27 -27
  80. package/dist/{chunk-WXCT24DY.cjs.map → chunk-SRQR5UN6.cjs.map} +1 -1
  81. package/dist/{chunk-7OU57YXD.cjs → chunk-SUEVJYTA.cjs} +185 -185
  82. package/dist/{chunk-7OU57YXD.cjs.map → chunk-SUEVJYTA.cjs.map} +1 -1
  83. package/dist/{chunk-LYCAEN2H.cjs → chunk-SYH64AGV.cjs} +219 -219
  84. package/dist/{chunk-LYCAEN2H.cjs.map → chunk-SYH64AGV.cjs.map} +1 -1
  85. package/dist/{chunk-ZHMULBPD.js → chunk-V2HSN7VZ.js} +26 -3
  86. package/dist/chunk-V2HSN7VZ.js.map +1 -0
  87. package/dist/{chunk-KPNURYWF.js → chunk-V657RNGK.js} +42 -14
  88. package/dist/chunk-V657RNGK.js.map +1 -0
  89. package/dist/{chunk-JGPMCTG4.cjs → chunk-XEDVYHBK.cjs} +3 -3
  90. package/dist/{chunk-JGPMCTG4.cjs.map → chunk-XEDVYHBK.cjs.map} +1 -1
  91. package/dist/{chunk-CLNGCSHU.cjs → chunk-XEM4OYJI.cjs} +15 -15
  92. package/dist/{chunk-CLNGCSHU.cjs.map → chunk-XEM4OYJI.cjs.map} +1 -1
  93. package/dist/{chunk-QG5JWMFX.cjs → chunk-XS3FHQ34.cjs} +11 -11
  94. package/dist/{chunk-QG5JWMFX.cjs.map → chunk-XS3FHQ34.cjs.map} +1 -1
  95. package/dist/{chunk-STZTHX32.js → chunk-XS75QEED.js} +5 -5
  96. package/dist/{chunk-STZTHX32.js.map → chunk-XS75QEED.js.map} +1 -1
  97. package/dist/{chunk-5OXVECLF.js → chunk-Y4SL4WJQ.js} +3 -3
  98. package/dist/{chunk-5OXVECLF.js.map → chunk-Y4SL4WJQ.js.map} +1 -1
  99. package/dist/chunk-ZPHI6QAA.cjs +40 -0
  100. package/dist/chunk-ZPHI6QAA.cjs.map +1 -0
  101. package/dist/datasets/index.cjs +17 -17
  102. package/dist/datasets/index.js +2 -2
  103. package/dist/docs/SKILL.md +2 -1
  104. package/dist/docs/assets/SOURCE_MAP.json +450 -450
  105. package/dist/docs/references/reference-observability-tracing-configuration.md +8 -1
  106. package/dist/docs/references/reference-observability-tracing-span-filtering.md +95 -0
  107. package/dist/docs/references/reference.md +1 -0
  108. package/dist/evals/index.cjs +23 -23
  109. package/dist/evals/index.js +3 -3
  110. package/dist/evals/scoreTraces/index.cjs +7 -7
  111. package/dist/evals/scoreTraces/index.js +3 -3
  112. package/dist/harness/index.cjs +9 -9
  113. package/dist/harness/index.js +6 -6
  114. package/dist/index.cjs +2 -2
  115. package/dist/index.js +1 -1
  116. package/dist/llm/index.cjs +20 -20
  117. package/dist/llm/index.js +5 -5
  118. package/dist/llm/model/provider-types.generated.d.ts +11 -1
  119. package/dist/logger/index.cjs +6 -6
  120. package/dist/logger/index.js +1 -1
  121. package/dist/loop/index.cjs +14 -14
  122. package/dist/loop/index.js +1 -1
  123. package/dist/mastra/index.cjs +2 -2
  124. package/dist/mastra/index.d.ts.map +1 -1
  125. package/dist/mastra/index.js +1 -1
  126. package/dist/mastra-5YHFXAJO.js +3 -0
  127. package/dist/{mastra-JWFZL5TC.js.map → mastra-5YHFXAJO.js.map} +1 -1
  128. package/dist/mastra-7CFH7DGM.cjs +12 -0
  129. package/dist/{mastra-ZQK3PKEU.cjs.map → mastra-7CFH7DGM.cjs.map} +1 -1
  130. package/dist/memory/index.cjs +19 -19
  131. package/dist/memory/index.js +1 -1
  132. package/dist/models-dev-X2MWNPAU.cjs +12 -0
  133. package/dist/{models-dev-6DVNVKP4.cjs.map → models-dev-X2MWNPAU.cjs.map} +1 -1
  134. package/dist/models-dev-ZXC3IYLG.js +3 -0
  135. package/dist/{models-dev-FOTHHSEK.js.map → models-dev-ZXC3IYLG.js.map} +1 -1
  136. package/dist/netlify-GOILLTQO.cjs +12 -0
  137. package/dist/{netlify-S2IW3O2X.cjs.map → netlify-GOILLTQO.cjs.map} +1 -1
  138. package/dist/netlify-HJL7EXHY.js +3 -0
  139. package/dist/{netlify-NMTX7SVL.js.map → netlify-HJL7EXHY.js.map} +1 -1
  140. package/dist/observability/context-storage.cjs +18 -28
  141. package/dist/observability/context-storage.cjs.map +1 -1
  142. package/dist/observability/context-storage.d.ts +9 -0
  143. package/dist/observability/context-storage.d.ts.map +1 -1
  144. package/dist/observability/context-storage.js +1 -28
  145. package/dist/observability/context-storage.js.map +1 -1
  146. package/dist/observability/index.cjs +33 -25
  147. package/dist/observability/index.d.ts +2 -0
  148. package/dist/observability/index.d.ts.map +1 -1
  149. package/dist/observability/index.js +3 -3
  150. package/dist/observability/rag-ingestion.d.ts +108 -0
  151. package/dist/observability/rag-ingestion.d.ts.map +1 -0
  152. package/dist/observability/types/core.d.ts +31 -1
  153. package/dist/observability/types/core.d.ts.map +1 -1
  154. package/dist/observability/types/tracing.d.ts +133 -1
  155. package/dist/observability/types/tracing.d.ts.map +1 -1
  156. package/dist/processor-provider/index.cjs +10 -10
  157. package/dist/processor-provider/index.js +1 -1
  158. package/dist/processors/index.cjs +44 -44
  159. package/dist/processors/index.js +1 -1
  160. package/dist/provider-registry-25ELOB67.cjs +44 -0
  161. package/dist/{provider-registry-7WS3N5BF.cjs.map → provider-registry-25ELOB67.cjs.map} +1 -1
  162. package/dist/provider-registry-UWTCPEFF.js +3 -0
  163. package/dist/{provider-registry-YADLRYW6.js.map → provider-registry-UWTCPEFF.js.map} +1 -1
  164. package/dist/provider-registry.json +34 -6
  165. package/dist/relevance/index.cjs +3 -3
  166. package/dist/relevance/index.js +1 -1
  167. package/dist/storage/constants.cjs +56 -56
  168. package/dist/storage/constants.js +1 -1
  169. package/dist/storage/index.cjs +286 -286
  170. package/dist/storage/index.js +3 -3
  171. package/dist/stream/index.cjs +11 -11
  172. package/dist/stream/index.js +2 -2
  173. package/dist/test-utils/llm-mock.cjs +4 -4
  174. package/dist/test-utils/llm-mock.js +1 -1
  175. package/dist/tool-loop-agent/index.cjs +4 -4
  176. package/dist/tool-loop-agent/index.js +1 -1
  177. package/dist/utils.cjs +25 -25
  178. package/dist/utils.js +1 -1
  179. package/dist/vector/index.cjs +7 -7
  180. package/dist/vector/index.js +1 -1
  181. package/dist/workflows/evented/index.cjs +10 -10
  182. package/dist/workflows/evented/index.js +1 -1
  183. package/dist/workflows/index.cjs +24 -24
  184. package/dist/workflows/index.js +1 -1
  185. package/package.json +5 -5
  186. package/src/llm/model/provider-types.generated.d.ts +11 -1
  187. package/dist/chunk-235IILEY.js.map +0 -1
  188. package/dist/chunk-2M6QAFRM.cjs.map +0 -1
  189. package/dist/chunk-6WRVZNQL.cjs.map +0 -1
  190. package/dist/chunk-7CWIKWHN.js.map +0 -1
  191. package/dist/chunk-B4OOPFD3.cjs.map +0 -1
  192. package/dist/chunk-KPNURYWF.js.map +0 -1
  193. package/dist/chunk-MW6HBUMV.cjs.map +0 -1
  194. package/dist/chunk-UNQCLA7I.cjs.map +0 -1
  195. package/dist/chunk-YTLU3Q7Q.js.map +0 -1
  196. package/dist/chunk-ZHMULBPD.js.map +0 -1
  197. package/dist/mastra-JWFZL5TC.js +0 -3
  198. package/dist/mastra-ZQK3PKEU.cjs +0 -12
  199. package/dist/models-dev-6DVNVKP4.cjs +0 -12
  200. package/dist/models-dev-FOTHHSEK.js +0 -3
  201. package/dist/netlify-NMTX7SVL.js +0 -3
  202. package/dist/netlify-S2IW3O2X.cjs +0 -12
  203. package/dist/provider-registry-7WS3N5BF.cjs +0 -44
  204. package/dist/provider-registry-YADLRYW6.js +0 -3
@@ -1,4 +1,4 @@
1
- import { MastraModelGateway, createOpenAICompatible, MASTRA_USER_AGENT, createAnthropic, createGoogleGenerativeAI, createOpenAI } from './chunk-QX5YBALM.js';
1
+ import { MastraModelGateway, createOpenAICompatible, MASTRA_USER_AGENT, createAnthropic, createGoogleGenerativeAI, createOpenAI } from './chunk-LUEXY2QV.js';
2
2
  import { InMemoryServerCache } from './chunk-HQXVBGBM.js';
3
3
  import { MastraError } from './chunk-FJEVLHJT.js';
4
4
 
@@ -161,5 +161,5 @@ var NetlifyGateway = class extends MastraModelGateway {
161
161
  };
162
162
 
163
163
  export { NetlifyGateway };
164
- //# sourceMappingURL=chunk-4LJ4M2DI.js.map
165
- //# sourceMappingURL=chunk-4LJ4M2DI.js.map
164
+ //# sourceMappingURL=chunk-PQKSETS5.js.map
165
+ //# sourceMappingURL=chunk-PQKSETS5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/llm/model/gateways/netlify.ts"],"names":[],"mappings":"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","file":"chunk-4LJ4M2DI.js","sourcesContent":["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 { InMemoryServerCache } from '../../../cache/inmemory.js';\nimport { MastraError } from '../../../error/index.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\nimport { MASTRA_USER_AGENT } from './constants.js';\n\ninterface NetlifyProviderResponse {\n token_env_var: string;\n url_env_var: string;\n models: string[];\n}\ninterface NetlifyResponse {\n providers: Record<string, NetlifyProviderResponse>;\n}\n\ninterface NetlifyTokenResponse {\n token: string;\n url: string;\n expires_at: number;\n}\n\ninterface CachedToken {\n token: string;\n url: string;\n expiresAt: number;\n}\n\ninterface TokenData {\n token: string;\n url: string;\n}\n\nexport class NetlifyGateway extends MastraModelGateway {\n readonly id = 'netlify';\n readonly name = 'Netlify AI Gateway';\n private tokenCache = new InMemoryServerCache();\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const response = await fetch('https://api.netlify.com/api/v1/ai-gateway/providers');\n if (!response.ok) {\n throw new Error(`Failed to fetch from Netlify: ${response.statusText}`);\n }\n const data = (await response.json()) as NetlifyResponse;\n const config: ProviderConfig = {\n apiKeyEnvVar: ['NETLIFY_TOKEN', 'NETLIFY_SITE_ID'],\n apiKeyHeader: 'Authorization',\n name: `Netlify`,\n gateway: `netlify`,\n models: [],\n docUrl: 'https://docs.netlify.com/build/ai-gateway/overview/',\n };\n // Convert Netlify format to our standard format\n for (const [providerId, provider] of Object.entries(data.providers)) {\n for (const model of provider.models) {\n config.models.push(`${providerId}/${model}`);\n }\n }\n // Return with gateway ID as key - registry generator will detect this and avoid doubling the prefix\n return { netlify: config };\n }\n\n async buildUrl(routerId: string, envVars?: typeof process.env): Promise<string> {\n // Check for Netlify site ID first (for token exchange)\n const siteId = envVars?.['NETLIFY_SITE_ID'] || process.env['NETLIFY_SITE_ID'];\n const netlifyToken = envVars?.['NETLIFY_TOKEN'] || process.env['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${routerId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${routerId}`,\n });\n }\n\n try {\n const tokenData = await this.getOrFetchToken(siteId, netlifyToken);\n return tokenData.url.endsWith(`/`) ? tokenData.url.substring(0, tokenData.url.length - 1) : tokenData.url;\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${routerId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n /**\n * Get cached token or fetch a new site-specific AI Gateway token from Netlify\n */\n private async getOrFetchToken(siteId: string, netlifyToken: string): Promise<TokenData> {\n const cacheKey = `netlify-token:${siteId}:${netlifyToken}`;\n\n // Check cache first\n const cached = (await this.tokenCache.get(cacheKey)) as CachedToken | undefined;\n if (cached && cached.expiresAt > Date.now() / 1000 + 60) {\n // Return cached token if it won't expire in the next minute\n return { token: cached.token, url: cached.url };\n }\n\n // Fetch new token\n const response = await fetch(`https://api.netlify.com/api/v1/sites/${siteId}/ai-gateway/token`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${netlifyToken}`,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get Netlify AI Gateway token: ${response.status} ${error}`);\n }\n\n const tokenResponse = (await response.json()) as NetlifyTokenResponse;\n\n // Cache the token - InMemoryServerCache will handle the TTL\n await this.tokenCache.set(cacheKey, {\n token: tokenResponse.token,\n url: tokenResponse.url,\n expiresAt: tokenResponse.expires_at,\n });\n\n return { token: tokenResponse.token, url: tokenResponse.url };\n }\n\n /**\n * Get cached token or fetch a new site-specific AI Gateway token from Netlify\n */\n async getApiKey(modelId: string): Promise<string> {\n const siteId = process.env['NETLIFY_SITE_ID'];\n const netlifyToken = process.env['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${modelId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${modelId}`,\n });\n }\n\n try {\n return (await this.getOrFetchToken(siteId, netlifyToken)).token;\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${modelId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n headers,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n }): Promise<LanguageModelV2> {\n const baseURL = await this.buildUrl(`${providerId}/${modelId}`);\n\n const mastraHeaders = { 'User-Agent': MASTRA_USER_AGENT, ...headers };\n\n switch (providerId) {\n case 'openai':\n return createOpenAI({ apiKey, baseURL, headers: mastraHeaders }).responses(modelId);\n case 'gemini':\n return createGoogleGenerativeAI({\n baseURL: `${baseURL}/v1beta/`,\n apiKey,\n headers: {\n 'user-agent': 'google-genai-sdk/',\n ...mastraHeaders,\n },\n }).chat(modelId);\n case 'anthropic':\n return createAnthropic({\n apiKey,\n baseURL: `${baseURL}/v1/`,\n headers: {\n 'anthropic-version': '2023-06-01',\n ...mastraHeaders,\n },\n })(modelId);\n default:\n return createOpenAICompatible({\n name: providerId,\n apiKey,\n baseURL,\n headers: mastraHeaders,\n supportsStructuredOutputs: true,\n }).chatModel(modelId);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/llm/model/gateways/netlify.ts"],"names":[],"mappings":"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","file":"chunk-PQKSETS5.js","sourcesContent":["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 { InMemoryServerCache } from '../../../cache/inmemory.js';\nimport { MastraError } from '../../../error/index.js';\nimport { MastraModelGateway } from './base.js';\nimport type { ProviderConfig } from './base.js';\nimport { MASTRA_USER_AGENT } from './constants.js';\n\ninterface NetlifyProviderResponse {\n token_env_var: string;\n url_env_var: string;\n models: string[];\n}\ninterface NetlifyResponse {\n providers: Record<string, NetlifyProviderResponse>;\n}\n\ninterface NetlifyTokenResponse {\n token: string;\n url: string;\n expires_at: number;\n}\n\ninterface CachedToken {\n token: string;\n url: string;\n expiresAt: number;\n}\n\ninterface TokenData {\n token: string;\n url: string;\n}\n\nexport class NetlifyGateway extends MastraModelGateway {\n readonly id = 'netlify';\n readonly name = 'Netlify AI Gateway';\n private tokenCache = new InMemoryServerCache();\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const response = await fetch('https://api.netlify.com/api/v1/ai-gateway/providers');\n if (!response.ok) {\n throw new Error(`Failed to fetch from Netlify: ${response.statusText}`);\n }\n const data = (await response.json()) as NetlifyResponse;\n const config: ProviderConfig = {\n apiKeyEnvVar: ['NETLIFY_TOKEN', 'NETLIFY_SITE_ID'],\n apiKeyHeader: 'Authorization',\n name: `Netlify`,\n gateway: `netlify`,\n models: [],\n docUrl: 'https://docs.netlify.com/build/ai-gateway/overview/',\n };\n // Convert Netlify format to our standard format\n for (const [providerId, provider] of Object.entries(data.providers)) {\n for (const model of provider.models) {\n config.models.push(`${providerId}/${model}`);\n }\n }\n // Return with gateway ID as key - registry generator will detect this and avoid doubling the prefix\n return { netlify: config };\n }\n\n async buildUrl(routerId: string, envVars?: typeof process.env): Promise<string> {\n // Check for Netlify site ID first (for token exchange)\n const siteId = envVars?.['NETLIFY_SITE_ID'] || process.env['NETLIFY_SITE_ID'];\n const netlifyToken = envVars?.['NETLIFY_TOKEN'] || process.env['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${routerId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${routerId}`,\n });\n }\n\n try {\n const tokenData = await this.getOrFetchToken(siteId, netlifyToken);\n return tokenData.url.endsWith(`/`) ? tokenData.url.substring(0, tokenData.url.length - 1) : tokenData.url;\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${routerId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n /**\n * Get cached token or fetch a new site-specific AI Gateway token from Netlify\n */\n private async getOrFetchToken(siteId: string, netlifyToken: string): Promise<TokenData> {\n const cacheKey = `netlify-token:${siteId}:${netlifyToken}`;\n\n // Check cache first\n const cached = (await this.tokenCache.get(cacheKey)) as CachedToken | undefined;\n if (cached && cached.expiresAt > Date.now() / 1000 + 60) {\n // Return cached token if it won't expire in the next minute\n return { token: cached.token, url: cached.url };\n }\n\n // Fetch new token\n const response = await fetch(`https://api.netlify.com/api/v1/sites/${siteId}/ai-gateway/token`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${netlifyToken}`,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get Netlify AI Gateway token: ${response.status} ${error}`);\n }\n\n const tokenResponse = (await response.json()) as NetlifyTokenResponse;\n\n // Cache the token - InMemoryServerCache will handle the TTL\n await this.tokenCache.set(cacheKey, {\n token: tokenResponse.token,\n url: tokenResponse.url,\n expiresAt: tokenResponse.expires_at,\n });\n\n return { token: tokenResponse.token, url: tokenResponse.url };\n }\n\n /**\n * Get cached token or fetch a new site-specific AI Gateway token from Netlify\n */\n async getApiKey(modelId: string): Promise<string> {\n const siteId = process.env['NETLIFY_SITE_ID'];\n const netlifyToken = process.env['NETLIFY_TOKEN'];\n\n if (!netlifyToken) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_TOKEN',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_TOKEN environment variable required for model: ${modelId}`,\n });\n }\n\n if (!siteId) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_NO_SITE_ID',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Missing NETLIFY_SITE_ID environment variable required for model: ${modelId}`,\n });\n }\n\n try {\n return (await this.getOrFetchToken(siteId, netlifyToken)).token;\n } catch (error) {\n throw new MastraError({\n id: 'NETLIFY_GATEWAY_TOKEN_ERROR',\n domain: 'LLM',\n category: 'UNKNOWN',\n text: `Failed to get Netlify AI Gateway token for model ${modelId}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n async resolveLanguageModel({\n modelId,\n providerId,\n apiKey,\n headers,\n }: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n }): Promise<LanguageModelV2> {\n const baseURL = await this.buildUrl(`${providerId}/${modelId}`);\n\n const mastraHeaders = { 'User-Agent': MASTRA_USER_AGENT, ...headers };\n\n switch (providerId) {\n case 'openai':\n return createOpenAI({ apiKey, baseURL, headers: mastraHeaders }).responses(modelId);\n case 'gemini':\n return createGoogleGenerativeAI({\n baseURL: `${baseURL}/v1beta/`,\n apiKey,\n headers: {\n 'user-agent': 'google-genai-sdk/',\n ...mastraHeaders,\n },\n }).chat(modelId);\n case 'anthropic':\n return createAnthropic({\n apiKey,\n baseURL: `${baseURL}/v1/`,\n headers: {\n 'anthropic-version': '2023-06-01',\n ...mastraHeaders,\n },\n })(modelId);\n default:\n return createOpenAICompatible({\n name: providerId,\n apiKey,\n baseURL,\n headers: mastraHeaders,\n supportsStructuredOutputs: true,\n }).chatModel(modelId);\n }\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunk6WRVZNQL_cjs = require('./chunk-6WRVZNQL.cjs');
3
+ var chunkL56725IW_cjs = require('./chunk-L56725IW.cjs');
4
4
 
5
5
  // src/observability/utils.ts
6
- var entityTypeValues = new Set(Object.values(chunk6WRVZNQL_cjs.EntityType));
6
+ var entityTypeValues = new Set(Object.values(chunkL56725IW_cjs.EntityType));
7
7
  var currentSpanResolver;
8
8
  function setCurrentSpanResolver(resolver) {
9
9
  currentSpanResolver = resolver;
@@ -90,19 +90,19 @@ function getEntityTypeForSpan(span) {
90
90
  }
91
91
  switch (span.spanType) {
92
92
  case "agent_run" /* AGENT_RUN */:
93
- return chunk6WRVZNQL_cjs.EntityType.AGENT;
93
+ return chunkL56725IW_cjs.EntityType.AGENT;
94
94
  case "scorer_run" /* SCORER_RUN */:
95
95
  case "scorer_step" /* SCORER_STEP */:
96
- return chunk6WRVZNQL_cjs.EntityType.SCORER;
96
+ return chunkL56725IW_cjs.EntityType.SCORER;
97
97
  case "workflow_run" /* WORKFLOW_RUN */:
98
- return chunk6WRVZNQL_cjs.EntityType.WORKFLOW_RUN;
98
+ return chunkL56725IW_cjs.EntityType.WORKFLOW_RUN;
99
99
  case "workflow_step" /* WORKFLOW_STEP */:
100
- return chunk6WRVZNQL_cjs.EntityType.WORKFLOW_STEP;
100
+ return chunkL56725IW_cjs.EntityType.WORKFLOW_STEP;
101
101
  case "tool_call" /* TOOL_CALL */:
102
102
  case "mcp_tool_call" /* MCP_TOOL_CALL */:
103
- return chunk6WRVZNQL_cjs.EntityType.TOOL;
103
+ return chunkL56725IW_cjs.EntityType.TOOL;
104
104
  case "processor_run" /* PROCESSOR_RUN */:
105
- return chunk6WRVZNQL_cjs.EntityType.OUTPUT_PROCESSOR;
105
+ return chunkL56725IW_cjs.EntityType.OUTPUT_PROCESSOR;
106
106
  default:
107
107
  return void 0;
108
108
  }
@@ -117,5 +117,5 @@ exports.resolveCurrentSpan = resolveCurrentSpan;
117
117
  exports.setCurrentSpanResolver = setCurrentSpanResolver;
118
118
  exports.setExecuteWithContext = setExecuteWithContext;
119
119
  exports.setExecuteWithContextSync = setExecuteWithContextSync;
120
- //# sourceMappingURL=chunk-PHSDY5MP.cjs.map
121
- //# sourceMappingURL=chunk-PHSDY5MP.cjs.map
120
+ //# sourceMappingURL=chunk-QFGYBEP3.cjs.map
121
+ //# sourceMappingURL=chunk-QFGYBEP3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/observability/utils.ts"],"names":["EntityType"],"mappings":";;;;;AAWA,IAAM,mBAAmB,IAAI,GAAA,CAAI,MAAA,CAAO,MAAA,CAAOA,4BAAU,CAAC,CAAA;AAC1D,IAAI,mBAAA;AAEG,SAAS,uBAAuB,QAAA,EAAyD;AAC9F,EAAA,mBAAA,GAAsB,QAAA;AACxB;AAEO,SAAS,kBAAA,GAA0C;AACxD,EAAA,OAAO,mBAAA,IAAsB;AAC/B;AAUA,IAAI,sBAAA;AACJ,IAAI,0BAAA;AAEG,SAAS,sBAAsB,IAAA,EAAkC;AACtE,EAAA,sBAAA,GAAyB,IAAA;AAC3B;AAEO,SAAS,0BAA0B,IAAA,EAAsC;AAC9E,EAAA,0BAAA,GAA6B,IAAA;AAC/B;AAMA,eAAsB,mBAAsB,MAAA,EAA8D;AACxG,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,OAAO,uBAAuB,MAAM,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,MAAA;AACrB,EAAA,IAAI,MAAM,gBAAA,EAAkB;AAC1B,IAAA,OAAO,IAAA,CAAK,iBAAiB,EAAE,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,EAAA,EAAG;AACZ;AAMO,SAAS,uBAA0B,MAAA,EAA4C;AACpF,EAAA,IAAI,0BAAA,EAA4B;AAC9B,IAAA,OAAO,2BAA2B,MAAM,CAAA;AAAA,EAC1C;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,MAAA;AACrB,EAAA,IAAI,MAAM,oBAAA,EAAsB;AAC9B,IAAA,OAAO,IAAA,CAAK,qBAAqB,EAAE,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,EAAA,EAAG;AACZ;AAWO,SAAS,gBAAoC,OAAA,EAAyD;AAC3G,EAAA,MAAM,EAAE,MAAM,UAAA,EAAY,cAAA,EAAgB,gBAAgB,cAAA,EAAgB,GAAG,MAAK,GAAI,OAAA;AAEtF,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,IACtB,GAAI,cAAA,EAAgB,QAAA,IAAY;AAAC,GACnC;AAGA,EAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,IAAA,OAAO,cAAA,CAAe,YAAY,eAAA,CAAgB;AAAA,MAChD,IAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAG,IAAA;AAAA,MACH,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,EAAQ,eAAe,mBAAA,CAAoB,EAAE,gBAAgB,CAAA;AAEtF,EAAA,OAAO,UAAU,SAAA,CAAa;AAAA,IAC5B,IAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG,IAAA;AAAA,IACH,QAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAS,cAAA,EAAgB,OAAA;AAAA,IACzB,cAAc,cAAA,EAAgB,YAAA;AAAA,IAC9B,oBAAA,EAAsB;AAAA,MACpB,cAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AACH;AAQO,SAAS,kBAAkB,IAAA,EAAqC;AACrE,EAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,GAA+B,IAAA;AACnC,EAAA,IAAI,cAAA,GAAsC,IAAA,CAAK,UAAA,GAAa,MAAA,GAAY,IAAA;AAExE,EAAA,OAAO,SAAS,MAAA,EAAQ;AACtB,IAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAElB,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,cAAA,GAAiB,OAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,cAAA;AACT;AAQO,SAAS,qBAAqB,IAAA,EAGV;AACzB,EAAA,IAAI,KAAK,UAAA,IAAc,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,UAAwB,CAAA,EAAG;AAC1E,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAEA,EAAA,QAAQ,KAAK,QAAA;AAAU,IACrB,KAAA,WAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,KAAA;AAAA,IACpB,KAAA,YAAA;AAAA,IACA,KAAA,aAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,MAAA;AAAA,IACpB,KAAA,cAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,YAAA;AAAA,IACpB,KAAA,eAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,aAAA;AAAA,IACpB,KAAA,WAAA;AAAA,IACA,KAAA,eAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,IAAA;AAAA,IACpB,KAAA,eAAA;AACE,MAAA,OAAOA,4BAAA,CAAW,gBAAA;AAAA,IACpB;AACE,MAAA,OAAO,MAAA;AAAA;AAEb","file":"chunk-PHSDY5MP.cjs","sourcesContent":["/**\n * Browser-safe observability utilities.\n *\n * Functions that depend on AsyncLocalStorage (getCurrentSpan, executeWithContext,\n * executeWithContextSync) are in context-storage.ts and should only be imported\n * by server-side code.\n */\n\nimport { EntityType, SpanType } from './types';\nimport type { Span, GetOrCreateSpanOptions, AnySpan } from './types';\n\nconst entityTypeValues = new Set(Object.values(EntityType));\nlet currentSpanResolver: (() => AnySpan | undefined) | undefined;\n\nexport function setCurrentSpanResolver(resolver: (() => AnySpan | undefined) | undefined): void {\n currentSpanResolver = resolver;\n}\n\nexport function resolveCurrentSpan(): AnySpan | undefined {\n return currentSpanResolver?.();\n}\n\n// --- Lazy resolvers for executeWithContext / executeWithContextSync ---\n// The real implementations live in context-storage.ts (which imports AsyncLocalStorage).\n// context-storage.ts registers them at import time so that consumer code can call these\n// browser-safe wrappers without pulling async_hooks into shared chunks.\n\ntype ExecuteWithContextFn = <T>(params: { span?: AnySpan; fn: () => Promise<T> }) => Promise<T>;\ntype ExecuteWithContextSyncFn = <T>(params: { span?: AnySpan; fn: () => T }) => T;\n\nlet executeWithContextImpl: ExecuteWithContextFn | undefined;\nlet executeWithContextSyncImpl: ExecuteWithContextSyncFn | undefined;\n\nexport function setExecuteWithContext(impl: ExecuteWithContextFn): void {\n executeWithContextImpl = impl;\n}\n\nexport function setExecuteWithContextSync(impl: ExecuteWithContextSyncFn): void {\n executeWithContextSyncImpl = impl;\n}\n\n/**\n * Execute an async function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport async function executeWithContext<T>(params: { span?: AnySpan; fn: () => Promise<T> }): Promise<T> {\n if (executeWithContextImpl) {\n return executeWithContextImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContext) {\n return span.executeInContext(fn);\n }\n return fn();\n}\n\n/**\n * Execute a sync function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport function executeWithContextSync<T>(params: { span?: AnySpan; fn: () => T }): T {\n if (executeWithContextSyncImpl) {\n return executeWithContextSyncImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContextSync) {\n return span.executeInContextSync(fn);\n }\n return fn();\n}\n\n/**\n * Creates or gets a child span from existing tracing context or starts a new trace.\n * This helper consolidates the common pattern of creating spans that can either be:\n * 1. Children of an existing span (when tracingContext.currentSpan exists)\n * 2. New root spans (when no current span exists)\n *\n * @param options - Configuration object for span creation\n * @returns The created Span or undefined if tracing is disabled\n */\nexport function getOrCreateSpan<T extends SpanType>(options: GetOrCreateSpanOptions<T>): Span<T> | undefined {\n const { type, attributes, tracingContext, requestContext, tracingOptions, ...rest } = options;\n\n const metadata = {\n ...(rest.metadata ?? {}),\n ...(tracingOptions?.metadata ?? {}),\n };\n\n // If we have a current span, create a child span\n if (tracingContext?.currentSpan) {\n return tracingContext.currentSpan.createChildSpan({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n });\n }\n\n // Otherwise, try to create a new root span\n const instance = options.mastra?.observability?.getSelectedInstance({ requestContext });\n\n return instance?.startSpan<T>({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n tracingOptions,\n traceId: tracingOptions?.traceId,\n parentSpanId: tracingOptions?.parentSpanId,\n customSamplerOptions: {\n requestContext,\n metadata,\n },\n });\n}\n\n/**\n * Returns the top-most non-internal span that would appear in exported tracing output.\n *\n * Public API results should use this span for trace/span correlation because internal Mastra\n * workflow spans are omitted from external exporters.\n */\nexport function getRootExportSpan(span?: AnySpan): AnySpan | undefined {\n if (!span?.isValid) {\n return undefined;\n }\n\n let current: AnySpan | undefined = span;\n let rootExportSpan: AnySpan | undefined = span.isInternal ? undefined : span;\n\n while (current?.parent) {\n current = current.parent;\n\n if (!current.isInternal) {\n rootExportSpan = current;\n }\n }\n\n return rootExportSpan;\n}\n\n/**\n * Resolves the best available entity type for a span-like record.\n *\n * Prefers an explicit `entityType` when present and valid, then falls back to the\n * span type for common observability entities.\n */\nexport function getEntityTypeForSpan(span: {\n entityType?: string | null;\n spanType?: SpanType | string | null;\n}): EntityType | undefined {\n if (span.entityType && entityTypeValues.has(span.entityType as EntityType)) {\n return span.entityType as EntityType;\n }\n\n switch (span.spanType) {\n case SpanType.AGENT_RUN:\n return EntityType.AGENT;\n case SpanType.SCORER_RUN:\n case SpanType.SCORER_STEP:\n return EntityType.SCORER;\n case SpanType.WORKFLOW_RUN:\n return EntityType.WORKFLOW_RUN;\n case SpanType.WORKFLOW_STEP:\n return EntityType.WORKFLOW_STEP;\n case SpanType.TOOL_CALL:\n case SpanType.MCP_TOOL_CALL:\n return EntityType.TOOL;\n case SpanType.PROCESSOR_RUN:\n return EntityType.OUTPUT_PROCESSOR;\n default:\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/observability/utils.ts"],"names":["EntityType"],"mappings":"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","file":"chunk-QFGYBEP3.cjs","sourcesContent":["/**\n * Browser-safe observability utilities.\n *\n * Functions that depend on AsyncLocalStorage (getCurrentSpan, executeWithContext,\n * executeWithContextSync) are in context-storage.ts and should only be imported\n * by server-side code.\n */\n\nimport { EntityType, SpanType } from './types';\nimport type { Span, GetOrCreateSpanOptions, AnySpan } from './types';\n\nconst entityTypeValues = new Set(Object.values(EntityType));\nlet currentSpanResolver: (() => AnySpan | undefined) | undefined;\n\nexport function setCurrentSpanResolver(resolver: (() => AnySpan | undefined) | undefined): void {\n currentSpanResolver = resolver;\n}\n\nexport function resolveCurrentSpan(): AnySpan | undefined {\n return currentSpanResolver?.();\n}\n\n// --- Lazy resolvers for executeWithContext / executeWithContextSync ---\n// The real implementations live in context-storage.ts (which imports AsyncLocalStorage).\n// context-storage.ts registers them at import time so that consumer code can call these\n// browser-safe wrappers without pulling async_hooks into shared chunks.\n\ntype ExecuteWithContextFn = <T>(params: { span?: AnySpan; fn: () => Promise<T> }) => Promise<T>;\ntype ExecuteWithContextSyncFn = <T>(params: { span?: AnySpan; fn: () => T }) => T;\n\nlet executeWithContextImpl: ExecuteWithContextFn | undefined;\nlet executeWithContextSyncImpl: ExecuteWithContextSyncFn | undefined;\n\nexport function setExecuteWithContext(impl: ExecuteWithContextFn): void {\n executeWithContextImpl = impl;\n}\n\nexport function setExecuteWithContextSync(impl: ExecuteWithContextSyncFn): void {\n executeWithContextSyncImpl = impl;\n}\n\n/**\n * Execute an async function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport async function executeWithContext<T>(params: { span?: AnySpan; fn: () => Promise<T> }): Promise<T> {\n if (executeWithContextImpl) {\n return executeWithContextImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContext) {\n return span.executeInContext(fn);\n }\n return fn();\n}\n\n/**\n * Execute a sync function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport function executeWithContextSync<T>(params: { span?: AnySpan; fn: () => T }): T {\n if (executeWithContextSyncImpl) {\n return executeWithContextSyncImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContextSync) {\n return span.executeInContextSync(fn);\n }\n return fn();\n}\n\n/**\n * Creates or gets a child span from existing tracing context or starts a new trace.\n * This helper consolidates the common pattern of creating spans that can either be:\n * 1. Children of an existing span (when tracingContext.currentSpan exists)\n * 2. New root spans (when no current span exists)\n *\n * @param options - Configuration object for span creation\n * @returns The created Span or undefined if tracing is disabled\n */\nexport function getOrCreateSpan<T extends SpanType>(options: GetOrCreateSpanOptions<T>): Span<T> | undefined {\n const { type, attributes, tracingContext, requestContext, tracingOptions, ...rest } = options;\n\n const metadata = {\n ...(rest.metadata ?? {}),\n ...(tracingOptions?.metadata ?? {}),\n };\n\n // If we have a current span, create a child span\n if (tracingContext?.currentSpan) {\n return tracingContext.currentSpan.createChildSpan({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n });\n }\n\n // Otherwise, try to create a new root span\n const instance = options.mastra?.observability?.getSelectedInstance({ requestContext });\n\n return instance?.startSpan<T>({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n tracingOptions,\n traceId: tracingOptions?.traceId,\n parentSpanId: tracingOptions?.parentSpanId,\n customSamplerOptions: {\n requestContext,\n metadata,\n },\n });\n}\n\n/**\n * Returns the top-most non-internal span that would appear in exported tracing output.\n *\n * Public API results should use this span for trace/span correlation because internal Mastra\n * workflow spans are omitted from external exporters.\n */\nexport function getRootExportSpan(span?: AnySpan): AnySpan | undefined {\n if (!span?.isValid) {\n return undefined;\n }\n\n let current: AnySpan | undefined = span;\n let rootExportSpan: AnySpan | undefined = span.isInternal ? undefined : span;\n\n while (current?.parent) {\n current = current.parent;\n\n if (!current.isInternal) {\n rootExportSpan = current;\n }\n }\n\n return rootExportSpan;\n}\n\n/**\n * Resolves the best available entity type for a span-like record.\n *\n * Prefers an explicit `entityType` when present and valid, then falls back to the\n * span type for common observability entities.\n */\nexport function getEntityTypeForSpan(span: {\n entityType?: string | null;\n spanType?: SpanType | string | null;\n}): EntityType | undefined {\n if (span.entityType && entityTypeValues.has(span.entityType as EntityType)) {\n return span.entityType as EntityType;\n }\n\n switch (span.spanType) {\n case SpanType.AGENT_RUN:\n return EntityType.AGENT;\n case SpanType.SCORER_RUN:\n case SpanType.SCORER_STEP:\n return EntityType.SCORER;\n case SpanType.WORKFLOW_RUN:\n return EntityType.WORKFLOW_RUN;\n case SpanType.WORKFLOW_STEP:\n return EntityType.WORKFLOW_STEP;\n case SpanType.TOOL_CALL:\n case SpanType.MCP_TOOL_CALL:\n return EntityType.TOOL;\n case SpanType.PROCESSOR_RUN:\n return EntityType.OUTPUT_PROCESSOR;\n default:\n return undefined;\n }\n}\n"]}
@@ -764,6 +764,26 @@ function getToolName(type) {
764
764
  }
765
765
  return sanitizeToolName(type);
766
766
  }
767
+ function mergeMastraCreatedAt(metadata, createdAt) {
768
+ if (createdAt == null) {
769
+ return metadata;
770
+ }
771
+ return {
772
+ ...metadata || {},
773
+ mastra: {
774
+ ...(metadata || {}).mastra || {},
775
+ createdAt
776
+ }
777
+ };
778
+ }
779
+ function getMastraCreatedAt(providerMetadata) {
780
+ const value = providerMetadata?.mastra;
781
+ if (!value || typeof value !== "object") {
782
+ return void 0;
783
+ }
784
+ const createdAt = value.createdAt;
785
+ return typeof createdAt === "number" ? createdAt : void 0;
786
+ }
767
787
  var AIV5Adapter = class {
768
788
  /**
769
789
  * Direct conversion from MastraDBMessage to AIV5 UIMessage
@@ -829,7 +849,7 @@ var AIV5Adapter = class {
829
849
  input: inv.args,
830
850
  output: inv.result,
831
851
  state: "output-available",
832
- callProviderMetadata: part.providerMetadata,
852
+ callProviderMetadata: mergeMastraCreatedAt(part.providerMetadata, part.createdAt),
833
853
  providerExecuted: part.providerExecuted
834
854
  });
835
855
  } else {
@@ -838,7 +858,7 @@ var AIV5Adapter = class {
838
858
  toolCallId: inv.toolCallId,
839
859
  input: inv.args,
840
860
  state: "input-available",
841
- callProviderMetadata: part.providerMetadata,
861
+ callProviderMetadata: mergeMastraCreatedAt(part.providerMetadata, part.createdAt),
842
862
  providerExecuted: part.providerExecuted
843
863
  });
844
864
  }
@@ -855,9 +875,7 @@ var AIV5Adapter = class {
855
875
  text: text || "",
856
876
  state: "done"
857
877
  };
858
- if (part.providerMetadata) {
859
- v5UIPart.providerMetadata = part.providerMetadata;
860
- }
878
+ v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);
861
879
  parts.push(v5UIPart);
862
880
  }
863
881
  continue;
@@ -876,9 +894,7 @@ var AIV5Adapter = class {
876
894
  url: part.data,
877
895
  mediaType: categorized.mimeType || "image/png"
878
896
  };
879
- if (part.providerMetadata) {
880
- v5UIPart.providerMetadata = part.providerMetadata;
881
- }
897
+ v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);
882
898
  parts.push(v5UIPart);
883
899
  } else {
884
900
  let filePartData;
@@ -908,9 +924,7 @@ var AIV5Adapter = class {
908
924
  url: dataUri,
909
925
  mediaType: finalMimeType
910
926
  };
911
- if (part.providerMetadata) {
912
- v5UIPart.providerMetadata = part.providerMetadata;
913
- }
927
+ v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);
914
928
  parts.push(v5UIPart);
915
929
  }
916
930
  } else if (part.type === "source") {
@@ -920,9 +934,7 @@ var AIV5Adapter = class {
920
934
  sourceId: part.source.id,
921
935
  title: part.source.title
922
936
  };
923
- if (part.providerMetadata) {
924
- v5UIPart.providerMetadata = part.providerMetadata;
925
- }
937
+ v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);
926
938
  parts.push(v5UIPart);
927
939
  } else if (part.type === "source-document") {
928
940
  continue;
@@ -931,9 +943,7 @@ var AIV5Adapter = class {
931
943
  type: "text",
932
944
  text: part.text
933
945
  };
934
- if (part.providerMetadata) {
935
- v5UIPart.providerMetadata = part.providerMetadata;
936
- }
946
+ v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);
937
947
  parts.push(v5UIPart);
938
948
  hasNonToolReasoningParts = true;
939
949
  } else {
@@ -1020,7 +1030,8 @@ var AIV5Adapter = class {
1020
1030
  result: typeof p.output === "object" && p.output && "value" in p.output ? p.output.value : p.output,
1021
1031
  state: "result"
1022
1032
  },
1023
- providerMetadata: callProviderMetadata
1033
+ providerMetadata: callProviderMetadata,
1034
+ createdAt: getMastraCreatedAt(callProviderMetadata)
1024
1035
  };
1025
1036
  }
1026
1037
  return {
@@ -1031,7 +1042,8 @@ var AIV5Adapter = class {
1031
1042
  args: p.input,
1032
1043
  state: "call"
1033
1044
  },
1034
- providerMetadata: callProviderMetadata
1045
+ providerMetadata: callProviderMetadata,
1046
+ createdAt: getMastraCreatedAt(callProviderMetadata)
1035
1047
  };
1036
1048
  }
1037
1049
  if (p.type === "reasoning") {
@@ -1044,7 +1056,8 @@ var AIV5Adapter = class {
1044
1056
  text: p.text
1045
1057
  }
1046
1058
  ],
1047
- providerMetadata: p.providerMetadata
1059
+ providerMetadata: p.providerMetadata,
1060
+ createdAt: getMastraCreatedAt(p.providerMetadata)
1048
1061
  };
1049
1062
  }
1050
1063
  if (p.type === "file") {
@@ -1053,6 +1066,7 @@ var AIV5Adapter = class {
1053
1066
  mimeType: p.mediaType,
1054
1067
  data: p.url || "",
1055
1068
  providerMetadata: p.providerMetadata,
1069
+ createdAt: getMastraCreatedAt(p.providerMetadata),
1056
1070
  ...p.filename ? { filename: p.filename } : {}
1057
1071
  };
1058
1072
  }
@@ -1065,14 +1079,16 @@ var AIV5Adapter = class {
1065
1079
  id: p.url,
1066
1080
  providerMetadata: p.providerMetadata
1067
1081
  },
1068
- providerMetadata: p.providerMetadata
1082
+ providerMetadata: p.providerMetadata,
1083
+ createdAt: getMastraCreatedAt(p.providerMetadata)
1069
1084
  };
1070
1085
  }
1071
1086
  if (p.type === "text") {
1072
1087
  return {
1073
1088
  type: "text",
1074
1089
  text: p.text,
1075
- providerMetadata: p.providerMetadata
1090
+ providerMetadata: p.providerMetadata,
1091
+ createdAt: getMastraCreatedAt(p.providerMetadata)
1076
1092
  };
1077
1093
  }
1078
1094
  if (p.type === "step-start") {
@@ -1165,6 +1181,7 @@ var AIV5Adapter = class {
1165
1181
  };
1166
1182
  if (part.providerOptions) {
1167
1183
  textPart.providerMetadata = part.providerOptions;
1184
+ textPart.createdAt = getMastraCreatedAt(part.providerOptions);
1168
1185
  }
1169
1186
  mastraDBParts.push(textPart);
1170
1187
  } else if (part.type === "tool-call") {
@@ -1180,6 +1197,7 @@ var AIV5Adapter = class {
1180
1197
  };
1181
1198
  if (part.providerOptions) {
1182
1199
  toolInvocationPart.providerMetadata = part.providerOptions;
1200
+ toolInvocationPart.createdAt = getMastraCreatedAt(part.providerOptions);
1183
1201
  }
1184
1202
  mastraDBParts.push(toolInvocationPart);
1185
1203
  toolInvocations.push({
@@ -1214,6 +1232,7 @@ var AIV5Adapter = class {
1214
1232
  updateMatchingCallInvocationResult(toolResultPart, matchingV2Part.toolInvocation);
1215
1233
  if (toolResultPart.providerOptions) {
1216
1234
  matchingV2Part.providerMetadata = toolResultPart.providerOptions;
1235
+ matchingV2Part.createdAt = getMastraCreatedAt(toolResultPart.providerOptions) ?? matchingV2Part.createdAt;
1217
1236
  }
1218
1237
  } else {
1219
1238
  const toolInvocationPart = {
@@ -1228,6 +1247,7 @@ var AIV5Adapter = class {
1228
1247
  updateMatchingCallInvocationResult(toolResultPart, toolInvocationPart.toolInvocation);
1229
1248
  if (toolResultPart.providerOptions) {
1230
1249
  toolInvocationPart.providerMetadata = toolResultPart.providerOptions;
1250
+ toolInvocationPart.createdAt = getMastraCreatedAt(toolResultPart.providerOptions);
1231
1251
  }
1232
1252
  mastraDBParts.push(toolInvocationPart);
1233
1253
  }
@@ -1239,6 +1259,7 @@ var AIV5Adapter = class {
1239
1259
  };
1240
1260
  if (part.providerOptions) {
1241
1261
  v2ReasoningPart.providerMetadata = part.providerOptions;
1262
+ v2ReasoningPart.createdAt = getMastraCreatedAt(part.providerOptions);
1242
1263
  }
1243
1264
  mastraDBParts.push(v2ReasoningPart);
1244
1265
  reasoningParts.push(part.text);
@@ -1253,6 +1274,7 @@ var AIV5Adapter = class {
1253
1274
  };
1254
1275
  if (part.providerOptions) {
1255
1276
  imageFilePart.providerMetadata = part.providerOptions;
1277
+ imageFilePart.createdAt = getMastraCreatedAt(part.providerOptions);
1256
1278
  }
1257
1279
  mastraDBParts.push(imageFilePart);
1258
1280
  experimental_attachments.push({
@@ -1270,6 +1292,7 @@ var AIV5Adapter = class {
1270
1292
  };
1271
1293
  if (part.providerOptions) {
1272
1294
  v2FilePart.providerMetadata = part.providerOptions;
1295
+ v2FilePart.createdAt = getMastraCreatedAt(part.providerOptions);
1273
1296
  }
1274
1297
  if (filePart.filename) {
1275
1298
  v2FilePart.filename = filePart.filename;
@@ -2253,6 +2276,21 @@ function messagesAreEqual(one, two) {
2253
2276
  return true;
2254
2277
  }
2255
2278
 
2279
+ // src/agent/message-list/utils/stamp-part.ts
2280
+ function stampPart(part) {
2281
+ if (part.createdAt == null) {
2282
+ part.createdAt = Date.now();
2283
+ }
2284
+ return part;
2285
+ }
2286
+ function stampMessageParts(message, source) {
2287
+ if (source === "memory" || !Array.isArray(message.content.parts)) {
2288
+ return message;
2289
+ }
2290
+ message.content.parts = message.content.parts.map((part) => stampPart(part));
2291
+ return message;
2292
+ }
2293
+
2256
2294
  // src/agent/message-list/conversion/input-converter.ts
2257
2295
  function inputToMastraDBMessage(message, messageSource, context) {
2258
2296
  if (messageSource !== `memory` && `threadId` in message && message.threadId && context.memoryInfo && message.threadId !== context.memoryInfo.threadId) {
@@ -2266,16 +2304,19 @@ function inputToMastraDBMessage(message, messageSource, context) {
2266
2304
  );
2267
2305
  }
2268
2306
  if (TypeDetector.isMastraMessageV1(message)) {
2269
- return mastraMessageV1ToMastraDBMessage(message, messageSource, context);
2307
+ return stampMessageParts(mastraMessageV1ToMastraDBMessage(message, messageSource, context), messageSource);
2270
2308
  }
2271
2309
  if (TypeDetector.isMastraDBMessage(message)) {
2272
- return hydrateMastraDBMessageFields(message, context);
2310
+ return stampMessageParts(hydrateMastraDBMessageFields(message, context), messageSource);
2273
2311
  }
2274
2312
  if (TypeDetector.isAIV4CoreMessage(message)) {
2275
- return AIV4Adapter.fromCoreMessage(message, context, messageSource);
2313
+ return stampMessageParts(AIV4Adapter.fromCoreMessage(message, context, messageSource), messageSource);
2276
2314
  }
2277
2315
  if (TypeDetector.isAIV4UIMessage(message)) {
2278
- return AIV4Adapter.fromUIMessage(message, context, messageSource);
2316
+ return stampMessageParts(
2317
+ AIV4Adapter.fromUIMessage(message, context, messageSource),
2318
+ messageSource
2319
+ );
2279
2320
  }
2280
2321
  const hasOriginalId = "id" in message && typeof message.id === "string";
2281
2322
  const id = hasOriginalId ? message.id : context.newMessageId();
@@ -2304,24 +2345,30 @@ function inputToMastraDBMessage(message, messageSource, context) {
2304
2345
  if (TypeDetector.isAIV5CoreMessage(message)) {
2305
2346
  const dbMsg = AIV5Adapter.fromModelMessage(message, messageSource);
2306
2347
  const rawCreatedAt = "metadata" in message && message.metadata && typeof message.metadata === "object" && "createdAt" in message.metadata ? message.metadata.createdAt : void 0;
2307
- return {
2308
- ...dbMsg,
2309
- id,
2310
- createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),
2311
- threadId: context.memoryInfo?.threadId,
2312
- resourceId: context.memoryInfo?.resourceId
2313
- };
2348
+ return stampMessageParts(
2349
+ {
2350
+ ...dbMsg,
2351
+ id,
2352
+ createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),
2353
+ threadId: context.memoryInfo?.threadId,
2354
+ resourceId: context.memoryInfo?.resourceId
2355
+ },
2356
+ messageSource
2357
+ );
2314
2358
  }
2315
2359
  if (TypeDetector.isAIV5UIMessage(message)) {
2316
2360
  const dbMsg = AIV5Adapter.fromUIMessage(message);
2317
2361
  const rawCreatedAt = "createdAt" in message ? message.createdAt : void 0;
2318
- return {
2319
- ...dbMsg,
2320
- id,
2321
- createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),
2322
- threadId: context.memoryInfo?.threadId,
2323
- resourceId: context.memoryInfo?.resourceId
2324
- };
2362
+ return stampMessageParts(
2363
+ {
2364
+ ...dbMsg,
2365
+ id,
2366
+ createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),
2367
+ threadId: context.memoryInfo?.threadId,
2368
+ resourceId: context.memoryInfo?.resourceId
2369
+ },
2370
+ messageSource
2371
+ );
2325
2372
  }
2326
2373
  throw new Error(`Found unhandled message ${JSON.stringify(message)}`);
2327
2374
  }
@@ -4489,7 +4536,7 @@ var MessageList = class {
4489
4536
  if (lastPart?.type === "step-start") {
4490
4537
  return false;
4491
4538
  }
4492
- lastMsg.content.parts.push({ type: "step-start" });
4539
+ lastMsg.content.parts.push(stampPart({ type: "step-start" }));
4493
4540
  if (!this.stateManager.isResponseMessage(lastMsg)) {
4494
4541
  this.stateManager.removeMessage(lastMsg);
4495
4542
  this.stateManager.addToSource(lastMsg, "response");
@@ -4812,5 +4859,5 @@ exports.getOpenAIReasoningItemId = getOpenAIReasoningItemId;
4812
4859
  exports.hasOpenAIReasoningItemId = hasOpenAIReasoningItemId;
4813
4860
  exports.messagesAreEqual = messagesAreEqual;
4814
4861
  exports.sanitizeToolName = sanitizeToolName;
4815
- //# sourceMappingURL=chunk-2M6QAFRM.cjs.map
4816
- //# sourceMappingURL=chunk-2M6QAFRM.cjs.map
4862
+ //# sourceMappingURL=chunk-RJAOQKHJ.cjs.map
4863
+ //# sourceMappingURL=chunk-RJAOQKHJ.cjs.map