v2.1.39
Changelog
- Fixed disabling SCIM/SSO via Helm having no effect.
bifrost.scim.enabled: falseskipped thescim_configblock entirely, so the section was absent from the renderedconfig.json, the runtime never reconciled it, and SCIM stayed enabled from the previous state.bifrost.scimno longer has a chart default (the block is commented out invalues.yaml), andscim_configis now rendered wheneverbifrost.scimis declared at all — soenabled: falseemits"scim_config": {"enabled": false}and the disable propagates. Installs that never declarebifrost.scimemit nothing, leaving dashboard-configured SCIM untouched. - Added
bifrost.client.compat.azureDeepseek(defaultfalse) — converts Azure DeepSeek responses requests to chat completions so reasoning is preserved for coding harnesses. Renders intoclient.compat.azure_deepseek. - Updated
bifrost.governance.complexityAnalyzerConfigfor semantic Complexity Router configuration: set an embedding provider and model, add reference phrases for Simple, Medium, and Complex, and chooseembeddedorvector_storephrase storage. Bifrost detects the embedding dimension during warmup. Legacy four-tier lists remain valid: Simple stays Simple, Code and Technical merge into Medium, and Reasoning merges into Complex. Legacytier_boundariesremain accepted during upgrades but are optional and ignored by semantic routing. Renders intogovernance.complexity_analyzer_config. - Added
vectorStore.type: chromemplus avectorStore.chromemblock (path,compress) for the embedded in-process vector store used by semantic complexity routing. Renders intovector_store.config. - Added
bifrost.governance.complexityAnalyzerConfig.session.enabledfor session-aware Complexity Router behavior. Identified sessions retain their highest observed tier across normally sequential turns for 24 hours of inactivity; overlapping requests for the same session are best-effort and resolve by last writer wins. Renders intogovernance.complexity_analyzer_config.session.enabled. - Fixed
postgresql.external.passwordCommandandstorage.logsStore.postgres.passwordCommandbeing unusable: the mutual-exclusion rules invalues.schema.jsontested only for key presence, andvalues.yamlshipspassword: ""/existingSecret: ""as defaults, so any chart install that setpasswordCommandfailed validation with'not' failed. They now check the value instead —passwordandexistingSecretmust be empty whenpasswordCommandis set — so RDS IAM auth renderspassword_commandintoconfig_store.config/logs_store.configwithout needingpassword: nulloverrides. - Added
bifrost.scim.config.attributeAccessProfileMappingsto every SCIM/SSO provider — attribute → access-profile grants (attribute/value/accessProfile,*and glob values supported). Every matching rule applies: the user holds the union of the matched profiles on top of whatever a role or the dashboard assigned, and Bifrost enforces the tightest limit across them. Renders into the provider’sattributeAccessProfileMappings. - Added
bifrost.scim.config.enableBulkSyncfor theentraandgoogleproviders. Normally set by the SCIM verify step (turned off when the app registration lacks the Graph permissions / the service account lacks the Directory API scopes); declare itfalseto opt out of bulk user/group sync while keeping login-time claim sync. Renders intoenableBulkSync. - Added
bifrost.governance.projects— projects declared inconfig.json:access_rule,membership_mode,accounting_mode,split_policy,calendar_aligned, plusbudgets,rate_limit,provider_configs(withmodel_budgets),mcp_configs, andvirtual_mcps. Members are still added from the dashboard or the API. Renders intogovernance.projects. - Added
bifrost.mcp.clientConfigs[].allowByDefault— when true the MCP server is available to every caller not explicitly assigned it, with all tools allowed; an explicit assignment still wins for that caller. SupersedesallowOnAllVirtualKeys, now deprecated and read only whenallowByDefaultis absent. The chart emits whichever key you declare, so the existing key keeps working untranslated. Renders intoallow_by_default/allow_on_all_virtual_keys. - Added
bifrost.mcp.clientConfigs[].endpointSlug— URL-safe, immutable slug serving the client at/mcp/<slug>. Derived from the client name when omitted; must be unique across MCP clients and Virtual MCPs. Renders intoendpoint_slug. - Added
bifrost.client.vkRotationCooldown(default0) — grace period after a virtual key rotation during which the previous key value still authenticates. Go duration string (e.g."5m"), max 30 days;0disables. Renders intoclient.vk_rotation_cooldown. - Added
databricks_key_config(workspace_url,api_format,client_id/client_secretfor OAuth M2M,forward_gateway_tags) to provider keys, withbifrost.providers.databricksexamples invalues.yaml. - Added
allow_all_providerstobifrost.governance.projects[]andbifrost.accessProfiles[](defaultfalse) — grant access to every provider, including ones without aprovider_configsentry and providers added later; listed providers keep their own model, key, budget, and rate-limit rules. Renders into each entry’sallow_all_providers.

