twenty/v2.49.0

twentyhq/twentytwenty/v2.49.0Oct 19, 2026by twenty-pr[bot]

Upgrading?

AI Summary

This release focuses on enhancing AI capabilities and agent interactions, including a new one-turn engine and emoji reactions. It also introduces significant workflow stability improvements, UI/UX refinements, and exposes new developer tools like defineWorkflow in the SDK.

Key Highlights

  • Ada and agents can now react to messages with emojis.
  • User credits are now prioritized for AI chat and web search over workspace credits.
  • The SDK now exposes defineWorkflow for easier workflow creation.
  • Recent chats in the AI inbox drawer are now capped at 5.
  • App widgets no longer have a frame border.

Breaking Changes

  • User credits are now spent on AI chat and web search before workspace credits.
  • Ada and agents can react to messages with an emoji.
  • PhoneCountryPicker composition has been unified.

New Features

  • Carry partner attribution (?via=) to app sign-up links.
  • Simplify app owner installation statistics.
  • Add app auto-update installation counts.
  • Add application credit usage tracking with ClickHouse query caching.

Full Release Notes

<!-- generated-release-notes v1 -->

## ⚠️ Breaking changes

- [BREAKING_CHANGE] feat(usage): spend user credits on AI chat and web search before workspace credits (server) ([#27944](https://github.com/twentyhq/twenty/pull/27944)) by @etiennejouan
- [BREAKING_CHANGE] Let Ada and agents react to messages with an emoji ([#28124](https://github.com/twentyhq/twenty/pull/28124)) by @FelixMalfait
- Unify PhoneCountryPicker composition ([#28169](https://github.com/twentyhq/twenty/pull/28169)) by @bosiraphael

## ✨ New features

- feat(website): carry ?via= partner attribution to app sign-up links ([#28157](https://github.com/twentyhq/twenty/pull/28157)) by @etiennejouan
- feat: simplify app owner installation statistics (1/4) ([#28203](https://github.com/twentyhq/twenty/pull/28203)) by @martmull
- feat: add app auto-update installation counts (2/4) ([#28204](https://github.com/twentyhq/twenty/pull/28204)) by @martmull
- feat: add application credit usage with ClickHouse query caching (3/4) ([#28205](https://github.com/twentyhq/twenty/pull/28205)) by @martmull

## 💅 Improvements & UX

- Show import progress on connected accounts ([#27491](https://github.com/twentyhq/twenty/pull/27491)) by @neo773
- Compute workflow output schemas at the write boundary and make create_complete_workflow atomic ([#27774](https://github.com/twentyhq/twenty/pull/27774)) by @FelixMalfait
- Store workflow and chart record filters as field references ([#27777](https://github.com/twentyhq/twenty/pull/27777)) by @FelixMalfait
- Let connection providers declare a USER or WORKSPACE scope ([#27796](https://github.com/twentyhq/twenty/pull/27796)) by @ehconitin
- Fix front component layout measurements ([#27807](https://github.com/twentyhq/twenty/pull/27807)) by @bosiraphael
- Make logic function trigger job fan-out idempotent across retries ([#27953](https://github.com/twentyhq/twenty/pull/27953)) by @charlesBochet
- Fix date-sorted pagination skipping or duplicating records ([#27977](https://github.com/twentyhq/twenty/pull/27977)) by @Weiko
- Add Dropdown.SelectionGroup ([#27990](https://github.com/twentyhq/twenty/pull/27990)) by @bosiraphael
- Remove the IS_APPLICATION_WORKFLOWS_ENABLED feature flag ([#28003](https://github.com/twentyhq/twenty/pull/28003)) by @thomtrp
- Share calendar events across calendar channels ([#28017](https://github.com/twentyhq/twenty/pull/28017)) by @neo773
- Remove OverflowingList's layout check and document the Slider Base UI issue ([#28025](https://github.com/twentyhq/twenty/pull/28025)) by @bosiraphael
- Clean up twenty-ui overrides on lists, icons, navigation and chat ([#28062](https://github.com/twentyhq/twenty/pull/28062)) by @bosiraphael
- Agent engine: one turn engine for chat and background agents, background runs in a job ([#28076](https://github.com/twentyhq/twenty/pull/28076)) by @FelixMalfait
- Mention Ada in chats and let members turn her off ([#28086](https://github.com/twentyhq/twenty/pull/28086)) by @FelixMalfait
- Point the record creation form at blocked fields and keep its shortcuts working ([#28108](https://github.com/twentyhq/twenty/pull/28108)) by @thomtrp
- Record published app versions ([#28128](https://github.com/twentyhq/twenty/pull/28128)) by @martmull
- Let members send inbox messages when no AI provider is configured ([#28136](https://github.com/twentyhq/twenty/pull/28136)) by @FelixMalfait
- Drop the frame border around app widgets ([#28146](https://github.com/twentyhq/twenty/pull/28146)) by @ehconitin
- Stop fetching private events ([#28151](https://github.com/twentyhq/twenty/pull/28151)) by @BOHEUS
- Unify CurrencyPicker shorthand and parts ([#28156](https://github.com/twentyhq/twenty/pull/28156)) by @bosiraphael
- Unify CountrySelect shorthand and parts ([#28160](https://github.com/twentyhq/twenty/pull/28160)) by @bosiraphael
- Let keyboard users focus and open relation fields in forms ([#28161](https://github.com/twentyhq/twenty/pull/28161)) by @thomtrp
- Replace Lingui skip comments with doNotTranslate() ([#28168](https://github.com/twentyhq/twenty/pull/28168)) by @charlesBochet
- Rename connected account visibility to scope ([#28172](https://github.com/twentyhq/twenty/pull/28172)) by @ehconitin
- Resolve morph relation fields in row-level permission predicates ([#28175](https://github.com/twentyhq/twenty/pull/28175)) by @charlesBochet
- Drain queue jobs before the worker closes its clients ([#28176](https://github.com/twentyhq/twenty/pull/28176)) by @charlesBochet
- Fix lost keystrokes in Preact front component text inputs ([#28178](https://github.com/twentyhq/twenty/pull/28178)) by @bosiraphael
- Update twenty-ui to Base UI 1.9.0 ([#28180](https://github.com/twentyhq/twenty/pull/28180)) by @bosiraphael
- Report unexpected MCP errors to Sentry ([#28181](https://github.com/twentyhq/twenty/pull/28181)) by @prastoin
- Use built Twenty UI in companion ([#28184](https://github.com/twentyhq/twenty/pull/28184)) by @bosiraphael
- Hide the empty Percent submenu on morph relation table footers ([#28185](https://github.com/twentyhq/twenty/pull/28185)) by @charlesBochet
- Record the requesting user as creator of AI-built workflows ([#28186](https://github.com/twentyhq/twenty/pull/28186)) by @thomtrp
- Type the MCP tool set and validate tools/call params ([#28187](https://github.com/twentyhq/twenty/pull/28187)) by @prastoin
- Show the workflows permission message on the workflows index ([#28189](https://github.com/twentyhq/twenty/pull/28189)) by @thomtrp
- Dispatch MCP methods with a typed switch and wrap responses once ([#28190](https://github.com/twentyhq/twenty/pull/28190)) by @prastoin
- Fix twenty-ui checks after the Base UI 1.9.0 update ([#28191](https://github.com/twentyhq/twenty/pull/28191)) by @bosiraphael
- Document Teams speaker attribution and warn when names are withheld ([#28195](https://github.com/twentyhq/twenty/pull/28195)) by @ehconitin
- Prepare UI and renderer CI to be required checks ([#28197](https://github.com/twentyhq/twenty/pull/28197)) by @bosiraphael
- Make twenty-ui documentation consistent ([#28198](https://github.com/twentyhq/twenty/pull/28198)) by @bosiraphael
- Document application workflows ([#28199](https://github.com/twentyhq/twenty/pull/28199)) by @thomtrp
- Remove the IS_MORPH_RELATION_HEAD_ENABLED feature flag ([#28200](https://github.com/twentyhq/twenty/pull/28200)) by @charlesBochet
- Validate static tool arguments against their input schema ([#28202](https://github.com/twentyhq/twenty/pull/28202)) by @prastoin
- Add Last Contact execution and backfill logging ([#28214](https://github.com/twentyhq/twenty/pull/28214)) by @martmull
- Link app owner workspace to admin workspace details ([#28216](https://github.com/twentyhq/twenty/pull/28216)) by @martmull
- Require @DefineTool execute input to match the input schema ([#28217](https://github.com/twentyhq/twenty/pull/28217)) by @prastoin
- Stabilize submenu and toast story interactions ([#28219](https://github.com/twentyhq/twenty/pull/28219)) by @bosiraphael
- Show call participants on call recording pages in the call recorder app ([#28222](https://github.com/twentyhq/twenty/pull/28222)) by @ehconitin
- Show call recordings on record pages in the call recorder app ([#28223](https://github.com/twentyhq/twenty/pull/28223)) by @ehconitin
- Make app preferences skeleton loaders match what they replace ([#28225](https://github.com/twentyhq/twenty/pull/28225)) by @ehconitin
- Cap Recent chats at 5 in the AI chat inbox drawer ([#28231](https://github.com/twentyhq/twenty/pull/28231)) by @FelixMalfait
- Let users choose whether to import private calendar events ([#28248](https://github.com/twentyhq/twenty/pull/28248)) by @neo773
- Remove the IS_CALENDAR_SYNC_SKIP_UNCHANGED_RECORDS_ENABLED feature flag ([#28252](https://github.com/twentyhq/twenty/pull/28252)) by @charlesBochet
- Merge Gmail and Google Calendar into one Google app in app preferences ([#28257](https://github.com/twentyhq/twenty/pull/28257)) by @ehconitin
- Remove no-op tile size from MenuItemIcon ([#28259](https://github.com/twentyhq/twenty/pull/28259)) by @bosiraphael
- Clarify per-user prices in the pricing comparison table ([#28266](https://github.com/twentyhq/twenty/pull/28266)) by @Bonapara

## 🐛 Bug fixes

- fix(server): rebuild the foreign key when a relation's onDelete changes from unset ([#27472](https://github.com/twentyhq/twenty/pull/27472)) by @devjotaduo
- fix(clickhouse): wait for each migration ALTER on all replicas ([#28265](https://github.com/twentyhq/twenty/pull/28265)) by @etiennejouan

## 🔧 Developer & API

- Expose defineWorkflow in twenty-sdk ([#27377](https://github.com/twentyhq/twenty/pull/27377)) by @thomtrp
- Share the front component JSX runtime between the SDK and the CLI ([#28177](https://github.com/twentyhq/twenty/pull/28177)) by @bosiraphael
- Require Roles permission to mint API key tokens ([#28201](https://github.com/twentyhq/twenty/pull/28201)) by @charlesBochet
- Declare tools as discovered @DefineTool providers ( only delete webhook first ) ([#28210](https://github.com/twentyhq/twenty/pull/28210)) by @prastoin
- Regenerate SDK metadata client after concurrent schema changes ([#28270](https://github.com/twentyhq/twenty/pull/28270)) by @charlesBochet

<details>
<summary>🏗️ Internal changes (1)</summary>

- chore(security): bump sharp to 0.35.5 everywhere ([#28236](https://github.com/twentyhq/twenty/pull/28236)) by @mabdullahabaid

</details>

## 🎉 New contributors

- @devjotaduo made their first contribution in https://github.com/twentyhq/twenty/pull/27472

<details>
<summary>Full changelog (73 PRs)</summary>

- Expose defineWorkflow in twenty-sdk ([#27377](https://github.com/twentyhq/twenty/pull/27377)) by @thomtrp
- fix(server): rebuild the foreign key when a relation's onDelete changes from unset ([#27472](https://github.com/twentyhq/twenty/pull/27472)) by @devjotaduo
- Show import progress on connected accounts ([#27491](https://github.com/twentyhq/twenty/pull/27491)) by @neo773
- Compute workflow output schemas at the write boundary and make create_complete_workflow atomic ([#27774](https://github.com/twentyhq/twenty/pull/27774)) by @FelixMalfait
- Store workflow and chart record filters as field references ([#27777](https://github.com/twentyhq/twenty/pull/27777)) by @FelixMalfait
- Let connection providers declare a USER or WORKSPACE scope ([#27796](https://github.com/twentyhq/twenty/pull/27796)) by @ehconitin
- Fix front component layout measurements ([#27807](https://github.com/twentyhq/twenty/pull/27807)) by @bosiraphael
- [BREAKING_CHANGE] feat(usage): spend user credits on AI chat and web search before workspace credits (server) ([#27944](https://github.com/twentyhq/twenty/pull/27944)) by @etiennejouan
- Make logic function trigger job fan-out idempotent across retries ([#27953](https://github.com/twentyhq/twenty/pull/27953)) by @charlesBochet
- Fix date-sorted pagination skipping or duplicating records ([#27977](https://github.com/twentyhq/twenty/pull/27977)) by @Weiko
- Add Dropdown.SelectionGroup ([#27990](https://github.com/twentyhq/twenty/pull/27990)) by @bosiraphael
- Remove the IS_APPLICATION_WORKFLOWS_ENABLED feature flag ([#28003](https://github.com/twentyhq/twenty/pull/28003)) by @thomtrp
- Share calendar events across calendar channels ([#28017](https://github.com/twentyhq/twenty/pull/28017)) by @neo773
- Remove OverflowingList's layout check and document the Slider Base UI issue ([#28025](https://github.com/twentyhq/twenty/pull/28025)) by @bosiraphael
- Clean up twenty-ui overrides on lists, icons, navigation and chat ([#28062](https://github.com/twentyhq/twenty/pull/28062)) by @bosiraphael
- Agent engine: one turn engine for chat and background agents, background runs in a job ([#28076](https://github.com/twentyhq/twenty/pull/28076)) by @FelixMalfait
- Mention Ada in chats and let members turn her off ([#28086](https://github.com/twentyhq/twenty/pull/28086)) by @FelixMalfait
- Point the record creation form at blocked fields and keep its shortcuts working ([#28108](https://github.com/twentyhq/twenty/pull/28108)) by @thomtrp
- [BREAKING_CHANGE] Let Ada and agents react to messages with an emoji ([#28124](https://github.com/twentyhq/twenty/pull/28124)) by @FelixMalfait
- Record published app versions ([#28128](https://github.com/twentyhq/twenty/pull/28128)) by @martmull
- Let members send inbox messages when no AI provider is configured ([#28136](https://github.com/twentyhq/twenty/pull/28136)) by @FelixMalfait
- i18n - translations ([#28142](https://github.com/twentyhq/twenty/pull/28142)) by @github-actions
- Drop the frame border around app widgets ([#28146](https://github.com/twentyhq/twenty/pull/28146)) by @ehconitin
- Stop fetching private events ([#28151](https://github.com/twentyhq/twenty/pull/28151)) by @BOHEUS
- Unify CurrencyPicker shorthand and parts ([#28156](https://github.com/twentyhq/twenty/pull/28156)) by @bosiraphael
- feat(website): carry ?via= partner attribution to app sign-up links ([#28157](https://github.com/twentyhq/twenty/pull/28157)) by @etiennejouan
- Unify CountrySelect shorthand and parts ([#28160](https://github.com/twentyhq/twenty/pull/28160)) by @bosiraphael
- Let keyboard users focus and open relation fields in forms ([#28161](https://github.com/twentyhq/twenty/pull/28161)) by @thomtrp
- Replace Lingui skip comments with doNotTranslate() ([#28168](https://github.com/twentyhq/twenty/pull/28168)) by @charlesBochet
- Unify PhoneCountryPicker composition ([#28169](https://github.com/twentyhq/twenty/pull/28169)) by @bosiraphael
- chore: bump version to 2.49.0 ([#28170](https://github.com/twentyhq/twenty/pull/28170)) by @twenty-pr
- Rename connected account visibility to scope ([#28172](https://github.com/twentyhq/twenty/pull/28172)) by @ehconitin
- i18n - translations ([#28174](https://github.com/twentyhq/twenty/pull/28174)) by @github-actions
- Resolve morph relation fields in row-level permission predicates ([#28175](https://github.com/twentyhq/twenty/pull/28175)) by @charlesBochet
- Drain queue jobs before the worker closes its clients ([#28176](https://github.com/twentyhq/twenty/pull/28176)) by @charlesBochet
- Share the front component JSX runtime between the SDK and the CLI ([#28177](https://github.com/twentyhq/twenty/pull/28177)) by @bosiraphael
- Fix lost keystrokes in Preact front component text inputs ([#28178](https://github.com/twentyhq/twenty/pull/28178)) by @bosiraphael
- Update twenty-ui to Base UI 1.9.0 ([#28180](https://github.com/twentyhq/twenty/pull/28180)) by @bosiraphael
- Report unexpected MCP errors to Sentry ([#28181](https://github.com/twentyhq/twenty/pull/28181)) by @prastoin
- Use built Twenty UI in companion ([#28184](https://github.com/twentyhq/twenty/pull/28184)) by @bosiraphael
- Hide the empty Percent submenu on morph relation table footers ([#28185](https://github.com/twentyhq/twenty/pull/28185)) by @charlesBochet
- Record the requesting user as creator of AI-built workflows ([#28186](https://github.com/twentyhq/twenty/pull/28186)) by @thomtrp
- Type the MCP tool set and validate tools/call params ([#28187](https://github.com/twentyhq/twenty/pull/28187)) by @prastoin
- Show the workflows permission message on the workflows index ([#28189](https://github.com/twentyhq/twenty/pull/28189)) by @thomtrp
- Dispatch MCP methods with a typed switch and wrap responses once ([#28190](https://github.com/twentyhq/twenty/pull/28190)) by @prastoin
- Fix twenty-ui checks after the Base UI 1.9.0 update ([#28191](https://github.com/twentyhq/twenty/pull/28191)) by @bosiraphael
- Document Teams speaker attribution and warn when names are withheld ([#28195](https://github.com/twentyhq/twenty/pull/28195)) by @ehconitin
- Prepare UI and renderer CI to be required checks ([#28197](https://github.com/twentyhq/twenty/pull/28197)) by @bosiraphael
- Make twenty-ui documentation consistent ([#28198](https://github.com/twentyhq/twenty/pull/28198)) by @bosiraphael
- Document application workflows ([#28199](https://github.com/twentyhq/twenty/pull/28199)) by @thomtrp
- Remove the IS_MORPH_RELATION_HEAD_ENABLED feature flag ([#28200](https://github.com/twentyhq/twenty/pull/28200)) by @charlesBochet
- Require Roles permission to mint API key tokens ([#28201](https://github.com/twentyhq/twenty/pull/28201)) by @charlesBochet
- Validate static tool arguments against their input schema ([#28202](https://github.com/twentyhq/twenty/pull/28202)) by @prastoin
- feat: simplify app owner installation statistics (1/4) ([#28203](https://github.com/twentyhq/twenty/pull/28203)) by @martmull
- feat: add app auto-update installation counts (2/4) ([#28204](https://github.com/twentyhq/twenty/pull/28204)) by @martmull
- feat: add application credit usage with ClickHouse query caching (3/4) ([#28205](https://github.com/twentyhq/twenty/pull/28205)) by @martmull
- Declare tools as discovered @DefineTool providers ( only delete webhook first ) ([#28210](https://github.com/twentyhq/twenty/pull/28210)) by @prastoin
- Add Last Contact execution and backfill logging ([#28214](https://github.com/twentyhq/twenty/pull/28214)) by @martmull
- Link app owner workspace to admin workspace details ([#28216](https://github.com/twentyhq/twenty/pull/28216)) by @martmull
- Require @DefineTool execute input to match the input schema ([#28217](https://github.com/twentyhq/twenty/pull/28217)) by @prastoin
- Stabilize submenu and toast story interactions ([#28219](https://github.com/twentyhq/twenty/pull/28219)) by @bosiraphael
- Show call participants on call recording pages in the call recorder app ([#28222](https://github.com/twentyhq/twenty/pull/28222)) by @ehconitin
- Show call recordings on record pages in the call recorder app ([#28223](https://github.com/twentyhq/twenty/pull/28223)) by @ehconitin
- Make app preferences skeleton loaders match what they replace ([#28225](https://github.com/twentyhq/twenty/pull/28225)) by @ehconitin
- Cap Recent chats at 5 in the AI chat inbox drawer ([#28231](https://github.com/twentyhq/twenty/pull/28231)) by @FelixMalfait
- chore(security): bump sharp to 0.35.5 everywhere ([#28236](https://github.com/twentyhq/twenty/pull/28236)) by @mabdullahabaid
- Let users choose whether to import private calendar events ([#28248](https://github.com/twentyhq/twenty/pull/28248)) by @neo773
- Remove the IS_CALENDAR_SYNC_SKIP_UNCHANGED_RECORDS_ENABLED feature flag ([#28252](https://github.com/twentyhq/twenty/pull/28252)) by @charlesBochet
- Merge Gmail and Google Calendar into one Google app in app preferences ([#28257](https://github.com/twentyhq/twenty/pull/28257)) by @ehconitin
- Remove no-op tile size from MenuItemIcon ([#28259](https://github.com/twentyhq/twenty/pull/28259)) by @bosiraphael
- fix(clickhouse): wait for each migration ALTER on all replicas ([#28265](https://github.com/twentyhq/twenty/pull/28265)) by @etiennejouan
- Clarify per-user prices in the pricing comparison table ([#28266](https://github.com/twentyhq/twenty/pull/28266)) by @Bonapara
- Regenerate SDK metadata client after concurrent schema changes ([#28270](https://github.com/twentyhq/twenty/pull/28270)) by @charlesBochet

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.48.0...twenty/v2.49.0

Related Repositories