What's Changed
- fix(external-group-sync): bridge fence validator transition gap by @nmgarza5 in #10691
- fix(metrics): pass tenant_id explicitly to indexing-task connector resolver [ENG-4085] by @justin-tahara in #10689
- fix(connectors): add HTTP timeouts to prevent worker hangs by @nmgarza5 in #10693
- fix(slack): treat account_inactive as expired credential by @nmgarza5 in #10694
- chore(tests): unit tests for llm utils by @jmelahman in #10698
- chore(tests): LLM provider tests for openai and ollama by @jmelahman in #10462
- feat(sidebar): revamp NotificationsPopover with New/Older sections by @raunakab in #10651
- fix(Hubspot): use search API for incremental poll to avoid full scans - phase 2 by @Bo-Onyx in #10677
- feat: index attempt metrics FE by @evan-onyx in #10640
- chore(deps): rollforward "bump litellm from 1.81.6 to 1.83.0 (#9898)" by @jmelahman in #10179
- fix(embedding): Change vertex embedding to global by @Danelegend in #10699
- chore(llms): update recommended models by @jmelahman in #10700
- fix(math): render LaTeX live during message streaming by @Subash-Mohan in #10681
- fix(pruning): adjust the default pruning frequency to 20 days by @Bo-Onyx in #10705
- feat(chat-preferences): restore-default for system prompt + Highspot/Loopio logo migration by @raunakab in #10706
- fix(fe): add padding to welcome header by @jmelahman in #10707
- chore(public): remove orphaned third-party logo PNGs by @raunakab in #10708
- chore(deps-dev): bump postcss from 8.5.6 to 8.5.10 in /examples/widget by @dependabot[bot] in #10626
- feat(chat-preferences): gate "Keep Chat History" behind EE by @raunakab in #10712
- chore(playwright): remove timestamp from persona chat screenshot by @jmelahman in #10713
- chore(deps): bump gitpython from 3.1.45 to 3.1.47 by @dependabot[bot] in #10627
- fix(pruning): Explicitly stamp enqueued_at header on pruning generator tasks by @Bo-Onyx in #10714
- chore(deps): bump lxml from 5.3.0 to 6.1.0 in /backend/requirements by @dependabot[bot] in #10436
- fix(openrouter): enable auto-update mode by @jmelahman in #10718
- refactor(tests): bedrock integration and unit tests by @jmelahman in #10716
- fix(hubspot): N+1 HubSpot association fetches using batch_read API by @Bo-Onyx in #10715
- chore(tests): use
allow_module_level=Trueas needed by @jmelahman in #10717 - fix(fe): model selector check icon is center aligned by @jmelahman in #10719
- fix(deploy): add opensearch to depends_on so init-letsencrypt brings it up by @nmgarza5 in #10722
- fix(beat_schedule): include LICENSE_ENFORCEMENT_ENABLED in EE gate by @Subash-Mohan in #10683
- fix(google drive): Download google slides w/ images by @Danelegend in #10723
- chore(tests): migrate connectors test to pytest_secrets by @jmelahman in #10733
- fix(opensearch): For MT cloud only verify each index once per process by @acaprau in #10737
- feat(tracing): LLMFlow registry, wrap every LLM call site by @nmgarza5 in #10735
- chore(CI): Revert: Temporarily disable 2 tests which depend on Anthro… by @jmelahman in #10742
- fix(google-connector): catch impersonation failures across all Google Drive API calls by @Bo-Onyx in #10730
- fix(doc-processing): Cap num threads for contextual rag by @Danelegend in #10729
- chore(docker): drop
python:3.11-slims OS suffix by @jmelahman in #10741 - fix(doc processing): Apply multiple threads for image processing by @Danelegend in #10744
- chore(metrics): Add metrics for image processing by @Danelegend in #10731
- fix(sharepoint): add slim connector so it does not need to fetch permission during pruning by @Bo-Onyx in #10750
- feat(billing): allow trialing tenants to upgrade on demand by @nmgarza5 in #10732
- chore(ci): enable license enforcement in test infra via dev license by @nmgarza5 in #10738
- fix(gitlab): fall back to username when GitLab masks author name by @jmelahman in #10755
- feat(targeted-reindex): schema for targeted document reindexing by @nmgarza5 in #10747
- test(notion): accept new app.notion.com page URL format by @jmelahman in #10754
- chore(logging): enforce ruff G004, convert f-strings to %-style by @wenxi-onyx in #10767
- feat: crawler playwright retry +improved error msg by @evan-onyx in #10746
- fix: sharepoint retry transport errors by @evan-onyx in #10748
- fix: dont check per sync creds for public connectors by @evan-onyx in #10765
- fix: paginate role assignments by @evan-onyx in #10749
- chore(tooling): unify ruff and black versions via uv-run pre-commit hooks by @wenxi-onyx in #10769
- chore: remove dead RequestTracker connector and commented brotli import by @wenxi-onyx in #10772
- feat(chat): make MAX_LLM_CYCLES env-configurable by @beraterkanelcelik in #10780
- feat(web): Refreshed
Index Settings Pageby @raunakab in #10272 - chore(codeowners): drop required reviewer for AGENTS.md and CLAUDE.md by @Weves in #10739
- chore(deps): upgrade pdfminer-six to 20260107 by @jmelahman in #10760
- chore(devcontainer): plumb GH_TOKEN and add vscode tasks by @jmelahman in #10762
- chore(deps): bump
docker/login-actionby @jmelahman in #10672 - refactor(web): clean up admin ClientLayout + move to layouts/admin/ by @raunakab in #10793
- chore(deps): bump
runs-on/action&runs-on/cacheby @jmelahman in #10671 - chore(deps): upgrade jaraco-context to 6.1.2 by @jmelahman in #10761
- refactor: chat input bar to contentEditable for rich content by @wenxi-onyx in #10500
- refactor(web): internalize sidebar fold state into SidebarRoot by @raunakab in #10797
- fix(auth): refresh OAuth tokens for any OIDC provider, not just Google by @beraterkanelcelik in #10794
- fix(freshdesk): handle null due by by @evan-onyx in #10801
- chore(deps): pin uv pip installs to uv.lock via --require-hashes by @jmelahman in #10800
- fix(billing): add /tenants/seats/update alias for cloud FE by @nmgarza5 in #10802
- fix(web): mutate currentSearchSettings on cancel re-index by @raunakab in #10804
- feat: add paste_as_tile user preference by @wenxi-onyx in #10803
- fix(a11y): add missing aria-labels to interactive components by @wenxi-onyx in #10774
- perf(db): add eager loading for chat message feedbacks and search docs by @wenxi-onyx in #10776
- chore: remove dead legacy admin user management components by @wenxi-onyx in #10809
- feat(web): show Index Settings in sidebar for cloud deployments by @raunakab in #10808
- chore(frontend): deprecate legacy Text component, migrate preview modal variants by @wenxi-onyx in #10778
- feat(license): tiered expiry warnings + 14d grace period by @nmgarza5 in #10758
- fix(embedding): Fix broken retries for embedding by @Danelegend in #10766
- fix(pruning): update default pruning frequency from 20 to 15 days by @Bo-Onyx in #10796
- feat(web): enterprise-tab tooltips + InlineMarkdown fixes by @raunakab in #10812
- chore(deps): use
--no-depsforuv pip installby @jmelahman in #10815 - feat(targeted-reindex): consumer query filters by @nmgarza5 in #10764
- fix(auth): refresh OIDC access tokens on every authenticated request (follow-up to #10794) by @beraterkanelcelik in #10806
- refactor(connectors): rename Resolver.resolve_errors to reindex by @nmgarza5 in #10818
- chore: perm sync vis setup by @evan-onyx in #10789
- feat: frontend models and components for perm sync vis by @evan-onyx in #10790
- chore(format): apply black formatting to playwright_fetch.py by @jmelahman in #10830
- chore(doc-processing): add per-attempt doc-processing batch counters by @Bo-Onyx in #10768
- fix(slack): key bot auth ID cache by (tenant_id, slack_bot_id) by @nmgarza5 in #10827
- refactor(web): replace CreateButton with direct Opal Button by @raunakab in #10817
- fix(targeted-reindex): keep staged files of concurrent in-progress attempts by @nmgarza5 in #10826
- feat: more frontend models for perm sync vis by @evan-onyx in #10791
- chore(deps): bump rapidfuzz from 3.13.0 to 3.14.5 in /backend by @dependabot[bot] in #10820
- chore(deps): upgrade litellm to latest w/
override-dependenciesby @jmelahman in #10807 - chore(devcontainer): cache frontend build artifacts on named volumes by @jmelahman in #10837
- feat: perm sync visibility by @evan-onyx in #10795
- Update README by @yuhongsun96 in #10843
- fix(indexing): surface oversized document errors and raise MAX_DOCUMENT_CHARS limit by @Bo-Onyx in #10844
- chore(devcontainer): add release workflow to publish multi-arch image by @jmelahman in #10845
- fix(ci): clear devcontainer tags when pushing by digest by @jmelahman in #10852
- refactor(persona): replace llm override strings with model_configuration FK by @raunakab in #10846
- chore(db): drop legacy persona llm override string columns by @raunakab in #10855
- feat(llm): make provider display name optional and allow renaming by @raunakab in #10847
- fix(ui): correct indexing errors modal pagination by @Bo-Onyx in #10851
- feat: paste tiles in contentEditable input bars by @wenxi-onyx in #10810
- chore: remove kg_processing worker from vscode launch config by @wenxi-onyx in #10862
- perf(db): add eager loading to get_document_set_by_id by @wenxi-onyx in #10775
- chore: remove 15 unused legacy components by @wenxi-onyx in #10865
- fix(indexing): tabular chunker crash on Google Sheets with multi-line cells by @Bo-Onyx in #10860
- feat(web): make LLM provider display name optional by @raunakab in #10848
- refactor(web): rename llmConfig → languageModels to match sidebar tab name by @raunakab in #10872
- fix(db): asyncpg statement_cache_size=0 by @nmgarza5 in #10871
- fix: confluence data center websudo by @evan-onyx in #10853
- fix(indexing): fix generator didn't stop after throw() in prepare_to_modify_documents by @Bo-Onyx in #10870
- feat(code-interpreter): Handle session creation, deletion and bash routes by @Danelegend in #10859
- feat(code-interpreter): Add version to health endpoint by @Danelegend in #10867
- feat(code-interpreter): Block functions by code-interpreter server version by @Danelegend in #10875
- feat(targeted-reindex): API endpoints + DB writes + stub celery task by @nmgarza5 in #10828
- chore(embedding): Cache query embeddings by @acaprau in #10786
- fix: use rest space perms confluence dc 9.1 by @evan-onyx in #10854
- feat(github): Download github util function by @Danelegend in #10880
- feat(tools): Add bash tool by @Danelegend in #10876
- fix(litellm): Opus 4.7 no longer accepts
temperatureparam, litellm is not dropping it by @acaprau in #10878 - fix(redis): Add some method calls to
methods_to_wrapfor tenant ID prefixing by @acaprau in #10849 - feat(targeted-reindex): celery task lifecycle + resolution tracking by @nmgarza5 in #10829
- feat(targeted-reindex): connector.reindex + indexing pipeline wiring by @nmgarza5 in #10864
- test: e2e tests for contentEditable input bar and paste tiles by @wenxi-onyx in #10811
- test(targeted-reindex): daily integration suite against real Drive by @nmgarza5 in #10874
- fix(celery): gate cleanup tasks to active tenants only by @nmgarza5 in #10890
- docs(test): e2e Playwright rules — POM + auto-retrying matchers by @nmgarza5 in #10892
- chore(gha): add repro command to nightly external dependency tests Slack notification by @jmelahman in #10896
- chore(deps-dev): bump python-multipart from 0.0.26 to 0.0.27 by @dependabot[bot] in #10905
- chore(deps): bump gitpython from 3.1.47 to 3.1.49 by @dependabot[bot] in #10903
- chore(deps-dev): bump mistune from 3.2.0 to 3.2.1 by @dependabot[bot] in #10904
- feat(coding-agent): Add various helpers and definitions for coding agent by @Danelegend in #10882
- chore(docprocessing): use batch counters in heartbeat monitor for faster invalidation by @Bo-Onyx in #10835
- chore: [Running GitHub actions for #10856] by @evan-onyx in #10899
- fix(background): release DB sessions before slow I/O in user file tasks by @Bo-Onyx in #10881
- chore(deps): bump next to 16.2.6 by @jmelahman in #10916
- chore(deps): bump hono from 4.12.14 to 4.12.18 in /backend/onyx/server/features/build/sandbox/kubernetes/docker/templates/outputs/web by @dependabot[bot] in #10907
- chore(deps): bump ip-address and express-rate-limit in /backend/onyx/server/features/build/sandbox/kubernetes/docker/templates/outputs/web by @dependabot[bot] in #10908
- fix(chat): release DB session before LLM stream begins by @nmgarza5 in #10906
- chore(tf): Ability to pin nodes by @justin-tahara in #10910
- feat: capture perm sync exception trace by @evan-onyx in #10898
- fix(pruning): make default pruning 10 days by @Bo-Onyx in #10925
- fix(db): replace bare except clauses with except Exception by @wenxi-onyx in #10928
- fix(imap): replace print() with logger.warning in charset decoding fallback by @wenxi-onyx in #10927
- fix(types): replace any types with concrete types in AreaChart component by @wenxi-onyx in #10930
- fix(db_session): release DB session before embedding in docprocessing task by @Bo-Onyx in #10924
- feat(coding agent): Add coding agent by @Danelegend in #10877
- feat(coding-agent): Coding Agent as Tool for Chat Agent by @Danelegend in #10885
- feat(coding-agent): Add admin page and action bar changes for coding agent tool by @Danelegend in #10883
- feat(coding-agent): Handle tool packets for coding agent tool by @Danelegend in #10884
- chore(embedding): Use
expireinstead ofsetwhen resetting the TTL for query cache hits by @acaprau in #10901 - feat(web,backend): allow litellm to use ADC for vertex by @Mberga14 in #10357
- feat(craft): initial craft plans by @Weves in #10727
- fix(chat): release DB session across compress_chat_history LLM call by @nmgarza5 in #10923
- fix(chat): release DB session during rename_chat_session LLM call by @nmgarza5 in #10922
- feat(onyx/backend): add ability to use GCS with Workload identity by @Mberga14 in #10703
- refactor(opal): sever app-layer imports for npm publish by @nmgarza5 in #10939
- refactor(search): replace contextual RAG string columns with model_configuration FK by @raunakab in #10866
- feat(opal): add tsup build + npm publish metadata by @nmgarza5 in #10941
- refactor(opal): drop refresh-components shims, import directly from opal by @nmgarza5 in #10945
- fix(index): remove progress stall check in favor of heartbeat monitor by @Bo-Onyx in #10940
- feat(targeted-reindex): wire Resolve-All button + harden synthetic IndexAttempt lifecycle by @nmgarza5 in #10891
- fix(coding-agent): Stop coding agent populating main chat by @Danelegend in #10946
- fix(files): Stop persona file blockages by @Danelegend in #10943
- fix(files): Code interpreter files not appearing during chat streaming by @Danelegend in #10944
- chore(deps): bump fast-uri from 3.1.0 to 3.1.2 in /web by @dependabot[bot] in #10948
- ci(opal): add release workflow for @onyx-ai/opal by @nmgarza5 in #10947
- chore(opal): bump version to 0.1.1 for first OIDC release by @nmgarza5 in #10954
- feat(targeted-reindex): Confluence Resolver.reindex by @nmgarza5 in #10942
- fix(onyx-cli): build go binary for each GOOS/GOARCH by @wenxi-onyx in #10955
- chore(deps): bump fast-uri from 3.1.0 to 3.1.2 in /backend/onyx/server/features/build/sandbox/kubernetes/docker/templates/outputs/web by @dependabot[bot] in #10950
- feat(targeted-reindex): plumb HierarchyNode yields through reindex by @nmgarza5 in #10949
- chore(deps-dev): bump langchain-core from 1.2.28 to 1.3.3 by @dependabot[bot] in #10956
- chore(deps): bump gitpython from 3.1.49 to 3.1.50 by @dependabot[bot] in #10959
- feat(ods):
ods deploy wikicommand by @justin-tahara in #10962 - docs: craft search tool plans by @wenxi-onyx in #10960
- chore(ods): Bump from v0.7.6 -> v0.7.7 by @justin-tahara in #10964
- feat: add Search API endpoint (POST /api/search) by @wenxi-onyx in #10966
- feat(tenants): disable default LLM provider for multi-tenant cloud by @nmgarza5 in #10740
- chore(deps): bump urllib3 from 2.6.3 to 2.7.0 in /backend/requirements by @dependabot[bot] in #10980
- chore(redis): Implement proper TenantRedisClient, replace all usages of
TenantRedisby @acaprau in #10909 - fix: drive perm sync validation by @evan-onyx in #10965
- fix(tools): Tool Name mismatch issue by @justin-tahara in #10981
- chore(deps): bump mako to 1.3.12 by @jmelahman in #10983
- chore(deps): bump path-to-regexp to 8.4.2 in sandbox web template by @jmelahman in #10984
- refactor(web): consolidate and clean up all agent-related code by @raunakab in #10970
- refactor(modals): use
InputSelectFieldfor auth method pickers by @raunakab in #10990 - chore(devtools): make devcontainer firewall opt-in by @jmelahman in #10988
- feat(slack-bot): gate invocation by respond_member_group_list allowlist by @nmgarza5 in #10992
- chore(deps): bump next from 16.2.3 to 16.2.6 in /examples/widget by @dependabot[bot] in #10985
- refactor: onyx-cli for agent-first experimence by @wenxi-onyx in #10973
- fix(mcp): per user multiple header by @evan-onyx in #10995
- refactor(share-modal): replace
LineItemwithContentAction+SvgCheckby @raunakab in #10991 - chore(docs): update craft search docs with implementation details and new part 3 plan by @wenxi-onyx in #10999
- feat(wiki): Push public connector documents to Agent Wiki after indexing by @Bo-Onyx in #10953
- fix: confluence version endpoint by @evan-onyx in #10998
- fix(billing): update help URL to correct documentation path by @wenxi-onyx in #11003
- feat(onyx-cli): agentic search command by @wenxi-onyx in #11001
- chore(deps): bump next from 16.2.3 to 16.2.6 in /backend/onyx/server/features/build/sandbox/kubernetes/docker/templates/outputs/web by @dependabot[bot] in #11006
- refactor: better copy PAT button in creation modal by @wenxi-onyx in #11005
- feat(llm): use Bifrost normalized_name for display names by @justin-tahara in #11015
- chore(deps): bump tauri from 2.10.3 to 2.11.1 in /desktop/src-tauri by @dependabot[bot] in #10902
- fix(onyx-cli): show help by default instead of launching TUI, support Ctrl+D to cancel configure by @wenxi-onyx in #11017
- fix(opal): correct SelectCard border-color regression + add borderColor prop by @raunakab in #11020
- feat(auth): add PAT type system and encrypted sandbox credential storage by @wenxi-onyx in #11023
- feat(indexing): add Cohere embed-v4.0 with response-format compat by @justin-tahara in #11025
- feat(indexing): add Gemini embedding-2-preview with instruction prompts by @justin-tahara in #11026
- fix(onyx-cli): show clean error when server returns HTML instead of JSON by @wenxi-onyx in #11028
- chore(indexing): remove search-time image processing by @justin-tahara in #11024
- test(voice): verify STT works without a TTS provider (ENG-3927) by @justin-tahara in #11029
- fix(asana): stop dropping teamless projects from explicit allowlist by @justin-tahara in #11016
- feat(craft): wire PAT provisioning into sandbox lifecycle by @wenxi-onyx in #11031
- chore(img-gen): Drop dalle-3 as a image gen provider by @Danelegend in #11032
- docs(craft): Skills V1 PRD + HTML mockups by @rohoswagger in #10987
- feat(craft): wire company-search skill into sandbox via onyx-cli by @wenxi-onyx in #11037
- fix(seat-limit): close TOCTOU race + plug promotion + cloud auto-bill by @nmgarza5 in #10900
- feat(users): re-add invite-only toggle by @nmgarza5 in #10886
- feat(skills): Establish Skills V1 foundation schema by @rohoswagger in #10996
- refactor(craft): comprehensively remove file sync behavior by @wenxi-onyx in #11042
- fix(admin): WebSearch modal cleanup — masked_api_key, disconnect-prevention, ProviderCard hover by @raunakab in #11036
- ci: build craft-edge images on experimental-cc4a tags by @wenxi-onyx in #11045
- docs(db): broaden statement_cache_size=0 comment beyond pgbouncer by @nmgarza5 in #11057
- fix(freshdesk): paginate past 300 pages by @evan-onyx in #11062
- docs(craft): claim skills task board tasks by @rohoswagger in #11058
- chore: update onyx-cli default url by @wenxi-onyx in #11065
- refactor(craft): remove demo data toggle and connector config UI by @wenxi-onyx in #11046
- fix(scim): return null instead of 404 when no token configured by @nmgarza5 in #11038
- feat(craft): scheduled tasks v1 by @Weves in #11027
- chore(deps): upgrade tailwindcss v3 → v4 by @jmelahman in #11035
- fix(confluence): use the REST API with non-scoped tokens for downloading attachments by @wenxi-onyx in #11068
- fix(db): cascade hierarchy_node join on cc_pair credential swap by @nmgarza5 in #11067
- chore(devtools): commit Playwright MCP config by @jmelahman in #11070
- fix(chat): restore prose margins after tailwind v4 upgrade by @jmelahman in #11071
- chore(web): drop custom Cache-Control for /_next/static/* by @jmelahman in #11075
- fix: onyx-cli version in sandbox by @wenxi-onyx in #11081
- fix: helm add sandbox backend by @wenxi-onyx in #11076
- fix(skills): simplify skill schema uniqueness by @rohoswagger in #11082
- feat(hooks): add document-push hook point, remove hardcoded agent-wiki push by @Bo-Onyx in #11078
- fix(hook_UI): hook management button right side aligned by @Bo-Onyx in #11084
- chore: always show indexing metrics by @evan-onyx in #11085
- chore(deps): bump langsmith from 0.7.32 to 0.8.0 by @dependabot[bot] in #11083
- feat(web): gate queued messages on previous answer fully rendered by @nmgarza5 in #10921
- chore(deps): bump authlib from 1.6.11 to 1.6.12 by @dependabot[bot] in #11043
- fix: opencode config for anthropic by @wenxi-onyx in #11088
- fix: remove num_hits from public search api by @wenxi-onyx in #11090
- chore(devtools): migrate from prettier to oxfmt by @jmelahman in #11040
- refactor(search api + cli): preprocess response from search pipeline to be coherent for consumers and update onyx cli for new api by @wenxi-onyx in #11091
- chore(devtools): migrate from black to ruff format by @jmelahman in #11080
- chore: bump sandbox cli version by @wenxi-onyx in #11099
- refactor(mcp server): for updated search api by @wenxi-onyx in #11098
- chore(pre-commit): prefer
pre-commit-terraformby @jmelahman in #11101 - chore: bump opal to v0.1.2 by @nmgarza5 in #11100
- chore(fmt): fix
oxfmtat HEAD by @jmelahman in #11102 - chore(ci): path-filter python and database test workflows by @jmelahman in #11105
- feat(connectors/slack): add Enterprise Grid support by @nmgarza5 in #11077
- perf(playwright): bump admin CI workers 2→4 by @nmgarza5 in #11103
- feat(web): drain typewriter faster after stream finishes by @nmgarza5 in #10920
- fix: gdrive hierarchynode parents by @evan-onyx in #11106
- feat(skills): skills scaffolding by @rohoswagger in #11069
- feat(dev): hot-reload + breakpoints for celery workers via watchfiles by @wenxi-onyx in #11112
- chore: postgres tcp keepalive by @evan-onyx in #11116
- chore(opensearch): Implement bulk updates by @acaprau in #11109
- chore(opensearch): Bump docker compose OpenSearch image tag to 3.6.0 by @acaprau in #11117
- fix(helm): provision redis CRD and postgres cluster; drop -master from REDIS_HOST by @wenxi-onyx in #11111
- chore(opensearch): Retry on bulk update
already_closed_exception,search_phase_execution_exception; Clean upbulkcall semantics by @acaprau in #11114 - chore(opensearch): Bump Helm OpenSearch tag to 3.6.0 by @acaprau in #11119
- chore(opensearch): Use bulk updating in the hotpath by @acaprau in #11115
- refactor(voice): Clean up small items for Voice, Web-Search, Language-Models by @raunakab in #11063
- docs(dev): add local Kubernetes development workflow by @wenxi-onyx in #11113
- chore(devtools): migrate from eslint to oxlint by @jmelahman in #11079
- chore(ci): path-filter integration test workflow by @jmelahman in #11126
- feat(litellm): Expand support for capabilities by @mikew in #10783
- fix(helm): Helm chart fixes for bool parsing, operator pins, and HPA targets by @justin-tahara in #11125
- feat(llms): Store reasoning flow support by @mikew in #10785
- fix(dev): subscribe celery debug workers to sandbox and checkpoint… by @wenxi-onyx in #11130
- fix: LiteLLM embedding test model name payload by @k-kasajima in #11110
- feat(open_url): add OPEN_URL_VALIDATE_SSRF opt-out for trusted networks by @justin-tahara in #11097
- chore(ci): use GitHub App token for cherry-pick automation by @jmelahman in #11127
- docs: add SECURITY.md for vulnerability reporting by @jmelahman in #11134
- ci: run craft kubernetes sandbox tests via kind by @wenxi-onyx in #11132
- chore(ci): path-filter playwright test workflow by @jmelahman in #11135
- chore(deps): bump runs-on/action from 2.0.3 to 2.1.2 by @dependabot[bot] in #10821
- fix(indexing): raise CSV field size limit to 128 MiB by @justin-tahara in #10552
- fix(indexing): demote PDF parsing failures to warning by @justin-tahara in #10543
- feat: pass all csvs to code interpreter by @evan-onyx in #11136
- feat: craft push files via sandbox manager and daemon by @wenxi-onyx in #11121
- feat(skills): small db refactor and new skills api by @wenxi-onyx in #11128
- refactor(skills): migrate builtin skills to push-based delivery by @wenxi-onyx in #11133
- feat(craft): asymmetric Ed25519 auth for sandbox push daemon by @wenxi-onyx in #11145
- chore(document index): Remove old DocumentIndex interface by @acaprau in #10917
- feat(tier-management): add Business tier and unified gating middleware by @Subash-Mohan in #11050
- fix(ollama): better default API Base URLs when running in docker by @jmelahman in #10045
- fix(pruning): reduce default pruning frequency to 7 days by @Bo-Onyx in #11151
- chore(opensearch): Debug script can get detailed cluster health and do route retry by @acaprau in #11138
- chore: validate file args to code interpreter by @evan-onyx in #11137
- chore(security): enable ruff flake8-bandit (S) rules by @jmelahman in #11153
- fix(deletion): prevent OOMKill of monitoring pod during large deletions by @justin-tahara in #11155
- chore(security): enable ruff S608 (hardcoded-sql-expression) by @jmelahman in #11157
- fix(ci): use client-id for create-github-app-token by @jmelahman in #11164
- fix(utils): rename platform.py to avoid stdlib shadowing by @jmelahman in #11150
- chore(claude): ignore .claude/worktrees directory by @justin-tahara in #11170
- chore(ci): drop ECR-cache reads/writes from release Docker builds by @jmelahman in #11172
- fix(tier-management): gracefully handle missing database tables in incomplete schemas by @justin-tahara in #11169
- chore(opensearch, prometheus): Emit telemetry on search failures by @acaprau in #11163
- feat(opal): export logos in dist + bump to 0.1.3 by @nmgarza5 in #11173
- chore(opensearch, grafana): Add dashboards for search failures by @acaprau in #11165
- fix(deletion): release PG connection before document-index I/O in per-doc cleanup by @justin-tahara in #11175
- fix(chat): always return chat_session_id from non-streaming send-chat-message by @justin-tahara in #11177
- chore(grafana): Dedup redundant dashboard in
profiling/grafana/dashboards, mount production helm dashboards in local grafana testing flow by @acaprau in #11166 - fix(tests): poll retrieval to stabilize flaky update test by @jmelahman in #11176
- fix(monitoring): two OOM fixes for monitoring worker under heavy backlog by @justin-tahara in #11180
- test(craft): comprehensive test suite overhaul by @wenxi-onyx in #11152
- chore(opensearch): Fix
if <> is not Nonecontrol flow split in calling OpenSearch client by @acaprau in #11183 - chore(opensearch, prometheus): Emit telemetry on search latency overhead by @acaprau in #11181
- feat(craft): skills ui by @Weves in #11011
- chore(opensearch, grafana): Add dashboards for search latency diffs by @acaprau in #11182
- chore(opensearch, grafana): Add more granular tables for search latency by type by @acaprau in #11186
- chore: jira perm sync logs by @evan-onyx in #11184
- feat(craft): user file sync to sandboxes via push daemon by @wenxi-onyx in #11158
- feat(craft): sidecar container for control-plane operations by @wenxi-onyx in #11174
- chore(craft): add infra todos and bump default sandbox image version by @wenxi-onyx in #11189
- feat(enterprise-settings): add custom help link and hide-branding toggle by @Subash-Mohan in #11148
- chore(deps): bump j178/prek-action from 2.0.2 to 2.0.3 by @dependabot[bot] in #11192
- feat(opal): move
colors.cssinto Opal package by @raunakab in #11122 - docs(craft): infra todos by @wenxi-onyx in #11197
- fix(ci): build opal package before vercel deploy-preview by @raunakab in #11204
- feat(admin): add Security and Hardening admin page stub by @jmelahman in #11200
- feat(llm): custom model display names + consolidate LLM types by @raunakab in #11195
- chore(craft): reorganize docs by @wenxi-onyx in #11210
- fix(opal): build dist via prepare hook on npm ci by @nmgarza5 in #11203
- chore(skills): remove broken test by @wenxi-onyx in #11212
- fix(craft): symlink user library into session by @wenxi-onyx in #11209
- feat(indexing): skip re-indexing documents whose content hasn't changed by @Bo-Onyx in #11159
- test(craft): scope IRSA test to sandbox-side checks by @wenxi-onyx in #11217
- fix(ci): collapse playwright/integration skip workflows into single workflow by @jmelahman in #11214
- fix: jira perm sync dc v10 by @evan-onyx in #11187
- fix(multitenant): allow tenant_dev in tenant ID iteration by @nmgarza5 in #11205
- chore(logging, celery): Single source of truth for logging in celery workers by @acaprau in #11190
- feat(opensearch): Remove Vespa as an option entirely by @acaprau in #11207
New Contributors
- @beraterkanelcelik made their first contribution in #10780
- @mikew made their first contribution in #10783
- @k-kasajima made their first contribution in #11110
Full Changelog: v3.3.6...v4.0.0-beta.0