What's Changed
- feat(ui): add full Dashboard multi-language i18n by @occcat in #6766
- feat(ui): type i18n keys against the English catalogs by @impoiler in #7630
- refactor(ui): extract sidebar navigation into shared nav items by @impoiler in #9325
- docs(mcp/oauth2): document token exchange stored sign-in default and host restrictions by @Pratham-Mishra04 in #9340
- docs(relays): rewrite relay docs and document relay access for virtual keys, profiles, and projects by @BearTS in #9323
- docs: add MCP protocol update docs by @roroghost17 in #9338
- fix(config): skip URL accessibility check for framework URLs unchanged from stored config by @Pratham-Mishra04 in #9078
- feat(mcp): accept duration strings for tool_sync_interval alongside bare minutes by @Pratham-Mishra04 in #9079
- feat(tests/mcpconsole): add chaosmock MCP server fleet with compatibility tests by @Pratham-Mishra04 in #9080
- feat(tests/chaosmock): add fault injection, per-identity auth, listening streams, and connection tracking to the MCP mock by @Pratham-Mishra04 in #9081
- feat(tests/mcpconsole): add control API and mcpchaos command for chaos mock MCP server fleet by @Pratham-Mishra04 in #9082
- feat(mcpconsole/chaosmock): add legacy HTTP+SSE transport to the chaos mock server by @Pratham-Mishra04 in #9083
- feat(mcpconsole/chaosmock): add STDIO transport via a thin bridge to the fleet by @Pratham-Mishra04 in #9084
- test(mcp): add Newman MCP harness e2e suite and make target by @Pratham-Mishra04 in #9085
- test: add sixteen MCP harness tests for auth gates, the OAuth server and the library by @Pratham-Mishra04 in #9086
- test(mcp): run MCP harness against an mcpchaos fleet and add ADM and EP test cases by @Pratham-Mishra04 in #9087
- test(mcp): add e2e API harness cases for client create validation, duplicates, delete, and token_exchange by @Pratham-Mishra04 in #9088
- test: add twelve MCP harness tests for the endpoint handshake, VK grants and include headers by @Pratham-Mishra04 in #9089
- test: add fourteen MCP harness tests for OAuth consent, tokens and sessions by @Pratham-Mishra04 in #9090
- test(mcp): verify unauthenticated admin routes leave a real client unchanged in e2e harness by @Pratham-Mishra04 in #9091
- test(mcp): use a mock library catalog in the e2e harness and check filterdata lacks stdio before publish by @Pratham-Mishra04 in #9092
- test: add thirteen MCP harness tests for client admin validation, unauthenticated callers, vk_configs and OpenAPI clients by @Pratham-Mishra04 in #9093
- test: add seventeen MCP harness tests for upstream auth and connection types by @Pratham-Mishra04 in #9094
- test: add fourteen MCP harness tests for endpoint slugs, credentials and auth modes by @Pratham-Mishra04 in #9095
- test: add eight MCP harness tests for the redirect allowlist and per-client tool settings by @Pratham-Mishra04 in #9096
- test(mcp): add e2e Postman cases for tool execute, code mode, and injected tools validation by @Pratham-Mishra04 in #9097
- test(mcp): add governance e2e tests for virtual MCPs and virtual keys by @Pratham-Mishra04 in #9098
- test(mcp): add e2e harness cases for library duplicates, installed flag, URL validation, and failure handling by @Pratham-Mishra04 in #9099
- test: add twenty-one MCP harness tests for MCP log rows, content logging, filters and metrics by @Pratham-Mishra04 in #9100
- test(mcp): add e2e API tests for client read encodings and PUT patch semantics by @Pratham-Mishra04 in #9101
- feat(mcpconsole/chaosmock): add server instructions, tool annotations, scripted replies, method-scoped faults and per-tool faults by @Pratham-Mishra04 in #9102
- feat(mcpconsole/chaosmock): add OAuth 2.1 protected resource and authorization server to mock servers by @Pratham-Mishra04 in #9103
- feat(chaosmock): add REST routes surface and seed-based server reset by @Pratham-Mishra04 in #9104
- test: add sixteen MCP harness tests for upstream instructions, tool annotations and injected failures by @Pratham-Mishra04 in #9105
- test: add twenty-four MCP harness tests for shared OAuth discovery, consent, refresh and reauthorization by @Pratham-Mishra04 in #9106
- test: add eighteen MCP harness tests for per-user OAuth flows, sessions and temp-token scope by @Pratham-Mishra04 in #9107
- test: add four MCP harness tests for OpenAPI preview, request mapping, responses and credentials by @Pratham-Mishra04 in #9108
- test: boot the MCP harness library from a catalog the mock serves over HTTP and add fourteen library tests by @Pratham-Mishra04 in #9109
- feat(chaosmock): add scriptable LLM provider surface for OpenAI, Anthropic and Gemini formats by @Pratham-Mishra04 in #9110
- test: boot the MCP harness providers on the mock LLM and add twenty-two tests for MCP tools in model requests by @Pratham-Mishra04 in #9111
- test: add seventeen MCP harness tests for agent mode on the mock LLM by @Pratham-Mishra04 in #9112
- test(mcp): add e2e harness scenarios for provider-injected tools (INF-60 to INF-65) by @Pratham-Mishra04 in #9113
- test: add fourteen MCP harness tests for virtual key grants, per-user auth and tool failures on the mock LLM by @Pratham-Mishra04 in #9114
- test: add nineteen MCP harness tests for client admin refusals, header credentials and sessions, with config.json clients that boot pending verification by @Pratham-Mishra04 in #9117
- test: add eight MCP harness tests for upstream auth and connection behaviour, and report known-issue checks as skipped by @Pratham-Mishra04 in #9118
- test: add six MCP harness tests for the MCP endpoint's timeouts, results, slugs and auth modes by @Pratham-Mishra04 in #9119
- test: add eight MCP harness tests for the setup lock, Host spoofing and per-client settings by @Pratham-Mishra04 in #9120
- test: add fourteen MCP harness tests for governance budgets, rate limits, pricing and log aggregates by @Pratham-Mishra04 in #9121
- test(mcp): add e2e harness cases for setup-lock, token rotation, per-user OAuth, and execute validation by @Pratham-Mishra04 in #9122
- test: add sixteen MCP harness tests that drive core as a Go SDK by @Pratham-Mishra04 in #9123
- test: add MCP harness tests for tool sync after a pending client is verified, OpenAPI per-user spec credentials and the per-user OAuth create message by @Pratham-Mishra04 in #9125
- test: retire the manual MCP auth suite and cover its remaining checks in the MCP harness by @Pratham-Mishra04 in #9126
- feat: accept SOCKS5 global proxies and turn on the Inference and API toggles by @akshaydeo in #7578
- test: run the MCP harness's /mcp auth tests in each auth mode that accepts them and cover per-user identity rules by @Pratham-Mishra04 in #9357
- fix(mcp): keep a per_user_headers client's sample values as its admin credential on create by @Pratham-Mishra04 in #9358
- fix(mcp): say the per_user_oauth create login is kept as the admin credential by @Pratham-Mishra04 in #9359
- fix(mcp): answer /mcp refusals with WWW-Authenticate on every 401 and the governance error type by @Pratham-Mishra04 in #9360
- fix(mcp): refuse a stored OpenAPI credential for a header per_user_headers callers supply by @Pratham-Mishra04 in #9361
- fix(mcp): start the tool sync checker when a pending client is verified by @Pratham-Mishra04 in #9362
- fix(mcp): call upstream tools by their exact name and drop the tool name mapping by @Pratham-Mishra04 in #9363
- fix(mcp): log every code mode call made inside agent mode by @Pratham-Mishra04 in #9364
- fix(mcp): keep a tool's error flag on /mcp and in the Responses format by @Pratham-Mishra04 in #9365
- fix(governance): evaluate code mode meta tools like any tool call by @Pratham-Mishra04 in #9366
- fix(governance): answer VK and virtual MCP caller errors with 400 and 409, not 500 by @Pratham-Mishra04 in #9367
- fix(mcp): reload the virtual keys that granted a deleted MCP client by @Pratham-Mishra04 in #9368
- fix(mcp): check vk_configs before an MCP client update applies anything by @Pratham-Mishra04 in #9369
- fix(mcp): refuse OAuth consent and refresh for an expired virtual key by @Pratham-Mishra04 in #9370
- fix(mcp): refuse to refresh a grant bound to the /mcp address before an issuer change by @Pratham-Mishra04 in #9371
- fix(mcp): revoke a replayed authorization code's grant and refuse refresh to clients without the refresh_token grant by @Pratham-Mishra04 in #9372
- fix(mcp): ignore a trailing slash in issuer_url so no OAuth URL carries // by @Pratham-Mishra04 in #9373
- fix(mcp): answer 400, 404 and 409 instead of 500 for MCP client create, rename and reconnect mistakes by @Pratham-Mishra04 in #9374
- fix(mcp): check OAuth client names and slugs at create, keep endpoint_slug, and answer 400/404 for blocked discovery and unknown OAuth configs by @Pratham-Mishra04 in #9375
- feat: add base_path config for serving under a URL prefix by @akshaydeo in #8919
- feat: strip the configured base path before routing by @akshaydeo in #8920
- feat: serve the UI shell under the configured base path by @akshaydeo in #8921
- feat: resolve UI routes, API calls and assets under the base path by @akshaydeo in #8922
- feat: carry the base path in server-generated URLs and redirects by @akshaydeo in #8923
- docs: document serving under a path prefix; add Helm basePath by @akshaydeo in #8924
- test(e2e): run the dashboard and HTTP routes under a base path by @akshaydeo in #9056
- fix(e2e): navigate collapsed sidebar groups in SidebarPage by @akshaydeo in #9057
- feat: export base-path hooks for builds with their own bootstrap by @akshaydeo in #9433
- feat: trust the global proxy's CA and always verify targets through a proxy by @akshaydeo in #7602
- bring language toggle in client settings by @akshaydeo in #9437
- docs updates by @akshaydeo in #9440
- fix(ui): copyable gateway, virtual MCP and scrape URLs carry server.base_path by @akshaydeo in #9441
- fix(http): OAuth bootstrap URLs, webhook result_url and discovery carry server.base_path by @akshaydeo in #9442
- docs,infra: state the server.base_path prefix everywhere a self URL is shown by @akshaydeo in #9443
- docs(openapi): state the 100-row clamp and default of 25 on paginated list endpoints by @impoiler in #9447
- feat: anthropic WIF compatibility by @TejasGhatte in #8999
- test: anthropic WIF tests by @TejasGhatte in #9431
- test(mcp): update e2e harness for session IDs, list_changed streams, empty prompts/resources, and new error responses by @Pratham-Mishra04 in #9385
- fix(mcp): refuse unknown auth types and per-user auth types on SSE and STDIO clients by @Pratham-Mishra04 in #9386
- fix(mcp): allow revoking a pending OAuth flow from the sessions list by @Pratham-Mishra04 in #9387
- fix(mcp): keep a failed enable unstable with its checker retrying, and let admin operations cancel checker reconnects by @Pratham-Mishra04 in #9388
- fix(mcp): return max_instructions_length in the MCP client list by @Pratham-Mishra04 in #9389
- fix(mcp): ignore tool_pricing at client create and drop a deleted client's prices from the catalog by @Pratham-Mishra04 in #9390
- fix(mcp): keep tls_config on per_user_headers clients so servers behind a custom CA verify by @Pratham-Mishra04 in #9391
- fix(mcp): mark a per-call client unstable when its first tool discovery fails by @Pratham-Mishra04 in #9392
- fix(mcp): stop retrying permanent connect errors and refuse an invalid ca_cert_pem when a client is added or edited by @Pratham-Mishra04 in #9393
- fix(mcp): don't treat a tool's own "forbidden" or 401 error as an upstream auth failure by @Pratham-Mishra04 in #9394
- feat(ui): remember the log detail messages filter across reloads by @impoiler in #9448
- fix(mcp): try and apply TLS and SSE header edits to the live client, and let ping edits reach the running checker by @Pratham-Mishra04 in #9395
- fix(mcp): re-read instructions for sticky clients using the live connection's credential by @Pratham-Mishra04 in #9396
- fix(mcp): check a client sooner on the unstable cadence after a failed reconnect or dropped SSE stream by @Pratham-Mishra04 in #9397
- feat(mcp): dial boot MCP clients in the background so an unreachable client doesn't delay the HTTP listener by @Pratham-Mishra04 in #9398
- fix(mcp): enforce the tool execution timeout for in-process MCP clients by @Pratham-Mishra04 in #9399
- fix(mcp): apply a client's own tool_execution_timeout to code mode tool calls by @Pratham-Mishra04 in #9400
- fix(mcp): refresh the credential and redial when an upstream rejects a per-call connection with 401 by @Pratham-Mishra04 in #9402
- fix(mcp): let a custom library entry reuse the name of a deleted entry by @Pratham-Mishra04 in #9403
- fix(mcp): skip invalid MCP library catalog entries and stop retrying permanent fetch errors by @Pratham-Mishra04 in #9405
- fix(mcp): answer 400 instead of 500 when OAuth endpoint discovery fails by @Pratham-Mishra04 in #9406
- fix(mcp): drop the misleading "after N retries" from connect and tool list errors by @Pratham-Mishra04 in #9407
- fix(mcp): report the caller's shorter deadline, not the client's tool timeout, in tool call timeout errors by @Pratham-Mishra04 in #9408
- chore: clarify session header naming by @danpiths in #9492
- docs: add sagemaker provider and passthrough documentation by @sammaji in #9494
- fix: preserve realtime and Live logging headers by @danpiths in #9493
- test(mcp): count server/discover handshakes alongside initialize in SDK concurrency test by @Pratham-Mishra04 in #9463
- test(mcp): add FAIL-01 and FAIL-12 e2e tests for per-call client creation when the upstream is down or tools/list fails by @Pratham-Mishra04 in #9464
- test(mcp): cover upstream tool changes reaching /mcp gateway listeners by @Pratham-Mishra04 in #9465
- feat(mcp): add prompts, resources and completion support to the chaosmock test server by @Pratham-Mishra04 in #9466
- test(mcp): add e2e harness tests for upstream prompts, resources and completion on /mcp by @Pratham-Mishra04 in #9467
- test(mcp): add e2e harness tests for /mcp on protocol 2026-07-28 by @Pratham-Mishra04 in #9468
- test(mcp): add e2e harness tests for connection failures, state filtering, and disabling sticky clients by @Pratham-Mishra04 in #9469
- test(mcp): cover connection checker outage and recovery against an unreliable upstream by @Pratham-Mishra04 in #9470
- test(mcp): add e2e harness test for automatic STDIO respawn and tighten the CONN-22 child exit checks by @Pratham-Mishra04 in #9471
- feat(mcp): add MCP protocol version negotiation and sessionless 2026-07-28 support to the chaosmock test server by @Pratham-Mishra04 in #9472
- test(mcp): add e2e harness tests for max protocol version caps by @Pratham-Mishra04 in #9473
- feat(mcp): support tool title, icons, and outputSchema in the chaosmock server by @Pratham-Mishra04 in #9474
- test(mcp): add e2e harness cases for tool metadata and rich media tool results by @Pratham-Mishra04 in #9475
- feat(mcp): support Client ID Metadata Documents in the chaosmock OAuth server by @Pratham-Mishra04 in #9476
- test(mcp): add e2e harness tests for OAuth client metadata documents by @Pratham-Mishra04 in #9477
- test(mcp): cover issued OAuth access token claims and concurrent consent submits by @Pratham-Mishra04 in #9478
- feat(mcp): add chaosmock endpoints that drive a real mcp-go OAuth client against external MCP servers by @Pratham-Mishra04 in #9479
- test(mcp): add OAS-39 e2e test driving a real SDK OAuth client through discovery, consent, and token refresh by @Pratham-Mishra04 in #9480
- test(mcp): add e2e harness cases for sync intervals, timeouts, TLS and env-sourced headers by @Pratham-Mishra04 in #9481
- test(mcp): add reply_error to chaosmock and load and upstream-capability harness tests by @Pratham-Mishra04 in #9482
- test(mcp): cover file:// MCP library URLs and sync intervals in config and missing-file sync by @Pratham-Mishra04 in #9483
- test(mcp): add GOV-36 cross-surface parity matrix to the MCP e2e harness by @Pratham-Mishra04 in #9484
- test(mcp): add plain-client and raw stream probes to chaosmock and move discover serverInfo into _meta by @Pratham-Mishra04 in #9485
- test(mcp): add e2e harness tests driving a real mcp-go SDK client and raw GET streams against /mcp by @Pratham-Mishra04 in #9486
- test(mcp): add e2e and unit tests for concurrent requests, expired flows, and OSS refusals by @Pratham-Mishra04 in #9487
- refactor(mcp): move discovered tools and instructions into a pluggable discovery store by @Pratham-Mishra04 in #9040
- feat(mcp): add per-user discovery storage and config flag, rejected until lifecycle lands by @Pratham-Mishra04 in #9041
- feat(mcp): add database-backed shared and per-user discovery stores by @Pratham-Mishra04 in #9042
- feat(mcp): add per-caller connect tool for clients with per-user discovery by @Pratham-Mishra04 in #9043
- feat(mcp): store per-user tool discovery at sign-in and warn in the UI when tools fail to load by @Pratham-Mishra04 in #9044
- fix(mcp): delete per-user discoveries along with the credentials they were made with by @Pratham-Mishra04 in #9045
- refactor(mcp): record pending admin verification explicitly with a stored pending_verification flag by @Pratham-Mishra04 in #9046
- feat(mcp): enable per_user_discovery and handle turning it on or off by @Pratham-Mishra04 in #9047
- feat(mcp): list tool names and caller counts for per-user discovery clients in the registry by @Pratham-Mishra04 in #9048
- feat(ui/mcp): add per-caller tool discovery option for per-user auth MCP clients by @Pratham-Mishra04 in #9049
- docs(mcp): document per_user_discovery in the OpenAPI spec and config schema by @Pratham-Mishra04 in #9050
- feat(mcp): serve per-user discovery clients' tools, prompts and resources per caller on the MCP gateway by @Pratham-Mishra04 in #9341
- fix(logging): skip MCP log entries for sign-in prompts by @Pratham-Mishra04 in #9051
- perf(mcp): read each client's discovery once per request for its tools, connect tools and instructions by @Pratham-Mishra04 in #9134
- perf(mcp): share one cached per-user discovery copy across callers with identical discovery by @Pratham-Mishra04 in #9309
- feat(ui): split the MCP server sheet into a read-only view and a settings editor by @Pratham-Mishra04 in #9311
- feat(mcp): show per-caller discovery counts in the sessions table by @Pratham-Mishra04 in #9312
- feat(ui/mcp): add registry for extra access grants in MCP server view sheet by @Pratham-Mishra04 in #9313
- feat(mcp): add per-user discovery test fixture MCP server example by @Pratham-Mishra04 in #9310
- fix: skip the per-user auth retry when its client was replaced during the call by @Pratham-Mishra04 in #9128
- fix: keep a revoke from being undone by a per-user sign-in that finishes during it by @Pratham-Mishra04 in #9129
- feat: let a deployment gate the per-user OAuth and headers sweeps by @Pratham-Mishra04 in #9130
- fix: keep a config.json MCP client's stored id when its block declares another client's by @Pratham-Mishra04 in #9131
- docs(openapi): document the credential block on listed MCP clients by @Pratham-Mishra04 in #9132
- chore(ui): remove the unused MCP tool selector by @Pratham-Mishra04 in #9133
- feat(mcp): add a Refresh tools action to re-discover a caller's tools from the sessions page by @Pratham-Mishra04 in #9412
- fix(transports): return a JSON 404 for unmatched /api paths instead of the dashboard shell by @pcbeingused333 in #9260
- feat(mcp): add prompts, resources, per-identity faults and gates to chaosmock by @Pratham-Mishra04 in #9413
- feat(logstore): add client_ip column to log tables by @impoiler in #9409
- test(mcp): add e2e harness tests for per-user discovery by @Pratham-Mishra04 in #9414
- test(mcp): refuse browser requests carrying an Origin header on chaosmock control surfaces by @Pratham-Mishra04 in #9511
- test(mcp): bind e2e harness Bifrost server to 127.0.0.1 by @Pratham-Mishra04 in #9512
- feat(complexity router): add confidence thresholds to decision model routers by @kohlivrinda in #9328
- fix(mcp): refresh a per-call credential once when the upstream rejects it at the handshake by @Pratham-Mishra04 in #9415
- refactor(mcp): export DialBootMCPClients and accept an injectable reconnect function by @Pratham-Mishra04 in #9513
- docs(guardrails): add Noma Security AI-DR guardrail provider documentation by @Madhuvod in #9344
- fix(mcp): accept CIMD clients whose document lists grants the server does not offer by @camferguson in #9517
- fix: Clickhouse Individual Log Viewing at Scale by @17jmumford in #9342
- [fix]: Anthropic provider - drop empty text blocks in Responses requests by @david-choi-querypie in #9319
- feat(logging): record the caller's IP on LLM, MCP and relay logs by @impoiler in #9410
- fix(routing): scope complexity session state per subagent by @Madhuvod in #9347
- feat(ui): show client IP on log pages by @impoiler in #9411
- feat(logstore): store user_email and export caller identity to object storage by @impoiler in #9426
- feat(logging): record the user email on LLM, MCP and relay logs by @impoiler in #9427
- feat(ui): show user email on log pages and in CSV exports by @impoiler in #9428
- feat(logging): make client IP capture opt-in via logs_store.capture_client_ip by @impoiler in #9438
- feat(logs): support multiple values per metadata filter key by @impoiler in #9514
- feat(ui): allow selecting multiple values per metadata filter key by @impoiler in #9515
- chore: pin mcp-go to fork release for Apps support by @roroghost17 in #9555
- feat: pass gateway callers' declared capabilities to upstream MCP servers by @roroghost17 in #9500
- feat: relay input_required from upstream servers to gateway callers by @roroghost17 in #9501
- chore: update harness tests for MCP round-trip requests by @roroghost17 in #9502
- feat: read MCP Apps tool metadata and keep app-only tools away from models by @roroghost17 in #9503
- feat: serve MCP Apps tools and ui:// resources on the MCP gateway by @roroghost17 in #9504
- feat: accept MCP tools by the names their own server gave them on the MCP gateway by @roroghost17 in #9505
- chore: add an MCP Apps fixture server and harness tests for MCP Apps on the gateway by @roroghost17 in #9506
- fix: let ChatGPT and other real MCP connectors sign in with CIMD, with their documents as test fixtures by @roroghost17 in #9549
- chore: test real MCP clients signing in to Bifrost's OAuth server in the MCP harness, by DCR and CIMD by @roroghost17 in #9550
- feat(passthrough): treat the Interactions agent as the model on /genai_passthrough by @impoiler in #9417
- fix: show the fallback chain only for real fallback attempts by @impoiler in #9559
- feat(passthrough): name the agent on Gemini Interactions poll records by @impoiler in #9418
- feat(passthrough): bill each Gemini Interactions run once by @impoiler in #9419
- fix(jobaccounting): count a Gemini Interactions run as one request by @impoiler in #9557
- fix: named tool output for openai by @akshaydeo in #9571
- chore: update helm charts to use client metadata document by @roroghost17 in #9339
- [fix]: Anthropic provider - preserve requested web tool versions by @ykakade in #9258
- feat: workload identity credential kind, config schema and UI shell by @BearTS in #9461
- feat(relay): bring the relay log store to LLM parity by @BearTS in #9449
- fix(relays): align relay logging with LLM log behavior, covering capture, status, and stale-row eviction by @BearTS in #9450
- feat(relay-logs): match the Relay Logs API and UI to LLM Logs by @BearTS in #9451
- feat(schemas): add raw response format and sync helper to keep streamed raw payloads consistent with plugin text edits by @Madhuvod in #9019
- test(relay-e2e): relay and log-store permutation matrix by @BearTS in #9452
- feat(schemas): declare raw response formats for Anthropic, Bedrock, Gemini, and Replicate streams and sync text edits into them by @Madhuvod in #9227
- fix(relays): match passthrough for headers and streams in relays by @BearTS in #9453
- fix(guardrails): attach raw stream events to their text delta and sync them across providers, replacing the stream text codec by @Madhuvod in #9282
- feat(redaction): redact streamed raw response text split across frames by @Madhuvod in #9285
- feat(passthrough): register raw request text rewriters so plugins can redact passthrough bodies by @Madhuvod in #9521
- feat(passthrough): redact streamed passthrough text and dedupe chunks by index by @Madhuvod in #9548
- fix(guardrails): redact escaped tool-call argument literals in raw Anthropic and Gemini request bodies by @Madhuvod in #9581
- fix: web search query reply drops by @akshaydeo in #9590
- test(mcpconsole): let the mock authorization server forget the clients it registered by @Pratham-Mishra04 in #9560
- fix(mcp): send a per-user OAuth server back to pending verification when per-user discovery is turned off by @Pratham-Mishra04 in #9561
- fix(ui): verify a per-user OAuth server after per-user discovery is turned off by @Pratham-Mishra04 in #9562
- fix(mcp): reword pending per-user server alerts and offer a new-client reregister after a failed verify sign-in by @Pratham-Mishra04 in #9563
- feat(mcp): collapse failure details, expand long descriptions, and hide TLS for plain HTTP in view sheet by @Pratham-Mishra04 in #9564
- feat(mcp-registry): make client name a keyboard-accessible button and drop "View details" from the actions menu by @Pratham-Mishra04 in #9565
- feat(mcp): toggle tool parameters between table and JSON views and inline the View more toggle by @Pratham-Mishra04 in #9566
- test(mcp): add PUD-72 to PUD-81 e2e harness tests for per-caller tool isolation by @Pratham-Mishra04 in #9567
- test(mcp): add per-user discovery isolation tests for shared virtual keys and parallel callers by @Pratham-Mishra04 in #9568
- fix(core): find the key that owns a stored object on multi-key providers by @impoiler in #9556
- feat(ui): redesign relay detail header and move OpenAPI import into a side sheet by @impoiler in #9569
- style(ui): tighten command palette radius and header height by @impoiler in #9574
- fix(ui): localize proxy URL scheme validation messages by @impoiler in #9575
- fix(ui): show dashboard and mcp logs in config-file-only mode by @impoiler in #9576
- refactor(mcp-harness): extract shared collection builder helpers into lib/mcp-harness.mjs by @Pratham-Mishra04 in #9605
- fix(mcp): allow OAuth clients registered without the refresh_token grant to refresh tokens by @Pratham-Mishra04 in #9606
- test(mcp): add AUTH-59 to AUTH-63 and ADM-88 e2e harness tests for OAuth reauthorization and header key changes by @Pratham-Mishra04 in #9607
- refactor(mcp): move upstream OAuth e2e helpers into the shared harness library by @Pratham-Mishra04 in #9608
- test(mcp): add PUD-82 to PUD-86 e2e harness tests for virtual-key grants and session ID handling by @Pratham-Mishra04 in #9615
- fix(modelcatalog): match pricing model names case-insensitively by @impoiler in #9455
- fix: poll runware task if sync turns to async output by @TejasGhatte in #9616
- docs(guardrails): make Noma application_id optional and document virtual key reporting by @Madhuvod in #9618
- docs(routing): simplify complexity router confidence threshold tooltip across locales by @Madhuvod in #9612
- feat: workload identity Helm values and docs by @BearTS in #9462
- feat(governance): make config.json routing rule id optional by @BearTS in #9603
- chore(helm): sync chart with config.schema.json for 2.1.48 by @BearTS in #9604
- fix(seed): lower default log batch size to fit Postgres bind limit by @impoiler in #9621
- feat(mcp): collapse code mode binding level and limits into an accordion in MCP settings by @Pratham-Mishra04 in #9622
- fix(logstore): keep draining retention past a short batch by @impoiler in #9552
- test(mcp): add INF-78 to INF-80, AUTH-64, PUD-87 to PUD-90 and GO-37 e2e harness tests by @Pratham-Mishra04 in #9623
- fix(logstore): let one replica drain each retention table on Postgres by @impoiler in #9553
- feat(logstore): run Postgres retention cleanup hourly and dedupe ClickHouse deletes per cutoff by @impoiler in #9554
- feat: log MCP input_required rounds and link each call's rounds by round_trip_id by @roroghost17 in #9586
- feat: record MCP Apps use in MCP logs by @roroghost17 in #9587
- feat(ui): show input_required rounds and MCP Apps use in MCP logs by @roroghost17 in #9588
- fix: preserve explicitly reported zero token usage by @Constantine3 in #8763
- fix(anthropic): treat Claude Haiku 5.x like Sonnet 5.x for effort and sampling params by @macdod in #9491
- feat(core): add derived container session counts to tool usage by @impoiler in #9595
- feat(framework): bill container sessions started through server tools by @impoiler in #9596
- feat(core): count auto containers for OpenAI and Azure Responses by @impoiler in #9597
- feat(core): count billable Anthropic code execution containers by @impoiler in #9598
- feat: bill OpenAI image generation tool tokens by @impoiler in #9599
- fix(core): count containers started under stored OpenAI context by @impoiler in #9601
- fix: routing rules for primary targets on 4xx by @akshaydeo in #9292
- refactor(redaction): remove raw text transformers and keep only the literal rewriter for Anthropic passthrough by @Madhuvod in #9629
- fix: empty text document data loss in anthropic calls by @akshaydeo in #9290
- fix(anthropic): drop web_search and code_execution for Claude on Bedrock by @akshaydeo in #9593
- fix(anthropic): run Codex's client tool search as the caller's own on Claude by @akshaydeo in #9594
- fix: omit stopSequences for bedrock converse models that reject it by @sammaji in #9507
- fix: resolve key aliases when looking up supported params for drop-params by @sammaji in #9510
- feat: support openai prompt cache breakpoint ttl and 12h cache write pricing by @sammaji in #9544
- test: add openai 12h prompt cache ttl pricing and e2e tests by @sammaji in #9545
- fix: preserve assistant text alongside tool calls when converting chat to responses messages by @sammaji in #9546
- fix: strip leaked DSML tag from DeepSeek V3.2 responses on bedrock by @sammaji in #9547
- test: add bedrock e2e tests for omitting stop sequences on deepseek v3.2 by @sammaji in #9508
- fix: map prompt cache breakpoints to cache control in requests by @TejasGhatte in #9636
- fix: add ids to non-streamed gemini reasoning items and keep them on bedrock mantle replay by @sammaji in #9609
- fix: emit anthropic thinking deltas for raw reasoning_text stream events by @sammaji in #9457
- fix: preserve replayed reasoning content blocks for vLLM responses requests by @sammaji in #9458
- fix: keep unsigned thinking blocks for vllm and sglang anthropic requests by @sammaji in #9459
- fix: preserve codex assistant message content with encrypted_content in openai responses by @sammaji in #9611
- fix: cache control block on message by @TejasGhatte in #9654
- fix: adds headerless tool search support for github copilot by @sammaji in #9651
- fix: strip anthropic-only safeguards param from databricks chat and responses requests by @sammaji in #9652
- fix: keep message-level cache_control on chat completion messages by @Atharva-Kanherkar in #8713
- test: add e2e cases for reasoning item ids and codex assistant message replay by @sammaji in #9610
- fix: tool redaction fix for bedrock inline tools by @akshaydeo in #9658
- fix: keep gemini minted ids to less than 64 characters by @sammaji in #9660
- fix: run post-hooks for requests dropped before enqueue and exclude them from upstream metrics by @roroghost17 in #9681
- fix: handle invalid tool arguments gracefully by @akshaydeo in #9683
- fix(anthropic): bound web_search and code_execution by the host flag, not the catalog by @akshaydeo in #9682
- fix(gemini): give non-streamed reasoning items a summary array by @akshaydeo in #9684
- fix(bedrock): drop non-blob reasoning tokens before Converse by @akshaydeo in #9685
- fix(openai): drop empty text documents on OpenAI-shaped egress by @akshaydeo in #9686
- test(harness): read converted_request_type from the body in body mode by @akshaydeo in #9687
- test(harness): scan DSML stream cases without extra_fields by @akshaydeo in #9688
- fix(ui): add dark variant of Singulr AI logo and update the existing logo image by @Madhuvod in #9692
- fix: dropping tool response fields by @akshaydeo in #9695
- fix(azure): send On Your Data chat requests to the deployments route by @akshaydeo in #9701
- fix(bedrock): return the bucket region's answer from S3 file operations by @akshaydeo in #9696
- fix(governance): do not count a passthrough call the upstream refused as a request by @akshaydeo in #9697
- test(harness): send the setup token on a script's /metrics scrape by @akshaydeo in #9698
- fix(bedrock): keep messageStop and metadata in a converse stream's raw response by @akshaydeo in #9699
- fix(schemas): keep a block's prompt_cache_breakpoint when chat is converted to Responses by @akshaydeo in #9700
- test(harness): align stale case expectations with current gateway behavior by @akshaydeo in #9702
- test(harness): fix the remaining stale case expectations by @akshaydeo in #9703
- v2.5.0 by @akshaydeo in #9436
- fix: test case fixes by @akshaydeo in #9705
- test case fixes by @akshaydeo in #9706
- test fixes round 3 by @akshaydeo in #9708
- encrypted reasoning patch by @akshaydeo in #9713
- test patches round 5 by @akshaydeo in #9715
- docs: anthropic wif by @TejasGhatte in #9650
New Contributors
- @occcat made their first contribution in #6766
- @camferguson made their first contribution in #9517
- @david-choi-querypie made their first contribution in #9319
- @ykakade made their first contribution in #9258
- @macdod made their first contribution in #9491
Full Changelog: ent-v2.4.0-base...ent-v2.5.0-base