What's Changed
- docs: update Helm v2.1.44 changelog date by @BearTS in #8453
- docs: move Discord and GitHub into the sidebar by @kamyashah-arch in #8455
- docs: add upgrade notes to enterprise v2.3.0 changelog by @impoiler in #8456
- docs: IdP token auth for inference and Claude Desktop SSO setup by @BearTS in #8460
- fix(transports): publish the module as github.com/maximhq/bifrost/transports/v2 by @akshaydeo in #8450
- docs: require IdP for Edge, add Claude Code dynamic credentials, split CLI docs by @R-droid101 in #8472
- docs: add cohere sdk integration guide and expand multimodal embeddings docs by @sammaji in #8463
- feat(core): add the openapi MCP connection type behind an in-process server factory hook by @akshaydeo in #8307
- fix(anthropic): keep tool_reference blocks in client tool_result for custom tool search by @CMWR421 in #7813
- feat(framework): add openapimcp, the OpenAPI-to-MCP server synthesizer by @akshaydeo in #8308
- feat(configstore): persist openapi_config for openapi MCP clients by @akshaydeo in #8309
- feat(transports): expose openapi MCP clients over the management API by @akshaydeo in #8310
- feat(ui): types, API hooks and helpers for OpenAPI MCP servers by @akshaydeo in #8311
- feat(ui): OpenAPI connection type in the New MCP Server sheet by @akshaydeo in #8312
- feat(ui): replace an OpenAPI server's document from the edit sheet by @akshaydeo in #8313
- test(e2e): cover OpenAPI MCP servers in the registry UI by @akshaydeo in #8314
- docs(mcp): document OpenAPI servers by @akshaydeo in #8315
- docs(schemas): document nil checks and Grant-vs-key parity caveats on deprecated attribution context keys by @Pratham-Mishra04 in #8459
- fix(transports): import bifrost-http lib via the v2 module path in openapi MCP handlers by @akshaydeo in #8481
- fix(mcp-oauth): sync allowed_redirect_uris from config.json and allow a bare * callback by @akshaydeo in #8480
- mcp issuer auth contet fixes by @akshaydeo in #8484
- fix(migrations): wait for a live concurrent index build instead of dropping it by @akshaydeo in #8479
- docs: add Agent Gateway guides and API reference by @danpiths in #8491
- docs: standardize Agent Gateway visuals and fix review findings by @danpiths in #8493
- feat(decisions): add native Microsoft-Decision-1 decision support to the Azure provider by @Madhuvod in #8485
- feat(objectstore): parquet format for S3 log payload offload by @akshaydeo in #8475
- fix(ui): tighten MCP logs table typography and truncate overflowing labels by @impoiler in #8513
- feat(decisions): add native ai_decide decision support to the Databricks provider by @Madhuvod in #8498
- fix: parallel tool calling bedrock claude by @TejasGhatte in #8471
- fix: merge instructions field in system messages from responses api by @TejasGhatte in #8515
- feat(config): add extra_fields_placement client setting by @akshaydeo in #8476
- fix: require explicit public URLs for Agent Gateway and skills marketplaces by @danpiths in #8526
- feat(transports): send extra_fields as x-bifrost-* headers when placement is headers by @akshaydeo in #8477
- feat(ui): add Extra Fields Placement select to Client Settings by @akshaydeo in #8478
- [feat]: governance - virtual key metadata (1/4): storage and config by @jimseiwert in #7934
- fix(providers): run keyless model discovery despite leftover keys and allow deleting them by @akshaydeo in #8530
- fix: keep derived endpoint_slug when config.json MCP clients re-sync by @roroghost17 in #8535
- [feat]: governance - virtual key metadata (2/4): API and list filtering by @jimseiwert in #7935
- [feat]: governance - virtual key metadata (3/4): snapshot onto logs by @jimseiwert in #7936
- [feat]: governance - virtual key metadata (4/4): UI and docs by @jimseiwert in #7937
- fix(anthropic): render OpenAI tool search items for Anthropic clients by @akshaydeo in #8502
- fix(openai): provision a tool_search for deferred tools on gpt-5.4+ by @akshaydeo in #8503
- feat(core): run a tool search in the gateway for models without one by @akshaydeo in #8504
- antigravity support by @akshaydeo in #8543
- feat(core): run the gateway tool search on streaming Responses requests by @akshaydeo in #8505
- [fix]: Anthropic provider - keep client tool_use named web_search/web_fetch as function_call by @17jmumford in #8370
- fix: enforce destination permissions and credential boundaries by @danpiths in #8552
- tool search replay fix by @TejasGhatte in #8555
- feat(helm): add Azure Key Vault and Kubernetes auth support for vault store by @BearTS in #8461
- feat(helm): add scheduling controls for vector stores and Azure/Kubernetes vault auth (v2.1.45) by @BearTS in #8462
- chore: readme update for changelog in helm v2.1.45 by @BearTS in #8557
- feat(helm): add auto_rotation_interval and next_rotation_at to access profiles by @BearTS in #8556
- chore: ignore server-computed openapi_config fields by @BearTS in #8558
- feat: support cache_control on chat tool_calls for anthropic and bedrock by @sammaji in #8494
- fix: clamp openrouter cache_control markers to four for claude models by @sammaji in #8512
- fix: use responses input block types for tool result content in chat-to-responses conversion by @sammaji in #8514
- chore: add harness cases for chat completions tool_calls cache_control passthrough by @sammaji in #8495
- docs(enterprise): restructure Adaptive Load Balancing docs into a multi-page Adaptive Routing section by @Pratham-Mishra04 in #8506
- docs: add response headers reference and align routing, fallback, direct key, and weight docs with current behavior by @Pratham-Mishra04 in #8507
- fix(helm): align load balancer, circuit breaker, and routing rule chart config with Bifrost schema and document them by @Pratham-Mishra04 in #8511
- docs(routing): clarify that governance, not core, enforces the routing allowlist by @Pratham-Mishra04 in #8508
- docs(openapi): document x-bifrost-* response headers, routing info, and routing rule API changes by @Pratham-Mishra04 in #8509
- docs(openapi): document the adaptive routing config API by @Pratham-Mishra04 in #8510
- fix(ui): show rollout copy on the enterprise version skew screen by @impoiler in #8561
- improves the cross cluster matview refresh and migration handler for enterprise builds om by @akshaydeo in #8501
- fix: classify OAuth token endpoint rejections by error code so Slack and Atlassian refresh failures prompt re-auth by @roroghost17 in #8559
- refactor(providers): classify passthrough paths once for usage and parsing by @akshaydeo in #8516
- refactor(streaming): export the chat and responses message builders by @akshaydeo in #8517
- feat(framework): parse passthrough bodies into typed Bifrost requests by @akshaydeo in #8518
- feat(framework): rebuild streamed passthrough responses for logging by @akshaydeo in #8519
- feat(logging): store passthrough calls as parsed conversations by @akshaydeo in #8520
- feat(ui): render parsed passthrough logs as a conversation by @akshaydeo in #8521
- feat(logging): parse non-text passthrough calls into their log fields by @akshaydeo in #8522
- feat(logging): log multipart passthrough uploads as a form summary by @akshaydeo in #8523
- feat(logging): store passthrough calls under their inferred request type by @akshaydeo in #8524
- feat(ui): tag passthrough rows shown under their inferred type by @akshaydeo in #8525
- fix: remove invalid item object from responses event and output array fix by @TejasGhatte in #8563
- conflict fix by @akshaydeo in #8569
- [fix]: model catalog - resolve per-1M token price decimal rounding by @Shashank2985 in #8326
- fix: gemini prompt block error by @TejasGhatte in #8564
- chore(deps): bump Go from 1.27.0 to 1.27.2 by @Pratham-Mishra04 in #8570
- fix/drop-chat-fallback-text-after-tool-call by @akshaydeo in #8574
- fixes bedrock response convertor for automatic cache control by @akshaydeo in #8573
- feat: complete A2A observability exports and simplify registration by @danpiths in #8575
- fix(logstore): count only inference requests in throughput by @impoiler in #8579
- fix(ui): update OpenRouter provider icon by @impoiler in #8580
- fix(mcp): compute library installed flag server-side over all clients by @impoiler in #8581
- fix(migrations): keep logstore upgrade migrations from stalling behind old replicas by @akshaydeo in #8572
- fix: bedrock cache point placement by @TejasGhatte in #8595
- fix: release A2A relay contexts and correct governance reset windows by @danpiths in #8596
- fix(logs): drop the deleted label on passthrough log keys by @impoiler in #8601
- docs: fix changelog docs for incorrect markers by @roroghost17 in #8609
- fix(transports): release oversized request-body buffers after each request by @akshaydeo in #8602
- feat(typesafe): add image assets and box questions to Typesafe decisions by @Madhuvod in #8571
- fix: bound OAuth cache retention and reduce ClickHouse logging contention by @danpiths in #8608
- fix keep status with id on assistance input items by @akshaydeo in #8599
- fix: bound OAuth cache retention and reduce ClickHouse logging contention (#8608) by @akshaydeo in #8617
- [fix]: preserve xhigh reasoning effort for vLLM provider by @pranavthakur0-0 in #6244
- feat(schemas): support SecretVar for NetworkConfig.ExtraHeaders by @BearTS in #8618
- feat(providers): mask extra header values in API responses and restore them on save by @BearTS in #8619
- feat(ui): handle masked extra header values in the network form and migration planners by @BearTS in #8620
- ui: dashboard Overview chart registry (registerOverviewChart) so a downstream build can add charts; OSS build registers none by @akshaydeo in #8614
- fix(decisions): gate custom OpenAI-based providers on allowed requests alone by @Madhuvod in #8626
- feat: support thinking blocks in mistral streaming content arrays by @sammaji in #8567
- fix: map sglang top-level usage.reasoning_tokens to completion_tokens_details by @sammaji in #8600
- fix: pass empty string output in openai chat to responses by @sammaji in #8621
- test: add mistral harness cases for thinking content arrays and reasoning replay by @sammaji in #8612
- fix(mcp/codemode): render restored tool schemas (*OrderedMap) in Starlark stubs by @Pratham-Mishra04 in #8603
- fix(codemode): hand tool results to scripts as structured values, decoding multi-block, structuredContent, and JSON-string results by @Pratham-Mishra04 in #8604
- feat(codemode): add json and math modules to the Starlark sandbox and fix tool result shape guidance by @Pratham-Mishra04 in #8605
- feat(codemode): return failed tool calls as error values and keep nested tool payloads out of replies by @Pratham-Mishra04 in #8606
- feat(codemode): include script traceback in Starlark runtime errors by @Pratham-Mishra04 in #8607
- feat: add today, this week and this month to the date filter by @impoiler in #8592
- cluster monitoring by @akshaydeo in #8613
- fix(configstore): persist provider key enabled from config.json and document it by @R-droid101 in #8610
- chatgpt passthrough response content type fix by @akshaydeo in #8638
- feat(guardrails): hold log rows until deferred output-monitor guardrail results land by @Madhuvod in #8641
- docs(guardrails): document output monitor mode and
output_moderule option by @Madhuvod in #8644 - fix(configstore): revert enabled=false key hash change to keep UI toggles on upgrade by @R-droid101 in #8647
- fix(bedrock): exclude converse-only internal fields from InvokeModel build config by @ege-arhan in #8649
- feat: map prompt cache key to session id in vertex provider by @TejasGhatte in #8650
- antigravity user agent fix by @akshaydeo in #8658
- fix(agent): raise the OAuth credential cache bound to 5,000 entries by @akshaydeo in #8657
- removes unmerged graph reference by @akshaydeo in #8660
- chatgpt content-type fix and minor ux fixes by @akshaydeo in #8689
- fix(codemode): document failed tool calls as error values in executeToolCode description and try/except hints by @Pratham-Mishra04 in #8692
- fix(codemode): align Starlark error hints and tool docs with real interpreter messages by @Pratham-Mishra04 in #8693
- feat(rssfeed): add rss_feeds config store table and RSS/Atom fetcher by @akshaydeo in #8537
- feat(transports): add /api/rss feed management and merged news items endpoints by @akshaydeo in #8538
- feat(ui): add News tab and news sources sheet to the notification tray by @akshaydeo in #8539
- docs: add News Feeds feature page by @akshaydeo in #8540
- sdebar cleanups by @akshaydeo in #8695
- feat(datadog): add otel_llmobs_conversion and llmobs_gateway_mode by @roroghost17 in #8679
- feat(helm): support virtualKeys[].metadata by @roroghost17 in #8680
- feat(observability): track the stored prompt a request ran by @roroghost17 in #8681
- feat(mcp): expose client name and tool-reported failure on spans by @roroghost17 in #8682
- feat(tracing): capture the inbound W3C tracestate by @roroghost17 in #8683
- fix(responses): forward configuration_update items with their reasoning effort by @akshaydeo in #8634
- error codes on body limits by @akshaydeo in #8700
- fix: reasoning with tool response m by @akshaydeo in #8699
- [fix]: Gemini and Vertex batch results account for thinking tokens in usage (#8684) by @Shashank2985 in #8687
- ui: dashboard Overview chart registry (registerOverviewChart) so a downstream build can add charts; OSS build registers none (#8614) by @akshaydeo in #8628
- test(harness): correct stale and parallel-unsafe provider-harness cases by @akshaydeo in #8702
- fix(azure): forward unknown chat fields on the deployments route by @akshaydeo in #8703
- fix(bedrock): round-trip converse stopReason and additionalModelResponseFields by @akshaydeo in #8704
- fix(decisions): recover answer objects the model JSON-encoded as strings by @akshaydeo in #8705
- fix(routing): stop zero-key custom providers claiming every model by @akshaydeo in #8706
- fix(logstore): retry SQLite busy/locked batches whole instead of per row by @akshaydeo in #8707
- migration harness fixes om by @akshaydeo in #8708
- fix(logs): drop the deleted label on inferred passthrough log keys by @impoiler in #8715
- 2.3.1 changelog by @akshaydeo in #8717
- fix: bedrock explicit prompt caching mode by @akshaydeo in #8721
- guardrails incident view by @akshaydeo in #8722
- v2.3.1 by @akshaydeo in #8718
- fix: allow loopback fixtures in agent gateway e2e tests by @danpiths in #8723
- fix: configure skills marketplace URL for API integration tests by @danpiths in #8724
- test fixes by @akshaydeo in #8725
- test fixes by @akshaydeo in #8726
- test fixes: round 3 by @akshaydeo in #8729
- fix: accept bucket_size on the cost histogram by @impoiler in #8727
- graph fixes and extra fields in header test case fixes by @akshaydeo in #8734
- adds warpseed in go.work by @akshaydeo in #8737
- docs(openapi): document budget request approve endpoint by @R-droid101 in #8731
- fix: preserve realtime and Live pre-hook logs by @danpiths in #8738
- realtime plugins bug fix by @akshaydeo in #8740
New Contributors
- @pranavthakur0-0 made their first contribution in #6244
Full Changelog: ent-v2.3.0-base...ent-v2.3.1-base