From b01032cfe92f28d6afa7609cfee81ea58e25ce37 Mon Sep 17 00:00:00 2001 From: "n8n-assistant[bot]" <100856346+n8n-assistant[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:45:13 +0000 Subject: [PATCH] fix(core): Preserve node aliases when generating AI tool variants (backport to release-candidate/2.31.x) (#34194) Co-authored-by: Alexander Gekov <40495748+alexander-gekov@users.noreply.github.com> Co-authored-by: Cursor --- .../__tests__/ai-tools.test.ts | 25 +++++++++++++++++++ packages/cli/src/tool-generation/utils.ts | 3 +++ 2 files changed, 28 insertions(+) diff --git a/packages/cli/src/tool-generation/__tests__/ai-tools.test.ts b/packages/cli/src/tool-generation/__tests__/ai-tools.test.ts index d6968452db4..03f1532338d 100644 --- a/packages/cli/src/tool-generation/__tests__/ai-tools.test.ts +++ b/packages/cli/src/tool-generation/__tests__/ai-tools.test.ts @@ -213,6 +213,31 @@ describe('ai-tools', () => { }); }); + it('should preserve codex alias so tool variants stay searchable by alias', () => { + fullNodeWrapper.description.codex = { + categories: ['Existing'], + subcategories: { + Existing: ['Category'], + }, + alias: ['scrape', 'crawl'], + }; + const result = convertNodeToAiTool(fullNodeWrapper); + expect(result.description.codex).toEqual({ + categories: ['AI'], + subcategories: { + AI: ['Tools'], + Tools: ['Other Tools'], + }, + resources: {}, + alias: ['scrape', 'crawl'], + }); + }); + + it('should not add an alias key when the source node has none', () => { + const result = convertNodeToAiTool(fullNodeWrapper); + expect(result.description.codex).not.toHaveProperty('alias'); + }); + it('should handle nodes with very long names', () => { fullNodeWrapper.description.name = 'veryLongNodeNameThatExceedsNormalLimits'.repeat(10); fullNodeWrapper.description.displayName = diff --git a/packages/cli/src/tool-generation/utils.ts b/packages/cli/src/tool-generation/utils.ts index c391e0d75c8..5ec518076a4 100644 --- a/packages/cli/src/tool-generation/utils.ts +++ b/packages/cli/src/tool-generation/utils.ts @@ -40,6 +40,8 @@ export function setToolCodex( ): void { const resources = description.codex?.resources ?? {}; const existingToolsSubcategory = description.codex?.subcategories?.Tools; + // Keep the original node's search aliases so tool variants stay discoverable + const alias = description.codex?.alias; description.codex = { categories: ['AI'], @@ -49,5 +51,6 @@ export function setToolCodex( preserveExisting && existingToolsSubcategory ? existingToolsSubcategory : [toolSubcategory], }, resources, + ...(alias && { alias }), }; }