feat(editor): Support partial executions of tool nodes (#14945)

This commit is contained in:
Benjamin Schroth
2025-05-01 08:32:47 +02:00
committed by GitHub
parent 5fa41bd73a
commit 54dcdedece
21 changed files with 1132 additions and 22 deletions

View File

@@ -315,3 +315,22 @@ export function traverseNodeParameters(payload: unknown, collectedArgs: FromAIAr
Object.values(payload).forEach((value) => traverseNodeParameters(value, collectedArgs));
}
}
export function traverseNodeParametersWithParamNames(
payload: unknown,
collectedArgs: Map<string, FromAIArgument>,
name?: string,
) {
if (typeof payload === 'string') {
const fromAICalls = extractFromAICalls(payload);
fromAICalls.forEach((call) => collectedArgs.set(name as string, call));
} else if (Array.isArray(payload)) {
payload.forEach((item: unknown, index: number) =>
traverseNodeParametersWithParamNames(item, collectedArgs, name + `[${index}]`),
);
} else if (typeof payload === 'object' && payload !== null) {
for (const [key, value] of Object.entries(payload)) {
traverseNodeParametersWithParamNames(value, collectedArgs, name ? name + '.' + key : key);
}
}
}

View File

@@ -1556,5 +1556,9 @@ export function isTriggerNode(nodeTypeData: INodeTypeDescription) {
export function isExecutable(workflow: Workflow, node: INode, nodeTypeData: INodeTypeDescription) {
const outputs = getNodeOutputs(workflow, node, nodeTypeData);
const outputNames = getConnectionTypes(outputs);
return outputNames.includes(NodeConnectionTypes.Main) || isTriggerNode(nodeTypeData);
return (
outputNames.includes(NodeConnectionTypes.Main) ||
isTriggerNode(nodeTypeData) ||
nodeTypeData.usableAsTool === true
);
}