@synergenius/flow-weaver 0.2.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 (466) hide show
  1. package/LICENSE +122 -0
  2. package/README.md +315 -0
  3. package/dist/annotation-generator.d.ts +45 -0
  4. package/dist/annotation-generator.js +557 -0
  5. package/dist/api/builder.d.ts +223 -0
  6. package/dist/api/builder.js +345 -0
  7. package/dist/api/compile.d.ts +92 -0
  8. package/dist/api/compile.js +149 -0
  9. package/dist/api/extract-types.d.ts +29 -0
  10. package/dist/api/extract-types.js +57 -0
  11. package/dist/api/generate-in-place.d.ts +73 -0
  12. package/dist/api/generate-in-place.js +1353 -0
  13. package/dist/api/generate.d.ts +83 -0
  14. package/dist/api/generate.js +510 -0
  15. package/dist/api/helpers.d.ts +248 -0
  16. package/dist/api/helpers.js +285 -0
  17. package/dist/api/index.d.ts +46 -0
  18. package/dist/api/index.js +45 -0
  19. package/dist/api/inline-runtime.d.ts +27 -0
  20. package/dist/api/inline-runtime.js +551 -0
  21. package/dist/api/manipulation/connections.d.ts +79 -0
  22. package/dist/api/manipulation/connections.js +151 -0
  23. package/dist/api/manipulation/index.d.ts +34 -0
  24. package/dist/api/manipulation/index.js +41 -0
  25. package/dist/api/manipulation/node-types.d.ts +123 -0
  26. package/dist/api/manipulation/node-types.js +200 -0
  27. package/dist/api/manipulation/nodes.d.ts +144 -0
  28. package/dist/api/manipulation/nodes.js +333 -0
  29. package/dist/api/manipulation/ports.d.ts +59 -0
  30. package/dist/api/manipulation/ports.js +228 -0
  31. package/dist/api/manipulation/scopes.d.ts +52 -0
  32. package/dist/api/manipulation/scopes.js +156 -0
  33. package/dist/api/manipulation/validation.d.ts +6 -0
  34. package/dist/api/manipulation/validation.js +6 -0
  35. package/dist/api/manipulation/workflow.d.ts +81 -0
  36. package/dist/api/manipulation/workflow.js +116 -0
  37. package/dist/api/manipulation.d.ts +8 -0
  38. package/dist/api/manipulation.js +8 -0
  39. package/dist/api/parse.d.ts +48 -0
  40. package/dist/api/parse.js +110 -0
  41. package/dist/api/patterns.d.ts +112 -0
  42. package/dist/api/patterns.js +306 -0
  43. package/dist/api/query.d.ts +429 -0
  44. package/dist/api/query.js +816 -0
  45. package/dist/api/templates.d.ts +98 -0
  46. package/dist/api/templates.js +117 -0
  47. package/dist/api/transform.d.ts +31 -0
  48. package/dist/api/transform.js +40 -0
  49. package/dist/api/validate.d.ts +25 -0
  50. package/dist/api/validate.js +39 -0
  51. package/dist/api/workflow-file-operations.d.ts +29 -0
  52. package/dist/api/workflow-file-operations.js +180 -0
  53. package/dist/ast/builder.d.ts +210 -0
  54. package/dist/ast/builder.js +395 -0
  55. package/dist/ast/index.d.ts +5 -0
  56. package/dist/ast/index.js +5 -0
  57. package/dist/ast/serialization-node.d.ts +6 -0
  58. package/dist/ast/serialization-node.js +30 -0
  59. package/dist/ast/serialization.d.ts +43 -0
  60. package/dist/ast/serialization.js +134 -0
  61. package/dist/ast/types.d.ts +852 -0
  62. package/dist/ast/types.js +2 -0
  63. package/dist/ast/workflow-utils.d.ts +54 -0
  64. package/dist/ast/workflow-utils.js +114 -0
  65. package/dist/body-generator.d.ts +31 -0
  66. package/dist/body-generator.js +35 -0
  67. package/dist/built-in-nodes/delay.d.ts +11 -0
  68. package/dist/built-in-nodes/delay.js +29 -0
  69. package/dist/built-in-nodes/index.d.ts +5 -0
  70. package/dist/built-in-nodes/index.js +4 -0
  71. package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
  72. package/dist/built-in-nodes/invoke-workflow.js +25 -0
  73. package/dist/built-in-nodes/mock-types.d.ts +18 -0
  74. package/dist/built-in-nodes/mock-types.js +12 -0
  75. package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
  76. package/dist/built-in-nodes/wait-for-event.js +25 -0
  77. package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
  78. package/dist/chevrotain-parser/connect-parser.js +98 -0
  79. package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
  80. package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
  81. package/dist/chevrotain-parser/index.d.ts +25 -0
  82. package/dist/chevrotain-parser/index.js +27 -0
  83. package/dist/chevrotain-parser/map-parser.d.ts +33 -0
  84. package/dist/chevrotain-parser/map-parser.js +130 -0
  85. package/dist/chevrotain-parser/node-parser.d.ts +36 -0
  86. package/dist/chevrotain-parser/node-parser.js +466 -0
  87. package/dist/chevrotain-parser/path-parser.d.ts +28 -0
  88. package/dist/chevrotain-parser/path-parser.js +118 -0
  89. package/dist/chevrotain-parser/port-parser.d.ts +36 -0
  90. package/dist/chevrotain-parser/port-parser.js +442 -0
  91. package/dist/chevrotain-parser/position-parser.d.ts +20 -0
  92. package/dist/chevrotain-parser/position-parser.js +83 -0
  93. package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
  94. package/dist/chevrotain-parser/scope-parser.js +104 -0
  95. package/dist/chevrotain-parser/tokens.d.ts +78 -0
  96. package/dist/chevrotain-parser/tokens.js +384 -0
  97. package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
  98. package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
  99. package/dist/cli/commands/changelog.d.ts +13 -0
  100. package/dist/cli/commands/changelog.js +135 -0
  101. package/dist/cli/commands/compile.d.ts +64 -0
  102. package/dist/cli/commands/compile.js +278 -0
  103. package/dist/cli/commands/create.d.ts +33 -0
  104. package/dist/cli/commands/create.js +147 -0
  105. package/dist/cli/commands/describe.d.ts +68 -0
  106. package/dist/cli/commands/describe.js +377 -0
  107. package/dist/cli/commands/dev.d.ts +32 -0
  108. package/dist/cli/commands/dev.js +384 -0
  109. package/dist/cli/commands/diagram.d.ts +13 -0
  110. package/dist/cli/commands/diagram.js +33 -0
  111. package/dist/cli/commands/diff.d.ts +11 -0
  112. package/dist/cli/commands/diff.js +59 -0
  113. package/dist/cli/commands/doctor.d.ts +57 -0
  114. package/dist/cli/commands/doctor.js +719 -0
  115. package/dist/cli/commands/export.d.ts +57 -0
  116. package/dist/cli/commands/export.js +163 -0
  117. package/dist/cli/commands/grammar.d.ts +9 -0
  118. package/dist/cli/commands/grammar.js +39 -0
  119. package/dist/cli/commands/init.d.ts +59 -0
  120. package/dist/cli/commands/init.js +435 -0
  121. package/dist/cli/commands/listen.d.ts +16 -0
  122. package/dist/cli/commands/listen.js +39 -0
  123. package/dist/cli/commands/market.d.ts +52 -0
  124. package/dist/cli/commands/market.js +436 -0
  125. package/dist/cli/commands/migrate.d.ts +13 -0
  126. package/dist/cli/commands/migrate.js +89 -0
  127. package/dist/cli/commands/openapi.d.ts +37 -0
  128. package/dist/cli/commands/openapi.js +67 -0
  129. package/dist/cli/commands/pattern.d.ts +34 -0
  130. package/dist/cli/commands/pattern.js +185 -0
  131. package/dist/cli/commands/plugin.d.ts +16 -0
  132. package/dist/cli/commands/plugin.js +176 -0
  133. package/dist/cli/commands/run.d.ts +49 -0
  134. package/dist/cli/commands/run.js +191 -0
  135. package/dist/cli/commands/serve.d.ts +45 -0
  136. package/dist/cli/commands/serve.js +81 -0
  137. package/dist/cli/commands/templates.d.ts +8 -0
  138. package/dist/cli/commands/templates.js +54 -0
  139. package/dist/cli/commands/ui.d.ts +16 -0
  140. package/dist/cli/commands/ui.js +130 -0
  141. package/dist/cli/commands/validate.d.ts +12 -0
  142. package/dist/cli/commands/validate.js +247 -0
  143. package/dist/cli/commands/watch.d.ts +9 -0
  144. package/dist/cli/commands/watch.js +70 -0
  145. package/dist/cli/flow-weaver.mjs +92924 -0
  146. package/dist/cli/index.d.ts +9 -0
  147. package/dist/cli/index.js +742 -0
  148. package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
  149. package/dist/cli/templates/ai/mock-provider.js +64 -0
  150. package/dist/cli/templates/ai/types.d.ts +47 -0
  151. package/dist/cli/templates/ai/types.js +5 -0
  152. package/dist/cli/templates/approvals/index.d.ts +15 -0
  153. package/dist/cli/templates/approvals/index.js +241 -0
  154. package/dist/cli/templates/index.d.ts +102 -0
  155. package/dist/cli/templates/index.js +101 -0
  156. package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
  157. package/dist/cli/templates/nodes/agent-router.js +114 -0
  158. package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
  159. package/dist/cli/templates/nodes/aggregator.js +63 -0
  160. package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
  161. package/dist/cli/templates/nodes/conversation-memory.js +85 -0
  162. package/dist/cli/templates/nodes/http.d.ts +7 -0
  163. package/dist/cli/templates/nodes/http.js +80 -0
  164. package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
  165. package/dist/cli/templates/nodes/human-approval.js +110 -0
  166. package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
  167. package/dist/cli/templates/nodes/json-extractor.js +119 -0
  168. package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
  169. package/dist/cli/templates/nodes/llm-call.js +106 -0
  170. package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
  171. package/dist/cli/templates/nodes/prompt-template.js +52 -0
  172. package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
  173. package/dist/cli/templates/nodes/rag-retriever.js +128 -0
  174. package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
  175. package/dist/cli/templates/nodes/tool-executor.js +108 -0
  176. package/dist/cli/templates/nodes/transformer.d.ts +7 -0
  177. package/dist/cli/templates/nodes/transformer.js +68 -0
  178. package/dist/cli/templates/nodes/validator.d.ts +7 -0
  179. package/dist/cli/templates/nodes/validator.js +62 -0
  180. package/dist/cli/templates/providers/index.d.ts +14 -0
  181. package/dist/cli/templates/providers/index.js +239 -0
  182. package/dist/cli/templates/shared/approval-types.d.ts +9 -0
  183. package/dist/cli/templates/shared/approval-types.js +31 -0
  184. package/dist/cli/templates/shared/llm-types.d.ts +15 -0
  185. package/dist/cli/templates/shared/llm-types.js +104 -0
  186. package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
  187. package/dist/cli/templates/workflows/aggregator.js +104 -0
  188. package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
  189. package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
  190. package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
  191. package/dist/cli/templates/workflows/ai-agent.js +326 -0
  192. package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
  193. package/dist/cli/templates/workflows/ai-chat.js +169 -0
  194. package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
  195. package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
  196. package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
  197. package/dist/cli/templates/workflows/ai-rag.js +186 -0
  198. package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
  199. package/dist/cli/templates/workflows/ai-react.js +294 -0
  200. package/dist/cli/templates/workflows/conditional.d.ts +12 -0
  201. package/dist/cli/templates/workflows/conditional.js +142 -0
  202. package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
  203. package/dist/cli/templates/workflows/error-handler.js +147 -0
  204. package/dist/cli/templates/workflows/foreach.d.ts +7 -0
  205. package/dist/cli/templates/workflows/foreach.js +143 -0
  206. package/dist/cli/templates/workflows/sequential.d.ts +7 -0
  207. package/dist/cli/templates/workflows/sequential.js +198 -0
  208. package/dist/cli/templates/workflows/webhook.d.ts +7 -0
  209. package/dist/cli/templates/workflows/webhook.js +161 -0
  210. package/dist/cli/utils/logger.d.ts +15 -0
  211. package/dist/cli/utils/logger.js +46 -0
  212. package/dist/constants.d.ts +100 -0
  213. package/dist/constants.js +125 -0
  214. package/dist/defaults.d.ts +3 -0
  215. package/dist/defaults.js +3 -0
  216. package/dist/deployment/config/defaults.d.ts +29 -0
  217. package/dist/deployment/config/defaults.js +98 -0
  218. package/dist/deployment/config/loader.d.ts +24 -0
  219. package/dist/deployment/config/loader.js +236 -0
  220. package/dist/deployment/config/types.d.ts +117 -0
  221. package/dist/deployment/config/types.js +5 -0
  222. package/dist/deployment/core/adapters.d.ts +90 -0
  223. package/dist/deployment/core/adapters.js +251 -0
  224. package/dist/deployment/core/executor.d.ts +62 -0
  225. package/dist/deployment/core/executor.js +197 -0
  226. package/dist/deployment/core/formatters.d.ts +57 -0
  227. package/dist/deployment/core/formatters.js +170 -0
  228. package/dist/deployment/index.d.ts +31 -0
  229. package/dist/deployment/index.js +48 -0
  230. package/dist/deployment/openapi/generator.d.ts +146 -0
  231. package/dist/deployment/openapi/generator.js +347 -0
  232. package/dist/deployment/openapi/schema-converter.d.ts +49 -0
  233. package/dist/deployment/openapi/schema-converter.js +192 -0
  234. package/dist/deployment/targets/base.d.ts +316 -0
  235. package/dist/deployment/targets/base.js +823 -0
  236. package/dist/deployment/targets/cloudflare.d.ts +23 -0
  237. package/dist/deployment/targets/cloudflare.js +1125 -0
  238. package/dist/deployment/targets/inngest.d.ts +38 -0
  239. package/dist/deployment/targets/inngest.js +926 -0
  240. package/dist/deployment/targets/lambda.d.ts +23 -0
  241. package/dist/deployment/targets/lambda.js +1289 -0
  242. package/dist/deployment/targets/vercel.d.ts +23 -0
  243. package/dist/deployment/targets/vercel.js +886 -0
  244. package/dist/deployment/types.d.ts +183 -0
  245. package/dist/deployment/types.js +8 -0
  246. package/dist/diagram/geometry.d.ts +26 -0
  247. package/dist/diagram/geometry.js +850 -0
  248. package/dist/diagram/index.d.ts +16 -0
  249. package/dist/diagram/index.js +42 -0
  250. package/dist/diagram/layout.d.ts +11 -0
  251. package/dist/diagram/layout.js +143 -0
  252. package/dist/diagram/orthogonal-router.d.ts +79 -0
  253. package/dist/diagram/orthogonal-router.js +568 -0
  254. package/dist/diagram/renderer.d.ts +3 -0
  255. package/dist/diagram/renderer.js +207 -0
  256. package/dist/diagram/theme.d.ts +20 -0
  257. package/dist/diagram/theme.js +189 -0
  258. package/dist/diagram/types.d.ts +70 -0
  259. package/dist/diagram/types.js +2 -0
  260. package/dist/diff/WorkflowDiffer.d.ts +13 -0
  261. package/dist/diff/WorkflowDiffer.js +429 -0
  262. package/dist/diff/formatDiff.d.ts +10 -0
  263. package/dist/diff/formatDiff.js +220 -0
  264. package/dist/diff/impact.d.ts +29 -0
  265. package/dist/diff/impact.js +119 -0
  266. package/dist/diff/index.d.ts +10 -0
  267. package/dist/diff/index.js +9 -0
  268. package/dist/diff/types.d.ts +138 -0
  269. package/dist/diff/types.js +35 -0
  270. package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
  271. package/dist/doc-metadata/extractors/annotations.js +337 -0
  272. package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
  273. package/dist/doc-metadata/extractors/cli-commands.js +355 -0
  274. package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
  275. package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
  276. package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
  277. package/dist/doc-metadata/extractors/plugin-api.js +279 -0
  278. package/dist/doc-metadata/index.d.ts +5 -0
  279. package/dist/doc-metadata/index.js +4 -0
  280. package/dist/doc-metadata/types.d.ts +120 -0
  281. package/dist/doc-metadata/types.js +5 -0
  282. package/dist/editor-completions/annotationValues.d.ts +12 -0
  283. package/dist/editor-completions/annotationValues.js +138 -0
  284. package/dist/editor-completions/contextParser.d.ts +40 -0
  285. package/dist/editor-completions/contextParser.js +410 -0
  286. package/dist/editor-completions/dataTypes.d.ts +16 -0
  287. package/dist/editor-completions/dataTypes.js +95 -0
  288. package/dist/editor-completions/goToDefinition.d.ts +27 -0
  289. package/dist/editor-completions/goToDefinition.js +112 -0
  290. package/dist/editor-completions/index.d.ts +39 -0
  291. package/dist/editor-completions/index.js +181 -0
  292. package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
  293. package/dist/editor-completions/jsDocAnnotations.js +357 -0
  294. package/dist/editor-completions/modifierCompletions.d.ts +17 -0
  295. package/dist/editor-completions/modifierCompletions.js +197 -0
  296. package/dist/editor-completions/types.d.ts +119 -0
  297. package/dist/editor-completions/types.js +8 -0
  298. package/dist/export/index.d.ts +68 -0
  299. package/dist/export/index.js +1074 -0
  300. package/dist/export/templates.d.ts +24 -0
  301. package/dist/export/templates.js +186 -0
  302. package/dist/friendly-errors.d.ts +35 -0
  303. package/dist/friendly-errors.js +375 -0
  304. package/dist/function-like.d.ts +38 -0
  305. package/dist/function-like.js +83 -0
  306. package/dist/generated-branding.d.ts +16 -0
  307. package/dist/generated-branding.js +22 -0
  308. package/dist/generator/async-detection.d.ts +27 -0
  309. package/dist/generator/async-detection.js +56 -0
  310. package/dist/generator/code-utils.d.ts +76 -0
  311. package/dist/generator/code-utils.js +410 -0
  312. package/dist/generator/control-flow.d.ts +54 -0
  313. package/dist/generator/control-flow.js +284 -0
  314. package/dist/generator/inngest.d.ts +53 -0
  315. package/dist/generator/inngest.js +1126 -0
  316. package/dist/generator/scope-function-generator.d.ts +78 -0
  317. package/dist/generator/scope-function-generator.js +360 -0
  318. package/dist/generator/unified.d.ts +42 -0
  319. package/dist/generator/unified.js +1504 -0
  320. package/dist/generator.d.ts +54 -0
  321. package/dist/generator.js +100 -0
  322. package/dist/index.d.ts +85 -0
  323. package/dist/index.js +89 -0
  324. package/dist/jsdoc-parser.d.ts +308 -0
  325. package/dist/jsdoc-parser.js +923 -0
  326. package/dist/jsdoc-port-sync/constants.d.ts +41 -0
  327. package/dist/jsdoc-port-sync/constants.js +103 -0
  328. package/dist/jsdoc-port-sync/diff.d.ts +76 -0
  329. package/dist/jsdoc-port-sync/diff.js +319 -0
  330. package/dist/jsdoc-port-sync/index.d.ts +42 -0
  331. package/dist/jsdoc-port-sync/index.js +45 -0
  332. package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
  333. package/dist/jsdoc-port-sync/port-parser.js +579 -0
  334. package/dist/jsdoc-port-sync/rename.d.ts +21 -0
  335. package/dist/jsdoc-port-sync/rename.js +256 -0
  336. package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
  337. package/dist/jsdoc-port-sync/signature-parser.js +559 -0
  338. package/dist/jsdoc-port-sync/sync.d.ts +36 -0
  339. package/dist/jsdoc-port-sync/sync.js +644 -0
  340. package/dist/jsdoc-port-sync.d.ts +10 -0
  341. package/dist/jsdoc-port-sync.js +10 -0
  342. package/dist/marketplace/index.d.ts +11 -0
  343. package/dist/marketplace/index.js +10 -0
  344. package/dist/marketplace/manifest.d.ts +32 -0
  345. package/dist/marketplace/manifest.js +176 -0
  346. package/dist/marketplace/registry.d.ts +30 -0
  347. package/dist/marketplace/registry.js +100 -0
  348. package/dist/marketplace/types.d.ts +154 -0
  349. package/dist/marketplace/types.js +9 -0
  350. package/dist/marketplace/validator.d.ts +13 -0
  351. package/dist/marketplace/validator.js +131 -0
  352. package/dist/mcp/auto-registration.d.ts +3 -0
  353. package/dist/mcp/auto-registration.js +62 -0
  354. package/dist/mcp/editor-connection.d.ts +50 -0
  355. package/dist/mcp/editor-connection.js +125 -0
  356. package/dist/mcp/event-buffer.d.ts +62 -0
  357. package/dist/mcp/event-buffer.js +150 -0
  358. package/dist/mcp/index.d.ts +12 -0
  359. package/dist/mcp/index.js +11 -0
  360. package/dist/mcp/resources.d.ts +14 -0
  361. package/dist/mcp/resources.js +55 -0
  362. package/dist/mcp/response-utils.d.ts +63 -0
  363. package/dist/mcp/response-utils.js +89 -0
  364. package/dist/mcp/server.d.ts +4 -0
  365. package/dist/mcp/server.js +99 -0
  366. package/dist/mcp/tools-diagram.d.ts +8 -0
  367. package/dist/mcp/tools-diagram.js +53 -0
  368. package/dist/mcp/tools-editor.d.ts +5 -0
  369. package/dist/mcp/tools-editor.js +190 -0
  370. package/dist/mcp/tools-export.d.ts +9 -0
  371. package/dist/mcp/tools-export.js +180 -0
  372. package/dist/mcp/tools-marketplace.d.ts +9 -0
  373. package/dist/mcp/tools-marketplace.js +132 -0
  374. package/dist/mcp/tools-pattern.d.ts +3 -0
  375. package/dist/mcp/tools-pattern.js +783 -0
  376. package/dist/mcp/tools-query.d.ts +3 -0
  377. package/dist/mcp/tools-query.js +364 -0
  378. package/dist/mcp/tools-template.d.ts +10 -0
  379. package/dist/mcp/tools-template.js +119 -0
  380. package/dist/mcp/types.d.ts +70 -0
  381. package/dist/mcp/types.js +8 -0
  382. package/dist/mcp/workflow-executor.d.ts +47 -0
  383. package/dist/mcp/workflow-executor.js +133 -0
  384. package/dist/migration/registry.d.ts +30 -0
  385. package/dist/migration/registry.js +29 -0
  386. package/dist/node-types-generator.d.ts +49 -0
  387. package/dist/node-types-generator.js +139 -0
  388. package/dist/npm-packages.d.ts +56 -0
  389. package/dist/npm-packages.js +255 -0
  390. package/dist/parser.d.ts +204 -0
  391. package/dist/parser.js +2100 -0
  392. package/dist/plugin/PluginPanel.d.ts +12 -0
  393. package/dist/plugin/PluginPanel.js +5 -0
  394. package/dist/plugin/index.d.ts +13 -0
  395. package/dist/plugin/index.js +14 -0
  396. package/dist/plugin/types.d.ts +75 -0
  397. package/dist/plugin/types.js +8 -0
  398. package/dist/resolve-package-types.d.ts +17 -0
  399. package/dist/resolve-package-types.js +123 -0
  400. package/dist/runtime/CancellationError.d.ts +11 -0
  401. package/dist/runtime/CancellationError.js +20 -0
  402. package/dist/runtime/ExecutionContext.d.ts +146 -0
  403. package/dist/runtime/ExecutionContext.js +235 -0
  404. package/dist/runtime/builtin-functions.d.ts +8 -0
  405. package/dist/runtime/builtin-functions.js +549 -0
  406. package/dist/runtime/events.d.ts +50 -0
  407. package/dist/runtime/events.js +2 -0
  408. package/dist/runtime/function-registry.d.ts +59 -0
  409. package/dist/runtime/function-registry.js +66 -0
  410. package/dist/runtime/index.d.ts +7 -0
  411. package/dist/runtime/index.js +7 -0
  412. package/dist/runtime/parameter-resolver.d.ts +62 -0
  413. package/dist/runtime/parameter-resolver.js +113 -0
  414. package/dist/server/index.d.ts +7 -0
  415. package/dist/server/index.js +6 -0
  416. package/dist/server/types.d.ts +93 -0
  417. package/dist/server/types.js +5 -0
  418. package/dist/server/webhook-server.d.ts +50 -0
  419. package/dist/server/webhook-server.js +269 -0
  420. package/dist/server/workflow-registry.d.ts +61 -0
  421. package/dist/server/workflow-registry.js +202 -0
  422. package/dist/shared-project.d.ts +9 -0
  423. package/dist/shared-project.js +28 -0
  424. package/dist/sugar-optimizer.d.ts +40 -0
  425. package/dist/sugar-optimizer.js +387 -0
  426. package/dist/testing/assertions.d.ts +51 -0
  427. package/dist/testing/assertions.js +127 -0
  428. package/dist/testing/index.d.ts +30 -0
  429. package/dist/testing/index.js +24 -0
  430. package/dist/testing/mock-approval.d.ts +81 -0
  431. package/dist/testing/mock-approval.js +98 -0
  432. package/dist/testing/mock-llm.d.ts +124 -0
  433. package/dist/testing/mock-llm.js +119 -0
  434. package/dist/testing/recorder.d.ts +72 -0
  435. package/dist/testing/recorder.js +70 -0
  436. package/dist/testing/replayer.d.ts +56 -0
  437. package/dist/testing/replayer.js +143 -0
  438. package/dist/testing/token-tracker.d.ts +71 -0
  439. package/dist/testing/token-tracker.js +94 -0
  440. package/dist/type-checker.d.ts +42 -0
  441. package/dist/type-checker.js +190 -0
  442. package/dist/type-mappings.d.ts +29 -0
  443. package/dist/type-mappings.js +125 -0
  444. package/dist/types/branded-ports.d.ts +151 -0
  445. package/dist/types/branded-ports.js +121 -0
  446. package/dist/types/index.d.ts +5 -0
  447. package/dist/types/index.js +5 -0
  448. package/dist/types.d.ts +139 -0
  449. package/dist/types.js +15 -0
  450. package/dist/utils/error-utils.d.ts +15 -0
  451. package/dist/utils/error-utils.js +27 -0
  452. package/dist/utils/lru-cache.d.ts +15 -0
  453. package/dist/utils/lru-cache.js +40 -0
  454. package/dist/utils/port-ordering.d.ts +26 -0
  455. package/dist/utils/port-ordering.js +88 -0
  456. package/dist/utils/port-tag-utils.d.ts +23 -0
  457. package/dist/utils/port-tag-utils.js +41 -0
  458. package/dist/utils/string-distance.d.ts +14 -0
  459. package/dist/utils/string-distance.js +56 -0
  460. package/dist/validation/agent-detection.d.ts +33 -0
  461. package/dist/validation/agent-detection.js +115 -0
  462. package/dist/validation/agent-rules.d.ts +48 -0
  463. package/dist/validation/agent-rules.js +262 -0
  464. package/dist/validator.d.ts +92 -0
  465. package/dist/validator.js +970 -0
  466. package/package.json +109 -0
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerQueryTools(mcp: McpServer): void;
3
+ //# sourceMappingURL=tools-query.d.ts.map
@@ -0,0 +1,364 @@
1
+ import { z } from 'zod';
2
+ import * as path from 'path';
3
+ import { parseWorkflow, validateWorkflow, compileWorkflow } from '../api/index.js';
4
+ import { getNodes, getConnections, getDependencies, getDependents, getDataDependencies, getTopologicalOrder, findIsolatedNodes, findDeadEndDetails, findDisconnectedOutputPorts, } from '../api/query.js';
5
+ import { describeWorkflow, formatDescribeOutput } from '../cli/commands/describe.js';
6
+ import { runDoctorChecks } from '../cli/commands/doctor.js';
7
+ import { WorkflowDiffer } from '../diff/WorkflowDiffer.js';
8
+ import { formatDiff } from '../diff/formatDiff.js';
9
+ import { makeToolResult, makeErrorResult, addHintsToItems } from './response-utils.js';
10
+ import { getFriendlyError } from '../friendly-errors.js';
11
+ import { generateInngestFunction } from '../generator/inngest.js';
12
+ import { AnnotationParser } from '../parser.js';
13
+ /** Detect MULTIPLE_WORKFLOWS_FOUND marker in parse errors and return the right error code */
14
+ function parseErrorCode(errors) {
15
+ if (errors.some((e) => e.includes('[MULTIPLE_WORKFLOWS_FOUND]'))) {
16
+ return 'MULTIPLE_WORKFLOWS_FOUND';
17
+ }
18
+ return 'PARSE_ERROR';
19
+ }
20
+ export function registerQueryTools(mcp) {
21
+ mcp.tool('fw_describe', 'Describe a workflow in LLM-friendly format (nodes, connections, graph, validation).', {
22
+ filePath: z.string().describe('Path to the workflow .ts file'),
23
+ format: z
24
+ .enum(['json', 'text', 'mermaid', 'paths'])
25
+ .optional()
26
+ .describe('Output format (default: json)'),
27
+ node: z.string().optional().describe('Focus on a specific node ID'),
28
+ workflowName: z.string().optional().describe('Specific workflow if file has multiple'),
29
+ }, async (args) => {
30
+ try {
31
+ const filePath = path.resolve(args.filePath);
32
+ const parseResult = await parseWorkflow(filePath, { workflowName: args.workflowName });
33
+ // If no workflows found, try node-type-only mode
34
+ if (parseResult.errors.length > 0 &&
35
+ parseResult.errors.some((e) => typeof e === 'string' && e.includes('No workflows found'))) {
36
+ try {
37
+ const ntResult = await parseWorkflow(filePath, { nodeTypesOnly: true });
38
+ if (ntResult.errors.length === 0 && ntResult.ast.nodeTypes?.length > 0) {
39
+ return makeToolResult({
40
+ nodeTypesOnly: true,
41
+ nodeTypes: ntResult.ast.nodeTypes.map((nt) => ({
42
+ name: nt.name,
43
+ inputs: Object.keys(nt.inputs),
44
+ outputs: Object.keys(nt.outputs),
45
+ isExpression: nt.isExpression ?? false,
46
+ })),
47
+ });
48
+ }
49
+ }
50
+ catch {
51
+ /* fall through to original error */
52
+ }
53
+ }
54
+ if (parseResult.errors.length > 0) {
55
+ return makeErrorResult(parseErrorCode(parseResult.errors), `Parse errors:\n${parseResult.errors.join('\n')}`);
56
+ }
57
+ const output = describeWorkflow(parseResult.ast, { node: args.node });
58
+ const format = args.format ?? 'json';
59
+ const formatted = formatDescribeOutput(parseResult.ast, output, format);
60
+ return makeToolResult(format === 'json' ? JSON.parse(formatted) : formatted);
61
+ }
62
+ catch (err) {
63
+ return makeErrorResult('DESCRIBE_ERROR', `fw_describe failed: ${err instanceof Error ? err.message : String(err)}`);
64
+ }
65
+ });
66
+ mcp.tool('fw_validate', 'Validate a workflow file and return errors/warnings.', {
67
+ filePath: z.string().describe('Path to the workflow file'),
68
+ workflowName: z.string().optional().describe('Specific workflow name'),
69
+ }, async (args) => {
70
+ try {
71
+ const filePath = path.resolve(args.filePath);
72
+ const parseResult = await parseWorkflow(filePath, { workflowName: args.workflowName });
73
+ // If no workflows found, try node-type-only mode
74
+ if (parseResult.errors.length > 0 &&
75
+ parseResult.errors.some((e) => typeof e === 'string' && e.includes('No workflows found'))) {
76
+ try {
77
+ const ntResult = await parseWorkflow(filePath, { nodeTypesOnly: true });
78
+ if (ntResult.errors.length === 0 && ntResult.ast.nodeTypes?.length > 0) {
79
+ const count = ntResult.ast.nodeTypes.length;
80
+ return makeToolResult({
81
+ valid: true,
82
+ nodeTypesOnly: true,
83
+ nodeTypeCount: count,
84
+ warnings: [
85
+ {
86
+ message: `No workflow function found (found ${count} node type${count === 1 ? '' : 's'}). Add a /** @flowWeaver workflow */ annotation above an exported function to define a workflow.`,
87
+ severity: 'warning',
88
+ code: 'NO_WORKFLOW_FOUND',
89
+ },
90
+ ],
91
+ });
92
+ }
93
+ }
94
+ catch {
95
+ /* fall through to original error */
96
+ }
97
+ }
98
+ if (parseResult.errors.length > 0) {
99
+ return makeToolResult({
100
+ valid: false,
101
+ errors: parseResult.errors,
102
+ warnings: parseResult.warnings,
103
+ });
104
+ }
105
+ const result = validateWorkflow(parseResult.ast);
106
+ const errors = result.errors.map((e) => ({
107
+ message: e.message,
108
+ severity: e.type,
109
+ nodeId: e.node,
110
+ code: e.code,
111
+ }));
112
+ const warnings = [
113
+ ...parseResult.warnings,
114
+ ...result.warnings.map((w) => ({
115
+ message: w.message,
116
+ severity: w.type,
117
+ nodeId: w.node,
118
+ code: w.code,
119
+ })),
120
+ ];
121
+ return makeToolResult({
122
+ valid: result.valid,
123
+ errors: addHintsToItems(errors, getFriendlyError),
124
+ warnings: addHintsToItems(warnings, getFriendlyError),
125
+ });
126
+ }
127
+ catch (err) {
128
+ return makeErrorResult('VALIDATE_ERROR', `fw_validate failed: ${err instanceof Error ? err.message : String(err)}`);
129
+ }
130
+ });
131
+ mcp.tool('fw_compile', 'Compile a workflow to executable code. Use target=inngest for per-node step.run() durability.', {
132
+ filePath: z.string().describe('Path to the workflow file'),
133
+ write: z.boolean().optional().describe('Whether to write the output file (default: true)'),
134
+ production: z
135
+ .boolean()
136
+ .optional()
137
+ .describe('Production mode — no debug events (default: false)'),
138
+ workflowName: z.string().optional().describe('Specific workflow name'),
139
+ target: z
140
+ .enum(['typescript', 'inngest'])
141
+ .optional()
142
+ .describe('Compilation target: typescript (default) or inngest (per-node step.run)'),
143
+ cron: z.string().optional().describe('Cron schedule expression (e.g. "0 9 * * *"). Overrides @trigger annotation.'),
144
+ serve: z.boolean().optional().describe('Generate serve() handler for HTTP framework integration'),
145
+ framework: z.enum(['next', 'express', 'hono', 'fastify', 'remix']).optional().describe('Framework adapter for serve handler (requires serve=true)'),
146
+ typedEvents: z.boolean().optional().describe('Generate Zod event schemas from workflow @param annotations'),
147
+ retries: z.number().int().min(0).optional().describe('Number of retries per function. Overrides @retries annotation.'),
148
+ timeout: z.string().optional().describe('Function timeout (e.g. "30m", "1h"). Overrides @timeout annotation.'),
149
+ }, async (args) => {
150
+ try {
151
+ const filePath = path.resolve(args.filePath);
152
+ if (args.target === 'inngest') {
153
+ // Use deep Inngest generator
154
+ const parser = new AnnotationParser();
155
+ const parseResult = parser.parse(filePath);
156
+ if (parseResult.errors.length > 0) {
157
+ return makeErrorResult('PARSE_ERROR', `Parse errors:\n${parseResult.errors.join('\n')}`);
158
+ }
159
+ if (parseResult.workflows.length === 0) {
160
+ return makeErrorResult('PARSE_ERROR', 'No workflows found in file');
161
+ }
162
+ const workflow = args.workflowName
163
+ ? parseResult.workflows.find((w) => w.name === args.workflowName || w.functionName === args.workflowName)
164
+ : parseResult.workflows[0];
165
+ if (!workflow) {
166
+ const available = parseResult.workflows.map((w) => w.name).join(', ');
167
+ return makeErrorResult('PARSE_ERROR', `Workflow "${args.workflowName}" not found. Available: ${available}`);
168
+ }
169
+ const allNodeTypes = [...(workflow.nodeTypes || [])];
170
+ // Apply CLI overrides to workflow options
171
+ if (args.cron) {
172
+ workflow.options = workflow.options || {};
173
+ workflow.options.trigger = { ...workflow.options.trigger, cron: args.cron };
174
+ }
175
+ if (args.retries !== undefined) {
176
+ workflow.options = workflow.options || {};
177
+ workflow.options.retries = args.retries;
178
+ }
179
+ if (args.timeout) {
180
+ workflow.options = workflow.options || {};
181
+ workflow.options.timeout = args.timeout;
182
+ }
183
+ const code = generateInngestFunction(workflow, allNodeTypes, {
184
+ production: args.production ?? false,
185
+ typedEvents: args.typedEvents,
186
+ serveHandler: args.serve,
187
+ framework: args.framework,
188
+ });
189
+ const outputFile = filePath.replace(/\.ts$/, '.inngest.ts');
190
+ if (args.write !== false) {
191
+ const fs = await import('fs');
192
+ fs.writeFileSync(outputFile, code, 'utf8');
193
+ }
194
+ return makeToolResult({
195
+ target: 'inngest',
196
+ outputFile,
197
+ workflowName: workflow.name,
198
+ code: args.write === false ? code : undefined,
199
+ });
200
+ }
201
+ const result = await compileWorkflow(filePath, {
202
+ write: args.write ?? true,
203
+ parse: { workflowName: args.workflowName },
204
+ generate: { production: args.production ?? false },
205
+ });
206
+ return makeToolResult({
207
+ outputFile: result.metadata?.outputFile ?? filePath,
208
+ warnings: result.analysis?.warnings ?? [],
209
+ });
210
+ }
211
+ catch (err) {
212
+ return makeErrorResult('COMPILE_ERROR', `fw_compile failed: ${err instanceof Error ? err.message : String(err)}`);
213
+ }
214
+ });
215
+ mcp.tool('fw_diff', 'Semantic diff between two workflow files — node type changes, instance changes, connection changes, breaking changes.', {
216
+ file1: z.string().describe('Path to first workflow file'),
217
+ file2: z.string().describe('Path to second workflow file'),
218
+ format: z
219
+ .enum(['text', 'json', 'compact'])
220
+ .optional()
221
+ .describe('Output format (default: text)'),
222
+ workflowName: z.string().optional().describe('Specific workflow name'),
223
+ }, async (args) => {
224
+ try {
225
+ const [result1, result2] = await Promise.all([
226
+ parseWorkflow(path.resolve(args.file1), { workflowName: args.workflowName }),
227
+ parseWorkflow(path.resolve(args.file2), { workflowName: args.workflowName }),
228
+ ]);
229
+ if (result1.errors.length > 0) {
230
+ return makeErrorResult(parseErrorCode(result1.errors), `Parse errors in file1:\n${result1.errors.join('\n')}`);
231
+ }
232
+ if (result2.errors.length > 0) {
233
+ return makeErrorResult(parseErrorCode(result2.errors), `Parse errors in file2:\n${result2.errors.join('\n')}`);
234
+ }
235
+ const diff = WorkflowDiffer.compare(result1.ast, result2.ast);
236
+ const format = args.format ?? 'text';
237
+ const formatted = formatDiff(diff, format);
238
+ return makeToolResult(format === 'json' ? JSON.parse(formatted) : formatted);
239
+ }
240
+ catch (err) {
241
+ return makeErrorResult('DIFF_ERROR', `fw_diff failed: ${err instanceof Error ? err.message : String(err)}`);
242
+ }
243
+ });
244
+ mcp.tool('fw_query', 'Query workflow structure.\n\nQuery types:\n- nodes: All node instances [{id, nodeType, parent}]\n- connections: All connections [{from, to}] in "node.port" format. Optional: nodeId to filter.\n- deps: Direct upstream dependencies [nodeId[]]. Requires: nodeId\n- dependents: Direct downstream dependents [nodeId[]]. Requires: nodeId\n- data-deps: Data-only upstream dependencies (excludes control flow). Requires: nodeId\n- execution-order: Topological sort of main-flow nodes. Scoped nodes are listed separately.\n- isolated: Nodes with no connections [nodeId[]]\n- dead-ends: Nodes that don\'t reach Exit [nodeId[]]\n- disconnected-outputs: Output ports not connected to anything [{nodeId, ports[]}]\n- node-types: All node type definitions [{name, functionName, inputs[], outputs[]}]', {
245
+ filePath: z.string().describe('Path to the workflow file'),
246
+ query: z
247
+ .enum([
248
+ 'nodes',
249
+ 'connections',
250
+ 'deps',
251
+ 'dependents',
252
+ 'data-deps',
253
+ 'execution-order',
254
+ 'isolated',
255
+ 'dead-ends',
256
+ 'disconnected-outputs',
257
+ 'node-types',
258
+ ])
259
+ .describe('Query type'),
260
+ nodeId: z
261
+ .string()
262
+ .optional()
263
+ .describe('Required for deps/dependents. Optional filter for connections.'),
264
+ workflowName: z.string().optional().describe('Specific workflow name'),
265
+ }, async (args) => {
266
+ try {
267
+ const filePath = path.resolve(args.filePath);
268
+ let parseResult = await parseWorkflow(filePath, { workflowName: args.workflowName });
269
+ // For node-types query, fall back to nodeTypesOnly mode if no workflows found
270
+ if (parseResult.errors.length > 0 &&
271
+ args.query === 'node-types' &&
272
+ parseResult.errors.some((e) => typeof e === 'string' && e.includes('No workflows found'))) {
273
+ try {
274
+ const ntResult = await parseWorkflow(filePath, { nodeTypesOnly: true });
275
+ if (ntResult.errors.length === 0) {
276
+ parseResult = ntResult;
277
+ }
278
+ }
279
+ catch {
280
+ /* fall through to original error */
281
+ }
282
+ }
283
+ if (parseResult.errors.length > 0) {
284
+ return makeErrorResult(parseErrorCode(parseResult.errors), `Parse errors:\n${parseResult.errors.join('\n')}`);
285
+ }
286
+ const ast = parseResult.ast;
287
+ switch (args.query) {
288
+ case 'nodes':
289
+ return makeToolResult(getNodes(ast).map((n) => ({
290
+ id: n.id,
291
+ nodeType: n.nodeType,
292
+ parent: n.parent ?? null,
293
+ })));
294
+ case 'connections':
295
+ return makeToolResult(getConnections(ast, args.nodeId).map((c) => ({
296
+ from: `${c.from.node}.${c.from.port}`,
297
+ to: `${c.to.node}.${c.to.port}`,
298
+ })));
299
+ case 'deps':
300
+ if (!args.nodeId)
301
+ return makeErrorResult('MISSING_PARAM', 'nodeId is required for "deps" query');
302
+ return makeToolResult(getDependencies(ast, args.nodeId));
303
+ case 'dependents':
304
+ if (!args.nodeId)
305
+ return makeErrorResult('MISSING_PARAM', 'nodeId is required for "dependents" query');
306
+ return makeToolResult(getDependents(ast, args.nodeId));
307
+ case 'execution-order':
308
+ try {
309
+ const order = getTopologicalOrder(ast);
310
+ const allNodeIds = ast.instances.map((n) => n.id);
311
+ const scopedNodes = allNodeIds.filter((id) => !order.includes(id));
312
+ return makeToolResult({
313
+ order,
314
+ ...(scopedNodes.length > 0 && {
315
+ scopedNodes,
316
+ note: 'Scoped nodes execute within their parent scope and are excluded from top-level execution order.',
317
+ }),
318
+ });
319
+ }
320
+ catch (cycleErr) {
321
+ return makeErrorResult('CYCLE_DETECTED', cycleErr instanceof Error ? cycleErr.message : String(cycleErr));
322
+ }
323
+ case 'isolated':
324
+ return makeToolResult(findIsolatedNodes(ast));
325
+ case 'data-deps':
326
+ if (!args.nodeId)
327
+ return makeErrorResult('MISSING_PARAM', 'nodeId is required for "data-deps" query');
328
+ return makeToolResult(getDataDependencies(ast, args.nodeId));
329
+ case 'dead-ends':
330
+ return makeToolResult(findDeadEndDetails(ast));
331
+ case 'disconnected-outputs':
332
+ return makeToolResult(findDisconnectedOutputPorts(ast));
333
+ case 'node-types':
334
+ return makeToolResult(ast.nodeTypes.map((nt) => ({
335
+ name: nt.name,
336
+ functionName: nt.functionName,
337
+ inputs: Object.keys(nt.inputs),
338
+ outputs: Object.keys(nt.outputs),
339
+ })));
340
+ default:
341
+ return makeErrorResult('UNKNOWN_QUERY', `Unknown query type: ${args.query}`);
342
+ }
343
+ }
344
+ catch (err) {
345
+ return makeErrorResult('QUERY_ERROR', `fw_query failed: ${err instanceof Error ? err.message : String(err)}`);
346
+ }
347
+ });
348
+ mcp.tool('fw_doctor', 'Check project environment and configuration for flow-weaver compatibility.', {
349
+ directory: z
350
+ .string()
351
+ .optional()
352
+ .describe('Directory to check (default: cwd)'),
353
+ }, async (args) => {
354
+ try {
355
+ const dir = path.resolve(args.directory ?? process.cwd());
356
+ const report = runDoctorChecks(dir);
357
+ return makeToolResult(report);
358
+ }
359
+ catch (err) {
360
+ return makeErrorResult('DOCTOR_ERROR', `fw_doctor failed: ${err instanceof Error ? err.message : String(err)}`);
361
+ }
362
+ });
363
+ }
364
+ //# sourceMappingURL=tools-query.js.map
@@ -0,0 +1,10 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Registers MCP tools for listing and scaffolding workflow/node templates.
4
+ * Registers two tools:
5
+ * - `fw_list_templates` - lists available scaffold templates, optionally filtered by type.
6
+ * - `fw_scaffold` - generates a workflow or node file from a named template.
7
+ * @param mcp - The MCP server instance to register tools on.
8
+ */
9
+ export declare function registerTemplateTools(mcp: McpServer): void;
10
+ //# sourceMappingURL=tools-template.d.ts.map
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import { listWorkflowTemplates, listNodeTemplates, getWorkflowTemplate, getNodeTemplate, generateWorkflowFromTemplate, generateNodeFromTemplate, } from '../api/templates.js';
5
+ import { makeToolResult, makeErrorResult } from './response-utils.js';
6
+ /**
7
+ * Registers MCP tools for listing and scaffolding workflow/node templates.
8
+ * Registers two tools:
9
+ * - `fw_list_templates` - lists available scaffold templates, optionally filtered by type.
10
+ * - `fw_scaffold` - generates a workflow or node file from a named template.
11
+ * @param mcp - The MCP server instance to register tools on.
12
+ */
13
+ export function registerTemplateTools(mcp) {
14
+ mcp.tool('fw_list_templates', 'List available scaffold templates for workflows and nodes.', {
15
+ type: z
16
+ .enum(['workflow', 'node', 'all'])
17
+ .optional()
18
+ .describe('Filter template type (default: all)'),
19
+ }, async (args) => {
20
+ const filterType = args.type ?? 'all';
21
+ const result = [];
22
+ if (filterType === 'workflow' || filterType === 'all') {
23
+ for (const t of listWorkflowTemplates()) {
24
+ result.push({
25
+ id: t.id,
26
+ name: t.name,
27
+ description: t.description,
28
+ type: 'workflow',
29
+ category: t.category,
30
+ });
31
+ }
32
+ }
33
+ if (filterType === 'node' || filterType === 'all') {
34
+ for (const t of listNodeTemplates()) {
35
+ result.push({ id: t.id, name: t.name, description: t.description, type: 'node' });
36
+ }
37
+ }
38
+ return makeToolResult(result);
39
+ });
40
+ mcp.tool('fw_scaffold', 'Create a workflow or node from a template.', {
41
+ template: z.string().describe('Template name (e.g. "sequential", "validator")'),
42
+ filePath: z.string().describe('Output file path'),
43
+ name: z.string().optional().describe('Workflow/node function name'),
44
+ preview: z
45
+ .boolean()
46
+ .optional()
47
+ .describe('Preview only — return generated code without writing (default: false)'),
48
+ config: z
49
+ .record(z.unknown())
50
+ .optional()
51
+ .describe('Template configuration (e.g. { nodes: ["fetch", "parse"], input: "rawData" })'),
52
+ }, async (args) => {
53
+ try {
54
+ const outPath = path.resolve(args.filePath);
55
+ // Try workflow template first
56
+ const wt = getWorkflowTemplate(args.template);
57
+ if (wt) {
58
+ const code = generateWorkflowFromTemplate(args.template, {
59
+ workflowName: args.name ?? 'myWorkflow',
60
+ config: args.config,
61
+ });
62
+ if (args.preview) {
63
+ return makeToolResult({
64
+ success: true,
65
+ preview: true,
66
+ type: 'workflow',
67
+ template: args.template,
68
+ code,
69
+ });
70
+ }
71
+ // Append to file if it exists, otherwise create
72
+ if (fs.existsSync(outPath)) {
73
+ fs.appendFileSync(outPath, '\n\n' + code, 'utf8');
74
+ }
75
+ else {
76
+ fs.writeFileSync(outPath, code, 'utf8');
77
+ }
78
+ return makeToolResult({
79
+ success: true,
80
+ filePath: outPath,
81
+ type: 'workflow',
82
+ template: args.template,
83
+ });
84
+ }
85
+ // Try node template
86
+ const nt = getNodeTemplate(args.template);
87
+ if (nt) {
88
+ const code = generateNodeFromTemplate(args.template, args.name ?? 'myNode', args.config);
89
+ if (args.preview) {
90
+ return makeToolResult({
91
+ success: true,
92
+ preview: true,
93
+ type: 'node',
94
+ template: args.template,
95
+ code,
96
+ });
97
+ }
98
+ // Append to file if it exists, otherwise create
99
+ if (fs.existsSync(outPath)) {
100
+ fs.appendFileSync(outPath, '\n\n' + code, 'utf8');
101
+ }
102
+ else {
103
+ fs.writeFileSync(outPath, code, 'utf8');
104
+ }
105
+ return makeToolResult({
106
+ success: true,
107
+ filePath: outPath,
108
+ type: 'node',
109
+ template: args.template,
110
+ });
111
+ }
112
+ return makeErrorResult('TEMPLATE_NOT_FOUND', `Template "${args.template}" not found. Use fw_list_templates to see available templates.`);
113
+ }
114
+ catch (err) {
115
+ return makeErrorResult('SCAFFOLD_ERROR', `fw_scaffold failed: ${err instanceof Error ? err.message : String(err)}`);
116
+ }
117
+ });
118
+ }
119
+ //# sourceMappingURL=tools-template.js.map
@@ -0,0 +1,70 @@
1
+ import type { io as socketIO } from 'socket.io-client';
2
+ import type { EventBuffer } from './event-buffer.js';
3
+ import type { EditorConnection } from './editor-connection.js';
4
+ /** Options for initializing the MCP server. */
5
+ export interface McpServerOptions {
6
+ /** WebSocket server URL for editor connection. */
7
+ server?: string;
8
+ /** Whether to use stdio transport instead of SSE. */
9
+ stdio?: boolean;
10
+ /** Internal: injected deps for testing */
11
+ _testDeps?: {
12
+ buffer?: EventBuffer;
13
+ connection?: EditorConnection;
14
+ };
15
+ }
16
+ /** Dependencies injected into tool registration functions for CLI interaction and logging. */
17
+ export interface RegistrationDeps {
18
+ /** Execute a shell command and return its stdout and exit code. */
19
+ execCommand: (cmd: string) => Promise<{
20
+ stdout: string;
21
+ exitCode: number;
22
+ }>;
23
+ /** Prompt the user for interactive input. */
24
+ prompt: (question: string) => Promise<string>;
25
+ /** Log a message to the console. */
26
+ log: (msg: string) => void;
27
+ /** Resolve the path to the Flow Weaver CLI executable. */
28
+ resolveCliPath: () => string;
29
+ }
30
+ /** Acknowledgement response returned by the editor after processing a command. */
31
+ export interface AckResponse {
32
+ /** Unique identifier correlating the response to its originating request. */
33
+ requestId: string;
34
+ /** Whether the command executed successfully. */
35
+ success: boolean;
36
+ /** The command result payload, present on success. */
37
+ result?: unknown;
38
+ /** Error message, present on failure. */
39
+ error?: string;
40
+ }
41
+ /** A timestamped event stored in the event buffer. */
42
+ export interface BufferedEvent {
43
+ /** The event name (e.g. "fw:node-added", "mcp:status"). */
44
+ event: string;
45
+ /** The event payload. */
46
+ data: unknown;
47
+ /** ISO 8601 timestamp of when the event was buffered. */
48
+ timestamp: string;
49
+ }
50
+ /** Options for configuring the editor WebSocket connection. */
51
+ export interface EditorConnectionOptions {
52
+ /** Custom socket.io factory, primarily used for injecting mocks in tests. */
53
+ ioFactory?: typeof socketIO;
54
+ /** Timeout in milliseconds for awaiting command acknowledgements. Defaults to 10000. */
55
+ ackTimeout?: number;
56
+ }
57
+ /** Configuration for filtering and deduplicating events in the event buffer. */
58
+ export interface EventFilterConfig {
59
+ /** Event name patterns to include. Empty array means all events are included. Supports trailing `*` for prefix matching. */
60
+ include: string[];
61
+ /** Event name patterns to exclude (applied after include). Supports trailing `*` for prefix matching. */
62
+ exclude: string[];
63
+ /** Collapse duplicate events of the same type within this window in milliseconds. 0 disables deduplication. */
64
+ dedupeWindowMs: number;
65
+ /** Maximum number of events to retain before evicting the oldest. */
66
+ maxBufferSize: number;
67
+ }
68
+ /** Default event filter configuration. Excludes `fw:ack` events, dedupes within 200ms, and retains up to 500 events. */
69
+ export declare const DEFAULT_EVENT_FILTER: EventFilterConfig;
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,8 @@
1
+ /** Default event filter configuration. Excludes `fw:ack` events, dedupes within 200ms, and retains up to 500 events. */
2
+ export const DEFAULT_EVENT_FILTER = {
3
+ include: [],
4
+ exclude: ['fw:ack'],
5
+ dedupeWindowMs: 200,
6
+ maxBufferSize: 500,
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Workflow executor for MCP-side compilation and execution.
3
+ * Copies source to a temp file, compiles all workflows in-place, then dynamically imports and executes.
4
+ */
5
+ import type { FwMockConfig } from '../built-in-nodes/mock-types.js';
6
+ /** A single trace event captured during workflow execution. */
7
+ export interface ExecutionTraceEvent {
8
+ /** The event type (e.g. "NODE_STARTED", "NODE_COMPLETED"). */
9
+ type: string;
10
+ /** Unix timestamp in milliseconds when the event was recorded. */
11
+ timestamp: number;
12
+ /** Additional event data. */
13
+ data?: Record<string, unknown>;
14
+ }
15
+ /** Result returned after executing a workflow from a file. */
16
+ export interface ExecuteWorkflowResult {
17
+ /** The return value of the executed workflow function. */
18
+ result: unknown;
19
+ /** The name of the exported function that was executed. */
20
+ functionName: string;
21
+ /** Wall-clock execution time in milliseconds. */
22
+ executionTime: number;
23
+ /** Execution trace events, included when `includeTrace` is enabled. */
24
+ trace?: ExecutionTraceEvent[];
25
+ }
26
+ /**
27
+ * Compiles and executes a workflow from a TypeScript source file.
28
+ * Copies the source to a temp file, compiles all workflows in-place (preserving sibling
29
+ * functions for workflow composition), injects a trace-capturing debugger, and dynamically
30
+ * imports and runs the target workflow function.
31
+ * @param filePath - Path to the workflow `.ts` source file.
32
+ * @param params - Parameters to pass to the workflow function.
33
+ * @param options - Execution options.
34
+ * @param options.workflowName - Name of a specific exported workflow function to execute.
35
+ * If omitted, the first exported function is used.
36
+ * @param options.production - Enable production mode (no debug events). Defaults to `!includeTrace`.
37
+ * @param options.includeTrace - Whether to capture and return execution trace events. Defaults to `true`.
38
+ * @returns The workflow result, function name, execution time, and optional trace.
39
+ * @throws If no exported workflow function is found in the compiled module.
40
+ */
41
+ export declare function executeWorkflowFromFile(filePath: string, params?: Record<string, unknown>, options?: {
42
+ workflowName?: string;
43
+ production?: boolean;
44
+ includeTrace?: boolean;
45
+ mocks?: FwMockConfig;
46
+ }): Promise<ExecuteWorkflowResult>;
47
+ //# sourceMappingURL=workflow-executor.d.ts.map