Etienne and GitHub
70f48ba445
Security - Add complexity max on gql queries ( #16069 )
...
closes https://github.com/twentyhq/private-issues/issues/348
closes https://github.com/twentyhq/private-issues/issues/352
closes https://github.com/twentyhq/private-issues/issues/353
closes https://github.com/twentyhq/private-issues/issues/354
2025-11-26 18:36:21 +01:00
Charles Bochet and GitHub
5202e2b2db
Refactor error messages messaging ( #16094 )
...
We should try catch locally gmail errors when:
- fetching message list
- fetching messages
- refreshing aliases
- fetching folders
2025-11-26 18:03:44 +01:00
Raphaël Bosi and GitHub
fc4dbb80de
[DASHBOARDS] Create display legend setting + animations ( #16089 )
...
## PR Description
- Create display legend setting
- Create pagination inside the legend
- Animate the legend on enter/exit
- Animate the transition between pages
## Video QA
https://github.com/user-attachments/assets/a68a4ea3-195f-4399-88f7-f83bc1a39cc4
2025-11-26 17:03:23 +00:00
Guillim and GitHub
7f441d741b
Timelineactivites-views-seeder ( #16103 )
...
seeder for Timelineactivites views
Fixes https://github.com/twentyhq/core-team-issues/issues/1904
<img width="850" height="348" alt="CleanShot 2025-11-26 at 17 30 32"
src="https://github.com/user-attachments/assets/41a311c1-0b60-4201-885f-d0e8400dd6d5 "
/>
2025-11-26 18:00:06 +01:00
Raphaël Bosi and GitHub
60e69f92d9
[DASHBOARDS] Add pie chart empty state ( #16100 )
...
When no data is available, we display a gray circle instead of nothing.
https://github.com/user-attachments/assets/54db403b-739c-43fb-b422-8dcdfb6281fb
2025-11-26 17:23:52 +01:00
c82c4a4507
i18n - translations ( #16101 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-26 17:21:44 +01:00
neo773 and GitHub
4120c191f8
fix scheduling after folder actions are processed ( #16097 )
2025-11-26 17:09:06 +01:00
Raphaël Bosi and GitHub
8dc182d659
Add New Widget page layout header information ( #16098 )
...
## Before
<img width="822" height="384" alt="CleanShot 2025-11-26 at 16 22 12@2x"
src="https://github.com/user-attachments/assets/014e2efc-c4e4-4140-b473-f09ac56855b5 "
/>
## After
<img width="818" height="352" alt="CleanShot 2025-11-26 at 16 21 53@2x"
src="https://github.com/user-attachments/assets/5aa961a9-7d06-47b7-ad5d-6b5b9714a0d8 "
/>
2025-11-26 16:38:36 +01:00
Raphaël Bosi and GitHub
c34f798a9c
Reorder colors to have a proper gradient ( #16096 )
...
## Before
<img width="638" height="1712" alt="CleanShot 2025-11-26 at 15 28 47@2x"
src="https://github.com/user-attachments/assets/a8ebadf7-a642-46c1-bb96-067e8b451059 "
/>
## After
<img width="638" height="1712" alt="CleanShot 2025-11-26 at 15 26 15@2x"
src="https://github.com/user-attachments/assets/d276240c-4b34-4ea3-954d-2a20a94ddf60 "
/>
2025-11-26 14:40:45 +00:00
nitin and GitHub
6fcb05d9b3
part 3 of on click bar to filters: add sort plus some normalizations ( #16075 )
2025-11-26 19:48:48 +05:30
Baptiste Devessier and GitHub
dc2c2c413c
[Workflows] Fix filtering on relative date ( #16087 )
...
https://github.com/user-attachments/assets/4079d59e-0550-401f-a29b-b235edd8ed48
Closes https://github.com/twentyhq/twenty/issues/16054
2025-11-26 14:45:05 +01:00
Paul Rastoin and GitHub
996ccd8353
Non composite and non morph or relation field update fix ( #16091 )
2025-11-26 11:54:04 +00:00
Paul Rastoin and GitHub
74eab77539
Refactor upgrade devx to allow configuring workspaces status to pass over ( #16066 )
...
# Introduction
We need to be able to create custom workspace application on all
workspaces, even pending and ongoing etc
Right now the upgrade devx only allows and expect active or suspended
workspace to be passed to runOnWorkspace.
## WorkspacesMigrationRunner
Created an intermediate class `WorkspacesMigrationRunner` that expect an
array `WorkspaceStatus` to be fetched for the current command to be run
on
The `ActiveOrSuspendedCommandRunner` statically passes both `SUSPENDED`
and `ACTIVE`, whereas the create workspace custom application passed all
the enum values
## DataSource
Workspace that are not fully init don't have a `workspace_schema` so
they don't have `dataSource`
Made a not very elegant check to see if current workspace we're about to
create dataSource on has one historically
Which means that dataSource is now optional, it had only one impact on
an existing command and the desired devx will become consuming existing
services that do not expect dataSource ( or at least yet )
2025-11-26 12:53:33 +01:00
nitin and GitHub
0d34651d5e
pie chart data labels, slice gap and initial animate presence on widget card header ( #16084 )
...
closes:
https://discord.com/channels/1130383047699738754/1442899090047373463
https://discord.com/channels/1130383047699738754/1438537119248285758
pie chart labels:
https://github.com/user-attachments/assets/d8f8e164-745f-4601-bee7-11a655ccd9b6
fixed header animations:
https://github.com/user-attachments/assets/76587a6d-53c4-4a11-a546-b4c83754870a
2025-11-26 15:02:48 +05:30
4d0c469157
Fix message import scheduled ( #16071 )
...
Co-authored-by: neo773 <neo773@protonmail.com >
2025-11-26 08:54:53 +01:00
Marie and GitHub
6c1c78ea3d
[fix] User have no firstName nor lastName ( #16057 )
...
Closes https://github.com/twentyhq/twenty/issues/15692 , fixes
https://github.com/twentyhq/twenty/issues/14678
The issue was:
- When a user is signing up, they are asked for their first name and
last name with which we fulfill their workspaceMember entity for the
workspace they are signing up to (which is the one they are creating if
they are not joining an existing workspace). user.firstName and
user.lastName remain empty
- When we create a record, we are using user.firstName and user.lastName
to fulfill the text field "createdByName", which intends to save the
name of the creator at the moment of the creation. This field is then
use 1) when filtering on createdBy (as a trick to be able to filter by
this, since we don't have filters on nested fields, ie we dont have
filters on person.createdByWorkspaceMember) 2) to display the user
creator when a user has left a workspace - otherwise we rely on the
dynamic createdByWorkspaceMember.firstName and lastName
- So filtering on createdBy was not working as createdByName is empty.
We did not see that in dev mode because we have seeded users with names
The fix
- When we create a record, we use workspaceMember.firstName and
workspaceMember.lastName as we should.
- When an existing user joins a workspace, they are asked to give their
name again so that we set their workspaceMember name
- This will not fix the history of the records (they will still have
createdByName empty so the filter will not work properly), but a command
to fix it would be very long as it would iterate over all the records of
each active workspace
The long-term view is to get rid of user and to store the name in
userWorkspace
2025-11-25 17:23:43 +00:00
Charles Bochet and GitHub
b1c03b533f
Fix upgrade command messaging ( #16067 )
2025-11-25 18:14:51 +01:00
neo773 and GitHub
f3416d435c
move folder cron to message-list-fetch ( #16062 )
2025-11-25 18:06:38 +01:00
neo773 and GitHub
1740a2217a
Update channel sync service to immediately enqueue jobs ( #16064 )
2025-11-25 18:05:32 +01:00
Baptiste Devessier and GitHub
0bf2d13832
[Side Panel V2] Bring back old container ( #16065 )
...
## Before
<img width="1446" height="780" alt="image"
src="https://github.com/user-attachments/assets/fa25f22d-b979-4a8f-9989-004d07f862d7 "
/>
## After
<img width="3456" height="2160" alt="CleanShot 2025-11-25 at 17 35
59@2x"
src="https://github.com/user-attachments/assets/a87880c4-3faa-47c3-9215-34afc36270a3 "
/>
2025-11-25 18:04:56 +01:00
Baptiste Devessier and GitHub
21543b6803
Don't recompute output schema when moving trigger ( #16061 )
...
Position changes don't affect the trigger's output schema, so
recomputing it is unnecessary. For webhook triggers specifically, the
backend can't reconstruct the schema (it returns `{}`), which overwrites
the frontend-built schema from `expectedBody`. Passing `{
computeOutputSchema: false }` prevents this data loss while avoiding
wasteful computation.
## Demo
https://github.com/user-attachments/assets/116af221-0d09-4dda-ad40-3301fa610bcd
Closes https://github.com/twentyhq/twenty/issues/15982
2025-11-25 17:37:32 +01:00
Etienne and GitHub
71724de7dd
Security - disable gql introspection for non-auth user ( #16047 )
...
closes https://github.com/twentyhq/private-issues/issues/351
closes https://github.com/twentyhq/private-issues/issues/350
Before, introspection query works without token. After, fails.
```
query IntrospectionQuery {
__schema {
queryType {
name
}
mutationType {
name
}
subscriptionType {
name
}
types {
...FullType
}
directives {
name
description
locations
args {
...InputValue
}
}
}
}
fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}
fragment InputValue on __InputValue {
name
description
type {
...TypeRef
}
defaultValue
}
fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
```
2025-11-25 15:39:29 +01:00
Raphaël Bosi and GitHub
42bba3de52
Fix chart limits for two-dimensional group by ( #16056 )
...
The limit wasn't working properly for two dimensional stacked charts.
This PR fixes this.
2025-11-25 15:31:25 +01:00
Charles Bochet and GitHub
8455ecc3e8
Add import scheduled status to messaging sync ( #16058 )
...
We have introduced to new syncStage statuses:
`messageChannel.MESSAGES_IMPORT_SCHEDULED` and
`calendarChannel.CALENDAR_EVENTS_IMPORT_SCHEDULED`
We need to make sure all existing workspaces have it
2025-11-25 15:27:58 +01:00
825728b1c4
i18n - translations ( #16059 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-25 15:20:59 +01:00
Raphaël Bosi and GitHub
6d141c2439
[DASHBOARDS] Pie Chart ( #16048 )
...
## Description
- Connect Pie Chart to the backend
- Update from the old design to the new design
- Switch seamlessly from/to other types of chart from the Pie Chart by
converting the configuration
Note: There are a couple things to implement before the pie chart is
ready to go live:
- Add a new setting on Bar, Line and Pie chart to hide and display
legends (toggle)
- Add data labels next to each slice
## Video QA
https://github.com/user-attachments/assets/b1561e32-0434-43ad-8855-d617b209ce27
2025-11-25 14:30:16 +01:00
BOHEUS and GitHub
88fbe6c51d
Updated by leftover nitpick ( #16040 )
...
Nitpicks from #15937
2025-11-25 14:28:37 +01:00
nitin and GitHub
3be3c4e965
part 2 of filter/sort drill down from charts ( #16013 )
...
in this PR, we will handle simple filter translations (ie, fields that
use the contains operand)
2025-11-25 18:56:55 +05:30
Etienne and GitHub
2028a8f9be
Null equivalence - Fix ( #16050 )
...
@charlesBochet
In workflow codebase, NULL (instead of empty object) is expected on
workflow version object step field, when a new workflow is created for
example.
(packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts
- 42)
This case is not isolated and it creates many issues.
We decided to format NULL value to equivalent (empty string for text
field, empty object for raw_json) but it seems it complicates the dev x.
To unlock @Devessier I prefer revert the logic, the time we discuss how
to solve this cases.
2025-11-25 14:07:32 +01:00
nitin and GitHub
ab3d48383b
dashboards fast follows: tabs border changed to outline and legends factorization ( #16049 )
...
closes
https://discord.com/channels/1130383047699738754/1440633019042889828
https://discord.com/channels/1130383047699738754/1442819106880356363
2025-11-25 18:08:09 +05:30
53509360ff
i18n - docs translations ( #16053 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-25 13:23:06 +01:00
26169a2136
i18n - translations ( #16052 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-25 12:46:03 +01:00
Félix Malfait and GitHub
e7ebf51e50
Replace agent handoff system with planning-based router ( #16003 )
...
## Overview
This PR replaces the dynamic agent handoff system with a more
predictable planning-based router that decides upfront how to handle
multi-agent coordination.
## Major Changes
### 🔄 Architecture Shift: Handoffs → Planning
**Removed:**
- `AgentHandoffEntity` and handoff tracking system
- `AgentHandoffService` and `AgentHandoffExecutorService`
- Dynamic agent-to-agent transfers during execution
- Handoff tool generation and description templates
**Added:**
- `AiRouterService` with two strategies: `simple` (single agent) and
`planned` (multi-agent)
- `AgentPlanExecutorService` for executing multi-step plans
- Plan validation (cycle detection, dependency resolution)
- `UnifiedRouterResult` type with discriminated union
### 🤖 New Standard Agents
Added two new specialized agents:
- **Researcher Agent**: Web search, fact-finding, competitive
intelligence
- **Code Agent**: TypeScript function generation for serverless
workflows
### 🏗️ Router Refactoring (Latest)
Split router responsibilities into focused services:
- `AiRouterStrategyDeciderService`: Decides simple vs planned strategy
- `AiRouterPlanGeneratorService`: Generates and validates execution
plans
- `AiRouterService`: Coordinates between services (reduced from 426→275
lines)
### ⚙️ Configuration Improvements
- Added `outputStrategy` to agent definitions (`direct` vs `synthesize`)
- Removed hardcoded special cases for workflow-builder
- Added `plannerModel` field to workspace entity
- Increased `MAX_STEPS` from 10 to 25 for complex workflows
### 📝 Agent Prompt Refinements
Significantly simplified prompts for better clarity:
- Workflow Builder: 51→36 lines
- Helper: 49→28 lines
- Data Manipulator: Enhanced with sorting guidance
### 🔍 Enhanced Debugging
- Plan reasoning and step count in data message parts
- Router debug info with token usage tracking
- Better logging throughout execution pipeline
## Benefits
1. **Simpler Mental Model**: Router decides upfront vs dynamic transfers
2. **Better Predictability**: Users see the plan before execution
3. **Cleaner Architecture**: SRP with focused services
4. **Configuration Over Code**: Agent behavior via config, not hardcoded
logic
5. **Plan Validation**: Catches invalid dependencies and cycles
## Migration Notes
- Database migration removes `agentHandoff` table
- Adds `plannerModel` column to workspace table
- No API breaking changes (agent endpoints unchanged)
## Testing
- Integration tests updated to remove handoff dependencies
- Agent tool test utilities simplified
- Plan validation covered by new logic
## Next Steps (Future PRs)
- Parallel execution of independent plan steps
- Dynamic re-planning based on results
- Plan caching for common routing patterns
- Error recovery strategies in plan executor
2025-11-25 12:10:14 +01:00
Abdullah. and GitHub
3c0ae49a23
Clicking outside inline fields on record page saves the value. ( #16042 )
...
Closes #15957
The core problem: `handleChange` calls `setDraftValue`, but when blur
fires, `handleClickOutside` runs in the same event turn and uses
the `draftValue` captured in its closure from the last render. React
hasn’t re-rendered yet, so that captured `draftValue` is stale. Recoil
atom writes are synchronous, but the render that would update the
closure happens on the next turn.
I considered deferring `handleClickOutside` to the next tick
(setTimeout/Promise), but that’s a timing hack: it makes focus/blur
ordering unpredictable (inline cells, tables, other listeners), risks
double triggers, and can fire after unmount. Another option was to
duplicate the `handleChange` logic inside `handleClickOutside`
(screenshot), but that defeats having draft state in one place.
<p align="center">
<img width="496" height="332" alt="const nextSecondaryLinks =
updatedLinks slice (1);"
src="https://github.com/user-attachments/assets/638e2bcf-871b-4b53-9124-c8489c5db530 "
/>
</p>
The clean solution is to read the current draft from a Recoil snapshot
at call time inside `handleClickOutside`. Snapshot reads pull the latest
atom value (including synchronous `setDraftValue` that just ran) even
before a re-render occurs, so they’re not subject to the stale closure.
That way, blur uses the up-to-date draft without timing hacks or
duplicated logic.
MultiItemFieldInput is used in four places. Each of them contains the
updated code.
2025-11-25 11:37:37 +01:00
3e584c3d5f
i18n - docs translations ( #16044 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-25 11:21:42 +01:00
a47b7dfed0
i18n - translations ( #16041 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-25 10:36:15 +01:00
Marie and GitHub
46d1ea6505
[groupBy] groupBy relation fields ( #15951 )
...
Example query
Here person has
- a N - 1 relationship with company
- a N - 1 morph relationship with pet or company
<img width="862" height="374" alt="image"
src="https://github.com/user-attachments/assets/59bc9b82-c943-43de-ad82-d3393b76904b "
/>
<img width="415" height="629" alt="image"
src="https://github.com/user-attachments/assets/9a3176bc-99cd-4983-8611-68ca3a2cf527 "
/>
truncated response
<img width="299" height="447" alt="image"
src="https://github.com/user-attachments/assets/45af0322-9e66-4eae-8353-6c0dda487bbe "
/>
We don't allow grouping by relations of relations.
Left to do
- rest api
- tests on permissions
2025-11-25 09:03:16 +00:00
neo773 and GitHub
316aec3c40
fix: prevent NUMERIC field type creation via API ( #16038 )
...
Block users from creating NUMERIC, POSITION, and TS_VECTOR fields via
the API as these are system-only types. Users should use NUMBER instead
of NUMERIC.
/closes #16023
2025-11-25 09:51:48 +01:00
7109abc311
fix: Invisible content after closing the settings on mobile ( #15971 )
...
## Description
- This PR address https://github.com/twentyhq/twenty/issues/15958
- updated settings and main with condition to navigate to
defaultHomePagePath for main page
- updated search with context before opening search hence it resolve the
issue of search showing blank on settings page
## Before
https://github.com/user-attachments/assets/26eb50a0-fb59-4f70-9647-b8150dfdfa40
## After
https://github.com/user-attachments/assets/436fd869-fc0f-4921-98b9-d5eafa67a07f
---------
Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu >
2025-11-24 19:51:04 +01:00
Weiko and GitHub
04562b11fb
Migrate metadata cache ( #16030 )
...
## Context
Deprecating legacy ObjectMetadata from cache in favor of flat entities.
Introducing utils to build byName/byNameSingular/byNamePlural in
isolated cases
## Next
- I had to introduce a util to build from flat to legacy
objectMetadataMaps, we should instead use flat maps directly when needed
(datasource, schema generation, etc)
- Deprecate metadata version in the cache
- Use the new cache strategy for flat entities with permissions and
feature flags and inject in the global datasource context
2025-11-24 19:50:47 +01:00
Raphaël Bosi and GitHub
26e2fe349f
Fix page layout widget deletion ( #16035 )
...
With the new side panel, we are able to delete a widget with the side
panel still open. This caused the app to crash because we threw when the
widget id wasn't defined.
This PR fixes this by closing the side panel in the delete action and by
returning null instead of throwing.
## Before
https://github.com/user-attachments/assets/092bfe62-82dc-4d83-9967-1cc753ecf55e
## After
https://github.com/user-attachments/assets/8bed6cc5-961b-4112-8cf5-e587865d14da
2025-11-24 19:50:10 +01:00
Charles Bochet and GitHub
b2472b30c4
Add logs to debug user being disconnected randomly ( #16037 )
...
As per title, just adding logs to troubleshoot:
https://github.com/twentyhq/twenty/issues/13103
2025-11-24 19:49:02 +01:00
30b6907c44
i18n - docs translations ( #16036 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2025-11-24 19:22:22 +01:00
Etienne and GitHub
208c0857ee
common api - null equivalence ( #15926 )
...
closes https://github.com/twentyhq/core-team-issues/issues/1629
To do before requesting review :
- filter update
Migration to come in an other PR
Strat :
1/ Null transformation
- [x] Transform NULL equivalent value to NULL in field validation in
common api - pre-query - with feature flag
- [ ] Same logic in ORM (Not done, complex to handle feature flag here)
- [x] Transform NULL value to equivalent in data formatting in ORM -
post-query
2/ Migration (in other PR) for fieldMetadata not nullable with default
defaultValue (empty string, ...)
- [ ] Remove NOT NULL db constraint
- [ ] Update record value to NULL
- [ ] Update field metadata : isNullable:true
- [ ] Update uniqueIndex whereClause (also for standard uniqueIndex)
- [ ] Activate feature flag
3/ Update metadata creation
- [x] No more default default value
- [x] Update standard field nullability
- [x] Remove index default whereClause for standard field
4/ Update filter
- [x] When filtering on NULL or empty string, be sure all records are
returned (the one with NULL + the one with "")
5/ Test
- [ ] Strat. to do
2025-11-24 18:57:47 +01:00
3ed6d2a16b
i18n - translations ( #16034 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
v1.11.6
2025-11-24 18:20:39 +01:00
Paul Rastoin and GitHub
439adc6ac0
Restore transaction on WorkspaceCustomApplicationIdNonNullable1763977334519 failure ( #16032 )
...
# Introduction
When a transaction query fails it gets aborted, even if we catch the js
exception typeorm ack it and fails
By adding a save point we isolate the issue and restore the transaction
🥷
## Through database:migrate:prod
Tested but lost logs
## Upgrade
```ts
➜ twenty-server git:(fix-migration-runner) ✗ npx nx command twenty-server upgrade
✔ 3/3 dependent project tasks succeeded [3 read from cache]
Hint: you can run the command with --verbose to see the full dependent project outputs
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> nx run twenty-server:build [existing outputs match the cache, left as is]
> rimraf dist
> nest build --path ./tsconfig.build.json
> SWC Running...
Successfully compiled: 3747 files with swc (65.82ms)
> nx run twenty-server:command upgrade
query: SELECT * FROM current_schema()
query: SELECT version();
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [NestFactory] Starting Nest application...
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [InstanceLoader] CommandRootModule dependencies initialized
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [InstanceLoader] CommandModule dependencies initialized
// ...
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [InstanceLoader] WorkflowApiModule dependencies initialized
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [InstanceLoader] AuthModule dependencies initialized
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [PgPoolSharedService] Pool sharing will use max 10 connections per pool with 600000ms idle timeout and allowExitOnIdle=true
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [PgPoolSharedService] pg.Pool patched successfully by this service instance.
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [PgPoolSharedService] Pg pool sharing initialized - pools will be shared across tenants
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] No active pg pools to log stats for
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] Pool statistics logging enabled (30s interval)
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [PgPoolSharedService] Created new shared pg Pool for key "localhost|5432|postgres||no-ssl" with 10 max connections and 600000 ms idle timeout. Total pools: 1
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: New connection established
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
[Nest] 82844 - 11/24/2025, 6:05:11 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [DatabaseConfigDriver] [INIT] Loading initial config variables from database
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [DatabaseConfigDriver] [INIT] Config variables loaded: 0 values found in DB, 59 falling to env vars/defaults
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [UpgradeCommand] Initialized upgrade context with:
- currentVersion (migrating to): 1.12.0
- fromWorkspaceVersion: 1.11.0
- 3 commands
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [UpgradeCommand] Running global database migrations
[Nest] 82844 - 11/24/2025, 6:05:11 PM LOG [UpgradeCommand] Running core datasource migrations...
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [UpgradeCommand] query: SELECT * FROM current_schema()
query: CREATE EXTENSION IF NOT EXISTS "uuid-ossp"
query: SELECT version();
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'core' AND "table_name" = '_typeorm_migrations'
query: SELECT * FROM "core"."_typeorm_migrations" "_typeorm_migrations" ORDER BY "id" DESC
46 migrations are already loaded in the database.
47 migrations were found in the source code.
AddCanBeUninstalledColumnToApplication1763731277403 is the last executed migration. It was executed on Fri Nov 21 2025 14:21:17 GMT+0100 (Central European Standard Time).
1 migrations are new migrations must be executed.
query: START TRANSACTION
query: SAVEPOINT sp_workspace_custom_application_id_non_nullable
query: ALTER TABLE "core"."workspace" DROP CONSTRAINT "FK_3b1acb13a5dac9956d1a4b32755"
query: ALTER TABLE "core"."workspace" ALTER COLUMN "workspaceCustomApplicationId" SET NOT NULL
query failed: ALTER TABLE "core"."workspace" ALTER COLUMN "workspaceCustomApplicationId" SET NOT NULL
error: error: column "workspaceCustomApplicationId" of relation "workspace" contains null values
query: ROLLBACK TO SAVEPOINT sp_workspace_custom_application_id_non_nullable
query: RELEASE SAVEPOINT sp_workspace_custom_application_id_non_nullable
query: INSERT INTO "core"."_typeorm_migrations"("timestamp", "name") VALUES ($1, $2) -- PARAMETERS: [1763977334519,"WorkspaceCustomApplicationIdNonNullable1763977334519"]
Migration WorkspaceCustomApplicationIdNonNullable1763977334519 has been executed successfully.
query: COMMIT
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [UpgradeCommand] Database migrations completed successfully
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [UpgradeCommand] Running command on workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 1/2
Computing new Datasource for cacheKey: 20202020-1c25-4d02-bf25-6aeccf7ea419-10 out of 0
[Nest] 82844 - 11/24/2025, 6:05:12 PM DEBUG [PgPoolSharedService] Reusing existing pg Pool for key "localhost|5432|postgres||no-ssl"
[Nest] 82844 - 11/24/2025, 6:05:12 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
[Nest] 82844 - 11/24/2025, 6:05:12 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
query: SELECT * FROM current_schema()
[Nest] 82844 - 11/24/2025, 6:05:12 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
query: SELECT version();
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [UpgradeCommand] Upgrading workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 from=1.11.0 to=1.12.0 1/2
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [CreateWorkspaceCustomApplicationCommand] Checking standard applications for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [CreateWorkspaceCustomApplicationCommand] 20202020-1c25-4d02-bf25-6aeccf7ea419 skipping custom workspace application creation as already exists
query failed: ALTER TABLE "core"."workspace" ALTER COLUMN "workspaceCustomApplicationId" SET NOT NULL
error: error: column "workspaceCustomApplicationId" of relation "workspace" contains null values
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceCustomApplicationIdNonNullableCommand] Rollbacking WorkspaceCustomApplicationIdNonNullableCommand: column "workspaceCustomApplicationId" of relation "workspace" contains null values
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [SyncWorkspaceMetadataCommand] Running workspace sync for workspace: 20202020-1c25-4d02-bf25-6aeccf7ea419 (0 out of 2)
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Syncing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Syncing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncObjectMetadataService] Comparing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncObjectMetadataService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncObjectMetadataService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncObjectMetadataService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Workspace object migrations took 50.206083000000035ms
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Workspace field migrations took 79.43987500000003ms
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataRelationService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataRelationService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncFieldMetadataRelationService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Workspace relation migrations took 91.85295899999983ms
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncIndexMetadataService] Syncing index metadata
[Nest] 82844 - 11/24/2025, 6:05:12 PM LOG [WorkspaceSyncMetadataService] Workspace index migrations took 153.78104199999962ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace object metadata identifiers took 130.9623330000004ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncRoleService] Syncing standard role metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace role migrations took 2.154790999999932ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncAgentService] Syncing standard agent.
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace agent migrations took 2.3623329999991256ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace migrations save took 5.95837500000016ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Executing pending migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Execute migrations took 66.94295799999963ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SyncWorkspaceMetadataCommand] Finished synchronizing workspace.
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SetStandardApplicationNotUninstallableCommand] Checking workspace applications for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SetStandardApplicationNotUninstallableCommand] Successfully updated workspace application
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [UpgradeCommand] Upgrade for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 completed.
PromiseMemoizer Event: A WorkspaceDataSource for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 is being cleared. Actual pool closure managed by PgPoolSharedService. Not calling dataSource.destroy().
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [UpgradeCommand] Running command on workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db 2/2
Computing new Datasource for cacheKey: 3b8e6458-5fc1-4e63-8563-008ccddaa6db-6 out of 0
[Nest] 82844 - 11/24/2025, 6:05:13 PM DEBUG [PgPoolSharedService] Reusing existing pg Pool for key "localhost|5432|postgres||no-ssl"
[Nest] 82844 - 11/24/2025, 6:05:13 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
[Nest] 82844 - 11/24/2025, 6:05:13 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
query: SELECT * FROM current_schema()
[Nest] 82844 - 11/24/2025, 6:05:13 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Client acquired from pool
query: SELECT version();
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [UpgradeCommand] Upgrading workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db from=1.11.0 to=1.12.0 2/2
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [CreateWorkspaceCustomApplicationCommand] Checking standard applications for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [CreateWorkspaceCustomApplicationCommand] Successfully create workspace custom application
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceCustomApplicationIdNonNullableCommand] Successfully run WorkspaceCustomApplicationIdNonNullableCommand
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SyncWorkspaceMetadataCommand] Running workspace sync for workspace: 3b8e6458-5fc1-4e63-8563-008ccddaa6db (1 out of 2)
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Syncing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Syncing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncObjectMetadataService] Comparing standard objects and fields metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncObjectMetadataService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncObjectMetadataService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncObjectMetadataService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace object migrations took 19.26008400000046ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace field migrations took 31.371917000000394ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataRelationService] Updating workspace metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataRelationService] Generating migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncFieldMetadataRelationService] Saving migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace relation migrations took 36.84983300000022ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncIndexMetadataService] Syncing index metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace index migrations took 43.85666599999968ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace object metadata identifiers took 74.27345799999966ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncRoleService] Syncing standard role metadata
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace role migrations took 1.3081249999995634ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncAgentService] Syncing standard agent.
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace agent migrations took 0.7992909999993572ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Workspace migrations save took 2.1899590000002718ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Executing pending migrations
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [WorkspaceSyncMetadataService] Execute migrations took 33.817165999999816ms
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SyncWorkspaceMetadataCommand] Finished synchronizing workspace.
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SetStandardApplicationNotUninstallableCommand] Checking workspace applications for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [SetStandardApplicationNotUninstallableCommand] Successfully updated workspace application
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [UpgradeCommand] Upgrade for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db completed.
PromiseMemoizer Event: A WorkspaceDataSource for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db is being cleared. Actual pool closure managed by PgPoolSharedService. Not calling dataSource.destroy().
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [UpgradeCommand] Command completed!
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [PgPoolSharedService] pg Pool for key "localhost|5432|postgres||no-ssl" has been closed. Remaining pools: 0
[Nest] 82844 - 11/24/2025, 6:05:13 PM DEBUG [PgPoolSharedService] Pool[localhost|5432|postgres||no-ssl]: Connection removed from pool
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [PgPoolSharedService] onApplicationShutdown called in PgPoolSharedService
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [PgPoolSharedModule] Shutting down PgPoolSharedModule
[Nest] 82844 - 11/24/2025, 6:05:13 PM LOG [PgPoolSharedService] onApplicationShutdown called in PgPoolSharedService
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
NX Successfully ran target command for project twenty-server and 4 tasks it depends on (7s)
With additional flags:
upgrade
```
2025-11-24 17:20:07 +00:00
Baptiste Devessier and GitHub
ee761a2594
Keep workflow nodes selected unless side panel is closed ( #16029 )
...
This PR no longer relies on Reactflow's `selected` property to determine
whether a node is selected. Instead, we rely on the pre-existing
`workflowSelectedNodeComponentState` state. It makes it easier to to
synchronize what's displayed in the side panel and which node is styled
as being selected.
## Demo - workflows
https://github.com/user-attachments/assets/3848c5f9-df51-48e2-8b9c-f083d25d14ed
## Demo - workflow versions
https://github.com/user-attachments/assets/9ac9ec6c-e6b1-4f24-a817-a7349e1b70d6
## Demo - workflow runs
https://github.com/user-attachments/assets/54f955cf-dacc-43f8-b684-01e8a6c15f3b
2025-11-24 18:02:13 +01:00
Raphaël Bosi and GitHub
86aff36035
Fix and improve chart type selection ( #16033 )
...
The new version of the side panel is smaller so it introduced a
regression on the chart type selection because there was not enough
space for all the chart types to fit with the label.
This PR removes the label to gain some space and display the chart type
label in a tooltip.
## Before
<img width="834" height="1406" alt="CleanShot 2025-11-24 at 17 33 45@2x"
src="https://github.com/user-attachments/assets/76bbea54-af16-4643-9de6-ab3da6741e11 "
/>
## After
### Without disabled charts
https://github.com/user-attachments/assets/74d62b86-e440-41f5-a3e6-c5754940c28e
### With disabled charts
https://github.com/user-attachments/assets/f4ce3a3a-5dee-4f41-8b96-5f671794197d
2025-11-24 16:44:28 +00:00
Charles Bochet and GitHub
d526b07078
Add ability to discard Information Banner ( #16019 )
...
Fixes https://github.com/twentyhq/twenty/issues/14028
<img width="1917" height="965" alt="image"
src="https://github.com/user-attachments/assets/eeb5eab7-2c50-48be-8218-af6052b30777 "
/>
2025-11-24 17:34:10 +01:00
42fef6e09b
add is operand on number field ( #16022 )
...
Co-authored-by: martmull <martmull@hotmail.fr >
2025-11-24 16:04:41 +00:00