What's Changed
- fix(governance): preserve VK provider-config key associations when PUT omits key_ids by @xiechimon in #7362
- fix: preserve live connection on failed make-before-break re-dial instead of tearing it down by @Pratham-Mishra04 in #6921
- fix: trigger reconnect after failed live-connection check instead of re-probing the same dead session by @Pratham-Mishra04 in #6922
- feat: extend dead-session detection and recovery to
executeToolInternal, renamingattemptAuthFailureRecoverytoattemptCallFailureRecoveryby @Pratham-Mishra04 in #6923 - fix: retry probe timeouts but treat dead sessions and auth failures as permanent in
ProbeRetryConfigby @Pratham-Mishra04 in #6924 - chore: clarify that connect-failure checker stops itself rather than retrying and rename test to match by @Pratham-Mishra04 in #6925
- fix: preserve
pending_verificationstate throughEnableClientand connection checker by @Pratham-Mishra04 in #6926 - test: add STDIO respawn and SSE stream-drop checker reconnect tests by @Pratham-Mishra04 in #6930
- docs: overhaul health monitoring docs to reflect adaptive cadence, automatic reconnect recovery, and simplified config knob by @Pratham-Mishra04 in #6931
- feat: add
RefreshMCPClientToolsfor on-demand tool rediscovery across all client types by @Pratham-Mishra04 in #6927 - feat: add "Refresh tools" action to MCP client table for immediate tool re-discovery by @Pratham-Mishra04 in #6928
- docs: add
refresh-toolsendpoint and Manual Tool Refresh section across MCP connection docs by @Pratham-Mishra04 in #6929 - feat: add
flow_idto reauthorize status polling so stale "authorized" config status is not mistaken for a completed consent by @Pratham-Mishra04 in #7041 - docs: add authenticated-user-without-access-profile breaking change and clarify
allow_by_defaultscope in v2.1.0 changelog by @Pratham-Mishra04 in #7050 - fix: surface context-aware rejection message when inbound bearer token is rejected during delegated exchange by @Pratham-Mishra04 in #7051
- feat: add
ReregisterDynamicClientandPOST /api/mcp/client/{id}/reregisterto recover from evicted DCR registrations by @Pratham-Mishra04 in #7228 - feat: add "Reauthorize with a new client" action to re-register OAuth client when provider rejects the existing
client_idby @Pratham-Mishra04 in #7229 - docs: add
reregisterendpoint and "Reauthorizing with a new client" section for invalid/dropped DCR client recovery by @Pratham-Mishra04 in #7230 - fix: widen OAuth2 client-controlled columns (
state,scope,client_name) fromvarchartotextto stop Postgres rejecting long values withserver_errorby @Pratham-Mishra04 in #7405 - feat(grant): access profiles can be held by teams, business units and customers by @BearTS in #7251
- feat(governance): a virtual key can be owned by a business unit by @BearTS in #7253
- feat(ui): the enterprise customer sheet no longer edits legacy limits by @BearTS in #7254
- feat(ui): assign a virtual key to a business unit, and show when a profile governs it by @BearTS in #7255
- feat(governance): refuse an entity's own budgets when an external governs it by @BearTS in #7386
- fix(governance): leave a governed entity's stored limits alone when config.json still declares them by @BearTS in #7401
- feat(ui): dac updates for permissions on ui by @BearTS in #7404
- feat: add
LegacyLimitHolderBusinessUnitconstant for business unit governance by @BearTS in #7421 - feat: hide "Add Budget" button when
maxLineslimit is reached for Business units by @BearTS in #7432 - main backmerge by @akshaydeo in #7454
- chore: read token usage through BifrostResponse.NormalizedUsage by @roroghost17 in #7366
- feat: add typed LLM span payload and attribute renderer by @roroghost17 in #7367
- perf: produce trace data only when a connector reads it by @roroghost17 in #7368
- fix: fixes content logging and adds tests by @roroghost17 in #7369
- refactor: skip plugin spans when no connector consumes them by @roroghost17 in #7370
- feat: export the cost breakdown to connectors by @roroghost17 in #7371
- test: add shared e2e export harness for connectors by @roroghost17 in #7372
- refactor: derive connector dimensions from EnrichmentDims by @roroghost17 in #7373
- feat: add metric_dimensions config for x-bf-dim-* metric tags by @roroghost17 in #7389
- feat: export app to connectors by @roroghost17 in #7390
- feat: export raw payloads to connectors by @roroghost17 in #7391
- fix: snapshot
BifrostResponsebeforePostLLMHookreturns to prevent async cache writer from racing core's post-hook mutation by @Pratham-Mishra04 in #7304 - feat(cli): add authenticated gateway transport by @R-droid101 in #7279
- feat(cli): add OpenAPI operations and structured output by @R-droid101 in #7280
- feat(cli): support authenticated harness launches by @R-droid101 in #7281
- feat(cli): add management and inference commands by @R-droid101 in #7282
- feat(cli): integrate SSO into the interactive launcher by @R-droid101 in #7283
- docs(cli): document authentication and management workflows by @R-droid101 in #7284
- feat(ui): add responsive
ProviderListcomponent with overflow chip by @impoiler in #7247 - feat(models): hide deprecated models from unsearched listings, sink them below live ones in search results by @impoiler in #7257
- feat: model selector component by @impoiler in #7258
- ui: model selector usage by @impoiler in #7259
- chore: remove unused model multiselect by @impoiler in #7272
- feat(logs): collapse sessions to earliest chain root with per-session rollup aggregates by @impoiler in #7298
- feat(logs): add
roots_onlyandgroup_sessionsquery params with aggregated child/session fields by @impoiler in #7299 - feat(logs): collapse sessions in grouped view with expandable session rows by @impoiler in #7300
- feat(routing): support pinned provider keys in fallbacks by @impoiler in #7379
- [fix]: preserve Anthropic extra params through Bedrock conversion by @wangrat in #7395
- feat(ui): select provider keys for routing fallbacks by @impoiler in #7380
- adds cost breakdown for llm calls for plugins by @akshaydeo in #7455
- docs(routing): document pinned fallback keys and legacy behavior by @impoiler in #7381
- fix(ui): replace "New" with "Add" across action buttons and remove outline variants by @impoiler in #7407
- feat(ui): add
ProviderSelectorcomponent by @impoiler in #7408 - feat(ui): replace ad-hoc provider selects with a unified
ProviderSelectorcomponent by @impoiler in #7410 - docs(agents): add
ProviderSelector/ModelSelectorusage guidelines by @impoiler in #7427 - fix(config): reset empty pricing/model-params URLs to defaults instead of rejecting them by @impoiler in #7449
- Adds Odin config storage and settings API by @akshaydeo in #6212
- Adds Odin settings page by @akshaydeo in #6213
- Adds Odin read-only query tools by @akshaydeo in #6214
- Adds Odin agent endpoint by @akshaydeo in #6215
- Adds Odin topbar button and fixed-width dock by @akshaydeo in #6216
- Adds Odin chat surface by @akshaydeo in #6217
- Gives every panel the same card border, and polishes Odin's chrome by @akshaydeo in #6218
- Adds Odin chat history by @akshaydeo in #6219
- Scopes Odin's queries to whose traffic the question is about by @akshaydeo in #6220
- Odin asks before it answers, with pickable options by @akshaydeo in #6221
- feat(warp): persist log embedding configuration by @akshaydeo in #6847
- feat(warp): index completed logs in vector store by @akshaydeo in #6848
- feat(warp): backfill log embeddings with sidekiq by @akshaydeo in #6849
- feat(warp): expose embedding backfill APIs by @akshaydeo in #6850
- feat(warp): add semantic log search by @akshaydeo in #6851
- feat(warp): configure embeddings and backfill in UI by @akshaydeo in #6852
- minor warp fixes by @akshaydeo in #6882
- feat(warp): query tool gaps by @kohlivrinda in #7068
- feat(warp): utc offset by @kohlivrinda in #7070
- feat(warp): prompt and settings fixes by @kohlivrinda in #7086
- feat(warp):parallel tool calls by @kohlivrinda in #7151
- auth path whitelisting by @akshaydeo in #5765
- feat(warp):context overflow fix by @kohlivrinda in #7183
- feat(warp): fix broken urls and indexing optimizations by @kohlivrinda in #7186
- feat(warp): add warp behind feature flag by @kohlivrinda in #7418
- enforce autoexecute allow list by @akshaydeo in #5766
- Backmerge/main into dev by @Pratham-Mishra04 in #7494
- main backmerge by @akshaydeo in #7484
- adds handling for bedrocks weird encryption prefix by @akshaydeo in #7475
- feat(warp): add dedicated Warp RBAC resource for access control by @impoiler in #7499
- feat(warp): redesign config page with grouped sections, grid fields, and date-range picker for backfill by @impoiler in #7502
- docs(warp): add conversation history and log index status endpoints, rename chat schemas to session by @impoiler in #7515
- feat: classify provider failures by
FailureClassand walk key pool past permanent per-key failures at anymax_retriesby @Pratham-Mishra04 in #7211 - feat: propagate provider retry hints as
retry_after_msonBifrostErrorby @Pratham-Mishra04 in #7212 - Backmerge main by @akshaydeo in #7532
- main backmerge by @akshaydeo in #7535
- feat(governance): add disable_content_logging column to virtual keys by @akshaydeo in #7476
- feat(governance): stamp the virtual key's content-logging decision on the request context by @akshaydeo in #7477
- feat(logging): honor the virtual key's content-logging decision in the log store by @akshaydeo in #7478
- feat(otel): strip exported content for virtual keys that turned content logging off by @akshaydeo in #7479
- feat(governance): expose disable_content_logging on the virtual key API by @akshaydeo in #7480
- feat(ui): content logging control on the virtual key editor, with e2e and docs by @akshaydeo in #7481
- test(e2e): content-logging permutation matrix across key, client, connector and header by @akshaydeo in #7491
- fix: preserve team calendar alignment after restart by @danpiths in #7563
- feat(ui): enterprise Home route, sidebar item and landing by @akshaydeo in #7591
- feat(logstore): single-pass per-user spend for a window by @akshaydeo in #7593
- [feat]: OpenRouter provider - native decisions for TypeSafe jev models by @hcavarsan in #7589
- fix(gemini): strip Authorization header when setting x-goog-api-key for Vertex Express compatibility by @SandyDRawat in #3835
- security audit skill by @akshaydeo in #7604
- [fix]: record output items before closing open items on Gemini streaming Responses by @wofiporia in #7359
- fix: persist
business_unit_idwhen updating a virtual key by @BearTS in #7616 - fix: resolve business unit name in virtual keys table assigned-to label by @BearTS in #7619
- fix: logstore sort for postgres by @kohlivrinda in #7509
- logs 'tool call' label by @kohlivrinda in #7510
- feat(warp): call the gateway in-process and remove base_url by @kohlivrinda in #7562
- warp-fixes by @kohlivrinda in #7511
- warp-e2e-suite by @kohlivrinda in #7512
- feat(ui): make toolbars responsive with container queries and icon-only collapse by @impoiler in #7621
- refactor(warp): trim verbose inline comments to concise one-liners by @impoiler in #7622
- fix(ui): add
unfilteredprop to model selectors in warp, limits, routing, and CEL builder by @impoiler in #7628 - fix(routing): keep custom provider name case in complexity router config by @MohammadHijjawi97 in #7590
- fix: bedrock cache control block drop by @akshaydeo in #7646
- fix: harness api calls for deepseek by @akshaydeo in #7650
- fix: typeSafe native compatibility rejects SDK-valid inputs and loses payload/response fidelity by @akshaydeo in #7652
- [fix]: Gemini/Vertex chat completions honor n by @axelray-dev in #7394
- [fix]: preserve Gemini image signatures in Responses streams by @axelray-dev in #7357
- fixes foreign-function-call-id issue for fallback from gemini to openai by @akshaydeo in #7654
- fix: bedrock provider drops extended-thinking token count by @akshaydeo in #7653
- dependabot fixes by @akshaydeo in #7670
- gemini signed inline image harness call by @akshaydeo in #7660
- fix: remove the unreachable warning icon from vmcps by @roroghost17 in #7663
- feat: add sign in option when temp tokens is disabled by @roroghost17 in #7664
- covers all cases of signature mismatch across the providers by @akshaydeo in #7635
- fixes anthropic-gemini-max-output-token-truncations by @akshaydeo in #7651
- file url failure fixes by @akshaydeo in #7638
- feat(core): per-attempt first-token (TTFT) abort for stream attempts by @akshaydeo in #7503
- feat(core): enforce TTFT deadline per stream attempt with fallback handover by @akshaydeo in #7504
- fix(ui): skip format validation for API-masked secret values in Copilot provider form by @impoiler in #6840
- fix(core): allow GitHub Copilot provider keys to have empty values for GitHub App bundle authentication by @impoiler in #6841
- fix(githubcopilot): distinguish 422 permission-not-granted from repository-access errors with targeted guidance by @impoiler in #6842
- fix(warp): query scoping and logs links by @kohlivrinda in #7667
- feat(governance): auto-delete expired virtual keys with a daily sidekiq job by @impoiler in #7525
- feat(ui): delete-after-expire option on the virtual key expiry picker by @impoiler in #7526
- feat: support optional transaction in
GetModelConfigsByScopeAndScopeIDsby @BearTS in #7703 - docs(governance): document delete_after_expire for virtual keys by @impoiler in #7527
- fix(ui): bump onboarding widget z-index and remove working-state opacity by @impoiler in #7558
- fix(configstore): preserve client metadata across config reconciliation writes by @impoiler in #7564
- feat(audit-logs): add
omit_ip_addressesoption to suppress client IP recording by @impoiler in #7671 - fix(ui): prevent mobile layout overflow in keys table, model catalog, client settings, and observability by @impoiler in #7672
- fix(governance): change rate limit placeholder from "100" to "No limit" by @impoiler in #7673
- fix(logs): use container queries to prevent metric strip truncation and anchor table status row by @impoiler in #7674
- feat(ui): add
DisabledReasontooltip wrapper to governance action buttons by @impoiler in #7675 - feat(ui): add infinite scroll pagination to entity selector pickers by @impoiler in #7678
- fix(provider-keys): preserve omitted fields on partial PUT update by @impoiler in #7679
- fix(ui): switch to relative period when enabling live polling from an absolute range by @impoiler in #7685
- fix(ui): render zero reasoning max tokens by @G-XD in #7662
- [fix]: schemas - accept mirrored reasoning shorthand+object when values agree by @Daltonganger in #7648
- fix(semanticcache): isolate cache entries by request family by @Atharva-Kanherkar in #7561
- adds missing harness case for mirrored reasoning by @akshaydeo in #7712
- fix: gemini rejecting tools with $ref by @akshaydeo in #7713
- feat(routing): ttft_timeout_ms on routing rules by @akshaydeo in #7505
- feat(ui): TTFT cutoff field on routing rules by @akshaydeo in #7506
- docs(routing): document routing rule TTFT cutoff by @akshaydeo in #7507
- fix(ui): seed chart containers with a positive initial dimension by @basil-k-aji-dev in #7594
- dependabot fixes by @akshaydeo in #7744
- fix(warp): links that cannot open are no longer clickable by @kohlivrinda in #7736
- feat(complexity): add Typesafe Jev classifier as primary and semantic fallback by @Madhuvod in #7485
- dix(warp): hide a finished backfill once the embedding space changes by @kohlivrinda in #7740
- feat(complexity): add Jev decision cost tracking, RequestType field, and stepped classifier UI by @Madhuvod in #7605
- fix(warp): nudges oown traffic hint and whose keys a ranking covers by @kohlivrinda in #7746
- [docs] : docs for jev router by @Madhuvod in #7647
- feat(warp): read a key and a person the way the dashboard does by @kohlivrinda in #7750
- feat(complexity): add per-tier Jev criteria overrides with UI guidance editors and jev_defaults status endpoint field by @Madhuvod in #7690
- feat: add HTTPTransportResponseHeadersHook in plugins by @TejasGhatte in #7537
- feat(schemas): add
BifrostGuardrailDetectionfor detect-only guardrail policy matches by @Madhuvod in #7697 - feat(warp): an unrestricted caller's questions cover the whole deployment by @kohlivrinda in #7752
- docs: add Held Keys section to adaptive load balancing, replace Mermaid diagrams with images by @Pratham-Mishra04 in #7531
- docs: updated docs for jev router by @Madhuvod in #7749
- feat: add
BifrostContextKeyLoadBalancerAttemptandLoadBalancerMetadataPrefixto propagate enterprise load balancer routing decisions into log metadata, with system-key filtering andcluster_node_idcomposite index by @Pratham-Mishra04 in #7456 - refactor: extract shared
MetricStripprimitives into a reusable component module by @Pratham-Mishra04 in #7644 - docs: add A10 Guardrails provider integration docs by @Madhuvod in #7755
- adds handleing for per-message effort by @akshaydeo in #7714
- fixes access profile summary UI by @akshaydeo in #7642
- fix: remove wrapper padding from adaptive routing page and add
LoadBalancerHistorycache tag by @Pratham-Mishra04 in #7645 - feat: add
requested_provider/requested_modeltoRoutingInfoand response headers so the caller's pre-routing route is visible after a routing rule rewrites it by @Pratham-Mishra04 in #7683 - feat: add
CoversAllModelstoFailureClassand pin classifier outputs for key-wide failures by @Pratham-Mishra04 in #7684 - feat: add downstream-extensible logs registry for routing panel, labelled metadata filters, and reserved key prefixes; hide all load-balancer metadata keys from filter sidebar and detail grid by @Pratham-Mishra04 in #7734
- feat(warp): themes related questions sample logs instead of using semantic search by @kohlivrinda in #7756
- feat(warp): feature flag on by default by @kohlivrinda in #7757
- feat: capture and persist upstream mcp server instructions by @roroghost17 in #7516
- feat: forward server instructions on the MCP gateway by @roroghost17 in #7517
- feat: add
ToolUsage.WebSearchfield and deprecateNumSearchQueriesin token detail by @sammaji in #7624 - feat: inject mcp server instructions into LLM requests by @roroghost17 in #7518
- fix: include server instructions in on-demand MCP tool refresh by @roroghost17 in #7519
- docs: document the Virtual MCP API and deprecate its tool-groups alias by @roroghost17 in #7524
- feat: replace
search_context_cost_per_querywithweb_search_cost_per_requestpriced fromtool_usage.web_search.num_requestsby @sammaji in #7687 - feat: add per-mcp server override for max instructions length by @roroghost17 in #7766
- feat: add raw payloads export support by @roroghost17 in #7753
- fix: fix custom tool calls tracing for responses by @roroghost17 in #7738
- feat: per-connector attribute denylist by @roroghost17 in #7754
- chore: update helm charts for excluded attributes and raw payloads for connectors by @roroghost17 in #7758
- fix: update Bifrost labels append call to correctly work with custom labels by @roroghost17 in #7739
- fix: move the shared toggles outside of the pull view for telemetry by @roroghost17 in #7741
- docs: add exclude attributes and raw payloads in connectors by @roroghost17 in #7759
- fix: add metrics_enabled field to config json for telemetry by @roroghost17 in #7745
- feat: retrieve model method by @TejasGhatte in #7419
- fix: report the effective HTTP status on error metrics and spans instead of "unknown" by @roroghost17 in #7451
- fix: give stream errors and key-selection failures a real HTTP status by @roroghost17 in #7611
- dependabot fixes by @akshaydeo in #7796
- feat: add multimodal embedding support for cohere, gemini, and vertex by @TejasGhatte in #2559
- feat: update the embedding span attributes to support the new shape by @roroghost17 in #7804
- feat(warp): update warp indexer to the new embedding input shape by @kohlivrinda in #7805
- feat: add
embedding_inputcolumn and ui display for embedding request inputs by @sammaji in #7001 - chore: add multimodal embedding tests for gemini, vertex and cohere by @sammaji in #7002
- feat: add embedding support for parasail provider by @sammaji in #7096
- feat: add
chart-infoandchart-info-inksemantic color tokens for in-progress status by @Pratham-Mishra04 in #7809 - docs: add multimodal embeddings guide and update embedding input schema examples by @TejasGhatte in #3367
- chore: add multimodal embeddings harness coverage for content parts, per-item params, batchEmbedContents, Cohere native envelope, Bedrock Cohere v4, and Parasail by @sammaji in #7102
- feat: add titan multimodal embedding support and map
encoding_formatto cohereembedding_typesby @sammaji in #7459 - feat: preserve
usageMetadatatoken counts for vertex and gemini by @sammaji in #7463 - fix: allow gs:// uri for gemini and vertex embeddings by @sammaji in #7549
- feat: add nova multimodal embedding support for bedrock by @sammaji in #7550
- fix: capture raw request in bedrock and vertex embedding responses by @sammaji in #7566
- chore: add harness tests for bedrock nova and titan multimodal embeddings, encoding_format mapping, and vertex embedding usage by @sammaji in #7472
- feat(warp): allow admins to set up multiple chat models by @kohlivrinda in #7814
- ui: add headers section in create MCP form similar to edit by @roroghost17 in #7817
- feat: update OTEL to semconv 1.44.0 by @roroghost17 in #7810
- fix: carry instruction fields through the scoped MCP client refetch by @roroghost17 in #7818
- fix: stop downgrading https metrics endpoints to plain HTTP by @roroghost17 in #7815
- fixes listAllModels returns duplicate and skipped models when a provider listing changes between pages by @akshaydeo in #7771
- fix(ui): widen virtual-keys status column and refine Warp launcher kbd styling by @impoiler in #7735
- fix(modelcatalog): fall back to DB pricing when the datasheet URL hangs by @impoiler in #7737
- feat(e2e): add axe-core accessibility audit with coverage reporting and oxlint jsx-a11y static checks by @impoiler in #7742
- fix(ui): address accessibility issues across components (aria labels, roles, keyboard nav, contrast) by @impoiler in #7743
- fix(ui): replace hardcoded zinc colors with semantic tokens and improve sidebar/tabs accessibility by @impoiler in #7748
- fix(a11y): add aria-labels to progress bars, filters, and log row open button by @impoiler in #7751
- feat(warp): make dock panel resizable by @impoiler in #7765
- feat(bedrock): error on incomplete converse streams missing messageStop by @impoiler in #7797
- refactor(virtual-keys): simplify expiry cleanup notifications to counts only by @impoiler in #7828
- sidekiq jobs in notifications by @akshaydeo in #7820
- ifix: bare claude model hoist thinking blocks by @akshaydeo in #7789
- fix(deps): bump hono to 4.13.7 and litellm to 1.88.6 by @akshaydeo in #7836
- adds support for guardrails in bedrock payloads by @akshaydeo in #7715
- fix(scale): postgres critical fixes for 500M logs, 100k users and VKs by @akshaydeo in #7606
- fix(scale): postgres high-severity fixes for 500M logs, 100k users and VKs by @akshaydeo in #7607
- fix(scale): postgres scale follow-ups and cap handling by @akshaydeo in #7608
- feat(core): vertex aws workload identity federation by @akshaydeo in #7705
- feat(framework,transports): persist and validate vertex aws workload identity by @akshaydeo in #7706
- feat(ui): vertex workload identity (aws) auth tab by @akshaydeo in #7707
- docs: aws workload identity federation for vertex by @akshaydeo in #7708
- feat(core): route aws external_account json through the sdk credential chain by @akshaydeo in #7709
- cap memory alloction for zstd by @akshaydeo in #5782
- guard oauth discovery by @akshaydeo in #5780
- sanitize framework price config url by @akshaydeo in #5781
- scope semantic cache keys by virtual key by @akshaydeo in #5769
- default inference auth on first time setup by @akshaydeo in #5767
- ping oauth discovery url by @akshaydeo in #5779
- unauthenticated proxy blocks by @akshaydeo in #5778
- recover request panic fix by @akshaydeo in #5771
- require auth for provider endpoint changes by @akshaydeo in #5768
- fix(core): add utils http client helper by @akshaydeo in #7847
- fix(framework,transports): use http client for outbound fetches by @akshaydeo in #7848
- fix(core,transports): validate mcp client targets at connect time by @akshaydeo in #7849
- fix(transports): gate provider endpoint updates by @akshaydeo in #7850
- fix(transports,framework): tighten mcp oauth2 server validation by @akshaydeo in #7851
- fix(plugins): scope semantic cache entries per virtual key by @akshaydeo in #7852
- fix(governance): canonicalise model config keys by @akshaydeo in #7853
- fix(transports): verify credentials on auth config update by @akshaydeo in #7854
- fix(core,transports): validate passthrough paths and provider header by @akshaydeo in #7855
- fix(core,transports): bound request decompression and harden realtime request handling by @akshaydeo in #7856
- test(e2e): assert management api guards across auth passes by @akshaydeo in #7857
- main backmerge by @akshaydeo in #7869
- [fix]: use provider-reported cost for transcription pricing by @hmdsefi in #7825
- fix: gemini parameters during fallback by @akshaydeo in #7883
- adds missing transient error detector for pg to retry with chunks by @akshaydeo in #7882
- adds missing tool level transalation for anthropic -> openai caching by @akshaydeo in #7885
- fix(gemini): apply request-level taskType and title to every batched embedding input by @akshaydeo in #7884
- webhooks: require an admin session for private-network endpoints by @akshaydeo in #7886
- mcp: require an admin session for secret references in client fields by @akshaydeo in #7887
- governance: scope code-mode tool discovery to the request's grant by @akshaydeo in #7888
- governance: revoke a virtual key's MCP OAuth grants on rotation by @akshaydeo in #7889
- integrations: read the passthrough model strictly from the forwarded body by @akshaydeo in #7890
- governance: require a model for file-based batches under a model-restricted key by @akshaydeo in #7891
- governance: bind batch lookups to the creating virtual key by @akshaydeo in #7892
- auth: refuse unlisted browser origins on the management API while auth is disabled by @akshaydeo in #7893
- [fix]: Anthropic provider - normalize error.type in the Anthropic error envelope by @jimseiwert in #7916
- [fix]: preserve Mistral streamed text arrays and reject unsupported blocks by @xujiantop-crypto in #7939
- [fix]: send assistant role once on converted chat streams by @hmdsefi in #7699
- feat(ui): org chart route, governance sidebar entry and fallback by @akshaydeo in #7954
- adds all missing harness tests by @akshaydeo in #7907
- [fix]: Require authenticated management access to delete MCP tool logs by @xujiantop-crypto in #7913
- [fix]: Gemini provider - keep schemaless function tools and order tool results by call id by @jimseiwert in #7927
- core: allow typesafe as a custom provider base type by @akshaydeo in #7948
- ui: offer typesafe as a custom provider base format by @akshaydeo in #7949
- docs: document typesafe as a custom provider base type by @akshaydeo in #7950
- fix(core): stop dead provider blocking aggregate model list by @novai42 in #6614
- chore: add
attributeProjectMappingsandbulkSyncIntervalto config schema by @BearTS in #7803 - fix: validate provider endpoint URL components by @akshaydeo in #7958
- fix: constrain passthrough to inference routes by @akshaydeo in #7959
- fix(core): route every provider egress stack through proxy_config by @akshaydeo in #7567
- fix(transports): apply the global proxy to providers without their own by @akshaydeo in #7568
- fix: validate OAuth callback registration and consent by @akshaydeo in #7960
- fix(core): dial proxies dual-stack so IPv6 proxies work by @akshaydeo in #7569
- refactor(core): run provider auth and URL fetch on fasthttp by @akshaydeo in #7570
- test: pin proxy routing for every permutation by @akshaydeo in #7571
- feat(core): live proxy clients in the HTTP client factory by @akshaydeo in #7573
- feat: build the HTTP client factory in OSS and route webhooks, skills and plugin downloads through it by @akshaydeo in #7574
- feat: route MCP, OAuth, catalog sync and OpenTelemetry through the global API proxy by @akshaydeo in #7575
- feat(core): reach https:// proxies over TLS on every provider stack by @akshaydeo in #7576
- fix: bound code execution resources by @akshaydeo in #7962
- [fix]: Anthropic - preserve stop_sequence stop reason and matched sequence by @jimseiwert in #7921
- global css fix by @akshaydeo in #7985
- adds missing tool level transalation for anthropic -> openai caching (#7885) by @akshaydeo in #7955
- fix(config): skip a governed team's or customer's limits at startup, not only after it by @BearTS in #7794
- feat(config): teams and customers carry access_profile, and LoadConfig reports what it wrote by @BearTS in #7795
- feat(config): the global proxy, with its SCIM, inference and API toggles, in config.json by @BearTS in #7799
- feat(helm): add
proxy_config,access_profileon entities,business-unit-data/customer-dataDAC, andttft_timeout_msby @BearTS in #7791 - feat(governance): add
proxy_config, access profile on entities, andbusiness-unit-data/customer-dataDAC scopes to config.json docs and schema by @BearTS in #7792 - feat(logs): redesign grouped view expander with tree lines, turn/fallback labels, and kind markers by @impoiler in #7970
- feat(adaptive-routing): add Incidents page and sidebar nav entry by @impoiler in #7974
- fix(framework): run only pending migration steps on startup by @impoiler in #7994
- feat(customers): add server-side team count to customer list instead of fetching all teams by @impoiler in #7998
- feat(warp): let deployments report row-level caller restriction by @kohlivrinda in #7972
- feat(warp): prefilter semantic search by caller visibility by @kohlivrinda in #7973
- feat: model retrieve for other providers by @TejasGhatte in #7716
- fixes single target ttf field ui capture by @akshaydeo in #7996
- fix: output tokens on fallback and adaptive thinking by @TejasGhatte in #7732
- fix: race condition when LLM span is dropped in telemetry by @roroghost17 in #7731
- tests: mcp tests by @roroghost17 in #7991
- feat: gpt live core structs by @TejasGhatte in #7721
- fix: cost changes for gpt-live and key selection by @TejasGhatte in #7722
- fix: gpt live sessions handling by @TejasGhatte in #7723
- feat: gpt live webrtc handling by @TejasGhatte in #7724
- feat: attach and sip routes by @TejasGhatte in #7725
- feat: content route gpt live by @TejasGhatte in #7726
- fix(warp): resolve calendar days in asker timezone by @kohlivrinda in #7978
- fix(warp): explain refused model access by @kohlivrinda in #7995
- feat: logging for gpt-live api by @TejasGhatte in #7727
- tests: live api by @TejasGhatte in #7728
- tests: openai sdk tests for live by @TejasGhatte in #7993
- feat: live content request by @TejasGhatte in #7999
- fix: cr fixes for live handling by @TejasGhatte in #8011
- feat(schema): generic SSO provider accepts a login displayName by @BearTS in #8045
- fix(ui): business units sidebar entry checks the BusinessUnits permission by @BearTS in #8046
- backmerge by @akshaydeo in #8051
- feat(warp): serve users without access profile by @kohlivrinda in #8049
- docs(guardrails): clarify prompt guardrails judge model requirements and update max_output_tokens default to 1000 by @Madhuvod in #8002
- refactor: update the storage structure for overhead breakdown in logs table by @roroghost17 in #8050
- feat: add
force_reasoning_only_models_to_responsescompat toggle to route chat+tools requests to Responses API for models withoutreasoning_with_tool_callssupport by @sammaji in #7806 - chore: update compat plugin docs for
force_reasoning_only_models_to_responsesby @sammaji in #7807 - fix: stamp
ServerSideFallbackModelwhen deepseek serves a different model than requested by @sammaji in #7811 - fix: resolve datasheet based server side model for deepseek by @sammaji in #7822
- feat: add agent gateway core contracts by @danpiths in #7772
- feat: persist agent registrations and push state by @danpiths in #7773
- feat: implement agent gateway runtime by @danpiths in #7774
- feat: expose agent gateway transports by @danpiths in #7775
- feat: govern agent access by @danpiths in #7776
- feat: add agent activity logging by @danpiths in #7777
- feat: trace agent gateway operations by @danpiths in #7778
- feat(decisions): add Laya-specific typed fields to decision answers, response and usage by @Madhuvod in #7982
- feat: add agent logs workspace by @danpiths in #7779
- feat(decisions): add Cloudflare Workers AI envelope unwrapping for Clef support by @Madhuvod in #8007
- feat: add agent catalog and push management by @danpiths in #7780
- feat: configure agent gateway settings by @danpiths in #7781
- feat: package agent gateway configuration by @danpiths in #7782
- chore: update agent gateway development environment by @danpiths in #7783
- Bedrock → Responses store propagation fix by @akshaydeo in #8032
- fix(bedrock): keep the reasoning item id when a Converse client replays redactedContent by @akshaydeo in #8033
- chore: add harness tests for deepseek served-model pricing and reasoning-only-to-responses routing by @sammaji in #7823
- fix converse reasoning reply by @akshaydeo in #8044
- fix responses history null logporbes handling by @akshaydeo in #8036
- moves reasoning_effort support to datashseet by @akshaydeo in #8075
- feat(complexity): add decision-model classifier with per-tier guidance criteria and settings sheet by @Madhuvod in #8059
- fix(logstore): include plugin logs in exported s3 payload snapshot by @Madhuvod in #8061
- feat(complexity): add Laya, Nimble, and Clef provider icons and unblock Next without a decision provider by @Madhuvod in #8080
- docs(dac): customer-data grants only what sits under the caller's customers by @BearTS in #8086
- fix(dashboard): count ranking rows the caller cannot name under Other by @BearTS in #8087
- fix(agent-logs): bound filter dropdowns by the DAC dimension ceiling by @BearTS in #8088
- fix(governance): read paginated model configs through ScopedDB by @BearTS in #8089
- fix: vertex video retrieve uses region from the id by @TejasGhatte in #8083
- feat: add
shelltool andshell_call/shell_call_outputmessage types with streaming support by @sammaji in #7292 - feat: translate
allowed_callersbetween anthropic and openai on chat and responses paths by @sammaji in #7293 - feat: add
apply_patchtool andapply_patch_callmessage type support across providers by @sammaji in #7301 - fix drop shell and code-interpreter tools on Bedrock providers in responses filter by @sammaji in #7668
- feat: add gemini code execution support for responses api (streaming and non-streaming) by @sammaji in #7711
- fix: add actions array field to
ResponsesComputerToolCallfor newer model responses by @sammaji in #7733 - fix: preserve cache control for anthropic server tools by @sammaji in #7979
- fix: mux oai and anthropic style computer tools by @sammaji in #7980
- fix: treat shell and apply_patch calls as tool calls in semanticcache by @sammaji in #8093
- chore: add harness cases for shell, apply_patch, allowed_callers, and gemini code execution by @sammaji in #7633
- feat(logstore): add option to exclude request types from object storage offloading by @impoiler in #8047
- docs(logs): document object_storage_exclude_request_types for log exports by @impoiler in #8048
- community: add Parlel to MCP library by @impoiler in #8041
- feat(configstore): add ignore_provider_cost provider config by @impoiler in #8052
- feat(modelcatalog): price from catalog when ignore_provider_cost is on by @impoiler in #8053
- feat(logging): store bifrost cost breakdown for providers that ignore reported cost by @impoiler in #8054
- fix(logstore): stop showing an opaque provider total as input cost by @impoiler in #8055
- feat(ui): add pricing tab with ignore provider cost toggle by @impoiler in #8056
- docs(providers): document
ignore_provider_costoption by @impoiler in #8057 - fix(logstore): make ClickHouse max_query_size configurable and default it to 16 MiB by @impoiler in #8126
- feat(governance): add optional
disabledfield to virtual key MCP config type by @impoiler in #8130 - feat: adds BackgroundJobs rbac permissions by @impoiler in #8132
- refactor: deprecate attribution context keys in favour of
ctx.Grant()accessors by @Pratham-Mishra04 in #7975 - fix: fall back to sibling keys when a session-bound key is rejected outright by @Pratham-Mishra04 in #8100
- feat: add
x-bifrost-request-idresponse header and stop forwarding providerx-bifrost-*headers by @Pratham-Mishra04 in #8101 - fix: reject negative or non-finite weights for keys, virtual key provider configs, and routing targets to prevent weighted-random panic by @Pratham-Mishra04 in #8102
- docs: trim redundant explanation from fallback comment in model catalog resolver by @Pratham-Mishra04 in #8103
- fix: return 409 conflict instead of 500 for duplicate routing rule priority and print scope ID rather than pointer by @Pratham-Mishra04 in #8104
- feat: add
isNewparameter toReloadProviderso reloads can distinguish added providers from edited ones by @Pratham-Mishra04 in #8105 - fix: stop direct keys from fanning out to every provider on model listing by @Pratham-Mishra04 in #8106
- fix: restore primary provider response headers when all fallbacks fail so the primary's error isn't returned with the last fallback's headers by @Pratham-Mishra04 in #8107
- fix: return provider's own error when a caller-supplied direct key is refused instead of collapsing into 502
upstream_credentials_exhaustedby @Pratham-Mishra04 in #8108 - fix: keep session affinity from binding to fallbacks that served direct-key requests and from moving requests pinned to the head provider's key by @Pratham-Mishra04 in #8109
- fix(governance): stop billing dedup from dropping a fallback's usage after a billed primary attempt by @Pratham-Mishra04 in #8111
- fix: make the key blacklist tests fail when blacklists are ignored, and correct the session affinity docs by @Pratham-Mishra04 in #8112
- fix(core): bind no session key when the caller's direct key serves by @Pratham-Mishra04 in #8113
- fix(core): name the fallback a plugin answered in a stream's routing headers by @Pratham-Mishra04 in #8114
- fix: harden A2A push configuration and tracing by @danpiths in #8125
- fix(governance): keep inline limits through the config.json prune and off governed teams by @BearTS in #8156
- fix(governance): reconcile virtual key and provider config inline budgets from config.json by @BearTS in #8161
- fix(network): honor DisablePathNormalizing in live fasthttp client by @Madhuvod in #8164
- fix: switching an MCP token-exchange or agent OAuth secret to a reference is saved by @BearTS in #8160
- test(harness): fail the routing fallback key pinning rows when the rule cannot be created, instead of skipping them by @Pratham-Mishra04 in #8115
- test(harness): session key affinity on a run-scoped custom provider by @Pratham-Mishra04 in #8116
- feat: 100k tier pricing by @TejasGhatte in #8144
- test: key selection and retry coverage on run-scoped providers, with unit tests for backoff, fixed keys and filtered pools by @Pratham-Mishra04 in #8117
- test: fallback coverage across drop-in routes, embeddings, streaming responses and governance refusals by @Pratham-Mishra04 in #8118
- test: routing rule scope precedence, lifecycle, chains, conditions and fallback coverage by @Pratham-Mishra04 in #8119
- test: governance routing coverage for virtual key access, load balancing fallbacks, key restrictions, streaming rate limits and team budgets by @Pratham-Mishra04 in #8120
- test: model catalog resolver unit tests and catalog routing coverage for bare models, catalog fallbacks, drop-in routes and virtual key allowlists by @Pratham-Mishra04 in #8121
- test: session affinity coverage for streaming, TTL expiry, caller key pins, the anthropic route and per-virtual-key sessions, with matrix repairs and header parsing tests by @Pratham-Mishra04 in #8122
- test: requested-provider check on every prefixed inference row, x-model-provider routing on passthrough and Anthropic file and batch routes, and ParseModelString tests by @Pratham-Mishra04 in #8123
- test(harness): send the setup token on in-script management calls, and pin passthrough's restriction to the route's own provider by @Pratham-Mishra04 in #8124
- fix: try the provider holding the caller's pinned API key first when routing offers it further down the chain by @Pratham-Mishra04 in #8138
- docs: clarify circuit breaker fallback chaining and key pin precedence over direct keys by @Pratham-Mishra04 in #8170
- dependabot fixes by @akshaydeo in #8178
- fix(tracing): honor ignore_provider_cost and request pricing scopes on streamed cost by @impoiler in #8165
- fix: move batch embeddings into single embeddings when params are same by @sammaji in #8140
- fix: send image-only bedrock cohere embeddings as images[] with input_type image by @sammaji in #8143
- fix: embedding params handling for openai, cohere, and semanticcache by @sammaji in #8146
- fix: nest documentOcr and audioTrackExtraction under embedContentConfig for gemini and vertex embeddings by @sammaji in #8199
- feat(ui): move background jobs into a separate tab in the notification panel by @impoiler in #8211
- [fix]: routing tree - resolve silent truncation beyond 100 rules by @Shashank2985 in #8194
- feat: add opt-in private push callback delivery by @danpiths in #8204
- test: add Agent Gateway lifecycle e2e to the release pipeline by @danpiths in #8206
- chore: updates provider harness by @sammaji in #8150
- feat(warp):improved error codes by @kohlivrinda in #8176
- fix(logstore: keep millisecond precision in clickhouse time-window filters by @kohlivrinda in #8177
- fix(warp): one similarity scale for semantic search, 0.5 default, multi-phrasing fan-out by @kohlivrinda in #8180
- fix(logstore): team, customer and bu filters match multi-value owners on Clickhouse and sqlite by @kohlivrinda in #8182
- fix(logstore): keep error_details in the database when object storage is on by @kohlivrinda in #8183
- fix(warp): reopened failed turns keep their error code by @kohlivrinda in #8184
- fix(logstore): keep millisecond precision in the ClickHouse keyset cursor by @kohlivrinda in #8185
- fix: gpt live tests and direct key by @TejasGhatte in #8133
- fix(warp): say its own queries carry the asker's attribution, and never claim configuration by @kohlivrinda in #8186
- tests: live test updates by @TejasGhatte in #8202
- fix: live in openai custom provider UI by @TejasGhatte in #8203
- fix: add batch ID attribute to logging settlement spans by @sammaji in #8213
- docs: update navbar CTAs and footer layout by @kamyashah-arch in #8224
- fix: preserve reasoning.summary in chat-to-responses conversion by @sammaji in #8214
- community: add FXMacroData to MCP library by @roberttidball in #8005
- fix: detach request-scoped work and plugin Init from *fasthttp.RequestCtx to prevent "missing cancel error" panic on shutdown by @roroghost17 in #8226
- fix: export raw request and provider error body for failed requests by @roroghost17 in #8227
- fix(cli): separate CLI browser auth identity by @R-droid101 in #7579
- chore(helm): sync chart with config.schema.json for v2.1.44 by @BearTS in #8187
- feat(helm): support topologySpreadConstraints on the Bifrost pod by @BearTS in #8188
- feat(helm): add extraContainers and guard native sidecars by @BearTS in #8189
- fix(deps): resolve open Dependabot alerts across CI tools, MCP examples and Python tests by @akshaydeo in #8241
- fix: correct connector export gaps surfaced by the e2e matrix by @roroghost17 in #8228
- [fix]: configstore - serve new skill version when LatestVersion is unset by @ozenyunus35 in #8251
- fix: preserve safeguard results in streaming responses by @danpiths in #8252
- [fix]: preserve cache_control, citations, prompt_cache_breakpoint and cachePoint in deepCopyChatContentBlock by @Shashank2985 in #8216
- [fix]: apply log retention changes without restarting the cleaner by @Constantine3 in #8243
- go mod patches by @akshaydeo in #8200
- fix(logstore): truncate ClickHouse input histories to last message in list queries by @ege-arhan in #8247
- fix(modelcatalog): fall back to lowercase model name in pricing lookup by @impoiler in #8229
- ui: Logs details sheet header stickiness and state preservation by @impoiler in #8240
- fix(core): map output_text to text on multi-part assistant turns by @shreyanshj10 in #8208
- adds snyk to allowed domains in runner by @akshaydeo in #8265
- fix(core): keep the failed tool result marker on OpenAI Responses by @shreyanshj10 in #8209
- feat(decisions)porting v1/decisions to normalised openai shape by @Madhuvod in #8181
- fix(openai): send custom tools as function tools when the datasheet marks them unsupported by @impoiler in #8248
- feat: add injected_tools provider config field by @akshaydeo in #8021
- feat: accept injected_tools on the provider API and config schema by @akshaydeo in #8022
- feat: let provider-injected MCP tools past tool filters by @akshaydeo in #8023
- feat: rewrite requests to carry provider-injected tools by @akshaydeo in #8024
- refactor: split chat and responses dispatch out of the provider handlers by @akshaydeo in #8025
- feat: execute provider-injected tools server side for non-streaming requests by @akshaydeo in #8026
- feat: execute provider-injected tools in streaming chat by @akshaydeo in #8027
- feat(decisions): add OpenAI native /v1/decisions support for gpt-6-luna by @Madhuvod in #8191
- feat: execute provider-injected tools in streaming responses by @akshaydeo in #8028
- feat: serve injected tools on the Anthropic passthrough path by @akshaydeo in #8029
- feat(ui): add a web search tab to provider configuration by @akshaydeo in #8030
- feat(decisions): add OpenAI-format /openai/v1/decisions route by @Madhuvod in #8192
- feat(complexity): support OpenAI decision models like gpt-6-luna in the complexity router by @Madhuvod in https://github.com/maximhq/bifrost/pull/8193
- feat(pricing): add decision-specific rates for chat-row models and skip negative variable-price rates by @Madhuvod in https://github.com/maximhq/bifrost/pull/8249
- [fix]: Routing Tree CEL parser quote and escape handling in celParser by @Shashank2985 in https://github.com/maximhq/bifrost/pull/8173
- chore: refactor e2e ui test suite by @sammaji in https://github.com/maximhq/bifrost/pull/7981
- feat(framework/queue): add queue interfaces, options, store SPI and registry by @akshaydeo in https://github.com/maximhq/bifrost/pull/8217
- feat(framework/queue): add generic store engine and in-memory store by @akshaydeo in https://github.com/maximhq/bifrost/pull/8218
- feat(framework/queue): add SQL store and the logstore queue type for SQLite by @akshaydeo in https://github.com/maximhq/bifrost/pull/8219
- feat(framework/queue): add the Postgres dialect for the logstore queue by @akshaydeo in https://github.com/maximhq/bifrost/pull/8220
- feat(framework/queue): add the ClickHouse store for the logstore queue by @akshaydeo in https://github.com/maximhq/bifrost/pull/8221
- feat(framework/queue): wake consumers across instances with Postgres LISTEN/NOTIFY by @akshaydeo in https://github.com/maximhq/bifrost/pull/8222
- test(framework/queue): add speed and space benchmarks for every backend by @akshaydeo in https://github.com/maximhq/bifrost/pull/8250
- logstore gating for smoother logstore migrations by @akshaydeo in https://github.com/maximhq/bifrost/pull/8264
- review fixes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8285
- fix(core): detect truncated Content-Length response bodies by @Constantine3 in https://github.com/maximhq/bifrost/pull/8287
- fixes mid conversation tool changes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8278
- fix: disable GenAI raw-body passthrough when falling back to non-Google providers by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8230
- fix: record timeout and cancellation classes on the attempt trail for attempts Bifrost ends by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8231
- revert: stop moving the provider holding the caller's pinned API key to the front of the chain by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8232
- docs: update adaptive load balancing endpoints to /api/adaptive-routing and clarify release response semantics by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8233
- test(harness): an isolated serial pass, and setup-token auth plus a poll cap for the routing-wiring collection by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8234
- test: in-process routing scenario coverage for key pins, session affinity, failure classes and fallbacks, plus weighted distribution chi-square tests by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8235
- test(harness): routing rows for rules, governance, catalog, sessions and direct keys, plus a serial direct-key settings folder by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8236
- test(e2e): run routing and model-catalog wiring collections in CI against clean servers booted with
--binaryby @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8237 - fix: convert GenAI requests for Claude and other non-Google Model Garden models on Vertex instead of passing the raw body through by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8343
- test: pin provider-injected web search in the provider harness by @akshaydeo in https://github.com/maximhq/bifrost/pull/8031
- fix: cr fixes for mcp web search by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8253
- feat(semanticcache): scope cache entries by identity, with a
disable_identity_scopingopt-out by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8337 - fix: semantic cache dimension mismatch checks on every vector store, cosine scoring, and plugin update rollback by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8338
- fix(warp): treat Weaviate scores as raw cosine in semantic search like every other vector store by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8339
- feat: emit x-bifrost-cache-* response headers for semantic cache lookups, including streams by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8340
- test(e2e): semantic cache wiring newman suite on Redis and Weaviate by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8341
- fix: governance key narrowing in live by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8293
- fix: failed delegation error by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8294
- fix: invalid request error in realtime by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8295
- fix: session close by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8296
- fix: key admission in unit by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8297
- fix: 15 seconds charge on webrtc initialization of live session by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8298
- fix: delegation error by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8299
- fix: alias resolution in live by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8319
- fix(openai): keep gpt-5.6+ in implicit prompt cache mode when translating cache_control by @akshaydeo in https://github.com/maximhq/bifrost/pull/8334
- fix(live): billing via webrtc channel by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8346
- fix: skip config.json limits on virtual keys governed by an access profile by @BearTS in https://github.com/maximhq/bifrost/pull/8332
- fix: safeguards results in delta by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8154
- fix: extra fields on responses stream chunks by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8169
- fix: mid stream retry logging by @TejasGhatte in https://github.com/maximhq/bifrost/pull/7976
- fix: tool format for kimi moonshotai by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8179
- fix: clamp max outputs and thinking tokens on fallbacks by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8242
- fix: bill usage from cancelled requests in prometheous by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8244
- fix: gpt models implicit caching fix by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8322
- fix: route MCP tool results through output guardrails before logging by @roroghost17 in https://github.com/maximhq/bifrost/pull/8305
- feat(compat): make decision-to-responses emulation opt-in via convert_decision_to_responses by @Madhuvod in https://github.com/maximhq/bifrost/pull/8288
- harness and docs changes for emulation -> responses in compact by @Madhuvod in https://github.com/maximhq/bifrost/pull/8289
- feat(openrouter): route decisions by datasheet supports_decisions row by @Madhuvod in https://github.com/maximhq/bifrost/pull/8301
- feat(complexity): list datasheet-marked decision models for OpenRouter in the complexity router by @Madhuvod in https://github.com/maximhq/bifrost/pull/8303
- feat(providers): adds cloudflare as a new provider by @Madhuvod in https://github.com/maximhq/bifrost/pull/8342
- feat(decisions): add native Clef decision support to the Cloudflare provider by @Madhuvod in https://github.com/maximhq/bifrost/pull/8344
- feat(openapi): add Cloudflare Workers AI provider and key config to docs by @Madhuvod in https://github.com/maximhq/bifrost/pull/8345
- feat(providers): add migration dialog for custom Cloudflare providers and dedupe Cloudflare model list by @Madhuvod in https://github.com/maximhq/bifrost/pull/8351
- feat(decisions): add native Perplexity decider model support by @Madhuvod in https://github.com/maximhq/bifrost/pull/8354
- feat(openrouter): send decision images as plain state items, list live decision models, and forward response headers by @Madhuvod in https://github.com/maximhq/bifrost/pull/8355
- fix: store config.json virtual key limits on model configs by @roroghost17 in https://github.com/maximhq/bifrost/pull/8306
- docs(audit-logs): document the new event type URI by @impoiler in https://github.com/maximhq/bifrost/pull/8269
- docs(alerting): document sort parameters on the alert history endpoint by @impoiler in https://github.com/maximhq/bifrost/pull/8271
- docs(adaptive-routing): document the incident list on the issues endpoint by @impoiler in https://github.com/maximhq/bifrost/pull/8274
- docs(governance): document budget increase requests and override strategies by @impoiler in https://github.com/maximhq/bifrost/pull/8276
- docs(governance): document disabled MCP clients on virtual keys by @impoiler in https://github.com/maximhq/bifrost/pull/8270
- docs(adaptive-routing): document the Incidents page by @impoiler in https://github.com/maximhq/bifrost/pull/8272
- docs(logs): document the grouped view by @impoiler in https://github.com/maximhq/bifrost/pull/8273
- docs(logs): document background jobs in the notification panel by @impoiler in https://github.com/maximhq/bifrost/pull/8275
- fix(ui): move warp dock bottom spacing from inner container to resizable panel by @impoiler in https://github.com/maximhq/bifrost/pull/8360
- adds allow localhost oauth servers for mcp by @akshaydeo in https://github.com/maximhq/bifrost/pull/8347
- feat(decisions): add native System One decision support to the Ollama provider by @Madhuvod in https://github.com/maximhq/bifrost/pull/8363
- fix: stabilize flaky e2e tests for logs and mcp settings by @sammaji in https://github.com/maximhq/bifrost/pull/8365
- adds upsert based writes to avoid losing logs by @akshaydeo in https://github.com/maximhq/bifrost/pull/8350
- feat(core): shared token cache for OAuth-minted provider credentials by @akshaydeo in https://github.com/maximhq/bifrost/pull/8254
- refactor(githubcopilot): mint through the shared token cache by @akshaydeo in https://github.com/maximhq/bifrost/pull/8255
- feat(core): oauth_key_config mints bearers for OpenAI-compatible providers by @akshaydeo in https://github.com/maximhq/bifrost/pull/8256
- feat(transport): persist, validate and expose oauth_key_config by @akshaydeo in https://github.com/maximhq/bifrost/pull/8257
- feat(ui): OAuth-minted keys for OpenAI-compatible providers by @akshaydeo in https://github.com/maximhq/bifrost/pull/8258
- ui: a2a ui fixes by @impoiler in https://github.com/maximhq/bifrost/pull/8336
- docs: oauth_key_config for custom OpenAI-compatible providers by @akshaydeo in https://github.com/maximhq/bifrost/pull/8259
- feat: add session grouping and raw capture, refine log views by @danpiths in https://github.com/maximhq/bifrost/pull/8364
- feat(injected-tools): inject any number of named MCP tools per provider by @akshaydeo in https://github.com/maximhq/bifrost/pull/8366
- feat(ui): replace the provider Web Search tab with a Tools table by @akshaydeo in https://github.com/maximhq/bifrost/pull/8367
- test(injected-tools): pin named injected tools in the harness and E2E by @akshaydeo in https://github.com/maximhq/bifrost/pull/8368
- docs(helm): add Cloudflare provider and expanded decision model providers to v2.1.44 changelog by @Madhuvod in https://github.com/maximhq/bifrost/pull/8378
- feat: update server instructions forwarding when code mode is on by @roroghost17 in https://github.com/maximhq/bifrost/pull/8371
- feat(ui): add motion and smooth streaming animations to Warp chat by @impoiler in https://github.com/maximhq/bifrost/pull/8380
- docs: identity sync guide and align IdP setup docs by @BearTS in https://github.com/maximhq/bifrost/pull/8373
- docs: data access control docs and add teams, business units & customers guide by @BearTS in https://github.com/maximhq/bifrost/pull/8375
- docs: access profile docs update for teams customers and bu by @BearTS in https://github.com/maximhq/bifrost/pull/8379
- fix: ws close in live by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8372
- fix: reasoning strip with item ids by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8374
- fix: live provider key header by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8376
- fix: sideband request logs by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8381
- fix(complexity-router): ignore model-listing failures for decision providers and open the model selector with the full list by @Madhuvod in https://github.com/maximhq/bifrost/pull/8385
- fix: vertex passthrough version prefix by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8134
- fix(ui): hide sentinel values in selectors, add dark mode MCP badges, and use container queries by @impoiler in https://github.com/maximhq/bifrost/pull/8387
- fix(sessionaffinity): drop session key bindings to keys removed from single-key pools by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8384
- test(gateway): fallback serves on an allowed key when a key pin falls outside the virtual key's key_ids by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8402
- fix(realtime): answer unmapped ephemeral tokens on Azure with a client error and recover WebSocket session panics by @akshaydeo in https://github.com/maximhq/bifrost/pull/8282
- test(gateway): session drops its binding when a virtual key's key_ids shrink to one key by @Pratham-Mishra04 in https://github.com/maximhq/bifrost/pull/8403
- fix(replicate): keep file list pagination on the configured file endpoint by @akshaydeo in https://github.com/maximhq/bifrost/pull/8290
- fix(governance): bind provider objects to the virtual key that created them by @akshaydeo in https://github.com/maximhq/bifrost/pull/8292
- fix(governance): bind provider objects under every id form the provider accepts by @akshaydeo in https://github.com/maximhq/bifrost/pull/8317
- fix(live): bind a live session to the virtual key that opened it by @akshaydeo in https://github.com/maximhq/bifrost/pull/8331
- fix(http): apply the management API cross-origin rule without a config store by @akshaydeo in https://github.com/maximhq/bifrost/pull/8300
- fix(configstore): match legacy plaintext lookups only against plaintext rows by @akshaydeo in https://github.com/maximhq/bifrost/pull/8302
- fix(tracing): redact the virtual key header in captured request headers by @akshaydeo in https://github.com/maximhq/bifrost/pull/8304
- fix(governance): classify file batches by what the provider executes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8318
- fix(governance): check every model a passthrough body names by @akshaydeo in https://github.com/maximhq/bifrost/pull/8321
- fix(providers): treat the Vertex credential JSON as a key dial target by @akshaydeo in https://github.com/maximhq/bifrost/pull/8330
- fix(warp ui): max iterations ui by @kohlivrinda in https://github.com/maximhq/bifrost/pull/8401
- fix: export failure classification and end-to-end TTFT on traces by @roroghost17 in https://github.com/maximhq/bifrost/pull/8404
- fix(transports): bound request decompression by what the caller sent by @akshaydeo in https://github.com/maximhq/bifrost/pull/8333
- fix(replicate): keep file list pagination on the configured file endpoint (#8290) by @akshaydeo in https://github.com/maximhq/bifrost/pull/8405
- fix(plugins): gate built-in plugin endpoints and secret references behind real auth by @akshaydeo in https://github.com/maximhq/bifrost/pull/8335
- follow up harness fixes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8407
- backmerge main to dev by @BearTS in https://github.com/maximhq/bifrost/pull/8409
- fix: prefer realtime catalog rates for realtime requests by @danpiths in https://github.com/maximhq/bifrost/pull/8411
- fix: update fireworks test models, bump token budgets and disable openai text completion tests by @sammaji in https://github.com/maximhq/bifrost/pull/8377
- feat: add agent name and correlation id filters to warp logs tools by @sammaji in https://github.com/maximhq/bifrost/pull/8388
- test: skip test case already expected to fail on -race and fix failing queue tests by @sammaji in https://github.com/maximhq/bifrost/pull/8389
- tests: live tests in CI by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8415
- docs(decisions): document Cloudflare, Perplexity, Ollama and self-hosted decision models and rework decision emulation docs by @Madhuvod in https://github.com/maximhq/bifrost/pull/8397
- docs(guardrails): document regex allowed_values and profile execution order by @Madhuvod in https://github.com/maximhq/bifrost/pull/8410
- docs(warp): add warp docs by @kohlivrinda in https://github.com/maximhq/bifrost/pull/8416
- fix: drop reasoning.summary for models that don't support it by @sammaji in https://github.com/maximhq/bifrost/pull/8408
- fix: anthropic tool normalization on claude bedrock modelsz by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8417
- tests: live tests on ci for workflows by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8420
- fix(transports): charge the decompression budget for bytes actually inflated by @akshaydeo in https://github.com/maximhq/bifrost/pull/8431
- fix(logstore): keep Postgres log batches from failing on NUL bytes, invalid UTF-8 and jsonb-rejected escapes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8428
- fix(providers): end large-response log previews on a UTF-8 boundary by @akshaydeo in https://github.com/maximhq/bifrost/pull/8429
- fix(logging): store binary log bodies as a size placeholder by @akshaydeo in https://github.com/maximhq/bifrost/pull/8430
- regression fixes for pgtextsafety by @akshaydeo in https://github.com/maximhq/bifrost/pull/8437
- adds toggle for virtul key level objct ownership by @akshaydeo in https://github.com/maximhq/bifrost/pull/8427
- tests: harness tests fixes by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8413
- fix: live sheet ui by @TejasGhatte in https://github.com/maximhq/bifrost/pull/8414
- fix(integrations): type mid-stream errors as event: error on openai responses routes by @akshaydeo in https://github.com/maximhq/bifrost/pull/8421
- fix(gemini): keep Responses-path parity for JSON mode with tools, native retrieval tools, candidateCount and logprobs by @akshaydeo in https://github.com/maximhq/bifrost/pull/8422
- fix: cohere replay thinking order, decisions tool_choice gate, served tier on chat bridge, bare sonar routing, mcp server_label, legacy prompt framing by @akshaydeo in https://github.com/maximhq/bifrost/pull/8423
- test(harness): scope MCP auto-injection to a serial window and fix stale harness cases by @akshaydeo in https://github.com/maximhq/bifrost/pull/8424
- fix: MCP agent loop keeps earlier turns, the turn-1 route and caller cache points by @akshaydeo in https://github.com/maximhq/bifrost/pull/8425
- fix(deepseek): downgrade json_schema response_format to json_object by @akshaydeo in https://github.com/maximhq/bifrost/pull/8432
- model catalog burst fix in multinode env by @akshaydeo in https://github.com/maximhq/bifrost/pull/8438
- fix(gemini): carry urlContextMetadata and forward native tool entries byte-faithfully on the Responses path by @akshaydeo in https://github.com/maximhq/bifrost/pull/8433
- fix(core): keep caller-fault errors from running catalog-inferred fallbacks; forward raw gemini logprobs by @akshaydeo in https://github.com/maximhq/bifrost/pull/8434
- updates migration flow for indices by @akshaydeo in https://github.com/maximhq/bifrost/pull/8439
- fix(configstore): bind large provider-object id lists as one parameter by @akshaydeo in https://github.com/maximhq/bifrost/pull/8435
- fix(mcp): return 404 for deleting or updating an unknown MCP client by @akshaydeo in https://github.com/maximhq/bifrost/pull/8436
- fix(core): read the message context before abandoning delivery by @akshaydeo in https://github.com/maximhq/bifrost/pull/8440
- v2.3.0 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8399
- fixes schema validation by @akshaydeo in https://github.com/maximhq/bifrost/pull/8442
- test case fixes round 2 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8444
- test fixes round 2 & 3 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8445
- test case fixed round 4 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8446
- fixed server shutdown race relay by @akshaydeo in https://github.com/maximhq/bifrost/pull/8447
- test case fixes round 5 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8448
- test fixes round 6 by @akshaydeo in https://github.com/maximhq/bifrost/pull/8451
New Contributors
- @xiechimon made their first contribution in #7362
- @wangrat made their first contribution in #7395
- @hcavarsan made their first contribution in #7589
- @SandyDRawat made their first contribution in #3835
- @wofiporia made their first contribution in #7359
- @MohammadHijjawi97 made their first contribution in #7590
- @Daltonganger made their first contribution in #7648
- @hmdsefi made their first contribution in #7825
- @jimseiwert made their first contribution in #7916
- @xujiantop-crypto made their first contribution in #7939
- @novai42 made their first contribution in #6614
- @Shashank2985 made their first contribution in #8194
- @kamyashah-arch made their first contribution in #8224
- @roberttidball made their first contribution in #8005
- @ozenyunus35 made their first contribution in #8251
- @ege-arhan made their first contribution in #8247
- @shreyanshj10 made their first contribution in #8208
Full Changelog: ent-v2.2.6-base...ent-v2.3.0-base