@elizaos/plugin-n8n-workflow 1.0.11 → 1.1.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.
Files changed (70) hide show
  1. package/README.md +106 -10
  2. package/dist/actions/createWorkflow.d.ts +7 -1
  3. package/dist/actions/createWorkflow.d.ts.map +1 -1
  4. package/dist/actions/createWorkflow.js +43 -11
  5. package/dist/actions/createWorkflow.js.map +1 -1
  6. package/dist/actions/index.d.ts +1 -0
  7. package/dist/actions/index.d.ts.map +1 -1
  8. package/dist/actions/index.js +1 -0
  9. package/dist/actions/index.js.map +1 -1
  10. package/dist/actions/modifyExistingWorkflow.d.ts +3 -0
  11. package/dist/actions/modifyExistingWorkflow.d.ts.map +1 -0
  12. package/dist/actions/modifyExistingWorkflow.js +199 -0
  13. package/dist/actions/modifyExistingWorkflow.js.map +1 -0
  14. package/dist/data/defaultNodes.json +2881 -1374
  15. package/dist/data/schemaIndex.json +125381 -0
  16. package/dist/data/triggerSchemaIndex.json +1217 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/prompts/actionResponse.d.ts +1 -1
  21. package/dist/prompts/actionResponse.d.ts.map +1 -1
  22. package/dist/prompts/actionResponse.js +1 -1
  23. package/dist/prompts/fieldCorrection.d.ts +3 -0
  24. package/dist/prompts/fieldCorrection.d.ts.map +1 -0
  25. package/dist/prompts/fieldCorrection.js +20 -0
  26. package/dist/prompts/fieldCorrection.js.map +1 -0
  27. package/dist/prompts/index.d.ts +2 -0
  28. package/dist/prompts/index.d.ts.map +1 -1
  29. package/dist/prompts/index.js +2 -0
  30. package/dist/prompts/index.js.map +1 -1
  31. package/dist/prompts/parameterCorrection.d.ts +3 -0
  32. package/dist/prompts/parameterCorrection.d.ts.map +1 -0
  33. package/dist/prompts/parameterCorrection.js +29 -0
  34. package/dist/prompts/parameterCorrection.js.map +1 -0
  35. package/dist/prompts/workflowGeneration.d.ts +1 -1
  36. package/dist/prompts/workflowGeneration.d.ts.map +1 -1
  37. package/dist/prompts/workflowGeneration.js +3 -2
  38. package/dist/prompts/workflowGeneration.js.map +1 -1
  39. package/dist/services/n8n-workflow-service.d.ts +1 -0
  40. package/dist/services/n8n-workflow-service.d.ts.map +1 -1
  41. package/dist/services/n8n-workflow-service.js +78 -17
  42. package/dist/services/n8n-workflow-service.js.map +1 -1
  43. package/dist/types/index.d.ts +37 -3
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/index.js.map +1 -1
  46. package/dist/utils/catalog.d.ts +5 -3
  47. package/dist/utils/catalog.d.ts.map +1 -1
  48. package/dist/utils/catalog.js +87 -9
  49. package/dist/utils/catalog.js.map +1 -1
  50. package/dist/utils/credentialResolver.d.ts +1 -1
  51. package/dist/utils/credentialResolver.d.ts.map +1 -1
  52. package/dist/utils/credentialResolver.js +5 -4
  53. package/dist/utils/credentialResolver.js.map +1 -1
  54. package/dist/utils/generation.d.ts +9 -1
  55. package/dist/utils/generation.d.ts.map +1 -1
  56. package/dist/utils/generation.js +220 -9
  57. package/dist/utils/generation.js.map +1 -1
  58. package/dist/utils/index.d.ts +3 -2
  59. package/dist/utils/index.d.ts.map +1 -1
  60. package/dist/utils/index.js +4 -2
  61. package/dist/utils/index.js.map +1 -1
  62. package/dist/utils/outputSchema.d.ts +26 -0
  63. package/dist/utils/outputSchema.d.ts.map +1 -0
  64. package/dist/utils/outputSchema.js +271 -0
  65. package/dist/utils/outputSchema.js.map +1 -0
  66. package/dist/utils/workflow.d.ts +33 -1
  67. package/dist/utils/workflow.d.ts.map +1 -1
  68. package/dist/utils/workflow.js +259 -13
  69. package/dist/utils/workflow.js.map +1 -1
  70. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAiO1B,4BAA4B;AAE5B,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAkCtE;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAQ,OAAmC,CAAC,OAAO,KAAK,UAAU,CAAC;AAC5E,CAAC;AAED,yBAAyB;AAEzB,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAmDhE,cAAc;AAEd,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IAHT,YACE,OAAe,EACR,UAAmB,EACnB,QAAkB;QAEzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAS;QACnB,aAAQ,GAAR,QAAQ,CAAU;QAGzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAE3C;IACA;IAFT,YACS,mBAA6B,EAC7B,iBAA2B;QAElC,KAAK,CAAC,6BAA6B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAH9D,wBAAmB,GAAnB,mBAAmB,CAAU;QAC7B,sBAAiB,GAAjB,iBAAiB,CAAU;QAGlC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAiO1B,4BAA4B;AAE5B,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAkCtE;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAQ,OAAmC,CAAC,OAAO,KAAK,UAAU,CAAC;AAC5E,CAAC;AAED,yBAAyB;AAEzB,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAqDhE,cAAc;AAEd,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IAHT,YACE,OAAe,EACR,UAAmB,EACnB,QAAkB;QAEzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAS;QACnB,aAAQ,GAAR,QAAQ,CAAU;QAGzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAE3C;IACA;IAFT,YACS,mBAA6B,EAC7B,iBAA2B;QAElC,KAAK,CAAC,6BAA6B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAH9D,wBAAmB,GAAnB,mBAAmB,CAAU;QAC7B,sBAAiB,GAAjB,iBAAiB,CAAU;QAGlC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF"}
@@ -1,13 +1,15 @@
1
1
  import { NodeDefinition, NodeSearchResult, IntegrationFilterResult } from '../types/index';
2
2
  /**
3
- * Look up a node definition by its type name
3
+ * Look up a node definition by its type name.
4
4
  *
5
- * Handles both full names ("n8n-nodes-base.gmail") and bare names ("gmail").
5
+ * Handles full names ("n8n-nodes-base.gmail", "@n8n/n8n-nodes-langchain.openAi")
6
+ * and bare names ("gmail", "openAi").
6
7
  */
7
8
  export declare function getNodeDefinition(typeName: string): NodeDefinition | undefined;
8
9
  /**
9
- * Scoring: exact name 10, partial name 5, category 3, description 2, word 1
10
+ * Scoring: exact name 10, word-boundary 7, substring 3, category 3, description 2, word 1
10
11
  */
11
12
  export declare function searchNodes(keywords: string[], limit?: number): NodeSearchResult[];
12
13
  export declare function filterNodesByIntegrationSupport(nodes: NodeSearchResult[], supportedCredTypes: Set<string>): IntegrationFilterResult;
14
+ export declare function simplifyNodeForLLM(node: NodeDefinition): NodeDefinition;
13
15
  //# sourceMappingURL=catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/utils/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAW3F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAa9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE,CAwD9E;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,gBAAgB,EAAE,EACzB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,uBAAuB,CAuBzB"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/utils/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAWxB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAW9E;AAWD;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE,CAiE9E;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,gBAAgB,EAAE,EACzB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,uBAAuB,CAuBzB;AAwDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAgBvE"}
@@ -6,25 +6,32 @@ import defaultNodesData from '../data/defaultNodes.json' assert { type: 'json' }
6
6
  */
7
7
  const NODE_CATALOG = defaultNodesData;
8
8
  /**
9
- * Look up a node definition by its type name
9
+ * Look up a node definition by its type name.
10
10
  *
11
- * Handles both full names ("n8n-nodes-base.gmail") and bare names ("gmail").
11
+ * Handles full names ("n8n-nodes-base.gmail", "@n8n/n8n-nodes-langchain.openAi")
12
+ * and bare names ("gmail", "openAi").
12
13
  */
13
14
  export function getNodeDefinition(typeName) {
14
- // Try exact match first
15
15
  const exact = NODE_CATALOG.find((n) => n.name === typeName);
16
16
  if (exact) {
17
17
  return exact;
18
18
  }
19
- // Try without prefix (e.g., "gmail" matches "n8n-nodes-base.gmail")
20
- const bare = typeName.replace(/^n8n-nodes-base\./, '');
19
+ const bare = typeName.replace(/^(?:n8n-nodes-base|@n8n\/n8n-nodes-langchain)\./, '');
21
20
  return NODE_CATALOG.find((n) => {
22
- const catalogBare = n.name.replace(/^n8n-nodes-base\./, '');
21
+ const catalogBare = n.name.replace(/^(?:n8n-nodes-base|@n8n\/n8n-nodes-langchain)\./, '');
23
22
  return catalogBare === bare || n.name === bare;
24
23
  });
25
24
  }
25
+ /** Split a name into lowercase tokens on camelCase / dot / hyphen / underscore / @ / slash boundaries */
26
+ function tokenize(name) {
27
+ return name
28
+ .replace(/([a-z])([A-Z])/g, '$1 $2') // camelCase → words
29
+ .split(/[\s.\-_@/]+/)
30
+ .map((t) => t.toLowerCase())
31
+ .filter(Boolean);
32
+ }
26
33
  /**
27
- * Scoring: exact name 10, partial name 5, category 3, description 2, word 1
34
+ * Scoring: exact name 10, word-boundary 7, substring 3, category 3, description 2, word 1
28
35
  */
29
36
  export function searchNodes(keywords, limit = 15) {
30
37
  if (keywords.length === 0) {
@@ -37,14 +44,22 @@ export function searchNodes(keywords, limit = 15) {
37
44
  const nodeName = node.name.toLowerCase();
38
45
  const nodeDisplayName = node.displayName.toLowerCase();
39
46
  const nodeDescription = node.description?.toLowerCase() || '';
47
+ const nameTokens = tokenize(node.name);
48
+ const displayTokens = tokenize(node.displayName);
40
49
  for (const keyword of normalizedKeywords) {
41
50
  if (nodeName === keyword || nodeDisplayName === keyword) {
42
51
  score += 10;
43
52
  matchReasons.push(`exact match: "${keyword}"`);
44
53
  continue;
45
54
  }
46
- if (nodeName.includes(keyword) || nodeDisplayName.includes(keyword)) {
47
- score += 5;
55
+ // Word-boundary match: keyword equals a token in the name
56
+ const isWordMatch = nameTokens.some((t) => t === keyword) || displayTokens.some((t) => t === keyword);
57
+ if (isWordMatch) {
58
+ score += 7;
59
+ matchReasons.push(`word match: "${keyword}"`);
60
+ }
61
+ else if (nodeName.includes(keyword) || nodeDisplayName.includes(keyword)) {
62
+ score += 3;
48
63
  matchReasons.push(`name contains: "${keyword}"`);
49
64
  }
50
65
  if (nodeDescription.includes(keyword)) {
@@ -92,4 +107,67 @@ export function filterNodesByIntegrationSupport(nodes, supportedCredTypes) {
92
107
  }
93
108
  return { remaining, removed };
94
109
  }
110
+ const NOISE_TYPES = new Set(['notice', 'hidden']);
111
+ const STRIP_KEYS = new Set([
112
+ 'routing',
113
+ 'displayOptions',
114
+ 'typeOptions',
115
+ 'hint',
116
+ 'isNodeSetting',
117
+ 'noDataExpression',
118
+ 'validateType',
119
+ 'ignoreValidationDuringExecution',
120
+ 'requiresDataPath',
121
+ 'disabledOptions',
122
+ 'credentialTypes',
123
+ 'modes',
124
+ ]);
125
+ function simplifyProperty(prop) {
126
+ if (NOISE_TYPES.has(prop.type)) {
127
+ return null;
128
+ }
129
+ const slim = {};
130
+ for (const [key, value] of Object.entries(prop)) {
131
+ if (STRIP_KEYS.has(key)) {
132
+ continue;
133
+ }
134
+ slim[key] = value;
135
+ }
136
+ if (prop.type === 'resourceLocator') {
137
+ slim.type = 'string';
138
+ slim.default = '';
139
+ slim.description = slim.description || `${prop.displayName} ID`;
140
+ }
141
+ if (prop.options && Array.isArray(prop.options)) {
142
+ slim.options = prop.options.map((opt) => {
143
+ if (opt.values && Array.isArray(opt.values)) {
144
+ return {
145
+ name: opt.name,
146
+ displayName: opt.displayName,
147
+ values: opt.values
148
+ .map(simplifyProperty)
149
+ .filter((v) => v !== null),
150
+ };
151
+ }
152
+ const { description: _d, ...rest } = opt;
153
+ return rest;
154
+ });
155
+ }
156
+ return slim;
157
+ }
158
+ export function simplifyNodeForLLM(node) {
159
+ const cleaned = node.properties
160
+ .map(simplifyProperty)
161
+ .filter((p) => p !== null);
162
+ const seen = new Set();
163
+ const deduped = [];
164
+ for (const prop of cleaned) {
165
+ if (seen.has(prop.name)) {
166
+ continue;
167
+ }
168
+ seen.add(prop.name);
169
+ deduped.push(prop);
170
+ }
171
+ return { ...node, properties: deduped };
172
+ }
95
173
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/utils/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/utils/catalog.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@ import type { N8nApiClient } from './api';
9
9
  * 3. External provider — registered CredentialProvider service (e.g. cloud OAuth)
10
10
  * 4. Missing — reported for manual configuration in n8n
11
11
  */
12
- export declare function resolveCredentials(workflow: N8nWorkflow, userId: string, config: N8nPluginConfig, credStore: N8nCredentialStoreApi | null, credProvider: CredentialProvider | null, apiClient: N8nApiClient | null): Promise<CredentialResolutionResult>;
12
+ export declare function resolveCredentials(workflow: N8nWorkflow, userId: string, config: N8nPluginConfig, credStore: N8nCredentialStoreApi | null, credProvider: CredentialProvider | null, apiClient: N8nApiClient | null, tagName: string): Promise<CredentialResolutionResult>;
13
13
  //# sourceMappingURL=credentialResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentialResolver.d.ts","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAE1B,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,qBAAqB,GAAG,IAAI,EACvC,YAAY,EAAE,kBAAkB,GAAG,IAAI,EACvC,SAAS,EAAE,YAAY,GAAG,IAAI,GAC7B,OAAO,CAAC,0BAA0B,CAAC,CAqCrC"}
1
+ {"version":3,"file":"credentialResolver.d.ts","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAE1B,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,qBAAqB,GAAG,IAAI,EACvC,YAAY,EAAE,kBAAkB,GAAG,IAAI,EACvC,SAAS,EAAE,YAAY,GAAG,IAAI,EAC9B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,0BAA0B,CAAC,CAsCrC"}
@@ -8,7 +8,7 @@ import { logger } from '@elizaos/core';
8
8
  * 3. External provider — registered CredentialProvider service (e.g. cloud OAuth)
9
9
  * 4. Missing — reported for manual configuration in n8n
10
10
  */
11
- export async function resolveCredentials(workflow, userId, config, credStore, credProvider, apiClient) {
11
+ export async function resolveCredentials(workflow, userId, config, credStore, credProvider, apiClient, tagName) {
12
12
  const requiredCredTypes = extractRequiredCredentialTypes(workflow);
13
13
  if (requiredCredTypes.size === 0) {
14
14
  return {
@@ -20,7 +20,7 @@ export async function resolveCredentials(workflow, userId, config, credStore, cr
20
20
  const injectedCredentials = new Map();
21
21
  const missingConnections = [];
22
22
  for (const credType of requiredCredTypes) {
23
- const credId = await resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections);
23
+ const credId = await resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections, tagName);
24
24
  if (credId) {
25
25
  injectedCredentials.set(credType, credId);
26
26
  }
@@ -32,7 +32,7 @@ export async function resolveCredentials(workflow, userId, config, credStore, cr
32
32
  injectedCredentials,
33
33
  };
34
34
  }
35
- async function resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections) {
35
+ async function resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections, tagName) {
36
36
  // 1. Credential store DB
37
37
  const cachedId = await credStore?.get(userId, credType);
38
38
  if (cachedId) {
@@ -56,8 +56,9 @@ async function resolveOneCredential(credType, userId, config, credStore, credPro
56
56
  missingConnections.push({ credType });
57
57
  return null;
58
58
  }
59
+ const credName = `${credType}_${tagName}`;
59
60
  const n8nCred = await apiClient.createCredential({
60
- name: credType,
61
+ name: credName,
61
62
  type: credType,
62
63
  data: result.data,
63
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"credentialResolver.js","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentialResolver.js","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type IAgentRuntime } from '@elizaos/core';
2
- import { N8nWorkflow, WorkflowMatchResult, WorkflowDraft, DraftIntentResult, NodeDefinition, NodeSearchResult, FeasibilityResult } from '../types/index';
2
+ import { N8nWorkflow, WorkflowMatchResult, WorkflowDraft, DraftIntentResult, NodeDefinition, NodeSearchResult, FeasibilityResult, OutputRefValidation } from '../types/index';
3
+ import type { UnknownParamDetection } from './workflow';
3
4
  export declare function extractKeywords(runtime: IAgentRuntime, userPrompt: string): Promise<string[]>;
4
5
  export declare function matchWorkflow(runtime: IAgentRuntime, userRequest: string, workflows: N8nWorkflow[]): Promise<WorkflowMatchResult>;
5
6
  export declare function classifyDraftIntent(runtime: IAgentRuntime, userMessage: string, draft: WorkflowDraft): Promise<DraftIntentResult>;
@@ -8,4 +9,11 @@ export declare function modifyWorkflow(runtime: IAgentRuntime, existingWorkflow:
8
9
  export declare function collectExistingNodeDefinitions(workflow: N8nWorkflow): NodeDefinition[];
9
10
  export declare function formatActionResponse(runtime: IAgentRuntime, responseType: string, data: Record<string, unknown>): Promise<string>;
10
11
  export declare function assessFeasibility(runtime: IAgentRuntime, userPrompt: string, removedNodes: NodeSearchResult[], remainingNodes: NodeSearchResult[]): Promise<FeasibilityResult>;
12
+ /**
13
+ * Auto-corrects invalid field references in expressions using parallel LLM calls.
14
+ * Returns a new workflow with corrected expressions.
15
+ */
16
+ export declare function correctFieldReferences(runtime: IAgentRuntime, workflow: N8nWorkflow, invalidRefs: OutputRefValidation[]): Promise<N8nWorkflow>;
17
+ /** Deterministic fast path + LLM fallback for parameter name correction. */
18
+ export declare function correctParameterNames(runtime: IAgentRuntime, workflow: N8nWorkflow, detections: UnknownParamDetection[]): Promise<N8nWorkflow>;
11
19
  //# sourceMappingURL=generation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/utils/generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,eAAe,CAAC;AACtE,OAAO,EAEL,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAiBxB,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,WAAW,EAAE,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA8C5B;AA6BD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CA4BtB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,WAAW,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,EAAE,CAsBtF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,gBAAgB,EAAE,EAChC,cAAc,EAAE,gBAAgB,EAAE,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAsC5B"}
1
+ {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/utils/generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,eAAe,CAAC;AACtE,OAAO,EAEL,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AA2BxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,WAAW,EAAE,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAyC5B;AAgED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CAgCtB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,WAAW,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CAwCtB;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,EAAE,CAsBtF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,gBAAgB,EAAE,EAChC,cAAc,EAAE,gBAAgB,EAAE,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAsC5B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,mBAAmB,EAAE,GACjC,OAAO,CAAC,WAAW,CAAC,CAyDtB;AAqDD,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC,WAAW,CAAC,CA4HtB"}
@@ -1,8 +1,9 @@
1
1
  import { ModelType, logger } from '@elizaos/core';
2
- import { KEYWORD_EXTRACTION_SYSTEM_PROMPT, WORKFLOW_GENERATION_SYSTEM_PROMPT, DRAFT_INTENT_SYSTEM_PROMPT, ACTION_RESPONSE_SYSTEM_PROMPT, FEASIBILITY_CHECK_PROMPT, } from '../prompts/index';
2
+ import { KEYWORD_EXTRACTION_SYSTEM_PROMPT, WORKFLOW_GENERATION_SYSTEM_PROMPT, DRAFT_INTENT_SYSTEM_PROMPT, ACTION_RESPONSE_SYSTEM_PROMPT, FEASIBILITY_CHECK_PROMPT, FIELD_CORRECTION_SYSTEM_PROMPT, FIELD_CORRECTION_USER_PROMPT, PARAM_CORRECTION_SYSTEM_PROMPT, PARAM_CORRECTION_USER_PROMPT, } from '../prompts/index';
3
3
  import { WORKFLOW_MATCHING_SYSTEM_PROMPT } from '../prompts/workflowMatching';
4
4
  import { keywordExtractionSchema, workflowMatchingSchema, draftIntentSchema, feasibilitySchema, } from '../schemas/index';
5
- import { getNodeDefinition } from './catalog';
5
+ import { getNodeDefinition, simplifyNodeForLLM } from './catalog';
6
+ import { hasOutputSchema, getAvailableResources, getAvailableOperations, loadOutputSchema, formatSchemaForPrompt, } from './outputSchema';
6
7
  export async function extractKeywords(runtime, userPrompt) {
7
8
  let result;
8
9
  try {
@@ -113,14 +114,13 @@ ${userMessage}`,
113
114
  logger.warn({ src: 'plugin:n8n-workflow:generation:intent' }, `Invalid intent from LLM: ${JSON.stringify(result)}, re-showing preview`);
114
115
  return { intent: 'show_preview', reason: 'Could not classify intent — re-showing preview' };
115
116
  }
116
- logger.debug({ src: 'plugin:n8n-workflow:generation:intent' }, `Draft intent: ${result.intent} — ${result.reason}`);
117
117
  return result;
118
118
  }
119
119
  function parseWorkflowResponse(response) {
120
+ // Strip markdown code fences (handles ```json, ```, with any whitespace/newlines)
120
121
  const cleaned = response
121
- .replace(/^\s*```json\s*/i, '')
122
- .replace(/^\s*```\s*/i, '')
123
- .replace(/```\s*$/, '')
122
+ .replace(/^[\s\S]*?```(?:json)?\s*\n?/i, '') // Remove everything up to and including opening fence
123
+ .replace(/\n?```[\s\S]*$/i, '') // Remove closing fence and everything after
124
124
  .trim();
125
125
  let workflow;
126
126
  try {
@@ -137,14 +137,45 @@ function parseWorkflowResponse(response) {
137
137
  }
138
138
  return workflow;
139
139
  }
140
+ /**
141
+ * Build output schema context for relevant nodes so the LLM knows the exact
142
+ * output fields when writing expressions like {{ $json.field }}.
143
+ */
144
+ function buildOutputSchemaContext(nodes) {
145
+ const sections = [];
146
+ for (const node of nodes) {
147
+ if (!hasOutputSchema(node.name)) {
148
+ continue;
149
+ }
150
+ const resources = getAvailableResources(node.name);
151
+ for (const resource of resources) {
152
+ const operations = getAvailableOperations(node.name, resource);
153
+ for (const operation of operations) {
154
+ const result = loadOutputSchema(node.name, resource, operation);
155
+ if (!result) {
156
+ continue;
157
+ }
158
+ const formatted = formatSchemaForPrompt(result.schema);
159
+ sections.push(`### ${node.name} (resource: "${resource}", operation: "${operation}")\n${formatted}`);
160
+ }
161
+ }
162
+ }
163
+ if (sections.length === 0) {
164
+ return '';
165
+ }
166
+ return `\n## Node Output Schemas\n\nWhen referencing output data from a previous node using expressions like \`{{ $json.field }}\`, use ONLY the field paths listed below. Do NOT invent field names from your training data.\n\n${sections.join('\n\n')}`;
167
+ }
140
168
  export async function generateWorkflow(runtime, userPrompt, relevantNodes) {
169
+ const simplifiedNodes = relevantNodes.map(simplifyNodeForLLM);
170
+ const outputSchemaCtx = buildOutputSchemaContext(relevantNodes);
141
171
  const fullPrompt = `${WORKFLOW_GENERATION_SYSTEM_PROMPT}
142
172
 
143
173
  ## Relevant Nodes Available
144
174
 
145
- ${JSON.stringify(relevantNodes, null, 2)}
175
+ ${JSON.stringify(simplifiedNodes, null, 2)}
146
176
 
147
177
  Use these node definitions to generate the workflow. Each node's "properties" field defines the available parameters.
178
+ ${outputSchemaCtx}
148
179
 
149
180
  ## User Request
150
181
 
@@ -164,13 +195,16 @@ Generate a valid n8n workflow JSON that fulfills this request.`;
164
195
  }
165
196
  export async function modifyWorkflow(runtime, existingWorkflow, modificationRequest, relevantNodes) {
166
197
  const { _meta, ...workflowForLLM } = existingWorkflow;
198
+ const simplifiedNodes = relevantNodes.map(simplifyNodeForLLM);
199
+ const outputSchemaCtx = buildOutputSchemaContext(relevantNodes);
167
200
  const fullPrompt = `${WORKFLOW_GENERATION_SYSTEM_PROMPT}
168
201
 
169
202
  ## Relevant Nodes Available
170
203
 
171
- ${JSON.stringify(relevantNodes, null, 2)}
204
+ ${JSON.stringify(simplifiedNodes, null, 2)}
172
205
 
173
206
  Use these node definitions to modify the workflow. Each node's "properties" field defines the available parameters.
207
+ ${outputSchemaCtx}
174
208
 
175
209
  ## Existing Workflow (modify this)
176
210
 
@@ -187,7 +221,12 @@ Keep all unchanged nodes and connections intact. Only add, remove, or change wha
187
221
  temperature: 0,
188
222
  responseFormat: { type: 'json_object' },
189
223
  });
190
- return parseWorkflowResponse(response);
224
+ const modified = parseWorkflowResponse(response);
225
+ // Preserve the original workflow ID for updates (LLM doesn't return it)
226
+ if (existingWorkflow.id) {
227
+ modified.id = existingWorkflow.id;
228
+ }
229
+ return modified;
191
230
  }
192
231
  export function collectExistingNodeDefinitions(workflow) {
193
232
  const defs = [];
@@ -256,4 +295,176 @@ export async function assessFeasibility(runtime, userPrompt, removedNodes, remai
256
295
  };
257
296
  }
258
297
  }
298
+ /**
299
+ * Auto-corrects invalid field references in expressions using parallel LLM calls.
300
+ * Returns a new workflow with corrected expressions.
301
+ */
302
+ export async function correctFieldReferences(runtime, workflow, invalidRefs) {
303
+ if (invalidRefs.length === 0) {
304
+ return workflow;
305
+ }
306
+ logger.debug({ src: 'plugin:n8n-workflow:generation:correction' }, `Correcting ${invalidRefs.length} invalid field reference(s)`);
307
+ const corrections = await Promise.all(invalidRefs.map(async (ref) => {
308
+ try {
309
+ const userPrompt = FIELD_CORRECTION_USER_PROMPT.replace('{expression}', ref.expression).replace('{availableFields}', ref.availableFields.join('\n'));
310
+ const corrected = await runtime.useModel(ModelType.TEXT_SMALL, {
311
+ prompt: `${FIELD_CORRECTION_SYSTEM_PROMPT}\n\n${userPrompt}`,
312
+ temperature: 0,
313
+ });
314
+ const cleaned = corrected.trim();
315
+ return { original: ref.expression, corrected: cleaned, nodeName: ref.nodeName };
316
+ }
317
+ catch (error) {
318
+ const errMsg = error instanceof Error ? error.message : String(error);
319
+ logger.warn({ src: 'plugin:n8n-workflow:generation:correction', error: errMsg }, `Failed to correct expression "${ref.expression}": ${errMsg}`);
320
+ return null;
321
+ }
322
+ }));
323
+ const correctedWorkflow = JSON.parse(JSON.stringify(workflow));
324
+ for (const correction of corrections) {
325
+ if (!correction) {
326
+ continue;
327
+ }
328
+ const node = correctedWorkflow.nodes.find((n) => n.name === correction.nodeName);
329
+ if (!node?.parameters) {
330
+ continue;
331
+ }
332
+ replaceInObject(node.parameters, correction.original, correction.corrected);
333
+ logger.debug({ src: 'plugin:n8n-workflow:generation:correction' }, `Corrected "${correction.original}" → "${correction.corrected}" in node "${correction.nodeName}"`);
334
+ }
335
+ return correctedWorkflow;
336
+ }
337
+ function replaceInObject(obj, original, replacement) {
338
+ for (const key of Object.keys(obj)) {
339
+ const value = obj[key];
340
+ if (typeof value === 'string' && value.includes(original)) {
341
+ obj[key] = value.replaceAll(original, replacement);
342
+ }
343
+ else if (Array.isArray(value)) {
344
+ for (let i = 0; i < value.length; i++) {
345
+ if (typeof value[i] === 'string' && value[i].includes(original)) {
346
+ value[i] = value[i].replaceAll(original, replacement);
347
+ }
348
+ else if (typeof value[i] === 'object' && value[i] !== null) {
349
+ replaceInObject(value[i], original, replacement);
350
+ }
351
+ }
352
+ }
353
+ else if (typeof value === 'object' && value !== null) {
354
+ replaceInObject(value, original, replacement);
355
+ }
356
+ }
357
+ }
358
+ /**
359
+ * Try to deterministically rename an unknown key to a valid property name.
360
+ * Returns the matching property name or null if no confident match.
361
+ */
362
+ function fuzzyMatchParam(unknownKey, validProps) {
363
+ const lower = unknownKey.toLowerCase();
364
+ // Substring match: one valid prop contains the unknown key or vice-versa
365
+ // Guard: shorter string must be ≥ 60% of the longer to avoid false positives (e.g. "url" in "curl")
366
+ const substringMatches = validProps.filter((p) => {
367
+ const pLower = p.name.toLowerCase();
368
+ if (!(pLower.includes(lower) || lower.includes(pLower))) {
369
+ return false;
370
+ }
371
+ const ratio = Math.min(lower.length, pLower.length) / Math.max(lower.length, pLower.length);
372
+ return ratio >= 0.6;
373
+ });
374
+ if (substringMatches.length === 1) {
375
+ return substringMatches[0].name;
376
+ }
377
+ return null;
378
+ }
379
+ /** Deterministic fast path + LLM fallback for parameter name correction. */
380
+ export async function correctParameterNames(runtime, workflow, detections) {
381
+ if (detections.length === 0) {
382
+ return workflow;
383
+ }
384
+ const correctedWorkflow = JSON.parse(JSON.stringify(workflow));
385
+ // Phase 1: deterministic renames (no LLM cost)
386
+ const needsLLM = [];
387
+ for (const detection of detections) {
388
+ const node = correctedWorkflow.nodes.find((n) => n.name === detection.nodeName);
389
+ if (!node) {
390
+ continue;
391
+ }
392
+ const remainingUnknowns = [];
393
+ for (const key of detection.unknownKeys) {
394
+ const match = fuzzyMatchParam(key, detection.propertyDefs);
395
+ if (match) {
396
+ logger.debug({ src: 'plugin:n8n-workflow:generation:paramCorrection' }, `Node "${detection.nodeName}": ${key} → ${match} (deterministic)`);
397
+ node.parameters[match] = node.parameters[key];
398
+ delete node.parameters[key];
399
+ }
400
+ else {
401
+ remainingUnknowns.push(key);
402
+ }
403
+ }
404
+ if (remainingUnknowns.length > 0) {
405
+ needsLLM.push({
406
+ ...detection,
407
+ unknownKeys: remainingUnknowns,
408
+ currentParams: node.parameters,
409
+ });
410
+ }
411
+ }
412
+ if (needsLLM.length === 0) {
413
+ return correctedWorkflow;
414
+ }
415
+ // Phase 2: LLM correction for complex cases (restructuring)
416
+ logger.debug({ src: 'plugin:n8n-workflow:generation:paramCorrection' }, `LLM correction needed for ${needsLLM.length} node(s): ${needsLLM.map((d) => `"${d.nodeName}" (${d.unknownKeys.join(', ')})`).join('; ')}`);
417
+ const corrections = await Promise.all(needsLLM.map(async (detection) => {
418
+ try {
419
+ const userPrompt = PARAM_CORRECTION_USER_PROMPT.replace('{nodeType}', detection.nodeType)
420
+ .replace('{currentParams}', JSON.stringify(detection.currentParams, null, 2))
421
+ .replace('{propertyDefs}', JSON.stringify(detection.propertyDefs, null, 2));
422
+ const response = await runtime.useModel(ModelType.TEXT_SMALL, {
423
+ prompt: `${PARAM_CORRECTION_SYSTEM_PROMPT}\n\n${userPrompt}`,
424
+ temperature: 0,
425
+ });
426
+ const cleaned = response
427
+ .replace(/^[\s\S]*?```(?:json)?\s*\n?/i, '')
428
+ .replace(/\n?```[\s\S]*$/i, '')
429
+ .trim();
430
+ const correctedParams = JSON.parse(cleaned);
431
+ // Validate: corrected params should only contain valid property names
432
+ const validNames = new Set(detection.propertyDefs.map((p) => p.name));
433
+ validNames.add('resource');
434
+ validNames.add('operation');
435
+ const invalidKeys = Object.keys(correctedParams).filter((k) => !validNames.has(k));
436
+ if (invalidKeys.length > 0) {
437
+ logger.warn({ src: 'plugin:n8n-workflow:generation:paramCorrection' }, `LLM returned invalid keys for "${detection.nodeName}": ${invalidKeys.join(', ')} — dropping them`);
438
+ for (const k of invalidKeys) {
439
+ delete correctedParams[k];
440
+ }
441
+ }
442
+ return { nodeName: detection.nodeName, correctedParams };
443
+ }
444
+ catch (error) {
445
+ const errMsg = error instanceof Error ? error.message : String(error);
446
+ logger.warn({ src: 'plugin:n8n-workflow:generation:paramCorrection', error: errMsg }, `Failed to correct parameters for node "${detection.nodeName}": ${errMsg}`);
447
+ return null;
448
+ }
449
+ }));
450
+ for (const correction of corrections) {
451
+ if (!correction) {
452
+ continue;
453
+ }
454
+ const node = correctedWorkflow.nodes.find((n) => n.name === correction.nodeName);
455
+ if (!node) {
456
+ continue;
457
+ }
458
+ // Preserve resource/operation (already corrected by correctOptionParameters)
459
+ if (node.parameters.resource !== undefined) {
460
+ correction.correctedParams.resource = node.parameters.resource;
461
+ }
462
+ if (node.parameters.operation !== undefined) {
463
+ correction.correctedParams.operation = node.parameters.operation;
464
+ }
465
+ logger.debug({ src: 'plugin:n8n-workflow:generation:paramCorrection' }, `Node "${correction.nodeName}": params corrected via LLM — keys: ${Object.keys(correction.correctedParams).join(', ')}`);
466
+ node.parameters = correction.correctedParams;
467
+ }
468
+ return correctedWorkflow;
469
+ }
259
470
  //# sourceMappingURL=generation.js.map