n8n/packages/@n8n/instance-ai/evaluations/binaryChecks/checks/has-start-node.ts
Benjamin Schroth c961849226
feat(ai-builder): Add sub-agent evaluation harness with binary checks (no-changelog) (#28289)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 07:50:46 +00:00

44 lines
1.2 KiB
TypeScript

import type { BinaryCheck } from '../types';
import { isTriggerNode } from '../utils';
function hasDownstreamConnection(
sourceName: string,
connections: Record<string, unknown>,
): boolean {
const outputs = connections[sourceName];
if (typeof outputs !== 'object' || outputs === null) return false;
const main = (outputs as Record<string, unknown>).main;
if (!Array.isArray(main)) return false;
for (const outputSlot of main) {
if (Array.isArray(outputSlot) && outputSlot.length > 0) return true;
}
return false;
}
export const hasStartNode: BinaryCheck = {
name: 'has_start_node',
description: 'At least one trigger has a downstream node connected',
kind: 'deterministic',
run(workflow) {
const nodes = workflow.nodes ?? [];
if (nodes.length === 0) return { pass: false, comment: 'Workflow has no nodes' };
const connections = workflow.connections ?? {};
const triggers = nodes.filter((n) => isTriggerNode(n.type));
if (triggers.length === 0) {
return { pass: false, comment: 'No trigger node found' };
}
for (const trigger of triggers) {
if (hasDownstreamConnection(trigger.name, connections)) {
return { pass: true };
}
}
return { pass: false, comment: 'No trigger has a downstream node connected' };
},
};