twenty/v2.44.0

microsoft/graphragtwenty/v2.44.0Oct 1, 2026by twenty-pr[bot]

Upgrading?

AI Summary

This release focuses on enhancing workflow capabilities, specifically recording agent steps and pausing execution, alongside changes to application registration and record management.

Key Highlights

  • Agent step execution is now recorded as a conversation
  • Workflows can pause on questions until answered
  • Application registration variables are declared via manifest only
  • Direct tool mode is added for MCP

Breaking Changes

  • Record each agent step execution as a conversation
  • Let an agent step pause on a question until someone answers
  • Declare application registration variables through the manifest only
  • Start a record's conversation from the record
  • Move product URLs out of twenty-ui

New Features

  • Knip dependency tool
  • Slack broken connection reporting
  • Ask object for work waiting on a person
  • Configurable OTLP metrics temporality
  • Programmatic application client generation
  • Direct tool mode for MCP
  • Chat conversations managed via record API

Full Release Notes

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

## ⚠️ Breaking changes

- feat(workflow): record each agent step execution as a conversation ([#26765](https://github.com/twentyhq/twenty/pull/26765)) by @FelixMalfait
- feat(workflow): let an agent step pause on a question until someone answers ([#26766](https://github.com/twentyhq/twenty/pull/26766)) by @FelixMalfait
- [BREAKING_CHANGE] Declare application registration variables through the manifest only ([#26856](https://github.com/twentyhq/twenty/pull/26856)) by @prastoin
- Start a record's conversation from the record, and show a conversation's records in its header ([#26873](https://github.com/twentyhq/twenty/pull/26873)) by @FelixMalfait
- Move product URLs out of twenty-ui ([#26908](https://github.com/twentyhq/twenty/pull/26908)) by @bosiraphael

## ✨ New features

- feat: knip ([#26351](https://github.com/twentyhq/twenty/pull/26351)) by @BOHEUS
- feat(slack): report a broken connection through the app health check ([#26414](https://github.com/twentyhq/twenty/pull/26414)) by @abdulrahmancodes
- feat(ui): no unchecked indexed access twenty UI ([#26493](https://github.com/twentyhq/twenty/pull/26493)) by @BOHEUS
- feat(shared): no unchecked indexed access twenty-shared ([#26495](https://github.com/twentyhq/twenty/pull/26495)) by @BOHEUS
- feat(ai): add the Ask object for work waiting on a person ([#26767](https://github.com/twentyhq/twenty/pull/26767)) by @FelixMalfait
- feat(workflow): a form step opens an Ask that its submission answers ([#26768](https://github.com/twentyhq/twenty/pull/26768)) by @FelixMalfait
- feat(server): make the OTLP metrics temporality configurable ([#26857](https://github.com/twentyhq/twenty/pull/26857)) by @etiennejouan
- feat(sdk): expose programmatic application client generation ([#26889](https://github.com/twentyhq/twenty/pull/26889)) by @Weiko
- feat(mcp): add opt-in direct tool mode (?mode=direct) ([#26892](https://github.com/twentyhq/twenty/pull/26892)) by @UditSinghChauhan
- feat(ai): let chat conversations be managed through the record API ([#26894](https://github.com/twentyhq/twenty/pull/26894)) by @FelixMalfait
- feat(ai): answer every Ask through answerAsk, let agents propose emails and wait on several Asks at once ([#26930](https://github.com/twentyhq/twenty/pull/26930)) by @FelixMalfait

## 💅 Improvements & UX

- Support matchMedia in front components ([#24160](https://github.com/twentyhq/twenty/pull/24160)) by @bosiraphael
- Add List My Teams Transcripts action backed by a Microsoft Graph client ([#26315](https://github.com/twentyhq/twenty/pull/26315)) by @ehconitin
- Migrate existing recording tab defaults to Transcript ([#26319](https://github.com/twentyhq/twenty/pull/26319)) by @ehconitin
- [4/5] Show a record's AI conversations in a Conversations tab behind IS_CONVERSATIONS_TAB_ENABLED ([#26332](https://github.com/twentyhq/twenty/pull/26332)) by @FelixMalfait
- Standardize twenty-shared page-layout type filenames ([#26370](https://github.com/twentyhq/twenty/pull/26370)) by @BOHEUS
- Require the application role to cover every agent role ([#26413](https://github.com/twentyhq/twenty/pull/26413)) by @abdulrahmancodes
- [rich-text] Keep formatting in rich text written by workflows ([#26445](https://github.com/twentyhq/twenty/pull/26445)) by @Bonapara
- Polyfill matches, closest and querySelector in the front component worker ([#26516](https://github.com/twentyhq/twenty/pull/26516)) by @bosiraphael
- Reflect remote element properties in getAttribute ([#26517](https://github.com/twentyhq/twenty/pull/26517)) by @bosiraphael
- Polyfill Node.contains, compareDocumentPosition and getRootNode in the front component worker ([#26518](https://github.com/twentyhq/twenty/pull/26518)) by @bosiraphael
- Support form state and focus in front components ([#26519](https://github.com/twentyhq/twenty/pull/26519)) by @bosiraphael
- Respect account sync permissions in onboarding ([#26594](https://github.com/twentyhq/twenty/pull/26594)) by @bosiraphael
- Run the call recorder calendar event reconcile in batch mode ([#26609](https://github.com/twentyhq/twenty/pull/26609)) by @ehconitin
- Reconcile call recorder meetings from batched reads ([#26621](https://github.com/twentyhq/twenty/pull/26621)) by @ehconitin
- Add email campaign guides ([#26629](https://github.com/twentyhq/twenty/pull/26629)) by @neo773
- Add the schema for campaign click tracking ([#26636](https://github.com/twentyhq/twenty/pull/26636)) by @neo773
- Rewrite campaign links through Twenty and serve the redirect ([#26637](https://github.com/twentyhq/twenty/pull/26637)) by @neo773
- Record campaign clicks ([#26638](https://github.com/twentyhq/twenty/pull/26638)) by @neo773
- Let recipients opt out of click tracking ([#26639](https://github.com/twentyhq/twenty/pull/26639)) by @neo773
- Delete indexes on deleted fields and clean up field-less index metadata ([#26714](https://github.com/twentyhq/twenty/pull/26714)) by @FelixMalfait
- Fix e2e tests hidden behind the revoked shared session ([#26719](https://github.com/twentyhq/twenty/pull/26719)) by @FelixMalfait
- Type the e2e window env and assert on workflow creation errors ([#26730](https://github.com/twentyhq/twenty/pull/26730)) by @FelixMalfait
- Skip workspaces deleted during long-running upgrades ([#26741](https://github.com/twentyhq/twenty/pull/26741)) by @FelixMalfait
- Remove legacy record sharing rollout policy ([#26756](https://github.com/twentyhq/twenty/pull/26756)) by @FelixMalfait
- Use native workspace records throughout chat history ([#26760](https://github.com/twentyhq/twenty/pull/26760)) by @FelixMalfait
- Use workspace members for live chat ownership ([#26763](https://github.com/twentyhq/twenty/pull/26763)) by @FelixMalfait
- [Onboarding 1/10] Track credit rewards ([#26778](https://github.com/twentyhq/twenty/pull/26778)) by @Bonapara
- [Onboarding 2/10] Raise trial credits ([#26779](https://github.com/twentyhq/twenty/pull/26779)) by @Bonapara
- [Onboarding 3/10] Add credits pill ([#26780](https://github.com/twentyhq/twenty/pull/26780)) by @Bonapara
- [Onboarding 6/10] Add skip dialogs ([#26781](https://github.com/twentyhq/twenty/pull/26781)) by @Bonapara
- [Onboarding 7/10] Count credits live ([#26782](https://github.com/twentyhq/twenty/pull/26782)) by @Bonapara
- [Onboarding 8/10] Redesign plan step ([#26783](https://github.com/twentyhq/twenty/pull/26783)) by @Bonapara
- [Onboarding 8/8] Stabilize avatar colors ([#26785](https://github.com/twentyhq/twenty/pull/26785)) by @Bonapara
- Serve the core workflow show page at /workflow/:id ([#26788](https://github.com/twentyhq/twenty/pull/26788)) by @thomtrp
- Let workflows update custom fields on email and calendar records ([#26789](https://github.com/twentyhq/twenty/pull/26789)) by @Bonapara
- Complete UI documentation and presentational previews ([#26791](https://github.com/twentyhq/twenty/pull/26791)) by @bosiraphael
- Size auto-width Select dropdowns to the trigger ([#26792](https://github.com/twentyhq/twenty/pull/26792)) by @bosiraphael
- Docs update ([#26793](https://github.com/twentyhq/twenty/pull/26793)) by @BOHEUS
- Migrate settings filters, menus and pickers ([#26794](https://github.com/twentyhq/twenty/pull/26794)) by @bosiraphael
- Add files, records and skills from the AI chat + menu ([#26797](https://github.com/twentyhq/twenty/pull/26797)) by @Bonapara
- Anonymize workspace names and IDs in upgrade:status output by default ([#26799](https://github.com/twentyhq/twenty/pull/26799)) by @prastoin
- Make UI utilities safe without browser globals ([#26802](https://github.com/twentyhq/twenty/pull/26802)) by @bosiraphael
- Make retained UI strings overridable ([#26804](https://github.com/twentyhq/twenty/pull/26804)) by @bosiraphael
- Complete RTL behavior in retained UI components ([#26805](https://github.com/twentyhq/twenty/pull/26805)) by @bosiraphael
- Migrate anchored command and widget menus ([#26806](https://github.com/twentyhq/twenty/pull/26806)) by @bosiraphael
- Fix CI Knip on main: delete unused agent history storage state re-exports ([#26807](https://github.com/twentyhq/twenty/pull/26807)) by @FelixMalfait
- Add status check to ci-knip ([#26810](https://github.com/twentyhq/twenty/pull/26810)) by @prastoin
- Drag and drop blocks in the campaign editor ([#26812](https://github.com/twentyhq/twenty/pull/26812)) by @neo773
- Call recorder: cancel the bot of a meeting whose calendar event was destroyed ([#26815](https://github.com/twentyhq/twenty/pull/26815)) by @vladbisceanu
- Call recorder: reschedule a re-requested bot at once after a confirmed cancel ([#26818](https://github.com/twentyhq/twenty/pull/26818)) by @vladbisceanu
- Fix core workflow QA feedback on actions, versions, runs and index ([#26820](https://github.com/twentyhq/twenty/pull/26820)) by @thomtrp
- Allow duplicating application-owned core workflows ([#26828](https://github.com/twentyhq/twenty/pull/26828)) by @thomtrp
- Fetch the latest S3 frontend HTML for each document request ([#26835](https://github.com/twentyhq/twenty/pull/26835)) by @FelixMalfait
- Show Untitled, plain visibility and a page skeleton on core workflow pages ([#26836](https://github.com/twentyhq/twenty/pull/26836)) by @thomtrp
- merge queue ci knip ([#26837](https://github.com/twentyhq/twenty/pull/26837)) by @prastoin
- [rich-text] Compact record creation rich-text input, keeping BlockNote ([#26842](https://github.com/twentyhq/twenty/pull/26842)) by @thomtrp
- Stop enabling IMAP4rev2 on IMAP connections ([#26843](https://github.com/twentyhq/twenty/pull/26843)) by @neo773
- Fix call recorder integration test token after generateApplicationToken removal ([#26855](https://github.com/twentyhq/twenty/pull/26855)) by @ehconitin
- Align on-demand logic function runs with the workflow action rule ([#26860](https://github.com/twentyhq/twenty/pull/26860)) by @prastoin
- [5/5] Let the AI chat attach its conversation to the records it is about ([#26862](https://github.com/twentyhq/twenty/pull/26862)) by @FelixMalfait
- [Onboarding 4/10] Add credits popover ([#26871](https://github.com/twentyhq/twenty/pull/26871)) by @Bonapara
- [Onboarding 5/10] Fit credits pill on phones ([#26872](https://github.com/twentyhq/twenty/pull/26872)) by @Bonapara
- Animate the first AI chat message out of the composer ([#26890](https://github.com/twentyhq/twenty/pull/26890)) by @Bonapara
- Restrict forwarded request headers on logic function route triggers ([#26891](https://github.com/twentyhq/twenty/pull/26891)) by @prastoin
- Refresh twenty-ui README ([#26896](https://github.com/twentyhq/twenty/pull/26896)) by @bosiraphael
- Migrate date pickers and field overlays ([#26897](https://github.com/twentyhq/twenty/pull/26897)) by @bosiraphael
- Serve unsubscribe links from the server host when Cloudflare is not configured ([#26898](https://github.com/twentyhq/twenty/pull/26898)) by @neo773
- Rename AI Chat and AI Workflow usage to Chats and Agents ([#26899](https://github.com/twentyhq/twenty/pull/26899)) by @Bonapara
- Keep UI implementation exports private ([#26900](https://github.com/twentyhq/twenty/pull/26900)) by @bosiraphael
- Validation rules (1/2): define and store rules ([#26902](https://github.com/twentyhq/twenty/pull/26902)) by @thomtrp
- Validation rules (2/2): enforce rules on record writes ([#26903](https://github.com/twentyhq/twenty/pull/26903)) by @thomtrp
- Animate the sidebar when switching between Home, AI and Settings ([#26905](https://github.com/twentyhq/twenty/pull/26905)) by @Bonapara
- Rename expandable container to Collapsible ([#26906](https://github.com/twentyhq/twenty/pull/26906)) by @bosiraphael
- Call recorder: stop recovery from creating twin Recall bots ([#26909](https://github.com/twentyhq/twenty/pull/26909)) by @ehconitin
- Deny settings access to applications without a default role instead of throwing a 500 ([#26910](https://github.com/twentyhq/twenty/pull/26910)) by @thomtrp
- Keep notification countdowns in Toast ([#26912](https://github.com/twentyhq/twenty/pull/26912)) by @bosiraphael
- Replace CircularProgressBar with Loader ([#26916](https://github.com/twentyhq/twenty/pull/26916)) by @bosiraphael
- Keep where objects built in another realm, and refuse a where condition the builder cannot read ([#26919](https://github.com/twentyhq/twenty/pull/26919)) by @FelixMalfait
- Replace ClickToActionLink with link-style Button ([#26921](https://github.com/twentyhq/twenty/pull/26921)) by @bosiraphael
- Require registration ownership when exporting applications ([#26928](https://github.com/twentyhq/twenty/pull/26928)) by @Weiko
- Clean up the conversations, Ask and 2.44 chat-thread code ([#26931](https://github.com/twentyhq/twenty/pull/26931)) by @FelixMalfait
- Replace the principal-type auth guards with AuthPrincipalGuard ([#26936](https://github.com/twentyhq/twenty/pull/26936)) by @prastoin
- Move coming-soon labels out of Button ([#26951](https://github.com/twentyhq/twenty/pull/26951)) by @bosiraphael
- Move the chat page onto the record model ([#26956](https://github.com/twentyhq/twenty/pull/26956)) by @FelixMalfait
- Stop the core workflow index from swapping its empty state for a bare table ([#26959](https://github.com/twentyhq/twenty/pull/26959)) by @thomtrp
- Render the chat page as the chat record page ([#26960](https://github.com/twentyhq/twenty/pull/26960)) by @FelixMalfait
- Consolidate card choices in Radio ([#26966](https://github.com/twentyhq/twenty/pull/26966)) by @bosiraphael
- Replace Info with InlineBanner ([#26967](https://github.com/twentyhq/twenty/pull/26967)) by @bosiraphael
- Enforce intentional Twenty UI exports ([#26971](https://github.com/twentyhq/twenty/pull/26971)) by @bosiraphael
- Stop global shortcuts firing while typing a campaign subject ([#26975](https://github.com/twentyhq/twenty/pull/26975)) by @neo773
- Page running workflow runs in the 2.44 open-asks-for-pending-input command ([#26984](https://github.com/twentyhq/twenty/pull/26984)) by @FelixMalfait
- Compose SearchInput with input primitives ([#26986](https://github.com/twentyhq/twenty/pull/26986)) by @bosiraphael
- Move appearance choices into profile settings ([#26987](https://github.com/twentyhq/twenty/pull/26987)) by @bosiraphael
- Replace inputAsk with pending tool calls on the conversation ([#26988](https://github.com/twentyhq/twenty/pull/26988)) by @FelixMalfait
- Remap step variable references when duplicating a workflow ([#26990](https://github.com/twentyhq/twenty/pull/26990)) by @thomtrp
- Move RoundedLink to the frontend ([#26991](https://github.com/twentyhq/twenty/pull/26991)) by @bosiraphael
- Remove twenty-ui changelog ([#26993](https://github.com/twentyhq/twenty/pull/26993)) by @bosiraphael
- Open record sharing in the side panel ([#26995](https://github.com/twentyhq/twenty/pull/26995)) by @FelixMalfait
- Use native buttons for JSON and avatar actions ([#26997](https://github.com/twentyhq/twenty/pull/26997)) by @bosiraphael
- Keep notes and tasks attached to nothing readable by every member ([#27002](https://github.com/twentyhq/twenty/pull/27002)) by @FelixMalfait

## 🐛 Bug fixes

- fix(front): record page pagination on views sorted by a boolean field ([#26500](https://github.com/twentyhq/twenty/pull/26500)) by @BOHEUS
- fix(twenty-orm): capture all deleted records in batch delete event payload ([#26502](https://github.com/twentyhq/twenty/pull/26502)) by @Mateidslx
- fix(billing): identify subscription items by product key, not by quantity ([#26635](https://github.com/twentyhq/twenty/pull/26635)) by @etiennejouan
- fix: limit record export concurrency across workers ([#26665](https://github.com/twentyhq/twenty/pull/26665)) by @Weiko
- fix(ai-chat): show workspace-scoped AI limits and warn before the composer ([#26674](https://github.com/twentyhq/twenty/pull/26674)) by @etiennejouan
- fix(upgrade): stop dry runs from executing instance commands ([#26693](https://github.com/twentyhq/twenty/pull/26693)) by @Weiko
- fix(twenty-ui): keep IconButton tooltips on hover after loading or disabled changes ([#26710](https://github.com/twentyhq/twenty/pull/26710)) by @martmull
- fix(ci): gate the secure integration suite with nx affected ([#26717](https://github.com/twentyhq/twenty/pull/26717)) by @FelixMalfait
- fix(workflow): ignore empty-name normalization in drift checks ([#26724](https://github.com/twentyhq/twenty/pull/26724)) by @FelixMalfait
- fix(workflow): make a private workflow's runs private too ([#26761](https://github.com/twentyhq/twenty/pull/26761)) by @FelixMalfait
- fix(mcp): support per-option grouping for multi-select fields ([#26787](https://github.com/twentyhq/twenty/pull/26787)) by @waelantar
- fix: fall back to unconditional copy when S3 backend rejects CopySourceIfMatch ([#26830](https://github.com/twentyhq/twenty/pull/26830)) by @FelixMalfait
- fix(ai): price multi-step turns step by step ([#26882](https://github.com/twentyhq/twenty/pull/26882)) by @etiennejouan
- fix(billing): hide all operations option when a usage has a single operation ([#26888](https://github.com/twentyhq/twenty/pull/26888)) by @etiennejouan
- fix(billing): skip the Stripe update when prices and seats are unchanged ([#26907](https://github.com/twentyhq/twenty/pull/26907)) by @etiennejouan
- fix(workspace-cleaner): serialize workspace destruction on a dedicated queue ([#26911](https://github.com/twentyhq/twenty/pull/26911)) by @etiennejouan
- fix(search): restrict ILIKE fallback to CJK input ([#26926](https://github.com/twentyhq/twenty/pull/26926)) by @Weiko
- fix(ai): pass the thread record event service in the pending-question spec ([#26927](https://github.com/twentyhq/twenty/pull/26927)) by @FelixMalfait
- fix(upgrade): reapply the usageLimit period reshape skipped by 2.38.x instances ([#26958](https://github.com/twentyhq/twenty/pull/26958)) by @etiennejouan
- fix(ai-chat): stop failing replies on recovered tool errors and group AI SDK errors in Sentry ([#26989](https://github.com/twentyhq/twenty/pull/26989)) by @etiennejouan
- fix(usage-limit): key quota counters on their limit value ([#26996](https://github.com/twentyhq/twenty/pull/26996)) by @etiennejouan
- fix: keep chats and forms usable during workspace upgrades ([#27005](https://github.com/twentyhq/twenty/pull/27005)) by @FelixMalfait
- fix(front): keep the timeline group bar behind the icons in RTL ([#27007](https://github.com/twentyhq/twenty/pull/27007)) by @almoghazaz-cell

## 🔧 Developer & API

- Expose programmatic SDK build and typecheck APIs ([#26824](https://github.com/twentyhq/twenty/pull/26824)) by @Weiko
- Load the chat list through the record API ([#26957](https://github.com/twentyhq/twenty/pull/26957)) by @FelixMalfait

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

- refactor(ai): isolate agent history migration state from runtime ([#26752](https://github.com/twentyhq/twenty/pull/26752)) by @FelixMalfait
- refactor(ai): remove transitional sender insert preparation ([#26753](https://github.com/twentyhq/twenty/pull/26753)) by @FelixMalfait
- refactor(ai): retire runtime history routing and lifecycle state ([#26754](https://github.com/twentyhq/twenty/pull/26754)) by @FelixMalfait
- test(ai): replay the archivedAt writability upgrade after the agent history spec rebuilds the chat objects ([#26934](https://github.com/twentyhq/twenty/pull/26934)) by @FelixMalfait
- chore(front): remove Effect component tests ([#26963](https://github.com/twentyhq/twenty/pull/26963)) by @charlesBochet
- test(apps): remove the unsupported icon from the function-execute fixture ([#27008](https://github.com/twentyhq/twenty/pull/27008)) by @Weiko

</details>

## 🎉 New contributors

- @vladbisceanu made their first contribution in https://github.com/twentyhq/twenty/pull/26818
- @waelantar made their first contribution in https://github.com/twentyhq/twenty/pull/26787
- @UditSinghChauhan made their first contribution in https://github.com/twentyhq/twenty/pull/26892
- @almoghazaz-cell made their first contribution in https://github.com/twentyhq/twenty/pull/27007

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

- Support matchMedia in front components ([#24160](https://github.com/twentyhq/twenty/pull/24160)) by @bosiraphael
- Add List My Teams Transcripts action backed by a Microsoft Graph client ([#26315](https://github.com/twentyhq/twenty/pull/26315)) by @ehconitin
- Migrate existing recording tab defaults to Transcript ([#26319](https://github.com/twentyhq/twenty/pull/26319)) by @ehconitin
- [4/5] Show a record's AI conversations in a Conversations tab behind IS_CONVERSATIONS_TAB_ENABLED ([#26332](https://github.com/twentyhq/twenty/pull/26332)) by @FelixMalfait
- feat: knip ([#26351](https://github.com/twentyhq/twenty/pull/26351)) by @BOHEUS
- Standardize twenty-shared page-layout type filenames ([#26370](https://github.com/twentyhq/twenty/pull/26370)) by @BOHEUS
- Require the application role to cover every agent role ([#26413](https://github.com/twentyhq/twenty/pull/26413)) by @abdulrahmancodes
- feat(slack): report a broken connection through the app health check ([#26414](https://github.com/twentyhq/twenty/pull/26414)) by @abdulrahmancodes
- [rich-text] Keep formatting in rich text written by workflows ([#26445](https://github.com/twentyhq/twenty/pull/26445)) by @Bonapara
- feat(ui): no unchecked indexed access twenty UI ([#26493](https://github.com/twentyhq/twenty/pull/26493)) by @BOHEUS
- feat(shared): no unchecked indexed access twenty-shared ([#26495](https://github.com/twentyhq/twenty/pull/26495)) by @BOHEUS
- fix(front): record page pagination on views sorted by a boolean field ([#26500](https://github.com/twentyhq/twenty/pull/26500)) by @BOHEUS
- fix(twenty-orm): capture all deleted records in batch delete event payload ([#26502](https://github.com/twentyhq/twenty/pull/26502)) by @Mateidslx
- Polyfill matches, closest and querySelector in the front component worker ([#26516](https://github.com/twentyhq/twenty/pull/26516)) by @bosiraphael
- Reflect remote element properties in getAttribute ([#26517](https://github.com/twentyhq/twenty/pull/26517)) by @bosiraphael
- Polyfill Node.contains, compareDocumentPosition and getRootNode in the front component worker ([#26518](https://github.com/twentyhq/twenty/pull/26518)) by @bosiraphael
- Support form state and focus in front components ([#26519](https://github.com/twentyhq/twenty/pull/26519)) by @bosiraphael
- Respect account sync permissions in onboarding ([#26594](https://github.com/twentyhq/twenty/pull/26594)) by @bosiraphael
- Run the call recorder calendar event reconcile in batch mode ([#26609](https://github.com/twentyhq/twenty/pull/26609)) by @ehconitin
- Reconcile call recorder meetings from batched reads ([#26621](https://github.com/twentyhq/twenty/pull/26621)) by @ehconitin
- Add email campaign guides ([#26629](https://github.com/twentyhq/twenty/pull/26629)) by @neo773
- fix(billing): identify subscription items by product key, not by quantity ([#26635](https://github.com/twentyhq/twenty/pull/26635)) by @etiennejouan
- Add the schema for campaign click tracking ([#26636](https://github.com/twentyhq/twenty/pull/26636)) by @neo773
- Rewrite campaign links through Twenty and serve the redirect ([#26637](https://github.com/twentyhq/twenty/pull/26637)) by @neo773
- Record campaign clicks ([#26638](https://github.com/twentyhq/twenty/pull/26638)) by @neo773
- Let recipients opt out of click tracking ([#26639](https://github.com/twentyhq/twenty/pull/26639)) by @neo773
- fix: limit record export concurrency across workers ([#26665](https://github.com/twentyhq/twenty/pull/26665)) by @Weiko
- fix(ai-chat): show workspace-scoped AI limits and warn before the composer ([#26674](https://github.com/twentyhq/twenty/pull/26674)) by @etiennejouan
- fix(upgrade): stop dry runs from executing instance commands ([#26693](https://github.com/twentyhq/twenty/pull/26693)) by @Weiko
- fix(twenty-ui): keep IconButton tooltips on hover after loading or disabled changes ([#26710](https://github.com/twentyhq/twenty/pull/26710)) by @martmull
- i18n - translations ([#26713](https://github.com/twentyhq/twenty/pull/26713)) by @github-actions
- Delete indexes on deleted fields and clean up field-less index metadata ([#26714](https://github.com/twentyhq/twenty/pull/26714)) by @FelixMalfait
- fix(ci): gate the secure integration suite with nx affected ([#26717](https://github.com/twentyhq/twenty/pull/26717)) by @FelixMalfait
- Fix e2e tests hidden behind the revoked shared session ([#26719](https://github.com/twentyhq/twenty/pull/26719)) by @FelixMalfait
- chore: bump version to 2.44.0 ([#26720](https://github.com/twentyhq/twenty/pull/26720)) by @twenty-pr
- fix(workflow): ignore empty-name normalization in drift checks ([#26724](https://github.com/twentyhq/twenty/pull/26724)) by @FelixMalfait
- Type the e2e window env and assert on workflow creation errors ([#26730](https://github.com/twentyhq/twenty/pull/26730)) by @FelixMalfait
- chore: sync AI model catalog ([#26739](https://github.com/twentyhq/twenty/pull/26739)) by @github-actions
- Skip workspaces deleted during long-running upgrades ([#26741](https://github.com/twentyhq/twenty/pull/26741)) by @FelixMalfait
- i18n - docs translations ([#26747](https://github.com/twentyhq/twenty/pull/26747)) by @github-actions
- refactor(ai): isolate agent history migration state from runtime ([#26752](https://github.com/twentyhq/twenty/pull/26752)) by @FelixMalfait
- refactor(ai): remove transitional sender insert preparation ([#26753](https://github.com/twentyhq/twenty/pull/26753)) by @FelixMalfait
- refactor(ai): retire runtime history routing and lifecycle state ([#26754](https://github.com/twentyhq/twenty/pull/26754)) by @FelixMalfait
- Remove legacy record sharing rollout policy ([#26756](https://github.com/twentyhq/twenty/pull/26756)) by @FelixMalfait
- Use native workspace records throughout chat history ([#26760](https://github.com/twentyhq/twenty/pull/26760)) by @FelixMalfait
- fix(workflow): make a private workflow's runs private too ([#26761](https://github.com/twentyhq/twenty/pull/26761)) by @FelixMalfait
- Use workspace members for live chat ownership ([#26763](https://github.com/twentyhq/twenty/pull/26763)) by @FelixMalfait
- feat(workflow): record each agent step execution as a conversation ([#26765](https://github.com/twentyhq/twenty/pull/26765)) by @FelixMalfait
- feat(workflow): let an agent step pause on a question until someone answers ([#26766](https://github.com/twentyhq/twenty/pull/26766)) by @FelixMalfait
- feat(ai): add the Ask object for work waiting on a person ([#26767](https://github.com/twentyhq/twenty/pull/26767)) by @FelixMalfait
- feat(workflow): a form step opens an Ask that its submission answers ([#26768](https://github.com/twentyhq/twenty/pull/26768)) by @FelixMalfait
- chore: sync AI model catalog ([#26771](https://github.com/twentyhq/twenty/pull/26771)) by @github-actions
- [Onboarding 1/10] Track credit rewards ([#26778](https://github.com/twentyhq/twenty/pull/26778)) by @Bonapara
- [Onboarding 2/10] Raise trial credits ([#26779](https://github.com/twentyhq/twenty/pull/26779)) by @Bonapara
- [Onboarding 3/10] Add credits pill ([#26780](https://github.com/twentyhq/twenty/pull/26780)) by @Bonapara
- [Onboarding 6/10] Add skip dialogs ([#26781](https://github.com/twentyhq/twenty/pull/26781)) by @Bonapara
- [Onboarding 7/10] Count credits live ([#26782](https://github.com/twentyhq/twenty/pull/26782)) by @Bonapara
- [Onboarding 8/10] Redesign plan step ([#26783](https://github.com/twentyhq/twenty/pull/26783)) by @Bonapara
- [Onboarding 8/8] Stabilize avatar colors ([#26785](https://github.com/twentyhq/twenty/pull/26785)) by @Bonapara
- fix(mcp): support per-option grouping for multi-select fields ([#26787](https://github.com/twentyhq/twenty/pull/26787)) by @waelantar
- Serve the core workflow show page at /workflow/:id ([#26788](https://github.com/twentyhq/twenty/pull/26788)) by @thomtrp
- Let workflows update custom fields on email and calendar records ([#26789](https://github.com/twentyhq/twenty/pull/26789)) by @Bonapara
- i18n - translations ([#26790](https://github.com/twentyhq/twenty/pull/26790)) by @github-actions
- Complete UI documentation and presentational previews ([#26791](https://github.com/twentyhq/twenty/pull/26791)) by @bosiraphael
- Size auto-width Select dropdowns to the trigger ([#26792](https://github.com/twentyhq/twenty/pull/26792)) by @bosiraphael
- Docs update ([#26793](https://github.com/twentyhq/twenty/pull/26793)) by @BOHEUS
- Migrate settings filters, menus and pickers ([#26794](https://github.com/twentyhq/twenty/pull/26794)) by @bosiraphael
- Add files, records and skills from the AI chat + menu ([#26797](https://github.com/twentyhq/twenty/pull/26797)) by @Bonapara
- Anonymize workspace names and IDs in upgrade:status output by default ([#26799](https://github.com/twentyhq/twenty/pull/26799)) by @prastoin
- i18n - translations ([#26801](https://github.com/twentyhq/twenty/pull/26801)) by @github-actions
- Make UI utilities safe without browser globals ([#26802](https://github.com/twentyhq/twenty/pull/26802)) by @bosiraphael
- Make retained UI strings overridable ([#26804](https://github.com/twentyhq/twenty/pull/26804)) by @bosiraphael
- Complete RTL behavior in retained UI components ([#26805](https://github.com/twentyhq/twenty/pull/26805)) by @bosiraphael
- Migrate anchored command and widget menus ([#26806](https://github.com/twentyhq/twenty/pull/26806)) by @bosiraphael
- Fix CI Knip on main: delete unused agent history storage state re-exports ([#26807](https://github.com/twentyhq/twenty/pull/26807)) by @FelixMalfait
- Add status check to ci-knip ([#26810](https://github.com/twentyhq/twenty/pull/26810)) by @prastoin
- Drag and drop blocks in the campaign editor ([#26812](https://github.com/twentyhq/twenty/pull/26812)) by @neo773
- Call recorder: cancel the bot of a meeting whose calendar event was destroyed ([#26815](https://github.com/twentyhq/twenty/pull/26815)) by @vladbisceanu
- Call recorder: reschedule a re-requested bot at once after a confirmed cancel ([#26818](https://github.com/twentyhq/twenty/pull/26818)) by @vladbisceanu
- Fix core workflow QA feedback on actions, versions, runs and index ([#26820](https://github.com/twentyhq/twenty/pull/26820)) by @thomtrp
- Expose programmatic SDK build and typecheck APIs ([#26824](https://github.com/twentyhq/twenty/pull/26824)) by @Weiko
- i18n - translations ([#26825](https://github.com/twentyhq/twenty/pull/26825)) by @github-actions
- i18n - translations ([#26826](https://github.com/twentyhq/twenty/pull/26826)) by @github-actions
- Allow duplicating application-owned core workflows ([#26828](https://github.com/twentyhq/twenty/pull/26828)) by @thomtrp
- fix: fall back to unconditional copy when S3 backend rejects CopySourceIfMatch ([#26830](https://github.com/twentyhq/twenty/pull/26830)) by @FelixMalfait
- i18n - translations ([#26833](https://github.com/twentyhq/twenty/pull/26833)) by @github-actions
- Fetch the latest S3 frontend HTML for each document request ([#26835](https://github.com/twentyhq/twenty/pull/26835)) by @FelixMalfait
- Show Untitled, plain visibility and a page skeleton on core workflow pages ([#26836](https://github.com/twentyhq/twenty/pull/26836)) by @thomtrp
- merge queue ci knip ([#26837](https://github.com/twentyhq/twenty/pull/26837)) by @prastoin
- i18n - translations ([#26839](https://github.com/twentyhq/twenty/pull/26839)) by @github-actions
- i18n - translations ([#26840](https://github.com/twentyhq/twenty/pull/26840)) by @github-actions
- i18n - translations ([#26841](https://github.com/twentyhq/twenty/pull/26841)) by @github-actions
- [rich-text] Compact record creation rich-text input, keeping BlockNote ([#26842](https://github.com/twentyhq/twenty/pull/26842)) by @thomtrp
- Stop enabling IMAP4rev2 on IMAP connections ([#26843](https://github.com/twentyhq/twenty/pull/26843)) by @neo773
- Fix call recorder integration test token after generateApplicationToken removal ([#26855](https://github.com/twentyhq/twenty/pull/26855)) by @ehconitin
- [BREAKING_CHANGE] Declare application registration variables through the manifest only ([#26856](https://github.com/twentyhq/twenty/pull/26856)) by @prastoin
- feat(server): make the OTLP metrics temporality configurable ([#26857](https://github.com/twentyhq/twenty/pull/26857)) by @etiennejouan
- i18n - translations ([#26858](https://github.com/twentyhq/twenty/pull/26858)) by @github-actions
- Align on-demand logic function runs with the workflow action rule ([#26860](https://github.com/twentyhq/twenty/pull/26860)) by @prastoin
- i18n - translations ([#26861](https://github.com/twentyhq/twenty/pull/26861)) by @github-actions
- [5/5] Let the AI chat attach its conversation to the records it is about ([#26862](https://github.com/twentyhq/twenty/pull/26862)) by @FelixMalfait
- i18n - translations ([#26863](https://github.com/twentyhq/twenty/pull/26863)) by @github-actions
- [Onboarding 4/10] Add credits popover ([#26871](https://github.com/twentyhq/twenty/pull/26871)) by @Bonapara
- [Onboarding 5/10] Fit credits pill on phones ([#26872](https://github.com/twentyhq/twenty/pull/26872)) by @Bonapara
- Start a record's conversation from the record, and show a conversation's records in its header ([#26873](https://github.com/twentyhq/twenty/pull/26873)) by @FelixMalfait
- chore: sync AI model catalog ([#26878](https://github.com/twentyhq/twenty/pull/26878)) by @github-actions
- fix(ai): price multi-step turns step by step ([#26882](https://github.com/twentyhq/twenty/pull/26882)) by @etiennejouan
- fix(billing): hide all operations option when a usage has a single operation ([#26888](https://github.com/twentyhq/twenty/pull/26888)) by @etiennejouan
- feat(sdk): expose programmatic application client generation ([#26889](https://github.com/twentyhq/twenty/pull/26889)) by @Weiko
- Animate the first AI chat message out of the composer ([#26890](https://github.com/twentyhq/twenty/pull/26890)) by @Bonapara
- Restrict forwarded request headers on logic function route triggers ([#26891](https://github.com/twentyhq/twenty/pull/26891)) by @prastoin
- feat(mcp): add opt-in direct tool mode (?mode=direct) ([#26892](https://github.com/twentyhq/twenty/pull/26892)) by @UditSinghChauhan
- feat(ai): let chat conversations be managed through the record API ([#26894](https://github.com/twentyhq/twenty/pull/26894)) by @FelixMalfait
- Refresh twenty-ui README ([#26896](https://github.com/twentyhq/twenty/pull/26896)) by @bosiraphael
- Migrate date pickers and field overlays ([#26897](https://github.com/twentyhq/twenty/pull/26897)) by @bosiraphael
- Serve unsubscribe links from the server host when Cloudflare is not configured ([#26898](https://github.com/twentyhq/twenty/pull/26898)) by @neo773
- Rename AI Chat and AI Workflow usage to Chats and Agents ([#26899](https://github.com/twentyhq/twenty/pull/26899)) by @Bonapara
- Keep UI implementation exports private ([#26900](https://github.com/twentyhq/twenty/pull/26900)) by @bosiraphael
- Validation rules (1/2): define and store rules ([#26902](https://github.com/twentyhq/twenty/pull/26902)) by @thomtrp
- Validation rules (2/2): enforce rules on record writes ([#26903](https://github.com/twentyhq/twenty/pull/26903)) by @thomtrp
- Animate the sidebar when switching between Home, AI and Settings ([#26905](https://github.com/twentyhq/twenty/pull/26905)) by @Bonapara
- Rename expandable container to Collapsible ([#26906](https://github.com/twentyhq/twenty/pull/26906)) by @bosiraphael
- fix(billing): skip the Stripe update when prices and seats are unchanged ([#26907](https://github.com/twentyhq/twenty/pull/26907)) by @etiennejouan
- Move product URLs out of twenty-ui ([#26908](https://github.com/twentyhq/twenty/pull/26908)) by @bosiraphael
- Call recorder: stop recovery from creating twin Recall bots ([#26909](https://github.com/twentyhq/twenty/pull/26909)) by @ehconitin
- Deny settings access to applications without a default role instead of throwing a 500 ([#26910](https://github.com/twentyhq/twenty/pull/26910)) by @thomtrp
- fix(workspace-cleaner): serialize workspace destruction on a dedicated queue ([#26911](https://github.com/twentyhq/twenty/pull/26911)) by @etiennejouan
- Keep notification countdowns in Toast ([#26912](https://github.com/twentyhq/twenty/pull/26912)) by @bosiraphael
- Replace CircularProgressBar with Loader ([#26916](https://github.com/twentyhq/twenty/pull/26916)) by @bosiraphael
- Keep where objects built in another realm, and refuse a where condition the builder cannot read ([#26919](https://github.com/twentyhq/twenty/pull/26919)) by @FelixMalfait
- Replace ClickToActionLink with link-style Button ([#26921](https://github.com/twentyhq/twenty/pull/26921)) by @bosiraphael
- fix(search): restrict ILIKE fallback to CJK input ([#26926](https://github.com/twentyhq/twenty/pull/26926)) by @Weiko
- fix(ai): pass the thread record event service in the pending-question spec ([#26927](https://github.com/twentyhq/twenty/pull/26927)) by @FelixMalfait
- Require registration ownership when exporting applications ([#26928](https://github.com/twentyhq/twenty/pull/26928)) by @Weiko
- feat(ai): answer every Ask through answerAsk, let agents propose emails and wait on several Asks at once ([#26930](https://github.com/twentyhq/twenty/pull/26930)) by @FelixMalfait
- Clean up the conversations, Ask and 2.44 chat-thread code ([#26931](https://github.com/twentyhq/twenty/pull/26931)) by @FelixMalfait
- test(ai): replay the archivedAt writability upgrade after the agent history spec rebuilds the chat objects ([#26934](https://github.com/twentyhq/twenty/pull/26934)) by @FelixMalfait
- Replace the principal-type auth guards with AuthPrincipalGuard ([#26936](https://github.com/twentyhq/twenty/pull/26936)) by @prastoin
- chore: sync AI model catalog ([#26950](https://github.com/twentyhq/twenty/pull/26950)) by @github-actions
- Move coming-soon labels out of Button ([#26951](https://github.com/twentyhq/twenty/pull/26951)) by @bosiraphael
- Move the chat page onto the record model ([#26956](https://github.com/twentyhq/twenty/pull/26956)) by @FelixMalfait
- Load the chat list through the record API ([#26957](https://github.com/twentyhq/twenty/pull/26957)) by @FelixMalfait
- fix(upgrade): reapply the usageLimit period reshape skipped by 2.38.x instances ([#26958](https://github.com/twentyhq/twenty/pull/26958)) by @etiennejouan
- Stop the core workflow index from swapping its empty state for a bare table ([#26959](https://github.com/twentyhq/twenty/pull/26959)) by @thomtrp
- Render the chat page as the chat record page ([#26960](https://github.com/twentyhq/twenty/pull/26960)) by @FelixMalfait
- chore(front): remove Effect component tests ([#26963](https://github.com/twentyhq/twenty/pull/26963)) by @charlesBochet
- Consolidate card choices in Radio ([#26966](https://github.com/twentyhq/twenty/pull/26966)) by @bosiraphael
- Replace Info with InlineBanner ([#26967](https://github.com/twentyhq/twenty/pull/26967)) by @bosiraphael
- Enforce intentional Twenty UI exports ([#26971](https://github.com/twentyhq/twenty/pull/26971)) by @bosiraphael
- Stop global shortcuts firing while typing a campaign subject ([#26975](https://github.com/twentyhq/twenty/pull/26975)) by @neo773
- Page running workflow runs in the 2.44 open-asks-for-pending-input command ([#26984](https://github.com/twentyhq/twenty/pull/26984)) by @FelixMalfait
- Compose SearchInput with input primitives ([#26986](https://github.com/twentyhq/twenty/pull/26986)) by @bosiraphael
- Move appearance choices into profile settings ([#26987](https://github.com/twentyhq/twenty/pull/26987)) by @bosiraphael
- Replace inputAsk with pending tool calls on the conversation ([#26988](https://github.com/twentyhq/twenty/pull/26988)) by @FelixMalfait
- fix(ai-chat): stop failing replies on recovered tool errors and group AI SDK errors in Sentry ([#26989](https://github.com/twentyhq/twenty/pull/26989)) by @etiennejouan
- Remap step variable references when duplicating a workflow ([#26990](https://github.com/twentyhq/twenty/pull/26990)) by @thomtrp
- Move RoundedLink to the frontend ([#26991](https://github.com/twentyhq/twenty/pull/26991)) by @bosiraphael
- Remove twenty-ui changelog ([#26993](https://github.com/twentyhq/twenty/pull/26993)) by @bosiraphael
- Open record sharing in the side panel ([#26995](https://github.com/twentyhq/twenty/pull/26995)) by @FelixMalfait
- fix(usage-limit): key quota counters on their limit value ([#26996](https://github.com/twentyhq/twenty/pull/26996)) by @etiennejouan
- Use native buttons for JSON and avatar actions ([#26997](https://github.com/twentyhq/twenty/pull/26997)) by @bosiraphael
- Keep notes and tasks attached to nothing readable by every member ([#27002](https://github.com/twentyhq/twenty/pull/27002)) by @FelixMalfait
- fix: keep chats and forms usable during workspace upgrades ([#27005](https://github.com/twentyhq/twenty/pull/27005)) by @FelixMalfait
- fix(front): keep the timeline group bar behind the icons in RTL ([#27007](https://github.com/twentyhq/twenty/pull/27007)) by @almoghazaz-cell
- test(apps): remove the unsupported icon from the function-execute fixture ([#27008](https://github.com/twentyhq/twenty/pull/27008)) by @Weiko

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.43.0...twenty/v2.44.0

Related Repositories