@mastra/mcp-docs-server 1.0.0-beta.9 → 1.0.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 +3 -1
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +3 -1
- package/.docs/organized/changelogs/%40internal%2Fplayground.md +40 -0
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +8 -8
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +3 -1
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +287 -287
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +299 -299
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +53 -53
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +38 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +66 -66
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +522 -212
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +662 -200
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +439 -234
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +450 -211
- package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +202 -0
- package/.docs/organized/changelogs/%40mastra%2Fconvex.md +448 -22
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +3359 -289
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +60 -60
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +289 -289
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +90 -90
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +74 -74
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +70 -70
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +248 -221
- package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +70 -0
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +403 -225
- package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +72 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +145 -145
- package/.docs/organized/changelogs/%40mastra%2Ffastembed.md +54 -0
- package/.docs/organized/changelogs/%40mastra%2Flance.md +456 -226
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +625 -229
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +71 -71
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +247 -247
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +28 -28
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +281 -281
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +354 -156
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +545 -212
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +481 -202
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +194 -194
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +781 -235
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +198 -198
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +655 -248
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +163 -163
- package/.docs/organized/changelogs/%40mastra%2Frag.md +310 -310
- package/.docs/organized/changelogs/%40mastra%2Freact.md +328 -237
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +64 -0
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +160 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +850 -239
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +57 -57
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +479 -232
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +53 -53
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +45 -45
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +45 -45
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +47 -47
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +110 -110
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +15 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +98 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +54 -54
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +46 -46
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +93 -93
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +47 -47
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +45 -45
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +45 -45
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +45 -45
- package/.docs/organized/changelogs/create-mastra.md +215 -215
- package/.docs/organized/changelogs/mastra.md +278 -278
- package/.docs/organized/code-examples/a2a.md +2 -2
- package/.docs/organized/code-examples/agent-v6.md +221 -0
- package/.docs/organized/code-examples/agui.md +4 -4
- package/.docs/organized/code-examples/ai-elements.md +3 -3
- package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-v5.md +3 -3
- package/.docs/organized/code-examples/assistant-ui.md +5 -5
- 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 +3 -3
- package/.docs/organized/code-examples/client-side-tools.md +4 -4
- package/.docs/organized/code-examples/crypto-chatbot.md +5 -5
- package/.docs/organized/code-examples/experimental-auth-weather-agent.md +1 -1
- package/.docs/organized/code-examples/fireworks-r1.md +2 -2
- package/.docs/organized/code-examples/heads-up-game.md +7 -7
- package/.docs/organized/code-examples/inngest.md +1075 -0
- package/.docs/organized/code-examples/mcp-configuration.md +1 -1
- package/.docs/organized/code-examples/mcp-server-adapters.md +2 -2
- package/.docs/organized/code-examples/memory-per-resource-example.md +3 -3
- package/.docs/organized/code-examples/memory-todo-agent.md +1 -1
- package/.docs/organized/code-examples/memory-with-context.md +1 -1
- package/.docs/organized/code-examples/memory-with-processors.md +1 -1
- package/.docs/organized/code-examples/openapi-spec-writer.md +3 -3
- package/.docs/organized/code-examples/quick-start.md +1 -5
- package/.docs/organized/code-examples/server-app-access.md +2 -2
- package/.docs/organized/code-examples/server-express-adapter.md +1 -1
- package/.docs/organized/code-examples/server-fastify-adapter.md +83 -0
- package/.docs/organized/code-examples/server-hono-adapter.md +2 -2
- package/.docs/organized/code-examples/server-koa-adapter.md +94 -0
- package/.docs/organized/code-examples/stock-price-tool.md +21 -2
- 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 +24 -6
- package/.docs/raw/agents/agent-approval.mdx +209 -12
- package/.docs/raw/agents/agent-memory.mdx +36 -32
- package/.docs/raw/agents/guardrails.mdx +105 -56
- package/.docs/raw/agents/network-approval.mdx +281 -0
- package/.docs/raw/agents/networks.mdx +69 -13
- package/.docs/raw/agents/overview.mdx +43 -25
- package/.docs/raw/agents/processors.mdx +234 -17
- package/.docs/raw/agents/structured-output.mdx +78 -8
- package/.docs/raw/agents/using-tools.mdx +67 -6
- package/.docs/raw/course/01-first-agent/07-creating-your-agent.md +1 -2
- package/.docs/raw/course/01-first-agent/12-connecting-tool-to-agent.md +1 -1
- package/.docs/raw/course/01-first-agent/16-adding-memory-to-agent.md +1 -2
- package/.docs/raw/course/02-agent-tools-mcp/05-updating-your-agent.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/10-updating-agent-instructions-zapier.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/16-updating-agent-instructions-github.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/21-updating-agent-instructions-hackernews.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/27-updating-agent-instructions-filesystem.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/31-enhancing-memory-configuration.md +3 -3
- package/.docs/raw/course/03-agent-memory/04-creating-basic-memory-agent.md +1 -2
- package/.docs/raw/course/03-agent-memory/07-understanding-memory-threads.md +35 -0
- package/.docs/raw/course/03-agent-memory/08-configuring-conversation-history.md +1 -2
- package/.docs/raw/course/03-agent-memory/13-vector-store-configuration.md +1 -1
- package/.docs/raw/course/03-agent-memory/16-configuring-semantic-recall.md +4 -5
- package/.docs/raw/course/03-agent-memory/18-advanced-configuration-semantic-recall.md +1 -1
- package/.docs/raw/course/03-agent-memory/21-configuring-working-memory.md +3 -4
- package/.docs/raw/course/03-agent-memory/22-custom-working-memory-templates.md +3 -4
- package/.docs/raw/course/03-agent-memory/25-combining-memory-features.md +3 -4
- package/.docs/raw/course/03-agent-memory/27-creating-learning-assistant.md +3 -4
- package/.docs/raw/course/04-workflows/11-creating-an-ai-agent.md +2 -3
- package/.docs/raw/deployment/cloud-providers.mdx +22 -0
- package/.docs/raw/deployment/mastra-server.mdx +140 -0
- package/.docs/raw/deployment/monorepo.mdx +106 -42
- package/.docs/raw/deployment/overview.mdx +35 -48
- package/.docs/raw/deployment/web-framework.mdx +17 -19
- package/.docs/raw/deployment/workflow-runners.mdx +16 -0
- package/.docs/raw/evals/built-in-scorers.mdx +2 -0
- package/.docs/raw/evals/custom-scorers.mdx +60 -12
- package/.docs/raw/evals/overview.mdx +6 -6
- package/.docs/raw/evals/running-in-ci.mdx +4 -2
- package/.docs/raw/getting-started/manual-install.mdx +20 -20
- package/.docs/raw/getting-started/mcp-docs-server.mdx +59 -2
- package/.docs/raw/getting-started/project-structure.mdx +2 -2
- package/.docs/raw/getting-started/start.mdx +17 -1
- package/.docs/raw/getting-started/studio.mdx +6 -35
- package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +23 -33
- package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +1034 -80
- package/.docs/raw/guides/build-your-ui/assistant-ui.mdx +8 -8
- package/.docs/raw/guides/build-your-ui/copilotkit.mdx +32 -11
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/amazon-ec2.mdx +9 -9
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/aws-lambda.mdx +13 -16
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/azure-app-services.mdx +5 -7
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/cloudflare-deployer.mdx +8 -5
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/digital-ocean.mdx +18 -23
- package/.docs/raw/guides/deployment/index.mdx +32 -0
- package/.docs/raw/guides/deployment/inngest.mdx +673 -0
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/netlify-deployer.mdx +7 -3
- package/.docs/raw/{deployment/cloud-providers → guides/deployment}/vercel-deployer.mdx +8 -5
- package/.docs/raw/guides/getting-started/astro.mdx +292 -451
- package/.docs/raw/guides/getting-started/express.mdx +72 -153
- package/.docs/raw/guides/getting-started/hono.mdx +227 -0
- package/.docs/raw/guides/getting-started/next-js.mdx +173 -61
- package/.docs/raw/guides/getting-started/nuxt.mdx +505 -0
- package/.docs/raw/guides/getting-started/quickstart.mdx +5 -5
- package/.docs/raw/guides/getting-started/sveltekit.mdx +238 -409
- package/.docs/raw/guides/getting-started/vite-react.mdx +317 -147
- package/.docs/raw/guides/guide/ai-recruiter.mdx +10 -10
- package/.docs/raw/guides/guide/chef-michel.mdx +9 -11
- package/.docs/raw/guides/guide/notes-mcp-server.mdx +15 -15
- package/.docs/raw/guides/guide/research-assistant.mdx +20 -20
- package/.docs/raw/guides/guide/stock-agent.mdx +5 -5
- package/.docs/raw/guides/guide/web-search.mdx +38 -38
- package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +7 -7
- package/.docs/raw/guides/index.mdx +0 -1
- package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +2 -2
- package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +105 -4
- package/.docs/raw/guides/migrations/upgrade-to-v1/cli.mdx +15 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +170 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/deployment.mdx +42 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +0 -35
- package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +40 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +17 -2
- package/.docs/raw/guides/migrations/upgrade-to-v1/processors.mdx +11 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/rag.mdx +47 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +271 -25
- package/.docs/raw/guides/migrations/upgrade-to-v1/tracing.mdx +72 -17
- package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +46 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +50 -7
- package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +21 -23
- package/.docs/raw/index.mdx +2 -2
- package/.docs/raw/mastra-cloud/deployment.mdx +86 -0
- package/.docs/raw/mastra-cloud/observability.mdx +43 -0
- package/.docs/raw/mastra-cloud/overview.mdx +31 -0
- package/.docs/raw/mastra-cloud/setup.mdx +64 -0
- package/.docs/raw/mastra-cloud/studio.mdx +35 -0
- package/.docs/raw/mcp/overview.mdx +60 -25
- package/.docs/raw/mcp/publishing-mcp-server.mdx +7 -4
- package/.docs/raw/memory/memory-processors.mdx +17 -12
- package/.docs/raw/memory/message-history.mdx +72 -0
- package/.docs/raw/memory/overview.mdx +38 -76
- package/.docs/raw/memory/semantic-recall.mdx +65 -52
- package/.docs/raw/memory/storage.mdx +248 -0
- package/.docs/raw/memory/working-memory.mdx +24 -13
- package/.docs/raw/observability/logging.mdx +16 -15
- package/.docs/raw/observability/overview.mdx +27 -7
- package/.docs/raw/observability/tracing/bridges/otel.mdx +7 -4
- package/.docs/raw/observability/tracing/exporters/arize.mdx +61 -24
- package/.docs/raw/observability/tracing/exporters/braintrust.mdx +32 -22
- package/.docs/raw/observability/tracing/exporters/cloud.mdx +24 -5
- package/.docs/raw/observability/tracing/exporters/datadog.mdx +175 -0
- package/.docs/raw/observability/tracing/exporters/default.mdx +28 -7
- package/.docs/raw/observability/tracing/exporters/laminar.mdx +89 -0
- package/.docs/raw/observability/tracing/exporters/langfuse.mdx +31 -22
- package/.docs/raw/observability/tracing/exporters/langsmith.mdx +33 -3
- package/.docs/raw/observability/tracing/exporters/otel.mdx +194 -22
- package/.docs/raw/observability/tracing/exporters/posthog.mdx +32 -22
- package/.docs/raw/observability/tracing/exporters/sentry.mdx +198 -0
- package/.docs/raw/observability/tracing/overview.mdx +388 -108
- package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +27 -7
- package/.docs/raw/rag/chunking-and-embedding.mdx +22 -33
- package/.docs/raw/rag/graph-rag.mdx +223 -0
- package/.docs/raw/rag/overview.mdx +6 -3
- package/.docs/raw/rag/retrieval.mdx +53 -57
- package/.docs/raw/rag/vector-databases.mdx +55 -31
- package/.docs/raw/reference/agents/agent.mdx +17 -14
- package/.docs/raw/reference/agents/generate.mdx +172 -44
- package/.docs/raw/reference/agents/generateLegacy.mdx +5 -3
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +5 -3
- package/.docs/raw/reference/agents/getDefaultOptions.mdx +5 -3
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +5 -3
- package/.docs/raw/reference/agents/getDescription.mdx +3 -1
- package/.docs/raw/reference/agents/getInstructions.mdx +5 -3
- package/.docs/raw/reference/agents/getLLM.mdx +5 -3
- package/.docs/raw/reference/agents/getMemory.mdx +5 -3
- package/.docs/raw/reference/agents/getModel.mdx +5 -3
- package/.docs/raw/reference/agents/getTools.mdx +4 -2
- package/.docs/raw/reference/agents/getVoice.mdx +4 -2
- package/.docs/raw/reference/agents/listAgents.mdx +4 -2
- package/.docs/raw/reference/agents/listScorers.mdx +5 -3
- package/.docs/raw/reference/agents/listTools.mdx +4 -2
- package/.docs/raw/reference/agents/listWorkflows.mdx +4 -2
- package/.docs/raw/reference/agents/network.mdx +113 -1
- package/.docs/raw/reference/ai-sdk/chat-route.mdx +6 -3
- package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +4 -2
- package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +4 -2
- package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +5 -3
- package/.docs/raw/reference/ai-sdk/network-route.mdx +6 -3
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +10 -6
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-v4-messages.mdx +130 -0
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-v5-messages.mdx +110 -0
- package/.docs/raw/reference/ai-sdk/with-mastra.mdx +122 -0
- package/.docs/raw/reference/ai-sdk/workflow-route.mdx +7 -4
- package/.docs/raw/reference/auth/auth0.mdx +5 -3
- package/.docs/raw/reference/auth/clerk.mdx +5 -3
- package/.docs/raw/reference/auth/firebase.mdx +6 -5
- package/.docs/raw/reference/auth/jwt.mdx +5 -3
- package/.docs/raw/reference/auth/supabase.mdx +5 -3
- package/.docs/raw/reference/auth/workos.mdx +5 -3
- package/.docs/raw/reference/cli/create-mastra.mdx +12 -10
- package/.docs/raw/reference/cli/mastra.mdx +63 -15
- package/.docs/raw/reference/client-js/agents.mdx +77 -35
- package/.docs/raw/reference/client-js/error-handling.mdx +3 -3
- package/.docs/raw/reference/client-js/logs.mdx +2 -0
- package/.docs/raw/reference/client-js/mastra-client.mdx +4 -2
- package/.docs/raw/reference/client-js/memory.mdx +43 -1
- package/.docs/raw/reference/client-js/observability.mdx +2 -0
- package/.docs/raw/reference/client-js/telemetry.mdx +2 -0
- package/.docs/raw/reference/client-js/tools.mdx +2 -0
- package/.docs/raw/reference/client-js/vectors.mdx +2 -0
- package/.docs/raw/reference/client-js/workflows.mdx +47 -3
- package/.docs/raw/reference/configuration.mdx +761 -0
- package/.docs/raw/reference/core/addGateway.mdx +2 -0
- package/.docs/raw/reference/core/getAgent.mdx +3 -1
- package/.docs/raw/reference/core/getAgentById.mdx +3 -1
- package/.docs/raw/reference/core/getDeployer.mdx +3 -1
- package/.docs/raw/reference/core/getGateway.mdx +2 -0
- package/.docs/raw/reference/core/getGatewayById.mdx +2 -0
- package/.docs/raw/reference/core/getLogger.mdx +3 -1
- package/.docs/raw/reference/core/getMCPServer.mdx +3 -1
- package/.docs/raw/reference/core/getMCPServerById.mdx +3 -1
- package/.docs/raw/reference/core/getMemory.mdx +7 -3
- package/.docs/raw/reference/core/getScorer.mdx +2 -0
- package/.docs/raw/reference/core/getScorerById.mdx +2 -0
- package/.docs/raw/reference/core/getServer.mdx +6 -4
- package/.docs/raw/reference/core/getStorage.mdx +5 -3
- package/.docs/raw/reference/core/getStoredAgentById.mdx +6 -4
- package/.docs/raw/reference/core/getTelemetry.mdx +3 -1
- package/.docs/raw/reference/core/getVector.mdx +3 -1
- package/.docs/raw/reference/core/getWorkflow.mdx +3 -1
- package/.docs/raw/reference/core/listAgents.mdx +3 -1
- package/.docs/raw/reference/core/listGateways.mdx +2 -0
- package/.docs/raw/reference/core/listLogs.mdx +3 -1
- package/.docs/raw/reference/core/listLogsByRunId.mdx +3 -1
- package/.docs/raw/reference/core/listMCPServers.mdx +3 -1
- package/.docs/raw/reference/core/listMemory.mdx +8 -4
- package/.docs/raw/reference/core/listScorers.mdx +2 -0
- package/.docs/raw/reference/core/listStoredAgents.mdx +7 -5
- package/.docs/raw/reference/core/listVectors.mdx +3 -1
- package/.docs/raw/reference/core/listWorkflows.mdx +3 -1
- package/.docs/raw/reference/core/mastra-class.mdx +27 -20
- package/.docs/raw/reference/core/mastra-model-gateway.mdx +2 -0
- package/.docs/raw/reference/core/setLogger.mdx +3 -1
- package/.docs/raw/reference/core/setStorage.mdx +6 -4
- package/.docs/raw/reference/deployer/cloudflare.mdx +22 -53
- package/.docs/raw/reference/deployer/deployer.mdx +2 -1
- package/.docs/raw/reference/deployer/netlify.mdx +4 -1
- package/.docs/raw/reference/deployer/vercel.mdx +5 -4
- package/.docs/raw/reference/evals/answer-relevancy.mdx +4 -1
- package/.docs/raw/reference/evals/answer-similarity.mdx +4 -1
- package/.docs/raw/reference/evals/bias.mdx +4 -1
- package/.docs/raw/reference/evals/completeness.mdx +4 -1
- package/.docs/raw/reference/evals/content-similarity.mdx +4 -1
- package/.docs/raw/reference/evals/context-precision.mdx +4 -1
- package/.docs/raw/reference/evals/context-relevance.mdx +2 -0
- package/.docs/raw/reference/evals/create-scorer.mdx +11 -3
- package/.docs/raw/reference/evals/faithfulness.mdx +4 -1
- package/.docs/raw/reference/evals/hallucination.mdx +4 -1
- package/.docs/raw/reference/evals/keyword-coverage.mdx +4 -1
- package/.docs/raw/reference/evals/mastra-scorer.mdx +2 -0
- package/.docs/raw/reference/evals/noise-sensitivity.mdx +2 -0
- package/.docs/raw/reference/evals/prompt-alignment.mdx +9 -7
- package/.docs/raw/reference/evals/run-evals.mdx +3 -1
- package/.docs/raw/reference/evals/scorer-utils.mdx +3 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +4 -1
- package/.docs/raw/reference/evals/tone-consistency.mdx +4 -1
- package/.docs/raw/reference/evals/tool-call-accuracy.mdx +25 -23
- package/.docs/raw/reference/evals/toxicity.mdx +4 -1
- package/.docs/raw/reference/index.mdx +2 -1
- package/.docs/raw/reference/logging/pino-logger.mdx +10 -8
- package/.docs/raw/reference/memory/clone-utilities.mdx +345 -0
- package/.docs/raw/reference/memory/cloneThread.mdx +237 -0
- package/.docs/raw/reference/memory/createThread.mdx +6 -4
- package/.docs/raw/reference/memory/deleteMessages.mdx +4 -2
- package/.docs/raw/reference/memory/getThreadById.mdx +3 -1
- package/.docs/raw/reference/memory/listThreads.mdx +187 -0
- package/.docs/raw/reference/memory/memory-class.mdx +27 -20
- package/.docs/raw/reference/memory/recall.mdx +6 -4
- package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +6 -2
- package/.docs/raw/reference/observability/tracing/configuration.mdx +51 -0
- package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +25 -6
- package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +23 -2
- package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +10 -0
- package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +3 -0
- package/.docs/raw/reference/observability/tracing/exporters/datadog.mdx +172 -0
- package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +10 -0
- package/.docs/raw/reference/observability/tracing/exporters/laminar.mdx +139 -0
- package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +26 -4
- package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +10 -0
- package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +51 -34
- package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +25 -4
- package/.docs/raw/reference/observability/tracing/exporters/sentry.mdx +224 -0
- package/.docs/raw/reference/observability/tracing/instances.mdx +2 -0
- package/.docs/raw/reference/observability/tracing/interfaces.mdx +20 -0
- package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +2 -0
- package/.docs/raw/reference/observability/tracing/spans.mdx +2 -0
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +4 -2
- package/.docs/raw/reference/processors/language-detector.mdx +6 -3
- package/.docs/raw/reference/processors/message-history-processor.mdx +5 -2
- package/.docs/raw/reference/processors/moderation-processor.mdx +6 -4
- package/.docs/raw/reference/processors/pii-detector.mdx +6 -4
- package/.docs/raw/reference/processors/processor-interface.mdx +326 -23
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +5 -3
- package/.docs/raw/reference/processors/semantic-recall-processor.mdx +7 -2
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +5 -3
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +62 -19
- package/.docs/raw/reference/processors/tool-call-filter.mdx +5 -3
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +6 -3
- package/.docs/raw/reference/processors/working-memory-processor.mdx +6 -3
- package/.docs/raw/reference/rag/chunk.mdx +7 -6
- package/.docs/raw/reference/rag/database-config.mdx +8 -6
- package/.docs/raw/reference/rag/document.mdx +2 -0
- package/.docs/raw/reference/rag/embeddings.mdx +2 -0
- package/.docs/raw/reference/rag/extract-params.mdx +57 -3
- package/.docs/raw/reference/rag/graph-rag.mdx +2 -0
- package/.docs/raw/reference/rag/metadata-filters.mdx +27 -7
- package/.docs/raw/reference/rag/rerank.mdx +2 -0
- package/.docs/raw/reference/rag/rerankWithScorer.mdx +2 -0
- package/.docs/raw/reference/server/create-route.mdx +34 -18
- package/.docs/raw/reference/server/express-adapter.mdx +27 -51
- package/.docs/raw/reference/server/fastify-adapter.mdx +130 -0
- package/.docs/raw/reference/server/hono-adapter.mdx +27 -51
- package/.docs/raw/reference/server/koa-adapter.mdx +129 -0
- package/.docs/raw/reference/server/mastra-server.mdx +52 -34
- package/.docs/raw/reference/server/routes.mdx +73 -10
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +10 -5
- package/.docs/raw/reference/storage/cloudflare.mdx +12 -2
- package/.docs/raw/reference/storage/composite.mdx +245 -0
- package/.docs/raw/reference/storage/convex.mdx +8 -6
- package/.docs/raw/reference/storage/dynamodb.mdx +134 -8
- package/.docs/raw/reference/storage/lance.mdx +9 -5
- package/.docs/raw/reference/storage/libsql.mdx +76 -54
- package/.docs/raw/reference/storage/mongodb.mdx +115 -16
- package/.docs/raw/reference/storage/mssql.mdx +11 -6
- package/.docs/raw/{server-db/storage.mdx → reference/storage/overview.mdx} +15 -111
- package/.docs/raw/reference/storage/postgresql.mdx +228 -83
- package/.docs/raw/reference/storage/upstash.mdx +78 -2
- package/.docs/raw/reference/streaming/ChunkType.mdx +31 -3
- package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +67 -6
- package/.docs/raw/reference/streaming/agents/stream.mdx +48 -51
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +5 -3
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +3 -1
- package/.docs/raw/reference/streaming/workflows/resumeStream.mdx +3 -1
- package/.docs/raw/reference/streaming/workflows/stream.mdx +37 -22
- package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +6 -4
- package/.docs/raw/reference/templates/overview.mdx +3 -2
- package/.docs/raw/reference/tools/client.mdx +3 -0
- package/.docs/raw/reference/tools/create-tool.mdx +127 -5
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +2 -0
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +40 -3
- package/.docs/raw/reference/tools/mcp-client.mdx +110 -1
- package/.docs/raw/reference/tools/mcp-server.mdx +278 -24
- package/.docs/raw/reference/tools/vector-query-tool.mdx +68 -4
- package/.docs/raw/reference/vectors/astra.mdx +5 -3
- package/.docs/raw/reference/vectors/chroma.mdx +5 -3
- package/.docs/raw/reference/vectors/convex.mdx +14 -12
- package/.docs/raw/reference/vectors/couchbase.mdx +7 -5
- package/.docs/raw/reference/vectors/duckdb.mdx +12 -10
- package/.docs/raw/reference/vectors/elasticsearch.mdx +12 -4
- package/.docs/raw/reference/vectors/lance.mdx +6 -4
- package/.docs/raw/reference/vectors/libsql.mdx +66 -13
- package/.docs/raw/reference/vectors/mongodb.mdx +90 -10
- package/.docs/raw/reference/vectors/opensearch.mdx +30 -3
- package/.docs/raw/reference/vectors/pg.mdx +58 -6
- package/.docs/raw/reference/vectors/pinecone.mdx +23 -8
- package/.docs/raw/reference/vectors/qdrant.mdx +148 -4
- package/.docs/raw/reference/vectors/s3vectors.mdx +8 -6
- package/.docs/raw/reference/vectors/turbopuffer.mdx +6 -4
- package/.docs/raw/reference/vectors/upstash.mdx +60 -6
- package/.docs/raw/reference/vectors/vectorize.mdx +5 -3
- package/.docs/raw/reference/voice/azure.mdx +2 -0
- package/.docs/raw/reference/voice/cloudflare.mdx +2 -0
- package/.docs/raw/reference/voice/composite-voice.mdx +4 -0
- package/.docs/raw/reference/voice/deepgram.mdx +2 -0
- package/.docs/raw/reference/voice/elevenlabs.mdx +2 -0
- package/.docs/raw/reference/voice/google-gemini-live.mdx +3 -0
- package/.docs/raw/reference/voice/google.mdx +2 -0
- package/.docs/raw/reference/voice/mastra-voice.mdx +2 -0
- package/.docs/raw/reference/voice/murf.mdx +2 -0
- package/.docs/raw/reference/voice/openai-realtime.mdx +3 -0
- package/.docs/raw/reference/voice/openai.mdx +2 -0
- package/.docs/raw/reference/voice/playai.mdx +2 -0
- package/.docs/raw/reference/voice/sarvam.mdx +2 -0
- package/.docs/raw/reference/voice/speechify.mdx +2 -0
- package/.docs/raw/reference/voice/voice.addInstructions.mdx +3 -0
- package/.docs/raw/reference/voice/voice.addTools.mdx +3 -0
- package/.docs/raw/reference/voice/voice.answer.mdx +4 -0
- package/.docs/raw/reference/voice/voice.close.mdx +3 -0
- package/.docs/raw/reference/voice/voice.connect.mdx +5 -1
- package/.docs/raw/reference/voice/voice.events.mdx +2 -0
- package/.docs/raw/reference/voice/voice.getSpeakers.mdx +3 -0
- package/.docs/raw/reference/voice/voice.listen.mdx +6 -0
- package/.docs/raw/reference/voice/voice.off.mdx +2 -0
- package/.docs/raw/reference/voice/voice.on.mdx +5 -1
- package/.docs/raw/reference/voice/voice.send.mdx +4 -0
- package/.docs/raw/reference/voice/voice.speak.mdx +6 -0
- package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -0
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +55 -5
- package/.docs/raw/reference/workflows/run-methods/restart.mdx +3 -3
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +6 -4
- package/.docs/raw/reference/workflows/run-methods/start.mdx +7 -5
- package/.docs/raw/reference/workflows/run-methods/startAsync.mdx +145 -0
- package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +10 -8
- package/.docs/raw/reference/workflows/run.mdx +11 -3
- package/.docs/raw/reference/workflows/step.mdx +56 -3
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +39 -2
- package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +71 -4
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +9 -7
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +4 -6
- package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +4 -6
- package/.docs/raw/reference/workflows/workflow-methods/then.mdx +3 -1
- package/.docs/raw/reference/workflows/workflow.mdx +193 -2
- package/.docs/raw/{auth → server/auth}/auth0.mdx +40 -21
- package/.docs/raw/{auth → server/auth}/clerk.mdx +37 -16
- package/.docs/raw/{auth → server/auth}/firebase.mdx +47 -25
- package/.docs/raw/{auth → server/auth}/index.mdx +8 -6
- package/.docs/raw/{auth → server/auth}/jwt.mdx +22 -10
- package/.docs/raw/{auth → server/auth}/supabase.mdx +45 -25
- package/.docs/raw/{auth → server/auth}/workos.mdx +39 -20
- package/.docs/raw/{server-db → server}/custom-adapters.mdx +40 -24
- package/.docs/raw/{server-db → server}/custom-api-routes.mdx +6 -6
- package/.docs/raw/{server-db → server}/mastra-client.mdx +35 -38
- package/.docs/raw/server/mastra-server.mdx +86 -0
- package/.docs/raw/{server-db → server}/middleware.mdx +11 -9
- package/.docs/raw/{server-db → server}/request-context.mdx +85 -43
- package/.docs/raw/{server-db → server}/server-adapters.mdx +154 -33
- package/.docs/raw/streaming/events.mdx +16 -7
- package/.docs/raw/streaming/overview.mdx +30 -17
- package/.docs/raw/streaming/tool-streaming.mdx +8 -6
- package/.docs/raw/streaming/workflow-streaming.mdx +8 -8
- package/.docs/raw/tools-mcp/advanced-usage.mdx +4 -2
- package/.docs/raw/tools-mcp/mcp-overview.mdx +46 -12
- package/.docs/raw/tools-mcp/overview.mdx +14 -13
- package/.docs/raw/voice/overview.mdx +17 -2
- package/.docs/raw/voice/speech-to-speech.mdx +5 -0
- package/.docs/raw/voice/speech-to-text.mdx +4 -0
- package/.docs/raw/voice/text-to-speech.mdx +3 -0
- package/.docs/raw/workflows/agents-and-tools.mdx +70 -21
- package/.docs/raw/workflows/control-flow.mdx +369 -34
- package/.docs/raw/workflows/error-handling.mdx +192 -18
- package/.docs/raw/workflows/human-in-the-loop.mdx +8 -7
- package/.docs/raw/workflows/input-data-mapping.mdx +9 -7
- package/.docs/raw/workflows/overview.mdx +80 -34
- package/.docs/raw/workflows/snapshots.mdx +19 -45
- package/.docs/raw/workflows/suspend-and-resume.mdx +14 -14
- package/.docs/raw/workflows/time-travel.mdx +25 -21
- package/.docs/raw/workflows/workflow-state.mdx +7 -8
- package/CHANGELOG.md +246 -0
- package/README.md +36 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/logger.d.ts +3 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/stdio.js +746 -49
- package/dist/tools/course.d.ts.map +1 -1
- package/dist/tools/embedded-docs.d.ts +276 -0
- package/dist/tools/embedded-docs.d.ts.map +1 -0
- package/package.json +9 -8
- package/.docs/organized/changelogs/%40internal%2Fai-sdk-v4.md +0 -1
- package/.docs/raw/deployment/building-mastra.mdx +0 -73
- package/.docs/raw/deployment/cloud-providers/index.mdx +0 -55
- package/.docs/raw/deployment/mastra-cloud/dashboard.mdx +0 -100
- package/.docs/raw/deployment/mastra-cloud/observability.mdx +0 -53
- package/.docs/raw/deployment/mastra-cloud/overview.mdx +0 -65
- package/.docs/raw/deployment/mastra-cloud/setting-up.mdx +0 -105
- package/.docs/raw/memory/conversation-history.mdx +0 -24
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +0 -140
- package/.docs/raw/memory/storage/memory-with-mongodb.mdx +0 -150
- package/.docs/raw/memory/storage/memory-with-pg.mdx +0 -138
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +0 -146
- package/.docs/raw/memory/threads-and-resources.mdx +0 -95
- package/.docs/raw/reference/core/setTelemetry.mdx +0 -36
- package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +0 -110
- package/.docs/raw/reference/memory/query.mdx +0 -189
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +0 -70
- package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +0 -66
- package/.docs/raw/server-db/mastra-server.mdx +0 -97
- package/.docs/raw/workflows/inngest-workflow.mdx +0 -363
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Guardrails | Agents"
|
|
3
3
|
description: "Learn how to implement guardrails using input and output processors to secure and control AI interactions."
|
|
4
|
+
packages:
|
|
5
|
+
- "@mastra/core"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Guardrails
|
|
@@ -22,7 +24,7 @@ Use processors for content moderation, prompt injection prevention, response san
|
|
|
22
24
|
|
|
23
25
|
Import and instantiate the relevant processor class, and pass it to your agent’s configuration using either the `inputProcessors` or `outputProcessors` option:
|
|
24
26
|
|
|
25
|
-
```typescript {2,
|
|
27
|
+
```typescript {2,9-17} title="src/mastra/agents/moderated-agent.ts"
|
|
26
28
|
import { Agent } from "@mastra/core/agent";
|
|
27
29
|
import { ModerationProcessor } from "@mastra/core/processors";
|
|
28
30
|
|
|
@@ -51,13 +53,12 @@ Input processors are applied before user messages reach the language model. They
|
|
|
51
53
|
|
|
52
54
|
The `UnicodeNormalizer` is an input processor that cleans and normalizes user input by unifying Unicode characters, standardizing whitespace, and removing problematic symbols, allowing the LLM to better understand user messages.
|
|
53
55
|
|
|
54
|
-
```typescript {
|
|
56
|
+
```typescript {7-10} title="src/mastra/agents/normalized-agent.ts"
|
|
55
57
|
import { UnicodeNormalizer } from "@mastra/core/processors";
|
|
56
58
|
|
|
57
59
|
export const normalizedAgent = new Agent({
|
|
58
60
|
id: "normalized-agent",
|
|
59
61
|
name: "Normalized Agent",
|
|
60
|
-
// ...
|
|
61
62
|
inputProcessors: [
|
|
62
63
|
new UnicodeNormalizer({
|
|
63
64
|
stripControlChars: true,
|
|
@@ -67,19 +68,22 @@ export const normalizedAgent = new Agent({
|
|
|
67
68
|
});
|
|
68
69
|
```
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
:::info
|
|
72
|
+
|
|
73
|
+
Visit [UnicodeNormalizer](/reference/v1/processors/unicode-normalizer) for a full list of configuration options.
|
|
74
|
+
|
|
75
|
+
:::
|
|
71
76
|
|
|
72
77
|
### Preventing prompt injection
|
|
73
78
|
|
|
74
79
|
The `PromptInjectionDetector` is an input processor that scans user messages for prompt injection, jailbreak attempts, and system override patterns. It uses an LLM to classify risky input and can block or rewrite it before it reaches the model.
|
|
75
80
|
|
|
76
|
-
```typescript {
|
|
81
|
+
```typescript {7-12} title="src/mastra/agents/secure-agent.ts"
|
|
77
82
|
import { PromptInjectionDetector } from "@mastra/core/processors";
|
|
78
83
|
|
|
79
84
|
export const secureAgent = new Agent({
|
|
80
85
|
id: "secure-agent",
|
|
81
86
|
name: "Secure Agent",
|
|
82
|
-
// ...
|
|
83
87
|
inputProcessors: [
|
|
84
88
|
new PromptInjectionDetector({
|
|
85
89
|
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
@@ -91,19 +95,22 @@ export const secureAgent = new Agent({
|
|
|
91
95
|
});
|
|
92
96
|
```
|
|
93
97
|
|
|
94
|
-
|
|
98
|
+
:::info
|
|
99
|
+
|
|
100
|
+
Visit [PromptInjectionDetector](/reference/v1/processors/prompt-injection-detector) for a full list of configuration options.
|
|
101
|
+
|
|
102
|
+
:::
|
|
95
103
|
|
|
96
104
|
### Detecting and translating language
|
|
97
105
|
|
|
98
106
|
The `LanguageDetector` is an input processor that detects and translates user messages into a target language, enabling multilingual support while maintaining consistent interaction. It uses an LLM to identify the language and perform the translation.
|
|
99
107
|
|
|
100
|
-
```typescript {
|
|
108
|
+
```typescript {7-12} title="src/mastra/agents/multilingual-agent.ts"
|
|
101
109
|
import { LanguageDetector } from "@mastra/core/processors";
|
|
102
110
|
|
|
103
111
|
export const multilingualAgent = new Agent({
|
|
104
112
|
id: "multilingual-agent",
|
|
105
113
|
name: "Multilingual Agent",
|
|
106
|
-
// ...
|
|
107
114
|
inputProcessors: [
|
|
108
115
|
new LanguageDetector({
|
|
109
116
|
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
@@ -115,7 +122,11 @@ export const multilingualAgent = new Agent({
|
|
|
115
122
|
});
|
|
116
123
|
```
|
|
117
124
|
|
|
118
|
-
|
|
125
|
+
:::info
|
|
126
|
+
|
|
127
|
+
Visit [LanguageDetector](/reference/v1/processors/language-detector) for a full list of configuration options.
|
|
128
|
+
|
|
129
|
+
:::
|
|
119
130
|
|
|
120
131
|
## Output processors
|
|
121
132
|
|
|
@@ -125,13 +136,12 @@ Output processors are applied after the language model generates a response, but
|
|
|
125
136
|
|
|
126
137
|
The `BatchPartsProcessor` is an output processor that combines multiple stream parts before emitting them to the client. This reduces network overhead and improves the user experience by consolidating small chunks into larger batches.
|
|
127
138
|
|
|
128
|
-
```typescript {
|
|
139
|
+
```typescript {7-11} title="src/mastra/agents/batched-agent.ts"
|
|
129
140
|
import { BatchPartsProcessor } from "@mastra/core/processors";
|
|
130
141
|
|
|
131
142
|
export const batchedAgent = new Agent({
|
|
132
143
|
id: "batched-agent",
|
|
133
144
|
name: "Batched Agent",
|
|
134
|
-
// ...
|
|
135
145
|
outputProcessors: [
|
|
136
146
|
new BatchPartsProcessor({
|
|
137
147
|
batchSize: 5,
|
|
@@ -142,19 +152,22 @@ export const batchedAgent = new Agent({
|
|
|
142
152
|
});
|
|
143
153
|
```
|
|
144
154
|
|
|
145
|
-
|
|
155
|
+
:::info
|
|
156
|
+
|
|
157
|
+
Visit [BatchPartsProcessor](/reference/v1/processors/batch-parts-processor) for a full list of configuration options.
|
|
158
|
+
|
|
159
|
+
:::
|
|
146
160
|
|
|
147
161
|
### Limiting token usage
|
|
148
162
|
|
|
149
163
|
The `TokenLimiterProcessor` is an output processor that limits the number of tokens in model responses. It helps manage cost and performance by truncating or blocking messages when the limit is exceeded.
|
|
150
164
|
|
|
151
|
-
```typescript {
|
|
165
|
+
```typescript {7-11} title="src/mastra/agents/limited-agent.ts"
|
|
152
166
|
import { TokenLimiterProcessor } from "@mastra/core/processors";
|
|
153
167
|
|
|
154
168
|
export const limitedAgent = new Agent({
|
|
155
169
|
id: "limited-agent",
|
|
156
170
|
name: "Limited Agent",
|
|
157
|
-
// ...
|
|
158
171
|
outputProcessors: [
|
|
159
172
|
new TokenLimiterProcessor({
|
|
160
173
|
limit: 1000,
|
|
@@ -165,13 +178,17 @@ export const limitedAgent = new Agent({
|
|
|
165
178
|
});
|
|
166
179
|
```
|
|
167
180
|
|
|
168
|
-
|
|
181
|
+
:::info
|
|
182
|
+
|
|
183
|
+
Visit [TokenLimiterProcessor](/reference/v1/processors/token-limiter-processor) for a full list of configuration options.
|
|
184
|
+
|
|
185
|
+
:::
|
|
169
186
|
|
|
170
187
|
### Scrubbing system prompts
|
|
171
188
|
|
|
172
189
|
The `SystemPromptScrubber` is an output processor that detects and redacts system prompts or other internal instructions from model responses. It helps prevent unintended disclosure of prompt content or configuration details that could introduce security risks. It uses an LLM to identify and redact sensitive content based on configured detection types.
|
|
173
190
|
|
|
174
|
-
```typescript {7-16} title="src/mastra/agents/scrubbed-agent.ts"
|
|
191
|
+
```typescript {7-16} title="src/mastra/agents/scrubbed-agent.ts"
|
|
175
192
|
import { SystemPromptScrubber } from "@mastra/core/processors";
|
|
176
193
|
|
|
177
194
|
const scrubbedAgent = new Agent({
|
|
@@ -192,10 +209,14 @@ const scrubbedAgent = new Agent({
|
|
|
192
209
|
});
|
|
193
210
|
```
|
|
194
211
|
|
|
195
|
-
|
|
212
|
+
:::info
|
|
213
|
+
|
|
214
|
+
Visit [SystemPromptScrubber](/reference/v1/processors/system-prompt-scrubber) for a full list of configuration options.
|
|
215
|
+
|
|
216
|
+
:::
|
|
196
217
|
|
|
197
218
|
:::note
|
|
198
|
-
When streaming responses over HTTP, Mastra redacts sensitive request data (system prompts, tool definitions, API keys) from stream chunks at the server level by default. See [Stream data redaction](/docs/v1/server
|
|
219
|
+
When streaming responses over HTTP, Mastra redacts sensitive request data (system prompts, tool definitions, API keys) from stream chunks at the server level by default. See [Stream data redaction](/docs/v1/server/mastra-server#stream-data-redaction) for details.
|
|
199
220
|
:::
|
|
200
221
|
|
|
201
222
|
## Hybrid processors
|
|
@@ -206,13 +227,12 @@ Hybrid processors can be applied either before messages are sent to the language
|
|
|
206
227
|
|
|
207
228
|
The `ModerationProcessor` is a hybrid processor that detects inappropriate or harmful content across categories like hate, harassment, and violence. It can be used to moderate either user input or model output, depending on where it's applied. It uses an LLM to classify the message and can block or rewrite it based on your configuration.
|
|
208
229
|
|
|
209
|
-
```typescript {
|
|
230
|
+
```typescript {7-12,15} title="src/mastra/agents/moderated-agent.ts"
|
|
210
231
|
import { ModerationProcessor } from "@mastra/core/processors";
|
|
211
232
|
|
|
212
233
|
export const moderatedAgent = new Agent({
|
|
213
234
|
id: "moderated-agent",
|
|
214
235
|
name: "Moderated Agent",
|
|
215
|
-
// ...
|
|
216
236
|
inputProcessors: [
|
|
217
237
|
new ModerationProcessor({
|
|
218
238
|
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
@@ -222,26 +242,27 @@ export const moderatedAgent = new Agent({
|
|
|
222
242
|
}),
|
|
223
243
|
],
|
|
224
244
|
outputProcessors: [
|
|
225
|
-
new ModerationProcessor(
|
|
226
|
-
// ...
|
|
227
|
-
}),
|
|
245
|
+
new ModerationProcessor(),
|
|
228
246
|
],
|
|
229
247
|
});
|
|
230
248
|
```
|
|
231
249
|
|
|
232
|
-
|
|
250
|
+
:::info
|
|
251
|
+
|
|
252
|
+
Visit [ModerationProcessor](/reference/v1/processors/moderation-processor) for a full list of configuration options.
|
|
253
|
+
|
|
254
|
+
:::
|
|
233
255
|
|
|
234
256
|
### Detecting and redacting PII
|
|
235
257
|
|
|
236
258
|
The `PIIDetector` is a hybrid processor that detects and removes personally identifiable information such as emails, phone numbers, and credit cards. It can redact either user input or model output, depending on where it's applied. It uses an LLM to identify sensitive content based on configured detection types.
|
|
237
259
|
|
|
238
|
-
```typescript {
|
|
260
|
+
```typescript {7-14,17} title="src/mastra/agents/private-agent.ts"
|
|
239
261
|
import { PIIDetector } from "@mastra/core/processors";
|
|
240
262
|
|
|
241
263
|
export const privateAgent = new Agent({
|
|
242
264
|
id: "private-agent",
|
|
243
265
|
name: "Private Agent",
|
|
244
|
-
// ...
|
|
245
266
|
inputProcessors: [
|
|
246
267
|
new PIIDetector({
|
|
247
268
|
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
@@ -253,14 +274,16 @@ export const privateAgent = new Agent({
|
|
|
253
274
|
}),
|
|
254
275
|
],
|
|
255
276
|
outputProcessors: [
|
|
256
|
-
new PIIDetector(
|
|
257
|
-
// ...
|
|
258
|
-
}),
|
|
277
|
+
new PIIDetector(),
|
|
259
278
|
],
|
|
260
279
|
});
|
|
261
280
|
```
|
|
262
281
|
|
|
263
|
-
|
|
282
|
+
:::info
|
|
283
|
+
|
|
284
|
+
Visit [PIIDetector](/reference/v1/processors/pii-detector) for a full list of configuration options.
|
|
285
|
+
|
|
286
|
+
:::
|
|
264
287
|
|
|
265
288
|
## Applying multiple processors
|
|
266
289
|
|
|
@@ -274,7 +297,7 @@ A typical order might be:
|
|
|
274
297
|
|
|
275
298
|
The order affects behavior, so arrange processors to suit your goals.
|
|
276
299
|
|
|
277
|
-
```typescript title="src/mastra/agents/test-agent.ts"
|
|
300
|
+
```typescript title="src/mastra/agents/test-agent.ts"
|
|
278
301
|
import {
|
|
279
302
|
UnicodeNormalizer,
|
|
280
303
|
ModerationProcessor,
|
|
@@ -285,20 +308,11 @@ import {
|
|
|
285
308
|
export const testAgent = new Agent({
|
|
286
309
|
id: "test-agent",
|
|
287
310
|
name: "Test Agent",
|
|
288
|
-
// ...
|
|
289
311
|
inputProcessors: [
|
|
290
|
-
new UnicodeNormalizer(
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
new
|
|
294
|
-
// ...
|
|
295
|
-
}),
|
|
296
|
-
new PIIDetector({
|
|
297
|
-
// ...
|
|
298
|
-
}),
|
|
299
|
-
new ModerationProcessor({
|
|
300
|
-
// ...
|
|
301
|
-
}),
|
|
312
|
+
new UnicodeNormalizer(),
|
|
313
|
+
new PromptInjectionDetector(),
|
|
314
|
+
new PIIDetector(),
|
|
315
|
+
new ModerationProcessor(),
|
|
302
316
|
],
|
|
303
317
|
});
|
|
304
318
|
```
|
|
@@ -309,16 +323,14 @@ Many of the built-in processors support a `strategy` parameter that controls how
|
|
|
309
323
|
|
|
310
324
|
Most strategies allow the request to continue without interruption. When `block` is used, the processor calls its internal `abort()` function, which immediately stops the request and prevents any subsequent processors from running.
|
|
311
325
|
|
|
312
|
-
```typescript {
|
|
326
|
+
```typescript {8} title="src/mastra/agents/private-agent.ts"
|
|
313
327
|
import { PIIDetector } from "@mastra/core/processors";
|
|
314
328
|
|
|
315
329
|
export const privateAgent = new Agent({
|
|
316
330
|
id: "private-agent",
|
|
317
331
|
name: "Private Agent",
|
|
318
|
-
// ...
|
|
319
332
|
inputProcessors: [
|
|
320
333
|
new PIIDetector({
|
|
321
|
-
// ...
|
|
322
334
|
strategy: "block",
|
|
323
335
|
}),
|
|
324
336
|
],
|
|
@@ -327,41 +339,78 @@ export const privateAgent = new Agent({
|
|
|
327
339
|
|
|
328
340
|
### Handling blocked requests
|
|
329
341
|
|
|
330
|
-
When a processor blocks a request, the agent will still return successfully without throwing an error. To handle blocked requests, check for `tripwire`
|
|
342
|
+
When a processor blocks a request, the agent will still return successfully without throwing an error. To handle blocked requests, check for `tripwire` in the response.
|
|
331
343
|
|
|
332
|
-
For example, if an agent uses the `PIIDetector` with `strategy: "block"` and the request includes a credit card number, it will be blocked and the response will include
|
|
344
|
+
For example, if an agent uses the `PIIDetector` with `strategy: "block"` and the request includes a credit card number, it will be blocked and the response will include tripwire information.
|
|
333
345
|
|
|
334
346
|
#### `.generate()` example
|
|
335
347
|
|
|
336
|
-
```typescript
|
|
348
|
+
```typescript
|
|
337
349
|
const result = await agent.generate(
|
|
338
350
|
"Is this credit card number valid?: 4543 1374 5089 4332",
|
|
339
351
|
);
|
|
340
352
|
|
|
341
|
-
|
|
342
|
-
console.error(result.
|
|
353
|
+
if (result.tripwire) {
|
|
354
|
+
console.error("Blocked:", result.tripwire.reason);
|
|
355
|
+
console.error("Processor:", result.tripwire.processorId);
|
|
356
|
+
// Optional: check if retry was requested
|
|
357
|
+
console.error("Retry requested:", result.tripwire.retry);
|
|
358
|
+
// Optional: access additional metadata
|
|
359
|
+
console.error("Metadata:", result.tripwire.metadata);
|
|
360
|
+
}
|
|
343
361
|
```
|
|
344
362
|
|
|
345
363
|
#### `.stream()` example
|
|
346
364
|
|
|
347
|
-
```typescript
|
|
365
|
+
```typescript
|
|
348
366
|
const stream = await agent.stream(
|
|
349
367
|
"Is this credit card number valid?: 4543 1374 5089 4332",
|
|
350
368
|
);
|
|
351
369
|
|
|
352
370
|
for await (const chunk of stream.fullStream) {
|
|
353
371
|
if (chunk.type === "tripwire") {
|
|
354
|
-
console.error(chunk.payload.
|
|
372
|
+
console.error("Blocked:", chunk.payload.reason);
|
|
373
|
+
console.error("Processor:", chunk.payload.processorId);
|
|
355
374
|
}
|
|
356
375
|
}
|
|
357
376
|
```
|
|
358
377
|
|
|
359
|
-
In this case, the `
|
|
378
|
+
In this case, the `reason` indicates that a credit card number was detected:
|
|
360
379
|
|
|
361
380
|
```text
|
|
362
381
|
PII detected. Types: credit-card
|
|
363
382
|
```
|
|
364
383
|
|
|
384
|
+
### Requesting retries
|
|
385
|
+
|
|
386
|
+
Processors can request that the LLM retry its response with feedback. This is useful for implementing quality checks:
|
|
387
|
+
|
|
388
|
+
```typescript
|
|
389
|
+
export class QualityChecker implements Processor {
|
|
390
|
+
id = "quality-checker";
|
|
391
|
+
|
|
392
|
+
async processOutputStep({ text, abort, retryCount }) {
|
|
393
|
+
const score = await evaluateQuality(text);
|
|
394
|
+
|
|
395
|
+
if (score < 0.7 && retryCount < 3) {
|
|
396
|
+
// Request retry with feedback for the LLM
|
|
397
|
+
abort("Response quality too low. Please be more specific.", {
|
|
398
|
+
retry: true,
|
|
399
|
+
metadata: { score },
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return [];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
The `abort()` function accepts an optional second parameter with:
|
|
409
|
+
- `retry: true` - Request the LLM retry the step
|
|
410
|
+
- `metadata: unknown` - Attach additional data for debugging/logging
|
|
411
|
+
|
|
412
|
+
Use `retryCount` to track retry attempts and prevent infinite loops.
|
|
413
|
+
|
|
365
414
|
## Custom processors
|
|
366
415
|
|
|
367
416
|
If the built-in processors don’t cover your needs, you can create your own by extending the `Processor` class.
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Network Approval | Agents"
|
|
3
|
+
description: Learn how to require approvals, suspend execution, and resume suspended networks while keeping humans in control of agent network workflows.
|
|
4
|
+
packages:
|
|
5
|
+
- "@mastra/core"
|
|
6
|
+
- "@mastra/libsql"
|
|
7
|
+
- "@mastra/memory"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Network Approval
|
|
11
|
+
|
|
12
|
+
Agent networks can require the same [human-in-the-loop](/docs/v1/workflows/human-in-the-loop) oversight used in individual agents and workflows. When a tool, sub-agent, or workflow within a network requires approval or suspends execution, the network pauses and emits events that allow your application to collect user input before resuming.
|
|
13
|
+
|
|
14
|
+
## Storage
|
|
15
|
+
|
|
16
|
+
Network approval uses snapshots to capture execution state. Ensure you've enabled a storage provider in your Mastra instance. If storage isn't enabled you'll see an error relating to snapshot not found.
|
|
17
|
+
|
|
18
|
+
```typescript title="src/mastra/index.ts"
|
|
19
|
+
import { Mastra } from "@mastra/core/mastra";
|
|
20
|
+
import { LibSQLStore } from "@mastra/libsql";
|
|
21
|
+
|
|
22
|
+
export const mastra = new Mastra({
|
|
23
|
+
storage: new LibSQLStore({
|
|
24
|
+
id: "mastra-storage",
|
|
25
|
+
url: ":memory:"
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Approving network tool calls
|
|
31
|
+
|
|
32
|
+
When a tool within a network has `requireApproval: true`, the network stream emits an `agent-execution-approval` chunk and pauses. To allow the tool to execute, call `approveNetworkToolCall` with the `runId`.
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
const stream = await routingAgent.network("Process this query", {
|
|
36
|
+
memory: {
|
|
37
|
+
thread: "user-123",
|
|
38
|
+
resource: "my-app"
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
let runId: string;
|
|
43
|
+
|
|
44
|
+
for await (const chunk of stream) {
|
|
45
|
+
runId = stream.runId;
|
|
46
|
+
// if the requirApproval is in a tool inside a subAgent or the subAgent has requireToolApproval set to true
|
|
47
|
+
if (chunk.type === "agent-execution-approval") {
|
|
48
|
+
console.log("Tool requires approval:", chunk.payload);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// if the requirApproval is in a tool directly in the network agent
|
|
52
|
+
if (chunk.type === "tool-execution-approval") {
|
|
53
|
+
console.log("Tool requires approval:", chunk.payload);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Approve and resume execution
|
|
58
|
+
const approvedStream = await routingAgent.approveNetworkToolCall({
|
|
59
|
+
runId,
|
|
60
|
+
memory: {
|
|
61
|
+
thread: "user-123",
|
|
62
|
+
resource: "my-app"
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
for await (const chunk of approvedStream) {
|
|
67
|
+
if (chunk.type === "network-execution-event-step-finish") {
|
|
68
|
+
console.log(chunk.payload.result);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Declining network tool calls
|
|
74
|
+
|
|
75
|
+
To decline a pending tool call and prevent execution, call `declineNetworkToolCall`. The network continues without executing the tool.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const declinedStream = await routingAgent.declineNetworkToolCall({
|
|
79
|
+
runId,
|
|
80
|
+
memory: {
|
|
81
|
+
thread: "user-123",
|
|
82
|
+
resource: "my-app"
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
for await (const chunk of declinedStream) {
|
|
87
|
+
if (chunk.type === "network-execution-event-step-finish") {
|
|
88
|
+
console.log(chunk.payload.result);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Resuming suspended networks
|
|
94
|
+
|
|
95
|
+
When a primitive in the network calls `suspend()`, the stream emits an `agent-execution-suspended`/`tool-execution-suspended`/`workflow-execution-suspended` chunk with a `suspendPayload` containing context from the primitive. Use `resumeNetwork` to provide the data requested by the primitive and continue execution.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { createTool } from "@mastra/core/tools";
|
|
99
|
+
import { z } from "zod";
|
|
100
|
+
|
|
101
|
+
const confirmationTool = createTool({
|
|
102
|
+
id: "confirmation-tool",
|
|
103
|
+
description: "Requests user confirmation before proceeding",
|
|
104
|
+
inputSchema: z.object({
|
|
105
|
+
action: z.string()
|
|
106
|
+
}),
|
|
107
|
+
outputSchema: z.object({
|
|
108
|
+
confirmed: z.boolean(),
|
|
109
|
+
action: z.string()
|
|
110
|
+
}),
|
|
111
|
+
suspendSchema: z.object({
|
|
112
|
+
message: z.string(),
|
|
113
|
+
action: z.string()
|
|
114
|
+
}),
|
|
115
|
+
resumeSchema: z.object({
|
|
116
|
+
confirmed: z.boolean()
|
|
117
|
+
}),
|
|
118
|
+
execute: async (inputData, context) => {
|
|
119
|
+
const { resumeData, suspend } = context?.agent ?? {};
|
|
120
|
+
|
|
121
|
+
if (!resumeData?.confirmed) {
|
|
122
|
+
return suspend?.({
|
|
123
|
+
message: `Please confirm: ${inputData.action}`,
|
|
124
|
+
action: inputData.action
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return { confirmed: true, action: inputData.action };
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Handle the suspension and resume with user-provided data:
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
const stream = await routingAgent.network("Delete the old records", {
|
|
137
|
+
memory: {
|
|
138
|
+
thread: "user-123",
|
|
139
|
+
resource: "my-app"
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
for await (const chunk of stream) {
|
|
144
|
+
if (chunk.type === "workflow-execution-suspended") {
|
|
145
|
+
console.log(chunk.payload.suspendPayload);
|
|
146
|
+
// { message: "Please confirm: delete old records", action: "delete old records" }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Resume with user confirmation
|
|
151
|
+
const resumedStream = await routingAgent.resumeNetwork(
|
|
152
|
+
{ confirmed: true },
|
|
153
|
+
{
|
|
154
|
+
runId: stream.runId,
|
|
155
|
+
memory: {
|
|
156
|
+
thread: "user-123",
|
|
157
|
+
resource: "my-app"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
for await (const chunk of resumedStream) {
|
|
163
|
+
if (chunk.type === "network-execution-event-step-finish") {
|
|
164
|
+
console.log(chunk.payload.result);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Automatic primitive resumption
|
|
170
|
+
|
|
171
|
+
When using primitives that call `suspend()`, you can enable automatic resumption so the network resumes suspended primitives based on the user's next message. This creates a conversational flow where users provide the required information naturally.
|
|
172
|
+
|
|
173
|
+
### Enabling auto-resume
|
|
174
|
+
|
|
175
|
+
Set `autoResumeSuspendedTools` to `true` in the agent's `defaultNetworkOptions` or when calling `network()`:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import { Agent } from "@mastra/core/agent";
|
|
179
|
+
import { Memory } from "@mastra/memory";
|
|
180
|
+
|
|
181
|
+
// Option 1: In agent configuration
|
|
182
|
+
const routingAgent = new Agent({
|
|
183
|
+
id: "routing-agent",
|
|
184
|
+
name: "Routing Agent",
|
|
185
|
+
instructions: "You coordinate tasks across multiple agents",
|
|
186
|
+
model: "openai/gpt-4o-mini",
|
|
187
|
+
tools: { confirmationTool },
|
|
188
|
+
memory: new Memory(),
|
|
189
|
+
defaultNetworkOptions: {
|
|
190
|
+
autoResumeSuspendedTools: true,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Option 2: Per-request
|
|
195
|
+
const stream = await routingAgent.network("Process this request", {
|
|
196
|
+
autoResumeSuspendedTools: true,
|
|
197
|
+
memory: {
|
|
198
|
+
thread: "user-123",
|
|
199
|
+
resource: "my-app"
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### How it works
|
|
205
|
+
|
|
206
|
+
When `autoResumeSuspendedTools` is enabled:
|
|
207
|
+
|
|
208
|
+
1. A primitive suspends execution by calling `suspend()` with a payload
|
|
209
|
+
2. The suspension is persisted to memory along with the conversation
|
|
210
|
+
3. When the user sends their next message on the same thread, the network:
|
|
211
|
+
- Detects the suspended primitive from message history
|
|
212
|
+
- Extracts `resumeData` from the user's message based on the tool's `resumeSchema`
|
|
213
|
+
- Automatically resumes the primitive with the extracted data
|
|
214
|
+
|
|
215
|
+
### Example
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
const stream = await routingAgent.network("Delete the old records", {
|
|
219
|
+
autoResumeSuspendedTools: true,
|
|
220
|
+
memory: {
|
|
221
|
+
thread: "user-123",
|
|
222
|
+
resource: "my-app"
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
for await (const chunk of stream) {
|
|
227
|
+
if (chunk.type === "workflow-execution-suspended") {
|
|
228
|
+
console.log(chunk.payload.suspendPayload);
|
|
229
|
+
// { message: "Please confirm: delete old records", action: "delete old records" }
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// User provides confirmation in their next message
|
|
234
|
+
const resumedStream = await routingAgent.network("Yes, confirmed", {
|
|
235
|
+
autoResumeSuspendedTools: true,
|
|
236
|
+
memory: {
|
|
237
|
+
thread: "user-123",
|
|
238
|
+
resource: "my-app"
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
for await (const chunk of resumedStream) {
|
|
243
|
+
if (chunk.type === "network-execution-event-step-finish") {
|
|
244
|
+
console.log(chunk.payload.result);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Conversation flow:**
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
User: "Delete the old records"
|
|
253
|
+
Agent: "Please confirm: delete old records"
|
|
254
|
+
|
|
255
|
+
User: "Yes, confirmed"
|
|
256
|
+
Agent: "Records deleted successfully"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Requirements
|
|
260
|
+
|
|
261
|
+
For automatic tool resumption to work:
|
|
262
|
+
|
|
263
|
+
- **Memory configured**: The agent needs memory to track suspended tools across messages
|
|
264
|
+
- **Same thread**: The follow-up message must use the same memory thread and resource identifiers
|
|
265
|
+
- **`resumeSchema` defined**: The tool (either directly in the network agent or in a subAgent) / workflow (step that gets suspended) must define a `resumeSchema` so the agent knows what data to extract from the user's message
|
|
266
|
+
|
|
267
|
+
### Manual vs automatic resumption
|
|
268
|
+
|
|
269
|
+
| Approach | Use case |
|
|
270
|
+
|----------|----------|
|
|
271
|
+
| Manual (`resumeNetwork()`) | Programmatic control, webhooks, button clicks, external triggers |
|
|
272
|
+
| Automatic (`autoResumeSuspendedTools`) | Conversational flows where users provide resume data in natural language |
|
|
273
|
+
|
|
274
|
+
Both approaches work with the same tool definitions. Automatic resumption triggers only when suspended tools exist in the message history and the user sends a new message on the same thread.
|
|
275
|
+
|
|
276
|
+
## Related
|
|
277
|
+
|
|
278
|
+
- [Agent Networks](./networks)
|
|
279
|
+
- [Agent Approval](./agent-approval)
|
|
280
|
+
- [Human-in-the-Loop](/docs/v1/workflows/human-in-the-loop)
|
|
281
|
+
- [Agent Memory](./agent-memory)
|