@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,89 @@
1
+ /**
2
+ * Wraps a data payload into a successful MCP tool result with JSON text content.
3
+ * @param data - The result data to include in the response.
4
+ * @returns An MCP tool result object with `success: true` and the serialized data.
5
+ */
6
+ export function makeToolResult(data) {
7
+ return {
8
+ content: [{ type: 'text', text: JSON.stringify({ success: true, data }, null, 2) }],
9
+ };
10
+ }
11
+ /**
12
+ * Wraps an error code and message into a failed MCP tool result.
13
+ * @param code - A machine-readable error code (e.g. "UNKNOWN_NODE_TYPE").
14
+ * @param message - A human-readable error description.
15
+ * @returns An MCP tool result object with `success: false`, `isError: true`, and the serialized error.
16
+ */
17
+ export function makeErrorResult(code, message) {
18
+ return {
19
+ content: [
20
+ {
21
+ type: 'text',
22
+ text: JSON.stringify({ success: false, error: { code, message } }, null, 2),
23
+ },
24
+ ],
25
+ isError: true,
26
+ };
27
+ }
28
+ /**
29
+ * Maps validation error codes to suggested next MCP tool actions.
30
+ * Used to guide LLM agents toward resolving workflow issues.
31
+ */
32
+ export const ERROR_HINTS = {
33
+ UNKNOWN_NODE_TYPE: 'Run fw_query(query="node-types") to see available types',
34
+ UNKNOWN_SOURCE_NODE: 'Run fw_query(query="nodes") to see all node instances',
35
+ UNKNOWN_TARGET_NODE: 'Run fw_query(query="nodes") to see all node instances',
36
+ UNKNOWN_SOURCE_PORT: 'Run fw_describe(node="<nodeId>") to see available ports. Use fw_modify(operation="addConnection") to safely wire ports.',
37
+ UNKNOWN_TARGET_PORT: 'Run fw_describe(node="<nodeId>") to see available ports. Use fw_modify(operation="addConnection") to safely wire ports.',
38
+ MISSING_REQUIRED_INPUT: 'Add a @connect to this port, or make it optional with @input portName [optional]',
39
+ CYCLE_DETECTED: 'Use a scoped forEach node instead of graph loops. See flow-weaver:flow-weaver-export-interface',
40
+ STEP_PORT_TYPE_MISMATCH: 'STEP ports (execute, onSuccess, onFailure) can only connect to other STEP ports',
41
+ MULTIPLE_CONNECTIONS_TO_INPUT: 'Data inputs accept only one connection. Use a merge node or separate ports',
42
+ UNUSED_NODE: 'Connect this node or remove it with fw_modify(operation="removeNode")',
43
+ NO_START_CONNECTIONS: 'Add @connect Start.portName -> node.port, or use fw_modify(operation="addConnection") to wire it.',
44
+ NO_EXIT_CONNECTIONS: 'Add @connect node.port -> Exit.portName, or use fw_modify(operation="addConnection") to wire it.',
45
+ UNREACHABLE_EXIT_PORT: 'Use fw_modify(operation="addConnection") to connect a node output to this Exit port.',
46
+ RESERVED_NODE_NAME: 'Rename the node type — "Start" and "Exit" are reserved',
47
+ RESERVED_INSTANCE_ID: 'Rename the instance — "Start" and "Exit" are reserved IDs',
48
+ MULTIPLE_WORKFLOWS_FOUND: 'Specify workflowName parameter to select which workflow to use',
49
+ DUPLICATE_NODE_NAME: 'Rename one of the duplicate node type functions to be unique',
50
+ UNDEFINED_NODE: 'Add a @node annotation for the referenced instance, or fix the connection',
51
+ INVALID_EXIT_PORT_TYPE: 'Ensure Exit onSuccess/onFailure ports are STEP type (auto-generated)',
52
+ // Agent-specific rules
53
+ AGENT_LLM_MISSING_ERROR_HANDLER: 'Use fw_modify(operation="addConnection", params={from:"<nodeId>.onFailure", to:"Exit.onFailure"}) or add a retry/fallback node',
54
+ AGENT_UNGUARDED_TOOL_EXECUTOR: 'Add a human-approval node before the tool executor. Use fw_scaffold(template="human-approval") to create one',
55
+ AGENT_MISSING_MEMORY_IN_LOOP: 'Add a conversation-memory node inside the loop scope. Use fw_scaffold(template="conversation-memory") to create one',
56
+ AGENT_LLM_NO_FALLBACK: 'Add a retry or fallback node between the LLM onFailure and Exit. Consider a second LLM provider as fallback',
57
+ AGENT_TOOL_NO_OUTPUT_HANDLING: 'Use fw_modify(operation="addConnection") to wire tool output ports to downstream nodes',
58
+ };
59
+ /**
60
+ * Enriches validation items with actionable hints from {@link ERROR_HINTS} and optional
61
+ * friendly error explanations. Replaces `<nodeId>` placeholders in hints with actual node IDs.
62
+ * @param items - Array of validation errors/warnings, each with a message, severity, and optional code.
63
+ * @param friendlyErrorFn - Optional function that produces user-friendly error explanations.
64
+ * @returns A new array with `hint` and `friendly` fields added where applicable.
65
+ */
66
+ export function addHintsToItems(items, friendlyErrorFn) {
67
+ return items.map((item) => {
68
+ if (!item.code)
69
+ return item;
70
+ const result = { ...item };
71
+ // Add MCP tool hint
72
+ let hint = ERROR_HINTS[item.code];
73
+ if (hint) {
74
+ if (item.nodeId && hint.includes('<nodeId>')) {
75
+ hint = hint.replace(/<nodeId>/g, item.nodeId);
76
+ }
77
+ result.hint = hint;
78
+ }
79
+ // Add friendly error explanation
80
+ if (friendlyErrorFn) {
81
+ const friendly = friendlyErrorFn({ code: item.code, message: item.message, node: item.nodeId });
82
+ if (friendly) {
83
+ result.friendly = { title: friendly.title, explanation: friendly.explanation, fix: friendly.fix };
84
+ }
85
+ }
86
+ return result;
87
+ });
88
+ }
89
+ //# sourceMappingURL=response-utils.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServerOptions } from './types.js';
2
+ export declare function startMcpServer(options: McpServerOptions): Promise<void>;
3
+ export declare function mcpServerCommand(options: McpServerOptions): Promise<void>;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1,99 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { DEFAULT_SERVER_URL } from '../defaults.js';
4
+ import { EventBuffer } from './event-buffer.js';
5
+ import { EditorConnection } from './editor-connection.js';
6
+ import { offerClaudeRegistration } from './auto-registration.js';
7
+ import { registerEditorTools } from './tools-editor.js';
8
+ import { registerQueryTools } from './tools-query.js';
9
+ import { registerTemplateTools } from './tools-template.js';
10
+ import { registerPatternTools } from './tools-pattern.js';
11
+ import { registerExportTools } from './tools-export.js';
12
+ import { registerMarketplaceTools } from './tools-marketplace.js';
13
+ import { registerDiagramTools } from './tools-diagram.js';
14
+ import { registerResources } from './resources.js';
15
+ function parseEventFilterFromEnv() {
16
+ const filter = {};
17
+ const include = process.env.FW_EVENT_INCLUDE;
18
+ if (include) {
19
+ filter.include = include
20
+ .split(',')
21
+ .map((s) => s.trim())
22
+ .filter(Boolean);
23
+ }
24
+ const exclude = process.env.FW_EVENT_EXCLUDE;
25
+ if (exclude) {
26
+ filter.exclude = exclude
27
+ .split(',')
28
+ .map((s) => s.trim())
29
+ .filter(Boolean);
30
+ }
31
+ const dedupeMs = process.env.FW_EVENT_DEDUPE_MS;
32
+ if (dedupeMs) {
33
+ const parsed = parseInt(dedupeMs, 10);
34
+ if (!isNaN(parsed))
35
+ filter.dedupeWindowMs = parsed;
36
+ }
37
+ const maxBuf = process.env.FW_EVENT_MAX;
38
+ if (maxBuf) {
39
+ const parsed = parseInt(maxBuf, 10);
40
+ if (!isNaN(parsed))
41
+ filter.maxBufferSize = parsed;
42
+ }
43
+ return filter;
44
+ }
45
+ export async function startMcpServer(options) {
46
+ const serverUrl = options.server || DEFAULT_SERVER_URL;
47
+ // Parse event filter config from environment variables
48
+ const filterFromEnv = parseEventFilterFromEnv();
49
+ // Use injected deps for testing, or create real ones
50
+ const buffer = options._testDeps?.buffer ?? new EventBuffer(undefined, undefined, filterFromEnv);
51
+ const connection = options._testDeps?.connection ?? new EditorConnection(serverUrl, buffer);
52
+ // Connect to editor (non-blocking)
53
+ if (!options._testDeps) {
54
+ const log = options.stdio
55
+ ? (msg) => process.stderr.write(msg + '\n')
56
+ : // eslint-disable-next-line no-console
57
+ (msg) => console.log(msg);
58
+ connection.connect(log);
59
+ }
60
+ // Create MCP server
61
+ const mcp = new McpServer({
62
+ name: 'flow-weaver',
63
+ version: '1.0.0',
64
+ });
65
+ // Register all tools and resources
66
+ registerEditorTools(mcp, connection, buffer);
67
+ registerQueryTools(mcp);
68
+ registerTemplateTools(mcp);
69
+ registerPatternTools(mcp);
70
+ registerExportTools(mcp);
71
+ registerMarketplaceTools(mcp);
72
+ registerDiagramTools(mcp);
73
+ registerResources(mcp, connection, buffer);
74
+ // Connect transport (only in stdio MCP mode)
75
+ if (!options._testDeps && options.stdio) {
76
+ const transport = new StdioServerTransport();
77
+ await mcp.connect(transport);
78
+ }
79
+ }
80
+ export async function mcpServerCommand(options) {
81
+ const serverUrl = options.server || DEFAULT_SERVER_URL;
82
+ // In stdio mode, stdout is reserved for JSON-RPC — log to stderr.
83
+ // In interactive mode, log to stdout (write + flush to survive SIGTERM).
84
+ const log = options.stdio
85
+ ? (msg) => process.stderr.write(msg + '\n')
86
+ : (msg) => process.stdout.write(msg + '\n');
87
+ if (!options.stdio) {
88
+ // Interactive mode — offer registration first
89
+ await offerClaudeRegistration(options);
90
+ log(`Starting MCP server (editor: ${serverUrl})...`);
91
+ }
92
+ await startMcpServer(options);
93
+ if (!options.stdio) {
94
+ log('MCP server running. Waiting for connections...');
95
+ }
96
+ // Keep alive
97
+ await new Promise(() => { });
98
+ }
99
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Diagram Tool - fw_diagram
3
+ *
4
+ * Generates SVG diagrams from workflow files.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ export declare function registerDiagramTools(mcp: McpServer): void;
8
+ //# sourceMappingURL=tools-diagram.d.ts.map
@@ -0,0 +1,53 @@
1
+ /**
2
+ * MCP Diagram Tool - fw_diagram
3
+ *
4
+ * Generates SVG diagrams from workflow files.
5
+ */
6
+ import { z } from 'zod';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { fileToSVG } from '../diagram/index.js';
10
+ import { makeToolResult, makeErrorResult } from './response-utils.js';
11
+ export function registerDiagramTools(mcp) {
12
+ mcp.tool('fw_diagram', 'Generate an SVG diagram of a workflow. Returns SVG string or writes to a file.', {
13
+ filePath: z.string().describe('Path to the workflow .ts file'),
14
+ outputPath: z
15
+ .string()
16
+ .optional()
17
+ .describe('Output file path for the SVG. If omitted, returns SVG as text.'),
18
+ workflowName: z
19
+ .string()
20
+ .optional()
21
+ .describe('Specific workflow name if file has multiple'),
22
+ theme: z
23
+ .enum(['dark', 'light'])
24
+ .optional()
25
+ .describe('Color theme (default: dark)'),
26
+ showPortLabels: z
27
+ .boolean()
28
+ .optional()
29
+ .describe('Show port labels on diagram (default: true)'),
30
+ }, async (args) => {
31
+ try {
32
+ const resolvedPath = path.resolve(args.filePath);
33
+ if (!fs.existsSync(resolvedPath)) {
34
+ return makeErrorResult('FILE_NOT_FOUND', `File not found: ${resolvedPath}`);
35
+ }
36
+ const svg = fileToSVG(resolvedPath, {
37
+ workflowName: args.workflowName,
38
+ theme: args.theme,
39
+ showPortLabels: args.showPortLabels,
40
+ });
41
+ if (args.outputPath) {
42
+ const outputResolved = path.resolve(args.outputPath);
43
+ fs.writeFileSync(outputResolved, svg, 'utf-8');
44
+ return makeToolResult({ written: outputResolved, size: svg.length });
45
+ }
46
+ return makeToolResult(svg);
47
+ }
48
+ catch (error) {
49
+ return makeErrorResult('DIAGRAM_ERROR', `Diagram generation failed: ${error instanceof Error ? error.message : String(error)}`);
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=tools-diagram.js.map
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { EditorConnection } from './editor-connection.js';
3
+ import type { EventBuffer } from './event-buffer.js';
4
+ export declare function registerEditorTools(mcp: McpServer, connection: EditorConnection, buffer: EventBuffer): void;
5
+ //# sourceMappingURL=tools-editor.d.ts.map
@@ -0,0 +1,190 @@
1
+ import { z } from 'zod';
2
+ import { makeToolResult, makeErrorResult } from './response-utils.js';
3
+ import { executeWorkflowFromFile } from './workflow-executor.js';
4
+ /**
5
+ * Unwrap editor ack responses to flatten double-nested results.
6
+ * Editor returns { requestId, success, result: { actualData } } —
7
+ * we extract the `result` field to avoid double-nesting in MCP output.
8
+ */
9
+ function unwrapAckResult(ack) {
10
+ if (ack && typeof ack === 'object' && 'result' in ack && ack.result !== undefined) {
11
+ return ack.result;
12
+ }
13
+ return ack;
14
+ }
15
+ export function registerEditorTools(mcp, connection, buffer) {
16
+ mcp.tool('fw_check_events', 'Get buffered editor events. Returns and clears the event buffer unless peek=true.', { peek: z.boolean().optional().describe('If true, read events without clearing the buffer') }, async (args) => {
17
+ const events = args.peek ? buffer.peek() : buffer.drain();
18
+ return makeToolResult(events);
19
+ });
20
+ mcp.tool('fw_get_state', 'Get the current editor/workflow state from Flow Weaver.', {}, async () => {
21
+ if (!connection.isConnected) {
22
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
23
+ }
24
+ const result = await connection.sendCommand('get-state', {});
25
+ return makeToolResult(unwrapAckResult(result));
26
+ });
27
+ mcp.tool('fw_focus_node', 'Select and center a node in the Flow Weaver editor.', { nodeId: z.string().describe('The ID of the node to focus') }, async (args) => {
28
+ if (!connection.isConnected) {
29
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
30
+ }
31
+ const result = await connection.sendCommand('focus-node', { nodeId: args.nodeId });
32
+ return makeToolResult(unwrapAckResult(result));
33
+ });
34
+ mcp.tool('fw_add_node', 'Add a new node to the workflow in the Flow Weaver editor.', {
35
+ nodeTypeName: z.string().describe('The name of the node type to add'),
36
+ nodeTypeDefinition: z
37
+ .record(z.unknown())
38
+ .optional()
39
+ .describe('Optional node type definition object'),
40
+ }, async (args) => {
41
+ if (!connection.isConnected) {
42
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
43
+ }
44
+ const params = { nodeTypeName: args.nodeTypeName };
45
+ if (args.nodeTypeDefinition) {
46
+ params.nodeTypeDefinition = args.nodeTypeDefinition;
47
+ }
48
+ const result = await connection.sendCommand('add-node', params);
49
+ return makeToolResult(unwrapAckResult(result));
50
+ });
51
+ mcp.tool('fw_open_workflow', 'Open a workflow file in the Flow Weaver editor.', { filePath: z.string().describe('The path to the workflow file to open') }, async (args) => {
52
+ if (!connection.isConnected) {
53
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
54
+ }
55
+ const result = await connection.sendCommand('open-workflow', { filePath: args.filePath });
56
+ return makeToolResult(unwrapAckResult(result));
57
+ });
58
+ mcp.tool('fw_send_command', 'Send a generic command to the Flow Weaver editor.', {
59
+ action: z.string().describe('The command action name'),
60
+ params: z.record(z.unknown()).optional().describe('Optional parameters for the command'),
61
+ }, async (args) => {
62
+ if (!connection.isConnected) {
63
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
64
+ }
65
+ const result = await connection.sendCommand(args.action, args.params ?? {});
66
+ return makeToolResult(unwrapAckResult(result));
67
+ });
68
+ mcp.tool('fw_batch', 'Execute a batch of commands with auto-snapshot rollback support.', {
69
+ commands: z
70
+ .array(z.object({
71
+ action: z.string(),
72
+ params: z.record(z.unknown()).optional(),
73
+ }))
74
+ .describe('Array of commands to execute as a batch'),
75
+ }, async (args) => {
76
+ if (!connection.isConnected) {
77
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
78
+ }
79
+ const result = await connection.sendBatch(args.commands);
80
+ return makeToolResult(unwrapAckResult(result));
81
+ });
82
+ // --- New tools ---
83
+ mcp.tool('fw_remove_node', 'Remove a node and its connections from the workflow.', { nodeName: z.string().describe('The name/ID of the node to remove') }, async (args) => {
84
+ if (!connection.isConnected) {
85
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
86
+ }
87
+ const result = await connection.sendCommand('remove-node', { nodeName: args.nodeName });
88
+ return makeToolResult(unwrapAckResult(result));
89
+ });
90
+ mcp.tool('fw_connect', 'Add or remove a connection between ports.', {
91
+ action: z.enum(['add', 'remove']).describe('Whether to add or remove the connection'),
92
+ connection: z
93
+ .object({
94
+ sourceNode: z.string().describe('Source node ID'),
95
+ sourcePort: z.string().describe('Source port name'),
96
+ targetNode: z.string().describe('Target node ID'),
97
+ targetPort: z.string().describe('Target port name'),
98
+ })
99
+ .describe('Connection specification'),
100
+ }, async (args) => {
101
+ if (!connection.isConnected) {
102
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
103
+ }
104
+ const bridgeAction = args.action === 'add' ? 'add-connection' : 'remove-connection';
105
+ const result = await connection.sendCommand(bridgeAction, {
106
+ connection: args.connection,
107
+ });
108
+ return makeToolResult(unwrapAckResult(result));
109
+ });
110
+ mcp.tool('fw_undo_redo', 'Undo or redo the last workflow change.', { action: z.enum(['undo', 'redo']).describe('Whether to undo or redo') }, async (args) => {
111
+ if (!connection.isConnected) {
112
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
113
+ }
114
+ const result = await connection.sendCommand(args.action, {});
115
+ return makeToolResult(unwrapAckResult(result));
116
+ });
117
+ mcp.tool('fw_execute_workflow', 'Run the current workflow with optional parameters and return the result.', {
118
+ filePath: z
119
+ .string()
120
+ .optional()
121
+ .describe('Path to workflow file. When provided, compiles and executes directly (no editor needed)'),
122
+ workflowName: z
123
+ .string()
124
+ .optional()
125
+ .describe('Specific workflow function name (for multi-workflow files)'),
126
+ params: z.record(z.unknown()).optional().describe('Optional execution parameters'),
127
+ includeTrace: z
128
+ .boolean()
129
+ .optional()
130
+ .describe('Include execution trace events (default: true)'),
131
+ }, async (args) => {
132
+ // When filePath is provided, compile and execute directly (no editor needed)
133
+ if (args.filePath) {
134
+ try {
135
+ const execResult = await executeWorkflowFromFile(args.filePath, args.params, {
136
+ workflowName: args.workflowName,
137
+ includeTrace: args.includeTrace,
138
+ });
139
+ return makeToolResult(execResult);
140
+ }
141
+ catch (err) {
142
+ const message = err instanceof Error ? err.message : String(err);
143
+ // Distinguish compile errors from execution errors
144
+ const code = message.includes('Parse errors') ? 'COMPILE_ERROR' : 'EXECUTION_ERROR';
145
+ return makeErrorResult(code, message);
146
+ }
147
+ }
148
+ // No filePath: delegate to editor via Socket.io (existing behavior)
149
+ if (!connection.isConnected) {
150
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
151
+ }
152
+ const result = await connection.sendCommand('execute-workflow', args.params ?? {});
153
+ return makeToolResult(unwrapAckResult(result));
154
+ });
155
+ mcp.tool('fw_get_workflow_details', 'Get full workflow structure including nodes, connections, types, and positions.', {}, async () => {
156
+ if (!connection.isConnected) {
157
+ return makeErrorResult('EDITOR_NOT_CONNECTED', 'Not connected to the editor. Is the editor running?');
158
+ }
159
+ const result = await connection.sendCommand('get-workflow-details', {});
160
+ return makeToolResult(unwrapAckResult(result));
161
+ });
162
+ mcp.tool('fw_configure_events', 'Configure event include/exclude filters, dedup window, and buffer size. Returns the active config after applying updates.', {
163
+ include: z
164
+ .array(z.string())
165
+ .optional()
166
+ .describe('Event patterns to include (empty = all). Supports trailing * for prefix match'),
167
+ exclude: z
168
+ .array(z.string())
169
+ .optional()
170
+ .describe('Event patterns to exclude (applied after include)'),
171
+ dedupeWindowMs: z
172
+ .number()
173
+ .optional()
174
+ .describe('Collapse same-type events within this window in ms (0 = disabled)'),
175
+ maxBufferSize: z.number().optional().describe('Max events before oldest are evicted'),
176
+ }, async (args) => {
177
+ const partial = {};
178
+ if (args.include !== undefined)
179
+ partial.include = args.include;
180
+ if (args.exclude !== undefined)
181
+ partial.exclude = args.exclude;
182
+ if (args.dedupeWindowMs !== undefined)
183
+ partial.dedupeWindowMs = args.dedupeWindowMs;
184
+ if (args.maxBufferSize !== undefined)
185
+ partial.maxBufferSize = args.maxBufferSize;
186
+ const config = buffer.setFilter(partial);
187
+ return makeToolResult(config);
188
+ });
189
+ }
190
+ //# sourceMappingURL=tools-editor.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Export Tool - fw_export
3
+ *
4
+ * Allows Claude Code to export workflows as serverless deployments
5
+ * without the GUI. Generates handler code, platform config, and deploy instructions.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ export declare function registerExportTools(mcp: McpServer): void;
9
+ //# sourceMappingURL=tools-export.d.ts.map
@@ -0,0 +1,180 @@
1
+ /**
2
+ * MCP Export Tool - fw_export
3
+ *
4
+ * Allows Claude Code to export workflows as serverless deployments
5
+ * without the GUI. Generates handler code, platform config, and deploy instructions.
6
+ */
7
+ import { z } from 'zod';
8
+ import * as path from 'path';
9
+ import * as fs from 'fs';
10
+ import { parseWorkflow } from '../api/index.js';
11
+ import { createTargetRegistry } from '../deployment/index.js';
12
+ import { makeToolResult, makeErrorResult } from './response-utils.js';
13
+ export function registerExportTools(mcp) {
14
+ mcp.tool('fw_export', 'Export workflows as serverless deployments. Generates handler code, platform config, and deploy instructions.', {
15
+ filePath: z.string().describe('Path to the workflow .ts file'),
16
+ target: z
17
+ .enum(['lambda', 'vercel', 'cloudflare', 'inngest'])
18
+ .describe('Deployment target platform'),
19
+ outputDir: z.string().describe('Output directory for generated files'),
20
+ serviceName: z
21
+ .string()
22
+ .optional()
23
+ .describe('Service name (default: derived from filename)'),
24
+ workflows: z
25
+ .array(z.string())
26
+ .optional()
27
+ .describe('Specific workflow function names to include (default: all)'),
28
+ nodeTypes: z
29
+ .array(z.string())
30
+ .optional()
31
+ .describe('Specific node type names to include'),
32
+ includeDocs: z
33
+ .boolean()
34
+ .optional()
35
+ .describe('Include OpenAPI/Swagger routes (default: true)'),
36
+ preview: z
37
+ .boolean()
38
+ .optional()
39
+ .describe('Preview without writing files to disk (default: false)'),
40
+ durableSteps: z
41
+ .boolean()
42
+ .optional()
43
+ .describe('Use deep generator with per-node Inngest steps for durability (inngest target only)'),
44
+ }, async (args) => {
45
+ try {
46
+ const filePath = path.resolve(args.filePath);
47
+ const outputDir = path.resolve(args.outputDir);
48
+ const preview = args.preview ?? false;
49
+ const includeDocs = args.includeDocs ?? true;
50
+ // 1. Validate file exists
51
+ try {
52
+ await fs.promises.access(filePath);
53
+ }
54
+ catch {
55
+ return makeErrorResult('FILE_NOT_FOUND', `File not found: ${filePath}`);
56
+ }
57
+ // 2. Parse the file to discover workflows and node types
58
+ let parseResult;
59
+ try {
60
+ parseResult = await parseWorkflow(filePath, { nodeTypesOnly: false });
61
+ }
62
+ catch (err) {
63
+ return makeErrorResult('PARSE_ERROR', `Failed to parse ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
64
+ }
65
+ if (parseResult.errors.length > 0) {
66
+ // Try node-types-only parse
67
+ try {
68
+ const ntResult = await parseWorkflow(filePath, { nodeTypesOnly: true });
69
+ if (ntResult.errors.length === 0) {
70
+ parseResult = ntResult;
71
+ }
72
+ }
73
+ catch {
74
+ // Use original errors
75
+ }
76
+ if (parseResult.errors.length > 0) {
77
+ return makeErrorResult('PARSE_ERROR', `Parse errors in ${filePath}: ${parseResult.errors.join('; ')}`);
78
+ }
79
+ }
80
+ // 3. Get the export target
81
+ const registry = createTargetRegistry();
82
+ const exportTarget = registry.get(args.target);
83
+ if (!exportTarget) {
84
+ return makeErrorResult('INVALID_TARGET', `Unknown target: ${args.target}. Supported: lambda, vercel, cloudflare, inngest`);
85
+ }
86
+ if (!exportTarget.generateBundle) {
87
+ return makeErrorResult('INVALID_TARGET', `Target ${args.target} does not support bundle export`);
88
+ }
89
+ // 4. Build workflow and node type lists
90
+ // parseResult.allWorkflows has all TWorkflowAST[] from the file;
91
+ // each workflow's nodeTypes are in workflow.nodeTypes (TNodeTypeAST[])
92
+ const allWorkflows = parseResult.allWorkflows || [];
93
+ const allNodeTypes = allWorkflows.flatMap((w) => w.nodeTypes || []);
94
+ // Deduplicate node types by name (same type may appear in multiple workflows)
95
+ const uniqueNodeTypes = [
96
+ ...new Map(allNodeTypes.map((nt) => [nt.name, nt])).values(),
97
+ ];
98
+ const serviceName = args.serviceName || path.basename(filePath, '.ts').replace(/[^a-zA-Z0-9-]/g, '-');
99
+ // Filter to requested items
100
+ const bundleWorkflows = allWorkflows
101
+ .filter((w) => (args.workflows ? args.workflows.includes(w.name) : true))
102
+ .map((w) => ({
103
+ name: w.name,
104
+ functionName: w.functionName,
105
+ description: w.description,
106
+ expose: true,
107
+ }));
108
+ const bundleNodeTypes = uniqueNodeTypes
109
+ .filter((nt) => (args.nodeTypes ? args.nodeTypes.includes(nt.name) : false))
110
+ .map((nt) => ({
111
+ name: nt.name,
112
+ functionName: nt.functionName,
113
+ description: undefined,
114
+ inputs: Object.fromEntries(Object.entries(nt.inputs).map(([k, v]) => [
115
+ k,
116
+ { dataType: v.dataType, tsType: v.tsType, label: v.label, optional: v.optional },
117
+ ])),
118
+ outputs: Object.fromEntries(Object.entries(nt.outputs).map(([k, v]) => [
119
+ k,
120
+ { dataType: v.dataType, tsType: v.tsType, label: v.label },
121
+ ])),
122
+ expose: true,
123
+ }));
124
+ if (bundleWorkflows.length === 0 && bundleNodeTypes.length === 0) {
125
+ return makeErrorResult('EXPORT_ERROR', 'No workflows or node types selected for export. ' +
126
+ `Found ${allWorkflows.length} workflows and ${allNodeTypes.length} node types in file.`);
127
+ }
128
+ // 5. Generate the bundle
129
+ const artifacts = await exportTarget.generateBundle(bundleWorkflows, bundleNodeTypes, {
130
+ sourceFile: filePath,
131
+ workflowName: serviceName,
132
+ displayName: serviceName,
133
+ outputDir,
134
+ production: true,
135
+ includeDocs,
136
+ targetOptions: args.durableSteps ? { durableSteps: true } : undefined,
137
+ });
138
+ // 6. Write files if not preview
139
+ if (!preview) {
140
+ await fs.promises.mkdir(outputDir, { recursive: true });
141
+ for (const file of artifacts.files) {
142
+ const fullPath = path.join(outputDir, file.relativePath);
143
+ await fs.promises.mkdir(path.dirname(fullPath), { recursive: true });
144
+ await fs.promises.writeFile(fullPath, file.content, 'utf-8');
145
+ }
146
+ }
147
+ // 7. Get deploy instructions
148
+ const instructions = exportTarget.getDeployInstructions(artifacts);
149
+ // 8. Return result
150
+ return makeToolResult({
151
+ preview,
152
+ target: args.target,
153
+ serviceName,
154
+ outputDir,
155
+ files: artifacts.files.map((f) => ({
156
+ path: f.relativePath,
157
+ type: f.type,
158
+ size: f.content.length,
159
+ })),
160
+ endpoints: bundleWorkflows.map((w) => ({
161
+ method: 'POST',
162
+ path: `/workflows/${w.functionName}`,
163
+ name: w.name,
164
+ })),
165
+ instructions: {
166
+ title: instructions.title,
167
+ steps: instructions.steps,
168
+ prerequisites: instructions.prerequisites,
169
+ },
170
+ summary: preview
171
+ ? `Preview: ${artifacts.files.length} files would be generated in ${outputDir}`
172
+ : `Exported ${artifacts.files.length} files to ${outputDir}`,
173
+ });
174
+ }
175
+ catch (err) {
176
+ return makeErrorResult('EXPORT_ERROR', `Export failed: ${err instanceof Error ? err.message : String(err)}`);
177
+ }
178
+ });
179
+ }
180
+ //# sourceMappingURL=tools-export.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Marketplace Tools — fw_market_search, fw_market_install, fw_market_list
3
+ *
4
+ * Allows Claude Code to discover, install, and inspect marketplace packages
5
+ * during vibe coding sessions.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ export declare function registerMarketplaceTools(mcp: McpServer): void;
9
+ //# sourceMappingURL=tools-marketplace.d.ts.map