Compare commits

...

521 Commits

Author SHA1 Message Date
Michael Drury
8d46c6e67a
fix: Keep agent preview streams responsive (#35035)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
2026-07-27 16:58:45 +00:00
Anne Aguirre
687a00e7ee
feat(ai-builder): Single preview chat + trace modal (#35033) 2026-07-27 15:57:01 +00:00
Ricardo Espinoza
0745526f6a
fix(editor): Restore horizontal scrolling of NDV panel header controls (#34824) 2026-07-27 15:43:14 +00:00
RomanDavydchuk
48c0e70f14
fix(core): Support fractional community node versions with PostgreSQL (#34717) 2026-07-27 15:36:08 +00:00
RomanDavydchuk
4622b35557
fix(N8n Node): Update credential test to use an endpoint with no extra scopes (#34605) 2026-07-27 15:07:46 +00:00
Anne Aguirre
f62cc6319a
feat(ai-builder): Agent session records direct to session chat, not trace (#34997) 2026-07-27 14:46:14 +00:00
Ricardo Espinoza
9a713988c6
chore(core): Remove unused prettier dependency (no-changelog) (#34976) 2026-07-27 14:04:17 +00:00
James Martin
e75e41205c
fix(editor): Fix an issue in some Safari versions that prevented copying invite links (#34620)
Co-authored-by: Guillaume Jacquart <jacquart.guillaume@gmail.com>
2026-07-27 13:52:36 +00:00
Sandra Zollner
2ea7da29ac
feat(editor): Show reviewer and requester avatars and a status indicator on review inbox items (#34885)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: kgrhartlage <kai.hartlage@n8n.io>
2026-07-27 13:46:33 +00:00
Guillaume F.
c24b73d7f3
feat(core): Add no-hardcoded-secrets community node lint rule (no-changelog) (#34898) 2026-07-27 13:34:35 +00:00
Charlie Kolb
8ce1fdca55
ci: Fix Chromatic marking all components as changed and upgrade action (#35016)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 13:34:26 +00:00
n8n-cat-bot[bot]
13cb95bcf9
chore: Add an optional timeout parameter to the test_workflow tool (#34785)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 13:25:09 +00:00
Charlie Kolb
0f6be1f38d
refactor: Replace @ts-ignore with @ts-expect-error outside nodes-base (#35009)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 13:22:06 +00:00
José Braulio González Valido
9a96941d81
fix(ai-builder): Pin zero-item premises as empty arrays and attribute pinned-fixture faults (no-changelog) (#34953)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 13:20:52 +00:00
José Braulio González Valido
ba31860da7
fix(core): Require an authenticated session for the MCP registry test seed endpoint (no-changelog) (#34880)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 13:20:38 +00:00
Anne Aguirre
fec6ceef3c
fix(ai-builder): Provision agent prerequisites before build-agent delegation (#34802) 2026-07-27 13:08:56 +00:00
Ilfat Mindubaev
cb28555d55
feat(AWS Bedrock Chat Model Node): Surface inference-profile models in the default model picker (#34983)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 12:51:30 +00:00
Anne Aguirre
3301e12014
fix(ai-builder): MCP Connections failures are non-blocking for agents (#34722) 2026-07-27 12:47:54 +00:00
Kai
962ff564c4
fix(editor): Prevent reactive feedback loop when opening workflow diff (#34897) 2026-07-27 12:41:35 +00:00
Alex Grozav
bdc49798cd
refactor(editor): Rename redirection core to match the composable-name convention (no-changelog) (#35012)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-27 12:30:05 +00:00
Ricardo Espinoza
bc88dc4bd2
fix(core): Fix MCP workflow update failing for active workflows on SQLite (#34964) 2026-07-27 12:25:03 +00:00
Ricardo Espinoza
082b5d9190
fix(editor): Keep NDV node hints visible after execution and render them in a single pane (#34920) 2026-07-27 12:21:54 +00:00
Ricardo Espinoza
5542c1b394
fix(core): Return correct webhook URL in MCP get_workflow_details trigger info (#34927) 2026-07-27 12:20:35 +00:00
Guillaume F.
025801cccd
feat(core): Add no-dead-files community node lint rule (no-changelog) (#34918)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 12:20:12 +00:00
Guillaume Jacquart
9140a068b1
fix(core): Ensure license device fingerprint meets minimum length (#33852)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 12:09:08 +00:00
Alex Grozav
e6566bfbf3
refactor(editor): Remove unused personalizedNodeTypes store getter and resolver plumbing (#34994)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 12:00:41 +00:00
Sebastien Powell
e592b210c1
feat(core): Allow Storybook components to be viewed in light and dark mode (#34361) 2026-07-27 11:50:28 +00:00
Anne Aguirre
54db083953
fix(ai-builder): Preview chat link fix (#34659)
Co-authored-by: Michael Drury <michael.drury@n8n.io>
Co-authored-by: Michael Drury <me@michaeldrury.co.uk>
2026-07-27 11:24:19 +00:00
Anne Aguirre
3d281ecc40
feat(ai-builder): Add support for verified community nodes as agent tools (#34922) 2026-07-27 11:24:04 +00:00
Lorent Lempereur
27edc54356
fix(core): Accept 5-field cron expressions in schedule trigger (#35006) 2026-07-27 11:23:14 +00:00
n8n-cat-bot[bot]
4abbc89df4
fix: Treat blank optional enum form fields as unset in package import (#35010)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 11:08:27 +00:00
Rodrigo Santos da Silva
4d247a1176
fix(DeepSeek Node): Preserve reasoning_content on tool-calling turns (#34924)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 11:00:18 +00:00
Alex Grozav
8d1187bbc7
refactor(editor): Invert the builder streaming guard into an injected dependency (no-changelog) (#34890)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-27 10:48:39 +00:00
Iván Ovejero
78e55b5cbf
feat(core): Add active_workflow_info and make workflow_info leader-only (#34987) 2026-07-27 10:43:55 +00:00
Yen Su
caf1e2838b
feat(editor): Group advanced HITL settings under an Advanced Interactivity section (no-changelog) (#34788)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 10:41:27 +00:00
n8n-cat-bot[bot]
f3fd5599ca
fix: Report real exported entity counts in package export (#34995)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 10:39:57 +00:00
Romeo Balta
5706e5ecfa
ci: Strip refs/heads prefix from branch Docker image tags (#33500)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 10:36:36 +00:00
Matsu
9859aaae37
chore: Change Write to Edit in Claude settings (#34428) 2026-07-27 10:20:09 +00:00
José Braulio González Valido
40f2599038
ci(ai-builder): Run the MCP eval claude build from an isolated working directory (no-changelog) (#34808)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 10:17:38 +00:00
Albert Alises
4078318cff
feat: Configure the AI Assistant through a redesigned instance settings page (#34493) 2026-07-27 10:07:28 +00:00
James Gee
eb0f9ca4e7
fix(core): WorkflowId policy on test (no-changelog) (#35003) 2026-07-27 10:04:51 +00:00
Yen Su
5a78ba7c29
feat(Microsoft SharePoint Node): Add v2 Item Create or Update (upsert) operation (no-changelog) (#34854)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 09:37:50 +00:00
n8n-cat-bot[bot]
bba48aa8da
refactor: Standardize package import/export flag naming in n8n-cli (#34998)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 09:34:20 +00:00
Yen Su
2268149b7c
fix(Slack Node): Handle user-list rate limits and surface real load errors (#34743)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 09:33:34 +00:00
Michael Drury
42876fabda
refactor(editor): Move agent capabilities below channels (no-changelog) (#34921)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 09:28:38 +00:00
n8n-cat-bot[bot]
4006c226f8
fix(Cohere Chat Model Node): Route chat requests through the v2 endpoint (#34878)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 09:10:05 +00:00
José Braulio González Valido
b0a10229a0
refactor(ai-builder): Split the eval harness runner into domain modules (no-changelog) (#34834)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 09:01:09 +00:00
n8n-cat-bot[bot]
1f4e65419a
feat: Default package import workflowIdPolicy to source (#34989)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 08:36:24 +00:00
Ricardo Espinoza
4f7c725b83
fix(editor): Clamp persisted sidebar width when expanding the main sidebar (#34923) 2026-07-27 08:09:24 +00:00
Anand S
90f1430c5e
fix(Wordpress Node): WordPress Get Many adds before filter for posts and pages (#19790)
Co-authored-by: Elias Meire <elias@meire.dev>
2026-07-27 08:06:10 +00:00
Emilia
e2054f984c
feat(core): Route poll triggers through the durable scheduler (no-changelog) (#34733)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 07:32:08 +00:00
Robin Braumann
771d038657
fix(editor): Remove episodic memory callout and knowledge base publish requirement (#34888)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 07:27:44 +00:00
Ali Elkhateeb
91751c3ce2
feat(API): Add endpoint to list workflow version history (GET /workflows/{id}/history) (#34656) 2026-07-27 07:27:04 +00:00
Garrit Franke
d0adaf7b5a
feat: Add require-files-array ESLint rule for community node packages (#34792) 2026-07-27 07:18:41 +00:00
Charlie Kolb
2c4805cf4c
test(core): Guard against private packages in the published runtime graph (#34889)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 07:01:43 +00:00
n8n-cat-bot[bot]
4e43644bba
chore: Route composable navigation & URL reads through NavigationHelper (clear no-page-in-flow drift) (#34982)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 03:50:30 +00:00
n8n-assistant[bot]
d93d2dea5b
chore: Update node popularity data (#34981)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-27 00:52:53 +00:00
Alex Grozav
75366af57c
refactor(editor): Move users.store into @n8n/stores (no-changelog) (#34900)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 17:30:27 +00:00
Aryan Bahl
734f957395
fix(editor): Refresh subworkflow input schema from draft on parent open (#34522)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: Dawid Myslak <dawid.myslak@gmail.com>
2026-07-25 23:08:44 +00:00
José Braulio González Valido
1713d9a9bc
fix: Parse structured output from content-block model responses in chain nodes (#34928)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 16:57:31 +00:00
Miguel Ángel Moreno
0dabb99ce5
refactor(core): Dispatch MCP workflow operations via a handler table (no-changelog) (#34926)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 15:16:23 +00:00
Albert Alises
7d8426f055
feat: Add admin-managed instance credentials (#34364) 2026-07-25 14:22:22 +00:00
Miguel Ángel Moreno
6d66056058
feat(core): Make MCP clients aware of node groups (no-changelog) (#34810)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 14:17:11 +00:00
Albert Alises
dee23d2de5
test(core): Align MCP server name validation (#34946) 2026-07-25 13:38:35 +00:00
Albert Alises
5339b5e48a
fix(core): Keep MCP server display names free-form in agent config (#34931)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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-07-24 17:12:51 +00:00
Riqwan Thamir
55e92cc283
refactor(core): Consolidate sandbox and skill guidance in system prompt (no-changelog) (#34909)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 15:50:37 +00:00
Anne Aguirre
decb3228c5
feat(ai-builder): Tidy up tool names and agent builder tool UX (#34646)
Some checks failed
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Build: Benchmark Image / build (push) Has been cancelled
Util: Sync API Docs / sync-public-api (push) Has been cancelled
2026-07-24 15:26:08 +00:00
Anne Aguirre
6b4021147b
fix(ai-builder): Make channel config dropdown enabled - Linear and Telegram - in AIA agent builder (#34706) 2026-07-24 15:25:51 +00:00
Anne Aguirre
bac8debc0e
feat(ai-builder): Format zod erros on agent config - better toast msg (#34867) 2026-07-24 15:24:59 +00:00
Anne Aguirre
490b7220e1
fix(ai-builder): Make labels be more specific about access token for Slack setup (#34893) 2026-07-24 15:24:44 +00:00
Ricardo Espinoza
359d82fb05
fix(editor): Center empty state content vertically on short viewports (#34820) 2026-07-24 14:59:37 +00:00
Robin Braumann
8017b3d85f
feat(core): Add telemetry events for agent publishing, builder capabilities, and interactive flows (#34887)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 14:34:11 +00:00
Ricardo Espinoza
99d70aedbd
build: Replace deprecated turbo --parallel with explicit concurrency in dev scripts (no-changelog) (#34832) 2026-07-24 14:34:02 +00:00
mfsiega
7089418a6b
feat(core): Add step-executor seam to @n8n/engine (no-changelog) (#34784)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
2026-07-24 14:31:15 +00:00
Danny Martini
3f2bc68846
feat(core): Detect and heal published-version skew in trigger reconciliation (#34877)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:15:42 +00:00
Arvin A
e6a08eec58
fix(core): Normalize eval-collection scores per-run and harden re-run (no-changelog) (#34736) 2026-07-24 14:14:49 +00:00
Yen Su
f99d75c3d5
fix(Gmail Node): Roll back advanced HITL Send and Wait (no-changelog) (#34865)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 14:14:17 +00:00
Svetoslav Dekov
fdd4e33f9c
feat(core): Add availableInMCP column to agents (#34665)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:09:04 +00:00
Kai
5a97bd1a2e
feat(editor): Sync a new workflow version into an existing open review (#34842) 2026-07-24 14:06:07 +00:00
Lorent Lempereur
4212fc2202
fix(core): Avoid loading execution data during credentials security audit (#34876) 2026-07-24 13:54:37 +00:00
Ricardo Espinoza
9e09ff4d23
fix(core): Reject workflow deletion while unpublish is still in progress (#34836) 2026-07-24 13:43:48 +00:00
Elias Meire
ded1697671
fix(Microsoft Teams Node): Respect limit server-side in getAll operations (#34851) 2026-07-24 13:41:45 +00:00
Aryan Bahl
b5da0744c4
fix(Baserow Node): Format Get Many date filter values for Baserow API (#32723)
Co-authored-by: Alexander Gekov <40495748+alexander-gekov@users.noreply.github.com>
2026-07-24 13:12:48 +00:00
mfsiega
d6c9c38ae7
feat(core): Add workflow_step_execution table to @n8n/engine (no-changelog) (#34860)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 12:52:17 +00:00
Ricardo Espinoza
bf8f5d85a3
perf(core): Skip allowed-methods lookup on successful production webhook requests (#34833) 2026-07-24 12:50:40 +00:00
Lorent Lempereur
efa86c697b
feat(core): Include acting user identity in workflow lifecycle external hooks (#34769) 2026-07-24 12:43:46 +00:00
Milorad FIlipović
ddc1766af3
feat(core): Improve grouping operations in mcp (no-changelog) (#34852) 2026-07-24 12:39:05 +00:00
Alex Grozav
335b9d7a96
refactor(editor): Move useToast into @n8n/composables behind a shim (no-changelog) (#34861)
Co-authored-by: multica-agent <github@multica.ai>
2026-07-24 12:38:44 +00:00
Arvin A
e5bb60f663
feat(core): Add agent-scoped eval data model and migration (no-changelog) (#34657) 2026-07-24 12:37:53 +00:00
Riqwan Thamir
50789b1553
fix(core): Guiding data-table skill routing better (no-changelog) (#34882)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 12:12:04 +00:00
Bernhard Wittmann
6e124263dc
fix(core): Resolve synthetic tool nodes to the requested version (#34850) 2026-07-24 12:09:58 +00:00
Mike Repeć
016421680d
fix(editor): Add document title and adopt new settings layout on migration report pages (#34609)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 12:08:16 +00:00
RomanDavydchuk
a0f6861e17
fix(editor): Keep Switch fallback outputs available with unresolved expressions (#34698) 2026-07-24 12:05:14 +00:00
Charlie Kolb
0c613b4405
fix(core): Publish workspace packages required by n8n at runtime (#34886)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 11:55:52 +00:00
Alex Grozav
8c49c405be
refactor(editor): Move cloudPlan.store to @n8n/stores (no-changelog) (#34859) 2026-07-24 11:52:36 +00:00
Stephen Wright
d67b9cd0d1
feat(Microsoft Excel (SharePoint) Node): Add node for Excel workbooks in SharePoint document libraries (#34847) 2026-07-24 11:42:16 +00:00
Eugene
3f1b35d669
fix(Wikipedia Tool Node): Surface tool errors as actionable node errors (#34643)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 11:35:53 +00:00
Sandra Zollner
f4edeeba31
feat(core): Return open and closed counts for the review inbox tabs (#34789) 2026-07-24 11:26:39 +00:00
Michael Drury
9503892225
fix: Improve MCP tool handling (no-changelog) (#34827) 2026-07-24 11:00:35 +00:00
Robin Braumann
a647aeff23
feat(core): Store agent execution logs in blob storage (#34796)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 10:57:49 +00:00
Guillaume F.
95da84912f
feat(core): Add credential-unnecessary-password community node lint rule (#34791)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 10:44:16 +00:00
Filipe Tavares
d5b5d8ead5
fix(editor): Inject instance UTM parameters in all links to the templates website (#34790)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:41:06 +00:00
Stephen Wright
ecd09aa09d
feat(Microsoft Excel SharePoint Node): Enable use as an AI agent tool (no-changelog) (#34592) 2026-07-24 10:32:57 +00:00
José Braulio González Valido
da0de05058
fix(core): Mount the MCP registry test seed endpoint whenever E2E tests are enabled (no-changelog) (#34811)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:08:34 +00:00
yehorkardash
d0b254cff8
fix(HTTP Request Node): Include error body in continueOnFail mode (#34729) 2026-07-24 10:07:14 +00:00
Riqwan Thamir
765129c436
refactor(core): Slim system prompt into skills and tool descriptions (no-changelog) (#34816)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 09:58:06 +00:00
Albert Alises
13becf336c
feat(core): Add instance credential database schema (#34709)
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 09:37:33 +00:00
Anne Aguirre
0ec49b3735
feat(core): Infer structured output from example JSON in AI Agent Node (#34779)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-24 09:16:45 +00:00
Lorent Lempereur
697174f3f8
feat(core): Add workflow.deactivate external hook (#34746) 2026-07-24 09:15:28 +00:00
Guillaume F.
b7dcfc84cb
feat(core): Add no-silent-error-swallowing community node lint rule (no-changelog) (#34780)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 09:13:19 +00:00
Alex Grozav
7040b69102
refactor(editor): Move useStyles into @n8n/composables behind a shim (no-changelog) (#34856)
Co-authored-by: multica-agent <github@multica.ai>
2026-07-24 09:01:51 +00:00
Robin Braumann
0b4bbd05b8
feat(core): Add storedAt column to agent_execution (#34858)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 08:57:18 +00:00
José Braulio González Valido
e904939db2
fix(ai-builder): Halt workflow verification at send-and-wait gates on loops (#34809)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:50:41 +00:00
Ilfat Mindubaev
a2d5aec831
feat(Microsoft SharePoint Node): Add v2 Item Update action (no-changelog) (#34712)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:49:57 +00:00
Ricardo Espinoza
25c5a7341e
fix(editor): Debounce node creator search filtering (#34828) 2026-07-24 07:37:02 +00:00
Alex Grozav
7c5196ddf6
refactor(editor): Decouple useExternalHooks for package use (no-changelog) (#34705)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 07:28:19 +00:00
Elias Meire
d2672a63a6
fix(AMQP Trigger Node): Cap concurrent executions at the configured messages per cycle (#34787) 2026-07-24 07:26:57 +00:00
Elias Meire
26ae903a2e
fix: Serialize dates and route binary columns to output in database nodes (#34124)
Co-authored-by: Alexander Gekov <40495748+alexander-gekov@users.noreply.github.com>
2026-07-24 07:25:06 +00:00
Filipe Tavares
39490bcda8
build: Mark @n8n/telemetry as private (no-changelog) (#34826)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 07:20:25 +00:00
yehorkardash
1f82beef47
fix: Validate loadOption parameter in GSheet and Notion nodes (#34695) 2026-07-24 07:16:52 +00:00
PRATHAMESH HUKKERI
6f3d2b9faa
fix(Databricks Node): Change default tokenExpiredStatusCode from 401 to 403 (#34325)
Co-authored-by: Prathamesh Hukkeri <prathamesh04@users.noreply.github.com>
2026-07-24 07:12:44 +00:00
Stephen Wright
fe649efcbf
feat(Microsoft SharePoint Node): Add v2 Item Create and Get Many, enable use as an AI tool (no-changelog) (#34608) 2026-07-24 06:38:02 +00:00
Alex Grozav
40cd7c4424
refactor(editor): Extract the notification slice out of ui.store into @n8n/stores (no-changelog) (#34638)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 06:22:04 +00:00
Ricardo Espinoza
eca731c2de
fix(core): Include RFC 9207 iss parameter on OAuth authorization error redirects (#34751)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
2026-07-23 22:46:09 +00:00
Guillaume Jacquart
01e06399d8
feat(editor): Polish end-user credential setup modal and NDV states (#34766)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 19:53:12 +00:00
José Braulio González Valido
cbe5710c4c
feat(ai-builder): Report per-case claude build cost for MCP eval builds (no-changelog) (#34777)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 18:42:09 +00:00
Alex Grozav
ac6fb2b6ba
refactor(editor): Unify decoupled stores on a shared ModalOpeners contract (no-changelog) (#34727)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 17:01:18 +00:00
Filipe Tavares
855c283101
feat: Add @n8n/telemetry event registry with typed track() support (no-changelog) (#34662)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 16:09:54 +00:00
Riqwan Thamir
b0a14728d7
refactor(core): Remove unused templates and list_skills AI tools (no-changelog) (#34741)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-23 15:38:41 +00:00
Milorad FIlipović
41f0825235
fix(editor): Hide Add to n8n AI button on self-hosted (no-changelog) (#32737) 2026-07-23 15:20:50 +00:00
Irénée
09c90f9bf4
feat(core): Auto-include sub-workflows in package exports (#34218)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 15:03:07 +00:00
Rodrigo Santos da Silva
bd6f617efb
feat(core): Nest delegated sub-agent spans under the parent agent trace (#34720)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 14:46:48 +00:00
Rob Hough
c692ef81d9
refactor(editor): Polish artefact UX for agent (no-changelog) (#33908)
Co-authored-by: Michael Drury <me@michaeldrury.co.uk>
Co-authored-by: Michael Drury <michael.drury@n8n.io>
2026-07-23 14:38:34 +00:00
Ricardo Espinoza
e2840a7443
feat(editor): Revamp MCP settings view with instance settings components (#34041) 2026-07-23 14:21:27 +00:00
Robin Braumann
21f5097bfe
refactor(core): Centralize agent draft model/credential validation (no-changelog) (#34775)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-23 14:05:53 +00:00
Dmitrii
05c691b0b7
feat(API): Deprecate workflow activate/deactivate public API endpoints (#34771) 2026-07-23 13:41:42 +00:00
Milorad FIlipović
4ead8600f9
feat(core): Improve workflow groups validation/support in mcp (no-changelog) (#34778) 2026-07-23 13:41:27 +00:00
Charlie Kolb
151ca180f9
ci: Pin standalone package latest dist-tag to newest beta (no-changelog) (#34770)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:57:54 +00:00
Guillaume Jacquart
d8d89cc381
fix(core): Redact a sub-workflow's own execution record per its own policy (#34621)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 12:55:51 +00:00
Robin Braumann
e5b1ac9f38
feat(core): Build agent drafts before asking for setup in the agent builder (no-changelog) (#34615)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-23 12:55:51 +00:00
Dmitrii
e9933bd1c0
feat(API): Add workflow publish/unpublish public API endpoints (#34745) 2026-07-23 12:32:27 +00:00
Anne Aguirre
96268910d3
feat(ai-builder): Add Fix with Assistant for failed agent preview tools - pass single execution context (#34616)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-23 12:31:07 +00:00
José Braulio González Valido
b93a99945b
feat(ai-builder): Harden the eval harness — crash-recovery journal, parity fixes, extension points (no-changelog) (#34747)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:25:55 +00:00
mfsiega
66939681c9
feat(core): Implement StartExecution API in @n8n/engine (no-changelog) (#30039)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-23 12:11:21 +00:00
Stephen Wright
46cd9cf029
feat(Microsoft Excel (SharePoint) Node): Add Table Append inside workbook sessions (no-changelog) (#34591) 2026-07-23 12:04:44 +00:00
Denisf88
4fdf3ed633
fix(editor): Keep chat typing indicator visible until response arrives (#34768) 2026-07-23 11:26:55 +00:00
Raúl Gómez Morales
a8c90f84fe
fix(core): Fall back to the run's resolved model for AI Assistant verification LLM calls (#34627) 2026-07-23 11:16:03 +00:00
Stephen Wright
84b25bef6b
feat(Microsoft Excel (SharePoint) Node): Add Sheet Update and Append-or-Update (no-changelog) (#34583) 2026-07-23 11:10:22 +00:00
Mike Repeć
4d861d16a6
fix(core): Prevent concurrent instance startups from racing database migrations (#34685)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:54:41 +00:00
Miguel Ángel Moreno
1666f1ec67
fix(editor): Preserve canvas groups when converting a selection to a sub-workflow (#34664)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 10:20:22 +00:00
Stephen Wright
0147aa7d6a
feat(Microsoft Excel (SharePoint) Node): Add table lifecycle operations and Workbook Get Many (no-changelog) (#34580) 2026-07-23 10:16:46 +00:00
Raúl Gómez Morales
5aac66d8cb
fix(core): Stop Instance AI follow-up runs from looping when they keep failing before the agent starts (#34767) 2026-07-23 10:12:58 +00:00
Raúl Gómez Morales
5a647443ad
fix(ai-builder): Keep assistant replies in the user's language during tool-heavy turns (#34761) 2026-07-23 10:08:31 +00:00
Raúl Gómez Morales
206a2581e4
fix(core): Preserve the underlying error as cause on Instance AI workspace file reads (#34759) 2026-07-23 10:08:06 +00:00
Filipe Tavares
1138f1196f
fix(editor): Update copy for executions tab empty state (#34731)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 09:44:42 +00:00
Sandra Zollner
b2cbcc1b81
feat(core): Create reviews page and render inbox (#34357) 2026-07-23 09:40:36 +00:00
Stephen Wright
f8a338b0c0
feat(Microsoft Excel (SharePoint) Node): Add workbook dropdown and table read operations (no-changelog) (#34578) 2026-07-23 09:35:02 +00:00
Milorad FIlipović
b2f9293f31
feat(core): Add feature flag for group support in mcp (no-changelog) (#34732) 2026-07-23 09:00:18 +00:00
Jan Kalkan
7c74af6844
feat(core): Rename package import CLI conflict-policy flag and default it to new-version (no-changelog) (#34667)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 08:45:13 +00:00
trananhkiet
c7b90d0051
fix(core): Handle MCP OAuth2 token expiry and PKCE negotiation (#34494)
Co-authored-by: Tran Anh Kiet <22877233+trananhkiet@users.noreply.github.com>
2026-07-23 08:21:56 +00:00
yehorkardash
91ac921d45
feat(core): Add rules to detect dead nodes (no-changelog) (#34164) 2026-07-23 08:02:37 +00:00
Declan Carroll
ccd5a87adb
test: Harden e2e suite against tsconfig resolution changes (#34623)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
2026-07-23 07:45:52 +00:00
Stephen Wright
8e5fdb4b2d
fix(core): Sign S3 object paths with strict RFC 3986 encoding (#34694)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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-07-23 06:41:23 +00:00
Michael Drury
ac839bb54a
fix(editor): Restore agent channel credential setup (#34737) 2026-07-23 06:36:04 +00:00
José Braulio González Valido
3f63b73d38
fix(ai-builder): Scope user-proxy decisions to the conversation moment (no-changelog) (#34719)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 00:04:17 +00:00
Arvin A
df3e092473
feat(core): Generate eval collection insights with an LLM (no-changelog) (#34254)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 23:38:11 +00:00
José Braulio González Valido
ce6416fe04
docs(ai-builder): Add a source-linking provenance step to the eval-authoring skill (no-changelog) (#34721)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 22:35:13 +00:00
Jan Kalkan
4044d58d13
feat(core): Validate missing node types on package import (#34598)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:09:27 +00:00
Jan Kalkan
68c7b55f86
fix(core): Fail fast with a node error when a Data Table node references a missing table (#34610)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:42:43 +00:00
José Braulio González Valido
463d50b1bd
refactor(ai-builder): Decompose the eval CLI into phase modules with typed seams (no-changelog) (#34691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:25:44 +00:00
Declan Carroll
7b4d0a8f82
build: Bump pinned dependency versions to latest patch/minor releases (#34629)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 16:02:00 +00:00
Riqwan Thamir
94e505a972
fix(core): Strip null optional node fields from AI-generated workflows (#34668)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 15:38:56 +00:00
Vishesh Gupta
3e0188cf2a
fix(core): Serve RFC 9728 metadata at bare /.well-known/oauth-protected-resource (#33776) 2026-07-22 15:33:24 +00:00
Yuliia Pominchuk
0e186ad8d3
fix(editor): Manage and other permissions checkboxs stuck in half-selected state during member selection (#34726) 2026-07-22 15:20:38 +00:00
Sam Wooler
9ac95b68be
feat(API): Add credentialResolverId, timeSavedMode & binaryMode properties to workflow settings schema (#34330)
Co-authored-by: Soham Ingle <sohamingle@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 15:20:26 +00:00
Lorent Lempereur
5dfa49be6f
fix(core): Redirect form-resume waiting requests to the form endpoint (#34725) 2026-07-22 15:04:29 +00:00
Kai
60112eb81c
feat(core): Add eligible-reviewer API types and reviewer ids to revie… (#34703)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
2026-07-22 14:20:53 +00:00
Charlie Kolb
e56c10f753
docs: Warn when pnpm nathan combines enterprise and AI features (no-changelog) (#34716)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 13:58:23 +00:00
Alex Grozav
aa75d76493
refactor(editor): Invert telemetry by injecting the instance into useTelemetry (no-changelog) (#34635)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
2026-07-22 13:29:02 +00:00
Riqwan Thamir
c0fe8ba4db
feat(editor): Track Instance AI entry point as action_source on builder messages (#34671)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 13:24:29 +00:00
Nour Alhadi Mahmoud
cf3a8658a9
refactor(core): Rename variableMissingPolicy to variableMissingMode (no-changelog) (#34715)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 13:22:29 +00:00
Michael Drury
359e1fba36
fix(editor): Rename preview AI Agent node to V1 (#34714) 2026-07-22 12:27:20 +00:00
Iván Ovejero
b8b3fab14d
refactor(core): Store binary data via blob storage primitives (#34707) 2026-07-22 12:22:37 +00:00
José Braulio González Valido
5a1aa3feef
fix(ai-builder): Detect datasets changes when re-pushing eval cases to LangTracer (no-changelog) (#34658)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 11:55:48 +00:00
LevSky22
03163367a3
fix(core): Normalize workflow rollup timestamps (#34670) 2026-07-22 11:45:36 +00:00
Eugene
34ab8eda03
test: Increase canvas load timeout to stabilize editor E2E tests (#34584) 2026-07-22 11:38:30 +00:00
Nour Alhadi Mahmoud
d7d7f966b7
feat(core): Add must-preexist variable policy for package import (no-changelog) (#34603)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 11:32:40 +00:00
Yen Su
8c2c8b8ca7
feat(core): Add advanced HITL telemetry events for the Gmail node (no-changelog) (#34554)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 11:25:56 +00:00
Alex Grozav
07f6cd4673
refactor(editor): Decouple users.store and versions.store from ui.store (no-changelog) (#34639)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
2026-07-22 11:25:18 +00:00
Raúl Gómez Morales
7a0ca859ae
feat(core): Emit terminal facts on cancel and retire the Instance AI status-poll settle (no-changelog) (#34538) 2026-07-22 11:20:33 +00:00
Guillaume Jacquart
37bb354b46
fix(core): Advertise OAuth protected-resource metadata URL on MCP server 401 responses (#34571)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 10:32:41 +00:00
Arvin A
85b1188d1d
feat(core): Add agent-evals PostHog feature flag and gating (no-changelog) (#34651) 2026-07-22 10:16:40 +00:00
Savelii
ee029b8df9
fix(editor): Fix focus parameter button breaking selection in credential dialog (#34453)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 09:45:09 +00:00
Alex Grozav
ebfd5185c3
fix(editor): Standardize automatic node spacing to match cleanup layout (no-changelog) (#34413) 2026-07-22 09:44:53 +00:00
Guillaume Jacquart
2b1e4b8910
fix(editor): Allow LDAP users to configure n8n 2FA in personal settings (#34655)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 09:33:13 +00:00
Dmitrii
cd1e48e5f5
feat(API): Add public API endpoints for OpenTelemetry configuration (#34429) 2026-07-22 09:28:47 +00:00
Kai
ca0c5f4938
feat(editor): Keep review-required toggle synchronized with open reviews (#34606) 2026-07-22 09:28:10 +00:00
yehorkardash
87115d6cb9
fix(editor): Replace invalid link (#34652) 2026-07-22 09:20:52 +00:00
Bernhard Wittmann
66e8b1310e
feat(core): Detect embedded chat in v3 migration report (no-changelog) (#34604) 2026-07-22 08:50:11 +00:00
Rodrigo Santos da Silva
e01e996649
feat(core): Emit agent run spans through the OTel module's tracer (#34460)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-22 08:48:49 +00:00
Lorent Lempereur
d0badf8b0c
feat: Add per-trigger opt-out from the durable scheduler (no-changelog) (#34367) 2026-07-22 08:41:46 +00:00
Alex Grozav
8301a804b4
feat(editor): Localize insecure connection warning (no-changelog) (#34636)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:39:33 +00:00
Michael Drury
db5c59f9e5
fix(core): Correct agent node saving, agent creation flows and sub-agent language (no-changelog) (#34660) 2026-07-22 08:34:05 +00:00
RomanDavydchuk
95c36b8deb
fix(Form Node): Properly handle quotes in Form Trigger Node name (#34650) 2026-07-22 08:29:28 +00:00
yehorkardash
6195471424
fix(editor): Don't show quick connect for non-main auth fields (#34449) 2026-07-22 08:24:19 +00:00
José Braulio González Valido
ee46e64d50
chore(ai-builder): Typecheck the eval harness and pin its external contracts (no-changelog) (#34673)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 08:18:41 +00:00
Elias Meire
72a311a6f3
feat(Gmail Node): Add warning notice when Simplify is disabled (#34611) 2026-07-22 08:14:25 +00:00
Kai
5939eb52e9
feat(editor): Add workflow review submission flow (#34520) 2026-07-22 08:12:05 +00:00
n8n-assistant[bot]
2222fe3a6c
chore: Bundle/2.x (#34680)
Co-authored-by: Charlie Kolb <charlie@n8n.io>
Co-authored-by: Guillaume Jacquart <jacquart.guillaume@gmail.com>
Co-authored-by: Stephen Wright <sjw948@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Bernhard Wittmann <bernhard.wittmann@n8n.io>
Co-authored-by: Nikhil Kuriakose <nikhil.kuriakose@n8n.io>
Co-authored-by: Albert Alises <albert.alises@gmail.com>
Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com>
Co-authored-by: Andreas Fitzek <andreas.fitzek@n8n.io>
Co-authored-by: Elias Meire <elias@meire.dev>
Co-authored-by: Robin Braumann <50590409+bjorger@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: yehorkardash <yehor.kardash@n8n.io>
Co-authored-by: Mike Repeć <mike.repec@n8n.io>
Co-authored-by: Yuliia Pominchuk <31064937+yuliia-pominchuk@users.noreply.github.com>
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
2026-07-22 08:09:00 +00:00
Stephen Wright
69c86333b2
feat: Allow custom OAuth scopes for Microsoft Azure Monitor, Dynamics, Graph Security and Azure Storage (#34612) 2026-07-22 07:10:54 +00:00
Stephen Wright
4a8dd5b817
feat: Allow custom OAuth scopes for the remaining Google credentials (#34631) 2026-07-22 07:07:41 +00:00
Iván Ovejero
072f2bbd96
refactor(core): Extend ByteStore for binary payloads (#34654) 2026-07-22 07:03:15 +00:00
Yen Su
43c6f329fb
feat(Microsoft SharePoint Node): Add v2 Item Get and Delete actions and item dropdown (no-changelog) (#34602)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 06:22:47 +00:00
yehorkardash
cc4dbf9439
fix: Return reversed array when calling .reverse() (#34625)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
2026-07-21 20:25:24 +00:00
Nikhil Kuriakose
f4365b1579
fix(editor): Html strings for table names are escaped (#24522) 2026-07-21 18:24:21 +00:00
Nour Alhadi Mahmoud
54a95fea6c
feat(core): Resolve variable requirements on package import with do-nothing policy (no-changelog) (#34438) 2026-07-21 17:31:37 +00:00
Arvin A
babc0b7344
fix(core): Fix eval-collection scoring, re-run and progress states (no-changelog) (#34475) 2026-07-21 16:08:38 +00:00
Sandra Zollner
6d38f2ee39
feat(core): Review submission flow endpoints and toggle (#34649)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Kai <kai.grosse.hartlage@gmail.com>
Co-authored-by: Kai <kai.hartlage@n8n.io>
2026-07-21 15:25:16 +00:00
Arvin A
0f0d373a59
fix(core): Compile eval LLM-judge chat model at its current node version (no-changelog) (#34565) 2026-07-21 14:14:24 +00:00
Yuliia Pominchuk
fa0abd8ca8
fix(editor): Reassign users when deleting a custom instance role (#34642) 2026-07-21 14:02:57 +00:00
Emilia
29f2facb48
feat(core): Add N8N_SCHEDULER_MAX_ATTEMPTS to configure scheduler dead-letter threshold (#34633) 2026-07-21 14:00:50 +00:00
José Braulio González Valido
5fd800de20
feat(ai-builder): Support execution scenarios for first-class agents in evals (#34384)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Test: E2E Performance / prepare-docker (push) Has been cancelled
Release: Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: E2E Performance / Canvas Perf Sentinels (push) Has been cancelled
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 13:54:06 +00:00
Robin Braumann
edbed4fc01
fix(core): Sanitize secret values before persisting to agent memory (#34622)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 13:19:17 +00:00
Mike Repeć
4ab05c2da4
ci: Default e2e tests to the vm expression engine (no-changelog) (#34471)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
2026-07-21 13:18:49 +00:00
Alex Grozav
1ce57014d9
refactor(editor): Retire useClipboard and PopOutWindowKey re-export shims (no-changelog) (#34572)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 13:12:56 +00:00
Alex Grozav
2c89c2587d
refactor(editor): Decouple useToast from workflowDocument.store (no-changelog) (#34634)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-21 13:05:52 +00:00
Sandra Zollner
156ac00120
feat(core): Add workflow review request entities and migration scripts (#34062)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: James Gee <1285296+geemanjs@users.noreply.github.com>
Co-authored-by: kgrhartlage <kai.hartlage@n8n.io>
2026-07-21 12:57:39 +00:00
Alex Grozav
fd405f1881
refactor(editor): Retire useDebounce re-export shim (no-changelog) (#34566)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 12:48:52 +00:00
James Martin
2748e1ac78
feat(editor): Adds modal to see all projects a user can access in a list (#34619) 2026-07-21 12:43:16 +00:00
Ali Elkhateeb
e68371c0a9
chore(core): Allow known file extensions in import-x/extensions rule (no-changelog) (#34581) 2026-07-21 12:38:06 +00:00
Raúl Gómez Morales
bd89cfc041
fix(core): Classify masked Instance AI stream failures as quota exhaustion via credit re-check (#34553) 2026-07-21 12:37:17 +00:00
Raúl Gómez Morales
3bb3835db4
fix(core): Skip Sentry reports for Instance AI errors that self-declare a warning level (#34617) 2026-07-21 12:35:59 +00:00
Iván Ovejero
1196c9da35
refactor(core): Move blob storage primitives to @n8n/blob-storage (#34579) 2026-07-21 12:27:28 +00:00
Irénée
41660d0067
feat(core): Support legacy sub-workflow dependencies in package exports (#34398) 2026-07-21 12:27:04 +00:00
Jan Kalkan
3117e455c3
fix(core): Expose workflowPublishingPolicy in the package import CLI command (#34632)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 12:25:23 +00:00
Michael Drury
e67c119f8b
fix(editor): Stabilize icon picker scrolling (#34596) 2026-07-21 11:59:24 +00:00
Alex Grozav
b16b2d8e84
refactor(editor): Move settings.store and roles.store into @n8n/stores behind re-export shims (no-changelog) (#34574)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 11:46:54 +00:00
Savelii
6dc2079399
feat(editor): Show confirmation modal when updating a custom instance role with assigned users (#34544)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 10:57:04 +00:00
Stephen Wright
fd9845df00
feat(Microsoft SharePoint Node): Add v2 File Download and Update with file dropdown (no-changelog) (#34445) 2026-07-21 09:58:54 +00:00
Declan Carroll
96121cccc9
ci: Auto-refresh e2e impact map from nightly coverage run (#34427)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 09:33:24 +00:00
Danny Martini
aafd6064a1
feat(core): Tear down ghost triggers left by a missed unpublish (no-changelog) (#34454)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 09:26:16 +00:00
Iván Ovejero
2f6bb60b14
refactor(core): Move S3 and Azure clients to @n8n/blob-storage (#34567) 2026-07-21 09:10:06 +00:00
Andreas Fitzek
09018b9dba
chore: Fix e2e tests (#34607) 2026-07-21 08:29:37 +00:00
Andreas Fitzek
be786e2802
chore(core): Lock the @n8n/typeorm import ratchet and document the boundary (no-changelog) (#34370) 2026-07-21 08:26:21 +00:00
Robin Braumann
d8c3fadef4
fix(core): Surface HITL suspend/resume content in Instance AI trace turns (#34599)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 08:13:23 +00:00
Michael Drury
3c278f0167
fix(core): Prevent unsupported waiting operations in agent tools (#34587)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 08:13:03 +00:00
n8n-release-tag-merge[bot]
8ae53ef742 Merge tag 'n8n@2.32.0' 2026-07-21 07:54:56 +00:00
Elias Meire
ec5f5032a4
fix(MCP Client Tool Node): Close cached MCP client sessions when their execution finishes (#34397) 2026-07-21 07:24:56 +00:00
n8n-assistant[bot]
662a23c202
🚀 Release 2.32.0 (#34600)
Co-authored-by: n8n-release-helper[bot] <265227495+n8n-release-helper[bot]@users.noreply.github.com>
2026-07-21 07:14:52 +00:00
Rohit Gahlawat
e07eab880a
fix(Airtable Node): Support matching array field values in update operation (#31517)
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
2026-07-21 07:05:23 +00:00
Stephen Wright
e1ad8f4c15
feat(Microsoft SharePoint Node): Add v2 list columns as fillable form fields (no-changelog) (#34542) 2026-07-21 06:37:06 +00:00
Anne Aguirre
ab12ee534c
fix(ai-builder): Scope ToolIoView synth execution under a synthetic document store (#34588)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Util: Sync master to 3.x / Sync master into 3.x (push) Has been cancelled
Util: Sync master to 3.x / Notify Slack about conflict PR (push) Has been cancelled
Util: Sync master to 3.x / Notify Slack on failure (push) Has been cancelled
Co-authored-by: Michael Drury <michael.drury@n8n.io>
2026-07-20 19:11:10 +00:00
Albert Alises
080c3ccc8c
fix(core): Alert on unusable Instance AI sandbox snapshots and gate the release on snapshot health (#34344) 2026-07-20 18:21:53 +00:00
Riqwan Thamir
267fd853cd
fix(core): Cancel Instance AI workspace tools promptly on stop (#34551)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Robin Braumann <50590409+bjorger@users.noreply.github.com>
2026-07-20 16:40:44 +00:00
Albert Alises
f191548586
fix(core): Add a per-attempt timeout to AI assistant service calls (#34341) 2026-07-20 16:28:40 +00:00
Michael Drury
101f3f0a51
feat(core): First class agent executions count towards license quota (no-changelog) (#34450) 2026-07-20 16:28:07 +00:00
Thanasis G
980a8e63bb
feat(Microsoft Excel SharePoint Node): Add Workbook Add Sheet and Delete (no-changelog) (#34244) 2026-07-20 15:27:58 +00:00
Konstantin Tieber
04267462e6
chore(editor): Mark frontend-utils package as private (no-changelog) (#34577) 2026-07-20 15:19:28 +00:00
Michael Drury
e162724baa
fix(editor): Allow self-hosted OpenAI credentials for episodic memory (#34558) 2026-07-20 15:17:35 +00:00
Danny Martini
056c1a6af3
fix(core): Self-heal orphaned trigger status rows on unpublish (no-changelog) (#34443)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 15:17:11 +00:00
Ali Elkhateeb
a4d4dbf99d
feat(API): Add @PublicApiController pattern with reference tags endpoint (no-changelog) (#34511) 2026-07-20 14:52:18 +00:00
Ricardo Espinoza
a2c19e4697
feat(editor): Add Mine/All tabs, search and filters to MCP connected clients (#33857) 2026-07-20 14:33:30 +00:00
Mike Repeć
33f1c36112
fix(core): Skip reporting axios errors thrown as unhandled node errors (#34570)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 14:31:00 +00:00
PRATHAMESH HUKKERI
96264a063b
fix: Extend orphan message cleanup to handle trailing orphans from memory trimming (#34385)
Co-authored-by: Prathamesh Hukkeri <prathamesh04@users.noreply.github.com>
2026-07-20 14:27:26 +00:00
Irénée
7d231684d1
feat(core): Include error workflows as export dependencies (#34350)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 14:21:53 +00:00
Rodrigo Santos da Silva
865035d5a0
fix(editor): Prevent AI Agent from auto adding a chat connector on creation (#34259)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 14:15:23 +00:00
José Braulio González Valido
32d4c1a123
ci(ai-builder): Point eval workflows at the consolidated LangTracer baseline suite (no-changelog) (#34402)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 13:55:41 +00:00
Jon
434941060d
docs: Update community PR guidelines and align readiness-check skill (#34564)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 13:54:11 +00:00
Alex Grozav
22283e5c11
refactor(editor): Move useMessage into @n8n/design-system behind re-export shim (no-changelog) (#34557)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:48:27 +00:00
Ilfat Mindubaev
d6f26cfe7d
fix(core): Coerce AWS request header values to strings before signing (#34534)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 13:40:33 +00:00
Alex Grozav
ccb204ab9f
feat(editor): Expose AuthenticationMethod as a runtime import from @n8n/api-types (no-changelog) (#34559)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:25:18 +00:00
Stephen Wright
04d9b40ff9
feat(Microsoft SharePoint Node): Add v2 File Upload with folder dropdown (no-changelog) (#34431) 2026-07-20 12:55:06 +00:00
Rob Hough
e8b005ee27
fix(editor): Improve Message an Agent panels (#34461) 2026-07-20 12:42:03 +00:00
Elias Meire
bd2e789987
refactor(core): Add breaking change rule for Gmail Trigger versions below 1.4 (#34287) 2026-07-20 12:15:58 +00:00
Rob Hough
051eee1943
fix(editor): Keep dropdown tooltips above menus (#34547) 2026-07-20 11:45:34 +00:00
Riqwan Thamir
4f8fef13ca
fix(core): Cancel Instance AI tool runs promptly when generation is stopped (#34433)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Robin Braumann <50590409+bjorger@users.noreply.github.com>
2026-07-20 11:23:16 +00:00
Raúl Gómez Morales
6f0804e0e3
fix(core): Stop reporting quota-exhausted Instance AI runs to Sentry and isolate report request context (#34549) 2026-07-20 11:07:44 +00:00
Mike Repeć
8d1fc022bb
fix(core): Show a single error toast when a manual execution fails pre-flight validation (#34541)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:56:46 +00:00
Robin Braumann
5cb674ed37
feat: Validate agent configuration before publishing (#34452)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 10:46:29 +00:00
Eugene
3dddd46772
feat(editor): Rename Message an Agent node to AI Agent, deprecate old node (no-changelog) (#34396)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:43:42 +00:00
Csaba Tuncsik
4c353db61e
feat(Microsoft SharePoint Node): Add v2 List Get Many action and list dropdown (no-changelog) (#34329)
Co-authored-by: Stephen <sjw948@gmail.com>
2026-07-20 10:37:03 +00:00
Michael Drury
74384991ee
fix(core): Pass project context to Data Table agent tools (no-changelog) (#34543) 2026-07-20 10:24:00 +00:00
Ali Elkhateeb
cf8337aeb1
feat(API): Add endpoint to set the SAML SSO configuration (#34224) 2026-07-20 10:15:32 +00:00
Yuliia Pominchuk
fa5476c0cb
fix(editor): Include Chat, AI Assistant, and MCP settings under 'Instance settings: Manage' custom role permission (#34455) 2026-07-20 10:04:54 +00:00
Alex Grozav
e845882c5c
refactor(editor): Move htmlUtils into new @n8n/frontend-utils package behind re-export shims (no-changelog) (#34355)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-20 10:02:40 +00:00
Milorad FIlipović
0fb07ca6ad
feat(editor): Add sticky support for canvas groups (#34317) 2026-07-20 09:53:56 +00:00
Jan
a6b54629c5
feat(editor): Rename N8nActionBox to N8nEmptyState and add icon-cards variant (#34407)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 09:20:24 +00:00
Paul Fitzpatrick
d6d7d93df3
feat(Grist Node): Use a single Grist URL field in the credential (#34190)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 08:42:47 +00:00
Alex Grozav
c84ada02ae
feat(editor): Add descriptor v2 fields and module SDK registries (no-changelog) (#34415)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:35:45 +00:00
mfsiega
23285bbd11
feat(core): Relay workflow publication status pushes across main instances (no-changelog) (#34202)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Danny Martini <danny@n8n.io>
2026-07-20 08:26:32 +00:00
Elias Meire
17eb819517
fix(Postgres Node): Return DATE and date/time array columns as strings (v2.7) (#34050) 2026-07-20 07:56:43 +00:00
James Martin
e68fb3af52
fix(editor): Prevent users from clicking workflows within insights that they do not have access to (#34362) 2026-07-20 07:56:25 +00:00
Guillaume Jacquart
c59f5d8b6a
fix(core): Allow publishing end-user credentials with Send-and-Wait nodes (#34462)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 07:55:47 +00:00
Ilfat Mindubaev
61941103e6
feat(Gmail Node): Add advanced HITL configuration for Send and Wait (#34255) 2026-07-20 07:44:23 +00:00
Mike Repeć
eed8f3f142
fix(core): Acquire expression isolate for MCP Trigger tool calls in queue mode (#34491)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:42:12 +00:00
Anne Aguirre
2955d75b30
feat(ai-builder): Refresh Instance AI agent artifact UI on channel setup success (#34465) 2026-07-20 07:17:05 +00:00
Bernhard Wittmann
64507bc6b4
feat: Handle both string and JSON chat WebSocket frames (no-changelog) (#34348) 2026-07-20 05:59:13 +00:00
Bernhard Wittmann
0b8ad18757
fix(Gmail Node): Handle multi-address Reply-To in the reply operation (#34312) 2026-07-20 05:58:11 +00:00
n8n-cat-bot[bot]
72b07269ad
chore: Route dynamic-credential OAuth callback GETs through existing DynamicCredentialApiHelper.completeAuthorizationCallback (#34523)
Some checks failed
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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: Update Node Popularity / update-popularity (push) Has been cancelled
Util: Update Node Popularity / approve-and-automerge (push) Has been cancelled
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:40:29 +00:00
Milorad FIlipović
d5d3da67c1
fix(editor): Auto-ungroup invalid groups on workflow save (#34456) 2026-07-19 14:06:40 +00:00
Miguel Ángel Moreno
93e1b7fd6c
fix(editor): Dissolve single-node canvas group when converting its nodes to a sub-workflow (#34334)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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-07-19 12:09:54 +00:00
Robin Braumann
078ee55890
feat(core): Prefer MCP servers over node tools when available (#34458)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Michael Drury <michael.drury@n8n.io>
2026-07-18 15:26:45 +00:00
Andrew Chen
9d05fbd561
fix(core): Prevent getIncomingData from throwing on a missing connection type (#34285)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 11:31:09 +00:00
Garrit Franke
26caaa876f
fix: Allow devDependency imports in linter (#34335)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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-07-17 19:47:39 +00:00
Mutasem Aldmour
02af123574
feat: Add typed seed data tables with rows on execution scenarios (#34420)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 17:30:19 +00:00
Stephen Wright
f9022dcc71
feat(Microsoft SharePoint Node): Add v2 site selection with search and URL paste (no-changelog) (#34100) 2026-07-17 16:19:56 +00:00
Michael Drury
969a68e217
fix(core): Prefer direct tools for agent capabilities (#34466) 2026-07-17 15:57:03 +00:00
n8n-cat-bot[bot]
307c995669
chore: Janitor: remove dead EvaluationComparePage.getOutputColumns getter (#34468)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:50:31 +00:00
phyllis-noester
09d1e96a1a
fix(editor): Link end-user credentials docs from credential modal (#34406) 2026-07-17 15:49:22 +00:00
Eugene
74be136828
fix(editor): Show agent name instead of Untitled in AI assistant artifacts (no-changelog) (#34395)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:29:47 +00:00
James Gee
2b846aa2bf
chore(core): Remove source project id from data table export (#34464) 2026-07-17 15:07:26 +00:00
Miguel Ángel Moreno
d990aa7321
chore: Fix "between" typos (#34405) 2026-07-17 15:01:37 +00:00
Mike Repeć
4d39e0d97e
test: De-flake webhook and MCP trigger header auth e2e tests (no-changelog) (#34437)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 14:52:23 +00:00
Mike Repeć
09f5adec0d
fix(core): Resolve @n8n/expression-runtime to its CJS build under Node (#34463)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 14:51:34 +00:00
yehorkardash
f47023066e
feat: Add showOnDeployment option, show warning for read file node on cloud (#34417)
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
2026-07-17 14:32:37 +00:00
Mutasem Aldmour
7d6fd4ca9c
fix: Report an unverifiable unit as notVerified, not a silent pass (#34421)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 14:23:10 +00:00
Raúl Gómez Morales
ab8dde5b79
feat(core): Flip the Instance AI durable event log on by default with a pre-log backfill migration (no-changelog) (#34349) 2026-07-17 14:01:21 +00:00
Rodrigo Santos da Silva
b42aeee50f
feat: Adding agents tracing environment variable (#34401) 2026-07-17 14:00:37 +00:00
Irénée
581e490729
feat(core): Add workflow requirements to package exports (#34217) 2026-07-17 13:44:24 +00:00
Thanasis G
cf775e2645
feat(Microsoft Excel SharePoint Node): Add Sheet and Table Get Many with searchable sheet/table dropdowns (no-changelog) (#34296)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 13:36:43 +00:00
Milorad FIlipović
1a830d677d
feat(editor): Improve group select & collapse/expand UX (no-changelog) (#34238) 2026-07-17 13:26:19 +00:00
Alex Grozav
8b2a6cad85
refactor(editor): Retire rbac.store shim, import from @n8n/stores directly (no-changelog) (#34316) 2026-07-17 13:25:03 +00:00
Eugene
97433c9163
feat(core): Show Telegram typing indicator while an agent processes a message (no-changelog) (#34369)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 13:07:15 +00:00
Michael Kret
263ec699d6
feat(core): Adopt "n8n credits" wording and default to it in Instance AI (#34426) 2026-07-17 13:02:29 +00:00
Anne Aguirre
6d56cee0f4
fix(ai-builder): Open agent chat preview on the same tab on instance AI (#34441)
Co-authored-by: Raúl Gómez Morales <raul00gm@gmail.com>
2026-07-17 12:32:13 +00:00
Robin Braumann
9882c5c6cc
fix(core): Preserve agent builder question answers (#34414)
Some checks failed
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.0) (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
Build: Benchmark Image / build (push) Has been cancelled
Util: Sync API Docs / sync-public-api (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 12:11:02 +00:00
Matsu
74991e4342
chore: Clean up dangling Jest artifacts (#34446) 2026-07-17 11:58:36 +00:00
Matsu
86eaa10ff2
chore: Clean up TS migration artifacts (#34439) 2026-07-17 11:58:18 +00:00
Danny Martini
a09bb99f71
chore(core): Add test:integration:dev watch script to packages/cli (no-changelog) (#34444)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:48:24 +00:00
Elias Meire
391deb91af
fix: Serialize date output in FTP, Set, IMAP and Unleashed nodes (#34205) 2026-07-17 11:47:09 +00:00
Guillaume Jacquart
ea4f604d51
test(editor): Cover managed OAuth availability without node context (#34430)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 11:28:09 +00:00
Michael Drury
9ef376ba8f
fix(editor): Improve agent node canvas sizing, placement and selector open link (no-changelog) (#34363)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:26:05 +00:00
Rob Hough
e8922cbadf
fix(editor): Restore previous route when closing session trace (#34423) 2026-07-17 11:24:30 +00:00
Matsu
3323eb688b
test: Fix flaky Instance AI remediation guard skill narration assertion (no-changelog) (#34442)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 11:18:00 +00:00
Mutasem Aldmour
40c5b76708
fix: Do not lose scenario results on a budget/timeout abort (#34419)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 11:15:28 +00:00
Robin Braumann
8879b87980
fix(editor): Reconcile stale Instance AI run state on reload and stop (#34432)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 11:15:23 +00:00
Daria
ecff317c57
feat(editor): Save canvas group description pinned state in local storage (#34220) 2026-07-17 11:14:26 +00:00
Mutasem Aldmour
1b173c791a
fix: Provide provider-accurate response shapes for evals (#34418)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 11:08:48 +00:00
Robin Braumann
7c7506dc16
fix(core): Persist MCP servers when credential setup is skipped (#34399)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 11:08:12 +00:00
Danny Martini
4aa5fd08e9
chore(core): Make dockerized schema-docs independent of container-to-host networking (no-changelog) (#34146)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 10:37:52 +00:00
Riqwan Thamir
ecef57fdc5
fix(core): Stop workflow-builder from adding sticky notes by default (no-changelog) (#34410)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-17 10:34:27 +00:00
James Martin
338f186f0b
fix(core): Replace https agent for 'Ignore SSL issues' OAuth2 requests with one that respects proxies (#34234) 2026-07-17 10:18:59 +00:00
Anne Aguirre
9fad2ba510
feat(ai-builder): Send agent preview chat context to AIA chat (#34308) 2026-07-17 10:17:17 +00:00
Iván Ovejero
f7496a5aae
feat(core): Add per-workflow execution data write bytes metric (#34425) 2026-07-17 10:13:58 +00:00
Daria
8477e5896a
feat(editor): Add descriptions to canvas groups (#34219) 2026-07-17 09:59:51 +00:00
Anne Aguirre
f851863090
feat(ai-builder): Help AIA remove / adjust agent channels (sp Slack) via chat (#34241) 2026-07-17 09:54:48 +00:00
Elias Meire
bdff8f4be9
fix(core): Fix AI Agent not seeing tools connected through HITL tools (#34271) 2026-07-17 09:53:50 +00:00
Anne Aguirre
8c1d17ff51
fix(ai-builder): Wire thread conversation history - with caps - for agents with slack channel (#34354)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-17 09:46:40 +00:00
Arvin A
dde77cb7d3
feat(editor): Add per-case compare tabs to eval collection compare view (#33880) 2026-07-17 09:46:40 +00:00
Matsu
e34343b4a0
chore: Migrate all base packages to TypeScript 7 (#34338)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 12:56:29 +03:00
Rob Hough
1ab30cb609
fix(editor): Rename agent tasks to schedules (#34326) 2026-07-17 09:15:19 +00:00
Thanasis G
7226943577
feat(Microsoft Excel SharePoint Node): Add Sheet Append with auto-map, define-fields, and RAW data modes (no-changelog) (#34236)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 09:14:00 +00:00
Nikhil Kuriakose
114c74d6bf
fix(editor): Remove extra top spacing in sticky note markdown (#34116)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 09:07:22 +00:00
Andreas Fitzek
1fdc289bb6
test: Align MCP trigger credential gate e2e test with owner-bound authorize link (#34411) 2026-07-17 09:04:48 +00:00
RomanDavydchuk
f43d723571
fix(Google Workspace Admin Node): Not able to reactivate the user (#33937) 2026-07-17 09:01:10 +00:00
James Gee
4844223dbc
feat(core): Import a project with folders and workflows (no-changelog) (#34026) 2026-07-17 08:53:06 +00:00
Declan Carroll
f7f0556f65
build: Bump base and n8n images to Node 24.18.0 (no-changelog) (#34337)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 08:45:32 +00:00
Stephen Wright
8cd77688f4
feat(Microsoft SharePoint Node): Add v2 List Get action (no-changelog) (#34061) 2026-07-17 08:39:25 +00:00
Matsu
3ed10e4f66
chore: Fix buildAndDev watch mode on TS7 (#34408) 2026-07-17 11:36:40 +03:00
Nour Alhadi Mahmoud
b63758247e
feat(core): Add variable bundling to package export (#34040) 2026-07-17 08:01:37 +00:00
yehorkardash
afe603fc00
fix(core): Update error message on file write (#33833) 2026-07-17 07:54:25 +00:00
Matsu
9b2b78f8d5
chore: Migrate the rest of packages/@n8n to typescript 7 (#34332)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 10:45:58 +03:00
Anne Aguirre
84ee0632a3
feat(ai-builder): Allow AIA agent builder to publish and unpublish first-class agents (#34368) 2026-07-17 07:08:34 +00:00
n8n-cat-bot[bot]
600826c8a7
chore: Janitor: deduplicate shared page-object selectors (project-name, menu-item) (#34390)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 06:50:29 +00:00
Iván Ovejero
d1475ada6e
chore: Prepare for Node 26 upgrade (#34340) 2026-07-17 06:32:34 +00:00
Robin Braumann
77880a3106
fix: Gate agent knowledge base table on AI Assistant proxy availability (#34366)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 06:21:17 +00:00
José Braulio González Valido
3f7258b1a4
test(ai-builder): Prune the stored-key eval case carve-out (no-changelog) (#34248)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:24:40 +00:00
Jan Kalkan
0b809c987a
fix(core): Delete executions in batches when removing workflows, projects and folders (#34265)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 19:20:13 +00:00
Srinjoy
64318a810d
fix(editor): Decouple MCP redirect URI controls from env-lock flag (#34184) 2026-07-16 16:19:38 +00:00
Emilia
705f97e1bb
fix(core): A new schedule trigger's first occurrences must be seeded on activation (no-changelog) (#34356)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 16:11:30 +00:00
Robin Braumann
2ef1c3e32f
fix: Keep generated OpenAI cache keys within provider limit (no-changelog) (#34365)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 15:53:57 +00:00
Robin Braumann
a9357ef564
feat(core): Enable prompt caching for the agent-builder sub-agent (#34352)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 15:53:12 +00:00
Lorent Lempereur
0abb754421
test: Add dependency purity guard for @n8n/scheduler (#34346) 2026-07-16 15:51:57 +00:00
Alex Grozav
6faca890d2
fix(editor): Show only the latest node as executing during manual executions (#34182)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-16 15:48:30 +00:00
Lorent Lempereur
8000a98a47
test(core): Add durable scheduler performance benchmarks (#34279)
Co-authored-by: Emilia <100027345+sovietspaceship@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 15:37:35 +00:00
Raúl Gómez Morales
50c3d88af5
fix(core): Exclude in-flight Instance AI groups from history reads on non-driving mains (#34345) 2026-07-16 14:46:02 +00:00
Lorent Lempereur
960f6a1db6
refactor(core): Require task handlers to return an explicit dispatch decision (#34276)
Co-authored-by: Emilia <100027345+sovietspaceship@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:43:33 +00:00
Alex Grozav
c83eab047c
fix(editor): Refresh editor checksum on workflow deactivation while editing (#34315)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:17:40 +00:00
Benjamin Schroth
1e04b6dca9
feat(editor): Rework the evaluations sidepanel into a test-case-centric Tests panel (no-changelog) (#34273) 2026-07-16 14:17:06 +00:00
Albert Alises
80ea25b76e
fix(core): Retry transient sandbox file writes (#34319) 2026-07-16 14:13:48 +00:00
Alex Grozav
aa0dad59c3
chore(editor): Upgrade @vueuse/core to v14 (no-changelog) (#32852)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-16 14:13:19 +00:00
Thanasis G
c4a0a68664
feat(Microsoft Excel SharePoint Node): Add Sheet Clear and Delete (no-changelog) (#34245) 2026-07-16 13:52:54 +00:00
Raúl Gómez Morales
56b6427721
fix(core): Serve the open streamed segment on SSE bootstrap and heal suffix partials (no-changelog) (#34250) 2026-07-16 13:51:08 +00:00
Yen Su
c96272a72f
feat(core): Add telemetry events for advanced HITL usage (no-changelog) (#34225)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-16 13:32:06 +00:00
PRATHAMESH HUKKERI
83dd194a89
fix(QuickBooks Node): Initialize headers object in quickBooksApiRequest (#34291)
Co-authored-by: Prathamesh Hukkeri <prathamesh04@users.noreply.github.com>
2026-07-16 13:23:16 +00:00
Mutasem Aldmour
cc0dec234b
fix(core): Conform eval mock output to declared structured-output schema (no-changelog) (#34323)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 13:22:08 +00:00
Robin Braumann
d9010f7689
feat(core): Trace and meter observational-memory LLM calls and raise observer thresholds (no-changelog) (#34235)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 13:19:35 +00:00
Thanasis G
d4684fbfd7
feat(Microsoft Excel SharePoint Node): Add site and library dropdowns (no-changelog) (#34309)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 13:11:18 +00:00
yehorkardash
9f0a6fa68b
fix: Resolve modules on windows (#34167) 2026-07-16 13:04:16 +00:00
Eugene
ccbfe94a49
fix(core): Hide sub-workflow tool from agent tool selection (no-changelog) (#34336)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:59:45 +00:00
Benjamin Schroth
a871e2718f
feat(editor): Evaluations Tests panel — state & composables (no-changelog) (#34304) 2026-07-16 12:41:40 +00:00
Alex Grozav
1775459c10
refactor(editor): Move htmlUtils into @n8n/composables behind re-export shims (no-changelog) (#34318)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 12:39:04 +00:00
Rob Hough
0f2600855e
refactor(editor): Make EM more visible in Agents (#34246) 2026-07-16 12:23:07 +00:00
Anne Aguirre
0984a1d97a
fix(ai-builder): Resurface channel edit modal on AIA agent builder's artifact mode (#34257) 2026-07-16 12:18:40 +00:00
Albert Alises
5b7df71a05
fix(core): Retry transient AI assistant service errors during Instance AI environment setup (#34324) 2026-07-16 12:09:55 +00:00
Jan
79fd251f41
fix(editor): Support dark mode in instance settings Storybook examples (no-changelog) (#34322)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 12:07:32 +00:00
Albert Alises
29c5d725c7
fix(core): Create proxied Instance AI sandboxes from snapshots only (#34328) 2026-07-16 11:55:27 +00:00
James Martin
a89817dc92
fix(core): Add project ID and project name to log stream events (#33854) 2026-07-16 11:55:16 +00:00
RomanDavydchuk
79989407ff
fix(Split Out Node): Properly handle if "Fields to split out" is not a string (#34148)
Co-authored-by: Alexander Gekov <40495748+alexander-gekov@users.noreply.github.com>
2026-07-16 11:54:57 +00:00
Anne Aguirre
5a3394aa34
feat(core): Support agent preview handoff in Instance AI (#34171) 2026-07-16 11:45:05 +00:00
Stephen Wright
2595484856
feat(Microsoft Excel SharePoint Node): Add Sheet Get Rows with workbook by URL or ID (no-changelog) (#34098)
Co-authored-by: Thanasis Gkliatis <thanasis.gkliatis@n8n.io>
2026-07-16 11:42:52 +00:00
Emilia
9aa19a7198
fix(core): Claim scheduler jobs ahead of due to remove materializer window-boundary lag (no-changelog) (#34331)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 11:33:57 +00:00
n8n-cat-bot[bot]
1e52ffeca0
chore: Disable n8n node API-coverage contract test until API team resync (#34333)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 11:23:44 +00:00
Benjamin Schroth
cc38d09efd
feat(core): Evaluations Tests panel — backend + contract (no-changelog) (#34303) 2026-07-16 11:22:46 +00:00
Yiğit ERDOĞAN
fffee465a4
fix(Salesforce Node): Pass ParentId when creating or updating a Case (#33775)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 10:50:13 +00:00
Eugene
37f569053f
fix(editor): Place nodes added after an agent node clear of the agent card (no-changelog) (#34314)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 10:41:39 +00:00
Raúl Gómez Morales
865142f5da
feat(core): Sweep interrupted Instance AI runs to a terminal state (no-changelog) (#34183)
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 10:37:28 +00:00
Steven Miller
a844d0336e
feat(API): Support placing workflows in folders via parentFolderId (#32696)
Co-authored-by: Sam Wooler <swooler592@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:27:14 +00:00
Matsu
31df99034a
chore: Consolidate ts tooling catalog (#34310) 2026-07-16 10:10:12 +00:00
Nikhil Kuriakose
be4da5db1e
chore(editor): Remove feature flag 070_empty_screen_layout (no-changelog) (#34272)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:03:44 +00:00
Nikhil Kuriakose
eb6a4a1714
fix(editor): Wrap long keyboard shortcut tooltip labels within max-width (#34135)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:00:41 +00:00
Riqwan Thamir
65e267bce7
fix(core, editor): Clarify credential setup outcomes and add requireUserSelection (#34268)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 09:59:15 +00:00
Sebastien Powell
bac57c4ec1
feat(editor): Add new Tags Input component to @n8n/design-system (#34075) 2026-07-16 09:58:55 +00:00
Emilia
02183cb98c
test(core): Add Schedule Trigger durable scheduler e2e (single- and multi-main) (no-changelog) (#34139)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 09:58:40 +00:00
Lorent Lempereur
e22680b99f
fix(core): Close the durable scheduler's record-then-dispatch effect boundary (#34014)
Co-authored-by: Emilia <100027345+sovietspaceship@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 09:47:10 +00:00
Sam Wooler
571e6424ed
feat(API): Allow creating a folder in the calling user's personal project (#34091)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 09:31:42 +00:00
Csaba Tuncsik
578545c1e9
fix(Microsoft OneDrive Node): Resolve service principal target per input item (#34111) 2026-07-16 09:20:24 +00:00
Csaba Tuncsik
afc8a87a60
fix(Microsoft Excel Node): Resolve service principal target per input item (#34112) 2026-07-16 09:20:16 +00:00
Eugene
bf3c2816c2
feat(editor): Pick the agent in the node creator when adding Message an Agent (no-changelog) (#34208)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 08:59:26 +00:00
oleg
97446258af
feat(editor): Collapse AI Assistant thinking traces into thinking blocks (#34274)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
2026-07-16 08:56:19 +00:00
Sandra Zollner
0a4dddeb29
fix(core): Preserve local credential fields absent from source contro… (#34173)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 08:51:30 +00:00
n8n-cat-bot[bot]
fcdd756122
chore: Refresh Playwright janitor baseline (scope-lockdown drift from #34059) (#34192)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 08:46:54 +00:00
Dmitrii
4a651dd1aa
feat(API): Add public API endpoints for log streaming destinations (#34251) 2026-07-16 08:41:28 +00:00
Stephen Wright
e43a162e4d
fix(Microsoft Teams Node): Validate Graph path IDs under all credential types (#34065) 2026-07-16 08:34:34 +00:00
Jan Kalkan
d9f8f281fa
feat(core): Import data tables with matching by id (no-changelog) (#34118)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 08:33:41 +00:00
Csaba Tuncsik
c5c5b3ea78
ci: Exempt node-test-harness imports from the boundaries ratchet (no-changelog) (#34294) 2026-07-16 08:13:06 +00:00
Nikhil Kuriakose
8ba28dc7a9
fix(editor): Prevent workflow actions menu from being cut off (#34278)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 07:48:50 +00:00
Matsu
1c40b4b6d0
chore: More Typescript 7 migrations (#34228) 2026-07-16 07:44:11 +00:00
Emilia
2d5b4aefd1
fix: Stop janitor dead-code rule OOMing on large Playwright suites (no-changelog) (#34264)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 07:32:38 +00:00
n8n-release-tag-merge[bot]
166fa18783 build: release @n8n/scan-community-package@0.28.0 (no-changelog) 2026-07-16 07:37:55 +00:00
Matsu
706e11648f
ci: Update standalone package publish to match new conventions (#34305) 2026-07-16 10:36:25 +03:00
Ricardo Espinoza
cc515a77c1
feat(editor): Show per-scope tool details on the MCP consent screen (#33783) 2026-07-16 07:09:35 +00:00
n8n-cat-bot[bot]
1301bbaf53
fix: Correct build-command quoting in standalone package release (#34258)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
2026-07-16 09:25:41 +03:00
Csaba Tuncsik
831e054e6e
fix(Microsoft Outlook Node): Resolve service principal mailbox per input item (#34110) 2026-07-16 05:57:28 +00:00
Ricardo Espinoza
0ca24ba996
feat(editor): Show access and client details in the connected MCP clients list (#33714)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 18:00:50 +00:00
Stephen Wright
04d8d3e0c7
feat(Microsoft SharePoint Node): Add v2 shared Graph transport (no-changelog) (#34063) 2026-07-15 17:30:42 +00:00
Stephen Wright
2e3123097e
fix(core): Sign SES requests with the ses service name (#34270) 2026-07-15 16:12:08 +00:00
Svetoslav Dekov
79012f66d7
fix(core): Require execution mode for MCP workflow executions (#34155)
Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>
2026-07-15 16:03:52 +00:00
Andreas Fitzek
65da749ab3
fix: Correct end-user credential validation, re-evaluation, and identity-hook recognition (#34094) 2026-07-15 15:46:44 +00:00
Konstantin Tieber
87cdf3d252
fix(core): Fix change in width of all dropdowns in UI (#34249) 2026-07-15 15:21:35 +00:00
n8n-cat-bot[bot]
62b4904f0f
ci: Fix filter quoting in standalone package release build (#34261)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:11:08 +00:00
Riqwan Thamir
454e0d3edd
fix(editor): Restrict setup credential dropdown to pinned type (#34252)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 14:36:02 +00:00
Riqwan Thamir
487594cfcd
fix(editor): Make selector dropdowns usable in Instance AI workflow setup (#33971)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 14:35:48 +00:00
Garrit Franke
5f3d139648
fix(core): Lint community packages against their provenance-attested source (#34214)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 14:17:23 +00:00
Alex Grozav
e04eee5120
refactor(editor): Move useClipboard into @n8n/composables behind re-export shim (no-changelog) (#34229)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 14:02:30 +00:00
mfsiega
4818e79b5a
perf(core): Skip webhook-only workflows when enqueuing publications on leader handoff (no-changelog) (#34076)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Danny Martini <danny@n8n.io>
2026-07-15 14:02:22 +00:00
Luka Zivkovic
b1ab6fa276
test(core): Cover vector store insert provider errors (#34105) 2026-07-15 14:02:11 +00:00
mfsiega
d119890f75
fix(core): Wire pubsub handlers of the workflow publication modules (no-changelog) (#34207)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Danny Martini <danny@n8n.io>
2026-07-15 14:02:07 +00:00
Luka Zivkovic
d6b92343e1
fix(editor): Restore hosted chat Markdown styles (#34176) 2026-07-15 14:01:56 +00:00
Raúl Gómez Morales
429578529d
feat(core): Fold Instance AI history from the durable event log behind N8N_INSTANCE_AI_DURABLE_LOG (no-changelog) (#34178) 2026-07-15 13:58:52 +00:00
Alex Grozav
7ebeb1e194
fix(editor): Refresh editor checksum on workflow activation while editing (#34095)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-15 13:55:33 +00:00
Robin Braumann
cf5ea8e173
fix(core): Make the AI Assistant agent-aware — intent gate, multi-agent sessions, builder session cleanup (no-changelog) (#34200)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 13:00:10 +00:00
Arvin A
38894a067a
feat(core): Add config-evals skill for Instance AI eval creation (no-changelog) (#34082)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 12:49:31 +00:00
Eugene
33a02a90d2
feat: Add skills support to inline agents (no-changelog) (#34128)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 12:42:55 +00:00
Yen Su
d30e7b042c
feat(Slack Node): Add advanced HITL configuration for one-tap approval (#34123)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 12:38:46 +00:00
Nikhil Kuriakose
3b6af5199a
fix(editor): Trigger options menu from node details header add button (#34212)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 12:36:26 +00:00
Alex Grozav
16b5ee2ff1
refactor(editor): Move useDebounce and durations into @n8n/composables (no-changelog) (#34143)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 12:34:40 +00:00
Benjamin Schroth
d6dcf3b749
test(ai-builder): Support evals for agent building and for config evals (no-changelog) (#33888)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-07-15 12:34:21 +00:00
José Braulio González Valido
9a48bc5fa7
fix(ai-builder): Honor eq @version conditions in generated node type definitions (#34232)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 12:32:00 +00:00
Michael Kret
4e4283bf62
feat(core): Enable n8n Connect usage in n8n MCP (#33723) 2026-07-15 11:58:44 +00:00
Matsu
cec46445ee
chore: Migrate packages/cli to Typescript 7 (#34159) 2026-07-15 11:49:51 +00:00
Csaba Tuncsik
0e8420bbff
fix(HTTP Request Node): Sign non-standard AWS endpoint hosts with the correct region and service (#34081)
Co-authored-by: Thanasis Gkliatis <thanasis.gkliatis@n8n.io>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Thanasis G <96360514+gthanasis@users.noreply.github.com>
2026-07-15 11:43:20 +00:00
Daria
318925a421
feat(editor): Improve sub workflow extraction (#34169) 2026-07-15 11:39:13 +00:00
Mutasem Aldmour
0194eb3c14
docs: Sharpen eval sourcing + calibration guidance (#34222)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 11:00:59 +00:00
Charlie Kolb
f71a94ddf9
chore: Add opt-in dev-tooling usage metrics (no-changelog) (#33620)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Matsuuu <matias.huhta@n8n.io>
2026-07-15 10:54:41 +00:00
Irénée
2b6a6a125a
feat(API): Add workflow dependency export policy (no-changelog) (#34175) 2026-07-15 09:43:31 +00:00
Matsu
487be601bd
chore: Migrate more packages to Typescript 7 (#34216) 2026-07-15 12:42:14 +03:00
Mutasem Aldmour
307773dd1b
feat: Add instance-ai collaborative eval creation and co-review cockpit (no-changelog) (#34213)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:06:53 +00:00
José Braulio González Valido
ced861603b
test(ai-builder): Move the workflow-eval case corpus to LangTracer (no-changelog) (#33983)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:58:49 +00:00
Matsu
6a4f0cdfbd
chore: Migrate to a npm fork of xlsx (#34199) 2026-07-15 08:42:14 +00:00
Charlie Kolb
b0c501d09d
ci: Declare ~icons as an implicit boundaries dependency (no-changelog) (#34210)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 08:23:07 +00:00
Ali Elkhateeb
e76b345fd8
feat(API): Add endpoint to retrieve SAML SSO configuration (#34168) 2026-07-15 08:11:30 +00:00
Mutasem Aldmour
199584aab0
fix(core): Correct OpenAI mock response shapes in eval simulation (no-changelog) (#34140)
Co-authored-by: Jose <jose.gonzalez@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 07:49:16 +00:00
Charlie Kolb
59aca03796
ci: Guard new turbo boundaries violations via baseline ratchet (no-changelog) (#33988)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 07:46:17 +00:00
Dmitrii
f24570f21f
fix(API): Fix broken public API playground server selection (#34077) 2026-07-15 07:32:09 +00:00
Robin Braumann
be353431da
feat(core): Add tracing, credit metering, and telemetry for the builder sub-agent (#34151)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 06:15:38 +00:00
Alexander Gekov
8284460a5a
fix(core): Preserve node aliases when generating AI tool variants (#34162)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 06:10:27 +00:00
Lorent Lempereur
038d2ca286
feat(core): Add durable scheduler rollout docs and observability warnings (no-changelog) (#34170)
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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
Co-authored-by: Emilia <100027345+sovietspaceship@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 21:30:07 +00:00
Eugene
e69bd4e4eb
feat: Add inline agent mode to the Message an Agent node (no-changelog) (#34059)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 19:03:35 +00:00
Raúl Gómez Morales
897533b603
feat(core): Wire the Instance AI durable event log behind N8N_INSTANCE_AI_DURABLE_LOG (no-changelog) (#33984)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
2026-07-14 15:49:22 +00:00
oleg
d33c282b95
feat(core): Unify output schema mock generation and verify AI Assistant workflows with any trigger type (#33896) 2026-07-14 15:27:08 +00:00
Csaba Tuncsik
013c34ccae
fix(AWS Bedrock Chat Model Node): Default guardrail version to working draft when not set (#33555) 2026-07-14 15:15:10 +00:00
mfsiega
c761c4da9b
feat(core): Add trigger reconciliation to recover missed activations (no-changelog) (#33577)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Danny Martini <danny@n8n.io>
2026-07-14 14:40:33 +00:00
n8n-cat-bot[bot]
4adcc45929
test: Route SidebarPage through BasePage and scope in-container (#33945)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 14:30:29 +00:00
Robin Braumann
fd13039be2
feat(core): Cascade builder sub-agent questions into the AI assistant chat (no-changelog) (#34086)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-14 14:22:03 +00:00
Declan Carroll
33723ea285
build: Upgrade dependencies to resolve security advisories (#34025)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 14:00:15 +00:00
Stephen Wright
59a1812d99
feat(Microsoft Excel SharePoint Node): Add the shared Graph request code (no-changelog) (#34097)
Co-authored-by: Thanasis Gkliatis <thanasis.gkliatis@n8n.io>
2026-07-14 13:47:38 +00:00
Ricardo Espinoza
c3ca9a36da
feat(editor): Add scope selection to MCP OAuth consent screen (#33710)
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:21:14 +00:00
Csaba Tuncsik
9b2479c538
fix(Microsoft To Do Node): Resolve service principal target per input item (#34109) 2026-07-14 13:06:21 +00:00
Irénée
aa12e2fcea
feat(core): Block n8n-package export when sub-workflow is missing (no-changelog) (#33846) 2026-07-14 12:48:42 +00:00
Matsu
6e473f556c
chore: Add dummy get-n8n.sh script (#34157) 2026-07-14 15:37:46 +03:00
Alex Grozav
5ceaa3b17b
refactor(editor): Move rbac.store into @n8n/stores (no-changelog) (#34141)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-14 12:24:39 +00:00
Alex Grozav
0739aeb970
feat(editor): Export CommandBarItem type from @n8n/design-system package index (no-changelog) (#34138)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 12:10:39 +00:00
n8n-cat-bot[bot]
90f25e221d
fix: Even out workflow metadata divider spacing (#34132)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Nikhil Kuriakose <nikhilkuria@gmail.com>
2026-07-14 11:54:25 +00:00
oleg
9842c2c28c
fix(core): Count AI assistant workflow test runs as manual executions in statistics (#34145) 2026-07-14 11:41:09 +00:00
Stephen Wright
93fa40c395
feat(Microsoft Excel SharePoint Node): Add sign-in with person and app credentials (no-changelog) (#34089) 2026-07-14 11:41:02 +00:00
Filipe Tavares
92541f1c5e
fix(editor): Allow scrolling the AI Assistant empty view when content overflows (no-changelog) (#34142)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:27:23 +00:00
Raúl Gómez Morales
05b412cd28
feat(core): Add the Instance AI durable event-log store and writer (no-changelog) (#33910)
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:12:31 +00:00
n8n-cat-bot[bot]
9c3f7fa44b
fix: Default new agent MCP tool transport to httpStreamable (#34092)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Eugene Molodkin <eugene@n8n.io>
2026-07-14 11:11:51 +00:00
Ali Elkhateeb
17c4d26baf
fix(API): Sort tags alphabetically in the public API manifest (no-changelog) (#34087) 2026-07-14 10:54:12 +00:00
José Braulio González Valido
a774a18b95
ci(ai-builder): Fetch eval test cases from LangTracer (no-changelog) (#33982)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:52:27 +00:00
Matsu
2fc48bdfd5
chore: Migrate part of backend packages to Typescript 7 (#34131)
Some checks are pending
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.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (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: Sync API Docs / sync-public-api (push) Waiting to run
2026-07-14 13:01:47 +03:00
Mutasem Aldmour
4ef0d05f1c
fix(editor): Make AI assistant quota-exhausted error states explicit (#33847)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 09:46:35 +00:00
James Martin
fd261be97c
fix(core): Bind dynamic credential tokens to a user ID (#34073) 2026-07-14 09:28:47 +00:00
José Braulio González Valido
2233d720ae
ci: Bound and instrument Instance AI eval lane containers (no-changelog) (#33903)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 09:28:46 +00:00
Lorent Lempereur
b3a0a47217
feat: Wire the Schedule Trigger node into the durable scheduler (no-changelog) (#33973)
Co-authored-by: Emilia <100027345+sovietspaceship@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 09:23:34 +00:00
Alex Grozav
83227bca13
refactor(editor): Extract module contract and registries into @n8n/frontend-module-sdk (no-changelog) (#34080)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 09:20:00 +00:00
TimberZZ
b9199e5a96
feat(Mailgun Node): Add reply-to, custom headers, and tags (#28558)
Co-authored-by: Jon <jonathan.bennetts@gmail.com>
2026-07-14 09:06:44 +00:00
Benjamin Schroth
18b34cab77
feat(API): Add public API endpoints to trigger and cancel evaluation test runs (#33979) 2026-07-14 09:03:36 +00:00
James Gee
0232c9138d
feat(core): Import a folder with workflows (no-changelog) (#34022) 2026-07-14 09:00:20 +00:00
Yuliia Pominchuk
297e2529b3
fix(editor): Polish pass on the custom instance roles (#34122) 2026-07-14 08:57:09 +00:00
Thanasis G
6db46bc381
feat(Telegram Node): Add advanced HITL configuration for one-tap in-chat approval (#34009)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 08:56:38 +00:00
Stephen Wright
23a79e80ab
feat(Microsoft Excel SharePoint Node): Add hidden node shell (no-changelog) (#34088) 2026-07-14 08:28:31 +00:00
Nikhil Kuriakose
a2fd7f7e96
fix(editor): Avoid next prev buttons from being disabled (#33774) 2026-07-14 08:07:14 +00:00
Charlie Kolb
b2ceb082ae
chore: Add repo-local Nathan CLI for deploying test instances (#33990)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 08:00:20 +00:00
n8n-release-tag-merge[bot]
69f898cd68 Merge tag 'n8n@2.31.0' 2026-07-14 08:05:37 +00:00
Ilfat Mindubaev
a4738eaf49
feat(AWS Bedrock Chat Model Node): Add Timeout option (#34072) 2026-07-14 07:49:51 +00:00
Matsu
223dca9d7b
ci: Ping release captain when release fails (#34121) 2026-07-14 07:47:59 +00:00
Savelii
7a56ade6b2
fix(core): Prevent sub-workflow failures after transferring a deleted user's workflows (#33772)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 07:33:01 +00:00
Arvin A
e8dd60989b
feat(core): Gate Instance AI config-based evals behind a PostHog feature flag (no-changelog) (#34067)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 07:23:14 +00:00
n8n-cat-bot[bot]
62fd9072af
test: Stabilize executions filter reset e2e test (#34114)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
2026-07-14 07:10:00 +00:00
4008 changed files with 246051 additions and 53626 deletions

View File

@ -23,7 +23,7 @@ Given a PR number or branch name, determine whether it is ready for human review
## Decision tree
1. **Bot author** (`n8n-cat-bot` / `aikido-autofix`) → cleanup-only, no review. See "Internal automation PRs" below.
2. **Auto-rejection screen matches** (typo-only / unsanctioned new node) → action path **D — close** with the matching template.
2. **Auto-rejection screen matches** (typo-only / unsanctioned new node / low-value) → action path **D — close** with the matching template.
3. **All checks pass** (`readyForReview === true`) → action path **B — triage to team**.
4. **One or more checks fail** → action path **A** (if title is minor-fix only) then **C — post comment**.
@ -91,22 +91,25 @@ gh api --paginate "repos/n8n-io/n8n/issues/<number>/comments" \
## Step 2.5 — Auto-rejection screen
Per `CONTRIBUTING.md`, two PR patterns should be closed outright rather than reviewed:
Per `CONTRIBUTING.md`, three PR patterns should be closed outright rather than reviewed:
- **Typo-only PR** — diff is entirely spelling/grammar fixes with no logic or tests.
- **New-node PR** — adds a brand-new node, unless the n8n team has explicitly agreed to take it.
- **Low-value / automated PR** — diff is entirely whitespace/formatting/reordering, an unexplained mass rename or dependency bump, badge/comment-only tweaks, or a bulk scripted submission, with no functional change or rationale. Screen conservatively.
If either matches, set `checks.AutoReject` and skip directly to action **D**. Full rules and how to verify each pattern: see `reference/checks.md`.
If any matches, set `checks.AutoReject` and skip directly to action **D**. Full rules and how to verify each pattern: see `reference/checks.md`.
## Step 3 — Run the five checks
## Step 3 — Run the readiness checks
Run when `AutoReject` is `null`. Full rules for each in `reference/checks.md`:
- **A. CLA**`cla-signed` label present.
- **B. Title** — matches the conventional-commit regex. Authoritative rules in `.github/pull_request_title_conventions.md`.
- **C. Description** — every section heading and checklist item from `.github/pull_request_template.md` is present in the PR body. The template is read at check time, so changes to it propagate automatically.
- **D. Tests** — source logic changes have matching test files. Skip for `docs/ci/chore/build` PRs.
- **D. Tests** — source logic changes have matching test files (a `fix` needs a regression test covering the bug). Skip for `docs/ci/chore/build` PRs.
- **E. cubic-dev-ai** — no unresolved comments (resolved = "Addressed in commit" marker).
- **F. Linked issue or forum discussion**`fix` PRs link a GitHub issue; `feat`/`refactor`/`perf` PRs link an issue or `community.n8n.io` topic. Skip for `docs/ci/chore/build/test`.
- **G. Size** — sum of per-file `additions` in `files` (skipping lockfiles/generated) ≤ 1000 and one logical change; sets `Oversized`.
## Step 4 — Identify the responsible team
@ -158,18 +161,20 @@ Also inspect the matched Linear issue ticket (from the search above) for an alre
"relatedIssueTickets": [<"GHC-1234" | "NODE-5678" | ...>],
"duplicatePRs": [<{ "number": <int>, "title": "<string>" }, ...>],
"checks": {
"AutoReject": <"typo-only" | "new-node" | null>,
"AutoReject": <"typo-only" | "new-node" | "low-value" | null>,
"CLA": <bool>,
"Title": <bool>,
"Description": <bool>,
"TestsNeeded": <bool>,
"TestsIncluded": <bool>,
"CubicIssues": <true if unresolved cubic issues exist, false otherwise>
"CubicIssues": <true if unresolved cubic issues exist, false otherwise>,
"LinkedIssueOrDiscussion": <true if the §1 issue/forum link is present or the type is skipped>,
"Oversized": <true if the filtered per-file additions sum > 1000 and the work is separable>
}
}
```
`readyForReview` is `true` only when: `AutoReject` is `null`; `CLA`, `Title`, and `Description` are all `true`; `CubicIssues` is `false`; and either `TestsNeeded` is `false` or `TestsIncluded` is `true`. If `AutoReject` is set, `readyForReview` is always `false`.
`readyForReview` is `true` only when: `AutoReject` is `null`; `CLA`, `Title`, `Description`, and `LinkedIssueOrDiscussion` are all `true`; `CubicIssues` and `Oversized` are both `false`; and either `TestsNeeded` is `false` or `TestsIncluded` is `true`. If `AutoReject` is set, `readyForReview` is always `false`.
Emit the JSON first, then take the appropriate action path below.
@ -255,13 +260,15 @@ The PR's own review ticket is **not** canceled in the classic path — it remain
If `relatedIssueTickets` is non-empty, run "Linking a PR to its issue ticket" (not-ready variant): add the PR link and post the "in progress, still being triaged" comment. **Leave each issue ticket's state unchanged and do not cancel the PR's own review ticket** — the PR isn't ready yet, so we only flag the in-progress work. (Optionally surface `duplicatePRs` to the user, but do not close here — closing is a path-D action driven from B.)
`messageForUser` should list every failing check the contributor must address, including a **missing linked issue / forum topic** (check F — ask them to open or link a GitHub issue for a `fix`, or a `community.n8n.io` topic for a `feat`/`refactor`) and an **oversized PR** (check G — ask them to split it into focused PRs *if the work is separable*).
Show `messageForUser` and ask `Post as-is / Edit before posting / Skip`. On post:
```bash
gh pr comment <number> --repo n8n-io/n8n --body "<final message>"
```
Then apply the right terminal triage label — exactly one, priority `triage:tests-needed` > `triage:needs-info`. See `reference/label-flow.md`. On `Skip`, leave the PR on `triage:in-progress` so the next loop picks it up.
Then apply the right terminal triage label — exactly one, priority `triage:tests-needed` > `triage:needs-info` (a missing linked issue/forum topic or an oversized PR maps to `triage:needs-info`). See `reference/label-flow.md`. On `Skip`, leave the PR on `triage:in-progress` so the next loop picks it up.
Skip C entirely if A already handled the only failing check and the PR is now ready — run B instead.
@ -269,7 +276,7 @@ Skip C entirely if A already handled the only failing check and the PR is now re
Used when the PR should be closed rather than reviewed. Three common triggers:
1. **Auto-rejection** (`AutoReject` set) — typo-only or unsanctioned new node.
1. **Auto-rejection** (`AutoReject` set) — typo-only, unsanctioned new node, or low-value/automated.
2. **Duplicate**`duplicatePRs` is non-empty (another open PR addresses the same change), confirmed via the duplicate guard in path B. Use `#<other-pr>` from `duplicatePRs` in the template.
3. **Out of scope / bundled** — multiple unrelated fixes that should be split, or scope n8n team has declined.
@ -281,6 +288,9 @@ Ask `Close + comment / Edit before closing / Skip`. Templates below; pick one an
**New node:**
> Thanks for the contribution! n8n no longer accepts new nodes directly into the core monorepo unless the team has explicitly agreed to scope one in. Please publish this as a [community node](https://docs.n8n.io/integrations/creating-nodes/overview/) instead — that gives you full ownership and avoids the long review queue here. Closing this PR per our [contributing guide](../blob/master/CONTRIBUTING.md#community-pr-guidelines).
**Low-value / automated:**
> Thanks for taking the time to open this! We review every PR by hand, so per our [contributing guide](../blob/master/CONTRIBUTING.md#community-pr-guidelines) we only take changes that carry a clear functional benefit. This one doesn't change behaviour (or comes without a rationale we can act on), so we're closing it to keep the review queue focused. If there's a real fix or improvement behind it, please open an issue or forum topic describing the problem first and we'll be glad to look. 🙏
**Duplicate of another PR:**
> Thanks for the contribution! This change is already being handled in #<other-pr>, which is further along in review. Closing this in favour of that PR to keep the queue tidy — please feel free to chime in over there if there's anything missing.

View File

@ -1,24 +1,27 @@
# Community PR Readiness Check — checks
The full ruleset for the auto-rejection screen and the five readiness checks. Loaded when the skill is mid-review.
The full ruleset for the auto-rejection screen and the readiness checks. Loaded when the skill is mid-review.
## Contents
- Step 2.5 — Auto-rejection screening
- Typo-only PR
- New-node PR
- The five checks (run after auto-rejection screen clears)
- Low-value / automated PR
- The readiness checks (run after auto-rejection screen clears)
- A. CLA signed
- B. PR title format
- C. PR description completeness
- D. Tests
- E. cubic-dev-ai issues
- F. Linked issue or forum discussion
- G. Size (single logical change)
---
## Step 2.5 — Auto-rejection screening
Before running the five checks, screen for PRs that the project policy in `CONTRIBUTING.md` (section "Community PR Guidelines") says should be rejected outright. If a PR matches one of these patterns, skip the five checks and recommend a polite close instead.
Before running the readiness checks, screen for PRs that the project policy in `CONTRIBUTING.md` (section "Community PR Guidelines") says should be rejected outright. If a PR matches one of these patterns, skip the readiness checks and recommend a polite close instead.
### Typo-only PR
@ -35,13 +38,25 @@ The diff adds a new node entry: a new `*.node.ts` (and usually a sibling credent
Per CONTRIBUTING.md: *"PRs that introduce new nodes will be auto-closed unless they are explicitly requested by the n8n team."* If the user calling the skill states the n8n team has agreed to take this node, proceed with the normal review; otherwise flag for close with a pointer to the [Community Nodes](https://docs.n8n.io/integrations/creating-nodes/overview/) flow.
### Low-value / automated PR
CONTRIBUTING.md §6 lists low-value and automated PRs as close-on-sight. Match **only** when the diff, read via `gh pr diff <number>`, is **entirely** one of these with no functional change and no rationale in the description:
- Whitespace, formatting, or pure reordering with no functional reason.
- Mass find-and-replace or renames submitted with no rationale.
- A dependency bump with no explanation of why the bump is needed.
- README badges, comment-only tweaks, or restating the obvious.
- Bulk or scripted submissions spanning many unrelated files.
Be conservative — this is a close, so bias toward *not* matching. If any part of the diff changes behaviour, adds a test, or the description gives a genuine reason, do **not** match; run the readiness checks instead. Contribution-farming intent (e.g. Hacktoberfest with no real change) reinforces a match but is never the sole basis — the diff must already be low-value.
### When a screen matches
Skip the five checks. Set `checks.AutoReject` in the JSON output to `"typo-only"` or `"new-node"` and proceed to action path 7D in SKILL.md (close the PR).
Skip the readiness checks. Set `checks.AutoReject` in the JSON output to `"typo-only"`, `"new-node"`, or `"low-value"` and proceed to action path 7D in SKILL.md (close the PR).
---
## The five checks
## The readiness checks
Run these in order when step 2.5 clears (`AutoReject` is `null`).
@ -107,6 +122,7 @@ Otherwise:
```
3. Use the diff to judge whether the changes introduce logic that warrants tests (new functions, bug fixes, behaviour changes, data transformations). Pure config changes, type-only changes, and trivial renames do not require tests.
4. Look for matching test files (`*.test.ts`, `*.spec.ts`, files inside `__tests__/`) among the changed files.
5. For a **bug fix** (`fix` type), CONTRIBUTING.md §3 asks for a regression test that fails against `master` without the change. You can't run it here, so confirm the PR both adds/updates a test that exercises the fixed path **and** the description says how to see it fail. A `fix` PR with no test covering the bug, or a test that clearly doesn't touch the changed path, is ❌ even if unrelated tests exist.
**Fallback only if needed**: if the diff alone is insufficient (e.g. you need to read the full surrounding function body to assess whether a refactor preserved behaviour), check out a temporary worktree:
@ -138,3 +154,27 @@ gh api --paginate "repos/n8n-io/n8n/pulls/<number>/comments" \
- No comments, every comment explicitly states no issues were found, or every issue is marked addressed → ✅
- One or more unresolved comments → ❌ report the unresolved count and priority breakdown (e.g. "3 unresolved issues: 1× P1, 1× P2, 1× P3")
### F. Linked issue or forum discussion
CONTRIBUTING.md §1 moves the quality gate before the code: bug fixes need a tracked issue, features and refactors need prior discussion. Gate by PR type (from the title):
- **Skip** (auto-pass) for `docs`, `ci`, `chore`, `build`, and `test` types — housekeeping doesn't need a prior issue.
- **`fix`** — require a linked GitHub issue: a closing keyword (`fixes/closes/resolves #N`) or an `github.com/n8n-io/n8n/issues/N` URL in the body (i.e. `relatedIssueTickets` from step 5b is non-empty, or the raw reference is present).
- **`feat`, `refactor`, `perf`** — require prior discussion: either a linked GitHub issue (as above) **or** a `community.n8n.io` forum link in the body.
Report:
- ✅ Required link present, or type is skipped
- ❌ `fix` with no linked issue, or `feat`/`refactor`/`perf` with no linked issue or forum link
A ❌ here is a **return**, not a close: it sets `readyForReview` false and drives a path-C contributor comment asking for the issue or forum topic (see SKILL.md). This is a heuristic — if the PR body clearly describes a tracked discussion by other means, use judgement.
### G. Size (single logical change)
CONTRIBUTING.md §6: a PR should add no more than **1000 lines** and cover one logical change. Compute the line count from the per-file `additions` in the `files` list fetched in step 2 (each entry has `path` and `additions`) — not the aggregate `additions` from `gh pr view`, which can't be filtered:
- Sum `additions` across the `files` list, **skipping** obvious lockfiles and generated/vendored files (e.g. `pnpm-lock.yaml`, generated API clients). Set `Oversized` true when that filtered sum is `> 1000` — a large lockfile diff alone is not "oversized".
- `Oversized` true is a **return**, not a close: `readyForReview` becomes false and path C asks the contributor to split the PR into focused pieces.
This is advisory-strength: a single cohesive change that genuinely needs >1000 lines (e.g. one sanctioned node) can be waved through by the human reviewer, so phrase the comment as a request to split *if the work is separable*.

View File

@ -54,7 +54,7 @@ Use the canonical owners script at `.github/scripts/owners.mjs`. It parses `.git
| `design` | Design | `team:design` |
| `iam` | Identity & Access | `team:identity` |
| `ligo` | Lifecycle & Governance | `team:lifecycle` |
| `instance-ai` | instanceAI | `team:instance-ai` |
| `instance-ai` | AI Assistant | `team:instance-ai` |
| `frontend` | Adore | `team:adore` |
| `qa-dx` | Developer Platform | `team:qa-dx` |
| `migrations-review` | Catalysts | `team:cats` |

View File

@ -52,6 +52,8 @@ pnpm build > build.log 2>&1 # Always redirect
pnpm typecheck # Before commit
pnpm lint # Before commit
```
> Secrets: pnpm command lines may be recorded verbatim (opt-in dev metrics) —
> pass sensitive values via env vars, never inline on the command line.
## Key Packages

View File

@ -1,28 +1,30 @@
---
name: n8n:create-instance-ai-eval
description: >-
Authors a new Instance AI workflow eval case in
packages/@n8n/instance-ai/evaluations/data/workflows — build cases,
behaviour/process cases, credential cases, and seeded (mid-conversation)
cases — with intent-driven expectations calibrated against a real build. Use
when adding or changing an Instance AI workflow eval, or debugging why one is
flaky.
Authors a new Instance AI workflow eval case — written locally as JSON,
calibrated against a real build, then pushed to the LangTracer suite CI runs
— build cases, behaviour/process cases, credential cases, and seeded
(mid-conversation) cases — with intent-driven expectations. Use when adding
or changing an Instance AI workflow eval, or debugging why one is flaky.
---
# Create an Instance AI workflow eval
Each eval is **one JSON file** in
`packages/@n8n/instance-ai/evaluations/data/workflows/`. The loader
auto-discovers `*.json` and validates against
[`schema.ts`](../../../packages/@n8n/instance-ai/evaluations/data/workflows/schema.ts)
(`.strict()` — unknown keys fail at load). No registration step. The eval
Each eval is **one JSON case** — authored locally as a file in
`packages/@n8n/instance-ai/evaluations/data/workflows/` (the disk loader
auto-discovers `*.json`, no registration step), with a LangTracer suite as its
durable home. Cases validate against
[`harness/schema.ts`](../../../packages/@n8n/instance-ai/evaluations/harness/schema.ts)
(`.strict()` — unknown keys fail at load). The eval
[README](../../../packages/@n8n/instance-ai/evaluations/README.md) is the
exhaustive field reference; this skill is the opinionated *how*.
> **Committing new case JSONs into the repo is no longer the recommended
> approach.** Author the file locally (uncommitted), calibrate it against a real
> build, then **push it to a curated lang-tracer suite** with
> `eval:langtracer-push` (see [Push to a lang-tracer suite](#push-to-a-lang-tracer-suite)).
> build, then **push it to a lang-tracer suite** with `eval:langtracer-push`
> (see [Push to a lang-tracer suite](#push-to-a-lang-tracer-suite)) —
> `--suite baseline` for the consolidated corpus n8n CI runs, or a dedicated
> capability suite like `agents`.
> The suite is the home for the case; the eval CLI reads it back via
> `--source langtracer`. You still write the JSON file — it's just the input to
> the push, not a committed artifact.
@ -33,6 +35,52 @@ exhaustive field reference; this skill is the opinionated *how*.
> `priorConversation` case isn't transient and has no suite home, so it's the one
> sanctioned exception — it lives as committed JSON. See [`case-shapes.md`](case-shapes.md).
## Set the autonomy level first
**Before you source, draft, or run anything, decide how hands-on the driver
wants to be — and say it back.** This skill runs at one of two autonomy levels.
If the request makes the level clear ("just author and calibrate it yourself" vs.
"stop me at each step", or an explicit mode), adopt it, state it in one line, and
note how to override (e.g. "say 'stop me at calibration' to add a checkpoint").
**If it's not clear, ask the driver one question** offering the two levels
*before* doing any work.
The skill has four natural decision **gates****selection** (which real
failure to encode), **shape + expectations** (archetype, must-haves, scope
trim), **calibration** (classify each red and resolve keep/loosen/drop), and
**push** (kind + tier). The level decides what happens at each gate:
| Level | Who decides when to stop | Behaviour |
|---|---|---|
| **autonomous** | agent | Runs all four gates start-to-finish; reports a **decision log** at the end for the driver to review. |
| **checkpoint** | driver, per gate | Stops at each gate with a compact **proposal + recommendation**; driver says "go" or redirects. At the **calibration** gate, hands the driver a link to the just-built thread on the live instance plus login credentials so they can review the real conversation and workflow themselves before confirming (below). |
**Calibration is special-cased at both levels.** A calibration verdict that
flips a case's *meaning* — a real capability-gap red vs. a harness-caused red, or
any loosening that would let a known-bad build pass — is **surfaced explicitly**
(interactively in checkpoint; in the decision log in autonomous), never silently
committed. It's the one call where a quiet mistake corrupts the suite, so it
never fully auto-commits.
**Checkpoint calibration — review the real thread on the instance.** Because the
calibration verdict is trust-critical, in checkpoint mode you don't ask the
driver to trust your reading of the run. You built the case against a live
instance with `--keep-workflows` (step 4), so the thread and the workflow are
still there — hand the driver a direct link and let them look:
- **Thread:** `<base-url>/assistant/<threadId>` — the exact conversation the case
ran (the run prints the `threadId`; the built workflow prints as `BUILT (<id>)`
and opens at `<base-url>/workflow/<id>`).
- **Login:** the email + password the eval signs in with (the owner you seeded on
the instance — see [`running-evals.md`](running-evals.md); the default local
seed is `nathan@n8n.io` / `PlaywrightTest123`).
Present, per red: the assertion, whether it went green/red, your proposed
classification (real capability gap / harness limitation / noise) and
keep/loosen/drop, and the review link. The driver logs in, reads the thread and
the workflow, and confirms or redirects before you write the verdict back into
the case `description`.
## Where the best cases come from
The strongest cases encode a **real** failure, not an invented premise. Two
@ -83,6 +131,12 @@ need + constraint ("I need field X and the built-in node doesn't expose it, so
pull it straight from the API") — not as an implementation spec ("use an HTTP
Request node").
**Write the conversation in English** unless the user asked otherwise (or the
case exists specifically to test non-English handling). Sourced real threads are
frequently non-English — translate the intent into English when you rewrite the
prompt in the user's voice; the failure mode is the anchor, not the original
language.
**Trim to the smallest multi-turn conversation that reproduces the issue.**
Real sourced threads are long (dozens of turns of setup, debugging, and
tangents) — do **not** transcribe them. Distill to the fewest turns that still
@ -109,6 +163,15 @@ the combinatorial bulk. A case that never builds tests nothing.
## Workflow
These steps map to the four gates from [Set the autonomy level first](#set-the-autonomy-level-first):
sourcing (before step 1) is the **selection** gate; steps 12 are the **shape +
expectations** gate; steps 56 are the **calibration** gate; step 7 is the
**push** gate. In *autonomous* mode you flow through all of them and summarize in
a decision log; in *checkpoint* mode you pause at each with a proposal, and at
calibration you hand the driver the thread link + login to review the real build
(see [Set the autonomy level first](#set-the-autonomy-level-first)). Calibration
(step 6) always surfaces meaning-flipping verdicts explicitly regardless of level.
1. **State the must-haves first.** From the conversation alone, list what every
correct workflow must do (trigger type, essential operations, gating
condition) — those become draft `outcomeExpectations`. Required fields:
@ -145,7 +208,9 @@ the combinatorial bulk. A case that never builds tests nothing.
(or delete it once it's in the suite). Committing new case JSONs into the repo
is no longer the approach. (Exception: seeded cases can't be pushed — a
`seedFile`/`priorConversation` case stays committed JSON, a `seedThread` case is
a local throwaway; see [`case-shapes.md`](case-shapes.md).)
a local throwaway; see [`case-shapes.md`](case-shapes.md).) For a sourced case,
finish by **linking it to its source thread/finding** over the MCP — see
[Link the pushed case to its source](#link-the-pushed-case-to-its-source-provenance-step--always-do-this).
`--iterations N` is available to measure flakiness (pass@k / pass^k) — reach for
it when you suspect a case is non-deterministic or before promoting it to a
@ -181,19 +246,31 @@ Calibration exists to right-size assertions, **not** to make a case pass. When a
run turns a scenario or expectation red, classify the red first — then keep it.
**First rule out the environment.** Before reading any red as a signal about a
case, check the shape of the failures across the run. If **every scenario fails
with the *same* execution error** while the builds succeed and `outcomeExpectations`
pass, that is almost never the cases — it's a broken environment, most often a
**stale `packages/core` / `packages/cli` dist** after a branch or worktree switch
(a refactor moved a runtime export and the built dist still calls the old one;
e.g. `(0 , n8n_workflow_1.createDeferredPromise) is not a function` after
`createDeferredPromise` moved to `@n8n/utils`). Fix it, don't calibrate around it:
run a full ordered `pnpm build` (a targeted `--filter` build can fail on unrelated
stale-dep type errors), then **restart the instance** — the running node process
holds the old dist in memory, so rebuilding on disk changes nothing until restart
(and `kill` by env-var pattern misses it — kill the actual `lsof -t -iTCP:<port>`
PID). Re-probe one case, confirm executions run, then re-run the batch. Only once
uniform environment failures are excluded do the three categories below apply:
case, check the shape of the failures across the run. If **every case fails the
same way** — every scenario with the *same* execution error while builds succeed,
*or* every **build** erroring identically before it starts (an `Agent error:
Something went wrong…` with **zero tool calls**) — that is almost never the cases;
it's a broken environment, most often a **stale dist** after a branch or worktree
switch. Two shapes to know:
- **Stale `packages/core` / `packages/cli` dist** — a refactor moved a runtime
export and the built dist still calls the old one, so *builds succeed but every
execution fails the same way* (e.g. `(0 , n8n_workflow_1.createDeferredPromise)
is not a function` after `createDeferredPromise` moved to `@n8n/utils`).
- **Stale/half-built `@n8n/instance-ai` dist** — every run errors *before building*
(`Agent error…`, zero tool calls) and the instance log shows `Cannot find module
'@/utils/...'` from `dist/skills/*.js`: the build's `tsc-alias` step (which
rewrites `@/` path aliases to relative requires) didn't complete, so the dist is
internally inconsistent.
Fix it, don't calibrate around it: run a full ordered `pnpm build` (a targeted
`--filter` build can fail on unrelated stale-dep type errors; for the instance-ai
shape, `cd packages/@n8n/instance-ai && pnpm build` runs `tsc && tsc-alias`), then
**restart the instance** — the running node process holds the old dist in memory,
so rebuilding on disk changes nothing until restart (and `kill` by env-var pattern
misses it — kill the actual `lsof -t -iTCP:<port>` PID). Re-probe one case, confirm
it builds and executes, then re-run the batch. Only once uniform environment
failures are excluded do the three categories below apply:
- **Real build / capability gap** — the agent's workflow is wrong or missing
something the user asked for (a miswired branch, a missing retry, wrong field
@ -210,6 +287,13 @@ uniform environment failures are excluded do the three categories below apply:
This is the only real "noise". Confirm it with `--iterations N` before calling
it flaky, then de-tier and note it; deletion is the last resort.
**Annotate every kept red in the case `description` with a scannable prefix** so a
future reader tells the two apart at a glance. Use `Harness note: …` for a
harness-caused red (name the limitation and why the build is still correct), and
`Capability-gap finding: current build reds because <X> — a real builder bug
(flips to a regression guard once fixed)` for a real gap. Consistent prefixes keep
the corpus greppable and stop harness reds from being misread as product bugs.
The one move to never make is **working around a red by weakening what the case
checks** — deleting a failing scenario, loosening an assertion until a wrong
build would pass, or quietly converting to build-only. That makes the suite look
@ -218,6 +302,17 @@ harness gaps are the deliverable, so **highlight them, don't engineer around
them**. If you catch yourself editing a case so that a known-bad build would now
pass, stop.
**Who confirms the classification depends on the autonomy level.** In
*checkpoint* mode the keep/loosen/drop decision is the driver's to confirm: you
hand them the thread link + login (see [Set the autonomy level
first](#set-the-autonomy-level-first)) so they can review the real conversation
and workflow, then you write the agreed `Harness note:` / `Capability-gap
finding:` prefix back into the case `description`. In *autonomous* mode the agent
proposes it explicitly in the end-of-run decision log. Either way the
classification is stated in the open, never silently committed — misreading a
harness red as a real gap (or the reverse) is the one calibration mistake that
quietly corrupts the suite.
## Example
Minimal build case:
@ -287,8 +382,8 @@ What each piece is doing:
never spoken. Here it withholds values until asked and rejects a plan that
misses the label filter. Keep the whole script in one turn and encode ordering
inside it (don't fabricate assistant "done" turns to sequence steps — see
[`case-shapes.md`](case-shapes.md)). `applies-each-change-when-asked` is a good
real example.
[`case-shapes.md`](case-shapes.md)). `applies-each-change-when-asked` (in the
`baseline` LangTracer suite) is a good real example.
- **`dataSetup` describes only what external services return.** That's the layer
the harness controls (below).
@ -313,7 +408,14 @@ nodes get LLM-generated pin data). So:
byte-exact — don't assert exact values off them), and *writes/inserts* aren't
pinned (they hit the real per-thread table, recreated schema-only with **no
rows**), so read-after-write within one run isn't faithful — the read reflects
`dataSetup`, not what the run just wrote.
`dataSetup`, not what the run just wrote. A third caveat: only Data Table
*reads* are seedable this way — **dedup / change-detection built on workflow
static data** (`removeItemsSeenInPreviousExecutions`, `$getWorkflowStaticData`)
is **not** seedable, because static data starts empty every run, so such a
scenario reds vacuously (it sees everything as "new"). To get a seedable
change-detection scenario, steer the build toward a Data Table; otherwise
accept the static-data red as a harness limit and carry the logic in
`outcomeExpectations`. Note the agent may *choose* static-data dedup on its own.
- Don't assert exact counts that depend on mock generation ("exactly 7 posts").
Say "fewer than the original 10".
@ -340,10 +442,18 @@ red is harness-caused (per "A red is signal", above):
- **Mock response shape** — the LLM-generated mock response can omit the real
envelope, crashing a downstream parse/format node. Recurring, reproducible
shapes to expect (all produce a red on a *correct* build):
- **OpenAI** mock returns a plain `{content: "..."}` instead of the Responses
API envelope (`output[0].content[0].text`), so a LangChain chain / **Structured
Output Parser** receives an empty response and crashes. Any build with an
OpenAI chat model feeding a structured-output/parser node can red on this.
- **OpenAI structured output** — historically the mock returned a plain
`{content: "..."}` instead of the Responses envelope
(`output[0].content[0].text`), so a **Structured Output Parser** /
**Information Extractor** / **Text Classifier** got nothing and errored with
**`Model output doesn't fit required format`**. The Responses-envelope
normalizer (PR #33578, merged) fixes the flat-envelope case, so many of these
now execute cleanly. A **narrower residual red remains** for structured-output
schemas declared with strict **`additionalProperties: false`**: the normalized
`output` wrapper (and any extra fields the mock invents, e.g. `subject`/`date`)
violate the strict schema, so the node still rejects the mock output. Both the
old and residual forms are the *mock*, not the build — carry correctness in
`outcomeExpectations` and note the red as harness-caused.
- **Gmail** mock returns headers as top-level capitalized fields (`From`,
`Subject`) instead of under `payload.headers`, so a Code/Filter node reading
the sender/subject gets empty strings (e.g. a "drop no-reply senders" safety
@ -351,6 +461,10 @@ red is harness-caused (per "A red is signal", above):
`outcomeExpectations`, not its runtime effect in a scenario.
- A less-common API (e.g. Gemini's top-level `candidates`) can omit its envelope
the same way.
- **Google Drive resumable upload** — the initiate-upload mock omits the
`Location` header carrying the session URL, so a Drive file-upload node fails
with a 400. Any build that uploads a generated image/file to Drive can red on
this.
- **Agent-tool nodes can't be executed standalone.** An AI-Agent *tool* node
(`toolHttpRequest` and other `supplyData`-only LangChain nodes with no `execute`
method) only runs when the agent invokes it; the harness executing it directly
@ -358,6 +472,12 @@ red is harness-caused (per "A red is signal", above):
red for chat-trigger / AI-agent build cases whose tool is an HTTP-request tool —
the build is correct, so carry correctness in `outcomeExpectations` (agent wired
to trigger + model + tool) and note the execution red as harness-caused.
- **Poll/wait loops can't be fast-forwarded.** A workflow that submits an async
job then polls for completion (generate → poll status until ready → download)
can't advance the mocked status deterministically, and a `Wait` node runs in
real time, so the scenario reds with an execution timeout (`framework_issue`).
The build is correct — carry it in `outcomeExpectations` and note the red as
harness-caused.
- **A build can time out and produce no scored result at all** — the run reports
`BUILD FAILED: Run timed out` and zero graded expectations. Don't assume "spec
too big": the more common cause is a **single-prompt case where the agent asks
@ -366,10 +486,14 @@ red is harness-caused (per "A red is signal", above):
— only confirmations auto-approve). Before treating a timeout as spec size,
**classify it**: read the agent's final response in the report / trace (did it
ask a question? flag an infeasibility? or genuinely churn through a huge
build?), and **re-run the case solo (`--concurrency 1`)** — concurrency makes a
stalled build hit the cap and masks the real reason, which a solo run surfaces
in seconds. Fix per cause: a clarifying-question stall → author multi-turn with
a director note that pre-answers it; a genuine infeasibility → it's an
build?), and **re-run the case solo (`--concurrency 1`)** — concurrency both
masks a stalled build (it hits the cap) *and* can time out a perfectly healthy
build purely by queueing it behind the per-instance build cap (default 4), so a
solo run either surfaces the real reason in seconds or simply passes outright.
Fix per cause: a solo run that now passes → it was **concurrency contention**,
not the case (split big batches across lanes — see
[`running-evals.md`](running-evals.md)); a clarifying-question stall → author
multi-turn with a director note that pre-answers it; a genuine infeasibility → it's an
infeasibility/honesty behaviour case (`processExpectations`), not a build case;
a true oversized spec → the timeout is itself a finding, but note it so the
zero isn't mistaken for a scored failure.
@ -507,20 +631,30 @@ drifted, leaves the rest unchanged, and never prunes. It's the inverse of
```bash
cd packages/@n8n/instance-ai
# preview first — no writes:
dotenvx run -f .env.eval -- pnpm eval:langtracer-push --suite workflow-building --dry-run --changed
# preview first — no writes (use `npx dotenvx`; the bare `dotenvx` binary is usually not on PATH):
npx dotenvx run -f .env.eval -- pnpm eval:langtracer-push --suite baseline --dry-run --changed
# then push (drop --dry-run):
dotenvx run -f .env.eval -- pnpm eval:langtracer-push --suite workflow-building --changed
npx dotenvx run -f .env.eval -- pnpm eval:langtracer-push --suite baseline --changed
```
- **Selectors** (at least one required — no accidental push-all): positional
`<slugs...>` (exact file slugs), `--changed` (new/untracked + staged + modified
`data/workflows/*.json`, ideal right after authoring an uncommitted case),
`--filter`/`--tier` (with `--exclude` as a modifier).
- **Multiple positional slugs? Skip pnpm — call the script directly.** `pnpm
eval:langtracer-push … slugA slugB` forwards the slugs as one joined argument
(`"slugA slugB"`), so no case file matches and nothing is pushed. Either use a
no-positional selector through pnpm (`--changed`), or run the script directly so
each slug is its own argv: `npx dotenvx run -f .env.eval -- npx tsx
evaluations/cli/langtracer-push.ts --suite <slug> <slug1> <slug2> …`.
- **Env:** `LANGTRACER_URL` + `LANGTRACER_API_KEY` (an `lt_` bearer; one key works
for MCP + REST) — put them in `.env.eval` and run under `dotenvx`.
for MCP + REST) — put them in `.env.eval` and run under `npx dotenvx`.
- **Options:** `--set-kind regression|capability_gap` (default `regression`, must
match the suite's kind), `--contains-user-data` (default is `synthetic`).
match the suite's kind), `--contains-user-data` (default is `synthetic`). A case
whose **build is correct** (outcome expectations green) but that carries a
**currently-red execution scenario** from a builder bug is still a `regression`
case — it guards the fix; reserve `capability_gap` for cases where the *build
itself* is wrong.
- **Scenarios sync on update too:** `PATCH /cases/:id` reconciles
`executionScenarios` by name (update in place, insert new, delete missing —
lang-tracer #48), so scenario edits re-push like any other field. A lang-tracer
@ -534,6 +668,35 @@ dotenvx run -f .env.eval -- pnpm eval:langtracer-push --suite workflow-building
case isn't transient and has no suite home, so it's the one exception to
"don't commit the JSON" — it lives as a committed artifact.
### Link the pushed case to its source (provenance step — always do this)
A sourced case that isn't linked back to the conversation/finding it encodes is
an orphan: six months later nobody can tell what real failure it guards. The
push CLI doesn't carry provenance, so after pushing, link the case over the
lang-tracer MCP with one **`update_test_case`** call on the new case id (the
push prints it):
1. **`sourceThreadId`** — the source conversation's thread id (plus
**`sourceRunId`** when the case anchors to one specific run/step within it).
This is the DB-level link every by-version rollup, conversation float, and
`?sourceThreadId=` query joins on — the tags/description below are the
human-readable layer on top, not a substitute. The thread must already be
imported into lang-tracer (running `get_conversation_analysis` on it, as the
sourcing flow does, is enough); `source_kind` is derived server-side, and
the link is only editable on authored cases — promotion-recorded provenance
is immutable.
2. **`expectedBehavior`** — the rule the case enforces, one paragraph — and
**`failurePattern`** — what actually happened in the source thread, with
turn references. Copy/adapt these from the analysis's `extractedCases`
entry when the case came from `get_conversation_analysis`.
Then **`add_case_tags`** (additive; targets the LT-side `tags` array, not
`evalTags`, so nothing round-trips into eval runs): add a capability tag (e.g.
`instruction-persistence`). Tag normalization is aggressive (lowercase, kebab);
colon-form tags get silently dropped. And keep the thread id + turn refs in
the case `description` too (the drafter's habit of "Sourced from thread <id>"
is the convention) — the description is the only field shown everywhere.
## Running
You need a running n8n instance with Instance AI enabled and a working sandbox;
@ -544,7 +707,9 @@ existing workflows). Narrow a run with `--filter <slug>` / `--tier <name>` /
`--exclude`. See [`running-evals.md`](running-evals.md) for the run recipes,
parallel lanes, tiers, and baselines, and the
[README](../../../packages/@n8n/instance-ai/evaluations/README.md) for the full
flag list.
flag list. Run with `--keep-workflows` when you want to review a build by hand —
in *checkpoint* mode calibration this is how the driver opens the built thread
(`<base-url>/assistant/<threadId>`) and workflow on the instance.
## Other eval harnesses (not this skill)

View File

@ -7,12 +7,13 @@ eval [README](../../../packages/@n8n/instance-ai/evaluations/README.md); this is
the opinionated *how* and the traps.
Example cases in the corpus get renamed and churned, so this file names as few
files as possible — prefer `grep`-ing the corpus by tag/field. The one stable
pointer worth naming: **`applies-each-change-when-asked`** for a well-built
director conversation.
cases as possible — search the LangTracer suite by tag/field instead (the
`search_test_cases` MCP tool, or export the suite and grep). The one stable
pointer worth naming: **`applies-each-change-when-asked`** (in the
`baseline` suite) for a well-built director conversation.
The schema
([`schema.ts`](../../../packages/@n8n/instance-ai/evaluations/data/workflows/schema.ts))
([`harness/schema.ts`](../../../packages/@n8n/instance-ai/evaluations/harness/schema.ts))
enforces the rules you must respect:
- `seedFile`, `priorConversation`, `seedThread` are **mutually exclusive** — pick
@ -32,7 +33,7 @@ These test *how the agent converses*, not just what it builds: does it ask the
right clarifying question, avoid re-asking, honour a mid-build correction,
respect plan approval, batch bundled changes? They're graded by
`processExpectations` and are often **build-only** (no `executionScenarios`).
Tag them `behaviour` and grep that tag for patterns.
Tag them `behaviour` and search the suite for that tag for patterns.
### How multi-turn works
@ -48,7 +49,11 @@ Mode is chosen automatically from `conversation`:
data source, delivery channel, or one-vs-two-workflow split), author it
**multi-turn** with a `[bracketed]` director note in turn 1 that pre-answers
those questions so the agent proceeds to build. A single-prompt build case
only works when the prompt leaves nothing the agent must ask about.
only works when the prompt leaves nothing the agent must ask about. Real sourced
prompts are frequently terse ("i want to create a webhook", "convert a topic
into a YouTube script") and almost always trigger a clarifying question —
**default a terse sourced prompt to multi-turn** with a director note that
pre-answers the setup/topology it omits.
- **Multi-turn:** anything else. A **user-proxy LLM** plays the user — answers
questions, audits the agent's plan against your script, and sends follow-ups
(capped by `messageBudget`).

View File

@ -41,7 +41,7 @@ instance's Instance AI config and the README's environment-variables section.
| Mode | How | Produces |
|---|---|---|
| **Direct loop** | no `LANGSMITH_API_KEY` | `eval-results.json` + HTML report locally |
| **Direct driver** | no `LANGSMITH_API_KEY` | `eval-results.json` + HTML report locally — same pipeline and row order as the LangSmith driver (TRUST-261), row concurrency follows `--concurrency` |
| **LangSmith** | `LANGSMITH_API_KEY` set | also records an experiment and auto-compares against the baseline |
| **Prebuilt** | `--prebuilt-workflows <manifest>` | skips the build; verifies existing workflows (score MCP/hand-built cohorts on the same verifier) |
@ -49,6 +49,13 @@ Narrow any run with `--filter <slug>` (filename substring, comma = OR),
`--tier <name>`, and `--exclude`. `--keep-workflows` leaves built workflows for
inspection; `--iterations N` runs each case N times for pass@k / pass^k.
## Case source: disk vs langtracer
| Source | When to use it |
|---|---|
| **`disk`** (default) | **Preferred for local development** — authoring and calibrating the case in front of you: drop the JSON into `data/workflows/`, `--filter` it, iterate. Also the only home of the `agents` tier and the seeded carve-out cases; since the corpus migration the directory holds only those, not the full suite. |
| **`langtracer`** (`--source langtracer --suite baseline`) | Bigger runs (the full corpus or a whole tier), re-running specific cases that already live in the suite, and CI — which always runs this way. Needs `LANGTRACER_URL`/`LANGTRACER_API_KEY` in your env. |
## Configuration & secrets
The harness reads its configuration from environment variables — how you supply
@ -125,7 +132,15 @@ your case's pass/fail.
The **build** is the slow step and is capped at **4 concurrent builds per
instance**, so throughput scales with the number of instances, not just
`--concurrency`. Two ways to fan out:
`--concurrency`.
**Watch for false timeouts under contention:** a batch larger than the cap can
queue a *healthy* case behind that limit until it hits the per-iteration timeout
and reports `BUILD FAILED: Run timed out` — a run-capacity artifact, not a case
defect (a case that builds in ~3 min solo can "time out" at 900s in a crowded
batch). Re-run the suspect solo (`--concurrency 1`) to confirm it builds in time,
and for batches beyond ~a dozen cases fan out across lanes rather than just
raising `--concurrency` on one instance. Two ways to fan out:
- **`scripts/run-eval-lanes.sh`** spins up N lanes as **docker containers**,
seeds a user on each, and runs the eval with the base-URLs wired together.
@ -153,14 +168,16 @@ groupings, propagated to LangSmith as example splits so `--tier <name>` maps to
server-side filter. The two that matter for CI:
- **`full`** — every case; nightly / full-suite runs.
- **`pr`** — curated thin set (~6 cases) for the PR gate: high baseline
reliability + capability diversity.
- **`pr`** — curated thin set for the PR gate: high baseline reliability +
capability diversity.
Other values group cases logically (e.g. `behaviour` for conversation-behaviour
cases, `seeded` for transient `seedThread` cases kept out of CI). Add a case to a
tier by putting the value in its `datasets` array and re-syncing. **Only promote
to `pr` after `--iterations 5+` shows it's reliably green** — a flaky case in the
gate poisons it.
cases, `seeded` for transient `seedThread` cases kept out of CI). For a new
local case, put the value in its `datasets` array before pushing; for a case
already in LangTracer, edit `datasets` there — `eval:langtracer-push`
deliberately does not re-sync tier-only edits to an existing case. **Only
promote to `pr` after `--iterations 5+` shows it's reliably green** — a flaky
case in the gate poisons it.
## Baselines & regression
@ -175,14 +192,18 @@ for low noise:
```bash
# with your env loaded and LANGSMITH_API_KEY set, from packages/@n8n/instance-ai/
pnpm eval:instance-ai --experiment-name instance-ai-baseline --iterations 10
# (--dataset/--baseline-prefix mirror CI's pins — langtracer mode otherwise
# derives suite-scoped names and later runs would never find this baseline)
pnpm eval:instance-ai --source langtracer --suite baseline \
--dataset instance-ai-workflow-evals --baseline-prefix instance-ai-baseline- \
--experiment-name instance-ai-baseline --iterations 10
```
LangSmith appends a random suffix; the most-recently-started `instance-ai-baseline-*`
becomes the next comparison target. In CI, the same is a workflow dispatch:
```bash
gh workflow run ci-instance-ai-evals.yml -f experiment-name=instance-ai-baseline -f iterations=10
gh workflow run test-evals-instance-ai.yml -f experiment-name=instance-ai-baseline -f iterations=10
gh workflow run ci-instance-ai-evals.yml -f pr=<number> # re-run evals against a PR's head
```

View File

@ -36,7 +36,14 @@ connected.)
real, recurring failure modes.
2. **Pull the conversations**`list_conversations` (e.g. `verdict:"bad"`,
`analyzed:"yes"`) → `get_conversation` (raw trace) + `get_conversation_analysis`
(findings). `get_linear_ticket_context` links a thread to its ticket.
(findings). `get_linear_ticket_context` links a thread to its ticket. To target
**execution failures**, add `funnelDrop:"05"` (built + launched an execution
that never *succeeded*). **Caveat: the funnel drop is a *conversion* signal, not
a build-quality one** — most `funnelDrop:"05"` threads are healthy builds that
correctly routed to credential setup, or the user simply abandoned, so the drop
alone tells you nothing about the build. **Pair it with `verdict:"bad"`** to
filter down to threads where the analyser actually flagged a build/execution
defect (in one sample: 131 raw drops → 18 once `verdict:"bad"` was added).
3. **Verify before trusting a finding.** The analyser keys off tool-call *spans*
(was `build-workflow` called on this turn?), which it reads reliably — but a
content-dependent claim ("invented ID", "missing node") can be wrong when it
@ -55,6 +62,28 @@ connected.)
its trace is pruned or deleted — so it has no durable home; that's exactly why
step 4 turns the confirmed failure into a durable synthetic case.
## Sourcing a regression baseline (successful builds)
The discover→verify→encode flow above hunts **failures**. The complementary need
— a broad **regression baseline** of things that already work — is sourced the
opposite way: from conversations where a workflow was **built and executed
without errors**. Use `list_conversations` with the **conversion-funnel** filter:
- `funnelStep: '03'` = built a workflow, `'04'` = launched an execution, `'05'` =
execution succeeded, `'06'` = published (each step is a strict subset — also
reached every earlier step). For "built + executed cleanly" cases, **`'05'`** is
the signal; add `language: 'eng'` to keep prompts English.
- The result is large — it spills to a file. Triage by first prompt:
`jq -r '.data[] | "\(.threadId)\t\(.firstUserPrompt[0:180])"'`. Skip "The
execution failed…" debugging threads (they didn't cleanly build) and off-topic
app-build requests.
- Author a **build case** per selected thread (prompt in the user's voice,
grounded in the real `firstUserPrompt`; note the source thread id in
`description`). These are `regression`-kind cases whose value is coverage of a
working capability, not a currently-red gap — you rarely need `get_conversation`
when the first prompt already specifies the build. Terse prompts almost always
need a multi-turn director note (see [`case-shapes.md`](case-shapes.md)).
## Two practical notes on `get_conversation_analysis`
- **It hands you draft cases.** The response's

View File

@ -0,0 +1,116 @@
---
name: n8n:nathan
description: Deploy a temporary n8n test instance (or generate a local docker run command) via the internal "Nathan" bot, from the repo instead of Slack. Use after opening a PR to offer the user a live test instance, or whenever someone asks to spin up / deploy a test instance for a branch.
allowed-tools: Bash(pnpm nathan:*), Bash(node scripts/nathan.mjs:*), Bash(git diff:*), Read
---
# Nathan — repo-local test instances
Nathan is n8n's internal bot that deploys throwaway test instances from a branch
or Docker image. It's normally driven from Slack (`/nathan ...`); this skill runs
the same commands from the repo via `pnpm nathan`.
## Prerequisites
- **No tunnel setup needed.** Nathan replies asynchronously through a short-lived
public tunnel that the script opens for you (`npx localtunnel`). A `deploy` to a
**new** `test-<name>` also polls that instance URL directly, so it still reports
success even if the tunnel drops. (Redeploying a name that's *already up* skips
the poll — it can't tell the old instance from the new — so it falls back to the
tunnel; prefer a fresh name when you need the reliable report.)
- **A token in `~/.n8n/dev/nathan-token`.** If a command reports no token, **ask the
user for one** — point them at the form
(`https://internal.users.n8n.cloud/form/d6d34a2f-4899-4ee8-afc8-f8c41a8a243d`),
where they log in with their n8n account and copy the token from the response —
then save it for them (the script's interactive paste prompt needs a real
terminal, so as an agent use the subcommand):
```bash
pnpm nathan set-token '<PASTED_TOKEN>'
```
## Offer a test instance
### Only when it's worth it
Use judgement — don't offer for every branch. **Offer** when the change is
something a person would actually want to click through in a running instance:
- New features / feature branches
- UI / editor changes, node changes, workflow-execution or behaviour changes
- Larger or user-facing diffs
**Skip the offer** (a test instance adds nothing) for:
- Dev tooling, CI, build config, scripts (like this one)
- Docs-only or tests-only changes
- Tiny bug fixes, no-behaviour-change refactors, dependency bumps
When skipping, don't nag — at most mention once that a test instance is available
on request.
### Offer after opening a PR, and re-offer on push
After you open a PR for a branch that warrants it, **offer a live test instance.**
Also **re-offer whenever you `git push` new commits** to such a branch — the
deployed instance reflects the pushed code, so a new push means a new build worth
redeploying. Don't just ask a bare yes/no — look at the diff and **propose a
sensible profile**, then let them confirm or adjust. For example:
> "Want a test instance for this? Based on the diff I'd deploy it with instance AI
> enabled (`--ai`) since it touches the AI assistant. Sound good, or a different
> license?"
### Pick the profile from the PR contents
Inspect what the PR changes (`git diff --stat origin/master...HEAD` and the file
paths / feature area), then choose:
| PR touches… | Suggest | Why |
|---|---|---|
| AI features — `@n8n/nodes-langchain`, `@n8n/instance-ai`, the AI assistant/builder, `N8N_AI_*`, "askAi"/agent code | `--ai` | Enables instance AI (and defaults the license to pro2) so the AI features actually run |
| License-gated / enterprise features — `.ee.ts` files or `/ee/` dirs, license checks (`@n8n_io/license-sdk`, `hasFeature`), SSO/SAML/OIDC/LDAP, RBAC/roles/scopes, projects, variables, external secrets, source control/environments, log streaming, insights, folders | `--enterprise` | The feature is gated behind a license and won't be testable on community |
| A specific gated feature/quota you want on/off | `--license pro2 --featureOverride <featureKey>:<value>` | Bakes the override into a generated license (community/enterprise can't be overridden) |
| Anything else — core nodes, generic UI, non-gated bug fixes | *(nothing — community default)* | No license needed |
If both AI and enterprise apply, combine them: `--ai --enterprise`. When unsure,
state your best guess and ask. Run `pnpm nathan help` for the full flag reference.
### Deploy
```bash
pnpm nathan deploy <branch-name> test-<short-name> [flags]
```
Nathan builds the branch image (a few minutes) and the command prints the instance
URL (`https://test-<short-name>.stage-app.n8n.cloud`, login `test@n8n.io` /
`helloWorld7`). Relay that URL to the user.
## Common commands
```bash
pnpm nathan help # full option reference
pnpm nathan deploy my-branch test-my-feature # community license
pnpm nathan deploy my-branch test-sso --enterprise # enterprise license
pnpm nathan deploy my-branch test-ai --ai # instance AI (license -> pro2)
pnpm nathan deploy nightly test-nightly # deploy the n8nio/n8n:nightly image
```
Key flags (after the deploy args): `--license community|enterprise|starter|pro1|pro2|trial`,
`--enterprise`, `--ai`, `-e KEY=value` (repeatable), `--featureOverride key:value`
(needs a generated license).
## `local` caveat
`pnpm nathan local ...` generates a runnable `docker run` bundle, but Nathan
delivers it as **Slack file attachments** (`run-n8n.sh` + `.env`), not to the
terminal — they land in **#updates-pnpm-nathan**
(https://n8nio.slack.com/archives/C0BGVHZ0SCW). `deploy` and `help` return fully
in the terminal.
**Do not invent a `NATHAN_SLACK_CHANNEL`.** Leave it unset (it defaults to
#updates-pnpm-nathan); only set it if the user explicitly gives you a channel id.
## Unsupported
Queue mode, multi-main, and non-SQLite databases are not supported by Nathan.

View File

@ -0,0 +1,119 @@
---
name: n8n:public-api
description: >-
Adds or updates n8n Public API v1 endpoints, OpenAPI specs, and handler wiring.
Use when creating public API handlers, registering paths in openapi.yml, or adding OpenAPI tags. Always use @PublicApiController for new endpoints (API-37+).
---
# Public API v1
Public API lives under `packages/cli/src/public-api/v1/`.
**Always use `@PublicApiController` for new endpoints (API-37+).** Do not add new business logic to `express-openapi-validator` handlers. Controllers use the same decorator style as internal `@RestController`, mounted at `/api/v1` with API-key auth and public errors via `PublicApiControllerRegistry`.
**Legacy (existing endpoints only):** `express-openapi-validator` handlers under `handlers/`; OpenAPI path specs are YAML under each handler's `spec/` directory.
When you touch a legacy endpoint, migrate it to `@PublicApiController` rather than extending the eov handler. Do not mix data-access styles within a new feature.
## Architecture
Convergence is at the **service layer**, not HTTP. Public and internal stay as
two sibling routes over one shared service — neither calls the other:
```
GET /rest/tags → TagsController ┐ JWT auth, internal shape
├─→ TagService
GET /api/v1/tags → TagsPublicController ┘ API-key auth, public DTO
```
## Adding an endpoint (required: controller pattern)
Reference: `v1/controllers/tags.public.controller.ts` (`GET /tags`).
1. **Public DTOs** in `@n8n/api-types` — input query/body + output resource DTO
(distinct from internal shapes when they diverge). Use `Z.class` so the
registry can validate/parse. Wrap list payloads as objects (e.g. `{ data: [...] }`),
same as `TagListPublicDto` / `WorkflowVersionHistoryListPublicDto`.
2. **Controller**`v1/controllers/<feature>.public.controller.ts`
```ts
@PublicApiController('/tags')
export class TagsPublicController {
constructor(private readonly tagService: TagService) {}
@Get('/')
@ApiKeyScope('tag:list')
@ApiResponse(TagListPublicDto)
async getTags(_req, _res, @Query q: ListTagsQueryDto) { /* call service */ }
}
```
- Reuse `@Get/@Post/@Body/@Query/@Param/@GlobalScope/@ProjectScope` as-is.
- For `@ProjectScope` on workflow/credential routes, name the path param
`workflowId` / `credentialId` (or `projectId` / `dataTableId`) — the
registry passes `req.params` to `userHasScopes`, which does not remap `id`.
- `@ApiKeyScope` — string, or `{ anyOf }` / `{ allOf }` (no bare arrays).
- `@ApiResponse(Dto)` — registry `.parse()`s the return value (strips
undeclared fields). Shape is provisional until API-39 (doc-gen).
- Delegate to the same service as the internal REST controller.
3. **Side-effect import** the controller from
`packages/cli/src/public-api/v1/controllers/index.ts` (re-exported via
`public-api/index.ts`) so metadata is registered before
`PublicApiControllerRegistry.activate`. Name the file
`*.public.controller.ts``public-api-controllers.test.ts` fails CI if a
controller file is missing from that barrel or lives outside `controllers/`.
4. **OpenAPI path spec** — still required for docs + `scope-parity.test.ts`
(`handlers/<feature>/spec/paths/…`, `$ref` in `openapi.yml`). Set
`operationId`, `x-required-scope` matching `@ApiKeyScope`. **Do not** set
`x-eov-operation-id` / `x-eov-operation-handler` — those are legacy eov-only;
scope-parity and discover read `@ApiKeyScope` from the controller by matching
method + path.
5. **Coverage manifest** — add every new OpenAPI endpoint to
`packages/nodes-base/nodes/N8n/n8n-api-coverage.json`.
## Legacy eov handlers (do not use for new endpoints)
Only for maintaining endpoints not yet migrated:
1. **Handler**`handlers/<feature>/<feature>.handler.ts`
- Export middleware arrays keyed by `x-eov-operation-id`.
- For scope-protected endpoints, use `publicApiScope()` or
`apiKeyHasScopeWithGlobalScopeFallback()` (they tag the scope-enforcement
middleware with `__apiKeyScope`) and add matching `x-required-scope` in the
path YAML; use `none` for endpoints without an API-key scope (see
`scope-parity.test.ts`).
- **Delegate to the same service layer as the internal REST API.**
Parse input with `@n8n/api-types` DTOs, call `Container.get(SomeService)`,
map errors — do not reach into repositories or duplicate business logic.
2. **OpenAPI path spec**`handlers/<feature>/spec/paths/<path>.yml`
- Set `tags: [<TagName>]` matching a top-level tag in `openapi.yml`.
3. **Register path** — add a `$ref` entry under `paths:` in `openapi.yml`.
4. **Request types** — add a namespace in `packages/cli/src/public-api/types.ts`
when the handler needs typed query/body params.
5. **Coverage manifest** — add every new OpenAPI endpoint to
`packages/nodes-base/nodes/N8n/n8n-api-coverage.json`.
## `tags` array in `openapi.yml`
When adding or editing the top-level `tags:` array in
`packages/cli/src/public-api/v1/openapi.yml`, **keep entries sorted
alphabetically by `name`**. Insert the new tag in order; do not append to the end.
```yaml
tags:
- name: Audit
description: Operations about security audit
- name: CommunityPackage
description: Operations about community packages
# … remaining tags in A→Z order by name
```
`scope-parity.test.ts` asserts this ordering — CI fails if tags drift out of
sort order.
## Reference
- **Controller pattern (required for new work):** `v1/controllers/tags.public.controller.ts`, `v1/controllers/workflows.public.controller.ts`
- **Registry:** `packages/cli/src/public-api/public-api-controller.registry.ts`
- Legacy eov examples (migration targets, not templates for new endpoints):
`handlers/insights/`, `handlers/variables/`, `handlers/folders/`,
`handlers/projects/`, `handlers/data-tables/`, `handlers/workflows/`
- Multipart: `handlers/n8n-packages/` (see also
`packages/cli/src/modules/n8n-packages/CLAUDE.md`)

View File

@ -0,0 +1,70 @@
---
name: n8n:telemetry
description: >-
Guides adding, changing, and reviewing telemetry through the `@n8n/telemetry`
event registry. Use when working on telemetry, analytics, tracking, product
events, `track()` calls, or RudderStack/PostHog product events, in frontend
or backend code — and whenever you need to find which registered telemetry
events exist, what an event means, or what properties it carries.
---
# Telemetry
## The registry
Events migrated to the registry live in `packages/@n8n/telemetry` as one entry per event — its exact emitted name, a description, and a zod schema typing its properties — organized per product domain in `src/events/` and composed into `TELEMETRY_EVENT.<DOMAIN>.<EVENT>`. The package defines registered events and never depends on transport SDKs.
**To find which events are registered, what they mean, or what properties they carry, run the catalog first:**
```bash
pnpm --filter @n8n/telemetry catalog # human-readable, grouped by domain
pnpm --filter @n8n/telemetry catalog --json # structured, for programmatic use
```
The registry is being adopted incrementally. Events not yet registered do not appear in the catalog, so search `track()` call sites when the catalog has no match.
Pass the entry itself to `track()` — it resolves the emitted name internally:
```ts
import { TELEMETRY_EVENT } from '@n8n/telemetry';
telemetry.track(TELEMETRY_EVENT.PLATFORM.USER_IS_PART_OF_EXPERIMENT, {
name: experimentName,
variant,
});
```
Both `track()` implementations accept registry entries and plain strings. Plain strings remain supported for events that have not yet migrated:
- Frontend: `packages/frontend/editor-ui/src/app/plugins/telemetry/index.ts`
- Backend: `packages/cli/src/telemetry/index.ts`
Entries get property autocomplete and compile-time checks — typo'd, missing, or wrongly typed properties fail typecheck. When the telemetry transport is initialized, `track()` additionally validates registered-event payloads via `getEventValidationError` (shared from `@n8n/telemetry`) and logs a warning on mismatch, including unrecognized properties that slipped past structural typing. A validation warning does not stop the event from being emitted.
## Adding an event
1. **Check the catalog first** (`pnpm --filter @n8n/telemetry catalog`). If an existing event covers the same user action from another surface, augment it with a property instead of adding a near-duplicate event.
2. **Pick the domain by the event's subject** — what the event is about, never the surface that triggered it. `User opened Credential modal` is CREDENTIALS whether opened from the NDV, template setup, or chat. The trigger context goes into a `source` property.
3. **Name it with the house grammar:** sentence case, actor first, past-tense verb, specific object (`User pinned node data`). No template interpolation in names — variability goes into properties. The name must snake_case cleanly into a BigQuery table name: no punctuation beyond spaces, no casing that collides after snake_casing.
4. **Write the entry `description`** stating what the event means and when it fires — a registry test rejects blank descriptions. Document individual properties with `.describe()` where the key alone is not obvious.
5. **Type the properties with zod (`import { z } from 'zod/v4'`):** `snake_case` keys, explicit `.optional()` where a call site may omit a value, `z.looseObject()`/`.catchall()` for genuinely dynamic remainders. Schemas must stay JSON-Schema-representable — no transforms, refinements, or `z.date()` (a registry test enforces this via `z.toJSONSchema()`).
6. **Place the emission:** frontend via `useTelemetry().track(...)`; backend either through a `RelayEventMap` handler in `packages/cli/src/events/relays/telemetry.event-relay.ts` (event-bus-driven) or a direct `Telemetry.track(...)` call — both reference the same registry entry.
## Hard rules
- **Never rename an emitted event.** BigQuery materializes one table per event name; a rename orphans downstream history. A rename is delete + create, names are never reused, and removals must be coordinated with the data team before deleting the registry entry.
- **Never duplicate an event name** — one entry per event across all domains, referenced by every call site (even FE + BE). CI fails on collision.
- **Properties evolve additively only.** Changing a property's type forks warehouse columns even under a stable name. Mark deprecations on the schema (`.meta({ deprecated: true })`) instead of removing.
- **Breaking changes need a data-team heads-up** in Slack plus a Notion note before they ship.
## Testing
Do not retype event-name literals in tests:
- In call-site tests, mock `useTelemetry().track` or the backend `Telemetry.track` service and expect the registry entry itself with the payload.
- In frontend transport tests, expect `window.rudderanalytics.track` to receive `entry.name` and the augmented payload.
- In backend transport tests, expect the RudderStack payload's `event` field to equal `entry.name` and its `properties` to include the event payload.
## Related
Experiment exposure and metric events follow `n8n:experiments` (`.agents/skills/experiments/SKILL.md`).

View File

@ -0,0 +1,3 @@
{
"issues": 169
}

View File

@ -0,0 +1 @@
../../../../.agents/skills/nathan

View File

@ -0,0 +1 @@
../../../../.agents/skills/public-api

View File

@ -0,0 +1 @@
../../../../.agents/skills/telemetry

View File

@ -12,7 +12,7 @@
"Bash(popd)",
"Bash(pushd:*)",
"Bash(mkdir -p .claude/plans)",
"Write(.claude/plans/*)"
"Edit(.claude/plans/*)"
]
},
"hooks": {

1
.github/CODEOWNERS vendored
View File

@ -3,3 +3,4 @@ packages/@n8n/db/src/migrations/ @n8n-io/migrations-review
.github/scripts @n8n-io/qa-dx
.github/actions @n8n-io/qa-dx
.github/poutine-rules @n8n-io/qa-dx
docker/get-n8n.sh @n8n-io/qa-dx

View File

@ -196,7 +196,10 @@ on every push made cost untenable; firing on every review approval cascaded
through the dismiss-stale-on-push → re-approve loop, which also blew up.
The current trigger fires once per `opened` / `reopened` / `ready_for_review`
on a non-fork PR touching the eval surface, and runs the `pr` test-case dataset
(~6 high-reliability, capability-diverse cases) instead of the full ~14. To
(a small set of high-reliability, capability-diverse cases) instead of the full
suite. Test cases are pulled at run time from the LangTracer suite
`baseline` — the source of truth; CI has no disk fallback (local runs
keep `--source disk` for authoring). To
re-run after pushing a fix, dispatch `ci-instance-ai-evals.yml` with the PR
number (optionally `tier: full` for broader coverage) — results post back to
the PR. The lighter `test-evals-discovery.yml` still runs on every push as part
@ -206,8 +209,8 @@ of `ci-pull-requests.yml`.
the lab bench.** The gate deliberately exposes only PR re-runs. Anything that
isn't PR gating — baselines, model experiments, arbitrary branch runs — goes
through `test-evals-instance-ai.yml`'s own dispatch form ("Instance AI
Evals: Experiments"): full knob set (branch, filter, tier, iterations, experiment-name,
model), no per-PR cancellation (dispatches run in parallel, e.g. concurrent
Evals: Experiments"): full knob set (branch, filter, tier, suite,
iterations, experiment-name, model), no per-PR cancellation (dispatches run in parallel, e.g. concurrent
model-comparison arms), and SHA-keyed docker cache hits on master. Evals never
run on fork PRs: the event trigger gates on `head.repo.fork`, and the `pr`
re-run path refuses fork PRs in `resolve` (dispatched runs carry secrets).

View File

@ -7,9 +7,9 @@ description: 'Configures Node.js with pnpm, installs Aikido SafeChain for supply
inputs:
node-version:
description: 'Node.js version to use. Pinned to 24.16.0 by default for reproducible builds.'
description: 'Node.js version to use. Pinned to 24.18.0 by default for reproducible builds.'
required: false
default: '24.16.0'
default: '24.18.0'
enable-docker-cache:
description: 'Whether to set up Blacksmith Buildx for Docker layer caching (Blacksmith runners only).'
required: false
@ -251,8 +251,15 @@ runs:
shell: bash
run: echo "running=${TURBOGHA_PORT:+true}" >> "$GITHUB_OUTPUT"
# Skipped on Windows: the turbogha server binds IPv4 while `localhost`
# resolves to IPv6 first there, so turbo can never reach it (the build
# logs `failed to contact remote cache` for every artifact and falls back
# to a local cache). The remote cache is inert, but the action's post-run
# still fetches the unreachable server to save it and dies with a bare
# `fetch failed`, turning the whole job red. Skip it so the one Windows
# build job stays green; Linux/Blacksmith jobs keep remote caching.
- name: Configure Turborepo Cache
if: steps.turbo-server.outputs.running != 'true'
if: steps.turbo-server.outputs.running != 'true' && runner.os != 'Windows'
uses: rharkor/caching-for-turbo@5d14fba18e450c09393333cfd4242e8b3cb455a6 # v2.4.2
with:
server-port: 0

View File

@ -10,9 +10,7 @@
"n8n-node-dev",
"n8n-nodes-base",
"n8n-playwright",
"n8n-workflow",
"typescript",
"@typescript/*"
"n8n-workflow"
]
}
}

View File

@ -78,6 +78,7 @@ class BuildContext {
sanitizeBranch(branch) {
if (!branch) return 'unknown';
return branch
.replace(/^refs\/heads\//, '')
.toLowerCase()
.replace(/[^a-z0-9._-]/g, '-')
.replace(/^[.-]/, '')

View File

@ -1,7 +1,18 @@
import semver from 'semver';
import { getMonorepoProjects } from './pnpm-utils.mjs';
const NPM_REGISTRY = 'https://registry.npmjs.org';
// Standalone packages release from master out-of-sync with the main pipeline
// (release-standalone-package.yml), so their `latest` follows the newest beta
// on npm instead of the version recorded in the stable checkout.
const STANDALONE_PACKAGES_FOLLOWING_BETA = new Set([
'@n8n/create-node',
'@n8n/eslint-plugin-community-nodes',
'@n8n/scan-community-package',
]);
/**
* @param {string} name
* @param {string} version
@ -23,6 +34,30 @@ async function setDistTag(name, version, tag, token) {
});
}
/** @param {string} name */
async function getDistTags(name) {
const res = await fetch(`${NPM_REGISTRY}/-/package/${encodeURIComponent(name)}/dist-tags`);
if (!res.ok) {
throw new Error(`Failed to fetch dist-tags for ${name}: HTTP ${res.status}`);
}
return await res.json();
}
/**
* Resolve the version `latest` should point at, or null if no move is needed.
* Standalone packages follow the npm `beta` dist-tag; a standalone release
* from master may already have pushed `latest` past beta, so never downgrade.
* @param {import('./pnpm-utils.mjs').PnpmPackage} pkg
*/
export async function resolveLatestVersion(pkg) {
if (!STANDALONE_PACKAGES_FOLLOWING_BETA.has(pkg.name)) return pkg.version;
const tags = await getDistTags(pkg.name);
const target = tags.beta ?? pkg.version;
if (tags.latest && semver.gte(tags.latest, target)) return null;
return target;
}
async function setLatestForMonorepoPackages() {
const token = process.env.NPM_TOKEN;
if (!token) {
@ -39,10 +74,15 @@ async function setLatestForMonorepoPackages() {
const failures = [];
for (const pkg of publishedPackages) {
const versionName = `${pkg.name}@${pkg.version}`;
try {
const res = await setDistTag(pkg.name, pkg.version, 'latest', token);
const version = await resolveLatestVersion(pkg);
if (version === null) {
console.log(`Skipped ${pkg.name}: latest is already at or ahead of beta`);
continue;
}
const versionName = `${pkg.name}@${version}`;
const res = await setDistTag(pkg.name, version, 'latest', token);
if (res.ok) {
console.log(`Set ${versionName} as latest`);
@ -53,8 +93,8 @@ async function setLatestForMonorepoPackages() {
}
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
console.error(`Failed to set ${versionName} as latest: ${message}`);
failures.push(versionName);
console.error(`Failed to set latest for ${pkg.name}: ${message}`);
failures.push(pkg.name);
}
}

View File

@ -0,0 +1,53 @@
import { describe, it, before, afterEach } from 'node:test';
import assert from 'node:assert/strict';
/**
* Run these tests by running
*
* node --test --experimental-test-module-mocks ./.github/scripts/set-latest-for-monorepo-packages.test.mjs
* */
let resolveLatestVersion;
before(async () => {
({ resolveLatestVersion } = await import('./set-latest-for-monorepo-packages.mjs'));
});
const originalFetch = globalThis.fetch;
afterEach(() => {
globalThis.fetch = originalFetch;
});
function mockDistTags(tags) {
globalThis.fetch = async () => ({ ok: true, json: async () => tags });
}
describe('resolveLatestVersion', () => {
it('uses the checkout version for regular monorepo packages', async () => {
globalThis.fetch = async () => {
throw new Error('should not fetch dist-tags for regular packages');
};
const version = await resolveLatestVersion({ name: '@n8n/config', version: '1.2.3' });
assert.equal(version, '1.2.3');
});
it('pins standalone packages to the beta dist-tag', async () => {
mockDistTags({ beta: '0.40.1', latest: '0.39.3' });
const version = await resolveLatestVersion({ name: '@n8n/create-node', version: '0.39.3' });
assert.equal(version, '0.40.1');
});
it('never downgrades latest below a newer standalone release', async () => {
mockDistTags({ beta: '0.40.1', latest: '0.41.0' });
const version = await resolveLatestVersion({ name: '@n8n/create-node', version: '0.39.3' });
assert.equal(version, null);
});
it('skips standalone packages without a beta tag when latest is current', async () => {
mockDistTags({ latest: '0.25.0' });
const version = await resolveLatestVersion({
name: '@n8n/eslint-plugin-community-nodes',
version: '0.25.0',
});
assert.equal(version, null);
});
});

View File

@ -29,7 +29,7 @@ jobs:
# While we're on alpine 3.22 awaiting NODE-4184 (graphicsmagick → sharp
# migration that unblocks 3.23), Node 26 base builds can't succeed.
# Restore '26' to this matrix once 3.23 is back.
node_version: ['22', '24.16.0']
node_version: ['22', '24.18.0']
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

View File

@ -30,11 +30,11 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [22.22.3, 24.16.0]
node-version: [22.22.3, 24.18.0]
with:
ref: ${{ github.sha }}
nodeVersion: ${{ matrix.node-version }}
collectCoverage: ${{ matrix.node-version == '24.16.0' }}
collectCoverage: ${{ matrix.node-version == '24.18.0' }}
secrets: inherit
lint:

View File

@ -69,3 +69,5 @@ jobs:
N8N_ENCRYPTION_KEY: ${{ secrets.N8N_ENCRYPTION_KEY }}
EVALS_LANGSMITH_ENDPOINT: ${{ secrets.EVALS_LANGSMITH_ENDPOINT }}
EVALS_LANGSMITH_API_KEY: ${{ secrets.EVALS_LANGSMITH_API_KEY }}
EVALS_LANGTRACER_URL: ${{ secrets.EVALS_LANGTRACER_URL }}
LANGTRACER_API_KEY: ${{ secrets.LANGTRACER_API_KEY }}

View File

@ -58,7 +58,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: 24.16.0
node-version: 24.18.0
- name: Fetch read-all live ledger from BigQuery
# Read-all (no ?package= param): one curl returns every row across
@ -179,16 +179,16 @@ jobs:
# source_file re-score path). Without it emit-payload falls back to git,
# which yields null churn/fix_density on this shallow clone.
run: |
signals_arg=""
signals_arg=()
if [ -f .mutation-health/signals.json ]; then
signals_arg="--signals .mutation-health/signals.json"
signals_arg=(--signals .mutation-health/signals.json)
else
echo "::notice::signals.json not present — churn/fix_density will fall back to git (null on shallow clone)."
fi
node scripts/mutation-health/emit-payload.mjs \
--summary "$REPORTS_DIR/summary.json" \
--package "$PACKAGE_NAME" \
$signals_arg
"${signals_arg[@]}"
- name: POST result payload
env:

View File

@ -25,7 +25,7 @@ jobs:
build-command: pnpm run build --filter=@n8n/utils --filter=@n8n/vitest-config --filter=@n8n/chat --filter=@n8n/design-system
- name: Publish to Chromatic
uses: chromaui/action@1cfa065cbdab28f6ca3afaeb3d761383076a35aa # v11
uses: chromaui/action@14cfaef73576e69f95f47f60058063f46ca38719 # v18.1.0
id: chromatic_tests
with:
workingDir: packages/frontend/@n8n/storybook

View File

@ -80,9 +80,12 @@ jobs:
ensure-correct-latest-version-on-npm:
name: Ensure correct latest version on npm
# Also runs on beta patches: standalone packages pin `latest` to the newest
# beta, so every beta publish needs a re-pin, not just stable promotions.
if: |
inputs.bump == 'minor' ||
(inputs.track == 'stable' && inputs.release_type != 'rc')
(inputs.track == 'stable' && inputs.release_type != 'rc') ||
(inputs.track == 'beta' && inputs.release_type != 'rc')
uses: ./.github/workflows/release-set-stable-npm-packages-to-latest.yml
secrets: inherit

View File

@ -253,4 +253,4 @@ jobs:
run: |
node .github/scripts/slack/notify.mjs \
--channel C036AELNMV0 \
--text '<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Release publish failed for n8n@${{ needs.determine-version-info.outputs.version }}>. Please Go to the actions page and retry failed runs to recover a flake in the release pipeline.'
--text '<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Release publish failed for n8n@${{ needs.determine-version-info.outputs.version }}>. Please go to the actions page and retry failed runs to recover a flake in the release pipeline. <!subteam^S08FYH9C9ME|@release-captain>'

View File

@ -75,7 +75,7 @@ jobs:
steps:
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: 24.16.0
node-version: 24.18.0
# Remove after https://github.com/npm/cli/issues/8547 gets resolved
- run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc

View File

@ -8,14 +8,19 @@ on:
required: true
type: choice
options:
- '@n8n/codemirror-lang'
- '@n8n/codemirror-lang-html'
- '@n8n/codemirror-lang-sql'
- '@n8n/create-node'
- '@n8n/eslint-plugin-community-nodes'
- '@n8n/node-cli'
- '@n8n/scan-community-package'
# All packages listed above require OIDC enabled in NPM. https://docs.npmjs.com/trusted-publishers
bump:
description: 'Version bump type'
required: true
type: choice
options:
- patch
- minor
# This workflow publishes out-of-sync with the main release pipeline, so it uses
# token auth (secrets.NPM_DIST_TAG_AND_INITIAL_PUBLISH_TOKEN) rather than trusted
# publishing (OIDC) — the OIDC relationship is reserved for release-publish.yml.
concurrency:
group: release-package-${{ github.event.inputs.package }}
@ -25,15 +30,14 @@ env:
CACHE_KEY: ${{ github.sha }}-${{ github.event.inputs.package }}-build
jobs:
publish-to-npm:
name: Publish to NPM
bump-and-push:
name: Bump version and push to master
runs-on: ubuntu-latest
timeout-minutes: 15
environment: npm
permissions:
id-token: write
env:
NPM_CONFIG_PROVENANCE: true
timeout-minutes: 10
environment: minor-release-tag-merge
outputs:
version: ${{ steps.bump.outputs.version }}
sha: ${{ steps.push.outputs.sha }}
steps:
- name: Check branch
@ -42,19 +46,88 @@ jobs:
echo "::error::This workflow can only be run from the master branch"
exit 1
- name: Generate GitHub App Token
id: generate_token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
with:
app-id: ${{ secrets.RELEASE_TAG_MERGE_APP_ID }}
private-key: ${{ secrets.RELEASE_TAG_MERGE_PRIVATE_KEY }}
skip-token-revoke: false
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: master
token: ${{ steps.generate_token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0
- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '24.18.0'
# A version bump only edits one package.json, so no workspace install/build
# is needed. `pnpm ls -r --only-projects` reads the workspace config directly.
- name: Bump version
id: bump
env:
PACKAGE: ${{ github.event.inputs.package }}
BUMP: ${{ github.event.inputs.bump }}
run: |
PKG_PATH=$(pnpm ls -r --only-projects --json | jq -r --arg n "$PACKAGE" '.[] | select(.name==$n) | .path')
if [ -z "$PKG_PATH" ]; then
echo "::error::Could not resolve path for package '$PACKAGE'"
exit 1
fi
NEW_VERSION=$(cd "$PKG_PATH" && npm version "$BUMP" --no-git-tag-version)
NEW_VERSION=${NEW_VERSION#v}
echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
echo "Bumped $PACKAGE to $NEW_VERSION"
- name: Commit and push version bump
id: push
env:
PACKAGE: ${{ github.event.inputs.package }}
NEW_VERSION: ${{ steps.bump.outputs.version }}
run: |
git config user.name "n8n-release-tag-merge[bot]"
git config user.email "256767729+n8n-release-tag-merge[bot]@users.noreply.github.com"
git commit -am "build: release ${PACKAGE}@${NEW_VERSION} (no-changelog)"
git push origin HEAD:master
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
publish-to-npm:
name: Publish to NPM
needs: bump-and-push
runs-on: ubuntu-latest
timeout-minutes: 15
environment: release
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ needs.bump-and-push.outputs.sha }}
- name: Setup and Build
uses: ./.github/actions/setup-nodejs
with:
build-command: 'pnpm turbo build --filter "...${{ github.event.inputs.package }}"'
build-command: 'pnpm turbo build --filter=...${{ github.event.inputs.package }}'
- name: Pre publishing changes
run: |
node .github/scripts/ensure-provenance-fields.mjs
- name: Configure NPM token
env:
NPM_TOKEN: ${{ secrets.NPM_DIST_TAG_AND_INITIAL_PUBLISH_TOKEN }}
run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc
# If this job fails after the version bump was already pushed to master,
# re-run only this job (do not re-run the whole workflow — that double-bumps).
- name: Publish package
env:
PACKAGE: ${{ github.event.inputs.package }}
run: pnpm --filter "$PACKAGE" publish --access public --no-git-checks --publish-branch master
run: pnpm --filter "$PACKAGE" publish --access public --no-git-checks

View File

@ -248,8 +248,11 @@ jobs:
shell: bash
run: sleep 60
# Advisory only: a Codecov API hiccup (e.g. a 503) must not red the whole
# nightly nor block the impact-map refresh, which runs off the built map.
- name: Analyse Coverage Gaps
if: always()
continue-on-error: true
env:
CODECOV_API_TOKEN: ${{ secrets.CODECOV_API_TOKEN }}
run: |
@ -263,3 +266,104 @@ jobs:
name: coverage-gap-report
path: coverage-gaps.json
retention-days: 21
# Refresh the committed impact map PRs read for E2E selection. Without this the
# map only updates on manual commits and drifts, so newly-covered source→spec
# couplings get declared uncovered and their E2E specs skipped. Gated on ALL
# shards passing (complete map) + aggregate having built it — a partial shard
# set yields a degraded map, worse than a stale one.
commit-impact-map:
name: Commit refreshed impact map
needs: [e2e, aggregate]
if: needs.e2e.result == 'success' && needs.aggregate.result == 'success'
runs-on: ubuntu-latest
# Least-privilege GITHUB_TOKEN: checkout + download-artifact only need read;
# the branch push + PR are done with the scoped app token below, not this token.
permissions:
contents: read
actions: read
outputs:
pull-request-number: ${{ steps.create-pr.outputs.pull-request-number }}
steps:
- name: Generate GitHub App Token
id: generate-token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
with:
app-id: ${{ secrets.N8N_ASSISTANT_APP_ID }}
private-key: ${{ secrets.N8N_ASSISTANT_PRIVATE_KEY }}
# Scope the token to only what the branch push + PR need.
permission-contents: write
permission-pull-requests: write
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ steps.generate-token.outputs.token }}
# Don't persist the token in .git/config (avoids leaking it via artifacts);
# create-pull-request pushes with its own token input, not the git remote creds.
persist-credentials: false
- name: Download coverage report artifact
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
with:
name: coverage-report
path: /tmp/coverage-report
- name: Copy impact map into place
run: |
MAP=/tmp/coverage-report/impact-map.json
# Guard: a missing/empty map is a build hiccup — keep the committed map
# rather than clobber it with a degraded one.
node -e '
const fs = require("fs");
const m = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
const n = Array.isArray(m.specs) ? m.specs.length : 0;
if (!n) { console.error("impact map has no specs — refusing to commit"); process.exit(1); }
console.log("impact map ok: " + n + " specs");
' "$MAP"
# Raw copy: the map is intentionally minified and biome-ignored
# (.github/test-metrics/**). Do NOT format it.
cp "$MAP" .github/test-metrics/e2e-impact-map.json
- name: Check for changes
id: check-changes
run: |
if git diff --quiet .github/test-metrics/e2e-impact-map.json; then
echo "Impact map unchanged"
echo "has_changes=false" >> "$GITHUB_OUTPUT"
else
echo "Impact map changed"
echo "has_changes=true" >> "$GITHUB_OUTPUT"
fi
- name: Create Pull Request
if: steps.check-changes.outputs.has_changes == 'true'
id: create-pr
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
token: ${{ steps.generate-token.outputs.token }}
commit-message: 'chore: Update e2e impact map'
labels: 'automation:scheduled-update'
title: 'chore: Update e2e impact map'
body: |
Automated refresh of the committed E2E impact map from the latest
nightly coverage run.
PRs use this map to scope which E2E specs run; refreshing it keeps
newly-covered source→spec couplings visible so changes aren't
declared uncovered and their specs silently skipped.
_Generated by the E2E coverage nightly._
branch: update-e2e-impact-map
base: master
delete-branch: true
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
approve-and-automerge:
needs: [commit-impact-map]
if: needs.commit-impact-map.outputs.pull-request-number != ''
uses: ./.github/workflows/util-approve-and-set-automerge.yml
secrets: inherit
with:
pull-request-number: ${{ needs.commit-impact-map.outputs.pull-request-number }}

View File

@ -18,6 +18,11 @@ on:
required: false
type: string
default: ''
suite:
description: 'LangTracer suite slug or id to pull test cases from.'
required: false
type: string
default: 'baseline'
sandbox-provider:
description: 'Sandbox provider (n8n-sandbox or daytona)'
required: false
@ -72,6 +77,10 @@ on:
description: 'Test-case dataset to run (e.g. "pr", "full"). Empty = no filter.'
required: false
default: ''
suite:
description: 'LangTracer suite slug or id to pull test cases from.'
required: false
default: 'baseline'
sandbox-provider:
description: 'Sandbox provider (n8n-sandbox or daytona)'
required: false
@ -92,12 +101,19 @@ on:
jobs:
run-evals:
name: 'Run Evals'
runs-on: blacksmith-4vcpu-ubuntu-2204
timeout-minutes: 90
# 8vcpu/32GB: full-suite N=10 baselines need ~150 min of eval time and
# did not fit the 4vcpu tier at any timeout.
runs-on: blacksmith-8vcpu-ubuntu-2204
# Long ceiling only for high-N baseline captures; regular runs keep a
# tight guard so a wedged run fails fast. Plain comparison (not fromJSON):
# it coerces the string input to a number, and a malformed dispatch value
# (NaN) falls back to the 90-minute guard instead of erroring the job.
timeout-minutes: ${{ (inputs.iterations || '3') >= 5 && 240 || 90 }}
env:
# Each port hosts an independent n8n container. The eval CLI's
# work-stealing allocator dispatches builds across them, capped per-lane.
LANE_PORTS: '5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688'
# 10 lanes x 2.5 GB caps = 25 GB, leaving ~7 GB for sandbox + CLI + OS.
LANE_PORTS: '5678,5679,5680,5681,5682,5683,5684,5685,5686,5687'
permissions:
contents: read
pull-requests: write
@ -122,6 +138,25 @@ jobs:
with:
cache-sha: ${{ inputs.cache-sha }}
# Host OOMs and disk exhaustion leave no application trace — sample host
# + container telemetry every 60s and ship it with the results artifact.
- name: Start host telemetry sampler
run: |
mkdir -p eval-diag
{ echo "=== disk at job start ==="; df -h /; docker system df; } > eval-diag/df-at-start.log
nohup bash -c 'while true; do
{
date -u +%FT%TZ
free -m | head -2
df -h / | tail -1
docker stats --no-stream --format "{{.Name}} cpu={{.CPUPerc}} mem={{.MemUsage}}"
ps -eo rss=,pid=,comm= --sort=-rss | head -5
echo
} >> eval-diag/host-samples.log 2>&1
sleep 60
done' > /dev/null 2>&1 &
echo $! > eval-diag/sampler.pid
- name: Start sandbox service
if: ${{ inputs.sandbox-provider == 'n8n-sandbox' }}
run: pnpm --filter n8n-containers services --services sandbox --network n8n-eval-net --name n8n-svc-sandbox
@ -174,8 +209,17 @@ jobs:
IFS=',' read -ra PORTS <<< "$LANE_PORTS"
for i in "${!PORTS[@]}"; do
port="${PORTS[$i]}"
# Bounded and self-healing: a lane that exhausts its capped heap is
# restarted by docker instead of staying dead; pruning + log caps
# keep per-lane disk and memory flat over a multi-hour run.
docker run -d --name "n8n-eval-$((i+1))" \
"${NETWORK_ARGS[@]}" \
--memory 2.5g --memory-swap 2.5g \
--restart on-failure \
--log-opt max-size=50m --log-opt max-file=2 \
-e NODE_OPTIONS=--max-old-space-size=2048 \
-e EXECUTIONS_DATA_PRUNE=true \
-e EXECUTIONS_DATA_MAX_AGE=1 \
-e E2E_TESTS=true \
-e N8N_ENABLED_MODULES=instance-ai \
-e N8N_AI_ENABLED=true \
@ -195,7 +239,7 @@ jobs:
n8nio/n8n:local
done
# 120s budget per port: containers booting in parallel on a shared
# 4vcpu runner contend for CPU/disk during n8n's startup (DB migrations,
# runner contend for CPU/disk during n8n's startup (DB migrations,
# license init), so each takes longer than a solo boot.
for port in "${PORTS[@]}"; do
ready=false
@ -277,6 +321,25 @@ jobs:
exit 1
fi
# Disk pressure develops during the eval (per-lane SQLite growth,
# verifier snapshots, logs), not at job start — so the runway check
# lives here, after the image load and lane startup, where "is there
# enough free disk for the next few hours" is a meaningful question.
# A run-A-style on-runner fallback build leaves tens of GB of builder
# cache that is safe to reclaim once every lane is up.
- name: Ensure disk runway for the eval run
shell: bash
run: |
free_gb=$(df -BG --output=avail / | tail -1 | tr -dc '0-9')
if [ "${free_gb:-0}" -lt 30 ]; then
echo "Only ${free_gb}GB free — reclaiming builder cache before the run accretes data"
# Best-effort: a prune failure must not skip the eval run itself.
docker builder prune -f || echo "::warning::builder prune failed — continuing with ${free_gb}GB free"
df -h / || true
else
echo "Disk runway OK: ${free_gb}GB free"
fi
- name: Run Instance AI Evals
continue-on-error: true
working-directory: packages/@n8n/instance-ai
@ -291,6 +354,11 @@ jobs:
LANGSMITH_PROJECT: instance-ai-evals
FILTER: ${{ inputs.filter }}
TIER: ${{ inputs.tier }}
SUITE: ${{ inputs.suite }}
# LangTracer is the test-case source of truth (TRUST-247); the CLI
# pulls the suite per run via its export API.
LANGTRACER_URL: ${{ secrets.EVALS_LANGTRACER_URL }}
LANGTRACER_API_KEY: ${{ secrets.LANGTRACER_API_KEY }}
ITERATIONS: ${{ inputs.iterations }}
EXPERIMENT_NAME: ${{ inputs.experiment-name }}
EVAL_PR_NUMBER: ${{ inputs.pr-number || github.event.pull_request.number }}
@ -302,6 +370,12 @@ jobs:
done
BASE_URLS=$(IFS=,; printf '%s' "${URLS[*]}")
ARGS=(--base-url "$BASE_URLS" --concurrency 32 --verbose --iterations "${ITERATIONS:-3}")
# LangTracer is the only CI case source (no disk fallback by design).
ARGS+=(--source langtracer --suite "${SUITE:-baseline}")
# Pin the LangSmith cohort: langtracer mode otherwise derives a
# suite-scoped dataset/baseline prefix, which would fork the KPI
# history and orphan the baseline comparison.
ARGS+=(--dataset instance-ai-workflow-evals --baseline-prefix instance-ai-baseline-)
[ -n "$FILTER" ] && ARGS+=(--filter "$FILTER")
[ -n "$TIER" ] && ARGS+=(--tier "$TIER")
[ -n "$EXPERIMENT_NAME" ] && ARGS+=(--experiment-name "$EXPERIMENT_NAME")
@ -346,19 +420,22 @@ jobs:
done
# Layer 1 — accuracy filter: only surface diagnostic signals.
# `tail -100` after the filter so we get the LATEST matching lines
# `tail -1000` after the filter so we get the LATEST matching lines
# (post-eval failure signal), not the earliest startup-time ones.
# -t keeps timestamps; the inspect line surfaces OOM kills/restarts,
# which leave no log line of their own.
SIGNALS='sandbox|builder|sandbox-service|daytona|instance.?ai|error|warn|reject|exception|fail'
for c in $(docker ps -aq --filter "name=n8n-eval-"); do
name=$(docker inspect --format '{{.Name}}' "$c" | sed 's|^/||')
echo ""
echo "============================================================"
echo "=== $name (filtered diagnostic signals, last 100 lines) ==="
echo "=== $name (filtered diagnostic signals, last 1000 lines) ==="
echo "============================================================"
docker logs "$c" 2>&1 \
docker inspect --format 'state: status={{.State.Status}} oomkilled={{.State.OOMKilled}} exitcode={{.State.ExitCode}} restarts={{.RestartCount}} started={{.State.StartedAt}} finished={{.State.FinishedAt}}' "$c" || true
docker logs -t "$c" 2>&1 \
| grep -ivE 'migration' \
| grep -iE "$SIGNALS" \
| tail -100 \
| tail -1000 \
|| true
done
@ -375,6 +452,7 @@ jobs:
- name: Stop n8n containers
if: ${{ always() }}
run: |
[ -f eval-diag/sampler.pid ] && kill "$(cat eval-diag/sampler.pid)" 2>/dev/null || true
mapfile -t ids < <(docker ps -aq --filter "name=n8n-eval-")
if [ "${#ids[@]}" -gt 0 ]; then
docker stop "${ids[@]}" 2>/dev/null || true
@ -420,4 +498,20 @@ jobs:
path: |
packages/@n8n/instance-ai/eval-results.json
packages/@n8n/instance-ai/.data/workflow-eval-report.html
eval-diag/
retention-days: 14
# The eval step runs with continue-on-error so the logs/artifacts above
# always land — but a run that never wrote eval-results.json (bad secret,
# unresolvable LangTracer suite, CLI crash before any results) must still
# fail the job rather than end green with zero evals. Per-case build
# failures DO write results and stay green by design. Mirrors the same
# guard in test-evals-mcp.yml.
- name: Fail when no results were produced
if: ${{ always() }}
working-directory: packages/@n8n/instance-ai
run: |
if [ ! -f eval-results.json ]; then
echo "::error::Eval run produced no eval-results.json — it failed before writing any results. Check the 'Run Instance AI Evals' step logs and the uploaded artifacts."
exit 1
fi

View File

@ -25,6 +25,11 @@ on:
required: false
type: string
default: 'mcp'
suite:
description: 'LangTracer suite slug or id to pull test cases from.'
required: false
type: string
default: 'baseline'
filter:
description: 'Only build + eval test cases whose slug matches (comma-separated; empty = whole tier)'
required: false
@ -71,6 +76,11 @@ on:
required: false
EVALS_LANGSMITH_API_KEY:
required: false
# The eval CLI pulls the test-case suite from LangTracer.
EVALS_LANGTRACER_URL:
required: false
LANGTRACER_API_KEY:
required: false
workflow_dispatch:
inputs:
branch:
@ -81,6 +91,10 @@ on:
description: 'Test-case dataset to build + eval (e.g. "mcp")'
required: false
default: 'mcp'
suite:
description: 'LangTracer suite slug or id to pull test cases from.'
required: false
default: 'baseline'
filter:
description: 'Only build + eval test cases whose slug matches (comma-separated; empty = whole tier)'
required: false
@ -254,6 +268,9 @@ jobs:
BASE_URLS: ${{ steps.lanes.outputs.base_urls }}
LANES: ${{ inputs.lanes || '6' }}
TIER: ${{ inputs.tier }}
SUITE: ${{ inputs.suite }}
LANGTRACER_URL: ${{ secrets.EVALS_LANGTRACER_URL }}
LANGTRACER_API_KEY: ${{ secrets.LANGTRACER_API_KEY }}
FILTER: ${{ inputs.filter }}
ITERATIONS: ${{ inputs.iterations }}
EVAL_CONCURRENCY: ${{ inputs.eval-concurrency }}
@ -266,6 +283,16 @@ jobs:
CONCURRENCY="${EVAL_CONCURRENCY:-$((LANES * 2))}"
echo "Lanes: $LANES | eval concurrency: $CONCURRENCY"
# Spawn the `claude` build subprocess from an empty directory outside
# the checkout. Inheriting the repo cwd would load the repo's Claude
# config into the builder (CLAUDE.md/AGENTS.md, .claude/settings.json
# with the n8n plugin's skills and hooks) and allow permissionless
# reads of repo files — including the eval harness and case corpus.
# The MCP config is unaffected: it is staged per lane and pinned with
# --strict-mcp-config either way.
BUILD_CWD="$RUNNER_TEMP/mcp-build-cwd"
mkdir -p "$BUILD_CWD"
# --dataset + --baseline-prefix keep the MCP cohort isolated from the
# Instance AI dataset/baseline in LangSmith (both halves required).
# --timeout-ms 25min: MCP-tier multi-agent cases with large mocked
@ -282,8 +309,11 @@ jobs:
--timeout-ms 1500000
--dataset mcp-workflow-evals
--baseline-prefix mcp-baseline-
--build-cwd "$BUILD_CWD"
--verbose
)
# LangTracer is the only CI case source (no disk fallback by design).
ARGS+=(--source langtracer --suite "${SUITE:-baseline}")
[ -n "$FILTER" ] && ARGS+=(--filter "$FILTER")
[ -n "$EXPERIMENT_NAME" ] && ARGS+=(--experiment-name "$EXPERIMENT_NAME")
pnpm eval:instance-ai "${ARGS[@]}"

View File

@ -12,7 +12,7 @@ on:
description: Version of node to use.
required: false
type: string
default: 24.16.0
default: 24.18.0
env:
NODE_OPTIONS: --max-old-space-size=7168

View File

@ -12,7 +12,7 @@ on:
description: Version of node to use.
required: false
type: string
default: 24.16.0
default: 24.18.0
collectCoverage:
required: false
default: false

View File

@ -12,7 +12,7 @@ on:
description: Version of node to use.
required: false
type: string
default: 24.16.0
default: 24.18.0
env:
NODE_OPTIONS: --max-old-space-size=7168

View File

@ -11,11 +11,21 @@ frontend, and extensible node-based workflow engine.
## General Guidelines
- Always use pnpm
- **Secrets on the command line:** if a developer opted into anonymous dev
metrics (`scripts/dev-metrics`), pnpm command arguments are recorded. Arguments
of secret-carrying words (`config`, `login`, `publish`, `token`) — whether a
subcommand or baked into a flag — are dropped, and the home dir is stripped from
paths, but other args are sent as-is — so never put secrets in a command. Pass
sensitive values via environment variables, which are never captured.
- When adding comments, keep them concise and to the point - explain the "why"
in a line or two; don't be overly verbose. Comments should be scoped and
relevant to the surrounding code, not just to the current task
- We use Linear as a ticket tracking system
- We use Posthog for feature flags
- To find registered telemetry events (names, descriptions, properties), run
`pnpm --filter @n8n/telemetry catalog` (`--json` for structured output). The
registry is being adopted incrementally, so search call sites if the catalog
has no match. The `n8n:telemetry` skill covers adding or changing events
- When starting to work on a new ticket create a new branch from fresh
master with the name specified in Linear ticket
- When creating a new branch for a ticket in Linear - use the branch name
@ -187,6 +197,41 @@ const children = getChildNodes(workflow.connections, 'NodeName', 'main', 1);
failed assertion) that developers need to fix.
- Import from appropriate error classes in each package
### Persistence layer & the TypeORM boundary
TypeORM (`@n8n/typeorm`) must stay in the **persistence layer** — the `@n8n/db`
package or a backend module's own `database/` folder (entity/repository files).
Business logic — services, controllers, handlers, commands, factories — must not
import from `@n8n/typeorm` (including `@n8n/typeorm/...` subpaths). In
`packages/cli` this is enforced by the `misplaced-n8n-typeorm-import` lint rule;
a new import (or an inline `eslint-disable` of the rule) fails CI.
- **Pattern:** when a query needs operators (`In`, `IsNull`, `LessThan`,
`FindOptionsWhere`, …), put it behind a **use-case-named repository method**
that takes plain parameters and returns domain-shaped values — not a generic
`find(options)` passthrough.
- **Transactions:** transaction orchestration belongs in the persistence layer.
Don't reach for `.manager` / `.manager.transaction(...)` or
`createQueryBuilder(...)` in business logic. Use the sanctioned primitive in
`@n8n/db`: inject the abstract `TransactionRunner` and wrap the unit of work in
`txRunner.run(ctx, async (ctx) => …)`. The callback receives an
`OperationContext` carrying the active transaction; thread that `ctx` into the
repository methods you call. `run` **requires** a context — pass an empty `{}`
at the operation entry point, and reuse the one you were handed everywhere
below it (a context that already carries a transaction is joined, not nested).
Repositories extend `BaseRepository` and resolve the right `EntityManager` with
`this.managerFor(ctx)`; the `Transaction` handle is opaque and never exposes a
driver type to business logic. See `oauth-token.service.ts` +
`oauth-*-token.repository.ts` for a worked example.
- **Anti-patterns reviewers reject** — they hide the dependency instead of
removing it:
- String-matching TypeORM errors, e.g. `error.name === 'QueryFailedError'`.
- Relabeling the import from `@n8n/typeorm` to `@n8n/db` to silence the rule
(`@n8n/db` re-exports several operators/types, but this relabels the
dependency rather than removing it).
- Pushing `.manager` / `createQueryBuilder` into business logic to avoid an
operator import — trades a visible leak for an invisible one.
### Frontend Development
- Refer to `packages/frontend/AGENTS.md`
- **All UI text must use i18n** - add translations to `@n8n/i18n` package
@ -212,7 +257,7 @@ What we use for testing and writing tests:
- **To iterate on a feature without docker rebuilds**, boot service containers
and run `pnpm dev` locally — `pnpm --filter n8n-containers services --services postgres,redis,mailpit,proxy`
then `pnpm dev`. See [Develop against running containers](packages/testing/playwright/README.md#develop-against-running-containers-avoid-docker-rebuilds).
- **For Playwright test maintenance/cleanup**, see @packages/testing/playwright/AGENTS.md (includes janitor tool for static analysis, dead code removal, architecture enforcement, and TCR workflows).
- **For Playwright test maintenance/cleanup**, see `packages/testing/playwright/AGENTS.md` (includes janitor tool for static analysis, dead code removal, architecture enforcement, and TCR workflows).
### Common Development Tasks

View File

@ -1,3 +1,149 @@
# [2.32.0](https://github.com/n8n-io/n8n/compare/n8n@2.31.0...n8n@2.32.0) (2026-07-21)
### Bug Fixes
* **ai-builder:** Honor eq [@version](https://github.com/version) conditions in generated node type definitions ([#34232](https://github.com/n8n-io/n8n/issues/34232)) ([9a48bc5](https://github.com/n8n-io/n8n/commit/9a48bc5fa75976a0ffba93bde062fd0fb05a7b8c))
* **ai-builder:** Open agent chat preview on the same tab on instance AI ([#34441](https://github.com/n8n-io/n8n/issues/34441)) ([6d56cee](https://github.com/n8n-io/n8n/commit/6d56cee0f42af42f5b192b8b5ad378a1cc566472))
* **ai-builder:** Resurface channel edit modal on AIA agent builder's artifact mode ([#34257](https://github.com/n8n-io/n8n/issues/34257)) ([0984a1d](https://github.com/n8n-io/n8n/commit/0984a1d97a80c14a63fb31229092f6e8239aaddd))
* **ai-builder:** Scope ToolIoView synth execution under a synthetic document store ([#34588](https://github.com/n8n-io/n8n/issues/34588)) ([ab12ee5](https://github.com/n8n-io/n8n/commit/ab12ee534c0998558c9579562dec2f34b55cd640))
* **ai-builder:** Wire thread conversation history - with caps - for agents with slack channel ([#34354](https://github.com/n8n-io/n8n/issues/34354)) ([8c1d17f](https://github.com/n8n-io/n8n/commit/8c1d17ff5171d47c30220f96b83d85955ef4d5af))
* Allow devDependency imports in linter ([#34335](https://github.com/n8n-io/n8n/issues/34335)) ([26caaa8](https://github.com/n8n-io/n8n/commit/26caaa876f2b787cd665631ce9cf656fd4abca01))
* **API:** Fix broken public API playground server selection ([#34077](https://github.com/n8n-io/n8n/issues/34077)) ([f24570f](https://github.com/n8n-io/n8n/commit/f24570f21f11a370fba31dfa0b6b9206b066f51b))
* **AWS Bedrock Chat Model Node:** Default guardrail version to working draft when not set ([#33555](https://github.com/n8n-io/n8n/issues/33555)) ([013c34c](https://github.com/n8n-io/n8n/commit/013c34ccae502176275d55986fc92b405e2861e8))
* **core, editor:** Clarify credential setup outcomes and add requireUserSelection ([#34268](https://github.com/n8n-io/n8n/issues/34268)) ([65e267b](https://github.com/n8n-io/n8n/commit/65e267bce7b6d931656c6238fe518b0246f65189))
* **core:** Acquire expression isolate for MCP Trigger tool calls in queue mode ([#34491](https://github.com/n8n-io/n8n/issues/34491)) ([eed8f3f](https://github.com/n8n-io/n8n/commit/eed8f3f1424eb3686d34311822ff6a35071df8c4))
* **core:** Add a per-attempt timeout to AI assistant service calls ([#34341](https://github.com/n8n-io/n8n/issues/34341)) ([f191548](https://github.com/n8n-io/n8n/commit/f191548586f2af198d85b6afae1b1508378c945f))
* **core:** Add project ID and project name to log stream events ([#33854](https://github.com/n8n-io/n8n/issues/33854)) ([a89817d](https://github.com/n8n-io/n8n/commit/a89817dc92f41d351631926ca3827f0e56bcfceb))
* **core:** Alert on unusable Instance AI sandbox snapshots and gate the release on snapshot health ([#34344](https://github.com/n8n-io/n8n/issues/34344)) ([080c3cc](https://github.com/n8n-io/n8n/commit/080c3ccc8c4011b2f41e5e7460be3c6bdd4dae76))
* **core:** Allow publishing end-user credentials with Send-and-Wait nodes ([#34462](https://github.com/n8n-io/n8n/issues/34462)) ([c59f5d8](https://github.com/n8n-io/n8n/commit/c59f5d8b6a180c0ee17a1601c39a88e2baa72a81))
* **core:** Bind dynamic credential tokens to a user ID ([#34073](https://github.com/n8n-io/n8n/issues/34073)) ([fd261be](https://github.com/n8n-io/n8n/commit/fd261be97cf3d06aad753f69e8e099f60d09c699))
* **core:** Cancel Instance AI tool runs promptly when generation is stopped ([#34433](https://github.com/n8n-io/n8n/issues/34433)) ([4f8fef1](https://github.com/n8n-io/n8n/commit/4f8fef13cacf31163999bdddc46f4d2ae8bb0b6a))
* **core:** Cancel Instance AI workspace tools promptly on stop ([#34551](https://github.com/n8n-io/n8n/issues/34551)) ([267fd85](https://github.com/n8n-io/n8n/commit/267fd853cdc1669e869d280eae687eb6cad89abe))
* **core:** Close the durable scheduler's record-then-dispatch effect boundary ([#34014](https://github.com/n8n-io/n8n/issues/34014)) ([e22680b](https://github.com/n8n-io/n8n/commit/e22680b99f91d708e1a4d68335a3d38325266c40))
* **core:** Coerce AWS request header values to strings before signing ([#34534](https://github.com/n8n-io/n8n/issues/34534)) ([d6f26cf](https://github.com/n8n-io/n8n/commit/d6f26cfe7dec41f9f823abdb737301849e5d3d9d))
* **core:** Count AI assistant workflow test runs as manual executions in statistics ([#34145](https://github.com/n8n-io/n8n/issues/34145)) ([9842c2c](https://github.com/n8n-io/n8n/commit/9842c2c28cc156dc10049b15dfd98e7571aca584))
* **core:** Create proxied Instance AI sandboxes from snapshots only ([#34328](https://github.com/n8n-io/n8n/issues/34328)) ([29c5d72](https://github.com/n8n-io/n8n/commit/29c5d725c7b99727ed8a70e6398ef5f594e002d8))
* **core:** Delete executions in batches when removing workflows, projects and folders ([#34265](https://github.com/n8n-io/n8n/issues/34265)) ([0b809c9](https://github.com/n8n-io/n8n/commit/0b809c987a4df86155e98a9f0e2ac52257c8fc16))
* **core:** Exclude in-flight Instance AI groups from history reads on non-driving mains ([#34345](https://github.com/n8n-io/n8n/issues/34345)) ([50c3d88](https://github.com/n8n-io/n8n/commit/50c3d88af56ebb869f76f13a2417c528d90ffd4c))
* **core:** Fix AI Agent not seeing tools connected through HITL tools ([#34271](https://github.com/n8n-io/n8n/issues/34271)) ([bdff8f4](https://github.com/n8n-io/n8n/commit/bdff8f4be99f7b677d797f669376e61e46d9ebc2))
* **core:** Fix change in width of all dropdowns in UI ([#34249](https://github.com/n8n-io/n8n/issues/34249)) ([87cdf3d](https://github.com/n8n-io/n8n/commit/87cdf3d252ab6380ef0afeb1293882fb77931825))
* **core:** Lint community packages against their provenance-attested source ([#34214](https://github.com/n8n-io/n8n/issues/34214)) ([5f3d139](https://github.com/n8n-io/n8n/commit/5f3d139648df47c66ab0a9faea18af5c51ec8b84))
* **core:** Persist MCP servers when credential setup is skipped ([#34399](https://github.com/n8n-io/n8n/issues/34399)) ([7c7506d](https://github.com/n8n-io/n8n/commit/7c7506dc163449f2dfce22d308719951660a3a33))
* **core:** Prefer direct tools for agent capabilities ([#34466](https://github.com/n8n-io/n8n/issues/34466)) ([969a68e](https://github.com/n8n-io/n8n/commit/969a68e217c7aab8e6ac24543a234055b870a794))
* **core:** Preserve agent builder question answers ([#34414](https://github.com/n8n-io/n8n/issues/34414)) ([9882c5c](https://github.com/n8n-io/n8n/commit/9882c5c6cc8f20f715bca6938ca13142d8382edc))
* **core:** Preserve local credential fields absent from source contro… ([#34173](https://github.com/n8n-io/n8n/issues/34173)) ([0a4ddde](https://github.com/n8n-io/n8n/commit/0a4dddeb29e65ea6e10e7122fdf5df15cc4cf005))
* **core:** Preserve node aliases when generating AI tool variants ([#34162](https://github.com/n8n-io/n8n/issues/34162)) ([8284460](https://github.com/n8n-io/n8n/commit/8284460a5ade36b06a9b88fc71a8b13005f8b88b))
* **core:** Prevent getIncomingData from throwing on a missing connection type ([#34285](https://github.com/n8n-io/n8n/issues/34285)) ([9d05fbd](https://github.com/n8n-io/n8n/commit/9d05fbd5617d1740ee7a48eec4d27007baa7b344))
* **core:** Prevent sub-workflow failures after transferring a deleted user's workflows ([#33772](https://github.com/n8n-io/n8n/issues/33772)) ([7a56ade](https://github.com/n8n-io/n8n/commit/7a56ade6b2a73740a659149b3fe1e4b05c5658be))
* **core:** Replace https agent for 'Ignore SSL issues' OAuth2 requests with one that respects proxies ([#34234](https://github.com/n8n-io/n8n/issues/34234)) ([338f186](https://github.com/n8n-io/n8n/commit/338f186f0ba624a5425c9ec8c378c295298a219d))
* **core:** Require execution mode for MCP workflow executions ([#34155](https://github.com/n8n-io/n8n/issues/34155)) ([79012f6](https://github.com/n8n-io/n8n/commit/79012f66d7d5238d9937549cb8744331f430bdf3))
* **core:** Resolve @n8n/expression-runtime to its CJS build under Node ([#34463](https://github.com/n8n-io/n8n/issues/34463)) ([09f5ade](https://github.com/n8n-io/n8n/commit/09f5adec0d5481d89bb926eb3efecbf2b973e6f0))
* **core:** Retry transient AI assistant service errors during Instance AI environment setup ([#34324](https://github.com/n8n-io/n8n/issues/34324)) ([5b7df71](https://github.com/n8n-io/n8n/commit/5b7df71a050c05b628f56dcc6c85ab4cd064d7af))
* **core:** Retry transient sandbox file writes ([#34319](https://github.com/n8n-io/n8n/issues/34319)) ([80ea25b](https://github.com/n8n-io/n8n/commit/80ea25b76ea141e0a24f9a17fbd6049aab32af8a))
* **core:** Show a single error toast when a manual execution fails pre-flight validation ([#34541](https://github.com/n8n-io/n8n/issues/34541)) ([8d1fc02](https://github.com/n8n-io/n8n/commit/8d1fc022bb10b875ea71da2fa6a9aec9076e2e77))
* **core:** Sign SES requests with the ses service name ([#34270](https://github.com/n8n-io/n8n/issues/34270)) ([2e31230](https://github.com/n8n-io/n8n/commit/2e3123097e2065e5317bd58ea7621e6fdb5ddc02))
* **core:** Skip reporting axios errors thrown as unhandled node errors ([#34570](https://github.com/n8n-io/n8n/issues/34570)) ([33f1c36](https://github.com/n8n-io/n8n/commit/33f1c3611259a43de26e5f09569bd85212605220))
* **core:** Stop reporting quota-exhausted Instance AI runs to Sentry and isolate report request context ([#34549](https://github.com/n8n-io/n8n/issues/34549)) ([6f0804e](https://github.com/n8n-io/n8n/commit/6f0804e0e357811954b611abf1449fb61b7a8b1d))
* **core:** Update error message on file write ([#33833](https://github.com/n8n-io/n8n/issues/33833)) ([afe603f](https://github.com/n8n-io/n8n/commit/afe603fc00f816c38d01a65b5eaa17c36481a0ba))
* Correct build-command quoting in standalone package release ([#34258](https://github.com/n8n-io/n8n/issues/34258)) ([1301bba](https://github.com/n8n-io/n8n/commit/1301bbaf5341267037c146b2f74ba73c2e3585a7))
* Correct end-user credential validation, re-evaluation, and identity-hook recognition ([#34094](https://github.com/n8n-io/n8n/issues/34094)) ([65da749](https://github.com/n8n-io/n8n/commit/65da749ab3d118cd14a70ccf86c162a58790a71f))
* Default new agent MCP tool transport to httpStreamable ([#34092](https://github.com/n8n-io/n8n/issues/34092)) ([9c3f7fa](https://github.com/n8n-io/n8n/commit/9c3f7fa44b8441260be678525ebc5b7fc7f7626a))
* Do not lose scenario results on a budget/timeout abort ([#34419](https://github.com/n8n-io/n8n/issues/34419)) ([40c5b76](https://github.com/n8n-io/n8n/commit/40c5b7670869830b6a71f629963070cd872e51c1))
* **editor:** Allow self-hosted OpenAI credentials for episodic memory ([#34558](https://github.com/n8n-io/n8n/issues/34558)) ([e162724](https://github.com/n8n-io/n8n/commit/e162724baadcd59bd4c566b6f8d88ba5d0f9b99f))
* **editor:** Auto-ungroup invalid groups on workflow save ([#34456](https://github.com/n8n-io/n8n/issues/34456)) ([d5d3da6](https://github.com/n8n-io/n8n/commit/d5d3da67c1447606a74645dcd35cbfd4d5ae45b0))
* **editor:** Avoid next prev buttons from being disabled ([#33774](https://github.com/n8n-io/n8n/issues/33774)) ([a2fd7f7](https://github.com/n8n-io/n8n/commit/a2fd7f7e966c5734e473b6629652ce6f1c0d502b))
* **editor:** Decouple MCP redirect URI controls from env-lock flag ([#34184](https://github.com/n8n-io/n8n/issues/34184)) ([64318a8](https://github.com/n8n-io/n8n/commit/64318a810df1cc7fe27470db9f9b1930c6d12e20))
* **editor:** Dissolve single-node canvas group when converting its nodes to a sub-workflow ([#34334](https://github.com/n8n-io/n8n/issues/34334)) ([93e1b7f](https://github.com/n8n-io/n8n/commit/93e1b7fd6c55bf2fcd40d9770d7e03af812fe1e9))
* **editor:** Improve Message an Agent panels ([#34461](https://github.com/n8n-io/n8n/issues/34461)) ([e8b005e](https://github.com/n8n-io/n8n/commit/e8b005ee27f0e700e958dbbf09b1674e94fba163))
* **editor:** Include Chat, AI Assistant, and MCP settings under 'Instance settings: Manage' custom role permission ([#34455](https://github.com/n8n-io/n8n/issues/34455)) ([fa5476c](https://github.com/n8n-io/n8n/commit/fa5476c0cbd2e0a914a58f34d439179bbec89800))
* **editor:** Keep dropdown tooltips above menus ([#34547](https://github.com/n8n-io/n8n/issues/34547)) ([051eee1](https://github.com/n8n-io/n8n/commit/051eee194393f660cc6be41333cfb73e580c5ff0))
* **editor:** Link end-user credentials docs from credential modal ([#34406](https://github.com/n8n-io/n8n/issues/34406)) ([09d1e96](https://github.com/n8n-io/n8n/commit/09d1e96a1a7629caea6c51cc705d0970e822aba0))
* **editor:** Make AI assistant quota-exhausted error states explicit ([#33847](https://github.com/n8n-io/n8n/issues/33847)) ([4ef0d05](https://github.com/n8n-io/n8n/commit/4ef0d05f1cb45c9962dc7a166222aab9cfc6a767))
* **editor:** Make selector dropdowns usable in Instance AI workflow setup ([#33971](https://github.com/n8n-io/n8n/issues/33971)) ([487594c](https://github.com/n8n-io/n8n/commit/487594cfcdd77a9c6252a2ddb8d03e31d94f2b69))
* **editor:** Polish pass on the custom instance roles ([#34122](https://github.com/n8n-io/n8n/issues/34122)) ([297e252](https://github.com/n8n-io/n8n/commit/297e2529b3f695e10dde4653342374f75961bfef))
* **editor:** Prevent AI Agent from auto adding a chat connector on creation ([#34259](https://github.com/n8n-io/n8n/issues/34259)) ([865035d](https://github.com/n8n-io/n8n/commit/865035d5a008dd5786bbd158ccc76f1f66f188eb))
* **editor:** Prevent users from clicking workflows within insights that they do not have access to ([#34362](https://github.com/n8n-io/n8n/issues/34362)) ([e68fb3a](https://github.com/n8n-io/n8n/commit/e68fb3af52cba91f2a93979893c76afd3c9ac10d))
* **editor:** Prevent workflow actions menu from being cut off ([#34278](https://github.com/n8n-io/n8n/issues/34278)) ([8ba28dc](https://github.com/n8n-io/n8n/commit/8ba28dc7a9f397c8ca24c11ebb3b4257588d02e9))
* **editor:** Reconcile stale Instance AI run state on reload and stop ([#34432](https://github.com/n8n-io/n8n/issues/34432)) ([8879b87](https://github.com/n8n-io/n8n/commit/8879b879804fe0a187ea88777c37b9be5779a523))
* **editor:** Refresh editor checksum on workflow activation while editing ([#34095](https://github.com/n8n-io/n8n/issues/34095)) ([7ebeb1e](https://github.com/n8n-io/n8n/commit/7ebeb1e194aa74b6c6e536251a5b0bb543ea5274))
* **editor:** Refresh editor checksum on workflow deactivation while editing ([#34315](https://github.com/n8n-io/n8n/issues/34315)) ([c83eab0](https://github.com/n8n-io/n8n/commit/c83eab047c7256dfec8797e3db22f9b5dd5dc04e))
* **editor:** Remove extra top spacing in sticky note markdown ([#34116](https://github.com/n8n-io/n8n/issues/34116)) ([114c74d](https://github.com/n8n-io/n8n/commit/114c74d6bfd34eb4384720d7a313ecce662d2032))
* **editor:** Rename agent tasks to schedules ([#34326](https://github.com/n8n-io/n8n/issues/34326)) ([1ab30cb](https://github.com/n8n-io/n8n/commit/1ab30cb6097e132c9c7030197f94b14eb195b583))
* **editor:** Restore hosted chat Markdown styles ([#34176](https://github.com/n8n-io/n8n/issues/34176)) ([d6b9234](https://github.com/n8n-io/n8n/commit/d6b92343e1ec43431a3dafa18949043b8951bee2))
* **editor:** Restore previous route when closing session trace ([#34423](https://github.com/n8n-io/n8n/issues/34423)) ([e8922cb](https://github.com/n8n-io/n8n/commit/e8922cbadfdb5a5df40afffa41b91820845dab0c))
* **editor:** Restrict setup credential dropdown to pinned type ([#34252](https://github.com/n8n-io/n8n/issues/34252)) ([454e0d3](https://github.com/n8n-io/n8n/commit/454e0d3edd310f600523ce0f98e31ef3f16ff4d3))
* **editor:** Show only the latest node as executing during manual executions ([#34182](https://github.com/n8n-io/n8n/issues/34182)) ([6faca89](https://github.com/n8n-io/n8n/commit/6faca890d2e13a331f19931f3e557481524f9cd2))
* **editor:** Trigger options menu from node details header add button ([#34212](https://github.com/n8n-io/n8n/issues/34212)) ([3b6af51](https://github.com/n8n-io/n8n/commit/3b6af5199ab5a4526a86a40fcfafb4f20874a69c))
* **editor:** Wrap long keyboard shortcut tooltip labels within max-width ([#34135](https://github.com/n8n-io/n8n/issues/34135)) ([eb6a4a1](https://github.com/n8n-io/n8n/commit/eb6a4a1714201258146f2bf7ea9090b925b2365c))
* Even out workflow metadata divider spacing ([#34132](https://github.com/n8n-io/n8n/issues/34132)) ([90f25e2](https://github.com/n8n-io/n8n/commit/90f25e221d198179ec981aa7bca33d71f63af251))
* Extend orphan message cleanup to handle trailing orphans from memory trimming ([#34385](https://github.com/n8n-io/n8n/issues/34385)) ([96264a0](https://github.com/n8n-io/n8n/commit/96264a063bea5efee7caebb6460e44942d0eecc7))
* Gate agent knowledge base table on AI Assistant proxy availability ([#34366](https://github.com/n8n-io/n8n/issues/34366)) ([77880a3](https://github.com/n8n-io/n8n/commit/77880a3106d9bb0c997c887b4f8a72615fb63dce))
* **Gmail Node:** Handle multi-address Reply-To in the reply operation ([#34312](https://github.com/n8n-io/n8n/issues/34312)) ([0b8ad18](https://github.com/n8n-io/n8n/commit/0b8ad187578ecf59efea96a8b97102190aaeb194))
* **Google Workspace Admin Node:** Not able to reactivate the user ([#33937](https://github.com/n8n-io/n8n/issues/33937)) ([f43d723](https://github.com/n8n-io/n8n/commit/f43d723571afad77b79dddb8b520135497d6f3bb))
* **HTTP Request Node:** Sign non-standard AWS endpoint hosts with the correct region and service ([#34081](https://github.com/n8n-io/n8n/issues/34081)) ([0e8420b](https://github.com/n8n-io/n8n/commit/0e8420bbff4c386d19fa2587512131ae2dae4c38))
* **Microsoft Excel Node:** Resolve service principal target per input item ([#34112](https://github.com/n8n-io/n8n/issues/34112)) ([afc8a87](https://github.com/n8n-io/n8n/commit/afc8a87a604d221eb9b56e09c30b6f3fc5a47bda))
* **Microsoft OneDrive Node:** Resolve service principal target per input item ([#34111](https://github.com/n8n-io/n8n/issues/34111)) ([578545c](https://github.com/n8n-io/n8n/commit/578545c1e9a956199e59a2ac5f40c4e11236f51a))
* **Microsoft Outlook Node:** Resolve service principal mailbox per input item ([#34110](https://github.com/n8n-io/n8n/issues/34110)) ([831e054](https://github.com/n8n-io/n8n/commit/831e054e6e04fdbf0c0401aacdc3700727fb7624))
* **Microsoft Teams Node:** Validate Graph path IDs under all credential types ([#34065](https://github.com/n8n-io/n8n/issues/34065)) ([e43a162](https://github.com/n8n-io/n8n/commit/e43a162e4df8b80d79e05183f359b0b80a5b494c))
* **Microsoft To Do Node:** Resolve service principal target per input item ([#34109](https://github.com/n8n-io/n8n/issues/34109)) ([9b2479c](https://github.com/n8n-io/n8n/commit/9b2479c538ed17194978a872c009e7c78c064836))
* **Postgres Node:** Return DATE and date/time array columns as strings (v2.7) ([#34050](https://github.com/n8n-io/n8n/issues/34050)) ([17eb819](https://github.com/n8n-io/n8n/commit/17eb819517e0f41c506677fc5d56097795e16623))
* Provide provider-accurate response shapes for evals ([#34418](https://github.com/n8n-io/n8n/issues/34418)) ([1b173c7](https://github.com/n8n-io/n8n/commit/1b173c791ab76863cb3380d33fc6f3ae2c56570f))
* **QuickBooks Node:** Initialize headers object in quickBooksApiRequest ([#34291](https://github.com/n8n-io/n8n/issues/34291)) ([83dd194](https://github.com/n8n-io/n8n/commit/83dd194a893dce656a8044cf716c4191e04af2f2))
* Report an unverifiable unit as notVerified, not a silent pass ([#34421](https://github.com/n8n-io/n8n/issues/34421)) ([7d6fd4c](https://github.com/n8n-io/n8n/commit/7d6fd4ca9c6f55b7cef026d4a42e4ae9c115e153))
* Resolve modules on windows ([#34167](https://github.com/n8n-io/n8n/issues/34167)) ([9f0a6fa](https://github.com/n8n-io/n8n/commit/9f0a6fa68b48de0d013e49cf8f1236b49e6d7fdb))
* **Salesforce Node:** Pass ParentId when creating or updating a Case ([#33775](https://github.com/n8n-io/n8n/issues/33775)) ([fffee46](https://github.com/n8n-io/n8n/commit/fffee465a4c8a68432bc8ec1af06bce945fba719))
* Serialize date output in FTP, Set, IMAP and Unleashed nodes ([#34205](https://github.com/n8n-io/n8n/issues/34205)) ([391deb9](https://github.com/n8n-io/n8n/commit/391deb91af0cc31d41204d633df0e921193669e4))
* **Split Out Node:** Properly handle if "Fields to split out" is not a string ([#34148](https://github.com/n8n-io/n8n/issues/34148)) ([7998940](https://github.com/n8n-io/n8n/commit/79989407ffee587f6734ea6736269fc21ca8cac6))
### Features
* Add `showOnDeployment` option, show warning for read file node on cloud ([#34417](https://github.com/n8n-io/n8n/issues/34417)) ([f470230](https://github.com/n8n-io/n8n/commit/f47023066ef0f60f21b7bfa9c3c3295e912bd070))
* Add typed seed data tables with rows on execution scenarios ([#34420](https://github.com/n8n-io/n8n/issues/34420)) ([02af123](https://github.com/n8n-io/n8n/commit/02af1235747cdbc003fca0a199e9e0bdbc55affc))
* Adding agents tracing environment variable ([#34401](https://github.com/n8n-io/n8n/issues/34401)) ([b42aeee](https://github.com/n8n-io/n8n/commit/b42aeee50f522821ddcdf7d4de1bd789b8173e49))
* **ai-builder:** Allow AIA agent builder to publish and unpublish first-class agents ([#34368](https://github.com/n8n-io/n8n/issues/34368)) ([84ee063](https://github.com/n8n-io/n8n/commit/84ee0632a39601e010bdebc87d796dcd046f7937))
* **ai-builder:** Help AIA remove / adjust agent channels (sp Slack) via chat ([#34241](https://github.com/n8n-io/n8n/issues/34241)) ([f851863](https://github.com/n8n-io/n8n/commit/f851863090395b99345f31c89273015a824a678e))
* **ai-builder:** Refresh Instance AI agent artifact UI on channel setup success ([#34465](https://github.com/n8n-io/n8n/issues/34465)) ([2955d75](https://github.com/n8n-io/n8n/commit/2955d75b30e5a8be9f847ea257a0516585e696d3))
* **ai-builder:** Send agent preview chat context to AIA chat ([#34308](https://github.com/n8n-io/n8n/issues/34308)) ([9fad2ba](https://github.com/n8n-io/n8n/commit/9fad2ba510d3d14c209b35b8f79071f92c33cd2d))
* **API:** Add endpoint to retrieve SAML SSO configuration ([#34168](https://github.com/n8n-io/n8n/issues/34168)) ([e76b345](https://github.com/n8n-io/n8n/commit/e76b345fd85b87d6aa3edd3a393d6c0a1ad7234f))
* **API:** Add endpoint to set the SAML SSO configuration ([#34224](https://github.com/n8n-io/n8n/issues/34224)) ([cf8337a](https://github.com/n8n-io/n8n/commit/cf8337aeb12bab92a5ca8d23a79092968eca3d2e))
* **API:** Add public API endpoints for log streaming destinations ([#34251](https://github.com/n8n-io/n8n/issues/34251)) ([4a651dd](https://github.com/n8n-io/n8n/commit/4a651dd1aab62da3d0886140d7c31104eaf9b820))
* **API:** Add public API endpoints to trigger and cancel evaluation test runs ([#33979](https://github.com/n8n-io/n8n/issues/33979)) ([18b34ca](https://github.com/n8n-io/n8n/commit/18b34cab778f182e6081cf2c7d26789d276b2575))
* **API:** Allow creating a folder in the calling user's personal project ([#34091](https://github.com/n8n-io/n8n/issues/34091)) ([571e642](https://github.com/n8n-io/n8n/commit/571e6424edf4fc84ae753da7f77e8e4433f90396))
* **API:** Support placing workflows in folders via parentFolderId ([#32696](https://github.com/n8n-io/n8n/issues/32696)) ([a844d03](https://github.com/n8n-io/n8n/commit/a844d0336e5df55a6996a20e3d6112218d81c65c))
* **AWS Bedrock Chat Model Node:** Add Timeout option ([#34072](https://github.com/n8n-io/n8n/issues/34072)) ([a4738ea](https://github.com/n8n-io/n8n/commit/a4738eaf49dd54436a4340b10697fb5c271618c0))
* **core:** Add per-workflow execution data write bytes metric ([#34425](https://github.com/n8n-io/n8n/issues/34425)) ([f7496a5](https://github.com/n8n-io/n8n/commit/f7496a5aae1aa42f7d884dbbe554d417a09aa629))
* **core:** Add tracing, credit metering, and telemetry for the builder sub-agent ([#34151](https://github.com/n8n-io/n8n/issues/34151)) ([be35343](https://github.com/n8n-io/n8n/commit/be353431da9493a24495d84ebcba481a2d3dfa1f))
* **core:** Add variable bundling to package export ([#34040](https://github.com/n8n-io/n8n/issues/34040)) ([b637582](https://github.com/n8n-io/n8n/commit/b63758247ebd1a45d890370a21d70d4ab7a99349))
* **core:** Add workflow requirements to package exports ([#34217](https://github.com/n8n-io/n8n/issues/34217)) ([581e490](https://github.com/n8n-io/n8n/commit/581e4907293426f948f2840f43dd13604f1b5324))
* **core:** Adopt "n8n credits" wording and default to it in Instance AI ([#34426](https://github.com/n8n-io/n8n/issues/34426)) ([263ec69](https://github.com/n8n-io/n8n/commit/263ec699d6834a478673b4f1e931fc118be95b44))
* **core:** Enable n8n Connect usage in n8n MCP ([#33723](https://github.com/n8n-io/n8n/issues/33723)) ([4e4283b](https://github.com/n8n-io/n8n/commit/4e4283bf628a92ecd3030ca82808c21145b13e74))
* **core:** Enable prompt caching for the agent-builder sub-agent ([#34352](https://github.com/n8n-io/n8n/issues/34352)) ([a9357ef](https://github.com/n8n-io/n8n/commit/a9357ef5641222e561127ed60b7a059b1e72ea50))
* **core:** Include error workflows as export dependencies ([#34350](https://github.com/n8n-io/n8n/issues/34350)) ([7d23168](https://github.com/n8n-io/n8n/commit/7d231684d14233bcaa47cfb91d2cc3d9aa0a7f2e))
* **core:** Prefer MCP servers over node tools when available ([#34458](https://github.com/n8n-io/n8n/issues/34458)) ([078ee55](https://github.com/n8n-io/n8n/commit/078ee55890eddcb691fd9e8b6794b43e77ca3977))
* **core:** Support agent preview handoff in Instance AI ([#34171](https://github.com/n8n-io/n8n/issues/34171)) ([5a3394a](https://github.com/n8n-io/n8n/commit/5a3394aa34df80a2c90c5937a65f3bb0643ac323))
* **core:** Unify output schema mock generation and verify AI Assistant workflows with any trigger type ([#33896](https://github.com/n8n-io/n8n/issues/33896)) ([d33c282](https://github.com/n8n-io/n8n/commit/d33c282b951e5b8a1ae8017562945654449209cb))
* **editor:** Add descriptions to canvas groups ([#34219](https://github.com/n8n-io/n8n/issues/34219)) ([8477e58](https://github.com/n8n-io/n8n/commit/8477e5896ab805e6ee63f50be8de410f834d1c9f))
* **editor:** Add Mine/All tabs, search and filters to MCP connected clients ([#33857](https://github.com/n8n-io/n8n/issues/33857)) ([a2c19e4](https://github.com/n8n-io/n8n/commit/a2c19e46974990c39007ffe64ab2ae908fe2f1b9))
* **editor:** Add new Tags Input component to @n8n/design-system ([#34075](https://github.com/n8n-io/n8n/issues/34075)) ([bac57c4](https://github.com/n8n-io/n8n/commit/bac57c4ec11b4b11490cf5488181ed2b8e892c5a))
* **editor:** Add per-case compare tabs to eval collection compare view ([#33880](https://github.com/n8n-io/n8n/issues/33880)) ([dde77cb](https://github.com/n8n-io/n8n/commit/dde77cb7d39943ef6e6ae8e468c5ab772bdadef8))
* **editor:** Add scope selection to MCP OAuth consent screen ([#33710](https://github.com/n8n-io/n8n/issues/33710)) ([c3ca9a3](https://github.com/n8n-io/n8n/commit/c3ca9a36dafe3c7da084da5ceb325dbe9605dcb2))
* **editor:** Add sticky support for canvas groups ([#34317](https://github.com/n8n-io/n8n/issues/34317)) ([0fb07ca](https://github.com/n8n-io/n8n/commit/0fb07ca6ad9aaef5fe2366e96c69b5a52b7e8549))
* **editor:** Collapse AI Assistant thinking traces into thinking blocks ([#34274](https://github.com/n8n-io/n8n/issues/34274)) ([9744625](https://github.com/n8n-io/n8n/commit/97446258af4aaa91da6323d7599fb08a02ccef43))
* **editor:** Improve sub workflow extraction ([#34169](https://github.com/n8n-io/n8n/issues/34169)) ([318925a](https://github.com/n8n-io/n8n/commit/318925a4215e1eb431daf43f551a649dc4695b7f))
* **editor:** Rename N8nActionBox to N8nEmptyState and add icon-cards variant ([#34407](https://github.com/n8n-io/n8n/issues/34407)) ([a6b5462](https://github.com/n8n-io/n8n/commit/a6b54629c5f89b4c222fc59f0e679055f6a733db))
* **editor:** Save canvas group description pinned state in local storage ([#34220](https://github.com/n8n-io/n8n/issues/34220)) ([ecff317](https://github.com/n8n-io/n8n/commit/ecff317c577e46f42feb24e7c7413f4762041284))
* **editor:** Show access and client details in the connected MCP clients list ([#33714](https://github.com/n8n-io/n8n/issues/33714)) ([0ca24ba](https://github.com/n8n-io/n8n/commit/0ca24ba99655b0b0220c1f99a3641b14862b1593))
* **editor:** Show per-scope tool details on the MCP consent screen ([#33783](https://github.com/n8n-io/n8n/issues/33783)) ([cc515a7](https://github.com/n8n-io/n8n/commit/cc515a77c1d58f53b04587ce264899ad0a881a90))
* **Gmail Node:** Add advanced HITL configuration for Send and Wait ([#34255](https://github.com/n8n-io/n8n/issues/34255)) ([6194110](https://github.com/n8n-io/n8n/commit/61941103e6fb3ba7186bc9666145fbf3e55e0054))
* **Grist Node:** Use a single Grist URL field in the credential ([#34190](https://github.com/n8n-io/n8n/issues/34190)) ([d6d7d93](https://github.com/n8n-io/n8n/commit/d6d7d93df34075b4d55bf509855bd2411eda4eec))
* **Mailgun Node:** Add reply-to, custom headers, and tags ([#28558](https://github.com/n8n-io/n8n/issues/28558)) ([b9199e5](https://github.com/n8n-io/n8n/commit/b9199e5a964c0774bb9a5ad8c876ca54ce413c61))
* **Slack Node:** Add advanced HITL configuration for one-tap approval ([#34123](https://github.com/n8n-io/n8n/issues/34123)) ([d30e7b0](https://github.com/n8n-io/n8n/commit/d30e7b042c8ecb18aead1cdecd22145f382facbd))
* **Telegram Node:** Add advanced HITL configuration for one-tap in-chat approval ([#34009](https://github.com/n8n-io/n8n/issues/34009)) ([6db46bc](https://github.com/n8n-io/n8n/commit/6db46bc381d11f03d6ba24d8a66e8620efe92530))
* Validate agent configuration before publishing ([#34452](https://github.com/n8n-io/n8n/issues/34452)) ([5cb674e](https://github.com/n8n-io/n8n/commit/5cb674ed370561d5418dd02de0d4c1d58d11cce1))
# [2.31.0](https://github.com/n8n-io/n8n/compare/n8n@2.30.0...n8n@2.31.0) (2026-07-14)

View File

@ -442,29 +442,74 @@ The full development mode (`pnpm dev`) runs multiple processes in parallel:
### Community PR Guidelines
#### **1. Change Request/Comment**
We read and review every pull request by hand. These guidelines keep that sustainable, and they help you avoid building something we cannot accept. The fastest route to a merge is to agree on the change with us before you write code.
Our golden rule: a contribution should be worth more to the project than the time it takes us to review it.
#### **1. Start With an Issue or Forum Topic**
- **Ask before you start:**
- If you want to work on an existing issue, comment to ask first and wait for a team member to respond before you pick it up. This avoids two people, including us, building the same fix at the same time.
- **Bug fixes:**
- An issue must already exist that describes the problem and gives clear steps to reproduce it. If there is no issue, [open one](https://github.com/n8n-io/n8n/issues/new/choose) first.
- Bug-fix PRs with no linked issue will be returned so we can confirm and track the problem.
- **Features and enhancements:**
- Open a topic on the [n8n community forum](https://community.n8n.io/) first so we can discuss it before you build. This protects your time: we will tell you early whether we will accept the idea, and we will guide you on how we would want it handled.
- Feature PRs that arrive with no prior discussion will be closed with a pointer to the forum.
- **Refactoring or opinion-based changes:**
- Open an issue or forum topic first with a detailed rationale: what you want to change, why, and the concrete benefit. We do not merge "I prefer it this way" changes without that reasoning.
- **Core changes:**
- Contact n8n before starting any change under [/packages/core](/packages/core), as noted in the directory structure.
- **Identity, access, and credentials:**
- The n8n team handles changes to identity and access management and to the credentials system. These control how users sign in, what they reach, and how credentials get stored and used. A mistake here risks exposing sensitive data or locking users out, so we keep these in-house. If you spot a bug or have an idea, open an issue or forum topic to flag it and we will take it from there.
- **High-impact nodes:**
- The n8n team handles changes to the most widely used nodes, including HTTP Request, Code, Webhook Trigger, Form Trigger, and Schedule. A small change to one of these can break workflows for a large number of users, so we keep these in-house. If you spot a bug or have an idea for one of them, open an issue or forum topic to flag it and we will take it from there.
#### **2. Change Request/Comment**
Please address the requested changes or provide feedback within 14 days. If there is no response or updates to the pull request during this time, it will be automatically closed. The PR can be reopened once the requested changes are applied.
#### **2. General Requirements**
#### **3. General Requirements**
- **Describe Your Change:**
- Every PR needs a clear description of what you changed, why, and why you took this approach over the alternatives. Link the issue or forum topic. Write the description in your own words. A PR with no real description will be closed.
- Where possible try to include a short video or screenshots. This is useful if you are working on a feature or updating a node.
- **Follow the Style Guide:**
- Ensure your code adheres to n8n's coding standards and conventions (e.g., formatting, naming, indentation). Use linting tools where applicable.
- **TypeScript Compliance:**
- Do not use `ts-ignore` .
- Do not use `ts-ignore` or `ts-expect-error` to silence the compiler.
- Ensure code adheres to TypeScript rules.
- **Avoid Repetitive Code:**
- Reuse existing components, parameters, and logic wherever possible instead of redefining or duplicating them.
- Before writing a constant or helper, check whether one already exists. For nodes, throw `NodeOperationError`/`NodeApiError` (from `n8n-workflow`) rather than raw errors, and use `jsonParse` (from `n8n-workflow`) instead of bare `JSON.parse`. More generally, `@n8n/constants` and `@n8n/utils` hold many reusable helpers — e.g. `Time` from `@n8n/constants` for time-unit math (`5 * Time.minutes.toMilliseconds` instead of `5 * 60 * 1000`).
- For nodes: Use the same parameter across multiple operations rather than defining a new parameter for each operation (if applicable).
- **Testing Requirements:**
- PRs **must include tests**:
- Unit tests
- Integration tests (if applicable)
- Workflow tests for nodes (example [here](https://github.com/n8n-io/n8n/tree/master/packages/nodes-base/nodes/Switch/V3/test))
- UI tests (if applicable)
- Detailed steps under the "How to test" section of the PR template to cover how to manually test the feature or bug fix.
- For a **bug fix**, include at least one regression test that **fails against the latest `master`** without your change and passes with it. Tell us in the description how to see it fail, so we can verify the fix actually fixes something.
- **Typos:**
- Use a spell-checking tool, such as [**Code Spell Checker**](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker), to avoid typos.
- **Verify that your PR contains only your intended changes:**
- Before opening or requesting review, check the *Files Changed* tab and confirm that all modifications are related to your fix/feature. If you see unrelated file changes, commits from other authors, or a large number of unexpected commits, rebase or recreate your branch against the current `master` branch and clean up the history before submitting.
#### **3. PR Specific Requirements**
#### **4. Using AI Tools**
We use AI tools ourselves and we welcome AI-assisted contributions. The problem is not the tool. The problem is code the author cannot stand behind.
- **Understand and own your code:**
- You must understand every line you submit and be able to explain what it does and how it fits the rest of the system, without the AI. If you cannot, do not open the PR yet.
- **Write the description in your own words:**
- Write your PR description, issue, and forum posts in your own words. Do not paste raw model output.
- **Same gates apply:**
- AI-assisted features and refactors still need an accepted issue or forum topic first, the same as any other change.
- **Disclosure:**
- We encourage you to note in the PR if AI tools did a meaningful part of the work, and which tools. It helps us calibrate review and it is not held against you.
#### **5. PR Specific Requirements**
- **Small PRs Only:**
- Focus on a single feature or fix per PR.
@ -472,14 +517,24 @@ Please address the requested changes or provide feedback within 14 days. If ther
- Follow [n8n's PR Title Conventions](https://github.com/n8n-io/n8n/blob/master/.github/pull_request_title_conventions.md#L36).
- **New Nodes:**
- PRs that introduce new nodes will be **auto-closed** unless they are explicitly requested by the n8n team and aligned with an agreed project scope. However, you can still explore [building your own nodes](https://docs.n8n.io/integrations/creating-nodes/overview/), as n8n offers the flexibility to create your own custom nodes.
- **Existing Nodes:**
- If you are making changes to existing nodes that changes functionality, output data or anything that could cause existing workflows to change refer to our [node version guidelines](https://docs.n8n.io/connect/create-nodes/build-your-node/reference/versioning) to minimise impact.
- **Typo-Only PRs:**
- Typos are not sufficient justification for a PR and will be rejected.
- Typos are not sufficient justification for a PR and will be rejected. Fold typo fixes into a larger, related change.
#### **4. Workflow Summary for Non-Compliant PRs**
#### **6. Workflow Summary for Non-Compliant PRs**
- **No Linked Issue or Discussion:** Bug-fix PRs with no issue, and feature PRs with no forum topic, will be returned or closed per section 1.
- **No Tests:** If tests are not provided, the PR will be auto-closed after **14 days**.
- **Non-Small PRs:** Large or multifaceted PRs will be returned for segmentation.
- **Keep PRs small and focused.** Each PR should add no more than 1000 lines and cover one logical change. Larger or multifaceted PRs will be returned for segmentation.
- **New Nodes/Typo PRs:** Automatically rejected if not aligned with project scope or guidelines.
- **Low-Value or Automated PRs:** We close these, and may block accounts that repeat them. This covers:
- Whitespace, formatting, or reordering changes with no functional reason.
- Mass find-and-replace or renames submitted with no rationale.
- Dependency bumps with no explanation of why the bump is needed.
- README badges, comment tweaks, or restating the obvious.
- PRs whose main purpose is to earn a contribution credit, a mention, or event points. Hacktoberfest and similar events do not change the quality bar.
- Bulk or scripted submissions across many files or repositories.
---

3
docker/get-n8n.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
echo "Hello n8n!"

View File

@ -1,7 +1,7 @@
# Pinned to a multi-arch index digest (linux/amd64 + linux/arm64) for reproducible builds.
# The tag is the human-readable version; Docker resolves by the digest. Bump the tag and
# digest together when updating the base image.
FROM dhi.io/node:24.16.0-alpine3.24-dev@sha256:0fda302d7d6f2436b27edc9392bd6a4f8ae9ce86e9837c2b8676abdf26a4a7fb
FROM dhi.io/node:24.18.0-alpine3.24-dev@sha256:d508453231109fbe96a39045ecc794ac18f8b99ca218a0806833d65bb2750e03
# Install all dependencies in a single layer to minimize image size
RUN apk add --no-cache busybox-binsh && \

View File

@ -1,11 +1,11 @@
ARG NODE_VERSION=24.16.0
ARG NODE_VERSION=24.18.0
ARG N8N_VERSION=snapshot
# Builder stage exists because the runtime base image has no toolchain.
# Pinned to multi-arch index digest (linux/amd64 + linux/arm64) for reproducible builds.
# Bump the digest together with the tag when updating the base image.
# Digest pins to node:24.16.0-alpine3.24 (Node 24.16.0, Alpine 3.24).
FROM node:24.16.0-alpine3.24@sha256:21f403ab171f2dc89bad4dd69d7721bfd15f084ccb46cdd225f31f2bc59b5c9a AS builder
# Digest pins to node:24.18.0-alpine3.24 (Node 24.18.0, Alpine 3.24).
FROM node:24.18.0-alpine3.24@sha256:a0b9bf06e4e6193cf7a0f58816cc935ff8c2a908f81e6f1a95432d679c54fbfd AS builder
COPY ./compiled /usr/local/lib/node_modules/n8n
RUN apk add --no-cache python3 make g++ && \
cd /usr/local/lib/node_modules/n8n && \
@ -28,8 +28,8 @@ RUN apk add --no-cache python3 make g++ && \
# base change, so a base rebuild does not reach this image until the digest is
# manually re-pinned here. Bump the digest together with the tag whenever the base
# image is intentionally updated.
# Digest pins to n8nio/base:24.16.0 (Node 24.16.0, Alpine 3.24).
FROM n8nio/base:24.16.0@sha256:25e5671a1b3e11cd576bc9a4409ebf962baea993a4bc7414168dfd357e85a7e8
# Digest pins to n8nio/base:24.18.0 (Node 24.18.0, Alpine 3.24).
FROM n8nio/base:24.18.0@sha256:29d9c11f55f02442276512592b439ebb2a1d1043c1339ad5cea4e56862520d22
ARG N8N_VERSION
ARG N8N_RELEASE_TYPE=dev

View File

@ -10,14 +10,18 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| ---- | ------- | ------- | ---- |
| [public.agent_chat_subscriptions](public.agent_chat_subscriptions.md) | 6 | | BASE TABLE |
| [public.agent_checkpoints](public.agent_checkpoints.md) | 6 | | BASE TABLE |
| [public.agent_execution](public.agent_execution.md) | 18 | | BASE TABLE |
| [public.agent_eval_dataset](public.agent_eval_dataset.md) | 10 | | BASE TABLE |
| [public.agent_eval_rating](public.agent_eval_rating.md) | 8 | | BASE TABLE |
| [public.agent_eval_result](public.agent_eval_result.md) | 15 | | BASE TABLE |
| [public.agent_eval_run](public.agent_eval_run.md) | 14 | | BASE TABLE |
| [public.agent_execution](public.agent_execution.md) | 19 | | BASE TABLE |
| [public.agent_execution_threads](public.agent_execution_threads.md) | 17 | | BASE TABLE |
| [public.agent_files](public.agent_files.md) | 8 | | BASE TABLE |
| [public.agent_history](public.agent_history.md) | 9 | | BASE TABLE |
| [public.agent_task_definition](public.agent_task_definition.md) | 7 | | BASE TABLE |
| [public.agent_task_run_lock](public.agent_task_run_lock.md) | 6 | | BASE TABLE |
| [public.agent_task_snapshot](public.agent_task_snapshot.md) | 8 | | BASE TABLE |
| [public.agents](public.agents.md) | 11 | | BASE TABLE |
| [public.agents](public.agents.md) | 12 | | BASE TABLE |
| [public.agents_memory_entries](public.agents_memory_entries.md) | 13 | | BASE TABLE |
| [public.agents_memory_entry_cursors](public.agents_memory_entry_cursors.md) | 6 | | BASE TABLE |
| [public.agents_memory_entry_locks](public.agents_memory_entry_locks.md) | 6 | | BASE TABLE |
@ -40,7 +44,7 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.chat_hub_sessions](public.chat_hub_sessions.md) | 13 | | BASE TABLE |
| [public.chat_hub_tools](public.chat_hub_tools.md) | 9 | | BASE TABLE |
| [public.credential_dependency](public.credential_dependency.md) | 5 | | BASE TABLE |
| [public.credentials_entity](public.credentials_entity.md) | 11 | | BASE TABLE |
| [public.credentials_entity](public.credentials_entity.md) | 12 | | BASE TABLE |
| [public.data_table](public.data_table.md) | 5 | | BASE TABLE |
| [public.data_table_column](public.data_table_column.md) | 7 | | BASE TABLE |
| [public.deployment_key](public.deployment_key.md) | 7 | | BASE TABLE |
@ -62,7 +66,8 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.insights_raw](public.insights_raw.md) | 5 | | BASE TABLE |
| [public.installed_nodes](public.installed_nodes.md) | 4 | | BASE TABLE |
| [public.installed_packages](public.installed_packages.md) | 6 | | BASE TABLE |
| [public.instance_ai_checkpoints](public.instance_ai_checkpoints.md) | 8 | | BASE TABLE |
| [public.instance_ai_checkpoints](public.instance_ai_checkpoints.md) | 9 | | BASE TABLE |
| [public.instance_ai_events](public.instance_ai_events.md) | 7 | | BASE TABLE |
| [public.instance_ai_iteration_logs](public.instance_ai_iteration_logs.md) | 6 | | BASE TABLE |
| [public.instance_ai_mcp_registry_connections](public.instance_ai_mcp_registry_connections.md) | 7 | | BASE TABLE |
| [public.instance_ai_messages](public.instance_ai_messages.md) | 8 | | BASE TABLE |
@ -76,6 +81,7 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.instance_ai_thread_grants](public.instance_ai_thread_grants.md) | 5 | | BASE TABLE |
| [public.instance_ai_threads](public.instance_ai_threads.md) | 7 | | BASE TABLE |
| [public.instance_ai_workflow_snapshots](public.instance_ai_workflow_snapshots.md) | 7 | | BASE TABLE |
| [public.instance_credential_assignment](public.instance_credential_assignment.md) | 4 | | BASE TABLE |
| [public.instance_version_history](public.instance_version_history.md) | 5 | | BASE TABLE |
| [public.invalid_auth_token](public.invalid_auth_token.md) | 2 | | BASE TABLE |
| [public.mcp_registry_server](public.mcp_registry_server.md) | 7 | | BASE TABLE |
@ -83,7 +89,7 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.oauth_authorization_codes](public.oauth_authorization_codes.md) | 13 | | BASE TABLE |
| [public.oauth_clients](public.oauth_clients.md) | 9 | | BASE TABLE |
| [public.oauth_refresh_tokens](public.oauth_refresh_tokens.md) | 7 | | BASE TABLE |
| [public.oauth_user_consents](public.oauth_user_consents.md) | 4 | | BASE TABLE |
| [public.oauth_user_consents](public.oauth_user_consents.md) | 5 | | BASE TABLE |
| [public.processed_data](public.processed_data.md) | 5 | | BASE TABLE |
| [public.project](public.project.md) | 9 | | BASE TABLE |
| [public.project_relation](public.project_relation.md) | 5 | | BASE TABLE |
@ -93,7 +99,7 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.role_mapping_rule_project](public.role_mapping_rule_project.md) | 2 | | BASE TABLE |
| [public.role_scope](public.role_scope.md) | 2 | | BASE TABLE |
| [public.scheduled_job](public.scheduled_job.md) | 19 | | BASE TABLE |
| [public.scheduled_task](public.scheduled_task.md) | 16 | | BASE TABLE |
| [public.scheduled_task](public.scheduled_task.md) | 17 | | BASE TABLE |
| [public.scope](public.scope.md) | 3 | | BASE TABLE |
| [public.secrets_provider_connection](public.secrets_provider_connection.md) | 7 | | BASE TABLE |
| [public.settings](public.settings.md) | 3 | | BASE TABLE |
@ -115,9 +121,13 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand.
| [public.workflow_entity](public.workflow_entity.md) | 20 | | BASE TABLE |
| [public.workflow_history](public.workflow_history.md) | 11 | | BASE TABLE |
| [public.workflow_publication_outbox](public.workflow_publication_outbox.md) | 7 | | BASE TABLE |
| [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) | 7 | | BASE TABLE |
| [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) | 8 | | BASE TABLE |
| [public.workflow_publish_history](public.workflow_publish_history.md) | 6 | | BASE TABLE |
| [public.workflow_published_version](public.workflow_published_version.md) | 4 | | BASE TABLE |
| [public.workflow_review_request](public.workflow_review_request.md) | 12 | | BASE TABLE |
| [public.workflow_review_request_authors](public.workflow_review_request_authors.md) | 2 | | BASE TABLE |
| [public.workflow_review_request_reviewers](public.workflow_review_request_reviewers.md) | 2 | | BASE TABLE |
| [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) | 4 | | BASE TABLE |
| [public.workflow_statistics](public.workflow_statistics.md) | 7 | | BASE TABLE |
| [public.workflow_statistics_delta](public.workflow_statistics_delta.md) | 6 | | BASE TABLE |
| [public.workflows_tags](public.workflows_tags.md) | 2 | | BASE TABLE |
@ -145,6 +155,13 @@ erDiagram
"public.agent_chat_subscriptions" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_checkpoints" }o--o| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_eval_dataset" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_dataset" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_eval_rating" }o--o| "public.user" : "FOREIGN KEY (#quot;ratedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_rating" }o--|| "public.agent_eval_result" : "FOREIGN KEY (#quot;resultId#quot;) REFERENCES agent_eval_result(id) ON DELETE CASCADE"
"public.agent_eval_result" }o--|| "public.agent_eval_run" : "FOREIGN KEY (#quot;runId#quot;) REFERENCES agent_eval_run(id) ON DELETE CASCADE"
"public.agent_eval_run" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_run" }o--|| "public.agent_eval_dataset" : "FOREIGN KEY (#quot;datasetId#quot;) REFERENCES agent_eval_dataset(id) ON DELETE CASCADE"
"public.agent_execution" }o--|| "public.agent_execution_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES agent_execution_threads(id) ON DELETE CASCADE"
"public.agent_execution_threads" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.agent_execution_threads" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
@ -227,6 +244,7 @@ erDiagram
"public.insights_raw" }o--|| "public.insights_metadata" : "FOREIGN KEY (#quot;metaId#quot;) REFERENCES insights_metadata(#quot;metaId#quot;) ON DELETE CASCADE"
"public.installed_nodes" }o--|| "public.installed_packages" : "FOREIGN KEY (package) REFERENCES installed_packages(#quot;packageName#quot;) ON UPDATE CASCADE ON DELETE CASCADE"
"public.instance_ai_checkpoints" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_events" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_iteration_logs" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_mcp_registry_connections" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.instance_ai_mcp_registry_connections" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE CASCADE"
@ -245,6 +263,7 @@ erDiagram
"public.instance_ai_thread_grants" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.instance_ai_thread_grants" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_threads" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.instance_credential_assignment" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE RESTRICT"
"public.oauth_access_tokens" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.oauth_access_tokens" }o--|| "public.oauth_clients" : "FOREIGN KEY (#quot;clientId#quot;) REFERENCES oauth_clients(id) ON DELETE CASCADE"
"public.oauth_authorization_codes" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
@ -295,6 +314,17 @@ erDiagram
"public.workflow_publish_history" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;versionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.workflow_published_version" |o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE RESTRICT"
"public.workflow_published_version" }o--|| "public.workflow_history" : "FOREIGN KEY (#quot;publishedVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE RESTRICT"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;updatedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;closedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.workflow_review_request_authors" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_review_request_authors" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_workflow" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.workflow_review_request_workflow" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflows_tags" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflows_tags" }o--|| "public.tag_entity" : "FOREIGN KEY (#quot;tagId#quot;) REFERENCES tag_entity(id) ON DELETE CASCADE"
@ -314,6 +344,61 @@ erDiagram
text state
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_dataset" {
varchar_36_ agentId FK
json columnMapping
timestamp_3__with_time_zone createdAt
uuid createdById FK
json datasetRef
varchar_32_ datasetSource
text description
varchar_36_ id
varchar_128_ name
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_rating" {
text comment
json correction
timestamp_3__with_time_zone createdAt
varchar_36_ id
uuid ratedById FK
varchar_36_ resultId FK
timestamp_3__with_time_zone updatedAt
varchar_8_ vote
}
"public.agent_eval_result" {
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json input
json metrics
json output
timestamp_3__with_time_zone runAt
varchar_36_ runId FK
integer runIndex
varchar_255_ sourceRowId
varchar status
json toolCalls
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json metrics
timestamp_3__with_time_zone runAt
varchar_255_ runningInstanceId
varchar status
timestamp_3__with_time_zone updatedAt
}
"public.agent_execution" {
integer completionTokens
double_precision cost
@ -328,6 +413,7 @@ erDiagram
timestamp_3__with_time_zone startedAt
varchar_16_ status
timestamp_3__with_time_zone stoppedAt
varchar_2_ storedAt
varchar_128_ threadId FK
json timeline
integer totalTokens
@ -403,6 +489,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations
@ -640,6 +727,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.data_table" {
timestamp_3__with_time_zone createdAt
@ -801,7 +889,7 @@ erDiagram
bigint value
}
"public.installed_nodes" {
integer latestVersion
double_precision latestVersion
varchar_200_ name
varchar_241_ package FK
varchar_200_ type
@ -817,6 +905,7 @@ erDiagram
"public.instance_ai_checkpoints" {
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone expiredAt
varchar_64_ hostRunId
varchar_255_ key
varchar_255_ resourceId
varchar_255_ runId
@ -824,6 +913,15 @@ erDiagram
uuid threadId FK
timestamp_3__with_time_zone updatedAt
}
"public.instance_ai_events" {
timestamp_3__with_time_zone createdAt
text payload
varchar_64_ runId
integer seq
uuid threadId FK
varchar_64_ type
timestamp_3__with_time_zone updatedAt
}
"public.instance_ai_iteration_logs" {
timestamp_3__with_time_zone createdAt
text entry
@ -971,6 +1069,12 @@ erDiagram
timestamp_3__with_time_zone updatedAt
varchar_255_ workflowName
}
"public.instance_credential_assignment" {
timestamp_3__with_time_zone createdAt
varchar_36_ credentialId FK
varchar_128_ credentialUseId
timestamp_3__with_time_zone updatedAt
}
"public.instance_version_history" {
timestamp_3__with_time_zone createdAt
integer id
@ -1035,6 +1139,7 @@ erDiagram
varchar clientId FK
bigint grantedAt
integer id
json scope
uuid userId FK
}
"public.processed_data" {
@ -1120,6 +1225,7 @@ erDiagram
integer attempts
varchar_255_ claimedBy
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone dispatchedAt
text errorMessage
timestamp_3__with_time_zone finishedAt
bigint id
@ -1348,6 +1454,7 @@ erDiagram
text errorMessage
varchar_36_ nodeId
varchar_20_ status
varchar_20_ triggerKind
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId FK
varchar_36_ workflowId FK
@ -1366,6 +1473,34 @@ erDiagram
timestamp_3__with_time_zone updatedAt
varchar_36_ workflowId FK
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
"public.workflow_review_request_authors" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.workflow_review_request_reviewers" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.workflow_review_request_workflow" {
varchar_36_ id
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
"public.workflow_statistics" {
bigint count
integer id

View File

@ -48,6 +48,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -46,6 +46,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -0,0 +1,113 @@
# public.agent_eval_dataset
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| agentId | varchar(36) | | false | | [public.agents](public.agents.md) | |
| columnMapping | json | | true | | | Maps dataset columns onto input / expectedOutput / criteria roles |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| createdById | uuid | | true | | [public.user](public.user.md) | |
| datasetRef | json | | false | | | Pointer into the dataset backend (e.g. { dataTableId }); shape varies by datasetSource |
| datasetSource | varchar(32) | | false | | | Dataset backend the cases are read from |
| description | text | | true | | | |
| id | varchar(36) | | false | [public.agent_eval_run](public.agent_eval_run.md) | | |
| name | varchar(128) | | false | | | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_agent_eval_dataset_datasetSource | CHECK | CHECK ((("datasetSource")::text = ANY ((ARRAY['data_table'::character varying, 'google_sheets'::character varying])::text[]))) |
| FK_9d3a6fd750f7746de453cf4d5ed | FOREIGN KEY | FOREIGN KEY ("agentId") REFERENCES agents(id) ON DELETE CASCADE |
| FK_eda9e5fa5558d3f16bc2f6c21b6 | FOREIGN KEY | FOREIGN KEY ("createdById") REFERENCES "user"(id) ON DELETE SET NULL |
| PK_ac887efbb3580a577f1442cfa89 | PRIMARY KEY | PRIMARY KEY (id) |
| agent_eval_dataset_agentId_not_null | n | NOT NULL "agentId" |
| agent_eval_dataset_createdAt_not_null | n | NOT NULL "createdAt" |
| agent_eval_dataset_datasetRef_not_null | n | NOT NULL "datasetRef" |
| agent_eval_dataset_datasetSource_not_null | n | NOT NULL "datasetSource" |
| agent_eval_dataset_id_not_null | n | NOT NULL id |
| agent_eval_dataset_name_not_null | n | NOT NULL name |
| agent_eval_dataset_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_9d3a6fd750f7746de453cf4d5e | CREATE INDEX "IDX_9d3a6fd750f7746de453cf4d5e" ON public.agent_eval_dataset USING btree ("agentId") |
| PK_ac887efbb3580a577f1442cfa89 | CREATE UNIQUE INDEX "PK_ac887efbb3580a577f1442cfa89" ON public.agent_eval_dataset USING btree (id) |
## Relations
```mermaid
erDiagram
"public.agent_eval_dataset" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_eval_dataset" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_run" }o--|| "public.agent_eval_dataset" : "FOREIGN KEY (#quot;datasetId#quot;) REFERENCES agent_eval_dataset(id) ON DELETE CASCADE"
"public.agent_eval_dataset" {
varchar_36_ agentId FK
json columnMapping
timestamp_3__with_time_zone createdAt
uuid createdById FK
json datasetRef
varchar_32_ datasetSource
text description
varchar_36_ id
varchar_128_ name
timestamp_3__with_time_zone updatedAt
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations
varchar_128_ name
varchar_255_ projectId FK
json schema
json skills
json tools
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json metrics
timestamp_3__with_time_zone runAt
varchar_255_ runningInstanceId
varchar status
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,93 @@
# public.agent_eval_rating
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| comment | text | | true | | | |
| correction | json | | true | | | Optional corrected/edited output supplied by the rater |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| id | varchar(36) | | false | | | |
| ratedById | uuid | | true | | [public.user](public.user.md) | |
| resultId | varchar(36) | | false | | [public.agent_eval_result](public.agent_eval_result.md) | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| vote | varchar(8) | | false | | | Human feedback direction |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_agent_eval_rating_vote | CHECK | CHECK (((vote)::text = ANY ((ARRAY['up'::character varying, 'down'::character varying])::text[]))) |
| FK_9cadae6591c64498f1b58a2cef3 | FOREIGN KEY | FOREIGN KEY ("resultId") REFERENCES agent_eval_result(id) ON DELETE CASCADE |
| FK_e06a7408573a3e152e673977d2c | FOREIGN KEY | FOREIGN KEY ("ratedById") REFERENCES "user"(id) ON DELETE SET NULL |
| PK_04b7709a435e0c07520ceb37393 | PRIMARY KEY | PRIMARY KEY (id) |
| agent_eval_rating_createdAt_not_null | n | NOT NULL "createdAt" |
| agent_eval_rating_id_not_null | n | NOT NULL id |
| agent_eval_rating_resultId_not_null | n | NOT NULL "resultId" |
| agent_eval_rating_updatedAt_not_null | n | NOT NULL "updatedAt" |
| agent_eval_rating_vote_not_null | n | NOT NULL vote |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_9cadae6591c64498f1b58a2cef | CREATE INDEX "IDX_9cadae6591c64498f1b58a2cef" ON public.agent_eval_rating USING btree ("resultId") |
| PK_04b7709a435e0c07520ceb37393 | CREATE UNIQUE INDEX "PK_04b7709a435e0c07520ceb37393" ON public.agent_eval_rating USING btree (id) |
## Relations
```mermaid
erDiagram
"public.agent_eval_rating" }o--o| "public.user" : "FOREIGN KEY (#quot;ratedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_rating" }o--|| "public.agent_eval_result" : "FOREIGN KEY (#quot;resultId#quot;) REFERENCES agent_eval_result(id) ON DELETE CASCADE"
"public.agent_eval_rating" {
text comment
json correction
timestamp_3__with_time_zone createdAt
varchar_36_ id
uuid ratedById FK
varchar_36_ resultId FK
timestamp_3__with_time_zone updatedAt
varchar_8_ vote
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_result" {
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json input
json metrics
json output
timestamp_3__with_time_zone runAt
varchar_36_ runId FK
integer runIndex
varchar_255_ sourceRowId
varchar status
json toolCalls
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,98 @@
# public.agent_eval_result
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| completedAt | timestamp(3) with time zone | | true | | | |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| errorCode | varchar(255) | | true | | | |
| errorDetails | json | | true | | | |
| id | varchar(36) | | false | [public.agent_eval_rating](public.agent_eval_rating.md) | | |
| input | json | | true | | | Snapshot of the case input actually run (row may later change) |
| metrics | json | | true | | | Per-case judge scores |
| output | json | | true | | | Agent output for this case |
| runAt | timestamp(3) with time zone | | true | | | |
| runId | varchar(36) | | false | | [public.agent_eval_run](public.agent_eval_run.md) | |
| runIndex | integer | | true | | | Order of this case within the run |
| sourceRowId | varchar(255) | | true | | | Origin dataset row id; loose pointer, rows are external and mutable |
| status | varchar | | false | | | Per-case lifecycle |
| toolCalls | json | | true | | | Tool-call timeline captured during the run |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_agent_eval_result_status | CHECK | CHECK (((status)::text = ANY ((ARRAY['new'::character varying, 'running'::character varying, 'success'::character varying, 'error'::character varying, 'cancelled'::character varying])::text[]))) |
| FK_40a2d1248a6d984f442de2fac1b | FOREIGN KEY | FOREIGN KEY ("runId") REFERENCES agent_eval_run(id) ON DELETE CASCADE |
| PK_d40a22dc56dc200313c1f0e41ac | PRIMARY KEY | PRIMARY KEY (id) |
| agent_eval_result_createdAt_not_null | n | NOT NULL "createdAt" |
| agent_eval_result_id_not_null | n | NOT NULL id |
| agent_eval_result_runId_not_null | n | NOT NULL "runId" |
| agent_eval_result_status_not_null | n | NOT NULL status |
| agent_eval_result_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_40a2d1248a6d984f442de2fac1 | CREATE INDEX "IDX_40a2d1248a6d984f442de2fac1" ON public.agent_eval_result USING btree ("runId") |
| PK_d40a22dc56dc200313c1f0e41ac | CREATE UNIQUE INDEX "PK_d40a22dc56dc200313c1f0e41ac" ON public.agent_eval_result USING btree (id) |
## Relations
```mermaid
erDiagram
"public.agent_eval_rating" }o--|| "public.agent_eval_result" : "FOREIGN KEY (#quot;resultId#quot;) REFERENCES agent_eval_result(id) ON DELETE CASCADE"
"public.agent_eval_result" }o--|| "public.agent_eval_run" : "FOREIGN KEY (#quot;runId#quot;) REFERENCES agent_eval_run(id) ON DELETE CASCADE"
"public.agent_eval_result" {
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json input
json metrics
json output
timestamp_3__with_time_zone runAt
varchar_36_ runId FK
integer runIndex
varchar_255_ sourceRowId
varchar status
json toolCalls
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_rating" {
text comment
json correction
timestamp_3__with_time_zone createdAt
varchar_36_ id
uuid ratedById FK
varchar_36_ resultId FK
timestamp_3__with_time_zone updatedAt
varchar_8_ vote
}
"public.agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json metrics
timestamp_3__with_time_zone runAt
varchar_255_ runningInstanceId
varchar status
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,119 @@
# public.agent_eval_run
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| agentVersionId | varchar(36) | | true | | | Published agent version under test (agent_history.versionId); loose pointer, no FK so runs survive history pruning. The agent itself comes from the dataset. |
| cancelRequested | boolean | false | false | | | Fallback cancellation flag polled by the running main |
| completedAt | timestamp(3) with time zone | | true | | | |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| createdById | uuid | | true | | [public.user](public.user.md) | |
| datasetId | varchar(36) | | false | | [public.agent_eval_dataset](public.agent_eval_dataset.md) | |
| errorCode | varchar(255) | | true | | | |
| errorDetails | json | | true | | | |
| id | varchar(36) | | false | [public.agent_eval_result](public.agent_eval_result.md) | | |
| metrics | json | | true | | | Aggregated run-level scores |
| runAt | timestamp(3) with time zone | | true | | | |
| runningInstanceId | varchar(255) | | true | | | Main instance executing this run; used to coordinate cancellation |
| status | varchar | | false | | | Run lifecycle |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_agent_eval_run_status | CHECK | CHECK (((status)::text = ANY ((ARRAY['new'::character varying, 'running'::character varying, 'completed'::character varying, 'error'::character varying, 'cancelled'::character varying])::text[]))) |
| FK_39ca447735d378e365f4227abff | FOREIGN KEY | FOREIGN KEY ("datasetId") REFERENCES agent_eval_dataset(id) ON DELETE CASCADE |
| FK_54ee897f442cc7393a6d6165334 | FOREIGN KEY | FOREIGN KEY ("createdById") REFERENCES "user"(id) ON DELETE SET NULL |
| PK_280832ca3f1b43663cc0e25e77f | PRIMARY KEY | PRIMARY KEY (id) |
| agent_eval_run_cancelRequested_not_null | n | NOT NULL "cancelRequested" |
| agent_eval_run_createdAt_not_null | n | NOT NULL "createdAt" |
| agent_eval_run_datasetId_not_null | n | NOT NULL "datasetId" |
| agent_eval_run_id_not_null | n | NOT NULL id |
| agent_eval_run_status_not_null | n | NOT NULL status |
| agent_eval_run_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_39ca447735d378e365f4227abf | CREATE INDEX "IDX_39ca447735d378e365f4227abf" ON public.agent_eval_run USING btree ("datasetId") |
| PK_280832ca3f1b43663cc0e25e77f | CREATE UNIQUE INDEX "PK_280832ca3f1b43663cc0e25e77f" ON public.agent_eval_run USING btree (id) |
## Relations
```mermaid
erDiagram
"public.agent_eval_run" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_run" }o--|| "public.agent_eval_dataset" : "FOREIGN KEY (#quot;datasetId#quot;) REFERENCES agent_eval_dataset(id) ON DELETE CASCADE"
"public.agent_eval_result" }o--|| "public.agent_eval_run" : "FOREIGN KEY (#quot;runId#quot;) REFERENCES agent_eval_run(id) ON DELETE CASCADE"
"public.agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json metrics
timestamp_3__with_time_zone runAt
varchar_255_ runningInstanceId
varchar status
timestamp_3__with_time_zone updatedAt
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_dataset" {
varchar_36_ agentId FK
json columnMapping
timestamp_3__with_time_zone createdAt
uuid createdById FK
json datasetRef
varchar_32_ datasetSource
text description
varchar_36_ id
varchar_128_ name
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_result" {
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json input
json metrics
json output
timestamp_3__with_time_zone runAt
varchar_36_ runId FK
integer runIndex
varchar_255_ sourceRowId
varchar status
json toolCalls
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -17,6 +17,7 @@
| startedAt | timestamp(3) with time zone | | true | | | |
| status | varchar(16) | | false | | | |
| stoppedAt | timestamp(3) with time zone | | true | | | |
| storedAt | varchar(2) | 'db'::character varying | false | | | |
| threadId | varchar(128) | | false | | [public.agent_execution_threads](public.agent_execution_threads.md) | |
| timeline | json | | true | | | |
| totalTokens | integer | | true | | | |
@ -29,12 +30,14 @@
| ---- | ---- | ---------- |
| CHK_agent_execution_hitlStatus | CHECK | CHECK ((("hitlStatus")::text = ANY ((ARRAY['suspended'::character varying, 'resumed'::character varying])::text[]))) |
| CHK_agent_execution_status | CHECK | CHECK (((status)::text = ANY ((ARRAY['success'::character varying, 'error'::character varying])::text[]))) |
| CHK_agent_execution_storedAt | CHECK | CHECK ((("storedAt")::text = ANY ((ARRAY['db'::character varying, 'fs'::character varying, 's3'::character varying, 'az'::character varying])::text[]))) |
| FK_add2432fb6034cc18b6af299dce | FOREIGN KEY | FOREIGN KEY ("threadId") REFERENCES agent_execution_threads(id) ON DELETE CASCADE |
| PK_ba438acc8532addc12d1ef17049 | PRIMARY KEY | PRIMARY KEY (id) |
| agent_execution_createdAt_not_null | n | NOT NULL "createdAt" |
| agent_execution_duration_not_null | n | NOT NULL duration |
| agent_execution_id_not_null | n | NOT NULL id |
| agent_execution_status_not_null | n | NOT NULL status |
| agent_execution_storedAt_not_null | n | NOT NULL "storedAt" |
| agent_execution_threadId_not_null | n | NOT NULL "threadId" |
| agent_execution_updatedAt_not_null | n | NOT NULL "updatedAt" |
@ -66,6 +69,7 @@ erDiagram
timestamp_3__with_time_zone startedAt
varchar_16_ status
timestamp_3__with_time_zone stoppedAt
varchar_2_ storedAt
varchar_128_ threadId FK
json timeline
integer totalTokens

View File

@ -82,6 +82,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations
@ -107,6 +108,7 @@ erDiagram
timestamp_3__with_time_zone startedAt
varchar_16_ status
timestamp_3__with_time_zone stoppedAt
varchar_2_ storedAt
varchar_128_ threadId FK
json timeline
integer totalTokens

View File

@ -56,6 +56,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -58,6 +58,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -51,6 +51,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -47,6 +47,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -5,8 +5,9 @@
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| activeVersionId | varchar(36) | | true | | [public.agent_history](public.agent_history.md) | |
| availableInMCP | boolean | false | false | | | Whether MCP clients granted agent scopes may operate on this agent |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| id | varchar(36) | | false | [public.agent_chat_subscriptions](public.agent_chat_subscriptions.md) [public.agent_checkpoints](public.agent_checkpoints.md) [public.agent_execution_threads](public.agent_execution_threads.md) [public.agent_files](public.agent_files.md) [public.agent_history](public.agent_history.md) [public.agent_task_definition](public.agent_task_definition.md) [public.agent_task_run_lock](public.agent_task_run_lock.md) [public.agents_memory_entries](public.agents_memory_entries.md) [public.agents_memory_entry_cursors](public.agents_memory_entry_cursors.md) [public.agents_memory_entry_locks](public.agents_memory_entry_locks.md) [public.agents_memory_entry_sources](public.agents_memory_entry_sources.md) [public.agents_observation_cursors](public.agents_observation_cursors.md) [public.agents_observation_locks](public.agents_observation_locks.md) [public.agents_observations](public.agents_observations.md) | | |
| id | varchar(36) | | false | [public.agent_chat_subscriptions](public.agent_chat_subscriptions.md) [public.agent_checkpoints](public.agent_checkpoints.md) [public.agent_eval_dataset](public.agent_eval_dataset.md) [public.agent_execution_threads](public.agent_execution_threads.md) [public.agent_files](public.agent_files.md) [public.agent_history](public.agent_history.md) [public.agent_task_definition](public.agent_task_definition.md) [public.agent_task_run_lock](public.agent_task_run_lock.md) [public.agents_memory_entries](public.agents_memory_entries.md) [public.agents_memory_entry_cursors](public.agents_memory_entry_cursors.md) [public.agents_memory_entry_locks](public.agents_memory_entry_locks.md) [public.agents_memory_entry_sources](public.agents_memory_entry_sources.md) [public.agents_observation_cursors](public.agents_observation_cursors.md) [public.agents_observation_locks](public.agents_observation_locks.md) [public.agents_observations](public.agents_observations.md) | | |
| integrations | json | '[]'::json | false | | | |
| name | varchar(128) | | false | | | |
| projectId | varchar(255) | | false | | [public.project](public.project.md) | |
@ -23,6 +24,7 @@
| FK_940597dfe9753375309ce6aeea0 | FOREIGN KEY | FOREIGN KEY ("activeVersionId") REFERENCES agent_history("versionId") ON DELETE SET NULL |
| FK_a30d560207c4071d98aa03c179c | FOREIGN KEY | FOREIGN KEY ("projectId") REFERENCES project(id) ON DELETE CASCADE |
| PK_9c653f28ae19c5884d5baf6a1d9 | PRIMARY KEY | PRIMARY KEY (id) |
| agents_availableInMCP_not_null | n | NOT NULL "availableInMCP" |
| agents_createdAt_not_null | n | NOT NULL "createdAt" |
| agents_id_not_null | n | NOT NULL id |
| agents_integrations_not_null | n | NOT NULL integrations |
@ -48,6 +50,7 @@ erDiagram
"public.agents" }o--o| "public.agent_history" : "FOREIGN KEY (#quot;activeVersionId#quot;) REFERENCES agent_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.agent_chat_subscriptions" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_checkpoints" }o--o| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_eval_dataset" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_execution_threads" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_files" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
"public.agent_history" }o--|| "public.agents" : "FOREIGN KEY (#quot;agentId#quot;) REFERENCES agents(id) ON DELETE CASCADE"
@ -64,6 +67,7 @@ erDiagram
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations
@ -102,6 +106,18 @@ erDiagram
text state
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_dataset" {
varchar_36_ agentId FK
json columnMapping
timestamp_3__with_time_zone createdAt
uuid createdById FK
json datasetRef
varchar_32_ datasetSource
text description
varchar_36_ id
varchar_128_ name
timestamp_3__with_time_zone updatedAt
}
"public.agent_execution_threads" {
varchar_36_ agentId FK
varchar_255_ agentName

View File

@ -74,6 +74,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -50,6 +50,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -50,6 +50,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -66,6 +66,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -50,6 +50,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -54,6 +54,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -73,6 +73,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations

View File

@ -80,6 +80,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.chat_hub_agent_tools" {
uuid agentId FK

View File

@ -97,6 +97,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.chat_hub_messages" {
uuid agentId FK

View File

@ -57,6 +57,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
```

View File

@ -6,7 +6,7 @@
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| data | text | | false | | | |
| id | varchar(36) | | false | [public.chat_hub_agents](public.chat_hub_agents.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.credential_dependency](public.credential_dependency.md) [public.dynamic_credential_entry](public.dynamic_credential_entry.md) [public.dynamic_credential_user_entry](public.dynamic_credential_user_entry.md) [public.instance_ai_mcp_registry_connections](public.instance_ai_mcp_registry_connections.md) [public.shared_credentials](public.shared_credentials.md) | | |
| id | varchar(36) | | false | [public.chat_hub_agents](public.chat_hub_agents.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.credential_dependency](public.credential_dependency.md) [public.dynamic_credential_entry](public.dynamic_credential_entry.md) [public.dynamic_credential_user_entry](public.dynamic_credential_user_entry.md) [public.instance_ai_mcp_registry_connections](public.instance_ai_mcp_registry_connections.md) [public.instance_credential_assignment](public.instance_credential_assignment.md) [public.shared_credentials](public.shared_credentials.md) | | |
| isGlobal | boolean | false | false | | | |
| isManaged | boolean | false | false | | | |
| isResolvable | boolean | false | false | | | |
@ -15,11 +15,13 @@
| resolverId | varchar(16) | | true | | [public.dynamic_credential_resolver](public.dynamic_credential_resolver.md) | |
| type | varchar(128) | | false | | | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| usageScope | varchar(16) | 'project'::character varying | false | | | Where the credential may be consumed: a project-owned feature or an instance-level feature |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_credentials_entity_usageScope | CHECK | CHECK ((("usageScope")::text = ANY ((ARRAY['project'::character varying, 'instance'::character varying])::text[]))) |
| credentials_entity_createdAt_not_null | n | NOT NULL "createdAt" |
| credentials_entity_data_not_null | n | NOT NULL data |
| credentials_entity_id_not_null1 | n | NOT NULL id |
@ -32,6 +34,7 @@
| credentials_entity_resolverId_foreign | FOREIGN KEY | FOREIGN KEY ("resolverId") REFERENCES dynamic_credential_resolver(id) ON DELETE SET NULL |
| credentials_entity_type_not_null | n | NOT NULL type |
| credentials_entity_updatedAt_not_null | n | NOT NULL "updatedAt" |
| credentials_entity_usageScope_not_null | n | NOT NULL "usageScope" |
## Indexes
@ -53,6 +56,7 @@ erDiagram
"public.dynamic_credential_entry" }o--|| "public.credentials_entity" : "FOREIGN KEY (credential_id) REFERENCES credentials_entity(id) ON DELETE CASCADE"
"public.dynamic_credential_user_entry" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE CASCADE"
"public.instance_ai_mcp_registry_connections" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE CASCADE"
"public.instance_credential_assignment" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE RESTRICT"
"public.shared_credentials" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialsId#quot;) REFERENCES credentials_entity(id) ON DELETE CASCADE"
"public.credentials_entity" }o--o| "public.dynamic_credential_resolver" : "FOREIGN KEY (#quot;resolverId#quot;) REFERENCES dynamic_credential_resolver(id) ON DELETE SET NULL"
@ -68,6 +72,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.chat_hub_agents" {
timestamp_3__with_time_zone createdAt
@ -131,6 +136,12 @@ erDiagram
timestamp_3__with_time_zone updatedAt
uuid userId FK
}
"public.instance_credential_assignment" {
timestamp_3__with_time_zone createdAt
varchar_36_ credentialId FK
varchar_128_ credentialUseId
timestamp_3__with_time_zone updatedAt
}
"public.shared_credentials" {
timestamp_3__with_time_zone createdAt
varchar_36_ credentialsId FK

View File

@ -61,6 +61,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.dynamic_credential_resolver" {
text config

View File

@ -59,6 +59,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.dynamic_credential_entry" {
timestamp_3__with_time_zone createdAt

View File

@ -63,6 +63,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.dynamic_credential_resolver" {
text config

View File

@ -4,7 +4,7 @@
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| latestVersion | integer | 1 | false | | | |
| latestVersion | double precision | 1 | false | | | |
| name | varchar(200) | | false | | | |
| package | varchar(241) | | false | | [public.installed_packages](public.installed_packages.md) | |
| type | varchar(200) | | false | | | |
@ -34,7 +34,7 @@ erDiagram
"public.installed_nodes" }o--|| "public.installed_packages" : "FOREIGN KEY (package) REFERENCES installed_packages(#quot;packageName#quot;) ON UPDATE CASCADE ON DELETE CASCADE"
"public.installed_nodes" {
integer latestVersion
double_precision latestVersion
varchar_200_ name
varchar_241_ package FK
varchar_200_ type

View File

@ -43,7 +43,7 @@ erDiagram
timestamp_3__with_time_zone updatedAt
}
"public.installed_nodes" {
integer latestVersion
double_precision latestVersion
varchar_200_ name
varchar_241_ package FK
varchar_200_ type

View File

@ -6,6 +6,7 @@
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| expiredAt | timestamp(3) with time zone | | true | | | Soft-delete timestamp: null means live; non-null marks the row as a tombstone. |
| hostRunId | varchar(64) | | true | | | Host (Instance AI) run id; distinct from the agent-SDK runId parsed from the checkpoint key. |
| key | varchar(255) | | false | [public.instance_ai_pending_confirmations](public.instance_ai_pending_confirmations.md) | | Opaque checkpoint key from the agent runtime. |
| resourceId | varchar(255) | | true | | | Resource ID recorded by the agent runtime. |
| runId | varchar(255) | | true | | | Run ID parsed from the checkpoint key when available. |
@ -45,6 +46,7 @@ erDiagram
"public.instance_ai_checkpoints" {
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone expiredAt
varchar_64_ hostRunId
varchar_255_ key
varchar_255_ resourceId
varchar_255_ runId

View File

@ -0,0 +1,65 @@
# public.instance_ai_events
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| payload | text | | false | | | JSON of the canonical InstanceAiEvent |
| runId | varchar(64) | | false | | | Run that emitted the event — opaque ID from the agent runtime |
| seq | integer | | false | | | Per-thread monotonic sequence — the SSE replay cursor |
| threadId | uuid | | false | | [public.instance_ai_threads](public.instance_ai_threads.md) | |
| type | varchar(64) | | false | | | Event type discriminator, duplicated out of the payload |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| FK_35909c5576a4a6c1d6a6fb71caa | FOREIGN KEY | FOREIGN KEY ("threadId") REFERENCES instance_ai_threads(id) ON DELETE CASCADE |
| PK_12489cd6197feeac2089acc7ef6 | PRIMARY KEY | PRIMARY KEY ("threadId", seq) |
| instance_ai_events_createdAt_not_null | n | NOT NULL "createdAt" |
| instance_ai_events_payload_not_null | n | NOT NULL payload |
| instance_ai_events_runId_not_null | n | NOT NULL "runId" |
| instance_ai_events_seq_not_null | n | NOT NULL seq |
| instance_ai_events_threadId_not_null | n | NOT NULL "threadId" |
| instance_ai_events_type_not_null | n | NOT NULL type |
| instance_ai_events_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_32cdd799675715fb1d2a8683e9 | CREATE INDEX "IDX_32cdd799675715fb1d2a8683e9" ON public.instance_ai_events USING btree ("threadId", "runId") |
| PK_12489cd6197feeac2089acc7ef6 | CREATE UNIQUE INDEX "PK_12489cd6197feeac2089acc7ef6" ON public.instance_ai_events USING btree ("threadId", seq) |
## Relations
```mermaid
erDiagram
"public.instance_ai_events" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_events" {
timestamp_3__with_time_zone createdAt
text payload
varchar_64_ runId
integer seq
uuid threadId FK
varchar_64_ type
timestamp_3__with_time_zone updatedAt
}
"public.instance_ai_threads" {
timestamp_3__with_time_zone createdAt
uuid id
json metadata
varchar_36_ projectId FK
varchar_255_ resourceId
text title
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -64,6 +64,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.mcp_registry_server" {
timestamp_3__with_time_zone createdAt

View File

@ -70,6 +70,7 @@ erDiagram
"public.instance_ai_checkpoints" {
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone expiredAt
varchar_64_ hostRunId
varchar_255_ key
varchar_255_ resourceId
varchar_255_ runId

View File

@ -5,7 +5,7 @@
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| id | uuid | | false | [public.ai_builder_temporary_workflow](public.ai_builder_temporary_workflow.md) [public.instance_ai_checkpoints](public.instance_ai_checkpoints.md) [public.instance_ai_iteration_logs](public.instance_ai_iteration_logs.md) [public.instance_ai_messages](public.instance_ai_messages.md) [public.instance_ai_observation_cursors](public.instance_ai_observation_cursors.md) [public.instance_ai_observation_locks](public.instance_ai_observation_locks.md) [public.instance_ai_observational_memory](public.instance_ai_observational_memory.md) [public.instance_ai_observations](public.instance_ai_observations.md) [public.instance_ai_pending_confirmations](public.instance_ai_pending_confirmations.md) [public.instance_ai_run_snapshots](public.instance_ai_run_snapshots.md) [public.instance_ai_thread_grants](public.instance_ai_thread_grants.md) | | |
| id | uuid | | false | [public.ai_builder_temporary_workflow](public.ai_builder_temporary_workflow.md) [public.instance_ai_checkpoints](public.instance_ai_checkpoints.md) [public.instance_ai_events](public.instance_ai_events.md) [public.instance_ai_iteration_logs](public.instance_ai_iteration_logs.md) [public.instance_ai_messages](public.instance_ai_messages.md) [public.instance_ai_observation_cursors](public.instance_ai_observation_cursors.md) [public.instance_ai_observation_locks](public.instance_ai_observation_locks.md) [public.instance_ai_observational_memory](public.instance_ai_observational_memory.md) [public.instance_ai_observations](public.instance_ai_observations.md) [public.instance_ai_pending_confirmations](public.instance_ai_pending_confirmations.md) [public.instance_ai_run_snapshots](public.instance_ai_run_snapshots.md) [public.instance_ai_thread_grants](public.instance_ai_thread_grants.md) | | |
| metadata | json | | true | | | |
| projectId | varchar(36) | | false | | [public.project](public.project.md) | Project this thread is scoped to |
| resourceId | varchar(255) | | false | | | |
@ -40,6 +40,7 @@ erDiagram
"public.ai_builder_temporary_workflow" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_checkpoints" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_events" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_iteration_logs" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_messages" }o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;threadId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
"public.instance_ai_observation_cursors" |o--|| "public.instance_ai_threads" : "FOREIGN KEY (#quot;observationScopeId#quot;) REFERENCES instance_ai_threads(id) ON DELETE CASCADE"
@ -69,6 +70,7 @@ erDiagram
"public.instance_ai_checkpoints" {
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone expiredAt
varchar_64_ hostRunId
varchar_255_ key
varchar_255_ resourceId
varchar_255_ runId
@ -76,6 +78,15 @@ erDiagram
uuid threadId FK
timestamp_3__with_time_zone updatedAt
}
"public.instance_ai_events" {
timestamp_3__with_time_zone createdAt
text payload
varchar_64_ runId
integer seq
uuid threadId FK
varchar_64_ type
timestamp_3__with_time_zone updatedAt
}
"public.instance_ai_iteration_logs" {
timestamp_3__with_time_zone createdAt
text entry

View File

@ -0,0 +1,61 @@
# public.instance_credential_assignment
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| credentialId | varchar(36) | | false | | [public.credentials_entity](public.credentials_entity.md) | Credential assigned to the registered use; repositories enforce instance usage scope |
| credentialUseId | varchar(128) | | false | | | Stable credential use registered with the instance credential broker |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| FK_instance_credential_assignment_credential | FOREIGN KEY | FOREIGN KEY ("credentialId") REFERENCES credentials_entity(id) ON DELETE RESTRICT |
| PK_984b0a98726485c9a330cde6b2f | PRIMARY KEY | PRIMARY KEY ("credentialUseId") |
| instance_credential_assignment_createdAt_not_null | n | NOT NULL "createdAt" |
| instance_credential_assignment_credentialId_not_null | n | NOT NULL "credentialId" |
| instance_credential_assignment_credentialUseId_not_null | n | NOT NULL "credentialUseId" |
| instance_credential_assignment_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_9626b8dc1bee96a86a3ee09d73 | CREATE INDEX "IDX_9626b8dc1bee96a86a3ee09d73" ON public.instance_credential_assignment USING btree ("credentialId") |
| PK_984b0a98726485c9a330cde6b2f | CREATE UNIQUE INDEX "PK_984b0a98726485c9a330cde6b2f" ON public.instance_credential_assignment USING btree ("credentialUseId") |
## Relations
```mermaid
erDiagram
"public.instance_credential_assignment" }o--|| "public.credentials_entity" : "FOREIGN KEY (#quot;credentialId#quot;) REFERENCES credentials_entity(id) ON DELETE RESTRICT"
"public.instance_credential_assignment" {
timestamp_3__with_time_zone createdAt
varchar_36_ credentialId FK
varchar_128_ credentialUseId
timestamp_3__with_time_zone updatedAt
}
"public.credentials_entity" {
timestamp_3__with_time_zone createdAt
text data
varchar_36_ id
boolean isGlobal
boolean isManaged
boolean isResolvable
varchar_128_ name
boolean resolvableAllowFallback
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -87,6 +87,7 @@ erDiagram
varchar clientId FK
bigint grantedAt
integer id
json scope
uuid userId FK
}
```

View File

@ -7,6 +7,7 @@
| clientId | varchar | | false | | [public.oauth_clients](public.oauth_clients.md) | |
| grantedAt | bigint | | false | | | Unix timestamp in milliseconds |
| id | integer | | false | | | |
| scope | json | | false | | | OAuth scopes granted on the consent screen |
| userId | uuid | | false | | [public.user](public.user.md) | |
## Constraints
@ -20,6 +21,7 @@
| oauth_user_consents_clientId_not_null | n | NOT NULL "clientId" |
| oauth_user_consents_grantedAt_not_null | n | NOT NULL "grantedAt" |
| oauth_user_consents_id_not_null | n | NOT NULL id |
| oauth_user_consents_scope_not_null | n | NOT NULL scope |
| oauth_user_consents_userId_not_null | n | NOT NULL "userId" |
## Indexes
@ -41,6 +43,7 @@ erDiagram
varchar clientId FK
bigint grantedAt
integer id
json scope
uuid userId FK
}
"public.oauth_clients" {

View File

@ -9,7 +9,7 @@
| customTelemetryTags | json | '[]'::json | false | | | |
| description | varchar(512) | | true | | | |
| icon | json | | true | | | |
| id | varchar(36) | | false | [public.agent_execution_threads](public.agent_execution_threads.md) [public.agents](public.agents.md) [public.data_table](public.data_table.md) [public.folder](public.folder.md) [public.insights_metadata](public.insights_metadata.md) [public.instance_ai_threads](public.instance_ai_threads.md) [public.project_relation](public.project_relation.md) [public.project_secrets_provider_access](public.project_secrets_provider_access.md) [public.role_mapping_rule_project](public.role_mapping_rule_project.md) [public.shared_credentials](public.shared_credentials.md) [public.shared_workflow](public.shared_workflow.md) [public.variables](public.variables.md) | | |
| id | varchar(36) | | false | [public.agent_execution_threads](public.agent_execution_threads.md) [public.agents](public.agents.md) [public.data_table](public.data_table.md) [public.folder](public.folder.md) [public.insights_metadata](public.insights_metadata.md) [public.instance_ai_threads](public.instance_ai_threads.md) [public.project_relation](public.project_relation.md) [public.project_secrets_provider_access](public.project_secrets_provider_access.md) [public.role_mapping_rule_project](public.role_mapping_rule_project.md) [public.shared_credentials](public.shared_credentials.md) [public.shared_workflow](public.shared_workflow.md) [public.variables](public.variables.md) [public.workflow_review_request](public.workflow_review_request.md) | | |
| name | varchar(255) | | false | | | |
| type | varchar(36) | | false | | | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
@ -51,6 +51,7 @@ erDiagram
"public.shared_credentials" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.shared_workflow" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.variables" }o--o| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.workflow_review_request" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.project" {
timestamp_3__with_time_zone createdAt
@ -101,6 +102,7 @@ erDiagram
}
"public.agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
timestamp_3__with_time_zone createdAt
varchar_36_ id
json integrations
@ -182,6 +184,20 @@ erDiagram
varchar_50_ type
text value
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
```
---

View File

@ -89,6 +89,7 @@ erDiagram
integer attempts
varchar_255_ claimedBy
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone dispatchedAt
text errorMessage
timestamp_3__with_time_zone finishedAt
bigint id

View File

@ -7,6 +7,7 @@
| attempts | integer | 0 | false | | | Execution attempts started so far; compared against maxAttempts. |
| claimedBy | varchar(255) | | true | | | Id of the instance currently holding the lease; NULL when unclaimed. |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| dispatchedAt | timestamp(3) with time zone | | true | | | When the current attempt handed off its effect; NULL until then. Splits dispatch-attempted (startedAt) from effect-happened, so the reaper completes a dispatched occurrence rather than redelivering it. |
| errorMessage | text | | true | | | Failure detail from the last attempt. |
| finishedAt | timestamp(3) with time zone | | true | | | When the occurrence reached a terminal state; drives retention pruning. |
| id | bigint | | false | | | |
@ -62,6 +63,7 @@ erDiagram
integer attempts
varchar_255_ claimedBy
timestamp_3__with_time_zone createdAt
timestamp_3__with_time_zone dispatchedAt
text errorMessage
timestamp_3__with_time_zone finishedAt
bigint id

View File

@ -56,6 +56,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_128_ type
timestamp_3__with_time_zone updatedAt
varchar_16_ usageScope
}
"public.project" {
timestamp_3__with_time_zone createdAt

View File

@ -8,7 +8,7 @@
| disabled | boolean | false | false | | | |
| email | varchar(255) | | true | | | |
| firstName | varchar(32) | | true | | | |
| id | uuid | gen_random_uuid() | false | [public.agent_history](public.agent_history.md) [public.auth_identity](public.auth_identity.md) [public.chat_hub_agents](public.chat_hub_agents.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.chat_hub_tools](public.chat_hub_tools.md) [public.dynamic_credential_user_entry](public.dynamic_credential_user_entry.md) [public.evaluation_collection](public.evaluation_collection.md) [public.instance_ai_mcp_registry_connections](public.instance_ai_mcp_registry_connections.md) [public.instance_ai_pending_confirmations](public.instance_ai_pending_confirmations.md) [public.instance_ai_thread_grants](public.instance_ai_thread_grants.md) [public.oauth_access_tokens](public.oauth_access_tokens.md) [public.oauth_authorization_codes](public.oauth_authorization_codes.md) [public.oauth_refresh_tokens](public.oauth_refresh_tokens.md) [public.oauth_user_consents](public.oauth_user_consents.md) [public.project](public.project.md) [public.project_relation](public.project_relation.md) [public.user_api_keys](public.user_api_keys.md) [public.user_favorites](public.user_favorites.md) [public.workflow_builder_session](public.workflow_builder_session.md) [public.workflow_publish_history](public.workflow_publish_history.md) | | |
| id | uuid | gen_random_uuid() | false | [public.agent_eval_dataset](public.agent_eval_dataset.md) [public.agent_eval_rating](public.agent_eval_rating.md) [public.agent_eval_run](public.agent_eval_run.md) [public.agent_history](public.agent_history.md) [public.auth_identity](public.auth_identity.md) [public.chat_hub_agents](public.chat_hub_agents.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.chat_hub_tools](public.chat_hub_tools.md) [public.dynamic_credential_user_entry](public.dynamic_credential_user_entry.md) [public.evaluation_collection](public.evaluation_collection.md) [public.instance_ai_mcp_registry_connections](public.instance_ai_mcp_registry_connections.md) [public.instance_ai_pending_confirmations](public.instance_ai_pending_confirmations.md) [public.instance_ai_thread_grants](public.instance_ai_thread_grants.md) [public.oauth_access_tokens](public.oauth_access_tokens.md) [public.oauth_authorization_codes](public.oauth_authorization_codes.md) [public.oauth_refresh_tokens](public.oauth_refresh_tokens.md) [public.oauth_user_consents](public.oauth_user_consents.md) [public.project](public.project.md) [public.project_relation](public.project_relation.md) [public.user_api_keys](public.user_api_keys.md) [public.user_favorites](public.user_favorites.md) [public.workflow_builder_session](public.workflow_builder_session.md) [public.workflow_publish_history](public.workflow_publish_history.md) [public.workflow_review_request](public.workflow_review_request.md) [public.workflow_review_request_authors](public.workflow_review_request_authors.md) [public.workflow_review_request_reviewers](public.workflow_review_request_reviewers.md) | | |
| lastActiveAt | date | | true | | | |
| lastName | varchar(32) | | true | | | |
| mfaEnabled | boolean | false | false | | | |
@ -47,6 +47,9 @@
```mermaid
erDiagram
"public.agent_eval_dataset" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_rating" }o--o| "public.user" : "FOREIGN KEY (#quot;ratedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_eval_run" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.agent_history" }o--o| "public.user" : "FOREIGN KEY (#quot;publishedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.auth_identity" }o--o| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id)"
"public.chat_hub_agents" }o--|| "public.user" : "FOREIGN KEY (#quot;ownerId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
@ -67,6 +70,11 @@ erDiagram
"public.user_favorites" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_builder_session" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_publish_history" }o--o| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;updatedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;closedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request_authors" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.user" }o--|| "public.role" : "FOREIGN KEY (#quot;roleSlug#quot;) REFERENCES role(slug)"
"public.user" {
@ -86,6 +94,44 @@ erDiagram
json settings
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_dataset" {
varchar_36_ agentId FK
json columnMapping
timestamp_3__with_time_zone createdAt
uuid createdById FK
json datasetRef
varchar_32_ datasetSource
text description
varchar_36_ id
varchar_128_ name
timestamp_3__with_time_zone updatedAt
}
"public.agent_eval_rating" {
text comment
json correction
timestamp_3__with_time_zone createdAt
varchar_36_ id
uuid ratedById FK
varchar_36_ resultId FK
timestamp_3__with_time_zone updatedAt
varchar_8_ vote
}
"public.agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
timestamp_3__with_time_zone completedAt
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
json errorDetails
varchar_36_ id
json metrics
timestamp_3__with_time_zone runAt
varchar_255_ runningInstanceId
varchar status
timestamp_3__with_time_zone updatedAt
}
"public.agent_history" {
varchar_36_ agentId FK
varchar_255_ author
@ -227,6 +273,7 @@ erDiagram
varchar clientId FK
bigint grantedAt
integer id
json scope
uuid userId FK
}
"public.project" {
@ -283,6 +330,28 @@ erDiagram
varchar_36_ versionId FK
varchar_36_ workflowId FK
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
"public.workflow_review_request_authors" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.workflow_review_request_reviewers" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.role" {
timestamp_3__with_time_zone createdAt
text description

View File

@ -9,7 +9,7 @@
| connections | json | | false | | | |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| description | text | | true | | | |
| id | varchar(36) | | false | [public.ai_builder_temporary_workflow](public.ai_builder_temporary_workflow.md) [public.chat_hub_messages](public.chat_hub_messages.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.evaluation_collection](public.evaluation_collection.md) [public.evaluation_config](public.evaluation_config.md) [public.execution_entity](public.execution_entity.md) [public.insights_metadata](public.insights_metadata.md) [public.processed_data](public.processed_data.md) [public.shared_workflow](public.shared_workflow.md) [public.test_run](public.test_run.md) [public.webhook_entity](public.webhook_entity.md) [public.workflow_builder_session](public.workflow_builder_session.md) [public.workflow_dependency](public.workflow_dependency.md) [public.workflow_history](public.workflow_history.md) [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) [public.workflow_publish_history](public.workflow_publish_history.md) [public.workflow_published_version](public.workflow_published_version.md) [public.workflows_tags](public.workflows_tags.md) | | |
| id | varchar(36) | | false | [public.ai_builder_temporary_workflow](public.ai_builder_temporary_workflow.md) [public.chat_hub_messages](public.chat_hub_messages.md) [public.chat_hub_sessions](public.chat_hub_sessions.md) [public.evaluation_collection](public.evaluation_collection.md) [public.evaluation_config](public.evaluation_config.md) [public.execution_entity](public.execution_entity.md) [public.insights_metadata](public.insights_metadata.md) [public.processed_data](public.processed_data.md) [public.shared_workflow](public.shared_workflow.md) [public.test_run](public.test_run.md) [public.webhook_entity](public.webhook_entity.md) [public.workflow_builder_session](public.workflow_builder_session.md) [public.workflow_dependency](public.workflow_dependency.md) [public.workflow_history](public.workflow_history.md) [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) [public.workflow_publish_history](public.workflow_publish_history.md) [public.workflow_published_version](public.workflow_published_version.md) [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) [public.workflows_tags](public.workflows_tags.md) | | |
| isArchived | boolean | false | false | | | |
| meta | json | | true | | | |
| name | varchar(128) | | false | | | |
@ -83,6 +83,7 @@ erDiagram
"public.workflow_publication_trigger_status" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_publish_history" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_published_version" |o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE RESTRICT"
"public.workflow_review_request_workflow" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflows_tags" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_entity" }o--o| "public.folder" : "FOREIGN KEY (#quot;parentFolderId#quot;) REFERENCES folder(id) ON DELETE CASCADE"
@ -281,6 +282,7 @@ erDiagram
text errorMessage
varchar_36_ nodeId
varchar_20_ status
varchar_20_ triggerKind
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId FK
varchar_36_ workflowId FK
@ -299,6 +301,12 @@ erDiagram
timestamp_3__with_time_zone updatedAt
varchar_36_ workflowId FK
}
"public.workflow_review_request_workflow" {
varchar_36_ id
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
"public.workflows_tags" {
varchar_36_ tagId FK
varchar_36_ workflowId FK

View File

@ -13,7 +13,7 @@
| nodeGroups | json | '[]'::json | false | | | |
| nodes | json | | false | | | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| versionId | varchar(36) | | false | [public.workflow_entity](public.workflow_entity.md) [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) [public.workflow_publish_history](public.workflow_publish_history.md) [public.workflow_published_version](public.workflow_published_version.md) | | |
| versionId | varchar(36) | | false | [public.workflow_entity](public.workflow_entity.md) [public.workflow_publication_trigger_status](public.workflow_publication_trigger_status.md) [public.workflow_publish_history](public.workflow_publish_history.md) [public.workflow_published_version](public.workflow_published_version.md) [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) | | |
| workflowId | varchar(36) | | false | | [public.workflow_entity](public.workflow_entity.md) | |
## Constraints
@ -48,6 +48,7 @@ erDiagram
"public.workflow_publication_trigger_status" }o--|| "public.workflow_history" : "FOREIGN KEY (#quot;versionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE CASCADE"
"public.workflow_publish_history" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;versionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.workflow_published_version" }o--|| "public.workflow_history" : "FOREIGN KEY (#quot;publishedVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE RESTRICT"
"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.workflow_history" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_history" {
@ -90,6 +91,7 @@ erDiagram
text errorMessage
varchar_36_ nodeId
varchar_20_ status
varchar_20_ triggerKind
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId FK
varchar_36_ workflowId FK
@ -108,6 +110,12 @@ erDiagram
timestamp_3__with_time_zone updatedAt
varchar_36_ workflowId FK
}
"public.workflow_review_request_workflow" {
varchar_36_ id
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
```
---

View File

@ -8,6 +8,7 @@
| errorMessage | text | | true | | | |
| nodeId | varchar(36) | | false | | | |
| status | varchar(20) | | false | | | |
| triggerKind | varchar(20) | | false | | | Where the trigger lives once activated: in-memory (registered on the owning instance) vs persisted (webhook row in webhook_entity) |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| versionId | varchar(36) | | false | | [public.workflow_history](public.workflow_history.md) | References workflow_history.versionId: the published version these statuses were recorded for |
| workflowId | varchar(36) | | false | | [public.workflow_entity](public.workflow_entity.md) | |
@ -17,12 +18,14 @@
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_workflow_publication_trigger_status_status | CHECK | CHECK (((status)::text = ANY ((ARRAY['activated'::character varying, 'failed'::character varying])::text[]))) |
| CHK_workflow_publication_trigger_status_triggerKind | CHECK | CHECK ((("triggerKind")::text = ANY ((ARRAY['in-memory'::character varying, 'persisted'::character varying])::text[]))) |
| FK_b7b496d8d1a21158c65f475cd88 | FOREIGN KEY | FOREIGN KEY ("workflowId") REFERENCES workflow_entity(id) ON DELETE CASCADE |
| FK_ef1994db9d0ac1b6a5c89b5f729 | FOREIGN KEY | FOREIGN KEY ("versionId") REFERENCES workflow_history("versionId") ON DELETE CASCADE |
| PK_14aa18b83513fb92d7523909e02 | PRIMARY KEY | PRIMARY KEY ("workflowId", "nodeId") |
| workflow_publication_trigger_status_createdAt_not_null | n | NOT NULL "createdAt" |
| workflow_publication_trigger_status_nodeId_not_null | n | NOT NULL "nodeId" |
| workflow_publication_trigger_status_status_not_null | n | NOT NULL status |
| workflow_publication_trigger_status_triggerKind_not_null | n | NOT NULL "triggerKind" |
| workflow_publication_trigger_status_updatedAt_not_null | n | NOT NULL "updatedAt" |
| workflow_publication_trigger_status_versionId_not_null | n | NOT NULL "versionId" |
| workflow_publication_trigger_status_workflowId_not_null | n | NOT NULL "workflowId" |
@ -46,6 +49,7 @@ erDiagram
text errorMessage
varchar_36_ nodeId
varchar_20_ status
varchar_20_ triggerKind
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId FK
varchar_36_ workflowId FK

View File

@ -0,0 +1,119 @@
# public.workflow_review_request
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| approvedAt | timestamp(3) with time zone | | true | | | |
| closedById | uuid | | true | | [public.user](public.user.md) | |
| createdAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| createdById | uuid | | true | | [public.user](public.user.md) | |
| decision | varchar(50) | 'pending'::character varying | false | | | Latest review outcome while the request is open |
| description | text | | true | | | |
| id | varchar(36) | | false | [public.workflow_review_request_authors](public.workflow_review_request_authors.md) [public.workflow_review_request_reviewers](public.workflow_review_request_reviewers.md) [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) | | |
| projectId | varchar(36) | | false | | [public.project](public.project.md) | |
| state | varchar(16) | 'open'::character varying | false | | | Review lifecycle: open reviews accept actions; closed reviews are done |
| title | varchar(255) | | false | | | |
| updatedAt | timestamp(3) with time zone | CURRENT_TIMESTAMP(3) | false | | | |
| updatedById | uuid | | true | | [public.user](public.user.md) | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| CHK_workflow_review_request_decision | CHECK | CHECK (((decision)::text = ANY ((ARRAY['pending'::character varying, 'changes_requested'::character varying, 'approved'::character varying])::text[]))) |
| CHK_workflow_review_request_state | CHECK | CHECK (((state)::text = ANY ((ARRAY['open'::character varying, 'closed'::character varying])::text[]))) |
| FK_21d5f5a831d2e38960030bb4f60 | FOREIGN KEY | FOREIGN KEY ("createdById") REFERENCES "user"(id) ON DELETE SET NULL |
| FK_2817c3a0245197b498818c447cb | FOREIGN KEY | FOREIGN KEY ("updatedById") REFERENCES "user"(id) ON DELETE SET NULL |
| FK_c218d1df94adc3b169dee3cc06c | FOREIGN KEY | FOREIGN KEY ("projectId") REFERENCES project(id) ON DELETE CASCADE |
| FK_d53ef208e6055f328dd7b897e51 | FOREIGN KEY | FOREIGN KEY ("closedById") REFERENCES "user"(id) ON DELETE SET NULL |
| PK_ae17b90023bcd05e003cd8f64dc | PRIMARY KEY | PRIMARY KEY (id) |
| workflow_review_request_createdAt_not_null | n | NOT NULL "createdAt" |
| workflow_review_request_decision_not_null | n | NOT NULL decision |
| workflow_review_request_id_not_null | n | NOT NULL id |
| workflow_review_request_projectId_not_null | n | NOT NULL "projectId" |
| workflow_review_request_state_not_null | n | NOT NULL state |
| workflow_review_request_title_not_null | n | NOT NULL title |
| workflow_review_request_updatedAt_not_null | n | NOT NULL "updatedAt" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_workflow_review_request_project_state | CREATE INDEX "IDX_workflow_review_request_project_state" ON public.workflow_review_request USING btree ("projectId", state) |
| PK_ae17b90023bcd05e003cd8f64dc | CREATE UNIQUE INDEX "PK_ae17b90023bcd05e003cd8f64dc" ON public.workflow_review_request USING btree (id) |
## Relations
```mermaid
erDiagram
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;closedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;createdById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request_authors" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_workflow" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request" }o--|| "public.project" : "FOREIGN KEY (#quot;projectId#quot;) REFERENCES project(id) ON DELETE CASCADE"
"public.workflow_review_request" }o--o| "public.user" : "FOREIGN KEY (#quot;updatedById#quot;) REFERENCES #quot;user#quot;(id) ON DELETE SET NULL"
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.workflow_review_request_authors" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.workflow_review_request_reviewers" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.workflow_review_request_workflow" {
varchar_36_ id
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
"public.project" {
timestamp_3__with_time_zone createdAt
uuid creatorId FK
json customTelemetryTags
varchar_512_ description
json icon
varchar_36_ id
varchar_255_ name
varchar_36_ type
timestamp_3__with_time_zone updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,73 @@
# public.workflow_review_request_authors
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| userId | uuid | | false | | [public.user](public.user.md) | |
| workflowReviewRequestId | varchar(36) | | false | | [public.workflow_review_request](public.workflow_review_request.md) | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| FK_a9c79ab0c352aa0496c39ea56a4 | FOREIGN KEY | FOREIGN KEY ("userId") REFERENCES "user"(id) ON DELETE CASCADE |
| FK_c255ae5087010c1ab73ac8684af | FOREIGN KEY | FOREIGN KEY ("workflowReviewRequestId") REFERENCES workflow_review_request(id) ON DELETE CASCADE |
| PK_ae197bb5135d422f6392a879e0c | PRIMARY KEY | PRIMARY KEY ("workflowReviewRequestId", "userId") |
| workflow_review_request_author_workflowReviewRequestId_not_null | n | NOT NULL "workflowReviewRequestId" |
| workflow_review_request_authors_userId_not_null | n | NOT NULL "userId" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| PK_ae197bb5135d422f6392a879e0c | CREATE UNIQUE INDEX "PK_ae197bb5135d422f6392a879e0c" ON public.workflow_review_request_authors USING btree ("workflowReviewRequestId", "userId") |
## Relations
```mermaid
erDiagram
"public.workflow_review_request_authors" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_review_request_authors" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_authors" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,74 @@
# public.workflow_review_request_reviewers
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| userId | uuid | | false | | [public.user](public.user.md) | |
| workflowReviewRequestId | varchar(36) | | false | | [public.workflow_review_request](public.workflow_review_request.md) | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| FK_81d0a2584aa4e8e5e0d6aa68f32 | FOREIGN KEY | FOREIGN KEY ("userId") REFERENCES "user"(id) ON DELETE CASCADE |
| FK_ba29e1cc5cdba43ce7b810b3ddd | FOREIGN KEY | FOREIGN KEY ("workflowReviewRequestId") REFERENCES workflow_review_request(id) ON DELETE CASCADE |
| PK_4715c6035e0ebc4f3e8716f1e34 | PRIMARY KEY | PRIMARY KEY ("workflowReviewRequestId", "userId") |
| workflow_review_request_review_workflowReviewRequestId_not_null | n | NOT NULL "workflowReviewRequestId" |
| workflow_review_request_reviewers_userId_not_null | n | NOT NULL "userId" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_workflow_review_request_reviewers_user | CREATE INDEX "IDX_workflow_review_request_reviewers_user" ON public.workflow_review_request_reviewers USING btree ("userId", "workflowReviewRequestId") |
| PK_4715c6035e0ebc4f3e8716f1e34 | CREATE UNIQUE INDEX "PK_4715c6035e0ebc4f3e8716f1e34" ON public.workflow_review_request_reviewers USING btree ("workflowReviewRequestId", "userId") |
## Relations
```mermaid
erDiagram
"public.workflow_review_request_reviewers" }o--|| "public.user" : "FOREIGN KEY (#quot;userId#quot;) REFERENCES #quot;user#quot;(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_reviewers" {
uuid userId FK
varchar_36_ workflowReviewRequestId FK
}
"public.user" {
timestamp_3__with_time_zone createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
uuid id
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
text mfaRecoveryCodes
text mfaSecret
varchar_255_ password
json personalizationAnswers
varchar_128_ roleSlug FK
json settings
timestamp_3__with_time_zone updatedAt
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,100 @@
# public.workflow_review_request_workflow
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| id | varchar(36) | | false | | | |
| workflowId | varchar(36) | | false | | [public.workflow_entity](public.workflow_entity.md) | |
| workflowReviewRequestId | varchar(36) | | false | | [public.workflow_review_request](public.workflow_review_request.md) | |
| workflowVersionId | varchar(36) | | true | | [public.workflow_history](public.workflow_history.md) | Pinned workflow_history version for this review item |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| FK_0f6f0f2c6d46b806fee02962ac2 | FOREIGN KEY | FOREIGN KEY ("workflowVersionId") REFERENCES workflow_history("versionId") ON DELETE SET NULL |
| FK_619f5b0544bcec60c3387e82f2f | FOREIGN KEY | FOREIGN KEY ("workflowId") REFERENCES workflow_entity(id) ON DELETE CASCADE |
| FK_e44b652e6dc99ef1364a2d85504 | FOREIGN KEY | FOREIGN KEY ("workflowReviewRequestId") REFERENCES workflow_review_request(id) ON DELETE CASCADE |
| PK_be3bf4facb054cf2b2b116b3b9c | PRIMARY KEY | PRIMARY KEY (id) |
| workflow_review_request_workfl_workflowReviewRequestId_not_null | n | NOT NULL "workflowReviewRequestId" |
| workflow_review_request_workflow_id_not_null | n | NOT NULL id |
| workflow_review_request_workflow_workflowId_not_null | n | NOT NULL "workflowId" |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_workflow_review_request_workflow_workflow_request | CREATE INDEX "IDX_workflow_review_request_workflow_workflow_request" ON public.workflow_review_request_workflow USING btree ("workflowId", "workflowReviewRequestId") |
| PK_be3bf4facb054cf2b2b116b3b9c | CREATE UNIQUE INDEX "PK_be3bf4facb054cf2b2b116b3b9c" ON public.workflow_review_request_workflow USING btree (id) |
| UQ_workflow_review_request_workflow_request_workflow | CREATE UNIQUE INDEX "UQ_workflow_review_request_workflow_request_workflow" ON public.workflow_review_request_workflow USING btree ("workflowReviewRequestId", "workflowId") |
## Relations
```mermaid
erDiagram
"public.workflow_review_request_workflow" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE"
"public.workflow_review_request_workflow" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE"
"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL"
"public.workflow_review_request_workflow" {
varchar_36_ id
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
"public.workflow_entity" {
boolean active
varchar_36_ activeVersionId FK
json connections
timestamp_3__with_time_zone createdAt
text description
varchar_36_ id
boolean isArchived
json meta
varchar_128_ name
json nodeGroups
json nodes
varchar_36_ parentFolderId FK
json pinData
json settings
varchar sourceWorkflowId
json staticData
integer triggerCount
timestamp_3__with_time_zone updatedAt
integer versionCounter
character_36_ versionId
}
"public.workflow_review_request" {
timestamp_3__with_time_zone approvedAt
uuid closedById FK
timestamp_3__with_time_zone createdAt
uuid createdById FK
varchar_50_ decision
text description
varchar_36_ id
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
timestamp_3__with_time_zone updatedAt
uuid updatedById FK
}
"public.workflow_history" {
varchar_255_ authors
boolean autosaved
json connections
timestamp_3__with_time_zone createdAt
text description
varchar_128_ name
json nodeGroups
json nodes
timestamp_3__with_time_zone updatedAt
varchar_36_ versionId
varchar_36_ workflowId FK
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -10,14 +10,18 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| ---- | ------- | ------- | ---- |
| [agent_chat_subscriptions](agent_chat_subscriptions.md) | 6 | | table |
| [agent_checkpoints](agent_checkpoints.md) | 6 | | table |
| [agent_execution](agent_execution.md) | 18 | | table |
| [agent_eval_dataset](agent_eval_dataset.md) | 10 | | table |
| [agent_eval_rating](agent_eval_rating.md) | 8 | | table |
| [agent_eval_result](agent_eval_result.md) | 15 | | table |
| [agent_eval_run](agent_eval_run.md) | 14 | | table |
| [agent_execution](agent_execution.md) | 19 | | table |
| [agent_execution_threads](agent_execution_threads.md) | 17 | | table |
| [agent_files](agent_files.md) | 8 | | table |
| [agent_history](agent_history.md) | 9 | | table |
| [agent_task_definition](agent_task_definition.md) | 7 | | table |
| [agent_task_run_lock](agent_task_run_lock.md) | 6 | | table |
| [agent_task_snapshot](agent_task_snapshot.md) | 8 | | table |
| [agents](agents.md) | 11 | | table |
| [agents](agents.md) | 12 | | table |
| [agents_memory_entries](agents_memory_entries.md) | 13 | | table |
| [agents_memory_entry_cursors](agents_memory_entry_cursors.md) | 6 | | table |
| [agents_memory_entry_locks](agents_memory_entry_locks.md) | 6 | | table |
@ -40,7 +44,7 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [chat_hub_sessions](chat_hub_sessions.md) | 13 | | table |
| [chat_hub_tools](chat_hub_tools.md) | 9 | | table |
| [credential_dependency](credential_dependency.md) | 5 | | table |
| [credentials_entity](credentials_entity.md) | 11 | | table |
| [credentials_entity](credentials_entity.md) | 12 | | table |
| [data_table](data_table.md) | 5 | | table |
| [data_table_column](data_table_column.md) | 7 | | table |
| [deployment_key](deployment_key.md) | 7 | | table |
@ -62,7 +66,8 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [insights_raw](insights_raw.md) | 5 | | table |
| [installed_nodes](installed_nodes.md) | 4 | | table |
| [installed_packages](installed_packages.md) | 6 | | table |
| [instance_ai_checkpoints](instance_ai_checkpoints.md) | 8 | | table |
| [instance_ai_checkpoints](instance_ai_checkpoints.md) | 9 | | table |
| [instance_ai_events](instance_ai_events.md) | 7 | | table |
| [instance_ai_iteration_logs](instance_ai_iteration_logs.md) | 6 | | table |
| [instance_ai_mcp_registry_connections](instance_ai_mcp_registry_connections.md) | 7 | | table |
| [instance_ai_messages](instance_ai_messages.md) | 8 | | table |
@ -76,6 +81,7 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [instance_ai_thread_grants](instance_ai_thread_grants.md) | 5 | | table |
| [instance_ai_threads](instance_ai_threads.md) | 7 | | table |
| [instance_ai_workflow_snapshots](instance_ai_workflow_snapshots.md) | 7 | | table |
| [instance_credential_assignment](instance_credential_assignment.md) | 4 | | table |
| [instance_version_history](instance_version_history.md) | 5 | | table |
| [invalid_auth_token](invalid_auth_token.md) | 2 | | table |
| [mcp_registry_server](mcp_registry_server.md) | 7 | | table |
@ -83,7 +89,7 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [oauth_authorization_codes](oauth_authorization_codes.md) | 13 | | table |
| [oauth_clients](oauth_clients.md) | 9 | | table |
| [oauth_refresh_tokens](oauth_refresh_tokens.md) | 7 | | table |
| [oauth_user_consents](oauth_user_consents.md) | 4 | | table |
| [oauth_user_consents](oauth_user_consents.md) | 5 | | table |
| [processed_data](processed_data.md) | 5 | | table |
| [project](project.md) | 9 | | table |
| [project_relation](project_relation.md) | 5 | | table |
@ -93,7 +99,7 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [role_mapping_rule_project](role_mapping_rule_project.md) | 2 | | table |
| [role_scope](role_scope.md) | 2 | | table |
| [scheduled_job](scheduled_job.md) | 19 | | table |
| [scheduled_task](scheduled_task.md) | 16 | | table |
| [scheduled_task](scheduled_task.md) | 17 | | table |
| [scope](scope.md) | 3 | | table |
| [secrets_provider_connection](secrets_provider_connection.md) | 7 | | table |
| [settings](settings.md) | 3 | | table |
@ -115,9 +121,13 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand.
| [workflow_entity](workflow_entity.md) | 20 | | table |
| [workflow_history](workflow_history.md) | 11 | | table |
| [workflow_publication_outbox](workflow_publication_outbox.md) | 7 | | table |
| [workflow_publication_trigger_status](workflow_publication_trigger_status.md) | 7 | | table |
| [workflow_publication_trigger_status](workflow_publication_trigger_status.md) | 8 | | table |
| [workflow_publish_history](workflow_publish_history.md) | 6 | | table |
| [workflow_published_version](workflow_published_version.md) | 4 | | table |
| [workflow_review_request](workflow_review_request.md) | 12 | | table |
| [workflow_review_request_authors](workflow_review_request_authors.md) | 2 | | table |
| [workflow_review_request_reviewers](workflow_review_request_reviewers.md) | 2 | | table |
| [workflow_review_request_workflow](workflow_review_request_workflow.md) | 4 | | table |
| [workflow_statistics](workflow_statistics.md) | 7 | | table |
| [workflows_tags](workflows_tags.md) | 2 | | table |
@ -128,6 +138,13 @@ erDiagram
"agent_chat_subscriptions" |o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_checkpoints" }o--o| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_dataset" }o--o| "user" : "FOREIGN KEY (createdById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_eval_dataset" }o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_rating" }o--o| "user" : "FOREIGN KEY (ratedById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_eval_rating" }o--|| "agent_eval_result" : "FOREIGN KEY (resultId) REFERENCES agent_eval_result (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_result" }o--|| "agent_eval_run" : "FOREIGN KEY (runId) REFERENCES agent_eval_run (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_run" }o--o| "user" : "FOREIGN KEY (createdById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_eval_run" }o--|| "agent_eval_dataset" : "FOREIGN KEY (datasetId) REFERENCES agent_eval_dataset (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_execution" }o--|| "agent_execution_threads" : "FOREIGN KEY (threadId) REFERENCES agent_execution_threads (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_execution_threads" }o--o| "agent_history" : "FOREIGN KEY (taskVersionId) REFERENCES agent_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_execution_threads" }o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -138,8 +155,8 @@ erDiagram
"agent_task_definition" }o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_task_run_lock" |o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_task_snapshot" |o--|| "agent_history" : "FOREIGN KEY (versionId) REFERENCES agent_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agents" }o--|| "project" : "FOREIGN KEY (projectId) REFERENCES project (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agents" }o--o| "agent_history" : "FOREIGN KEY (activeVersionId) REFERENCES agent_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agents" }o--|| "project" : "FOREIGN KEY (projectId) REFERENCES project (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agents_memory_entries" }o--o| "agents_memory_entries" : "FOREIGN KEY (supersededBy) REFERENCES agents_memory_entries (id) ON UPDATE NO ACTION ON DELETE NO ACTION MATCH NONE"
"agents_memory_entries" }o--|| "agents_resources" : "FOREIGN KEY (resourceId) REFERENCES agents_resources (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agents_memory_entries" }o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -210,6 +227,7 @@ erDiagram
"insights_raw" }o--|| "insights_metadata" : "FOREIGN KEY (metaId) REFERENCES insights_metadata (metaId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"installed_nodes" }o--|| "installed_packages" : "FOREIGN KEY (package) REFERENCES installed_packages (packageName) ON UPDATE CASCADE ON DELETE CASCADE MATCH NONE"
"instance_ai_checkpoints" }o--|| "instance_ai_threads" : "FOREIGN KEY (threadId) REFERENCES instance_ai_threads (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_events" |o--|| "instance_ai_threads" : "FOREIGN KEY (threadId) REFERENCES instance_ai_threads (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_iteration_logs" }o--|| "instance_ai_threads" : "FOREIGN KEY (threadId) REFERENCES instance_ai_threads (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_mcp_registry_connections" }o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_mcp_registry_connections" }o--|| "mcp_registry_server" : "FOREIGN KEY (serverSlug) REFERENCES mcp_registry_server (slug) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -228,6 +246,7 @@ erDiagram
"instance_ai_thread_grants" |o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_thread_grants" |o--|| "instance_ai_threads" : "FOREIGN KEY (threadId) REFERENCES instance_ai_threads (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_ai_threads" }o--|| "project" : "FOREIGN KEY (projectId) REFERENCES project (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"instance_credential_assignment" }o--|| "credentials_entity" : "FOREIGN KEY (credentialId) REFERENCES credentials_entity (id) ON UPDATE NO ACTION ON DELETE RESTRICT MATCH NONE"
"oauth_access_tokens" }o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"oauth_access_tokens" }o--|| "oauth_clients" : "FOREIGN KEY (clientId) REFERENCES oauth_clients (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"oauth_authorization_codes" }o--|| "oauth_clients" : "FOREIGN KEY (clientId) REFERENCES oauth_clients (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -272,8 +291,8 @@ erDiagram
"workflow_entity" }o--o| "workflow_history" : "FOREIGN KEY (activeVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE RESTRICT MATCH NONE"
"workflow_entity" }o--o| "folder" : "FOREIGN KEY (parentFolderId) REFERENCES folder (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_history" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_publication_trigger_status" }o--|| "workflow_history" : "FOREIGN KEY (versionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_publication_trigger_status" |o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_publication_trigger_status" }o--|| "workflow_history" : "FOREIGN KEY (versionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_publish_history" }o--o| "workflow_history" : "FOREIGN KEY (versionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_publish_history" }o--o| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_publish_history" }o--o| "workflow_history" : "FOREIGN KEY (versionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -282,6 +301,17 @@ erDiagram
"workflow_published_version" |o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE RESTRICT MATCH NONE"
"workflow_published_version" |o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_published_version" }o--|| "workflow_history" : "FOREIGN KEY (publishedVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request" }o--o| "user" : "FOREIGN KEY (closedById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_review_request" }o--o| "user" : "FOREIGN KEY (updatedById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_review_request" }o--o| "user" : "FOREIGN KEY (createdById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_review_request" }o--|| "project" : "FOREIGN KEY (projectId) REFERENCES project (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_authors" |o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_authors" |o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_reviewers" |o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_reviewers" |o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"workflow_review_request_workflow" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflow_review_request_workflow" }o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflows_tags" |o--|| "tag_entity" : "FOREIGN KEY (tagId) REFERENCES tag_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"workflows_tags" |o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
@ -301,6 +331,61 @@ erDiagram
TEXT state
datetime_3_ updatedAt
}
"agent_eval_dataset" {
varchar_36_ agentId FK
TEXT columnMapping
datetime_3_ createdAt
varchar createdById FK
TEXT datasetRef
varchar_32_ datasetSource
TEXT description
varchar_36_ id PK
varchar_128_ name
datetime_3_ updatedAt
}
"agent_eval_rating" {
TEXT comment
TEXT correction
datetime_3_ createdAt
varchar_36_ id PK
varchar ratedById FK
varchar_36_ resultId FK
datetime_3_ updatedAt
varchar_8_ vote
}
"agent_eval_result" {
datetime_3_ completedAt
datetime_3_ createdAt
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT input
TEXT metrics
TEXT output
datetime_3_ runAt
varchar_36_ runId FK
INTEGER runIndex
varchar_255_ sourceRowId
varchar status
TEXT toolCalls
datetime_3_ updatedAt
}
"agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
datetime_3_ completedAt
datetime_3_ createdAt
varchar createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT metrics
datetime_3_ runAt
varchar_255_ runningInstanceId
varchar status
datetime_3_ updatedAt
}
"agent_execution" {
INTEGER completionTokens
REAL cost
@ -315,6 +400,7 @@ erDiagram
datetime_3_ startedAt
varchar_16_ status
datetime_3_ stoppedAt
VARCHAR_2_ storedAt
varchar_128_ threadId FK
TEXT timeline
INTEGER totalTokens
@ -390,6 +476,7 @@ erDiagram
}
"agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
datetime_3_ createdAt
varchar_36_ id PK
TEXT integrations
@ -627,6 +714,7 @@ erDiagram
varchar_16_ resolverId FK
varchar_32_ type
datetime_3_ updatedAt
VARCHAR_16_ usageScope
}
"data_table" {
datetime_3_ createdAt
@ -788,7 +876,7 @@ erDiagram
bigint value
}
"installed_nodes" {
INTEGER latestVersion
REAL latestVersion
char_200_ name PK
char_214_ package FK
char_200_ type
@ -804,6 +892,7 @@ erDiagram
"instance_ai_checkpoints" {
datetime_3_ createdAt
datetime_3_ expiredAt
VARCHAR_64_ hostRunId
varchar_255_ key PK
varchar_255_ resourceId
varchar_255_ runId
@ -811,6 +900,15 @@ erDiagram
varchar threadId FK
datetime_3_ updatedAt
}
"instance_ai_events" {
datetime_3_ createdAt
TEXT payload
varchar_64_ runId
INTEGER seq PK
varchar threadId PK
varchar_64_ type
datetime_3_ updatedAt
}
"instance_ai_iteration_logs" {
datetime_3_ createdAt
TEXT entry
@ -958,6 +1056,12 @@ erDiagram
datetime_3_ updatedAt
varchar_255_ workflowName PK
}
"instance_credential_assignment" {
datetime_3_ createdAt
varchar_36_ credentialId FK
varchar_128_ credentialUseId PK
datetime_3_ updatedAt
}
"instance_version_history" {
datetime_3_ createdAt
INTEGER id
@ -1022,6 +1126,7 @@ erDiagram
varchar clientId FK
bigint grantedAt
INTEGER id
TEXT scope
varchar userId FK
}
"processed_data" {
@ -1107,6 +1212,7 @@ erDiagram
INTEGER attempts
varchar_255_ claimedBy
datetime_3_ createdAt
datetime_3_ dispatchedAt
TEXT errorMessage
datetime_3_ finishedAt
INTEGER id
@ -1337,6 +1443,7 @@ erDiagram
TEXT errorMessage
varchar_36_ nodeId PK
varchar_20_ status
varchar_20_ triggerKind
datetime_3_ updatedAt
varchar_36_ versionId FK
varchar_36_ workflowId PK
@ -1355,6 +1462,34 @@ erDiagram
datetime_3_ updatedAt
varchar_36_ workflowId PK
}
"workflow_review_request" {
datetime_3_ approvedAt
varchar closedById FK
datetime_3_ createdAt
varchar createdById FK
varchar_50_ decision
TEXT description
varchar_36_ id PK
varchar_36_ projectId FK
varchar_16_ state
varchar_255_ title
datetime_3_ updatedAt
varchar updatedById FK
}
"workflow_review_request_authors" {
varchar userId PK
varchar_36_ workflowReviewRequestId PK
}
"workflow_review_request_reviewers" {
varchar userId PK
varchar_36_ workflowReviewRequestId PK
}
"workflow_review_request_workflow" {
varchar_36_ id PK
varchar_36_ workflowId FK
varchar_36_ workflowReviewRequestId FK
varchar_36_ workflowVersionId FK
}
"workflow_statistics" {
INTEGER count
INTEGER id

View File

@ -57,6 +57,7 @@ erDiagram
}
"agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
datetime_3_ createdAt
varchar_36_ id PK
TEXT integrations

View File

@ -54,6 +54,7 @@ erDiagram
}
"agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
datetime_3_ createdAt
varchar_36_ id PK
TEXT integrations

View File

@ -0,0 +1,118 @@
# agent_eval_dataset
## Description
<details>
<summary><strong>Table Definition</strong></summary>
```sql
CREATE TABLE "agent_eval_dataset" ("id" varchar(36) PRIMARY KEY NOT NULL, "name" varchar(128) NOT NULL, "description" text, "agentId" varchar(36) NOT NULL, "datasetSource" varchar(32) NOT NULL, "datasetRef" text NOT NULL, "columnMapping" text, "createdById" varchar, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "CHK_agent_eval_dataset_datasetSource" CHECK ("datasetSource" IN ('data_table', 'google_sheets')), CONSTRAINT "FK_9d3a6fd750f7746de453cf4d5ed" FOREIGN KEY ("agentId") REFERENCES "agents" ("id") ON DELETE CASCADE, CONSTRAINT "FK_eda9e5fa5558d3f16bc2f6c21b6" FOREIGN KEY ("createdById") REFERENCES "user" ("id") ON DELETE SET NULL)
```
</details>
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| agentId | varchar(36) | | false | | [agents](agents.md) | |
| columnMapping | TEXT | | true | | | |
| createdAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
| createdById | varchar | | true | | [user](user.md) | |
| datasetRef | TEXT | | false | | | |
| datasetSource | varchar(32) | | false | | | |
| description | TEXT | | true | | | |
| id | varchar(36) | | false | [agent_eval_run](agent_eval_run.md) | | |
| name | varchar(128) | | false | | | |
| updatedAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| - | CHECK | CHECK ("datasetSource" IN ('data_table', 'google_sheets')) |
| - (Foreign key ID: 0) | FOREIGN KEY | FOREIGN KEY (createdById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE |
| - (Foreign key ID: 1) | FOREIGN KEY | FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE |
| id | PRIMARY KEY | PRIMARY KEY (id) |
| sqlite_autoindex_agent_eval_dataset_1 | PRIMARY KEY | PRIMARY KEY (id) |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_9d3a6fd750f7746de453cf4d5e | CREATE INDEX "IDX_9d3a6fd750f7746de453cf4d5e" ON "agent_eval_dataset" ("agentId") |
| sqlite_autoindex_agent_eval_dataset_1 | PRIMARY KEY (id) |
## Relations
```mermaid
erDiagram
"agent_eval_dataset" }o--|| "agents" : "FOREIGN KEY (agentId) REFERENCES agents (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_dataset" }o--o| "user" : "FOREIGN KEY (createdById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_eval_run" }o--|| "agent_eval_dataset" : "FOREIGN KEY (datasetId) REFERENCES agent_eval_dataset (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_dataset" {
varchar_36_ agentId FK
TEXT columnMapping
datetime_3_ createdAt
varchar createdById FK
TEXT datasetRef
varchar_32_ datasetSource
TEXT description
varchar_36_ id PK
varchar_128_ name
datetime_3_ updatedAt
}
"agents" {
varchar_36_ activeVersionId FK
boolean availableInMCP
datetime_3_ createdAt
varchar_36_ id PK
TEXT integrations
varchar_128_ name
varchar_255_ projectId FK
TEXT schema
TEXT skills
TEXT tools
datetime_3_ updatedAt
varchar_36_ versionId
}
"user" {
datetime_3_ createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
varchar id PK
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
TEXT mfaRecoveryCodes
TEXT mfaSecret
varchar password
TEXT personalizationAnswers
varchar_128_ roleSlug FK
TEXT settings
datetime_3_ updatedAt
}
"agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
datetime_3_ completedAt
datetime_3_ createdAt
varchar createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT metrics
datetime_3_ runAt
varchar_255_ runningInstanceId
varchar status
datetime_3_ updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,100 @@
# agent_eval_rating
## Description
<details>
<summary><strong>Table Definition</strong></summary>
```sql
CREATE TABLE "agent_eval_rating" ("id" varchar(36) PRIMARY KEY NOT NULL, "resultId" varchar(36) NOT NULL, "vote" varchar(8) NOT NULL, "comment" text, "correction" text, "ratedById" varchar, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "CHK_agent_eval_rating_vote" CHECK ("vote" IN ('up', 'down')), CONSTRAINT "FK_9cadae6591c64498f1b58a2cef3" FOREIGN KEY ("resultId") REFERENCES "agent_eval_result" ("id") ON DELETE CASCADE, CONSTRAINT "FK_e06a7408573a3e152e673977d2c" FOREIGN KEY ("ratedById") REFERENCES "user" ("id") ON DELETE SET NULL)
```
</details>
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| comment | TEXT | | true | | | |
| correction | TEXT | | true | | | |
| createdAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
| id | varchar(36) | | false | | | |
| ratedById | varchar | | true | | [user](user.md) | |
| resultId | varchar(36) | | false | | [agent_eval_result](agent_eval_result.md) | |
| updatedAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
| vote | varchar(8) | | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| - | CHECK | CHECK ("vote" IN ('up', 'down')) |
| - (Foreign key ID: 0) | FOREIGN KEY | FOREIGN KEY (ratedById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE |
| - (Foreign key ID: 1) | FOREIGN KEY | FOREIGN KEY (resultId) REFERENCES agent_eval_result (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE |
| id | PRIMARY KEY | PRIMARY KEY (id) |
| sqlite_autoindex_agent_eval_rating_1 | PRIMARY KEY | PRIMARY KEY (id) |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_9cadae6591c64498f1b58a2cef | CREATE INDEX "IDX_9cadae6591c64498f1b58a2cef" ON "agent_eval_rating" ("resultId") |
| sqlite_autoindex_agent_eval_rating_1 | PRIMARY KEY (id) |
## Relations
```mermaid
erDiagram
"agent_eval_rating" }o--o| "user" : "FOREIGN KEY (ratedById) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE"
"agent_eval_rating" }o--|| "agent_eval_result" : "FOREIGN KEY (resultId) REFERENCES agent_eval_result (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_rating" {
TEXT comment
TEXT correction
datetime_3_ createdAt
varchar_36_ id PK
varchar ratedById FK
varchar_36_ resultId FK
datetime_3_ updatedAt
varchar_8_ vote
}
"user" {
datetime_3_ createdAt
boolean disabled
varchar_255_ email
varchar_32_ firstName
varchar id PK
date lastActiveAt
varchar_32_ lastName
boolean mfaEnabled
TEXT mfaRecoveryCodes
TEXT mfaSecret
varchar password
TEXT personalizationAnswers
varchar_128_ roleSlug FK
TEXT settings
datetime_3_ updatedAt
}
"agent_eval_result" {
datetime_3_ completedAt
datetime_3_ createdAt
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT input
TEXT metrics
TEXT output
datetime_3_ runAt
varchar_36_ runId FK
INTEGER runIndex
varchar_255_ sourceRowId
varchar status
TEXT toolCalls
datetime_3_ updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

View File

@ -0,0 +1,105 @@
# agent_eval_result
## Description
<details>
<summary><strong>Table Definition</strong></summary>
```sql
CREATE TABLE "agent_eval_result" ("id" varchar(36) PRIMARY KEY NOT NULL, "runId" varchar(36) NOT NULL, "sourceRowId" varchar(255), "runIndex" integer, "status" varchar NOT NULL, "input" text, "output" text, "toolCalls" text, "metrics" text, "runAt" datetime(3), "completedAt" datetime(3), "errorCode" varchar(255), "errorDetails" text, "createdAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), "updatedAt" datetime(3) NOT NULL DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), CONSTRAINT "CHK_agent_eval_result_status" CHECK ("status" IN ('new', 'running', 'success', 'error', 'cancelled')), CONSTRAINT "FK_40a2d1248a6d984f442de2fac1b" FOREIGN KEY ("runId") REFERENCES "agent_eval_run" ("id") ON DELETE CASCADE)
```
</details>
## Columns
| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| completedAt | datetime(3) | | true | | | |
| createdAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
| errorCode | varchar(255) | | true | | | |
| errorDetails | TEXT | | true | | | |
| id | varchar(36) | | false | [agent_eval_rating](agent_eval_rating.md) | | |
| input | TEXT | | true | | | |
| metrics | TEXT | | true | | | |
| output | TEXT | | true | | | |
| runAt | datetime(3) | | true | | | |
| runId | varchar(36) | | false | | [agent_eval_run](agent_eval_run.md) | |
| runIndex | INTEGER | | true | | | |
| sourceRowId | varchar(255) | | true | | | |
| status | varchar | | false | | | |
| toolCalls | TEXT | | true | | | |
| updatedAt | datetime(3) | STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') | false | | | |
## Constraints
| Name | Type | Definition |
| ---- | ---- | ---------- |
| - | CHECK | CHECK ("status" IN ('new', 'running', 'success', 'error', 'cancelled')) |
| - (Foreign key ID: 0) | FOREIGN KEY | FOREIGN KEY (runId) REFERENCES agent_eval_run (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE |
| id | PRIMARY KEY | PRIMARY KEY (id) |
| sqlite_autoindex_agent_eval_result_1 | PRIMARY KEY | PRIMARY KEY (id) |
## Indexes
| Name | Definition |
| ---- | ---------- |
| IDX_40a2d1248a6d984f442de2fac1 | CREATE INDEX "IDX_40a2d1248a6d984f442de2fac1" ON "agent_eval_result" ("runId") |
| sqlite_autoindex_agent_eval_result_1 | PRIMARY KEY (id) |
## Relations
```mermaid
erDiagram
"agent_eval_rating" }o--|| "agent_eval_result" : "FOREIGN KEY (resultId) REFERENCES agent_eval_result (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_result" }o--|| "agent_eval_run" : "FOREIGN KEY (runId) REFERENCES agent_eval_run (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE"
"agent_eval_result" {
datetime_3_ completedAt
datetime_3_ createdAt
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT input
TEXT metrics
TEXT output
datetime_3_ runAt
varchar_36_ runId FK
INTEGER runIndex
varchar_255_ sourceRowId
varchar status
TEXT toolCalls
datetime_3_ updatedAt
}
"agent_eval_rating" {
TEXT comment
TEXT correction
datetime_3_ createdAt
varchar_36_ id PK
varchar ratedById FK
varchar_36_ resultId FK
datetime_3_ updatedAt
varchar_8_ vote
}
"agent_eval_run" {
varchar_36_ agentVersionId
boolean cancelRequested
datetime_3_ completedAt
datetime_3_ createdAt
varchar createdById FK
varchar_36_ datasetId FK
varchar_255_ errorCode
TEXT errorDetails
varchar_36_ id PK
TEXT metrics
datetime_3_ runAt
varchar_255_ runningInstanceId
varchar status
datetime_3_ updatedAt
}
```
---
> Generated by [tbls](https://github.com/k1LoW/tbls)

Some files were not shown because too many files have changed in this diff Show More