@mastra/mcp-docs-server 1.3.2-alpha.1 → 1.3.2-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.docs/docs/agents/processors.md +1 -1
  2. package/.docs/docs/evals/evals-with-memory.md +3 -1
  3. package/.docs/docs/evals/experiments.md +30 -10
  4. package/.docs/docs/harness/durable-agents.md +2 -2
  5. package/.docs/docs/memory/observational-memory.md +34 -0
  6. package/.docs/integrations/sandboxes/modal.md +40 -0
  7. package/.docs/models/gateways/netlify.md +3 -2
  8. package/.docs/models/gateways/openrouter.md +2 -5
  9. package/.docs/models/index.md +1 -1
  10. package/.docs/models/providers/above.md +2 -2
  11. package/.docs/models/providers/cerebras.md +1 -1
  12. package/.docs/models/providers/cortecs.md +3 -3
  13. package/.docs/models/providers/deepseek.md +9 -3
  14. package/.docs/models/providers/edenai.md +285 -288
  15. package/.docs/models/providers/fireworks-ai.md +4 -7
  16. package/.docs/models/providers/kilo.md +15 -18
  17. package/.docs/models/providers/melious.md +1 -4
  18. package/.docs/models/providers/nano-gpt.md +7 -1
  19. package/.docs/models/providers/opencode-go.md +2 -1
  20. package/.docs/models/providers/opencode.md +3 -2
  21. package/.docs/models/providers/requesty.md +2 -2
  22. package/.docs/models/providers/zenmux.md +8 -1
  23. package/.docs/reference/agents/durable-agent.md +2 -0
  24. package/.docs/reference/channels/channel-provider.md +20 -1
  25. package/.docs/reference/coding-agent/create-coding-agent.md +22 -14
  26. package/.docs/reference/index.md +1 -0
  27. package/.docs/reference/memory/observational-memory.md +8 -0
  28. package/.docs/reference/processors/agents-md-injector.md +2 -0
  29. package/.docs/reference/processors/cyber-refusal-handler.md +76 -0
  30. package/.docs/reference/workspace/local-sandbox.md +2 -0
  31. package/.docs/reference/workspace/workspace-class.md +14 -1
  32. package/package.json +5 -5
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Fireworks AI logo](https://models.dev/logos/fireworks-ai.svg)Fireworks AI
6
6
 
7
- Access 34 Fireworks AI models through Mastra's model router. Authentication is handled automatically using the `FIREWORKS_API_KEY` environment variable.
7
+ Access 22 Fireworks AI models through Mastra's model router. Authentication is handled automatically using the `FIREWORKS_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Fireworks AI documentation](https://fireworks.ai/docs/).
10
10
 
@@ -19,7 +19,7 @@ const agent = new Agent({
19
19
  id: "my-agent",
20
20
  name: "My Agent",
21
21
  instructions: "You are a helpful assistant",
22
- model: "fireworks-ai/accounts/fireworks/models/deepseek-v4-flash-0731"
22
+ model: "fireworks-ai/accounts/fireworks/models/deepseek-v4p1-flash"
23
23
  });
24
24
 
25
25
  // Generate a response
@@ -48,12 +48,9 @@ for await (const chunk of stream) {
48
48
  | `fireworks-ai/accounts/fireworks/models/minimax-m3` | 512K | | | | | | $0.30 | $1 |
49
49
  | `fireworks-ai/accounts/fireworks/models/nemotron-3-ultra-nvfp4` | 262K | | | | | | $0.60 | $2 |
50
50
  | `fireworks-ai/accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b` | 262K | | | | | | $0.05 | $0.20 |
51
- | `fireworks-ai/accounts/fireworks/models/qwen3p7-plus` | 262K | | | | | | $0.40 | $2 |
52
51
  | `fireworks-ai/accounts/fireworks/models/qwen3p8-2p4t-a95b` | 262K | | | | | | $2 | $6 |
53
52
  | `fireworks-ai/accounts/fireworks/models/qwen3p8-max` | 262K | | | | | | $2 | $6 |
54
53
  | `fireworks-ai/accounts/fireworks/routers/deepseek-flash-latest` | 1.0M | | | | | | $0.22 | $0.66 |
55
- | `fireworks-ai/accounts/fireworks/routers/deepseek-pro-latest` | 1.0M | | | | | | $1 | $4 |
56
- | `fireworks-ai/accounts/fireworks/routers/glm-5p2-fast` | 1.0M | | | | | | $2 | $7 |
57
54
  | `fireworks-ai/accounts/fireworks/routers/glm-5p3-fast` | 1.0M | | | | | | $2 | $7 |
58
55
  | `fireworks-ai/accounts/fireworks/routers/glm-fast-latest` | 1.0M | | | | | | $2 | $7 |
59
56
  | `fireworks-ai/accounts/fireworks/routers/glm-flash-latest` | 1.0M | | | | | | $0.15 | $0.50 |
@@ -76,7 +73,7 @@ const agent = new Agent({
76
73
  name: "custom-agent",
77
74
  model: {
78
75
  url: "https://api.fireworks.ai/inference/v1/",
79
- id: "fireworks-ai/accounts/fireworks/models/deepseek-v4-flash-0731",
76
+ id: "fireworks-ai/accounts/fireworks/models/deepseek-v4p1-flash",
80
77
  apiKey: process.env.FIREWORKS_API_KEY,
81
78
  headers: {
82
79
  "X-Custom-Header": "value"
@@ -95,7 +92,7 @@ const agent = new Agent({
95
92
  const useAdvanced = requestContext.task === "complex";
96
93
  return useAdvanced
97
94
  ? "fireworks-ai/accounts/fireworks/routers/qwen-max-latest"
98
- : "fireworks-ai/accounts/fireworks/models/deepseek-v4-flash-0731";
95
+ : "fireworks-ai/accounts/fireworks/models/deepseek-v4p1-flash";
99
96
  }
100
97
  });
101
98
  ```
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Kilo Gateway logo](https://models.dev/logos/kilo.svg)Kilo Gateway
6
6
 
7
- Access 394 Kilo Gateway models through Mastra's model router. Authentication is handled automatically using the `KILO_API_KEY` environment variable.
7
+ Access 391 Kilo Gateway models through Mastra's model router. Authentication is handled automatically using the `KILO_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Kilo Gateway documentation](https://kilo.ai).
10
10
 
@@ -42,12 +42,12 @@ for await (const chunk of stream) {
42
42
  | `kilo/~anthropic/claude-haiku-latest` | 200K | | | | | | $1 | $5 |
43
43
  | `kilo/~anthropic/claude-opus-latest` | 1.0M | | | | | | $4 | $20 |
44
44
  | `kilo/~anthropic/claude-sonnet-latest` | 1.0M | | | | | | $2 | $10 |
45
- | `kilo/~deepseek/deepseek-flash-latest` | 1.0M | | | | | | $0.04 | $1 |
46
- | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.39 | $1 |
47
- | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.03 | $0.32 |
45
+ | `kilo/~deepseek/deepseek-flash-latest` | 1.0M | | | | | | $0.03 | $0.60 |
46
+ | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.24 | $0.73 |
47
+ | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.02 | $0.32 |
48
48
  | `kilo/~google/gemini-flash-latest` | 1.0M | | | | | | $0.75 | $4 |
49
49
  | `kilo/~google/gemini-pro-latest` | 1.0M | | | | | | $2 | $12 |
50
- | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $1 | $11 |
50
+ | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $0.99 | $9 |
51
51
  | `kilo/~openai/gpt-astra-latest` | 1.1M | | | | | | $10 | $50 |
52
52
  | `kilo/~openai/gpt-luna-latest` | 1.1M | | | | | | $0.10 | $0.50 |
53
53
  | `kilo/~openai/gpt-mini-latest` | 400K | | | | | | $0.75 | $5 |
@@ -55,7 +55,7 @@ for await (const chunk of stream) {
55
55
  | `kilo/~openai/gpt-terra-latest` | 1.1M | | | | | | $2 | $12 |
56
56
  | `kilo/~x-ai/grok-latest` | 500K | | | | | | $2 | $5 |
57
57
  | `kilo/~z-ai/glm-flash-latest` | 1.0M | | | | | | $0.04 | $0.14 |
58
- | `kilo/~z-ai/glm-latest` | 1.0M | | | | | | $0.56 | $2 |
58
+ | `kilo/~z-ai/glm-latest` | 1.0M | | | | | | $0.36 | $1 |
59
59
  | `kilo/aion-labs/aion-2.0` | 131K | | | | | | $0.80 | $2 |
60
60
  | `kilo/aion-labs/aion-3.0` | 131K | | | | | | $3 | $6 |
61
61
  | `kilo/aion-labs/aion-3.0-mini` | 131K | | | | | | $0.70 | $1 |
@@ -68,7 +68,6 @@ for await (const chunk of stream) {
68
68
  | `kilo/amazon/nova-premier-v1` | 1.0M | | | | | | $3 | $13 |
69
69
  | `kilo/amazon/nova-pro-v1` | 300K | | | | | | $0.80 | $3 |
70
70
  | `kilo/anthracite-org/magnum-v4-72b` | 33K | | | | | | $3 | $5 |
71
- | `kilo/anthropic/claude-3-haiku` | 200K | | | | | | $0.25 | $1 |
72
71
  | `kilo/anthropic/claude-fable-5` | 1.0M | | | | | | $10 | $50 |
73
72
  | `kilo/anthropic/claude-fable-5.1` | 1.0M | | | | | | $10 | $50 |
74
73
  | `kilo/anthropic/claude-haiku-4.5` | 200K | | | | | | $1 | $5 |
@@ -99,7 +98,7 @@ for await (const chunk of stream) {
99
98
  | `kilo/cohere/command-r-plus-08-2024` | 128K | | | | | | $3 | $10 |
100
99
  | `kilo/cohere/command-r7b-12-2024` | 128K | | | | | | $0.04 | $0.15 |
101
100
  | `kilo/cohere/north-mini-code:free` | 256K | | | | | | — | — |
102
- | `kilo/deepseek/deepseek-chat` | 164K | | | | | | $0.32 | $0.89 |
101
+ | `kilo/deepseek/deepseek-chat` | 128K | | | | | | $0.26 | $1 |
103
102
  | `kilo/deepseek/deepseek-chat-v3-0324` | 164K | | | | | | $0.25 | $1 |
104
103
  | `kilo/deepseek/deepseek-chat-v3.1` | 164K | | | | | | $0.27 | $1 |
105
104
  | `kilo/deepseek/deepseek-r1` | 64K | | | | | | $0.70 | $3 |
@@ -141,7 +140,7 @@ for await (const chunk of stream) {
141
140
  | `kilo/google/gemma-3-27b-it` | 131K | | | | | | $0.08 | $0.16 |
142
141
  | `kilo/google/gemma-3-4b-it` | 131K | | | | | | $0.05 | $0.10 |
143
142
  | `kilo/google/gemma-4-26b-a4b-it` | 262K | | | | | | $0.04 | $0.22 |
144
- | `kilo/google/gemma-4-31b-it` | 262K | | | | | | $0.09 | $0.34 |
143
+ | `kilo/google/gemma-4-31b-it` | 262K | | | | | | $0.08 | $0.30 |
145
144
  | `kilo/google/lyria-3-clip-preview` | 1.0M | | | | | | — | — |
146
145
  | `kilo/google/lyria-3-pro-preview` | 1.0M | | | | | | — | — |
147
146
  | `kilo/gryphe/mythomax-l2-13b` | 4K | | | | | | $0.08 | $0.11 |
@@ -153,7 +152,7 @@ for await (const chunk of stream) {
153
152
  | `kilo/inclusionai/ling-3.0-flash-fin` | 262K | | | | | | $0.06 | $0.18 |
154
153
  | `kilo/inclusionai/ling-3.0-flash-fin:free` | 262K | | | | | | — | — |
155
154
  | `kilo/inclusionai/ling-3.0-flash-sante:free` | 262K | | | | | | — | — |
156
- | `kilo/inclusionai/ling-3.0-flash-vl` | 131K | | | | | | $0.07 | $0.22 |
155
+ | `kilo/inclusionai/ling-3.0-flash-vl` | 262K | | | | | | $0.07 | $0.22 |
157
156
  | `kilo/inference-net/schematron-v2-small` | 128K | | | | | | $0.05 | $0.23 |
158
157
  | `kilo/inference-net/schematron-v2-turbo` | 128K | | | | | | $0.03 | $0.15 |
159
158
  | `kilo/kilo-auto/balanced` | 1.0M | | | | | | $0.33 | $2 |
@@ -187,7 +186,7 @@ for await (const chunk of stream) {
187
186
  | `kilo/minimax/minimax-m2-her` | 66K | | | | | | $0.30 | $1 |
188
187
  | `kilo/minimax/minimax-m2.1` | 205K | | | | | | $0.30 | $1 |
189
188
  | `kilo/minimax/minimax-m2.5` | 200K | | | | | | $0.30 | $1 |
190
- | `kilo/minimax/minimax-m2.7` | 205K | | | | | | $0.30 | $1 |
189
+ | `kilo/minimax/minimax-m2.7` | 197K | | | | | | $0.30 | $1 |
191
190
  | `kilo/minimax/minimax-m3` | 524K | | | | | | $0.30 | $1 |
192
191
  | `kilo/mistralai/codestral-2508` | 256K | | | | | | $0.30 | $0.90 |
193
192
  | `kilo/mistralai/devstral-2512` | 262K | | | | | | $0.40 | $2 |
@@ -217,8 +216,6 @@ for await (const chunk of stream) {
217
216
  | `kilo/moonshotai/kimi-k3` | 1.0M | | | | | | $3 | $15 |
218
217
  | `kilo/morph/morph-v3-fast` | 82K | | | | | | $0.80 | $1 |
219
218
  | `kilo/morph/morph-v3-large` | 262K | | | | | | $0.90 | $2 |
220
- | `kilo/nex-agi/nex-n2.5-mini:free` | 262K | | | | | | — | — |
221
- | `kilo/nex-agi/nex-n2.5-pro:free` | 262K | | | | | | — | — |
222
219
  | `kilo/nousresearch/hermes-3-llama-3.1-405b` | 131K | | | | | | $1 | $1 |
223
220
  | `kilo/nousresearch/hermes-3-llama-3.1-70b` | 131K | | | | | | $0.70 | $0.70 |
224
221
  | `kilo/nousresearch/hermes-4-405b` | 131K | | | | | | $1 | $3 |
@@ -230,7 +227,7 @@ for await (const chunk of stream) {
230
227
  | `kilo/nvidia/nemotron-3-ultra-550b-a55b:free` | 1.0M | | | | | | — | — |
231
228
  | `kilo/nvidia/nemotron-3.5-content-safety` | 131K | | | | | | $0.20 | $0.20 |
232
229
  | `kilo/nvidia/nemotron-3.5-content-safety:free` | 128K | | | | | | — | — |
233
- | `kilo/nvidia/nemotron-3.5-lightning` | 262K | | | | | | $0.07 | $0.18 |
230
+ | `kilo/nvidia/nemotron-3.5-lightning` | 262K | | | | | | $0.04 | $0.18 |
234
231
  | `kilo/nvidia/nemotron-3.5-lightning:free` | 1.0M | | | | | | — | — |
235
232
  | `kilo/openai/gpt-3.5-turbo` | 16K | | | | | | $0.50 | $2 |
236
233
  | `kilo/openai/gpt-3.5-turbo-0613` | 4K | | | | | | $1 | $2 |
@@ -300,6 +297,7 @@ for await (const chunk of stream) {
300
297
  | `kilo/openrouter/free` | 200K | | | | | | — | — |
301
298
  | `kilo/openrouter/pareto-code` | 200K | | | | | | — | — |
302
299
  | `kilo/perceptron/perceptron-mk1` | 33K | | | | | | $0.15 | $2 |
300
+ | `kilo/perceptron/perceptron-mk1.5` | 37K | | | | | | $0.15 | $2 |
303
301
  | `kilo/perplexity/sonar` | 127K | | | | | | $1 | $1 |
304
302
  | `kilo/perplexity/sonar-deep-research` | 128K | | | | | | $2 | $8 |
305
303
  | `kilo/perplexity/sonar-pro` | 200K | | | | | | $3 | $15 |
@@ -336,7 +334,7 @@ for await (const chunk of stream) {
336
334
  | `kilo/qwen/qwen3-next-80b-a3b-thinking` | 262K | | | | | | $0.15 | $1 |
337
335
  | `kilo/qwen/qwen3-vl-235b-a22b-instruct` | 131K | | | | | | $0.26 | $1 |
338
336
  | `kilo/qwen/qwen3-vl-235b-a22b-thinking` | 131K | | | | | | $0.40 | $4 |
339
- | `kilo/qwen/qwen3-vl-30b-a3b-instruct` | 131K | | | | | | $0.13 | $0.52 |
337
+ | `kilo/qwen/qwen3-vl-30b-a3b-instruct` | 262K | | | | | | $0.13 | $0.52 |
340
338
  | `kilo/qwen/qwen3-vl-30b-a3b-thinking` | 131K | | | | | | $0.20 | $2 |
341
339
  | `kilo/qwen/qwen3-vl-32b-instruct` | 131K | | | | | | $0.10 | $0.42 |
342
340
  | `kilo/qwen/qwen3-vl-8b-instruct` | 131K | | | | | | $0.12 | $0.46 |
@@ -420,13 +418,12 @@ for await (const chunk of stream) {
420
418
  | `kilo/z-ai/glm-4.5v` | 66K | | | | | | $0.60 | $2 |
421
419
  | `kilo/z-ai/glm-4.6` | 198K | | | | | | $0.43 | $2 |
422
420
  | `kilo/z-ai/glm-4.6v` | 131K | | | | | | $0.30 | $0.90 |
423
- | `kilo/z-ai/glm-4.7` | 203K | | | | | | $0.40 | $2 |
421
+ | `kilo/z-ai/glm-4.7` | 203K | | | | | | $0.60 | $2 |
424
422
  | `kilo/z-ai/glm-4.7-flash` | 131K | | | | | | $0.06 | $0.40 |
425
423
  | `kilo/z-ai/glm-5` | 198K | | | | | | $0.60 | $2 |
426
424
  | `kilo/z-ai/glm-5-turbo` | 203K | | | | | | $1 | $4 |
427
- | `kilo/z-ai/glm-5.1` | 200K | | | | | | $1 | $4 |
425
+ | `kilo/z-ai/glm-5.1` | 203K | | | | | | $1 | $4 |
428
426
  | `kilo/z-ai/glm-5.2` | 1.0M | | | | | | $1 | $4 |
429
- | `kilo/z-ai/glm-5.2:free` | 33K | | | | | | — | — |
430
427
  | `kilo/z-ai/glm-5.3` | 1.0M | | | | | | $1 | $4 |
431
428
  | `kilo/z-ai/glm-5.3-flash` | 1.0M | | | | | | $0.15 | $0.50 |
432
429
  | `kilo/z-ai/glm-5.3-flashx` | 1.0M | | | | | | $0.37 | $1 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Melious logo](https://models.dev/logos/melious.svg)Melious
6
6
 
7
- Access 15 Melious models through Mastra's model router. Authentication is handled automatically using the `MELIOUS_API_KEY` environment variable.
7
+ Access 12 Melious models through Mastra's model router. Authentication is handled automatically using the `MELIOUS_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Melious documentation](https://melious.ai/docs/reference/models).
10
10
 
@@ -41,12 +41,9 @@ for await (const chunk of stream) {
41
41
  | `melious/deepseek-r1-0528` | 164K | | | | | | $0.70 | $3 |
42
42
  | `melious/deepseek-v3.2` | 164K | | | | | | $0.35 | $0.58 |
43
43
  | `melious/deepseek-v4-flash-0731` | 1.0M | | | | | | $0.12 | $0.29 |
44
- | `melious/deepseek-v4-pro` | 1.0M | | | | | | $2 | $4 |
45
- | `melious/deepseek-v4-pro-0813` | 1.0M | | | | | | $1 | $3 |
46
44
  | `melious/deepseek-v4.1-flash` | 1.0M | | | | | | $0.23 | $1 |
47
45
  | `melious/glm-5` | 203K | | | | | | $1 | $3 |
48
46
  | `melious/glm-5.1` | 203K | | | | | | $2 | $5 |
49
- | `melious/glm-5.2` | 1.0M | | | | | | $1 | $5 |
50
47
  | `melious/glm-5.3` | 1.0M | | | | | | $1 | $3 |
51
48
  | `melious/glm-5.3-flash` | 1.0M | | | | | | $0.12 | $0.46 |
52
49
  | `melious/kimi-k2.5` | 262K | | | | | | $0.58 | $3 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![NanoGPT logo](https://models.dev/logos/nano-gpt.svg)NanoGPT
6
6
 
7
- Access 592 NanoGPT models through Mastra's model router. Authentication is handled automatically using the `NANO_GPT_API_KEY` environment variable.
7
+ Access 598 NanoGPT models through Mastra's model router. Authentication is handled automatically using the `NANO_GPT_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [NanoGPT documentation](https://docs.nano-gpt.com).
10
10
 
@@ -273,6 +273,7 @@ for await (const chunk of stream) {
273
273
  | `nano-gpt/LLM360/K2-Think` | 128K | | | | | | $0.17 | $0.68 |
274
274
  | `nano-gpt/longcat-2.0` | 1.0M | | | | | | $0.75 | $3 |
275
275
  | `nano-gpt/longcat-2.0:thinking` | 1.0M | | | | | | $0.75 | $3 |
276
+ | `nano-gpt/longcat-2.5-preview` | 1.0M | | | | | | $0.75 | $3 |
276
277
  | `nano-gpt/MarinaraSpaghetti/NemoMix-Unleashed-12B` | 33K | | | | | | $0.49 | $0.49 |
277
278
  | `nano-gpt/meganova-ai/manta-flash-1.0` | 16K | | | | | | $0.02 | $0.16 |
278
279
  | `nano-gpt/meganova-ai/manta-mini-1.0` | 8K | | | | | | $0.02 | $0.16 |
@@ -419,6 +420,7 @@ for await (const chunk of stream) {
419
420
  | `nano-gpt/ornith-ai/ornith-1.5-35b-a3b:thinking` | 262K | | | | | | $0.10 | $0.40 |
420
421
  | `nano-gpt/pamanseau/OpenReasoning-Nemotron-32B` | 33K | | | | | | $0.10 | $0.40 |
421
422
  | `nano-gpt/perceptron/perceptron-mk1` | 33K | | | | | | $0.15 | $2 |
423
+ | `nano-gpt/perceptron/perceptron-mk1.5` | 37K | | | | | | $0.15 | $2 |
422
424
  | `nano-gpt/phi-4-mini-instruct` | 128K | | | | | | $0.17 | $0.68 |
423
425
  | `nano-gpt/phi-4-multimodal-instruct` | 128K | | | | | | $0.07 | $0.11 |
424
426
  | `nano-gpt/pokee-isaac` | 10.0M | | | | | | $0.15 | $1 |
@@ -546,6 +548,7 @@ for await (const chunk of stream) {
546
548
  | `nano-gpt/TEE/qwen3.6-27b` | 262K | | | | | | $0.32 | $3 |
547
549
  | `nano-gpt/TEE/qwen3.6-35b-a3b` | 262K | | | | | | $0.20 | $1 |
548
550
  | `nano-gpt/TEE/qwen3.8-27b` | 262K | | | | | | $0.40 | $3 |
551
+ | `nano-gpt/TEE/qwen3.8-27b-uncensored` | 262K | | | | | | $0.30 | $2 |
549
552
  | `nano-gpt/tencent/hy3` | 262K | | | | | | $0.07 | $0.26 |
550
553
  | `nano-gpt/tencent/hy4-preview` | 1.0M | | | | | | $0.83 | $3 |
551
554
  | `nano-gpt/TheDrummer/Anubis-70B-v1` | 66K | | | | | | $0.31 | $0.31 |
@@ -592,6 +595,8 @@ for await (const chunk of stream) {
592
595
  | `nano-gpt/xiaomi/mimo-v2.5-pro:thinking` | 1.0M | | | | | | $0.43 | $0.87 |
593
596
  | `nano-gpt/xiaomi/mimo-v2.5:thinking` | 1.0M | | | | | | $0.14 | $0.28 |
594
597
  | `nano-gpt/xiaomi/mimo-v2.6-flash` | 1.0M | | | | | | $0.14 | $0.28 |
598
+ | `nano-gpt/xiaomi/mimo-v2.6-flash-uncensored` | 1.0M | | | | | | $0.50 | $2 |
599
+ | `nano-gpt/xiaomi/mimo-v2.6-flash-uncensored:thinking` | 1.0M | | | | | | $0.50 | $2 |
595
600
  | `nano-gpt/xiaomi/mimo-v2.6-pro` | 1.0M | | | | | | $0.43 | $0.87 |
596
601
  | `nano-gpt/xiaomi/mimo-v2.6-pro-ultraspeed` | 1.0M | | | | | | $4 | $9 |
597
602
  | `nano-gpt/z-ai/glm-4.5` | 128K | | | | | | $0.30 | $1 |
@@ -626,6 +631,7 @@ for await (const chunk of stream) {
626
631
  | `nano-gpt/z-ai/glm-5.3-flash` | 1.0M | | | | | | $0.07 | $0.25 |
627
632
  | `nano-gpt/z-ai/glm-5.3-flash-cybersecurity` | 1.0M | | | | | | $0.15 | $0.50 |
628
633
  | `nano-gpt/z-ai/glm-5.3-flash-uncensored` | 1.0M | | | | | | $0.20 | $0.80 |
634
+ | `nano-gpt/z-ai/glm-5.3-uncensored` | 1.0M | | | | | | $1 | $2 |
629
635
  | `nano-gpt/z-ai/glm-5.3:thinking` | 1.0M | | | | | | $1 | $3 |
630
636
  | `nano-gpt/z-ai/glm-5v-turbo` | 203K | | | | | | $1 | $4 |
631
637
  | `nano-gpt/z-ai/glm-5v-turbo:thinking` | 203K | | | | | | $1 | $4 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![OpenCode Go logo](https://models.dev/logos/opencode-go.svg)OpenCode Go
6
6
 
7
- Access 41 OpenCode Go models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
7
+ Access 42 OpenCode Go models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [OpenCode Go documentation](https://opencode.ai/docs/go).
10
10
 
@@ -56,6 +56,7 @@ for await (const chunk of stream) {
56
56
  | `opencode-go/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
57
57
  | `opencode-go/kimi-k3` | 1.0M | | | | | | $3 | $15 |
58
58
  | `opencode-go/longcat-2.0` | 1.0M | | | | | | $0.30 | $1 |
59
+ | `opencode-go/longcat-2.5-preview-free` | 1.0M | | | | | | — | — |
59
60
  | `opencode-go/mimo-v2.5` | 1.0M | | | | | | $0.14 | $0.28 |
60
61
  | `opencode-go/mimo-v2.5-pro` | 1.0M | | | | | | $0.43 | $0.87 |
61
62
  | `opencode-go/mimo-v2.6-flash` | 1.0M | | | | | | $0.14 | $0.28 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![OpenCode Zen logo](https://models.dev/logos/opencode.svg)OpenCode Zen
6
6
 
7
- Access 110 OpenCode Zen models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
7
+ Access 112 OpenCode Zen models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [OpenCode Zen documentation](https://opencode.ai/docs/zen).
10
10
 
@@ -100,12 +100,12 @@ for await (const chunk of stream) {
100
100
  | `opencode/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
101
101
  | `opencode/kimi-k3` | 1.0M | | | | | | $3 | $15 |
102
102
  | `opencode/ling-3.0-flash-fin-free` | 262K | | | | | | — | — |
103
+ | `opencode/longcat-2.5-preview-free` | 1.0M | | | | | | — | — |
103
104
  | `opencode/mimo-v2.6-flash-free` | 200K | | | | | | — | — |
104
105
  | `opencode/minimax-m2.5` | 205K | | | | | | $0.30 | $1 |
105
106
  | `opencode/minimax-m2.7` | 205K | | | | | | $0.30 | $1 |
106
107
  | `opencode/minimax-m3` | 512K | | | | | | $0.30 | $1 |
107
108
  | `opencode/muse-spark-1.2` | 1.0M | | | | | | $1 | $4 |
108
- | `opencode/muse-spark-1.2-contributor-free` | 1.0M | | | | | | — | — |
109
109
  | `opencode/muse-spark-1.3` | 1.0M | | | | | | $1 | $4 |
110
110
  | `opencode/muse-spark-1.3-contributor-free` | 1.0M | | | | | | — | — |
111
111
  | `opencode/nemotron-3-ultra-free` | 1.0M | | | | | | — | — |
@@ -113,6 +113,7 @@ for await (const chunk of stream) {
113
113
  | `opencode/qwen3.5-plus` | 262K | | | | | | $0.20 | $1 |
114
114
  | `opencode/qwen3.6-plus` | 262K | | | | | | $0.50 | $3 |
115
115
  | `opencode/qwen3.8-flash` | 1.0M | | | | | | $0.15 | $0.47 |
116
+ | `opencode/qwen3.8-max` | 262K | | | | | | $2 | $6 |
116
117
  | `opencode/space-bunny-free` | 1.0M | | | | | | — | — |
117
118
 
118
119
  Model availability, capabilities, context windows, and pricing are sourced from [models.dev](https://models.dev) and may change.
@@ -54,8 +54,8 @@ for await (const chunk of stream) {
54
54
  | `requesty/claude-opus-4-8` | 1.0M | | | | | | $5 | $25 |
55
55
  | `requesty/claude-opus-4-8@eu` | 1.0M | | | | | | $6 | $28 |
56
56
  | `requesty/claude-opus-5` | 1.0M | | | | | | $5 | $25 |
57
- | `requesty/claude-opus-5-5` | 1.0M | | | | | | $5 | $25 |
58
- | `requesty/claude-opus-5-5@eu` | 1.0M | | | | | | $6 | $28 |
57
+ | `requesty/claude-opus-5-5` | 1.0M | | | | | | $4 | $20 |
58
+ | `requesty/claude-opus-5-5@eu` | 1.0M | | | | | | $4 | $22 |
59
59
  | `requesty/claude-opus-5@eu` | 1.0M | | | | | | $6 | $28 |
60
60
  | `requesty/claude-sonnet-4-5` | 1.0M | | | | | | $3 | $15 |
61
61
  | `requesty/claude-sonnet-4-5@eu` | 1.0M | | | | | | $3 | $17 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![ZenMux logo](https://models.dev/logos/zenmux.svg)ZenMux
6
6
 
7
- Access 122 ZenMux models through Mastra's model router. Authentication is handled automatically using the `ZENMUX_API_KEY` environment variable.
7
+ Access 129 ZenMux models through Mastra's model router. Authentication is handled automatically using the `ZENMUX_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [ZenMux documentation](https://docs.zenmux.ai).
10
10
 
@@ -39,6 +39,7 @@ for await (const chunk of stream) {
39
39
  | Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
40
40
  | --------------------------------------------- | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
41
41
  | `zenmux/anthropic/claude-fable-5` | 1.0M | | | | | | $10 | $50 |
42
+ | `zenmux/anthropic/claude-fable-5.1` | 1.0M | | | | | | $10 | $50 |
42
43
  | `zenmux/anthropic/claude-haiku-4.5` | 200K | | | | | | $1 | $5 |
43
44
  | `zenmux/anthropic/claude-opus-4` | 200K | | | | | | $15 | $75 |
44
45
  | `zenmux/anthropic/claude-opus-4.1` | 200K | | | | | | $15 | $75 |
@@ -46,6 +47,7 @@ for await (const chunk of stream) {
46
47
  | `zenmux/anthropic/claude-opus-4.6` | 1.0M | | | | | | $5 | $25 |
47
48
  | `zenmux/anthropic/claude-opus-4.7` | 1.0M | | | | | | $5 | $25 |
48
49
  | `zenmux/anthropic/claude-opus-4.8` | 1.0M | | | | | | $5 | $25 |
50
+ | `zenmux/anthropic/claude-opus-5.5` | 1.0M | | | | | | $4 | $20 |
49
51
  | `zenmux/anthropic/claude-sonnet-4` | 1.0M | | | | | | $3 | $15 |
50
52
  | `zenmux/anthropic/claude-sonnet-4.5` | 1.0M | | | | | | $3 | $15 |
51
53
  | `zenmux/anthropic/claude-sonnet-4.6` | 1.0M | | | | | | $3 | $15 |
@@ -56,6 +58,7 @@ for await (const chunk of stream) {
56
58
  | `zenmux/deepseek/deepseek-v3.2-exp` | 163K | | | | | | $0.22 | $0.33 |
57
59
  | `zenmux/deepseek/deepseek-v4-flash` | 1.0M | | | | | | $0.14 | $0.28 |
58
60
  | `zenmux/deepseek/deepseek-v4-pro` | 1.0M | | | | | | $0.43 | $0.87 |
61
+ | `zenmux/deepseek/deepseek-v4.1-flash` | 1.0M | | | | | | $0.15 | $0.60 |
59
62
  | `zenmux/google/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
60
63
  | `zenmux/google/gemini-2.5-flash-lite` | 1.0M | | | | | | $0.10 | $0.40 |
61
64
  | `zenmux/google/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
@@ -77,6 +80,7 @@ for await (const chunk of stream) {
77
80
  | `zenmux/moonshotai/kimi-k2.6` | 262K | | | | | | $0.95 | $4 |
78
81
  | `zenmux/moonshotai/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
79
82
  | `zenmux/moonshotai/kimi-k2.7-code-free` | 262K | | | | | | — | — |
83
+ | `zenmux/moonshotai/kimi-k2.7-code-highspeed` | 262K | | | | | | $2 | $8 |
80
84
  | `zenmux/moonshotai/kimi-k3` | 1.0M | | | | | | $3 | $15 |
81
85
  | `zenmux/moonshotai/kimi-k3-free` | 1.0M | | | | | | — | — |
82
86
  | `zenmux/openai/gpt-5` | 400K | | | | | | $1 | $10 |
@@ -99,6 +103,8 @@ for await (const chunk of stream) {
99
103
  | `zenmux/openai/gpt-5.6-luna` | 1.1M | | | | | | $1 | $6 |
100
104
  | `zenmux/openai/gpt-5.6-sol` | 1.1M | | | | | | $5 | $30 |
101
105
  | `zenmux/openai/gpt-5.6-terra` | 1.1M | | | | | | $3 | $15 |
106
+ | `zenmux/openai/gpt-6-astra` | 1.1M | | | | | | $10 | $50 |
107
+ | `zenmux/openai/gpt-6-sol` | 1.1M | | | | | | $2 | $10 |
102
108
  | `zenmux/qwen/qwen3-coder-plus` | 1.0M | | | | | | $1 | $5 |
103
109
  | `zenmux/qwen/qwen3-max` | 256K | | | | | | $1 | $6 |
104
110
  | `zenmux/qwen/qwen3.5-flash` | 1.0M | | | | | | $0.10 | $0.40 |
@@ -131,6 +137,7 @@ for await (const chunk of stream) {
131
137
  | `zenmux/xiaomi/mimo-v2-pro` | 1.0M | | | | | | $1 | $3 |
132
138
  | `zenmux/xiaomi/mimo-v2.5` | 1.0M | | | | | | $0.40 | $2 |
133
139
  | `zenmux/xiaomi/mimo-v2.5-pro` | 1.0M | | | | | | $1 | $3 |
140
+ | `zenmux/xiaomi/mimo-v2.6-pro` | 1.0M | | | | | | $0.43 | $0.87 |
134
141
  | `zenmux/z-ai/glm-4.5` | 128K | | | | | | $0.29 | $1 |
135
142
  | `zenmux/z-ai/glm-4.5-air` | 128K | | | | | | $0.12 | $0.29 |
136
143
  | `zenmux/z-ai/glm-4.6` | 200K | | | | | | $0.29 | $1 |
@@ -268,6 +268,8 @@ Returns: `boolean`. `false` when this process has no active run recorded for the
268
268
 
269
269
  ### Recovery
270
270
 
271
+ > **Warning:** Recovery re-drives a run from its last persisted snapshot. Mastra treats a sub-agent delegation as one generated `agent-<name>` tool step and doesn't checkpoint its inner LLM or tool calls independently. If recovery replays that step, the entire sub-agent run can execute again, including already-completed tool side effects. Make tools used by sub-agents idempotent, or deduplicate their external side effects. See [crash recovery](https://mastra.ai/docs/harness/durable-agents) for operational guidance.
272
+
271
273
  #### `listActiveRuns(options?)`
272
274
 
273
275
  Lists this agent's runs whose persisted snapshot is in `running` status: runs whose agentic loop was mid-execution when the workflow engine last saved state. On a live process they transition to `suspended` or a terminal status. After a crash or restart they stay `running` with nothing driving them, which is what `recoverActiveRuns()` re-drives. Runs started by other durable agents on the same storage aren't included.
@@ -26,6 +26,25 @@ The provider's `baseUrl` is the public URL the platform sends webhooks and event
26
26
 
27
27
  Mastra includes [`SlackProvider`](https://mastra.ai/reference/channels/slack-provider) and [`TelegramProvider`](https://mastra.ai/reference/channels/telegram-provider) implementations. Build a custom provider by implementing this interface.
28
28
 
29
+ ## Dynamic resolution
30
+
31
+ Instead of a static record, `channels` also accepts a resolver: an async function returning the current provider map, with a synchronous `getRoutes()` method. Mastra mounts the resolver's routes at construction and resolves providers at runtime, so connections added after boot become usable without a redeploy. The `channels()` helper from `@mastra/connect` returns a resolver backed by the Mastra platform.
32
+
33
+ ```typescript
34
+ import { Mastra } from '@mastra/core/mastra'
35
+ import { channels } from '@mastra/connect'
36
+
37
+ export const mastra = new Mastra({
38
+ channels: await channels({ projectId: process.env.MASTRA_PROJECT_ID! }),
39
+ })
40
+ ```
41
+
42
+ With a resolver configured, call `resolveChannels()` to get the current provider map. It also works with a static record, where it returns the record directly.
43
+
44
+ ```typescript
45
+ const providers = await mastra.resolveChannels()
46
+ ```
47
+
29
48
  ## Properties
30
49
 
31
50
  **id** (`string`): Unique identifier for this channel type, for example 'slack' or 'discord'. Used as the key when routing events and looking the provider up from Mastra.
@@ -54,7 +73,7 @@ Access a registered provider through the `channels` getter, keyed by the id you
54
73
  await mastra.channels.slack.configure({ refreshToken })
55
74
  ```
56
75
 
57
- When the key is only known at runtime, look the provider up by string id instead. `getChannelProvider` takes the concrete type as a generic, and `getChannelProviders` returns every registered provider keyed by id.
76
+ When the key is only known at runtime, look the provider up by string id instead. `getChannelProvider` takes the concrete type as a generic, and `getChannelProviders` returns every registered provider keyed by id. With a [resolver](#dynamic-resolution), both return the latest resolved snapshot. Use `resolveChannels()` when you need providers that reflect the current platform state.
58
77
 
59
78
  ```typescript
60
79
  import type { SlackProvider } from '@mastra/slack'
@@ -51,7 +51,9 @@ For the behavioral prompt Mastra Code uses, covering repository exploration, edi
51
51
 
52
52
  **signals** (`SignalProvider[]`): Signal providers for the agent. A TaskSignalProvider is added only when memory is configured, and it is merged into the providers you pass rather than replacing them. Without memory, the agent gets exactly the providers you pass, or none.
53
53
 
54
- **errorProcessors** (`Processor[]`): Error processors for the agent. When omitted, defaults to unknown stream-error retries with specialized ECONNRESET and bad-request policies, plus PrefillErrorHandler and ProviderHistoryCompat.
54
+ **errorProcessors** (`Processor[]`): Error processors for the agent. When omitted, defaults to unknown stream-error retries with specialized ECONNRESET and bad-request policies, plus PrefillErrorHandler, ProviderHistoryCompat, and CyberRefusalHandler.
55
+
56
+ **outputProcessors** (`Processor[]`): Output processors for the agent. When omitted, defaults to CyberRefusalHandler.
55
57
 
56
58
  **goal** (`AgentGoalConfig`): Goal configuration. When provided without a prompt, the prompt defaults to DEFAULT\_GOAL\_JUDGE\_PROMPT.
57
59
 
@@ -63,23 +65,27 @@ For the behavioral prompt Mastra Code uses, covering repository exploration, edi
63
65
 
64
66
  A default is only filled in when you don't provide the corresponding field. `signals` is the exception: the task signal provider is appended to the providers you pass.
65
67
 
66
- | Field | Default when omitted |
67
- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
68
- | `workspace` | A [`Workspace`](https://mastra.ai/reference/workspace/workspace-class) backed by `LocalFilesystem` and `LocalSandbox` rooted at the base path. |
69
- | `signals` | A [`TaskSignalProvider`](https://mastra.ai/reference/signals/task-signal-provider), added only when `memory` is configured. |
70
- | `errorProcessors` | Unknown stream-error retries with specialized ECONNRESET and bad-request policies, plus `PrefillErrorHandler` and `ProviderHistoryCompat`. |
71
- | `goal.prompt` | `DEFAULT_GOAL_JUDGE_PROMPT` (only when a `goal` is configured). |
68
+ | Field | Default when omitted |
69
+ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
70
+ | `workspace` | A [`Workspace`](https://mastra.ai/reference/workspace/workspace-class) backed by `LocalFilesystem` and `LocalSandbox` rooted at the base path. |
71
+ | `signals` | A [`TaskSignalProvider`](https://mastra.ai/reference/signals/task-signal-provider), added only when `memory` is configured. |
72
+ | `errorProcessors` | Unknown stream-error retries with specialized ECONNRESET and bad-request policies, plus `PrefillErrorHandler`, `ProviderHistoryCompat`, and `CyberRefusalHandler`. |
73
+ | `outputProcessors` | [`CyberRefusalHandler`](https://mastra.ai/reference/processors/cyber-refusal-handler). |
74
+ | `maxProcessorRetries` | `DEFAULT_MAX_PROCESSOR_RETRIES` (3), so the output-lane cyber-refusal retry has a budget. |
75
+ | `goal.prompt` | `DEFAULT_GOAL_JUDGE_PROMPT` (only when a `goal` is configured). |
72
76
 
73
- Nothing else is filled in. There's no default `model`, `instructions`, `tools`, `memory`, storage, or input and output processors.
77
+ Nothing else is filled in. There's no default `model`, `instructions`, `tools`, `memory`, storage, or input processors.
74
78
 
75
79
  Each default has an explicit opt-out:
76
80
 
77
- | Default | How to opt out |
78
- | ----------------- | ------------------------------------------- |
79
- | Workspace | `workspace: undefined` |
80
- | Task tracking | Don't configure `memory` on the agent |
81
- | Error processors | `errorProcessors: []` |
82
- | Goal judge prompt | Omit `goal`, or pass your own `goal.prompt` |
81
+ | Default | How to opt out |
82
+ | ---------------------- | ------------------------------------------- |
83
+ | Workspace | `workspace: undefined` |
84
+ | Task tracking | Don't configure `memory` on the agent |
85
+ | Error processors | `errorProcessors: []` |
86
+ | Output processors | `outputProcessors: []` |
87
+ | Processor retry budget | `maxProcessorRetries: 0` |
88
+ | Goal judge prompt | Omit `goal`, or pass your own `goal.prompt` |
83
89
 
84
90
  ### Workspace
85
91
 
@@ -192,6 +198,8 @@ The default [`StreamErrorRetryProcessor`](https://mastra.ai/reference/processors
192
198
 
193
199
  Specific network-reset and bad-request policies take precedence over the unknown-error policy. Passing `errorProcessors` replaces the default processor stack. `PrefillErrorHandler` and `ProviderHistoryCompat` are also included for provider compatibility: both repair errors caused by the shape of the message history, such as a provider rejecting a conversation that ends with an assistant message.
194
200
 
201
+ [`CyberRefusalHandler`](https://mastra.ai/reference/processors/cyber-refusal-handler) retries once when an OpenAI or Anthropic cybersecurity safeguard refuses a step, which often happens to ordinary coding work. It runs in both `errorProcessors` (OpenAI refusals are API errors) and `outputProcessors` (Anthropic refusals finish the step). Passing either list replaces that half of the handler.
202
+
195
203
  Retries happen inside the `generate()` or `stream()` call that hit the error, so a recovered failure is invisible to your code. When the retries run out, the error surfaces the way any model error does: `generate()` rejects and `stream()` emits an `error` chunk. `generate()` and `stream()` also accept `errorProcessors` per call, which replaces the agent's stack for that request. See [Processors](https://mastra.ai/docs/agents/processors) for `maxProcessorRetries`, the retry budget these processors share.
196
204
 
197
205
  ### Goal
@@ -271,6 +271,7 @@ The Reference section provides documentation of Mastra's API, including paramete
271
271
  - [AgentsMDInjector](https://mastra.ai/reference/processors/agents-md-injector)
272
272
  - [BatchPartsProcessor](https://mastra.ai/reference/processors/batch-parts-processor)
273
273
  - [ClassifierProcessor](https://mastra.ai/reference/processors/classifier-processor)
274
+ - [CyberRefusalHandler](https://mastra.ai/reference/processors/cyber-refusal-handler)
274
275
  - [LanguageDetector](https://mastra.ai/reference/processors/language-detector)
275
276
  - [MemoryInputFilter](https://mastra.ai/reference/processors/memory-input-filter)
276
277
  - [MessageHistory](https://mastra.ai/reference/processors/message-history-processor)
@@ -69,6 +69,10 @@ OM performs thresholding with fast local token estimation. Text uses `tokenx`, a
69
69
 
70
70
  **observation.observeAttachments** (`'auto' | boolean | string[]`): Controls which image/file attachments are forwarded to the Observer model alongside their placeholder text lines. true (default) forwards all attachments. false drops all attachments while keeping placeholders visible. 'auto' uses the provider capabilities registry to decide: attachments are forwarded when the Observer model supports multimodal input, dropped otherwise, and forwarded when no capability data is available for the model. An array is a case-insensitive mimeType allowlist supporting exact matches ('application/pdf'), wildcard subtypes ('image/\*'), and bare '\*' for everything. Useful when the Observer model is text-only (e.g. some DeepSeek endpoints) while the main agent uses a multimodal model. Tool-result attachments are filtered using the same rule.
71
71
 
72
+ **observation.maxRetries** (`number`): Retries after the initial Observer model call on transient provider errors. Governs OM's own retry ladder; the Observer model call itself is configured with no provider-level retries.
73
+
74
+ **observation.failurePolicy** (`'abort' | 'continue'`): Terminal policy once Observer retries are exhausted. 'abort' aborts the agent turn. 'continue' emits the existing failure diagnostic, keeps the failed input pending for a later cycle, and allows the main agent turn to continue. Persistence, indexing, transform, locking, invariant, and explicit abort failures remain fatal. This setting doesn't prevent the underlying provider error or change blockAfter or attachment handling, and it has no backstop for a sustained outage: pending messages keep accruing in the main agent's context until they reach the model's context limit.
75
+
72
76
  **observation.messageTokens** (`number`): Token count of unobserved messages that triggers observation. When unobserved message tokens exceed this threshold, the Observer agent is called. Text is estimated locally with tokenx. Image parts are included with model-aware heuristics when possible, with deterministic fallbacks when image metadata is incomplete. Image-like file parts are counted the same way when uploads are normalized as files.
73
77
 
74
78
  **observation.maxTokensPerBatch** (`number`): Maximum tokens per batch when observing multiple threads in resource scope (deprecated). Threads are chunked into batches of this size and processed in parallel. Lower values mean more parallelism but more API calls.
@@ -99,6 +103,10 @@ OM performs thresholding with fast local token estimation. Text uses `tokenx`, a
99
103
 
100
104
  **reflection.model** (`string | LanguageModel | DynamicModel | ModelByInputTokens | ModelWithRetries[]`): Model for the Reflector agent. Cannot be set if a top-level model is also provided. If neither this nor the top-level model is set, falls back to observation.model.
101
105
 
106
+ **reflection.maxRetries** (`number`): Retries after the initial Reflector model call on transient provider errors. Governs OM's own retry ladder; the Reflector model call itself is configured with no provider-level retries.
107
+
108
+ **reflection.failurePolicy** (`'abort' | 'continue'`): Terminal policy once Reflector retries are exhausted. 'abort' aborts the agent turn. 'continue' emits the failure diagnostic and allows the turn to continue, leaving already-persisted observations committed and deferring reflection to the next threshold crossing. A provider outage usually takes out both stages, so set the policy on observation too if the turn should survive one.
109
+
102
110
  **reflection.instruction** (`string`): Custom instruction appended to the Reflector's system prompt. Use this to customize how the Reflector consolidates observations, such as prioritizing certain types of information.
103
111
 
104
112
  **reflection.continuationHints** (`boolean | { currentTask?: boolean; suggestedResponse?: boolean }`): Which continuation-hint sections the Reflector emits. Pass false to disable both, or an object to disable them individually. A previously stored hint stops being injected into context once both observation and reflection disable its section.
@@ -32,6 +32,8 @@ Add the processor to an agent's `inputProcessors`. Each invocation injects at mo
32
32
 
33
33
  **getReader** (`(args: ProcessInputStepArgs) => ReminderFileReader | undefined`): Select a reader for this request. Returning undefined keeps the instance defaults.
34
34
 
35
+ **getBasePath** (`(args: ProcessInputStepArgs) => string | undefined`): Return the project root for this request. Relative tool paths resolve against it instead of process.cwd(), and instruction files outside it are never loaded. Returning undefined keeps process.cwd() resolution with no boundary.
36
+
35
37
  ## `ReminderFileReader`
36
38
 
37
39
  A reader controls both file access and optional path identity. Return one from `getReader` when instruction files live in a virtual filesystem or a trusted git ref rather than the current checkout.