@mastra/mcp-docs-server 0.13.37 → 0.13.39-alpha.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.
- package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +2 -0
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +2 -0
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +8 -8
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +2 -0
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +16 -16
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +38 -38
- package/.docs/organized/changelogs/%40mastra%2Fcloud.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +88 -88
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +28 -28
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +27 -27
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +27 -27
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +27 -27
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +59 -59
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Ffastembed.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Flance.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +25 -25
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +48 -48
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Frag.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Freact.md +24 -24
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +9 -0
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +40 -40
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +11 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +10 -10
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +11 -11
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +10 -10
- package/.docs/organized/changelogs/create-mastra.md +11 -11
- package/.docs/organized/changelogs/mastra.md +34 -34
- package/.docs/raw/agents/adding-voice.mdx +20 -9
- package/.docs/raw/agents/agent-memory.mdx +55 -39
- package/.docs/raw/agents/guardrails.mdx +68 -61
- package/.docs/raw/agents/networks.mdx +50 -46
- package/.docs/raw/agents/overview.mdx +126 -89
- package/.docs/raw/agents/using-tools.mdx +14 -15
- package/.docs/raw/auth/auth0.mdx +28 -27
- package/.docs/raw/auth/clerk.mdx +22 -20
- package/.docs/raw/auth/firebase.mdx +42 -39
- package/.docs/raw/auth/index.mdx +1 -1
- package/.docs/raw/auth/jwt.mdx +18 -16
- package/.docs/raw/auth/supabase.mdx +20 -18
- package/.docs/raw/auth/workos.mdx +32 -26
- package/.docs/raw/community/contributing-templates.mdx +7 -7
- package/.docs/raw/community/discord.mdx +2 -2
- package/.docs/raw/community/licensing.mdx +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/04-initializing-mcp-tools.md +2 -2
- package/.docs/raw/course/03-agent-memory/18-advanced-configuration-semantic-recall.md +1 -1
- package/.docs/raw/course/03-agent-memory/26-updating-mastra-export-comprehensive.md +0 -32
- package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +41 -22
- package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +48 -29
- package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +52 -24
- package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +86 -55
- package/.docs/raw/deployment/cloud-providers/index.mdx +16 -13
- package/.docs/raw/deployment/monorepo.mdx +32 -42
- package/.docs/raw/deployment/overview.mdx +15 -15
- package/.docs/raw/deployment/server-deployment.mdx +18 -23
- package/.docs/raw/deployment/serverless-platforms/cloudflare-deployer.mdx +16 -17
- package/.docs/raw/deployment/serverless-platforms/index.mdx +15 -12
- package/.docs/raw/deployment/serverless-platforms/netlify-deployer.mdx +14 -23
- package/.docs/raw/deployment/serverless-platforms/vercel-deployer.mdx +16 -23
- package/.docs/raw/deployment/web-framework.mdx +14 -14
- package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +130 -121
- package/.docs/raw/frameworks/agentic-uis/assistant-ui.mdx +54 -43
- package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +51 -36
- package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +161 -120
- package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +60 -49
- package/.docs/raw/frameworks/servers/express.mdx +46 -45
- package/.docs/raw/frameworks/web-frameworks/astro.mdx +245 -162
- package/.docs/raw/frameworks/web-frameworks/next-js.mdx +112 -69
- package/.docs/raw/frameworks/web-frameworks/sveltekit.mdx +171 -130
- package/.docs/raw/frameworks/web-frameworks/vite-react.mdx +94 -81
- package/.docs/raw/getting-started/installation.mdx +165 -134
- package/.docs/raw/getting-started/mcp-docs-server.mdx +36 -39
- package/.docs/raw/getting-started/project-structure.mdx +34 -42
- package/.docs/raw/getting-started/studio.mdx +42 -50
- package/.docs/raw/getting-started/templates.mdx +18 -15
- package/.docs/raw/index.mdx +9 -9
- package/.docs/raw/mastra-cloud/dashboard.mdx +12 -12
- package/.docs/raw/mastra-cloud/observability.mdx +9 -10
- package/.docs/raw/mastra-cloud/overview.mdx +17 -23
- package/.docs/raw/mastra-cloud/setting-up.mdx +33 -20
- package/.docs/raw/memory/conversation-history.mdx +2 -2
- package/.docs/raw/memory/overview.mdx +22 -24
- package/.docs/raw/memory/semantic-recall.mdx +16 -17
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +27 -28
- package/.docs/raw/memory/storage/memory-with-pg.mdx +26 -26
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +26 -27
- package/.docs/raw/memory/threads-and-resources.mdx +24 -21
- package/.docs/raw/memory/working-memory.mdx +27 -38
- package/.docs/raw/observability/ai-tracing/exporters/arize.mdx +30 -29
- package/.docs/raw/observability/ai-tracing/exporters/braintrust.mdx +8 -9
- package/.docs/raw/observability/ai-tracing/exporters/cloud.mdx +17 -16
- package/.docs/raw/observability/ai-tracing/exporters/default.mdx +37 -38
- package/.docs/raw/observability/ai-tracing/exporters/langfuse.mdx +18 -17
- package/.docs/raw/observability/ai-tracing/exporters/langsmith.mdx +14 -14
- package/.docs/raw/observability/ai-tracing/exporters/otel.mdx +56 -46
- package/.docs/raw/observability/ai-tracing/overview.mdx +151 -128
- package/.docs/raw/observability/ai-tracing/processors/sensitive-data-filter.mdx +57 -36
- package/.docs/raw/observability/logging.mdx +14 -17
- package/.docs/raw/observability/nextjs-tracing.mdx +5 -5
- package/.docs/raw/observability/otel-tracing.mdx +17 -18
- package/.docs/raw/observability/overview.mdx +15 -11
- package/.docs/raw/rag/chunking-and-embedding.mdx +10 -8
- package/.docs/raw/rag/overview.mdx +5 -5
- package/.docs/raw/rag/retrieval.mdx +125 -107
- package/.docs/raw/rag/vector-databases.mdx +232 -223
- package/.docs/raw/reference/agents/agent.mdx +56 -43
- package/.docs/raw/reference/agents/generate.mdx +367 -261
- package/.docs/raw/reference/agents/generateLegacy.mdx +260 -178
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +7 -5
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +7 -5
- package/.docs/raw/reference/agents/getDescription.mdx +3 -2
- package/.docs/raw/reference/agents/getInstructions.mdx +7 -5
- package/.docs/raw/reference/agents/getLLM.mdx +11 -7
- package/.docs/raw/reference/agents/getMemory.mdx +7 -5
- package/.docs/raw/reference/agents/getModel.mdx +7 -5
- package/.docs/raw/reference/agents/getScorers.mdx +7 -5
- package/.docs/raw/reference/agents/getTools.mdx +7 -5
- package/.docs/raw/reference/agents/getVoice.mdx +7 -5
- package/.docs/raw/reference/agents/getWorkflows.mdx +7 -5
- package/.docs/raw/reference/agents/listAgents.mdx +6 -4
- package/.docs/raw/reference/agents/listScorers.mdx +69 -0
- package/.docs/raw/reference/agents/listTools.mdx +69 -0
- package/.docs/raw/reference/agents/listWorkflows.mdx +69 -0
- package/.docs/raw/reference/agents/network.mdx +171 -116
- package/.docs/raw/reference/auth/auth0.mdx +18 -14
- package/.docs/raw/reference/auth/clerk.mdx +15 -12
- package/.docs/raw/reference/auth/firebase.mdx +23 -16
- package/.docs/raw/reference/auth/jwt.mdx +7 -6
- package/.docs/raw/reference/auth/supabase.mdx +13 -10
- package/.docs/raw/reference/auth/workos.mdx +17 -13
- package/.docs/raw/reference/cli/create-mastra.mdx +61 -44
- package/.docs/raw/reference/cli/mastra.mdx +11 -11
- package/.docs/raw/reference/client-js/agents.mdx +41 -44
- package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
- package/.docs/raw/reference/client-js/logs.mdx +2 -2
- package/.docs/raw/reference/client-js/mastra-client.mdx +28 -20
- package/.docs/raw/reference/client-js/memory.mdx +7 -3
- package/.docs/raw/reference/client-js/observability.mdx +10 -9
- package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
- package/.docs/raw/reference/client-js/tools.mdx +2 -2
- package/.docs/raw/reference/client-js/vectors.mdx +1 -1
- package/.docs/raw/reference/client-js/workflows-legacy.mdx +1 -1
- package/.docs/raw/reference/client-js/workflows.mdx +8 -8
- package/.docs/raw/reference/core/getAgent.mdx +6 -5
- package/.docs/raw/reference/core/getAgentById.mdx +5 -4
- package/.docs/raw/reference/core/getAgents.mdx +3 -3
- package/.docs/raw/reference/core/getDeployer.mdx +4 -3
- package/.docs/raw/reference/core/getLogger.mdx +4 -3
- package/.docs/raw/reference/core/getLogs.mdx +10 -6
- package/.docs/raw/reference/core/getLogsByRunId.mdx +8 -5
- package/.docs/raw/reference/core/getMCPServer.mdx +8 -5
- package/.docs/raw/reference/core/getMCPServers.mdx +4 -3
- package/.docs/raw/reference/core/getMemory.mdx +4 -3
- package/.docs/raw/reference/core/getScorer.mdx +15 -12
- package/.docs/raw/reference/core/getScorerByName.mdx +13 -10
- package/.docs/raw/reference/core/getScorers.mdx +3 -2
- package/.docs/raw/reference/core/getServer.mdx +4 -3
- package/.docs/raw/reference/core/getStorage.mdx +4 -3
- package/.docs/raw/reference/core/getTelemetry.mdx +4 -3
- package/.docs/raw/reference/core/getVector.mdx +6 -4
- package/.docs/raw/reference/core/getVectors.mdx +4 -3
- package/.docs/raw/reference/core/getWorkflow.mdx +7 -4
- package/.docs/raw/reference/core/getWorkflows.mdx +5 -3
- package/.docs/raw/reference/core/listAgents.mdx +35 -0
- package/.docs/raw/reference/core/listLogs.mdx +96 -0
- package/.docs/raw/reference/core/listLogsByRunId.mdx +87 -0
- package/.docs/raw/reference/core/listScorers.mdx +43 -0
- package/.docs/raw/reference/core/listWorkflows.mdx +45 -0
- package/.docs/raw/reference/core/mastra-class.mdx +16 -16
- package/.docs/raw/reference/core/setLogger.mdx +6 -4
- package/.docs/raw/reference/core/setStorage.mdx +4 -4
- package/.docs/raw/reference/core/setTelemetry.mdx +4 -3
- package/.docs/raw/reference/deployer/cloudflare.mdx +11 -7
- package/.docs/raw/reference/deployer/deployer.mdx +2 -1
- package/.docs/raw/reference/deployer/netlify.mdx +4 -4
- package/.docs/raw/reference/deployer/vercel.mdx +6 -6
- package/.docs/raw/reference/evals/answer-relevancy.mdx +4 -5
- package/.docs/raw/reference/evals/bias.mdx +4 -5
- package/.docs/raw/reference/evals/completeness.mdx +4 -5
- package/.docs/raw/reference/evals/content-similarity.mdx +4 -5
- package/.docs/raw/reference/evals/context-position.mdx +4 -5
- package/.docs/raw/reference/evals/context-precision.mdx +4 -5
- package/.docs/raw/reference/evals/context-relevancy.mdx +4 -5
- package/.docs/raw/reference/evals/contextual-recall.mdx +4 -5
- package/.docs/raw/reference/evals/faithfulness.mdx +4 -5
- package/.docs/raw/reference/evals/hallucination.mdx +4 -6
- package/.docs/raw/reference/evals/keyword-coverage.mdx +4 -5
- package/.docs/raw/reference/evals/prompt-alignment.mdx +4 -6
- package/.docs/raw/reference/evals/summarization.mdx +4 -6
- package/.docs/raw/reference/evals/textual-difference.mdx +4 -5
- package/.docs/raw/reference/evals/tone-consistency.mdx +4 -7
- package/.docs/raw/reference/evals/toxicity.mdx +4 -5
- package/.docs/raw/reference/index.mdx +3 -3
- package/.docs/raw/reference/legacyWorkflows/after.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/afterEvent.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/commit.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/createRun.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/else.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/events.mdx +7 -7
- package/.docs/raw/reference/legacyWorkflows/execute.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/if.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/resume.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/resumeWithEvent.mdx +6 -6
- package/.docs/raw/reference/legacyWorkflows/snapshots.mdx +6 -6
- package/.docs/raw/reference/legacyWorkflows/start.mdx +6 -6
- package/.docs/raw/reference/legacyWorkflows/step-class.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/step-condition.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/step-function.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/step-options.mdx +6 -6
- package/.docs/raw/reference/legacyWorkflows/step-retries.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/suspend.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/then.mdx +5 -5
- package/.docs/raw/reference/legacyWorkflows/until.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/watch.mdx +3 -3
- package/.docs/raw/reference/legacyWorkflows/while.mdx +4 -4
- package/.docs/raw/reference/legacyWorkflows/workflow.mdx +7 -7
- package/.docs/raw/reference/memory/createThread.mdx +10 -10
- package/.docs/raw/reference/memory/deleteMessages.mdx +7 -5
- package/.docs/raw/reference/memory/getThreadById.mdx +6 -5
- package/.docs/raw/reference/memory/getThreadsByResourceId.mdx +11 -10
- package/.docs/raw/reference/memory/getThreadsByResourceIdPaginated.mdx +10 -9
- package/.docs/raw/reference/memory/{Memory.mdx → memory-class.mdx} +55 -47
- package/.docs/raw/reference/memory/query.mdx +39 -25
- package/.docs/raw/reference/observability/ai-tracing/ai-tracing.mdx +9 -6
- package/.docs/raw/reference/observability/ai-tracing/configuration.mdx +26 -22
- package/.docs/raw/reference/observability/ai-tracing/exporters/arize.mdx +16 -12
- package/.docs/raw/reference/observability/ai-tracing/exporters/braintrust.mdx +14 -14
- package/.docs/raw/reference/observability/ai-tracing/exporters/cloud-exporter.mdx +16 -11
- package/.docs/raw/reference/observability/ai-tracing/exporters/console-exporter.mdx +10 -6
- package/.docs/raw/reference/observability/ai-tracing/exporters/default-exporter.mdx +23 -15
- package/.docs/raw/reference/observability/ai-tracing/exporters/langfuse.mdx +6 -6
- package/.docs/raw/reference/observability/ai-tracing/exporters/langsmith.mdx +13 -13
- package/.docs/raw/reference/observability/ai-tracing/exporters/otel.mdx +44 -36
- package/.docs/raw/reference/observability/ai-tracing/interfaces.mdx +116 -107
- package/.docs/raw/reference/observability/ai-tracing/processors/sensitive-data-filter.mdx +37 -32
- package/.docs/raw/reference/observability/ai-tracing/span.mdx +29 -26
- package/.docs/raw/reference/observability/logging/pino-logger.mdx +13 -15
- package/.docs/raw/reference/observability/otel-tracing/otel-config.mdx +2 -2
- package/.docs/raw/reference/observability/otel-tracing/providers/arize-ax.mdx +3 -3
- package/.docs/raw/reference/observability/otel-tracing/providers/arize-phoenix.mdx +2 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/dash0.mdx +1 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/index.mdx +12 -14
- package/.docs/raw/reference/observability/otel-tracing/providers/keywordsai.mdx +4 -4
- package/.docs/raw/reference/observability/otel-tracing/providers/laminar.mdx +1 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/langfuse.mdx +4 -4
- package/.docs/raw/reference/observability/otel-tracing/providers/langsmith.mdx +1 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/langwatch.mdx +2 -2
- package/.docs/raw/reference/observability/otel-tracing/providers/new-relic.mdx +1 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/signoz.mdx +1 -1
- package/.docs/raw/reference/observability/otel-tracing/providers/traceloop.mdx +1 -1
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +3 -4
- package/.docs/raw/reference/processors/language-detector.mdx +6 -8
- package/.docs/raw/reference/processors/moderation-processor.mdx +36 -11
- package/.docs/raw/reference/processors/pii-detector.mdx +34 -9
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +6 -8
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +14 -10
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +3 -5
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +3 -4
- package/.docs/raw/reference/rag/chunk.mdx +41 -23
- package/.docs/raw/reference/rag/database-config.mdx +56 -38
- package/.docs/raw/reference/rag/embeddings.mdx +1 -1
- package/.docs/raw/reference/rag/extract-params.mdx +1 -1
- package/.docs/raw/reference/rag/graph-rag.mdx +1 -1
- package/.docs/raw/reference/rag/metadata-filters.mdx +23 -26
- package/.docs/raw/reference/rag/rerank.mdx +1 -1
- package/.docs/raw/reference/rag/rerankWithScorer.mdx +2 -2
- package/.docs/raw/reference/scorers/answer-relevancy.mdx +35 -17
- package/.docs/raw/reference/scorers/answer-similarity.mdx +84 -68
- package/.docs/raw/reference/scorers/bias.mdx +22 -19
- package/.docs/raw/reference/scorers/completeness.mdx +21 -16
- package/.docs/raw/reference/scorers/content-similarity.mdx +12 -10
- package/.docs/raw/reference/scorers/context-precision.mdx +73 -64
- package/.docs/raw/reference/scorers/context-relevance.mdx +142 -126
- package/.docs/raw/reference/scorers/create-scorer.mdx +93 -61
- package/.docs/raw/reference/scorers/faithfulness.mdx +21 -13
- package/.docs/raw/reference/scorers/hallucination.mdx +17 -12
- package/.docs/raw/reference/scorers/keyword-coverage.mdx +32 -27
- package/.docs/raw/reference/scorers/mastra-scorer.mdx +39 -33
- package/.docs/raw/reference/scorers/noise-sensitivity.mdx +203 -152
- package/.docs/raw/reference/scorers/prompt-alignment.mdx +186 -132
- package/.docs/raw/reference/scorers/run-experiment.mdx +41 -32
- package/.docs/raw/reference/scorers/textual-difference.mdx +25 -26
- package/.docs/raw/reference/scorers/tone-consistency.mdx +29 -26
- package/.docs/raw/reference/scorers/tool-call-accuracy.mdx +180 -176
- package/.docs/raw/reference/scorers/toxicity.mdx +35 -31
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +1 -1
- package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
- package/.docs/raw/reference/storage/dynamodb.mdx +1 -1
- package/.docs/raw/reference/storage/lance.mdx +1 -1
- package/.docs/raw/reference/storage/libsql.mdx +2 -2
- package/.docs/raw/reference/storage/mongodb.mdx +4 -5
- package/.docs/raw/reference/storage/mssql.mdx +8 -7
- package/.docs/raw/reference/storage/postgresql.mdx +35 -33
- package/.docs/raw/reference/storage/upstash.mdx +6 -5
- package/.docs/raw/reference/streaming/ChunkType.mdx +788 -314
- package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +265 -109
- package/.docs/raw/reference/streaming/agents/stream.mdx +375 -266
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +233 -162
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +4 -4
- package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +5 -5
- package/.docs/raw/reference/streaming/workflows/resumeStreamVNext.mdx +25 -21
- package/.docs/raw/reference/streaming/workflows/stream.mdx +36 -27
- package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +37 -28
- package/.docs/raw/reference/templates/overview.mdx +16 -39
- package/.docs/raw/reference/tools/client.mdx +1 -1
- package/.docs/raw/reference/tools/create-tool.mdx +45 -35
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +2 -2
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +12 -12
- package/.docs/raw/reference/tools/mcp-client.mdx +78 -72
- package/.docs/raw/reference/tools/mcp-server.mdx +91 -78
- package/.docs/raw/reference/tools/vector-query-tool.mdx +48 -38
- package/.docs/raw/reference/vectors/astra.mdx +1 -1
- package/.docs/raw/reference/vectors/chroma.mdx +25 -19
- package/.docs/raw/reference/vectors/couchbase.mdx +4 -4
- package/.docs/raw/reference/vectors/lance.mdx +5 -6
- package/.docs/raw/reference/vectors/libsql.mdx +1 -1
- package/.docs/raw/reference/vectors/mongodb.mdx +1 -1
- package/.docs/raw/reference/vectors/opensearch.mdx +1 -1
- package/.docs/raw/reference/vectors/pg.mdx +8 -4
- package/.docs/raw/reference/vectors/pinecone.mdx +1 -1
- package/.docs/raw/reference/vectors/qdrant.mdx +1 -1
- package/.docs/raw/reference/vectors/s3vectors.mdx +35 -27
- package/.docs/raw/reference/vectors/turbopuffer.mdx +1 -1
- package/.docs/raw/reference/vectors/upstash.mdx +33 -25
- package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
- package/.docs/raw/reference/voice/azure.mdx +1 -1
- package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
- package/.docs/raw/reference/voice/composite-voice.mdx +1 -1
- package/.docs/raw/reference/voice/deepgram.mdx +1 -1
- package/.docs/raw/reference/voice/elevenlabs.mdx +1 -1
- package/.docs/raw/reference/voice/google-gemini-live.mdx +7 -5
- package/.docs/raw/reference/voice/google.mdx +1 -1
- package/.docs/raw/reference/voice/mastra-voice.mdx +1 -1
- package/.docs/raw/reference/voice/murf.mdx +1 -1
- package/.docs/raw/reference/voice/openai-realtime.mdx +1 -1
- package/.docs/raw/reference/voice/openai.mdx +1 -1
- package/.docs/raw/reference/voice/playai.mdx +1 -1
- package/.docs/raw/reference/voice/sarvam.mdx +1 -1
- package/.docs/raw/reference/voice/speechify.mdx +1 -1
- package/.docs/raw/reference/voice/voice.addInstructions.mdx +1 -1
- package/.docs/raw/reference/voice/voice.addTools.mdx +1 -1
- package/.docs/raw/reference/voice/voice.answer.mdx +1 -1
- package/.docs/raw/reference/voice/voice.close.mdx +1 -1
- package/.docs/raw/reference/voice/voice.connect.mdx +1 -1
- package/.docs/raw/reference/voice/voice.events.mdx +1 -1
- package/.docs/raw/reference/voice/voice.getSpeakers.mdx +23 -30
- package/.docs/raw/reference/voice/voice.listen.mdx +1 -1
- package/.docs/raw/reference/voice/voice.off.mdx +1 -1
- package/.docs/raw/reference/voice/voice.on.mdx +1 -1
- package/.docs/raw/reference/voice/voice.send.mdx +1 -1
- package/.docs/raw/reference/voice/voice.speak.mdx +1 -1
- package/.docs/raw/reference/voice/voice.updateConfig.mdx +1 -1
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +4 -3
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +49 -34
- package/.docs/raw/reference/workflows/run-methods/start.mdx +43 -31
- package/.docs/raw/reference/workflows/run-methods/watch.mdx +7 -8
- package/.docs/raw/reference/workflows/run.mdx +7 -10
- package/.docs/raw/reference/workflows/step.mdx +16 -13
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +2 -2
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +7 -7
- package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +2 -2
- package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +2 -2
- package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +74 -3
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +5 -5
- package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +3 -2
- package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +3 -2
- package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +3 -3
- package/.docs/raw/reference/workflows/workflow.mdx +12 -23
- package/.docs/raw/scorers/custom-scorers.mdx +58 -48
- package/.docs/raw/scorers/evals-old-api/custom-eval.mdx +6 -8
- package/.docs/raw/scorers/evals-old-api/overview.mdx +8 -8
- package/.docs/raw/scorers/evals-old-api/running-in-ci.mdx +9 -9
- package/.docs/raw/scorers/evals-old-api/textual-evals.mdx +5 -5
- package/.docs/raw/scorers/off-the-shelf-scorers.mdx +3 -1
- package/.docs/raw/scorers/overview.mdx +23 -22
- package/.docs/raw/server-db/custom-api-routes.mdx +8 -8
- package/.docs/raw/server-db/mastra-client.mdx +56 -54
- package/.docs/raw/server-db/middleware.mdx +15 -11
- package/.docs/raw/server-db/production-server.mdx +5 -7
- package/.docs/raw/server-db/runtime-context.mdx +41 -38
- package/.docs/raw/server-db/storage.mdx +82 -87
- package/.docs/raw/streaming/events.mdx +24 -16
- package/.docs/raw/streaming/overview.mdx +17 -18
- package/.docs/raw/streaming/tool-streaming.mdx +9 -10
- package/.docs/raw/streaming/workflow-streaming.mdx +14 -12
- package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -2
- package/.docs/raw/tools-mcp/mcp-overview.mdx +92 -102
- package/.docs/raw/tools-mcp/overview.mdx +10 -15
- package/.docs/raw/voice/overview.mdx +273 -250
- package/.docs/raw/voice/speech-to-speech.mdx +14 -12
- package/.docs/raw/voice/speech-to-text.mdx +2 -2
- package/.docs/raw/voice/text-to-speech.mdx +2 -2
- package/.docs/raw/workflows/agents-and-tools.mdx +27 -30
- package/.docs/raw/workflows/control-flow.mdx +213 -170
- package/.docs/raw/workflows/error-handling.mdx +15 -17
- package/.docs/raw/workflows/human-in-the-loop.mdx +39 -39
- package/.docs/raw/workflows/inngest-workflow.mdx +35 -31
- package/.docs/raw/workflows/overview.mdx +108 -56
- package/.docs/raw/workflows/snapshots.mdx +54 -36
- package/.docs/raw/workflows/suspend-and-resume.mdx +52 -65
- package/.docs/raw/workflows-legacy/control-flow.mdx +15 -17
- package/.docs/raw/workflows-legacy/dynamic-workflows.mdx +3 -1
- package/.docs/raw/workflows-legacy/error-handling.mdx +8 -6
- package/.docs/raw/workflows-legacy/nested-workflows.mdx +6 -0
- package/.docs/raw/workflows-legacy/overview.mdx +28 -26
- package/.docs/raw/workflows-legacy/runtime-variables.mdx +4 -2
- package/.docs/raw/workflows-legacy/steps.mdx +5 -3
- package/.docs/raw/workflows-legacy/suspend-and-resume.mdx +10 -8
- package/.docs/raw/workflows-legacy/variables.mdx +10 -8
- package/CHANGELOG.md +24 -0
- package/package.json +5 -5
- package/.docs/raw/memory/storage/memory-with-mongodb.mdx +0 -148
- package/.docs/raw/workflows/input-data-mapping.mdx +0 -107
|
@@ -1,265 +1,308 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
2
|
+
title: "Control Flow | Workflows | Mastra Docs"
|
|
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
|
|
|
6
6
|
# Control Flow
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Workflows run a sequence of predefined tasks, and you can control how that flow is executed. Tasks are divided into **steps**, which can be executed in different ways depending on your requirements. They can run sequentially, in parallel, or follow different paths based on conditions.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Each step connects to the next in the workflow through defined schemas that keep data controlled and consistent.
|
|
11
|
+
|
|
12
|
+
## Core principles
|
|
13
|
+
|
|
14
|
+
- The first step’s `inputSchema` must match the workflow’s `inputSchema`.
|
|
15
|
+
- The final step’s `outputSchema` must match the workflow’s `outputSchema`.
|
|
16
|
+
- Each step’s `outputSchema` must match the next step’s `inputSchema`.
|
|
17
|
+
- If it doesn’t, use [Input data mapping](#input-data-mapping) to transform the data into the required shape.
|
|
12
18
|
|
|
13
19
|
## Chaining steps with `.then()`
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
Use `.then()` to run steps in order, allowing each step to access the result of the step before it.
|
|
16
22
|
|
|
17
|
-
](/img/workflows/workflows-control-flow-then.jpg)
|
|
18
24
|
|
|
19
|
-
```typescript {
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
```typescript {30-31} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
26
|
+
const step1 = createStep({
|
|
27
|
+
//...
|
|
28
|
+
inputSchema: z.object({
|
|
29
|
+
message: z.string()
|
|
30
|
+
}),
|
|
31
|
+
outputSchema: z.object({
|
|
32
|
+
formatted: z.string()
|
|
33
|
+
})
|
|
34
|
+
});
|
|
22
35
|
|
|
23
|
-
const
|
|
24
|
-
|
|
36
|
+
const step2 = createStep({
|
|
37
|
+
// ...
|
|
38
|
+
inputSchema: z.object({
|
|
39
|
+
formatted: z.string()
|
|
40
|
+
}),
|
|
41
|
+
outputSchema: z.object({
|
|
42
|
+
emphasized: z.string()
|
|
43
|
+
})
|
|
44
|
+
});
|
|
25
45
|
|
|
26
|
-
export const testWorkflow = createWorkflow({
|
|
46
|
+
export const testWorkflow = createWorkflow({
|
|
47
|
+
// ...
|
|
48
|
+
inputSchema: z.object({
|
|
49
|
+
message: z.string()
|
|
50
|
+
}),
|
|
51
|
+
outputSchema: z.object({
|
|
52
|
+
emphasized: z.string()
|
|
53
|
+
})
|
|
54
|
+
})
|
|
27
55
|
.then(step1)
|
|
28
56
|
.then(step2)
|
|
29
57
|
.commit();
|
|
30
58
|
```
|
|
31
59
|
|
|
32
|
-
This does what you'd expect: it executes `step1`, then it executes `step2`.
|
|
33
|
-
|
|
34
60
|
## Simultaneous steps with `.parallel()`
|
|
35
61
|
|
|
36
|
-
|
|
62
|
+
Use `.parallel()` to run steps at the same time. Each step's `id` is used when defining a following step's `inputSchema` and becomes the key on the `inputData` object used to access the previous step's values. The outputs of parallel steps can then be referenced or combined by a following step.
|
|
37
63
|
|
|
38
|
-
](/img/workflows/workflows-control-flow-parallel.jpg)
|
|
39
65
|
|
|
40
|
-
```typescript {
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
```typescript {42} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
67
|
+
const step1 = createStep({
|
|
68
|
+
id: "step-1",
|
|
69
|
+
// ...
|
|
70
|
+
});
|
|
43
71
|
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
72
|
+
const step2 = createStep({
|
|
73
|
+
id: "step-2",
|
|
74
|
+
// ...
|
|
75
|
+
});
|
|
47
76
|
|
|
48
|
-
|
|
77
|
+
const step3 = createStep({
|
|
78
|
+
id: "step-3",
|
|
79
|
+
inputSchema: z.object({
|
|
80
|
+
"step-1": z.object({
|
|
81
|
+
formatted: z.string()
|
|
82
|
+
}),
|
|
83
|
+
"step-2": z.object({
|
|
84
|
+
emphasized: z.string()
|
|
85
|
+
})
|
|
86
|
+
}),
|
|
87
|
+
outputSchema: z.object({
|
|
88
|
+
combined: z.string()
|
|
89
|
+
}),
|
|
90
|
+
execute: async ({ inputData }) => {
|
|
91
|
+
const { formatted } = inputData["step-1"];
|
|
92
|
+
const { emphasized } = inputData["step-2"];
|
|
93
|
+
return {
|
|
94
|
+
combined: `${formatted} | ${emphasized}`
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
export const testWorkflow = createWorkflow({
|
|
100
|
+
// ...
|
|
101
|
+
inputSchema: z.object({
|
|
102
|
+
message: z.string()
|
|
103
|
+
}),
|
|
104
|
+
outputSchema: z.object({
|
|
105
|
+
combined: z.string()
|
|
106
|
+
})
|
|
107
|
+
})
|
|
49
108
|
.parallel([step1, step2])
|
|
50
109
|
.then(step3)
|
|
51
110
|
.commit();
|
|
52
111
|
```
|
|
53
112
|
|
|
54
|
-
This executes `step1` and `step2` concurrently, then continues to `step3` after both complete.
|
|
55
|
-
|
|
56
|
-
> See [Parallel Execution with Steps](../../examples/workflows/parallel-steps.mdx) for more information.
|
|
57
|
-
|
|
58
113
|
> 📹 Watch: How to run steps in parallel and optimize your Mastra workflow → [YouTube (3 minutes)](https://youtu.be/GQJxve5Hki4)
|
|
59
114
|
|
|
60
115
|
## Conditional logic with `.branch()`
|
|
61
116
|
|
|
62
|
-
|
|
117
|
+
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.
|
|
118
|
+
|
|
119
|
+

|
|
63
120
|
|
|
64
|
-
|
|
121
|
+
```typescript {33-36} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
122
|
+
const step1 = createStep({...})
|
|
65
123
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
124
|
+
const stepA = createStep({
|
|
125
|
+
// ...
|
|
126
|
+
inputSchema: z.object({
|
|
127
|
+
value: z.number()
|
|
128
|
+
}),
|
|
129
|
+
outputSchema: z.object({
|
|
130
|
+
result: z.string()
|
|
131
|
+
})
|
|
132
|
+
});
|
|
69
133
|
|
|
70
|
-
const
|
|
71
|
-
|
|
134
|
+
const stepB = createStep({
|
|
135
|
+
// ...
|
|
136
|
+
inputSchema: z.object({
|
|
137
|
+
value: z.number()
|
|
138
|
+
}),
|
|
139
|
+
outputSchema: z.object({
|
|
140
|
+
result: z.string()
|
|
141
|
+
})
|
|
142
|
+
});
|
|
72
143
|
|
|
73
|
-
export const testWorkflow = createWorkflow({
|
|
144
|
+
export const testWorkflow = createWorkflow({
|
|
145
|
+
// ...
|
|
146
|
+
inputSchema: z.object({
|
|
147
|
+
value: z.number()
|
|
148
|
+
}),
|
|
149
|
+
outputSchema: z.object({
|
|
150
|
+
result: z.string()
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
.then(step1)
|
|
74
154
|
.branch([
|
|
75
|
-
[async ({ inputData: { value } }) => value
|
|
76
|
-
[async ({ inputData: { value } }) => value
|
|
155
|
+
[async ({ inputData: { value } }) => value > 10, stepA],
|
|
156
|
+
[async ({ inputData: { value } }) => value <= 10, stepB]
|
|
77
157
|
])
|
|
78
158
|
.commit();
|
|
79
159
|
```
|
|
80
160
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
> See [Workflow with Conditional Branching](../../examples/workflows/conditional-branching.mdx) for more information.
|
|
84
|
-
|
|
85
|
-
## Looping steps
|
|
86
|
-
|
|
87
|
-
Workflows support two types of loops. When looping a step, or any step-compatible construct like a nested workflow, the initial `inputData` is sourced from the output of the previous step.
|
|
161
|
+
## Input data mapping
|
|
88
162
|
|
|
89
|
-
|
|
163
|
+
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.
|
|
90
164
|
|
|
91
|
-
|
|
92
|
-
- Be explicitly transformed using the `map` function.
|
|
165
|
+

|
|
93
166
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-

|
|
99
|
-
|
|
100
|
-
```typescript {7} filename="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
101
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
102
|
-
import { z } from "zod";
|
|
103
|
-
|
|
104
|
-
const counterStep = createStep({...});
|
|
167
|
+
```typescript {9} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
168
|
+
const step1 = createStep({...});
|
|
169
|
+
const step2 = createStep({...});
|
|
105
170
|
|
|
106
171
|
export const testWorkflow = createWorkflow({...})
|
|
107
|
-
.
|
|
172
|
+
.then(step1)
|
|
173
|
+
.map(async ({ inputData }) => {
|
|
174
|
+
const { foo } = inputData;
|
|
175
|
+
return {
|
|
176
|
+
bar: `new ${foo}`,
|
|
177
|
+
};
|
|
178
|
+
})
|
|
179
|
+
.then(step2)
|
|
108
180
|
.commit();
|
|
109
181
|
```
|
|
110
182
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Executes step repeatedly until a condition becomes true.
|
|
183
|
+
The `.map()` method provides additional helper functions for more complex mapping scenarios.
|
|
114
184
|
|
|
115
|
-
|
|
185
|
+
**Available helper functions:**
|
|
116
186
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const counterStep = createStep({...});
|
|
122
|
-
|
|
123
|
-
export const testWorkflow = createWorkflow({...})
|
|
124
|
-
.dountil(counterStep, async ({ inputData: { number } }) => number > 10)
|
|
125
|
-
.commit();
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Loop management
|
|
129
|
-
|
|
130
|
-
Loop conditions can be implemented in different ways depending on how you want the loop to end. Common patterns include checking values returned in `inputData`, setting a maximum number of iterations, or aborting execution when a limit is reached.
|
|
187
|
+
- [`getStepResult()`](/reference/workflows/workflow-methods/map#using-getstepresult): Access a specific step's full output
|
|
188
|
+
- [`getInitData()`](/reference/workflows/workflow-methods/map#using-getinitdata): Access the workflow's initial input data
|
|
189
|
+
- [`mapVariable()`](/reference/workflows/workflow-methods/map#using-mapvariable): Use declarative object syntax to extract and rename fields
|
|
131
190
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
The `inputData` for a loop step is the output of a previous step. Use the values in `inputData` to determine whether the loop should continue or stop.
|
|
135
|
-
|
|
136
|
-
```typescript {7} filename="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
137
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
138
|
-
import { z } from "zod";
|
|
191
|
+
## Looping steps
|
|
139
192
|
|
|
140
|
-
|
|
193
|
+
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()`.
|
|
141
194
|
|
|
142
|
-
|
|
143
|
-
.dountil(nestedWorkflowStep, async ({ inputData: { userResponse } }) => userResponse === "yes")
|
|
144
|
-
.commit();
|
|
145
|
-
```
|
|
195
|
+
### Looping with `.dountil()`
|
|
146
196
|
|
|
147
|
-
|
|
197
|
+
Use `.dountil()` to run a step repeatedly until a condition becomes true.
|
|
148
198
|
|
|
149
|
-
|
|
199
|
+

|
|
150
200
|
|
|
151
|
-
```typescript {
|
|
152
|
-
|
|
153
|
-
import { z } from "zod";
|
|
201
|
+
```typescript {17} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
202
|
+
const step1 = createStep({...});
|
|
154
203
|
|
|
155
|
-
const
|
|
204
|
+
const step2 = createStep({
|
|
205
|
+
// ...
|
|
206
|
+
execute: async ({ inputData }) => {
|
|
207
|
+
const { number } = inputData;
|
|
208
|
+
return {
|
|
209
|
+
number: number + 1
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
});
|
|
156
213
|
|
|
157
|
-
export const testWorkflow = createWorkflow({
|
|
158
|
-
|
|
159
|
-
|
|
214
|
+
export const testWorkflow = createWorkflow({
|
|
215
|
+
// ...
|
|
216
|
+
})
|
|
217
|
+
.then(step1)
|
|
218
|
+
.dountil(step2, async ({ inputData: { number } }) => number > 10)
|
|
219
|
+
.commit();
|
|
160
220
|
```
|
|
161
221
|
|
|
162
|
-
|
|
222
|
+
### Looping with `.dowhile()`
|
|
163
223
|
|
|
164
|
-
Use `
|
|
224
|
+
Use `.dowhile()` to run a step repeatedly while a condition remains true.
|
|
165
225
|
|
|
166
|
-
|
|
167
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
168
|
-
import { z } from "zod";
|
|
226
|
+

|
|
169
227
|
|
|
170
|
-
|
|
228
|
+
```typescript {17} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
229
|
+
const step1 = createStep({...});
|
|
171
230
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
231
|
+
const step2 = createStep({
|
|
232
|
+
// ...
|
|
233
|
+
execute: async ({ inputData }) => {
|
|
234
|
+
const { number } = inputData;
|
|
235
|
+
return {
|
|
236
|
+
number: number + 1
|
|
237
|
+
};
|
|
176
238
|
}
|
|
177
|
-
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
export const testWorkflow = createWorkflow({
|
|
242
|
+
// ...
|
|
178
243
|
})
|
|
179
|
-
.
|
|
244
|
+
.then(step1)
|
|
245
|
+
.dowhile(step2, async ({ inputData: { number } }) => number < 10)
|
|
246
|
+
.commit();
|
|
180
247
|
```
|
|
181
248
|
|
|
182
|
-
###
|
|
249
|
+
### Looping with `.foreach()`
|
|
183
250
|
|
|
184
|
-
|
|
251
|
+
Use `.foreach()` to run the same step for each item in an array. The input must be of type `array` so the loop can iterate over its values, applying the step’s logic to each one.
|
|
185
252
|
|
|
186
|
-
](/img/workflows/workflows-control-flow-foreach.jpg)
|
|
187
254
|
|
|
188
|
-
```typescript {
|
|
189
|
-
|
|
190
|
-
|
|
255
|
+
```typescript {17} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
256
|
+
const step1 = createStep({
|
|
257
|
+
// ...
|
|
258
|
+
inputSchema: z.string(),
|
|
259
|
+
outputSchema: z.string(),
|
|
260
|
+
execute: async ({ inputData }) => {
|
|
261
|
+
return inputData.toUpperCase();
|
|
262
|
+
}
|
|
263
|
+
});
|
|
191
264
|
|
|
192
|
-
const
|
|
265
|
+
const step2 = createStep({...});
|
|
193
266
|
|
|
194
|
-
export const testWorkflow = createWorkflow({
|
|
195
|
-
|
|
267
|
+
export const testWorkflow = createWorkflow({
|
|
268
|
+
// ...
|
|
269
|
+
inputSchema: z.array(z.string()),
|
|
270
|
+
outputSchema: z.array(z.string())
|
|
271
|
+
})
|
|
272
|
+
.foreach(step1)
|
|
273
|
+
.then(step2)
|
|
196
274
|
.commit();
|
|
197
275
|
```
|
|
198
276
|
|
|
199
|
-
####
|
|
200
|
-
|
|
201
|
-
Use `concurrency` to execute steps in parallel with a limit on the number of concurrent executions.
|
|
277
|
+
#### Concurrency limits
|
|
202
278
|
|
|
203
|
-
|
|
204
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
205
|
-
import { z } from "zod";
|
|
279
|
+
Use `concurrency` to control the number of array items processed at the same time. The default is `1`, which runs steps sequentially. Increasing the value allows `.foreach()` to process multiple items simultaneously.
|
|
206
280
|
|
|
207
|
-
|
|
281
|
+
```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
282
|
+
const step1 = createStep({...})
|
|
208
283
|
|
|
209
284
|
export const testWorkflow = createWorkflow({...})
|
|
210
|
-
.foreach(
|
|
285
|
+
.foreach(step1, { concurrency: 4 })
|
|
211
286
|
.commit();
|
|
212
287
|
```
|
|
213
288
|
|
|
214
|
-
##
|
|
215
|
-
|
|
216
|
-
Use a nested workflow as a step by passing it to `.then()`. This runs each of its steps in sequence as part of the parent workflow.
|
|
217
|
-
|
|
218
|
-
```typescript {4,7} filename="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
219
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
220
|
-
import { z } from "zod";
|
|
221
|
-
|
|
222
|
-
export const nestedWorkflow = createWorkflow({...})
|
|
289
|
+
## Loop management
|
|
223
290
|
|
|
224
|
-
|
|
225
|
-
.then(nestedWorkflow)
|
|
226
|
-
.commit();
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Cloning a workflow
|
|
291
|
+
Loop conditions can be implemented in different ways depending on how you want the loop to end. Common patterns include checking values returned in `inputData`, setting a maximum number of iterations, or aborting execution when a limit is reached.
|
|
230
292
|
|
|
231
|
-
|
|
293
|
+
### Aborting loops
|
|
232
294
|
|
|
233
|
-
|
|
234
|
-
import { createWorkflow, createStep, cloneWorkflow } from "@mastra/core/workflows";
|
|
235
|
-
import { z } from "zod";
|
|
295
|
+
Use `iterationCount` to limit how many times a loop runs. If the count exceeds your threshold, throw an error to fail the step and stop the workflow.
|
|
236
296
|
|
|
297
|
+
```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
237
298
|
const step1 = createStep({...});
|
|
238
|
-
const parentWorkflow = createWorkflow({...})
|
|
239
|
-
const clonedWorkflow = cloneWorkflow(parentWorkflow, { id: "cloned-workflow" });
|
|
240
299
|
|
|
241
300
|
export const testWorkflow = createWorkflow({...})
|
|
242
|
-
.
|
|
243
|
-
|
|
301
|
+
.dountil(step1, async ({ inputData: { userResponse, iterationCount } }) => {
|
|
302
|
+
if (iterationCount >= 10) {
|
|
303
|
+
throw new Error("Maximum iterations reached");
|
|
304
|
+
}
|
|
305
|
+
return userResponse === "yes";
|
|
306
|
+
})
|
|
244
307
|
.commit();
|
|
245
308
|
```
|
|
246
|
-
|
|
247
|
-
## Example Run Instance
|
|
248
|
-
|
|
249
|
-
The following example demonstrates how to start a run with multiple inputs. Each input will pass through the `mapStep` sequentially.
|
|
250
|
-
|
|
251
|
-
```typescript {6} filename="src/test-workflow.ts" showLineNumbers copy
|
|
252
|
-
import { mastra } from "./mastra";
|
|
253
|
-
|
|
254
|
-
const run = await mastra.getWorkflow("testWorkflow").createRunAsync();
|
|
255
|
-
|
|
256
|
-
const result = await run.start({
|
|
257
|
-
inputData: [{ number: 10 }, { number: 100 }, { number: 200 }]
|
|
258
|
-
});
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
To execute this run from your terminal:
|
|
262
|
-
|
|
263
|
-
```bash copy
|
|
264
|
-
npx tsx src/test-workflow.ts
|
|
265
|
-
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Error Handling
|
|
2
|
+
title: "Error Handling | Workflows | Mastra Docs"
|
|
3
3
|
description: "Learn how to handle errors in Mastra workflows using step retries, conditional branching, and monitoring."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -11,7 +11,7 @@ Mastra provides a built-in retry mechanism for workflows or steps that fail due
|
|
|
11
11
|
|
|
12
12
|
You can configure retries at the workflow level, which applies to all steps in the workflow:
|
|
13
13
|
|
|
14
|
-
```typescript {8-11}
|
|
14
|
+
```typescript {8-11} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
15
15
|
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
16
16
|
import { z } from "zod";
|
|
17
17
|
|
|
@@ -32,7 +32,7 @@ export const testWorkflow = createWorkflow({
|
|
|
32
32
|
|
|
33
33
|
You can configure retries for individual steps using the `retries` property. This overrides the workflow-level retry configuration for that specific step:
|
|
34
34
|
|
|
35
|
-
```typescript {17}
|
|
35
|
+
```typescript {17} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
36
36
|
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
37
37
|
import { z } from "zod";
|
|
38
38
|
|
|
@@ -57,7 +57,7 @@ const step1 = createStep({
|
|
|
57
57
|
|
|
58
58
|
You can create alternative workflow paths based on the success or failure of previous steps using conditional logic:
|
|
59
59
|
|
|
60
|
-
```typescript {15,19,33-34}
|
|
60
|
+
```typescript {15,19,33-34} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
61
61
|
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
62
62
|
import { z } from "zod";
|
|
63
63
|
|
|
@@ -100,7 +100,7 @@ export const testWorkflow = createWorkflow({
|
|
|
100
100
|
|
|
101
101
|
Use `getStepResult()` to inspect a previous step’s results.
|
|
102
102
|
|
|
103
|
-
```typescript {10}
|
|
103
|
+
```typescript {10} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
104
104
|
import { createStep } from "@mastra/core/workflows";
|
|
105
105
|
import { z } from "zod";
|
|
106
106
|
|
|
@@ -123,7 +123,7 @@ const step2 = createStep({
|
|
|
123
123
|
|
|
124
124
|
Use `bail()` in a step to exit early with a successful result. This returns the provided payload as the step output and ends workflow execution.
|
|
125
125
|
|
|
126
|
-
```typescript {7}
|
|
126
|
+
```typescript {7} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
127
127
|
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
128
128
|
import { z } from "zod";
|
|
129
129
|
|
|
@@ -145,7 +145,7 @@ export const testWorkflow = createWorkflow({...})
|
|
|
145
145
|
|
|
146
146
|
Use `throw new Error()` in a step to exit with an error.
|
|
147
147
|
|
|
148
|
-
```typescript {7}
|
|
148
|
+
```typescript {7} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
149
149
|
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
150
150
|
import { z } from "zod";
|
|
151
151
|
|
|
@@ -167,7 +167,7 @@ export const testWorkflow = createWorkflow({...})
|
|
|
167
167
|
|
|
168
168
|
You can monitor workflows for errors using the `watch` method:
|
|
169
169
|
|
|
170
|
-
```typescript {11}
|
|
170
|
+
```typescript {11} title="src/test-workflow.ts" showLineNumbers copy
|
|
171
171
|
import { mastra } from "../src/mastra";
|
|
172
172
|
|
|
173
173
|
const workflow = mastra.getWorkflow("testWorkflow");
|
|
@@ -175,19 +175,18 @@ const run = await workflow.createRunAsync();
|
|
|
175
175
|
|
|
176
176
|
run.watch((event) => {
|
|
177
177
|
const {
|
|
178
|
-
payload: { currentStep }
|
|
178
|
+
payload: { currentStep },
|
|
179
179
|
} = event;
|
|
180
180
|
|
|
181
181
|
console.log(currentStep?.payload?.status);
|
|
182
182
|
});
|
|
183
|
-
|
|
184
183
|
```
|
|
185
184
|
|
|
186
185
|
## Monitor errors with `stream()`
|
|
187
186
|
|
|
188
187
|
You can monitor workflows for errors using `stream`:
|
|
189
188
|
|
|
190
|
-
```typescript {11}
|
|
189
|
+
```typescript {11} title="src/test-workflow.ts" showLineNumbers copy
|
|
191
190
|
import { mastra } from "../src/mastra";
|
|
192
191
|
|
|
193
192
|
const workflow = mastra.getWorkflow("testWorkflow");
|
|
@@ -196,18 +195,17 @@ const run = await workflow.createRunAsync();
|
|
|
196
195
|
|
|
197
196
|
const stream = await run.stream({
|
|
198
197
|
inputData: {
|
|
199
|
-
value: "initial data"
|
|
200
|
-
}
|
|
198
|
+
value: "initial data",
|
|
199
|
+
},
|
|
201
200
|
});
|
|
202
201
|
|
|
203
202
|
for await (const chunk of stream.stream) {
|
|
204
203
|
console.log(chunk.payload.output.stats);
|
|
205
204
|
}
|
|
206
|
-
|
|
207
205
|
```
|
|
208
206
|
|
|
209
207
|
## Related
|
|
210
208
|
|
|
211
|
-
- [Control Flow](./control-flow
|
|
212
|
-
- [Conditional Branching](./control-flow
|
|
213
|
-
- [Running Workflows](
|
|
209
|
+
- [Control Flow](./control-flow)
|
|
210
|
+
- [Conditional Branching](./control-flow#conditional-logic-with-branch)
|
|
211
|
+
- [Running Workflows](/examples/workflows_legacy/creating-a-workflow)
|