github twentyhq/twenty twenty/v2.40.0

latest release: sdk/v2.40.0
5 hours ago

⚠️ Breaking changes

  • Track application installs and uninstalls with deterministic queue jobs (#25502) by @martmull
  • feat(ai): replace model pickers with a five-tier model slider (#25721) by @FelixMalfait

✨ New features

  • feat(search): expose isSearchable on field metadata and make the object search section editable (#25166) by @prastoin
  • feat(record-form): render the record creation form behind a flag (#25203) by @thomtrp
  • feat(core): let apps report a connection auth failure with a reason (#25297) by @abdulrahmancodes
  • feat(workflow): polish the core workflows index and gate workflow run workspace relations (#25356) by @thomtrp
  • feat(workflow): select core workflows and delete them in bulk (#25415) by @thomtrp
  • feat(call-recorder): toggle to send the bot to all calendar meetings (#25431) by @ehconitin
  • feat(slack): branch the assistant failure reply on the failure kind (#25484) by @abdulrahmancodes
  • feat: add create/complete file upload action tools for MCP (#25503) by @Lakshayyy-m
  • feat(usage-limit): quota limits over the credit allowance period (#25526) by @etiennejouan
  • feat(usage-limit): count quota admits on failure and the credits they let through (#25546) by @etiennejouan
  • feat(slack): point the channel welcome at the DM as the private path (#25585) by @abdulrahmancodes
  • feat: add audio playback fallback for call recordings (#25592) by @ehconitin
  • feat(workflow): create and delete workflows through the core API (#25626) by @thomtrp
  • feat(workflow): read the workflow show page through the core API (#25669) by @thomtrp
  • feat(usage-limit): cap webhook calls per workspace at enqueue time (#25673) by @etiennejouan
  • feat(slack): show the thinking status before the assistant context lookups (#25676) by @abdulrahmancodes
  • feat(workflow): add coreWorkflowId to core workflow versions (#25679) by @thomtrp
  • feat(slack): defer rate limited message delivery to a delayed job (#25700) by @abdulrahmancodes
  • feat(server): run server route dispatch jobs ahead of the trigger fan-out (#25701) by @abdulrahmancodes
  • feat(slack): answer the assistant request in the execution that records it (#25702) by @abdulrahmancodes
  • feat(ai-chat): hint @ and / in composer placeholder, add / skill suggestions (#25778) by @FelixMalfait
  • feat(skills): split agent-only skills from user skills, rewrite the catalog (#25798) by @FelixMalfait

πŸ’… Improvements & UX

  • Alias native worker APIs onto window in front components (#24190) by @bosiraphael
  • Support classList in front components (#24191) by @bosiraphael
  • Make the Fathom app publishable and rewrite its listing copy (#25325) by @ehconitin
  • Fix delayed view deletion feedback (#25344) by @Bonapara
  • Add field description tooltips (#25408) by @Bonapara
  • Extract email body text without building a DOM (#25422) by @neo773
  • Record sharing 2/14: add the recordShare hidden standard object and its service (#25425) by @martmull
  • Record sharing 3/14: gate reads and writes on private objects with record share rows (#25426) by @martmull
  • Record sharing 4/14: let a create state who may read the record with shareWith (#25428) by @martmull
  • Add Fathom media storage foundation (#25432) by @ehconitin
  • Import Fathom recording media asynchronously (#25433) by @ehconitin
  • Reconcile stale Fathom media imports (#25434) by @ehconitin
  • Migrate existing Canvas tabs to vertical lists (#25511) by @Bonapara
  • Support explicit widget height behavior (#25512) by @Bonapara
  • Simplify page layout manifest authoring (#25513) by @Bonapara
  • Use existing component for AI chat warnings (#25519) by @Bonapara
  • Delete Fathom webhooks on disconnect (#25520) by @ehconitin
  • Fix app CI fixtures and registry upload limit (#25531) by @Bonapara
  • Stop pruning published translations when a project has no locales folder (#25535) by @Weiko
  • Fix sidebar Link items in folders redirecting to a doubled URL (#25536) by @bosiraphael
  • bump call recorder app version to 1.13.0 (#25538) by @ehconitin
  • Scaffold a locales folder with an empty source catalog (#25539) by @Weiko
  • Add Fathom recording import data model (#25540) by @ehconitin
  • Polish AI chat mode design and actions (#25542) by @Bonapara
  • Clear a Recording Bot On the call recorder cannot honor (#25543) by @ehconitin
  • Offer a DMARC record only when the sending domain has none (#25547) by @neo773
  • Run twenty-ui unit tests on vitest and add a component conformance helper (#25548) by @bosiraphael
  • Add a color scheme toolbar to twenty-ui Storybook with dark catalog stories for Field and Text (#25550) by @bosiraphael
  • Reuse shared status tags and truncate banner messages (#25554) by @Bonapara
  • Stream nx task output so a killed task still prints its stack (#25560) by @neo773
  • Let marketers schedule a campaign for a later send (#25563) by @neo773
  • Stop group email deletion from scanning a cartesian product (#25565) by @neo773
  • Export an application's published translations in the manifest (#25566) by @Weiko
  • [Apps 2-way sync] Pull write translations (#25567) by @Weiko
  • Skip empty built files on upload and report a rejected batch once (#25568) by @Weiko
  • Remove an unused import from defineObject (#25569) by @Weiko
  • Granola 1/8: Add the Granola application scaffold (#25570) by @ehconitin
  • Granola 3/8: Map Granola notes into Call Recordings (#25572) by @ehconitin
  • Granola 4/8: Connect Granola webhooks and live synchronization (#25573) by @ehconitin
  • Granola 5/8: Import Granola history and recover missed updates (#25574) by @ehconitin
  • Granola 6/8: Expose Granola notes to workflows and AI (#25575) by @ehconitin
  • Add Input, InputGroup and Textarea to twenty-ui (#25584) by @bosiraphael
  • Resolve the side panel context store object from the panel location (#25586) by @bosiraphael
  • Bump app version (#25587) by @martmull
  • Snapshot the exported manifest and guard the compared properties in the export spec (#25593) by @Weiko
  • Fix empty relation card vertical padding (#25595) by @Bonapara
  • Add ListItem to twenty-ui (#25596) by @bosiraphael
  • Keep the workspace navigation section visible when it has no items (#25597) by @Weiko
  • Always create app connections at workspace level (#25598) by @FelixMalfait
  • Stop fanning workflowRun.updated events out to webhooks (#25599) by @thomtrp
  • Export views and their children from an installed application (#25600) by @Weiko
  • Restore workflowRun.updated webhooks for explicit subscriptions (#25601) by @thomtrp
  • Write pulled views and standalone view fields as define files (#25606) by @Weiko
  • Add Popover to twenty-ui (#25607) by @bosiraphael
  • Update website changelog through 2.38.1 (#25609) by @Bonapara
  • Add Menu to twenty-ui (#25610) by @bosiraphael
  • Add Tabs compound to twenty-ui (#25612) by @bosiraphael
  • Open onboarding AI chat beside the workspace homepage (#25614) by @Bonapara
  • Move part class-name merging into shared utilities (#25621) by @bosiraphael
  • Move twenty-ui component behavior tests into stories (#25623) by @bosiraphael
  • Export page layouts, tabs and widgets from an installed application (#25624) by @Weiko
  • Add Select compound to twenty-ui (#25625) by @bosiraphael
  • Fix Menu imports after class-name helper rename (#25634) by @bosiraphael
  • Make the billing catalog ready for plan and price evolution (#25635) by @FelixMalfait
  • Add isAuditLogged on field metadata to keep noisy fields off the timeline (#25641) by @FelixMalfait
  • Allow automation and AI agents in the terms of service (#25642) by @FelixMalfait
  • Revert "Revert "Record sharing 5/14: evaluate record shares in memory for events"" (#25650) by @martmull
  • Add a standalone page layout widget slot to the manifest and export widgets placed on existing tabs (#25651) by @Weiko
  • Write pulled page layouts and standalone page layout tabs as define files (#25655) by @Weiko
  • Serialize a workspace's entitlement transition (#25660) by @FelixMalfait
  • Extract frontend snack bar into twenty-ui Toast (#25663) by @bosiraphael
  • Add AlertDialog compound to twenty-ui (#25665) by @bosiraphael
  • Fix dropdown anchoring at non-default interface scales (#25667) by @Bonapara
  • Let a relation field's bookkeeping properties be updated through a sync (#25668) by @Weiko
  • Run direct consumer CI on twenty-ui changes and record known radio failures (#25670) by @bosiraphael
  • Add benchmarks, data residency and zero data retention to the AI model catalog (#25675) by @FelixMalfait
  • Migrate twenty-ui Toggle to Switch (#25678) by @bosiraphael
  • Skip workflow status update when the workflow no longer exists (#25680) by @thomtrp
  • Fix column resize dragging the widget in layout edit mode (#25681) by @bosiraphael
  • Create the inputs-validation fixture fields in one migration instead of twenty-two (#25684) by @Weiko
  • Let app-driven agents reach dashboard and workflow tools (#25685) by @abdulrahmancodes
  • Export an application's navigation menu items (#25687) by @Weiko
  • Fix two matcher defects the first populated benchmark sync exposed (#25690) by @FelixMalfait
  • Resolve Slack mention tokens before the assistant prompt is built (#25694) by @abdulrahmancodes
  • Acknowledge Slack file attachments in the assistant (#25695) by @abdulrahmancodes
  • Deliver the Claude reasoning config and make effort a first-class model parameter (#25696) by @FelixMalfait
  • Write pulled navigation menu items as define files (#25705) by @Weiko
  • Show workspace-shared app connections to every member (#25708) by @abdulrahmancodes
  • Clear logoFileId when the workspace logo is removed (#25711) by @martmull
  • Refresh self-hosted Google default to Gemini 3.8 Flash (#25713) by @twenty-pr-author
  • Increase logic function concurrency (#25714) by @martmull
  • Migrate twenty-ui Radio and RadioGroup (#25715) by @bosiraphael
  • Migrate twenty-ui Slider to Base UI (#25716) by @bosiraphael
  • Backfill twenty-ui front component renderer stories (#25719) by @bosiraphael
  • Fix AWS region validation across partitions (#25720) by @NiklasDah
  • Add batch delivery to database-event-triggered logic functions (#25726) by @martmull
  • Import CalDAV events from servers that omit getetag (#25728) by @neo773
  • Accept CalDAV calendars that do not publish a component set (#25729) by @neo773
  • Score effort variants from the benchmark rows taken at their own effort (#25730) by @FelixMalfait
  • Compare a record relation to the current member's relation in row-level permissions (#25732) by @Weiko
  • Stop pull overwriting a source file that defines no entity (#25739) by @Weiko
  • Write pulled standalone page layout widgets as define files (#25743) by @Weiko
  • Stop calling a local file unknown to the workspace when the export reported it (#25746) by @Weiko
  • Tell pull users their project cannot build what pull just wrote (#25747) by @Weiko
  • Keep a stored file's identifier when its content is uploaded again (#25748) by @Weiko
  • Refuse to pull an application into a project that already defines another (#25750) by @Weiko
  • Never infer deletion for rows a manifest cannot express (#25752) by @Weiko
  • Block private-network SSO issuers and replace the safe-mode toggle with an internal host allowlist (#25756) by @FelixMalfait
  • Restrict AI and Settings access during layout editing (#25760) by @Bonapara
  • Let the e2e local registry accept twenty-ui (#25765) by @Weiko
  • Fill the empty Type column in Skills settings with the owning app (#25766) by @FelixMalfait
  • Read the deprecated flag from the model config when picking a tier default (#25769) by @Weiko
  • Keep only compliance badges on the import-contacts onboarding step (#25774) by @FelixMalfait
  • Propagate SMTP send failures so the email job actually retries (#25776) by @neo773
  • fix iCal parsing: bare CR (0x0D) line breaks instead of the CRLF that… (#25782) by @mcr-ksh
  • Fix CLAUDE.md guard import sources (#25789) by @prastoin
  • Complete call recordings whose Recall transcript is empty (#25793) by @ehconitin
  • Finish call recordings without a transcript when Recall rejects the transcript request (#25794) by @ehconitin
  • Stop re-checking already-warned workspaces every hour in CleanSuspendedWorkspacesJob (#25800) by @etiennejouan
  • Give each Sentry cron monitor its own max runtime (#25801) by @etiennejouan
  • Point pull users at the apply flag that protects what it could not write (#25808) by @Weiko
  • List every kind pull does not export yet (#25811) by @Weiko

πŸ› Bug fixes

  • fix(slack): bound Slack Web API retries to the logic function budget (#25483) by @abdulrahmancodes
  • fix(enterprise): keep self-hosted licenses valid while Stripe retries a failed payment (#25515) by @ijreilly
  • fix(docker): resolve release tags from the twenty/v* namespace and fail on bad downloads (#25524) by @ijreilly
  • fix(front): accept null Actor context.provider (#25532) (#25537) by @grootbro
  • fix(front): report the records an interrupted incremental delete already removed (#25549) by @thomtrp
  • fix(workflow): stop mirroring soft-deleted workflows into core (#25553) by @thomtrp
  • fix(front): persist percentage values that still include a percent sign (#17677) (#25555) by @claxman
  • fix(server): stop upgrade-pending columns from breaking repository updates (#25583) by @FelixMalfait
  • fix(billing): stop granted credits expiring when a period transition misfires (#25603) by @FelixMalfait
  • fix(server): build the install-time SDK layer from the migration's own flat maps (#25608) by @prastoin
  • fix(ai-chat): answer a refused message with what actually clears it (#25622) by @etiennejouan
  • fix(mcp): list connected accounts from the core schema (#25658) by @Hermi941
  • fix(server): bound TimelineActivityRoutingPlanService workspace cache (#25659) by @etiennejouan
  • fix(uploads): cap file size for files-field and application file upload mutations (#25671) by @addyCooks
  • fix(front): reset confirmation modal input when reopened (#25674) by @mydd7
  • fix(slack): keep assistant feedback buttons on long answers (#25693) by @abdulrahmancodes
  • fix(admin-panel): stop calling a metered line item's quantity "seats" (#25698) by @FelixMalfait
  • fix(billing): stop writing a raw ISO timestamp into a credit grant's reason (#25699) by @FelixMalfait
  • fix(workflow): stop email steps sending from another member's account (#25709) by @hktitof
  • fix(apps): preserve vetted status during catalog sync (#25725) by @ehconitin
  • fix: republish twenty-ui as MIT (1.0.0-alpha.2) to resolve stale AGPL artifacts (#25738) by @MauryaQbit
  • fix(messaging): don't delete messages still present in another folder's delta sync (#25751) by @breken-ai
  • fix(ai): keep catalog efforts under an AI_PROVIDERS override and fix tier UI findings (#25753) by @FelixMalfait
  • fix(storybook): prevent oversized Argos screenshots (#25779) by @bosiraphael
  • fix(front): create component instance ids once instead of rewriting them per surface (#25790) by @FelixMalfait
  • fix(front): hide connection provider avatar when there is no logo (#25797) by @martmull
  • fix(front): open the view picker on the id its dropdown listens to (#25799) by @FelixMalfait

πŸ”§ Developer & API

πŸ—οΈ Internal changes (6)
  • docs: add inbound email channel forwarding guides (#25602) by @neo773
  • chore(twenty-ui): update Base UI to 1.8.0 (#25615) by @bosiraphael
  • refactor(server): warm up prebuilt logic functions after the install migration commits (#25672) by @prastoin
  • refactor(server): extract a single LRU eviction primitive (#25733) by @etiennejouan
  • refactor: share floating reference scale calculation (#25762) by @Bonapara
  • refactor(ai): seed the agent and skill settings forms from the loaded record (#25764) by @FelixMalfait

πŸŽ‰ New contributors

Full changelog (201 PRs)
  • Alias native worker APIs onto window in front components (#24190) by @bosiraphael
  • Support classList in front components (#24191) by @bosiraphael
  • feat(search): expose isSearchable on field metadata and make the object search section editable (#25166) by @prastoin
  • feat(record-form): render the record creation form behind a flag (#25203) by @thomtrp
  • feat(core): let apps report a connection auth failure with a reason (#25297) by @abdulrahmancodes
  • Make the Fathom app publishable and rewrite its listing copy (#25325) by @ehconitin
  • Fix delayed view deletion feedback (#25344) by @Bonapara
  • feat(workflow): polish the core workflows index and gate workflow run workspace relations (#25356) by @thomtrp
  • Add field description tooltips (#25408) by @Bonapara
  • feat(workflow): select core workflows and delete them in bulk (#25415) by @thomtrp
  • Extract email body text without building a DOM (#25422) by @neo773
  • Record sharing 2/14: add the recordShare hidden standard object and its service (#25425) by @martmull
  • Record sharing 3/14: gate reads and writes on private objects with record share rows (#25426) by @martmull
  • Record sharing 4/14: let a create state who may read the record with shareWith (#25428) by @martmull
  • feat(call-recorder): toggle to send the bot to all calendar meetings (#25431) by @ehconitin
  • Add Fathom media storage foundation (#25432) by @ehconitin
  • Import Fathom recording media asynchronously (#25433) by @ehconitin
  • Reconcile stale Fathom media imports (#25434) by @ehconitin
  • fix(slack): bound Slack Web API retries to the logic function budget (#25483) by @abdulrahmancodes
  • feat(slack): branch the assistant failure reply on the failure kind (#25484) by @abdulrahmancodes
  • Track application installs and uninstalls with deterministic queue jobs (#25502) by @martmull
  • feat: add create/complete file upload action tools for MCP (#25503) by @Lakshayyy-m
  • Migrate existing Canvas tabs to vertical lists (#25511) by @Bonapara
  • Support explicit widget height behavior (#25512) by @Bonapara
  • Simplify page layout manifest authoring (#25513) by @Bonapara
  • fix(enterprise): keep self-hosted licenses valid while Stripe retries a failed payment (#25515) by @ijreilly
  • Use existing component for AI chat warnings (#25519) by @Bonapara
  • Delete Fathom webhooks on disconnect (#25520) by @ehconitin
  • fix(docker): resolve release tags from the twenty/v* namespace and fail on bad downloads (#25524) by @ijreilly
  • feat(usage-limit): quota limits over the credit allowance period (#25526) by @etiennejouan
  • Fix app CI fixtures and registry upload limit (#25531) by @Bonapara
  • chore: bump version to 2.40.0 (#25534) by @twenty-pr
  • Stop pruning published translations when a project has no locales folder (#25535) by @Weiko
  • Fix sidebar Link items in folders redirecting to a doubled URL (#25536) by @bosiraphael
  • fix(front): accept null Actor context.provider (#25532) (#25537) by @grootbro
  • bump call recorder app version to 1.13.0 (#25538) by @ehconitin
  • Scaffold a locales folder with an empty source catalog (#25539) by @Weiko
  • Add Fathom recording import data model (#25540) by @ehconitin
  • Polish AI chat mode design and actions (#25542) by @Bonapara
  • Clear a Recording Bot On the call recorder cannot honor (#25543) by @ehconitin
  • feat(usage-limit): count quota admits on failure and the credits they let through (#25546) by @etiennejouan
  • Offer a DMARC record only when the sending domain has none (#25547) by @neo773
  • Run twenty-ui unit tests on vitest and add a component conformance helper (#25548) by @bosiraphael
  • fix(front): report the records an interrupted incremental delete already removed (#25549) by @thomtrp
  • Add a color scheme toolbar to twenty-ui Storybook with dark catalog stories for Field and Text (#25550) by @bosiraphael
  • fix(workflow): stop mirroring soft-deleted workflows into core (#25553) by @thomtrp
  • Reuse shared status tags and truncate banner messages (#25554) by @Bonapara
  • fix(front): persist percentage values that still include a percent sign (#17677) (#25555) by @claxman
  • i18n - translations (#25556) by @github-actions
  • i18n - translations (#25557) by @github-actions
  • i18n - translations (#25558) by @github-actions
  • Stream nx task output so a killed task still prints its stack (#25560) by @neo773
  • Let marketers schedule a campaign for a later send (#25563) by @neo773
  • Stop group email deletion from scanning a cartesian product (#25565) by @neo773
  • Export an application's published translations in the manifest (#25566) by @Weiko
  • [Apps 2-way sync] Pull write translations (#25567) by @Weiko
  • Skip empty built files on upload and report a rejected batch once (#25568) by @Weiko
  • Remove an unused import from defineObject (#25569) by @Weiko
  • Granola 1/8: Add the Granola application scaffold (#25570) by @ehconitin
  • Granola 2/8: Add Granola API access and credential settings (#25571) by @ehconitin
  • Granola 3/8: Map Granola notes into Call Recordings (#25572) by @ehconitin
  • Granola 4/8: Connect Granola webhooks and live synchronization (#25573) by @ehconitin
  • Granola 5/8: Import Granola history and recover missed updates (#25574) by @ehconitin
  • Granola 6/8: Expose Granola notes to workflows and AI (#25575) by @ehconitin
  • fix(server): stop upgrade-pending columns from breaking repository updates (#25583) by @FelixMalfait
  • Add Input, InputGroup and Textarea to twenty-ui (#25584) by @bosiraphael
  • feat(slack): point the channel welcome at the DM as the private path (#25585) by @abdulrahmancodes
  • Resolve the side panel context store object from the panel location (#25586) by @bosiraphael
  • Bump app version (#25587) by @martmull
  • Stop reporting handled webhook subscription failures to Sentry (#25591) by @neo773
  • feat: add audio playback fallback for call recordings (#25592) by @ehconitin
  • Snapshot the exported manifest and guard the compared properties in the export spec (#25593) by @Weiko
  • Fix empty relation card vertical padding (#25595) by @Bonapara
  • Add ListItem to twenty-ui (#25596) by @bosiraphael
  • Keep the workspace navigation section visible when it has no items (#25597) by @Weiko
  • Always create app connections at workspace level (#25598) by @FelixMalfait
  • Stop fanning workflowRun.updated events out to webhooks (#25599) by @thomtrp
  • Export views and their children from an installed application (#25600) by @Weiko
  • Restore workflowRun.updated webhooks for explicit subscriptions (#25601) by @thomtrp
  • docs: add inbound email channel forwarding guides (#25602) by @neo773
  • fix(billing): stop granted credits expiring when a period transition misfires (#25603) by @FelixMalfait
  • Write pulled views and standalone view fields as define files (#25606) by @Weiko
  • Add Popover to twenty-ui (#25607) by @bosiraphael
  • fix(server): build the install-time SDK layer from the migration's own flat maps (#25608) by @prastoin
  • Update website changelog through 2.38.1 (#25609) by @Bonapara
  • Add Menu to twenty-ui (#25610) by @bosiraphael
  • Add Tabs compound to twenty-ui (#25612) by @bosiraphael
  • Open onboarding AI chat beside the workspace homepage (#25614) by @Bonapara
  • chore(twenty-ui): update Base UI to 1.8.0 (#25615) by @bosiraphael
  • i18n - website translations (#25619) by @github-actions
  • Move part class-name merging into shared utilities (#25621) by @bosiraphael
  • fix(ai-chat): answer a refused message with what actually clears it (#25622) by @etiennejouan
  • Move twenty-ui component behavior tests into stories (#25623) by @bosiraphael
  • Export page layouts, tabs and widgets from an installed application (#25624) by @Weiko
  • Add Select compound to twenty-ui (#25625) by @bosiraphael
  • feat(workflow): create and delete workflows through the core API (#25626) by @thomtrp
  • i18n - website translations (#25627) by @github-actions
  • Fix Menu imports after class-name helper rename (#25634) by @bosiraphael
  • Make the billing catalog ready for plan and price evolution (#25635) by @FelixMalfait
  • Add isAuditLogged on field metadata to keep noisy fields off the timeline (#25641) by @FelixMalfait
  • Allow automation and AI agents in the terms of service (#25642) by @FelixMalfait
  • Revert "Revert "Record sharing 5/14: evaluate record shares in memory for events"" (#25650) by @martmull
  • Add a standalone page layout widget slot to the manifest and export widgets placed on existing tabs (#25651) by @Weiko
  • Write pulled page layouts and standalone page layout tabs as define files (#25655) by @Weiko
  • Debounce calendar webhook syncs instead of throwing when one is running (#25656) by @neo773
  • Stop servicing webhook subscriptions for suspended workspaces (#25657) by @neo773
  • fix(mcp): list connected accounts from the core schema (#25658) by @Hermi941
  • fix(server): bound TimelineActivityRoutingPlanService workspace cache (#25659) by @etiennejouan
  • Serialize a workspace's entitlement transition (#25660) by @FelixMalfait
  • Extract frontend snack bar into twenty-ui Toast (#25663) by @bosiraphael
  • Add AlertDialog compound to twenty-ui (#25665) by @bosiraphael
  • Fix dropdown anchoring at non-default interface scales (#25667) by @Bonapara
  • Let a relation field's bookkeeping properties be updated through a sync (#25668) by @Weiko
  • feat(workflow): read the workflow show page through the core API (#25669) by @thomtrp
  • Run direct consumer CI on twenty-ui changes and record known radio failures (#25670) by @bosiraphael
  • fix(uploads): cap file size for files-field and application file upload mutations (#25671) by @addyCooks
  • refactor(server): warm up prebuilt logic functions after the install migration commits (#25672) by @prastoin
  • feat(usage-limit): cap webhook calls per workspace at enqueue time (#25673) by @etiennejouan
  • fix(front): reset confirmation modal input when reopened (#25674) by @mydd7
  • Add benchmarks, data residency and zero data retention to the AI model catalog (#25675) by @FelixMalfait
  • feat(slack): show the thinking status before the assistant context lookups (#25676) by @abdulrahmancodes
  • Migrate twenty-ui Toggle to Switch (#25678) by @bosiraphael
  • feat(workflow): add coreWorkflowId to core workflow versions (#25679) by @thomtrp
  • Skip workflow status update when the workflow no longer exists (#25680) by @thomtrp
  • Fix column resize dragging the widget in layout edit mode (#25681) by @bosiraphael
  • Create the inputs-validation fixture fields in one migration instead of twenty-two (#25684) by @Weiko
  • Let app-driven agents reach dashboard and workflow tools (#25685) by @abdulrahmancodes
  • Export an application's navigation menu items (#25687) by @Weiko
  • chore: sync AI model catalog (#25689) by @github-actions
  • Fix two matcher defects the first populated benchmark sync exposed (#25690) by @FelixMalfait
  • chore: sync AI model catalog (#25691) by @github-actions
  • fix(slack): keep assistant feedback buttons on long answers (#25693) by @abdulrahmancodes
  • Resolve Slack mention tokens before the assistant prompt is built (#25694) by @abdulrahmancodes
  • Acknowledge Slack file attachments in the assistant (#25695) by @abdulrahmancodes
  • Deliver the Claude reasoning config and make effort a first-class model parameter (#25696) by @FelixMalfait
  • fix(admin-panel): stop calling a metered line item's quantity "seats" (#25698) by @FelixMalfait
  • fix(billing): stop writing a raw ISO timestamp into a credit grant's reason (#25699) by @FelixMalfait
  • feat(slack): defer rate limited message delivery to a delayed job (#25700) by @abdulrahmancodes
  • feat(server): run server route dispatch jobs ahead of the trigger fan-out (#25701) by @abdulrahmancodes
  • feat(slack): answer the assistant request in the execution that records it (#25702) by @abdulrahmancodes
  • Upgrade the AI SDK to v7 (#25704) by @FelixMalfait
  • Write pulled navigation menu items as define files (#25705) by @Weiko
  • Show workspace-shared app connections to every member (#25708) by @abdulrahmancodes
  • fix(workflow): stop email steps sending from another member's account (#25709) by @hktitof
  • chore: sync AI model catalog (#25710) by @github-actions
  • Clear logoFileId when the workspace logo is removed (#25711) by @martmull
  • Migrate twenty-ui Checkbox to the shared form-control API (#25712) by @bosiraphael
  • Refresh self-hosted Google default to Gemini 3.8 Flash (#25713) by @twenty-pr-author
  • Increase logic function concurrency (#25714) by @martmull
  • Migrate twenty-ui Radio and RadioGroup (#25715) by @bosiraphael
  • Migrate twenty-ui Slider to Base UI (#25716) by @bosiraphael
  • Register the GraphQL resolver name map cache provider in the worker (#25717) by @prastoin
  • Backfill twenty-ui front component renderer stories (#25719) by @bosiraphael
  • Fix AWS region validation across partitions (#25720) by @NiklasDah
  • feat(ai): replace model pickers with a five-tier model slider (#25721) by @FelixMalfait
  • fix(apps): preserve vetted status during catalog sync (#25725) by @ehconitin
  • Add batch delivery to database-event-triggered logic functions (#25726) by @martmull
  • Import CalDAV events from servers that omit getetag (#25728) by @neo773
  • Accept CalDAV calendars that do not publish a component set (#25729) by @neo773
  • Score effort variants from the benchmark rows taken at their own effort (#25730) by @FelixMalfait
  • chore: sync AI model catalog (#25731) by @github-actions
  • Compare a record relation to the current member's relation in row-level permissions (#25732) by @Weiko
  • refactor(server): extract a single LRU eviction primitive (#25733) by @etiennejouan
  • fix: republish twenty-ui as MIT (1.0.0-alpha.2) to resolve stale AGPL artifacts (#25738) by @MauryaQbit
  • Stop pull overwriting a source file that defines no entity (#25739) by @Weiko
  • Write pulled standalone page layout widgets as define files (#25743) by @Weiko
  • chore: sync AI model catalog (#25745) by @github-actions
  • Stop calling a local file unknown to the workspace when the export reported it (#25746) by @Weiko
  • Tell pull users their project cannot build what pull just wrote (#25747) by @Weiko
  • Keep a stored file's identifier when its content is uploaded again (#25748) by @Weiko
  • Refuse to pull an application into a project that already defines another (#25750) by @Weiko
  • fix(messaging): don't delete messages still present in another folder's delta sync (#25751) by @breken-ai
  • Never infer deletion for rows a manifest cannot express (#25752) by @Weiko
  • fix(ai): keep catalog efforts under an AI_PROVIDERS override and fix tier UI findings (#25753) by @FelixMalfait
  • Block private-network SSO issuers and replace the safe-mode toggle with an internal host allowlist (#25756) by @FelixMalfait
  • Align twenty-ui with SDK package versions (#25758) by @bosiraphael
  • Restrict AI and Settings access during layout editing (#25760) by @Bonapara
  • refactor: share floating reference scale calculation (#25762) by @Bonapara
  • refactor(ai): seed the agent and skill settings forms from the loaded record (#25764) by @FelixMalfait
  • Let the e2e local registry accept twenty-ui (#25765) by @Weiko
  • Fill the empty Type column in Skills settings with the owning app (#25766) by @FelixMalfait
  • Read the deprecated flag from the model config when picking a tier default (#25769) by @Weiko
  • Keep only compliance badges on the import-contacts onboarding step (#25774) by @FelixMalfait
  • chore: sync AI model catalog (#25775) by @github-actions
  • Propagate SMTP send failures so the email job actually retries (#25776) by @neo773
  • feat(ai-chat): hint @ and / in composer placeholder, add / skill suggestions (#25778) by @FelixMalfait
  • fix(storybook): prevent oversized Argos screenshots (#25779) by @bosiraphael
  • fix iCal parsing: bare CR (0x0D) line breaks instead of the CRLF that… (#25782) by @mcr-ksh
  • Migrate Status to the new twenty-ui API (#25785) by @bosiraphael
  • Migrate Tag to the new twenty-ui API (#25786) by @bosiraphael
  • Fix CLAUDE.md guard import sources (#25789) by @prastoin
  • fix(front): create component instance ids once instead of rewriting them per surface (#25790) by @FelixMalfait
  • Complete call recordings whose Recall transcript is empty (#25793) by @ehconitin
  • Finish call recordings without a transcript when Recall rejects the transcript request (#25794) by @ehconitin
  • fix(front): hide connection provider avatar when there is no logo (#25797) by @martmull
  • feat(skills): split agent-only skills from user skills, rewrite the catalog (#25798) by @FelixMalfait
  • fix(front): open the view picker on the id its dropdown listens to (#25799) by @FelixMalfait
  • Stop re-checking already-warned workspaces every hour in CleanSuspendedWorkspacesJob (#25800) by @etiennejouan
  • Give each Sentry cron monitor its own max runtime (#25801) by @etiennejouan
  • Point pull users at the apply flag that protects what it could not write (#25808) by @Weiko
  • List every kind pull does not export yet (#25811) by @Weiko

Full Changelog: twenty/v2.39.0...twenty/v2.40.0

Don't miss a new twenty release

NewReleases is sending notifications on new releases.