github onyx-dot-app/onyx v4.0.0-beta.0

pre-release7 hours ago

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=True as 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 Page by @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-action by @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/cache by @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-deps for uv pip install by @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-dependencies by @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 temperature param, litellm is not dropping it by @acaprau in #10878
  • fix(redis): Add some method calls to methods_to_wrap for 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 expire instead of set when 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 wiki command 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 TenantRedis by @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 InputSelectField for 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 LineItem with ContentAction + SvgCheck by @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-terraform by @jmelahman in #11101
  • chore: bump opal to v0.1.2 by @nmgarza5 in #11100
  • chore(fmt): fix oxfmt at 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 up bulk call 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 None control 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.css into 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

Full Changelog: v3.3.6...v4.0.0-beta.0

Don't miss a new onyx release

NewReleases is sending notifications on new releases.