@mastra/core 1.55.0-alpha.2 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/durable/index.cjs +1 -1
  4. package/dist/agent/durable/index.js +1 -1
  5. package/dist/agent/index.cjs +2 -2
  6. package/dist/agent/index.js +2 -2
  7. package/dist/{agent-BvRfRKIt.js → agent-0y2cApTZ.js} +57 -82
  8. package/dist/agent-0y2cApTZ.js.map +1 -0
  9. package/dist/agent-builder/ee/index.cjs +1 -1
  10. package/dist/agent-builder/ee/index.js +1 -1
  11. package/dist/agent-controller/index.cjs +1 -1
  12. package/dist/agent-controller/index.js +1 -1
  13. package/dist/{agent-controller-CM6tQSMj.js → agent-controller-ByW51eCC.js} +5 -5
  14. package/dist/{agent-controller-CM6tQSMj.js.map → agent-controller-ByW51eCC.js.map} +1 -1
  15. package/dist/{agent-controller-C75dc544.cjs → agent-controller-DahKlMET.cjs} +5 -5
  16. package/dist/{agent-controller-C75dc544.cjs.map → agent-controller-DahKlMET.cjs.map} +1 -1
  17. package/dist/{agent-CwUYflGG.cjs → agent-um2LJs-0.cjs} +57 -82
  18. package/dist/agent-um2LJs-0.cjs.map +1 -0
  19. package/dist/background-tasks/index.cjs +1 -1
  20. package/dist/background-tasks/index.js +1 -1
  21. package/dist/{background-tasks-AKlv5tIo.js → background-tasks-CM94BIj8.js} +2 -2
  22. package/dist/{background-tasks-AKlv5tIo.js.map → background-tasks-CM94BIj8.js.map} +1 -1
  23. package/dist/{background-tasks-Chpan7PB.cjs → background-tasks-CobPW4Z3.cjs} +2 -2
  24. package/dist/{background-tasks-Chpan7PB.cjs.map → background-tasks-CobPW4Z3.cjs.map} +1 -1
  25. package/dist/browser/index.cjs +1 -1
  26. package/dist/browser/index.js +1 -1
  27. package/dist/channels/index.cjs +2 -2
  28. package/dist/channels/index.js +2 -2
  29. package/dist/{channels-BW52ccH_.cjs → channels-BgbloDjB.cjs} +2 -2
  30. package/dist/{channels-BW52ccH_.cjs.map → channels-BgbloDjB.cjs.map} +1 -1
  31. package/dist/{channels-Da9lEAi1.js → channels-MegO_4KL.js} +2 -2
  32. package/dist/{channels-Da9lEAi1.js.map → channels-MegO_4KL.js.map} +1 -1
  33. package/dist/coding-agent/index.cjs +1 -1
  34. package/dist/coding-agent/index.js +1 -1
  35. package/dist/{create-durable-agent-DmTTvoGi.cjs → create-durable-agent-ChmjQwzE.cjs} +8 -8
  36. package/dist/{create-durable-agent-DmTTvoGi.cjs.map → create-durable-agent-ChmjQwzE.cjs.map} +1 -1
  37. package/dist/{create-durable-agent-Bd4Bm5FV.js → create-durable-agent-DH_dWTMR.js} +8 -8
  38. package/dist/{create-durable-agent-Bd4Bm5FV.js.map → create-durable-agent-DH_dWTMR.js.map} +1 -1
  39. package/dist/datasets/index.cjs +1 -1
  40. package/dist/datasets/index.js +1 -1
  41. package/dist/{dist-C077BlAN.js → dist-BZBxELZo.js} +2 -2
  42. package/dist/{dist-C077BlAN.js.map → dist-BZBxELZo.js.map} +1 -1
  43. package/dist/{dist-CsR_D1uk.cjs → dist-ftJxyNRx.cjs} +2 -2
  44. package/dist/{dist-CsR_D1uk.cjs.map → dist-ftJxyNRx.cjs.map} +1 -1
  45. package/dist/docs/SKILL.md +1 -1
  46. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  47. package/dist/evals/index.cjs +1 -1
  48. package/dist/evals/index.js +1 -1
  49. package/dist/evals/scoreTraces/index.cjs +1 -1
  50. package/dist/evals/scoreTraces/index.js +1 -1
  51. package/dist/harness/index.cjs +1 -1
  52. package/dist/harness/index.js +1 -1
  53. package/dist/index.cjs +1 -1
  54. package/dist/index.js +1 -1
  55. package/dist/llm/index.cjs +5 -5
  56. package/dist/llm/index.js +5 -5
  57. package/dist/{llm-DlVyw1cX.js → llm-DGuYy_Nx.js} +5 -5
  58. package/dist/{llm-DlVyw1cX.js.map → llm-DGuYy_Nx.js.map} +1 -1
  59. package/dist/{llm-Bjt2hZ3f.cjs → llm-DmAhSSgh.cjs} +5 -5
  60. package/dist/{llm-Bjt2hZ3f.cjs.map → llm-DmAhSSgh.cjs.map} +1 -1
  61. package/dist/loop/index.cjs +1 -1
  62. package/dist/loop/index.js +1 -1
  63. package/dist/{manager-CYGpXJfK.js → manager-DDRcONBK.js} +3 -3
  64. package/dist/{manager-CYGpXJfK.js.map → manager-DDRcONBK.js.map} +1 -1
  65. package/dist/{manager-BjrFnt_A.cjs → manager-DqHiikx1.cjs} +3 -3
  66. package/dist/{manager-BjrFnt_A.cjs.map → manager-DqHiikx1.cjs.map} +1 -1
  67. package/dist/mastra/index.cjs +1 -1
  68. package/dist/mastra/index.js +1 -1
  69. package/dist/{mastra-CVLF1dWt.js → mastra-B6CffFOC.js} +9 -9
  70. package/dist/{mastra-CVLF1dWt.js.map → mastra-B6CffFOC.js.map} +1 -1
  71. package/dist/{mastra-Bxx9WPf6.cjs → mastra-BlT9srQJ.cjs} +9 -9
  72. package/dist/{mastra-Bxx9WPf6.cjs.map → mastra-BlT9srQJ.cjs.map} +1 -1
  73. package/dist/memory/index.cjs +1 -1
  74. package/dist/memory/index.js +1 -1
  75. package/dist/{model-CA0WLISt.js → model-DQzxkQqM.js} +2 -2
  76. package/dist/{model-CA0WLISt.js.map → model-DQzxkQqM.js.map} +1 -1
  77. package/dist/{model-DMVq6nAS.cjs → model-Iow-mV9i.cjs} +2 -2
  78. package/dist/{model-DMVq6nAS.cjs.map → model-Iow-mV9i.cjs.map} +1 -1
  79. package/dist/{models-dev-Cbus1Uh2.js → models-dev-BFOUCgyS.js} +2 -2
  80. package/dist/{models-dev-Cbus1Uh2.js.map → models-dev-BFOUCgyS.js.map} +1 -1
  81. package/dist/{models-dev-D_X4VMSu.cjs → models-dev-BUEaCBxL.cjs} +2 -2
  82. package/dist/{models-dev-D_X4VMSu.cjs.map → models-dev-BUEaCBxL.cjs.map} +1 -1
  83. package/dist/{netlify-C-nnPVSj.js → netlify-7eHXUkln.js} +2 -2
  84. package/dist/{netlify-C-nnPVSj.js.map → netlify-7eHXUkln.js.map} +1 -1
  85. package/dist/{netlify-CUuCnmtd.cjs → netlify-Db5icdAJ.cjs} +2 -2
  86. package/dist/{netlify-CUuCnmtd.cjs.map → netlify-Db5icdAJ.cjs.map} +1 -1
  87. package/dist/processor-provider/index.cjs +1 -1
  88. package/dist/processor-provider/index.js +1 -1
  89. package/dist/processors/index.cjs +2 -2
  90. package/dist/processors/index.js +2 -2
  91. package/dist/processors/processors/index.d.ts +1 -1
  92. package/dist/processors/processors/index.d.ts.map +1 -1
  93. package/dist/processors/tool-result-reminder.d.ts +23 -0
  94. package/dist/processors/tool-result-reminder.d.ts.map +1 -1
  95. package/dist/{provider-registry-BFknh6Fu.cjs → provider-registry-DRJihW5_.cjs} +6 -6
  96. package/dist/{provider-registry-BFknh6Fu.cjs.map → provider-registry-DRJihW5_.cjs.map} +1 -1
  97. package/dist/{provider-registry-DIbls44Z.js → provider-registry-DzSSAz1R.js} +6 -6
  98. package/dist/{provider-registry-DIbls44Z.js.map → provider-registry-DzSSAz1R.js.map} +1 -1
  99. package/dist/relevance/index.cjs +2 -2
  100. package/dist/relevance/index.js +2 -2
  101. package/dist/stream/index.cjs +3 -3
  102. package/dist/stream/index.js +3 -3
  103. package/dist/{stream-tlVjYkAO.cjs → stream-D-cHV05r.cjs} +3 -3
  104. package/dist/{stream-tlVjYkAO.cjs.map → stream-D-cHV05r.cjs.map} +1 -1
  105. package/dist/{stream-Cd_isEZJ.js → stream-DJaosaeO.js} +3 -3
  106. package/dist/{stream-Cd_isEZJ.js.map → stream-DJaosaeO.js.map} +1 -1
  107. package/dist/test-utils/llm-mock.cjs +1 -1
  108. package/dist/test-utils/llm-mock.js +1 -1
  109. package/dist/tool-loop-agent/index.cjs +1 -1
  110. package/dist/tool-loop-agent/index.js +1 -1
  111. package/dist/{tool-loop-agent-th9L-ls9.cjs → tool-loop-agent-ByrutV2Q.cjs} +4 -4
  112. package/dist/{tool-loop-agent-th9L-ls9.cjs.map → tool-loop-agent-ByrutV2Q.cjs.map} +1 -1
  113. package/dist/{tool-loop-agent-CcT-TTcT.js → tool-loop-agent-BzHXZDL3.js} +4 -4
  114. package/dist/{tool-loop-agent-CcT-TTcT.js.map → tool-loop-agent-BzHXZDL3.js.map} +1 -1
  115. package/dist/{trip-wire-Cj0cJivR.js → trip-wire-DxpTS3jV.js} +2 -2
  116. package/dist/{trip-wire-Cj0cJivR.js.map → trip-wire-DxpTS3jV.js.map} +1 -1
  117. package/dist/{trip-wire-BNzxirr0.cjs → trip-wire-utCESgMt.cjs} +2 -2
  118. package/dist/{trip-wire-BNzxirr0.cjs.map → trip-wire-utCESgMt.cjs.map} +1 -1
  119. package/dist/{utils-BoQofieM.cjs → utils-CPUQn5dX.cjs} +2 -2
  120. package/dist/{utils-BoQofieM.cjs.map → utils-CPUQn5dX.cjs.map} +1 -1
  121. package/dist/{utils-DUfAZ4gr.js → utils-CrKEOVUo.js} +2 -2
  122. package/dist/{utils-DUfAZ4gr.js.map → utils-CrKEOVUo.js.map} +1 -1
  123. package/dist/utils.cjs +1 -1
  124. package/dist/utils.js +1 -1
  125. package/dist/worker/index.cjs +1 -1
  126. package/dist/worker/index.js +1 -1
  127. package/dist/{worker-DwlyX5l8.js → worker-Ciya6mfo.js} +3 -3
  128. package/dist/{worker-DwlyX5l8.js.map → worker-Ciya6mfo.js.map} +1 -1
  129. package/dist/{worker-CsbZPhWb.cjs → worker-YT_pMttZ.cjs} +3 -3
  130. package/dist/{worker-CsbZPhWb.cjs.map → worker-YT_pMttZ.cjs.map} +1 -1
  131. package/dist/{workflow-BR5D6ij_.cjs → workflow-DcS_0R0Z.cjs} +3 -3
  132. package/dist/{workflow-BR5D6ij_.cjs.map → workflow-DcS_0R0Z.cjs.map} +1 -1
  133. package/dist/{workflow-OjZRiiCG.js → workflow-k6s0ESOR.js} +3 -3
  134. package/dist/{workflow-OjZRiiCG.js.map → workflow-k6s0ESOR.js.map} +1 -1
  135. package/dist/workflows/evented/index.cjs +1 -1
  136. package/dist/workflows/evented/index.js +1 -1
  137. package/dist/workflows/index.cjs +1 -1
  138. package/dist/workflows/index.js +1 -1
  139. package/package.json +12 -12
  140. package/dist/agent-BvRfRKIt.js.map +0 -1
  141. package/dist/agent-CwUYflGG.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utils-DUfAZ4gr.js","names":["isZodType"],"sources":["../src/tools/tool-builder/builder.ts","../src/utils.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { ProviderDefinedTool, ToolExecutionOptions } from '@internal/external-types';\nimport {\n OpenAIReasoningSchemaCompatLayer,\n OpenAISchemaCompatLayer,\n GoogleSchemaCompatLayer,\n AnthropicSchemaCompatLayer,\n DeepSeekSchemaCompatLayer,\n MetaSchemaCompatLayer,\n applyCompatLayer,\n convertZodSchemaToAISDKSchema,\n jsonSchema,\n} from '@mastra/schema-compat';\nimport type { JSONSchema7Definition } from 'json-schema';\nimport { z } from 'zod/v4';\nimport { MastraFGAPermissions } from '../../auth/ee';\nimport { backgroundOverrideJsonSchema, backgroundOverrideZodSchema } from '../../background-tasks';\nimport { MastraBase } from '../../base';\nimport { ErrorCategory, MastraError, ErrorDomain } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport { SpanType, wrapMastra, EntityType, getOrCreateSpan, createObservabilityContext } from '../../observability';\nimport type { AnySpan } from '../../observability';\nimport { executeWithContext } from '../../observability/utils';\nimport { RequestContext } from '../../request-context';\nimport { isStandardSchemaWithJSON, toStandardSchema, standardSchemaToJSONSchema } from '../../schema';\nimport type { StandardSchemaWithJSON } from '../../schema';\nimport { getNeedsApprovalFn, isVercelTool, isProviderDefinedTool } from '../../tools/toolchecks';\nimport type { ToolOptions } from '../../utils';\nimport { safeStringify } from '../../utils';\nimport { isZodObject, safeExtendZodObject } from '../../utils/zod-utils';\n\nimport type { SuspendOptions } from '../../workflows';\nimport { ToolStream } from '../stream';\nimport type {\n CoreTool,\n McpMetadata,\n MastraToolInvocationOptions,\n NeedsApprovalFn,\n ToolAction,\n VercelTool,\n VercelToolV5,\n} from '../types';\nimport { noopObserve } from '../types';\nimport { validateToolInput, validateToolOutput, validateToolSuspendData } from '../validation';\n\n/**\n * Merge two RequestContexts so non-serializable values survive the evented\n * workflow engine's toJSON/reconstruct cycle.\n *\n * The evented engine serialises the RequestContext via `toJSON()` when\n * publishing workflow events. Values that fail `JSON.stringify` (functions,\n * objects with circular references — e.g. the `controller` context) are silently\n * dropped. The reconstructed RC handed to steps is therefore *degraded*.\n *\n * Tools, however, also hold a reference to the *original* RC captured during\n * tool conversion (the \"closure\" RC). By merging both — exec first, then\n * closure on top — keys that survived serialisation are preserved while\n * non-serializable keys from the closure (like `controller`) are restored.\n */\nfunction mergeRequestContexts(\n closureRC: RequestContext | undefined,\n execRC: RequestContext | undefined,\n): RequestContext {\n if (closureRC && closureRC === execRC) return closureRC;\n if (!closureRC && !execRC) return new RequestContext();\n if (!closureRC) return execRC instanceof RequestContext ? execRC : new RequestContext();\n if (!execRC || !(execRC instanceof RequestContext) || execRC.size() === 0) return closureRC;\n\n const merged = new RequestContext();\n // Start with the evented engine's serialised snapshot\n for (const [key, value] of execRC.entries()) {\n merged.set(key, value);\n }\n // Overlay closure values — restores non-serializable keys and ensures the\n // authoritative (non-degraded) copy wins for keys present in both.\n for (const [key, value] of closureRC.entries()) {\n merged.set(key, value);\n }\n return merged;\n}\n\n/**\n * Types that can be converted to Mastra tools.\n * Includes provider-defined tools from external packages via ProviderDefinedTool.\n */\nexport type ToolToConvert = VercelTool | ToolAction<any, any, any> | VercelToolV5 | ProviderDefinedTool;\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 logData: Record<string, unknown>;\n}\n\n/**\n * Detect Zod v4 schemas. Zod v3 stores the type name as `_def.typeName`\n * (e.g. \"ZodObject\"); Zod v4 stores it as `_def.type` (e.g. \"object\"). We\n * cannot use `instanceof` here because both Zod versions may be loaded in the\n * same process and the prototype identity is not guaranteed.\n */\nfunction isZodV4Schema(schema: unknown): boolean {\n const def = (schema as any)?._def;\n return !!def && typeof def.type === 'string' && !def.typeName;\n}\n\n/**\n * Build a Standard Schema that:\n * - exposes the spliced JSON Schema (with `_background`/`suspendedToolRunId`/\n * `resumeData` properties added) so provider compat layers see the override\n * fields when serializing the tool to an LLM, and\n * - delegates runtime `validate` to the *original* schema so Zod v3\n * `.transform()` / `.default()` / `.refine()` and other Standard Schema\n * parsing behavior still run before `execute()` sees the args.\n *\n * Injected override keys (`_background`, `suspendedToolRunId`, `resumeData`)\n * are stripped from the input before delegating, then merged back into the\n * validated value so the inner `execute()` still receives them — matching the\n * Zod v4 `.extend()` path's behavior.\n *\n * If the original schema has no `~standard.validate` (e.g. a raw JSON Schema\n * with no Standard Schema wrapper), fall back to validating against the\n * spliced JSON Schema directly.\n */\nfunction buildJsonOverrideSchema(\n originalSchema: unknown,\n splicedJsonSchema: JSONSchema7Definition,\n injectedKeys: readonly string[],\n): StandardSchemaWithJSON {\n const fallback = toStandardSchema(splicedJsonSchema as any);\n const original = originalSchema as { '~standard'?: { validate?: (v: unknown) => any } } | undefined;\n const originalValidate = original?.['~standard']?.validate?.bind(original['~standard']);\n\n // Standard Schema for *just* the injected override fields, so we can validate\n // malformed override payloads (e.g. `_background: { enabled: \"yes\" }`) before\n // merging them into the result. Matches the Zod v4 `.extend()` path's\n // behavior, which validates these fields as part of the object.\n // See https://github.com/mastra-ai/mastra/pull/16915#discussion_r3282600679\n const splicedProperties =\n splicedJsonSchema && typeof splicedJsonSchema === 'object' && 'properties' in splicedJsonSchema\n ? ((splicedJsonSchema.properties ?? {}) as Record<string, JSONSchema7Definition>)\n : {};\n const injectedProperties: Record<string, JSONSchema7Definition> = {};\n for (const key of injectedKeys) {\n if (splicedProperties[key] !== undefined) injectedProperties[key] = splicedProperties[key];\n }\n const injectedValidator = toStandardSchema({\n type: 'object',\n properties: injectedProperties,\n additionalProperties: false,\n } as any);\n\n const stripInjected = (input: unknown) => {\n if (!input || typeof input !== 'object' || Array.isArray(input)) return { stripped: input, injected: {} };\n const injected: Record<string, unknown> = {};\n const stripped: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(input as Record<string, unknown>)) {\n if (injectedKeys.includes(k)) injected[k] = v;\n else stripped[k] = v;\n }\n return { stripped, injected };\n };\n\n const validate = (input: unknown) => {\n const { stripped, injected } = stripInjected(input);\n\n const baseResult = originalValidate\n ? (originalValidate(stripped) as\n | { value: unknown }\n | { issues: readonly unknown[] }\n | Promise<{ value: unknown } | { issues: readonly unknown[] }>)\n : fallback['~standard'].validate(stripped);\n\n const injectedResult = injectedValidator['~standard'].validate(injected);\n\n const combine = (\n base: { value: unknown } | { issues: readonly unknown[] },\n inj: { value: unknown } | { issues: readonly unknown[] },\n ) => {\n const baseIssues = 'issues' in base ? (base.issues ?? []) : [];\n const injIssues = 'issues' in inj ? (inj.issues ?? []) : [];\n if (baseIssues.length || injIssues.length) {\n return { issues: [...baseIssues, ...injIssues] };\n }\n const baseValue = (base as { value: unknown }).value;\n const injValue = (inj as { value: unknown }).value;\n if (baseValue && typeof baseValue === 'object' && !Array.isArray(baseValue)) {\n const injMerged =\n injValue && typeof injValue === 'object' && !Array.isArray(injValue)\n ? (injValue as Record<string, unknown>)\n : injected;\n return { value: { ...(baseValue as Record<string, unknown>), ...injMerged } };\n }\n return base;\n };\n\n const baseIsPromise = baseResult && typeof (baseResult as Promise<unknown>).then === 'function';\n const injIsPromise = injectedResult && typeof (injectedResult as Promise<unknown>).then === 'function';\n if (baseIsPromise || injIsPromise) {\n return Promise.all([baseResult, injectedResult]).then(([b, i]) =>\n combine(\n b as { value: unknown } | { issues: readonly unknown[] },\n i as { value: unknown } | { issues: readonly unknown[] },\n ),\n );\n }\n return combine(\n baseResult as { value: unknown } | { issues: readonly unknown[] },\n injectedResult as { value: unknown } | { issues: readonly unknown[] },\n );\n };\n\n return {\n '~standard': {\n version: 1,\n vendor: 'mastra-json-override',\n validate,\n jsonSchema: fallback['~standard'].jsonSchema,\n },\n } as StandardSchemaWithJSON;\n}\n\nexport class CoreToolBuilder extends MastraBase {\n private originalTool: ToolToConvert;\n private options: ToolOptions;\n private logType?: LogType;\n\n constructor(input: {\n originalTool: ToolToConvert;\n options: ToolOptions;\n logType?: LogType;\n autoResumeSuspendedTools?: boolean;\n backgroundTaskEnabled?: boolean;\n }) {\n super({ name: 'CoreToolBuilder' });\n this.originalTool = input.originalTool;\n this.options = input.options;\n this.logType = input.logType;\n\n // Only inject the `_background` override schema for tools that are actually\n // eligible for background execution — otherwise every user tool's input\n // schema would be mutated with a v4 Zod field, which breaks v3-authored\n // tools (keyValidator._parse crashes in schema-compat validation).\n const isBackgroundEligible = !!input.backgroundTaskEnabled;\n const isResumableTool =\n input.autoResumeSuspendedTools ||\n (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('agent-') ||\n (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('workflow-');\n\n if (!isVercelTool(this.originalTool) && !isProviderDefinedTool(this.originalTool)) {\n if (isBackgroundEligible || isResumableTool) {\n let schema = this.originalTool.inputSchema;\n if (typeof schema === 'function') {\n schema = schema();\n }\n if (!schema) {\n schema = z.object({});\n }\n\n // Preferred path: when the user's input schema is a Zod v4 ZodObject\n // (the common case for tools authored with `zod` / `zod/v4`), keep using\n // `.extend()`. This preserves the exact JSON Schema shape that existing\n // provider compat layers + LLM recordings expect.\n //\n // Fallback path: for everything else (Zod v3 ZodObject, raw JSON Schema,\n // `JsonSchemaWrapper`, etc.) splice the override fields directly into a\n // JSON Schema. Mixing a Zod v4 wrapper (`backgroundOverrideZodSchema`,\n // `.nullable()`, `.optional()`) into a Zod v3 ZodObject's `.shape` is\n // what triggered the original crash:\n // `TypeError: keyValidator._parse is not a function`.\n if (isZodObject(schema) && isZodV4Schema(schema)) {\n let nextSchema: z.ZodObject<any> = schema as z.ZodObject<any>;\n if (isBackgroundEligible) {\n nextSchema = safeExtendZodObject(nextSchema, {\n _background: backgroundOverrideZodSchema,\n });\n }\n if (isResumableTool) {\n nextSchema = safeExtendZodObject(nextSchema, {\n suspendedToolRunId: z.string().describe('The runId of the suspended tool').nullable().optional(),\n resumeData: z\n .any()\n .describe('The resumeData object created from the resumeSchema of suspended tool')\n .optional(),\n });\n }\n this.originalTool.inputSchema = nextSchema;\n } else {\n // Normalize to Standard Schema, extract JSON Schema, splice overrides.\n const standardSchema = isStandardSchemaWithJSON(schema) ? schema : toStandardSchema(schema);\n const jsonSchema = standardSchemaToJSONSchema(standardSchema, { io: 'input' });\n\n if (jsonSchema && typeof jsonSchema === 'object' && jsonSchema.type === 'object') {\n const properties: Record<string, JSONSchema7Definition> = { ...(jsonSchema.properties ?? {}) };\n const injectedKeys: string[] = [];\n\n if (isBackgroundEligible) {\n properties._background = backgroundOverrideJsonSchema;\n injectedKeys.push('_background');\n }\n if (isResumableTool) {\n // Match the pre-PR JSON Schema shape so existing provider compat\n // layers + LLM recordings collapse it identically.\n properties.suspendedToolRunId = {\n type: ['string', 'null'],\n description: 'The runId of the suspended tool',\n };\n properties.resumeData = {\n description: 'The resumeData object created from the resumeSchema of suspended tool',\n };\n injectedKeys.push('suspendedToolRunId', 'resumeData');\n }\n\n // Preserve the original schema's runtime validator (Zod v3\n // `.transform()` / `.default()` / `.refine()` etc.) while exposing\n // the spliced JSON Schema for provider serialization. See\n // https://github.com/mastra-ai/mastra/pull/16915#discussion_r3282520408\n this.originalTool.inputSchema = buildJsonOverrideSchema(\n schema,\n { ...jsonSchema, properties },\n injectedKeys,\n );\n }\n }\n }\n }\n }\n\n // Helper to get parameters based on tool type\n private getParameters = () => {\n if (isVercelTool(this.originalTool)) {\n // Handle both 'parameters' (v4) and 'inputSchema' (v5) properties\n // Also handle case where the schema is a function that returns a schema\n let schema =\n this.originalTool.parameters ??\n ('inputSchema' in this.originalTool ? (this.originalTool as any).inputSchema : undefined) ??\n z.object({});\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n\n // For Mastra tools, inputSchema might also be a function\n let schema = this.originalTool.inputSchema;\n\n if (isStandardSchemaWithJSON(schema)) {\n return schema;\n }\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n };\n\n private getOutputSchema = () => {\n if ('outputSchema' in this.originalTool) {\n let schema = this.originalTool.outputSchema;\n\n if (isStandardSchemaWithJSON(schema)) {\n return schema;\n }\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n\n return null;\n };\n\n private getResumeSchema = () => {\n if ('resumeSchema' in this.originalTool) {\n let schema = this.originalTool.resumeSchema;\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n return null;\n };\n\n private getSuspendSchema = () => {\n if ('suspendSchema' in this.originalTool) {\n let schema = this.originalTool.suspendSchema;\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n return null;\n };\n\n // For provider-defined tools, we need to include all required properties\n // AI SDK v5 uses type: 'provider-defined', AI SDK v6 uses type: 'provider'\n private buildProviderTool(tool: ToolToConvert): (CoreTool & { id: `${string}.${string}` }) | undefined {\n if (\n 'type' in tool &&\n (tool.type === 'provider-defined' || tool.type === 'provider') &&\n 'id' in tool &&\n typeof tool.id === 'string' &&\n tool.id.includes('.')\n ) {\n // Get schema directly from provider-defined tool (v4 uses parameters, v5 uses inputSchema)\n let parameters: unknown =\n 'parameters' in tool ? tool.parameters : 'inputSchema' in tool ? (tool as any).inputSchema : undefined;\n\n // If schema is a function, call it to get the actual schema\n if (typeof parameters === 'function') {\n parameters = parameters();\n }\n\n // Get output schema directly from provider-defined tool\n let outputSchema: unknown = 'outputSchema' in tool ? (tool as any).outputSchema : undefined;\n\n // If schema is a function, call it to get the actual schema\n if (typeof outputSchema === 'function') {\n outputSchema = outputSchema();\n }\n\n // Convert parameters to AI SDK Schema format\n let processedParameters;\n if (parameters !== undefined && parameters !== null) {\n if (typeof parameters === 'object' && 'jsonSchema' in parameters) {\n // Already in AI SDK Schema format\n processedParameters = parameters;\n } else if (isStandardSchemaWithJSON(parameters)) {\n // StandardSchemaWithJSON - extract the JSON schema and wrap it\n // Use input since parameters represent tool input\n const jsonSchema = standardSchemaToJSONSchema(parameters, { io: 'input' });\n processedParameters = { jsonSchema };\n } else {\n // Assume Zod schema - convert to AI SDK Schema\n processedParameters = convertZodSchemaToAISDKSchema(parameters as any);\n }\n } else {\n // No schema provided - create default empty object schema for AI SDK v1 compatibility\n // OpenAI requires at minimum type: \"object\" even for tools without parameters\n processedParameters = {\n jsonSchema: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n };\n }\n\n // Convert output schema to AI SDK Schema format if present\n let processedOutputSchema;\n if (outputSchema !== undefined && outputSchema !== null) {\n if (typeof outputSchema === 'object' && 'jsonSchema' in outputSchema) {\n // Already in AI SDK Schema format\n processedOutputSchema = outputSchema;\n } else if (isStandardSchemaWithJSON(outputSchema)) {\n // StandardSchemaWithJSON - extract the JSON schema and wrap it\n const jsonSchema = standardSchemaToJSONSchema(outputSchema);\n processedOutputSchema = { jsonSchema };\n } else {\n // Assume Zod schema - convert to AI SDK Schema\n processedOutputSchema = convertZodSchemaToAISDKSchema(outputSchema as any);\n }\n }\n\n return {\n ...(processedOutputSchema ? { outputSchema: processedOutputSchema } : {}),\n type: 'provider-defined' as const,\n id: tool.id as `${string}.${string}`,\n // V5 SDK factories set a hardcoded `name` (e.g. \"web_search\" for\n // anthropic.web_search_20250305). Preserve it so that when this tool\n // is later used with a V6 provider, the bidirectional toolNameMapping\n // resolves the correct model-facing name instead of the versioned ID.\n ...('name' in tool && typeof tool.name === 'string' ? { name: tool.name } : {}),\n args: ('args' in this.originalTool ? this.originalTool.args : {}) as Record<string, unknown>,\n description: tool.description,\n parameters: processedParameters,\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 toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n transform: 'transform' in this.originalTool ? this.originalTool.transform : undefined,\n inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\n } as unknown as (CoreTool & { id: `${string}.${string}` }) | undefined;\n }\n\n return undefined;\n }\n\n private createLogMessageOptions({ agentName, toolName, type }: LogOptions): LogMessageOptions {\n const toolType = type === 'toolset' ? 'toolset' : 'tool';\n return {\n start: `Executing ${toolType}`,\n error: `Failed ${toolType} execution`,\n logData: { agent: agentName, tool: toolName },\n };\n }\n\n private createExecute(tool: ToolToConvert, options: ToolOptions, logType?: 'tool' | 'toolset' | 'client-tool') {\n // don't add memory, mastra, or tracing context to logging (tracingContext may contain sensitive observability credentials)\n const {\n logger,\n mastra: _mastra,\n memory: _memory,\n requestContext,\n model,\n tracingContext: _tracingContext,\n tracingPolicy: _tracingPolicy,\n ...rest\n } = options;\n const logModelObject = {\n modelId: model?.modelId,\n provider: model?.provider,\n specificationVersion: model?.specificationVersion,\n };\n\n const { start, logData } = this.createLogMessageOptions({\n agentName: options.agentName,\n toolName: options.name,\n type: logType,\n });\n\n // Extract MCP metadata once with proper typing to avoid repeated unsafe casts\n const mcpMeta =\n !isVercelTool(tool) && 'mcpMetadata' in tool ? (tool as { mcpMetadata?: McpMetadata }).mcpMetadata : undefined;\n\n const execFunction = async (args: unknown, execOptions: MastraToolInvocationOptions, toolSpan?: AnySpan) => {\n try {\n let result;\n let suspendData = null;\n\n if (isVercelTool(tool)) {\n // Handle Vercel tools (AI SDK tools)\n result = await executeWithContext({\n span: toolSpan,\n fn: async () => tool?.execute?.(args, execOptions as ToolExecutionOptions),\n });\n } else {\n // Handle Mastra tools - wrap mastra instance with tracing context for context propagation\n\n /**\n * MASTRA INSTANCE TYPES IN TOOL EXECUTION:\n *\n * Full Mastra & MastraPrimitives (has getAgent, getWorkflow, etc.):\n * - Auto-generated workflow tools from agent.listWorkflows()\n * - These get this.#mastra directly and can be wrapped\n *\n * MastraPrimitives only (limited interface):\n * - Memory tools (from memory.listTools())\n * - Assigned tools (agent.tools)\n * - Toolset tools (from toolsets)\n * - Client tools (passed as tools in generate/stream options)\n * - These get mastraProxy and have limited functionality\n *\n * TODO: Consider providing full Mastra instance to more tool types for enhanced functionality\n */\n // Wrap mastra with tracing context - wrapMastra will handle whether it's a full instance or primitives\n const wrappedMastra = options.mastra ? wrapMastra(options.mastra, { currentSpan: toolSpan }) : options.mastra;\n\n const resumeSchema = this.getResumeSchema();\n // Pass raw args as first parameter, context as second\n // Properly structure context based on execution source\n const baseContext = {\n threadId: options.threadId,\n resourceId: options.resourceId,\n mastra: wrappedMastra,\n memory: options.memory,\n runId: options.runId,\n requestContext: mergeRequestContexts(options.requestContext, execOptions.requestContext),\n actor: execOptions.actor,\n // Workspace for file operations and command execution\n // Execution-time workspace (from prepareStep/processInputStep) takes precedence over build-time workspace\n workspace: execOptions.workspace ?? options.workspace,\n // Browser for web automation (lazily initialized on first use)\n browser: options.browser,\n observe: execOptions.observe ?? noopObserve,\n writer: new ToolStream(\n {\n prefix: 'tool',\n callId: execOptions.toolCallId,\n name: options.name,\n runId: options.runId!,\n },\n options.outputWriter || execOptions.outputWriter,\n ),\n ...createObservabilityContext({ currentSpan: toolSpan }),\n abortSignal: execOptions.abortSignal,\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n const newSuspendOptions = {\n ...(suspendOptions ?? {}),\n resumeSchema:\n suspendOptions?.resumeSchema ??\n (resumeSchema\n ? JSON.stringify(standardSchemaToJSONSchema(toStandardSchema(resumeSchema), { io: 'input' }))\n : undefined),\n };\n return execOptions.suspend?.(args, newSuspendOptions);\n },\n resumeData: execOptions.resumeData,\n };\n\n // Check if this is agent execution\n // Agent execution takes precedence over workflow execution because agents may\n // use workflows internally for their agentic loop\n // Note: AI SDK v4 doesn't pass toolCallId/messages, so we also check for agentName and threadId\n const isAgentExecution =\n (execOptions.toolCallId && execOptions.messages) ||\n (options.agentName && options.threadId && !options.workflowId);\n\n // Check if this is workflow execution (has workflow properties in options)\n // Only consider it workflow execution if it's NOT agent execution\n const isWorkflowExecution = !isAgentExecution && (options.workflow || options.workflowId);\n\n let toolContext;\n if (isAgentExecution) {\n // Nest agent-specific properties under 'agent' key\n // Do NOT include workflow context even if workflow properties exist\n // (agents use workflows internally but tools should see agent context)\n const { suspend, resumeData, threadId, resourceId, ...restBaseContext } = baseContext;\n toolContext = {\n ...restBaseContext,\n agent: {\n agentId: options.agentId || '',\n toolCallId: execOptions.toolCallId || '',\n messages: execOptions.messages || [],\n suspend,\n resumeData,\n threadId,\n resourceId,\n outputWriter: options.outputWriter || execOptions.outputWriter,\n flushMessages: execOptions.flushMessages,\n },\n };\n } else if (isWorkflowExecution) {\n // Nest workflow-specific properties under 'workflow' key\n const { suspend, resumeData, ...restBaseContext } = baseContext;\n toolContext = {\n ...restBaseContext,\n workflow: options.workflow || {\n runId: options.runId,\n workflowId: options.workflowId,\n state: options.state,\n setState: options.setState,\n suspend,\n resumeData,\n },\n };\n } else if (execOptions.mcp) {\n // MCP execution context\n toolContext = {\n ...baseContext,\n mcp: execOptions.mcp,\n };\n } else {\n // Direct execution or unknown context\n toolContext = baseContext;\n }\n\n const resumeData = execOptions.resumeData;\n\n if (resumeData) {\n const resumeValidation = validateToolInput(resumeSchema, resumeData, options.name);\n if (resumeValidation.error) {\n logger?.warn(resumeValidation.error.message);\n toolSpan?.end({ output: resumeValidation.error, attributes: { success: false } });\n return resumeValidation.error as any;\n }\n }\n\n result = await executeWithContext({ span: toolSpan, fn: async () => tool?.execute?.(args, toolContext) });\n }\n\n if (suspendData) {\n const suspendSchema = this.getSuspendSchema();\n const suspendValidation = validateToolSuspendData(suspendSchema, suspendData, options.name);\n if (suspendValidation.error) {\n logger?.warn(suspendValidation.error.message);\n toolSpan?.end({ output: suspendValidation.error, attributes: { success: false } });\n return suspendValidation.error as any;\n }\n }\n\n // Skip validation if suspend was called without a result\n const shouldSkipValidation = typeof result === 'undefined' && !!suspendData;\n if (shouldSkipValidation) {\n toolSpan?.end({ output: result, attributes: { success: true } });\n return result;\n }\n\n // Validate output for Vercel/AI SDK tools which don't have built-in validation\n // Mastra tools handle their own validation in Tool.execute() which properly\n // applies Zod transforms (e.g., .transform(), .pipe()) to the output\n if (isVercelTool(tool)) {\n const outputSchema = this.getOutputSchema();\n const outputValidation = validateToolOutput(outputSchema, result, options.name, false);\n if (outputValidation.error) {\n logger?.warn(outputValidation.error.message);\n toolSpan?.end({ output: outputValidation.error, attributes: { success: false } });\n return outputValidation.error;\n }\n result = outputValidation.data;\n }\n\n // Return result (validated for Vercel tools, already validated for Mastra tools)\n toolSpan?.end({ output: result, attributes: { success: true } });\n return result;\n } catch (error) {\n toolSpan?.error({ error: error as Error, attributes: { success: false } });\n throw error;\n }\n };\n\n return async (args: unknown, execOptions?: MastraToolInvocationOptions) => {\n let logger = options.logger || this.logger;\n\n // Create tool span early so validation failures are always observable.\n // Prefer execution-time tracingContext (passed at runtime for VNext methods)\n // Fall back to build-time context for Legacy methods (AI SDK v4 doesn't support passing custom options)\n const tracingContext = execOptions?.tracingContext || options.tracingContext;\n const toolRequestContext = execOptions?.requestContext ?? options.requestContext;\n const toolSpan = getOrCreateSpan({\n type: mcpMeta ? SpanType.MCP_TOOL_CALL : SpanType.TOOL_CALL,\n name: mcpMeta ? `mcp_tool: '${options.name}' on '${mcpMeta.serverName}'` : `tool: '${options.name}'`,\n input: args,\n entityType: EntityType.TOOL,\n entityId: options.name,\n entityName: options.name,\n attributes: mcpMeta\n ? {\n mcpServer: mcpMeta.serverName,\n serverVersion: mcpMeta.serverVersion,\n toolDescription: options.description,\n }\n : {\n toolDescription: options.description,\n toolType: logType || 'tool',\n },\n tracingPolicy: options.tracingPolicy,\n tracingContext: tracingContext,\n requestContext: toolRequestContext,\n mastra: options.mastra && 'observability' in options.mastra ? (options.mastra as Mastra) : undefined,\n });\n\n const fgaProvider = (options.mastra as any)?.getServer?.()?.fga;\n const user = toolRequestContext?.get('user');\n if (fgaProvider) {\n const { getAgentToolFGAResourceId, getMCPToolFGAResourceId, getStandaloneToolFGAResourceId, requireFGA } =\n await import('../../auth/ee/fga-check');\n const toolResourceId = mcpMeta?.serverName\n ? getMCPToolFGAResourceId(mcpMeta.serverName, options.name)\n : options.agentId\n ? getAgentToolFGAResourceId(options.agentId, options.name)\n : getStandaloneToolFGAResourceId(options.name);\n await requireFGA({\n fgaProvider,\n user,\n resource: { type: 'tool', id: toolResourceId },\n permission: MastraFGAPermissions.TOOLS_EXECUTE,\n requestContext: toolRequestContext,\n actor: execOptions?.actor,\n context: {\n resourceId: options.resourceId,\n },\n metadata: {\n toolName: options.name,\n agentId: options.agentId,\n agentName: options.agentName,\n runId: options.runId,\n threadId: options.threadId,\n executionResourceId: options.resourceId,\n mcpMetadata: mcpMeta,\n },\n });\n }\n\n try {\n logger.debug(start, { ...logData, ...rest, model: logModelObject, args });\n\n // When a tool is being resumed (resumeData present in execOptions), skip input\n // validation. The original args were already validated during the initial\n // execution, and during resume the tool's execute function checks resumeData\n // and returns early without using the input args.\n const isResuming = !!execOptions?.resumeData;\n\n // Validate input parameters if schema exists\n // Use the processed schema for validation if available, otherwise fall back to original\n const parameters = this.getParameters();\n if (!isResuming) {\n const { data, error } = validateToolInput(parameters, args, options.name);\n //suspendedToolRunId is only required when resumeData is provided\n const suspendedToolRunIdErrToIgnore =\n error?.message?.includes('suspendedToolRunId: Required') && !(args as Record<string, unknown>)?.resumeData;\n if (error && !suspendedToolRunIdErrToIgnore) {\n logger.warn('Tool input validation failed', { ...logData, validationError: error.message });\n toolSpan?.end({ output: error, attributes: { success: false } });\n return error;\n }\n // Use validated/transformed data\n args = data;\n }\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!, toolSpan);\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(err),\n argsJson: safeStringify(args),\n model: model?.modelId ?? '',\n },\n },\n err,\n );\n toolSpan?.error({ error: mastraError, attributes: { success: false } });\n logger.trackException(mastraError, { ...logData, ...rest, model: logModelObject, args });\n throw 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 const base = {\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 onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n };\n\n // For provider-defined tools, exclude execute and add name as per v5 spec\n if (builtTool.type === 'provider-defined') {\n const { execute, parameters, ...rest } = base;\n // Prefer the preserved provider name (e.g. \"web_search\" from V5 SDK\n // factories) over the ID-derived name (e.g. \"web_search_20250305\").\n const name =\n ('name' in builtTool && typeof builtTool.name === 'string' ? builtTool.name : null) ||\n builtTool.id.split('.')[1] ||\n builtTool.id;\n return {\n ...rest,\n type: builtTool.type,\n id: builtTool.id,\n name,\n args: builtTool.args,\n } as VercelToolV5;\n }\n\n return base as VercelToolV5;\n }\n\n build(): CoreTool {\n const providerTool = this.buildProviderTool(this.originalTool);\n if (providerTool) {\n return providerTool;\n }\n const model = this.options.model;\n\n const schemaCompatLayers = [];\n\n if (model) {\n // Respect the model's own capability flag; do not disable it based solely on specificationVersion.\n const supportsStructuredOutputs =\n 'supportsStructuredOutputs' in model ? (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 originalSchema = this.getParameters();\n let processedInputSchema: Schema | undefined;\n\n if (originalSchema) {\n if (isStandardSchemaWithJSON(originalSchema)) {\n // Find the first applicable compatibility layer\n const applicableLayer = schemaCompatLayers.find(layer => layer.shouldApply());\n\n let schemaToUse: StandardSchemaWithJSON;\n if (applicableLayer) {\n schemaToUse = applicableLayer.processToCompatSchema(originalSchema as any);\n } else {\n schemaToUse = toStandardSchema(originalSchema);\n }\n\n processedInputSchema = jsonSchema(\n standardSchemaToJSONSchema(schemaToUse, {\n io: 'input',\n }),\n {\n validate: (value: unknown) => {\n const result = schemaToUse['~standard'].validate(value);\n // standard-schema validate may return a Promise\n if (result instanceof Promise) {\n return result.then(r => {\n if ('issues' in r && r.issues) {\n return {\n success: false as const,\n error: new Error(r.issues.map((i: any) => i.message).join(', ')),\n };\n }\n return { success: true as const, value: (r as { value: unknown }).value };\n });\n }\n // standard-schema returns { value } on success or { issues } on failure,\n // but AI SDK expects { success: boolean, value/error }\n if ('issues' in result && result.issues) {\n return {\n success: false as const,\n error: new Error(result.issues.map((i: any) => i.message).join(', ')),\n };\n }\n return { success: true as const, value: (result as { value: unknown }).value };\n },\n },\n );\n } else {\n processedInputSchema = applyCompatLayer({\n schema: originalSchema,\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n }\n }\n\n const outputSchema = this.getOutputSchema();\n let processedOutputSchema;\n\n if (outputSchema) {\n if (isStandardSchemaWithJSON(outputSchema)) {\n processedOutputSchema = standardSchemaToJSONSchema(outputSchema, { io: 'output' });\n } else {\n processedOutputSchema = applyCompatLayer({\n schema: outputSchema,\n compatLayers: [],\n mode: 'aiSdkSchema',\n });\n }\n }\n\n // Map AI SDK's needsApproval to our requireApproval\n // needsApproval can be boolean or a function that takes input and returns boolean\n let requireApproval = false;\n let needsApprovalFn: NeedsApprovalFn | undefined;\n\n if (typeof this.options.requireApproval === 'function') {\n requireApproval = true;\n needsApprovalFn = this.options.requireApproval;\n } else if (typeof this.options.requireApproval === 'boolean') {\n requireApproval = this.options.requireApproval;\n needsApprovalFn = undefined;\n }\n\n if (isVercelTool(this.originalTool) && 'needsApproval' in this.originalTool) {\n const needsApproval = (this.originalTool as any).needsApproval;\n if (typeof needsApproval === 'boolean') {\n requireApproval = needsApproval;\n needsApprovalFn = undefined;\n } else if (typeof needsApproval === 'function') {\n // Store the function to evaluate it per-call\n needsApprovalFn = needsApproval;\n // Set requireApproval to true so the tool-call-step knows to check the function\n requireApproval = true;\n }\n }\n\n // Preserve a needsApprovalFn that was attached directly to the tool instance\n // (e.g. MCP tools wrap a server-level `requireToolApproval` function and set\n // `needsApprovalFn` on the tool while keeping `requireApproval` as a boolean).\n // The branches above only derive needsApprovalFn from options/AI SDK shapes, so\n // without this it would be dropped during conversion and conditional approval\n // would silently fall back to the boolean flag.\n const instanceNeedsApprovalFn = getNeedsApprovalFn(this.originalTool);\n if (!needsApprovalFn && instanceNeedsApprovalFn) {\n needsApprovalFn = instanceNeedsApprovalFn;\n // Ensure the tool-call-step knows to evaluate the function per call.\n requireApproval = true;\n }\n\n const definition = {\n type: 'function' as const,\n description: this.originalTool.description,\n requireApproval,\n needsApprovalFn,\n hasSuspendSchema: !!this.getSuspendSchema(),\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 return {\n ...definition,\n id: 'id' in this.originalTool ? this.originalTool.id : undefined,\n parameters: processedInputSchema ?? z.object({}),\n outputSchema: processedOutputSchema,\n strict: 'strict' in this.originalTool ? this.originalTool.strict : undefined,\n providerOptions: 'providerOptions' in this.originalTool ? this.originalTool.providerOptions : undefined,\n mcp: 'mcp' in this.originalTool ? this.originalTool.mcp : undefined,\n toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n transform: 'transform' in this.originalTool ? this.originalTool.transform : undefined,\n inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\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 onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n // Preserve tool-level background config so the agentic loop can pick it up\n // from the converted CoreTool at dispatch time.\n backgroundConfig: this.options.backgroundConfig,\n } as unknown as CoreTool;\n }\n}\n","import { createHash } from 'node:crypto';\nimport type { CoreMessage } from '@internal/ai-sdk-v4';\nimport { jsonSchemaToZod } from '@mastra/schema-compat/json-to-zod';\nimport { z } from 'zod/v4';\nimport type { MastraPrimitives } from './action';\nimport type { ToolsInput } from './agent';\nimport type { ToolBackgroundConfig } from './background-tasks';\nimport type { MastraBrowser } from './browser/browser';\nimport { ErrorCategory, ErrorDomain, MastraError } from './error';\nimport type { MastraLanguageModel, MastraLegacyLanguageModel } from './llm/model/shared.types';\nimport type { IMastraLogger } from './logger';\nimport type { Mastra } from './mastra';\nimport type { AiMessageType, MastraMemory } from './memory';\nimport type { ObservabilityContext, TracingPolicy } from './observability';\nimport type { RequestContext } from './request-context';\nimport type { CoreTool, VercelTool, VercelToolV5 } from './tools';\nimport { Tool } from './tools/tool';\nimport { CoreToolBuilder } from './tools/tool-builder/builder';\nimport type { ToolToConvert } from './tools/tool-builder/builder';\nimport { isVercelTool } from './tools/toolchecks';\nimport type { OutputWriter } from './workflows/types';\nimport type { Workspace } from './workspace/workspace';\n\n// Re-export Zod utilities for external use (isZodType is defined locally below)\nexport { getZodTypeName, getZodDef, isZodArray, isZodObject } from './utils/zod-utils';\nexport { fetchWithRetry } from './utils/fetchWithRetry';\nexport type { FetchWithRetryOptions } from './utils/fetchWithRetry';\n\nexport { ensureSerializable, safeStringify } from './utils/safe-stringify';\nexport { deepEqual } from './utils/deep-equal';\n\nexport const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n/**\n * Checks if a value is a plain object (not an array, function, Date, RegExp, etc.)\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Deep merges two objects, recursively merging nested plain objects.\n * Arrays, functions, and other non-plain objects are replaced (not merged).\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 as Record<string, unknown>)[key];\n const sourceValue = (source as Record<string, unknown>)[key];\n\n // Only deep merge if both values are plain objects\n if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n (output as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else if (sourceValue !== undefined) {\n // For arrays, functions, primitives, and other non-plain objects: replace\n (output as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return output;\n}\n\n/**\n * Generate an empty object from a JSON Schema definition.\n * Accepts both a JSON string and a pre-parsed object.\n * Recursively initializes nested object properties and respects default values.\n */\nexport function generateEmptyFromSchema(schema: string | Record<string, unknown>): Record<string, unknown> {\n try {\n const parsedSchema = typeof schema === 'string' ? JSON.parse(schema) : schema;\n if (!parsedSchema || parsedSchema.type !== 'object' || !parsedSchema.properties) return {};\n const obj: Record<string, unknown> = {};\n for (const [key, prop] of Object.entries<Record<string, unknown>>(\n parsedSchema.properties as Record<string, Record<string, unknown>>,\n )) {\n if (prop.default !== undefined) {\n obj[key] =\n typeof prop.default === 'object' && prop.default !== null\n ? JSON.parse(JSON.stringify(prop.default))\n : prop.default;\n } else if (prop.type === 'object' && prop.properties) {\n obj[key] = generateEmptyFromSchema(prop);\n } else if (prop.type === 'object') {\n obj[key] = {};\n } else if (prop.type === 'string') {\n obj[key] = '';\n } else if (prop.type === 'array') {\n obj[key] = [];\n } else if (prop.type === 'number' || prop.type === 'integer') {\n obj[key] = 0;\n } else if (prop.type === 'boolean') {\n obj[key] = false;\n } else {\n obj[key] = null;\n }\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 extends Partial<ObservabilityContext> {\n name: string;\n runId?: string;\n threadId?: string;\n resourceId?: string;\n logger?: IMastraLogger;\n description?: string;\n mastra?: (Mastra & MastraPrimitives) | MastraPrimitives;\n requestContext: RequestContext;\n tracingPolicy?: TracingPolicy;\n memory?: MastraMemory;\n agentName?: string;\n agentId?: string;\n model?: MastraLanguageModel | MastraLegacyLanguageModel;\n /**\n * Optional async writer used to stream tool output chunks back to the caller. Tools should treat this as fire-and-forget I/O.\n */\n outputWriter?: OutputWriter;\n requireApproval?:\n | boolean\n | ((\n input: any,\n ctx?: { requestContext?: Record<string, unknown>; workspace?: Workspace },\n ) => boolean | Promise<boolean>);\n // Workflow-specific properties\n workflow?: any;\n workflowId?: string;\n state?: any;\n setState?: (state: any) => void;\n /**\n * Workspace available for tool execution. When provided, tools can access\n * workspace.filesystem and workspace.sandbox for file operations and command execution.\n */\n workspace?: Workspace;\n backgroundConfig?: ToolBackgroundConfig;\n /**\n * Browser available for tool execution. When provided, tools can access\n * browser capabilities for web automation, screenshots, and data extraction.\n */\n browser?: MastraBrowser;\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 // Check if the tool already has inputSchema (v5 format)\n // If it does, use it directly (it might be a function)\n // Otherwise, convert the parameters to inputSchema\n const inputSchema = 'inputSchema' in tool ? tool.inputSchema : convertVercelToolParameters(tool);\n\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\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 // Check if the tool is a plain function (not a Tool instance or Vercel tool)\n // This catches the common mistake of passing a tool factory function instead of the tool itself\n // We need to cast to unknown first since ToolsInput doesn't include functions in its type,\n // but users can still pass functions at runtime which causes silent failures\n if (typeof tool === 'function' && !((tool as unknown) instanceof Tool) && !isVercelTool(tool)) {\n throw new MastraError({\n id: 'TOOL_INVALID_FORMAT',\n domain: ErrorDomain.TOOL,\n category: ErrorCategory.USER,\n text: `Tool \"${key}\" is not a valid tool format. Tools must be created using createTool() or be a valid Vercel AI SDK tool. Received a function.`,\n });\n }\n\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 // Handle case where parameters (or inputSchema in v5) is a function that returns a schema\n let schema = tool.parameters ?? z.object({});\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\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 autoResumeSuspendedTools?: boolean,\n backgroundTaskEnabled?: boolean,\n): CoreTool {\n return new CoreToolBuilder({\n originalTool,\n options,\n logType,\n autoResumeSuspendedTools,\n backgroundTaskEnabled,\n }).build();\n}\n\nexport function makeCoreToolV5(\n originalTool: ToolToConvert,\n options: ToolOptions,\n logType?: 'tool' | 'toolset' | 'client-tool',\n autoResumeSuspendedTools?: boolean,\n backgroundTaskEnabled?: boolean,\n): VercelToolV5 {\n return new CoreToolBuilder({\n originalTool,\n options,\n logType,\n autoResumeSuspendedTools,\n backgroundTaskEnabled,\n }).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 === '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 'listAgents' instead, agents is deprecated\");\n return Reflect.apply(target.listAgents, 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\n/**\n * Removes specific keys from an object.\n * @param obj - The original object\n * @param keysToOmit - Keys to exclude from the returned object\n * @returns A new object with the specified keys removed\n */\nexport function omitKeys<T extends Record<string, any>>(obj: T, keysToOmit: string[]): Partial<T> {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToOmit.includes(key))) as Partial<T>;\n}\n\n/**\n * Selectively extracts specific fields from an object using dot notation.\n * Does not error if fields don't exist - simply omits them from the result.\n * @param obj - The source object to extract fields from\n * @param fields - Array of field paths (supports dot notation like 'output.text')\n * @returns New object containing only the specified fields\n */\nexport function selectFields(obj: any, fields: string[]): any {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n const result: any = {};\n\n for (const field of fields) {\n const value = getNestedValue(obj, field);\n if (value !== undefined) {\n setNestedValue(result, field, value);\n }\n }\n\n return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation\n * @param obj - Source object\n * @param path - Dot notation path (e.g., 'output.text')\n * @returns The value at the path, or undefined if not found\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && typeof current === 'object' ? current[key] : undefined;\n }, obj);\n}\n\n/**\n * Sets a nested value in an object using dot notation\n * @param obj - Target object\n * @param path - Dot notation path (e.g., 'output.text')\n * @param value - Value to set\n */\nexport function setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n\n // Validate every segment up-front so we never walk or assign through\n // a prototype-mutating key like \"__proto__\", \"constructor\", or \"prototype\".\n for (const key of keys) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n }\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n return;\n }\n\n let current = obj;\n for (const key of keys) {\n const existing = Object.prototype.hasOwnProperty.call(current, key) ? current[key] : undefined;\n if (existing === null || typeof existing !== 'object') {\n // Use a null-prototype object so intermediate containers cannot be\n // used as a prototype-pollution sink even if a sanitizer check is\n // bypassed upstream.\n const container = Object.create(null);\n Object.defineProperty(current, key, { value: container, writable: true, enumerable: true, configurable: true });\n }\n current = current[key];\n }\n\n Object.defineProperty(current, lastKey, { value, writable: true, enumerable: true, configurable: true });\n}\n\nexport const removeUndefinedValues = (obj: Record<string, any>) => {\n return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined));\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils-CrKEOVUo.js","names":["isZodType"],"sources":["../src/tools/tool-builder/builder.ts","../src/utils.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { ProviderDefinedTool, ToolExecutionOptions } from '@internal/external-types';\nimport {\n OpenAIReasoningSchemaCompatLayer,\n OpenAISchemaCompatLayer,\n GoogleSchemaCompatLayer,\n AnthropicSchemaCompatLayer,\n DeepSeekSchemaCompatLayer,\n MetaSchemaCompatLayer,\n applyCompatLayer,\n convertZodSchemaToAISDKSchema,\n jsonSchema,\n} from '@mastra/schema-compat';\nimport type { JSONSchema7Definition } from 'json-schema';\nimport { z } from 'zod/v4';\nimport { MastraFGAPermissions } from '../../auth/ee';\nimport { backgroundOverrideJsonSchema, backgroundOverrideZodSchema } from '../../background-tasks';\nimport { MastraBase } from '../../base';\nimport { ErrorCategory, MastraError, ErrorDomain } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport { SpanType, wrapMastra, EntityType, getOrCreateSpan, createObservabilityContext } from '../../observability';\nimport type { AnySpan } from '../../observability';\nimport { executeWithContext } from '../../observability/utils';\nimport { RequestContext } from '../../request-context';\nimport { isStandardSchemaWithJSON, toStandardSchema, standardSchemaToJSONSchema } from '../../schema';\nimport type { StandardSchemaWithJSON } from '../../schema';\nimport { getNeedsApprovalFn, isVercelTool, isProviderDefinedTool } from '../../tools/toolchecks';\nimport type { ToolOptions } from '../../utils';\nimport { safeStringify } from '../../utils';\nimport { isZodObject, safeExtendZodObject } from '../../utils/zod-utils';\n\nimport type { SuspendOptions } from '../../workflows';\nimport { ToolStream } from '../stream';\nimport type {\n CoreTool,\n McpMetadata,\n MastraToolInvocationOptions,\n NeedsApprovalFn,\n ToolAction,\n VercelTool,\n VercelToolV5,\n} from '../types';\nimport { noopObserve } from '../types';\nimport { validateToolInput, validateToolOutput, validateToolSuspendData } from '../validation';\n\n/**\n * Merge two RequestContexts so non-serializable values survive the evented\n * workflow engine's toJSON/reconstruct cycle.\n *\n * The evented engine serialises the RequestContext via `toJSON()` when\n * publishing workflow events. Values that fail `JSON.stringify` (functions,\n * objects with circular references — e.g. the `controller` context) are silently\n * dropped. The reconstructed RC handed to steps is therefore *degraded*.\n *\n * Tools, however, also hold a reference to the *original* RC captured during\n * tool conversion (the \"closure\" RC). By merging both — exec first, then\n * closure on top — keys that survived serialisation are preserved while\n * non-serializable keys from the closure (like `controller`) are restored.\n */\nfunction mergeRequestContexts(\n closureRC: RequestContext | undefined,\n execRC: RequestContext | undefined,\n): RequestContext {\n if (closureRC && closureRC === execRC) return closureRC;\n if (!closureRC && !execRC) return new RequestContext();\n if (!closureRC) return execRC instanceof RequestContext ? execRC : new RequestContext();\n if (!execRC || !(execRC instanceof RequestContext) || execRC.size() === 0) return closureRC;\n\n const merged = new RequestContext();\n // Start with the evented engine's serialised snapshot\n for (const [key, value] of execRC.entries()) {\n merged.set(key, value);\n }\n // Overlay closure values — restores non-serializable keys and ensures the\n // authoritative (non-degraded) copy wins for keys present in both.\n for (const [key, value] of closureRC.entries()) {\n merged.set(key, value);\n }\n return merged;\n}\n\n/**\n * Types that can be converted to Mastra tools.\n * Includes provider-defined tools from external packages via ProviderDefinedTool.\n */\nexport type ToolToConvert = VercelTool | ToolAction<any, any, any> | VercelToolV5 | ProviderDefinedTool;\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 logData: Record<string, unknown>;\n}\n\n/**\n * Detect Zod v4 schemas. Zod v3 stores the type name as `_def.typeName`\n * (e.g. \"ZodObject\"); Zod v4 stores it as `_def.type` (e.g. \"object\"). We\n * cannot use `instanceof` here because both Zod versions may be loaded in the\n * same process and the prototype identity is not guaranteed.\n */\nfunction isZodV4Schema(schema: unknown): boolean {\n const def = (schema as any)?._def;\n return !!def && typeof def.type === 'string' && !def.typeName;\n}\n\n/**\n * Build a Standard Schema that:\n * - exposes the spliced JSON Schema (with `_background`/`suspendedToolRunId`/\n * `resumeData` properties added) so provider compat layers see the override\n * fields when serializing the tool to an LLM, and\n * - delegates runtime `validate` to the *original* schema so Zod v3\n * `.transform()` / `.default()` / `.refine()` and other Standard Schema\n * parsing behavior still run before `execute()` sees the args.\n *\n * Injected override keys (`_background`, `suspendedToolRunId`, `resumeData`)\n * are stripped from the input before delegating, then merged back into the\n * validated value so the inner `execute()` still receives them — matching the\n * Zod v4 `.extend()` path's behavior.\n *\n * If the original schema has no `~standard.validate` (e.g. a raw JSON Schema\n * with no Standard Schema wrapper), fall back to validating against the\n * spliced JSON Schema directly.\n */\nfunction buildJsonOverrideSchema(\n originalSchema: unknown,\n splicedJsonSchema: JSONSchema7Definition,\n injectedKeys: readonly string[],\n): StandardSchemaWithJSON {\n const fallback = toStandardSchema(splicedJsonSchema as any);\n const original = originalSchema as { '~standard'?: { validate?: (v: unknown) => any } } | undefined;\n const originalValidate = original?.['~standard']?.validate?.bind(original['~standard']);\n\n // Standard Schema for *just* the injected override fields, so we can validate\n // malformed override payloads (e.g. `_background: { enabled: \"yes\" }`) before\n // merging them into the result. Matches the Zod v4 `.extend()` path's\n // behavior, which validates these fields as part of the object.\n // See https://github.com/mastra-ai/mastra/pull/16915#discussion_r3282600679\n const splicedProperties =\n splicedJsonSchema && typeof splicedJsonSchema === 'object' && 'properties' in splicedJsonSchema\n ? ((splicedJsonSchema.properties ?? {}) as Record<string, JSONSchema7Definition>)\n : {};\n const injectedProperties: Record<string, JSONSchema7Definition> = {};\n for (const key of injectedKeys) {\n if (splicedProperties[key] !== undefined) injectedProperties[key] = splicedProperties[key];\n }\n const injectedValidator = toStandardSchema({\n type: 'object',\n properties: injectedProperties,\n additionalProperties: false,\n } as any);\n\n const stripInjected = (input: unknown) => {\n if (!input || typeof input !== 'object' || Array.isArray(input)) return { stripped: input, injected: {} };\n const injected: Record<string, unknown> = {};\n const stripped: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(input as Record<string, unknown>)) {\n if (injectedKeys.includes(k)) injected[k] = v;\n else stripped[k] = v;\n }\n return { stripped, injected };\n };\n\n const validate = (input: unknown) => {\n const { stripped, injected } = stripInjected(input);\n\n const baseResult = originalValidate\n ? (originalValidate(stripped) as\n | { value: unknown }\n | { issues: readonly unknown[] }\n | Promise<{ value: unknown } | { issues: readonly unknown[] }>)\n : fallback['~standard'].validate(stripped);\n\n const injectedResult = injectedValidator['~standard'].validate(injected);\n\n const combine = (\n base: { value: unknown } | { issues: readonly unknown[] },\n inj: { value: unknown } | { issues: readonly unknown[] },\n ) => {\n const baseIssues = 'issues' in base ? (base.issues ?? []) : [];\n const injIssues = 'issues' in inj ? (inj.issues ?? []) : [];\n if (baseIssues.length || injIssues.length) {\n return { issues: [...baseIssues, ...injIssues] };\n }\n const baseValue = (base as { value: unknown }).value;\n const injValue = (inj as { value: unknown }).value;\n if (baseValue && typeof baseValue === 'object' && !Array.isArray(baseValue)) {\n const injMerged =\n injValue && typeof injValue === 'object' && !Array.isArray(injValue)\n ? (injValue as Record<string, unknown>)\n : injected;\n return { value: { ...(baseValue as Record<string, unknown>), ...injMerged } };\n }\n return base;\n };\n\n const baseIsPromise = baseResult && typeof (baseResult as Promise<unknown>).then === 'function';\n const injIsPromise = injectedResult && typeof (injectedResult as Promise<unknown>).then === 'function';\n if (baseIsPromise || injIsPromise) {\n return Promise.all([baseResult, injectedResult]).then(([b, i]) =>\n combine(\n b as { value: unknown } | { issues: readonly unknown[] },\n i as { value: unknown } | { issues: readonly unknown[] },\n ),\n );\n }\n return combine(\n baseResult as { value: unknown } | { issues: readonly unknown[] },\n injectedResult as { value: unknown } | { issues: readonly unknown[] },\n );\n };\n\n return {\n '~standard': {\n version: 1,\n vendor: 'mastra-json-override',\n validate,\n jsonSchema: fallback['~standard'].jsonSchema,\n },\n } as StandardSchemaWithJSON;\n}\n\nexport class CoreToolBuilder extends MastraBase {\n private originalTool: ToolToConvert;\n private options: ToolOptions;\n private logType?: LogType;\n\n constructor(input: {\n originalTool: ToolToConvert;\n options: ToolOptions;\n logType?: LogType;\n autoResumeSuspendedTools?: boolean;\n backgroundTaskEnabled?: boolean;\n }) {\n super({ name: 'CoreToolBuilder' });\n this.originalTool = input.originalTool;\n this.options = input.options;\n this.logType = input.logType;\n\n // Only inject the `_background` override schema for tools that are actually\n // eligible for background execution — otherwise every user tool's input\n // schema would be mutated with a v4 Zod field, which breaks v3-authored\n // tools (keyValidator._parse crashes in schema-compat validation).\n const isBackgroundEligible = !!input.backgroundTaskEnabled;\n const isResumableTool =\n input.autoResumeSuspendedTools ||\n (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('agent-') ||\n (this.originalTool as unknown as ToolAction<any, any>).id?.startsWith('workflow-');\n\n if (!isVercelTool(this.originalTool) && !isProviderDefinedTool(this.originalTool)) {\n if (isBackgroundEligible || isResumableTool) {\n let schema = this.originalTool.inputSchema;\n if (typeof schema === 'function') {\n schema = schema();\n }\n if (!schema) {\n schema = z.object({});\n }\n\n // Preferred path: when the user's input schema is a Zod v4 ZodObject\n // (the common case for tools authored with `zod` / `zod/v4`), keep using\n // `.extend()`. This preserves the exact JSON Schema shape that existing\n // provider compat layers + LLM recordings expect.\n //\n // Fallback path: for everything else (Zod v3 ZodObject, raw JSON Schema,\n // `JsonSchemaWrapper`, etc.) splice the override fields directly into a\n // JSON Schema. Mixing a Zod v4 wrapper (`backgroundOverrideZodSchema`,\n // `.nullable()`, `.optional()`) into a Zod v3 ZodObject's `.shape` is\n // what triggered the original crash:\n // `TypeError: keyValidator._parse is not a function`.\n if (isZodObject(schema) && isZodV4Schema(schema)) {\n let nextSchema: z.ZodObject<any> = schema as z.ZodObject<any>;\n if (isBackgroundEligible) {\n nextSchema = safeExtendZodObject(nextSchema, {\n _background: backgroundOverrideZodSchema,\n });\n }\n if (isResumableTool) {\n nextSchema = safeExtendZodObject(nextSchema, {\n suspendedToolRunId: z.string().describe('The runId of the suspended tool').nullable().optional(),\n resumeData: z\n .any()\n .describe('The resumeData object created from the resumeSchema of suspended tool')\n .optional(),\n });\n }\n this.originalTool.inputSchema = nextSchema;\n } else {\n // Normalize to Standard Schema, extract JSON Schema, splice overrides.\n const standardSchema = isStandardSchemaWithJSON(schema) ? schema : toStandardSchema(schema);\n const jsonSchema = standardSchemaToJSONSchema(standardSchema, { io: 'input' });\n\n if (jsonSchema && typeof jsonSchema === 'object' && jsonSchema.type === 'object') {\n const properties: Record<string, JSONSchema7Definition> = { ...(jsonSchema.properties ?? {}) };\n const injectedKeys: string[] = [];\n\n if (isBackgroundEligible) {\n properties._background = backgroundOverrideJsonSchema;\n injectedKeys.push('_background');\n }\n if (isResumableTool) {\n // Match the pre-PR JSON Schema shape so existing provider compat\n // layers + LLM recordings collapse it identically.\n properties.suspendedToolRunId = {\n type: ['string', 'null'],\n description: 'The runId of the suspended tool',\n };\n properties.resumeData = {\n description: 'The resumeData object created from the resumeSchema of suspended tool',\n };\n injectedKeys.push('suspendedToolRunId', 'resumeData');\n }\n\n // Preserve the original schema's runtime validator (Zod v3\n // `.transform()` / `.default()` / `.refine()` etc.) while exposing\n // the spliced JSON Schema for provider serialization. See\n // https://github.com/mastra-ai/mastra/pull/16915#discussion_r3282520408\n this.originalTool.inputSchema = buildJsonOverrideSchema(\n schema,\n { ...jsonSchema, properties },\n injectedKeys,\n );\n }\n }\n }\n }\n }\n\n // Helper to get parameters based on tool type\n private getParameters = () => {\n if (isVercelTool(this.originalTool)) {\n // Handle both 'parameters' (v4) and 'inputSchema' (v5) properties\n // Also handle case where the schema is a function that returns a schema\n let schema =\n this.originalTool.parameters ??\n ('inputSchema' in this.originalTool ? (this.originalTool as any).inputSchema : undefined) ??\n z.object({});\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n\n // For Mastra tools, inputSchema might also be a function\n let schema = this.originalTool.inputSchema;\n\n if (isStandardSchemaWithJSON(schema)) {\n return schema;\n }\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n };\n\n private getOutputSchema = () => {\n if ('outputSchema' in this.originalTool) {\n let schema = this.originalTool.outputSchema;\n\n if (isStandardSchemaWithJSON(schema)) {\n return schema;\n }\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n\n return null;\n };\n\n private getResumeSchema = () => {\n if ('resumeSchema' in this.originalTool) {\n let schema = this.originalTool.resumeSchema;\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n return null;\n };\n\n private getSuspendSchema = () => {\n if ('suspendSchema' in this.originalTool) {\n let schema = this.originalTool.suspendSchema;\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\n return schema;\n }\n return null;\n };\n\n // For provider-defined tools, we need to include all required properties\n // AI SDK v5 uses type: 'provider-defined', AI SDK v6 uses type: 'provider'\n private buildProviderTool(tool: ToolToConvert): (CoreTool & { id: `${string}.${string}` }) | undefined {\n if (\n 'type' in tool &&\n (tool.type === 'provider-defined' || tool.type === 'provider') &&\n 'id' in tool &&\n typeof tool.id === 'string' &&\n tool.id.includes('.')\n ) {\n // Get schema directly from provider-defined tool (v4 uses parameters, v5 uses inputSchema)\n let parameters: unknown =\n 'parameters' in tool ? tool.parameters : 'inputSchema' in tool ? (tool as any).inputSchema : undefined;\n\n // If schema is a function, call it to get the actual schema\n if (typeof parameters === 'function') {\n parameters = parameters();\n }\n\n // Get output schema directly from provider-defined tool\n let outputSchema: unknown = 'outputSchema' in tool ? (tool as any).outputSchema : undefined;\n\n // If schema is a function, call it to get the actual schema\n if (typeof outputSchema === 'function') {\n outputSchema = outputSchema();\n }\n\n // Convert parameters to AI SDK Schema format\n let processedParameters;\n if (parameters !== undefined && parameters !== null) {\n if (typeof parameters === 'object' && 'jsonSchema' in parameters) {\n // Already in AI SDK Schema format\n processedParameters = parameters;\n } else if (isStandardSchemaWithJSON(parameters)) {\n // StandardSchemaWithJSON - extract the JSON schema and wrap it\n // Use input since parameters represent tool input\n const jsonSchema = standardSchemaToJSONSchema(parameters, { io: 'input' });\n processedParameters = { jsonSchema };\n } else {\n // Assume Zod schema - convert to AI SDK Schema\n processedParameters = convertZodSchemaToAISDKSchema(parameters as any);\n }\n } else {\n // No schema provided - create default empty object schema for AI SDK v1 compatibility\n // OpenAI requires at minimum type: \"object\" even for tools without parameters\n processedParameters = {\n jsonSchema: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n };\n }\n\n // Convert output schema to AI SDK Schema format if present\n let processedOutputSchema;\n if (outputSchema !== undefined && outputSchema !== null) {\n if (typeof outputSchema === 'object' && 'jsonSchema' in outputSchema) {\n // Already in AI SDK Schema format\n processedOutputSchema = outputSchema;\n } else if (isStandardSchemaWithJSON(outputSchema)) {\n // StandardSchemaWithJSON - extract the JSON schema and wrap it\n const jsonSchema = standardSchemaToJSONSchema(outputSchema);\n processedOutputSchema = { jsonSchema };\n } else {\n // Assume Zod schema - convert to AI SDK Schema\n processedOutputSchema = convertZodSchemaToAISDKSchema(outputSchema as any);\n }\n }\n\n return {\n ...(processedOutputSchema ? { outputSchema: processedOutputSchema } : {}),\n type: 'provider-defined' as const,\n id: tool.id as `${string}.${string}`,\n // V5 SDK factories set a hardcoded `name` (e.g. \"web_search\" for\n // anthropic.web_search_20250305). Preserve it so that when this tool\n // is later used with a V6 provider, the bidirectional toolNameMapping\n // resolves the correct model-facing name instead of the versioned ID.\n ...('name' in tool && typeof tool.name === 'string' ? { name: tool.name } : {}),\n args: ('args' in this.originalTool ? this.originalTool.args : {}) as Record<string, unknown>,\n description: tool.description,\n parameters: processedParameters,\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 toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n transform: 'transform' in this.originalTool ? this.originalTool.transform : undefined,\n inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\n } as unknown as (CoreTool & { id: `${string}.${string}` }) | undefined;\n }\n\n return undefined;\n }\n\n private createLogMessageOptions({ agentName, toolName, type }: LogOptions): LogMessageOptions {\n const toolType = type === 'toolset' ? 'toolset' : 'tool';\n return {\n start: `Executing ${toolType}`,\n error: `Failed ${toolType} execution`,\n logData: { agent: agentName, tool: toolName },\n };\n }\n\n private createExecute(tool: ToolToConvert, options: ToolOptions, logType?: 'tool' | 'toolset' | 'client-tool') {\n // don't add memory, mastra, or tracing context to logging (tracingContext may contain sensitive observability credentials)\n const {\n logger,\n mastra: _mastra,\n memory: _memory,\n requestContext,\n model,\n tracingContext: _tracingContext,\n tracingPolicy: _tracingPolicy,\n ...rest\n } = options;\n const logModelObject = {\n modelId: model?.modelId,\n provider: model?.provider,\n specificationVersion: model?.specificationVersion,\n };\n\n const { start, logData } = this.createLogMessageOptions({\n agentName: options.agentName,\n toolName: options.name,\n type: logType,\n });\n\n // Extract MCP metadata once with proper typing to avoid repeated unsafe casts\n const mcpMeta =\n !isVercelTool(tool) && 'mcpMetadata' in tool ? (tool as { mcpMetadata?: McpMetadata }).mcpMetadata : undefined;\n\n const execFunction = async (args: unknown, execOptions: MastraToolInvocationOptions, toolSpan?: AnySpan) => {\n try {\n let result;\n let suspendData = null;\n\n if (isVercelTool(tool)) {\n // Handle Vercel tools (AI SDK tools)\n result = await executeWithContext({\n span: toolSpan,\n fn: async () => tool?.execute?.(args, execOptions as ToolExecutionOptions),\n });\n } else {\n // Handle Mastra tools - wrap mastra instance with tracing context for context propagation\n\n /**\n * MASTRA INSTANCE TYPES IN TOOL EXECUTION:\n *\n * Full Mastra & MastraPrimitives (has getAgent, getWorkflow, etc.):\n * - Auto-generated workflow tools from agent.listWorkflows()\n * - These get this.#mastra directly and can be wrapped\n *\n * MastraPrimitives only (limited interface):\n * - Memory tools (from memory.listTools())\n * - Assigned tools (agent.tools)\n * - Toolset tools (from toolsets)\n * - Client tools (passed as tools in generate/stream options)\n * - These get mastraProxy and have limited functionality\n *\n * TODO: Consider providing full Mastra instance to more tool types for enhanced functionality\n */\n // Wrap mastra with tracing context - wrapMastra will handle whether it's a full instance or primitives\n const wrappedMastra = options.mastra ? wrapMastra(options.mastra, { currentSpan: toolSpan }) : options.mastra;\n\n const resumeSchema = this.getResumeSchema();\n // Pass raw args as first parameter, context as second\n // Properly structure context based on execution source\n const baseContext = {\n threadId: options.threadId,\n resourceId: options.resourceId,\n mastra: wrappedMastra,\n memory: options.memory,\n runId: options.runId,\n requestContext: mergeRequestContexts(options.requestContext, execOptions.requestContext),\n actor: execOptions.actor,\n // Workspace for file operations and command execution\n // Execution-time workspace (from prepareStep/processInputStep) takes precedence over build-time workspace\n workspace: execOptions.workspace ?? options.workspace,\n // Browser for web automation (lazily initialized on first use)\n browser: options.browser,\n observe: execOptions.observe ?? noopObserve,\n writer: new ToolStream(\n {\n prefix: 'tool',\n callId: execOptions.toolCallId,\n name: options.name,\n runId: options.runId!,\n },\n options.outputWriter || execOptions.outputWriter,\n ),\n ...createObservabilityContext({ currentSpan: toolSpan }),\n abortSignal: execOptions.abortSignal,\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n const newSuspendOptions = {\n ...(suspendOptions ?? {}),\n resumeSchema:\n suspendOptions?.resumeSchema ??\n (resumeSchema\n ? JSON.stringify(standardSchemaToJSONSchema(toStandardSchema(resumeSchema), { io: 'input' }))\n : undefined),\n };\n return execOptions.suspend?.(args, newSuspendOptions);\n },\n resumeData: execOptions.resumeData,\n };\n\n // Check if this is agent execution\n // Agent execution takes precedence over workflow execution because agents may\n // use workflows internally for their agentic loop\n // Note: AI SDK v4 doesn't pass toolCallId/messages, so we also check for agentName and threadId\n const isAgentExecution =\n (execOptions.toolCallId && execOptions.messages) ||\n (options.agentName && options.threadId && !options.workflowId);\n\n // Check if this is workflow execution (has workflow properties in options)\n // Only consider it workflow execution if it's NOT agent execution\n const isWorkflowExecution = !isAgentExecution && (options.workflow || options.workflowId);\n\n let toolContext;\n if (isAgentExecution) {\n // Nest agent-specific properties under 'agent' key\n // Do NOT include workflow context even if workflow properties exist\n // (agents use workflows internally but tools should see agent context)\n const { suspend, resumeData, threadId, resourceId, ...restBaseContext } = baseContext;\n toolContext = {\n ...restBaseContext,\n agent: {\n agentId: options.agentId || '',\n toolCallId: execOptions.toolCallId || '',\n messages: execOptions.messages || [],\n suspend,\n resumeData,\n threadId,\n resourceId,\n outputWriter: options.outputWriter || execOptions.outputWriter,\n flushMessages: execOptions.flushMessages,\n },\n };\n } else if (isWorkflowExecution) {\n // Nest workflow-specific properties under 'workflow' key\n const { suspend, resumeData, ...restBaseContext } = baseContext;\n toolContext = {\n ...restBaseContext,\n workflow: options.workflow || {\n runId: options.runId,\n workflowId: options.workflowId,\n state: options.state,\n setState: options.setState,\n suspend,\n resumeData,\n },\n };\n } else if (execOptions.mcp) {\n // MCP execution context\n toolContext = {\n ...baseContext,\n mcp: execOptions.mcp,\n };\n } else {\n // Direct execution or unknown context\n toolContext = baseContext;\n }\n\n const resumeData = execOptions.resumeData;\n\n if (resumeData) {\n const resumeValidation = validateToolInput(resumeSchema, resumeData, options.name);\n if (resumeValidation.error) {\n logger?.warn(resumeValidation.error.message);\n toolSpan?.end({ output: resumeValidation.error, attributes: { success: false } });\n return resumeValidation.error as any;\n }\n }\n\n result = await executeWithContext({ span: toolSpan, fn: async () => tool?.execute?.(args, toolContext) });\n }\n\n if (suspendData) {\n const suspendSchema = this.getSuspendSchema();\n const suspendValidation = validateToolSuspendData(suspendSchema, suspendData, options.name);\n if (suspendValidation.error) {\n logger?.warn(suspendValidation.error.message);\n toolSpan?.end({ output: suspendValidation.error, attributes: { success: false } });\n return suspendValidation.error as any;\n }\n }\n\n // Skip validation if suspend was called without a result\n const shouldSkipValidation = typeof result === 'undefined' && !!suspendData;\n if (shouldSkipValidation) {\n toolSpan?.end({ output: result, attributes: { success: true } });\n return result;\n }\n\n // Validate output for Vercel/AI SDK tools which don't have built-in validation\n // Mastra tools handle their own validation in Tool.execute() which properly\n // applies Zod transforms (e.g., .transform(), .pipe()) to the output\n if (isVercelTool(tool)) {\n const outputSchema = this.getOutputSchema();\n const outputValidation = validateToolOutput(outputSchema, result, options.name, false);\n if (outputValidation.error) {\n logger?.warn(outputValidation.error.message);\n toolSpan?.end({ output: outputValidation.error, attributes: { success: false } });\n return outputValidation.error;\n }\n result = outputValidation.data;\n }\n\n // Return result (validated for Vercel tools, already validated for Mastra tools)\n toolSpan?.end({ output: result, attributes: { success: true } });\n return result;\n } catch (error) {\n toolSpan?.error({ error: error as Error, attributes: { success: false } });\n throw error;\n }\n };\n\n return async (args: unknown, execOptions?: MastraToolInvocationOptions) => {\n let logger = options.logger || this.logger;\n\n // Create tool span early so validation failures are always observable.\n // Prefer execution-time tracingContext (passed at runtime for VNext methods)\n // Fall back to build-time context for Legacy methods (AI SDK v4 doesn't support passing custom options)\n const tracingContext = execOptions?.tracingContext || options.tracingContext;\n const toolRequestContext = execOptions?.requestContext ?? options.requestContext;\n const toolSpan = getOrCreateSpan({\n type: mcpMeta ? SpanType.MCP_TOOL_CALL : SpanType.TOOL_CALL,\n name: mcpMeta ? `mcp_tool: '${options.name}' on '${mcpMeta.serverName}'` : `tool: '${options.name}'`,\n input: args,\n entityType: EntityType.TOOL,\n entityId: options.name,\n entityName: options.name,\n attributes: mcpMeta\n ? {\n mcpServer: mcpMeta.serverName,\n serverVersion: mcpMeta.serverVersion,\n toolDescription: options.description,\n }\n : {\n toolDescription: options.description,\n toolType: logType || 'tool',\n },\n tracingPolicy: options.tracingPolicy,\n tracingContext: tracingContext,\n requestContext: toolRequestContext,\n mastra: options.mastra && 'observability' in options.mastra ? (options.mastra as Mastra) : undefined,\n });\n\n const fgaProvider = (options.mastra as any)?.getServer?.()?.fga;\n const user = toolRequestContext?.get('user');\n if (fgaProvider) {\n const { getAgentToolFGAResourceId, getMCPToolFGAResourceId, getStandaloneToolFGAResourceId, requireFGA } =\n await import('../../auth/ee/fga-check');\n const toolResourceId = mcpMeta?.serverName\n ? getMCPToolFGAResourceId(mcpMeta.serverName, options.name)\n : options.agentId\n ? getAgentToolFGAResourceId(options.agentId, options.name)\n : getStandaloneToolFGAResourceId(options.name);\n await requireFGA({\n fgaProvider,\n user,\n resource: { type: 'tool', id: toolResourceId },\n permission: MastraFGAPermissions.TOOLS_EXECUTE,\n requestContext: toolRequestContext,\n actor: execOptions?.actor,\n context: {\n resourceId: options.resourceId,\n },\n metadata: {\n toolName: options.name,\n agentId: options.agentId,\n agentName: options.agentName,\n runId: options.runId,\n threadId: options.threadId,\n executionResourceId: options.resourceId,\n mcpMetadata: mcpMeta,\n },\n });\n }\n\n try {\n logger.debug(start, { ...logData, ...rest, model: logModelObject, args });\n\n // When a tool is being resumed (resumeData present in execOptions), skip input\n // validation. The original args were already validated during the initial\n // execution, and during resume the tool's execute function checks resumeData\n // and returns early without using the input args.\n const isResuming = !!execOptions?.resumeData;\n\n // Validate input parameters if schema exists\n // Use the processed schema for validation if available, otherwise fall back to original\n const parameters = this.getParameters();\n if (!isResuming) {\n const { data, error } = validateToolInput(parameters, args, options.name);\n //suspendedToolRunId is only required when resumeData is provided\n const suspendedToolRunIdErrToIgnore =\n error?.message?.includes('suspendedToolRunId: Required') && !(args as Record<string, unknown>)?.resumeData;\n if (error && !suspendedToolRunIdErrToIgnore) {\n logger.warn('Tool input validation failed', { ...logData, validationError: error.message });\n toolSpan?.end({ output: error, attributes: { success: false } });\n return error;\n }\n // Use validated/transformed data\n args = data;\n }\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!, toolSpan);\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(err),\n argsJson: safeStringify(args),\n model: model?.modelId ?? '',\n },\n },\n err,\n );\n toolSpan?.error({ error: mastraError, attributes: { success: false } });\n logger.trackException(mastraError, { ...logData, ...rest, model: logModelObject, args });\n throw 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 const base = {\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 onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n };\n\n // For provider-defined tools, exclude execute and add name as per v5 spec\n if (builtTool.type === 'provider-defined') {\n const { execute, parameters, ...rest } = base;\n // Prefer the preserved provider name (e.g. \"web_search\" from V5 SDK\n // factories) over the ID-derived name (e.g. \"web_search_20250305\").\n const name =\n ('name' in builtTool && typeof builtTool.name === 'string' ? builtTool.name : null) ||\n builtTool.id.split('.')[1] ||\n builtTool.id;\n return {\n ...rest,\n type: builtTool.type,\n id: builtTool.id,\n name,\n args: builtTool.args,\n } as VercelToolV5;\n }\n\n return base as VercelToolV5;\n }\n\n build(): CoreTool {\n const providerTool = this.buildProviderTool(this.originalTool);\n if (providerTool) {\n return providerTool;\n }\n const model = this.options.model;\n\n const schemaCompatLayers = [];\n\n if (model) {\n // Respect the model's own capability flag; do not disable it based solely on specificationVersion.\n const supportsStructuredOutputs =\n 'supportsStructuredOutputs' in model ? (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 originalSchema = this.getParameters();\n let processedInputSchema: Schema | undefined;\n\n if (originalSchema) {\n if (isStandardSchemaWithJSON(originalSchema)) {\n // Find the first applicable compatibility layer\n const applicableLayer = schemaCompatLayers.find(layer => layer.shouldApply());\n\n let schemaToUse: StandardSchemaWithJSON;\n if (applicableLayer) {\n schemaToUse = applicableLayer.processToCompatSchema(originalSchema as any);\n } else {\n schemaToUse = toStandardSchema(originalSchema);\n }\n\n processedInputSchema = jsonSchema(\n standardSchemaToJSONSchema(schemaToUse, {\n io: 'input',\n }),\n {\n validate: (value: unknown) => {\n const result = schemaToUse['~standard'].validate(value);\n // standard-schema validate may return a Promise\n if (result instanceof Promise) {\n return result.then(r => {\n if ('issues' in r && r.issues) {\n return {\n success: false as const,\n error: new Error(r.issues.map((i: any) => i.message).join(', ')),\n };\n }\n return { success: true as const, value: (r as { value: unknown }).value };\n });\n }\n // standard-schema returns { value } on success or { issues } on failure,\n // but AI SDK expects { success: boolean, value/error }\n if ('issues' in result && result.issues) {\n return {\n success: false as const,\n error: new Error(result.issues.map((i: any) => i.message).join(', ')),\n };\n }\n return { success: true as const, value: (result as { value: unknown }).value };\n },\n },\n );\n } else {\n processedInputSchema = applyCompatLayer({\n schema: originalSchema,\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n }\n }\n\n const outputSchema = this.getOutputSchema();\n let processedOutputSchema;\n\n if (outputSchema) {\n if (isStandardSchemaWithJSON(outputSchema)) {\n processedOutputSchema = standardSchemaToJSONSchema(outputSchema, { io: 'output' });\n } else {\n processedOutputSchema = applyCompatLayer({\n schema: outputSchema,\n compatLayers: [],\n mode: 'aiSdkSchema',\n });\n }\n }\n\n // Map AI SDK's needsApproval to our requireApproval\n // needsApproval can be boolean or a function that takes input and returns boolean\n let requireApproval = false;\n let needsApprovalFn: NeedsApprovalFn | undefined;\n\n if (typeof this.options.requireApproval === 'function') {\n requireApproval = true;\n needsApprovalFn = this.options.requireApproval;\n } else if (typeof this.options.requireApproval === 'boolean') {\n requireApproval = this.options.requireApproval;\n needsApprovalFn = undefined;\n }\n\n if (isVercelTool(this.originalTool) && 'needsApproval' in this.originalTool) {\n const needsApproval = (this.originalTool as any).needsApproval;\n if (typeof needsApproval === 'boolean') {\n requireApproval = needsApproval;\n needsApprovalFn = undefined;\n } else if (typeof needsApproval === 'function') {\n // Store the function to evaluate it per-call\n needsApprovalFn = needsApproval;\n // Set requireApproval to true so the tool-call-step knows to check the function\n requireApproval = true;\n }\n }\n\n // Preserve a needsApprovalFn that was attached directly to the tool instance\n // (e.g. MCP tools wrap a server-level `requireToolApproval` function and set\n // `needsApprovalFn` on the tool while keeping `requireApproval` as a boolean).\n // The branches above only derive needsApprovalFn from options/AI SDK shapes, so\n // without this it would be dropped during conversion and conditional approval\n // would silently fall back to the boolean flag.\n const instanceNeedsApprovalFn = getNeedsApprovalFn(this.originalTool);\n if (!needsApprovalFn && instanceNeedsApprovalFn) {\n needsApprovalFn = instanceNeedsApprovalFn;\n // Ensure the tool-call-step knows to evaluate the function per call.\n requireApproval = true;\n }\n\n const definition = {\n type: 'function' as const,\n description: this.originalTool.description,\n requireApproval,\n needsApprovalFn,\n hasSuspendSchema: !!this.getSuspendSchema(),\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 return {\n ...definition,\n id: 'id' in this.originalTool ? this.originalTool.id : undefined,\n parameters: processedInputSchema ?? z.object({}),\n outputSchema: processedOutputSchema,\n strict: 'strict' in this.originalTool ? this.originalTool.strict : undefined,\n providerOptions: 'providerOptions' in this.originalTool ? this.originalTool.providerOptions : undefined,\n mcp: 'mcp' in this.originalTool ? this.originalTool.mcp : undefined,\n toModelOutput: 'toModelOutput' in this.originalTool ? this.originalTool.toModelOutput : undefined,\n transform: 'transform' in this.originalTool ? this.originalTool.transform : undefined,\n inputExamples: 'inputExamples' in this.originalTool ? this.originalTool.inputExamples : undefined,\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 onOutput: 'onOutput' in this.originalTool ? this.originalTool.onOutput : undefined,\n // Preserve tool-level background config so the agentic loop can pick it up\n // from the converted CoreTool at dispatch time.\n backgroundConfig: this.options.backgroundConfig,\n } as unknown as CoreTool;\n }\n}\n","import { createHash } from 'node:crypto';\nimport type { CoreMessage } from '@internal/ai-sdk-v4';\nimport { jsonSchemaToZod } from '@mastra/schema-compat/json-to-zod';\nimport { z } from 'zod/v4';\nimport type { MastraPrimitives } from './action';\nimport type { ToolsInput } from './agent';\nimport type { ToolBackgroundConfig } from './background-tasks';\nimport type { MastraBrowser } from './browser/browser';\nimport { ErrorCategory, ErrorDomain, MastraError } from './error';\nimport type { MastraLanguageModel, MastraLegacyLanguageModel } from './llm/model/shared.types';\nimport type { IMastraLogger } from './logger';\nimport type { Mastra } from './mastra';\nimport type { AiMessageType, MastraMemory } from './memory';\nimport type { ObservabilityContext, TracingPolicy } from './observability';\nimport type { RequestContext } from './request-context';\nimport type { CoreTool, VercelTool, VercelToolV5 } from './tools';\nimport { Tool } from './tools/tool';\nimport { CoreToolBuilder } from './tools/tool-builder/builder';\nimport type { ToolToConvert } from './tools/tool-builder/builder';\nimport { isVercelTool } from './tools/toolchecks';\nimport type { OutputWriter } from './workflows/types';\nimport type { Workspace } from './workspace/workspace';\n\n// Re-export Zod utilities for external use (isZodType is defined locally below)\nexport { getZodTypeName, getZodDef, isZodArray, isZodObject } from './utils/zod-utils';\nexport { fetchWithRetry } from './utils/fetchWithRetry';\nexport type { FetchWithRetryOptions } from './utils/fetchWithRetry';\n\nexport { ensureSerializable, safeStringify } from './utils/safe-stringify';\nexport { deepEqual } from './utils/deep-equal';\n\nexport const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n/**\n * Checks if a value is a plain object (not an array, function, Date, RegExp, etc.)\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Deep merges two objects, recursively merging nested plain objects.\n * Arrays, functions, and other non-plain objects are replaced (not merged).\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 as Record<string, unknown>)[key];\n const sourceValue = (source as Record<string, unknown>)[key];\n\n // Only deep merge if both values are plain objects\n if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n (output as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else if (sourceValue !== undefined) {\n // For arrays, functions, primitives, and other non-plain objects: replace\n (output as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return output;\n}\n\n/**\n * Generate an empty object from a JSON Schema definition.\n * Accepts both a JSON string and a pre-parsed object.\n * Recursively initializes nested object properties and respects default values.\n */\nexport function generateEmptyFromSchema(schema: string | Record<string, unknown>): Record<string, unknown> {\n try {\n const parsedSchema = typeof schema === 'string' ? JSON.parse(schema) : schema;\n if (!parsedSchema || parsedSchema.type !== 'object' || !parsedSchema.properties) return {};\n const obj: Record<string, unknown> = {};\n for (const [key, prop] of Object.entries<Record<string, unknown>>(\n parsedSchema.properties as Record<string, Record<string, unknown>>,\n )) {\n if (prop.default !== undefined) {\n obj[key] =\n typeof prop.default === 'object' && prop.default !== null\n ? JSON.parse(JSON.stringify(prop.default))\n : prop.default;\n } else if (prop.type === 'object' && prop.properties) {\n obj[key] = generateEmptyFromSchema(prop);\n } else if (prop.type === 'object') {\n obj[key] = {};\n } else if (prop.type === 'string') {\n obj[key] = '';\n } else if (prop.type === 'array') {\n obj[key] = [];\n } else if (prop.type === 'number' || prop.type === 'integer') {\n obj[key] = 0;\n } else if (prop.type === 'boolean') {\n obj[key] = false;\n } else {\n obj[key] = null;\n }\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 extends Partial<ObservabilityContext> {\n name: string;\n runId?: string;\n threadId?: string;\n resourceId?: string;\n logger?: IMastraLogger;\n description?: string;\n mastra?: (Mastra & MastraPrimitives) | MastraPrimitives;\n requestContext: RequestContext;\n tracingPolicy?: TracingPolicy;\n memory?: MastraMemory;\n agentName?: string;\n agentId?: string;\n model?: MastraLanguageModel | MastraLegacyLanguageModel;\n /**\n * Optional async writer used to stream tool output chunks back to the caller. Tools should treat this as fire-and-forget I/O.\n */\n outputWriter?: OutputWriter;\n requireApproval?:\n | boolean\n | ((\n input: any,\n ctx?: { requestContext?: Record<string, unknown>; workspace?: Workspace },\n ) => boolean | Promise<boolean>);\n // Workflow-specific properties\n workflow?: any;\n workflowId?: string;\n state?: any;\n setState?: (state: any) => void;\n /**\n * Workspace available for tool execution. When provided, tools can access\n * workspace.filesystem and workspace.sandbox for file operations and command execution.\n */\n workspace?: Workspace;\n backgroundConfig?: ToolBackgroundConfig;\n /**\n * Browser available for tool execution. When provided, tools can access\n * browser capabilities for web automation, screenshots, and data extraction.\n */\n browser?: MastraBrowser;\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 // Check if the tool already has inputSchema (v5 format)\n // If it does, use it directly (it might be a function)\n // Otherwise, convert the parameters to inputSchema\n const inputSchema = 'inputSchema' in tool ? tool.inputSchema : convertVercelToolParameters(tool);\n\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\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 // Check if the tool is a plain function (not a Tool instance or Vercel tool)\n // This catches the common mistake of passing a tool factory function instead of the tool itself\n // We need to cast to unknown first since ToolsInput doesn't include functions in its type,\n // but users can still pass functions at runtime which causes silent failures\n if (typeof tool === 'function' && !((tool as unknown) instanceof Tool) && !isVercelTool(tool)) {\n throw new MastraError({\n id: 'TOOL_INVALID_FORMAT',\n domain: ErrorDomain.TOOL,\n category: ErrorCategory.USER,\n text: `Tool \"${key}\" is not a valid tool format. Tools must be created using createTool() or be a valid Vercel AI SDK tool. Received a function.`,\n });\n }\n\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 // Handle case where parameters (or inputSchema in v5) is a function that returns a schema\n let schema = tool.parameters ?? z.object({});\n\n // If schema is a function, call it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n\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 autoResumeSuspendedTools?: boolean,\n backgroundTaskEnabled?: boolean,\n): CoreTool {\n return new CoreToolBuilder({\n originalTool,\n options,\n logType,\n autoResumeSuspendedTools,\n backgroundTaskEnabled,\n }).build();\n}\n\nexport function makeCoreToolV5(\n originalTool: ToolToConvert,\n options: ToolOptions,\n logType?: 'tool' | 'toolset' | 'client-tool',\n autoResumeSuspendedTools?: boolean,\n backgroundTaskEnabled?: boolean,\n): VercelToolV5 {\n return new CoreToolBuilder({\n originalTool,\n options,\n logType,\n autoResumeSuspendedTools,\n backgroundTaskEnabled,\n }).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 === '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 'listAgents' instead, agents is deprecated\");\n return Reflect.apply(target.listAgents, 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\n/**\n * Removes specific keys from an object.\n * @param obj - The original object\n * @param keysToOmit - Keys to exclude from the returned object\n * @returns A new object with the specified keys removed\n */\nexport function omitKeys<T extends Record<string, any>>(obj: T, keysToOmit: string[]): Partial<T> {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToOmit.includes(key))) as Partial<T>;\n}\n\n/**\n * Selectively extracts specific fields from an object using dot notation.\n * Does not error if fields don't exist - simply omits them from the result.\n * @param obj - The source object to extract fields from\n * @param fields - Array of field paths (supports dot notation like 'output.text')\n * @returns New object containing only the specified fields\n */\nexport function selectFields(obj: any, fields: string[]): any {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n const result: any = {};\n\n for (const field of fields) {\n const value = getNestedValue(obj, field);\n if (value !== undefined) {\n setNestedValue(result, field, value);\n }\n }\n\n return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation\n * @param obj - Source object\n * @param path - Dot notation path (e.g., 'output.text')\n * @returns The value at the path, or undefined if not found\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && typeof current === 'object' ? current[key] : undefined;\n }, obj);\n}\n\n/**\n * Sets a nested value in an object using dot notation\n * @param obj - Target object\n * @param path - Dot notation path (e.g., 'output.text')\n * @param value - Value to set\n */\nexport function setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n\n // Validate every segment up-front so we never walk or assign through\n // a prototype-mutating key like \"__proto__\", \"constructor\", or \"prototype\".\n for (const key of keys) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n }\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n return;\n }\n\n let current = obj;\n for (const key of keys) {\n const existing = Object.prototype.hasOwnProperty.call(current, key) ? current[key] : undefined;\n if (existing === null || typeof existing !== 'object') {\n // Use a null-prototype object so intermediate containers cannot be\n // used as a prototype-pollution sink even if a sanitizer check is\n // bypassed upstream.\n const container = Object.create(null);\n Object.defineProperty(current, key, { value: container, writable: true, enumerable: true, configurable: true });\n }\n current = current[key];\n }\n\n Object.defineProperty(current, lastKey, { value, writable: true, enumerable: true, configurable: true });\n}\n\nexport const removeUndefinedValues = (obj: Record<string, any>) => {\n return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined));\n};\n"],"mappings":"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"}
package/dist/utils.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_zod_utils = require("./zod-utils-BAGXGqPm.cjs");
3
- const require_utils = require("./utils-BoQofieM.cjs");
3
+ const require_utils = require("./utils-CPUQn5dX.cjs");
4
4
  const require_deep_equal = require("./deep-equal-BvQBG8wE.cjs");
5
5
  const require_utils_safe_stringify = require("./utils/safe-stringify.cjs");
6
6
  exports.checkEvalStorageFields = require_utils.checkEvalStorageFields;
package/dist/utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as isZodObject, i as isZodArray, r as getZodTypeName, t as getZodDef } from "./zod-utils-DTkc-hhd.js";
2
- import { _ as removeUndefinedValues, a as ensureToolProperties, b as setNestedValue, c as isCoreMessage, d as makeCoreTool, f as makeCoreToolV5, g as parseSqlIdentifier, h as parseFieldKey, i as delay, l as isUiMessage, m as omitKeys, n as createMastraProxy, o as generateEmptyFromSchema, p as maskStreamTags, r as deepMerge, s as getNestedValue, t as checkEvalStorageFields, u as isZodType, v as resolveSerializedZodOutput, y as selectFields } from "./utils-DUfAZ4gr.js";
2
+ import { _ as removeUndefinedValues, a as ensureToolProperties, b as setNestedValue, c as isCoreMessage, d as makeCoreTool, f as makeCoreToolV5, g as parseSqlIdentifier, h as parseFieldKey, i as delay, l as isUiMessage, m as omitKeys, n as createMastraProxy, o as generateEmptyFromSchema, p as maskStreamTags, r as deepMerge, s as getNestedValue, t as checkEvalStorageFields, u as isZodType, v as resolveSerializedZodOutput, y as selectFields } from "./utils-CrKEOVUo.js";
3
3
  import { n as fetchWithRetry, t as deepEqual } from "./deep-equal-D_JPy4kj.js";
4
4
  import { ensureSerializable, safeStringify } from "./utils/safe-stringify.js";
5
5
  export { checkEvalStorageFields, createMastraProxy, deepEqual, deepMerge, delay, ensureSerializable, ensureToolProperties, fetchWithRetry, generateEmptyFromSchema, getNestedValue, getZodDef, getZodTypeName, isCoreMessage, isUiMessage, isZodArray, isZodObject, isZodType, makeCoreTool, makeCoreToolV5, maskStreamTags, omitKeys, parseFieldKey, parseSqlIdentifier, removeUndefinedValues, resolveSerializedZodOutput, safeStringify, selectFields, setNestedValue };
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_pull_transport = require("../pull-transport-BlEVfOcc.cjs");
3
- const require_worker = require("../worker-CsbZPhWb.cjs");
3
+ const require_worker = require("../worker-YT_pMttZ.cjs");
4
4
  exports.BackgroundTaskWorker = require_worker.BackgroundTaskWorker;
5
5
  exports.HttpRemoteStrategy = require_worker.HttpRemoteStrategy;
6
6
  exports.InProcessStrategy = require_worker.InProcessStrategy;
@@ -1,3 +1,3 @@
1
1
  import { n as MastraWorker, t as PullTransport } from "../pull-transport-C-gk1xyp.js";
2
- import { a as HttpRemoteStrategy, i as OrchestrationWorker, n as BackgroundTaskWorker, o as StepExecutionError, r as SchedulerWorker, t as InProcessStrategy } from "../worker-DwlyX5l8.js";
2
+ import { a as HttpRemoteStrategy, i as OrchestrationWorker, n as BackgroundTaskWorker, o as StepExecutionError, r as SchedulerWorker, t as InProcessStrategy } from "../worker-Ciya6mfo.js";
3
3
  export { BackgroundTaskWorker, HttpRemoteStrategy, InProcessStrategy, MastraWorker, OrchestrationWorker, PullTransport, SchedulerWorker, StepExecutionError };
@@ -1,6 +1,6 @@
1
1
  import { a as RequestContext } from "./request-context-CwUIo4Oj.js";
2
- import { o as BackgroundTaskManager } from "./background-tasks-AKlv5tIo.js";
3
- import { en as WorkflowEventProcessor, rn as getStep, tn as StepExecutor } from "./agent-BvRfRKIt.js";
2
+ import { o as BackgroundTaskManager } from "./background-tasks-CM94BIj8.js";
3
+ import { en as WorkflowEventProcessor, rn as getStep, tn as StepExecutor } from "./agent-0y2cApTZ.js";
4
4
  import { t as Scheduler } from "./scheduler-ttSQLz5R.js";
5
5
  import { n as MastraWorker, t as PullTransport } from "./pull-transport-C-gk1xyp.js";
6
6
  //#region src/worker/strategies/http-remote-strategy.ts
@@ -408,4 +408,4 @@ var InProcessStrategy = class {
408
408
  //#endregion
409
409
  export { HttpRemoteStrategy as a, OrchestrationWorker as i, BackgroundTaskWorker as n, StepExecutionError as o, SchedulerWorker as r, InProcessStrategy as t };
410
410
 
411
- //# sourceMappingURL=worker-DwlyX5l8.js.map
411
+ //# sourceMappingURL=worker-Ciya6mfo.js.map