@n8n/ai-workflow-builder 0.27.1 → 0.28.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/prompts/parameter-types/system-message.d.ts +1 -0
- package/dist/chains/prompts/parameter-types/system-message.js +75 -0
- package/dist/chains/prompts/parameter-types/system-message.js.map +1 -0
- package/dist/chains/prompts/prompt-builder.d.ts +1 -0
- package/dist/chains/prompts/prompt-builder.js +23 -1
- package/dist/chains/prompts/prompt-builder.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/builder-tools.js +3 -0
- package/dist/tools/builder-tools.js.map +1 -1
- package/dist/tools/prompts/main-agent.prompt.js +93 -0
- package/dist/tools/prompts/main-agent.prompt.js.map +1 -1
- package/dist/tools/validate-workflow.tool.d.ts +5 -0
- package/dist/tools/validate-workflow.tool.js +77 -0
- package/dist/tools/validate-workflow.tool.js.map +1 -0
- package/dist/utils/operations-processor.d.ts +2 -0
- package/dist/utils/operations-processor.js +1 -0
- package/dist/utils/operations-processor.js.map +1 -1
- package/dist/utils/stream-processor.d.ts +1 -0
- package/dist/utils/stream-processor.js +14 -1
- package/dist/utils/stream-processor.js.map +1 -1
- package/dist/utils/workflow-validation.d.ts +2 -0
- package/dist/utils/workflow-validation.js +36 -0
- package/dist/utils/workflow-validation.js.map +1 -0
- package/dist/validation/checks/agent-prompt.d.ts +3 -0
- package/dist/validation/checks/agent-prompt.js +45 -0
- package/dist/validation/checks/agent-prompt.js.map +1 -0
- package/dist/validation/checks/connections.d.ts +4 -0
- package/dist/validation/checks/connections.js +131 -0
- package/dist/validation/checks/connections.js.map +1 -0
- package/dist/validation/checks/from-ai.d.ts +4 -0
- package/dist/validation/checks/from-ai.js +59 -0
- package/dist/validation/checks/from-ai.js.map +1 -0
- package/dist/validation/checks/index.d.ts +5 -0
- package/dist/validation/checks/index.js +14 -0
- package/dist/validation/checks/index.js.map +1 -0
- package/dist/validation/checks/tools.d.ts +4 -0
- package/dist/validation/checks/tools.js +44 -0
- package/dist/validation/checks/tools.js.map +1 -0
- package/dist/validation/checks/trigger.d.ts +8 -0
- package/dist/validation/checks/trigger.js +35 -0
- package/dist/validation/checks/trigger.js.map +1 -0
- package/dist/validation/programmatic.d.ts +3 -0
- package/dist/validation/programmatic.js +20 -0
- package/dist/validation/programmatic.js.map +1 -0
- package/dist/validation/types.d.ts +41 -0
- package/dist/validation/types.js +3 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/utils/expressions.d.ts +3 -0
- package/dist/validation/utils/expressions.js +37 -0
- package/dist/validation/utils/expressions.js.map +1 -0
- package/dist/validation/utils/is-tool.d.ts +2 -0
- package/dist/validation/utils/is-tool.js +7 -0
- package/dist/validation/utils/is-tool.js.map +1 -0
- package/dist/validation/utils/resolve-connections.d.ts +8 -0
- package/dist/validation/utils/resolve-connections.js +64 -0
- package/dist/validation/utils/resolve-connections.js.map +1 -0
- package/dist/workflow-builder-agent.d.ts +2 -0
- package/dist/workflow-builder-agent.js +28 -25
- package/dist/workflow-builder-agent.js.map +1 -1
- package/dist/workflow-state.d.ts +2 -0
- package/dist/workflow-state.js +4 -0
- package/dist/workflow-state.js.map +1 -1
- package/package.json +10 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SYSTEM_MESSAGE_GUIDE = "\n## CRITICAL: System Message vs User Prompt Separation\n\nAI nodes (AI Agent, LLM Chain, Anthropic, OpenAI, etc.) have TWO distinct prompt fields that MUST be used correctly:\n\n### Field Separation\n1. **System Message** - Model's persistent identity, role, and instructions\n2. **User Message/Text** - Dynamic user context and data references per execution\n\n**Node-specific field names:**\n- AI Agent: `options.systemMessage` and `text`\n- LLM Chain: `messages.messageValues[]` with system role and `text`\n- Anthropic: `options.system` and `messages.values[]`\n- OpenAI: `messages.values[]` with role \"system\" vs \"user\"\n\n### System Message\nUse for STATIC, ROLE-DEFINING content:\n- Agent identity: \"You are a [role] agent...\"\n- Task description: \"Your task is to...\"\n- Step-by-step instructions: \"1. Do X, 2. Do Y, 3. Do Z\"\n- Behavioral guidelines: \"Always...\", \"Never...\"\n- Tool coordination: \"Call the Research Tool to..., then call...\"\n\n### Text Parameter\nUse for DYNAMIC, EXECUTION-SPECIFIC content:\n- User input: \"={{ $json.chatInput }}\"\n- Workflow context: \"=The research topic is: {{ $json.topic }}\"\n- Data from previous nodes: \"=Process this data: {{ $json.data }}\"\n- Variable context: \"=Analyze for user: {{ $json.userId }}\"\n\n### Common Mistakes to Avoid\n\n\u274C **WRONG - Everything in text field:**\n{\n \"text\": \"=You are an orchestrator agent that coordinates specialized agents. Your task is to: 1) Call Research Agent Tool, 2) Call Fact-Check Agent Tool, 3) Generate report. Research topic: {{ $json.researchTopic }}\"\n}\n\n\u2705 **CORRECT - Properly separated:**\n{\n \"text\": \"=The research topic is: {{ $json.researchTopic }}\",\n \"options\": {\n \"systemMessage\": \"You are an orchestrator agent that coordinates specialized agents.\\n\\nYour task is to:\\n1. Call the Research Agent Tool to gather information\\n2. Call the Fact-Check Agent Tool to verify findings\\n3. Generate a comprehensive report\\n\\nReturn ONLY the final report.\"\n }\n}\n\n### Update Pattern Examples\n\nExample 1 - AI Agent with orchestration:\nInstructions: [\n \"Set text to '=Research topic: {{ $json.researchTopic }}'\",\n \"Set system message to 'You are an orchestrator coordinating research tasks.\\n\\nSteps:\\n1. Call Research Agent Tool\\n2. Call Fact-Check Agent Tool\\n3. Call Report Writer Agent Tool\\n4. Return final HTML report'\"\n]\n\nExample 2 - Chat-based AI node:\nInstructions: [\n \"Set text to '=User question: {{ $json.chatInput }}'\",\n \"Set system message to 'You are a helpful customer support assistant. Answer questions clearly and professionally. Escalate to human if needed.'\"\n]\n\nExample 3 - Data processing with AI:\nInstructions: [\n \"Set text to '=Process this data: {{ $json.inputData }}'\",\n \"Set system message to 'You are a data analysis assistant.\\n\\nTasks:\\n1. Validate data structure\\n2. Calculate statistics\\n3. Identify anomalies\\n4. Return JSON with findings'\"\n]\n\n### Why This Matters\n- **Consistency**: System message stays the same across executions\n- **Maintainability**: Easy to update AI behavior without touching data flow\n- **Best Practice**: Follows standard AI prompt engineering patterns\n- **Clarity**: Separates \"what the AI model is\" from \"what data to process\"\n";
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SYSTEM_MESSAGE_GUIDE = void 0;
|
|
4
|
+
exports.SYSTEM_MESSAGE_GUIDE = `
|
|
5
|
+
## CRITICAL: System Message vs User Prompt Separation
|
|
6
|
+
|
|
7
|
+
AI nodes (AI Agent, LLM Chain, Anthropic, OpenAI, etc.) have TWO distinct prompt fields that MUST be used correctly:
|
|
8
|
+
|
|
9
|
+
### Field Separation
|
|
10
|
+
1. **System Message** - Model's persistent identity, role, and instructions
|
|
11
|
+
2. **User Message/Text** - Dynamic user context and data references per execution
|
|
12
|
+
|
|
13
|
+
**Node-specific field names:**
|
|
14
|
+
- AI Agent: \`options.systemMessage\` and \`text\`
|
|
15
|
+
- LLM Chain: \`messages.messageValues[]\` with system role and \`text\`
|
|
16
|
+
- Anthropic: \`options.system\` and \`messages.values[]\`
|
|
17
|
+
- OpenAI: \`messages.values[]\` with role "system" vs "user"
|
|
18
|
+
|
|
19
|
+
### System Message
|
|
20
|
+
Use for STATIC, ROLE-DEFINING content:
|
|
21
|
+
- Agent identity: "You are a [role] agent..."
|
|
22
|
+
- Task description: "Your task is to..."
|
|
23
|
+
- Step-by-step instructions: "1. Do X, 2. Do Y, 3. Do Z"
|
|
24
|
+
- Behavioral guidelines: "Always...", "Never..."
|
|
25
|
+
- Tool coordination: "Call the Research Tool to..., then call..."
|
|
26
|
+
|
|
27
|
+
### Text Parameter
|
|
28
|
+
Use for DYNAMIC, EXECUTION-SPECIFIC content:
|
|
29
|
+
- User input: "={{ $json.chatInput }}"
|
|
30
|
+
- Workflow context: "=The research topic is: {{ $json.topic }}"
|
|
31
|
+
- Data from previous nodes: "=Process this data: {{ $json.data }}"
|
|
32
|
+
- Variable context: "=Analyze for user: {{ $json.userId }}"
|
|
33
|
+
|
|
34
|
+
### Common Mistakes to Avoid
|
|
35
|
+
|
|
36
|
+
❌ **WRONG - Everything in text field:**
|
|
37
|
+
{
|
|
38
|
+
"text": "=You are an orchestrator agent that coordinates specialized agents. Your task is to: 1) Call Research Agent Tool, 2) Call Fact-Check Agent Tool, 3) Generate report. Research topic: {{ $json.researchTopic }}"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
✅ **CORRECT - Properly separated:**
|
|
42
|
+
{
|
|
43
|
+
"text": "=The research topic is: {{ $json.researchTopic }}",
|
|
44
|
+
"options": {
|
|
45
|
+
"systemMessage": "You are an orchestrator agent that coordinates specialized agents.\\n\\nYour task is to:\\n1. Call the Research Agent Tool to gather information\\n2. Call the Fact-Check Agent Tool to verify findings\\n3. Generate a comprehensive report\\n\\nReturn ONLY the final report."
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
### Update Pattern Examples
|
|
50
|
+
|
|
51
|
+
Example 1 - AI Agent with orchestration:
|
|
52
|
+
Instructions: [
|
|
53
|
+
"Set text to '=Research topic: {{ $json.researchTopic }}'",
|
|
54
|
+
"Set system message to 'You are an orchestrator coordinating research tasks.\\n\\nSteps:\\n1. Call Research Agent Tool\\n2. Call Fact-Check Agent Tool\\n3. Call Report Writer Agent Tool\\n4. Return final HTML report'"
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
Example 2 - Chat-based AI node:
|
|
58
|
+
Instructions: [
|
|
59
|
+
"Set text to '=User question: {{ $json.chatInput }}'",
|
|
60
|
+
"Set system message to 'You are a helpful customer support assistant. Answer questions clearly and professionally. Escalate to human if needed.'"
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
Example 3 - Data processing with AI:
|
|
64
|
+
Instructions: [
|
|
65
|
+
"Set text to '=Process this data: {{ $json.inputData }}'",
|
|
66
|
+
"Set system message to 'You are a data analysis assistant.\\n\\nTasks:\\n1. Validate data structure\\n2. Calculate statistics\\n3. Identify anomalies\\n4. Return JSON with findings'"
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
### Why This Matters
|
|
70
|
+
- **Consistency**: System message stays the same across executions
|
|
71
|
+
- **Maintainability**: Easy to update AI behavior without touching data flow
|
|
72
|
+
- **Best Practice**: Follows standard AI prompt engineering patterns
|
|
73
|
+
- **Clarity**: Separates "what the AI model is" from "what data to process"
|
|
74
|
+
`;
|
|
75
|
+
//# sourceMappingURL=system-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-message.js","sourceRoot":"","sources":["../../../../src/chains/prompts/parameter-types/system-message.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEnC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import type { INodeTypeDescription } from 'n8n-workflow';
|
|
|
2
2
|
import type { PromptBuilderContext } from '../../types/config';
|
|
3
3
|
export declare class ParameterUpdatePromptBuilder {
|
|
4
4
|
static buildSystemPrompt(context: PromptBuilderContext): string;
|
|
5
|
+
private static hasSystemMessageParameters;
|
|
5
6
|
private static isSetNode;
|
|
6
7
|
private static isIfNode;
|
|
7
8
|
private static isHttpRequestNode;
|
|
@@ -15,6 +15,7 @@ const if_node_1 = require("./node-types/if-node");
|
|
|
15
15
|
const set_node_1 = require("./node-types/set-node");
|
|
16
16
|
const tool_nodes_1 = require("./node-types/tool-nodes");
|
|
17
17
|
const resource_locator_1 = require("./parameter-types/resource-locator");
|
|
18
|
+
const system_message_1 = require("./parameter-types/system-message");
|
|
18
19
|
const text_fields_1 = require("./parameter-types/text-fields");
|
|
19
20
|
const prompt_config_1 = require("./prompt-config");
|
|
20
21
|
class ParameterUpdatePromptBuilder {
|
|
@@ -23,7 +24,10 @@ class ParameterUpdatePromptBuilder {
|
|
|
23
24
|
const sections = [];
|
|
24
25
|
sections.push(core_instructions_1.CORE_INSTRUCTIONS);
|
|
25
26
|
sections.push(expression_rules_1.EXPRESSION_RULES);
|
|
26
|
-
if (this.
|
|
27
|
+
if (this.hasSystemMessageParameters(context.nodeDefinition)) {
|
|
28
|
+
sections.push(system_message_1.SYSTEM_MESSAGE_GUIDE);
|
|
29
|
+
}
|
|
30
|
+
else if (this.isSetNode(context.nodeType)) {
|
|
27
31
|
sections.push(set_node_1.SET_NODE_GUIDE);
|
|
28
32
|
}
|
|
29
33
|
else if (this.isIfNode(context.nodeType)) {
|
|
@@ -53,6 +57,24 @@ class ParameterUpdatePromptBuilder {
|
|
|
53
57
|
const finalPrompt = sections.join('\n');
|
|
54
58
|
return finalPrompt;
|
|
55
59
|
}
|
|
60
|
+
static hasSystemMessageParameters(nodeDefinition) {
|
|
61
|
+
if (!nodeDefinition.properties)
|
|
62
|
+
return false;
|
|
63
|
+
const hasSystemMessageParam = nodeDefinition.properties.some((prop) => {
|
|
64
|
+
if (prop.name === 'options' && prop.type === 'collection') {
|
|
65
|
+
const collectionProp = prop;
|
|
66
|
+
if (Array.isArray(collectionProp.options)) {
|
|
67
|
+
return collectionProp.options.some((opt) => opt.name === 'systemMessage' || opt.name === 'system');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (prop.name === 'messages' &&
|
|
71
|
+
(prop.type === 'fixedCollection' || prop.type === 'collection')) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
});
|
|
76
|
+
return hasSystemMessageParam;
|
|
77
|
+
}
|
|
56
78
|
static isSetNode(nodeType) {
|
|
57
79
|
const category = (0, prompt_config_1.getNodeTypeCategory)(nodeType);
|
|
58
80
|
return category === 'set';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/chains/prompts/prompt-builder.ts"],"names":[],"mappings":";;;AAEA,4DAAyD;AACzD,gEAA6D;AAC7D,8DAA2D;AAC3D,wDAAqD;AACrD,6FAA0F;AAC1F,+EAA4E;AAC5E,wEAAqE;AACrE,0EAAuE;AACvE,oEAAyE;AACzE,4DAA+D;AAC/D,kDAAqD;AACrD,oDAAuD;AACvD,wDAA2D;AAC3D,yEAA4E;AAC5E,+DAAkE;AAClE,mDAIyB;AAGzB,MAAa,4BAA4B;IAIxC,MAAM,CAAC,iBAAiB,CAAC,OAA6B;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAG9B,QAAQ,CAAC,IAAI,CAAC,qCAAiB,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,mCAAgB,CAAC,CAAC;QAGhC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/chains/prompts/prompt-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -14,6 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.resolveConnections = void 0;
|
|
17
18
|
__exportStar(require("./ai-workflow-builder-agent.service"), exports);
|
|
18
19
|
__exportStar(require("./workflow-state"), exports);
|
|
20
|
+
var resolve_connections_1 = require("./validation/utils/resolve-connections");
|
|
21
|
+
Object.defineProperty(exports, "resolveConnections", { enumerable: true, get: function () { return resolve_connections_1.resolveConnections; } });
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sEAAoD;AAEpD,mDAAiC;AACjC,8EAA4E;AAAnE,yHAAA,kBAAkB,OAAA"}
|
|
@@ -10,6 +10,7 @@ const node_search_tool_1 = require("./node-search.tool");
|
|
|
10
10
|
const remove_connection_tool_1 = require("./remove-connection.tool");
|
|
11
11
|
const remove_node_tool_1 = require("./remove-node.tool");
|
|
12
12
|
const update_node_parameters_tool_1 = require("./update-node-parameters.tool");
|
|
13
|
+
const validate_workflow_tool_1 = require("./validate-workflow.tool");
|
|
13
14
|
function getBuilderTools({ parsedNodeTypes, logger, llmComplexTask, instanceUrl, }) {
|
|
14
15
|
return [
|
|
15
16
|
(0, node_search_tool_1.createNodeSearchTool)(parsedNodeTypes),
|
|
@@ -20,6 +21,7 @@ function getBuilderTools({ parsedNodeTypes, logger, llmComplexTask, instanceUrl,
|
|
|
20
21
|
(0, remove_node_tool_1.createRemoveNodeTool)(logger),
|
|
21
22
|
(0, update_node_parameters_tool_1.createUpdateNodeParametersTool)(parsedNodeTypes, llmComplexTask, logger, instanceUrl),
|
|
22
23
|
(0, get_node_parameter_tool_1.createGetNodeParameterTool)(),
|
|
24
|
+
(0, validate_workflow_tool_1.createValidateWorkflowTool)(parsedNodeTypes, logger),
|
|
23
25
|
];
|
|
24
26
|
}
|
|
25
27
|
function getBuilderToolsForDisplay({ nodeTypes, }) {
|
|
@@ -32,6 +34,7 @@ function getBuilderToolsForDisplay({ nodeTypes, }) {
|
|
|
32
34
|
remove_node_tool_1.REMOVE_NODE_TOOL,
|
|
33
35
|
update_node_parameters_tool_1.UPDATING_NODE_PARAMETER_TOOL,
|
|
34
36
|
get_node_parameter_tool_1.GET_NODE_PARAMETER_TOOL,
|
|
37
|
+
validate_workflow_tool_1.VALIDATE_WORKFLOW_TOOL,
|
|
35
38
|
];
|
|
36
39
|
}
|
|
37
40
|
//# sourceMappingURL=builder-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-tools.js","sourceRoot":"","sources":["../../src/tools/builder-tools.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"builder-tools.js","sourceRoot":"","sources":["../../src/tools/builder-tools.ts"],"names":[],"mappings":";;AAmBA,0CAsBC;AAOD,8DAcC;AAxDD,mDAAwE;AACxE,6DAAkF;AAClF,uEAAgG;AAChG,2DAA+E;AAC/E,yDAA4E;AAC5E,qEAA8F;AAC9F,yDAA4E;AAC5E,+EAGuC;AACvC,qEAA8F;AAE9F,SAAgB,eAAe,CAAC,EAC/B,eAAe,EACf,MAAM,EACN,cAAc,EACd,WAAW,GAMX;IACA,OAAO;QACN,IAAA,uCAAoB,EAAC,eAAe,CAAC;QACrC,IAAA,yCAAqB,EAAC,eAAe,CAAC;QACtC,IAAA,iCAAiB,EAAC,eAAe,CAAC;QAClC,IAAA,2CAAsB,EAAC,eAAe,EAAE,MAAM,CAAC;QAC/C,IAAA,mDAA0B,EAAC,MAAM,CAAC;QAClC,IAAA,uCAAoB,EAAC,MAAM,CAAC;QAC5B,IAAA,4DAA8B,EAAC,eAAe,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC;QACpF,IAAA,oDAA0B,GAAE;QAC5B,IAAA,mDAA0B,EAAC,eAAe,EAAE,MAAM,CAAC;KACnD,CAAC;AACH,CAAC;AAOD,SAAgB,yBAAyB,CAAC,EACzC,SAAS,GAC8B;IACvC,OAAO;QACN,mCAAgB;QAChB,qCAAiB;QACjB,IAAA,kCAAkB,EAAC,SAAS,CAAC;QAC7B,uCAAkB;QAClB,+CAAsB;QACtB,mCAAgB;QAChB,0DAA4B;QAC5B,iDAAuB;QACvB,+CAAsB;KACtB,CAAC;AACH,CAAC"}
|
|
@@ -58,6 +58,11 @@ Follow this proven sequence for creating robust workflows:
|
|
|
58
58
|
- Pay special attention to parameters that control node behavior (dataType, mode, operation)
|
|
59
59
|
- Why: Unconfigured nodes will fail at runtime, defaults are unreliable
|
|
60
60
|
|
|
61
|
+
6. **Validation Phase** (tool call) - MANDATORY
|
|
62
|
+
- Run validate_workflow after applying changes to refresh the workflow validation report
|
|
63
|
+
- Review <workflow_validation_report> and resolve any violations before finalizing
|
|
64
|
+
- Why: Ensures structural issues are surfaced early; rerun validation after major updates
|
|
65
|
+
|
|
61
66
|
<parallel_node_creation_example>
|
|
62
67
|
Example: Creating and configuring a workflow (complete process):
|
|
63
68
|
|
|
@@ -71,6 +76,10 @@ Step 2 - Connect nodes:
|
|
|
71
76
|
Step 3 - Configure ALL nodes in parallel (MANDATORY):
|
|
72
77
|
- update_node_parameters({{ nodeId: "Fetch Data", instructions: ["Set URL to https://api.example.com/users", "Set method to GET"] }})
|
|
73
78
|
- update_node_parameters({{ nodeId: "Transform Data", instructions: ["Add field status with value 'processed'", "Add field timestamp with current date"] }})
|
|
79
|
+
|
|
80
|
+
Step 4 - Validate workflow:
|
|
81
|
+
- validate_workflow()
|
|
82
|
+
- If there are validation errors or warnings, address them by returning to the appropriate phase.
|
|
74
83
|
</parallel_node_creation_example>
|
|
75
84
|
</workflow_creation_sequence>
|
|
76
85
|
|
|
@@ -232,6 +241,90 @@ Configure multiple nodes in parallel:
|
|
|
232
241
|
- update_node_parameters({{ nodeId: "documentLoader1", instructions: ["Set dataType to 'binary' for processing PDF files", "Set loader to 'pdfLoader'", "Enable splitPages option"] }})
|
|
233
242
|
|
|
234
243
|
Why: Unconfigured nodes WILL fail at runtime
|
|
244
|
+
|
|
245
|
+
<system_message_configuration>
|
|
246
|
+
CRITICAL: For AI nodes (AI Agent, LLM Chain, Anthropic, OpenAI, etc.), you MUST separate system-level instructions from user context.
|
|
247
|
+
|
|
248
|
+
**System Message vs User Prompt:**
|
|
249
|
+
- **System Message** = AI's ROLE, CAPABILITIES, TASK DESCRIPTION, and BEHAVIORAL INSTRUCTIONS
|
|
250
|
+
- **User Message/Text** = DYNAMIC USER INPUT, CONTEXT VARIABLES, and DATA REFERENCES
|
|
251
|
+
|
|
252
|
+
**Node-specific field names:**
|
|
253
|
+
- AI Agent: system message goes in options.systemMessage, user context in text
|
|
254
|
+
- LLM Chain: system message in messages.messageValues[] with system role, user context in text
|
|
255
|
+
- Anthropic: system message in options.system, user context in messages.values[]
|
|
256
|
+
- OpenAI: system message in messages.values[] with role "system", user in messages.values[] with role "user"
|
|
257
|
+
|
|
258
|
+
**System Message** should contain:
|
|
259
|
+
- AI identity and role ("You are a...")
|
|
260
|
+
- Task description ("Your task is to...")
|
|
261
|
+
- Step-by-step instructions
|
|
262
|
+
- Behavioral guidelines
|
|
263
|
+
- Expected output format
|
|
264
|
+
- Coordination instructions
|
|
265
|
+
|
|
266
|
+
**User Message/Text** should contain:
|
|
267
|
+
- Dynamic data from workflow (expressions like {{ $json.field }})
|
|
268
|
+
- User input references ({{ $json.chatInput }})
|
|
269
|
+
- Context variables from previous nodes
|
|
270
|
+
- Minimal instruction (just what varies per execution)
|
|
271
|
+
|
|
272
|
+
**WRONG - Everything in text/user message field:**
|
|
273
|
+
❌ text: "=You are an orchestrator that coordinates specialized AI tasks. Your task is to: 1) Call Research Tool 2) Call Fact-Check Tool 3) Return HTML. The research topic is: {{ $json.researchTopic }}"
|
|
274
|
+
|
|
275
|
+
**RIGHT - Properly separated:**
|
|
276
|
+
✅ text: "=The research topic is: {{ $json.researchTopic }}"
|
|
277
|
+
✅ System message: "You are an orchestrator that coordinates specialized AI tasks.\n\nYour task is to:\n1. Call the Research Agent Tool to gather information\n2. Call the Fact-Check Agent Tool to verify findings\n3. Call the Report Writer Agent Tool to create a report\n4. Return ONLY the final result"
|
|
278
|
+
|
|
279
|
+
**Configuration Examples:**
|
|
280
|
+
|
|
281
|
+
Example 1 - AI Agent with orchestration:
|
|
282
|
+
update_node_parameters({{
|
|
283
|
+
nodeId: "orchestratorAgent",
|
|
284
|
+
instructions: [
|
|
285
|
+
"Set text to '=The research topic is: {{ $json.researchTopic }}'",
|
|
286
|
+
"Set system message to 'You are an orchestrator coordinating AI tasks to research topics and generate reports.\\n\\nYour task is to:\\n1. Call the Research Agent Tool to gather information\\n2. Call the Fact-Check Agent Tool to verify findings (require 2+ sources)\\n3. Call the Report Writer Agent Tool to create a report under 1,000 words\\n4. Call the HTML Editor Agent Tool to format as HTML\\n5. Return ONLY the final HTML content'"
|
|
287
|
+
]
|
|
288
|
+
}})
|
|
289
|
+
|
|
290
|
+
Example 2 - AI Agent Tool (sub-agent):
|
|
291
|
+
update_node_parameters({{
|
|
292
|
+
nodeId: "subAgentTool",
|
|
293
|
+
instructions: [
|
|
294
|
+
"Set text to '=Process this input: {{ $fromAI(\\'input\\') }}'",
|
|
295
|
+
"Set system message to 'You are a specialized assistant. Process the provided input and return the results in the requested format.'"
|
|
296
|
+
]
|
|
297
|
+
}})
|
|
298
|
+
|
|
299
|
+
CRITICAL: AI Agent Tools MUST have BOTH system message AND text field configured:
|
|
300
|
+
- System message: Define the tool's role and capabilities
|
|
301
|
+
- Text field: Pass the context/input using $fromAI() to receive parameters from the parent agent
|
|
302
|
+
- Never leave text field empty - the tool needs to know what to process
|
|
303
|
+
|
|
304
|
+
Example 3 - Chat-based AI node:
|
|
305
|
+
update_node_parameters({{
|
|
306
|
+
nodeId: "chatAssistant",
|
|
307
|
+
instructions: [
|
|
308
|
+
"Set text to '=User question: {{ $json.chatInput }}'",
|
|
309
|
+
"Set system message to 'You are a helpful customer service assistant. Answer questions clearly and concisely. If you don\\'t know the answer, say so and offer to escalate to a human.'"
|
|
310
|
+
]
|
|
311
|
+
}})
|
|
312
|
+
|
|
313
|
+
Example 4 - Data processing AI:
|
|
314
|
+
update_node_parameters({{
|
|
315
|
+
nodeId: "analysisNode",
|
|
316
|
+
instructions: [
|
|
317
|
+
"Set text to '=Analyze this data: {{ $json.data }}'",
|
|
318
|
+
"Set system message to 'You are a data analysis assistant. Examine the provided data and:\\n1. Identify key patterns and trends\\n2. Calculate relevant statistics\\n3. Highlight anomalies or outliers\\n4. Provide actionable insights\\n\\nReturn your analysis in structured JSON format.'"
|
|
319
|
+
]
|
|
320
|
+
}})
|
|
321
|
+
|
|
322
|
+
**Why this matters:**
|
|
323
|
+
- Keeps AI behavior consistent (system message) while allowing dynamic context (user message)
|
|
324
|
+
- Makes workflows more maintainable and reusable
|
|
325
|
+
- Follows AI best practices for prompt engineering
|
|
326
|
+
- Prevents mixing static instructions with dynamic data
|
|
327
|
+
</system_message_configuration>
|
|
235
328
|
</configuration_requirements>
|
|
236
329
|
|
|
237
330
|
<data_parsing_strategy>
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqcpB,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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Logger } from '@n8n/backend-common';
|
|
2
|
+
import type { INodeTypeDescription } from 'n8n-workflow';
|
|
3
|
+
import type { BuilderTool, BuilderToolBase } from '../utils/stream-processor';
|
|
4
|
+
export declare const VALIDATE_WORKFLOW_TOOL: BuilderToolBase;
|
|
5
|
+
export declare function createValidateWorkflowTool(parsedNodeTypes: INodeTypeDescription[], logger?: Logger): BuilderTool;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VALIDATE_WORKFLOW_TOOL = void 0;
|
|
4
|
+
exports.createValidateWorkflowTool = createValidateWorkflowTool;
|
|
5
|
+
const tools_1 = require("@langchain/core/tools");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const programmatic_1 = require("../validation/programmatic");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const workflow_validation_1 = require("../utils/workflow-validation");
|
|
10
|
+
const progress_1 = require("./helpers/progress");
|
|
11
|
+
const response_1 = require("./helpers/response");
|
|
12
|
+
const state_1 = require("./helpers/state");
|
|
13
|
+
const validateWorkflowSchema = zod_1.z.object({}).strict().default({});
|
|
14
|
+
exports.VALIDATE_WORKFLOW_TOOL = {
|
|
15
|
+
toolName: 'validate_workflow',
|
|
16
|
+
displayTitle: 'Validating workflow',
|
|
17
|
+
};
|
|
18
|
+
function createValidateWorkflowTool(parsedNodeTypes, logger) {
|
|
19
|
+
const dynamicTool = (0, tools_1.tool)(async (input, config) => {
|
|
20
|
+
const reporter = (0, progress_1.createProgressReporter)(config, exports.VALIDATE_WORKFLOW_TOOL.toolName, exports.VALIDATE_WORKFLOW_TOOL.displayTitle);
|
|
21
|
+
try {
|
|
22
|
+
const validatedInput = validateWorkflowSchema.parse(input ?? {});
|
|
23
|
+
reporter.start(validatedInput);
|
|
24
|
+
const state = (0, state_1.getWorkflowState)();
|
|
25
|
+
(0, progress_1.reportProgress)(reporter, 'Running programmatic checks');
|
|
26
|
+
const violations = (0, programmatic_1.programmaticValidation)({
|
|
27
|
+
generatedWorkflow: state.workflowJSON,
|
|
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
|
+
const message = (0, workflow_validation_1.formatWorkflowValidation)(violations);
|
|
46
|
+
reporter.complete({ message });
|
|
47
|
+
return (0, response_1.createSuccessResponse)(config, message, {
|
|
48
|
+
workflowValidation: violations,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
53
|
+
const validationError = new errors_1.ValidationError('Invalid input parameters', {
|
|
54
|
+
extra: { errors: error.errors },
|
|
55
|
+
});
|
|
56
|
+
reporter.error(validationError);
|
|
57
|
+
return (0, response_1.createErrorResponse)(config, validationError);
|
|
58
|
+
}
|
|
59
|
+
const toolError = new errors_1.ToolExecutionError(error instanceof Error ? error.message : 'Failed to validate workflow', {
|
|
60
|
+
toolName: exports.VALIDATE_WORKFLOW_TOOL.toolName,
|
|
61
|
+
cause: error instanceof Error ? error : undefined,
|
|
62
|
+
});
|
|
63
|
+
logger?.warn('validate_workflow tool failed', { error: toolError });
|
|
64
|
+
reporter.error(toolError);
|
|
65
|
+
return (0, response_1.createErrorResponse)(config, toolError);
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
name: exports.VALIDATE_WORKFLOW_TOOL.toolName,
|
|
69
|
+
description: 'Run validation checks against the current workflow. Call this after making changes to ensure the workflow is valid.',
|
|
70
|
+
schema: validateWorkflowSchema,
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
tool: dynamicTool,
|
|
74
|
+
...exports.VALIDATE_WORKFLOW_TOOL,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=validate-workflow.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow.tool.js","sourceRoot":"","sources":["../../src/tools/validate-workflow.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ export declare function applyOperations(workflow: SimpleWorkflow, operations: Wo
|
|
|
4
4
|
export declare function processOperations(state: typeof WorkflowState.State): {
|
|
5
5
|
workflowJSON?: undefined;
|
|
6
6
|
workflowOperations?: undefined;
|
|
7
|
+
workflowValidation?: undefined;
|
|
7
8
|
} | {
|
|
8
9
|
workflowJSON: SimpleWorkflow;
|
|
9
10
|
workflowOperations: null;
|
|
11
|
+
workflowValidation: null;
|
|
10
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-processor.js","sourceRoot":"","sources":["../../src/utils/operations-processor.ts"],"names":[],"mappings":";;AAmSA,0CAkBC;AAMD,
|
|
1
|
+
{"version":3,"file":"operations-processor.js","sourceRoot":"","sources":["../../src/utils/operations-processor.ts"],"names":[],"mappings":";;AAmSA,0CAkBC;AAMD,8CAiBC;AA/TD,SAAS,mBAAmB,CAC3B,SAAyB,EACzB,UAA6B;IAE7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC;AAKD,SAAS,wBAAwB,CAChC,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAErD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAGjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAG3E,MAAM,kBAAkB,GAAiB,EAAE,CAAC;IAG5C,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAElC,KAAK,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,kBAAkB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE;wBAChF,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;4BACtC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC1E,CAAC;wBACD,OAAO,iBAAiB,CAAC;oBAC1B,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,GAAG,QAAQ;QACX,KAAK;QACL,WAAW,EAAE,kBAAkB;KAC/B,CAAC;AACH,CAAC;AAKD,SAAS,sBAAsB,CAC9B,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,QAAQ,CAAC;IAGnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAG7D,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,GAAG,QAAQ;QACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KACnC,CAAC;AACH,CAAC;AAKD,SAAS,wBAAwB,CAChC,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAErD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,GAAG,QAAQ;QACX,KAAK;KACL,CAAC;AACH,CAAC;AAKD,SAAS,4BAA4B,CACpC,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,QAAQ,CAAC;IAEzD,OAAO;QACN,GAAG,QAAQ;QACX,WAAW,EAAE,SAAS,CAAC,WAAW;KAClC,CAAC;AACH,CAAC;AAKD,SAAS,8BAA8B,CACtC,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,QAAQ,CAAC;IAE3D,MAAM,WAAW,GAAG,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAGhD,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;QACzC,CAAC;aAAM,CAAC;YAEP,KAAK,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5C,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBAEP,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC;oBAE9D,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;wBAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9E,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gCAAE,SAAS;4BAE7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;gCACzB,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;4BACpC,CAAC;iCAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gCAE9E,MAAM,WAAW,GAAG,IAAI,GAAG,CAC1B,eAAe,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CACvE,CACD,CAAC;gCAEF,UAAU,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oCAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;wCAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;wCACf,IAAI,EAAE,IAAI,CAAC,IAAI;wCACf,KAAK,EAAE,IAAI,CAAC,KAAK;qCACjB,CAAC,CAAC;oCACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wCAC/B,eAAe,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oCAChC,CAAC;gCACF,CAAC,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,GAAG,QAAQ;QACX,WAAW;KACX,CAAC;AACH,CAAC;AAKD,SAAS,8BAA8B,CACtC,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,QAAQ,CAAC;IAE3D,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IAElG,MAAM,WAAW,GAAG,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAGhD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC;IACjB,CAAC;IAGD,MAAM,qBAAqB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrE,OAAO,QAAQ,CAAC;IACjB,CAAC;IAGD,IACC,iBAAiB,IAAI,qBAAqB,CAAC,MAAM;QACjD,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EACxC,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACjB,CAAC;IAGD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CACnD,CAAC,IAAI,EAAE,EAAE,CACR,CAAC,CACA,IAAI,CAAC,IAAI,KAAK,UAAU;QACxB,IAAI,CAAC,IAAI,KAAK,cAAc;QAC5B,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAC/B,CACF,CAAC;IAGF,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,mBAAmB,CAAC;IAG/D,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAEtC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CACnD,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CACzD,CAAC;QAGF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;YAG/C,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvD,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,GAAG,QAAQ;QACX,WAAW;KACX,CAAC;AACH,CAAC;AAKD,SAAS,qBAAqB,CAC7B,QAAwB,EACxB,SAA4B;IAE5B,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO;QACN,GAAG,QAAQ;QACX,IAAI,EAAE,SAAS,CAAC,IAAI;KACpB,CAAC;AACH,CAAC;AAKD,MAAM,iBAAiB,GAAwD;IAC9E,KAAK,EAAE,mBAAmB;IAC1B,UAAU,EAAE,wBAAwB;IACpC,QAAQ,EAAE,sBAAsB;IAChC,UAAU,EAAE,wBAAwB;IACpC,cAAc,EAAE,4BAA4B;IAC5C,gBAAgB,EAAE,8BAA8B;IAChD,gBAAgB,EAAE,8BAA8B;IAChD,OAAO,EAAE,qBAAqB;CAC9B,CAAC;AAKF,SAAgB,eAAe,CAC9B,QAAwB,EACxB,UAA+B;IAG/B,IAAI,MAAM,GAAmB;QAC5B,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC1B,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;QACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;KACzB,CAAC;IAGF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAMD,SAAgB,iBAAiB,CAAC,KAAiC;IAClE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAGnD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACX,CAAC;IAGD,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAGtE,OAAO;QACN,YAAY,EAAE,WAAW;QACzB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACxB,CAAC;AACH,CAAC"}
|
|
@@ -12,4 +12,5 @@ export interface BuilderTool extends BuilderToolBase {
|
|
|
12
12
|
export declare const DEFAULT_WORKFLOW_UPDATE_TOOLS: string[];
|
|
13
13
|
export declare function processStreamChunk(streamMode: string, chunk: unknown): StreamOutput | null;
|
|
14
14
|
export declare function createStreamProcessor(stream: AsyncGenerator<[string, unknown], void, unknown>): AsyncGenerator<StreamOutput>;
|
|
15
|
+
export declare function cleanContextTags(text: string): string;
|
|
15
16
|
export declare function formatMessages(messages: Array<AIMessage | HumanMessage | ToolMessage>, builderTools?: BuilderToolBase[]): Array<Record<string, unknown>>;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DEFAULT_WORKFLOW_UPDATE_TOOLS = void 0;
|
|
4
4
|
exports.processStreamChunk = processStreamChunk;
|
|
5
5
|
exports.createStreamProcessor = createStreamProcessor;
|
|
6
|
+
exports.cleanContextTags = cleanContextTags;
|
|
6
7
|
exports.formatMessages = formatMessages;
|
|
7
8
|
const messages_1 = require("@langchain/core/messages");
|
|
8
9
|
exports.DEFAULT_WORKFLOW_UPDATE_TOOLS = [
|
|
@@ -84,11 +85,23 @@ async function* createStreamProcessor(stream) {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
}
|
|
88
|
+
function cleanContextTags(text) {
|
|
89
|
+
return text.replace(/\n*<current_workflow_json>[\s\S]*?<\/current_execution_nodes_schemas>/, '');
|
|
90
|
+
}
|
|
87
91
|
function formatHumanMessage(msg) {
|
|
92
|
+
if (Array.isArray(msg.content)) {
|
|
93
|
+
const textParts = msg.content.filter((c) => typeof c === 'object' && c !== null && 'type' in c && c.type === 'text' && 'text' in c);
|
|
94
|
+
const text = textParts.map((part) => cleanContextTags(part.text)).join('\n');
|
|
95
|
+
return {
|
|
96
|
+
role: 'user',
|
|
97
|
+
type: 'message',
|
|
98
|
+
text,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
88
101
|
return {
|
|
89
102
|
role: 'user',
|
|
90
103
|
type: 'message',
|
|
91
|
-
text: msg.content,
|
|
104
|
+
text: cleanContextTags(msg.content),
|
|
92
105
|
};
|
|
93
106
|
}
|
|
94
107
|
function processArrayContent(content) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../src/utils/stream-processor.ts"],"names":[],"mappings":";;;AAmCA,gDAgGC;AAKD,sDAUC;
|
|
1
|
+
{"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../src/utils/stream-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatWorkflowValidation = formatWorkflowValidation;
|
|
4
|
+
function formatViolationsByCategory(categories) {
|
|
5
|
+
const lines = [];
|
|
6
|
+
for (const [name, violations] of categories) {
|
|
7
|
+
if (!violations.length)
|
|
8
|
+
continue;
|
|
9
|
+
lines.push(`${name}:`);
|
|
10
|
+
for (const violation of violations) {
|
|
11
|
+
lines.push(`- (${violation.type}) ${violation.description}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return lines;
|
|
15
|
+
}
|
|
16
|
+
function formatWorkflowValidation(validation) {
|
|
17
|
+
if (!validation) {
|
|
18
|
+
return 'Workflow validation not yet run. Call the validate_workflow tool to analyze the current workflow.';
|
|
19
|
+
}
|
|
20
|
+
const lines = ['Workflow Validation Summary:'];
|
|
21
|
+
const violationLines = formatViolationsByCategory([
|
|
22
|
+
['Connections', validation.connections],
|
|
23
|
+
['Trigger', validation.trigger],
|
|
24
|
+
['Agent Prompt', validation.agentPrompt],
|
|
25
|
+
['Tools', validation.tools],
|
|
26
|
+
['From AI', validation.fromAi],
|
|
27
|
+
]);
|
|
28
|
+
if (violationLines.length === 0) {
|
|
29
|
+
lines.push('No validation violations detected.');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
lines.push(...violationLines);
|
|
33
|
+
}
|
|
34
|
+
return lines.join('\n');
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=workflow-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-validation.js","sourceRoot":"","sources":["../../src/utils/workflow-validation.ts"],"names":[],"mappings":";;AAmBA,4DAsBC;AAvCD,SAAS,0BAA0B,CAClC,UAAoD;IAEpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,SAAS;QAEjC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,wBAAwB,CAAC,UAA2C;IACnF,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,mGAAmG,CAAC;IAC5G,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,8BAA8B,CAAC,CAAC;IAEzD,MAAM,cAAc,GAAG,0BAA0B,CAAC;QACjD,CAAC,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC;QACvC,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC;QAC/B,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC;QACxC,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;QAC3B,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC;KAC9B,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|