@juspay/neurolink 13.1.1 → 13.3.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/README.md +71 -52
  3. package/dist/browser/neurolink.min.js +411 -411
  4. package/dist/cli/commands/decide.d.ts +2 -1
  5. package/dist/cli/commands/decide.js +2 -1
  6. package/dist/cli/commands/setup.d.ts +1 -1
  7. package/dist/cli/commands/setup.js +1 -1
  8. package/dist/cli/factories/commandFactory.js +1 -1
  9. package/dist/constants/contextWindows.d.ts +7 -0
  10. package/dist/constants/contextWindows.js +48 -0
  11. package/dist/constants/enums.d.ts +5 -0
  12. package/dist/constants/enums.js +6 -0
  13. package/dist/core/baseProvider.d.ts +0 -1
  14. package/dist/core/baseProvider.js +5 -2
  15. package/dist/factories/providerDescriptors.js +13 -9
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +1 -0
  18. package/dist/middleware/defaults.d.ts +68 -0
  19. package/dist/middleware/defaults.js +225 -0
  20. package/dist/middleware/factory.js +4 -15
  21. package/dist/middleware/presets.d.ts +12 -0
  22. package/dist/middleware/presets.js +29 -0
  23. package/dist/neurolink.d.ts +9 -0
  24. package/dist/neurolink.js +38 -1
  25. package/dist/providers/catalog/charm-hyper.json +6 -10
  26. package/dist/providers/catalog/index.generated.d.ts +1 -1
  27. package/dist/providers/catalog/index.generated.js +3 -0
  28. package/dist/providers/catalog/openai-decisions.json +1 -1
  29. package/dist/providers/catalog/provider-catalog.schema.json +8 -0
  30. package/dist/providers/catalog/scaledown.json +68 -0
  31. package/dist/providers/catalog/schema.js +2 -0
  32. package/dist/providers/configuredDecision.d.ts +5 -0
  33. package/dist/providers/configuredDecision.js +27 -5
  34. package/dist/types/classifierRouter.d.ts +10 -9
  35. package/dist/types/cli.d.ts +2 -2
  36. package/dist/types/config.d.ts +22 -0
  37. package/dist/types/providerCatalog.d.ts +22 -0
  38. package/dist/types/providerCatalog.generated.d.ts +2 -2
  39. package/dist/types/providers.d.ts +4 -0
  40. package/dist/utils/pricing.js +12 -0
  41. package/dist/utils/tokenLimits.js +20 -1
  42. package/docs-site/static/search-index.json +128 -100
  43. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -1,8 +1,8 @@
1
- ## [13.1.1](https://github.com/juspay/neurolink/compare/v13.1.0...v13.1.1) (2026-10-18)
1
+ ## [13.3.0](https://github.com/juspay/neurolink/compare/v13.2.0...v13.3.0) (2026-10-18)
2
2
 
3
- ### Bug Fixes
3
+ ### Features
4
4
 
5
- - **(providers):** skip Bedrock and SageMaker in the provider status probe ([228c68c](https://github.com/juspay/neurolink/commit/228c68c82ff0c1c7cecc6cfd92d6a571f2249ebc))
5
+ - **(middleware):** add constructor and global middleware defaults ([a61c7bd](https://github.com/juspay/neurolink/commit/a61c7bd61ae25f6629dd0ec0c97f1f9f158fb044))
6
6
 
7
7
  ## [11.2.3](https://github.com/juspay/neurolink/compare/v11.2.2...v11.2.3) (2026-08-19)
8
8
 
package/README.md CHANGED
@@ -59,37 +59,37 @@ Extracted from production systems at Juspay, NeuroLink provides a practical, Typ
59
59
 
60
60
  ## What's New
61
61
 
62
- | Feature | Version | Description | Guide |
63
- | ---------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
64
- | **`decide` Inference Type + TypeSafe Jev + Laya + XOR + SubQ + Perplexity + Cloudflare Clef + OpenAI Decisions** | next | A third inference type alongside `generate`/`stream`: typed, calibrated judgments (`boolean`, `choice`, `score`) via `neurolink.decide()` / `tryDecide()`, one parallel pass (~400ms and ~$0.00002/decision on Jev). Providers: TypeSafe Jev (`TYPESAFE_API_KEY`, also reachable via the Vercel AI Gateway); [Laya](docs/getting-started/providers/laya.md) (`LAYA_API_KEY` + `LAYA_BASE_URL`), an open-weights model you run yourself; [XOR](docs/getting-started/providers/xor.md) (`XOR_API_KEY` + `XOR_BASE_URL`), Juspay's open-weights model; [SubQ](docs/getting-started/providers/subq.md) (`SUBQ_API_KEY`), Subquadratic's hosted SubQ Snap; [Perplexity](docs/getting-started/providers/perplexity-decider.md) (`PERPLEXITY_API_KEY`, the same key as its text provider), a hosted API that also reads images; and [Cloudflare Clef](docs/getting-started/providers/cloudflare-clef.md) (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`, the same two as the Workers AI text provider), hosted on Workers AI, which also reads images; and [OpenAI Decisions](docs/getting-started/providers/openai-decisions.md) (`OPENAI_API_KEY`, the same key as the OpenAI chat provider), OpenAI's Decisions API in public beta, which also reads images — the first one configured, in that order, runs, so an OpenAI key alone makes OpenAI Decisions the last resort. Used internally for model routing, context budgeting, relevance compaction and tool routing — fail-open and a no-op when no decision provider is configured. Per-query RAG planning is opt-in via `RAGPipeline`. | [Decide Guide](docs/features/decide-inference-type.md) |
65
- | **7 More Catalog Providers** | v12.11.0–v12.16.0 | Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage and API Route onboarded as Tier-2 catalog entries — one JSON file each, roster live-verified against the provider's own `/v1/models`. | [Tier 2 Onboarding](docs/provider-integration/tiers/tier-2-catalog-entry.md) |
66
- | **Claude-on-Vertex Proxy Fallback** | v12.18.0 | The Anthropic proxy pool can fall back to Claude served on Google Vertex, so an agentic turn survives losing its primary backend mid-conversation instead of failing the turn. | [Claude Proxy](docs/features/claude-proxy.md) |
67
- | **Native-Loop V3 Conversation Reclaim** | v12.17.0 | Reclaims V3 conversations without splitting tool-call/tool-result pairs — the pairing a provider rejects the whole request over. | [Claude Proxy Architecture](docs/features/claude-proxy-architecture.md) |
68
- | **Multi-Modal Embeddings** | v12.15.0 | `embed()` / `embedMany()` accept images alongside text on providers whose embedding models are multi-modal, for cross-modal retrieval in RAG and custom vector search. | [Embeddings Guide](docs/features/embeddings.md) |
69
- | **Grok Build Auto-Configuration** | v12.14.0 | The proxy configures Grok Build automatically, deriving context windows and backends from the model catalog rather than hardcoded values. | [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
70
- | **Anthropic Execution-Control Contract** | v12.13.0 | Truthful stream termination plus an opt-in execution-control contract, so a stream that stopped early reports why instead of looking like a clean finish. | [Claude Proxy](docs/features/claude-proxy.md) |
71
- | **Catalog Tool Declarations Honoured at Runtime** | v12.12.0 | A Tier-2 catalog entry declaring `tools: false` (e.g. Mancer) no longer has tools offered to it at runtime — the JSON declaration is enforced, not just documented. | [Tier 2 Onboarding](docs/provider-integration/tiers/tier-2-catalog-entry.md) |
72
- | **Artifact Stores: Redis, Custom, Range Reads, Search** | v12.10.0 | Artifacts can be backed by Redis or a custom store, read by byte range, and searched — instead of being held only in process memory. | [Claude Proxy](docs/features/claude-proxy.md) |
73
- | **Local CLI Spend Reading** | v12.6.0–v12.9.0 | Reads token usage directly from other coding CLIs' own local stores — Cursor, Grok Build, Hermes Agent and three more — and names them in proxy traffic, so spend is attributed per client. | [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
74
- | **Native OpenAI Audio Streaming** | v12.7.0 | OpenAI TTS audio streams natively rather than being buffered to completion first. | [TTS Guide](docs/features/tts.md) |
75
- | **HITL Pending-Confirmation State** | v12.5.0 | Exposes whether a human-in-the-loop confirmation is still outstanding, so a caller can distinguish 'waiting on a human' from 'finished'. | [Task Manager](docs/features/task-manager.md) |
76
- | **OpenCode + Gemini CLI Proxy Clients** | v12.4.0 | OpenCode's generated config is actually loadable, and Gemini CLI is onboarded as a proxy client. | [OpenCode Proxy](docs/features/opencode-proxy-support.md) \| [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
77
- | **SambaNova Provider** | v12.3.0 | RDU-accelerated open-weight flagships: Llama 3.3 70B (default), GPT-OSS 120B, DeepSeek V3.x, MiniMax, Gemma 4 (vision) — OpenAI-compatible Tier 2 catalog entry. Note: new SambaNova accounts require purchased credits. | [SambaNova Guide](docs/getting-started/providers/sambanova.md) |
78
- | **Cerebras Provider** | v12.1.0 | Wafer-scale inference at ~3000 tok/s: GPT-OSS 120B (default) + Gemma 4 31B, OpenAI-compatible Tier 2 catalog entry, live-verified end to end (generate, stream, tools, structured output). | [Cerebras Guide](docs/getting-started/providers/cerebras.md) |
79
- | **Avatar / Music Modalities + 12 Providers** | v9.65.0 | New `output: { mode: "avatar" \| "music" }` dispatch with handlers for D-ID, HeyGen, Replicate-MuseTalk (avatar) and Beatoven, ElevenLabs Music, Lyria, Replicate-MusicGen (music). Plus Fish Audio TTS, Kling/Runway/Replicate video, xAI/Groq/Cohere/Together/Fireworks/Perplexity/Cloudflare LLMs, Voyage/Jina embeddings, Stability/Ideogram/Recraft/Replicate image-gen. | [Provider Integration](docs/provider-integration/) |
80
- | **Multi-Provider Voice (TTS/STT)** | v9.62.0 | 6 TTS providers (OpenAI TTS, ElevenLabs, Google TTS, Azure TTS, Fish Audio, Cartesia) + 4 STT providers (Whisper, Deepgram, Azure STT, Google STT) + 2 realtime APIs (OpenAI Realtime, Gemini Live). | [TTS Guide](docs/features/tts.md) \| [STT Guide](docs/features/audio-input.md) \| [Realtime Guide](docs/features/real-time-services.md) |
81
- | **4 New Providers** | v9.60.0 | DeepSeek (V3/R1), NVIDIA NIM (400+ catalog), LM Studio (local), llama.cpp (GGUF local). | [Provider Setup](docs/getting-started/provider-setup.md) |
82
- | **ModelAccessDeniedError** | v9.59.0 | Typed `ModelAccessDeniedError` + `sdk.checkCredentials()` API for proactive credential validation before first call. | [Error Reference](docs/reference/troubleshooting.md) |
83
- | **Provider Fallback Policy** | v9.58.0 | `providerFallback` callback + `modelChain` config for centralized multi-provider fallback logic. | [Advanced Guide](docs/advanced/index.md) |
84
- | **Per-Request Credentials** | v9.52.0 | Pass credentials per-call or per-instance for all providers. Per-call overrides instance; instance overrides env vars. | [Credentials Guide](docs/features/per-request-credentials.md) |
85
- | **AutoResearch** | v9.53.0 | Autonomous AI experiment engine: proposes code changes, runs experiments, evaluates metrics — unattended for hours. | [AutoResearch Guide](docs/features/autoresearch.md) |
86
- | **Gemini 3 Multi-turn Tool Fix** | v9.49.0 | Fixed multi-step agentic tool calling on Vertex AI Gemini 3. Correct `thoughtSignature` replay, `stepIndex` grouping, `executionId` session isolation, 5-min timeout. | [Vertex AI Guide](docs/getting-started/providers/google-vertex.md) |
87
- | **MCP Enhancements** | v9.16.0 | Tool routing (6 strategies), result caching (LRU/FIFO/LFU), request batching, annotations, elicitation protocol, multi-server management. | [MCP Enhancements Guide](docs/features/mcp-enhancements.md) |
88
- | **Memory** | v9.12.0 | Per-user condensed memory across conversations. LLM-powered condensation with S3, Redis, or SQLite. | [Memory Guide](docs/features/memory.md) |
89
- | **Context Window Management** | v9.2.0 | 5-stage compaction pipeline with budget gate at 80% usage, per-provider token estimation. | [Context Compaction Guide](docs/features/context-compaction.md) |
90
- | **Tool Execution Control** | v9.3.0 | `prepareStep` and `toolChoice` for per-step tool enforcement in multi-step agentic loops. | [API Reference](docs/api/type-aliases/GenerateOptions.md#preparestep) |
91
- | **File Processor System** | v9.1.0 | 17+ file type processors with ProcessorRegistry, security sanitization, SVG text injection. | [File Processors Guide](docs/features/file-processors.md) |
92
- | **RAG with generate()/stream()** | v9.2.0 | Pass `rag: { files }` for automatic document chunking, embedding, and AI-powered search. 10 chunking strategies, hybrid search, reranking, and a choice of 4 vector stores (in-memory, Chroma, PgVector, Pinecone). | [RAG Guide](docs/features/rag.md) |
62
+ | Feature | Version | Description | Guide |
63
+ | ---------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
64
+ | **`decide` Inference Type + TypeSafe Jev + Laya + XOR + SubQ + Perplexity + Cloudflare Clef + OpenAI Decisions + ScaleDown** | next | A third inference type alongside `generate`/`stream`: typed, calibrated judgments (`boolean`, `choice`, `score`) via `neurolink.decide()` / `tryDecide()`, one parallel pass (~400ms and ~$0.00002/decision on Jev). Providers: TypeSafe Jev (`TYPESAFE_API_KEY`, also reachable via the Vercel AI Gateway); [Laya](docs/getting-started/providers/laya.md) (`LAYA_API_KEY` + `LAYA_BASE_URL`), an open-weights model you run yourself; [XOR](docs/getting-started/providers/xor.md) (`XOR_API_KEY` + `XOR_BASE_URL`), Juspay's open-weights model; [SubQ](docs/getting-started/providers/subq.md) (`SUBQ_API_KEY`), Subquadratic's hosted SubQ Snap; [Perplexity](docs/getting-started/providers/perplexity-decider.md) (`PERPLEXITY_API_KEY`, the same key as its text provider), a hosted API that also reads images; and [Cloudflare Clef](docs/getting-started/providers/cloudflare-clef.md) (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`, the same two as the Workers AI text provider), hosted on Workers AI, which also reads images; and [OpenAI Decisions](docs/getting-started/providers/openai-decisions.md) (`OPENAI_API_KEY`, the same key as the OpenAI chat provider), OpenAI's Decisions API in public beta, which also reads images; and [ScaleDown](docs/getting-started/providers/scaledown.md) (`SCALEDOWN_API_KEY`, its own key), a hosted API that reads text only — the first one configured, in that order, runs, so an OpenAI key alone makes OpenAI Decisions the default (only ScaleDown comes after it) and a ScaleDown key alone makes ScaleDown the default one. Used internally for model routing, context budgeting, relevance compaction and tool routing — fail-open and a no-op when no decision provider is configured. Per-query RAG planning is opt-in via `RAGPipeline`. | [Decide Guide](docs/features/decide-inference-type.md) |
65
+ | **7 More Catalog Providers** | v12.11.0–v12.16.0 | Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage and API Route onboarded as Tier-2 catalog entries — one JSON file each, roster live-verified against the provider's own `/v1/models`. | [Tier 2 Onboarding](docs/provider-integration/tiers/tier-2-catalog-entry.md) |
66
+ | **Claude-on-Vertex Proxy Fallback** | v12.18.0 | The Anthropic proxy pool can fall back to Claude served on Google Vertex, so an agentic turn survives losing its primary backend mid-conversation instead of failing the turn. | [Claude Proxy](docs/features/claude-proxy.md) |
67
+ | **Native-Loop V3 Conversation Reclaim** | v12.17.0 | Reclaims V3 conversations without splitting tool-call/tool-result pairs — the pairing a provider rejects the whole request over. | [Claude Proxy Architecture](docs/features/claude-proxy-architecture.md) |
68
+ | **Multi-Modal Embeddings** | v12.15.0 | `embed()` / `embedMany()` accept images alongside text on providers whose embedding models are multi-modal, for cross-modal retrieval in RAG and custom vector search. | [Embeddings Guide](docs/features/embeddings.md) |
69
+ | **Grok Build Auto-Configuration** | v12.14.0 | The proxy configures Grok Build automatically, deriving context windows and backends from the model catalog rather than hardcoded values. | [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
70
+ | **Anthropic Execution-Control Contract** | v12.13.0 | Truthful stream termination plus an opt-in execution-control contract, so a stream that stopped early reports why instead of looking like a clean finish. | [Claude Proxy](docs/features/claude-proxy.md) |
71
+ | **Catalog Tool Declarations Honoured at Runtime** | v12.12.0 | A Tier-2 catalog entry declaring `tools: false` (e.g. Mancer) no longer has tools offered to it at runtime — the JSON declaration is enforced, not just documented. | [Tier 2 Onboarding](docs/provider-integration/tiers/tier-2-catalog-entry.md) |
72
+ | **Artifact Stores: Redis, Custom, Range Reads, Search** | v12.10.0 | Artifacts can be backed by Redis or a custom store, read by byte range, and searched — instead of being held only in process memory. | [Claude Proxy](docs/features/claude-proxy.md) |
73
+ | **Local CLI Spend Reading** | v12.6.0–v12.9.0 | Reads token usage directly from other coding CLIs' own local stores — Cursor, Grok Build, Hermes Agent and three more — and names them in proxy traffic, so spend is attributed per client. | [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
74
+ | **Native OpenAI Audio Streaming** | v12.7.0 | OpenAI TTS audio streams natively rather than being buffered to completion first. | [TTS Guide](docs/features/tts.md) |
75
+ | **HITL Pending-Confirmation State** | v12.5.0 | Exposes whether a human-in-the-loop confirmation is still outstanding, so a caller can distinguish 'waiting on a human' from 'finished'. | [Task Manager](docs/features/task-manager.md) |
76
+ | **OpenCode + Gemini CLI Proxy Clients** | v12.4.0 | OpenCode's generated config is actually loadable, and Gemini CLI is onboarded as a proxy client. | [OpenCode Proxy](docs/features/opencode-proxy-support.md) \| [Proxy CLI Onboarding](docs/features/proxy-cli-onboarding.md) |
77
+ | **SambaNova Provider** | v12.3.0 | RDU-accelerated open-weight flagships: Llama 3.3 70B (default), GPT-OSS 120B, DeepSeek V3.x, MiniMax, Gemma 4 (vision) — OpenAI-compatible Tier 2 catalog entry. Note: new SambaNova accounts require purchased credits. | [SambaNova Guide](docs/getting-started/providers/sambanova.md) |
78
+ | **Cerebras Provider** | v12.1.0 | Wafer-scale inference at ~3000 tok/s: GPT-OSS 120B (default) + Gemma 4 31B, OpenAI-compatible Tier 2 catalog entry, live-verified end to end (generate, stream, tools, structured output). | [Cerebras Guide](docs/getting-started/providers/cerebras.md) |
79
+ | **Avatar / Music Modalities + 12 Providers** | v9.65.0 | New `output: { mode: "avatar" \| "music" }` dispatch with handlers for D-ID, HeyGen, Replicate-MuseTalk (avatar) and Beatoven, ElevenLabs Music, Lyria, Replicate-MusicGen (music). Plus Fish Audio TTS, Kling/Runway/Replicate video, xAI/Groq/Cohere/Together/Fireworks/Perplexity/Cloudflare LLMs, Voyage/Jina embeddings, Stability/Ideogram/Recraft/Replicate image-gen. | [Provider Integration](docs/provider-integration/) |
80
+ | **Multi-Provider Voice (TTS/STT)** | v9.62.0 | 6 TTS providers (OpenAI TTS, ElevenLabs, Google TTS, Azure TTS, Fish Audio, Cartesia) + 4 STT providers (Whisper, Deepgram, Azure STT, Google STT) + 2 realtime APIs (OpenAI Realtime, Gemini Live). | [TTS Guide](docs/features/tts.md) \| [STT Guide](docs/features/audio-input.md) \| [Realtime Guide](docs/features/real-time-services.md) |
81
+ | **4 New Providers** | v9.60.0 | DeepSeek (V3/R1), NVIDIA NIM (400+ catalog), LM Studio (local), llama.cpp (GGUF local). | [Provider Setup](docs/getting-started/provider-setup.md) |
82
+ | **ModelAccessDeniedError** | v9.59.0 | Typed `ModelAccessDeniedError` + `sdk.checkCredentials()` API for proactive credential validation before first call. | [Error Reference](docs/reference/troubleshooting.md) |
83
+ | **Provider Fallback Policy** | v9.58.0 | `providerFallback` callback + `modelChain` config for centralized multi-provider fallback logic. | [Advanced Guide](docs/advanced/index.md) |
84
+ | **Per-Request Credentials** | v9.52.0 | Pass credentials per-call or per-instance for all providers. Per-call overrides instance; instance overrides env vars. | [Credentials Guide](docs/features/per-request-credentials.md) |
85
+ | **AutoResearch** | v9.53.0 | Autonomous AI experiment engine: proposes code changes, runs experiments, evaluates metrics — unattended for hours. | [AutoResearch Guide](docs/features/autoresearch.md) |
86
+ | **Gemini 3 Multi-turn Tool Fix** | v9.49.0 | Fixed multi-step agentic tool calling on Vertex AI Gemini 3. Correct `thoughtSignature` replay, `stepIndex` grouping, `executionId` session isolation, 5-min timeout. | [Vertex AI Guide](docs/getting-started/providers/google-vertex.md) |
87
+ | **MCP Enhancements** | v9.16.0 | Tool routing (6 strategies), result caching (LRU/FIFO/LFU), request batching, annotations, elicitation protocol, multi-server management. | [MCP Enhancements Guide](docs/features/mcp-enhancements.md) |
88
+ | **Memory** | v9.12.0 | Per-user condensed memory across conversations. LLM-powered condensation with S3, Redis, or SQLite. | [Memory Guide](docs/features/memory.md) |
89
+ | **Context Window Management** | v9.2.0 | 5-stage compaction pipeline with budget gate at 80% usage, per-provider token estimation. | [Context Compaction Guide](docs/features/context-compaction.md) |
90
+ | **Tool Execution Control** | v9.3.0 | `prepareStep` and `toolChoice` for per-step tool enforcement in multi-step agentic loops. | [API Reference](docs/api/type-aliases/GenerateOptions.md#preparestep) |
91
+ | **File Processor System** | v9.1.0 | 17+ file type processors with ProcessorRegistry, security sanitization, SVG text injection. | [File Processors Guide](docs/features/file-processors.md) |
92
+ | **RAG with generate()/stream()** | v9.2.0 | Pass `rag: { files }` for automatic document chunking, embedding, and AI-powered search. 10 chunking strategies, hybrid search, reranking, and a choice of 4 vector stores (in-memory, Chroma, PgVector, Pinecone). | [RAG Guide](docs/features/rag.md) |
93
93
 
94
94
  ```typescript
95
95
  // decide() — a third inference type: calibrated judgments, not text (next)
@@ -281,7 +281,7 @@ shorter state than TypeSafe's — about 768 tokens on the default
281
281
  `typed-decisions` checkpoint (320 on `english`/`auto`), against TypeSafe's
282
282
  ~33,000 — so it fits short, structured decisions rather than long context.
283
283
  Every built-in consumer below asks for the first configured decision provider,
284
- in the order TypeSafe, Laya, XOR, SubQ, Perplexity, Cloudflare Clef, OpenAI Decisions: with
284
+ in the order TypeSafe, Laya, XOR, SubQ, Perplexity, Cloudflare Clef, OpenAI Decisions, ScaleDown: with
285
285
  TypeSafe and Laya both configured, TypeSafe runs; with only Laya's key and base URL
286
286
  set, Laya runs.
287
287
 
@@ -291,7 +291,7 @@ open-weights decision model (`xor-1.1`); setup is on
291
291
  either: set `XOR_API_KEY` and `XOR_BASE_URL` to the origin of a deployment or of
292
292
  a LiteLLM proxy route (or pass `credentials.xor`). XOR counts only with both its
293
293
  key and base URL set, and a call can always name it with `provider: "xor"`. It
294
- accepts images and video, which TypeSafe and Laya refuse.
294
+ accepts images and video, which TypeSafe, Laya, SubQ and ScaleDown refuse.
295
295
 
296
296
  [**SubQ**](docs/getting-started/providers/subq.md) is Subquadratic's hosted
297
297
  decision model, SubQ Snap (`subq-snap-preview`, in public preview; provider id
@@ -345,8 +345,8 @@ has a public endpoint, so a key alone configures it: `OPENAI_API_KEY`, or
345
345
  `credentials.openaiDecisions`. **That key is shared with the OpenAI chat
346
346
  provider**, so setting it for chat also configures `decide`: built-in features
347
347
  then use OpenAI Decisions whenever none of TypeSafe, Laya, XOR, SubQ, Perplexity or
348
- Cloudflare Clef is configured, as the last resort, and it never displaces one that
349
- is. A key that sits beside an `OPENAI_BASE_URL`, `OPENAI_API_BASE` or `credentials.openai.baseURL` naming another
348
+ Cloudflare Clef is configured, and it never displaces one that is (only ScaleDown
349
+ comes after it). A key that sits beside an `OPENAI_BASE_URL`, `OPENAI_API_BASE` or `credentials.openai.baseURL` naming another
350
350
  host than `https://api.openai.com` is a gateway's, though, and is never used for
351
351
  the default. Those features (model routing, tool routing, relevance compaction, the summary
352
352
  gate and RAG planning, plus the speech-to-text correction check for a host that
@@ -361,6 +361,25 @@ it out of `.env`), or configure one of the earlier providers. The guide lists
361
361
  and [what is not established](docs/getting-started/providers/openai-decisions.md#what-is-not-established)
362
362
  about the endpoint.
363
363
 
364
+ [**ScaleDown**](docs/getting-started/providers/scaledown.md) is ScaleDown's hosted
365
+ Classify models (`classify-1` by default; provider id `scaledown`, with the alias
366
+ `scaledown-classify`). It has a public endpoint, so a key alone configures it:
367
+ `SCALEDOWN_API_KEY`, or `credentials.scaledown`. The key is sent in an `x-api-key`
368
+ header, never as a Bearer token, and **no other provider reads it**. It is the last
369
+ decision provider in the order, by choice and not because its key is shared: a host
370
+ with only that key gets ScaleDown for the built-in features, and a host that also
371
+ has any earlier provider configured (including an `OPENAI_API_KEY` set only for
372
+ chat) uses that one and reaches ScaleDown by naming `provider: "scaledown"`. It
373
+ reads text only: the state is always sent as a string (a string unchanged,
374
+ anything else as its JSON text, a blank string refused before any request), and
375
+ images and video are refused. A `choice` question is scored once per option by the
376
+ service, so input tokens grow with options times state length. The price is a list
377
+ price reported on 2026-10-15 and everything else about the endpoint (context
378
+ size, latency, rate limits, option and question maximums) is
379
+ [not measured](docs/getting-started/providers/scaledown.md#not-measured). The facts
380
+ about the endpoint come from ScaleDown's documentation and the marketing session's
381
+ probes of 2026-10-15; none were made by this project.
382
+
364
383
  ```typescript
365
384
  import {
366
385
  NeuroLink,
@@ -458,7 +477,7 @@ Cloudflare Clef, measured on a real account in October 2026: the follow-up of 13
458
477
 
459
478
  The [guide's limits section](docs/getting-started/providers/cloudflare-clef.md#limits) has the full table, including tokens per character for each kind of text.
460
479
 
461
- **[Decide Guide](docs/features/decide-inference-type.md)** · **[TypeSafe Provider Guide](docs/getting-started/providers/typesafe.md)** · **[Laya Provider Guide](docs/getting-started/providers/laya.md)** · **[XOR Provider Guide](docs/getting-started/providers/xor.md)** · **[Perplexity Provider Guide](docs/getting-started/providers/perplexity-decider.md)** · **[Cloudflare Clef Provider Guide](docs/getting-started/providers/cloudflare-clef.md)** · **[SubQ Provider Guide](docs/getting-started/providers/subq.md)** · **[OpenAI Decisions Provider Guide](docs/getting-started/providers/openai-decisions.md)**
480
+ **[Decide Guide](docs/features/decide-inference-type.md)** · **[TypeSafe Provider Guide](docs/getting-started/providers/typesafe.md)** · **[Laya Provider Guide](docs/getting-started/providers/laya.md)** · **[XOR Provider Guide](docs/getting-started/providers/xor.md)** · **[Perplexity Provider Guide](docs/getting-started/providers/perplexity-decider.md)** · **[Cloudflare Clef Provider Guide](docs/getting-started/providers/cloudflare-clef.md)** · **[SubQ Provider Guide](docs/getting-started/providers/subq.md)** · **[OpenAI Decisions Provider Guide](docs/getting-started/providers/openai-decisions.md)** · **[ScaleDown Provider Guide](docs/getting-started/providers/scaledown.md)**
462
481
 
463
482
  ## Enterprise Security: Human-in-the-Loop (HITL)
464
483
 
@@ -737,7 +756,7 @@ NeuroLink is a comprehensive AI development platform. Every feature below is shi
737
756
 
738
757
  ### 🤖 AI Provider Integration
739
758
 
740
- **Provider neurons behind one API** - Switch providers with a single parameter change. Nearly all serve `generate`/`stream`; TypeSafe Jev, Laya, XOR, SubQ, Perplexity Decisions, Cloudflare Clef and OpenAI Decisions serve `decide` instead. Tool support varies by provider and model (see the provider catalog); embedding-, media- and decision-only providers serve no tools. 3 are fully local runtimes (Ollama, LM Studio, llama.cpp) and need no cloud account or API key. LiteLLM needs no NeuroLink env vars (it defaults to `localhost:4000`) but requires a running LiteLLM proxy, which holds the upstream provider keys for hosted models. 9 providers (OpenAI, Google AI Studio, Google Vertex, Amazon Bedrock, Cohere, Ollama, LiteLLM, Voyage, Jina) expose `embed()`/`embedMany()` natively for RAG and custom vector search.
759
+ **Provider neurons behind one API** - Switch providers with a single parameter change. Nearly all serve `generate`/`stream`; TypeSafe Jev, Laya, XOR, SubQ, Perplexity Decisions, Cloudflare Clef, OpenAI Decisions and ScaleDown serve `decide` instead. Tool support varies by provider and model (see the provider catalog); embedding-, media- and decision-only providers serve no tools. 3 are fully local runtimes (Ollama, LM Studio, llama.cpp) and need no cloud account or API key. LiteLLM needs no NeuroLink env vars (it defaults to `localhost:4000`) but requires a running LiteLLM proxy, which holds the upstream provider keys for hosted models. 9 providers (OpenAI, Google AI Studio, Google Vertex, Amazon Bedrock, Cohere, Ollama, LiteLLM, Voyage, Jina) expose `embed()`/`embedMany()` natively for RAG and custom vector search.
741
760
 
742
761
  | Provider | Models | Free Tier | Tool Support | Status | Documentation |
743
762
  | --------------------- | -------------------------------------------------------------------------- | --------------- | ------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------- |
@@ -771,9 +790,9 @@ NeuroLink is a comprehensive AI development platform. Every feature below is shi
771
790
 
772
791
  **Media generation** — [Replicate](docs/getting-started/providers/replicate.md) (`REPLICATE_API_TOKEN`) · [Stability AI](docs/getting-started/providers/stability.md) (`STABILITY_API_KEY`) · [Ideogram](docs/getting-started/providers/ideogram.md) (`IDEOGRAM_API_KEY`) · [Recraft](docs/getting-started/providers/recraft.md) (`RECRAFT_API_KEY`)
773
792
 
774
- **Decision** — [TypeSafe Jev](docs/getting-started/providers/typesafe.md) (`TYPESAFE_API_KEY`, or `AI_GATEWAY_API_KEY` via the Vercel AI Gateway) · [Laya](docs/getting-started/providers/laya.md) (`LAYA_API_KEY` + `LAYA_BASE_URL`, open-weights, self-hosted) · [XOR](docs/getting-started/providers/xor.md) (`XOR_API_KEY` + `XOR_BASE_URL`, open-weights) · [SubQ](docs/getting-started/providers/subq.md) (`SUBQ_API_KEY`, hosted) · [Perplexity Decisions](docs/getting-started/providers/perplexity-decider.md) (`PERPLEXITY_API_KEY`, hosted; the same key as the Perplexity text provider) · [Cloudflare Clef](docs/getting-started/providers/cloudflare-clef.md) (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`, hosted on Workers AI; the same two variables as the Cloudflare text provider) · [OpenAI Decisions](docs/getting-started/providers/openai-decisions.md) (`OPENAI_API_KEY`, hosted, public beta; the same key as the OpenAI chat provider) — the providers serving `decide` rather than `generate`/`stream`.
793
+ **Decision** — [TypeSafe Jev](docs/getting-started/providers/typesafe.md) (`TYPESAFE_API_KEY`, or `AI_GATEWAY_API_KEY` via the Vercel AI Gateway) · [Laya](docs/getting-started/providers/laya.md) (`LAYA_API_KEY` + `LAYA_BASE_URL`, open-weights, self-hosted) · [XOR](docs/getting-started/providers/xor.md) (`XOR_API_KEY` + `XOR_BASE_URL`, open-weights) · [SubQ](docs/getting-started/providers/subq.md) (`SUBQ_API_KEY`, hosted) · [Perplexity Decisions](docs/getting-started/providers/perplexity-decider.md) (`PERPLEXITY_API_KEY`, hosted; the same key as the Perplexity text provider) · [Cloudflare Clef](docs/getting-started/providers/cloudflare-clef.md) (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`, hosted on Workers AI; the same two variables as the Cloudflare text provider) · [OpenAI Decisions](docs/getting-started/providers/openai-decisions.md) (`OPENAI_API_KEY`, hosted, public beta; the same key as the OpenAI chat provider) · [ScaleDown](docs/getting-started/providers/scaledown.md) (`SCALEDOWN_API_KEY`, hosted; its own key, text only) — the providers serving `decide` rather than `generate`/`stream`.
775
794
 
776
- **Decision-only providers:** **TypeSafe Jev** (`TYPESAFE_API_KEY`), **Laya** (`LAYA_API_KEY` + `LAYA_BASE_URL`), **XOR** (`XOR_API_KEY` + `XOR_BASE_URL`), **SubQ** (`SUBQ_API_KEY`), **Perplexity Decisions** (`PERPLEXITY_API_KEY`), **Cloudflare Clef** (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`) and **OpenAI Decisions** (`OPENAI_API_KEY`) do not appear in the table above because none of them serves `generate`/`stream` — they are the providers for the `decide` inference type, tried in the order TypeSafe, Laya, XOR, SubQ, Perplexity, Cloudflare Clef, OpenAI Decisions when several are configured. Perplexity's key is shared with the Perplexity text provider, Clef's two variables with the Cloudflare Workers AI text provider, and OpenAI Decisions' key with the OpenAI chat provider; all three text providers appear in the table. See [Decide: Calibrated Judgments, Not Text](#decide-calibrated-judgments-not-text).
795
+ **Decision-only providers:** **TypeSafe Jev** (`TYPESAFE_API_KEY`), **Laya** (`LAYA_API_KEY` + `LAYA_BASE_URL`), **XOR** (`XOR_API_KEY` + `XOR_BASE_URL`), **SubQ** (`SUBQ_API_KEY`), **Perplexity Decisions** (`PERPLEXITY_API_KEY`), **Cloudflare Clef** (`CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`), **OpenAI Decisions** (`OPENAI_API_KEY`) and **ScaleDown** (`SCALEDOWN_API_KEY`) do not appear in the table above because none of them serves `generate`/`stream` — they are the providers for the `decide` inference type, tried in the order TypeSafe, Laya, XOR, SubQ, Perplexity, Cloudflare Clef, OpenAI Decisions, ScaleDown when several are configured. Perplexity's key is shared with the Perplexity text provider, Clef's two variables with the Cloudflare Workers AI text provider, and OpenAI Decisions' key with the OpenAI chat provider; all three text providers appear in the table; ScaleDown's key is its own. See [Decide: Calibrated Judgments, Not Text](#decide-calibrated-judgments-not-text).
777
796
 
778
797
  **[📖 Provider Comparison Guide](docs/reference/provider-comparison.md)** - Detailed feature matrix and selection criteria
779
798
  **[🔬 Provider Feature Compatibility](docs/reference/provider-feature-compatibility.md)** - Test-based compatibility reference for 19 features (dated snapshot covering a subset of the full provider list)
@@ -1295,18 +1314,18 @@ Full command and API breakdown lives in [`docs/cli/commands.md`](docs/cli/comman
1295
1314
 
1296
1315
  ## Platform Capabilities at a Glance
1297
1316
 
1298
- | Capability | Highlights |
1299
- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1300
- | **Provider unification** | Provider neurons behind one API, with automatic fallback, cost-aware routing, `providerFallback` policy, `modelChain` config. |
1301
- | **Decision inference** | Third inference type (`decide`) alongside generate/stream: calibrated `boolean`/`choice`/`score` judgments via TypeSafe Jev (~400ms flat, ~$0.00002/decision), Laya, a self-hosted open-weights alternative, XOR, Juspay's open-weights model, Subquadratic's hosted SubQ Snap, Perplexity's hosted Decisions API, Cloudflare Clef on Workers AI, or OpenAI's Decisions API. Used internally for model routing, context budgeting, relevance compaction and tool routing; per-query RAG planning is opt-in via `RAGPipeline`. |
1302
- | **Multimodal pipeline** | Stream images + CSV data + PDF documents across providers with local/remote assets. Auto-detection for mixed file types. |
1303
- | **Voice pipeline** | TTS (6 providers: Google, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia) + STT (4 providers) + realtime voice APIs (OpenAI Realtime, Gemini Live). |
1304
- | **Quality & governance** | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging. |
1305
- | **Memory & context** | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction. |
1306
- | **CLI tooling** | 34 commands: loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags. |
1307
- | **Enterprise ops** | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing, credential management. |
1308
- | **Tool ecosystem** | MCP auto discovery, HTTP/stdio/SSE/WebSocket transports, LiteLLM hub access, SageMaker custom deployment, web search. |
1309
- | **Engineering rigor** | 129 end-to-end test suites (every suite drives the public `generate`/`stream`/`decide`/CLI surface, never internals), 13 custom ESLint rules enforcing the architecture (no `interface`, unique type names, barrel-only type imports) — all AST-based, no regex heuristics. |
1317
+ | Capability | Highlights |
1318
+ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1319
+ | **Provider unification** | Provider neurons behind one API, with automatic fallback, cost-aware routing, `providerFallback` policy, `modelChain` config. |
1320
+ | **Decision inference** | Third inference type (`decide`) alongside generate/stream: calibrated `boolean`/`choice`/`score` judgments via TypeSafe Jev (~400ms flat, ~$0.00002/decision), Laya, a self-hosted open-weights alternative, XOR, Juspay's open-weights model, Subquadratic's hosted SubQ Snap, Perplexity's hosted Decisions API, Cloudflare Clef on Workers AI, OpenAI's Decisions API, or ScaleDown's hosted Classify models. Used internally for model routing, context budgeting, relevance compaction and tool routing; per-query RAG planning is opt-in via `RAGPipeline`. |
1321
+ | **Multimodal pipeline** | Stream images + CSV data + PDF documents across providers with local/remote assets. Auto-detection for mixed file types. |
1322
+ | **Voice pipeline** | TTS (6 providers: Google, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia) + STT (4 providers) + realtime voice APIs (OpenAI Realtime, Gemini Live). |
1323
+ | **Quality & governance** | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging. |
1324
+ | **Memory & context** | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction. |
1325
+ | **CLI tooling** | 34 commands: loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags. |
1326
+ | **Enterprise ops** | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing, credential management. |
1327
+ | **Tool ecosystem** | MCP auto discovery, HTTP/stdio/SSE/WebSocket transports, LiteLLM hub access, SageMaker custom deployment, web search. |
1328
+ | **Engineering rigor** | 129 end-to-end test suites (every suite drives the public `generate`/`stream`/`decide`/CLI surface, never internals), 13 custom ESLint rules enforcing the architecture (no `interface`, unique type names, barrel-only type imports) — all AST-based, no regex heuristics. |
1310
1329
 
1311
1330
  ## Documentation Map
1312
1331
 
@@ -1334,7 +1353,7 @@ Full command and API breakdown lives in [`docs/cli/commands.md`](docs/cli/comman
1334
1353
 
1335
1354
  **Decision Inference:**
1336
1355
 
1337
- - [Decide Guide](docs/features/decide-inference-type.md) - The `decide` inference type: boolean/choice/score primitives, TypeSafe Jev / Laya / XOR / SubQ / Perplexity / Cloudflare Clef / OpenAI Decisions setup, and the latency/cost measured for the providers that have it
1356
+ - [Decide Guide](docs/features/decide-inference-type.md) - The `decide` inference type: boolean/choice/score primitives, TypeSafe Jev / Laya / XOR / SubQ / Perplexity / Cloudflare Clef / OpenAI Decisions / ScaleDown setup, and the latency/cost measured for the providers that have it
1338
1357
 
1339
1358
  **Provider Intelligence:**
1340
1359