Skip to content

Releases: mnfst/llm-gateway

manifest v6.23.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 09:59
71461ab

✨ Minor Changes

  • 8076d88: Add OpenAI Codex as a coding-assistant agent platform. Codex shows up in the agent picker with a copy-ready ~/.codex/config.toml setup panel that points Codex CLI and Desktop at Manifest over the Responses API (wire_api = "responses") and authenticates with your mnfst_ key. Two upstream-compatibility fixes make Codex work against non-OpenAI providers: Responses-API role: "developer" instruction messages are folded into system, and OpenAI-hosted tools (web_search, file_search, …) are dropped on the Chat Completions path. Native Responses upstreams keep developer roles and hosted tools untouched.

    Preserve streamed function calls and namespaced client tools through non-OpenAI providers, including parallel calls and tool-result replay.

  • f1a50eb: Add an internal, secret-guarded feed of the users whose requests Autofix repaired, so outreach can reach them with their real repair counts.

🐛 Patch Changes

  • 8ccecc8: Remove the $25 Gemini credit user-discovery banner and modal from the Overview page.

manifest v6.22.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 09:43
5c8ee56

✨ Minor Changes

  • 5b5eac7: Custom providers now have an alias, the readable prefix their models are published under in /v1/models (vercel-ai-gateway/alibaba/qwen-3-14b instead of custom:<uuid>/alibaba/qwen-3-14b). The alias defaults to the provider name, is editable at creation and later, and the proxy accepts both the alias form and the internal custom:<uuid>/… form in the model field, so existing client configs keep working. Existing custom providers are backfilled on upgrade.
  • e86c83a: Add an Automation harness category with n8n as its first platform, including n8n credential setup guidance in the harness creation flow.
  • 142d082: Add GET /api/v1/version for self-hosted installs: reports the running version, the latest GitHub release, and changelog/upgrade links so the dashboard can show a "new version available" badge. Checks once a day, never in cloud mode, and can be turned off with MANIFEST_UPDATE_CHECK_DISABLED=1.

🐛 Patch Changes

  • ed8ac04: Adapt the provider connection page, the Overview KPI cards, and the app header to phone-sized screens

manifest v6.21.1

Choose a tag to compare

@github-actions github-actions released this 03 Sep 11:31
7c02b6b

🐛 Patch Changes

  • b974b60: Send the x-opencode-session header on every OpenCode Go/Zen request — hashed per-conversation id when the caller provides x-session-key, stable per-agent fallback otherwise — ahead of OpenCode's 09/06 enforcement deadline.
  • 30ecba8: Stop listing OpenRouter :batch model variants in model discovery. These variants are only served through OpenRouter's asynchronous Batch API and always fail with a 404 on the synchronous chat completions proxy.
  • 51fa1b8: Security: bump fast-uri to 3.1.6 (fixes GHSA-5jgf-p345-68v8, GHSA-fph4-wmhf-6fwf, GHSA-f65p-4m7j-42xc, GHSA-jqff-g426-hqxp) and refresh Docker base images.

manifest v6.21.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 15:52
4b5bbf5

✨ Minor Changes

  • ae39136: Encrypt stored request recordings with the at-rest encryption key. Existing gzip-only recordings remain readable.
  • 760e21c: Add MANIFEST_ENCRYPTION_KEY_PREVIOUS and a boot-time re-encryption pass so the at-rest key can be introduced or rotated without losing stored provider credentials.

🐛 Patch Changes

  • 6b88368: Route an explicit bare model id to the subscription connection when both a subscription and an api_key connection of the same provider serve it, instead of silently metering the key.
  • 39fdbe0: Add claude-fable-5-1 to the Anthropic subscription model catalog so Claude Max / Pro connections can serve it instead of silently falling through to an API key
  • 478c64b: Strip inline base64 images from stored request recordings and Phoenix observations.
  • 15998da: Remove the self-hosted loopback auto-login. Requests from 127.0.0.1 without a session are no longer treated as a signed-in local user.
  • 686656a: The routing model picker now window-renders long catalogs so scrolling stays in place instead of lagging or jumping back to the top.
  • 9534911: Scrub provider credentials from upstream error bodies before they are written to logs.
  • 65e318b: Waiting-list claims now record where they were made (cloud or self-hosted) instead of a generic label, and a repeat claim updates the attribution to the latest origin.

manifest v6.20.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 19:59
6f5caf7

✨ Minor Changes

  • b7d5368: New self-hosted users now see a one-time optional discovery form (name, email, project type, company size) right after signup, before reaching the dashboard. Submitting or skipping persists the choice, and the step never appears on Manifest Cloud or for existing users.
  • 54a6356: The sidebar now announces that Manifest is becoming the self-healing layer for APIs, with a modal to join the waiting list using a prefilled but editable email. The old Autofix sidebar card is retired since notifications cover it.
  • b3bd178: Add grok-4.6 to the Grok subscription known-models list so xAI subscription connections can select it.
  • 1f6e851: Limit the Grok subscription catalog to grok-4.6 and grok-4.5, the models Grok Build actually offers, and advertise their 500k context window.

🐛 Patch Changes

  • 4de42c1: Open Anthropic subscription popups before the OAuth request so adding another account is not blocked by the browser.
  • 597d183: Allow custom provider models to use streaming response mode.
  • 4b824d7: Stop serializing tool_result images as base64 text on OpenAI-compatible routes (a single screenshot inflated to 100K+ input tokens and could overflow the provider context window), and return deterministic ChatGPT Codex context errors as HTTP 400 instead of 502.
  • e0105a2: Keep configured subscription context windows current without replacing provider values.
  • 5cd26a1: Fix fallback drag-and-drop reordering below the second position.
  • 3c5af56: Allow deployments to configure the per-tenant concurrent request limit with MANIFEST_CONCURRENCY_MAX.
  • 29f0316: Keep Phoenix model remaps provider-native while preserving subscription routing and legacy Autofix compatibility.
  • eb0992c: Pin Better Auth to 1.6.25 to restore upgrades from populated 1.6 databases.
  • c86273b: Translate Anthropic user metadata when routing Messages requests to OpenAI.

manifest v6.19.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 13:22
1431f74

✨ Minor Changes

  • 44cb47b: Add Meta Model API support for Muse Spark 1.1, Muse Spark 1.2, and the Contributor route.
  • f83ba4f: Support the full Kimi Coding Plan model lineup for Moonshot subscriptions using the wire-format ids the api.kimi.com/coding endpoint expects: k3, k3-256k, kimi-for-coding, and kimi-for-coding-highspeed (the previous curated list sent kimi-k3, which the endpoint does not accept). Includes correct per-model context windows (1M for k3, 256k for the rest, with an explicit k3-256k entry so prefix matching cannot inherit the 1M window), curated input modalities (image+video for k3 and both kimi-for-coding variants, image-only for k3-256k), provider inference for the bare k3 ids, and quality-score overrides so the zero-priced k3 models are not mis-tiered as ultra-low in auto-routing.

🐛 Patch Changes

  • c40e550: Show the loading skeleton on the Agent Overview page while switching between agents, instead of leaving the previous agent's data on screen until the new fetch resolves.
  • 215f863: Rename the "AI agents" harness category to "AI agent" so it matches the other singular category labels
  • b27a578: Fix empty non-streaming responses for Bedrock GPT-5.x models (openai.gpt-5.6-luna/sol/terra, gpt-5.5, gpt-5.4). The non-streaming Responses handler assumed the upstream always returns SSE, but the Bedrock mantle /openai/v1/responses endpoint returns a plain JSON Responses object when stream:false, so content came back null with zero usage. The handler now detects the response shape and parses JSON Responses objects directly.
  • 87475e2: Route Bedrock GPT-5.4, GPT-5.5, and GPT-5.6 models through the namespaced OpenAI Responses API path.
  • 9b2704c: Keep OpenAI subscription requests streaming upstream when clients request buffered responses.
  • e821268: Bound dashboard query concurrency and reduce default PostgreSQL pool sizes.
  • 6b4bf29: Cap the provider connections list at six and a half rows so the supported-provider catalog below it stays reachable. The card scrolls, and a "Show all" button expands it to full height.
  • b24ddcb: Calculate GitHub Copilot request costs from live token prices, including long-context tiers.
  • ba1d7b6: Prefer the cost a provider reports over any catalogue estimate. Manifest already read usage.cost from responses but only used it for subscription providers, so an exact figure from a gateway such as OpenRouter was captured and then discarded in favour of catalogue arithmetic. Local inference (Ollama, llama.cpp, LM Studio) now records a known $0 instead of an unknown null.
  • 2d5fb92: Bill DeepSeek V4 at its real peak/off-peak rates. Pricing entries can now carry time-of-day tiers (the models.dev cost.tiers time variant), cost calculation resolves them against the attempt timestamp, and a built-in seed supplies DeepSeek's schedule until the catalog carries it.
  • ba1d7b6: Stop billing DeepSeek V4 peak rates on weekends: time-of-day pricing tiers now carry the weekdays they apply on, and DeepSeek's 01:00-04:00 / 06:00-10:00 UTC peak windows are Monday-Friday only. Also prices deepseek-v4-flash-vision-exp, which billed at the stale flat catalog rate.
  • 061d351: Continue fallback routing when a non-streaming Chat Completions provider returns no output.
  • 3330dae: Refresh cached harness message counts when new requests arrive.
  • 633455b: Show the Meta logo anywhere the dashboard renders provider icons.
  • ab1a544: Keep model parameter specs current: the modelparams catalog now refreshes hourly from the modelparams.dev API (ETag-conditional, validated before swap, stale-on-error) instead of being frozen at the bundled package version, and the bundled fallback is bumped to modelparams 0.0.40.
  • 6b04574: Report modalities and capability flags for Ollama Cloud models. ollama-cloud was missing from the models.dev provider map, so every lookup missed and GET /v1/models?capabilities=true returned no input_modalities, output_modalities, or features for those models. Release tags that models.dev omits from its key (:preview, :0813) now fall back to the base model.
  • 0259c8d: Show refreshed provider metadata immediately after manual model discovery.
  • ca21b97: Route OpenCode Go Responses-only models (Grok 4.5, GPT 5.6 Luna, Muse Spark) to /v1/responses instead of /v1/chat/completions.
  • 7b09c5e: Report tool support and modalities for OpenRouter models. OpenRouter reached neither models.dev provider map, so all 323 published models declared only stream and never tools, and anything reasoning about capability — the dashboard picker, /v1/models?capabilities=true, agents choosing a remap target — treated every one of them as tool-incapable. OpenRouter now sits in the capability-only map, so its rates stay with its own live /models feed while models.dev supplies the modalities and tool-call flags that feed omits. Routing variants (:free, :nitro, :batch) resolve to their base model's capabilities.
  • fe8677e: Cost each request with the price of the provider that actually served it. The pricing cache was keyed by model name alone, so every provider selling a model wrote to the same key and only the last one survived — 24 providers list deepseek-v4-pro, and DeepSeek is not the one that won. A request to DeepSeek's own API was billed at OpenCode Zen's resale rate, roughly 3.7x the real price on an agent-shaped token mix.
  • 0d244d0: Fix Responses→chat-completions conversion emitting content-less {"role":"user"} messages for reasoning, item_reference, and other non-message input items, which strict OpenAI-compatible providers rejected with 400/422.
  • bf7876a: Restore the $25 Gemini credit user-discovery banner and modal on the Overview page
  • 6c29c71: Sanitize tool_use ids emitted on /v1/messages responses so non-Anthropic upstream ids (e.g. Edit:0) no longer poison session histories against Anthropic's id pattern
  • ecb3c8d: Spell Autofix without a hyphen across the dashboard, notifications, and emails.
  • 549bece: Stop advertising Gemini 3.1 Pro Preview and Gemini 3 Flash Preview for Google Code Assist subscriptions because the Code Assist API returns model-not-found responses for both routes.
  • 7b09c5e: Report modalities and capability flags for Kilo, Pioneer, Cline Pass and Xiaomi models. These providers publish no modality data on their own /models endpoints, and models.dev may not price them: they list resold vendor models under the vendor's own ID, so their rates would overwrite the real vendor price in the shared cache. A new capability-only provider map carries them, separate from the map that grants pricing authority.

manifest v6.18.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 14:34
47d35fa

Auto-fix now works on self-hosted installs

Auto-fix repairs failing LLM requests before your fallback chain runs. When a provider rejects a request with a repairable error such as a malformed body, a renamed model, or an invalid parameter, Manifest sends the failed request to its healing service, receives a patched version, and resends it once. Until now this only worked on Manifest Cloud. Starting with v6.18.0 it works on self-hosted installs with zero configuration.

How to enable it

Upgrade to 6.18.0, then turn Auto-fix on per agent from the Settings page. The dashboard also shows a card listing agents that do not have it yet. It is off by default and requires a one-time consent per install.

docker pull manifestdotbuild/manifest:6.18.0

What this sends to our servers

Auto-fix is a hosted service. To repair a request, your install sends the failing request, including its message content, together with the provider's error response, to the Auto-fix service. Your install is identified by an anonymous install id. Provider API keys and OAuth tokens are never sent. The details are in the privacy policy and the terms.

How to turn it off

You can disable Auto-fix at any time per agent from the dashboard, or globally by setting AUTOFIX_GLOBAL_ENABLED=false. With that variable set, your install makes no calls to the Auto-fix service at all.

Questions and feedback: https://github.com/mnfst/manifest/discussions/2692

✨ Minor Changes

  • f9eb3d8: Enable hosted Auto-fix for self-hosted installs: one-time consent with an option to turn it on for every existing agent, identified by the anonymous install id.
  • 1e4cac8: Add opt-in Provider Attempt message recording with tenant-scoped durable filesystem or S3-compatible storage.

🐛 Patch Changes

  • 1b633b6: Fix horizontal overflow in request drawer: error, autofix and fallback context cards now span full width, long error messages wrap instead of scrolling horizontally, and the tabs bar uses a muted background.
  • 59f0e37: Enable automatic prompt caching for Anthropic API keys and OpenRouter Claude models.
  • 205e25c: Auto-fix retries a healed model on the original provider transport when routing cannot resolve it (stale tenant model cache), instead of synthesizing a 502
  • 31eaa75: Auto-fix always closes the evidence loop with Phoenix: a retry that dies mid-flight is reported as a synthetic 499 instead of leaving the heal attempt pending, and a dropped outcome report is resent before giving up
  • f299e4b: Route Bedrock OpenAI and Anthropic models through their compatible Responses and Messages API surfaces.
  • d040011: Stop blocking /billing/status and free-tier admission on the historical request-usage baseline scan; return the live counter immediately and finish the baseline in the background. Dashboards no longer wait on billing at all: the plan is resolved once at login via the new light GET /api/v1/billing/plan and read synchronously, so Overview, Global Overview, and the Requests log fetch each chart exactly once at the right range.
  • 42a750b: Open routing model pickers from cached provider models and refresh stale catalogs only once per browser session each day.
  • 95c17cf: Cache provider usage aggregates and coalesce live dashboard refreshes.
  • f8cbfd8: Classify Anthropic subscription extra-usage errors as billing without sending them to Auto-fix.
  • 89de9cd: Keep the routing page mounted while refreshed model data loads.
  • 060b42b: Preserve GPT-5.6 reasoning summaries on inbound Chat Completions: map the standard reasoning_effort param onto the Responses reasoning object (with summary: auto) for OpenAI endpoints so the model actually reasons, prefix-match Responses reasoning-summary delta events instead of an exact-name allowlist, and backfill reasoning_content from the terminal response.completed/response.incomplete output when no summary deltas streamed.
  • fb8beb2: Prepare DeepSeek reasoning tool turns once before each provider attempt.
  • 6ac0908: Keep subscription model availability scoped to provider discovery and curated model lists.
  • 3ed45a4: Enable message recording by default for newly created harnesses without changing existing harness settings.
  • e56afee: Forward explicit uncatalogued models to connected providers so real model errors can reach Auto-fix.
  • b4f85dd: Load paginated requests before aggregating attempts and refresh exact totals separately.
  • 01a6966: Keep provider-cooldown skips and successful fallbacks as separate ordered Attempts in Request timelines.
  • 934416d: Reject billing-enabled Cloud startup when request quota and process timezones differ.
  • b6b5db5: Add a Gemini Free provider with Gemini-scoped keys and a reusable managed free-provider
    configuration. Use the existing managed gateway by default.
  • ca18aad: Prevent headerless Codex subscription requests from sharing token-wide cache affinity.
  • fa15665: Preserve native Responses and Anthropic Messages requests until cross-protocol conversion is required.
  • 6d49e02: Record provider cache-write usage consistently across response formats.
  • 06b0715: Make Auto-fix available to every tenant and retire the early-access waitlist.
  • cdb9028: Preserve OpenRouter input and output modalities during model discovery.
  • ecc29b6: Preserve redacted structured provider error details in proxy responses.
  • 04710be: Simplify model parameter requests with a prefilled GitHub issue.
  • 538d021: Improve request message drawer: markdown rendering, JSON syntax highlighting, gear icon for tool calls, wider drawer, Tools tab shows called and available tools separately.
  • e4b6e6c: Remove the legacy Auto-fix tenant rollout columns after general availability.
  • bd4b560: Honor requested model routes on the Anthropic Messages endpoint.
  • d1d2ea7: Scope proxy replay caches and routing momentum to their owning tenant and agent.
  • 4c42c24: Scope provider prompt cache affinity to explicit tenant and agent sessions.
  • eaa4026: Show actual Provider Attempt tool calls instead of available tool definitions in recorded message details.
  • 3f7f7cf: Show complete Gemini request messages, including system instructions.
  • 1ee0634: Show recorded Gemini streaming responses in Provider Attempt message details.
  • a0834db: Record Manifest-authored routing failures, including provider cooldown skips, as failed Attempts so the Request drawer shows the full routing chain.
  • df19e6e: Keep the routing model picker open while refreshed model data loads.
  • 064e462: Keep reasoning_content on OpenCode Zen requests. The reasoning dialect is now decided by the models.dev reasoning capability instead of a model-family regex, so Zen's DeepSeek and codename reasoning models replay their thinking while Claude/GPT/Gemini/Grok slugs keep stripping it.

manifest v6.17.1

Choose a tag to compare

@github-actions github-actions released this 28 Jul 14:34
126c70a

🐛 Patch Changes

  • ba9db64: In Cloud, replace repeated monthly request COUNT scans with an exact counter, lazy baseline, and fail-fast deploy cutover.

manifest v6.17.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 13:34
9f45ccb

✨ Minor Changes

  • c7243c9: Auto-fix now gets a chance to heal requests naming an unavailable model (M302). When an explicit model resolves to no connected model and the agent has Auto-fix enabled, the failure is handed to the healing service as a synthetic model-not-found 404; a successful patch re-resolves routing and serves the repaired request, recording the real provider retry without inventing a provider attempt for the Manifest-blocked original. Agents without Auto-fix keep the friendly M302 response unchanged.
  • ca55f79: Expose model input and output costs in USD per million tokens from GET /v1/models?cost=true, while keeping the default response unchanged.
  • 8b07c7f: Add Hugging Face Inference Providers as a first-class API-key provider with dynamic model discovery and OpenAI-compatible chat routing.
  • 43cf52b: Invite users to a short discovery call: a one-time modal on the dashboard and a persistent banner offer $10 of Gemini credit for 30 minutes of feedback.

🐛 Patch Changes

  • f1e0dc7: Clean up request drawer when no provider attempts: hide the sidebar, show "-" for blank provider/model fields in attempt details, and show "No provider" in the attempt list.
  • ebf49fd: Add Claude Opus 5 to the Anthropic subscription model catalog.
  • 6f649fc: Route streaming provider timeouts through configured fallbacks instead of returning M500.
  • 24174dd: Report provider-native failed request parameters and response bodies directly to Phoenix diagnostics.
  • 4e9a09c: Record streaming timeouts, protocol errors, incomplete streams, and caller cancellations with explicit terminal outcomes.
  • ed712ab: Refresh the model lists shown on provider tiles and in the README so they match the catalogs providers actually serve today
  • 3caacde: Stop silently discarding successful requests from the Messages log. A heuristic
    deduplicator treated two distinct successes as the same completion whenever they
    hit the same agent and model with identical input/output token counts inside a
    30s window — which an agent looping over one model satisfies routinely — and
    dropped the second one. It was added to suppress double-writes when the old OTLP
    telemetry pipeline and the proxy both recorded a request; that second writer has
    since been removed, so every match it could still find was a false positive.
  • 92430b1: Raise the per-provider credential safety ceiling from 5 to 50 connections.
  • cf5d6d8: Send native Google provider failures through Auto-fix with their exact request and response bodies.
  • cc0da80: When primary credentials fail to resolve, treat it as a failed attempt and enter the normal fallback chain instead of hard-failing with M100. Dead subscription OAuth (refresh/unwrap failed) now surfaces as M102 rather than the misleading "no API key" M100.
  • 10a17a7: Add real-Postgres e2e coverage for the subscription OAuth credential lock (row-lock serialization, savepoint retry, lock_timeout bound).
  • cc0da80: Serialize OAuth subscription token refreshes with a DB row lock (SELECT … FOR UPDATE on tenant_providers) so multi-replica backends cannot rotate the same refresh token concurrently
  • a31dae6: Preserve configured reasoning effort when forwarding requests to native DeepSeek V4 models.
  • 08404f2: Refresh provider model lists on the first routing model picker opened each day.
  • e3bb269: Self-hosting fixes. The install script now resumes instead of failing when the install directory already exists, so a run that died at docker compose up can be retried without losing the generated secret. Adds --port for installing on a port other than 2099, and generates MANIFEST_ENCRYPTION_KEY so provider credentials are no longer encrypted with the session-signing secret by default. The bundled compose file now forwards 16 documented variables it was silently dropping, including TELEMETRY_ENDPOINT and MANIFEST_DISABLE_HSTS. Blank values for TELEMETRY_ENDPOINT and the provider OAuth client IDs fall back to their defaults instead of being treated as an override.
  • a0bfab8: Security: bump transitive dependency seroval 1.5.1 → 1.5.6, fixing a critical deserialization advisory (fromJSON() Promise resolver type confusion, GHSA — patched in 1.5.3).
  • fd1dd88: Request-params snapshots are now derived from the raw request body: caller-sent parameters the model catalog has no spec for (scalars and small structured knobs, content excluded) are recorded, so failure evidence shows the exact knob a provider rejected instead of silently omitting it.
  • 0a1ee2c: Scope a harness's Overview to that harness's own routing: requests where the caller pinned an explicit model in the request body (direct) no longer appear in its Recent Messages, charts, cost breakdown or summary cards. They stay fully visible on the global Overview and the Messages log, so total spend still reconciles.

manifest v6.16.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 09:26
097c8f1

✨ Minor Changes

  • c1e7717: Separate caller requests from provider attempts in storage, analytics, and the dashboard.
  • c1e7717: Expose provider-attempt and fallback aggregate analytics.
  • c7e0be7: Expose structured model capability metadata (input/output modalities, endpoint features, supported endpoints) from GET /v1/models?capabilities=true, keeping the default response unchanged, resolved through the same pipeline as the routing model picker. Curated modality facts identify gpt-5.3-codex-spark as text-only input and mainline ChatGPT subscription models as image-capable in both the API and the picker.

🐛 Patch Changes

  • c1e7717: Add an auto_fixed count to the GET /api/v1/errors/breakdown response (number of requests healed by Auto-fix in the window), plus a typed getErrorBreakdown() frontend API wrapper — so a dashboard can surface auto-fixed alongside errors.
  • 2c81871: Report the exact provider-facing request body to Phoenix and retry healed bodies through the already-resolved transport without reapplying routing parameter merges or protocol translations.
  • 1943921: Clarify offline tunnel errors and keep HTML error pages out of message records.
  • d24cd21: Extend the dashboard covering index with the columns the request-first dashboard reads (key label, status, request id) and add a partial index for the skills panel, restoring index-only scans on the Overview and Provider Usage endpoints for large installs
  • 275fbfa: Limit request backfill refreshes to parents linked by the current batch.
  • 4e6e74a: Treat empty ChatGPT Codex streams as provider failures so routing can use fallbacks. Self-hosted deployments can tune the semantic-output wait with CODEX_SEMANTIC_OUTPUT_TIMEOUT_MS.
  • ae1213e: Strip legacy budget_tokens from Anthropic adaptive thinking requests.
  • 0b91ff3: Update OpenRouter logo to the current brand mark
  • 79856bc: Block built-in local providers on Manifest Cloud.
  • 26b0635: Prepare request history in the background before the request-level dashboard rollout.
  • aa767db: Refresh every matching provider connection so models returned by an API key are cached for each connected key.
  • 8412baf: Surface interrupted upstream streams as terminal SSE errors.
  • 6ec0136: Stop request-history tail sweeps after the initial backfill.