@mastra/mcp-docs-server 1.0.0-beta.1 → 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.
- package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +1 -15
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +1 -7
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +201 -1
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +1 -55
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +250 -50
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +26 -0
- package/.docs/organized/changelogs/%40mastra%2Fconvex.md +89 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +393 -193
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +61 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flance.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +234 -34
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Frag.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Freact.md +128 -1
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +18 -0
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +244 -44
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +92 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +67 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +201 -1
- package/.docs/organized/changelogs/create-mastra.md +201 -1
- package/.docs/organized/changelogs/mastra.md +201 -1
- package/.docs/organized/code-examples/agui.md +1 -0
- package/.docs/organized/code-examples/ai-elements.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-v5.md +3 -2
- package/.docs/organized/code-examples/assistant-ui.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-express.md +1 -1
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +2 -2
- package/.docs/organized/code-examples/client-side-tools.md +1 -1
- package/.docs/organized/code-examples/crypto-chatbot.md +2 -2
- package/.docs/organized/code-examples/fireworks-r1.md +1 -1
- package/.docs/organized/code-examples/heads-up-game.md +1 -1
- package/.docs/organized/code-examples/mcp-configuration.md +0 -3
- package/.docs/organized/code-examples/mcp-server-adapters.md +720 -0
- package/.docs/organized/code-examples/memory-per-resource-example.md +1 -1
- package/.docs/organized/code-examples/memory-with-processors.md +1 -1
- package/.docs/organized/code-examples/openapi-spec-writer.md +1 -1
- package/.docs/organized/code-examples/processors-with-ai-sdk.md +14 -0
- package/.docs/organized/code-examples/quick-start.md +2 -2
- package/.docs/organized/code-examples/server-app-access.md +342 -0
- package/.docs/organized/code-examples/server-express-adapter.md +87 -0
- package/.docs/organized/code-examples/server-hono-adapter.md +85 -0
- package/.docs/organized/code-examples/stock-price-tool.md +1 -21
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +1 -1
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-memory.md +1 -1
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-suspend-resume.md +1 -1
- package/.docs/raw/agents/adding-voice.mdx +56 -10
- package/.docs/raw/agents/agent-approval.mdx +189 -0
- package/.docs/raw/agents/agent-memory.mdx +1 -1
- package/.docs/raw/agents/guardrails.mdx +27 -24
- package/.docs/raw/agents/networks.mdx +3 -3
- package/.docs/raw/agents/overview.mdx +18 -167
- package/.docs/raw/agents/processors.mdx +279 -0
- package/.docs/raw/agents/structured-output.mdx +224 -0
- package/.docs/raw/agents/using-tools.mdx +14 -14
- package/.docs/raw/auth/auth0.mdx +1 -1
- package/.docs/raw/auth/clerk.mdx +1 -1
- package/.docs/raw/auth/firebase.mdx +1 -1
- package/.docs/raw/auth/index.mdx +1 -1
- package/.docs/raw/auth/jwt.mdx +1 -1
- package/.docs/raw/auth/supabase.mdx +1 -1
- package/.docs/raw/auth/workos.mdx +1 -1
- package/.docs/raw/community/contributing-templates.mdx +1 -1
- package/.docs/raw/community/discord.mdx +2 -2
- package/.docs/raw/community/licensing.mdx +1 -1
- package/.docs/raw/course/01-first-agent/05-running-playground.md +5 -5
- package/.docs/raw/course/01-first-agent/09-testing-your-agent.md +3 -3
- package/.docs/raw/course/01-first-agent/13-testing-your-tool.md +3 -3
- package/.docs/raw/course/01-first-agent/17-testing-memory.md +2 -2
- package/.docs/raw/course/04-workflows/07-using-playground.md +1 -1
- package/.docs/raw/deployment/{server-deployment.mdx → building-mastra.mdx} +4 -4
- package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +3 -3
- package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +2 -2
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/cloudflare-deployer.mdx +1 -1
- package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/index.mdx +26 -29
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/netlify-deployer.mdx +45 -14
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/vercel-deployer.mdx +1 -1
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/dashboard.mdx +3 -3
- package/.docs/raw/deployment/mastra-cloud/observability.mdx +53 -0
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/overview.mdx +3 -3
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/setting-up.mdx +4 -4
- package/.docs/raw/deployment/monorepo.mdx +3 -3
- package/.docs/raw/deployment/overview.mdx +7 -7
- package/.docs/raw/deployment/web-framework.mdx +6 -6
- package/.docs/raw/evals/{off-the-shelf-scorers.mdx → built-in-scorers.mdx} +17 -15
- package/.docs/raw/evals/custom-scorers.mdx +4 -6
- package/.docs/raw/evals/overview.mdx +5 -6
- package/.docs/raw/evals/running-in-ci.mdx +2 -4
- package/.docs/raw/getting-started/{installation.mdx → manual-install.mdx} +6 -80
- package/.docs/raw/getting-started/mcp-docs-server.mdx +6 -6
- package/.docs/raw/getting-started/project-structure.mdx +2 -2
- package/.docs/raw/getting-started/start.mdx +72 -0
- package/.docs/raw/getting-started/studio.mdx +8 -6
- package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +147 -0
- package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +627 -0
- package/.docs/raw/{frameworks/agentic-uis → guides/build-your-ui}/assistant-ui.mdx +71 -19
- package/.docs/raw/guides/build-your-ui/copilotkit.mdx +206 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/astro.mdx +24 -26
- package/.docs/raw/{frameworks/servers → guides/getting-started}/express.mdx +4 -5
- package/.docs/raw/guides/{quickstarts/nextjs.mdx → getting-started/next-js.mdx} +26 -25
- package/.docs/raw/guides/getting-started/quickstart.mdx +97 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/sveltekit.mdx +24 -26
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/vite-react.mdx +7 -7
- package/.docs/raw/guides/guide/ai-recruiter.mdx +2 -3
- package/.docs/raw/guides/guide/chef-michel.mdx +2 -3
- package/.docs/raw/guides/guide/notes-mcp-server.mdx +2 -2
- package/.docs/raw/guides/guide/research-assistant.mdx +7 -8
- package/.docs/raw/guides/guide/stock-agent.mdx +4 -6
- package/.docs/raw/guides/guide/web-search.mdx +12 -10
- package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +421 -0
- package/.docs/raw/guides/index.mdx +3 -35
- package/.docs/raw/guides/migrations/agentnetwork.mdx +4 -4
- package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +119 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +51 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +42 -2
- package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +31 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +27 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +1 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +28 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +25 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +80 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +68 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +25 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +174 -1
- package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +2 -2
- package/.docs/raw/index.mdx +3 -3
- package/.docs/raw/mcp/overview.mdx +358 -0
- package/.docs/raw/mcp/publishing-mcp-server.mdx +139 -0
- package/.docs/raw/memory/conversation-history.mdx +1 -1
- package/.docs/raw/memory/memory-processors.mdx +265 -80
- package/.docs/raw/memory/overview.mdx +2 -2
- package/.docs/raw/memory/semantic-recall.mdx +9 -9
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-mongodb.mdx +150 -0
- package/.docs/raw/memory/storage/memory-with-pg.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +3 -8
- package/.docs/raw/memory/threads-and-resources.mdx +4 -4
- package/.docs/raw/memory/working-memory.mdx +16 -8
- package/.docs/raw/{logging.mdx → observability/logging.mdx} +7 -7
- package/.docs/raw/observability/overview.mdx +3 -4
- package/.docs/raw/observability/tracing/bridges/otel.mdx +200 -0
- package/.docs/raw/observability/tracing/exporters/arize.mdx +37 -1
- package/.docs/raw/observability/tracing/exporters/braintrust.mdx +20 -1
- package/.docs/raw/observability/tracing/exporters/cloud.mdx +2 -2
- package/.docs/raw/observability/tracing/exporters/default.mdx +1 -1
- package/.docs/raw/observability/tracing/exporters/langfuse.mdx +84 -1
- package/.docs/raw/observability/tracing/exporters/langsmith.mdx +13 -1
- package/.docs/raw/observability/tracing/exporters/otel.mdx +123 -25
- package/.docs/raw/observability/tracing/exporters/posthog.mdx +127 -0
- package/.docs/raw/observability/tracing/overview.mdx +80 -9
- package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +1 -2
- package/.docs/raw/rag/chunking-and-embedding.mdx +16 -17
- package/.docs/raw/rag/overview.mdx +4 -3
- package/.docs/raw/rag/retrieval.mdx +44 -39
- package/.docs/raw/rag/vector-databases.mdx +94 -3
- package/.docs/raw/reference/agents/agent.mdx +8 -12
- package/.docs/raw/reference/agents/generate.mdx +67 -99
- package/.docs/raw/reference/agents/generateLegacy.mdx +3 -3
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDescription.mdx +1 -1
- package/.docs/raw/reference/agents/getInstructions.mdx +1 -1
- package/.docs/raw/reference/agents/getLLM.mdx +2 -2
- package/.docs/raw/reference/agents/getMemory.mdx +1 -1
- package/.docs/raw/reference/agents/getModel.mdx +1 -1
- package/.docs/raw/reference/agents/getTools.mdx +69 -0
- package/.docs/raw/reference/agents/getVoice.mdx +1 -1
- package/.docs/raw/reference/agents/listAgents.mdx +1 -1
- package/.docs/raw/reference/agents/listScorers.mdx +1 -1
- package/.docs/raw/reference/agents/listTools.mdx +2 -2
- package/.docs/raw/reference/agents/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/agents/network.mdx +33 -72
- package/.docs/raw/reference/ai-sdk/chat-route.mdx +127 -0
- package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +117 -0
- package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +64 -0
- package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +116 -0
- package/.docs/raw/reference/ai-sdk/network-route.mdx +99 -0
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +289 -0
- package/.docs/raw/reference/ai-sdk/with-mastra.mdx +119 -0
- package/.docs/raw/reference/ai-sdk/workflow-route.mdx +110 -0
- package/.docs/raw/reference/auth/auth0.mdx +1 -1
- package/.docs/raw/reference/auth/clerk.mdx +1 -1
- package/.docs/raw/reference/auth/firebase.mdx +1 -1
- package/.docs/raw/reference/auth/jwt.mdx +1 -1
- package/.docs/raw/reference/auth/supabase.mdx +1 -1
- package/.docs/raw/reference/auth/workos.mdx +1 -1
- package/.docs/raw/reference/cli/create-mastra.mdx +1 -1
- package/.docs/raw/reference/cli/mastra.mdx +19 -6
- package/.docs/raw/reference/client-js/agents.mdx +252 -68
- package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
- package/.docs/raw/reference/client-js/logs.mdx +1 -1
- package/.docs/raw/reference/client-js/mastra-client.mdx +4 -4
- package/.docs/raw/reference/client-js/memory.mdx +48 -2
- package/.docs/raw/reference/client-js/observability.mdx +1 -1
- package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
- package/.docs/raw/reference/client-js/tools.mdx +1 -1
- package/.docs/raw/reference/client-js/vectors.mdx +1 -1
- package/.docs/raw/reference/client-js/workflows.mdx +93 -64
- package/.docs/raw/reference/core/addGateway.mdx +59 -0
- package/.docs/raw/reference/core/getAgent.mdx +1 -1
- package/.docs/raw/reference/core/getAgentById.mdx +1 -1
- package/.docs/raw/reference/core/getDeployer.mdx +1 -1
- package/.docs/raw/reference/core/getGateway.mdx +59 -0
- package/.docs/raw/reference/core/getGatewayById.mdx +62 -0
- package/.docs/raw/reference/core/getLogger.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServer.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServerById.mdx +2 -2
- package/.docs/raw/reference/core/getMemory.mdx +73 -0
- package/.docs/raw/reference/core/getScorer.mdx +1 -1
- package/.docs/raw/reference/core/getScorerById.mdx +1 -1
- package/.docs/raw/reference/core/getServer.mdx +2 -2
- package/.docs/raw/reference/core/getStorage.mdx +1 -1
- package/.docs/raw/reference/core/getStoredAgentById.mdx +183 -0
- package/.docs/raw/reference/core/getTelemetry.mdx +1 -1
- package/.docs/raw/reference/core/getVector.mdx +1 -1
- package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
- package/.docs/raw/reference/core/listAgents.mdx +1 -1
- package/.docs/raw/reference/core/listGateways.mdx +53 -0
- package/.docs/raw/reference/core/listLogs.mdx +2 -2
- package/.docs/raw/reference/core/listLogsByRunId.mdx +2 -2
- package/.docs/raw/reference/core/listMCPServers.mdx +2 -2
- package/.docs/raw/reference/core/listMemory.mdx +70 -0
- package/.docs/raw/reference/core/listScorers.mdx +1 -1
- package/.docs/raw/reference/core/listStoredAgents.mdx +151 -0
- package/.docs/raw/reference/core/listVectors.mdx +1 -1
- package/.docs/raw/reference/core/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/core/mastra-class.mdx +17 -1
- package/.docs/raw/reference/core/mastra-model-gateway.mdx +227 -0
- package/.docs/raw/reference/core/setLogger.mdx +2 -2
- package/.docs/raw/reference/core/setStorage.mdx +1 -1
- package/.docs/raw/reference/core/setTelemetry.mdx +2 -2
- package/.docs/raw/reference/deployer/cloudflare.mdx +1 -1
- package/.docs/raw/reference/deployer/deployer.mdx +1 -1
- package/.docs/raw/reference/deployer/netlify.mdx +2 -3
- package/.docs/raw/reference/deployer/vercel.mdx +1 -1
- package/.docs/raw/reference/evals/answer-relevancy.mdx +29 -99
- package/.docs/raw/reference/evals/answer-similarity.mdx +13 -259
- package/.docs/raw/reference/evals/bias.mdx +30 -88
- package/.docs/raw/reference/evals/completeness.mdx +32 -91
- package/.docs/raw/reference/evals/content-similarity.mdx +29 -89
- package/.docs/raw/reference/evals/context-precision.mdx +29 -131
- package/.docs/raw/reference/evals/context-relevance.mdx +12 -12
- package/.docs/raw/reference/evals/create-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/faithfulness.mdx +29 -102
- package/.docs/raw/reference/evals/hallucination.mdx +29 -104
- package/.docs/raw/reference/evals/keyword-coverage.mdx +29 -108
- package/.docs/raw/reference/evals/mastra-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/noise-sensitivity.mdx +12 -12
- package/.docs/raw/reference/evals/prompt-alignment.mdx +16 -16
- package/.docs/raw/reference/evals/run-evals.mdx +1 -1
- package/.docs/raw/reference/evals/scorer-utils.mdx +362 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +28 -101
- package/.docs/raw/reference/evals/tone-consistency.mdx +26 -99
- package/.docs/raw/reference/evals/tool-call-accuracy.mdx +8 -8
- package/.docs/raw/reference/evals/toxicity.mdx +30 -93
- package/.docs/raw/reference/index.mdx +1 -0
- package/.docs/raw/reference/logging/pino-logger.mdx +2 -2
- package/.docs/raw/reference/memory/createThread.mdx +1 -1
- package/.docs/raw/reference/memory/deleteMessages.mdx +1 -1
- package/.docs/raw/reference/memory/getThreadById.mdx +1 -1
- package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +1 -1
- package/.docs/raw/reference/memory/memory-class.mdx +6 -8
- package/.docs/raw/reference/memory/query.mdx +1 -1
- package/.docs/raw/reference/memory/recall.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +177 -0
- package/.docs/raw/reference/observability/tracing/configuration.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +30 -1
- package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +44 -1
- package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +18 -2
- package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +34 -44
- package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +132 -0
- package/.docs/raw/reference/observability/tracing/instances.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/interfaces.mdx +30 -5
- package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/spans.mdx +1 -5
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +2 -2
- package/.docs/raw/reference/processors/language-detector.mdx +11 -4
- package/.docs/raw/reference/processors/message-history-processor.mdx +131 -0
- package/.docs/raw/reference/processors/moderation-processor.mdx +13 -6
- package/.docs/raw/reference/processors/pii-detector.mdx +13 -6
- package/.docs/raw/reference/processors/processor-interface.mdx +502 -0
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +11 -4
- package/.docs/raw/reference/processors/semantic-recall-processor.mdx +197 -0
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +4 -5
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +3 -3
- package/.docs/raw/reference/processors/tool-call-filter.mdx +125 -0
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +2 -2
- package/.docs/raw/reference/processors/working-memory-processor.mdx +221 -0
- package/.docs/raw/reference/rag/chunk.mdx +1 -1
- package/.docs/raw/reference/rag/database-config.mdx +1 -1
- package/.docs/raw/reference/rag/document.mdx +1 -1
- package/.docs/raw/reference/rag/embeddings.mdx +6 -6
- 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 +1 -1
- package/.docs/raw/reference/rag/rerank.mdx +2 -3
- package/.docs/raw/reference/rag/rerankWithScorer.mdx +1 -2
- package/.docs/raw/reference/server/create-route.mdx +328 -0
- package/.docs/raw/reference/server/express-adapter.mdx +260 -0
- package/.docs/raw/reference/server/hono-adapter.mdx +242 -0
- package/.docs/raw/reference/server/mastra-server.mdx +345 -0
- package/.docs/raw/reference/server/routes.mdx +250 -0
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +38 -1
- package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
- package/.docs/raw/reference/storage/convex.mdx +164 -0
- package/.docs/raw/reference/storage/dynamodb.mdx +1 -1
- package/.docs/raw/reference/storage/lance.mdx +34 -1
- package/.docs/raw/reference/storage/libsql.mdx +38 -1
- package/.docs/raw/reference/storage/mongodb.mdx +40 -1
- package/.docs/raw/reference/storage/mssql.mdx +38 -1
- package/.docs/raw/reference/storage/postgresql.mdx +38 -1
- package/.docs/raw/reference/storage/upstash.mdx +1 -1
- package/.docs/raw/reference/streaming/ChunkType.mdx +2 -2
- package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +1 -1
- package/.docs/raw/reference/streaming/agents/stream.mdx +68 -95
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +1 -1
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +8 -10
- package/.docs/raw/reference/streaming/workflows/{resumeStreamVNext.mdx → resumeStream.mdx} +51 -11
- package/.docs/raw/reference/streaming/workflows/stream.mdx +84 -25
- package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +170 -0
- package/.docs/raw/reference/templates/overview.mdx +2 -5
- package/.docs/raw/reference/tools/client.mdx +2 -3
- package/.docs/raw/reference/tools/create-tool.mdx +135 -4
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +1 -1
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +7 -7
- package/.docs/raw/reference/tools/mcp-client.mdx +131 -23
- package/.docs/raw/reference/tools/mcp-server.mdx +56 -8
- package/.docs/raw/reference/tools/vector-query-tool.mdx +16 -17
- package/.docs/raw/reference/vectors/astra.mdx +1 -1
- package/.docs/raw/reference/vectors/chroma.mdx +82 -2
- package/.docs/raw/reference/vectors/convex.mdx +429 -0
- package/.docs/raw/reference/vectors/couchbase.mdx +25 -18
- package/.docs/raw/reference/vectors/duckdb.mdx +462 -0
- package/.docs/raw/reference/vectors/elasticsearch.mdx +310 -0
- package/.docs/raw/reference/vectors/lance.mdx +39 -23
- package/.docs/raw/reference/vectors/libsql.mdx +36 -3
- package/.docs/raw/reference/vectors/mongodb.mdx +36 -3
- package/.docs/raw/reference/vectors/opensearch.mdx +38 -17
- package/.docs/raw/reference/vectors/pg.mdx +44 -37
- package/.docs/raw/reference/vectors/pinecone.mdx +70 -3
- package/.docs/raw/reference/vectors/qdrant.mdx +37 -2
- package/.docs/raw/reference/vectors/s3vectors.mdx +1 -1
- package/.docs/raw/reference/vectors/turbopuffer.mdx +75 -1
- package/.docs/raw/reference/vectors/upstash.mdx +1 -1
- package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
- package/.docs/raw/reference/voice/azure.mdx +96 -81
- package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
- package/.docs/raw/reference/voice/composite-voice.mdx +72 -29
- 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 +1 -1
- package/.docs/raw/reference/voice/google.mdx +160 -21
- 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 +3 -3
- 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 +3 -4
- package/.docs/raw/reference/voice/voice.addTools.mdx +2 -2
- package/.docs/raw/reference/voice/voice.answer.mdx +2 -2
- package/.docs/raw/reference/voice/voice.close.mdx +2 -2
- package/.docs/raw/reference/voice/voice.connect.mdx +2 -2
- package/.docs/raw/reference/voice/voice.events.mdx +1 -1
- package/.docs/raw/reference/voice/voice.getSpeakers.mdx +1 -1
- package/.docs/raw/reference/voice/voice.listen.mdx +87 -53
- package/.docs/raw/reference/voice/voice.off.mdx +2 -2
- package/.docs/raw/reference/voice/voice.on.mdx +2 -2
- package/.docs/raw/reference/voice/voice.send.mdx +2 -2
- package/.docs/raw/reference/voice/voice.speak.mdx +76 -41
- package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -2
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +1 -1
- package/.docs/raw/reference/workflows/run-methods/restart.mdx +142 -0
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +45 -1
- package/.docs/raw/reference/workflows/run-methods/start.mdx +48 -4
- package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +310 -0
- package/.docs/raw/reference/workflows/run.mdx +28 -6
- package/.docs/raw/reference/workflows/step.mdx +65 -1
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow.mdx +21 -2
- package/.docs/raw/server-db/custom-adapters.mdx +386 -0
- package/.docs/raw/server-db/custom-api-routes.mdx +6 -6
- package/.docs/raw/server-db/mastra-client.mdx +3 -4
- package/.docs/raw/server-db/{production-server.mdx → mastra-server.mdx} +16 -8
- package/.docs/raw/server-db/middleware.mdx +31 -31
- package/.docs/raw/server-db/request-context.mdx +3 -4
- package/.docs/raw/server-db/server-adapters.mdx +312 -0
- package/.docs/raw/server-db/storage.mdx +12 -1
- package/.docs/raw/streaming/events.mdx +1 -1
- package/.docs/raw/streaming/overview.mdx +27 -16
- package/.docs/raw/streaming/tool-streaming.mdx +58 -19
- package/.docs/raw/streaming/workflow-streaming.mdx +6 -12
- package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -3
- package/.docs/raw/tools-mcp/mcp-overview.mdx +4 -6
- package/.docs/raw/tools-mcp/overview.mdx +1 -1
- package/.docs/raw/voice/overview.mdx +88 -41
- package/.docs/raw/voice/speech-to-speech.mdx +5 -5
- package/.docs/raw/voice/speech-to-text.mdx +2 -3
- package/.docs/raw/voice/text-to-speech.mdx +2 -3
- package/.docs/raw/workflows/agents-and-tools.mdx +43 -5
- package/.docs/raw/workflows/control-flow.mdx +186 -1
- package/.docs/raw/workflows/error-handling.mdx +5 -4
- package/.docs/raw/workflows/human-in-the-loop.mdx +160 -213
- package/.docs/raw/workflows/inngest-workflow.mdx +1 -1
- package/.docs/raw/workflows/input-data-mapping.mdx +1 -1
- package/.docs/raw/workflows/overview.mdx +67 -47
- package/.docs/raw/workflows/snapshots.mdx +5 -3
- package/.docs/raw/workflows/suspend-and-resume.mdx +121 -204
- package/.docs/raw/workflows/time-travel.mdx +313 -0
- package/.docs/raw/workflows/workflow-state.mdx +190 -0
- package/CHANGELOG.md +81 -0
- package/dist/{chunk-5NJC7NRO.js → chunk-4CM2BQNP.js} +24 -4
- package/dist/prepare-docs/package-changes.d.ts.map +1 -1
- package/dist/prepare-docs/prepare.js +1 -1
- package/dist/stdio.js +17 -19
- package/package.json +11 -15
- package/.docs/raw/deployment/serverless-platforms/index.mdx +0 -58
- package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +0 -688
- package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +0 -123
- package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +0 -382
- package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +0 -179
- package/.docs/raw/frameworks/web-frameworks/next-js.mdx +0 -379
- package/.docs/raw/getting-started/templates.mdx +0 -73
- package/.docs/raw/mastra-cloud/observability.mdx +0 -51
- package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +0 -47
- package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +0 -153
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Workflows overview | Workflows
|
|
2
|
+
title: "Workflows overview | Workflows"
|
|
3
3
|
description: "Workflows in Mastra help you orchestrate complex sequences of tasks with features like branching, parallel execution, resource suspension, and more."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -90,60 +90,28 @@ Workflows can be composed using a number of different methods. The method you ch
|
|
|
90
90
|
|
|
91
91
|
## Workflow state
|
|
92
92
|
|
|
93
|
-
Workflow state lets you share values across steps without passing them through every step
|
|
93
|
+
Workflow state lets you share values across steps without passing them through every step's inputSchema and outputSchema. Use state for tracking progress, accumulating results, or sharing configuration across the entire workflow.
|
|
94
94
|
|
|
95
95
|
```typescript title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
96
96
|
const step1 = createStep({
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}),
|
|
97
|
+
id: "step-1",
|
|
98
|
+
inputSchema: z.object({ message: z.string() }),
|
|
99
|
+
outputSchema: z.object({ formatted: z.string() }),
|
|
100
|
+
stateSchema: z.object({ counter: z.number() }),
|
|
101
101
|
execute: async ({ inputData, state, setState }) => {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
// Read from state
|
|
103
|
+
console.log(state.counter);
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
processedItems: [...processedItems, "item-1", "item-2"],
|
|
108
|
-
});
|
|
105
|
+
// Update state for subsequent steps
|
|
106
|
+
setState({ ...state, counter: state.counter + 1 });
|
|
109
107
|
|
|
110
|
-
return {
|
|
111
|
-
formatted: message.toUpperCase(),
|
|
112
|
-
};
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
const step2 = createStep({
|
|
117
|
-
// ...
|
|
118
|
-
stateSchema: z.object({
|
|
119
|
-
metadata: z.object({
|
|
120
|
-
processedBy: z.string(),
|
|
121
|
-
}),
|
|
122
|
-
}),
|
|
123
|
-
execute: async ({ inputData, state }) => {
|
|
124
|
-
const { formatted } = inputData;
|
|
125
|
-
const { metadata } = state;
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
emphasized: `${formatted}!! ${metadata.processedBy}`,
|
|
129
|
-
};
|
|
108
|
+
return { formatted: inputData.message.toUpperCase() };
|
|
130
109
|
},
|
|
131
110
|
});
|
|
132
|
-
|
|
133
|
-
export const testWorkflow = createWorkflow({
|
|
134
|
-
// ...
|
|
135
|
-
stateSchema: z.object({
|
|
136
|
-
processedItems: z.array(z.string()),
|
|
137
|
-
metadata: z.object({
|
|
138
|
-
processedBy: z.string(),
|
|
139
|
-
}),
|
|
140
|
-
}),
|
|
141
|
-
})
|
|
142
|
-
.then(step1)
|
|
143
|
-
.then(step2)
|
|
144
|
-
.commit();
|
|
145
111
|
```
|
|
146
112
|
|
|
113
|
+
> See [Workflow State](/docs/v1/workflows/workflow-state) for complete documentation on state schemas, initial state, persistence across suspend/resume, and nested workflows.
|
|
114
|
+
|
|
147
115
|
## Workflows as steps
|
|
148
116
|
|
|
149
117
|
Use a workflow as a step to reuse its logic within a larger composition. Input and output follow the same schema rules described in [Core principles](/docs/v1/workflows/control-flow).
|
|
@@ -253,14 +221,19 @@ const result = await run.stream({
|
|
|
253
221
|
}
|
|
254
222
|
});
|
|
255
223
|
|
|
256
|
-
for await (const chunk of result.
|
|
224
|
+
for await (const chunk of result.fullStream) {
|
|
257
225
|
console.log(chunk);
|
|
258
226
|
}
|
|
259
227
|
```
|
|
260
228
|
</TabItem>
|
|
261
229
|
</Tabs>
|
|
262
230
|
|
|
263
|
-
|
|
231
|
+
|
|
232
|
+
### Workflow status types
|
|
233
|
+
|
|
234
|
+
When running a workflow, its `status` can be `running`, `suspended`, `success`, or `failed`.
|
|
235
|
+
|
|
236
|
+
### Workflow output
|
|
264
237
|
|
|
265
238
|
The workflow output includes the full execution lifecycle, showing the input and output for each step. It also includes the status of each step, the overall workflow status, and the final result. This gives you clear insight into how data moved through the workflow, what each step produced, and how the workflow completed.
|
|
266
239
|
|
|
@@ -297,6 +270,49 @@ The workflow output includes the full execution lifecycle, showing the input and
|
|
|
297
270
|
}
|
|
298
271
|
```
|
|
299
272
|
|
|
273
|
+
## Restarting active workflow runs
|
|
274
|
+
|
|
275
|
+
When a workflow run loses connection to the server, it can be restarted from the last active step. This is useful for long-running workflows that might still be running when the server loses connection. Restarting a workflow run will resume execution from the last active step, and the workflow will continue from there.
|
|
276
|
+
|
|
277
|
+
### Restarting all active workflow runs of a workflow with `restartAllActiveWorkflowRuns()`
|
|
278
|
+
|
|
279
|
+
Use `restartAllActiveWorkflowRuns()` to restart all active workflow runs of a workflow. This helps restart all active workflow runs of a workflow, without having to manually loop through each run and restart.
|
|
280
|
+
|
|
281
|
+
```typescript showLineNumbers copy
|
|
282
|
+
workflow.restartAllActiveWorkflowRuns();
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Restarting an active workflow run with `restart()`
|
|
286
|
+
|
|
287
|
+
Use `restart()` to restart an active workflow run from the last active step. This will resume execution from the last active step, and the workflow will continue from there.
|
|
288
|
+
|
|
289
|
+
```typescript showLineNumbers copy
|
|
290
|
+
const run = await workflow.createRun();
|
|
291
|
+
|
|
292
|
+
const result = await run.start({ inputData: { value: "initial data" } });
|
|
293
|
+
|
|
294
|
+
//.. server connection lost,
|
|
295
|
+
|
|
296
|
+
const restartedResult = await run.restart();
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Identifying active workflow runs
|
|
300
|
+
|
|
301
|
+
When a workflow run is active, it will have a `status` of `running` or `waiting`. You can check the workflow's `status` to confirm it's active, and use `active` to identify the active workflow run.
|
|
302
|
+
|
|
303
|
+
```typescript showLineNumbers copy
|
|
304
|
+
const activeRuns = await workflow.listActiveWorkflowRuns();
|
|
305
|
+
if (activeRuns.runs.length > 0) {
|
|
306
|
+
console.log(activeRuns.runs);
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
:::note
|
|
311
|
+
|
|
312
|
+
When running the local mastra server, all active workflow runs will be restarted automatically when the server starts.
|
|
313
|
+
|
|
314
|
+
:::
|
|
315
|
+
|
|
300
316
|
## Using `RequestContext`
|
|
301
317
|
|
|
302
318
|
Use [RequestContext](/docs/v1/server-db/request-context) to access request-specific values. This lets you conditionally adjust behavior based on the context of the request.
|
|
@@ -330,3 +346,7 @@ Use [Studio](/docs/v1/getting-started/studio) to easily run workflows with diffe
|
|
|
330
346
|
|
|
331
347
|
For a closer look at workflows, see our [Workflow Guide](/guides/v1/guide/ai-recruiter), which walks through the core concepts with a practical example.
|
|
332
348
|
|
|
349
|
+
- [Workflow State](/docs/v1/workflows/workflow-state)
|
|
350
|
+
- [Control Flow](/docs/v1/workflows/control-flow)
|
|
351
|
+
- [Suspend & Resume](/docs/v1/workflows/suspend-and-resume)
|
|
352
|
+
- [Error Handling](/docs/v1/workflows/error-handling)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Snapshots | Workflows
|
|
2
|
+
title: "Snapshots | Workflows"
|
|
3
3
|
description: "Learn how to save and resume workflow execution state with snapshots in Mastra"
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -266,5 +266,7 @@ if (result.status === "suspended") {
|
|
|
266
266
|
|
|
267
267
|
## Related
|
|
268
268
|
|
|
269
|
-
- [
|
|
270
|
-
- [
|
|
269
|
+
- [Control Flow](/docs/v1/workflows/control-flow)
|
|
270
|
+
- [Suspend & Resume](/docs/v1/workflows/suspend-and-resume)
|
|
271
|
+
- [Time Travel](/docs/v1/workflows/time-travel)
|
|
272
|
+
- [Human-in-the-loop](/docs/v1/workflows/human-in-the-loop)
|
|
@@ -1,289 +1,199 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Suspend & Resume | Workflows
|
|
2
|
+
title: "Suspend & Resume | Workflows"
|
|
3
3
|
description: "Suspend and resume in Mastra workflows allows you to pause execution while waiting for external input or resources."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Suspend & Resume
|
|
7
7
|
|
|
8
|
-
Workflows can be paused at any step,
|
|
8
|
+
Workflows can be paused at any step to collect additional data, wait for API callbacks, throttle costly operations, or request [human-in-the-loop](/docs/v1/workflows/human-in-the-loop) input. When a workflow is suspended, its current execution state is saved as a snapshot. You can later resume the workflow from a [specific step ID](/docs/v1/workflows/snapshots#retrieving-snapshots), restoring the exact state captured in that snapshot. [Snapshots](/docs/v1/workflows/snapshots) are stored in your configured storage provider and across deployments and application restarts.
|
|
9
|
+
## Pausing a workflow with `suspend()`
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Use `suspend()` to pause workflow execution at a specific step. You can define a suspend condition in the step’s `execute` block using values from `resumeData`.
|
|
11
12
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- Collecting additional data needed for later steps
|
|
15
|
-
- Rate limiting or throttling expensive operations
|
|
16
|
-
- Handling event-driven processes with external triggers
|
|
13
|
+
- If the condition isn’t met, the workflow pauses and returns `suspend()`.
|
|
14
|
+
- If the condition is met, the workflow continues with the remaining logic in the step.
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
>
|
|
20
|
-
> - **[Mastering Human-in-the-Loop with Suspend & Resume](https://youtu.be/aORuNG8Tq_k)** - Learn how to suspend workflows and accept user inputs
|
|
21
|
-
> - **[Building Multi-Turn Chat Interfaces with React](https://youtu.be/UMVm8YZwlxc)** - Implement multi-turn human-involved interactions with a React chat interface
|
|
16
|
+

|
|
22
17
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
When running a workflow, its `status` can be one of the following:
|
|
26
|
-
|
|
27
|
-
- `running` - The workflow is currently running
|
|
28
|
-
- `suspended` - The workflow is suspended
|
|
29
|
-
- `success` - The workflow has completed
|
|
30
|
-
- `failed` - The workflow has failed
|
|
31
|
-
|
|
32
|
-
## Suspending a workflow with `suspend()`
|
|
33
|
-
|
|
34
|
-
To pause execution at a specific step until user input is received, use the `suspend` function to temporarily halt the workflow, allowing it to resume only when the necessary data is provided.
|
|
35
|
-
|
|
36
|
-

|
|
37
|
-
|
|
38
|
-
```typescript {16} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
18
|
+
```typescript {9-11,16-18} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
39
19
|
const step1 = createStep({
|
|
40
20
|
id: "step-1",
|
|
41
21
|
inputSchema: z.object({
|
|
42
|
-
|
|
22
|
+
userEmail: z.string()
|
|
43
23
|
}),
|
|
44
24
|
outputSchema: z.object({
|
|
45
|
-
output: z.string()
|
|
25
|
+
output: z.string()
|
|
46
26
|
}),
|
|
47
27
|
resumeSchema: z.object({
|
|
48
|
-
|
|
28
|
+
approved: z.boolean()
|
|
49
29
|
}),
|
|
50
|
-
execute: async ({ resumeData, suspend }) => {
|
|
51
|
-
const {
|
|
30
|
+
execute: async ({ inputData, resumeData, suspend }) => {
|
|
31
|
+
const { userEmail } = inputData;
|
|
32
|
+
const { approved } = resumeData ?? {};
|
|
52
33
|
|
|
53
|
-
if (!
|
|
34
|
+
if (!approved) {
|
|
54
35
|
return await suspend({});
|
|
55
36
|
}
|
|
56
37
|
|
|
57
|
-
return {
|
|
58
|
-
|
|
38
|
+
return {
|
|
39
|
+
output: `Email sent to ${userEmail}`
|
|
40
|
+
};
|
|
41
|
+
}
|
|
59
42
|
});
|
|
60
43
|
|
|
61
44
|
export const testWorkflow = createWorkflow({
|
|
62
|
-
|
|
45
|
+
id: "test-workflow",
|
|
46
|
+
inputSchema: z.object({
|
|
47
|
+
userEmail: z.string()
|
|
48
|
+
}),
|
|
49
|
+
outputSchema: z.object({
|
|
50
|
+
output: z.string()
|
|
51
|
+
})
|
|
63
52
|
})
|
|
64
53
|
.then(step1)
|
|
65
54
|
.commit();
|
|
66
55
|
```
|
|
67
56
|
|
|
68
|
-
|
|
57
|
+
## Restarting a workflow with `resume()`
|
|
69
58
|
|
|
70
|
-
|
|
59
|
+
Use `resume()` to restart a suspended workflow from the step where it paused. Pass `resumeData` matching the step's `resumeSchema` to satisfy the suspend condition and continue execution.
|
|
71
60
|
|
|
72
|
-
|
|
61
|
+

|
|
73
62
|
|
|
74
|
-
```typescript
|
|
75
|
-
import {
|
|
63
|
+
```typescript showLineNumbers copy
|
|
64
|
+
import { step1 } from "./workflows/test-workflow";
|
|
76
65
|
|
|
77
|
-
const
|
|
66
|
+
const workflow = mastra.getWorkflow("testWorkflow");
|
|
67
|
+
const run = await workflow.createRun();
|
|
78
68
|
|
|
79
|
-
|
|
69
|
+
await run.start({
|
|
80
70
|
inputData: {
|
|
81
|
-
|
|
82
|
-
}
|
|
71
|
+
userEmail: "alex@example.com"
|
|
72
|
+
}
|
|
83
73
|
});
|
|
84
74
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
step: result.suspended[0],
|
|
90
|
-
resumeData: {
|
|
91
|
-
city: "Berlin",
|
|
92
|
-
},
|
|
75
|
+
const handleResume = async () => {
|
|
76
|
+
const result = await run.resume({
|
|
77
|
+
step: step1,
|
|
78
|
+
resumeData: { approved: true }
|
|
93
79
|
});
|
|
94
|
-
}
|
|
80
|
+
};
|
|
95
81
|
```
|
|
96
82
|
|
|
97
|
-
|
|
83
|
+
Passing the `step` object provides full type-safety for `resumeData`. Alternatively, you can pass a step ID for more flexibility when the ID comes from user input or a database.
|
|
98
84
|
|
|
99
|
-
```
|
|
100
|
-
{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
"step-1": {
|
|
105
|
-
// ...
|
|
106
|
-
"status": "suspended"
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
"suspended": [["step-1"]]
|
|
110
|
-
}
|
|
85
|
+
```typescript showLineNumbers copy
|
|
86
|
+
const result = await run.resume({
|
|
87
|
+
step: "step-1",
|
|
88
|
+
resumeData: { approved: true }
|
|
89
|
+
});
|
|
111
90
|
```
|
|
112
91
|
|
|
113
|
-
|
|
92
|
+
If only one step is suspended, you can omit the step argument entirely and Mastra will resume the last suspended step in the workflow.
|
|
114
93
|
|
|
115
|
-
|
|
94
|
+
When resuming with only a `runId`, create a run instance first using `createRunAsync()`.
|
|
116
95
|
|
|
117
|
-
|
|
96
|
+
```typescript showLineNumbers copy
|
|
97
|
+
const workflow = mastra.getWorkflow("testWorkflow");
|
|
98
|
+
const run = await workflow.createRunAsync({ runId: "123" });
|
|
118
99
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
100
|
+
const stream = run.resume({
|
|
101
|
+
resumeData: { approved: true }
|
|
102
|
+
});
|
|
103
|
+
```
|
|
122
104
|
|
|
123
|
-
|
|
124
|
-
|
|
105
|
+
You can call `resume()` from anywhere in your application, including HTTP endpoints, event handlers, in response to [human input](/docs/v1/workflows/human-in-the-loop), or timers.
|
|
106
|
+
|
|
107
|
+
```typescript showLineNumbers copy
|
|
108
|
+
const midnight = new Date();
|
|
109
|
+
midnight.setUTCHours(24, 0, 0, 0);
|
|
110
|
+
|
|
111
|
+
setTimeout(async () => {
|
|
112
|
+
await run.resume({
|
|
113
|
+
step: "step-1",
|
|
114
|
+
resumeData: { approved: true }
|
|
115
|
+
});
|
|
116
|
+
}, midnight.getTime() - Date.now());
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Accessing suspend data with `suspendData`
|
|
120
|
+
When a step is suspended, you may want to access the data that was provided to `suspend()` when the step is later resumed. Use the `suspendData` parameter in your step's execute function to access this data.
|
|
121
|
+
|
|
122
|
+
```typescript {22-25,29-30} title="src/mastra/workflows/user-approval.ts" showLineNumbers copy
|
|
123
|
+
const approvalStep = createStep({
|
|
124
|
+
id: "user-approval",
|
|
125
125
|
inputSchema: z.object({
|
|
126
|
-
|
|
126
|
+
requestId: z.string()
|
|
127
127
|
}),
|
|
128
128
|
resumeSchema: z.object({
|
|
129
|
-
|
|
129
|
+
approved: z.boolean()
|
|
130
130
|
}),
|
|
131
131
|
suspendSchema: z.object({
|
|
132
132
|
reason: z.string(),
|
|
133
|
+
requestDetails: z.string()
|
|
133
134
|
}),
|
|
134
135
|
outputSchema: z.object({
|
|
135
|
-
|
|
136
|
+
result: z.string()
|
|
136
137
|
}),
|
|
137
|
-
execute: async ({ resumeData, suspend }) => {
|
|
138
|
-
const {
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
execute: async ({ inputData, resumeData, suspend, suspendData }) => {
|
|
139
|
+
const { requestId } = inputData;
|
|
140
|
+
const { approved } = resumeData ?? {};
|
|
141
|
+
|
|
142
|
+
// On first execution, suspend with context
|
|
143
|
+
if (!approved) {
|
|
141
144
|
return await suspend({
|
|
142
|
-
reason: "
|
|
145
|
+
reason: "User approval required",
|
|
146
|
+
requestDetails: `Request ${requestId} pending review`
|
|
143
147
|
});
|
|
144
148
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
.then(step1)
|
|
154
|
-
.commit();
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
In this case, the reason provided explains that the user must confirm to continue.
|
|
158
|
-
|
|
159
|
-
```json
|
|
160
|
-
{
|
|
161
|
-
"step-1": {
|
|
162
|
-
// ...
|
|
163
|
-
"status": "suspended",
|
|
164
|
-
"suspendPayload": {
|
|
165
|
-
"reason": "Confirm to continue"
|
|
166
|
-
}
|
|
149
|
+
|
|
150
|
+
// On resume, access the original suspend data
|
|
151
|
+
const suspendReason = suspendData?.reason || "Unknown";
|
|
152
|
+
const details = suspendData?.requestDetails || "No details";
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
result: `${details} - ${suspendReason} - Decision: ${approved ? 'Approved' : 'Rejected'}`
|
|
156
|
+
};
|
|
167
157
|
}
|
|
168
|
-
}
|
|
158
|
+
});
|
|
169
159
|
```
|
|
170
160
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
## Resuming a workflow with `resume()`
|
|
161
|
+
The `suspendData` parameter is automatically populated when a step is resumed and contains the exact data that was passed to the `suspend()` function during the original suspension. This allows you to maintain context about why the workflow was suspended and use that information during the resume process.
|
|
174
162
|
|
|
175
|
-
|
|
163
|
+
## Identifying suspended executions
|
|
176
164
|
|
|
177
|
-
|
|
178
|
-
import { mastra } from "./mastra";
|
|
165
|
+
When a workflow is suspended, it restarts from the step where it paused. You can check the workflow's `status` to confirm it's suspended, and use `suspended` to identify the paused step or [nested workflow](/docs/v1/workflows/overview#workflows-as-steps).
|
|
179
166
|
|
|
180
|
-
|
|
167
|
+
```typescript {11} showLineNumbers copy
|
|
168
|
+
const workflow = mastra.getWorkflow("testWorkflow");
|
|
169
|
+
const run = await workflow.createRun();
|
|
181
170
|
|
|
182
171
|
const result = await run.start({
|
|
183
172
|
inputData: {
|
|
184
|
-
|
|
185
|
-
}
|
|
173
|
+
userEmail: "alex@example.com"
|
|
174
|
+
}
|
|
186
175
|
});
|
|
187
176
|
|
|
188
|
-
console.log(JSON.stringify(result, null, 2));
|
|
189
|
-
|
|
190
177
|
if (result.status === "suspended") {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
},
|
|
178
|
+
console.log(result.suspended[0]);
|
|
179
|
+
await run.resume({
|
|
180
|
+
step: result.suspended[0],
|
|
181
|
+
resumeData: { approved: true }
|
|
196
182
|
});
|
|
197
|
-
|
|
198
|
-
console.log(JSON.stringify(resumedResult, null, 2));
|
|
199
183
|
}
|
|
200
184
|
```
|
|
201
185
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
```typescript {5} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
205
|
-
const resumedResult = await run.resume({
|
|
206
|
-
resumeData: {
|
|
207
|
-
city: "Berlin",
|
|
208
|
-
},
|
|
209
|
-
// step parameter omitted - automatically resumes the single suspended step
|
|
210
|
-
});
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
You can pass `requestContext` as an argument to both the `start` and `resume` commands.
|
|
214
|
-
|
|
215
|
-
```typescript title="src/mastra/workflows/test-workflow.ts"
|
|
216
|
-
import { RequestContext } from "@mastra/core/request-context";
|
|
186
|
+
**Example output**
|
|
217
187
|
|
|
218
|
-
|
|
188
|
+
The `suspended` array contains the IDs of any suspended workflows and steps from the run. These can be passed to the `step` parameter when calling `resume()` to target and resume the suspended execution path.
|
|
219
189
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
inputData: {
|
|
223
|
-
city: "London",
|
|
224
|
-
},
|
|
225
|
-
requestContext,
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
const resumedResult = await run.resume({
|
|
229
|
-
step: "step-1",
|
|
230
|
-
resumeData: {
|
|
231
|
-
city: "New York",
|
|
232
|
-
},
|
|
233
|
-
requestContext,
|
|
234
|
-
});
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
> See [Request Context](/docs/v1/server-db/request-context) for more information.
|
|
238
|
-
|
|
239
|
-
### Resuming nested workflows
|
|
240
|
-
|
|
241
|
-
To resume a suspended nested workflow pass the workflow instance to the `step` parameter of the `resume` function.
|
|
242
|
-
|
|
243
|
-
```typescript {33-34} title="src/mastra/workflows/test-workflow.ts" showLineNumbers copy
|
|
244
|
-
const dowhileWorkflow = createWorkflow({
|
|
245
|
-
id: "dowhile-workflow",
|
|
246
|
-
inputSchema: z.object({ value: z.number() }),
|
|
247
|
-
outputSchema: z.object({ value: z.number() }),
|
|
248
|
-
})
|
|
249
|
-
.dountil(
|
|
250
|
-
createWorkflow({
|
|
251
|
-
id: "simple-resume-workflow",
|
|
252
|
-
inputSchema: z.object({ value: z.number() }),
|
|
253
|
-
outputSchema: z.object({ value: z.number() }),
|
|
254
|
-
steps: [incrementStep, resumeStep],
|
|
255
|
-
})
|
|
256
|
-
.then(incrementStep)
|
|
257
|
-
.then(resumeStep)
|
|
258
|
-
.commit(),
|
|
259
|
-
async ({ inputData }) => inputData.value >= 10,
|
|
260
|
-
)
|
|
261
|
-
.then(
|
|
262
|
-
createStep({
|
|
263
|
-
id: "final",
|
|
264
|
-
inputSchema: z.object({ value: z.number() }),
|
|
265
|
-
outputSchema: z.object({ value: z.number() }),
|
|
266
|
-
execute: async ({ inputData }) => ({ value: inputData.value }),
|
|
267
|
-
}),
|
|
268
|
-
)
|
|
269
|
-
.commit();
|
|
270
|
-
|
|
271
|
-
const run = await dowhileWorkflow.createRun();
|
|
272
|
-
const result = await run.start({ inputData: { value: 0 } });
|
|
273
|
-
|
|
274
|
-
if (result.status === "suspended") {
|
|
275
|
-
const resumedResult = await run.resume({
|
|
276
|
-
resumeData: { value: 2 },
|
|
277
|
-
step: ["simple-resume-workflow", "resume"],
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
console.log(JSON.stringify(resumedResult, null, 2));
|
|
281
|
-
}
|
|
190
|
+
```typescript
|
|
191
|
+
[ 'nested-workflow', 'step-1' ]
|
|
282
192
|
```
|
|
283
193
|
|
|
284
194
|
## Sleep & Events
|
|
285
195
|
|
|
286
|
-
|
|
196
|
+
Sleep and event methods can be used to pause execution at the workflow level, which sets the status to `waiting`. By comparison, `suspend()` pauses execution within a specific step and sets the status to `suspended`.
|
|
287
197
|
|
|
288
198
|
**Available methods:**
|
|
289
199
|
|
|
@@ -291,3 +201,10 @@ Workflows can also pause execution for timed delays or external events. These me
|
|
|
291
201
|
- [`.sleepUntil()`](/reference/v1/workflows/workflow-methods/sleepUntil) : Pause until a specific date
|
|
292
202
|
- [`.waitForEvent()`](/reference/v1/workflows/workflow-methods/waitForEvent): Pause until an external event is received
|
|
293
203
|
- [`.sendEvent()`](/reference/v1/workflows/workflow-methods/sendEvent) : Send an event to resume a waiting workflow
|
|
204
|
+
|
|
205
|
+
## Related
|
|
206
|
+
|
|
207
|
+
- [Control Flow](/docs/v1/workflows/control-flow)
|
|
208
|
+
- [Human-in-the-loop](/docs/v1/workflows/human-in-the-loop)
|
|
209
|
+
- [Snapshots](/docs/v1/workflows/snapshots)
|
|
210
|
+
- [Time Travel](/docs/v1/workflows/time-travel)
|