mirror of
https://github.com/n8n-io/n8n.git
synced 2026-09-21 12:51:16 +08:00
fix: Skip AI tool generation for community trigger nodes (#29453)
This commit is contained in:
+51
@@ -625,6 +625,57 @@ describe('CommunityNodeTypesService', () => {
|
||||
expect(result.find((n) => n.name === 'n8n-nodes-test3.test3Tool')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should not create AI tool version for nodes with trigger group', async () => {
|
||||
const mockNodeTypes = [
|
||||
{
|
||||
name: 'n8n-nodes-wcrm.wCRMTrigger',
|
||||
packageName: 'n8n-nodes-wcrm',
|
||||
nodeDescription: {
|
||||
name: 'n8n-nodes-wcrm.wCRMTrigger',
|
||||
displayName: 'wCRM Trigger',
|
||||
group: ['trigger'],
|
||||
inputs: [],
|
||||
outputs: ['main'],
|
||||
usableAsTool: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
(getCommunityNodeTypes as jest.Mock).mockResolvedValueOnce(mockNodeTypes);
|
||||
|
||||
const result = await service.getCommunityNodeTypes();
|
||||
|
||||
expect(result.length).toBe(1); // only original, no tool version
|
||||
expect(result.find((n) => n.name === 'n8n-nodes-wcrm.wCRMTriggerTool')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should create AI tool version for nodes with "trigger" in the name but not in the group', async () => {
|
||||
// e.g. a node for the trigger.dev service — name contains "trigger" but it's not a trigger node
|
||||
const mockNodeTypes = [
|
||||
{
|
||||
name: 'n8n-nodes-triggerdev.triggerDevAction',
|
||||
packageName: 'n8n-nodes-triggerdev',
|
||||
nodeDescription: {
|
||||
name: 'n8n-nodes-triggerdev.triggerDevAction',
|
||||
displayName: 'Trigger.dev Action',
|
||||
group: [],
|
||||
inputs: ['main'],
|
||||
outputs: ['main'],
|
||||
usableAsTool: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
(getCommunityNodeTypes as jest.Mock).mockResolvedValueOnce(mockNodeTypes);
|
||||
|
||||
const result = await service.getCommunityNodeTypes();
|
||||
|
||||
expect(result.length).toBe(2); // original + tool version
|
||||
expect(
|
||||
result.find((n) => n.name === 'n8n-nodes-triggerdev.triggerDevActionTool'),
|
||||
).toBeDefined();
|
||||
});
|
||||
|
||||
it('should not mutate original node type when creating tool version', async () => {
|
||||
const mockNodeTypes = [
|
||||
{
|
||||
|
||||
@@ -148,7 +148,10 @@ export class CommunityNodeTypesService {
|
||||
|
||||
private createAiTools() {
|
||||
const usableAsTools = Array.from(this.communityNodeTypes.values()).filter(
|
||||
(nodeType) => nodeType.nodeDescription.usableAsTool && !isToolType(nodeType.name),
|
||||
(nodeType) =>
|
||||
nodeType.nodeDescription.usableAsTool &&
|
||||
!isToolType(nodeType.name) &&
|
||||
!nodeType.nodeDescription.group?.includes('trigger'),
|
||||
);
|
||||
const forbiddenCategories = ['Recommended Tools'];
|
||||
for (const nodeType of usableAsTools) {
|
||||
|
||||
Reference in New Issue
Block a user