@mastra/core 0.15.3-alpha.2 → 0.15.3-alpha.4

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 (201) hide show
  1. package/dist/agent/agent.types.d.ts +9 -4
  2. package/dist/agent/agent.types.d.ts.map +1 -1
  3. package/dist/agent/index.cjs +11 -11
  4. package/dist/agent/index.d.ts +33 -5
  5. package/dist/agent/index.d.ts.map +1 -1
  6. package/dist/agent/index.js +2 -2
  7. package/dist/agent/input-processor/index.cjs +6 -6
  8. package/dist/agent/input-processor/index.js +1 -1
  9. package/dist/agent/message-list/index.d.ts +5 -1
  10. package/dist/agent/message-list/index.d.ts.map +1 -1
  11. package/dist/agent/message-list/prompt/convert-file.d.ts +7 -0
  12. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -0
  13. package/dist/agent/message-list/prompt/download-assets.d.ts +15 -0
  14. package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -0
  15. package/dist/agent/types.d.ts +11 -6
  16. package/dist/agent/types.d.ts.map +1 -1
  17. package/dist/ai-tracing/context.d.ts.map +1 -1
  18. package/dist/ai-tracing/default.d.ts.map +1 -1
  19. package/dist/ai-tracing/index.cjs +43 -31
  20. package/dist/ai-tracing/index.js +1 -1
  21. package/dist/ai-tracing/no-op.d.ts +0 -1
  22. package/dist/ai-tracing/no-op.d.ts.map +1 -1
  23. package/dist/ai-tracing/types.d.ts +0 -2
  24. package/dist/ai-tracing/types.d.ts.map +1 -1
  25. package/dist/ai-tracing/utils.d.ts +44 -8
  26. package/dist/ai-tracing/utils.d.ts.map +1 -1
  27. package/dist/{chunk-QA2TWVUS.cjs → chunk-5CJDO3UO.cjs} +292 -9
  28. package/dist/chunk-5CJDO3UO.cjs.map +1 -0
  29. package/dist/chunk-ABRPHTOG.cjs +108 -0
  30. package/dist/chunk-ABRPHTOG.cjs.map +1 -0
  31. package/dist/chunk-BJGHUKKM.js +103 -0
  32. package/dist/chunk-BJGHUKKM.js.map +1 -0
  33. package/dist/{chunk-BRNBKCHE.js → chunk-CKM2ESZF.js} +51 -26
  34. package/dist/chunk-CKM2ESZF.js.map +1 -0
  35. package/dist/{chunk-HHLPYCQG.cjs → chunk-DZADAEAF.cjs} +68 -22
  36. package/dist/chunk-DZADAEAF.cjs.map +1 -0
  37. package/dist/{chunk-VBAWR62U.cjs → chunk-F2CAC2R2.cjs} +54 -29
  38. package/dist/chunk-F2CAC2R2.cjs.map +1 -0
  39. package/dist/{chunk-C5C4PN54.js → chunk-F4SQXAXR.js} +292 -9
  40. package/dist/chunk-F4SQXAXR.js.map +1 -0
  41. package/dist/{chunk-UG3KS3XV.cjs → chunk-F6XWBVVG.cjs} +4 -4
  42. package/dist/{chunk-UG3KS3XV.cjs.map → chunk-F6XWBVVG.cjs.map} +1 -1
  43. package/dist/{chunk-WHEH32QU.cjs → chunk-FQRDHVZC.cjs} +4 -4
  44. package/dist/{chunk-WHEH32QU.cjs.map → chunk-FQRDHVZC.cjs.map} +1 -1
  45. package/dist/{chunk-4DKPMUAC.cjs → chunk-I7OAONIW.cjs} +259 -177
  46. package/dist/chunk-I7OAONIW.cjs.map +1 -0
  47. package/dist/{chunk-XOZ737RO.js → chunk-IODUKRQP.js} +3 -3
  48. package/dist/{chunk-XOZ737RO.js.map → chunk-IODUKRQP.js.map} +1 -1
  49. package/dist/{chunk-7OSUKFNG.cjs → chunk-KUNWELBC.cjs} +692 -507
  50. package/dist/chunk-KUNWELBC.cjs.map +1 -0
  51. package/dist/{chunk-WOTBMZCN.js → chunk-LOYT3WUA.js} +255 -176
  52. package/dist/chunk-LOYT3WUA.js.map +1 -0
  53. package/dist/{chunk-6VROHRAR.cjs → chunk-LVGGMWSE.cjs} +31 -8
  54. package/dist/chunk-LVGGMWSE.cjs.map +1 -0
  55. package/dist/{chunk-T64BA34G.js → chunk-OFPVAPUH.js} +4 -4
  56. package/dist/{chunk-T64BA34G.js.map → chunk-OFPVAPUH.js.map} +1 -1
  57. package/dist/{chunk-5NGEKEU7.js → chunk-P2IJ74UW.js} +661 -476
  58. package/dist/chunk-P2IJ74UW.js.map +1 -0
  59. package/dist/{chunk-QBNRMJAN.cjs → chunk-VVTB47UG.cjs} +6 -6
  60. package/dist/{chunk-QBNRMJAN.cjs.map → chunk-VVTB47UG.cjs.map} +1 -1
  61. package/dist/{chunk-HXYE4EJA.cjs → chunk-W5CF7DLB.cjs} +9 -9
  62. package/dist/{chunk-HXYE4EJA.cjs.map → chunk-W5CF7DLB.cjs.map} +1 -1
  63. package/dist/{chunk-FLXWZUIG.js → chunk-WWQ3QRPF.js} +27 -5
  64. package/dist/chunk-WWQ3QRPF.js.map +1 -0
  65. package/dist/{chunk-E3LAPNKY.js → chunk-XPFWOBV4.js} +4 -4
  66. package/dist/{chunk-E3LAPNKY.js.map → chunk-XPFWOBV4.js.map} +1 -1
  67. package/dist/{chunk-IYCG5OVT.js → chunk-YAWYQH3N.js} +3 -3
  68. package/dist/{chunk-IYCG5OVT.js.map → chunk-YAWYQH3N.js.map} +1 -1
  69. package/dist/{chunk-UT6KEZRF.js → chunk-YVIYEC6R.js} +62 -16
  70. package/dist/chunk-YVIYEC6R.js.map +1 -0
  71. package/dist/index.cjs +47 -43
  72. package/dist/index.js +10 -10
  73. package/dist/integration/index.cjs +3 -3
  74. package/dist/integration/index.js +1 -1
  75. package/dist/llm/index.d.ts +2 -2
  76. package/dist/llm/index.d.ts.map +1 -1
  77. package/dist/llm/model/base.types.d.ts +2 -2
  78. package/dist/llm/model/base.types.d.ts.map +1 -1
  79. package/dist/llm/model/model.d.ts +4 -4
  80. package/dist/llm/model/model.d.ts.map +1 -1
  81. package/dist/llm/model/model.loop.d.ts +1 -1
  82. package/dist/llm/model/model.loop.d.ts.map +1 -1
  83. package/dist/llm/model/model.loop.types.d.ts +2 -0
  84. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  85. package/dist/loop/index.cjs +2 -2
  86. package/dist/loop/index.js +1 -1
  87. package/dist/loop/loop.d.ts +1 -1
  88. package/dist/loop/loop.d.ts.map +1 -1
  89. package/dist/loop/types.d.ts +4 -0
  90. package/dist/loop/types.d.ts.map +1 -1
  91. package/dist/loop/workflow/llm-execution.d.ts +1 -1
  92. package/dist/loop/workflow/llm-execution.d.ts.map +1 -1
  93. package/dist/loop/workflow/stream.d.ts +1 -1
  94. package/dist/loop/workflow/stream.d.ts.map +1 -1
  95. package/dist/mastra/hooks.d.ts.map +1 -1
  96. package/dist/mastra/index.cjs +2 -2
  97. package/dist/mastra/index.d.ts +8 -3
  98. package/dist/mastra/index.d.ts.map +1 -1
  99. package/dist/mastra/index.js +1 -1
  100. package/dist/memory/index.cjs +4 -4
  101. package/dist/memory/index.js +1 -1
  102. package/dist/network/index.cjs +4 -4
  103. package/dist/network/index.js +2 -2
  104. package/dist/network/vNext/index.cjs +14 -14
  105. package/dist/network/vNext/index.js +2 -2
  106. package/dist/processors/index.cjs +13 -11
  107. package/dist/processors/index.cjs.map +1 -1
  108. package/dist/processors/index.d.ts +4 -0
  109. package/dist/processors/index.d.ts.map +1 -1
  110. package/dist/processors/index.js +7 -5
  111. package/dist/processors/index.js.map +1 -1
  112. package/dist/processors/processors/moderation.d.ts +4 -0
  113. package/dist/processors/processors/moderation.d.ts.map +1 -1
  114. package/dist/processors/processors/pii-detector.d.ts +3 -0
  115. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  116. package/dist/processors/processors/prompt-injection-detector.d.ts +2 -0
  117. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  118. package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -0
  119. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  120. package/dist/processors/runner.d.ts +5 -4
  121. package/dist/processors/runner.d.ts.map +1 -1
  122. package/dist/relevance/index.cjs +4 -4
  123. package/dist/relevance/index.js +1 -1
  124. package/dist/scores/base.d.ts +2 -0
  125. package/dist/scores/base.d.ts.map +1 -1
  126. package/dist/scores/hooks.d.ts +3 -1
  127. package/dist/scores/hooks.d.ts.map +1 -1
  128. package/dist/scores/index.cjs +27 -18
  129. package/dist/scores/index.cjs.map +1 -1
  130. package/dist/scores/index.js +23 -14
  131. package/dist/scores/index.js.map +1 -1
  132. package/dist/scores/run-experiment/index.d.ts +2 -0
  133. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  134. package/dist/scores/types.d.ts +3 -0
  135. package/dist/scores/types.d.ts.map +1 -1
  136. package/dist/storage/index.cjs +3 -3
  137. package/dist/storage/index.js +1 -1
  138. package/dist/stream/aisdk/v5/compat/consume-stream.d.ts +8 -0
  139. package/dist/stream/aisdk/v5/compat/consume-stream.d.ts.map +1 -0
  140. package/dist/stream/aisdk/v5/compat/content.d.ts +7 -0
  141. package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -0
  142. package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts +23 -0
  143. package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts.map +1 -0
  144. package/dist/stream/aisdk/v5/compat/index.d.ts +8 -0
  145. package/dist/stream/aisdk/v5/compat/index.d.ts.map +1 -0
  146. package/dist/stream/aisdk/v5/compat/media.d.ts +91 -0
  147. package/dist/stream/aisdk/v5/compat/media.d.ts.map +1 -0
  148. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +11 -0
  149. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -0
  150. package/dist/stream/aisdk/v5/compat/ui-message.d.ts +20 -0
  151. package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -0
  152. package/dist/stream/aisdk/v5/compat/validation.d.ts +17 -0
  153. package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -0
  154. package/dist/stream/aisdk/v5/output.d.ts +1 -1
  155. package/dist/stream/base/output.d.ts +1 -1
  156. package/dist/stream/index.cjs +3 -3
  157. package/dist/stream/index.js +1 -1
  158. package/dist/test-utils/llm-mock.cjs +2 -2
  159. package/dist/test-utils/llm-mock.js +1 -1
  160. package/dist/tools/index.cjs +4 -4
  161. package/dist/tools/index.js +1 -1
  162. package/dist/tools/is-vercel-tool.cjs +2 -2
  163. package/dist/tools/is-vercel-tool.js +1 -1
  164. package/dist/tools/tool.d.ts +3 -1
  165. package/dist/tools/tool.d.ts.map +1 -1
  166. package/dist/tools/validation.d.ts.map +1 -1
  167. package/dist/utils.cjs +20 -16
  168. package/dist/utils.d.ts +12 -3
  169. package/dist/utils.d.ts.map +1 -1
  170. package/dist/utils.js +1 -1
  171. package/dist/workflows/default.d.ts +13 -3
  172. package/dist/workflows/default.d.ts.map +1 -1
  173. package/dist/workflows/evented/index.cjs +10 -10
  174. package/dist/workflows/evented/index.js +1 -1
  175. package/dist/workflows/execution-engine.d.ts +2 -2
  176. package/dist/workflows/execution-engine.d.ts.map +1 -1
  177. package/dist/workflows/index.cjs +10 -10
  178. package/dist/workflows/index.js +1 -1
  179. package/dist/workflows/legacy/index.cjs +22 -22
  180. package/dist/workflows/legacy/index.js +1 -1
  181. package/dist/workflows/workflow.d.ts +8 -8
  182. package/dist/workflows/workflow.d.ts.map +1 -1
  183. package/package.json +6 -6
  184. package/dist/chunk-4DKPMUAC.cjs.map +0 -1
  185. package/dist/chunk-5NGEKEU7.js.map +0 -1
  186. package/dist/chunk-6VROHRAR.cjs.map +0 -1
  187. package/dist/chunk-7OSUKFNG.cjs.map +0 -1
  188. package/dist/chunk-BRNBKCHE.js.map +0 -1
  189. package/dist/chunk-C5C4PN54.js.map +0 -1
  190. package/dist/chunk-E4XQMNEI.cjs +0 -77
  191. package/dist/chunk-E4XQMNEI.cjs.map +0 -1
  192. package/dist/chunk-FLXWZUIG.js.map +0 -1
  193. package/dist/chunk-HHLPYCQG.cjs.map +0 -1
  194. package/dist/chunk-IVGAHFAJ.js +0 -72
  195. package/dist/chunk-IVGAHFAJ.js.map +0 -1
  196. package/dist/chunk-QA2TWVUS.cjs.map +0 -1
  197. package/dist/chunk-UT6KEZRF.js.map +0 -1
  198. package/dist/chunk-VBAWR62U.cjs.map +0 -1
  199. package/dist/chunk-WOTBMZCN.js.map +0 -1
  200. package/dist/stream/aisdk/v5/compat.d.ts +0 -73
  201. package/dist/stream/aisdk/v5/compat.d.ts.map +0 -1
@@ -1,77 +0,0 @@
1
- 'use strict';
2
-
3
- // src/tools/validation.ts
4
- function validateToolInput(schema, input, toolId) {
5
- if (!schema || !("safeParse" in schema)) {
6
- return { data: input };
7
- }
8
- let actualInput = input;
9
- if (input && typeof input === "object" && "context" in input) {
10
- actualInput = input.context;
11
- }
12
- if (actualInput && typeof actualInput === "object" && "inputData" in actualInput) {
13
- actualInput = actualInput.inputData;
14
- }
15
- const validation = schema.safeParse(actualInput);
16
- if (!validation.success) {
17
- const errorMessages = validation.error.issues.map((e) => `- ${e.path?.join(".") || "root"}: ${e.message}`).join("\n");
18
- const error = {
19
- error: true,
20
- message: `Tool validation failed${toolId ? ` for ${toolId}` : ""}. Please fix the following errors and try again:
21
- ${errorMessages}
22
-
23
- Provided arguments: ${JSON.stringify(actualInput, null, 2)}`,
24
- validationErrors: validation.error.format()
25
- };
26
- return { data: input, error };
27
- }
28
- if (input && typeof input === "object" && "context" in input) {
29
- if (input.context && typeof input.context === "object" && "inputData" in input.context) {
30
- return { data: { ...input, context: { ...input.context, inputData: validation.data } } };
31
- }
32
- return { data: { ...input, context: validation.data } };
33
- }
34
- return { data: validation.data };
35
- }
36
-
37
- // src/tools/tool.ts
38
- var Tool = class {
39
- id;
40
- description;
41
- inputSchema;
42
- outputSchema;
43
- execute;
44
- mastra;
45
- constructor(opts) {
46
- this.id = opts.id;
47
- this.description = opts.description;
48
- this.inputSchema = opts.inputSchema;
49
- this.outputSchema = opts.outputSchema;
50
- this.mastra = opts.mastra;
51
- if (opts.execute) {
52
- const originalExecute = opts.execute;
53
- this.execute = async (context, options) => {
54
- const { data, error } = validateToolInput(this.inputSchema, context, this.id);
55
- if (error) {
56
- return error;
57
- }
58
- return originalExecute(data, options);
59
- };
60
- }
61
- }
62
- };
63
- function createTool(opts) {
64
- return new Tool(opts);
65
- }
66
-
67
- // src/tools/toolchecks.ts
68
- function isVercelTool(tool) {
69
- return !!(tool && !(tool instanceof Tool) && "parameters" in tool);
70
- }
71
-
72
- exports.Tool = Tool;
73
- exports.createTool = createTool;
74
- exports.isVercelTool = isVercelTool;
75
- exports.validateToolInput = validateToolInput;
76
- //# sourceMappingURL=chunk-E4XQMNEI.cjs.map
77
- //# sourceMappingURL=chunk-E4XQMNEI.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-E4XQMNEI.cjs","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Extract the actual input data from various context formats\n let actualInput = input;\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n actualInput = (input as any).context;\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (actualInput && typeof actualInput === 'object' && 'inputData' in actualInput) {\n actualInput = (actualInput as any).inputData;\n }\n\n const validation = schema.safeParse(actualInput);\n if (!validation.success) {\n const errorMessages = validation.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(actualInput, null, 2)}`,\n validationErrors: validation.error.format(),\n };\n\n return { data: input, error };\n }\n\n // Return the original input structure with validated data in the right place\n if (input && typeof input === 'object' && 'context' in input) {\n if ((input as any).context && typeof (input as any).context === 'object' && 'inputData' in (input as any).context) {\n return { data: { ...input, context: { ...(input as any).context, inputData: validation.data } } };\n }\n return { data: { ...input, context: validation.data } };\n }\n\n return { data: validation.data };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/tool-builder/builder.ts","../src/utils.ts"],"names":["error","logger","z"],"mappings":"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","file":"chunk-FLXWZUIG.js","sourcesContent":["import type { ToolCallOptions } from '@ai-sdk/provider-utils-v5';\nimport {\n OpenAIReasoningSchemaCompatLayer,\n OpenAISchemaCompatLayer,\n GoogleSchemaCompatLayer,\n AnthropicSchemaCompatLayer,\n DeepSeekSchemaCompatLayer,\n MetaSchemaCompatLayer,\n applyCompatLayer,\n convertZodSchemaToAISDKSchema,\n} from '@mastra/schema-compat';\nimport type { ToolExecutionOptions } from 'ai';\nimport { z } from 'zod';\nimport { AISpanType } from '../../ai-tracing';\nimport { MastraBase } from '../../base';\nimport { ErrorCategory, MastraError, ErrorDomain } from '../../error';\nimport { RuntimeContext } from '../../runtime-context';\nimport { isVercelTool } from '../../tools/toolchecks';\nimport type { ToolOptions } from '../../utils';\nimport { ToolStream } from '../stream';\nimport type { CoreTool, ToolAction, VercelTool, VercelToolV5 } from '../types';\nimport { validateToolInput } from '../validation';\n\nexport type ToolToConvert = VercelTool | ToolAction<any, any, any> | VercelToolV5;\nexport type LogType = 'tool' | 'toolset' | 'client-tool';\n\ninterface LogOptions {\n agentName?: string;\n toolName: string;\n type?: 'tool' | 'toolset' | 'client-tool';\n}\n\ninterface LogMessageOptions {\n start: string;\n error: string;\n}\n\nexport class CoreToolBuilder extends MastraBase {\n private originalTool: ToolToConvert;\n private options: ToolOptions;\n private logType?: LogType;\n\n constructor(input: { originalTool: ToolToConvert; options: ToolOptions; logType?: LogType }) {\n super({ name: 'CoreToolBuilder' });\n this.originalTool = input.originalTool;\n this.options = input.options;\n this.logType = input.logType;\n }\n\n // Helper to get parameters based on tool type\n private getParameters = () => {\n if (isVercelTool(this.originalTool)) {\n return this.originalTool.parameters ?? z.object({});\n }\n\n return this.originalTool.inputSchema ?? z.object({});\n };\n\n private getOutputSchema = () => {\n if ('outputSchema' in this.originalTool) return this.originalTool.outputSchema;\n return null;\n };\n\n // For provider-defined tools, we need to include all required properties\n private buildProviderTool(tool: ToolToConvert): (CoreTool & { id: `${string}.${string}` }) | undefined {\n if (\n 'type' in tool &&\n tool.type === 'provider-defined' &&\n 'id' in tool &&\n typeof tool.id === 'string' &&\n tool.id.includes('.')\n ) {\n const parameters = this.getParameters();\n const outputSchema = this.getOutputSchema();\n return {\n type: 'provider-defined' as const,\n id: tool.id,\n args: ('args' in this.originalTool ? this.originalTool.args : {}) as Record<string, unknown>,\n description: tool.description,\n parameters: convertZodSchemaToAISDKSchema(parameters),\n ...(outputSchema ? { outputSchema: convertZodSchemaToAISDKSchema(outputSchema) } : {}),\n execute: this.originalTool.execute\n ? this.createExecute(\n this.originalTool,\n { ...this.options, description: this.originalTool.description },\n this.logType,\n )\n : undefined,\n };\n }\n\n return undefined;\n }\n\n private createLogMessageOptions({ agentName, toolName, type }: LogOptions): LogMessageOptions {\n // If no agent name, use default format\n if (!agentName) {\n return {\n start: `Executing tool ${toolName}`,\n error: `Failed tool execution`,\n };\n }\n\n const prefix = `[Agent:${agentName}]`;\n const toolType = type === 'toolset' ? 'toolset' : 'tool';\n\n return {\n start: `${prefix} - Executing ${toolType} ${toolName}`,\n error: `${prefix} - Failed ${toolType} execution`,\n };\n }\n\n private createExecute(tool: ToolToConvert, options: ToolOptions, logType?: 'tool' | 'toolset' | 'client-tool') {\n // dont't add memory or mastra to logging\n const { logger, mastra: _mastra, memory: _memory, runtimeContext, ...rest } = options;\n\n const { start, error } = this.createLogMessageOptions({\n agentName: options.agentName,\n toolName: options.name,\n type: logType,\n });\n\n const execFunction = async (args: unknown, execOptions: ToolExecutionOptions | ToolCallOptions) => {\n // Create tool span if we have an agent span available\n const toolSpan = options.agentAISpan?.createChildSpan({\n type: AISpanType.TOOL_CALL,\n name: `tool: ${options.name}`,\n input: args,\n attributes: {\n toolId: options.name,\n toolDescription: options.description,\n toolType: logType || 'tool',\n },\n });\n\n try {\n let result;\n\n if (isVercelTool(tool)) {\n // Handle Vercel tools (AI SDK tools)\n result = await tool?.execute?.(args, execOptions as ToolExecutionOptions);\n } else {\n // Handle Mastra tools\n result = await tool?.execute?.(\n {\n context: args,\n threadId: options.threadId,\n resourceId: options.resourceId,\n mastra: options.mastra,\n memory: options.memory,\n runId: options.runId,\n runtimeContext: options.runtimeContext ?? new RuntimeContext(),\n writer: new ToolStream(\n {\n prefix: 'tool',\n callId: execOptions.toolCallId,\n name: options.name,\n runId: options.runId!,\n },\n options.writableStream || (execOptions as any).writableStream,\n ),\n tracingContext: { currentSpan: toolSpan },\n },\n execOptions as ToolExecutionOptions & ToolCallOptions,\n );\n }\n\n toolSpan?.end({ output: result });\n return result ?? undefined;\n } catch (error) {\n toolSpan?.error({ error: error as Error });\n throw error;\n }\n };\n\n return async (args: unknown, execOptions?: ToolExecutionOptions | ToolCallOptions) => {\n let logger = options.logger || this.logger;\n try {\n logger.debug(start, { ...rest, args });\n\n // Validate input parameters if schema exists\n const parameters = this.getParameters();\n const { data, error } = validateToolInput(parameters, args, options.name);\n if (error) {\n logger.warn(`Tool input validation failed for '${options.name}'`, {\n toolName: options.name,\n errors: error.validationErrors,\n args,\n });\n return error;\n }\n // Use validated/transformed data\n args = data;\n\n // there is a small delay in stream output so we add an immediate to ensure the stream is ready\n return await new Promise((resolve, reject) => {\n setImmediate(async () => {\n try {\n const result = await execFunction(args, execOptions!);\n resolve(result);\n } catch (err) {\n reject(err);\n }\n });\n });\n } catch (err) {\n const mastraError = new MastraError(\n {\n id: 'TOOL_EXECUTION_FAILED',\n domain: ErrorDomain.TOOL,\n category: ErrorCategory.USER,\n details: {\n errorMessage: String(error),\n argsJson: JSON.stringify(args),\n model: rest.model?.modelId ?? '',\n },\n },\n err,\n );\n logger.trackException(mastraError);\n logger.error(error, { ...rest, error: mastraError, args });\n return mastraError;\n }\n };\n }\n\n buildV5() {\n const builtTool = this.build();\n\n if (!builtTool.parameters) {\n throw new Error('Tool parameters are required');\n }\n\n return {\n ...builtTool,\n inputSchema: builtTool.parameters,\n onInputStart: 'onInputStart' in this.originalTool ? this.originalTool.onInputStart : undefined,\n onInputDelta: 'onInputDelta' in this.originalTool ? this.originalTool.onInputDelta : undefined,\n onInputAvailable: 'onInputAvailable' in this.originalTool ? this.originalTool.onInputAvailable : undefined,\n } as VercelToolV5;\n }\n\n build(): CoreTool {\n const providerTool = this.buildProviderTool(this.originalTool);\n if (providerTool) {\n return providerTool;\n }\n\n const definition = {\n type: 'function' as const,\n description: this.originalTool.description,\n parameters: this.getParameters(),\n outputSchema: this.getOutputSchema(),\n execute: this.originalTool.execute\n ? this.createExecute(\n this.originalTool,\n { ...this.options, description: this.originalTool.description },\n this.logType,\n )\n : undefined,\n };\n\n const model = this.options.model;\n\n const schemaCompatLayers = [];\n\n if (model) {\n const supportsStructuredOutputs =\n model.specificationVersion !== 'v2' ? (model.supportsStructuredOutputs ?? false) : false;\n\n const modelInfo = {\n modelId: model.modelId,\n supportsStructuredOutputs,\n provider: model.provider,\n };\n\n schemaCompatLayers.push(\n new OpenAIReasoningSchemaCompatLayer(modelInfo),\n new OpenAISchemaCompatLayer(modelInfo),\n new GoogleSchemaCompatLayer(modelInfo),\n new AnthropicSchemaCompatLayer(modelInfo),\n new DeepSeekSchemaCompatLayer(modelInfo),\n new MetaSchemaCompatLayer(modelInfo),\n );\n }\n\n const processedSchema = applyCompatLayer({\n schema: this.getParameters(),\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n\n let processedOutputSchema;\n\n if (this.getOutputSchema()) {\n processedOutputSchema = applyCompatLayer({\n schema: this.getOutputSchema(),\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n }\n\n return {\n ...definition,\n id: 'id' in this.originalTool ? this.originalTool.id : undefined,\n parameters: processedSchema,\n outputSchema: processedOutputSchema,\n };\n }\n}\n","import { createHash } from 'crypto';\nimport type { WritableStream } from 'stream/web';\nimport type { CoreMessage } from 'ai';\nimport jsonSchemaToZod from 'json-schema-to-zod';\nimport { z } from 'zod';\nimport type { MastraPrimitives } from './action';\nimport type { ToolsInput } from './agent';\nimport type { AnyAISpan } from './ai-tracing';\nimport type { IMastraLogger } from './logger';\nimport type { Mastra } from './mastra';\nimport type { AiMessageType, MastraLanguageModel, MastraMemory } from './memory';\nimport type { RuntimeContext } from './runtime-context';\nimport type { ChunkType } from './stream/types';\nimport type { CoreTool, VercelTool, VercelToolV5 } from './tools';\nimport { CoreToolBuilder } from './tools/tool-builder/builder';\nimport type { ToolToConvert } from './tools/tool-builder/builder';\nimport { isVercelTool } from './tools/toolchecks';\n\nexport const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n/**\n * Deep merges two objects, recursively merging nested objects and arrays\n */\nexport function deepMerge<T extends object = object>(target: T, source: Partial<T>): T {\n const output = { ...target };\n\n if (!source) return output;\n\n Object.keys(source).forEach(key => {\n const targetValue = output[key as keyof T];\n const sourceValue = source[key as keyof T];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n (output as any)[key] = sourceValue;\n } else if (\n sourceValue instanceof Object &&\n targetValue instanceof Object &&\n !Array.isArray(sourceValue) &&\n !Array.isArray(targetValue)\n ) {\n (output as any)[key] = deepMerge(targetValue, sourceValue as T);\n } else if (sourceValue !== undefined) {\n (output as any)[key] = sourceValue;\n }\n });\n\n return output;\n}\n\nexport function generateEmptyFromSchema(schema: string) {\n try {\n const parsedSchema = JSON.parse(schema);\n if (!parsedSchema || parsedSchema.type !== 'object' || !parsedSchema.properties) return {};\n const obj: Record<string, any> = {};\n const TYPE_DEFAULTS = {\n string: '',\n array: [],\n object: {},\n number: 0,\n integer: 0,\n boolean: false,\n };\n for (const [key, prop] of Object.entries<any>(parsedSchema.properties)) {\n obj[key] = TYPE_DEFAULTS[prop.type as keyof typeof TYPE_DEFAULTS] ?? null;\n }\n return obj;\n } catch {\n return {};\n }\n}\n\nexport interface TagMaskOptions {\n /** Called when masking begins */\n onStart?: () => void;\n /** Called when masking ends */\n onEnd?: () => void;\n /** Called for each chunk that is masked */\n onMask?: (chunk: string) => void;\n}\n\n/**\n * Transforms a stream by masking content between XML tags.\n * @param stream Input stream to transform\n * @param tag Tag name to mask between (e.g. for <foo>...</foo>, use 'foo')\n * @param options Optional configuration for masking behavior\n */\nexport async function* maskStreamTags(\n stream: AsyncIterable<string>,\n tag: string,\n options: TagMaskOptions = {},\n): AsyncIterable<string> {\n const { onStart, onEnd, onMask } = options;\n const openTag = `<${tag}>`;\n const closeTag = `</${tag}>`;\n\n let buffer = '';\n let fullContent = '';\n let isMasking = false;\n let isBuffering = false;\n\n // used for checking in chunks that include tags or partial tags + some other non-tag text\n // eg: \"o <tag_name\" or \"name> w\", can trim before-start to get \"<tag_name\" or after-end to get \"name>\"\n const trimOutsideDelimiter = (text: string, delimiter: string, trim: 'before-start' | 'after-end') => {\n if (!text.includes(delimiter)) {\n return text;\n }\n\n const parts = text.split(delimiter);\n\n if (trim === `before-start`) {\n return `${delimiter}${parts[1]}`;\n }\n\n return `${parts[0]}${delimiter}`;\n };\n\n // Helper to check if text starts with pattern (ignoring whitespace)\n // When checking partial tags: startsWith(buffer, openTag) checks if buffer could be start of tag\n // When checking full tags: startsWith(chunk, openTag) checks if chunk starts with full tag\n const startsWith = (text: string, pattern: string) => {\n // check start of opening tag\n if (pattern.includes(openTag.substring(0, 3))) {\n // our pattern for checking the start is always based on xml-like tags\n // if the pattern looks like our opening tag and the pattern also includes\n // some other chunked text before it, we just wanted to check the xml part of the pattern\n pattern = trimOutsideDelimiter(pattern, `<`, `before-start`);\n }\n\n return text.trim().startsWith(pattern.trim());\n };\n\n for await (const chunk of stream) {\n fullContent += chunk;\n\n if (isBuffering) buffer += chunk;\n\n const chunkHasTag = startsWith(chunk, openTag);\n const bufferHasTag = !chunkHasTag && isBuffering && startsWith(openTag, buffer);\n\n let toYieldBeforeMaskedStartTag = ``;\n // Check if we should start masking chunks\n if (!isMasking && (chunkHasTag || bufferHasTag)) {\n isMasking = true;\n isBuffering = false;\n\n // check if the buffered text includes text before the start tag. ex \"o <tag_name\", \"o\" should be yielded and not masked\n const taggedTextToMask = trimOutsideDelimiter(buffer, `<`, `before-start`);\n if (taggedTextToMask !== buffer.trim()) {\n toYieldBeforeMaskedStartTag = buffer.replace(taggedTextToMask, ``);\n }\n\n buffer = '';\n onStart?.();\n }\n\n // Check if we should start buffering (looks like part of the opening tag but it's not the full <tag> yet eg <ta - could be <table> but we don't know yet)\n if (!isMasking && !isBuffering && startsWith(openTag, chunk) && chunk.trim() !== '') {\n isBuffering = true;\n buffer += chunk;\n continue;\n }\n\n // We're buffering, need to check again if our buffer has deviated from the opening <tag> eg <tag2>\n if (isBuffering && buffer && !startsWith(openTag, buffer)) {\n yield buffer;\n buffer = '';\n isBuffering = false;\n continue;\n }\n\n // Check if we should stop masking chunks (since the content includes the closing </tag>)\n if (isMasking && fullContent.includes(closeTag)) {\n onMask?.(chunk);\n onEnd?.();\n isMasking = false;\n const lastFullContent = fullContent;\n fullContent = ``; // reset to handle streams with multiple full tags that have text inbetween\n\n // check to see if we have a partial chunk outside the close tag. if we do we need to yield it so it isn't swallowed with the masked text\n const textUntilEndTag = trimOutsideDelimiter(lastFullContent, closeTag, 'after-end');\n if (textUntilEndTag !== lastFullContent) {\n yield lastFullContent.replace(textUntilEndTag, ``);\n }\n\n continue;\n }\n\n // We're currently masking chunks inside a <tag>\n if (isMasking) {\n onMask?.(chunk);\n // in the case that there was a chunk that included a tag to mask and some other text, ex \"o <tag_name\" we need to still yield the\n // text before the tag (\"o \") so it's not swallowed with the masked text\n if (toYieldBeforeMaskedStartTag) {\n yield toYieldBeforeMaskedStartTag;\n }\n continue;\n }\n\n // default yield the chunk\n yield chunk;\n }\n}\n\n/**\n * Resolve serialized zod output - This function takes the string output ot the `jsonSchemaToZod` function\n * and instantiates the zod object correctly.\n *\n * @param schema - serialized zod object\n * @returns resolved zod object\n */\nexport function resolveSerializedZodOutput(schema: string): z.ZodType {\n // Creates and immediately executes a new function that takes 'z' as a parameter\n // The function body is a string that returns the serialized zod schema\n // When executed with the 'z' parameter, it reconstructs the zod schema in the current context\n return Function('z', `\"use strict\";return (${schema});`)(z);\n}\n\nexport interface ToolOptions {\n name: string;\n runId?: string;\n threadId?: string;\n resourceId?: string;\n logger?: IMastraLogger;\n description?: string;\n mastra?: (Mastra & MastraPrimitives) | MastraPrimitives;\n runtimeContext: RuntimeContext;\n memory?: MastraMemory;\n agentName?: string;\n model?: MastraLanguageModel;\n writableStream?: WritableStream<ChunkType>;\n agentAISpan?: AnyAISpan;\n}\n\n/**\n * Checks if a value is a Zod type\n * @param value - The value to check\n * @returns True if the value is a Zod type, false otherwise\n */\nexport function isZodType(value: unknown): value is z.ZodType {\n // Check if it's a Zod schema by looking for common Zod properties and methods\n return (\n typeof value === 'object' &&\n value !== null &&\n '_def' in value &&\n 'parse' in value &&\n typeof (value as any).parse === 'function' &&\n 'safeParse' in value &&\n typeof (value as any).safeParse === 'function'\n );\n}\n\n// Helper function to create a deterministic hash\nfunction createDeterministicId(input: string): string {\n return createHash('sha256').update(input).digest('hex').slice(0, 8); // Take first 8 characters for a shorter but still unique ID\n}\n\n/**\n * Sets the properties for a Vercel Tool, including an ID and inputSchema\n * @param tool - The tool to set the properties for\n * @returns The tool with the properties set\n */\nfunction setVercelToolProperties(tool: VercelTool) {\n const inputSchema = convertVercelToolParameters(tool);\n const toolId = !('id' in tool)\n ? tool.description\n ? `tool-${createDeterministicId(tool.description)}`\n : `tool-${Math.random().toString(36).substring(2, 9)}`\n : tool.id;\n return {\n ...tool,\n id: toolId,\n inputSchema,\n };\n}\n\n/**\n * Ensures a tool has an ID and inputSchema by generating one if not present\n * @param tool - The tool to ensure has an ID and inputSchema\n * @returns The tool with an ID and inputSchema\n */\nexport function ensureToolProperties(tools: ToolsInput): ToolsInput {\n const toolsWithProperties = Object.keys(tools).reduce<ToolsInput>((acc, key) => {\n const tool = tools?.[key];\n if (tool) {\n if (isVercelTool(tool)) {\n acc[key] = setVercelToolProperties(tool) as VercelTool;\n } else {\n acc[key] = tool;\n }\n }\n return acc;\n }, {});\n\n return toolsWithProperties;\n}\n\nfunction convertVercelToolParameters(tool: VercelTool): z.ZodType {\n // If the tool is a Vercel Tool, check if the parameters are already a zod object\n // If not, convert the parameters to a zod object using jsonSchemaToZod\n const schema = tool.parameters ?? z.object({});\n return isZodType(schema) ? schema : resolveSerializedZodOutput(jsonSchemaToZod(schema));\n}\n\n/**\n * Converts a Vercel Tool or Mastra Tool into a CoreTool format\n * @param originalTool - The tool to convert (either VercelTool or ToolAction)\n * @param options - Tool options including Mastra-specific settings\n * @param logType - Type of tool to log (tool or toolset)\n * @returns A CoreTool that can be used by the system\n */\nexport function makeCoreTool(\n originalTool: ToolToConvert,\n options: ToolOptions,\n logType?: 'tool' | 'toolset' | 'client-tool',\n): CoreTool {\n return new CoreToolBuilder({ originalTool, options, logType }).build();\n}\n\nexport function makeCoreToolV5(\n originalTool: ToolToConvert,\n options: ToolOptions,\n logType?: 'tool' | 'toolset' | 'client-tool',\n): VercelToolV5 {\n return new CoreToolBuilder({ originalTool, options, logType }).buildV5();\n}\n\n/**\n * Creates a proxy for a Mastra instance to handle deprecated properties\n * @param mastra - The Mastra instance to proxy\n * @param logger - The logger to use for warnings\n * @returns A proxy for the Mastra instance\n */\nexport function createMastraProxy({ mastra, logger }: { mastra: Mastra; logger: IMastraLogger }) {\n return new Proxy(mastra, {\n get(target, prop) {\n const hasProp = Reflect.has(target, prop);\n\n if (hasProp) {\n const value = Reflect.get(target, prop);\n const isFunction = typeof value === 'function';\n if (isFunction) {\n return value.bind(target);\n }\n return value;\n }\n\n if (prop === 'logger') {\n logger.warn(`Please use 'getLogger' instead, logger is deprecated`);\n return Reflect.apply(target.getLogger, target, []);\n }\n\n if (prop === 'telemetry') {\n logger.warn(`Please use 'getTelemetry' instead, telemetry is deprecated`);\n return Reflect.apply(target.getTelemetry, target, []);\n }\n\n if (prop === 'storage') {\n logger.warn(`Please use 'getStorage' instead, storage is deprecated`);\n return Reflect.get(target, 'storage');\n }\n\n if (prop === 'agents') {\n logger.warn(`Please use 'getAgents' instead, agents is deprecated`);\n return Reflect.apply(target.getAgents, target, []);\n }\n\n if (prop === 'tts') {\n logger.warn(`Please use 'getTTS' instead, tts is deprecated`);\n return Reflect.apply(target.getTTS, target, []);\n }\n\n if (prop === 'vectors') {\n logger.warn(`Please use 'getVectors' instead, vectors is deprecated`);\n return Reflect.apply(target.getVectors, target, []);\n }\n\n if (prop === 'memory') {\n logger.warn(`Please use 'getMemory' instead, memory is deprecated`);\n return Reflect.get(target, 'memory');\n }\n\n return Reflect.get(target, prop);\n },\n });\n}\n\nexport function checkEvalStorageFields(traceObject: any, logger?: IMastraLogger) {\n const missingFields = [];\n if (!traceObject.input) missingFields.push('input');\n if (!traceObject.output) missingFields.push('output');\n if (!traceObject.agentName) missingFields.push('agent_name');\n if (!traceObject.metricName) missingFields.push('metric_name');\n if (!traceObject.instructions) missingFields.push('instructions');\n if (!traceObject.globalRunId) missingFields.push('global_run_id');\n if (!traceObject.runId) missingFields.push('run_id');\n\n if (missingFields.length > 0) {\n if (logger) {\n logger.warn('Skipping evaluation storage due to missing required fields', {\n missingFields,\n runId: traceObject.runId,\n agentName: traceObject.agentName,\n });\n } else {\n console.warn('Skipping evaluation storage due to missing required fields', {\n missingFields,\n runId: traceObject.runId,\n agentName: traceObject.agentName,\n });\n }\n return false;\n }\n\n return true;\n}\n\n// lifted from https://github.com/vercel/ai/blob/main/packages/ai/core/prompt/detect-prompt-type.ts#L27\nfunction detectSingleMessageCharacteristics(\n message: any,\n): 'has-ui-specific-parts' | 'has-core-specific-parts' | 'message' | 'other' {\n if (\n typeof message === 'object' &&\n message !== null &&\n (message.role === 'function' || // UI-only role\n message.role === 'data' || // UI-only role\n 'toolInvocations' in message || // UI-specific field\n 'parts' in message || // UI-specific field\n 'experimental_attachments' in message)\n ) {\n return 'has-ui-specific-parts';\n } else if (\n typeof message === 'object' &&\n message !== null &&\n 'content' in message &&\n (Array.isArray(message.content) || // Core messages can have array content\n 'experimental_providerMetadata' in message ||\n 'providerOptions' in message)\n ) {\n return 'has-core-specific-parts';\n } else if (\n typeof message === 'object' &&\n message !== null &&\n 'role' in message &&\n 'content' in message &&\n typeof message.content === 'string' &&\n ['system', 'user', 'assistant', 'tool'].includes(message.role)\n ) {\n return 'message';\n } else {\n return 'other';\n }\n}\n\nexport function isUiMessage(message: CoreMessage | AiMessageType): message is AiMessageType {\n return detectSingleMessageCharacteristics(message) === `has-ui-specific-parts`;\n}\nexport function isCoreMessage(message: CoreMessage | AiMessageType): message is CoreMessage {\n return [`has-core-specific-parts`, `message`].includes(detectSingleMessageCharacteristics(message));\n}\n\n/** Represents a validated SQL identifier (e.g., table or column name). */\ntype SqlIdentifier = string & { __brand: 'SqlIdentifier' };\n/** Represents a validated dot-separated SQL field key. */\ntype FieldKey = string & { __brand: 'FieldKey' };\n\nconst SQL_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\n/**\n * Parses and returns a valid SQL identifier (such as a table or column name).\n * The identifier must:\n * - Start with a letter (a-z, A-Z) or underscore (_)\n * - Contain only letters, numbers, or underscores\n * - Be at most 63 characters long\n *\n * @param name - The identifier string to parse.\n * @param kind - Optional label for error messages (e.g., 'table name').\n * @returns The validated identifier as a branded type.\n * @throws {Error} If the identifier does not conform to SQL naming rules.\n *\n * @example\n * const id = parseSqlIdentifier('my_table'); // Ok\n * parseSqlIdentifier('123table'); // Throws error\n */\nexport function parseSqlIdentifier(name: string, kind = 'identifier'): SqlIdentifier {\n if (!SQL_IDENTIFIER_PATTERN.test(name) || name.length > 63) {\n throw new Error(\n `Invalid ${kind}: ${name}. Must start with a letter or underscore, contain only letters, numbers, or underscores, and be at most 63 characters long.`,\n );\n }\n return name as SqlIdentifier;\n}\n\n/**\n * Parses and returns a valid dot-separated SQL field key (e.g., 'user.profile.name').\n * Each segment must:\n * - Start with a letter (a-z, A-Z) or underscore (_)\n * - Contain only letters, numbers, or underscores\n * - Be at most 63 characters long\n *\n * @param key - The dot-separated field key string to parse.\n * @returns The validated field key as a branded type.\n * @throws {Error} If any segment of the key is invalid.\n *\n * @example\n * const key = parseFieldKey('user_profile.name'); // Ok\n * parseFieldKey('user..name'); // Throws error\n * parseFieldKey('user.123name'); // Throws error\n */\nexport function parseFieldKey(key: string): FieldKey {\n if (!key) throw new Error('Field key cannot be empty');\n const segments = key.split('.');\n for (const segment of segments) {\n if (!SQL_IDENTIFIER_PATTERN.test(segment) || segment.length > 63) {\n throw new Error(`Invalid field key segment: ${segment} in ${key}`);\n }\n }\n return key as FieldKey;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/events/event-emitter.ts","../src/mastra/hooks.ts","../src/mastra/index.ts"],"names":["MastraError","InstrumentClass","Mastra","WorkflowEventProcessor","LogLevel","ConsoleLogger","Telemetry","setupAITracing","registerHook","getAllAITracing","augmentWithInit","shutdownAITracingRegistry","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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","file":"chunk-HHLPYCQG.cjs","sourcesContent":["import EventEmitter from 'events';\nimport { PubSub } from './pubsub';\nimport type { Event } from './types';\n\nexport class EventEmitterPubSub extends PubSub {\n private emitter: EventEmitter;\n\n constructor() {\n super();\n this.emitter = new EventEmitter();\n }\n\n async publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>): Promise<void> {\n const id = crypto.randomUUID();\n const createdAt = new Date();\n this.emitter.emit(topic, {\n ...event,\n id,\n createdAt,\n });\n }\n\n async subscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.on(topic, cb);\n }\n\n async unsubscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.off(topic, cb);\n }\n\n async flush(): Promise<void> {\n // no-op\n }\n}\n","import type { Mastra } from '..';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { ScoringHookInput } from '../scores';\n\nexport function createOnScorerHook(mastra: Mastra) {\n return async (hookData: ScoringHookInput) => {\n if (!mastra.getStorage()) {\n return;\n }\n\n const storage = mastra.getStorage();\n const entityId = hookData.entity.id;\n const entityType = hookData.entityType;\n const scorer = hookData.scorer;\n\n let scorerToUse;\n try {\n if (entityType === 'AGENT') {\n const agent = mastra.getAgentById(entityId);\n const scorers = await agent.getScorers();\n scorerToUse = scorers[scorer.id];\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n const scorers = await workflow.getScorers();\n scorerToUse = scorers[scorer.id];\n } else {\n return;\n }\n\n if (!scorerToUse) {\n throw new MastraError({\n id: 'MASTRA_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ID ${hookData.scorer.id} not found`,\n });\n }\n\n let input = hookData.input;\n let output = hookData.output;\n\n if (entityType !== 'AGENT') {\n output = { object: hookData.output };\n }\n const { structuredOutput, ...rest } = hookData as any; // temporary fix;\n\n const runResult = await scorerToUse.scorer.run({\n ...rest,\n input,\n output,\n });\n\n const payload = {\n ...rest,\n ...runResult,\n entityId,\n scorerId: hookData.scorer.id,\n metadata: {\n structuredOutput: !!structuredOutput,\n },\n };\n await storage?.saveScore(payload);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_HOOK',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n details: {\n scorerId: scorer.id,\n entityId,\n entityType,\n },\n },\n error,\n );\n\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n };\n}\n","import type { Agent } from '../agent';\nimport { getAllAITracing, setupAITracing, shutdownAITracingRegistry } from '../ai-tracing';\nimport type { AITracingConfig } from '../ai-tracing';\nimport type { BundlerConfig } from '../bundler/types';\nimport type { MastraDeployer } from '../deployer';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { EventEmitterPubSub } from '../events/event-emitter';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event } from '../events/types';\nimport { AvailableHooks, registerHook } from '../hooks';\nimport { LogLevel, noopLogger, ConsoleLogger } from '../logger';\nimport type { IMastraLogger } from '../logger';\nimport type { MCPServerBase } from '../mcp';\nimport type { MastraMemory } from '../memory/memory';\nimport type { AgentNetwork } from '../network';\nimport type { NewAgentNetwork } from '../network/vNext';\nimport type { Middleware, ServerConfig } from '../server/types';\nimport type { MastraStorage } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport { InstrumentClass, Telemetry } from '../telemetry';\nimport type { OtelConfig } from '../telemetry';\nimport type { MastraTTS } from '../tts';\nimport type { MastraIdGenerator } from '../types';\nimport type { MastraVector } from '../vector';\nimport type { Workflow } from '../workflows';\nimport { WorkflowEventProcessor } from '../workflows/evented/workflow-event-processor';\nimport type { LegacyWorkflow } from '../workflows/legacy';\nimport { createOnScorerHook } from './hooks';\n\nexport interface Config<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n> {\n agents?: TAgents;\n networks?: TNetworks;\n vnext_networks?: TVNextNetworks;\n storage?: MastraStorage;\n vectors?: TVectors;\n logger?: TLogger | false;\n legacy_workflows?: TLegacyWorkflows;\n workflows?: TWorkflows;\n tts?: TTTS;\n telemetry?: OtelConfig;\n observability?: AITracingConfig;\n idGenerator?: MastraIdGenerator;\n deployer?: MastraDeployer;\n server?: ServerConfig;\n mcpServers?: TMCPServers;\n bundler?: BundlerConfig;\n pubsub?: PubSub;\n\n /**\n * Server middleware functions to be applied to API routes\n * Each middleware can specify a path pattern (defaults to '/api/*')\n * @deprecated use server.middleware instead\n */\n serverMiddleware?: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path?: string;\n }>;\n\n // @deprecated add memory to your Agent directly instead\n memory?: never;\n\n events?: {\n [topic: string]: (\n event: Event,\n cb?: () => Promise<void>,\n ) => Promise<void> | ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n };\n}\n\n@InstrumentClass({\n prefix: 'mastra',\n excludeMethods: ['getLogger', 'getTelemetry'],\n})\nexport class Mastra<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n> {\n #vectors?: TVectors;\n #agents: TAgents;\n #logger: TLogger;\n #legacy_workflows: TLegacyWorkflows;\n #workflows: TWorkflows;\n #tts?: TTTS;\n #deployer?: MastraDeployer;\n #serverMiddleware: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path: string;\n }> = [];\n #telemetry?: Telemetry;\n #storage?: MastraStorage;\n #memory?: MastraMemory;\n #networks?: TNetworks;\n #vnext_networks?: TVNextNetworks;\n #server?: ServerConfig;\n #mcpServers?: TMCPServers;\n #bundler?: BundlerConfig;\n #idGenerator?: MastraIdGenerator;\n #pubsub: PubSub;\n #events: {\n [topic: string]: ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n } = {};\n\n /**\n * @deprecated use getTelemetry() instead\n */\n get telemetry() {\n return this.#telemetry;\n }\n\n /**\n * @deprecated use getStorage() instead\n */\n get storage() {\n return this.#storage;\n }\n\n /**\n * @deprecated use getMemory() instead\n */\n get memory() {\n return this.#memory;\n }\n\n get pubsub() {\n return this.#pubsub;\n }\n\n public getIdGenerator() {\n return this.#idGenerator;\n }\n\n /**\n * Generate a unique identifier using the configured generator or default to crypto.randomUUID()\n * @returns A unique string ID\n */\n public generateId(): string {\n if (this.#idGenerator) {\n const id = this.#idGenerator();\n if (!id) {\n const error = new MastraError({\n id: 'MASTRA_ID_GENERATOR_RETURNED_EMPTY_STRING',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'ID generator returned an empty string, which is not allowed',\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return id;\n }\n return crypto.randomUUID();\n }\n\n public setIdGenerator(idGenerator: MastraIdGenerator) {\n this.#idGenerator = idGenerator;\n }\n\n constructor(\n config?: Config<\n TAgents,\n TLegacyWorkflows,\n TWorkflows,\n TVectors,\n TTTS,\n TLogger,\n TNetworks,\n TVNextNetworks,\n TMCPServers\n >,\n ) {\n // Store server middleware with default path\n if (config?.serverMiddleware) {\n this.#serverMiddleware = config.serverMiddleware.map(m => ({\n handler: m.handler,\n path: m.path || '/api/*',\n }));\n }\n\n /*\n Events\n */\n if (config?.pubsub) {\n this.#pubsub = config.pubsub;\n } else {\n this.#pubsub = new EventEmitterPubSub();\n }\n\n this.#events = {};\n for (const topic in config?.events ?? {}) {\n if (!Array.isArray(config?.events?.[topic])) {\n this.#events[topic] = [config?.events?.[topic] as any];\n } else {\n this.#events[topic] = config?.events?.[topic] ?? [];\n }\n }\n\n const workflowEventProcessor = new WorkflowEventProcessor({ mastra: this });\n const workflowEventCb = async (event: Event, cb?: () => Promise<void>): Promise<void> => {\n try {\n await workflowEventProcessor.process(event, cb);\n } catch (e) {\n console.error('Error processing event', e);\n }\n };\n if (this.#events.workflows) {\n this.#events.workflows.push(workflowEventCb);\n } else {\n this.#events.workflows = [workflowEventCb];\n }\n\n /*\n Logger\n */\n\n let logger: TLogger;\n if (config?.logger === false) {\n logger = noopLogger as unknown as TLogger;\n } else {\n if (config?.logger) {\n logger = config.logger;\n } else {\n const levelOnEnv =\n process.env.NODE_ENV === 'production' && process.env.MASTRA_DEV !== 'true' ? LogLevel.WARN : LogLevel.INFO;\n logger = new ConsoleLogger({ name: 'Mastra', level: levelOnEnv }) as unknown as TLogger;\n }\n }\n this.#logger = logger;\n\n this.#idGenerator = config?.idGenerator;\n\n let storage = config?.storage;\n\n if (storage) {\n storage = augmentWithInit(storage);\n }\n\n /*\n Telemetry\n */\n\n this.#telemetry = Telemetry.init(config?.telemetry);\n\n // Warn if telemetry is enabled but the instrumentation global is not set\n if (\n config?.telemetry?.enabled !== false &&\n typeof globalThis !== 'undefined' &&\n (globalThis as any).___MASTRA_TELEMETRY___ !== true\n ) {\n this.#logger?.warn(\n `Mastra telemetry is enabled, but the required instrumentation file was not loaded. ` +\n `If you are using Mastra outside of the mastra server environment, see: https://mastra.ai/en/docs/observability/tracing#tracing-outside-mastra-server-environment`,\n `If you are using a custom instrumentation file or want to disable this warning, set the globalThis.___MASTRA_TELEMETRY___ variable to true in your instrumentation file.`,\n );\n }\n\n /*\n AI Tracing\n */\n\n if (config?.observability) {\n setupAITracing(config.observability);\n }\n\n /*\n Storage\n */\n if (this.#telemetry && storage) {\n this.#storage = this.#telemetry.traceClass(storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry', 'batchTraceInsert', 'getTraces', 'getEvalsByAgentName'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n } else {\n this.#storage = storage;\n }\n\n /*\n Vectors\n */\n if (config?.vectors) {\n let vectors: Record<string, MastraVector> = {};\n Object.entries(config.vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n } else {\n vectors[key] = vector;\n }\n });\n\n this.#vectors = vectors as TVectors;\n }\n\n if (config?.networks) {\n this.#networks = config.networks;\n }\n\n if (config?.vnext_networks) {\n this.#vnext_networks = config.vnext_networks;\n }\n\n if (config?.mcpServers) {\n this.#mcpServers = config.mcpServers;\n\n // Set logger/telemetry/Mastra instance/id for MCP servers\n Object.entries(this.#mcpServers).forEach(([key, server]) => {\n server.setId(key);\n if (this.#telemetry) {\n server.__setTelemetry(this.#telemetry);\n }\n\n server.__registerMastra(this);\n server.__setLogger(this.getLogger());\n });\n }\n\n if (config && `memory` in config) {\n const error = new MastraError({\n id: 'MASTRA_CONSTRUCTOR_INVALID_MEMORY_CONFIG',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `\n Memory should be added to Agents, not to Mastra.\n\nInstead of:\n new Mastra({ memory: new Memory() })\n\ndo:\n new Agent({ memory: new Memory() })\n`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (config?.tts) {\n this.#tts = config.tts;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#tts?.[key]) {\n if (this.#telemetry) {\n // @ts-ignore\n this.#tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#tts[key].__setTelemetry(this.#telemetry);\n }\n }\n });\n }\n\n /*\n Agents\n */\n const agents: Record<string, Agent> = {};\n if (config?.agents) {\n Object.entries(config.agents).forEach(([key, agent]) => {\n if (agents[key]) {\n const error = new MastraError({\n id: 'MASTRA_AGENT_REGISTRATION_DUPLICATE_ID',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ID:${key} already exists`,\n details: {\n agentId: key,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n agent.__registerMastra(this);\n\n agent.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n\n agents[key] = agent;\n });\n }\n\n this.#agents = agents as TAgents;\n\n /*\n Networks\n */\n this.#networks = {} as TNetworks;\n this.#vnext_networks = {} as TVNextNetworks;\n\n if (config?.networks) {\n Object.entries(config.networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#networks[key] = network;\n });\n }\n\n if (config?.vnext_networks) {\n Object.entries(config.vnext_networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#vnext_networks[key] = network;\n });\n }\n\n /*\n Legacy Workflows\n */\n this.#legacy_workflows = {} as TLegacyWorkflows;\n\n if (config?.legacy_workflows) {\n Object.entries(config.legacy_workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#legacy_workflows[key] = workflow;\n\n const workflowSteps = Object.values(workflow.steps).filter(step => !!step.workflowId && !!step.workflow);\n if (workflowSteps.length > 0) {\n workflowSteps.forEach(step => {\n // @ts-ignore\n this.#legacy_workflows[step.workflowId] = step.workflow;\n });\n }\n });\n }\n\n this.#workflows = {} as TWorkflows;\n if (config?.workflows) {\n Object.entries(config.workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#workflows[key] = workflow;\n });\n }\n\n if (config?.server) {\n this.#server = config.server;\n }\n\n registerHook(AvailableHooks.ON_SCORER_RUN, createOnScorerHook(this));\n\n /*\n Register Mastra instance with AI tracing exporters and initialize them\n */\n if (config?.observability) {\n this.registerAITracingExporters();\n this.initAITracingExporters();\n }\n\n this.setLogger({ logger });\n }\n\n /**\n * Register this Mastra instance with AI tracing exporters that need it\n */\n private registerAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Check if exporter has __registerMastra method\n if ('__registerMastra' in exporter && typeof (exporter as any).__registerMastra === 'function') {\n (exporter as any).__registerMastra(this);\n }\n });\n });\n }\n\n /**\n * Initialize all AI tracing exporters after registration is complete\n */\n private initAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Initialize exporter if it has an init method\n if ('init' in exporter && typeof exporter.init === 'function') {\n try {\n exporter.init();\n } catch (error) {\n this.#logger?.warn('Failed to initialize AI tracing exporter', {\n exporterName: exporter.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n });\n });\n }\n\n public getAgent<TAgentName extends keyof TAgents>(name: TAgentName): TAgents[TAgentName] {\n const agent = this.#agents?.[name];\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ${String(name)} not found`,\n details: {\n status: 404,\n agentName: String(name),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#agents[name];\n }\n\n public getAgentById(id: string): Agent {\n let agent = Object.values(this.#agents).find(a => a.id === id);\n\n if (!agent) {\n try {\n agent = this.getAgent(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with id ${String(id)} not found`,\n details: {\n status: 404,\n agentId: String(id),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return agent;\n }\n\n public getAgents() {\n return this.#agents;\n }\n\n public getVector<TVectorName extends keyof TVectors>(name: TVectorName): TVectors[TVectorName] {\n const vector = this.#vectors?.[name];\n if (!vector) {\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector with name ${String(name)} not found`,\n details: {\n status: 404,\n vectorName: String(name),\n vectors: Object.keys(this.#vectors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return vector;\n }\n\n public getVectors() {\n return this.#vectors;\n }\n\n public getDeployer() {\n return this.#deployer;\n }\n\n public legacy_getWorkflow<TWorkflowId extends keyof TLegacyWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TLegacyWorkflows[TWorkflowId] {\n const workflow = this.#legacy_workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_LEGACY_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#legacy_workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TLegacyWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflow<TWorkflowId extends keyof TWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TWorkflows[TWorkflowId] {\n const workflow = this.#workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflowById(id: string): Workflow {\n let workflow = Object.values(this.#workflows).find(a => a.id === id);\n\n if (!workflow) {\n try {\n workflow = this.getWorkflow(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return workflow;\n }\n\n public legacy_getWorkflows(props: { serialized?: boolean } = {}): Record<string, LegacyWorkflow> {\n if (props.serialized) {\n return Object.entries(this.#legacy_workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#legacy_workflows;\n }\n\n public getWorkflows(props: { serialized?: boolean } = {}): Record<string, Workflow> {\n if (props.serialized) {\n return Object.entries(this.#workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#workflows;\n }\n\n public setStorage(storage: MastraStorage) {\n this.#storage = augmentWithInit(storage);\n }\n\n public setLogger({ logger }: { logger: TLogger }) {\n this.#logger = logger;\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n this.#agents?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#memory) {\n this.#memory.__setLogger(this.#logger);\n }\n\n if (this.#deployer) {\n this.#deployer.__setLogger(this.#logger);\n }\n\n if (this.#tts) {\n Object.keys(this.#tts).forEach(key => {\n this.#tts?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#storage) {\n this.#storage.__setLogger(this.#logger);\n }\n\n if (this.#vectors) {\n Object.keys(this.#vectors).forEach(key => {\n this.#vectors?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#mcpServers) {\n Object.keys(this.#mcpServers).forEach(key => {\n this.#mcpServers?.[key]?.__setLogger(this.#logger);\n });\n }\n\n // Set logger for AI tracing instances\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(instance => {\n instance.__setLogger(this.#logger);\n });\n }\n\n public setTelemetry(telemetry: OtelConfig) {\n this.#telemetry = Telemetry.init(telemetry);\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n if (this.#telemetry) {\n this.#agents?.[key]?.__setTelemetry(this.#telemetry);\n }\n });\n }\n\n if (this.#memory) {\n this.#memory = this.#telemetry.traceClass(this.#memory, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#memory.__setTelemetry(this.#telemetry);\n }\n\n if (this.#deployer) {\n this.#deployer = this.#telemetry.traceClass(this.#deployer, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#deployer.__setTelemetry(this.#telemetry);\n }\n\n if (this.#tts) {\n let tts = {} as Record<string, MastraTTS>;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#telemetry) {\n tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n tts[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#tts = tts as TTTS;\n }\n\n if (this.#storage) {\n this.#storage = this.#telemetry.traceClass(this.#storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n }\n\n if (this.#vectors) {\n let vectors = {} as Record<string, MastraVector>;\n Object.entries(this.#vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#vectors = vectors as TVectors;\n }\n }\n\n public getTTS() {\n return this.#tts;\n }\n\n public getLogger() {\n return this.#logger;\n }\n\n public getTelemetry() {\n return this.#telemetry;\n }\n\n public getMemory() {\n return this.#memory;\n }\n\n public getStorage() {\n return this.#storage;\n }\n\n public getServerMiddleware() {\n return this.#serverMiddleware;\n }\n\n public setServerMiddleware(serverMiddleware: Middleware | Middleware[]) {\n if (typeof serverMiddleware === 'function') {\n this.#serverMiddleware = [\n {\n handler: serverMiddleware,\n path: '/api/*',\n },\n ];\n return;\n }\n\n if (!Array.isArray(serverMiddleware)) {\n const error = new MastraError({\n id: 'MASTRA_SET_SERVER_MIDDLEWARE_INVALID_TYPE',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Invalid middleware: expected a function or array, received ${typeof serverMiddleware}`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n this.#serverMiddleware = serverMiddleware.map(m => {\n if (typeof m === 'function') {\n return {\n handler: m,\n path: '/api/*',\n };\n }\n return {\n handler: m.handler,\n path: m.path || '/api/*',\n };\n });\n }\n\n public getNetworks() {\n return Object.values(this.#networks || {});\n }\n\n public vnext_getNetworks() {\n return Object.values(this.#vnext_networks || {});\n }\n\n public getServer() {\n return this.#server;\n }\n\n public getBundlerConfig() {\n return this.#bundler;\n }\n\n /**\n * Get a specific network by ID\n * @param networkId - The ID of the network to retrieve\n * @returns The network with the specified ID, or undefined if not found\n */\n public getNetwork(networkId: string): AgentNetwork | undefined {\n const networks = this.getNetworks();\n return networks.find(network => {\n const routingAgent = network.getRoutingAgent();\n return network.formatAgentId(routingAgent.name) === networkId;\n });\n }\n\n public vnext_getNetwork(networkId: string): NewAgentNetwork | undefined {\n const networks = this.vnext_getNetworks();\n return networks.find(network => network.id === networkId);\n }\n\n public async getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n runId: string;\n transportId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger?.getLogsByRunId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not configured or does not support getLogsByRunId operation',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return await this.#logger.getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n });\n }\n\n public async getLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not set',\n details: {\n transportId,\n },\n });\n throw error;\n }\n\n return await this.#logger.getLogs(transportId, params);\n }\n\n /**\n * Get all registered MCP server instances.\n * @returns A record of MCP server ID to MCPServerBase instance, or undefined if none are registered.\n */\n public getMCPServers(): Record<string, MCPServerBase> | undefined {\n return this.#mcpServers;\n }\n\n /**\n * Get a specific MCP server instance.\n * If a version is provided, it attempts to find the server with that exact logical ID and version.\n * If no version is provided, it returns the server with the specified logical ID that has the most recent releaseDate.\n * The logical ID should match the `id` property of the MCPServer instance (typically set via MCPServerConfig.id).\n * @param serverId - The logical ID of the MCP server to retrieve.\n * @param version - Optional specific version of the MCP server to retrieve.\n * @returns The MCP server instance, or undefined if not found or if the specific version is not found.\n */\n public getMCPServer(serverId: string, version?: string): MCPServerBase | undefined {\n if (!this.#mcpServers) {\n return undefined;\n }\n\n const allRegisteredServers = Object.values(this.#mcpServers || {});\n\n const matchingLogicalIdServers = allRegisteredServers.filter(server => server.id === serverId);\n\n if (matchingLogicalIdServers.length === 0) {\n this.#logger?.debug(`No MCP servers found with logical ID: ${serverId}`);\n return undefined;\n }\n\n if (version) {\n const specificVersionServer = matchingLogicalIdServers.find(server => server.version === version);\n if (!specificVersionServer) {\n this.#logger?.debug(`MCP server with logical ID '${serverId}' found, but not version '${version}'.`);\n }\n return specificVersionServer;\n } else {\n // No version specified, find the one with the most recent releaseDate\n if (matchingLogicalIdServers.length === 1) {\n return matchingLogicalIdServers[0];\n }\n\n matchingLogicalIdServers.sort((a, b) => {\n // Ensure releaseDate exists and is a string before creating a Date object\n const dateAVal = a.releaseDate && typeof a.releaseDate === 'string' ? new Date(a.releaseDate).getTime() : NaN;\n const dateBVal = b.releaseDate && typeof b.releaseDate === 'string' ? new Date(b.releaseDate).getTime() : NaN;\n\n if (isNaN(dateAVal) && isNaN(dateBVal)) return 0;\n if (isNaN(dateAVal)) return 1; // Treat invalid/missing dates as older\n if (isNaN(dateBVal)) return -1; // Treat invalid/missing dates as older\n\n return dateBVal - dateAVal; // Sorts in descending order of time (latest first)\n });\n\n // After sorting, the first element should be the latest if its date is valid\n if (matchingLogicalIdServers.length > 0) {\n const latestServer = matchingLogicalIdServers[0];\n if (\n latestServer &&\n latestServer.releaseDate &&\n typeof latestServer.releaseDate === 'string' &&\n !isNaN(new Date(latestServer.releaseDate).getTime())\n ) {\n return latestServer;\n }\n }\n this.#logger?.warn(\n `Could not determine the latest server for logical ID '${serverId}' due to invalid or missing release dates, or no servers left after filtering.`,\n );\n return undefined;\n }\n }\n\n public async addTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.subscribe(topic, listener);\n }\n\n public async removeTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n\n public async startEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.subscribe(topic, listener);\n }\n }\n }\n\n public async stopEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n }\n\n await this.#pubsub.flush();\n }\n\n /**\n * Shutdown Mastra and clean up all resources\n */\n async shutdown(): Promise<void> {\n // Shutdown AI tracing registry and all instances\n await shutdownAITracingRegistry();\n await this.stopEventEngine();\n\n this.#logger?.info('Mastra shutdown completed');\n }\n}\n"]}
@@ -1,72 +0,0 @@
1
- // src/tools/validation.ts
2
- function validateToolInput(schema, input, toolId) {
3
- if (!schema || !("safeParse" in schema)) {
4
- return { data: input };
5
- }
6
- let actualInput = input;
7
- if (input && typeof input === "object" && "context" in input) {
8
- actualInput = input.context;
9
- }
10
- if (actualInput && typeof actualInput === "object" && "inputData" in actualInput) {
11
- actualInput = actualInput.inputData;
12
- }
13
- const validation = schema.safeParse(actualInput);
14
- if (!validation.success) {
15
- const errorMessages = validation.error.issues.map((e) => `- ${e.path?.join(".") || "root"}: ${e.message}`).join("\n");
16
- const error = {
17
- error: true,
18
- message: `Tool validation failed${toolId ? ` for ${toolId}` : ""}. Please fix the following errors and try again:
19
- ${errorMessages}
20
-
21
- Provided arguments: ${JSON.stringify(actualInput, null, 2)}`,
22
- validationErrors: validation.error.format()
23
- };
24
- return { data: input, error };
25
- }
26
- if (input && typeof input === "object" && "context" in input) {
27
- if (input.context && typeof input.context === "object" && "inputData" in input.context) {
28
- return { data: { ...input, context: { ...input.context, inputData: validation.data } } };
29
- }
30
- return { data: { ...input, context: validation.data } };
31
- }
32
- return { data: validation.data };
33
- }
34
-
35
- // src/tools/tool.ts
36
- var Tool = class {
37
- id;
38
- description;
39
- inputSchema;
40
- outputSchema;
41
- execute;
42
- mastra;
43
- constructor(opts) {
44
- this.id = opts.id;
45
- this.description = opts.description;
46
- this.inputSchema = opts.inputSchema;
47
- this.outputSchema = opts.outputSchema;
48
- this.mastra = opts.mastra;
49
- if (opts.execute) {
50
- const originalExecute = opts.execute;
51
- this.execute = async (context, options) => {
52
- const { data, error } = validateToolInput(this.inputSchema, context, this.id);
53
- if (error) {
54
- return error;
55
- }
56
- return originalExecute(data, options);
57
- };
58
- }
59
- }
60
- };
61
- function createTool(opts) {
62
- return new Tool(opts);
63
- }
64
-
65
- // src/tools/toolchecks.ts
66
- function isVercelTool(tool) {
67
- return !!(tool && !(tool instanceof Tool) && "parameters" in tool);
68
- }
69
-
70
- export { Tool, createTool, isVercelTool, validateToolInput };
71
- //# sourceMappingURL=chunk-IVGAHFAJ.js.map
72
- //# sourceMappingURL=chunk-IVGAHFAJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-IVGAHFAJ.js","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Extract the actual input data from various context formats\n let actualInput = input;\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n actualInput = (input as any).context;\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (actualInput && typeof actualInput === 'object' && 'inputData' in actualInput) {\n actualInput = (actualInput as any).inputData;\n }\n\n const validation = schema.safeParse(actualInput);\n if (!validation.success) {\n const errorMessages = validation.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(actualInput, null, 2)}`,\n validationErrors: validation.error.format(),\n };\n\n return { data: input, error };\n }\n\n // Return the original input structure with validated data in the right place\n if (input && typeof input === 'object' && 'context' in input) {\n if ((input as any).context && typeof (input as any).context === 'object' && 'inputData' in (input as any).context) {\n return { data: { ...input, context: { ...(input as any).context, inputData: validation.data } } };\n }\n return { data: { ...input, context: validation.data } };\n }\n\n return { data: validation.data };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}