@mastra/mcp-docs-server 1.0.0-beta.0 → 1.0.0-beta.10

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 (496) hide show
  1. package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +1 -15
  2. package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +1 -7
  3. package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +201 -1
  4. package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +1 -55
  5. package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +201 -1
  6. package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +250 -50
  7. package/.docs/organized/changelogs/%40mastra%2Fastra.md +201 -1
  8. package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
  9. package/.docs/organized/changelogs/%40mastra%2Fchroma.md +201 -1
  10. package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +201 -1
  11. package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +201 -1
  12. package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +201 -1
  13. package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +201 -1
  14. package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +26 -0
  15. package/.docs/organized/changelogs/%40mastra%2Fconvex.md +89 -0
  16. package/.docs/organized/changelogs/%40mastra%2Fcore.md +396 -196
  17. package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +201 -1
  18. package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +201 -1
  19. package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +201 -1
  20. package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +201 -1
  21. package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +201 -1
  22. package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +200 -0
  23. package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +42 -0
  24. package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +201 -1
  25. package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +61 -0
  26. package/.docs/organized/changelogs/%40mastra%2Fevals.md +201 -1
  27. package/.docs/organized/changelogs/%40mastra%2Flance.md +201 -1
  28. package/.docs/organized/changelogs/%40mastra%2Flibsql.md +201 -1
  29. package/.docs/organized/changelogs/%40mastra%2Floggers.md +201 -1
  30. package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +201 -1
  31. package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +201 -1
  32. package/.docs/organized/changelogs/%40mastra%2Fmcp.md +201 -1
  33. package/.docs/organized/changelogs/%40mastra%2Fmemory.md +201 -1
  34. package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +201 -1
  35. package/.docs/organized/changelogs/%40mastra%2Fmssql.md +201 -1
  36. package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +201 -1
  37. package/.docs/organized/changelogs/%40mastra%2Fpg.md +201 -1
  38. package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +201 -1
  39. package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +251 -51
  40. package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +201 -1
  41. package/.docs/organized/changelogs/%40mastra%2Frag.md +201 -1
  42. package/.docs/organized/changelogs/%40mastra%2Freact.md +128 -1
  43. package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +18 -0
  44. package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +42 -0
  45. package/.docs/organized/changelogs/%40mastra%2Fserver.md +251 -51
  46. package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +201 -1
  47. package/.docs/organized/changelogs/%40mastra%2Fupstash.md +201 -1
  48. package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +201 -1
  49. package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +201 -1
  50. package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +201 -1
  51. package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +201 -1
  52. package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +201 -1
  53. package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +92 -1
  54. package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +67 -1
  55. package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +201 -1
  56. package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +201 -1
  57. package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +201 -1
  58. package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +201 -1
  59. package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +201 -1
  60. package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +201 -1
  61. package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +201 -1
  62. package/.docs/organized/changelogs/create-mastra.md +201 -1
  63. package/.docs/organized/changelogs/mastra.md +201 -1
  64. package/.docs/organized/code-examples/agui.md +1 -0
  65. package/.docs/organized/code-examples/ai-elements.md +2 -2
  66. package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
  67. package/.docs/organized/code-examples/ai-sdk-v5.md +3 -2
  68. package/.docs/organized/code-examples/assistant-ui.md +2 -2
  69. package/.docs/organized/code-examples/bird-checker-with-express.md +1 -1
  70. package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +2 -2
  71. package/.docs/organized/code-examples/bird-checker-with-nextjs.md +2 -2
  72. package/.docs/organized/code-examples/client-side-tools.md +1 -1
  73. package/.docs/organized/code-examples/crypto-chatbot.md +2 -2
  74. package/.docs/organized/code-examples/fireworks-r1.md +1 -1
  75. package/.docs/organized/code-examples/heads-up-game.md +1 -1
  76. package/.docs/organized/code-examples/mcp-configuration.md +0 -3
  77. package/.docs/organized/code-examples/mcp-server-adapters.md +720 -0
  78. package/.docs/organized/code-examples/memory-per-resource-example.md +1 -1
  79. package/.docs/organized/code-examples/memory-with-processors.md +1 -1
  80. package/.docs/organized/code-examples/openapi-spec-writer.md +1 -1
  81. package/.docs/organized/code-examples/processors-with-ai-sdk.md +14 -0
  82. package/.docs/organized/code-examples/quick-start.md +2 -2
  83. package/.docs/organized/code-examples/server-app-access.md +342 -0
  84. package/.docs/organized/code-examples/server-express-adapter.md +87 -0
  85. package/.docs/organized/code-examples/server-hono-adapter.md +85 -0
  86. package/.docs/organized/code-examples/stock-price-tool.md +1 -21
  87. package/.docs/organized/code-examples/workflow-ai-recruiter.md +1 -1
  88. package/.docs/organized/code-examples/workflow-with-inline-steps.md +1 -1
  89. package/.docs/organized/code-examples/workflow-with-memory.md +1 -1
  90. package/.docs/organized/code-examples/workflow-with-separate-steps.md +1 -1
  91. package/.docs/organized/code-examples/workflow-with-suspend-resume.md +1 -1
  92. package/.docs/raw/agents/adding-voice.mdx +56 -10
  93. package/.docs/raw/agents/agent-approval.mdx +189 -0
  94. package/.docs/raw/agents/agent-memory.mdx +2 -2
  95. package/.docs/raw/agents/guardrails.mdx +27 -24
  96. package/.docs/raw/agents/networks.mdx +3 -3
  97. package/.docs/raw/agents/overview.mdx +19 -168
  98. package/.docs/raw/agents/processors.mdx +279 -0
  99. package/.docs/raw/agents/structured-output.mdx +224 -0
  100. package/.docs/raw/agents/using-tools.mdx +14 -14
  101. package/.docs/raw/auth/auth0.mdx +2 -2
  102. package/.docs/raw/auth/clerk.mdx +2 -2
  103. package/.docs/raw/auth/firebase.mdx +2 -2
  104. package/.docs/raw/auth/index.mdx +1 -1
  105. package/.docs/raw/auth/jwt.mdx +2 -2
  106. package/.docs/raw/auth/supabase.mdx +2 -2
  107. package/.docs/raw/auth/workos.mdx +2 -2
  108. package/.docs/raw/community/contributing-templates.mdx +1 -1
  109. package/.docs/raw/community/discord.mdx +2 -2
  110. package/.docs/raw/community/licensing.mdx +1 -1
  111. package/.docs/raw/course/01-first-agent/03-verifying-installation.md +1 -1
  112. package/.docs/raw/course/01-first-agent/05-running-playground.md +5 -5
  113. package/.docs/raw/course/01-first-agent/09-testing-your-agent.md +3 -3
  114. package/.docs/raw/course/01-first-agent/13-testing-your-tool.md +3 -3
  115. package/.docs/raw/course/01-first-agent/17-testing-memory.md +2 -2
  116. package/.docs/raw/course/02-agent-tools-mcp/02-installing-mcp.md +1 -1
  117. package/.docs/raw/course/03-agent-memory/03-installing-memory.md +1 -1
  118. package/.docs/raw/course/04-workflows/07-using-playground.md +1 -1
  119. package/.docs/raw/deployment/{server-deployment.mdx → building-mastra.mdx} +4 -4
  120. package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +3 -3
  121. package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +4 -4
  122. package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +4 -4
  123. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/cloudflare-deployer.mdx +2 -2
  124. package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +3 -3
  125. package/.docs/raw/deployment/cloud-providers/index.mdx +26 -29
  126. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/netlify-deployer.mdx +46 -15
  127. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/vercel-deployer.mdx +2 -2
  128. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/dashboard.mdx +3 -3
  129. package/.docs/raw/deployment/mastra-cloud/observability.mdx +53 -0
  130. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/overview.mdx +3 -3
  131. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/setting-up.mdx +4 -4
  132. package/.docs/raw/deployment/monorepo.mdx +3 -3
  133. package/.docs/raw/deployment/overview.mdx +7 -7
  134. package/.docs/raw/deployment/web-framework.mdx +6 -6
  135. package/.docs/raw/evals/{off-the-shelf-scorers.mdx → built-in-scorers.mdx} +17 -15
  136. package/.docs/raw/evals/custom-scorers.mdx +4 -6
  137. package/.docs/raw/evals/overview.mdx +6 -7
  138. package/.docs/raw/evals/running-in-ci.mdx +2 -4
  139. package/.docs/raw/getting-started/{installation.mdx → manual-install.mdx} +15 -89
  140. package/.docs/raw/getting-started/mcp-docs-server.mdx +6 -6
  141. package/.docs/raw/getting-started/project-structure.mdx +2 -2
  142. package/.docs/raw/getting-started/start.mdx +72 -0
  143. package/.docs/raw/getting-started/studio.mdx +8 -6
  144. package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +147 -0
  145. package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +627 -0
  146. package/.docs/raw/{frameworks/agentic-uis → guides/build-your-ui}/assistant-ui.mdx +72 -20
  147. package/.docs/raw/guides/build-your-ui/copilotkit.mdx +206 -0
  148. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/astro.mdx +28 -30
  149. package/.docs/raw/{frameworks/servers → guides/getting-started}/express.mdx +4 -5
  150. package/.docs/raw/guides/getting-started/next-js.mdx +276 -0
  151. package/.docs/raw/guides/getting-started/quickstart.mdx +97 -0
  152. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/sveltekit.mdx +28 -30
  153. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/vite-react.mdx +12 -12
  154. package/.docs/raw/guides/guide/ai-recruiter.mdx +2 -3
  155. package/.docs/raw/guides/guide/chef-michel.mdx +2 -3
  156. package/.docs/raw/guides/guide/notes-mcp-server.mdx +3 -3
  157. package/.docs/raw/guides/guide/research-assistant.mdx +8 -18
  158. package/.docs/raw/guides/guide/stock-agent.mdx +4 -6
  159. package/.docs/raw/guides/guide/web-search.mdx +12 -10
  160. package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +421 -0
  161. package/.docs/raw/guides/index.mdx +3 -35
  162. package/.docs/raw/guides/migrations/agentnetwork.mdx +4 -4
  163. package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +119 -0
  164. package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +56 -6
  165. package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +42 -2
  166. package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +31 -1
  167. package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +29 -5
  168. package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +3 -3
  169. package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +28 -0
  170. package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +59 -37
  171. package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +80 -0
  172. package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +70 -5
  173. package/.docs/raw/guides/migrations/upgrade-to-v1/tracing.mdx +13 -13
  174. package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +25 -1
  175. package/.docs/raw/guides/migrations/upgrade-to-v1/voice.mdx +1 -1
  176. package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +175 -2
  177. package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +2 -2
  178. package/.docs/raw/index.mdx +4 -4
  179. package/.docs/raw/mcp/overview.mdx +358 -0
  180. package/.docs/raw/mcp/publishing-mcp-server.mdx +139 -0
  181. package/.docs/raw/memory/conversation-history.mdx +1 -1
  182. package/.docs/raw/memory/memory-processors.mdx +265 -80
  183. package/.docs/raw/memory/overview.mdx +3 -3
  184. package/.docs/raw/memory/semantic-recall.mdx +10 -10
  185. package/.docs/raw/memory/storage/memory-with-libsql.mdx +5 -10
  186. package/.docs/raw/memory/storage/memory-with-mongodb.mdx +150 -0
  187. package/.docs/raw/memory/storage/memory-with-pg.mdx +5 -10
  188. package/.docs/raw/memory/storage/memory-with-upstash.mdx +5 -10
  189. package/.docs/raw/memory/threads-and-resources.mdx +4 -4
  190. package/.docs/raw/memory/working-memory.mdx +16 -8
  191. package/.docs/raw/{logging.mdx → observability/logging.mdx} +8 -8
  192. package/.docs/raw/observability/overview.mdx +5 -6
  193. package/.docs/raw/observability/tracing/bridges/otel.mdx +200 -0
  194. package/.docs/raw/observability/tracing/exporters/arize.mdx +39 -3
  195. package/.docs/raw/observability/tracing/exporters/braintrust.mdx +22 -3
  196. package/.docs/raw/observability/tracing/exporters/cloud.mdx +4 -4
  197. package/.docs/raw/observability/tracing/exporters/default.mdx +6 -6
  198. package/.docs/raw/observability/tracing/exporters/langfuse.mdx +86 -3
  199. package/.docs/raw/observability/tracing/exporters/langsmith.mdx +15 -3
  200. package/.docs/raw/observability/tracing/exporters/otel.mdx +128 -30
  201. package/.docs/raw/observability/tracing/exporters/posthog.mdx +127 -0
  202. package/.docs/raw/observability/tracing/overview.mdx +100 -29
  203. package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +2 -3
  204. package/.docs/raw/rag/chunking-and-embedding.mdx +16 -17
  205. package/.docs/raw/rag/overview.mdx +5 -4
  206. package/.docs/raw/rag/retrieval.mdx +44 -39
  207. package/.docs/raw/rag/vector-databases.mdx +94 -3
  208. package/.docs/raw/reference/agents/agent.mdx +10 -14
  209. package/.docs/raw/reference/agents/generate.mdx +67 -99
  210. package/.docs/raw/reference/agents/generateLegacy.mdx +3 -3
  211. package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +1 -1
  212. package/.docs/raw/reference/agents/getDefaultOptions.mdx +1 -1
  213. package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +1 -1
  214. package/.docs/raw/reference/agents/getDescription.mdx +1 -1
  215. package/.docs/raw/reference/agents/getInstructions.mdx +1 -1
  216. package/.docs/raw/reference/agents/getLLM.mdx +2 -2
  217. package/.docs/raw/reference/agents/getMemory.mdx +1 -1
  218. package/.docs/raw/reference/agents/getModel.mdx +1 -1
  219. package/.docs/raw/reference/agents/getTools.mdx +69 -0
  220. package/.docs/raw/reference/agents/getVoice.mdx +1 -1
  221. package/.docs/raw/reference/agents/listAgents.mdx +1 -1
  222. package/.docs/raw/reference/agents/listScorers.mdx +1 -1
  223. package/.docs/raw/reference/agents/listTools.mdx +2 -2
  224. package/.docs/raw/reference/agents/listWorkflows.mdx +1 -1
  225. package/.docs/raw/reference/agents/network.mdx +33 -72
  226. package/.docs/raw/reference/ai-sdk/chat-route.mdx +127 -0
  227. package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +117 -0
  228. package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +64 -0
  229. package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +116 -0
  230. package/.docs/raw/reference/ai-sdk/network-route.mdx +99 -0
  231. package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +289 -0
  232. package/.docs/raw/reference/ai-sdk/with-mastra.mdx +119 -0
  233. package/.docs/raw/reference/ai-sdk/workflow-route.mdx +110 -0
  234. package/.docs/raw/reference/auth/auth0.mdx +1 -1
  235. package/.docs/raw/reference/auth/clerk.mdx +1 -1
  236. package/.docs/raw/reference/auth/firebase.mdx +1 -1
  237. package/.docs/raw/reference/auth/jwt.mdx +1 -1
  238. package/.docs/raw/reference/auth/supabase.mdx +1 -1
  239. package/.docs/raw/reference/auth/workos.mdx +1 -1
  240. package/.docs/raw/reference/cli/create-mastra.mdx +11 -11
  241. package/.docs/raw/reference/cli/mastra.mdx +25 -12
  242. package/.docs/raw/reference/client-js/agents.mdx +252 -68
  243. package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
  244. package/.docs/raw/reference/client-js/logs.mdx +1 -1
  245. package/.docs/raw/reference/client-js/mastra-client.mdx +4 -4
  246. package/.docs/raw/reference/client-js/memory.mdx +48 -2
  247. package/.docs/raw/reference/client-js/observability.mdx +1 -1
  248. package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
  249. package/.docs/raw/reference/client-js/tools.mdx +1 -1
  250. package/.docs/raw/reference/client-js/vectors.mdx +1 -1
  251. package/.docs/raw/reference/client-js/workflows.mdx +93 -64
  252. package/.docs/raw/reference/core/addGateway.mdx +59 -0
  253. package/.docs/raw/reference/core/getAgent.mdx +1 -1
  254. package/.docs/raw/reference/core/getAgentById.mdx +1 -1
  255. package/.docs/raw/reference/core/getDeployer.mdx +1 -1
  256. package/.docs/raw/reference/core/getGateway.mdx +59 -0
  257. package/.docs/raw/reference/core/getGatewayById.mdx +62 -0
  258. package/.docs/raw/reference/core/getLogger.mdx +3 -3
  259. package/.docs/raw/reference/core/getMCPServer.mdx +4 -4
  260. package/.docs/raw/reference/core/getMCPServerById.mdx +5 -5
  261. package/.docs/raw/reference/core/getMemory.mdx +73 -0
  262. package/.docs/raw/reference/core/getScorer.mdx +1 -1
  263. package/.docs/raw/reference/core/getScorerById.mdx +1 -1
  264. package/.docs/raw/reference/core/getServer.mdx +2 -2
  265. package/.docs/raw/reference/core/getStorage.mdx +1 -1
  266. package/.docs/raw/reference/core/getStoredAgentById.mdx +183 -0
  267. package/.docs/raw/reference/core/getTelemetry.mdx +3 -3
  268. package/.docs/raw/reference/core/getVector.mdx +1 -1
  269. package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
  270. package/.docs/raw/reference/core/listAgents.mdx +1 -1
  271. package/.docs/raw/reference/core/listGateways.mdx +53 -0
  272. package/.docs/raw/reference/core/listLogs.mdx +3 -3
  273. package/.docs/raw/reference/core/listLogsByRunId.mdx +3 -3
  274. package/.docs/raw/reference/core/listMCPServers.mdx +5 -5
  275. package/.docs/raw/reference/core/listMemory.mdx +70 -0
  276. package/.docs/raw/reference/core/listScorers.mdx +1 -1
  277. package/.docs/raw/reference/core/listStoredAgents.mdx +151 -0
  278. package/.docs/raw/reference/core/listVectors.mdx +1 -1
  279. package/.docs/raw/reference/core/listWorkflows.mdx +1 -1
  280. package/.docs/raw/reference/core/mastra-class.mdx +17 -1
  281. package/.docs/raw/reference/core/mastra-model-gateway.mdx +227 -0
  282. package/.docs/raw/reference/core/setLogger.mdx +3 -3
  283. package/.docs/raw/reference/core/setStorage.mdx +1 -1
  284. package/.docs/raw/reference/core/setTelemetry.mdx +3 -3
  285. package/.docs/raw/reference/deployer/cloudflare.mdx +1 -1
  286. package/.docs/raw/reference/deployer/deployer.mdx +1 -1
  287. package/.docs/raw/reference/deployer/netlify.mdx +2 -3
  288. package/.docs/raw/reference/deployer/vercel.mdx +1 -1
  289. package/.docs/raw/reference/evals/answer-relevancy.mdx +29 -99
  290. package/.docs/raw/reference/evals/answer-similarity.mdx +13 -259
  291. package/.docs/raw/reference/evals/bias.mdx +30 -88
  292. package/.docs/raw/reference/evals/completeness.mdx +32 -91
  293. package/.docs/raw/reference/evals/content-similarity.mdx +29 -89
  294. package/.docs/raw/reference/evals/context-precision.mdx +29 -131
  295. package/.docs/raw/reference/evals/context-relevance.mdx +12 -12
  296. package/.docs/raw/reference/evals/create-scorer.mdx +59 -50
  297. package/.docs/raw/reference/evals/faithfulness.mdx +29 -102
  298. package/.docs/raw/reference/evals/hallucination.mdx +29 -104
  299. package/.docs/raw/reference/evals/keyword-coverage.mdx +29 -108
  300. package/.docs/raw/reference/evals/mastra-scorer.mdx +3 -1
  301. package/.docs/raw/reference/evals/noise-sensitivity.mdx +12 -12
  302. package/.docs/raw/reference/evals/prompt-alignment.mdx +16 -16
  303. package/.docs/raw/reference/evals/run-evals.mdx +1 -1
  304. package/.docs/raw/reference/evals/scorer-utils.mdx +362 -0
  305. package/.docs/raw/reference/evals/textual-difference.mdx +28 -101
  306. package/.docs/raw/reference/evals/tone-consistency.mdx +26 -99
  307. package/.docs/raw/reference/evals/tool-call-accuracy.mdx +8 -8
  308. package/.docs/raw/reference/evals/toxicity.mdx +30 -93
  309. package/.docs/raw/reference/index.mdx +1 -0
  310. package/.docs/raw/reference/logging/pino-logger.mdx +2 -2
  311. package/.docs/raw/reference/memory/createThread.mdx +1 -1
  312. package/.docs/raw/reference/memory/deleteMessages.mdx +1 -1
  313. package/.docs/raw/reference/memory/getThreadById.mdx +1 -1
  314. package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +1 -1
  315. package/.docs/raw/reference/memory/memory-class.mdx +6 -8
  316. package/.docs/raw/reference/memory/query.mdx +1 -1
  317. package/.docs/raw/reference/memory/recall.mdx +1 -1
  318. package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +177 -0
  319. package/.docs/raw/reference/observability/tracing/configuration.mdx +12 -16
  320. package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +31 -2
  321. package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +1 -1
  322. package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +9 -9
  323. package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +9 -9
  324. package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +9 -9
  325. package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +44 -1
  326. package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +18 -2
  327. package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +34 -44
  328. package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +132 -0
  329. package/.docs/raw/reference/observability/tracing/instances.mdx +8 -12
  330. package/.docs/raw/reference/observability/tracing/interfaces.mdx +36 -11
  331. package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +1 -1
  332. package/.docs/raw/reference/observability/tracing/spans.mdx +7 -11
  333. package/.docs/raw/reference/processors/batch-parts-processor.mdx +10 -4
  334. package/.docs/raw/reference/processors/language-detector.mdx +19 -6
  335. package/.docs/raw/reference/processors/message-history-processor.mdx +131 -0
  336. package/.docs/raw/reference/processors/moderation-processor.mdx +21 -8
  337. package/.docs/raw/reference/processors/pii-detector.mdx +21 -8
  338. package/.docs/raw/reference/processors/processor-interface.mdx +502 -0
  339. package/.docs/raw/reference/processors/prompt-injection-detector.mdx +19 -6
  340. package/.docs/raw/reference/processors/semantic-recall-processor.mdx +197 -0
  341. package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +12 -7
  342. package/.docs/raw/reference/processors/token-limiter-processor.mdx +11 -5
  343. package/.docs/raw/reference/processors/tool-call-filter.mdx +125 -0
  344. package/.docs/raw/reference/processors/unicode-normalizer.mdx +10 -4
  345. package/.docs/raw/reference/processors/working-memory-processor.mdx +221 -0
  346. package/.docs/raw/reference/rag/chunk.mdx +1 -1
  347. package/.docs/raw/reference/rag/database-config.mdx +1 -1
  348. package/.docs/raw/reference/rag/document.mdx +1 -1
  349. package/.docs/raw/reference/rag/embeddings.mdx +6 -6
  350. package/.docs/raw/reference/rag/extract-params.mdx +1 -1
  351. package/.docs/raw/reference/rag/graph-rag.mdx +1 -1
  352. package/.docs/raw/reference/rag/metadata-filters.mdx +1 -1
  353. package/.docs/raw/reference/rag/rerank.mdx +2 -3
  354. package/.docs/raw/reference/rag/rerankWithScorer.mdx +1 -2
  355. package/.docs/raw/reference/server/create-route.mdx +328 -0
  356. package/.docs/raw/reference/server/express-adapter.mdx +260 -0
  357. package/.docs/raw/reference/server/hono-adapter.mdx +242 -0
  358. package/.docs/raw/reference/server/mastra-server.mdx +345 -0
  359. package/.docs/raw/reference/server/routes.mdx +250 -0
  360. package/.docs/raw/reference/storage/cloudflare-d1.mdx +39 -2
  361. package/.docs/raw/reference/storage/cloudflare.mdx +2 -2
  362. package/.docs/raw/reference/storage/convex.mdx +164 -0
  363. package/.docs/raw/reference/storage/dynamodb.mdx +4 -4
  364. package/.docs/raw/reference/storage/lance.mdx +35 -2
  365. package/.docs/raw/reference/storage/libsql.mdx +39 -2
  366. package/.docs/raw/reference/storage/mongodb.mdx +41 -2
  367. package/.docs/raw/reference/storage/mssql.mdx +39 -2
  368. package/.docs/raw/reference/storage/postgresql.mdx +39 -2
  369. package/.docs/raw/reference/storage/upstash.mdx +2 -2
  370. package/.docs/raw/reference/streaming/ChunkType.mdx +2 -2
  371. package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +1 -1
  372. package/.docs/raw/reference/streaming/agents/stream.mdx +68 -95
  373. package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +1 -1
  374. package/.docs/raw/reference/streaming/workflows/observeStream.mdx +8 -10
  375. package/.docs/raw/reference/streaming/workflows/{resumeStreamVNext.mdx → resumeStream.mdx} +51 -11
  376. package/.docs/raw/reference/streaming/workflows/stream.mdx +84 -25
  377. package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +170 -0
  378. package/.docs/raw/reference/templates/overview.mdx +3 -6
  379. package/.docs/raw/reference/tools/client.mdx +2 -3
  380. package/.docs/raw/reference/tools/create-tool.mdx +135 -4
  381. package/.docs/raw/reference/tools/document-chunker-tool.mdx +1 -1
  382. package/.docs/raw/reference/tools/graph-rag-tool.mdx +7 -7
  383. package/.docs/raw/reference/tools/mcp-client.mdx +131 -23
  384. package/.docs/raw/reference/tools/mcp-server.mdx +56 -8
  385. package/.docs/raw/reference/tools/vector-query-tool.mdx +16 -17
  386. package/.docs/raw/reference/vectors/astra.mdx +1 -1
  387. package/.docs/raw/reference/vectors/chroma.mdx +82 -2
  388. package/.docs/raw/reference/vectors/convex.mdx +429 -0
  389. package/.docs/raw/reference/vectors/couchbase.mdx +33 -20
  390. package/.docs/raw/reference/vectors/duckdb.mdx +462 -0
  391. package/.docs/raw/reference/vectors/elasticsearch.mdx +310 -0
  392. package/.docs/raw/reference/vectors/lance.mdx +39 -23
  393. package/.docs/raw/reference/vectors/libsql.mdx +37 -4
  394. package/.docs/raw/reference/vectors/mongodb.mdx +43 -4
  395. package/.docs/raw/reference/vectors/opensearch.mdx +38 -17
  396. package/.docs/raw/reference/vectors/pg.mdx +44 -37
  397. package/.docs/raw/reference/vectors/pinecone.mdx +70 -3
  398. package/.docs/raw/reference/vectors/qdrant.mdx +37 -2
  399. package/.docs/raw/reference/vectors/s3vectors.mdx +2 -2
  400. package/.docs/raw/reference/vectors/turbopuffer.mdx +75 -1
  401. package/.docs/raw/reference/vectors/upstash.mdx +1 -1
  402. package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
  403. package/.docs/raw/reference/voice/azure.mdx +96 -81
  404. package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
  405. package/.docs/raw/reference/voice/composite-voice.mdx +72 -29
  406. package/.docs/raw/reference/voice/deepgram.mdx +1 -1
  407. package/.docs/raw/reference/voice/elevenlabs.mdx +1 -1
  408. package/.docs/raw/reference/voice/google-gemini-live.mdx +1 -1
  409. package/.docs/raw/reference/voice/google.mdx +160 -21
  410. package/.docs/raw/reference/voice/mastra-voice.mdx +1 -1
  411. package/.docs/raw/reference/voice/murf.mdx +1 -1
  412. package/.docs/raw/reference/voice/openai-realtime.mdx +3 -3
  413. package/.docs/raw/reference/voice/openai.mdx +1 -1
  414. package/.docs/raw/reference/voice/playai.mdx +1 -1
  415. package/.docs/raw/reference/voice/sarvam.mdx +1 -1
  416. package/.docs/raw/reference/voice/speechify.mdx +1 -1
  417. package/.docs/raw/reference/voice/voice.addInstructions.mdx +3 -4
  418. package/.docs/raw/reference/voice/voice.addTools.mdx +2 -2
  419. package/.docs/raw/reference/voice/voice.answer.mdx +2 -2
  420. package/.docs/raw/reference/voice/voice.close.mdx +2 -2
  421. package/.docs/raw/reference/voice/voice.connect.mdx +2 -2
  422. package/.docs/raw/reference/voice/voice.events.mdx +1 -1
  423. package/.docs/raw/reference/voice/voice.getSpeakers.mdx +1 -1
  424. package/.docs/raw/reference/voice/voice.listen.mdx +87 -53
  425. package/.docs/raw/reference/voice/voice.off.mdx +2 -2
  426. package/.docs/raw/reference/voice/voice.on.mdx +2 -2
  427. package/.docs/raw/reference/voice/voice.send.mdx +2 -2
  428. package/.docs/raw/reference/voice/voice.speak.mdx +76 -41
  429. package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -2
  430. package/.docs/raw/reference/workflows/run-methods/cancel.mdx +1 -1
  431. package/.docs/raw/reference/workflows/run-methods/restart.mdx +142 -0
  432. package/.docs/raw/reference/workflows/run-methods/resume.mdx +45 -1
  433. package/.docs/raw/reference/workflows/run-methods/start.mdx +48 -4
  434. package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +310 -0
  435. package/.docs/raw/reference/workflows/run.mdx +28 -6
  436. package/.docs/raw/reference/workflows/step.mdx +65 -1
  437. package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +1 -1
  438. package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
  439. package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +1 -1
  440. package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +1 -1
  441. package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +1 -1
  442. package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +1 -1
  443. package/.docs/raw/reference/workflows/workflow-methods/map.mdx +1 -1
  444. package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
  445. package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +1 -1
  446. package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +1 -1
  447. package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +1 -1
  448. package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
  449. package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +1 -1
  450. package/.docs/raw/reference/workflows/workflow.mdx +21 -2
  451. package/.docs/raw/server-db/custom-adapters.mdx +386 -0
  452. package/.docs/raw/server-db/custom-api-routes.mdx +6 -6
  453. package/.docs/raw/server-db/mastra-client.mdx +7 -8
  454. package/.docs/raw/server-db/{production-server.mdx → mastra-server.mdx} +16 -8
  455. package/.docs/raw/server-db/middleware.mdx +31 -31
  456. package/.docs/raw/server-db/request-context.mdx +3 -4
  457. package/.docs/raw/server-db/server-adapters.mdx +312 -0
  458. package/.docs/raw/server-db/storage.mdx +12 -1
  459. package/.docs/raw/streaming/events.mdx +1 -1
  460. package/.docs/raw/streaming/overview.mdx +27 -16
  461. package/.docs/raw/streaming/tool-streaming.mdx +58 -19
  462. package/.docs/raw/streaming/workflow-streaming.mdx +6 -12
  463. package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -3
  464. package/.docs/raw/tools-mcp/mcp-overview.mdx +5 -7
  465. package/.docs/raw/tools-mcp/overview.mdx +1 -1
  466. package/.docs/raw/voice/overview.mdx +88 -41
  467. package/.docs/raw/voice/speech-to-speech.mdx +5 -5
  468. package/.docs/raw/voice/speech-to-text.mdx +3 -4
  469. package/.docs/raw/voice/text-to-speech.mdx +3 -4
  470. package/.docs/raw/workflows/agents-and-tools.mdx +43 -5
  471. package/.docs/raw/workflows/control-flow.mdx +186 -1
  472. package/.docs/raw/workflows/error-handling.mdx +5 -4
  473. package/.docs/raw/workflows/human-in-the-loop.mdx +160 -213
  474. package/.docs/raw/workflows/inngest-workflow.mdx +2 -2
  475. package/.docs/raw/workflows/input-data-mapping.mdx +1 -1
  476. package/.docs/raw/workflows/overview.mdx +67 -47
  477. package/.docs/raw/workflows/snapshots.mdx +5 -3
  478. package/.docs/raw/workflows/suspend-and-resume.mdx +121 -204
  479. package/.docs/raw/workflows/time-travel.mdx +313 -0
  480. package/.docs/raw/workflows/workflow-state.mdx +190 -0
  481. package/CHANGELOG.md +88 -0
  482. package/dist/{chunk-5NJC7NRO.js → chunk-4CM2BQNP.js} +24 -4
  483. package/dist/prepare-docs/package-changes.d.ts.map +1 -1
  484. package/dist/prepare-docs/prepare.js +1 -1
  485. package/dist/stdio.js +17 -19
  486. package/package.json +11 -15
  487. package/.docs/raw/deployment/serverless-platforms/index.mdx +0 -58
  488. package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +0 -688
  489. package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +0 -123
  490. package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +0 -382
  491. package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +0 -179
  492. package/.docs/raw/frameworks/web-frameworks/next-js.mdx +0 -379
  493. package/.docs/raw/getting-started/templates.mdx +0 -73
  494. package/.docs/raw/mastra-cloud/observability.mdx +0 -51
  495. package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +0 -47
  496. package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +0 -153
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: "Control Flow | Workflows | Mastra Docs"
2
+ title: "Control Flow | Workflows"
3
3
  description: "Control flow in Mastra workflows allows you to manage branching, merging, and conditions to construct workflows that meet your logic requirements."
4
4
  ---
5
5
 
@@ -112,6 +112,70 @@ export const testWorkflow = createWorkflow({
112
112
 
113
113
  > 📹 Watch: How to run steps in parallel and optimize your Mastra workflow → [YouTube (3 minutes)](https://youtu.be/GQJxve5Hki4)
114
114
 
115
+ ### Output structure
116
+
117
+ When steps run in parallel, the output is an object where each key is the step's `id` and the value is that step's output. This allows you to access each parallel step's result independently.
118
+
119
+ ```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
120
+ const step1 = createStep({
121
+ id: "format-step",
122
+ inputSchema: z.object({ message: z.string() }),
123
+ outputSchema: z.object({ formatted: z.string() }),
124
+ execute: async ({ inputData }) => ({
125
+ formatted: inputData.message.toUpperCase()
126
+ })
127
+ });
128
+
129
+ const step2 = createStep({
130
+ id: "count-step",
131
+ inputSchema: z.object({ message: z.string() }),
132
+ outputSchema: z.object({ count: z.number() }),
133
+ execute: async ({ inputData }) => ({
134
+ count: inputData.message.length
135
+ })
136
+ });
137
+
138
+ const step3 = createStep({
139
+ id: "combine-step",
140
+ // The inputSchema must match the structure of parallel outputs
141
+ inputSchema: z.object({
142
+ "format-step": z.object({ formatted: z.string() }),
143
+ "count-step": z.object({ count: z.number() })
144
+ }),
145
+ outputSchema: z.object({ result: z.string() }),
146
+ execute: async ({ inputData }) => {
147
+ // Access each parallel step's output by its id
148
+ const formatted = inputData["format-step"].formatted;
149
+ const count = inputData["count-step"].count;
150
+ return {
151
+ result: `${formatted} (${count} characters)`
152
+ };
153
+ }
154
+ });
155
+
156
+ export const testWorkflow = createWorkflow({
157
+ id: "parallel-output-example",
158
+ inputSchema: z.object({ message: z.string() }),
159
+ outputSchema: z.object({ result: z.string() })
160
+ })
161
+ .parallel([step1, step2])
162
+ .then(step3)
163
+ .commit();
164
+
165
+ // When executed with { message: "hello" }
166
+ // The parallel output structure will be:
167
+ // {
168
+ // "format-step": { formatted: "HELLO" },
169
+ // "count-step": { count: 5 }
170
+ // }
171
+ ```
172
+
173
+ **Key points:**
174
+ - Each parallel step's output is keyed by its `id`
175
+ - All parallel steps execute simultaneously
176
+ - The next step receives an object containing all parallel step outputs
177
+ - You must define the `inputSchema` of the following step to match this structure
178
+
115
179
  ## Conditional logic with `.branch()`
116
180
 
117
181
  Use `.branch()` to choose which step to run based on a condition. All steps in a branch need the same `inputSchema` and `outputSchema` because branching requires consistent schemas so workflows can follow different paths.
@@ -158,6 +222,85 @@ export const testWorkflow = createWorkflow({
158
222
  .commit();
159
223
  ```
160
224
 
225
+ ### Output structure
226
+
227
+ When using conditional branching, only one branch executes based on which condition evaluates to `true` first. The output structure is similar to `.parallel()`, where the result is keyed by the executed step's `id`.
228
+
229
+ ```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
230
+ const step1 = createStep({
231
+ id: "initial-step",
232
+ inputSchema: z.object({ value: z.number() }),
233
+ outputSchema: z.object({ value: z.number() }),
234
+ execute: async ({ inputData }) => inputData
235
+ });
236
+
237
+ const highValueStep = createStep({
238
+ id: "high-value-step",
239
+ inputSchema: z.object({ value: z.number() }),
240
+ outputSchema: z.object({ result: z.string() }),
241
+ execute: async ({ inputData }) => ({
242
+ result: `High value: ${inputData.value}`
243
+ })
244
+ });
245
+
246
+ const lowValueStep = createStep({
247
+ id: "low-value-step",
248
+ inputSchema: z.object({ value: z.number() }),
249
+ outputSchema: z.object({ result: z.string() }),
250
+ execute: async ({ inputData }) => ({
251
+ result: `Low value: ${inputData.value}`
252
+ })
253
+ });
254
+
255
+ const finalStep = createStep({
256
+ id: "final-step",
257
+ // The inputSchema must account for either branch's output
258
+ inputSchema: z.object({
259
+ "high-value-step": z.object({ result: z.string() }).optional(),
260
+ "low-value-step": z.object({ result: z.string() }).optional()
261
+ }),
262
+ outputSchema: z.object({ message: z.string() }),
263
+ execute: async ({ inputData }) => {
264
+ // Only one branch will have executed
265
+ const result = inputData["high-value-step"]?.result ||
266
+ inputData["low-value-step"]?.result;
267
+ return { message: result };
268
+ }
269
+ });
270
+
271
+ export const testWorkflow = createWorkflow({
272
+ id: "branch-output-example",
273
+ inputSchema: z.object({ value: z.number() }),
274
+ outputSchema: z.object({ message: z.string() })
275
+ })
276
+ .then(step1)
277
+ .branch([
278
+ [async ({ inputData }) => inputData.value > 10, highValueStep],
279
+ [async ({ inputData }) => inputData.value <= 10, lowValueStep]
280
+ ])
281
+ .then(finalStep)
282
+ .commit();
283
+
284
+ // When executed with { value: 15 }
285
+ // Only the high-value-step executes, output structure:
286
+ // {
287
+ // "high-value-step": { result: "High value: 15" }
288
+ // }
289
+
290
+ // When executed with { value: 5 }
291
+ // Only the low-value-step executes, output structure:
292
+ // {
293
+ // "low-value-step": { result: "Low value: 5" }
294
+ // }
295
+ ```
296
+
297
+ **Key points:**
298
+ - Only one branch executes based on condition evaluation order
299
+ - The output is keyed by the executed step's `id`
300
+ - Subsequent steps should handle all possible branch outputs
301
+ - Use optional fields in the `inputSchema` when the next step needs to handle multiple possible branches
302
+ - Conditions are evaluated in the order they're defined
303
+
161
304
  ## Input data mapping
162
305
 
163
306
  When using `.then()`, `.parallel()`, or `.branch()`, it is sometimes necessary to transform the output of a previous step to match the input of the next. In these cases you can use `.map()` to access the `inputData` and transform it to create a suitable data shape for the next step.
@@ -188,6 +331,43 @@ The `.map()` method provides additional helper functions for more complex mappin
188
331
  - [`getInitData()`](/reference/v1/workflows/workflow-methods/map#using-getinitdata): Access the workflow's initial input data
189
332
  - [`mapVariable()`](/reference/v1/workflows/workflow-methods/map#using-mapvariable): Use declarative object syntax to extract and rename fields
190
333
 
334
+ ### Parallel and Branch outputs
335
+
336
+ When working with `.parallel()` or `.branch()` outputs, you can use `.map()` to transform the data structure before passing it to the next step. This is especially useful when you need to flatten or restructure the output.
337
+
338
+ ```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
339
+ export const testWorkflow = createWorkflow({...})
340
+ .parallel([step1, step2])
341
+ .map(async ({ inputData }) => {
342
+ // Transform the parallel output structure
343
+ return {
344
+ combined: `${inputData["step1"].value} - ${inputData["step2"].value}`
345
+ };
346
+ })
347
+ .then(nextStep)
348
+ .commit();
349
+ ```
350
+
351
+ You can also use the helper functions provided by `.map()`:
352
+
353
+ ```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
354
+ export const testWorkflow = createWorkflow({...})
355
+ .branch([
356
+ [condition1, stepA],
357
+ [condition2, stepB]
358
+ ])
359
+ .map(async ({ inputData, getStepResult }) => {
360
+ // Access specific step results
361
+ const stepAResult = getStepResult("stepA");
362
+ const stepBResult = getStepResult("stepB");
363
+
364
+ // Return the result from whichever branch executed
365
+ return stepAResult || stepBResult;
366
+ })
367
+ .then(nextStep)
368
+ .commit();
369
+ ```
370
+
191
371
  ## Looping steps
192
372
 
193
373
  Workflows support different looping methods that let you repeat steps until or while a condition is met, or iterate over arrays. Loops can be combined with other control methods like `.then()`.
@@ -306,3 +486,8 @@ export const testWorkflow = createWorkflow({...})
306
486
  })
307
487
  .commit();
308
488
  ```
489
+
490
+ ## Related
491
+
492
+ - [Suspend & Resume](/docs/v1/workflows/suspend-and-resume)
493
+ - [Human-in-the-loop](/docs/v1/workflows/human-in-the-loop)
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: "Error Handling | Workflows | Mastra Docs"
2
+ title: "Error Handling | Workflows"
3
3
  description: "Learn how to handle errors in Mastra workflows using step retries, conditional branching, and monitoring."
4
4
  ---
5
5
 
@@ -187,6 +187,7 @@ for await (const chunk of stream.stream) {
187
187
 
188
188
  ## Related
189
189
 
190
- - [Control Flow](./control-flow)
191
- - [Conditional Branching](./control-flow#conditional-logic-with-branch)
192
- - [Running Workflows](/docs/v1/workflows/overview)
190
+ - [Control Flow](/docs/v1/workflows/control-flow)
191
+ - [Suspend & Resume](/docs/v1/workflows/suspend-and-resume)
192
+ - [Time Travel](/docs/v1/workflows/time-travel)
193
+ - [Human-in-the-loop](/docs/v1/workflows/human-in-the-loop)
@@ -1,271 +1,218 @@
1
1
  ---
2
- title: "Human-in-the-loop | Workflows | Mastra Docs"
3
- description: Example of using Mastra to create workflows with multi-turn human/agent interaction points using suspend/resume and dountil methods.
2
+ title: "Human-in-the-loop (HITL) | Workflows"
3
+ description: "Human-in-the-loop workflows in Mastra allow you to pause execution for manual approvals, reviews, or user input before continuing."
4
4
  ---
5
5
 
6
- import GithubLink from "@site/src/components/GithubLink";
6
+ # Human-in-the-loop (HITL)
7
7
 
8
- # Human-in-the-loop
8
+ Some workflows need to pause for human input before continuing. When a workflow is [suspended](/docs/v1/workflows/suspend-and-resume#pausing-a-workflow-with-suspend), it can return a message explaining why it paused and what’s needed to proceed. The workflow can then either [resume](#resuming-workflows-with-human-input) or [bail](#handling-human-rejection-with-bail) based on the input received. This approach works well for manual approvals, rejections, gated decisions, or any step that requires human oversight.
9
9
 
10
- Human-in-the-loop workflows enable ongoing interaction between humans and AI agents, allowing for complex decision-making processes that require multiple rounds of input and response. These workflows can suspend execution at specific points, wait for human input, and continue processing based on the responses received.
10
+ ## Pausing workflows for human input
11
11
 
12
- In this example, the multi-turn workflow is used to create a Heads Up game that demonstrates how to create interactive workflows using suspend/resume functionality and conditional logic with `dountil` to repeat a workflow step until a specific condition is met.
12
+ Human-in-the-loop input works much like [pausing a workflow](/docs/v1/workflows/suspend-and-resume) using `suspend()`. The key difference is that when human input is required, you can return `suspend()` with a payload that provides context or guidance to the user on how to continue.
13
13
 
14
- This example consists of three main components:
14
+ ![Pausing a workflow with suspend()](/img/workflows/workflows-suspend.jpg)
15
15
 
16
- 1. A [**Famous Person Agent**](#famous-person-agent) that generates a famous person's name.
17
- 2. A [**Game Agent**](#game-agent) that handles the gameplay.
18
- 3. A [**Multi-Turn Workflow**](#multi-turn-workflow) that orchestrates the interaction.
16
+ ```typescript {12-17,22-26} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
17
+ import { createWorkflow, createStep } from "@mastra/core/workflows";
18
+ import { z } from "zod";
19
19
 
20
- ## Prerequisites
20
+ const step1 = createStep({
21
+ id: "step-1",
22
+ inputSchema: z.object({
23
+ userEmail: z.string()
24
+ }),
25
+ outputSchema: z.object({
26
+ output: z.string()
27
+ }),
28
+ resumeSchema: z.object({
29
+ approved: z.boolean()
30
+ }),
31
+ suspendSchema: z.object({
32
+ reason: z.string()
33
+ }),
34
+ execute: async ({ inputData, resumeData, suspend }) => {
35
+ const { userEmail } = inputData;
36
+ const { approved } = resumeData ?? {};
21
37
 
22
- This example uses the `openai` model. Make sure to add the following to your `.env` file:
38
+ if (!approved) {
39
+ return await suspend({
40
+ reason: "Human approval required."
41
+ });
42
+ }
23
43
 
24
- ```bash title=".env" copy
25
- OPENAI_API_KEY=<your-api-key>
26
- ```
44
+ return {
45
+ output: `Email sent to ${userEmail}`
46
+ };
47
+ }
48
+ });
27
49
 
28
- ## Famous person agent
29
-
30
- The `famousPersonAgent` generates a unique name each time the game is played, using semantic memory to avoid repeating suggestions.
31
-
32
- ```typescript title="src/mastra/agents/example-famous-person-agent.ts" showLineNumbers copy
33
- import { openai } from "@ai-sdk/openai";
34
- import { Agent } from "@mastra/core/agent";
35
- import { Memory } from "@mastra/memory";
36
- import { LibSQLVector } from "@mastra/libsql";
37
-
38
- export const famousPersonAgent = new Agent({
39
- id: "famous-person-generator",
40
- name: "Famous Person Generator",
41
- instructions: `You are a famous person generator for a "Heads Up" guessing game.
42
-
43
- Generate the name of a well-known famous person who:
44
- - Is recognizable to most people
45
- - Has distinctive characteristics that can be described with yes/no questions
46
- - Is appropriate for all audiences
47
- - Has a clear, unambiguous name
48
-
49
- IMPORTANT: Use your memory to check what famous people you've already suggested and NEVER repeat a person you've already suggested.
50
-
51
- Examples: Albert Einstein, Beyoncé, Leonardo da Vinci, Oprah Winfrey, Michael Jordan
52
-
53
- Return only the person's name, nothing else.`,
54
- model: openai("gpt-4o"),
55
- memory: new Memory({
56
- vector: new LibSQLVector({
57
- id: 'workflow-vector',
58
- connectionUrl: "file:../mastra.db",
59
- }),
60
- embedder: openai.embedding("text-embedding-3-small"),
61
- options: {
62
- lastMessages: 5,
63
- semanticRecall: {
64
- topK: 10,
65
- messageRange: 1,
66
- },
67
- },
50
+ export const testWorkflow = createWorkflow({
51
+ id: "test-workflow",
52
+ inputSchema: z.object({
53
+ userEmail: z.string()
68
54
  }),
69
- });
55
+ outputSchema: z.object({
56
+ output: z.string()
57
+ })
58
+ })
59
+ .then(step1)
60
+ .commit();
70
61
  ```
71
62
 
72
- > See [Agent](/reference/v1/agents/agent) for a full list of configuration options.
63
+ ## Providing user feedback
64
+
65
+ When a workflow is suspended, you can access the payload returned by `suspend()` by identifying the suspended step and reading its `suspendPayload`.
66
+
67
+ ```typescript {12} title="src/test-workflow.ts" showLineNumbers copy
68
+ const workflow = mastra.getWorkflow("testWorkflow");
69
+ const run = await workflow.createRun();
70
+
71
+ const result = await run.start({
72
+ inputData: {
73
+ userEmail: "alex@example.com"
74
+ }
75
+ });
73
76
 
74
- ## Game agent
77
+ if (result.status === "suspended") {
78
+ const suspendStep = result.suspended[0];
79
+ const suspendedPayload = result.steps[suspendStep[0]].suspendPayload;
75
80
 
76
- The `gameAgent` handles user interactions by responding to questions and validating guesses.
81
+ console.log(suspendedPayload);
82
+ }
83
+ ```
84
+ **Example output**
77
85
 
78
- ```typescript title="src/mastra/agents/example-game-agent.ts" showLineNumbers copy
79
- import { openai } from "@ai-sdk/openai";
80
- import { Agent } from "@mastra/core/agent";
86
+ The data returned by the step can include a reason and help the user understand what’s needed to resume the workflow.
81
87
 
82
- export const gameAgent = new Agent({
83
- id: "game-agent",
84
- name: "Game Agent",
85
- instructions: `You are a helpful game assistant for a "Heads Up" guessing game.
88
+ ```typescript
89
+ { reason: 'Confirm to send email.' }
90
+ ```
86
91
 
87
- CRITICAL: You know the famous person's name but you must NEVER reveal it in any response.
92
+ ## Resuming workflows with human input
88
93
 
89
- When a user asks a question about the famous person:
90
- - Answer truthfully based on the famous person provided
91
- - Keep responses concise and friendly
92
- - NEVER mention the person's name, even if it seems natural
93
- - NEVER reveal gender, nationality, or other characteristics unless specifically asked about them
94
- - Answer yes/no questions with clear "Yes" or "No" responses
95
- - Be consistent - same question asked differently should get the same answer
96
- - Ask for clarification if a question is unclear
97
- - If multiple questions are asked at once, ask them to ask one at a time
94
+ As with [restarting a workflow](/docs/v1/workflows/suspend-and-resume#restarting-a-workflow-with-resume), use `resume()` with `resumeData` to continue a workflow after receiving input from a human. The workflow resumes from the step where it was paused.
98
95
 
99
- When they make a guess:
100
- - If correct: Congratulate them warmly
101
- - If incorrect: Politely correct them and encourage them to try again
96
+ ![Restarting a workflow with resume()](/img/workflows/workflows-resume.jpg)
102
97
 
103
- Encourage players to make a guess when they seem to have enough information.
98
+ ```typescript {13} showLineNumbers copy
99
+ const workflow = mastra.getWorkflow("testWorkflow");
100
+ const run = await workflow.createRun();
104
101
 
105
- You must return a JSON object with:
106
- - response: Your response to the user
107
- - gameWon: true if they guessed correctly, false otherwise`,
108
- model: openai("gpt-4o"),
102
+ await run.start({
103
+ inputData: {
104
+ userEmail: "alex@example.com"
105
+ }
109
106
  });
107
+
108
+ const handleResume = async () => {
109
+ const result = await run.resume({
110
+ step: "step-1",
111
+ resumeData: { approved: true }
112
+ });
113
+ };
110
114
  ```
111
115
 
112
- ## Multi-turn workflow
116
+ ### Handling human rejection with `bail()`
113
117
 
114
- The workflow coordinates the full interaction using `suspend`/`resume` to pause for human input and `dountil` to repeat the game loop until a condition is met.
118
+ Use `bail()` to stop workflow execution at a step without triggering an error. This can be useful when a human explicitly rejects an action. The workflow completes with a `success` status, and any logic after the call to `bail()` is skipped.
115
119
 
116
- The `startStep` generates a name using the `famousPersonAgent`, while the `gameStep` runs the interaction through the `gameAgent`, which handles both questions and guesses and produces structured output that includes a `gameWon` boolean.
120
+ ```typescript {7-11} showLineNumbers copy
121
+ const step1 = createStep({
122
+ // ...
123
+ execute: async ({ inputData, resumeData, suspend, bail }) => {
124
+ const { userEmail } = inputData;
125
+ const { approved } = resumeData ?? {};
117
126
 
118
- ```typescript title="src/mastra/workflows/example-heads-up-workflow.ts" showLineNumbers copy
119
- import { createWorkflow, createStep } from "@mastra/core/workflows";
120
- import { z } from "zod";
127
+ if (approved === false) {
128
+ return bail({
129
+ reason: "User rejected the request."
130
+ });
131
+ }
121
132
 
122
- const startStep = createStep({
123
- id: "start-step",
124
- description: "Get the name of a famous person",
125
- inputSchema: z.object({
126
- start: z.boolean(),
127
- }),
128
- outputSchema: z.object({
129
- famousPerson: z.string(),
130
- guessCount: z.number(),
131
- }),
132
- execute: async ({ mastra }) => {
133
- const agent = mastra.getAgent("famousPersonAgent");
134
- const response = await agent.generate("Generate a famous person's name", {
135
- temperature: 1.2,
136
- topP: 0.9,
137
- memory: {
138
- resource: "heads-up-game",
139
- thread: "famous-person-generator",
140
- },
141
- });
142
- const famousPerson = response.text.trim();
143
- return { famousPerson, guessCount: 0 };
144
- },
133
+ if (!approved) {
134
+ return await suspend({
135
+ reason: "Human approval required."
136
+ });
137
+ }
138
+
139
+ return {
140
+ message: `Email sent to ${userEmail}`
141
+ };
142
+ }
145
143
  });
144
+ ```
146
145
 
147
- const gameStep = createStep({
148
- id: "game-step",
149
- description: "Handles the question-answer-continue loop",
146
+ ## Multi-turn human input
147
+
148
+ For workflows that require input at multiple stages, the suspend pattern remains the same. Each step defines a `resumeSchema`, and `suspendSchema` typically with a reason that can be used to provide user feedback.
149
+
150
+ ```typescript {11-16,21-25} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
151
+ const step1 = createStep({...});
152
+
153
+ const step2 = createStep({
154
+ id: "step-2",
150
155
  inputSchema: z.object({
151
- famousPerson: z.string(),
152
- guessCount: z.number(),
156
+ message: z.string()
157
+ }),
158
+ outputSchema: z.object({
159
+ output: z.string()
153
160
  }),
154
161
  resumeSchema: z.object({
155
- userMessage: z.string(),
162
+ approved: z.boolean()
156
163
  }),
157
164
  suspendSchema: z.object({
158
- suspendResponse: z.string(),
159
- }),
160
- outputSchema: z.object({
161
- famousPerson: z.string(),
162
- gameWon: z.boolean(),
163
- agentResponse: z.string(),
164
- guessCount: z.number(),
165
+ reason: z.string()
165
166
  }),
166
- execute: async ({ inputData, mastra, resumeData, suspend }) => {
167
- let { famousPerson, guessCount } = inputData;
168
- const { userMessage } = resumeData ?? {};
167
+ execute: async ({ inputData, resumeData, suspend }) => {
168
+ const { message } = inputData;
169
+ const { approved } = resumeData ?? {};
169
170
 
170
- if (!userMessage) {
171
+ if (!approved) {
171
172
  return await suspend({
172
- suspendResponse:
173
- "I'm thinking of a famous person. Ask me yes/no questions to figure out who it is!",
173
+ reason: "Human approval required."
174
174
  });
175
175
  }
176
176
 
177
- const agent = mastra.getAgent("gameAgent");
178
- const response = await agent.generate(
179
- `
180
- The famous person is: ${famousPerson}
181
- The user said: "${userMessage}"
182
- Please respond appropriately. If this is a guess, tell me if it's correct.
183
- `,
184
- {
185
- structuredOutput: {
186
- schema: z.object({
187
- response: z.string(),
188
- gameWon: z.boolean(),
189
- }),
190
- },
191
- },
192
- );
193
-
194
- const { response: agentResponse, gameWon } = response.object;
195
-
196
- guessCount++;
197
-
198
- return { famousPerson, gameWon, agentResponse, guessCount };
199
- },
177
+ return {
178
+ output: `${message} - Deleted`
179
+ };
180
+ }
200
181
  });
201
182
 
202
- const winStep = createStep({
203
- id: "win-step",
204
- description: "Handle game win logic",
183
+ export const testWorkflow = createWorkflow({
184
+ id: "test-workflow",
205
185
  inputSchema: z.object({
206
- famousPerson: z.string(),
207
- gameWon: z.boolean(),
208
- agentResponse: z.string(),
209
- guessCount: z.number(),
186
+ userEmail: z.string()
210
187
  }),
211
188
  outputSchema: z.object({
212
- famousPerson: z.string(),
213
- gameWon: z.boolean(),
214
- guessCount: z.number(),
215
- }),
216
- execute: async ({ inputData }) => {
217
- const { famousPerson, gameWon, guessCount } = inputData;
218
-
219
- console.log("famousPerson: ", famousPerson);
220
- console.log("gameWon: ", gameWon);
221
- console.log("guessCount: ", guessCount);
222
-
223
- return { famousPerson, gameWon, guessCount };
224
- },
225
- });
226
-
227
- export const headsUpWorkflow = createWorkflow({
228
- id: "heads-up-workflow",
229
- inputSchema: z.object({
230
- start: z.boolean(),
231
- }),
232
- outputSchema: z.object({
233
- famousPerson: z.string(),
234
- gameWon: z.boolean(),
235
- guessCount: z.number(),
236
- }),
189
+ output: z.string()
190
+ })
237
191
  })
238
- .then(startStep)
239
- .dountil(gameStep, async ({ inputData: { gameWon } }) => gameWon)
240
- .then(winStep)
192
+ .then(step1)
193
+ .then(step2)
241
194
  .commit();
242
195
  ```
243
196
 
244
- > See [Workflow](/reference/v1/workflows/workflow) for a full list of configuration options.
245
-
246
- ## Registering the agents and workflow
247
-
248
- To use a workflow or an agent, register them in your main Mastra instance.
249
-
250
- ```typescript title="src/mastra/index.ts" showLineNumbers copy
251
- import { Mastra } from "@mastra/core";
252
-
253
- import { headsUpWorkflow } from "./workflows/example-heads-up-workflow";
254
- import { famousPersonAgent } from "./agents/example-famous-person-agent";
255
- import { gameAgent } from "./agents/example-game-agent";
256
-
257
- export const mastra = new Mastra({
258
- workflows: { headsUpWorkflow },
259
- agents: { famousPersonAgent, gameAgent },
260
- });
197
+ Each step must be resumed in sequence, with a separate call to `resume()` for each suspended step. This approach helps manage multi-step approvals with consistent UI feedback and clear input handling at each stage.
198
+
199
+ ```typescript {4,11} showLineNumbers copy
200
+ const handleResume = async () => {
201
+ const result = await run.resume({
202
+ step: "step-1",
203
+ resumeData: { approved: true }
204
+ });
205
+ };
206
+
207
+ const handleDelete = async () => {
208
+ const result = await run.resume({
209
+ step: "step-2",
210
+ resumeData: { approved: true }
211
+ });
212
+ };
261
213
  ```
262
214
 
263
- <GithubLink
264
- marginTop="mt-16"
265
- link="https://github.com/mastra-ai/mastra/blob/main/examples/heads-up-game/"
266
- />
267
-
268
215
  ## Related
269
216
 
270
- - [Running Workflows](./overview#running-workflows)
271
217
  - [Control Flow](/docs/v1/workflows/control-flow)
218
+ - [Suspend & Resume](/docs/v1/workflows/suspend-and-resume)