Highlights
Tool Result Guardrails via processToolResult
A new processToolResult processor lifecycle hook runs after each tool execution and before results enter message history, enabling prompt-injection/sensitive-data scanning, transformation, or aborting the run before the LLM sees tool output.
Transient Agent Signals (Per-turn Context Without Persistence)
Signals now support transient: true end-to-end (@mastra/core, @mastra/server, @mastra/memory, and typed support in @mastra/client-js) so you can deliver “reminder” context to the current model call without retaining it in stored conversation/observational memory.
New Observability Exporter: @mastra/deepeval
Introduces @mastra/deepeval, an exporter that sends Mastra traces to Confident AI (DeepEval) for evaluation and monitoring, mapping Mastra spans into Confident’s agent/LLM/tool/retriever/custom types with tokens, tool calls, and metrics.
Better Tooling Visibility in Traces + PostHog LLM Analytics
Model generations now capture full tool definitions (name/description/JSON schema) as a tools attribute on MODEL_GENERATION spans, and @mastra/posthog forwards these as $ai_tools so analytics can show exactly which tool schemas each generation ran with.
Much Faster Mastra Platform Sandbox Exec (Private Network Direct Dial)
@mastra/platform-workspace can now execute commands directly over Railway’s private network when available (dropping exec latency from ~400ms p50 to ~16ms p50), accelerating all sandbox filesystem operations and adding pluggable SandboxAddressRegistry support.
Breaking Changes
- None noted in this changelog.
Changelog
@mastra/core@1.57.0
Minor Changes
-
Added
transientto non-state agent signals. Settransient: truewhen a processor should deliver a reminder to the current model call without retaining it in conversation history. (#18909)await sendSignal?.({ type: 'reactive', contents: 'Stay on the current task.', transient: true, });
-
Added tool definitions to MODEL_GENERATION span attributes. The tools made available to the model (name, description, and JSON-schema parameters) are now captured once per generation as the
toolsattribute, so observability exporters can surface which tool schemas the model ran with. Per-step tool names (afteractiveToolsfiltering) remain on MODEL_INFERENCE spans asavailableTools. Related: #20242 (#20243)// Any exporter reading MODEL_GENERATION spans now receives: span.attributes.tools; // [ // { // type: 'function', // name: 'get_weather', // description: 'Get the weather for a city', // parameters: { type: 'object', properties: { city: { type: 'string' } }, required: ['city'] }, // }, // ]
-
Added
processToolResultprocessor lifecycle method that fires after each tool execution and before the result is added to message history. Symmetric withprocessOutputStep, this hook lets processors scan tool returns for prompt injection or sensitive data, transform them, or abort the run before the LLM sees the result. (#16012)class ToolResultGuard implements Processor { readonly id = 'tool-result-guard'; async processToolResult({ toolName, result, abort, messageList, toolCallId, args }) { if (containsPromptInjection(result)) { abort('blocked by tool-result-guard'); } } }
Patch Changes
-
Update provider registry and model documentation with latest models and providers (
c8002da) -
Browser applications can now import
toAISdkMessagesfrom@mastra/ai-sdk/uiwithout crashing withTypeError: createRequire is not a function. (#20760) -
Fixed a memory leak where suspended agent runs were never released from memory. Every suspend kept its full in-memory transcript retained for the life of the process, so long-running servers with many suspend/resume cycles grew unbounded and could eventually exhaust the heap. (#20273)
Suspended runs are now kept warm only for a bounded window (30 minutes by default) and then evicted. A same-instance resume within that window still reattaches to the warm state exactly as before; a resume after the TTL expires falls back to the durable snapshot. Set
MASTRA_SUSPENDED_RUN_TTL_MS(in milliseconds) to tune the window — lower it on multi-instance deployments where a resume rarely lands on the origin instance:# keep suspended runs warm for 10 minutes instead of the default 30 MASTRA_SUSPENDED_RUN_TTL_MS=600000 -
Fixed sessions opening a new empty thread on every start instead of resuming their conversation. This affected setups that give each session its own working directory: the conversation stayed in storage but the session never reopened it, leaving an unused thread behind each time. (#20743)
-
Fixed boot-time recovery so nested workflows that already finished inside a parent
.parallel()are reused instead of restarted. ParentactiveStepsPathcan still list completed children after a crash; restarting those terminal snapshots no longer throws "This workflow run was not active". As part of this, callingrestart()on a run whose snapshot is alreadysuccess,failed, ortripwirenow returns the stored result without re-executing any steps (it previously threw). Fixes #20225 (#20518) -
Fixed invalid workflow input responses to return HTTP 400 instead of HTTP 500 while preserving schema validation details. (#20722)
-
Fixed
DurableAgentstill writing messages to the thread during tool-call suspension (approval / in-execution suspend) and background-task completion whenmemory.options.readOnlywas set. Follow-up to the readOnly fix for the durable finish path (#18921) — these mid-run flush paths insteps/tool-call.tshad the same missing guard. (#18856) -
Fixed durable agents losing a pending approval on page refresh. The suspended tool's metadata is now persisted to the assistant message, so a reloading client re-renders the approval instead of showing none while the run sits parked and resumable. (#19713)
This applies whenever the agentic loop executes in a different process than the one that called
stream()— for example the@mastra/inngestconnect()worker topology. -
Fixed agent controller approvals losing the current caller identity while processing subscribed thread streams. (#20741)
-
Fixed
filterIncompleteToolCalls: falseproducing prompts that providers reject with a 400. (#20636)A tool call that suspends for approval is stored without a result. With filtering disabled that call was sent to the provider unpaired, and since every provider requires a tool call to have a matching tool result, the request failed — and kept failing on every later turn, leaving the thread unusable.
Suspended tool calls are now paired with a placeholder result instead of being sent alone, so the agent can see its pending calls and the prompt stays valid:
const agent = new Agent({ name: 'approvals', model: 'openai/gpt-5-mini', memory, }); // Before: this turn failed with 'No tool output found for function call ...' // After: the agent answers and can see the pending approval await agent.stream('Do I have anything waiting on my approval?', { memory: { thread: 'thread-1', resource: 'user-1', options: { filterIncompleteToolCalls: false }, }, });
The default (
true) is unchanged — suspended calls are still dropped from the prompt. -
Fixed SignalProvider webhook documentation to explain how applications should expose verified HTTP endpoints. (#20749)
-
Fixed agent model-call retries ignoring the provider's
Retry-Afterresponse header. (#19906)An agent that retries a failed model call (via
maxRetries) backed off on a fixed exponential schedule. A provider replying429withRetry-After: 30was retried after 1s, 2s and 4s, so every attempt landed inside the window the provider was still throttling. Retries now wait for the delay the provider asks for, reading eitherRetry-AfterorRetry-After-Ms.Waits are limited to 30 seconds, so an unusually large
Retry-Aftercannot stall a run. When a provider sends no retry delay, the existing exponential backoff is unchanged.Fixes #19885
-
Fixed the in-memory storage fallback warning when file-based storage is registered during startup. (#20696)
-
Prevented tool results and durable request-context snapshots from hanging the event loop when they contain deeply shared object graphs. Serialization now uses a bounded check, so an acyclic value with layered shared references (which
JSON.stringifywould expand exponentially) is handled in milliseconds instead of blocking for minutes. Over-budget tool results are still returned — repeated references are collapsed to[Circular]— rather than dropped. (#20727) -
Exempt memory-sourced messages from the resourceId guard in inputToMastraDBMessage, matching the existing threadId exemption. Memory messages can carry a system resourceId (e.g. observational-memory continuation messages arrive with the observer's resourceId), and the mismatch previously threw inside input processing and hard-aborted the turn. (#19153)
-
Fixed how tool errors are stored in message history. When a tool throws (or a background task fails), the tool call is now recorded with an error state and its message in an
errorTextfield, instead of being stored as a successful result. This keeps failed tool calls distinguishable from real results when messages are recalled or replayed to the model. (#20705) -
Fixed non-durable tool-call suspensions writing messages when memory is read-only. (#20346)
-
Fixed OpenAI Files API file IDs (e.g.
file-abc123) being corrupted into invalid base64 data URIs, which causedMastraError: Failed to download asset. File IDs are now classified as provider file references and passed through untouched on every conversion path — v5 UI messages, v4 attachments, and v1 prompt messages — so@ai-sdk/openaican forward them as{ file_id: "file-..." }to the API. (#16448) -
Improved observability traces: RequestContext objects and arrays now preserve their nested structure instead of appearing as
[object]. (#20520) -
Fixed Google provider-executed tool results (e.g.
file_search) being dropped when the tool ran alongside another tool. Some providers assign the tool result a differenttoolCallIdthan the original tool call, so the result never merged into the stored call and the next request to the model failed with a "Corrupted tool call context" error. The tool call now matches by tool name as a fallback when the id differs, so the result is recorded correctly. (#18604) -
Fixed
RequestContext.toJSON()so nested contexts reached through shared-reference graphs no longer block the event loop. The serialization safety budget is now shared across nested probes within one serialization, so such values are handled in bounded time — and filtered when they exceed the budget — instead of blocking for seconds. (#20730) -
Fixed durable agents dropping tool results when a tool's
toModelOutputreturnsundefined. (#20404)Tools that only map some of their results — including the built-in workspace
read_filetool and the sandbox tools — returnundefinedfromtoModelOutputto mean "send the raw result as-is". Durable runs stored thatundefinedas the tool's model output, so the next request to the provider carried a tool message with nooutputfield and the run failed withCannot read properties of undefined (reading 'type'). Any multi-step durable task that read a file hit this. Regular agents were never affected. -
Fixed AI SDK v5 streams so provider metadata is preserved when a text delta is empty. This keeps Google Gemini thought signatures and other provider continuity metadata available to downstream consumers. Empty deltas without provider metadata remain omitted. Relates to #20469 (#20488)
@mastra/agent-browser@0.5.0
Minor Changes
- Added support for authenticated CDP connections in
AgentBrowser. (#20606)
@mastra/ai-sdk@1.7.2
Patch Changes
- Browser applications can now import
toAISdkMessagesfrom@mastra/ai-sdk/uiwithout crashing withTypeError: createRequire is not a function. (#20760)
@mastra/arize@1.3.8
Patch Changes
-
Fixed traces failing to export from the Arize exporter after the recent OpenTelemetry upgrade. (#20750)
The core OTLP exporter (
@mastra/otel-exporter) was upgraded to the OpenTelemetry0.219/2.8line, but the Arize, Arthur, Langfuse, and OTel Bridge packages still pinned the older0.218/2.7line. That mismatch loaded two different copies of@opentelemetry/sdk-trace-base, so spans handed to the batch span processor were sent through a version that never delivered them. These packages now track the same OpenTelemetry versions as the core exporter, so trace export works again.
@mastra/arthur@0.4.8
Patch Changes
-
Fixed traces failing to export from the Arize exporter after the recent OpenTelemetry upgrade. (#20750)
The core OTLP exporter (
@mastra/otel-exporter) was upgraded to the OpenTelemetry0.219/2.8line, but the Arize, Arthur, Langfuse, and OTel Bridge packages still pinned the older0.218/2.7line. That mismatch loaded two different copies of@opentelemetry/sdk-trace-base, so spans handed to the batch span processor were sent through a version that never delivered them. These packages now track the same OpenTelemetry versions as the core exporter, so trace export works again.
@mastra/client-js@1.38.0
Minor Changes
-
Added typed client support for transient agent signals. Use
transient: truewithsendSignal()to deliver non-state context for the current model call without retaining it. (#18909)await client.getAgent('myAgent').sendSignal({ resourceId: 'user-1', threadId: 'thread-1', signal: { type: 'reactive', contents: 'Stay on the current task.', transient: true, }, });
-
Added
toolResultas a recognized processor phase across the processor server API and the generated client types. Processors that implementprocessToolResultare now detected and surfaced when listing processors, the phase can be targeted when executing a processor, and it is accepted by the processor provider and stored agent schemas. The@mastra/client-jsroute types now include the new phase. (#16012)
Patch Changes
-
Fixed streamed UTF-8 characters being corrupted when their bytes span network chunks. (#20224)
-
Added landmark types for trace signal theme snapshots. Querying the theme-snapshots endpoint with
presentation=landmarksreturns a bounded, time-balanced selection of snapshots instead of every snapshot in range. The response types now cover that mode. (#20710)import type { ThemeSnapshotsResponse } from '@mastra/client-js'; const response: ThemeSnapshotsResponse = await fetch( '/api/learning/entities/my-agent/theme-snapshots?' + 'entityType=agent&signalNames=goal,outcome&presentation=landmarks&limit=24', ).then(res => res.json()); response.totalSnapshots; // full in-range count, larger than the landmark list for (const snapshot of response.snapshots) { snapshot.cutoffAt; // position ticks proportionally on a time axis snapshot.reason; // 'range_start' | 'range_end' | 'time_sample' }
@mastra/datadog@1.3.8
Patch Changes
- Fixed spans from fire-and-forget work like Memory.generateTitle showing up as disconnected root traces in Datadog LLM Observability. Spans that arrive after the root span's tree has been emitted were sent one at a time under tracer.scope().activate(), but dd-trace only links LLMObs parents through enclosing llmobs.trace() callbacks, so every late span got parent_id "undefined" and rendered as its own root trace. Late-arriving span chains are now emitted as nested sub-trees, so a title generation run shows up as a single trace with its step, inference, and chunk spans properly nested. (#19304)
@mastra/deepeval@0.1.0
Minor Changes
-
Added the
@mastra/deepevalobservability exporter to send Mastra traces to Confident AI for evaluation and monitoring. (#20599)Register it in your Mastra observability config:
import { Mastra } from '@mastra/core'; import { Observability } from '@mastra/observability'; import { DeepEvalExporter } from '@mastra/deepeval'; export const mastra = new Mastra({ observability: new Observability({ configs: { deepeval: { serviceName: 'my-service', exporters: [new DeepEvalExporter()], }, }, }), });
Set
CONFIDENT_API_KEY(and optionallyCONFIDENT_TRACE_ENVIRONMENT) to send traces. Mastra spans map to Confident AI'sAGENT,LLM,TOOL,RETRIEVER, andCUSTOMspan types, with model, token counts, tool calls, and metric collections carried through.
@mastra/deployer@1.57.0
Patch Changes
- Fixed file-based agents initializing before their configured storage. (#20696)
@mastra/express@1.4.14
Patch Changes
-
Added a clear server warning when a webhook is sent to an agent without a matching channel adapter. No adapter setup is needed for the warning: (#20489)
curl -X POST http://localhost:4111/api/agents/support/channels/slack/webhook
The server keeps the 404 response and logs:
Received a Slack webhook, but this agent doesn't have a Slack adapter. Add one to the agent's channels.adapters configuration and restart the server.
@mastra/factory@0.5.0
Minor Changes
-
Added a built-in Slack integration, so every factory and create-factory deployment can offer Slack channels without vendoring the integration itself. Register it alongside the built-in GitHub and Linear integrations: (#20507)
import { SlackIntegration } from '@mastra/factory/integrations/slack/integration'; new MastraFactory({ integrations: [new SlackIntegration({ signingSecret, botToken, clientId, clientSecret })], });
Slack-started sessions are repo-backed automatically: the factory exposes its source-control owner on
IntegrationContext(ctx.storage.sourceControlOwner) and the integration wires itself up from there.Two related changes come with it.
FactoryIntegration.channels()now returns a config object (FactoryChannelsConfig) instead of a builtAgentControllerChannelsinstance, and the factory constructs the instance at the attach site. And when no Slack integration is registered, the factory answersGET /web/channel-accountswith{ accounts: [], canConnect: false, reason: 'not_registered' }, so the Connections UI can say Slack is not set up instead of telling you to set environment variables that would not enable it.
Patch Changes
- Fixed Factory sessions that stopped responding after a server restart. GitHub webhook deliveries now restore the saved session owner when they rebuild a session, so the delivery goes through and the session picks up where it left off. (#20698)
@mastra/fastify@1.4.14
Patch Changes
-
Added a clear server warning when a webhook is sent to an agent without a matching channel adapter. No adapter setup is needed for the warning: (#20489)
curl -X POST http://localhost:4111/api/agents/support/channels/slack/webhook
The server keeps the 404 response and logs:
Received a Slack webhook, but this agent doesn't have a Slack adapter. Add one to the agent's channels.adapters configuration and restart the server.
@mastra/github-signals@0.2.4
Patch Changes
- Fixed duplicate GitHub signal notifications caused by transient mergeability checks and edits to already-observed bot comments. (#20736)
@mastra/hono@1.5.14
Patch Changes
-
Added a clear server warning when a webhook is sent to an agent without a matching channel adapter. No adapter setup is needed for the warning: (#20489)
curl -X POST http://localhost:4111/api/agents/support/channels/slack/webhook
The server keeps the 404 response and logs:
Received a Slack webhook, but this agent doesn't have a Slack adapter. Add one to the agent's channels.adapters configuration and restart the server.
@mastra/inngest@1.8.5
Patch Changes
- Fixed nested Inngest workflows retaining unused input and step history in parent run state. (#19217)
@mastra/koa@1.6.14
Patch Changes
-
Added a clear server warning when a webhook is sent to an agent without a matching channel adapter. No adapter setup is needed for the warning: (#20489)
curl -X POST http://localhost:4111/api/agents/support/channels/slack/webhook
The server keeps the 404 response and logs:
Received a Slack webhook, but this agent doesn't have a Slack adapter. Add one to the agent's channels.adapters configuration and restart the server.
@mastra/langfuse@1.4.8
Patch Changes
-
Fixed traces failing to export from the Arize exporter after the recent OpenTelemetry upgrade. (#20750)
The core OTLP exporter (
@mastra/otel-exporter) was upgraded to the OpenTelemetry0.219/2.8line, but the Arize, Arthur, Langfuse, and OTel Bridge packages still pinned the older0.218/2.7line. That mismatch loaded two different copies of@opentelemetry/sdk-trace-base, so spans handed to the batch span processor were sent through a version that never delivered them. These packages now track the same OpenTelemetry versions as the core exporter, so trace export works again.
@mastra/memory@1.26.0
Minor Changes
-
Added persistence filtering for transient agent signals. Memory now excludes signals marked
transient: truefrom standard message saves and observational-memory persistence, so per-turn reminders do not accumulate in stored thread history. (#18909)await sendSignal?.({ type: 'reactive', contents: 'Stay on the current task.', transient: true, });
Patch Changes
-
Fixed thread-scoped Observational Memory requests without a thread ID to return a clear bad request error instead of an internal server error. (#20721)
-
Fixed a bug where concurrent requests could create duplicate observational memory records. (#19216)
@mastra/mongodb@1.16.1
Patch Changes
- Bump the
@mastra/corepeer dependency floor to>=1.53.0-0.@mastra/mongodbimportsstorageMessageMatchesMetadataFilterfrom@mastra/core/storage, which core only exports from 1.53.0, but the peer range previously allowed>=1.51.0-0. Projects resolving core to 1.51.x/1.52.x installed cleanly and then failed at import time. Fixes #20586 (#20706)
@mastra/observability@1.16.5
Patch Changes
- Fixed token metrics losing model labels and cost data when providers return blank response model IDs. (#20742)
@mastra/otel-bridge@1.4.6
Patch Changes
-
Fixed traces failing to export from the Arize exporter after the recent OpenTelemetry upgrade. (#20750)
The core OTLP exporter (
@mastra/otel-exporter) was upgraded to the OpenTelemetry0.219/2.8line, but the Arize, Arthur, Langfuse, and OTel Bridge packages still pinned the older0.218/2.7line. That mismatch loaded two different copies of@opentelemetry/sdk-trace-base, so spans handed to the batch span processor were sent through a version that never delivered them. These packages now track the same OpenTelemetry versions as the core exporter, so trace export works again.
@mastra/otel-exporter@1.3.8
Patch Changes
-
Updated the bundled OpenTelemetry dependencies so
@opentelemetry/coreresolves to a patched version (2.8.0 or later), removing exposure to the unbounded W3C baggage allocation issue where inboundbaggageheaders were parsed without size limits. (#20729)Stable OpenTelemetry SDK packages moved from
^2.7.1to^2.8.0and the OTLP exporter/logs packages moved from^0.218.0to^0.219.0. No code changes are required.
@mastra/platform-workspace@1.1.0
Minor Changes
-
PlatformSandbox.executeCommandcan now dial the sandbox directly over Railway's private network instead of going through the platform's public exec proxy. On paths where the direct route is available, per-exec latency drops from ~400 ms p50 to ~16 ms p50, and the exec stops touching the platform control plane. This flows through to every filesystem call (SandboxFilesystem.readFile,writeFile,readdir,mkdir,stat,exists,copyFile,moveFile,deleteFile), which is where most agent tool time was going. (#20664)Direct-path availability is a runtime property, not a configuration knob. When it's not available — no address registry wired up, the workspace-proxy hasn't discovered the sandbox address yet, or a direct dial fails —
executeCommandtransparently falls back to the existing exec-lease path with no behavior change. Timed-out execs are never retried on the fallback path (they're returned to the caller as-is), so this is safe for non-idempotent commands.Enabling the direct path
Wire a
SandboxAddressRegistryintoPlatformSandbox:import { PlatformSandbox, InProcessSandboxAddressRegistry } from '@mastra/platform-workspace'; const registry = new InProcessSandboxAddressRegistry(); const sandbox = new PlatformSandbox({ accessToken: process.env.MASTRA_PLATFORM_ACCESS_TOKEN, projectId: process.env.MASTRA_PLATFORM_PROJECT_ID, environmentId: process.env.MASTRA_PLATFORM_ENVIRONMENT_ID, addressRegistry: registry, });
PlatformSandbox.start()populates the registry from the workspace-proxy's response;executeCommandreads it, tries the direct path first, evicts on transport failure.destroy()also evicts.clone()shares the same registry — each child sandbox looks up its own id.New public exports
SandboxAddressRegistry— the{ get, set, delete }interfacePlatformSandboxsees. Callers can implement their own (e.g. shared across a worker pool) or use the default.InProcessSandboxAddressRegistry— the defaultMap-backed implementation.PlatformSandboxOptions.addressRegistry?— DI seam. Optional; omitted keeps pre-existing behavior.execViaPrivateNetwork,PrivateNetExecHttpError,PrivateNetExecOptions,PrivateNetExecResult,PrivateNetFetch— standalone transport for callers that want to talk to a sandbox directly without going throughPlatformSandbox.
@mastra/playground-ui@47.0.0
Patch Changes
- Fixed several Sankey chart rendering defects: node percentages now show each node's share of its own column instead of the first column's total (no more values above 100%), ribbons are anchored to their own column pair so partially linked flows no longer stretch across the full chart, hovering a node shows a single tooltip instead of a duplicate native title popup, and hovering a column header no longer pops the top theme's tooltip. (#20710)
@mastra/posthog@1.3.0
Minor Changes
-
Added
$ai_toolsto exported$ai_generationevents. When tool definitions are present on the generation span (requires @mastra/core with tool-definition capture), they are sent to PostHog in the OpenAI function format, so PostHog LLM Analytics shows the tool schemas each generation ran with. Related: #20242 (#20243)// No configuration change needed: new PosthogExporter({ apiKey: process.env.POSTHOG_KEY, host: 'https://us.i.posthog.com' }); // $ai_generation events now include: // $ai_tools: [ // { // type: 'function', // function: { name: 'get_weather', description: 'Get the weather for a city', parameters: { ... } }, // }, // ]
@mastra/react@1.4.1
Patch Changes
- Fixed Studio chat live streaming so text on either side of an interruption no longer merges into one block. When an agent interleaves text with a tool call or a reasoning step and then continues with more text, the messages now render in the correct order while streaming, matching what you see after a page refresh. (#18980)
@mastra/schema-compat@1.3.5
Patch Changes
- Fixed Claude requests failing when tool inputs use a top-level union of object schemas. (#20724)
@mastra/server@1.57.0
Minor Changes
-
Added HTTP validation for transient agent signals. Non-state signals accept
transient: true, while state signals reject the option because state tracking requires persisted history. (#18909){ "signal": { "type": "reactive", "contents": "Stay on the current task.", "transient": true } } -
Added
toolResultas a recognized processor phase across the processor server API and the generated client types. Processors that implementprocessToolResultare now detected and surfaced when listing processors, the phase can be targeted when executing a processor, and it is accepted by the processor provider and stored agent schemas. The@mastra/client-jsroute types now include the new phase. (#16012)
Patch Changes
-
Fixed invalid workflow input responses to return HTTP 400 instead of HTTP 500 while preserving schema validation details. (#20722)
-
Fixed
POST /workflows/:workflowId/streamrestarting a workflow run that had already finished, which could overwrite its stored result. Streaming a finished run now returns409instead. Read a finished run's result throughPOST /workflows/:workflowId/observe. (#20184) -
Fixed thread-scoped Observational Memory requests without a thread ID to return a clear bad request error instead of an internal server error. (#20721)
-
Added a clear server warning when a webhook is sent to an agent without a matching channel adapter. No adapter setup is needed for the warning: (#20489)
curl -X POST http://localhost:4111/api/agents/support/channels/slack/webhook
The server keeps the 404 response and logs:
Received a Slack webhook, but this agent doesn't have a Slack adapter. Add one to the agent's channels.adapters configuration and restart the server.
Other updated packages
The following packages were updated with dependency changes only:
- @mastra/agent-builder@1.1.10
- @mastra/braintrust@1.3.3
- @mastra/code-sdk@1.1.3
- @mastra/deployer-cloud@1.57.0
- @mastra/deployer-cloudflare@1.2.14
- @mastra/deployer-netlify@1.2.14
- @mastra/deployer-sandbox@0.2.2
- @mastra/deployer-vercel@1.2.14
- @mastra/editor@0.13.11
- @mastra/laminar@1.3.8
- @mastra/langsmith@1.3.8
- @mastra/longmemeval@1.1.14
- @mastra/mcp-docs-server@1.2.14
- @mastra/nestjs@0.2.14
- @mastra/next@0.2.13
- @mastra/opencode@0.1.14
- @mastra/sentry@1.2.8
- @mastra/tanstack-start@0.2.13
- @mastra/temporal@0.2.14
- @mastra/voice-google-gemini-live@0.14.5
- @mastra/voice-openai-realtime@0.13.5
- @mastra/voice-xai-realtime@0.2.5