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