@n8n/ai-workflow-builder 1.7.0 → 1.8.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/agents/planner.agent.d.ts +80 -0
- package/dist/agents/planner.agent.js +133 -0
- package/dist/agents/planner.agent.js.map +1 -0
- package/dist/agents/responder.agent.d.ts +44 -9
- package/dist/agents/responder.agent.js +123 -85
- package/dist/agents/responder.agent.js.map +1 -1
- package/dist/agents/supervisor.agent.d.ts +5 -3
- package/dist/agents/supervisor.agent.js +6 -5
- package/dist/agents/supervisor.agent.js.map +1 -1
- package/dist/ai-workflow-builder-agent.service.d.ts +3 -0
- package/dist/ai-workflow-builder-agent.service.js +93 -3
- package/dist/ai-workflow-builder-agent.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +5 -4
- package/dist/constants.js.map +1 -1
- package/dist/llm-config.d.ts +2 -1
- package/dist/llm-config.js +25 -1
- package/dist/llm-config.js.map +1 -1
- package/dist/multi-agent-workflow-subgraphs.d.ts +90 -6
- package/dist/multi-agent-workflow-subgraphs.js +94 -17
- package/dist/multi-agent-workflow-subgraphs.js.map +1 -1
- package/dist/parent-graph-state.d.ts +6 -0
- package/dist/parent-graph-state.js +20 -0
- package/dist/parent-graph-state.js.map +1 -1
- package/dist/prompts/agents/builder.prompt.d.ts +6 -1
- package/dist/prompts/agents/builder.prompt.js +535 -387
- package/dist/prompts/agents/builder.prompt.js.map +1 -1
- package/dist/prompts/agents/discovery.prompt.d.ts +1 -0
- package/dist/prompts/agents/discovery.prompt.js +334 -349
- package/dist/prompts/agents/discovery.prompt.js.map +1 -1
- package/dist/prompts/agents/index.d.ts +6 -0
- package/dist/prompts/agents/index.js +21 -0
- package/dist/prompts/agents/index.js.map +1 -0
- package/dist/prompts/agents/planner.prompt.d.ts +14 -0
- package/dist/prompts/agents/planner.prompt.js +77 -0
- package/dist/prompts/agents/planner.prompt.js.map +1 -0
- package/dist/prompts/agents/responder.prompt.js +35 -2
- package/dist/prompts/agents/responder.prompt.js.map +1 -1
- package/dist/prompts/agents/supervisor.prompt.js +3 -4
- package/dist/prompts/agents/supervisor.prompt.js.map +1 -1
- package/dist/prompts/index.d.ts +4 -4
- package/dist/prompts/index.js +11 -4
- package/dist/prompts/index.js.map +1 -1
- package/dist/session-manager.service.d.ts +18 -0
- package/dist/session-manager.service.js +154 -1
- package/dist/session-manager.service.js.map +1 -1
- package/dist/subgraphs/builder.subgraph.d.ts +31 -2
- package/dist/subgraphs/builder.subgraph.js +141 -35
- package/dist/subgraphs/builder.subgraph.js.map +1 -1
- package/dist/subgraphs/discovery.subgraph.d.ts +87 -27
- package/dist/subgraphs/discovery.subgraph.js +204 -24
- package/dist/subgraphs/discovery.subgraph.js.map +1 -1
- package/dist/tools/add-node.tool.d.ts +36 -0
- package/dist/tools/add-node.tool.js +28 -8
- package/dist/tools/add-node.tool.js.map +1 -1
- package/dist/tools/best-practices/triage.js +5 -5
- package/dist/tools/builder-tools.js +6 -1
- package/dist/tools/builder-tools.js.map +1 -1
- package/dist/tools/connect-nodes.tool.js +16 -3
- package/dist/tools/connect-nodes.tool.js.map +1 -1
- package/dist/tools/get-execution-logs.tool.d.ts +4 -0
- package/dist/tools/get-execution-logs.tool.js +104 -0
- package/dist/tools/get-execution-logs.tool.js.map +1 -0
- package/dist/tools/get-execution-schema.tool.d.ts +4 -0
- package/dist/tools/get-execution-schema.tool.js +81 -0
- package/dist/tools/get-execution-schema.tool.js.map +1 -0
- package/dist/tools/get-expression-data-mapping.tool.d.ts +4 -0
- package/dist/tools/get-expression-data-mapping.tool.js +85 -0
- package/dist/tools/get-expression-data-mapping.tool.js.map +1 -0
- package/dist/tools/get-node-context.tool.d.ts +13 -0
- package/dist/tools/get-node-context.tool.js +227 -0
- package/dist/tools/get-node-context.tool.js.map +1 -0
- package/dist/tools/get-node-parameter.tool.js +1 -2
- package/dist/tools/get-node-parameter.tool.js.map +1 -1
- package/dist/tools/get-workflow-overview.tool.d.ts +11 -0
- package/dist/tools/get-workflow-overview.tool.js +158 -0
- package/dist/tools/get-workflow-overview.tool.js.map +1 -0
- package/dist/tools/helpers/state.d.ts +1 -0
- package/dist/tools/helpers/state.js +10 -0
- package/dist/tools/helpers/state.js.map +1 -1
- package/dist/tools/submit-questions.tool.d.ts +71 -0
- package/dist/tools/submit-questions.tool.js +74 -0
- package/dist/tools/submit-questions.tool.js.map +1 -0
- package/dist/tools/update-node-parameters.tool.js +2 -3
- package/dist/tools/update-node-parameters.tool.js.map +1 -1
- package/dist/tools/utils/mermaid.utils.d.ts +9 -1
- package/dist/tools/utils/mermaid.utils.js +9 -5
- package/dist/tools/utils/mermaid.utils.js.map +1 -1
- package/dist/tools/utils/node-creation.utils.d.ts +6 -2
- package/dist/tools/utils/node-creation.utils.js +2 -1
- package/dist/tools/utils/node-creation.utils.js.map +1 -1
- package/dist/tools/validate-configuration.tool.js +15 -7
- package/dist/tools/validate-configuration.tool.js.map +1 -1
- package/dist/tools/validate-structure.tool.js +3 -3
- package/dist/tools/validate-structure.tool.js.map +1 -1
- package/dist/types/coordination.d.ts +9 -9
- package/dist/types/coordination.js +14 -4
- package/dist/types/coordination.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/planning.d.ts +48 -0
- package/dist/types/planning.js +3 -0
- package/dist/types/planning.js.map +1 -0
- package/dist/types/streaming.d.ts +14 -1
- package/dist/types/tools.d.ts +16 -0
- package/dist/utils/context-builders.d.ts +8 -0
- package/dist/utils/context-builders.js +249 -8
- package/dist/utils/context-builders.js.map +1 -1
- package/dist/utils/coordination-log.d.ts +2 -4
- package/dist/utils/coordination-log.js +0 -8
- package/dist/utils/coordination-log.js.map +1 -1
- package/dist/utils/node-helpers.d.ts +1 -0
- package/dist/utils/node-helpers.js +7 -0
- package/dist/utils/node-helpers.js.map +1 -1
- package/dist/utils/plan-helpers.d.ts +2 -0
- package/dist/utils/plan-helpers.js +26 -0
- package/dist/utils/plan-helpers.js.map +1 -0
- package/dist/utils/stream-processor.js +137 -8
- package/dist/utils/stream-processor.js.map +1 -1
- package/dist/utils/subgraph-helpers.js +7 -1
- package/dist/utils/subgraph-helpers.js.map +1 -1
- package/dist/utils/truncate-json.d.ts +5 -0
- package/dist/utils/truncate-json.js +18 -0
- package/dist/utils/truncate-json.js.map +1 -0
- package/dist/validation/checks/credentials.js +2 -6
- package/dist/validation/checks/credentials.js.map +1 -1
- package/dist/validation/checks/index.d.ts +1 -0
- package/dist/validation/checks/index.js +3 -1
- package/dist/validation/checks/index.js.map +1 -1
- package/dist/validation/checks/parameters.d.ts +4 -0
- package/dist/validation/checks/parameters.js +165 -0
- package/dist/validation/checks/parameters.js.map +1 -0
- package/dist/validation/programmatic.js +2 -0
- package/dist/validation/programmatic.js.map +1 -1
- package/dist/validation/types.d.ts +3 -1
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -1
- package/dist/workflow-builder-agent.d.ts +7 -1
- package/dist/workflow-builder-agent.js +43 -11
- package/dist/workflow-builder-agent.js.map +1 -1
- package/package.json +8 -7
- package/dist/prompts/agents/configurator.prompt.d.ts +0 -3
- package/dist/prompts/agents/configurator.prompt.js +0 -260
- package/dist/prompts/agents/configurator.prompt.js.map +0 -1
- package/dist/subgraphs/configurator.subgraph.d.ts +0 -158
- package/dist/subgraphs/configurator.subgraph.js +0 -234
- package/dist/subgraphs/configurator.subgraph.js.map +0 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET_EXPRESSION_DATA_MAPPING_TOOL = void 0;
|
|
4
|
+
exports.createGetExpressionDataMappingTool = createGetExpressionDataMappingTool;
|
|
5
|
+
const tools_1 = require("@langchain/core/tools");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const truncate_json_1 = require("../utils/truncate-json");
|
|
9
|
+
const progress_1 = require("./helpers/progress");
|
|
10
|
+
const response_1 = require("./helpers/response");
|
|
11
|
+
const state_1 = require("./helpers/state");
|
|
12
|
+
const DISPLAY_TITLE = 'Getting expression data mapping';
|
|
13
|
+
const getExpressionDataMappingSchema = zod_1.z.object({
|
|
14
|
+
nodeName: zod_1.z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Optional: Filter to get expression values for a specific node only'),
|
|
18
|
+
});
|
|
19
|
+
function formatExpressionValues(expressionValues, nodeName) {
|
|
20
|
+
if (!expressionValues || Object.keys(expressionValues).length === 0) {
|
|
21
|
+
return nodeName
|
|
22
|
+
? `No expression data mapping found for node "${nodeName}"`
|
|
23
|
+
: 'No expression data mapping available. The workflow may not have expressions or has not been executed.';
|
|
24
|
+
}
|
|
25
|
+
const filtered = nodeName
|
|
26
|
+
? Object.fromEntries(Object.entries(expressionValues).filter(([key]) => key === nodeName))
|
|
27
|
+
: expressionValues;
|
|
28
|
+
if (Object.keys(filtered).length === 0) {
|
|
29
|
+
return `No expression data mapping found for node "${nodeName}"`;
|
|
30
|
+
}
|
|
31
|
+
const parts = ['<expression_data_mapping>'];
|
|
32
|
+
parts.push((0, truncate_json_1.truncateJson)(filtered));
|
|
33
|
+
parts.push('</expression_data_mapping>');
|
|
34
|
+
return parts.join('\n');
|
|
35
|
+
}
|
|
36
|
+
exports.GET_EXPRESSION_DATA_MAPPING_TOOL = {
|
|
37
|
+
toolName: 'get_expression_data_mapping',
|
|
38
|
+
displayTitle: DISPLAY_TITLE,
|
|
39
|
+
};
|
|
40
|
+
function createGetExpressionDataMappingTool(logger) {
|
|
41
|
+
const dynamicTool = (0, tools_1.tool)((input, config) => {
|
|
42
|
+
const reporter = (0, progress_1.createProgressReporter)(config, exports.GET_EXPRESSION_DATA_MAPPING_TOOL.toolName, DISPLAY_TITLE);
|
|
43
|
+
try {
|
|
44
|
+
const validatedInput = getExpressionDataMappingSchema.parse(input);
|
|
45
|
+
const { nodeName } = validatedInput;
|
|
46
|
+
reporter.start(validatedInput);
|
|
47
|
+
const state = (0, state_1.getWorkflowState)();
|
|
48
|
+
const expressionValues = state.workflowContext?.expressionValues;
|
|
49
|
+
const nodeCount = expressionValues ? Object.keys(expressionValues).length : 0;
|
|
50
|
+
logger?.debug(`Getting expression data mapping${nodeName ? ` for node ${nodeName}` : ''}, found ${nodeCount} nodes with expressions`);
|
|
51
|
+
const formattedMapping = formatExpressionValues(expressionValues, nodeName);
|
|
52
|
+
const output = {
|
|
53
|
+
found: nodeCount > 0,
|
|
54
|
+
nodesWithExpressions: nodeCount,
|
|
55
|
+
message: nodeCount > 0 ? 'Expression data mapping retrieved' : 'No expressions found',
|
|
56
|
+
};
|
|
57
|
+
reporter.complete(output);
|
|
58
|
+
return (0, response_1.createSuccessResponse)(config, formattedMapping);
|
|
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_EXPRESSION_DATA_MAPPING_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_EXPRESSION_DATA_MAPPING_TOOL.toolName,
|
|
77
|
+
description: 'Get the resolved expression values from the last workflow execution. Shows what data was used in expressions like {{ $json.fieldName }} and their resolved values.',
|
|
78
|
+
schema: getExpressionDataMappingSchema,
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
tool: dynamicTool,
|
|
82
|
+
...exports.GET_EXPRESSION_DATA_MAPPING_TOOL,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=get-expression-data-mapping.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-expression-data-mapping.tool.js","sourceRoot":"","sources":["../../src/tools/get-expression-data-mapping.tool.ts"],"names":[],"mappings":";;;AA0DA,gFAuEC;AAjID,iDAA6C;AAE7C,6BAAwB;AAExB,sCAAgE;AAGhE,0DAAsD;AAEtD,iDAA4D;AAC5D,iDAAgF;AAChF,2CAAmD;AAEnD,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAKxD,MAAM,8BAA8B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;CAChF,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAC9B,gBAA+D,EAC/D,QAAiB;IAEjB,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,QAAQ;YACd,CAAC,CAAC,8CAA8C,QAAQ,GAAG;YAC3D,CAAC,CAAC,uGAAuG,CAAC;IAC5G,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ;QACxB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;QAC1F,CAAC,CAAC,gBAAgB,CAAC;IAEpB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,8CAA8C,QAAQ,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,IAAA,4BAAY,EAAC,QAAQ,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAEY,QAAA,gCAAgC,GAAoB;IAChE,QAAQ,EAAE,6BAA6B;IACvC,YAAY,EAAE,aAAa;CAC3B,CAAC;AAKF,SAAgB,kCAAkC,CAAC,MAAe;IACjE,MAAM,WAAW,GAAG,IAAA,YAAI,EACvB,CAAC,KAAc,EAAE,MAAM,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,IAAA,iCAAsB,EACtC,MAAM,EACN,wCAAgC,CAAC,QAAQ,EACzC,aAAa,CACb,CAAC;QAEF,IAAI,CAAC;YAEJ,MAAM,cAAc,GAAG,8BAA8B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;YAGpC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAG/B,MAAM,KAAK,GAAG,IAAA,wBAAgB,GAAE,CAAC;YACjC,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,EAAE,gBAAgB,CAAC;YAEjE,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,EAAE,KAAK,CACZ,kCAAkC,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,SAAS,yBAAyB,CACtH,CAAC;YAGF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAE5E,MAAM,MAAM,GAAmC;gBAC9C,KAAK,EAAE,SAAS,GAAG,CAAC;gBACpB,oBAAoB,EAAE,SAAS;gBAC/B,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,sBAAsB;aACrF,CAAC;YACF,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAG1B,OAAO,IAAA,gCAAqB,EAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,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,wBAAwB,EACjE;gBACC,QAAQ,EAAE,wCAAgC,CAAC,QAAQ;gBACnD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACjD,CACD,CAAC;YACF,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,wCAAgC,CAAC,QAAQ;QAC/C,WAAW,EACV,oKAAoK;QACrK,MAAM,EAAE,8BAA8B;KACtC,CACD,CAAC;IAEF,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,GAAG,wCAAgC;KACnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Logger } from '@n8n/backend-common';
|
|
2
|
+
import type { BuilderTool, BuilderToolBase } from '../utils/stream-processor';
|
|
3
|
+
export interface GetNodeContextOutput {
|
|
4
|
+
found: boolean;
|
|
5
|
+
nodeName: string;
|
|
6
|
+
nodeType?: string;
|
|
7
|
+
parentCount: number;
|
|
8
|
+
childCount: number;
|
|
9
|
+
hasExecutionData: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const GET_NODE_CONTEXT_TOOL: BuilderToolBase;
|
|
13
|
+
export declare function createGetNodeContextTool(logger?: Logger): BuilderTool;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET_NODE_CONTEXT_TOOL = void 0;
|
|
4
|
+
exports.createGetNodeContextTool = createGetNodeContextTool;
|
|
5
|
+
const tools_1 = require("@langchain/core/tools");
|
|
6
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const node_helpers_1 = require("../utils/node-helpers");
|
|
10
|
+
const truncate_json_1 = require("../utils/truncate-json");
|
|
11
|
+
const progress_1 = require("./helpers/progress");
|
|
12
|
+
const response_1 = require("./helpers/response");
|
|
13
|
+
const state_1 = require("./helpers/state");
|
|
14
|
+
const DISPLAY_TITLE = 'Getting node context';
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function getNodeRunData(executionData, nodeName) {
|
|
19
|
+
if (!executionData || !isRecord(executionData.runData)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return executionData.runData[nodeName];
|
|
23
|
+
}
|
|
24
|
+
const getNodeContextSchema = zod_1.z.object({
|
|
25
|
+
nodeName: zod_1.z.string().describe('The name of the node to get context for'),
|
|
26
|
+
includeExecutionData: zod_1.z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.default(true)
|
|
30
|
+
.describe('Include execution data for this node if available'),
|
|
31
|
+
});
|
|
32
|
+
function classifyNode(nodeType, hasAiInputs, hasAiOutputs) {
|
|
33
|
+
if ((0, node_helpers_1.isTriggerNodeType)(nodeType)) {
|
|
34
|
+
return 'trigger';
|
|
35
|
+
}
|
|
36
|
+
if (hasAiInputs) {
|
|
37
|
+
return 'ai_parent';
|
|
38
|
+
}
|
|
39
|
+
if (hasAiOutputs) {
|
|
40
|
+
return 'ai_subnode';
|
|
41
|
+
}
|
|
42
|
+
return 'regular';
|
|
43
|
+
}
|
|
44
|
+
function getParentConnections(nodeName, connectionsByDestination) {
|
|
45
|
+
const nodeConns = connectionsByDestination[nodeName];
|
|
46
|
+
if (!nodeConns)
|
|
47
|
+
return [];
|
|
48
|
+
const parents = [];
|
|
49
|
+
for (const [type, typeConns] of Object.entries(nodeConns)) {
|
|
50
|
+
if (!(0, n8n_workflow_1.isNodeConnectionType)(type) || !typeConns)
|
|
51
|
+
continue;
|
|
52
|
+
for (const connArray of typeConns) {
|
|
53
|
+
if (!connArray)
|
|
54
|
+
continue;
|
|
55
|
+
for (const conn of connArray) {
|
|
56
|
+
parents.push({ node: conn.node, type });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return parents;
|
|
61
|
+
}
|
|
62
|
+
function getChildConnections(nodeName, connections) {
|
|
63
|
+
const nodeConns = connections[nodeName];
|
|
64
|
+
if (!nodeConns)
|
|
65
|
+
return [];
|
|
66
|
+
const children = [];
|
|
67
|
+
for (const [type, typeConns] of Object.entries(nodeConns)) {
|
|
68
|
+
if (!(0, n8n_workflow_1.isNodeConnectionType)(type) || !typeConns)
|
|
69
|
+
continue;
|
|
70
|
+
for (const connArray of typeConns) {
|
|
71
|
+
if (!connArray)
|
|
72
|
+
continue;
|
|
73
|
+
for (const conn of connArray) {
|
|
74
|
+
children.push({ node: conn.node, type });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return children;
|
|
79
|
+
}
|
|
80
|
+
function buildNodeContext(node, workflow, includeExecutionData, executionSchema, executionData) {
|
|
81
|
+
const parts = [`<node_context name="${node.name}" id="${node.id}">`];
|
|
82
|
+
parts.push(`ID: ${node.id}`);
|
|
83
|
+
parts.push(`Type: ${node.type}`);
|
|
84
|
+
if (node.typeVersion) {
|
|
85
|
+
parts.push(`Version: ${node.typeVersion}`);
|
|
86
|
+
}
|
|
87
|
+
const connectionsByDestination = (0, n8n_workflow_1.mapConnectionsByDestination)(workflow.connections);
|
|
88
|
+
const parents = getParentConnections(node.name, connectionsByDestination);
|
|
89
|
+
const children = getChildConnections(node.name, workflow.connections);
|
|
90
|
+
const hasAiInputs = parents.some((p) => p.type !== 'main');
|
|
91
|
+
const hasAiOutputs = children.some((c) => c.type !== 'main');
|
|
92
|
+
const classification = classifyNode(node.type, hasAiInputs, hasAiOutputs);
|
|
93
|
+
parts.push(`Classification: ${classification}`);
|
|
94
|
+
parts.push('');
|
|
95
|
+
if (parents.length > 0) {
|
|
96
|
+
parts.push('Parent nodes (upstream):');
|
|
97
|
+
for (const parent of parents) {
|
|
98
|
+
if (parent.type === 'main') {
|
|
99
|
+
parts.push(` ← ${parent.node}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
parts.push(` ←[${parent.type}] ${parent.node}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
parts.push('Parent nodes: None (this is a start node)');
|
|
108
|
+
}
|
|
109
|
+
parts.push('');
|
|
110
|
+
if (children.length > 0) {
|
|
111
|
+
parts.push('Child nodes (downstream):');
|
|
112
|
+
for (const child of children) {
|
|
113
|
+
if (child.type === 'main') {
|
|
114
|
+
parts.push(` → ${child.node}`);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
parts.push(` -[${child.type}]-> ${child.node}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
parts.push('Child nodes: None (this is an end node)');
|
|
123
|
+
}
|
|
124
|
+
parts.push('');
|
|
125
|
+
parts.push('Parameters:');
|
|
126
|
+
if (node.parameters && Object.keys(node.parameters).length > 0) {
|
|
127
|
+
parts.push((0, truncate_json_1.truncateJson)(node.parameters));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
parts.push(' (no parameters set)');
|
|
131
|
+
}
|
|
132
|
+
if (includeExecutionData) {
|
|
133
|
+
parts.push('');
|
|
134
|
+
const nodeSchema = executionSchema.find((s) => s.nodeName === node.name);
|
|
135
|
+
if (nodeSchema) {
|
|
136
|
+
parts.push('Output schema (from last execution):');
|
|
137
|
+
parts.push((0, truncate_json_1.truncateJson)(nodeSchema.schema));
|
|
138
|
+
}
|
|
139
|
+
const nodeRunData = getNodeRunData(executionData, node.name);
|
|
140
|
+
if (nodeRunData) {
|
|
141
|
+
parts.push('');
|
|
142
|
+
parts.push('Execution data (from last run):');
|
|
143
|
+
parts.push((0, truncate_json_1.truncateJson)(nodeRunData));
|
|
144
|
+
}
|
|
145
|
+
if (!nodeSchema && !nodeRunData) {
|
|
146
|
+
parts.push('No execution data available for this node');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
parts.push('</node_context>');
|
|
150
|
+
return parts.join('\n');
|
|
151
|
+
}
|
|
152
|
+
exports.GET_NODE_CONTEXT_TOOL = {
|
|
153
|
+
toolName: 'get_node_context',
|
|
154
|
+
displayTitle: DISPLAY_TITLE,
|
|
155
|
+
};
|
|
156
|
+
function createGetNodeContextTool(logger) {
|
|
157
|
+
const dynamicTool = (0, tools_1.tool)((input, config) => {
|
|
158
|
+
const reporter = (0, progress_1.createProgressReporter)(config, exports.GET_NODE_CONTEXT_TOOL.toolName, DISPLAY_TITLE);
|
|
159
|
+
try {
|
|
160
|
+
const validatedInput = getNodeContextSchema.parse(input);
|
|
161
|
+
const { nodeName, includeExecutionData } = validatedInput;
|
|
162
|
+
reporter.start(validatedInput);
|
|
163
|
+
const workflow = (0, state_1.getEffectiveWorkflow)();
|
|
164
|
+
const state = (0, state_1.getWorkflowState)();
|
|
165
|
+
const node = workflow.nodes.find((n) => n.name === nodeName);
|
|
166
|
+
if (!node) {
|
|
167
|
+
const output = {
|
|
168
|
+
found: false,
|
|
169
|
+
nodeName,
|
|
170
|
+
parentCount: 0,
|
|
171
|
+
childCount: 0,
|
|
172
|
+
hasExecutionData: false,
|
|
173
|
+
message: `Node "${nodeName}" not found in workflow`,
|
|
174
|
+
};
|
|
175
|
+
reporter.complete(output);
|
|
176
|
+
return (0, response_1.createSuccessResponse)(config, `Node "${nodeName}" not found. Available nodes: ${workflow.nodes.map((n) => n.name).join(', ')}`);
|
|
177
|
+
}
|
|
178
|
+
const executionSchema = state.workflowContext?.executionSchema ?? [];
|
|
179
|
+
const executionData = state.workflowContext?.executionData;
|
|
180
|
+
logger?.debug(`Getting context for node "${nodeName}" (${node.type})`);
|
|
181
|
+
const formattedContext = buildNodeContext(node, workflow, includeExecutionData, executionSchema, executionData);
|
|
182
|
+
const connectionsByDestination = (0, n8n_workflow_1.mapConnectionsByDestination)(workflow.connections);
|
|
183
|
+
const parents = getParentConnections(nodeName, connectionsByDestination);
|
|
184
|
+
const children = getChildConnections(nodeName, workflow.connections);
|
|
185
|
+
const nodeSchema = executionSchema.find((s) => s.nodeName === nodeName);
|
|
186
|
+
const nodeRunData = getNodeRunData(executionData, nodeName);
|
|
187
|
+
const output = {
|
|
188
|
+
found: true,
|
|
189
|
+
nodeName,
|
|
190
|
+
nodeType: node.type,
|
|
191
|
+
parentCount: parents.length,
|
|
192
|
+
childCount: children.length,
|
|
193
|
+
hasExecutionData: nodeSchema !== undefined || nodeRunData !== undefined,
|
|
194
|
+
message: `Found node "${nodeName}" with ${parents.length} parents and ${children.length} children`,
|
|
195
|
+
};
|
|
196
|
+
reporter.complete(output);
|
|
197
|
+
return (0, response_1.createSuccessResponse)(config, formattedContext);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
201
|
+
const validationError = new errors_1.ValidationError('Invalid input parameters', {
|
|
202
|
+
extra: { errors: error.errors },
|
|
203
|
+
});
|
|
204
|
+
reporter.error(validationError);
|
|
205
|
+
return (0, response_1.createErrorResponse)(config, validationError);
|
|
206
|
+
}
|
|
207
|
+
const errorMessage = error instanceof Error
|
|
208
|
+
? `${error.message}${error.stack ? `\n${error.stack}` : ''}`
|
|
209
|
+
: 'Unknown error occurred';
|
|
210
|
+
const toolError = new errors_1.ToolExecutionError(errorMessage, {
|
|
211
|
+
toolName: exports.GET_NODE_CONTEXT_TOOL.toolName,
|
|
212
|
+
cause: error instanceof Error ? error : undefined,
|
|
213
|
+
});
|
|
214
|
+
reporter.error(toolError);
|
|
215
|
+
return (0, response_1.createErrorResponse)(config, toolError);
|
|
216
|
+
}
|
|
217
|
+
}, {
|
|
218
|
+
name: exports.GET_NODE_CONTEXT_TOOL.toolName,
|
|
219
|
+
description: 'Get full context for a specific node including its parameters, parent nodes (upstream), child nodes (downstream), classification, and execution data. Use this before configuring a node to understand its current state and connections.',
|
|
220
|
+
schema: getNodeContextSchema,
|
|
221
|
+
});
|
|
222
|
+
return {
|
|
223
|
+
tool: dynamicTool,
|
|
224
|
+
...exports.GET_NODE_CONTEXT_TOOL,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=get-node-context.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-node-context.tool.js","sourceRoot":"","sources":["../../src/tools/get-node-context.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,8 +55,7 @@ function createGetNodeParameterTool(logger) {
|
|
|
55
55
|
reporter.start(validatedInput);
|
|
56
56
|
logger?.debug(`Looking up parameter ${path} for ${nodeId}...`);
|
|
57
57
|
(0, progress_1.reportProgress)(reporter, `Looking up parameter ${path} for ${nodeId}...`);
|
|
58
|
-
const
|
|
59
|
-
const workflow = (0, helpers_1.getCurrentWorkflow)(state);
|
|
58
|
+
const workflow = (0, helpers_1.getEffectiveWorkflow)();
|
|
60
59
|
const node = (0, validation_1.validateNodeExists)(nodeId, workflow.nodes);
|
|
61
60
|
if (!node) {
|
|
62
61
|
logger?.debug(`Node with ID ${nodeId} not found`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-node-parameter.tool.js","sourceRoot":"","sources":["../../src/tools/get-node-parameter.tool.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"get-node-parameter.tool.js","sourceRoot":"","sources":["../../src/tools/get-node-parameter.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '@n8n/backend-common';
|
|
2
|
+
import type { BuilderTool, BuilderToolBase } from '../utils/stream-processor';
|
|
3
|
+
export interface GetWorkflowOverviewOutput {
|
|
4
|
+
nodeCount: number;
|
|
5
|
+
connectionCount: number;
|
|
6
|
+
hasTrigger: boolean;
|
|
7
|
+
format: 'mermaid' | 'summary';
|
|
8
|
+
message: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const GET_WORKFLOW_OVERVIEW_TOOL: BuilderToolBase;
|
|
11
|
+
export declare function createGetWorkflowOverviewTool(logger?: Logger): BuilderTool;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET_WORKFLOW_OVERVIEW_TOOL = void 0;
|
|
4
|
+
exports.createGetWorkflowOverviewTool = createGetWorkflowOverviewTool;
|
|
5
|
+
const tools_1 = require("@langchain/core/tools");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const node_helpers_1 = require("../utils/node-helpers");
|
|
9
|
+
const truncate_json_1 = require("../utils/truncate-json");
|
|
10
|
+
const progress_1 = require("./helpers/progress");
|
|
11
|
+
const response_1 = require("./helpers/response");
|
|
12
|
+
const state_1 = require("./helpers/state");
|
|
13
|
+
const mermaid_utils_1 = require("./utils/mermaid.utils");
|
|
14
|
+
const DISPLAY_TITLE = 'Getting workflow overview';
|
|
15
|
+
const getWorkflowOverviewSchema = zod_1.z.object({
|
|
16
|
+
format: zod_1.z
|
|
17
|
+
.enum(['mermaid', 'summary'])
|
|
18
|
+
.optional()
|
|
19
|
+
.default('mermaid')
|
|
20
|
+
.describe('Output format: mermaid (visual diagram) or summary (text list)'),
|
|
21
|
+
includeParameters: zod_1.z
|
|
22
|
+
.boolean()
|
|
23
|
+
.optional()
|
|
24
|
+
.default(true)
|
|
25
|
+
.describe('Include node parameters in the output (recommended to identify configuration issues)'),
|
|
26
|
+
});
|
|
27
|
+
function findTriggerNode(nodes) {
|
|
28
|
+
return nodes.find((n) => (0, node_helpers_1.isTriggerNodeType)(n.type));
|
|
29
|
+
}
|
|
30
|
+
function countConnections(connections) {
|
|
31
|
+
let count = 0;
|
|
32
|
+
for (const sourceConns of Object.values(connections)) {
|
|
33
|
+
if (typeof sourceConns === 'object' && sourceConns !== null) {
|
|
34
|
+
for (const typeConns of Object.values(sourceConns)) {
|
|
35
|
+
if (Array.isArray(typeConns)) {
|
|
36
|
+
for (const connArray of typeConns) {
|
|
37
|
+
if (Array.isArray(connArray)) {
|
|
38
|
+
count += connArray.length;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return count;
|
|
46
|
+
}
|
|
47
|
+
function buildSummaryFormat(nodes, triggerNode, includeParameters) {
|
|
48
|
+
const parts = ['<workflow_summary>'];
|
|
49
|
+
parts.push(`Node count: ${nodes.length}`);
|
|
50
|
+
if (triggerNode) {
|
|
51
|
+
parts.push(`Trigger: ${triggerNode.name} [id: ${triggerNode.id}] (${triggerNode.type})`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
parts.push('Trigger: None');
|
|
55
|
+
}
|
|
56
|
+
parts.push('');
|
|
57
|
+
parts.push('Nodes:');
|
|
58
|
+
for (const node of nodes) {
|
|
59
|
+
const nodeHeader = `- ${node.name} [id: ${node.id}] (${node.type})`;
|
|
60
|
+
if (includeParameters && node.parameters && Object.keys(node.parameters).length > 0) {
|
|
61
|
+
parts.push(nodeHeader);
|
|
62
|
+
parts.push(` Parameters: ${(0, truncate_json_1.truncateJson)(node.parameters, { indent: 0 })}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
parts.push(nodeHeader);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
parts.push('</workflow_summary>');
|
|
69
|
+
return parts.join('\n');
|
|
70
|
+
}
|
|
71
|
+
function buildMermaidFormat(workflow, triggerNode, includeParameters) {
|
|
72
|
+
const parts = ['<workflow_overview>'];
|
|
73
|
+
parts.push(`Node count: ${workflow.nodes.length}`);
|
|
74
|
+
if (triggerNode) {
|
|
75
|
+
parts.push(`Trigger: ${triggerNode.name} (${triggerNode.type})`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
parts.push('Trigger: None');
|
|
79
|
+
}
|
|
80
|
+
parts.push('');
|
|
81
|
+
const mermaid = (0, mermaid_utils_1.mermaidStringify)({ workflow }, {
|
|
82
|
+
includeNodeType: true,
|
|
83
|
+
includeNodeParameters: includeParameters,
|
|
84
|
+
includeNodeName: true,
|
|
85
|
+
});
|
|
86
|
+
parts.push(mermaid);
|
|
87
|
+
parts.push('</workflow_overview>');
|
|
88
|
+
return parts.join('\n');
|
|
89
|
+
}
|
|
90
|
+
exports.GET_WORKFLOW_OVERVIEW_TOOL = {
|
|
91
|
+
toolName: 'get_workflow_overview',
|
|
92
|
+
displayTitle: DISPLAY_TITLE,
|
|
93
|
+
};
|
|
94
|
+
function createGetWorkflowOverviewTool(logger) {
|
|
95
|
+
const dynamicTool = (0, tools_1.tool)((input, config) => {
|
|
96
|
+
const reporter = (0, progress_1.createProgressReporter)(config, exports.GET_WORKFLOW_OVERVIEW_TOOL.toolName, DISPLAY_TITLE);
|
|
97
|
+
try {
|
|
98
|
+
const validatedInput = getWorkflowOverviewSchema.parse(input);
|
|
99
|
+
const { format, includeParameters } = validatedInput;
|
|
100
|
+
reporter.start(validatedInput);
|
|
101
|
+
const workflow = (0, state_1.getEffectiveWorkflow)();
|
|
102
|
+
if (!workflow || workflow.nodes.length === 0) {
|
|
103
|
+
const output = {
|
|
104
|
+
nodeCount: 0,
|
|
105
|
+
connectionCount: 0,
|
|
106
|
+
hasTrigger: false,
|
|
107
|
+
format,
|
|
108
|
+
message: 'Empty workflow',
|
|
109
|
+
};
|
|
110
|
+
reporter.complete(output);
|
|
111
|
+
return (0, response_1.createSuccessResponse)(config, 'Empty workflow - no nodes to display');
|
|
112
|
+
}
|
|
113
|
+
const triggerNode = findTriggerNode(workflow.nodes);
|
|
114
|
+
const connectionCount = countConnections(workflow.connections);
|
|
115
|
+
logger?.debug(`Getting workflow overview: ${workflow.nodes.length} nodes, ${connectionCount} connections, format: ${format}`);
|
|
116
|
+
let formattedOutput;
|
|
117
|
+
if (format === 'summary') {
|
|
118
|
+
formattedOutput = buildSummaryFormat(workflow.nodes, triggerNode, includeParameters);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
formattedOutput = buildMermaidFormat(workflow, triggerNode, includeParameters);
|
|
122
|
+
}
|
|
123
|
+
const output = {
|
|
124
|
+
nodeCount: workflow.nodes.length,
|
|
125
|
+
connectionCount,
|
|
126
|
+
hasTrigger: !!triggerNode,
|
|
127
|
+
format,
|
|
128
|
+
message: `Workflow has ${workflow.nodes.length} nodes with ${connectionCount} connections`,
|
|
129
|
+
};
|
|
130
|
+
reporter.complete(output);
|
|
131
|
+
return (0, response_1.createSuccessResponse)(config, formattedOutput);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
135
|
+
const validationError = new errors_1.ValidationError('Invalid input parameters', {
|
|
136
|
+
extra: { errors: error.errors },
|
|
137
|
+
});
|
|
138
|
+
reporter.error(validationError);
|
|
139
|
+
return (0, response_1.createErrorResponse)(config, validationError);
|
|
140
|
+
}
|
|
141
|
+
const toolError = new errors_1.ToolExecutionError(error instanceof Error ? error.message : 'Unknown error occurred', {
|
|
142
|
+
toolName: exports.GET_WORKFLOW_OVERVIEW_TOOL.toolName,
|
|
143
|
+
cause: error instanceof Error ? error : undefined,
|
|
144
|
+
});
|
|
145
|
+
reporter.error(toolError);
|
|
146
|
+
return (0, response_1.createErrorResponse)(config, toolError);
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
name: exports.GET_WORKFLOW_OVERVIEW_TOOL.toolName,
|
|
150
|
+
description: 'Get a high-level overview of the current workflow including a Mermaid flowchart diagram showing node connections and flow. Use this to understand the overall workflow structure before making changes.',
|
|
151
|
+
schema: getWorkflowOverviewSchema,
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
tool: dynamicTool,
|
|
155
|
+
...exports.GET_WORKFLOW_OVERVIEW_TOOL,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=get-workflow-overview.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-workflow-overview.tool.js","sourceRoot":"","sources":["../../src/tools/get-workflow-overview.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import type { WorkflowState } from '../../workflow-state';
|
|
|
4
4
|
export declare function getCurrentWorkflow(state: typeof WorkflowState.State): SimpleWorkflow;
|
|
5
5
|
export declare function getWorkflowState(): typeof WorkflowState.State;
|
|
6
6
|
export declare function getCurrentWorkflowFromTaskInput(): SimpleWorkflow;
|
|
7
|
+
export declare function getEffectiveWorkflow(): SimpleWorkflow;
|
|
7
8
|
export declare function updateWorkflowConnections(connections: SimpleWorkflow['connections']): Partial<typeof WorkflowState.State>;
|
|
8
9
|
export declare function addNodeToWorkflow(node: INode): Partial<typeof WorkflowState.State>;
|
|
9
10
|
export declare function addNodesToWorkflow(nodes: INode[]): Partial<typeof WorkflowState.State>;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getCurrentWorkflow = getCurrentWorkflow;
|
|
4
4
|
exports.getWorkflowState = getWorkflowState;
|
|
5
5
|
exports.getCurrentWorkflowFromTaskInput = getCurrentWorkflowFromTaskInput;
|
|
6
|
+
exports.getEffectiveWorkflow = getEffectiveWorkflow;
|
|
6
7
|
exports.updateWorkflowConnections = updateWorkflowConnections;
|
|
7
8
|
exports.addNodeToWorkflow = addNodeToWorkflow;
|
|
8
9
|
exports.addNodesToWorkflow = addNodesToWorkflow;
|
|
@@ -13,6 +14,7 @@ exports.addConnectionToWorkflow = addConnectionToWorkflow;
|
|
|
13
14
|
exports.removeConnectionFromWorkflow = removeConnectionFromWorkflow;
|
|
14
15
|
exports.renameNodeInWorkflow = renameNodeInWorkflow;
|
|
15
16
|
const langgraph_1 = require("@langchain/langgraph");
|
|
17
|
+
const operations_processor_1 = require("../../utils/operations-processor");
|
|
16
18
|
function getCurrentWorkflow(state) {
|
|
17
19
|
return state.workflowJSON;
|
|
18
20
|
}
|
|
@@ -23,6 +25,14 @@ function getCurrentWorkflowFromTaskInput() {
|
|
|
23
25
|
const state = getWorkflowState();
|
|
24
26
|
return getCurrentWorkflow(state);
|
|
25
27
|
}
|
|
28
|
+
function getEffectiveWorkflow() {
|
|
29
|
+
const state = getWorkflowState();
|
|
30
|
+
const pending = state.workflowOperations;
|
|
31
|
+
if (!pending || pending.length === 0) {
|
|
32
|
+
return state.workflowJSON;
|
|
33
|
+
}
|
|
34
|
+
return (0, operations_processor_1.applyOperations)(structuredClone(state.workflowJSON), pending);
|
|
35
|
+
}
|
|
26
36
|
function updateWorkflowConnections(connections) {
|
|
27
37
|
return {
|
|
28
38
|
workflowOperations: [{ type: 'mergeConnections', connections }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tools/helpers/state.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tools/helpers/state.ts"],"names":[],"mappings":"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"}
|