- NPX
- Docker
✨ Features
- OpenAI Compaction — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (#4053)
- Multi-Customer & Org Hierarchy — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (#4066, #4041, #4082)
- Provider-Level Governance — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (#3938, #3937, #3939, #3981, #3962)
- Customer Budgets — Customers support multiple budgets and
calendar_alignedbudget windows (#3998, #3997) - Virtual Key Attribution & Controls — Added a
created_byuser attribution column and ablacklisted_modelscolumn for virtual key provider configs (#3672, #3653) - Request Header Capture — OTel and Maxim observability plugins capture
request_headersby pattern, with wildcard support (e.g.x-custom-*); logging gained the same wildcard header capture (#4012, #3958) - OTel Content Controls & Collectors — New
disable_content_loggingoption drops message/tool content from exported spans, plus support for multiple OTel collectors (#4064, #3894) - xAI x_search — Added xAI
x_searchtool support (#3976) - URL Validation — Added fetch URL validation with private-network configuration and link-local blocking (#3947, #3991)
- File Scheme Pricing URLs — Pricing source URLs now accept the
file://scheme for air-gapped and self-hosted deployments (#4045) - Paginated Virtual Keys — Virtual key fetching is paginated to handle deployments with very large numbers of keys (#3957)
- Client IP Resolution — Resolve client IP from
X-Forwarded-For/X-Real-IPheaders - SCIM Provisioning — Added
attributeType/attributeValueSCIM provisioning fields - Helm/Config Schema — Added
rolesRBAC governance config andper_user_oauthMCP auth to the Helm chart and config schema (#4004, #4009) - Log Navigation UI — Added a “View logs” menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable
BudgetDisplaycomponent (#4073, #4054, #4026, #4055) - Faster First Paint — Added an inline loading shell to
#rootbefore React mounts (#4063) - Materialized View Alias — Added an
aliascolumn to the materialized view with filter support (#4078)
🐞 Fixed
- Fetch URL IP Checks — Hardened fetch URL IP checks against SSRF (#4092)
- Mantle Model Matching — Broadened Mantle model matching to all
gptvariants (#4091) - Empty Thinking Blocks — Strip thinking blocks when the signature is empty (#4079)
- OpenAI Stream Usage — Removed usage from the
responses.createdevent in the OpenAI stream (#4080) - Prompt Cache Key — Set the prompt cache key from the Anthropic integration (#4086)
- Upstream Failure Status — Map upstream connection failures to 502 instead of 400 (#3929) (thanks @chris-colinsky!)
- Gemini Schema Constraints — Accept numeric schema integer constraints for Gemini (#3994) (thanks @yanhao98!)
- Files Provider Param — Accept the
?provider=query param onGET /v1/files(#3971) (thanks @alexef!) - Optional Batch Model — Made the
modelfield optional onPOST /v1/batches(#3973) (thanks @alexef!) - Helm Azure Config — Added missing
azure_key_configfields to the Helm schema (#3996) (thanks @axelray-dev!) - Text Completion Chunk Model — Added the missing
Modelfield toTextCompletionChunkResponse(#3970) (thanks @kuishou68!) - MCP Inline stdio Env — MCP stdio server configs accept inline environment variable assignments (#3861) (thanks @Shushmitaaaa!)
- Orphaned Tool Results — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (#3919)
- Node Usage Reconciliation — Added a monotonic
inc_numberlog cursor so node usage reconciliation does not skip late async log writes (#3664) - Bedrock Output Assessments — Corrected the type of
outputAssessmentsin Bedrock responses (#4028) - Model Pool Pricing Reloads — Preserve non-pricing model pool entries across pricing reloads (#3999)
- Ghost Node Reconciliation — Replicate the VK hierarchy flow for ghost node reconciliation (#4088)
- VK Double Usage Counting — Fixed double usage counting when creating a virtual key (#4070)
- Model Config Lifecycle — Cascade deletes for model configs and removal of stale in-memory model configs (#4051, #4043)
- FTS Index Cap — Reduced the FTS index
left()cap from 800k to 250k chars to stay within the tsvector limit (#4057) - Sync Worker Drift — Reduced the sync worker ticker period to 5m to prevent threshold drift (#4023)
- Passthrough — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (#3941, #3988, #3983, #3924)
- Provider Response Headers — Strip provider response headers and add a content-type filter (#3955, #4024)
- Stream Handling — Drain non-SSE stream readers and retry stale connections (#3956, #3967)
- Azure Claude — Strip Azure diagnostic property for Claude models (#3925)
- Compat max_tokens — Preserve chat
max_tokensduring param filtering (#3992) - Raw Request Flag — Removed the raw request flag from providers that don’t support it (#4058)
- UI Fixes — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (#4046, #4052, #4044)
🔧 Maintenance
- Dependency Upgrades — Bumped transitive
golang.org/xdependencies (crypto, net, sys, text) for Docker Scout CVE remediation andrechartsto 3.8.1; cascaded version bumps across all modules (#3900, #4003)
- feat: OpenAI compaction support (#4053)
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat:
request_headerspattern capture for OTel and Maxim plugins with wildcard support (#4012) - feat: xAI
x_searchtool support (#3976) - feat: fetch URL validation with private-network config and link-local blocking (#3947, #3991)
- feat:
file://scheme support for pricing URLs (#4045) - feat: filter
ListAllModelsprovider fan-out by virtual key’s allowed providers (#3796) - fix: harden fetch URL IP checks against SSRF (#4092)
- fix: broaden Mantle model matching to all
gptvariants (#4091) - fix: strip thinking block if signature is empty (#4079)
- fix: remove usage from
responses.createdevent in OpenAI stream (#4080) - fix: set prompt cache key from Anthropic integration (#4086)
- fix: map upstream connection failures to 502 instead of 400 (#3929) (thanks @chris-colinsky!)
- fix(gemini): accept numeric schema integer constraints (#3994) (thanks @yanhao98!)
- fix: handle compaction message type (#3966)
- fix: OpenAI integration content string handling (#3949)
- fix: capture resolved provider from the load balancer for logging (#3930)
- fix: add content type to provider response header filter (#4024)
- fix: strip provider response headers (#3955)
- fix: drain non-SSE stream reader (#3956)
- fix: stale connection retries (#3967)
- fix: Azure diagnostic property strip for Claude models (#3925)
- fix: passthrough budgets (#3941)
- fix: bedrock outputAssessments type correction (#4028)
- fix: add Model field to TextCompletionChunkResponse (#3970) (thanks @kuishou68!)
- fix: accept orphaned tool results in OpenAI to Anthropic conversion flow (#3919)
- fix(mcp): allow inline stdio env assignments (#3861) (thanks @Shushmitaaaa!)
- chore: bumped transitive golang.org/x dependencies (crypto, net, sys, text) for Docker Scout CVE remediation (#3900)
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat: OpenAI compaction support (#4053)
- feat: multiple budget support for customers (#3998)
- feat:
calendar_alignedbudget support for customers (#3997) - feat: provider-level governance for budgets & limits (#3938)
- feat: scope-aware budgets & limits wired from model configs (#3937, #3939, #3981)
- feat:
created_byuser attribution column for virtual keys (#3672) - feat:
blacklisted_modelscolumn for virtual key provider configs (#3653) - feat:
aliascolumn in materialized view with filter support (#4078) - feat:
request_headerspattern capture for OTel and Maxim plugins (#4012) - feat: paginated virtual key fetch for large key counts (#3957)
- feat: optional
txparam onUpdateBudgetUsagefor transaction support (#4039) - feat: config.json source-of-truth flow (#3968)
- fix: reduce FTS index
left()cap from 800k to 250k chars to stay within tsvector limit (#4057) - fix: cascade deletes for model configs (#4051)
- fix: remove stale in-memory model configs (#4043)
- fix: add monotonic
inc_numberlog cursor so node usage reconciliation does not skip late async log writes (#3664) - fix: reduce sync worker ticker period to 5m to prevent threshold drift (#4023)
- fix: high-scale virtual key flow improvements (#4007)
- fix: preserve non-pricing model pool entries across pricing reloads (#3999)
- fix: passthrough budgets (#3941)
- refactor: make scope-level check methods extensible (#3940)
- revert:
access_profile_iddirect access profile assignment on virtual keys (#3669) - chore: drop the
access_profile_idcolumn fromgovernance_virtual_keys(#3670)
- fix: preserve chat
max_tokensduring param filtering (#3992) - chore: upgraded core to v1.5.17 and framework to v1.3.17
- feat: provider-level governance for budgets & limits (#3938)
- feat: scope-aware budgets & limits wired from model configs (#3937, #3939, #3981)
- feat: team budget and rate-limit collection exporters (#4040)
- feat: multiple budget support for customers (#3998)
- feat:
calendar_alignedbudget support for customers (#3997) - fix: replicate VK hierarchy flow for ghost node reconciliation (#4088)
- fix: cascade deletes for model configs (#4051)
- fix: create virtual key double usage counting (#4070)
- fix: high-scale virtual key flow improvements (#4007)
- fix: remove stale in-memory model configs (#4043)
- fix: gate models for passthrough in VK if present (#3988)
- fix: restrict fallbacks and provider selection to VK boundary (#3924)
- fix: passthrough budgets (#3941)
- refactor: make scope-level check methods extensible (#3940)
- chore: upgraded core to v1.5.17 and framework to v1.3.17
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat: OpenAI compaction support (#4053)
- feat:
request_headerspattern capture with wildcard support (#4012) - feat: wildcard pattern support for logging header capture, e.g.
x-custom-*(#3958) - feat: render file attachments in logs (#3931)
- fix: passthrough budgets (#3941)
- feat:
request_headerspattern capture with wildcard support (#4012)
- chore: upgraded core to v1.5.17 and framework to v1.3.17
- feat:
disable_content_loggingoption to drop message/tool content from exported spans (#4064) - feat:
request_headerspattern capture with wildcard support (#4012) - feat: multiple OTel collectors support (#3894)
- chore: upgraded core to v1.5.17 and framework to v1.3.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17

