@n8n/ai-workflow-builder 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/chains/prompt-categorization.d.ts +3 -0
- package/dist/chains/prompt-categorization.js +109 -0
- package/dist/chains/prompt-categorization.js.map +1 -0
- package/dist/chains/test/integration/test-helpers.d.ts +3 -0
- package/dist/chains/test/integration/test-helpers.js +16 -0
- package/dist/chains/test/integration/test-helpers.js.map +1 -0
- package/dist/tools/best-practices/chatbot.d.ts +7 -0
- package/dist/tools/best-practices/chatbot.js +118 -0
- package/dist/tools/best-practices/chatbot.js.map +1 -0
- package/dist/tools/best-practices/content-generation.d.ts +7 -0
- package/dist/tools/best-practices/content-generation.js +79 -0
- package/dist/tools/best-practices/content-generation.js.map +1 -0
- package/dist/tools/best-practices/data-extraction.d.ts +7 -0
- package/dist/tools/best-practices/data-extraction.js +105 -0
- package/dist/tools/best-practices/data-extraction.js.map +1 -0
- package/dist/tools/best-practices/form-input.d.ts +7 -0
- package/dist/tools/best-practices/form-input.js +173 -0
- package/dist/tools/best-practices/form-input.js.map +1 -0
- package/dist/tools/best-practices/index.d.ts +3 -0
- package/dist/tools/best-practices/index.js +27 -0
- package/dist/tools/best-practices/index.js.map +1 -0
- package/dist/tools/best-practices/scraping-and-research.d.ts +7 -0
- package/dist/tools/best-practices/scraping-and-research.js +147 -0
- package/dist/tools/best-practices/scraping-and-research.js.map +1 -0
- package/dist/tools/builder-tools.js +6 -0
- package/dist/tools/builder-tools.js.map +1 -1
- package/dist/tools/categorize-prompt.tool.d.ts +5 -0
- package/dist/tools/categorize-prompt.tool.js +84 -0
- package/dist/tools/categorize-prompt.tool.js.map +1 -0
- package/dist/tools/engines/node-search-engine.d.ts +0 -9
- package/dist/tools/engines/node-search-engine.js +52 -72
- package/dist/tools/engines/node-search-engine.js.map +1 -1
- package/dist/tools/get-best-practices.tool.d.ts +33 -0
- package/dist/tools/get-best-practices.tool.js +94 -0
- package/dist/tools/get-best-practices.tool.js.map +1 -0
- package/dist/tools/prompts/main-agent.prompt.js +23 -5
- package/dist/tools/prompts/main-agent.prompt.js.map +1 -1
- package/dist/tools/validate-workflow.tool.js +0 -16
- package/dist/tools/validate-workflow.tool.js.map +1 -1
- package/dist/types/best-practices.d.ts +6 -0
- package/dist/types/best-practices.js +3 -0
- package/dist/types/best-practices.js.map +1 -0
- package/dist/types/categorization.d.ts +23 -0
- package/dist/types/categorization.js +38 -0
- package/dist/types/categorization.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/tools.d.ts +4 -0
- package/dist/utils/stream-processor.js +85 -58
- package/dist/utils/stream-processor.js.map +1 -1
- package/dist/validation/checks/agent-prompt.js +1 -1
- package/dist/validation/checks/agent-prompt.js.map +1 -1
- package/dist/validation/checks/connections.js +32 -1
- package/dist/validation/checks/connections.js.map +1 -1
- package/dist/workflow-state.d.ts +1 -1
- package/dist/workflow-state.js.map +1 -1
- package/package.json +10 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET_BEST_PRACTICES_TOOL = void 0;
|
|
4
|
+
exports.createGetBestPracticesTool = createGetBestPracticesTool;
|
|
5
|
+
const tools_1 = require("@langchain/core/tools");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const best_practices_1 = require("../tools/best-practices");
|
|
9
|
+
const progress_1 = require("../tools/helpers/progress");
|
|
10
|
+
const response_1 = require("../tools/helpers/response");
|
|
11
|
+
const categorization_1 = require("../types/categorization");
|
|
12
|
+
const getBestPracticesSchema = zod_1.z.object({
|
|
13
|
+
techniques: zod_1.z
|
|
14
|
+
.array(zod_1.z.nativeEnum(categorization_1.WorkflowTechnique))
|
|
15
|
+
.min(1)
|
|
16
|
+
.describe('List of workflow techniques to retrieve best practices for'),
|
|
17
|
+
});
|
|
18
|
+
function formatBestPractices(techniques) {
|
|
19
|
+
const parts = [];
|
|
20
|
+
const foundDocs = [];
|
|
21
|
+
for (const technique of techniques) {
|
|
22
|
+
const doc = best_practices_1.documentation[technique];
|
|
23
|
+
if (doc) {
|
|
24
|
+
foundDocs.push(doc.getDocumentation());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (foundDocs.length > 0) {
|
|
28
|
+
parts.push('<best_practices>');
|
|
29
|
+
parts.push(foundDocs.join('\n---\n'));
|
|
30
|
+
parts.push('</best_practices>');
|
|
31
|
+
}
|
|
32
|
+
return parts.join('\n');
|
|
33
|
+
}
|
|
34
|
+
exports.GET_BEST_PRACTICES_TOOL = {
|
|
35
|
+
toolName: 'get_best_practices',
|
|
36
|
+
displayTitle: 'Getting best practices',
|
|
37
|
+
};
|
|
38
|
+
function createGetBestPracticesTool() {
|
|
39
|
+
const dynamicTool = (0, tools_1.tool)((input, config) => {
|
|
40
|
+
const reporter = (0, progress_1.createProgressReporter)(config, exports.GET_BEST_PRACTICES_TOOL.toolName, exports.GET_BEST_PRACTICES_TOOL.displayTitle);
|
|
41
|
+
try {
|
|
42
|
+
const validatedInput = getBestPracticesSchema.parse(input);
|
|
43
|
+
const { techniques } = validatedInput;
|
|
44
|
+
reporter.start(validatedInput);
|
|
45
|
+
reporter.progress(`Retrieving best practices for ${techniques.length} technique(s)...`);
|
|
46
|
+
const availableDocs = techniques.filter((technique) => best_practices_1.documentation[technique]);
|
|
47
|
+
if (availableDocs.length === 0) {
|
|
48
|
+
const message = `No best practices documentation available for the requested techniques: ${techniques.join(', ')}`;
|
|
49
|
+
reporter.complete({ techniques, found: 0 });
|
|
50
|
+
return (0, response_1.createSuccessResponse)(config, message);
|
|
51
|
+
}
|
|
52
|
+
const message = formatBestPractices(techniques);
|
|
53
|
+
reporter.complete({
|
|
54
|
+
techniques,
|
|
55
|
+
found: availableDocs.length,
|
|
56
|
+
missing: techniques.length - availableDocs.length,
|
|
57
|
+
});
|
|
58
|
+
return (0, response_1.createSuccessResponse)(config, message);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
62
|
+
const validationError = new errors_1.ValidationError('Invalid input parameters', {
|
|
63
|
+
extra: { errors: error.errors },
|
|
64
|
+
});
|
|
65
|
+
reporter.error(validationError);
|
|
66
|
+
return (0, response_1.createErrorResponse)(config, validationError);
|
|
67
|
+
}
|
|
68
|
+
const toolError = new errors_1.ToolExecutionError(error instanceof Error ? error.message : 'Unknown error occurred', {
|
|
69
|
+
toolName: exports.GET_BEST_PRACTICES_TOOL.toolName,
|
|
70
|
+
cause: error instanceof Error ? error : undefined,
|
|
71
|
+
});
|
|
72
|
+
reporter.error(toolError);
|
|
73
|
+
return (0, response_1.createErrorResponse)(config, toolError);
|
|
74
|
+
}
|
|
75
|
+
}, {
|
|
76
|
+
name: exports.GET_BEST_PRACTICES_TOOL.toolName,
|
|
77
|
+
description: `Retrieve best practices documentation for specific workflow techniques.
|
|
78
|
+
|
|
79
|
+
Use this tool after categorizing a user's prompt to get relevant guidance on:
|
|
80
|
+
- Recommended nodes and their purposes
|
|
81
|
+
- Common pitfalls to avoid
|
|
82
|
+
- Performance and resource management tips
|
|
83
|
+
- Implementation patterns and best practices
|
|
84
|
+
- General tips on building workflows that utilise the provided techniques
|
|
85
|
+
|
|
86
|
+
This helps build better workflows by applying proven patterns and avoiding common mistakes.`,
|
|
87
|
+
schema: getBestPracticesSchema,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
tool: dynamicTool,
|
|
91
|
+
...exports.GET_BEST_PRACTICES_TOOL,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=get-best-practices.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-best-practices.tool.js","sourceRoot":"","sources":["../../src/tools/get-best-practices.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,24 +33,28 @@ The system's operations processor ensures state consistency across all parallel
|
|
|
33
33
|
<workflow_creation_sequence>
|
|
34
34
|
Follow this proven sequence for creating robust workflows:
|
|
35
35
|
|
|
36
|
-
1. **
|
|
36
|
+
1. **Categorization Phase** - MANDATORY
|
|
37
|
+
- Categorize the prompt and search for best practices documentation based on the techniques found
|
|
38
|
+
- Why: Best practices help to inform which nodes to search for and use to build the workflow plus mistakes to avoid
|
|
39
|
+
|
|
40
|
+
2. **Discovery Phase** (parallel execution)
|
|
37
41
|
- Search for all required node types simultaneously
|
|
38
42
|
- Why: Ensures you work with actual available nodes, not assumptions
|
|
39
43
|
|
|
40
|
-
|
|
44
|
+
3. **Analysis Phase** (parallel execution)
|
|
41
45
|
- Get details for ALL nodes before proceeding
|
|
42
46
|
- Why: Understanding inputs/outputs prevents connection errors and ensures proper parameter configuration
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
4. **Creation Phase** (parallel execution)
|
|
45
49
|
- Add nodes individually by calling add_nodes for each node
|
|
46
50
|
- Execute multiple add_nodes calls in parallel for efficiency
|
|
47
51
|
- Why: Each node addition is independent, parallel execution is faster, and the operations processor ensures consistency
|
|
48
52
|
|
|
49
|
-
|
|
53
|
+
5. **Connection Phase** (parallel execution)
|
|
50
54
|
- Connect all nodes based on discovered input/output structure
|
|
51
55
|
- Why: Parallel connections are safe and faster
|
|
52
56
|
|
|
53
|
-
|
|
57
|
+
6. **Configuration Phase** (parallel execution) - MANDATORY
|
|
54
58
|
- ALWAYS configure nodes using update_node_parameters
|
|
55
59
|
- Even for "simple" nodes like HTTP Request, Set, etc.
|
|
56
60
|
- Configure all nodes in parallel for efficiency
|
|
@@ -63,6 +67,18 @@ Follow this proven sequence for creating robust workflows:
|
|
|
63
67
|
- Review <workflow_validation_report> and resolve any violations before finalizing
|
|
64
68
|
- Why: Ensures structural issues are surfaced early; rerun validation after major updates
|
|
65
69
|
|
|
70
|
+
<best_practices_compliance>
|
|
71
|
+
Enforcing best practice compliance is MANDATORY
|
|
72
|
+
|
|
73
|
+
You MUST enforce best practices even when the user doesn't explicitly request them. Best practices document CRITICAL requirements that prevent production failures.
|
|
74
|
+
|
|
75
|
+
When you retrieve best practices and see CRITICAL requirements:
|
|
76
|
+
1. Identify all MUST-HAVE nodes and configurations
|
|
77
|
+
2. Add them to your workflow plan
|
|
78
|
+
3. Include them in the workflow even if user didn't explicitly ask
|
|
79
|
+
4. Mention them in your setup response so user understands why they're there
|
|
80
|
+
</best_practices_compliance>
|
|
81
|
+
|
|
66
82
|
<parallel_node_creation_example>
|
|
67
83
|
Example: Creating and configuring a workflow (complete process):
|
|
68
84
|
|
|
@@ -92,6 +108,7 @@ Always determine connectionParametersReasoning before setting connectionParamete
|
|
|
92
108
|
- Does this node have dynamic inputs/outputs?
|
|
93
109
|
- Which parameters affect the connection structure?
|
|
94
110
|
- What mode or operation changes the available connections?
|
|
111
|
+
- Are there best practices which provide recommendations for connections?
|
|
95
112
|
</reasoning_first>
|
|
96
113
|
|
|
97
114
|
<parameter_examples>
|
|
@@ -435,6 +452,7 @@ When modifying existing nodes:
|
|
|
435
452
|
<handling_uncertainty>
|
|
436
453
|
When unsure about specific values:
|
|
437
454
|
- Add nodes and connections confidently
|
|
455
|
+
- investigate best practices to see if there are recommendations on how to proceed
|
|
438
456
|
- For uncertain parameters, use update_node_parameters with placeholders formatted exactly as "<__PLACEHOLDER_VALUE__VALUE_LABEL__>"
|
|
439
457
|
- Make VALUE_LABEL descriptive (e.g., "API endpoint URL", "Auth token header") so users know what to supply
|
|
440
458
|
- For tool nodes with dynamic values, use $fromAI expressions instead of placeholders
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-agent.prompt.js","sourceRoot":"","sources":["../../../src/tools/prompts/main-agent.prompt.ts"],"names":[],"mappings":";;;AAAA,qDAA6D;AAE7D,oEAAsE;AAEtE,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"main-agent.prompt.js","sourceRoot":"","sources":["../../../src/tools/prompts/main-agent.prompt.ts"],"names":[],"mappings":";;;AAAA,qDAA6D;AAE7D,oEAAsE;AAEtE,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAudpB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCxB,CAAC;AAEF,MAAM,2BAA2B,GAAG;;;oBAGhB,CAAC;AAER,QAAA,eAAe,GAAG,4BAAkB,CAAC,YAAY,CAAC;IAC9D;QACC,QAAQ;QACR;YACC;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY;aAClB;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gCAAiB;aACvB;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gBAAgB;aACtB;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,2BAA2B;gBACjC,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aACpC;SACD;KACD;IACD,CAAC,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC,CAAC"}
|
|
@@ -26,22 +26,6 @@ function createValidateWorkflowTool(parsedNodeTypes, logger) {
|
|
|
26
26
|
const violations = (0, programmatic_1.programmaticValidation)({
|
|
27
27
|
generatedWorkflow: state.workflowJSON,
|
|
28
28
|
}, parsedNodeTypes);
|
|
29
|
-
const blockingViolations = [
|
|
30
|
-
...violations.connections,
|
|
31
|
-
...violations.trigger,
|
|
32
|
-
...violations.agentPrompt,
|
|
33
|
-
...violations.tools,
|
|
34
|
-
...violations.fromAi,
|
|
35
|
-
].filter((violation) => violation.type === 'critical' || violation.type === 'major');
|
|
36
|
-
if (blockingViolations.length > 0) {
|
|
37
|
-
const summary = (0, workflow_validation_1.formatWorkflowValidation)(violations);
|
|
38
|
-
const validationError = new errors_1.ValidationError(`Workflow validation failed due to critical or major violations.\n${summary}`, { extra: { violations: blockingViolations } });
|
|
39
|
-
reporter.error(validationError);
|
|
40
|
-
logger?.warn('validate_workflow tool detected blocking violations', {
|
|
41
|
-
violations: blockingViolations,
|
|
42
|
-
});
|
|
43
|
-
return (0, response_1.createErrorResponse)(config, validationError);
|
|
44
|
-
}
|
|
45
29
|
const message = (0, workflow_validation_1.formatWorkflowValidation)(violations);
|
|
46
30
|
reporter.complete({ message });
|
|
47
31
|
return (0, response_1.createSuccessResponse)(config, message, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-workflow.tool.js","sourceRoot":"","sources":["../../src/tools/validate-workflow.tool.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"validate-workflow.tool.js","sourceRoot":"","sources":["../../src/tools/validate-workflow.tool.ts"],"names":[],"mappings":";;;AAqBA,gEAoEC;AAzFD,iDAA6C;AAG7C,6BAAwB;AAGxB,4DAAmE;AAEnE,sCAAgE;AAChE,sEAAwE;AACxE,iDAA4E;AAC5E,iDAAgF;AAChF,2CAAmD;AAEnD,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEpD,QAAA,sBAAsB,GAAoB;IACtD,QAAQ,EAAE,mBAAmB;IAC7B,YAAY,EAAE,qBAAqB;CACnC,CAAC;AAEF,SAAgB,0BAA0B,CACzC,eAAuC,EACvC,MAAe;IAEf,MAAM,WAAW,GAAG,IAAA,YAAI,EACvB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAA,iCAAsB,EACtC,MAAM,EACN,8BAAsB,CAAC,QAAQ,EAC/B,8BAAsB,CAAC,YAAY,CACnC,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE/B,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;YACjC,IAAA,yBAAc,EAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;YAExD,MAAM,UAAU,GAAG,IAAA,qCAAsB,EACxC;gBACC,iBAAiB,EAAE,KAAK,CAAC,YAAY;aACrC,EACD,eAAe,CACf,CAAC;YAEF,MAAM,OAAO,GAAG,IAAA,8CAAwB,EAAC,UAAU,CAAC,CAAC;YAErD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/B,OAAO,IAAA,gCAAqB,EAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,kBAAkB,EAAE,UAAU;aAC9B,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAG,IAAI,wBAAe,CAAC,0BAA0B,EAAE;oBACvE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;iBAC/B,CAAC,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAChC,OAAO,IAAA,8BAAmB,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,2BAAkB,CACvC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,EACtE;gBACC,QAAQ,EAAE,8BAAsB,CAAC,QAAQ;gBACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACjD,CACD,CAAC;YAEF,MAAM,EAAE,IAAI,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAEpE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO,IAAA,8BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC,EACD;QACC,IAAI,EAAE,8BAAsB,CAAC,QAAQ;QACrC,WAAW,EACV,qHAAqH;QACtH,MAAM,EAAE,sBAAsB;KAC9B,CACD,CAAC;IAEF,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,GAAG,8BAAsB;KACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"best-practices.js","sourceRoot":"","sources":["../../src/types/best-practices.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const WorkflowTechnique: {
|
|
2
|
+
readonly SCHEDULING: "scheduling";
|
|
3
|
+
readonly CHATBOT: "chatbot";
|
|
4
|
+
readonly FORM_INPUT: "form_input";
|
|
5
|
+
readonly SCRAPING_AND_RESEARCH: "scraping_and_research";
|
|
6
|
+
readonly MONITORING: "monitoring";
|
|
7
|
+
readonly ENRICHMENT: "enrichment";
|
|
8
|
+
readonly TRIAGE: "triage";
|
|
9
|
+
readonly CONTENT_GENERATION: "content_generation";
|
|
10
|
+
readonly DOCUMENT_PROCESSING: "document_processing";
|
|
11
|
+
readonly DATA_EXTRACTION: "data_extraction";
|
|
12
|
+
readonly DATA_ANALYSIS: "data_analysis";
|
|
13
|
+
readonly DATA_TRANSFORMATION: "data_transformation";
|
|
14
|
+
readonly NOTIFICATION: "notification";
|
|
15
|
+
readonly KNOWLEDGE_BASE: "knowledge_base";
|
|
16
|
+
readonly HUMAN_IN_THE_LOOP: "human_in_the_loop";
|
|
17
|
+
};
|
|
18
|
+
export type WorkflowTechniqueType = (typeof WorkflowTechnique)[keyof typeof WorkflowTechnique];
|
|
19
|
+
export declare const TechniqueDescription: Record<WorkflowTechniqueType, string>;
|
|
20
|
+
export interface PromptCategorization {
|
|
21
|
+
techniques: WorkflowTechniqueType[];
|
|
22
|
+
confidence?: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TechniqueDescription = exports.WorkflowTechnique = void 0;
|
|
4
|
+
exports.WorkflowTechnique = {
|
|
5
|
+
SCHEDULING: 'scheduling',
|
|
6
|
+
CHATBOT: 'chatbot',
|
|
7
|
+
FORM_INPUT: 'form_input',
|
|
8
|
+
SCRAPING_AND_RESEARCH: 'scraping_and_research',
|
|
9
|
+
MONITORING: 'monitoring',
|
|
10
|
+
ENRICHMENT: 'enrichment',
|
|
11
|
+
TRIAGE: 'triage',
|
|
12
|
+
CONTENT_GENERATION: 'content_generation',
|
|
13
|
+
DOCUMENT_PROCESSING: 'document_processing',
|
|
14
|
+
DATA_EXTRACTION: 'data_extraction',
|
|
15
|
+
DATA_ANALYSIS: 'data_analysis',
|
|
16
|
+
DATA_TRANSFORMATION: 'data_transformation',
|
|
17
|
+
NOTIFICATION: 'notification',
|
|
18
|
+
KNOWLEDGE_BASE: 'knowledge_base',
|
|
19
|
+
HUMAN_IN_THE_LOOP: 'human_in_the_loop',
|
|
20
|
+
};
|
|
21
|
+
exports.TechniqueDescription = {
|
|
22
|
+
[exports.WorkflowTechnique.SCHEDULING]: 'Running an action at a specific time or interval',
|
|
23
|
+
[exports.WorkflowTechnique.CHATBOT]: 'Receiving chat messages and replying (built-in chat, Telegram, Slack, MS Teams, etc.)',
|
|
24
|
+
[exports.WorkflowTechnique.FORM_INPUT]: 'Gathering data from users via forms',
|
|
25
|
+
[exports.WorkflowTechnique.SCRAPING_AND_RESEARCH]: 'Methodically collecting information from websites or APIs to compile structured data',
|
|
26
|
+
[exports.WorkflowTechnique.MONITORING]: 'Repeatedly checking service/website status and taking action when conditions are met',
|
|
27
|
+
[exports.WorkflowTechnique.ENRICHMENT]: 'Adding extra details to existing data by merging information from other sources',
|
|
28
|
+
[exports.WorkflowTechnique.TRIAGE]: 'Classifying data for routing or prioritization',
|
|
29
|
+
[exports.WorkflowTechnique.CONTENT_GENERATION]: 'Creating text, images, audio, video, etc.',
|
|
30
|
+
[exports.WorkflowTechnique.DOCUMENT_PROCESSING]: 'Taking action on content within files (PDFs, Word docs, images)',
|
|
31
|
+
[exports.WorkflowTechnique.DATA_EXTRACTION]: 'Pulling specific information from structured or unstructured inputs',
|
|
32
|
+
[exports.WorkflowTechnique.DATA_ANALYSIS]: 'Examining data to find patterns, trends, anomalies, or insights',
|
|
33
|
+
[exports.WorkflowTechnique.DATA_TRANSFORMATION]: 'Cleaning, formatting, or restructuring data (including summarization)',
|
|
34
|
+
[exports.WorkflowTechnique.NOTIFICATION]: 'Sending alerts or updates via email, chat, SMS when events occur',
|
|
35
|
+
[exports.WorkflowTechnique.KNOWLEDGE_BASE]: 'Building or using a centralized information collection (usually vector database for LLM use)',
|
|
36
|
+
[exports.WorkflowTechnique.HUMAN_IN_THE_LOOP]: 'Pausing for human decision/input before resuming',
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=categorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categorization.js","sourceRoot":"","sources":["../../src/types/categorization.ts"],"names":[],"mappings":";;;AAGa,QAAA,iBAAiB,GAAG;IAEhC,UAAU,EAAE,YAAY;IAExB,OAAO,EAAE,SAAS;IAElB,UAAU,EAAE,YAAY;IAExB,qBAAqB,EAAE,uBAAuB;IAE9C,UAAU,EAAE,YAAY;IAExB,UAAU,EAAE,YAAY;IAExB,MAAM,EAAE,QAAQ;IAEhB,kBAAkB,EAAE,oBAAoB;IAExC,mBAAmB,EAAE,qBAAqB;IAE1C,eAAe,EAAE,iBAAiB;IAElC,aAAa,EAAE,eAAe;IAE9B,mBAAmB,EAAE,qBAAqB;IAE1C,YAAY,EAAE,cAAc;IAE5B,cAAc,EAAE,gBAAgB;IAEhC,iBAAiB,EAAE,mBAAmB;CAC7B,CAAC;AAOE,QAAA,oBAAoB,GAA0C;IAC1E,CAAC,yBAAiB,CAAC,UAAU,CAAC,EAAE,kDAAkD;IAClF,CAAC,yBAAiB,CAAC,OAAO,CAAC,EAC1B,uFAAuF;IACxF,CAAC,yBAAiB,CAAC,UAAU,CAAC,EAAE,qCAAqC;IACrE,CAAC,yBAAiB,CAAC,qBAAqB,CAAC,EACxC,sFAAsF;IACvF,CAAC,yBAAiB,CAAC,UAAU,CAAC,EAC7B,sFAAsF;IACvF,CAAC,yBAAiB,CAAC,UAAU,CAAC,EAC7B,iFAAiF;IAClF,CAAC,yBAAiB,CAAC,MAAM,CAAC,EAAE,gDAAgD;IAC5E,CAAC,yBAAiB,CAAC,kBAAkB,CAAC,EAAE,2CAA2C;IACnF,CAAC,yBAAiB,CAAC,mBAAmB,CAAC,EACtC,iEAAiE;IAClE,CAAC,yBAAiB,CAAC,eAAe,CAAC,EAClC,qEAAqE;IACtE,CAAC,yBAAiB,CAAC,aAAa,CAAC,EAChC,iEAAiE;IAClE,CAAC,yBAAiB,CAAC,mBAAmB,CAAC,EACtC,uEAAuE;IACxE,CAAC,yBAAiB,CAAC,YAAY,CAAC,EAC/B,kEAAkE;IACnE,CAAC,yBAAiB,CAAC,cAAc,CAAC,EACjC,8FAA8F;IAC/F,CAAC,yBAAiB,CAAC,iBAAiB,CAAC,EAAE,kDAAkD;CACzF,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
package/dist/types/tools.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { INodeParameters } from 'n8n-workflow';
|
|
2
2
|
import type { ZodIssue } from 'zod';
|
|
3
|
+
import type { PromptCategorization } from './categorization';
|
|
3
4
|
import type { AddedNode, NodeDetails, NodeSearchResult } from './nodes';
|
|
4
5
|
export type ProgressUpdateType = 'input' | 'output' | 'progress' | 'error';
|
|
5
6
|
export interface ProgressUpdate<T = Record<string, unknown>> {
|
|
@@ -89,3 +90,6 @@ export interface RemoveConnectionOutput {
|
|
|
89
90
|
targetInputIndex: number;
|
|
90
91
|
message: string;
|
|
91
92
|
}
|
|
93
|
+
export interface CategorizePromptOutput {
|
|
94
|
+
categorization: PromptCategorization;
|
|
95
|
+
}
|
|
@@ -6,74 +6,101 @@ exports.createStreamProcessor = createStreamProcessor;
|
|
|
6
6
|
exports.cleanContextTags = cleanContextTags;
|
|
7
7
|
exports.formatMessages = formatMessages;
|
|
8
8
|
const messages_1 = require("@langchain/core/messages");
|
|
9
|
+
function isAgentUpdateChunk(chunk) {
|
|
10
|
+
return (typeof chunk === 'object' &&
|
|
11
|
+
chunk !== null &&
|
|
12
|
+
('agent' in chunk ||
|
|
13
|
+
'compact_messages' in chunk ||
|
|
14
|
+
'delete_messages' in chunk ||
|
|
15
|
+
'process_operations' in chunk));
|
|
16
|
+
}
|
|
17
|
+
function isToolProgressChunk(chunk) {
|
|
18
|
+
return typeof chunk === 'object' && chunk !== null && 'type' in chunk && chunk.type === 'tool';
|
|
19
|
+
}
|
|
9
20
|
exports.DEFAULT_WORKFLOW_UPDATE_TOOLS = [
|
|
10
21
|
'add_nodes',
|
|
11
22
|
'connect_nodes',
|
|
12
23
|
'update_node_parameters',
|
|
13
24
|
'remove_node',
|
|
14
25
|
];
|
|
26
|
+
function getLastMessage(messages) {
|
|
27
|
+
if (!messages || messages.length === 0) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return messages[messages.length - 1];
|
|
31
|
+
}
|
|
32
|
+
function extractTextFromContent(content) {
|
|
33
|
+
if (Array.isArray(content)) {
|
|
34
|
+
return content
|
|
35
|
+
.filter((part) => part.type === 'text')
|
|
36
|
+
.map((part) => part.text)
|
|
37
|
+
.join('\n');
|
|
38
|
+
}
|
|
39
|
+
return content;
|
|
40
|
+
}
|
|
41
|
+
function createMessageChunk(text) {
|
|
42
|
+
return {
|
|
43
|
+
role: 'assistant',
|
|
44
|
+
type: 'message',
|
|
45
|
+
text,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function processDeleteMessages(chunk) {
|
|
49
|
+
const messages = chunk.delete_messages?.messages;
|
|
50
|
+
if (!messages || messages.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return { messages: [createMessageChunk('Deleted, refresh?')] };
|
|
54
|
+
}
|
|
55
|
+
function processCompactMessages(chunk) {
|
|
56
|
+
const lastMessage = getLastMessage(chunk.compact_messages?.messages);
|
|
57
|
+
if (!lastMessage) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const text = extractTextFromContent(lastMessage.content);
|
|
61
|
+
return { messages: [createMessageChunk(text)] };
|
|
62
|
+
}
|
|
63
|
+
function processAgentMessages(chunk) {
|
|
64
|
+
const lastMessage = getLastMessage(chunk.agent?.messages);
|
|
65
|
+
if (!lastMessage?.content) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const text = extractTextFromContent(lastMessage.content);
|
|
69
|
+
if (!text) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return { messages: [createMessageChunk(text)] };
|
|
73
|
+
}
|
|
74
|
+
function processOperations(chunk) {
|
|
75
|
+
const update = chunk.process_operations;
|
|
76
|
+
if (!update?.workflowJSON || update.workflowOperations === undefined) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const workflowUpdateChunk = {
|
|
80
|
+
role: 'assistant',
|
|
81
|
+
type: 'workflow-updated',
|
|
82
|
+
codeSnippet: JSON.stringify(update.workflowJSON, null, 2),
|
|
83
|
+
};
|
|
84
|
+
return { messages: [workflowUpdateChunk] };
|
|
85
|
+
}
|
|
86
|
+
function processCustomToolChunk(chunk) {
|
|
87
|
+
if (!isToolProgressChunk(chunk)) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return { messages: [chunk] };
|
|
91
|
+
}
|
|
15
92
|
function processStreamChunk(streamMode, chunk) {
|
|
16
93
|
if (streamMode === 'updates') {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const messageChunk = {
|
|
20
|
-
role: 'assistant',
|
|
21
|
-
type: 'message',
|
|
22
|
-
text: 'Deleted, refresh?',
|
|
23
|
-
};
|
|
24
|
-
return { messages: [messageChunk] };
|
|
25
|
-
}
|
|
26
|
-
if ((agentChunk?.compact_messages?.messages ?? []).length > 0) {
|
|
27
|
-
const lastMessage = agentChunk.compact_messages.messages[agentChunk.compact_messages.messages.length - 1];
|
|
28
|
-
const messageChunk = {
|
|
29
|
-
role: 'assistant',
|
|
30
|
-
type: 'message',
|
|
31
|
-
text: lastMessage.content,
|
|
32
|
-
};
|
|
33
|
-
return { messages: [messageChunk] };
|
|
34
|
-
}
|
|
35
|
-
if ((agentChunk?.agent?.messages ?? []).length > 0) {
|
|
36
|
-
const lastMessage = agentChunk.agent.messages[agentChunk.agent.messages.length - 1];
|
|
37
|
-
if (lastMessage.content) {
|
|
38
|
-
let content;
|
|
39
|
-
if (Array.isArray(lastMessage.content)) {
|
|
40
|
-
content = lastMessage.content
|
|
41
|
-
.filter((c) => c.type === 'text')
|
|
42
|
-
.map((b) => b.text)
|
|
43
|
-
.join('\n');
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
content = lastMessage.content;
|
|
47
|
-
}
|
|
48
|
-
if (content) {
|
|
49
|
-
const messageChunk = {
|
|
50
|
-
role: 'assistant',
|
|
51
|
-
type: 'message',
|
|
52
|
-
text: content,
|
|
53
|
-
};
|
|
54
|
-
return { messages: [messageChunk] };
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (agentChunk?.process_operations) {
|
|
60
|
-
const update = agentChunk.process_operations;
|
|
61
|
-
if (update.workflowJSON && update.workflowOperations !== undefined) {
|
|
62
|
-
const workflowUpdateChunk = {
|
|
63
|
-
role: 'assistant',
|
|
64
|
-
type: 'workflow-updated',
|
|
65
|
-
codeSnippet: JSON.stringify(update.workflowJSON, null, 2),
|
|
66
|
-
};
|
|
67
|
-
return { messages: [workflowUpdateChunk] };
|
|
68
|
-
}
|
|
94
|
+
if (!isAgentUpdateChunk(chunk)) {
|
|
95
|
+
return null;
|
|
69
96
|
}
|
|
97
|
+
return (processDeleteMessages(chunk) ??
|
|
98
|
+
processCompactMessages(chunk) ??
|
|
99
|
+
processAgentMessages(chunk) ??
|
|
100
|
+
processOperations(chunk));
|
|
70
101
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (toolChunk?.type === 'tool') {
|
|
74
|
-
const output = { messages: [toolChunk] };
|
|
75
|
-
return output;
|
|
76
|
-
}
|
|
102
|
+
if (streamMode === 'custom') {
|
|
103
|
+
return processCustomToolChunk(chunk);
|
|
77
104
|
}
|
|
78
105
|
return null;
|
|
79
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../src/utils/stream-processor.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../src/utils/stream-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ function validateAgentPrompt(workflow) {
|
|
|
22
22
|
if (isOptionsWithSystemMessage(options)) {
|
|
23
23
|
systemMessage = options.systemMessage;
|
|
24
24
|
}
|
|
25
|
-
if (promptType !== 'auto') {
|
|
25
|
+
if (promptType !== 'auto' && promptType !== 'guardrails') {
|
|
26
26
|
if (!textParam || !(0, expressions_1.containsExpression)(textParam)) {
|
|
27
27
|
violations.push({
|
|
28
28
|
type: 'major',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt.js","sourceRoot":"","sources":["../../../src/validation/checks/agent-prompt.ts"],"names":[],"mappings":";;AA4BA,kDAiDC;AAxED,sDAA0D;AAK1D,SAAS,0BAA0B,CAClC,KAAc;IAEd,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,eAAe,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AASD,SAAgB,mBAAmB,CAAC,QAAwB;IAC3D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAG/C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACX,CAAC;IAGD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;YAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YAGzC,IAAI,aAAiC,CAAC;YACtC,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YACvC,CAAC;YAID,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-prompt.js","sourceRoot":"","sources":["../../../src/validation/checks/agent-prompt.ts"],"names":[],"mappings":";;AA4BA,kDAiDC;AAxED,sDAA0D;AAK1D,SAAS,0BAA0B,CAClC,KAAc;IAEd,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,eAAe,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AASD,SAAgB,mBAAmB,CAAC,QAAwB;IAC3D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAG/C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACX,CAAC;IAGD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;YAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;YAGzC,IAAI,aAAiC,CAAC;YACtC,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YACvC,CAAC;YAID,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAE1D,IAAI,CAAC,SAAS,IAAI,CAAC,IAAA,gCAAkB,EAAC,SAAS,CAAC,EAAE,CAAC;oBAClD,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,eAAe,IAAI,CAAC,IAAI,0GAA0G;wBAC/I,cAAc,EAAE,EAAE;qBAClB,CAAC,CAAC;gBACJ,CAAC;gBAID,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzD,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,eAAe,IAAI,CAAC,IAAI,sIAAsI;wBAC3K,cAAc,EAAE,EAAE;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateConnections = validateConnections;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const node_helpers_1 = require("../../utils/node-helpers");
|
|
5
6
|
const resolve_connections_1 = require("../../validation/utils/resolve-connections");
|
|
6
7
|
function getProvidedInputTypes(nodeConnections) {
|
|
7
8
|
const providedInputTypes = new Map();
|
|
@@ -91,14 +92,43 @@ function checkMergeNodeConnections(nodeInfo, nodeConnections) {
|
|
|
91
92
|
}
|
|
92
93
|
return issues;
|
|
93
94
|
}
|
|
95
|
+
function checkSubNodeRootConnections(workflow, nodeInfo, nodesByName) {
|
|
96
|
+
const issues = [];
|
|
97
|
+
const { node, nodeType, resolvedOutputs } = nodeInfo;
|
|
98
|
+
if (!resolvedOutputs || resolvedOutputs.size === 0) {
|
|
99
|
+
return issues;
|
|
100
|
+
}
|
|
101
|
+
if (!(0, node_helpers_1.isSubNode)(nodeType, node)) {
|
|
102
|
+
return issues;
|
|
103
|
+
}
|
|
104
|
+
const aiOutputs = Array.from(resolvedOutputs).filter((output) => output.startsWith('ai_'));
|
|
105
|
+
if (aiOutputs.length === 0) {
|
|
106
|
+
return issues;
|
|
107
|
+
}
|
|
108
|
+
const nodeConnections = workflow.connections?.[node.name];
|
|
109
|
+
for (const outputType of aiOutputs) {
|
|
110
|
+
const connectionsForType = nodeConnections?.[outputType];
|
|
111
|
+
const hasRootConnection = connectionsForType?.some((connectionGroup) => connectionGroup?.some((connection) => connection?.node && nodesByName.has(connection.node)));
|
|
112
|
+
if (!hasRootConnection) {
|
|
113
|
+
issues.push({
|
|
114
|
+
type: 'critical',
|
|
115
|
+
description: `Sub-node ${node.name} (${node.type}) provides ${outputType} but is not connected to a root node.`,
|
|
116
|
+
pointsDeducted: 50,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return issues;
|
|
121
|
+
}
|
|
94
122
|
function validateConnections(workflow, nodeTypes) {
|
|
95
123
|
const violations = [];
|
|
96
124
|
if (!workflow.connections) {
|
|
97
125
|
workflow.connections = {};
|
|
98
126
|
}
|
|
99
127
|
const connectionsByDestination = (0, n8n_workflow_1.mapConnectionsByDestination)(workflow.connections);
|
|
128
|
+
const nodesByName = new Map(workflow.nodes.map((node) => [node.name, node]));
|
|
129
|
+
const nodeTypeMap = new Map(nodeTypes.map((type) => [type.name, type]));
|
|
100
130
|
for (const node of workflow.nodes) {
|
|
101
|
-
const nodeType =
|
|
131
|
+
const nodeType = nodeTypeMap.get(node.type);
|
|
102
132
|
if (!nodeType) {
|
|
103
133
|
violations.push({
|
|
104
134
|
type: 'critical',
|
|
@@ -125,6 +155,7 @@ function validateConnections(workflow, nodeTypes) {
|
|
|
125
155
|
violations.push(...checkMissingRequiredInputs(nodeInfo, providedInputTypes));
|
|
126
156
|
violations.push(...checkUnsupportedConnections(nodeInfo, providedInputTypes));
|
|
127
157
|
violations.push(...checkMergeNodeConnections(nodeInfo, nodeConnections));
|
|
158
|
+
violations.push(...checkSubNodeRootConnections(workflow, nodeInfo, nodesByName));
|
|
128
159
|
}
|
|
129
160
|
return violations;
|
|
130
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/validation/checks/connections.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/validation/checks/connections.ts"],"names":[],"mappings":"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"}
|