@mastra/core 1.6.0 → 1.7.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/CHANGELOG.md +236 -0
- package/dist/agent/agent.d.ts +6 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +8 -8
- package/dist/agent/index.js +1 -1
- package/dist/{chunk-VJWRJWSC.cjs → chunk-2X66GWF5.cjs} +94 -16
- package/dist/chunk-2X66GWF5.cjs.map +1 -0
- package/dist/{chunk-YM6245EM.js → chunk-6OXW5E2O.js} +3 -3
- package/dist/{chunk-YM6245EM.js.map → chunk-6OXW5E2O.js.map} +1 -1
- package/dist/{chunk-XWZAKKFT.cjs → chunk-6QBN6MZY.cjs} +14 -14
- package/dist/{chunk-XWZAKKFT.cjs.map → chunk-6QBN6MZY.cjs.map} +1 -1
- package/dist/{chunk-AYHSPIT6.cjs → chunk-7UAJ6LMR.cjs} +820 -259
- package/dist/chunk-7UAJ6LMR.cjs.map +1 -0
- package/dist/{chunk-RZNHRIM7.cjs → chunk-A72NTLFT.cjs} +5 -5
- package/dist/{chunk-RZNHRIM7.cjs.map → chunk-A72NTLFT.cjs.map} +1 -1
- package/dist/{chunk-EEU5NHHU.js → chunk-DFCRXDVK.js} +3 -3
- package/dist/{chunk-EEU5NHHU.js.map → chunk-DFCRXDVK.js.map} +1 -1
- package/dist/{chunk-5K45E5VE.js → chunk-GPJGPARM.js} +3 -2
- package/dist/chunk-GPJGPARM.js.map +1 -0
- package/dist/{chunk-LNKS4TJ6.cjs → chunk-HB6T4554.cjs} +8 -7
- package/dist/chunk-HB6T4554.cjs.map +1 -0
- package/dist/{chunk-DGS2KGDI.js → chunk-KUXNBWN7.js} +6 -5
- package/dist/chunk-KUXNBWN7.js.map +1 -0
- package/dist/{chunk-IHDE4CJV.js → chunk-QSHV7GPT.js} +89 -12
- package/dist/chunk-QSHV7GPT.js.map +1 -0
- package/dist/{chunk-3U3XFMGJ.cjs → chunk-QTAS3HND.cjs} +13 -8
- package/dist/chunk-QTAS3HND.cjs.map +1 -0
- package/dist/{chunk-RHKNKJNM.js → chunk-QWTB53GS.js} +4 -4
- package/dist/{chunk-RHKNKJNM.js.map → chunk-QWTB53GS.js.map} +1 -1
- package/dist/{chunk-4WG5K4CK.js → chunk-R4N65TLG.js} +7 -7
- package/dist/{chunk-4WG5K4CK.js.map → chunk-R4N65TLG.js.map} +1 -1
- package/dist/{chunk-5VQPSWPG.cjs → chunk-RABITNTG.cjs} +48 -48
- package/dist/{chunk-5VQPSWPG.cjs.map → chunk-RABITNTG.cjs.map} +1 -1
- package/dist/{chunk-TVPANHLE.cjs → chunk-SBOHDNIZ.cjs} +3 -2
- package/dist/chunk-SBOHDNIZ.cjs.map +1 -0
- package/dist/{chunk-MWGGSA5Q.js → chunk-T6GAM3SQ.js} +10 -5
- package/dist/chunk-T6GAM3SQ.js.map +1 -0
- package/dist/{chunk-TL2TTA4X.cjs → chunk-YQG7NBPR.cjs} +9 -9
- package/dist/{chunk-TL2TTA4X.cjs.map → chunk-YQG7NBPR.cjs.map} +1 -1
- package/dist/{chunk-XB3DA67Q.js → chunk-ZSBM2SVU.js} +818 -259
- package/dist/chunk-ZSBM2SVU.js.map +1 -0
- package/dist/datasets/experiment/scorer.d.ts.map +1 -1
- package/dist/datasets/index.cjs +17 -17
- package/dist/datasets/index.js +2 -2
- package/dist/evals/index.cjs +20 -20
- package/dist/evals/index.js +3 -3
- package/dist/evals/scoreTraces/index.cjs +7 -6
- package/dist/evals/scoreTraces/index.cjs.map +1 -1
- package/dist/evals/scoreTraces/index.js +4 -3
- package/dist/evals/scoreTraces/index.js.map +1 -1
- package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
- package/dist/harness/harness.d.ts +21 -1
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/index.cjs +422 -5
- package/dist/harness/index.cjs.map +1 -1
- package/dist/harness/index.d.ts +2 -1
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +418 -3
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/types.d.ts +151 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/loop/index.cjs +12 -12
- package/dist/loop/index.js +1 -1
- package/dist/loop/test-utils/tools.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
- package/dist/mastra/hooks.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +14 -14
- package/dist/memory/index.js +1 -1
- package/dist/processor-provider/index.cjs +10 -10
- package/dist/processor-provider/index.js +1 -1
- package/dist/processors/index.cjs +45 -41
- package/dist/processors/index.js +1 -1
- package/dist/processors/processors/index.d.ts +1 -0
- package/dist/processors/processors/index.d.ts.map +1 -1
- package/dist/processors/processors/workspace-instructions.d.ts +50 -0
- package/dist/processors/processors/workspace-instructions.d.ts.map +1 -0
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/storage/constants.cjs +56 -56
- package/dist/storage/constants.d.ts.map +1 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/index.cjs +160 -160
- package/dist/storage/index.js +2 -2
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +8 -8
- package/dist/stream/index.js +1 -1
- package/dist/tool-loop-agent/index.cjs +4 -4
- package/dist/tool-loop-agent/index.js +1 -1
- package/dist/vector/index.cjs +7 -7
- package/dist/vector/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +25 -25
- package/dist/workflows/index.js +1 -1
- package/dist/workspace/constants/index.d.ts +2 -0
- package/dist/workspace/constants/index.d.ts.map +1 -1
- package/dist/workspace/errors.d.ts +1 -1
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/filesystem/composite-filesystem.d.ts +4 -1
- package/dist/workspace/filesystem/composite-filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/file-write-lock.d.ts +35 -0
- package/dist/workspace/filesystem/file-write-lock.d.ts.map +1 -0
- package/dist/workspace/filesystem/filesystem.d.ts +5 -1
- package/dist/workspace/filesystem/filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/index.d.ts +1 -0
- package/dist/workspace/filesystem/index.d.ts.map +1 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts +17 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
- package/dist/workspace/index.cjs +72 -64
- package/dist/workspace/index.d.ts +3 -2
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/lifecycle.d.ts +1 -9
- package/dist/workspace/lifecycle.d.ts.map +1 -1
- package/dist/workspace/sandbox/index.d.ts +2 -0
- package/dist/workspace/sandbox/index.d.ts.map +1 -1
- package/dist/workspace/sandbox/local-process-manager.d.ts +18 -0
- package/dist/workspace/sandbox/local-process-manager.d.ts.map +1 -0
- package/dist/workspace/sandbox/local-sandbox.d.ts +49 -35
- package/dist/workspace/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/mastra-sandbox.d.ts +45 -11
- package/dist/workspace/sandbox/mastra-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/bubblewrap.d.ts +2 -3
- package/dist/workspace/sandbox/native-sandbox/bubblewrap.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/seatbelt.d.ts +2 -3
- package/dist/workspace/sandbox/native-sandbox/seatbelt.d.ts.map +1 -1
- package/dist/workspace/sandbox/native-sandbox/wrapper.d.ts +4 -5
- package/dist/workspace/sandbox/native-sandbox/wrapper.d.ts.map +1 -1
- package/dist/workspace/sandbox/process-manager/index.d.ts +4 -0
- package/dist/workspace/sandbox/process-manager/index.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/process-handle.d.ts +107 -0
- package/dist/workspace/sandbox/process-manager/process-handle.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/process-manager.d.ts +59 -0
- package/dist/workspace/sandbox/process-manager/process-manager.d.ts.map +1 -0
- package/dist/workspace/sandbox/process-manager/types.d.ts +24 -0
- package/dist/workspace/sandbox/process-manager/types.d.ts.map +1 -0
- package/dist/workspace/sandbox/sandbox.d.ts +38 -2
- package/dist/workspace/sandbox/sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/types.d.ts +9 -2
- package/dist/workspace/sandbox/types.d.ts.map +1 -1
- package/dist/workspace/sandbox/utils.d.ts +7 -0
- package/dist/workspace/sandbox/utils.d.ts.map +1 -0
- package/dist/workspace/tools/execute-command.d.ts +53 -2
- package/dist/workspace/tools/execute-command.d.ts.map +1 -1
- package/dist/workspace/tools/get-process-output.d.ts +6 -0
- package/dist/workspace/tools/get-process-output.d.ts.map +1 -0
- package/dist/workspace/tools/index.d.ts +4 -1
- package/dist/workspace/tools/index.d.ts.map +1 -1
- package/dist/workspace/tools/kill-process.d.ts +4 -0
- package/dist/workspace/tools/kill-process.d.ts.map +1 -0
- package/dist/workspace/tools/output-helpers.d.ts +21 -0
- package/dist/workspace/tools/output-helpers.d.ts.map +1 -0
- package/dist/workspace/tools/tools.d.ts.map +1 -1
- package/dist/workspace/types.d.ts +31 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/utils.d.ts +11 -0
- package/dist/workspace/utils.d.ts.map +1 -0
- package/dist/workspace/workspace.d.ts +36 -0
- package/dist/workspace/workspace.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/chunk-3U3XFMGJ.cjs.map +0 -1
- package/dist/chunk-5K45E5VE.js.map +0 -1
- package/dist/chunk-AYHSPIT6.cjs.map +0 -1
- package/dist/chunk-DGS2KGDI.js.map +0 -1
- package/dist/chunk-IHDE4CJV.js.map +0 -1
- package/dist/chunk-LNKS4TJ6.cjs.map +0 -1
- package/dist/chunk-MWGGSA5Q.js.map +0 -1
- package/dist/chunk-TVPANHLE.cjs.map +0 -1
- package/dist/chunk-VJWRJWSC.cjs.map +0 -1
- package/dist/chunk-XB3DA67Q.js.map +0 -1
- package/dist/docs/SKILL.md +0 -301
- package/dist/docs/assets/SOURCE_MAP.json +0 -1413
- package/dist/docs/references/docs-agents-adding-voice.md +0 -353
- package/dist/docs/references/docs-agents-agent-approval.md +0 -377
- package/dist/docs/references/docs-agents-agent-memory.md +0 -212
- package/dist/docs/references/docs-agents-guardrails.md +0 -382
- package/dist/docs/references/docs-agents-network-approval.md +0 -275
- package/dist/docs/references/docs-agents-networks.md +0 -290
- package/dist/docs/references/docs-agents-overview.md +0 -309
- package/dist/docs/references/docs-agents-processors.md +0 -632
- package/dist/docs/references/docs-agents-structured-output.md +0 -271
- package/dist/docs/references/docs-agents-using-tools.md +0 -214
- package/dist/docs/references/docs-evals-custom-scorers.md +0 -519
- package/dist/docs/references/docs-evals-overview.md +0 -146
- package/dist/docs/references/docs-evals-running-in-ci.md +0 -106
- package/dist/docs/references/docs-mcp-overview.md +0 -370
- package/dist/docs/references/docs-mcp-publishing-mcp-server.md +0 -95
- package/dist/docs/references/docs-memory-memory-processors.md +0 -316
- package/dist/docs/references/docs-memory-observational-memory.md +0 -246
- package/dist/docs/references/docs-memory-overview.md +0 -45
- package/dist/docs/references/docs-memory-semantic-recall.md +0 -272
- package/dist/docs/references/docs-memory-storage.md +0 -261
- package/dist/docs/references/docs-memory-working-memory.md +0 -400
- package/dist/docs/references/docs-observability-datasets-overview.md +0 -188
- package/dist/docs/references/docs-observability-datasets-running-experiments.md +0 -266
- package/dist/docs/references/docs-observability-logging.md +0 -99
- package/dist/docs/references/docs-observability-overview.md +0 -70
- package/dist/docs/references/docs-observability-tracing-bridges-otel.md +0 -209
- package/dist/docs/references/docs-observability-tracing-exporters-arize.md +0 -274
- package/dist/docs/references/docs-observability-tracing-exporters-braintrust.md +0 -111
- package/dist/docs/references/docs-observability-tracing-exporters-cloud.md +0 -129
- package/dist/docs/references/docs-observability-tracing-exporters-datadog.md +0 -187
- package/dist/docs/references/docs-observability-tracing-exporters-default.md +0 -211
- package/dist/docs/references/docs-observability-tracing-exporters-laminar.md +0 -100
- package/dist/docs/references/docs-observability-tracing-exporters-langfuse.md +0 -217
- package/dist/docs/references/docs-observability-tracing-exporters-langsmith.md +0 -202
- package/dist/docs/references/docs-observability-tracing-exporters-otel.md +0 -479
- package/dist/docs/references/docs-observability-tracing-exporters-posthog.md +0 -148
- package/dist/docs/references/docs-observability-tracing-overview.md +0 -1114
- package/dist/docs/references/docs-rag-chunking-and-embedding.md +0 -183
- package/dist/docs/references/docs-rag-graph-rag.md +0 -215
- package/dist/docs/references/docs-rag-overview.md +0 -72
- package/dist/docs/references/docs-rag-retrieval.md +0 -521
- package/dist/docs/references/docs-rag-vector-databases.md +0 -648
- package/dist/docs/references/docs-server-auth-auth0.md +0 -222
- package/dist/docs/references/docs-server-auth-clerk.md +0 -132
- package/dist/docs/references/docs-server-auth-composite-auth.md +0 -234
- package/dist/docs/references/docs-server-auth-custom-auth-provider.md +0 -513
- package/dist/docs/references/docs-server-auth-firebase.md +0 -272
- package/dist/docs/references/docs-server-auth-jwt.md +0 -110
- package/dist/docs/references/docs-server-auth-simple-auth.md +0 -178
- package/dist/docs/references/docs-server-auth-supabase.md +0 -117
- package/dist/docs/references/docs-server-auth-workos.md +0 -190
- package/dist/docs/references/docs-server-custom-adapters.md +0 -374
- package/dist/docs/references/docs-server-custom-api-routes.md +0 -267
- package/dist/docs/references/docs-server-mastra-client.md +0 -243
- package/dist/docs/references/docs-server-mastra-server.md +0 -71
- package/dist/docs/references/docs-server-middleware.md +0 -228
- package/dist/docs/references/docs-server-request-context.md +0 -478
- package/dist/docs/references/docs-streaming-events.md +0 -247
- package/dist/docs/references/docs-streaming-tool-streaming.md +0 -178
- package/dist/docs/references/docs-streaming-workflow-streaming.md +0 -109
- package/dist/docs/references/docs-voice-overview.md +0 -979
- package/dist/docs/references/docs-voice-speech-to-speech.md +0 -103
- package/dist/docs/references/docs-voice-speech-to-text.md +0 -80
- package/dist/docs/references/docs-voice-text-to-speech.md +0 -84
- package/dist/docs/references/docs-workflows-agents-and-tools.md +0 -170
- package/dist/docs/references/docs-workflows-control-flow.md +0 -823
- package/dist/docs/references/docs-workflows-error-handling.md +0 -360
- package/dist/docs/references/docs-workflows-human-in-the-loop.md +0 -213
- package/dist/docs/references/docs-workflows-overview.md +0 -372
- package/dist/docs/references/docs-workflows-snapshots.md +0 -238
- package/dist/docs/references/docs-workflows-suspend-and-resume.md +0 -205
- package/dist/docs/references/docs-workflows-time-travel.md +0 -309
- package/dist/docs/references/docs-workflows-workflow-state.md +0 -181
- package/dist/docs/references/docs-workspace-filesystem.md +0 -162
- package/dist/docs/references/docs-workspace-overview.md +0 -239
- package/dist/docs/references/docs-workspace-sandbox.md +0 -63
- package/dist/docs/references/docs-workspace-search.md +0 -219
- package/dist/docs/references/docs-workspace-skills.md +0 -126
- package/dist/docs/references/guides-agent-frameworks-ai-sdk.md +0 -140
- package/dist/docs/references/reference-agents-agent.md +0 -142
- package/dist/docs/references/reference-agents-generate.md +0 -174
- package/dist/docs/references/reference-agents-generateLegacy.md +0 -176
- package/dist/docs/references/reference-agents-getDefaultGenerateOptions.md +0 -36
- package/dist/docs/references/reference-agents-getDefaultOptions.md +0 -34
- package/dist/docs/references/reference-agents-getDefaultStreamOptions.md +0 -36
- package/dist/docs/references/reference-agents-getDescription.md +0 -21
- package/dist/docs/references/reference-agents-getInstructions.md +0 -34
- package/dist/docs/references/reference-agents-getLLM.md +0 -37
- package/dist/docs/references/reference-agents-getMemory.md +0 -34
- package/dist/docs/references/reference-agents-getModel.md +0 -34
- package/dist/docs/references/reference-agents-getTools.md +0 -29
- package/dist/docs/references/reference-agents-getVoice.md +0 -34
- package/dist/docs/references/reference-agents-listAgents.md +0 -35
- package/dist/docs/references/reference-agents-listScorers.md +0 -34
- package/dist/docs/references/reference-agents-listTools.md +0 -34
- package/dist/docs/references/reference-agents-listWorkflows.md +0 -34
- package/dist/docs/references/reference-agents-network.md +0 -134
- package/dist/docs/references/reference-ai-sdk-chat-route.md +0 -82
- package/dist/docs/references/reference-ai-sdk-network-route.md +0 -74
- package/dist/docs/references/reference-ai-sdk-to-ai-sdk-stream.md +0 -232
- package/dist/docs/references/reference-ai-sdk-with-mastra.md +0 -59
- package/dist/docs/references/reference-ai-sdk-workflow-route.md +0 -79
- package/dist/docs/references/reference-auth-auth0.md +0 -73
- package/dist/docs/references/reference-auth-clerk.md +0 -36
- package/dist/docs/references/reference-auth-firebase.md +0 -80
- package/dist/docs/references/reference-auth-jwt.md +0 -26
- package/dist/docs/references/reference-auth-supabase.md +0 -33
- package/dist/docs/references/reference-auth-workos.md +0 -84
- package/dist/docs/references/reference-client-js-agents.md +0 -438
- package/dist/docs/references/reference-configuration.md +0 -749
- package/dist/docs/references/reference-core-addGateway.md +0 -42
- package/dist/docs/references/reference-core-getAgent.md +0 -21
- package/dist/docs/references/reference-core-getAgentById.md +0 -21
- package/dist/docs/references/reference-core-getDeployer.md +0 -22
- package/dist/docs/references/reference-core-getGateway.md +0 -38
- package/dist/docs/references/reference-core-getGatewayById.md +0 -41
- package/dist/docs/references/reference-core-getLogger.md +0 -22
- package/dist/docs/references/reference-core-getMCPServer.md +0 -45
- package/dist/docs/references/reference-core-getMCPServerById.md +0 -53
- package/dist/docs/references/reference-core-getMemory.md +0 -50
- package/dist/docs/references/reference-core-getScorer.md +0 -54
- package/dist/docs/references/reference-core-getScorerById.md +0 -54
- package/dist/docs/references/reference-core-getServer.md +0 -22
- package/dist/docs/references/reference-core-getStorage.md +0 -22
- package/dist/docs/references/reference-core-getStoredAgentById.md +0 -89
- package/dist/docs/references/reference-core-getTelemetry.md +0 -22
- package/dist/docs/references/reference-core-getVector.md +0 -22
- package/dist/docs/references/reference-core-getWorkflow.md +0 -40
- package/dist/docs/references/reference-core-listAgents.md +0 -21
- package/dist/docs/references/reference-core-listGateways.md +0 -40
- package/dist/docs/references/reference-core-listLogs.md +0 -38
- package/dist/docs/references/reference-core-listLogsByRunId.md +0 -36
- package/dist/docs/references/reference-core-listMCPServers.md +0 -51
- package/dist/docs/references/reference-core-listMemory.md +0 -56
- package/dist/docs/references/reference-core-listScorers.md +0 -29
- package/dist/docs/references/reference-core-listStoredAgents.md +0 -93
- package/dist/docs/references/reference-core-listVectors.md +0 -22
- package/dist/docs/references/reference-core-listWorkflows.md +0 -21
- package/dist/docs/references/reference-core-mastra-class.md +0 -66
- package/dist/docs/references/reference-core-mastra-model-gateway.md +0 -153
- package/dist/docs/references/reference-core-setLogger.md +0 -26
- package/dist/docs/references/reference-core-setStorage.md +0 -27
- package/dist/docs/references/reference-datasets-addItem.md +0 -35
- package/dist/docs/references/reference-datasets-addItems.md +0 -33
- package/dist/docs/references/reference-datasets-compareExperiments.md +0 -48
- package/dist/docs/references/reference-datasets-create.md +0 -49
- package/dist/docs/references/reference-datasets-dataset.md +0 -78
- package/dist/docs/references/reference-datasets-datasets-manager.md +0 -84
- package/dist/docs/references/reference-datasets-delete.md +0 -23
- package/dist/docs/references/reference-datasets-deleteExperiment.md +0 -25
- package/dist/docs/references/reference-datasets-deleteItem.md +0 -25
- package/dist/docs/references/reference-datasets-deleteItems.md +0 -27
- package/dist/docs/references/reference-datasets-get.md +0 -29
- package/dist/docs/references/reference-datasets-getDetails.md +0 -45
- package/dist/docs/references/reference-datasets-getExperiment.md +0 -28
- package/dist/docs/references/reference-datasets-getItem.md +0 -31
- package/dist/docs/references/reference-datasets-getItemHistory.md +0 -29
- package/dist/docs/references/reference-datasets-list.md +0 -29
- package/dist/docs/references/reference-datasets-listExperimentResults.md +0 -37
- package/dist/docs/references/reference-datasets-listExperiments.md +0 -31
- package/dist/docs/references/reference-datasets-listItems.md +0 -44
- package/dist/docs/references/reference-datasets-listVersions.md +0 -31
- package/dist/docs/references/reference-datasets-startExperiment.md +0 -60
- package/dist/docs/references/reference-datasets-startExperimentAsync.md +0 -41
- package/dist/docs/references/reference-datasets-update.md +0 -46
- package/dist/docs/references/reference-datasets-updateItem.md +0 -36
- package/dist/docs/references/reference-evals-answer-relevancy.md +0 -105
- package/dist/docs/references/reference-evals-answer-similarity.md +0 -99
- package/dist/docs/references/reference-evals-bias.md +0 -120
- package/dist/docs/references/reference-evals-completeness.md +0 -137
- package/dist/docs/references/reference-evals-content-similarity.md +0 -101
- package/dist/docs/references/reference-evals-context-precision.md +0 -196
- package/dist/docs/references/reference-evals-create-scorer.md +0 -270
- package/dist/docs/references/reference-evals-faithfulness.md +0 -114
- package/dist/docs/references/reference-evals-hallucination.md +0 -220
- package/dist/docs/references/reference-evals-keyword-coverage.md +0 -128
- package/dist/docs/references/reference-evals-mastra-scorer.md +0 -123
- package/dist/docs/references/reference-evals-run-evals.md +0 -138
- package/dist/docs/references/reference-evals-scorer-utils.md +0 -330
- package/dist/docs/references/reference-evals-textual-difference.md +0 -113
- package/dist/docs/references/reference-evals-tone-consistency.md +0 -119
- package/dist/docs/references/reference-evals-toxicity.md +0 -123
- package/dist/docs/references/reference-harness-harness-class.md +0 -645
- package/dist/docs/references/reference-logging-pino-logger.md +0 -117
- package/dist/docs/references/reference-memory-deleteMessages.md +0 -40
- package/dist/docs/references/reference-memory-memory-class.md +0 -147
- package/dist/docs/references/reference-memory-observational-memory.md +0 -565
- package/dist/docs/references/reference-observability-tracing-bridges-otel.md +0 -131
- package/dist/docs/references/reference-observability-tracing-configuration.md +0 -178
- package/dist/docs/references/reference-observability-tracing-exporters-console-exporter.md +0 -138
- package/dist/docs/references/reference-observability-tracing-exporters-datadog.md +0 -116
- package/dist/docs/references/reference-observability-tracing-instances.md +0 -109
- package/dist/docs/references/reference-observability-tracing-interfaces.md +0 -749
- package/dist/docs/references/reference-observability-tracing-processors-sensitive-data-filter.md +0 -144
- package/dist/docs/references/reference-observability-tracing-spans.md +0 -224
- package/dist/docs/references/reference-processors-batch-parts-processor.md +0 -61
- package/dist/docs/references/reference-processors-language-detector.md +0 -81
- package/dist/docs/references/reference-processors-message-history-processor.md +0 -85
- package/dist/docs/references/reference-processors-moderation-processor.md +0 -104
- package/dist/docs/references/reference-processors-pii-detector.md +0 -107
- package/dist/docs/references/reference-processors-processor-interface.md +0 -525
- package/dist/docs/references/reference-processors-prompt-injection-detector.md +0 -71
- package/dist/docs/references/reference-processors-semantic-recall-processor.md +0 -123
- package/dist/docs/references/reference-processors-system-prompt-scrubber.md +0 -80
- package/dist/docs/references/reference-processors-token-limiter-processor.md +0 -113
- package/dist/docs/references/reference-processors-tool-call-filter.md +0 -85
- package/dist/docs/references/reference-processors-tool-search-processor.md +0 -113
- package/dist/docs/references/reference-processors-unicode-normalizer.md +0 -62
- package/dist/docs/references/reference-processors-working-memory-processor.md +0 -154
- package/dist/docs/references/reference-rag-database-config.md +0 -264
- package/dist/docs/references/reference-rag-embeddings.md +0 -92
- package/dist/docs/references/reference-server-mastra-server.md +0 -298
- package/dist/docs/references/reference-server-register-api-route.md +0 -249
- package/dist/docs/references/reference-storage-cloudflare-d1.md +0 -218
- package/dist/docs/references/reference-storage-composite.md +0 -235
- package/dist/docs/references/reference-storage-lance.md +0 -131
- package/dist/docs/references/reference-storage-libsql.md +0 -135
- package/dist/docs/references/reference-storage-mongodb.md +0 -262
- package/dist/docs/references/reference-storage-mssql.md +0 -155
- package/dist/docs/references/reference-storage-overview.md +0 -121
- package/dist/docs/references/reference-storage-postgresql.md +0 -529
- package/dist/docs/references/reference-storage-upstash.md +0 -160
- package/dist/docs/references/reference-streaming-ChunkType.md +0 -292
- package/dist/docs/references/reference-streaming-agents-MastraModelOutput.md +0 -182
- package/dist/docs/references/reference-streaming-agents-streamLegacy.md +0 -142
- package/dist/docs/references/reference-streaming-workflows-observeStream.md +0 -42
- package/dist/docs/references/reference-streaming-workflows-resumeStream.md +0 -61
- package/dist/docs/references/reference-streaming-workflows-stream.md +0 -88
- package/dist/docs/references/reference-streaming-workflows-timeTravelStream.md +0 -142
- package/dist/docs/references/reference-templates-overview.md +0 -194
- package/dist/docs/references/reference-tools-create-tool.md +0 -237
- package/dist/docs/references/reference-tools-graph-rag-tool.md +0 -185
- package/dist/docs/references/reference-tools-mcp-client.md +0 -962
- package/dist/docs/references/reference-tools-mcp-server.md +0 -1275
- package/dist/docs/references/reference-tools-vector-query-tool.md +0 -459
- package/dist/docs/references/reference-vectors-libsql.md +0 -305
- package/dist/docs/references/reference-vectors-mongodb.md +0 -295
- package/dist/docs/references/reference-vectors-pg.md +0 -408
- package/dist/docs/references/reference-vectors-upstash.md +0 -294
- package/dist/docs/references/reference-voice-composite-voice.md +0 -121
- package/dist/docs/references/reference-voice-mastra-voice.md +0 -313
- package/dist/docs/references/reference-voice-voice.addInstructions.md +0 -56
- package/dist/docs/references/reference-voice-voice.addTools.md +0 -67
- package/dist/docs/references/reference-voice-voice.connect.md +0 -94
- package/dist/docs/references/reference-voice-voice.events.md +0 -37
- package/dist/docs/references/reference-voice-voice.listen.md +0 -164
- package/dist/docs/references/reference-voice-voice.on.md +0 -111
- package/dist/docs/references/reference-voice-voice.speak.md +0 -157
- package/dist/docs/references/reference-workflows-run-methods-cancel.md +0 -86
- package/dist/docs/references/reference-workflows-run-methods-restart.md +0 -33
- package/dist/docs/references/reference-workflows-run-methods-resume.md +0 -59
- package/dist/docs/references/reference-workflows-run-methods-start.md +0 -58
- package/dist/docs/references/reference-workflows-run-methods-startAsync.md +0 -67
- package/dist/docs/references/reference-workflows-run-methods-timeTravel.md +0 -142
- package/dist/docs/references/reference-workflows-run.md +0 -59
- package/dist/docs/references/reference-workflows-step.md +0 -119
- package/dist/docs/references/reference-workflows-workflow-methods-branch.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-commit.md +0 -17
- package/dist/docs/references/reference-workflows-workflow-methods-create-run.md +0 -63
- package/dist/docs/references/reference-workflows-workflow-methods-dountil.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-dowhile.md +0 -25
- package/dist/docs/references/reference-workflows-workflow-methods-foreach.md +0 -118
- package/dist/docs/references/reference-workflows-workflow-methods-map.md +0 -93
- package/dist/docs/references/reference-workflows-workflow-methods-parallel.md +0 -21
- package/dist/docs/references/reference-workflows-workflow-methods-sleep.md +0 -35
- package/dist/docs/references/reference-workflows-workflow-methods-sleepUntil.md +0 -35
- package/dist/docs/references/reference-workflows-workflow-methods-then.md +0 -21
- package/dist/docs/references/reference-workflows-workflow.md +0 -157
- package/dist/docs/references/reference-workspace-filesystem.md +0 -202
- package/dist/docs/references/reference-workspace-local-filesystem.md +0 -327
- package/dist/docs/references/reference-workspace-local-sandbox.md +0 -285
- package/dist/docs/references/reference-workspace-sandbox.md +0 -81
- package/dist/docs/references/reference-workspace-workspace-class.md +0 -226
- package/dist/docs/references/reference.md +0 -276
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
# Middleware
|
|
2
|
-
|
|
3
|
-
Mastra servers can execute custom middleware functions before or after an API route handler is invoked. This is useful for things like authentication, logging, injecting request-specific context or adding CORS headers.
|
|
4
|
-
|
|
5
|
-
A middleware receives the [Hono](https://hono.dev) `Context` (`c`) and a `next` function. If it returns a `Response` the request is short-circuited. Calling `next()` continues processing the next middleware or route handler.
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
import { Mastra } from "@mastra/core";
|
|
9
|
-
|
|
10
|
-
export const mastra = new Mastra({
|
|
11
|
-
server: {
|
|
12
|
-
middleware: [
|
|
13
|
-
{
|
|
14
|
-
handler: async (c, next) => {
|
|
15
|
-
// Example: Add authentication check
|
|
16
|
-
const authHeader = c.req.header("Authorization");
|
|
17
|
-
if (!authHeader) {
|
|
18
|
-
return new Response("Unauthorized", { status: 401 });
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
await next();
|
|
22
|
-
},
|
|
23
|
-
path: "/api/*",
|
|
24
|
-
},
|
|
25
|
-
// Add a global request logger
|
|
26
|
-
async (c, next) => {
|
|
27
|
-
console.log(`${c.req.method} ${c.req.url}`);
|
|
28
|
-
await next();
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
To attach middleware to a single route pass the `middleware` option to `registerApiRoute`:
|
|
36
|
-
|
|
37
|
-
```typescript
|
|
38
|
-
registerApiRoute("/my-custom-route", {
|
|
39
|
-
method: "GET",
|
|
40
|
-
middleware: [
|
|
41
|
-
async (c, next) => {
|
|
42
|
-
console.log(`${c.req.method} ${c.req.url}`);
|
|
43
|
-
await next();
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
handler: async (c) => {
|
|
47
|
-
const mastra = c.get("mastra");
|
|
48
|
-
return c.json({ message: "Hello, world!" });
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Common examples
|
|
54
|
-
|
|
55
|
-
### Using `RequestContext`
|
|
56
|
-
|
|
57
|
-
You can populate `RequestContext` dynamically in server middleware by extracting information from the request. In this example, the `temperature-unit` is set based on the Cloudflare `CF-IPCountry` header to ensure responses match the user's locale.
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
import { Mastra } from "@mastra/core";
|
|
61
|
-
import { RequestContext } from "@mastra/core/request-context";
|
|
62
|
-
import { testWeatherAgent } from "./agents/test-weather-agent";
|
|
63
|
-
|
|
64
|
-
export const mastra = new Mastra({
|
|
65
|
-
agents: { testWeatherAgent },
|
|
66
|
-
server: {
|
|
67
|
-
middleware: [
|
|
68
|
-
async (context, next) => {
|
|
69
|
-
const country = context.req.header("CF-IPCountry");
|
|
70
|
-
const requestContext = context.get("requestContext");
|
|
71
|
-
|
|
72
|
-
requestContext.set(
|
|
73
|
-
"temperature-unit",
|
|
74
|
-
country === "US" ? "fahrenheit" : "celsius",
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
await next();
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Authentication
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
{
|
|
88
|
-
handler: async (c, next) => {
|
|
89
|
-
const authHeader = c.req.header('Authorization');
|
|
90
|
-
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
91
|
-
return new Response('Unauthorized', { status: 401 });
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Validate token here
|
|
95
|
-
await next();
|
|
96
|
-
},
|
|
97
|
-
path: '/api/*',
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Authorization (User Isolation)
|
|
102
|
-
|
|
103
|
-
Authentication verifies who the user is. Authorization controls what they can access. Without authorization middleware, an authenticated user could access other users' threads by guessing IDs or manipulating the `resourceId` parameter.
|
|
104
|
-
|
|
105
|
-
Mastra provides reserved context keys that, when set by middleware, take precedence over client-provided values. The server automatically enforces these keys across memory and agent endpoints:
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
import { Mastra } from "@mastra/core";
|
|
109
|
-
import { MASTRA_RESOURCE_ID_KEY } from "@mastra/core/request-context";
|
|
110
|
-
|
|
111
|
-
export const mastra = new Mastra({
|
|
112
|
-
server: {
|
|
113
|
-
auth: {
|
|
114
|
-
authenticateToken: async (token) => {
|
|
115
|
-
// Your auth logic returns the user
|
|
116
|
-
return verifyToken(token); // { id: 'user-123', ... }
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
middleware: [
|
|
120
|
-
{
|
|
121
|
-
path: '/api/*',
|
|
122
|
-
handler: async (c, next) => {
|
|
123
|
-
const requestContext = c.get('requestContext');
|
|
124
|
-
const user = requestContext.get('user');
|
|
125
|
-
|
|
126
|
-
if (!user) {
|
|
127
|
-
return c.json({ error: 'Unauthorized' }, 401);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Force all API operations to use this user's ID
|
|
131
|
-
// This takes precedence over any client-provided resourceId
|
|
132
|
-
requestContext.set(MASTRA_RESOURCE_ID_KEY, user.id);
|
|
133
|
-
|
|
134
|
-
return next();
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
],
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
With this middleware, the server automatically:
|
|
143
|
-
|
|
144
|
-
- **Filters thread listing** to only return threads owned by the user
|
|
145
|
-
- **Validates thread access** and returns 403 if accessing another user's thread
|
|
146
|
-
- **Forces thread creation** to use the authenticated user's ID
|
|
147
|
-
- **Validates message operations** including deletion, ensuring messages belong to owned threads
|
|
148
|
-
|
|
149
|
-
Even if a client passes `?resourceId=other-user-id`, the middleware-set value takes precedence. Attempts to access threads or messages owned by other users will return a 403 error.
|
|
150
|
-
|
|
151
|
-
#### Using `MASTRA_THREAD_ID_KEY`
|
|
152
|
-
|
|
153
|
-
You can also set `MASTRA_THREAD_ID_KEY` to override the client-provided thread ID:
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from "@mastra/core/request-context";
|
|
157
|
-
|
|
158
|
-
// Force operations to use a specific thread
|
|
159
|
-
requestContext.set(MASTRA_THREAD_ID_KEY, validatedThreadId);
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
This is useful when you want to restrict operations to a specific thread that you've validated through other means.
|
|
163
|
-
|
|
164
|
-
### CORS support
|
|
165
|
-
|
|
166
|
-
```typescript
|
|
167
|
-
{
|
|
168
|
-
handler: async (c, next) => {
|
|
169
|
-
c.header('Access-Control-Allow-Origin', '*');
|
|
170
|
-
c.header(
|
|
171
|
-
'Access-Control-Allow-Methods',
|
|
172
|
-
'GET, POST, PUT, DELETE, OPTIONS',
|
|
173
|
-
);
|
|
174
|
-
c.header(
|
|
175
|
-
'Access-Control-Allow-Headers',
|
|
176
|
-
'Content-Type, Authorization',
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
if (c.req.method === 'OPTIONS') {
|
|
180
|
-
return new Response(null, { status: 204 });
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
await next();
|
|
184
|
-
},
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Request logging
|
|
189
|
-
|
|
190
|
-
```typescript
|
|
191
|
-
{
|
|
192
|
-
handler: async (c, next) => {
|
|
193
|
-
const start = Date.now();
|
|
194
|
-
await next();
|
|
195
|
-
const duration = Date.now() - start;
|
|
196
|
-
console.log(`${c.req.method} ${c.req.url} - ${duration}ms`);
|
|
197
|
-
},
|
|
198
|
-
}
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Special Mastra headers
|
|
202
|
-
|
|
203
|
-
When integrating with Mastra Cloud or custom clients the following headers can be inspected by middleware to tailor behavior:
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
{
|
|
207
|
-
handler: async (c, next) => {
|
|
208
|
-
const isFromMastraCloud = c.req.header('x-mastra-cloud') === 'true';
|
|
209
|
-
const clientType = c.req.header('x-mastra-client-type');
|
|
210
|
-
const isStudio =
|
|
211
|
-
c.req.header('x-studio') === 'true';
|
|
212
|
-
|
|
213
|
-
if (isFromMastraCloud) {
|
|
214
|
-
// Special handling
|
|
215
|
-
}
|
|
216
|
-
await next();
|
|
217
|
-
},
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
- `x-mastra-cloud`: request originates from Mastra Cloud
|
|
222
|
-
- `x-mastra-client-type`: identifies the client SDK, e.g. `js` or `python`
|
|
223
|
-
- `x-studio`: request triggered from Studio
|
|
224
|
-
|
|
225
|
-
# Related
|
|
226
|
-
|
|
227
|
-
- [Request Context](https://mastra.ai/docs/server/request-context)
|
|
228
|
-
- [Reserved Keys](https://mastra.ai/docs/server/request-context)
|
|
@@ -1,478 +0,0 @@
|
|
|
1
|
-
# Request Context
|
|
2
|
-
|
|
3
|
-
Agents, tools, and workflows can all accept `RequestContext` as a parameter, making request-specific values available to the underlying primitives.
|
|
4
|
-
|
|
5
|
-
## When to use `RequestContext`
|
|
6
|
-
|
|
7
|
-
Use `RequestContext` when a primitive's behavior should change based on runtime conditions. For example, you might switch models or storage backends based on user attributes, or adjust instructions and tool selection based on language.
|
|
8
|
-
|
|
9
|
-
> **Note:** **Note:** `RequestContext` is primarily used for passing data into specific requests. It's distinct from agent memory, which handles conversation history and state persistence across multiple calls.
|
|
10
|
-
|
|
11
|
-
## Setting values
|
|
12
|
-
|
|
13
|
-
Pass `requestContext` into an agent, network, workflow, or tool call to make values available to all underlying primitives during execution. Use `.set()` to define values before making the call.
|
|
14
|
-
|
|
15
|
-
The `.set()` method takes two arguments:
|
|
16
|
-
|
|
17
|
-
1. **key**: The name used to identify the value.
|
|
18
|
-
2. **value**: The data to associate with that key.
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
import { RequestContext } from "@mastra/core/request-context";
|
|
22
|
-
|
|
23
|
-
export type UserTier = {
|
|
24
|
-
"user-tier": "enterprise" | "pro";
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const requestContext = new RequestContext<UserTier>();
|
|
28
|
-
requestContext.set("user-tier", "enterprise");
|
|
29
|
-
|
|
30
|
-
const agent = mastra.getAgent("weatherAgent");
|
|
31
|
-
await agent.generate("What's the weather in London?", {
|
|
32
|
-
requestContext,
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const routingAgent = mastra.getAgent("routingAgent");
|
|
36
|
-
routingAgent.network("What's the weather in London?", {
|
|
37
|
-
requestContext,
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const run = await mastra.getWorkflow("weatherWorkflow").createRun();
|
|
41
|
-
await run.start({
|
|
42
|
-
inputData: {
|
|
43
|
-
location: "London",
|
|
44
|
-
},
|
|
45
|
-
requestContext,
|
|
46
|
-
});
|
|
47
|
-
await run.resume({
|
|
48
|
-
resumeData: {
|
|
49
|
-
city: "New York",
|
|
50
|
-
},
|
|
51
|
-
requestContext,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
await weatherTool.execute(
|
|
55
|
-
{ location: "London" },
|
|
56
|
-
{ requestContext },
|
|
57
|
-
);
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Setting values based on request headers
|
|
61
|
-
|
|
62
|
-
You can populate `requestContext` dynamically in server middleware by extracting information from the request. In this example, the `temperature-unit` is set based on the Cloudflare `CF-IPCountry` header to ensure responses match the user's locale.
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
import { Mastra } from "@mastra/core";
|
|
66
|
-
import { RequestContext } from "@mastra/core/request-context";
|
|
67
|
-
import { testWeatherAgent } from "./agents/test-weather-agent";
|
|
68
|
-
|
|
69
|
-
export const mastra = new Mastra({
|
|
70
|
-
agents: { testWeatherAgent },
|
|
71
|
-
server: {
|
|
72
|
-
middleware: [
|
|
73
|
-
async (context, next) => {
|
|
74
|
-
const country = context.req.header("CF-IPCountry");
|
|
75
|
-
const requestContext = context.get("requestContext");
|
|
76
|
-
|
|
77
|
-
requestContext.set(
|
|
78
|
-
"temperature-unit",
|
|
79
|
-
country === "US" ? "fahrenheit" : "celsius",
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
await next();
|
|
83
|
-
},
|
|
84
|
-
],
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
> **Info:** Visit [Middleware](https://mastra.ai/docs/server/middleware) for how to use server middleware.
|
|
90
|
-
|
|
91
|
-
## Accessing values with agents
|
|
92
|
-
|
|
93
|
-
You can access the `requestContext` argument from any supported configuration options in agents. These functions can be sync or `async`. Use the `.get()` method to read values from `requestContext`.
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
export type UserTier = {
|
|
97
|
-
"user-tier": "enterprise" | "pro";
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
export const weatherAgent = new Agent({
|
|
101
|
-
id: "weather-agent",
|
|
102
|
-
name: "Weather Agent",
|
|
103
|
-
instructions: async ({ requestContext }) => {
|
|
104
|
-
const userTier = requestContext.get("user-tier") as UserTier["user-tier"];
|
|
105
|
-
|
|
106
|
-
if (userTier === "enterprise") {}
|
|
107
|
-
},
|
|
108
|
-
model: ({ requestContext }) => {},
|
|
109
|
-
tools: ({ requestContext }) => {},
|
|
110
|
-
memory: ({ requestContext }) => {},
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
You can also use `requestContext` with other options like `agents`, `workflows`, `scorers`, `inputProcessors`, and `outputProcessors`.
|
|
115
|
-
|
|
116
|
-
### Dynamic instructions
|
|
117
|
-
|
|
118
|
-
Agent instructions can be provided as an async function, enabling you to resolve prompts dynamically at runtime. Combined with `requestContext`, this enables patterns like:
|
|
119
|
-
|
|
120
|
-
- **Personalization**: Tailor instructions based on user attributes, preferences, or tier
|
|
121
|
-
- **Localization**: Adjust tone, language, or behavior based on locale
|
|
122
|
-
- **A/B testing**: Serve different prompt variants for experimentation
|
|
123
|
-
- **External prompt management**: Fetch prompts from registry services without redeploying
|
|
124
|
-
|
|
125
|
-
```typescript
|
|
126
|
-
import { Agent } from "@mastra/core/agent";
|
|
127
|
-
|
|
128
|
-
export const dynamicAgent = new Agent({
|
|
129
|
-
id: "dynamic-agent",
|
|
130
|
-
name: "Dynamic Agent",
|
|
131
|
-
instructions: async ({ requestContext }) => {
|
|
132
|
-
const userTier = requestContext?.get("user-tier");
|
|
133
|
-
const locale = requestContext?.get("locale");
|
|
134
|
-
|
|
135
|
-
// Personalize based on user tier
|
|
136
|
-
const basePrompt = userTier === "enterprise"
|
|
137
|
-
? "You are a premium support agent. Provide detailed, thorough responses with technical depth."
|
|
138
|
-
: "You are a helpful assistant. Be concise and friendly.";
|
|
139
|
-
|
|
140
|
-
// Localize behavior
|
|
141
|
-
const localeInstructions = locale === "ja"
|
|
142
|
-
? "Respond in Japanese using formal keigo."
|
|
143
|
-
: "";
|
|
144
|
-
|
|
145
|
-
return `${basePrompt} ${localeInstructions}`.trim();
|
|
146
|
-
},
|
|
147
|
-
model: "openai/gpt-5.1",
|
|
148
|
-
});
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
#### Fetching from a prompt registry
|
|
152
|
-
|
|
153
|
-
If your organization uses a prompt registry service for central prompt management, you can fetch instructions at runtime. This allows you to update prompts without redeploying, run experiments with variants, and track prompt usage across your agents.
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
import { Agent } from "@mastra/core/agent";
|
|
157
|
-
|
|
158
|
-
// Your prompt registry client
|
|
159
|
-
import { promptRegistry } from "../lib/prompt-registry";
|
|
160
|
-
|
|
161
|
-
export const registryAgent = new Agent({
|
|
162
|
-
id: "registry-agent",
|
|
163
|
-
name: "Registry Agent",
|
|
164
|
-
instructions: async ({ requestContext }) => {
|
|
165
|
-
const prompt = await promptRegistry.getPrompt({
|
|
166
|
-
promptId: "customer-support-agent",
|
|
167
|
-
// Pass context for variant selection or tracking
|
|
168
|
-
variant: requestContext?.get("experiment-variant"),
|
|
169
|
-
userId: requestContext?.get("user-id"),
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
return prompt.content;
|
|
173
|
-
},
|
|
174
|
-
model: "openai/gpt-5.1",
|
|
175
|
-
});
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
> **Info:** Visit [Agent](https://mastra.ai/reference/agents/agent) for a full list of configuration options.
|
|
179
|
-
|
|
180
|
-
## Accessing values from workflow steps
|
|
181
|
-
|
|
182
|
-
You can access the `requestContext` argument from a workflow step's `execute` function. This function can be sync or async. Use the `.get()` method to read values from `requestContext`.
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
export type UserTier = {
|
|
186
|
-
"user-tier": "enterprise" | "pro";
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const stepOne = createStep({
|
|
190
|
-
id: "step-one",
|
|
191
|
-
execute: async ({ requestContext }) => {
|
|
192
|
-
const userTier = requestContext.get("user-tier") as UserTier["user-tier"];
|
|
193
|
-
|
|
194
|
-
if (userTier === "enterprise") {}
|
|
195
|
-
},
|
|
196
|
-
});
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
> **Info:** Visit [createStep()](https://mastra.ai/reference/workflows/step) for a full list of configuration options.
|
|
200
|
-
|
|
201
|
-
## Accessing values with tools
|
|
202
|
-
|
|
203
|
-
You can access the `requestContext` argument from a tool's `execute` function. This function is `async`. Use the `.get()` method to read values from `requestContext`.
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
export type UserTier = {
|
|
207
|
-
"user-tier": "enterprise" | "pro";
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
export const weatherTool = createTool({
|
|
211
|
-
id: "weather-tool",
|
|
212
|
-
execute: async (inputData, context) => {
|
|
213
|
-
const userTier = context?.requestContext?.get("user-tier") as UserTier["user-tier"] | undefined;
|
|
214
|
-
|
|
215
|
-
if (userTier === "enterprise") {}
|
|
216
|
-
},
|
|
217
|
-
});
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
> **Info:** Visit [createTool()](https://mastra.ai/reference/tools/create-tool) for a full list of configuration options.
|
|
221
|
-
|
|
222
|
-
## Reserved keys
|
|
223
|
-
|
|
224
|
-
Mastra reserves special context keys for security purposes. When set by middleware, these keys take precedence over client-provided values. The server automatically validates ownership and returns 403 errors when users attempt to access resources they don't own.
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
import {
|
|
228
|
-
MASTRA_RESOURCE_ID_KEY,
|
|
229
|
-
MASTRA_THREAD_ID_KEY,
|
|
230
|
-
} from "@mastra/core/request-context";
|
|
231
|
-
|
|
232
|
-
// In middleware: force memory operations to use authenticated user's ID
|
|
233
|
-
requestContext.set(MASTRA_RESOURCE_ID_KEY, user.id);
|
|
234
|
-
|
|
235
|
-
// In middleware: set validated thread ID
|
|
236
|
-
requestContext.set(MASTRA_THREAD_ID_KEY, threadId);
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
| Key | Purpose |
|
|
240
|
-
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
241
|
-
| `MASTRA_RESOURCE_ID_KEY` | Forces all memory operations to use this resource ID. The server validates that accessed threads belong to this resource and returns 403 if not. |
|
|
242
|
-
| `MASTRA_THREAD_ID_KEY` | Forces thread operations to use this thread ID, overriding client-provided values |
|
|
243
|
-
|
|
244
|
-
These keys are used to implement user isolation in multi-tenant applications. See [Authorization middleware](https://mastra.ai/docs/server/middleware) for usage examples.
|
|
245
|
-
|
|
246
|
-
## TypeScript support
|
|
247
|
-
|
|
248
|
-
When you provide a type parameter to `RequestContext`, all methods are fully typed:
|
|
249
|
-
|
|
250
|
-
```typescript
|
|
251
|
-
import { RequestContext } from "@mastra/core/request-context";
|
|
252
|
-
|
|
253
|
-
type MyContext = {
|
|
254
|
-
userId: string;
|
|
255
|
-
maxTokens: number;
|
|
256
|
-
isPremium: boolean;
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
const ctx = new RequestContext<MyContext>();
|
|
260
|
-
|
|
261
|
-
// set() enforces correct value types
|
|
262
|
-
ctx.set("userId", "user-123"); // ✓ valid
|
|
263
|
-
ctx.set("maxTokens", 4096); // ✓ valid
|
|
264
|
-
ctx.set("maxTokens", "wrong"); // ✗ TypeScript error: expected number
|
|
265
|
-
|
|
266
|
-
// get() returns the correct type automatically
|
|
267
|
-
const tokens = ctx.get("maxTokens"); // inferred as number
|
|
268
|
-
const id = ctx.get("userId"); // inferred as string
|
|
269
|
-
|
|
270
|
-
// keys() returns typed keys
|
|
271
|
-
for (const key of ctx.keys()) {
|
|
272
|
-
// key is "userId" | "maxTokens" | "isPremium"
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// entries() supports type narrowing
|
|
276
|
-
for (const [key, value] of ctx.entries()) {
|
|
277
|
-
if (key === "maxTokens") {
|
|
278
|
-
// TypeScript knows value is number here
|
|
279
|
-
console.log(value.toFixed(2));
|
|
280
|
-
}
|
|
281
|
-
if (key === "userId") {
|
|
282
|
-
// TypeScript knows value is string here
|
|
283
|
-
console.log(value.toUpperCase());
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Schema validation
|
|
289
|
-
|
|
290
|
-
Use `requestContextSchema` to define a Zod schema that validates request context values at runtime. This catches missing or invalid context values early, provides clear error messages, and gives you type inference within your component.
|
|
291
|
-
|
|
292
|
-
### Agent schema validation
|
|
293
|
-
|
|
294
|
-
When you define `requestContextSchema` on an agent, the context is validated at the start of `generate()` or `stream()`. If validation fails, the agent throws a `MastraError` before any LLM calls are made.
|
|
295
|
-
|
|
296
|
-
```typescript
|
|
297
|
-
import { Agent } from "@mastra/core/agent";
|
|
298
|
-
import { z } from "zod";
|
|
299
|
-
|
|
300
|
-
export const validatedAgent = new Agent({
|
|
301
|
-
id: "validated-agent",
|
|
302
|
-
name: "Validated Agent",
|
|
303
|
-
requestContextSchema: z.object({
|
|
304
|
-
userId: z.string(),
|
|
305
|
-
apiKey: z.string(),
|
|
306
|
-
}),
|
|
307
|
-
instructions: ({ requestContext }) => {
|
|
308
|
-
// Access all values as a typed object
|
|
309
|
-
const { userId, apiKey } = requestContext.all;
|
|
310
|
-
// { userId: string; apiKey: string }
|
|
311
|
-
|
|
312
|
-
// Or retrieve individual values with .get()
|
|
313
|
-
const id = requestContext.get("userId");
|
|
314
|
-
// string
|
|
315
|
-
|
|
316
|
-
return `You are helping user ${userId}`;
|
|
317
|
-
},
|
|
318
|
-
model: "openai/gpt-4o",
|
|
319
|
-
});
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
When validation fails, the error includes the agent ID and details about which fields failed:
|
|
323
|
-
|
|
324
|
-
```text
|
|
325
|
-
Request context validation failed for agent 'validated-agent':
|
|
326
|
-
- apiKey: Required
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Tool schema validation
|
|
330
|
-
|
|
331
|
-
When you define `requestContextSchema` on a tool, the context is validated before `execute()` runs. Unlike agents, tools return a validation error object instead of throwing:
|
|
332
|
-
|
|
333
|
-
```typescript
|
|
334
|
-
import { createTool } from "@mastra/core/tools";
|
|
335
|
-
import { z } from "zod";
|
|
336
|
-
|
|
337
|
-
export const validatedTool = createTool({
|
|
338
|
-
id: "validated-tool",
|
|
339
|
-
description: "A tool that requires authenticated context",
|
|
340
|
-
inputSchema: z.object({
|
|
341
|
-
query: z.string(),
|
|
342
|
-
}),
|
|
343
|
-
requestContextSchema: z.object({
|
|
344
|
-
userId: z.string(),
|
|
345
|
-
}),
|
|
346
|
-
execute: async (inputData, context) => {
|
|
347
|
-
// Access all values as a typed object
|
|
348
|
-
const { userId } = context.requestContext?.all ?? {};
|
|
349
|
-
// { userId: string }
|
|
350
|
-
|
|
351
|
-
// Or retrieve individual values with .get()
|
|
352
|
-
const id = context.requestContext?.get("userId");
|
|
353
|
-
// string | undefined
|
|
354
|
-
|
|
355
|
-
return { result: `Processed for ${userId}` };
|
|
356
|
-
},
|
|
357
|
-
});
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
When validation fails, the tool returns an error object instead of throwing:
|
|
361
|
-
|
|
362
|
-
```json
|
|
363
|
-
{
|
|
364
|
-
"error": true,
|
|
365
|
-
"message": "Request context validation failed for validated-tool. Please fix the following errors and try again:\n- userId: Required\n\nProvided context: {}"
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Workflow schema validation
|
|
370
|
-
|
|
371
|
-
When you define `requestContextSchema` on a workflow, the context is validated at the start of `run.start()`. If validation fails, the workflow throws an error before any steps execute.
|
|
372
|
-
|
|
373
|
-
```typescript
|
|
374
|
-
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
375
|
-
import { z } from "zod";
|
|
376
|
-
|
|
377
|
-
// Define schema once and share between workflow and steps
|
|
378
|
-
const workflowContextSchema = z.object({
|
|
379
|
-
tenantId: z.string(),
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
const step1 = createStep({
|
|
383
|
-
id: "step-1",
|
|
384
|
-
inputSchema: z.object({ message: z.string() }),
|
|
385
|
-
outputSchema: z.object({ result: z.string() }),
|
|
386
|
-
// Add schema to step for type inference
|
|
387
|
-
requestContextSchema: workflowContextSchema,
|
|
388
|
-
execute: async ({ inputData, requestContext }) => {
|
|
389
|
-
// Access all values as a typed object
|
|
390
|
-
const { tenantId } = requestContext.all;
|
|
391
|
-
// { tenantId: string }
|
|
392
|
-
|
|
393
|
-
// Or retrieve individual values with .get()
|
|
394
|
-
const id = requestContext.get("tenantId");
|
|
395
|
-
// string
|
|
396
|
-
|
|
397
|
-
return { result: `Processed for tenant ${tenantId}` };
|
|
398
|
-
},
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
export const validatedWorkflow = createWorkflow({
|
|
402
|
-
id: "validated-workflow",
|
|
403
|
-
inputSchema: z.object({ message: z.string() }),
|
|
404
|
-
outputSchema: z.object({ result: z.string() }),
|
|
405
|
-
requestContextSchema: workflowContextSchema,
|
|
406
|
-
})
|
|
407
|
-
.then(step1)
|
|
408
|
-
.commit();
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
When validation fails, the workflow throws an error:
|
|
412
|
-
|
|
413
|
-
```text
|
|
414
|
-
Request context validation failed for workflow 'validated-workflow':
|
|
415
|
-
- tenantId: Required
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
Steps can also define their own `requestContextSchema` for step-level validation. Step validation runs before the step's `execute()` function.
|
|
419
|
-
|
|
420
|
-
### Validation behavior
|
|
421
|
-
|
|
422
|
-
| Component | Property | Validation timing | On failure |
|
|
423
|
-
| --------- | ---------------------- | ---------------------------------- | --------------------- |
|
|
424
|
-
| Agent | `requestContextSchema` | Start of `generate()` / `stream()` | Throws `MastraError` |
|
|
425
|
-
| Tool | `requestContextSchema` | Before `execute()` | Returns error object |
|
|
426
|
-
| Workflow | `requestContextSchema` | Start of `run.start()` | Throws `Error` |
|
|
427
|
-
| Step | `requestContextSchema` | Before step `execute()` | Step fails with error |
|
|
428
|
-
|
|
429
|
-
### Best practices
|
|
430
|
-
|
|
431
|
-
**Match your middleware**: Define the same required fields in your schema that your middleware sets. This ensures the contract between middleware and components is explicit and validated.
|
|
432
|
-
|
|
433
|
-
```typescript
|
|
434
|
-
// Middleware sets these fields
|
|
435
|
-
requestContext.set("userId", user.id);
|
|
436
|
-
requestContext.set("tenantId", tenant.id);
|
|
437
|
-
|
|
438
|
-
// Schema validates they exist
|
|
439
|
-
requestContextSchema: z.object({
|
|
440
|
-
userId: z.string(),
|
|
441
|
-
tenantId: z.string(),
|
|
442
|
-
})
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
**Use optional fields for conditional context**: Use `.optional()` for values that may not always be present.
|
|
446
|
-
|
|
447
|
-
```typescript
|
|
448
|
-
requestContextSchema: z.object({
|
|
449
|
-
userId: z.string(), // Always required
|
|
450
|
-
experimentVariant: z.string().optional(), // May not be set
|
|
451
|
-
})
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
**Handle tool validation errors**: Since tools return error objects instead of throwing, check for errors in your agent or workflow logic when tool execution is critical.
|
|
455
|
-
|
|
456
|
-
## Testing with Studio presets
|
|
457
|
-
|
|
458
|
-
When developing locally, you can define named presets in a JSON file and load them into Studio with the [`--request-context-presets`](https://mastra.ai/reference/cli/mastra) CLI flag. This adds a dropdown to the request context editor in Studio so you can quickly switch between configurations without manually editing JSON each time.
|
|
459
|
-
|
|
460
|
-
```bash
|
|
461
|
-
mastra dev --request-context-presets ./presets.json
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
```json
|
|
465
|
-
{
|
|
466
|
-
"development": { "userId": "dev-user", "env": "development" },
|
|
467
|
-
"production": { "userId": "prod-user", "env": "production" }
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
When you select a preset from the dropdown, the JSON editor populates with that preset's values. Editing the JSON manually switches the dropdown back to "Custom".
|
|
472
|
-
|
|
473
|
-
## Related
|
|
474
|
-
|
|
475
|
-
- [Agent Request Context](https://mastra.ai/docs/agents/overview)
|
|
476
|
-
- [Workflow Request Context](https://mastra.ai/docs/workflows/overview)
|
|
477
|
-
- [Server Middleware](https://mastra.ai/docs/server/middleware)
|
|
478
|
-
- [Authorization Middleware](https://mastra.ai/docs/server/middleware)
|