What's Changed
- chore: Better enforcement of masking by @yuhongsun96 in #7967
- refactor(opal): select variant, transient/selected separation, OpenButton chevron fix by @raunakab in #8284
- chore(ollama): Sort model names by @justin-tahara in #8288
- feat(chat): dynamic bottom spacer for fresh-chat push-up effect by @nmgarza5 in #8285
- feat(ee): Enable license enforcement by default by @nmgarza5 in #8270
- fix(timeline): reduce agent message re-renders with referential stability in usePacedTurnGroups by @Subash-Mohan in #8265
- chore(craft): update demo dataset and add sandbox image readme by @wenxi-onyx in #8059
- fix(chatpage): Improve agent message layout, sidebar nesting, and icon fixes by @Subash-Mohan in #8224
- feat(memory): add user preferences and structured user context in system prompt by @Subash-Mohan in #8264
- chore(playwright): improve preflight checks and setup by @jmelahman in #8283
- fix(vertex): Updating masking workflow by @justin-tahara in #8299
- chore(tests): use CE backend for model_server tests by @jmelahman in #8296
- fix(embedding): Updating Masking Logic by @justin-tahara in #8301
- fix(opal): extract interactive container styles to CSS by @raunakab in #8307
- chore(slack): add logging when bot messages are filtered during indexing by @nmgarza5 in #8305
- feat(slack): add option to include bot messages during indexing by @nmgarza5 in #8309
- fix: make /health check async by @wenxi-onyx in #8314
- chore(devtools): deploy preview frontend builds in CI by @jmelahman in #8315
- chore(deployment): only try to build desktop if semver-like tag by @jmelahman in #8316
- chore(craft): bump sandbox limits one last time TM by @wenxi-onyx in #8317
- chore(llm): Adding new Mock LLM Call test by @justin-tahara in #8290
- feat(craft): narrow file sync to source, prevent concurrent syncs, and use --delete flag on incremental syncs by @wenxi-onyx in #8235
- fix(ee): copy license public key into Docker image by @nmgarza5 in #8322
- chore(deps): bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in #8319
- fix: allow basic users to share agents by @wenxi-onyx in #8269
- chore(llm): Hardening Fallback Tool Call by @justin-tahara in #8325
- chore(devtools): Add comment in AGENTS.md about the limitations of Celery timeouts with threads by @acaprau in #8257
- chore(opensearch): Improved migration task 0 - Schema migrations by @acaprau in #8321
- refactor(memory): Refactor memories to use ID-based persistence and new memories UI by @Subash-Mohan in #8294
- feat(opensearch): Improved migration task 1 - Completely replace old task logic with new by @acaprau in #8323
- feat(opal): add foldable prop to Button + select-variant icon colour by @raunakab in #8300
- fix(craft): load messages before restore session and feat: timeout restoration operations by @wenxi-onyx in #8303
- chore(deps): bump langchain-core from 0.3.81 to 1.2.11 in /backend/requirements by @dependabot[bot] in #8334
- chore(deps): bump pillow from 12.0.0 to 12.1.1 by @dependabot[bot] in #8338
- chore(playwright): remove chromatic by @jmelahman in #8339
- chore(opensearch): Add migration queue to helm chart and launch json by @acaprau in #8336
- fix(anthropic): Model Selection in Multi-Tenant by @justin-tahara in #8308
- feat(backend): add default_app_mode field to User table by @raunakab in #8291
- chore(admin): Improve Playwright test speeds by @justin-tahara in #8326
- fix: upgrade plan page nits by @wenxi-onyx in #8346
- fix: idleReplicaCount should be optional for ScaledObjects by @victoriamreese in #8344
- chore(playwright): remove unnecessary global auth checks by @jmelahman in #8341
- refactor(opal): update Container height variants, remove paddingVariant by @raunakab in #8350
- fix: Metadata file for larger zips by @yuhongsun96 in #8327
- chore(devtools):
ods composedefaults ee version by @jmelahman in #8351 - chore(devtools): address missed cubic review by @jmelahman in #8353
- chore(devtools): upgrade
ods: 0.5.1->0.5.2 by @jmelahman in #8355 - chore(devtools): update
ods composedefaults by @jmelahman in #8357 - chore(devtools): upgrade
ods: 0.5.2->0.5.3 by @jmelahman in #8358 - chore(search-settings): Remove unused kv search-setting key by @Danelegend in #8356
- fix(bedrock): Fixing toolConfig call by @justin-tahara in #8342
- chore(opensearch): Tuning - Reduce k from 1000 to 50 by @acaprau in #8359
- refactor(opal): rename subvariant to prominence, add internal, remove static by @raunakab in #8348
- feat: minimal deployment mode by @evan-onyx in #8293
- fix(ee): follow HTTP→HTTPS redirects in forward_to_control_plane by @nmgarza5 in #8360
- chore(llm): Backend Fallback Logic Tests by @justin-tahara in #8363
- fix: no vector db tests by @evan-onyx in #8369
- chore(playwright): Setup LLM Provider by @justin-tahara in #8362
- fix(opal): add padding to Interactive.Container and smooth foldable transitions by @raunakab in #8367
- feat(ee): gate access only when legacy EE flag is set and no license exists by @nmgarza5 in #8368
- feat(opensearch): Admin configuration 0 - REST APIs for migration stuff by @acaprau in #8364
- fix(opensearch): Make chunk migration not stop on an exception; also ACL does not raise by @acaprau in #8375
- feat(opensearch): Admin configuration 1 - FE migration tab in the admin sidebar, gated by env var by @acaprau in #8365
- feat(opensearch): Admin configuration 2 - Make the retrieval toggle actually do something by @acaprau in #8370
- chore: Opensearch tuning by @yuhongsun96 in #8374
- feat(memory): enable memory tool to add or update the memory by @Subash-Mohan in #8331
- chore(llm): Adding Tool Enforcement Tests by @justin-tahara in #8371
- refactor(opal): migrate
IconButtonusages to opalButtonby @raunakab in #8333 - feat: Unified Search and Chat by @raunakab in #8106
- fix: Search submission buttons layouts by @raunakab in #8382
- chore: make chatbackgrounds local assets for air-gapped envs by @wenxi-onyx in #8381
- chore(devtools): Recommend @playwright/mcp in Cursor by @jmelahman in #8380
- feat(search-settings): Add tests + contextual llm validation by @Danelegend in #8376
- feat(craft): local file connector by @rohoswagger in #8304
- refactor: github connector by @evan-onyx in #8384
- feat(craft): pptx generation, editing, preview by @wenxi-onyx in #8383
- fix(craft): craft connector FE nits by @rohoswagger in #8387
- chore(llm): Additional Model Selection Test by @justin-tahara in #8389
- fix: Reminders polluting the query expansion by @yuhongsun96 in #8391
- feat(craft): pdf preview and refresh output panel by @wenxi-onyx in #8392
- fix(billing): exclude inactive users from seat counts and allow users page when gated by @nmgarza5 in #8397
- fix: remove log error when authtype is not set by @wenxi-onyx in #8399
- fix(ollama): Fixing Content Skipping by @justin-tahara in #8092
- fix: flaky no vectordb test by @evan-onyx in #8400
- chore: hide file reader by @evan-onyx in #8402
- fix(ollama): Passing Context Window through by @justin-tahara in #8385
- fix(email): Making sure Email Links go to Default Mail Service by @justin-tahara in #8395
- fix: SearXNG works now by @yuhongsun96 in #8403
- chore(devtools):
ods screenshot-difffor visual regression testing by @jmelahman in #8386 - feat(auth): enforce seat limits on all user creation paths by @nmgarza5 in #8401
- chore(opensearch): Add profiling information by @acaprau in #8404
- fix: sharepoint cred refresh by @evan-onyx in #8406
- chore(playwright): upload baselines with merge_group jobs by @jmelahman in #8410
- chore(bulk invite): free trial limit by @jessicasingh7 in #8378
- chore: Project instructions would get ignored by @yuhongsun96 in #8409
- chore: Tiny intro message change by @yuhongsun96 in #8415
- chore(playwright): make screenshots deterministic by @jmelahman in #8412
- fix(memory): memory tool UI and prompt injection issues by @Subash-Mohan in #8377
- chore: reminder prompt to be moveable by @yuhongsun96 in #8417
- fix(web): icon button and timeline header UI fixes by @raunakab in #8416
- refactor(web): migrate from usePopup/setPopup to global toast system by @raunakab in #8411
- chore(playwright): welcome_page tests & per-element screenshots by @jmelahman in #8426
- chore(tests): temporarily disable exa tests by @jmelahman in #8431
- chore(tests): skip additional web_search test by @jmelahman in #8440
- chore(tests): skip yet another test_web_search_api test by @jmelahman in #8442
- feat(scim): add SCIM database models and migration by @nmgarza5 in #8419
- feat(airtable): index all and heirarchy for craft by @wenxi-onyx in #8414
- chore(playwright): tag appearance_theme tests exclusive by @jmelahman in #8441
- feat(llm): Populate env w/ custom config by @Danelegend in #8328
- fix: remove user file indexing from launch, add init imports for all celery tasks, bump sandbox memory limits by @wenxi-onyx in #8443
- feat(scim): add SCIM 2.0 Pydantic schemas by @nmgarza5 in #8420
- fix(celery): Respecting Limits for Celery Heavy Tasks by @justin-tahara in #8407
- fix: remove default idleReplicaCount by @victoriamreese in #8434
- chore(playwright): login page screenshots by @jmelahman in #8427
- chore(playwright): create new user tests by @jmelahman in #8429
- chore(playwright): include option to hide element in screenshots by @jmelahman in #8446
- fix: sharepoint cred refresh2 by @evan-onyx in #8445
- feat(contextual-llm): Populate and set w/ llm flow by @Danelegend in #8398
- chore(playwright): mask non-deterministic email element by @jmelahman in #8448
- feat: add setting to configure mcp host by @victoriamreese in #8439
- fix: don't pass captcha token to db by @wenxi-onyx in #8449
- chore(gha): de-duplicate integration test logic by @jmelahman in #8450
- feat(scim): add SCIM PATCH operation handler with unit tests by @nmgarza5 in #8422
- feat(scim): add SCIM filter expression parser with unit tests by @nmgarza5 in #8421
- chore(playwright): Adding new LLM Runtime tests by @justin-tahara in #8447
- chore: Remove end of lived backend routes by @yuhongsun96 in #8453
- chore(deps): bump qs from 6.14.1 to 6.14.2 in /web by @dependabot[bot] in #8451
- fix: bake public recaptcha key in cloud image by @wenxi-onyx in #8458
- chore: disable auto craft animation with feature flag by @wenxi-onyx in #8459
- chore: License update (No change, just touchup) by @yuhongsun96 in #8460
- refactor: connector config refresh elements/cleanup by @wenxi-onyx in #8428
- chore: Context summarization update by @yuhongsun96 in #8467
- fix: CheckpointedConnector pruning only processes first checkpoint step (mirror of #8464) by @evan-onyx in #8468
- chore(llm): Adding more FE Unit Tests by @justin-tahara in #8457
- fix(ui): fix few common ui bugs by @Subash-Mohan in #8425
- feat: agent view only modal by @raunakab in #7989
- fix: allow public oauth clients via DCR by @evan-onyx in #8482
- feat: pruning picks up hierarchynodes by @evan-onyx in #8481
- chore: hiernode passive deletes by @evan-onyx in #8484
- fix: custom MCP auth Headers in API [mirror of #8345] by @evan-onyx in #8487
- feat: slim confluence hiernodes by @evan-onyx in #8490
- fix: Code interpreter takes files by @Danelegend in #8489
- fix(ui): remove data-state from Switch by @rohoswagger in #8394
- fix(frontend): simplify onboarding logic and fix UI issues by @Subash-Mohan in #8470
- Chore/mcp server host by @victoriamreese in #8472
- fix(vertex): Additional fix for Opus 4.6 by @justin-tahara in #8497
- fix: Interactive.Base href rendering and container self-stretch by @raunakab in #8492
- fix(desktop): Link clicking within App by @justin-tahara in #8493
- fix: Edit messages w/ files by @Danelegend in #8461
- chore(playwright): hide toast elements in screenshots by @jmelahman in #8501
- chore(playwright): use
userfor llm runtime tests by @jmelahman in #8502 - fix(craft): ephemeral ACP clients to prevent multi-replica session corruption by @rohoswagger in #8465
- fix(helm): Log Level Passthrough for Celery by @justin-tahara in #8495
- chore(playwright): Cleanup for LLM Tests by @justin-tahara in #8504
- fix(ee): small ux fixes for licensing by @nmgarza5 in #8498
- chore: undeprecate doc sets by @evan-onyx in #8505
- feat(craft): ACP session persistence across sandbox sleep/wake by @rohoswagger in #8466
- feat(scim): add SCIM database CRUD operations (DAL) by @nmgarza5 in #8424
- chore(mcp): Adding more Playwright Tests by @justin-tahara in #8452
- chore(cursor): playwright SKILL.md by @jmelahman in #8506
- feat(scim): add SCIM bearer token authentication by @nmgarza5 in #8423
- chore(playwright): organize tests into directories by @jmelahman in #8509
- chore(playwright): Cleanup MCP Tests by @justin-tahara in #8512
- fix: Enable search UI in Chrome extension side panel by @rohoswagger in #8486
- chore(playwright): prefer absolute imports by @jmelahman in #8511
- chore(gha): only run zizmor when .github/ changes by @jmelahman in #8516
- fix: open_url broken on non-normalized urls and enable web crawl tests by @wenxi-onyx in #8508
- chore: add linguist-language by @Danelegend in #8515
- fix(ollama): Cleaning up DeepSeek by @justin-tahara in #8519
- chore(playwright): update skill re: user isolation best-practices by @jmelahman in #8521
- feat(scim): add SCIM 2.0 service discovery endpoints by @nmgarza5 in #8454
- fix: create release notifications on cloud by @wenxi-onyx in #8525
- fix(fe): center-align modals relative to chat container by @jmelahman in #8517
- chore(playwright): skip visual regression report on cancelled by @jmelahman in #8528
- chore: increase firecrawl test timeout to 60s for e2e test by @wenxi-onyx in #8529
- feat(observability): add production Prometheus instrumentation module by @nmgarza5 in #8503
- fix: shared drive node names by @evan-onyx in #8520
- chore(playwright): chat rendering tests by @jmelahman in #8526
- feat(chat): new chat sharing UI by @Subash-Mohan in #8471
- chore(playwright): screenshots wait for animations by @jmelahman in #8530
- chore(gha): update
helm/chart-testing-actionversion by @jmelahman in #8536 - chore(gha): rm nightly license scan workflow by @jmelahman in #8541
- fix: model config not populating flow during sync by @Danelegend in #8542
- chore(fe): update SourceTag tag size by @jmelahman in #8540
- chore(playwright): worker-aware users for test isolation by @jmelahman in #8544
- chore(llm): Cleaning up Docstring by @justin-tahara in #8546
- feat(scim): add SCIM User CRUD endpoints by @nmgarza5 in #8455
- chore(fe): update human message size by @jmelahman in #8547
- chore(llm): Cleaning up _extract_tool_call_kickoffs by @justin-tahara in #8548
- feat(scim): add admin SCIM token management API by @nmgarza5 in #8538
- feat(scim): add SCIM Group CRUD endpoints by @nmgarza5 in #8456
- chore(llm): Extract _make_placement by @justin-tahara in #8552
- chore(llm): Using bool for has_reasoned by @justin-tahara in #8549
- chore(llm): Extract citation flush helper by @justin-tahara in #8554
- chore(llm): Extract _close_reasoning by @justin-tahara in #8550
- chore(llm): Cleaning up arg parsing by @justin-tahara in #8555
- chore(fe): whitelabeling header nits by @jmelahman in #8561
- fix: /llm/provider route returns all providers by @Danelegend in #8545
- chore(fe): Button handles empty string as text, use in header by @jmelahman in #8563
- chore(fe): header text content wraps when responsive by @jmelahman in #8565
- fix(ollama): Ollama Chat fixes by @justin-tahara in #8522
- fix(vertex ai): Sort Model Names by @justin-tahara in #8572
- feat(metrics): add SQLAlchemy connection pool Prometheus metrics by @nmgarza5 in #8543
- fix: init all celery tasks for autodiscovery by @wenxi-onyx in #8539
- feat(craft): shareable webapp URLs with two-tier access control by @rohoswagger in #8510
- chore(opensearch): Make the migration visit from 4 independent Vespa slices concurrently by @acaprau in #8570
- feat(opensearch): Display percentage progress in the migration page by @acaprau in #8575
- chore: Opensearch tuning by @yuhongsun96 in #8518
- fix(ui): Fix admin UI layout, sticky headers, LLM filtering, and project view issues by @Subash-Mohan in #8496
- fix: define fallback only on custom metrics by @victoriamreese in #8566
- fix: update SourceTag component to use variant prop for sizing by @Subash-Mohan in #8582
- chore(fe): remove close button from image gen tooltip by @jmelahman in #8585
- chore(fe): fix drop-down overflow in API Key modal by @jmelahman in #8574
- chore(playwright): fix chat scrolling non-determinism by @jmelahman in #8584
- feat: whitelist invite setting, allow users to register and invite, new accoount blocked page by @wenxi-onyx in #8527
- feat: add file formatting reminder by @Danelegend in #8524
- feat: Modal Header no icon by @Danelegend in #8596
- feat(ods): add --continue flag and cp alias to cherry-pick by @nmgarza5 in #8601
- fix(manage-users): exclude slack users from /users list by @wenxi-onyx in #8602
- feat: sharepoint scalability 1 by @evan-onyx in #8531
- feat: file preview from llm by @Danelegend in #8604
- feat(opal): Add Tag component and resync colors with Figma by @raunakab in #8533
- feat(web): Initial Framework for Brave Web Search 1/3 by @justin-tahara in #8594
- feat(web): Logical Hardening for Brave Web Search 2/3 by @justin-tahara in #8595
- feat(opal): Add Content layout component by @raunakab in #8534
- feat(web): FE Changes for Brave Web Search 3/3 by @justin-tahara in #8597
- fix(helm): route /openapi.json to api_server in nginx config by @nmgarza5 in #8612
- feat(opal): Add widthVariant to Interactive.Container by @raunakab in #8610
- Fix/pat UI by @raunakab in #8617
- feat: delta sync sharepoint by @evan-onyx in #8532
- chore(fe): fix whitelabel logo moving on sidebar close by @jmelahman in #8577
- chore(fe): fix nested button hydration error by @jmelahman in #8599
- feat(vertex ai): Image Gen Historical Context by @justin-tahara in #8603
- feat: sharepoint scalability3 by @evan-onyx in #8537
- feat(code interpreter): improve produced code artifacts by @Danelegend in #8507
- chore(fe): whitelabel logo layout followup by @jmelahman in #8626
- fix(fe): popover width can fit trigger element by @jmelahman in #8624
- chore(fe): rm settings page top padding by @jmelahman in #8621
- fix: boolean form field click on text, open url tool checkbox in default assistant, and simple tooltip rendering by @wenxi-onyx in #8480
- chore(devtools): upgrade
ods: 0.5.7->0.6.0 by @jmelahman in #8628 - fix: search tool enabled when nothing selected by @evan-onyx in #8637
- chore(helm): update code-interpreter chart repo URL to python-sandbox by @nmgarza5 in #8625
- feat: sharepoint scalability4 by @evan-onyx in #8551
- chore(fe): replace BlinkingDot with a BlinkingBar by @jmelahman in #8640
- feat(scim): add scim_username column to ScimUserMapping by @nmgarza5 in #8635
- chore(auth): tests cleanup by @jessicasingh7 in #8559
- chore(llm): Removal of Retired Models + Cleanup by @justin-tahara in #8645
- chore(deps): @radix-ui/react-tooltip: v1.1.3->v1.2.8 by @jmelahman in #8647
- feat: Python tool call replay packets by @Danelegend in #8649
- fix(celery): Guardrail for User File Processing by @justin-tahara in #8633
- fix(fe): keep focus on input on empty by @jmelahman in #8627
- chore: special sauce by @nmgarza5 in #8646
- feat: sharepoint scalability5 by @evan-onyx in #8631
- fix(fe): Truncated tooltip is disabled when not needed to be shown by @jmelahman in #8629
- fix: unify provider retrieval into swr hook by @wenxi-onyx in #8609
- chore(fe): fix Pinned icon hover background when card is hovered by @jmelahman in #8656
- feat(opensearch): Add OpenSearch in docker compose by @acaprau in #8611
Full Changelog: v2.12.0...v3.0.0-beta