@elizaos/plugin-workflow 2.0.0-beta.1

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 (294) hide show
  1. package/README.md +71 -0
  2. package/auto-enable.ts +18 -0
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.d.ts.map +1 -0
  5. package/dist/actions/index.js +2 -0
  6. package/dist/actions/index.js.map +1 -0
  7. package/dist/actions/workflow.d.ts +23 -0
  8. package/dist/actions/workflow.d.ts.map +1 -0
  9. package/dist/actions/workflow.js +425 -0
  10. package/dist/actions/workflow.js.map +1 -0
  11. package/dist/data/defaultNodes.json +9887 -0
  12. package/dist/data/schemaIndex.json +1 -0
  13. package/dist/data/triggerSchemaIndex.json +1 -0
  14. package/dist/db/index.d.ts +2 -0
  15. package/dist/db/index.d.ts.map +1 -0
  16. package/dist/db/index.js +2 -0
  17. package/dist/db/index.js.map +1 -0
  18. package/dist/db/schema.d.ts +588 -0
  19. package/dist/db/schema.d.ts.map +1 -0
  20. package/dist/db/schema.js +59 -0
  21. package/dist/db/schema.js.map +1 -0
  22. package/dist/index.d.ts +34 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +126 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/automations-builder.d.ts +21 -0
  27. package/dist/lib/automations-builder.d.ts.map +1 -0
  28. package/dist/lib/automations-builder.js +557 -0
  29. package/dist/lib/automations-builder.js.map +1 -0
  30. package/dist/lib/automations-types.d.ts +153 -0
  31. package/dist/lib/automations-types.d.ts.map +1 -0
  32. package/dist/lib/automations-types.js +191 -0
  33. package/dist/lib/automations-types.js.map +1 -0
  34. package/dist/lib/index.d.ts +3 -0
  35. package/dist/lib/index.d.ts.map +1 -0
  36. package/dist/lib/index.js +3 -0
  37. package/dist/lib/index.js.map +1 -0
  38. package/dist/lib/legacy-task-migration.d.ts +20 -0
  39. package/dist/lib/legacy-task-migration.d.ts.map +1 -0
  40. package/dist/lib/legacy-task-migration.js +110 -0
  41. package/dist/lib/legacy-task-migration.js.map +1 -0
  42. package/dist/lib/legacy-text-trigger-migration.d.ts +18 -0
  43. package/dist/lib/legacy-text-trigger-migration.d.ts.map +1 -0
  44. package/dist/lib/legacy-text-trigger-migration.js +131 -0
  45. package/dist/lib/legacy-text-trigger-migration.js.map +1 -0
  46. package/dist/lib/workflow-clarification.d.ts +113 -0
  47. package/dist/lib/workflow-clarification.d.ts.map +1 -0
  48. package/dist/lib/workflow-clarification.js +425 -0
  49. package/dist/lib/workflow-clarification.js.map +1 -0
  50. package/dist/plugin-routes.d.ts +9 -0
  51. package/dist/plugin-routes.d.ts.map +1 -0
  52. package/dist/plugin-routes.js +147 -0
  53. package/dist/plugin-routes.js.map +1 -0
  54. package/dist/providers/activeWorkflows.d.ts +11 -0
  55. package/dist/providers/activeWorkflows.d.ts.map +1 -0
  56. package/dist/providers/activeWorkflows.js +72 -0
  57. package/dist/providers/activeWorkflows.js.map +1 -0
  58. package/dist/providers/index.d.ts +4 -0
  59. package/dist/providers/index.d.ts.map +1 -0
  60. package/dist/providers/index.js +4 -0
  61. package/dist/providers/index.js.map +1 -0
  62. package/dist/providers/pendingDraft.d.ts +9 -0
  63. package/dist/providers/pendingDraft.d.ts.map +1 -0
  64. package/dist/providers/pendingDraft.js +48 -0
  65. package/dist/providers/pendingDraft.js.map +1 -0
  66. package/dist/providers/workflowStatus.d.ts +3 -0
  67. package/dist/providers/workflowStatus.d.ts.map +1 -0
  68. package/dist/providers/workflowStatus.js +69 -0
  69. package/dist/providers/workflowStatus.js.map +1 -0
  70. package/dist/register-routes.d.ts +2 -0
  71. package/dist/register-routes.d.ts.map +1 -0
  72. package/dist/register-routes.js +6 -0
  73. package/dist/register-routes.js.map +1 -0
  74. package/dist/routes/_helpers.d.ts +11 -0
  75. package/dist/routes/_helpers.d.ts.map +1 -0
  76. package/dist/routes/_helpers.js +22 -0
  77. package/dist/routes/_helpers.js.map +1 -0
  78. package/dist/routes/automations.d.ts +19 -0
  79. package/dist/routes/automations.d.ts.map +1 -0
  80. package/dist/routes/automations.js +32 -0
  81. package/dist/routes/automations.js.map +1 -0
  82. package/dist/routes/embedded-webhooks.d.ts +3 -0
  83. package/dist/routes/embedded-webhooks.d.ts.map +1 -0
  84. package/dist/routes/embedded-webhooks.js +47 -0
  85. package/dist/routes/embedded-webhooks.js.map +1 -0
  86. package/dist/routes/executions.d.ts +3 -0
  87. package/dist/routes/executions.d.ts.map +1 -0
  88. package/dist/routes/executions.js +58 -0
  89. package/dist/routes/executions.js.map +1 -0
  90. package/dist/routes/index.d.ts +4 -0
  91. package/dist/routes/index.d.ts.map +1 -0
  92. package/dist/routes/index.js +14 -0
  93. package/dist/routes/index.js.map +1 -0
  94. package/dist/routes/nodes.d.ts +3 -0
  95. package/dist/routes/nodes.d.ts.map +1 -0
  96. package/dist/routes/nodes.js +168 -0
  97. package/dist/routes/nodes.js.map +1 -0
  98. package/dist/routes/validation.d.ts +3 -0
  99. package/dist/routes/validation.d.ts.map +1 -0
  100. package/dist/routes/validation.js +41 -0
  101. package/dist/routes/validation.js.map +1 -0
  102. package/dist/routes/workflow-routes.d.ts +27 -0
  103. package/dist/routes/workflow-routes.d.ts.map +1 -0
  104. package/dist/routes/workflow-routes.js +326 -0
  105. package/dist/routes/workflow-routes.js.map +1 -0
  106. package/dist/routes/workflows.d.ts +3 -0
  107. package/dist/routes/workflows.d.ts.map +1 -0
  108. package/dist/routes/workflows.js +252 -0
  109. package/dist/routes/workflows.js.map +1 -0
  110. package/dist/schemas/draftIntent.d.ts +22 -0
  111. package/dist/schemas/draftIntent.d.ts.map +1 -0
  112. package/dist/schemas/draftIntent.js +22 -0
  113. package/dist/schemas/draftIntent.js.map +1 -0
  114. package/dist/schemas/feasibility.d.ts +13 -0
  115. package/dist/schemas/feasibility.d.ts.map +1 -0
  116. package/dist/schemas/feasibility.js +9 -0
  117. package/dist/schemas/feasibility.js.map +1 -0
  118. package/dist/schemas/index.d.ts +5 -0
  119. package/dist/schemas/index.d.ts.map +1 -0
  120. package/dist/schemas/index.js +5 -0
  121. package/dist/schemas/index.js.map +1 -0
  122. package/dist/schemas/keywordExtraction.d.ts +14 -0
  123. package/dist/schemas/keywordExtraction.d.ts.map +1 -0
  124. package/dist/schemas/keywordExtraction.js +12 -0
  125. package/dist/schemas/keywordExtraction.js.map +1 -0
  126. package/dist/schemas/workflowMatching.d.ts +36 -0
  127. package/dist/schemas/workflowMatching.d.ts.map +1 -0
  128. package/dist/schemas/workflowMatching.js +30 -0
  129. package/dist/schemas/workflowMatching.js.map +1 -0
  130. package/dist/services/embedded-workflow-service.d.ts +106 -0
  131. package/dist/services/embedded-workflow-service.d.ts.map +1 -0
  132. package/dist/services/embedded-workflow-service.js +1900 -0
  133. package/dist/services/embedded-workflow-service.js.map +1 -0
  134. package/dist/services/index.d.ts +5 -0
  135. package/dist/services/index.d.ts.map +1 -0
  136. package/dist/services/index.js +5 -0
  137. package/dist/services/index.js.map +1 -0
  138. package/dist/services/workflow-credential-store.d.ts +27 -0
  139. package/dist/services/workflow-credential-store.d.ts.map +1 -0
  140. package/dist/services/workflow-credential-store.js +92 -0
  141. package/dist/services/workflow-credential-store.js.map +1 -0
  142. package/dist/services/workflow-dispatch.d.ts +41 -0
  143. package/dist/services/workflow-dispatch.d.ts.map +1 -0
  144. package/dist/services/workflow-dispatch.js +86 -0
  145. package/dist/services/workflow-dispatch.js.map +1 -0
  146. package/dist/services/workflow-service.d.ts +63 -0
  147. package/dist/services/workflow-service.d.ts.map +1 -0
  148. package/dist/services/workflow-service.js +492 -0
  149. package/dist/services/workflow-service.js.map +1 -0
  150. package/dist/trigger-routes.d.ts +153 -0
  151. package/dist/trigger-routes.d.ts.map +1 -0
  152. package/dist/trigger-routes.js +424 -0
  153. package/dist/trigger-routes.js.map +1 -0
  154. package/dist/types/index.d.ts +457 -0
  155. package/dist/types/index.d.ts.map +1 -0
  156. package/dist/types/index.js +59 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/utils/catalog.d.ts +16 -0
  159. package/dist/utils/catalog.d.ts.map +1 -0
  160. package/dist/utils/catalog.js +211 -0
  161. package/dist/utils/catalog.js.map +1 -0
  162. package/dist/utils/clarification.d.ts +17 -0
  163. package/dist/utils/clarification.d.ts.map +1 -0
  164. package/dist/utils/clarification.js +46 -0
  165. package/dist/utils/clarification.js.map +1 -0
  166. package/dist/utils/context.d.ts +4 -0
  167. package/dist/utils/context.d.ts.map +1 -0
  168. package/dist/utils/context.js +18 -0
  169. package/dist/utils/context.js.map +1 -0
  170. package/dist/utils/credentialResolver.d.ts +22 -0
  171. package/dist/utils/credentialResolver.d.ts.map +1 -0
  172. package/dist/utils/credentialResolver.js +146 -0
  173. package/dist/utils/credentialResolver.js.map +1 -0
  174. package/dist/utils/generation.d.ts +36 -0
  175. package/dist/utils/generation.d.ts.map +1 -0
  176. package/dist/utils/generation.js +701 -0
  177. package/dist/utils/generation.js.map +1 -0
  178. package/dist/utils/host-capabilities.d.ts +27 -0
  179. package/dist/utils/host-capabilities.d.ts.map +1 -0
  180. package/dist/utils/host-capabilities.js +59 -0
  181. package/dist/utils/host-capabilities.js.map +1 -0
  182. package/dist/utils/inferSyntheticOutputSchema.d.ts +20 -0
  183. package/dist/utils/inferSyntheticOutputSchema.d.ts.map +1 -0
  184. package/dist/utils/inferSyntheticOutputSchema.js +151 -0
  185. package/dist/utils/inferSyntheticOutputSchema.js.map +1 -0
  186. package/dist/utils/outputSchema.d.ts +26 -0
  187. package/dist/utils/outputSchema.d.ts.map +1 -0
  188. package/dist/utils/outputSchema.js +297 -0
  189. package/dist/utils/outputSchema.js.map +1 -0
  190. package/dist/utils/validateAndRepair.d.ts +41 -0
  191. package/dist/utils/validateAndRepair.d.ts.map +1 -0
  192. package/dist/utils/validateAndRepair.js +483 -0
  193. package/dist/utils/validateAndRepair.js.map +1 -0
  194. package/dist/utils/workflow-prompts/actionResponse.d.ts +2 -0
  195. package/dist/utils/workflow-prompts/actionResponse.d.ts.map +1 -0
  196. package/dist/utils/workflow-prompts/actionResponse.js +17 -0
  197. package/dist/utils/workflow-prompts/actionResponse.js.map +1 -0
  198. package/dist/utils/workflow-prompts/draftIntent.d.ts +2 -0
  199. package/dist/utils/workflow-prompts/draftIntent.d.ts.map +1 -0
  200. package/dist/utils/workflow-prompts/draftIntent.js +23 -0
  201. package/dist/utils/workflow-prompts/draftIntent.js.map +1 -0
  202. package/dist/utils/workflow-prompts/feasibilityCheck.d.ts +2 -0
  203. package/dist/utils/workflow-prompts/feasibilityCheck.d.ts.map +1 -0
  204. package/dist/utils/workflow-prompts/feasibilityCheck.js +21 -0
  205. package/dist/utils/workflow-prompts/feasibilityCheck.js.map +1 -0
  206. package/dist/utils/workflow-prompts/fieldCorrection.d.ts +3 -0
  207. package/dist/utils/workflow-prompts/fieldCorrection.d.ts.map +1 -0
  208. package/dist/utils/workflow-prompts/fieldCorrection.js +20 -0
  209. package/dist/utils/workflow-prompts/fieldCorrection.js.map +1 -0
  210. package/dist/utils/workflow-prompts/index.d.ts +8 -0
  211. package/dist/utils/workflow-prompts/index.d.ts.map +1 -0
  212. package/dist/utils/workflow-prompts/index.js +8 -0
  213. package/dist/utils/workflow-prompts/index.js.map +1 -0
  214. package/dist/utils/workflow-prompts/keywordExtraction.d.ts +2 -0
  215. package/dist/utils/workflow-prompts/keywordExtraction.d.ts.map +1 -0
  216. package/dist/utils/workflow-prompts/keywordExtraction.js +21 -0
  217. package/dist/utils/workflow-prompts/keywordExtraction.js.map +1 -0
  218. package/dist/utils/workflow-prompts/parameterCorrection.d.ts +3 -0
  219. package/dist/utils/workflow-prompts/parameterCorrection.d.ts.map +1 -0
  220. package/dist/utils/workflow-prompts/parameterCorrection.js +29 -0
  221. package/dist/utils/workflow-prompts/parameterCorrection.js.map +1 -0
  222. package/dist/utils/workflow-prompts/workflowGeneration.d.ts +2 -0
  223. package/dist/utils/workflow-prompts/workflowGeneration.d.ts.map +1 -0
  224. package/dist/utils/workflow-prompts/workflowGeneration.js +529 -0
  225. package/dist/utils/workflow-prompts/workflowGeneration.js.map +1 -0
  226. package/dist/utils/workflow-prompts/workflowMatching.d.ts +2 -0
  227. package/dist/utils/workflow-prompts/workflowMatching.d.ts.map +1 -0
  228. package/dist/utils/workflow-prompts/workflowMatching.js +23 -0
  229. package/dist/utils/workflow-prompts/workflowMatching.js.map +1 -0
  230. package/dist/utils/workflow.d.ts +62 -0
  231. package/dist/utils/workflow.d.ts.map +1 -0
  232. package/dist/utils/workflow.js +712 -0
  233. package/dist/utils/workflow.js.map +1 -0
  234. package/package.json +87 -0
  235. package/src/actions/index.ts +1 -0
  236. package/src/actions/workflow.ts +494 -0
  237. package/src/data/defaultNodes.json +9887 -0
  238. package/src/data/schemaIndex.json +1 -0
  239. package/src/data/triggerSchemaIndex.json +1 -0
  240. package/src/db/index.ts +8 -0
  241. package/src/db/schema.ts +94 -0
  242. package/src/index.ts +179 -0
  243. package/src/lib/automations-builder.ts +679 -0
  244. package/src/lib/automations-types.ts +391 -0
  245. package/src/lib/index.ts +8 -0
  246. package/src/lib/legacy-task-migration.ts +143 -0
  247. package/src/lib/legacy-text-trigger-migration.ts +178 -0
  248. package/src/lib/workflow-clarification.ts +497 -0
  249. package/src/plugin-routes.ts +164 -0
  250. package/src/providers/activeWorkflows.ts +81 -0
  251. package/src/providers/index.ts +3 -0
  252. package/src/providers/pendingDraft.ts +55 -0
  253. package/src/providers/workflowStatus.ts +88 -0
  254. package/src/register-routes.ts +6 -0
  255. package/src/routes/_helpers.ts +27 -0
  256. package/src/routes/automations.ts +46 -0
  257. package/src/routes/embedded-webhooks.ts +64 -0
  258. package/src/routes/executions.ts +75 -0
  259. package/src/routes/index.ts +16 -0
  260. package/src/routes/nodes.ts +211 -0
  261. package/src/routes/validation.ts +51 -0
  262. package/src/routes/workflow-routes.ts +469 -0
  263. package/src/routes/workflows.ts +310 -0
  264. package/src/schemas/draftIntent.ts +21 -0
  265. package/src/schemas/feasibility.ts +8 -0
  266. package/src/schemas/index.ts +4 -0
  267. package/src/schemas/keywordExtraction.ts +11 -0
  268. package/src/schemas/workflowMatching.ts +29 -0
  269. package/src/services/embedded-workflow-service.ts +2224 -0
  270. package/src/services/index.ts +17 -0
  271. package/src/services/workflow-credential-store.ts +132 -0
  272. package/src/services/workflow-dispatch.ts +121 -0
  273. package/src/services/workflow-service.ts +839 -0
  274. package/src/trigger-routes.ts +714 -0
  275. package/src/types/index.ts +562 -0
  276. package/src/utils/catalog.ts +260 -0
  277. package/src/utils/clarification.ts +52 -0
  278. package/src/utils/context.ts +22 -0
  279. package/src/utils/credentialResolver.ts +234 -0
  280. package/src/utils/generation.ts +987 -0
  281. package/src/utils/host-capabilities.ts +81 -0
  282. package/src/utils/inferSyntheticOutputSchema.ts +163 -0
  283. package/src/utils/outputSchema.ts +372 -0
  284. package/src/utils/validateAndRepair.ts +610 -0
  285. package/src/utils/workflow-prompts/actionResponse.ts +16 -0
  286. package/src/utils/workflow-prompts/draftIntent.ts +22 -0
  287. package/src/utils/workflow-prompts/feasibilityCheck.ts +20 -0
  288. package/src/utils/workflow-prompts/fieldCorrection.ts +20 -0
  289. package/src/utils/workflow-prompts/index.ts +10 -0
  290. package/src/utils/workflow-prompts/keywordExtraction.ts +20 -0
  291. package/src/utils/workflow-prompts/parameterCorrection.ts +29 -0
  292. package/src/utils/workflow-prompts/workflowGeneration.ts +528 -0
  293. package/src/utils/workflow-prompts/workflowMatching.ts +22 -0
  294. package/src/utils/workflow.ts +895 -0
@@ -0,0 +1,211 @@
1
+ import defaultNodesData from '../data/defaultNodes.json';
2
+ /**
3
+ * workflows node catalog with keyword-based search
4
+ * @note Uses embedded catalog (457 nodes as of April 2025)
5
+ * @todo Add dynamic refresh via GET /node-types in v2
6
+ */
7
+ const NODE_CATALOG = defaultNodesData;
8
+ /** Get all nodes in the catalog. Used by route handlers for unfiltered listing. */
9
+ export function getAllNodes() {
10
+ return NODE_CATALOG;
11
+ }
12
+ /**
13
+ * Look up a node definition by its type name.
14
+ *
15
+ * Handles full names ("workflows-nodes-base.httpRequest") and bare names ("httpRequest").
16
+ */
17
+ export function getNodeDefinition(typeName) {
18
+ const exact = NODE_CATALOG.find((n) => n.name === typeName);
19
+ if (exact) {
20
+ return exact;
21
+ }
22
+ const bare = typeName.replace(/^workflows-nodes-base\./, '');
23
+ return NODE_CATALOG.find((n) => {
24
+ const catalogBare = n.name.replace(/^workflows-nodes-base\./, '');
25
+ return catalogBare === bare || n.name === bare;
26
+ });
27
+ }
28
+ /** Split a name into lowercase tokens on camelCase / dot / hyphen / underscore / @ / slash boundaries */
29
+ function tokenize(name) {
30
+ return name
31
+ .replace(/([a-z])([A-Z])/g, '$1 $2') // camelCase → words
32
+ .split(/[\s.\-_@/]+/)
33
+ .map((t) => t.toLowerCase())
34
+ .filter(Boolean);
35
+ }
36
+ /**
37
+ * Scoring: exact name 10, word-boundary 7, substring 3, category 3, description 2, word 1
38
+ */
39
+ export function searchNodes(keywords, limit = 15) {
40
+ if (keywords.length === 0) {
41
+ return [];
42
+ }
43
+ const normalizedKeywords = keywords.map((kw) => kw.toLowerCase().trim());
44
+ const scoredNodes = NODE_CATALOG.filter((node) => node.name && node.displayName).map((node) => {
45
+ let score = 0;
46
+ const matchReasons = [];
47
+ const nodeName = node.name.toLowerCase();
48
+ const nodeDisplayName = node.displayName.toLowerCase();
49
+ const nodeDescription = node.description?.toLowerCase() || '';
50
+ const nameTokens = tokenize(node.name);
51
+ const displayTokens = tokenize(node.displayName);
52
+ for (const keyword of normalizedKeywords) {
53
+ if (nodeName === keyword || nodeDisplayName === keyword) {
54
+ score += 10;
55
+ matchReasons.push(`exact match: "${keyword}"`);
56
+ continue;
57
+ }
58
+ // Word-boundary match: keyword equals a token in the name
59
+ const isWordMatch = nameTokens.some((t) => t === keyword) || displayTokens.some((t) => t === keyword);
60
+ if (isWordMatch) {
61
+ score += 7;
62
+ matchReasons.push(`word match: "${keyword}"`);
63
+ }
64
+ else if (nodeName.includes(keyword) || nodeDisplayName.includes(keyword)) {
65
+ score += 3;
66
+ matchReasons.push(`name contains: "${keyword}"`);
67
+ }
68
+ if (nodeDescription.includes(keyword)) {
69
+ score += 2;
70
+ matchReasons.push(`description contains: "${keyword}"`);
71
+ }
72
+ const descriptionWords = nodeDescription.split(/\s+/);
73
+ if (descriptionWords.some((word) => word.includes(keyword))) {
74
+ score += 1;
75
+ }
76
+ if (node.group.some((group) => group.toLowerCase().includes(keyword))) {
77
+ score += 3;
78
+ matchReasons.push(`category: "${keyword}"`);
79
+ }
80
+ }
81
+ return {
82
+ node,
83
+ score,
84
+ matchReason: matchReasons.join(', ') || 'no strong match',
85
+ };
86
+ });
87
+ return scoredNodes
88
+ .filter((result) => result.score > 0)
89
+ .sort((a, b) => b.score - a.score)
90
+ .slice(0, limit);
91
+ }
92
+ export function filterNodesByIntegrationSupport(nodes, supportedCredTypes) {
93
+ const remaining = [];
94
+ const removed = [];
95
+ for (const result of nodes) {
96
+ const creds = result.node.credentials;
97
+ // No credentials → utility node → always keep
98
+ if (!creds || creds.length === 0) {
99
+ remaining.push(result);
100
+ continue;
101
+ }
102
+ // Service node: keep if ANY credential type is supported
103
+ const hasSupported = creds.some((c) => supportedCredTypes.has(c.name));
104
+ if (hasSupported) {
105
+ remaining.push(result);
106
+ }
107
+ else {
108
+ removed.push(result);
109
+ }
110
+ }
111
+ return { remaining, removed };
112
+ }
113
+ const NOISE_TYPES = new Set(['notice', 'hidden']);
114
+ const STRIP_KEYS = new Set([
115
+ 'routing',
116
+ 'displayOptions',
117
+ 'typeOptions',
118
+ 'hint',
119
+ 'isNodeSetting',
120
+ 'noDataExpression',
121
+ 'validateType',
122
+ 'ignoreValidationDuringExecution',
123
+ 'requiresDataPath',
124
+ 'disabledOptions',
125
+ 'credentialTypes',
126
+ 'modes',
127
+ ]);
128
+ function isPropertyCollectionOption(option) {
129
+ return Array.isArray(option.values);
130
+ }
131
+ function simplifyProperty(prop) {
132
+ if (NOISE_TYPES.has(prop.type)) {
133
+ return null;
134
+ }
135
+ const slim = { ...prop };
136
+ for (const key of STRIP_KEYS) {
137
+ delete slim[key];
138
+ }
139
+ if (prop.type === 'resourceLocator') {
140
+ slim.type = 'string';
141
+ slim.default = '';
142
+ slim.description = slim.description || `${prop.displayName} ID`;
143
+ }
144
+ if (prop.options && Array.isArray(prop.options)) {
145
+ slim.options = prop.options.map((opt) => {
146
+ if (isPropertyCollectionOption(opt)) {
147
+ return {
148
+ name: opt.name,
149
+ displayName: opt.displayName,
150
+ values: opt.values.map(simplifyProperty).filter((v) => v !== null),
151
+ };
152
+ }
153
+ const { description: _d, ...rest } = opt;
154
+ return rest;
155
+ });
156
+ }
157
+ return slim;
158
+ }
159
+ /**
160
+ * Derive a `{ credType: requiredAuthValue }` map from a node's catalog
161
+ * credential entries. So Gmail's catalog produces
162
+ * `{ gmailOAuth2: "oAuth2", googleApi: "serviceAccount" }`. The LLM uses
163
+ * this to set `parameters.authentication` correctly when attaching a
164
+ * credentials block (Session 21 anti-hallucination Layer 2).
165
+ *
166
+ * Returns undefined when no credential entries gate on `authentication`.
167
+ */
168
+ function buildCredentialAuthMatrix(node) {
169
+ if (!node.credentials?.length) {
170
+ return undefined;
171
+ }
172
+ const out = {};
173
+ for (const cred of node.credentials) {
174
+ const authValues = cred.displayOptions
175
+ ?.show?.authentication;
176
+ if (Array.isArray(authValues) && authValues.length === 1) {
177
+ out[cred.name] = authValues[0];
178
+ }
179
+ }
180
+ return Object.keys(out).length > 0 ? out : undefined;
181
+ }
182
+ export function simplifyNodeForLLM(node) {
183
+ const cleaned = node.properties
184
+ .map(simplifyProperty)
185
+ .filter((p) => p !== null);
186
+ const seen = new Set();
187
+ const deduped = [];
188
+ for (const prop of cleaned) {
189
+ if (seen.has(prop.name)) {
190
+ continue;
191
+ }
192
+ seen.add(prop.name);
193
+ deduped.push(prop);
194
+ }
195
+ // Layer 2 (Session 21): always emit `version` as an array so the LLM
196
+ // sees the EXACT set of valid values (catches typeVersion hallucinations
197
+ // like 2.2 when only [1, 2, 2.1] exist). Pair with the prompt rule
198
+ // "pick the highest from version[]; never invent versions".
199
+ const versions = Array.isArray(node.version) ? [...node.version] : [node.version];
200
+ // Layer 2 (Session 21): expose the credential→authentication mapping
201
+ // so the LLM sets `parameters.authentication` correctly when it
202
+ // attaches a credentials block.
203
+ const credentialAuthMatrix = buildCredentialAuthMatrix(node);
204
+ return {
205
+ ...node,
206
+ version: versions,
207
+ properties: deduped,
208
+ ...(credentialAuthMatrix ? { credentialAuthMatrix } : {}),
209
+ };
210
+ }
211
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/utils/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ClarificationRequest } from '../types';
2
+ /**
3
+ * Marker used by the service to flag clarifications produced by post-LLM
4
+ * catalog validation (vs. clarifications emitted by the LLM itself). Hosts
5
+ * may surface these differently if needed.
6
+ */
7
+ export declare const CATALOG_CLARIFICATION_SUFFIX = "\u2014 please provide this value or clarify your requirements";
8
+ export declare function isCatalogClarificationString(value: string): boolean;
9
+ export declare function isCatalogClarification(item: string | ClarificationRequest): boolean;
10
+ /**
11
+ * Normalize a mixed-shape clarifications array into structured
12
+ * `ClarificationRequest` objects. Legacy strings become `kind: 'free_text'`
13
+ * with an empty `paramPath` (host renders a free-form input instead of a
14
+ * picker). Structured items pass through unchanged.
15
+ */
16
+ export declare function coerceClarificationRequests(items: ReadonlyArray<string | ClarificationRequest> | undefined | null): ClarificationRequest[];
17
+ //# sourceMappingURL=clarification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification.d.ts","sourceRoot":"","sources":["../../src/utils/clarification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,kEACmB,CAAC;AAE7D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,OAAO,CAInF;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,oBAAoB,CAAC,GAAG,SAAS,GAAG,IAAI,GACrE,oBAAoB,EAAE,CAuBxB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Marker used by the service to flag clarifications produced by post-LLM
3
+ * catalog validation (vs. clarifications emitted by the LLM itself). Hosts
4
+ * may surface these differently if needed.
5
+ */
6
+ export const CATALOG_CLARIFICATION_SUFFIX = '— please provide this value or clarify your requirements';
7
+ export function isCatalogClarificationString(value) {
8
+ return value.endsWith(CATALOG_CLARIFICATION_SUFFIX);
9
+ }
10
+ export function isCatalogClarification(item) {
11
+ return typeof item === 'string'
12
+ ? isCatalogClarificationString(item)
13
+ : isCatalogClarificationString(item.question);
14
+ }
15
+ /**
16
+ * Normalize a mixed-shape clarifications array into structured
17
+ * `ClarificationRequest` objects. Legacy strings become `kind: 'free_text'`
18
+ * with an empty `paramPath` (host renders a free-form input instead of a
19
+ * picker). Structured items pass through unchanged.
20
+ */
21
+ export function coerceClarificationRequests(items) {
22
+ if (!items || items.length === 0) {
23
+ return [];
24
+ }
25
+ const out = [];
26
+ for (const item of items) {
27
+ if (typeof item === 'string') {
28
+ const trimmed = item.trim();
29
+ if (trimmed.length === 0) {
30
+ continue;
31
+ }
32
+ out.push({ kind: 'free_text', question: trimmed, paramPath: '' });
33
+ }
34
+ else if (item && typeof item === 'object' && typeof item.question === 'string') {
35
+ out.push({
36
+ kind: item.kind ?? 'free_text',
37
+ platform: item.platform,
38
+ scope: item.scope,
39
+ question: item.question,
40
+ paramPath: typeof item.paramPath === 'string' ? item.paramPath : '',
41
+ });
42
+ }
43
+ }
44
+ return out;
45
+ }
46
+ //# sourceMappingURL=clarification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification.js","sourceRoot":"","sources":["../../src/utils/clarification.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GACvC,0DAA0D,CAAC;AAE7D,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,OAAO,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAmC;IACxE,OAAO,OAAO,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAsE;IAEtE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjF,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW;gBAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { IAgentRuntime, Memory, State } from '@elizaos/core';
2
+ export declare function buildConversationContext(message: Memory, state: State | undefined): string;
3
+ export declare function getUserTagName(runtime: IAgentRuntime, userId: string): Promise<string>;
4
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAQ,MAAM,eAAe,CAAC;AAExE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAU1F;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5F"}
@@ -0,0 +1,18 @@
1
+ export function buildConversationContext(message, state) {
2
+ const raw = state?.values?.recentMessages;
3
+ const recentMessages = typeof raw === 'string' ? raw : '';
4
+ const currentText = message.content?.text ?? '';
5
+ if (!recentMessages) {
6
+ return currentText;
7
+ }
8
+ return `${recentMessages}\n\nCurrent request: ${currentText}`;
9
+ }
10
+ export async function getUserTagName(runtime, userId) {
11
+ const entity = await runtime.getEntityById(userId);
12
+ const shortId = userId.replace(/-/g, '').slice(0, 8);
13
+ const name = entity?.names?.[0];
14
+ // ElizaOS default name is "User" + UUID — not useful for a tag
15
+ const isRealName = name && !name.includes(userId.slice(0, 8));
16
+ return isRealName ? `${name}_${shortId}` : `user_${shortId}`;
17
+ }
18
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAwB;IAChF,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC;IAC1C,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;IAEhD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,cAAc,wBAAwB,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAsB,EAAE,MAAc;IACzE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,MAAc,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,+DAA+D;IAC/D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CredentialProvider, CredentialResolutionResult, WorkflowCredentialStoreApi, WorkflowDefinition, WorkflowPluginConfig } from '../types/index';
2
+ interface CredentialApiClient {
3
+ createCredential(credential: {
4
+ name: string;
5
+ type: string;
6
+ data: Record<string, unknown>;
7
+ }): Promise<{
8
+ id: string;
9
+ }>;
10
+ }
11
+ /**
12
+ * Resolve and inject credentials into workflow.
13
+ *
14
+ * Resolution chain (first match wins):
15
+ * 1. Credential store DB — cached mappings from previous resolutions
16
+ * 2. Static config — character.settings.workflows.credentials
17
+ * 3. External provider — registered CredentialProvider service (e.g. cloud OAuth)
18
+ * 4. Missing — reported for manual configuration in workflows
19
+ */
20
+ export declare function resolveCredentials(workflow: WorkflowDefinition, userId: string, config: WorkflowPluginConfig, credStore: WorkflowCredentialStoreApi | null, credProvider: CredentialProvider | null, apiClient: CredentialApiClient | null, tagName: string): Promise<CredentialResolutionResult>;
21
+ export {};
22
+ //# sourceMappingURL=credentialResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialResolver.d.ts","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAE1B,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAExB,UAAU,mBAAmB;IAC3B,gBAAgB,CAAC,UAAU,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,0BAA0B,GAAG,IAAI,EAC5C,YAAY,EAAE,kBAAkB,GAAG,IAAI,EACvC,SAAS,EAAE,mBAAmB,GAAG,IAAI,EACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,0BAA0B,CAAC,CAsCrC"}
@@ -0,0 +1,146 @@
1
+ import { logger } from '@elizaos/core';
2
+ /**
3
+ * Resolve and inject credentials into workflow.
4
+ *
5
+ * Resolution chain (first match wins):
6
+ * 1. Credential store DB — cached mappings from previous resolutions
7
+ * 2. Static config — character.settings.workflows.credentials
8
+ * 3. External provider — registered CredentialProvider service (e.g. cloud OAuth)
9
+ * 4. Missing — reported for manual configuration in workflows
10
+ */
11
+ export async function resolveCredentials(workflow, userId, config, credStore, credProvider, apiClient, tagName) {
12
+ const requiredCredTypes = extractRequiredCredentialTypes(workflow);
13
+ if (requiredCredTypes.size === 0) {
14
+ return {
15
+ workflow,
16
+ missingConnections: [],
17
+ injectedCredentials: new Map(),
18
+ };
19
+ }
20
+ const injectedCredentials = new Map();
21
+ const missingConnections = [];
22
+ for (const credType of requiredCredTypes) {
23
+ const credId = await resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections, tagName);
24
+ if (credId) {
25
+ injectedCredentials.set(credType, credId);
26
+ }
27
+ }
28
+ const resolvedWorkflow = injectCredentialIds(workflow, injectedCredentials);
29
+ return {
30
+ workflow: resolvedWorkflow,
31
+ missingConnections,
32
+ injectedCredentials,
33
+ };
34
+ }
35
+ async function resolveOneCredential(credType, userId, config, credStore, credProvider, apiClient, missingConnections, tagName) {
36
+ // 1. Credential store DB
37
+ const cachedId = await credStore?.get(userId, credType);
38
+ if (cachedId) {
39
+ logger.debug({ src: 'plugin:workflow:utils:credentials' }, `Resolved ${credType} from credential store`);
40
+ return cachedId;
41
+ }
42
+ // 2. Static config
43
+ if (config.credentials) {
44
+ const configId = findCredentialId(config.credentials, credType);
45
+ if (configId) {
46
+ return configId;
47
+ }
48
+ }
49
+ // 3. External provider
50
+ if (credProvider) {
51
+ try {
52
+ const result = await credProvider.resolve(userId, credType);
53
+ if (result?.status === 'credential_data') {
54
+ if (!apiClient) {
55
+ logger.error({ src: 'plugin:workflow:utils:credentials' }, `Received credential_data for ${credType} but no apiClient available`);
56
+ missingConnections.push({ credType });
57
+ return null;
58
+ }
59
+ const credName = `${credType}_${tagName}`;
60
+ const workflowsCred = await apiClient.createCredential({
61
+ name: credName,
62
+ type: credType,
63
+ data: result.data,
64
+ });
65
+ try {
66
+ await credStore?.set(userId, credType, workflowsCred.id);
67
+ }
68
+ catch (cacheError) {
69
+ logger.warn({ src: 'plugin:workflow:utils:credentials' }, `Failed to cache credential mapping for ${credType} (credential still usable): ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`);
70
+ }
71
+ logger.info({ src: 'plugin:workflow:utils:credentials' }, `Created workflows credential for ${credType}: ${workflowsCred.id}`);
72
+ return workflowsCred.id;
73
+ }
74
+ if (result?.status === 'needs_auth') {
75
+ missingConnections.push({ credType, authUrl: result.authUrl });
76
+ return null;
77
+ }
78
+ }
79
+ catch (error) {
80
+ logger.error({ src: 'plugin:workflow:utils:credentials' }, `Credential provider failed for ${credType}: ${error instanceof Error ? error.message : String(error)}`);
81
+ }
82
+ }
83
+ // 4. Missing
84
+ missingConnections.push({ credType });
85
+ return null;
86
+ }
87
+ /**
88
+ * Look up a credential ID from config, tolerating naming mismatches
89
+ * (e.g. LLM generates "gmailOAuth2Api" but config has "gmailOAuth2", or vice-versa).
90
+ */
91
+ function findCredentialId(credentials, credType) {
92
+ if (credentials[credType]) {
93
+ return credentials[credType];
94
+ }
95
+ // Fuzzy: try without "Api" suffix (e.g. "gmailOAuth2Api" → "gmailOAuth2")
96
+ const withoutApi = credType.replace(/Api$/, '');
97
+ if (withoutApi !== credType && credentials[withoutApi]) {
98
+ logger.debug({ src: 'plugin:workflow:utils:credentials' }, `Fuzzy credential match: "${credType}" → "${withoutApi}" (removed Api suffix)`);
99
+ return credentials[withoutApi];
100
+ }
101
+ // Fuzzy: try with "Api" suffix (e.g. "gmailOAuth2" → "gmailOAuth2Api")
102
+ const withApi = `${credType}Api`;
103
+ if (credentials[withApi]) {
104
+ logger.debug({ src: 'plugin:workflow:utils:credentials' }, `Fuzzy credential match: "${credType}" → "${withApi}" (added Api suffix)`);
105
+ return credentials[withApi];
106
+ }
107
+ return null;
108
+ }
109
+ function extractRequiredCredentialTypes(workflow) {
110
+ const credTypes = new Set();
111
+ for (const node of workflow.nodes) {
112
+ if (node.credentials) {
113
+ for (const credType of Object.keys(node.credentials)) {
114
+ credTypes.add(credType);
115
+ }
116
+ }
117
+ }
118
+ return credTypes;
119
+ }
120
+ function injectCredentialIds(workflow, credentialMap) {
121
+ const injected = { ...workflow };
122
+ injected.nodes = workflow.nodes.map((node) => {
123
+ if (!node.credentials) {
124
+ return node;
125
+ }
126
+ const updatedCredentials = {};
127
+ for (const [credType, credRef] of Object.entries(node.credentials)) {
128
+ const credId = credentialMap.get(credType);
129
+ if (credId) {
130
+ updatedCredentials[credType] = {
131
+ id: credId,
132
+ name: credRef.name,
133
+ };
134
+ }
135
+ else {
136
+ updatedCredentials[credType] = credRef;
137
+ }
138
+ }
139
+ return {
140
+ ...node,
141
+ credentials: updatedCredentials,
142
+ };
143
+ });
144
+ return injected;
145
+ }
146
+ //# sourceMappingURL=credentialResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialResolver.js","sourceRoot":"","sources":["../../src/utils/credentialResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type IAgentRuntime } from '@elizaos/core';
2
+ import type { DraftIntentResult, FeasibilityResult, NodeDefinition, NodeSearchResult, OutputRefValidation, RuntimeContext, WorkflowDefinition, WorkflowDraft, WorkflowMatchResult } from '../types/index';
3
+ import type { UnknownParamDetection } from './workflow';
4
+ export declare function extractKeywords(runtime: IAgentRuntime, userPrompt: string, preferredProviders?: string[]): Promise<string[]>;
5
+ export declare function matchWorkflow(runtime: IAgentRuntime, userRequest: string, workflows: WorkflowDefinition[]): Promise<WorkflowMatchResult>;
6
+ export declare function classifyDraftIntent(runtime: IAgentRuntime, userMessage: string, draft: WorkflowDraft): Promise<DraftIntentResult>;
7
+ /**
8
+ * Layer 3 retry helper (Session 21). When `validateAndRepair` flags errors
9
+ * it can't auto-fix deterministically (e.g. truly unknown output field),
10
+ * send a surgical fix prompt to the LLM listing only the failing items
11
+ * and re-validate. The caller wraps this in a 3-attempt loop.
12
+ *
13
+ * Lives next to `correctFieldReferences` and `correctParameterNames` —
14
+ * those are still the preferred specific-class corrections. This is the
15
+ * generic backstop for any remaining error class.
16
+ */
17
+ export declare function fixWorkflowErrors(runtime: IAgentRuntime, workflow: WorkflowDefinition, errors: Array<{
18
+ kind: string;
19
+ node: string;
20
+ detail: string;
21
+ expression?: string;
22
+ availableFields?: string[];
23
+ }>, relevantNodes: NodeDefinition[]): Promise<WorkflowDefinition>;
24
+ export declare function generateWorkflow(runtime: IAgentRuntime, userPrompt: string, relevantNodes: NodeDefinition[], runtimeContext?: RuntimeContext): Promise<WorkflowDefinition>;
25
+ export declare function modifyWorkflow(runtime: IAgentRuntime, existingWorkflow: WorkflowDefinition, modificationRequest: string, relevantNodes: NodeDefinition[], runtimeContext?: RuntimeContext): Promise<WorkflowDefinition>;
26
+ export declare function collectExistingNodeDefinitions(workflow: WorkflowDefinition): NodeDefinition[];
27
+ export declare function formatActionResponse(runtime: IAgentRuntime, responseType: string, data: Record<string, unknown>): Promise<string>;
28
+ export declare function assessFeasibility(runtime: IAgentRuntime, userPrompt: string, removedNodes: NodeSearchResult[], remainingNodes: NodeSearchResult[]): Promise<FeasibilityResult>;
29
+ /**
30
+ * Auto-corrects invalid field references in expressions using parallel LLM calls.
31
+ * Returns a new workflow with corrected expressions.
32
+ */
33
+ export declare function correctFieldReferences(runtime: IAgentRuntime, workflow: WorkflowDefinition, invalidRefs: OutputRefValidation[]): Promise<WorkflowDefinition>;
34
+ /** Deterministic fast path + LLM fallback for parameter name correction. */
35
+ export declare function correctParameterNames(runtime: IAgentRuntime, workflow: WorkflowDefinition, detections: UnknownParamDetection[]): Promise<WorkflowDefinition>;
36
+ //# sourceMappingURL=generation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/utils/generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,eAAe,CAAC;AAOtE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAiDxD,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAuCnB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,EAAE,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAsE9B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA6C5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC,EACF,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAwD7B;AAuMD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAAE,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,kBAAkB,EACpC,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,cAAc,EAAE,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAmC7B;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,cAAc,EAAE,CAsB7F;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,CAuBjB;AAkCD,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,kBAAkB,EAC5B,WAAW,EAAE,mBAAmB,EAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA6D7B;AAqDD,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA+H7B"}