Commit Graph

6766 Commits

Author SHA1 Message Date
Uddish Verma
772d606a9e
fix(API): Apply the read-only field handling to the update body
Same change as the create body: the server-managed fields are no longer
advertised as writable in the generated spec, and the error map keeps the
specific message when one is sent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 17:13:07 +01:00
Uddish Verma
6bb0150d3f
Merge branch 'api-84-workflow-create' into api-84-workflow-update-delete 2026-08-13 17:10:36 +01:00
Uddish Verma
9cbd5cb97b
fix(API): Stop advertising server-managed fields as writable
The generated request spec listed `id`, `active`, `createdAt` and the other
server-managed fields as ordinary properties with empty schemas, because the
generator cannot express a "must be absent" check. Alongside
`additionalProperties: false`, the published contract positively invited callers
to send fields the server always rejects, and an SDK generated from it would
expose them as settable. The hand-written spec marked them `readOnly`.

They are now left out of the request shape, so the spec describes only what a
caller may send. The strict object rejects them as unrecognised keys, and an
error map keeps the specific message rather than letting a read-only field look
like a typo:

    { "id": "abc" }   -> 'id' is a read-only field and cannot be set
    { "nam": "oops" } -> Unrecognized key(s) in object: 'nam'

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 17:10:24 +01:00
Uddish Verma
4a1eaf9db2
Merge branch 'api-84-workflow-create' into api-84-workflow-update-delete 2026-08-13 16:32:09 +01:00
Uddish Verma
5a8b698a6e
docs(API): Say why the strict option and the schema builder exist
Both comments described what the code does, which the code already showed. They
now record the reason a reviewer cannot see: Zod strips unknown keys where the
hand-written spec rejected them, and `/discover` can only read request bodies
out of that spec, which a decorator route has no entry in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 16:31:58 +01:00
Uddish Verma
87a3161053
chore(API): Regenerate the update spec fragment for the node groups schema
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:52:55 +01:00
Uddish Verma
4eb34c69f9
Merge branch 'api-84-workflow-create' into api-84-workflow-update-delete 2026-08-13 15:51:05 +01:00
Uddish Verma
a0afde4e02
fix(API): Describe node groups on the workflow create and update bodies
`workflowNodeGroup.yml` specified the structure: `id`, `name` and `nodeIds`
required, an optional `description` capped at 155 characters, and no other keys.
The DTO only checked that `nodeGroups` was an array, so four things the old API
rejected were being accepted:

    nodeGroups: [{}]                              missing required fields
    nodeGroups: [1, 2, 3]                         not objects
    nodeGroups: [{ ...valid, bogus: 1 }]          unknown key
    nodeGroups: [{ ...valid, description: 156 }]  over the length cap

Declared in the public DTO rather than reusing the internal
`workflowNodeGroupsSchema`, so a change to the internal request shape cannot
silently move the public contract.

The cap stays a literal 155 rather than `GROUP_DESCRIPTION_MAX_LENGTH` (145):
the engine truncates to that value instead of rejecting, so borrowing it would
start rejecting requests the old API accepted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:50:53 +01:00
Uddish Verma
94046cfb83
refactor(API): Migrate workflow update and delete to the decorator pattern
Moves `PUT /workflows/{id}` and `DELETE /workflows/{id}` onto
`@PublicApiController` and removes the legacy handlers, their hand-written spec
file and the now-unused request types. `workflows.id.yml` held only these two
operations, so the file and its `openapi.yml` entry go with them.

One behaviour change, deliberate: the update response now includes `shared`.
`WorkflowService.update` re-fetches with only the `tags` and `activeVersion`
relations, so `shared` came back undefined and the response mapper threw on
`workflow.shared.map(...)`. The update now re-fetches through
`findWorkflowForUser` for its response, as `getWorkflow` does and as
`createWorkflow` already does internally. The response gains a field; nothing is
removed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:10:18 +01:00
Uddish Verma
4bf334f3b6
refactor(API): Migrate POST /workflows to the decorator pattern
Moves workflow creation onto `@PublicApiController` and removes the legacy
handler, its hand-written spec files, and the now-unused request type. Behaviour
is unchanged: the same `WorkflowCreationService` call, the same redaction check,
the same derived settings stripped before saving.

`workflows.yml` held only this operation once the list route moved in #36015, so
the file and its `openapi.yml` entry go with it.

`workflowPublicDto.generated.yml` appears because a second route now references
the response DTO, so the generator hoists it into a shared component. The 237
lines it gains are the 237 `getWorkflow.generated.yml` loses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:02:48 +01:00
Uddish Verma
3ac05f20d3
fix(API): Report request body schemas for decorator routes in /discover
`GET /discover?includeSchemas=true` describes each endpoint's request body, but
only ever looked in the hand-written spec files. An endpoint described by a Zod
DTO had nothing to find, so it reported no schema at all.

Three endpoints are affected today: `PUT /workflows/{id}/tags`, `POST /roles`
and `POST /role-mapping-rules`. Nothing caught it because no test asserted a
schema for those.

The description now comes from the route's own `@Body` DTO, converted by the
same generator that writes the spec files, so the two cannot disagree.

Also repoints the reference-resolution test. It used `createWorkflow`, whose
generated schema holds no references, so it had started passing without
exercising anything. It now uses `createDestination`, still described by
hand-written files, and scans the whole resolved schema instead of one field.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 15:02:21 +01:00
Anne Aguirre
547cfb9002
fix(ai-builder): Prevent agent from claiming integration tool call success early (#36196) 2026-08-13 13:15:36 +00:00
Raúl Gómez Morales
1b4c0bab8e
fix(core): Prefer managed OAuth auth types when the AI builder resolves credentials (#35929) 2026-08-13 13:10:33 +00:00
mfsiega
28307f35eb
feat(core): Validate trigger node id uniqueness before publish (no-changelog) (#35379)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 12:44:31 +00:00
Miguel Ángel Moreno
82e5b566f7
refactor(core): Split the update_workflow MCP tool handler into named steps (no-changelog) (#35458)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>
2026-08-13 12:30:14 +00:00
Uddish Verma
5b03945eb0
refactor(API): Migrate GET /workflows to the decorator pattern (no-changelog) (#36015)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 12:28:12 +00:00
Michael Drury
598c1f3357
fix(editor): Improve agent error handoff to AI Assistant (#36076) 2026-08-13 11:55:33 +00:00
Ilfat Mindubaev
f9fd8a83e4
feat(Confluence Node): Add Confluence Cloud OAuth2 credential (#35732) 2026-08-13 11:54:01 +00:00
Michael Drury
5e2779e0be
fix(core): Return final responses from workflow agents (#36127) 2026-08-13 11:40:13 +00:00
Anne Aguirre
be1fde19f4
fix(ai-builder): Align HITL approval resume schemas with confirm envelope (#36047) 2026-08-13 11:06:24 +00:00
Uddish Verma
6ab3f5e83e
feat(API): Migrate workflow tags endpoints to decorator pattern (#35829)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 10:44:28 +00:00
Riqwan Thamir
91ebeecb4e
feat(core): Improve Instance AI model experiments (no-changelog) (#35034)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 10:15:03 +00:00
Charlie Kolb
5c618883b9
feat(core): Add env var to skip workflow history compaction on startup (#36099)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 09:45:25 +00:00
Sam Wooler
40a0f2a016
feat(API): Add endpoint to create role-mapping rules (#36032)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 09:42:15 +00:00
João Almeida
a74fbab2bf
feat(core): Auto-expose new workflows to MCP from settings via toggle (#35828)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 09:29:07 +00:00
Ricardo Espinoza
b9496b2fa6
refactor(core): Consolidate the node search engine into @n8n/ai-utilities (no-changelog) (#35546) 2026-08-13 09:28:06 +00:00
Elias Meire
fb430aab05
feat(core): Add an inline Available tools card to connect MCP servers from the assistant chat (#35332) 2026-08-13 09:22:24 +00:00
Robin Braumann
5f9602b19e
feat(core): Enable Agent sandboxes through Instance AI setup (#36056)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 07:10:02 +00:00
Kai
cbb5577053
feat(editor): Let users update review descriptions (#36069)
Some checks are pending
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.23.2) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
2026-08-12 20:38:11 +00:00
Mike Repeć
1a12af601b
fix(core): Report the real activation mode for triggers activated via the publication outbox (#36123)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 13:17:53 +00:00
Robin Braumann
01ce4490d0
feat(core): Add writable workspaces to agents (#36033)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 12:24:33 +00:00
Sandra Zollner
64dcebb649
feat(core): Restrict workflow review decisions to assigned reviewers (#36040) 2026-08-12 12:10:11 +00:00
Kai
d35bb3e980
feat(editor): Display authors on the review details view (#35897) 2026-08-12 11:17:13 +00:00
Yuliia Pominchuk
5bfcde593d
feat(core): Make n8n User Auth (OAuth2) generally available (#35900) 2026-08-12 11:12:46 +00:00
Jan Kalkan
90b201e47b
feat(core): Add comments to the workflow review activity feed (no-changelog) (#35792)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Sandra Zollner <sandra.zollner@n8n.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 09:36:55 +00:00
Kai
12c44790c0
feat: Require a reviewer when creating a workflow review request (no-changelog) (#35932) 2026-08-12 07:42:31 +00:00
Svetoslav Dekov
e4f0c33584
fix(core): Detect node settings changes when comparing workflow versions (#36066)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 07:22:02 +00:00
Emilia
5ac6606e81
test(core): Add durable scheduler poll cursors e2e tests (no-changelog) (#35343)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 20:36:24 +00:00
Emilia
a9787fcd6f
feat(core): Commit a poll trigger's cursor and its execution in one transaction (no-changelog) (#35295)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 17:59:29 +00:00
Emilia
93ff542e92
feat(core): Add poller_state table for durable poll trigger cursors (no-changelog) (#35128)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 16:31:00 +00:00
Guillaume Jacquart
a447ac422e
fix(core): Keep resolving end-user credentials after a trigger stops listening (#35973)
Some checks failed
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.23.2) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
Util: Publish API Schema / Cloudflare Pages (push) Has been cancelled
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 15:53:54 +00:00
Michael Drury
a723e791f1
fix(core): Improve agent builder skill and channel handling (#35980) 2026-08-11 15:35:53 +00:00
Guillaume Jacquart
ee03e023d2
fix(editor): Show the connected provider account, not the n8n account email (#35553)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 15:25:52 +00:00
Jan Kalkan
e65580bf10
feat(core): Add the workflow review activity feed (no-changelog) (#35791)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Sandra Zollner <sandra.zollner@n8n.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 14:20:01 +00:00
Jaakko Husso
cc5f1cb37f
feat(core): Add activation-capped AI Assistant trial variant (no-changelog) (#35994)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 12:46:16 +00:00
Jan Kalkan
41d54e77f1
feat(core): Add workflow review activity log tables and migration (no-changelog) (#35517)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Sandra Zollner <sandra.zollner@n8n.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 12:25:46 +00:00
Robin Braumann
6a30736841
feat(core): Add n8n Sandbox support to Agent Knowledge (#35811)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 11:18:19 +00:00
Emilia
729c9b46e3
test(cli): Remove clock race from flaky scheduled-task re-claim test (#36031)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:48:57 +00:00
Tomi Turtiainen
fd67bf8b78
fix(core): Crash enqueued executions with unreadable data (#36010) 2026-08-11 10:14:57 +00:00
Ragnar
e7fa25217e
feat: Hide n8n-connect usage when aiGatewayCloudUbb is enabled (#35978) 2026-08-11 10:13:43 +00:00