Warning
Do not upgrade to this release if you want to preserve your existing indexed documents but have not yet run the document index migration, which can be done from any version v3.x. See additional documentation here.
See the assets to download this version and install.
What's Changed
- fix(sharepoint): skip per-site Graph failures instead of aborting run by @Subash-Mohan in #11193
- feat(craft): backend-agnostic sandbox cleanup + snapshot stream helpers by @rohoswagger in #11218
- fix(ollama): honor Modelfile num_ctx when fetching models by @jmelahman in #11160
- fix: sharepoint download retries by @evan-onyx in #11221
- feat(craft): docker-compose sandbox backend by @rohoswagger in #11222
- chore(install): consolidate Docker Compose detection into helper by @jmelahman in #11233
- refactor(craft): shared ACPExecClient base across K8s + Docker by @rohoswagger in #11225
- docs(craft): approvals plan by @wenxi-onyx in #11224
- fix: mcp oauth token handling by @evan-onyx in #11238
- feat(helm): optional External Secrets Operator support by @justin-tahara in #11237
- fix(icons): size unsized @opal/icons usages by @nmgarza5 in #11239
- chore(deps): bump pillow from 11.3.0 to 12.2.0 in /backend/onyx/server/features/build/sandbox/kubernetes/docker by @dependabot[bot] in #11146
- chore(deployment): wait for healthy services via docker compose --wait by @jmelahman in #11234
- feat(tracing): populate Langfuse user_id and release on traces by @justin-tahara in #11247
- feat(wiki): skip document push hook during initial indexing by @Bo-Onyx in #11248
- chore(deps): bump idna from 3.11 to 3.15 by @dependabot[bot] in #11202
- chore(deps): bump lxml from 6.0.2 to 6.1.0 in /backend/onyx/server/features/build/sandbox/kubernetes/docker by @dependabot[bot] in #11147
- chore(ci): replace bespoke curl healthchecks with docker compose --wait by @jmelahman in #11252
- feat(craft): Add tables for external apps by @Danelegend in #11033
- docs(craft): document docker sandbox backend + check in feature plans by @rohoswagger in #11232
- fix(tenants): block GATED_ACCESS tenants from cloud API by @nmgarza5 in #11253
- fix(install): default to latest GitHub release for configs and image tag by @jmelahman in #11250
- perf(tests): drop unnecessary reset fixture from no_vectordb tests by @jmelahman in #11256
- chore(install): enable shellcheck on install.sh by @jmelahman in #11254
- chore(ci): render sandbox namespace from helm chart in craft k8s lane by @wenxi-onyx in #11259
- chore(craft): remove extraneous init.py files by @wenxi-onyx in #11249
- chore(deps): migrate web/ package management from npm to bun by @raunakab in #11262
- fix(docker): typo in the nginx conf name in no-letsencrypt compose file by @psyray in #11236
- chore(tests): drop unnecessary
resetfixtures from integration tests by @jmelahman in #11261 - refactor(tailwind): use Opal preset, remove 220 lines of duplicated tokens by @raunakab in #11263
- fix(sharepoint): handle HTTP 423 locked sites as per-site failures by @Subash-Mohan in #11266
- fix(craft): unblock sandbox push under telepresence and own .env.k8s by @rohoswagger in #11257
- feat(helm): fail-fast safeguard against 0.4.x → 0.5.x Vespa data loss by @justin-tahara in #11255
- fix(ci): use runs-on volume=100gb label (hdd= was silently ignored) by @wenxi-onyx in #11271
- refactor(modals): move components/modals → sections/modals, adopt Formik by @raunakab in #11264
- feat(craft): wake user sandbox when a scheduled task fires by @Weves in #11171
- fix(craft): remove public_global sharing scope by @wenxi-onyx in #11272
- fix(craft): strip viewer credentials in webapp proxy by @wenxi-onyx in #11273
- fix(lint): collapse sandbox_daemon import block (ruff isort) by @wenxi-onyx in #11274
- chore(dev): use bun for Web Server launch config by @wenxi-onyx in #11279
- perf(craft): bun + hardlinked node_modules for sandbox sessions by @rohoswagger in #11276
- feat(helm): gate scheduled-tasks worker on ENABLE_CRAFT by @justin-tahara in #11270
- refactor(craft): Skills have built-in-skill-id by @Danelegend in #11258
- fix(chat): cache failed plaintext extractions to stop S3 re-fetch storm by @justin-tahara in #11268
- ci(craft): enable snapshot tests in ci by @rohoswagger in #11283
- fix: confluence pagination limit by @evan-onyx in #11284
- refactor(craft): remove org_info directory from sandbox by @Weves in #11198
- feat(craft): External App Management by @Danelegend in #11039
- fix: confluence pagination limit2 by @evan-onyx in #11291
- fix(tests): reset_postgres requires POSTGRES_DB env by @wenxi-onyx in #11292
- chore(dev): add k8s: alembic upgrade head vscode task by @wenxi-onyx in #11281
- fix: docfetching doc count by @evan-onyx in #11294
- chore(ci): replace integration test image with devcontainer by @jmelahman in #11280
- feat(opal): move font definitions into opal typography.css by @raunakab in #11297
- feat: persistent indexing by @evan-onyx in #11301
- feat(craft): OAuth for external apps by @Danelegend in #11087
- feat(connector): Index documents on github connector by @Danelegend in #11293
- fix(auth): make /auth/verify tenant-aware in multi-tenant cloud by @nmgarza5 in #10868
- fix(metrics): populate llm_model column for single-model chats by @justin-tahara in #11309
- chore(devcontainer): upgrade image by @jmelahman in #11306
- ci: allow Linear check ignorelist for jmelahman by @jmelahman in #11307
- chore(devtools): replace npm with bun in ods by @jmelahman in #11275
- feat(opal): more icons by @raunakab in #11310
- chore(ci): upgrade zizmor to 1.25.2 by @jmelahman in #11312
- chore(tests): use FastAPI TestClient for integration tests by @jmelahman in #11300
- chore(deps): upgrade
ods: 0.7.7->0.7.8 by @jmelahman in #11319 - fix(skills): drop orphan manifest_metadata before built-in seed by @nmgarza5 in #11321
- refactor(craft): nuke LocalSandboxManager, make kind the canonical Craft dev path by @rohoswagger in #11285
- chore(deps): add mitmproxy==11.0.2 by @wenxi-onyx in #11320
- fix: persistent indexing docfetching raise by @evan-onyx in #11311
- feat: catch sharepoint errors by @evan-onyx in #11324
- fix: remove unnecessary license dependency from test by @yuhongsun96 in #11325
- fix(voice): unbreak OpenAI STT after Realtime Beta API deprecation by @justin-tahara in #11322
- perf(craft): shrink sandbox image and prune unused deps by @rohoswagger in #11304
- feat(craft): Built-in apps for slack, gcal, linear by @Danelegend in #11346
- fix: dispose all Postgres pools on api server shutdown by @rohoswagger in #11350
- fix(skills): fix skills table simplification by @Danelegend in #11349
- fix(images): deduplicate project images and add opt-in Azure cap by @Subash-Mohan in #11344
- chore(craft): bump default models to gpt-5.5 by @rohoswagger in #11333
- feat(craft): Custom External Apps by @Danelegend in #11347
- refactor(external-apps): Improve design for built-in external app defns by @Danelegend in #11364
- fix(craft): auto-refresh scheduled task runs by @Weves in #11359
- feat(craft): opencode-serve transport with PodEventBus by @rohoswagger in #11334
- fix(ci): set MODEL_SERVER_HOST in nightly LLM provider test runner by @justin-tahara in #11353
- chore(deps): bump openai to 2.38.0 and tiktoken to 0.13.0 by @jmelahman in #11380
- fix(install): drop sg dependency, use sudo for docker commands by @jmelahman in #11326
- fix(craft): opencode-serve translator — termination, status shape, delta race by @rohoswagger in #11384
- chore(deps): upgrade litellm to 1.85.1 by @jmelahman in #11385
- chore(deploy): replace bespoke nginx healthcheck in init-letsencrypt.sh by @jmelahman in #11382
- fix(web): set conservative SWR opts on useCCPairs by @nmgarza5 in #11387
- feat(billing): cache /proxy/billing-information per tenant in Redis by @nmgarza5 in #11389
- ci(helm): serialize releases to avoid gh-pages push race by @jmelahman in #11399
- perf(ci): skip project sync for ods check-lazy-imports hook by @jmelahman in #11400
- feat(api): cache /auth/type response in browsers by @nmgarza5 in #11388
- fix(craft): pre-register all build-mode LLM providers on session restore by @rohoswagger in #11396
- fix(api-key): clean up synthetic user associations on delete (#11118) by @justin-tahara in #11404
- fix: mcp user email replacement by @evan-onyx in #11390
- chore(db): drop unused KG indexes + redundant chunk_stats.id index by @justin-tahara in #11398
- feat(voice): migrate OpenAI streaming STT to GA Realtime API by @justin-tahara in #11323
- fix: jira dc v9 perm sync by @evan-onyx in #11409
- docs(craft): plan live scheduled task runs by @Weves in #11393
- fix(craft): scope opencode-serve /event SSE per directory by @rohoswagger in #11414
- feat(craft): sandbox egress proxy with action-approval gating (phases 1+2) by @wenxi-onyx in #11302
- feat(billing): cache /admin/billing/billing-information per tenant by @nmgarza5 in #11401
- fix(ci): pass S3/MinIO env vars to nightly provider chat test runner by @jmelahman in #11423
- fix(clickup): use relative API endpoints by @dimanjet in #11417
- fix(web): poll useDocumentSets only while a set is syncing by @nmgarza5 in #11392
- fix(web): bump useCurrentUser dedupingInterval to 5 min by @nmgarza5 in #11391
- fix(helm): truncate child resource names to 63-char limit by @justin-tahara in #11431
- refactor(opal): migrate
Spacerinto Opal by @raunakab in #11429 - feat(ods): add --no-verify flag to run-ci by @jmelahman in #11410
- fix(install): guard DOCKER_SUDO[@] expansion for bash 3.2 by @rohoswagger in #11424
- refactor(opal): migrate
SettingsLayoutsinto Opal by @raunakab in #11430 - fix(smtp): allow unauthenticated SMTP relays without credentials by @amanda-nathan in #10931
- fix(opal/divider): fix vertical divider sizing, remove Separator component by @raunakab in #11427
- fix(ods): Auto-set DEVCONTAINER_REMOTE_USER=root on macOS by @acaprau in #11328
- fix(craft): bind Next.js dev server to 0.0.0.0 so kube Service can reach it by @rohoswagger in #11441
- fix(craft): mark notification read on click for relative links by @wenxi-onyx in #11442
- feat(claude): enable security-guidance plugin for the repo by @jmelahman in #11438
- feat(craft): remove file extension and MIME limits on uploads by @wenxi-onyx in #11440
- fix(craft): repair the craft-k8s sandbox test lane (proxy identity + app-path provisioning) by @wenxi-onyx in #11426
- fix(craft): open Next.js dev port range in sandbox NetworkPolicy by @rohoswagger in #11445
- chore(helm): Bump Onyx Helm chart to 0.5.10 by @rohoswagger in #11446
- feat(craft): UI overhaul — per-tool rendering + smoother streaming by @rohoswagger in #11386
- fix(chat): lazy-load chat file bytes to stop api-server OOM by @justin-tahara in #11439
- fix(ods): Forward SSH agent via Docker Desktop helper on macOS by @acaprau in #11327
- chore(opal/infra): migrate
sizes.css+dbg.cssinto Opal, migratetypography.cssto use@utilityby @raunakab in #11428 - feat(craft): wire egress proxy for secret decryption + secrets-injection plans by @wenxi-onyx in #11451
- refactor(backend): simplify validate_user_prompt_authorization by @jmelahman in #11454
- feat(craft): port DockerSandboxManager to opencode-serve transport by @rohoswagger in #11402
- fix(craft proxy): default stream responses instead of buffer by @wenxi-onyx in #11447
- chore(repo): consolidate npm projects into a root bun workspace by @jmelahman in #11455
- fix(opal/settings-layouts): replace non-existent SvgDatabase with SvgServer in stories by @raunakab in #11456
- feat(craft): OPENCODE SERVE FRAMEMOGS OPENCODE ACP by @rohoswagger in #11408
- test(craft): share sandbox_proxy test factories in conftest by @wenxi-onyx in #11467
- chore(craft): remove dead followup-suggestions + connector-banner UI by @rohoswagger in #11466
- feat(ods): Per-worktree
docker composeisolation with dynamic port allocation by @acaprau in #11337 - chore(deps): bump cookies-next from 5.1.0 to 6.1.1 in /web by @dependabot[bot] in #11461
- feat(craft): Set policy for external app actions by @Danelegend in #11366
- chore(deps): Add graphql-core by @Danelegend in #11470
- fix(hierarchy): iterative upsert_parents to avoid RecursionError on deep chains by @justin-tahara in #11469
- fix(craft): improve scheduled run chat indicator by @Weves in #11358
- fix(craft): improve scheduled tasks empty state by @Weves in #11361
- refactor(opal): migrate
InputTypeininto Opal by @raunakab in #11342 - feat(craft): Match external-app policies in proxy by @Danelegend in #11457
- fix(craft): skip LLM setup when a build-mode provider is already configured by @rohoswagger in #11478
- fix(crawler): install playwright system deps by @jmelahman in #11480
- feat(craft): add Apps/Craft Storybook layer with tool-cards stories by @wenxi-onyx in #11481
- chore(deps): downgrade transformers from 5.5.4 to 4.57.6 by @jmelahman in #11479
- feat(craft): Inject credentials into external apps in proxy by @Danelegend in #11471
- fix(ods): Activate
s3-filestoreprofile socompose downstopsminioby @acaprau in #11341 - ci: tag stable releases with major/minor/patch aliases by @jmelahman in #11488
- fix: confluence perm sync draft 404s by @evan-onyx in #11468
- chore(devtools): upgrade
ods: 0.7.8->0.8.0 by @jmelahman in #11493 - feat(logging): opt-in structured JSON logs via LOG_FORMAT=json by @justin-tahara in #11490
- chore(devtools): Wire
launch.jsonandtasks.jsontoods compose/envby @acaprau in #11338 - refactor(opal): migrate
Switchinto Opal by @raunakab in #11474 - chore(helm): Bump harts to 0.5.13 w/ code interpreter 0.4.2 by @Danelegend in #11496
- feat(ee): Prometheus metrics for license seats and expiry by @nmgarza5 in #11495
- chore(devcontainer): upgrade CC w/ Opus 4.8 release by @jmelahman in #11498
- refactor(opal): migrate
CopyButtoninto Opal by @raunakab in #11472 - ci: run backend unit tests in parallel on 4cpu runner by @jmelahman in #11501
- refactor(opal): migrate
Codeinto Opal by @raunakab in #11473 - feat(craft): action-approval chat UI + proxy/matcher fixes by @wenxi-onyx in #11403
- fix(craft): remove scheduled task timezones by @Weves in #11362
- fix(craft): green the Craft CI lanes (opencode-serve readiness, model-catalog cache, test deadlock) by @rohoswagger in #11482
- fix(auth): allow dotted Gmail to sign in via Google OAuth by @nmgarza5 in #11511
- fix(craft): deny opencode built-in customize-opencode skill by @wenxi-onyx in #11506
- feat(craft): remove dedicated build-mode provider requirement by @rohoswagger in #11502
- refactor(opal): migrate Tabs component into Opal by @raunakab in #11340
- refactor(opal): fix styling for
InputTypeinby @raunakab in #11519 - feat(craft): Encrypt external app credentials by @Danelegend in #11514
- ci: run connector tests inside the production image by @jmelahman in #11520
- feat(craft): CredentialInjectionDispatcher + ExternalAppResolver by @wenxi-onyx in #11516
- ci: always run all backend unit tests even on failures by @jmelahman in #11523
- fix(llm): omit sampling params + use adaptive thinking for Claude Opus 4.8 by @justin-tahara in #11524
- fix(craft): proxy env vars in local dev by @wenxi-onyx in #11525
- fix(chat): eliminate ReDoS in citation processor partial-citation regex by @justin-tahara in #11527
- chore(pre-commit): tsgo type check for widget + examples/widget by @jmelahman in #11485
- chore(cli): increase search timeout by @wenxi-onyx in #11199
- chore(deps): prune unused and transitive-only backend dependencies by @jmelahman in #11533
- chore(deps): remove unused claude-agent-sdk (~220 MB) by @jmelahman in #11539
- refactor(craft): multi-action approval requests by @wenxi-onyx in #11532
- fix(craft): seed default LLM provider for ext-dep tests; drop dead _get_llm_config by @wenxi-onyx in #11538
- chore(craft): bump default onyx-cli version for longer search timeout by @wenxi-onyx in #11542
- chore(craft): drop dead build configs and trim comments by @wenxi-onyx in #11543
- chore(deps): move test/stub-only packages out of the prod backend group by @jmelahman in #11536
- chore(devcontainer): set UV_LINK_MODE=copy container-wide by @jmelahman in #11544
- test: deflake pool metrics hold-duration test by @jmelahman in #11526
- perf(ci): scope playwright install to chromium, skip redundant --with-deps by @jmelahman in #11546
- refactor: inline trivial single-call helper functions by @wenxi-onyx in #11545
- feat(craft): inject Onyx PAT via egress proxy, remove from sandbox pod by @wenxi-onyx in #11549
- test(craft): amortize pod provisioning in K8s tests by @wenxi-onyx in #11551
- chore(deps-dev): bump oxlint from 1.64.0 to 1.66.0 in /web by @dependabot[bot] in #11459
- chore(deps-dev): bump typescript from 5.9.3 to 6.0.3 by @dependabot[bot] in #11458
- chore(ci): replace softprops/action-gh-release with gh CLI by @dependabot[bot] in #10825
- chore(deps): bump aquasecurity/trivy-action from 0.35.0 to 0.36.0 by @dependabot[bot] in #10824
- chore(deps-dev): bump vite from 7.3.3 to 8.0.14 by @dependabot[bot] in #11463
- fix(ods): tolerate externally-occupied ports in portutil test by @jmelahman in #11540
- feat(craft): inject LLM provider key via egress proxy, remove from sandbox pod by @wenxi-onyx in #11556
- feat(craft): External app refresh tokens by @Danelegend in #11553
- fix(craft): keep chat column on-screen for long conversations by @wenxi-onyx in #11557
- feat(craft): Gmail external app by @Danelegend in #11413
- refactor(chat): extract shared queued-message navigation hook by @wenxi-onyx in #11559
- perf(sandbox): tighten pod-ready feedback loop by @wenxi-onyx in #11555
- feat(craft): queue messages sent while a response is streaming by @wenxi-onyx in #11560
- chore(craft): add storybook stories for input bar and queued-message bar by @wenxi-onyx in #11561
- perf(build): replace pypandoc-binary with a mistune + python-docx converter by @jmelahman in #11547
- perf(build): split backend image into builder + runtime stages by @jmelahman in #11565
- refactor(craft): Remove DBSessionFactory pattern by @Danelegend in #11562
- test(e2e): pre-set admin display name to dismiss onboarding prompt by @wenxi-onyx in #11564
- feat(craft): looksmaxxing (subagents + ui stuff) by @rohoswagger in #11504
- feat(craft): External app per action default policy by @Danelegend in #11573
- chore: bump opal to v0.1.4 by @nmgarza5 in #11548
- fix(craft): center the welcome screen content by @wenxi-onyx in #11584
- feat(craft): interrupt agent in chat turn by @wenxi-onyx in #11572
- fix(web): pin Turbopack workspace root to web/ by @jmelahman in #11586
- chore(craft): bump sandbox image to v0.1.50 by @wenxi-onyx in #11587
- fix(confluence): skip image attachments in slim-doc pass when allow_images is False by @justin-tahara in #11588
- fix(web): silence Node DEP0205 module.register() deprecation from Sentry by @jmelahman in #11589
- feat(craft): External app action non-availability mentioned in skill file by @Danelegend in #11590
- refactor(craft): up arrow queued message hint in input bar by @wenxi-onyx in #11596
- feat(craft): useful instructive error messages from proxy by @wenxi-onyx in #11595
- test(playwright): isolate /admin/indexing/status visual regression by @jmelahman in #11597
- refactor(craft): make sandbox egress proxy unconditional by @wenxi-onyx in #11604
- fix(chat): recover raw answer when content/citation processing strips it empty by @justin-tahara in #11594
- feat(craft): Add github as a built-in external app by @Danelegend in #11598
- refactor(opal): migrate time utilities to
@opal/timeby @raunakab in #11541 - fix(auth): use a native type="password" field on login/signup by @jmelahman in #11585
- feat(auth): add coarse API-surface permission scopes for PAT scoping by @wenxi-onyx in #11618
- feat(craft): skill tiles + always-on paste tiles in input bar by @wenxi-onyx in #11563
- chore(helm): Bump to 0.5.15 by @Danelegend in #11622
- feat(config): make JOB_TIMEOUT configurable via JOB_TIMEOUT_SECONDS by @beraterkanelcelik in #11610
- refactor(input): centralize input-bar keydown precedence + tiles storybook by @wenxi-onyx in #11621
- fix(craft): harden sandbox restore against conflicts, transient failures, and unreachable pods by @rohoswagger in #11567
- perf(web): disable React Compiler in the dev server by @jmelahman in #11592
- feat(craft): External app default timeout 3min by @Danelegend in #11623
- fix(craft): scope CraftToolGroup error styling to individual cards by @rohoswagger in #11617
- refactor(input ui): restyle paste tile to match skill tile with gray tint by @wenxi-onyx in #11624
- chore(devcontainer): re-install
nodeby @jmelahman in #11626 - fix(web): stage embedding model when connecting registry-less cloud providers (LiteLLM/Azure) by @justin-tahara in #11606
- test(web): de-flake E2E tests (global-state isolation + afterEach race) by @jmelahman in #11619
- feat(craft): / skill picker — split into Skills + Apps sections by @wenxi-onyx in #11607
- fix(ClickUp): connector API URL construction by @mjakubowskimtt in #11611
- chore(craft): update agents.md +373 tok by @wenxi-onyx in #11593
- fix(search-settings): coerce null embedding prefixes to empty string by @justin-tahara in #11632
- feat(mcp): add known-provider oauth schema and contracts by @evan-onyx in #11599
- feat(ci): consume ECR pull-through cache for CI base images by @jmelahman in #11600
- chore(deps): bump docker/bake-action from 7.0.0 to 7.2.0 by @dependabot[bot] in #11464
- ci: add zizmor pre-commit hook + scope workflow permissions by @jmelahman in #11635
- feat(auth): scope Personal Access Tokens via Permission intersection by @wenxi-onyx in #11630
- fix(confluence): use Bearer auth for scoped tokens on Cloud by @ppomes in #11363
- fix(ingestion-api): stop overriding source = FILE on documents by @ppomes in #11355
- feat(helm): allow disabling bundled redis-operator independently by @justin-tahara in #11643
- fix(ui): match SearchTool by in_code_tool_id when picking default temperature by @ppomes in #11356
- feat(craft): remove role/level onboarding by @rohoswagger in #11642
- chore(deps-dev): bump @types/node from 20.19.41 to 25.9.1 by @dependabot[bot] in #11460
- refactor(craft): extract session exception classes to errors.py [1/6] by @wenxi-onyx in #11648
- feat(mcp): add known-provider oauth connect and callback flow by @evan-onyx in #11605
- refactor(opal): migrate
SimpleLoaderinto@opal/iconsby @raunakab in #11625 - refactor(craft): extract session naming into naming.py [2/6] by @wenxi-onyx in #11649
- perf(craft): async webapp proxy with connection pooling and per-asset DB caching by @rohoswagger in #11566
- refactor(craft): extract LLM provider selection into llm_config.py [3/6] by @wenxi-onyx in #11650
- feat(mcp): add known-provider OAuth controls in auth modal by @evan-onyx in #11629
- chore(opal): release 0.1.5 by @raunakab in #11657
- feat(craft): scope sandbox PAT to read:search + exempt /me from scope gate by @wenxi-onyx in #11647
- refactor(craft): extract sandbox state machine into sandbox_lifecycle.py [4/6] by @wenxi-onyx in #11651
- feat(devcontainer): CLAUDE.md overlay + Playwright e2e bootstrap docs by @jmelahman in #11658
- feat(mcp): make per-call MCP tool timeout env-configurable by @beraterkanelcelik in #11662
- test(mcp): cover known-provider oauth helper logic by @evan-onyx in #11636
- feat(craft): redesign input bar with skill chips, plus menu, and BaseInputBar abstraction by @rohoswagger in #11634
- fix(teams connector): retry transient Microsoft Graph 5xx errors by @jmelahman in #11641
- fix: enable prompt caching and sticky routing for OpenRouter by @fejesd in #11660
- refactor(craft): extract turn-streaming pipeline into streaming.py [5/6] by @wenxi-onyx in #11652
- Revert "fix(confluence): use Bearer auth for scoped tokens on Cloud" by @acaprau in #11668
- feat(craft): update default LLM models per provider by @rohoswagger in #11669
- ci(connectors): run connector tests post-merge instead of in the merge queue by @jmelahman in #11673
- fix(google_drive): skip get_all_drive_ids() call when no shared drives are requested by @ppomes in #11357
- fix(craft): grant scheduled-tasks worker sandbox push access by @Weves in #11677
- fix(connectors): add optional AWS region to S3 connector for non-default partitions by @justin-tahara in #11676
- refactor(craft): extract shared artifact/filesystem helpers in SessionManager [6/6] by @wenxi-onyx in #11653
- test(web): rewrite MCP e2e tests with the page object model by @jmelahman in #11608
- feat(opal): add RootLayout, design tokens, and sidebar breakpoint constants by @raunakab in #11667
- chore(pre-commit): enable check-yaml hook and add prek to the devcontainer by @jmelahman in #11683
- refactor(craft): point all callers at canonical session modules [7/6] by @wenxi-onyx in #11654
- ci(playwright): shard admin project across parallel runners by @jmelahman in #11601
- feat(craft): Docker compose proxy path phase 0 by @acaprau in #11507
- fix(craft): make prompt_slot a cross-replica distributed lock by @rohoswagger in #11681
- feat(opal): remove AppLayouts; introduce RootLayout.App + AppChrome by @raunakab in #11688
- feat(craft): distinguish live skills & approvals with a comet edge by @rohoswagger in #11687
- feat(devcontainer): cache the Python venv in a named volume by @jmelahman in #11692
- chore(opal): release 0.1.6 by @raunakab in #11695
- fix(tenants): allow /enterprise-settings for gated tenants by @nmgarza5 in #11694
- feat(craft): Docker compose proxy path phase 1 by @acaprau in #11508
- fix(craft): Clear _synced on clean watch EOF for docker + k8s lookups by @acaprau in #11693
- chore: remove YAML validation section from CLAUDE.md by @jmelahman in #11697
- fix(craft): self-heal stale opencode-serve password across replicas by @rohoswagger in #11679
- feat(craft): Docker compose proxy path phase 2 by @acaprau in #11510
- chore(deps-dev): bump aiohttp from 3.13.4 to 3.14.0 by @dependabot[bot] in #11690
- fix(craft): make sandbox pod + egress-proxy addressing telepresence-correct by @wenxi-onyx in #11698
- test(cli): mock LLM responses in CLI integration suite by @wenxi-onyx in #11699
- fix(craft): don't cache DockerSandboxManager singleton until init succeeds by @beraterkanelcelik in #11580
- chore(deps): upgrade tornado to 6.5.6 by @jmelahman in #11701
- feat(craft): Extend gmail external app capabilities by @Danelegend in #11703
- fix: mcp custom oauth security by @evan-onyx in #11685
- feat(craft): scheduled task pre-approvals — gate short-circuit + grants by @wenxi-onyx in #11674
- feat(auth): scope chat APIs with read:chat / write:chat by @wenxi-onyx in #11672
- feat(craft): Seed external apps on Cloud by @Danelegend in #11603
- feat(craft): pre-approved apps UI for scheduled tasks by @wenxi-onyx in #11709
- feat(craft): clean up the Craft sidebar to four tabs and rehome settings by @rohoswagger in #11671
- fix(craft): fast-fail bus creation for terminated sandboxes across replicas by @rohoswagger in #11680
- chore(craft): bump sandbox default image to v0.1.51 by @wenxi-onyx in #11710
- chore(deps): bump docker/metadata-action from 6.0.0 to 6.1.0 by @dependabot[bot] in #11717
- chore(deps): bump docker/build-push-action from 7.1.0 to 7.2.0 by @dependabot[bot] in #11719
- chore(deps): bump dorny/paths-filter from 3.0.2 to 4.0.1 by @dependabot[bot] in #11718
- chore(deps): bump lucide-react from 0.454.0 to 1.16.0 in /web by @dependabot[bot] in #11716
- chore(deps): bump posthog-js from 1.288.0 to 1.376.3 in /web by @dependabot[bot] in #11714
- chore(deps): bump marked from 12.0.2 to 18.0.4 by @dependabot[bot] in #11711
- chore(deps): bump @sentry/nextjs from 10.38.0 to 10.54.0 in /web by @dependabot[bot] in #11712
- chore(examples): prune unused dev dependencies from widget example by @jmelahman in #11720
- build: upgrade Python from 3.11 to 3.13 by @jmelahman in #11721
- chore(deps): bump flask from 3.1.0 to 3.1.3 in /backend by @dependabot[bot] in #11724
- chore(deps): bump pyopenssl from 24.3.0 to 26.0.0 by @dependabot[bot] in #11723
- chore(deps): bump flask from 3.1.0 to 3.1.3 in /backend by @dependabot[bot] in #11726
- chore(deps): bump flask from 3.1.0 to 3.1.3 by @dependabot[bot] in #11729
- feat(craft): Add google drive external app by @Danelegend in #11708
- feat(auth): make auth cookie name configurable via AUTH_COOKIE_NAME by @Weves in #11739
- feat(craft): show Onyx-branded logo in Craft chat by @rohoswagger in #11738
- fix(craft): use real Google Drive logo for external app by @wenxi-onyx in #11743
- refactor(craft): migrate
Textcomponent to Opal by @rohoswagger in #11741 - fix(billing): handle past_due portal redirect on resubscribe by @nmgarza5 in #11737
- feat(ci): cloud deploy dispatch on image build by @jmelahman in #11707
- chore: remove internal infra references from public repo by @justin-tahara in #11736
- fix(web): stop deriving doc_updated_at from Last-Modified by @Bo-Onyx in #11749
- fix(craft): tolerate unknown SANDBOX_BACKEND values instead of crashing by @rohoswagger in #11746
- refactor(craft): move sandbox image build context to sandbox/image, skills to onyx/skills/builtin by @wenxi-onyx in #11748
- feat(craft): Docker compose proxy path phase 3 by @acaprau in #11512
- refactor(craft): remove vestigial backend-image template mechanism by @wenxi-onyx in #11751
- feat(admin): add HIDE_QUERY_HISTORY_FROM_ADMIN_PANEL env var by @beraterkanelcelik in #11579
- feat(craft): redesign the Library (Your Files) modal by @rohoswagger in #11742
- fix: accept empty choices packet from LLM by @evan-onyx in #11752
- feat(PAT): user-facing scope selection (API + settings UI) by @wenxi-onyx in #11744
- feat(craft): Docker compose proxy path phase 4 by @acaprau in #11513
- feat(craft): Decode gmail payloads on approval by @Danelegend in #11756
- feat(craft): support live scheduled run viewing by @Weves in #11734
- fix(craft): set install.sh SANDBOX_BACKEND by image tag by @rohoswagger in #11757
- chore(craft): bump sandbox default image to v0.1.52 by @wenxi-onyx in #11761
- feat: show connectors page lite mode by @evan-onyx in #11762
- fix: sanitize CSV exports against spreadsheet formula injection by @justin-tahara in #11754
- fix(discord): grant LIMITED service-account keys chat scope by @wenxi-onyx in #11763
- fix: forward user identifier to OpenRouter activity tracking via extra_body by @fejesd in #11731
- chore(gha): add read permissions to paths filter by @jmelahman in #11771
- fix(craft): Custom apps use glob for upstream url instead of regex by @Danelegend in #11765
- fix(docker): restore psql in api pods after perl-base autoremove by @justin-tahara in #11773
- fix(discord): refresh tenant cache concurrently by @wenxi-onyx in #11769
- chore(gha): git actions-checkout read permissions by @jmelahman in #11781
- feat(craft): Docker compose proxy path phase 5 by @acaprau in #11515
- fix(craft): gate external-app domains by credential, not stored policy rows by @wenxi-onyx in #11774
- feat(craft): Docker compose proxy path phase 6 by @acaprau in #11517
- chore(mcp): add agent-wiki MCP server by @Bo-Onyx in #11789
- chore(mcp): add Linear MCP server by @jmelahman in #11786
- chore(dev): don't hot-reload local python on skill bundle edits by @wenxi-onyx in #11784
- refactor(craft): store external-app policies as overrides, not full catalog by @wenxi-onyx in #11775
- feat(input): expand paste tiles back into the input bar by @wenxi-onyx in #11776
- fix(craft): keep file-sync IRSA out of the untrusted sandbox container by @rohoswagger in #11788
- fix(opal): fix
InputTypeInheight to 36px by @raunakab in #11796 - feat(craft): Use github cli for github external app by @Danelegend in #11795
- feat(craft): drive model picker from shared recommended-models config by @rohoswagger in #11760
- feat(metrics): add optional METRICS_AUTH_TOKEN for the /metrics endpoint by @jmelahman in #11813
- chore(devcontainer): upgrade image to default python 3.13 by @jmelahman in #11730
- fix(craft): prevent stuck opencode turns by @rohoswagger in #11804
- fix(slack-skill): form-encode Slack API args so query params aren't dropped by @wenxi-onyx in #11783
- fix(craft): Persist thinking as collapsed rows by @rohoswagger in #11779
- fix(craft): keep Craft preview URLs contained and copyable by @rohoswagger in #11780
New Contributors
- @psyray made their first contribution in #11236
- @dimanjet made their first contribution in #11417
- @amanda-nathan made their first contribution in #10931
- @mjakubowskimtt made their first contribution in #11611
- @ppomes made their first contribution in #11363
- @fejesd made their first contribution in #11660
Full Changelog: v4.0.5...v4.1.0-beta.0