@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,81 @@
1
+ /**
2
+ * Serve command - start HTTP server exposing workflows as endpoints
3
+ */
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
+ import { WebhookServer } from '../../server/webhook-server.js';
7
+ import { logger } from '../utils/logger.js';
8
+ /**
9
+ * Start a webhook server exposing workflows as HTTP endpoints.
10
+ *
11
+ * @param dir - Directory containing workflow files (defaults to current directory)
12
+ * @param options - Server options
13
+ *
14
+ * @example
15
+ * ```bash
16
+ * # Start server with current directory
17
+ * flow-weaver serve
18
+ *
19
+ * # Specify workflow directory
20
+ * flow-weaver serve ./workflows
21
+ *
22
+ * # Custom port
23
+ * flow-weaver serve --port 8080
24
+ *
25
+ * # Production mode
26
+ * flow-weaver serve --production --precompile
27
+ *
28
+ * # Disable hot reload
29
+ * flow-weaver serve --no-watch
30
+ * ```
31
+ */
32
+ export async function serveCommand(dir, options) {
33
+ const workflowDir = path.resolve(dir || '.');
34
+ // Validate directory exists
35
+ if (!fs.existsSync(workflowDir)) {
36
+ throw new Error(`Directory not found: ${workflowDir}`);
37
+ }
38
+ if (!fs.statSync(workflowDir).isDirectory()) {
39
+ throw new Error(`Not a directory: ${workflowDir}`);
40
+ }
41
+ const port = options.port ?? 3000;
42
+ const host = options.host ?? '0.0.0.0';
43
+ logger.section('Flow Weaver Webhook Server');
44
+ logger.info(`Workflow directory: ${workflowDir}`);
45
+ logger.info(`Server: http://${host}:${port}`);
46
+ logger.info(`File watching: ${options.watch !== false ? 'enabled' : 'disabled'}`);
47
+ logger.info(`Production mode: ${options.production ? 'yes' : 'no'}`);
48
+ if (options.swagger) {
49
+ logger.info(`Swagger UI: http://${host}:${port}/docs`);
50
+ }
51
+ logger.newline();
52
+ const server = new WebhookServer({
53
+ port,
54
+ host,
55
+ workflowDir,
56
+ watchEnabled: options.watch !== false,
57
+ production: options.production ?? false,
58
+ precompile: options.precompile ?? false,
59
+ corsOrigin: options.cors ?? '*',
60
+ swaggerEnabled: options.swagger ?? false,
61
+ });
62
+ // Graceful shutdown handlers
63
+ const shutdown = async (signal) => {
64
+ logger.newline();
65
+ logger.info(`Received ${signal}, shutting down...`);
66
+ await server.stop();
67
+ process.exit(0);
68
+ };
69
+ process.on('SIGINT', () => shutdown('SIGINT'));
70
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
71
+ try {
72
+ await server.start();
73
+ }
74
+ catch (error) {
75
+ if (error.code === 'EADDRINUSE') {
76
+ throw new Error(`Port ${port} is already in use. Try a different port with --port <number>`);
77
+ }
78
+ throw error;
79
+ }
80
+ }
81
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Templates command - list available templates
3
+ */
4
+ export interface TemplatesOptions {
5
+ json?: boolean;
6
+ }
7
+ export declare function templatesCommand(options?: TemplatesOptions): Promise<void>;
8
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1,54 @@
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * Templates command - list available templates
4
+ */
5
+ import { workflowTemplates, nodeTemplates } from "../templates/index.js";
6
+ import { logger } from "../utils/logger.js";
7
+ export async function templatesCommand(options = {}) {
8
+ const { json = false } = options;
9
+ if (json) {
10
+ console.log(JSON.stringify({
11
+ workflows: workflowTemplates.map((t) => ({
12
+ id: t.id,
13
+ name: t.name,
14
+ description: t.description,
15
+ category: t.category,
16
+ })),
17
+ nodes: nodeTemplates.map((t) => ({
18
+ id: t.id,
19
+ name: t.name,
20
+ description: t.description,
21
+ })),
22
+ }, null, 2));
23
+ return;
24
+ }
25
+ logger.section("Workflow Templates");
26
+ logger.newline();
27
+ // Group by category
28
+ const categories = new Map();
29
+ for (const template of workflowTemplates) {
30
+ const cat = template.category;
31
+ if (!categories.has(cat)) {
32
+ categories.set(cat, []);
33
+ }
34
+ categories.get(cat).push(template);
35
+ }
36
+ for (const [category, templates] of categories) {
37
+ logger.info(` ${category}:`);
38
+ for (const t of templates) {
39
+ logger.log(` ${t.id.padEnd(15)} ${t.description}`);
40
+ }
41
+ logger.newline();
42
+ }
43
+ logger.section("Node Templates");
44
+ logger.newline();
45
+ for (const t of nodeTemplates) {
46
+ logger.log(` ${t.id.padEnd(15)} ${t.description}`);
47
+ }
48
+ logger.newline();
49
+ logger.section("Usage");
50
+ logger.log(" $ flow-weaver create workflow <template> <file> [--async] [--line N]");
51
+ logger.log(" $ flow-weaver create node <template> <name> <file> [--line N]");
52
+ logger.newline();
53
+ }
54
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1,16 @@
1
+ export declare function uiFocusNode(nodeId: string, options: {
2
+ server?: string;
3
+ }): Promise<void>;
4
+ export declare function uiAddNode(nodeTypeName: string, options: {
5
+ server?: string;
6
+ }): Promise<void>;
7
+ export declare function uiOpenWorkflow(filePath: string, options: {
8
+ server?: string;
9
+ }): Promise<void>;
10
+ export declare function uiGetState(options: {
11
+ server?: string;
12
+ }): Promise<void>;
13
+ export declare function uiBatch(json: string, options: {
14
+ server?: string;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1,130 @@
1
+ import { io as socketIO } from 'socket.io-client';
2
+ import { logger } from '../utils/logger.js';
3
+ import { DEFAULT_SERVER_URL } from '../../defaults.js';
4
+ const DEFAULT_SERVER = DEFAULT_SERVER_URL;
5
+ const ACK_TIMEOUT = 10_000;
6
+ const VERBOSE_OUTPUT = !!(process.env.DEBUG || process.argv.includes('--verbose'));
7
+ async function sendCommand(serverUrl, action, params) {
8
+ const socket = socketIO(`${serverUrl}/integrations`, {
9
+ query: { clientType: 'cli' },
10
+ transports: ['websocket', 'polling'],
11
+ });
12
+ try {
13
+ await new Promise((resolve, reject) => {
14
+ socket.on('connect', () => resolve());
15
+ socket.on('connect_error', (err) => reject(err));
16
+ setTimeout(() => reject(new Error('Connection timeout')), ACK_TIMEOUT);
17
+ });
18
+ const requestId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
19
+ const result = await new Promise((resolve) => {
20
+ const timeout = setTimeout(() => {
21
+ resolve({ requestId, success: false, error: 'Timeout' });
22
+ }, ACK_TIMEOUT);
23
+ socket.on('fw:ack', (data) => {
24
+ if (data.requestId === requestId) {
25
+ clearTimeout(timeout);
26
+ resolve(data);
27
+ }
28
+ });
29
+ socket.emit('integration:command', { requestId, action, params });
30
+ });
31
+ if (result.success) {
32
+ if (VERBOSE_OUTPUT) {
33
+ logger.success(JSON.stringify(result, null, 2));
34
+ }
35
+ else {
36
+ logger.success(`Command "${action}" executed successfully`);
37
+ }
38
+ }
39
+ else {
40
+ logger.error(VERBOSE_OUTPUT
41
+ ? JSON.stringify(result, null, 2)
42
+ : `Command "${action}" failed: ${result.error || 'unknown error'}`);
43
+ process.exitCode = 1;
44
+ }
45
+ }
46
+ catch (err) {
47
+ logger.error(String(err instanceof Error ? err.message : err));
48
+ process.exitCode = 1;
49
+ }
50
+ finally {
51
+ socket.disconnect();
52
+ }
53
+ }
54
+ async function sendBatch(serverUrl, commands) {
55
+ const socket = socketIO(`${serverUrl}/integrations`, {
56
+ query: { clientType: 'cli' },
57
+ transports: ['websocket', 'polling'],
58
+ });
59
+ try {
60
+ await new Promise((resolve, reject) => {
61
+ socket.on('connect', () => resolve());
62
+ socket.on('connect_error', (err) => reject(err));
63
+ setTimeout(() => reject(new Error('Connection timeout')), ACK_TIMEOUT);
64
+ });
65
+ const requestId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
66
+ const result = await new Promise((resolve) => {
67
+ const timeout = setTimeout(() => {
68
+ resolve({ requestId, success: false, error: 'Timeout' });
69
+ }, ACK_TIMEOUT);
70
+ socket.on('fw:ack', (data) => {
71
+ if (data.requestId === requestId) {
72
+ clearTimeout(timeout);
73
+ resolve(data);
74
+ }
75
+ });
76
+ socket.emit('integration:batch', { requestId, commands });
77
+ });
78
+ if (result.success) {
79
+ if (VERBOSE_OUTPUT) {
80
+ logger.success(JSON.stringify(result, null, 2));
81
+ }
82
+ else {
83
+ logger.success('Batch executed successfully');
84
+ }
85
+ }
86
+ else {
87
+ logger.error(VERBOSE_OUTPUT
88
+ ? JSON.stringify(result, null, 2)
89
+ : `Batch failed: ${result.error || 'unknown error'}`);
90
+ process.exitCode = 1;
91
+ }
92
+ }
93
+ catch (err) {
94
+ logger.error(String(err instanceof Error ? err.message : err));
95
+ process.exitCode = 1;
96
+ }
97
+ finally {
98
+ socket.disconnect();
99
+ }
100
+ }
101
+ export async function uiFocusNode(nodeId, options) {
102
+ const server = options.server || DEFAULT_SERVER;
103
+ await sendCommand(server, 'focus-node', { nodeId });
104
+ }
105
+ export async function uiAddNode(nodeTypeName, options) {
106
+ const server = options.server || DEFAULT_SERVER;
107
+ await sendCommand(server, 'add-node', { nodeTypeName });
108
+ }
109
+ export async function uiOpenWorkflow(filePath, options) {
110
+ const server = options.server || DEFAULT_SERVER;
111
+ await sendCommand(server, 'open-workflow', { filePath });
112
+ }
113
+ export async function uiGetState(options) {
114
+ const server = options.server || DEFAULT_SERVER;
115
+ await sendCommand(server, 'get-state', {});
116
+ }
117
+ export async function uiBatch(json, options) {
118
+ let commands;
119
+ try {
120
+ commands = JSON.parse(json);
121
+ }
122
+ catch {
123
+ logger.error('Invalid JSON. Provide an array of {action, params} objects.');
124
+ process.exitCode = 1;
125
+ return;
126
+ }
127
+ const server = options.server || DEFAULT_SERVER;
128
+ await sendBatch(server, commands);
129
+ }
130
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Validate command - validates workflow files without compiling
3
+ */
4
+ export interface ValidateOptions {
5
+ verbose?: boolean;
6
+ quiet?: boolean;
7
+ workflowName?: string;
8
+ json?: boolean;
9
+ strict?: boolean;
10
+ }
11
+ export declare function validateCommand(input: string, options?: ValidateOptions): Promise<void>;
12
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1,247 @@
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * Validate command - validates workflow files without compiling
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { glob } from 'glob';
8
+ import { parseWorkflow } from '../../api/index.js';
9
+ import { validator } from '../../validator.js';
10
+ import { getFriendlyError } from '../../friendly-errors.js';
11
+ import { logger } from '../utils/logger.js';
12
+ import { getErrorMessage } from '../../utils/error-utils.js';
13
+ import { getAgentValidationRules } from '../../validation/agent-rules.js';
14
+ export async function validateCommand(input, options = {}) {
15
+ const { verbose = false, quiet = false, workflowName, json = false, strict = false } = options;
16
+ try {
17
+ // If input is a directory, expand to all .ts files recursively
18
+ let pattern = input;
19
+ try {
20
+ if (fs.existsSync(input) && fs.statSync(input).isDirectory()) {
21
+ pattern = path.join(input, '**/*.ts');
22
+ }
23
+ }
24
+ catch {
25
+ // Not a valid path, use as glob pattern
26
+ }
27
+ // Find files matching the pattern, filter to actual files only
28
+ const allFiles = await glob(pattern, { absolute: true });
29
+ const files = allFiles.filter((f) => {
30
+ try {
31
+ return fs.statSync(f).isFile();
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ });
37
+ if (files.length === 0) {
38
+ if (json) {
39
+ console.log(JSON.stringify({ error: `No files found matching pattern: ${input}` }));
40
+ }
41
+ else {
42
+ logger.error(`No files found matching pattern: ${input}`);
43
+ }
44
+ process.exit(1);
45
+ }
46
+ if (!json) {
47
+ logger.section('Validating Workflows');
48
+ logger.info(`Found ${files.length} file(s)`);
49
+ logger.newline();
50
+ }
51
+ let totalErrors = 0;
52
+ let totalWarnings = 0;
53
+ let successCount = 0;
54
+ const jsonResults = [];
55
+ for (let i = 0; i < files.length; i++) {
56
+ const file = files[i];
57
+ const fileName = path.basename(file);
58
+ if (!json) {
59
+ logger.progress(i + 1, files.length, fileName);
60
+ }
61
+ try {
62
+ // Parse the workflow
63
+ const parseResult = await parseWorkflow(file, { workflowName });
64
+ if (parseResult.warnings.length > 0) {
65
+ if (!json && !quiet) {
66
+ logger.warn(`Parse warnings in ${fileName}:`);
67
+ parseResult.warnings.forEach((w) => logger.warn(` - ${w}`));
68
+ }
69
+ totalWarnings += parseResult.warnings.length;
70
+ }
71
+ if (parseResult.errors.length > 0) {
72
+ // Skip non-workflow files silently (only error is "No workflows found")
73
+ const isNonWorkflowFile = parseResult.errors.length === 1 &&
74
+ typeof parseResult.errors[0] === 'string' &&
75
+ parseResult.errors[0].startsWith('No workflows found');
76
+ if (isNonWorkflowFile) {
77
+ if (verbose && !json) {
78
+ logger.debug(` Skipped ${fileName} (no workflow)`);
79
+ }
80
+ continue;
81
+ }
82
+ if (json) {
83
+ jsonResults.push({
84
+ file,
85
+ valid: false,
86
+ errors: parseResult.errors.map((e) => typeof e === 'string' ? { message: e, severity: 'error' } : e),
87
+ warnings: parseResult.warnings.map((w) => typeof w === 'string' ? { message: w, severity: 'warning' } : w),
88
+ });
89
+ }
90
+ else {
91
+ logger.error(`Parse errors in ${fileName}:`);
92
+ parseResult.errors.forEach((err) => logger.error(` ${err}`));
93
+ }
94
+ totalErrors += parseResult.errors.length;
95
+ continue;
96
+ }
97
+ // Validate the AST (built-in rules)
98
+ const validation = validator.validate(parseResult.ast, { strictMode: strict });
99
+ // Run agent-specific validation rules
100
+ const agentRules = getAgentValidationRules();
101
+ for (const rule of agentRules) {
102
+ const ruleErrors = rule.validate(parseResult.ast);
103
+ for (const err of ruleErrors) {
104
+ if (err.type === 'warning') {
105
+ validation.warnings.push(err);
106
+ }
107
+ else {
108
+ validation.errors.push(err);
109
+ validation.valid = false;
110
+ }
111
+ }
112
+ }
113
+ if (json) {
114
+ jsonResults.push({
115
+ file,
116
+ valid: validation.valid,
117
+ errors: validation.errors.map((e) => ({
118
+ message: e.message,
119
+ severity: e.type || 'error',
120
+ ...(e.node && { nodeId: e.node }),
121
+ ...(e.code && { code: e.code }),
122
+ })),
123
+ warnings: [
124
+ ...parseResult.warnings.map((w) => typeof w === 'string' ? { message: w, severity: 'warning' } : w),
125
+ ...validation.warnings.map((w) => ({
126
+ message: w.message,
127
+ severity: w.type || 'warning',
128
+ ...(w.node && { nodeId: w.node }),
129
+ ...(w.code && { code: w.code }),
130
+ })),
131
+ ],
132
+ });
133
+ }
134
+ if (validation.errors.length > 0) {
135
+ if (!json) {
136
+ logger.error(`Validation errors in ${fileName}:`);
137
+ validation.errors.forEach((err) => {
138
+ const friendly = getFriendlyError(err);
139
+ if (friendly) {
140
+ const loc = err.location ? `[line ${err.location.line}] ` : '';
141
+ logger.error(` ${loc}${friendly.title}: ${friendly.explanation}`);
142
+ logger.info(` How to fix: ${friendly.fix}`);
143
+ }
144
+ else {
145
+ let msg = ` - ${err.message}`;
146
+ if (err.location) {
147
+ msg = ` [line ${err.location.line}] - ${err.message}`;
148
+ }
149
+ if (err.node) {
150
+ msg += ` (node: ${err.node})`;
151
+ }
152
+ if (err.connection) {
153
+ msg += ` (connection: ${err.connection.from.node}:${err.connection.from.port} -> ${err.connection.to.node}:${err.connection.to.port})`;
154
+ }
155
+ logger.error(msg);
156
+ }
157
+ });
158
+ }
159
+ totalErrors += validation.errors.length;
160
+ }
161
+ if (validation.warnings.length > 0) {
162
+ if (!json && !quiet) {
163
+ logger.warn(`Warnings in ${fileName}:`);
164
+ validation.warnings.forEach((warn) => {
165
+ const friendly = getFriendlyError(warn);
166
+ if (friendly) {
167
+ const loc = warn.location ? `[line ${warn.location.line}] ` : '';
168
+ logger.warn(` ${loc}${friendly.title}: ${friendly.explanation}`);
169
+ logger.info(` How to fix: ${friendly.fix}`);
170
+ }
171
+ else {
172
+ let msg = ` - ${warn.message}`;
173
+ if (warn.location) {
174
+ msg = ` [line ${warn.location.line}] - ${warn.message}`;
175
+ }
176
+ if (warn.node) {
177
+ msg += ` (node: ${warn.node})`;
178
+ }
179
+ logger.warn(msg);
180
+ }
181
+ });
182
+ }
183
+ totalWarnings += validation.warnings.length;
184
+ }
185
+ if (validation.valid) {
186
+ if (!json && verbose) {
187
+ logger.success(` ${fileName} is valid`);
188
+ }
189
+ successCount++;
190
+ }
191
+ }
192
+ catch (error) {
193
+ if (json) {
194
+ jsonResults.push({
195
+ file,
196
+ valid: false,
197
+ errors: [{ message: getErrorMessage(error), severity: 'error' }],
198
+ warnings: [],
199
+ });
200
+ }
201
+ else {
202
+ logger.error(`Failed to validate ${fileName}: ${getErrorMessage(error)}`);
203
+ }
204
+ totalErrors++;
205
+ }
206
+ }
207
+ // Output
208
+ if (json) {
209
+ console.log(JSON.stringify({
210
+ valid: totalErrors === 0,
211
+ totalFiles: files.length,
212
+ validFiles: successCount,
213
+ totalErrors,
214
+ totalWarnings,
215
+ results: jsonResults,
216
+ }, null, 2));
217
+ }
218
+ else {
219
+ // Summary
220
+ logger.newline();
221
+ logger.section('Validation Summary');
222
+ logger.success(`${successCount} file(s) valid`);
223
+ if (totalWarnings > 0) {
224
+ logger.warn(`${totalWarnings} warning(s) found`);
225
+ }
226
+ if (totalErrors > 0) {
227
+ logger.error(`${totalErrors} error(s) found`);
228
+ }
229
+ else {
230
+ logger.success('All workflows are valid!');
231
+ }
232
+ }
233
+ if (totalErrors > 0) {
234
+ process.exit(1);
235
+ }
236
+ }
237
+ catch (error) {
238
+ if (json) {
239
+ console.log(JSON.stringify({ error: getErrorMessage(error) }));
240
+ }
241
+ else {
242
+ logger.error(`Validation failed: ${getErrorMessage(error)}`);
243
+ }
244
+ process.exit(1);
245
+ }
246
+ }
247
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Watch command - watches workflow files and recompiles on changes
3
+ */
4
+ import { type CompileOptions } from './compile.js';
5
+ export interface WatchOptions extends CompileOptions {
6
+ onRecompile?: (filePath: string, success: boolean, errors?: string[]) => void;
7
+ }
8
+ export declare function watchCommand(input: string, options?: WatchOptions): Promise<void>;
9
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Watch command - watches workflow files and recompiles on changes
3
+ */
4
+ import * as path from 'path';
5
+ import { glob } from 'glob';
6
+ import { compileCommand } from './compile.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { getErrorMessage } from '../../utils/error-utils.js';
9
+ function timestamp() {
10
+ const now = new Date();
11
+ const h = String(now.getHours()).padStart(2, '0');
12
+ const m = String(now.getMinutes()).padStart(2, '0');
13
+ const s = String(now.getSeconds()).padStart(2, '0');
14
+ return `[${h}:${m}:${s}]`;
15
+ }
16
+ export async function watchCommand(input, options = {}) {
17
+ logger.section('Watch Mode');
18
+ logger.info(`Watching for changes: ${input}`);
19
+ logger.info('Press Ctrl+C to stop');
20
+ logger.newline();
21
+ // Initial compilation
22
+ logger.info('Initial compilation...');
23
+ await compileCommand(input, options);
24
+ logger.newline();
25
+ logger.success('Watching for file changes...');
26
+ // Find files to watch
27
+ const files = await glob(input, { absolute: true });
28
+ // Use chokidar for reliable cross-platform file watching
29
+ const chokidar = await import('chokidar');
30
+ const watcher = chokidar.watch(files, {
31
+ persistent: true,
32
+ ignoreInitial: true,
33
+ });
34
+ watcher.on('change', async (file) => {
35
+ logger.newline();
36
+ logger.info(`${timestamp()} File changed: ${path.basename(file)}`);
37
+ logger.info(`${timestamp()} Recompiling...`);
38
+ logger.newline();
39
+ try {
40
+ await compileCommand(file, options);
41
+ logger.newline();
42
+ logger.success(`${timestamp()} Recompilation complete`);
43
+ options.onRecompile?.(file, true);
44
+ }
45
+ catch (error) {
46
+ const errorMsg = getErrorMessage(error);
47
+ logger.error(`${timestamp()} Recompilation failed: ${errorMsg}`);
48
+ options.onRecompile?.(file, false, [errorMsg]);
49
+ }
50
+ });
51
+ if (options.verbose) {
52
+ for (const file of files) {
53
+ logger.debug(`Watching: ${file}`);
54
+ }
55
+ }
56
+ // Handle process termination
57
+ const cleanup = () => {
58
+ logger.newline();
59
+ logger.info('Stopping watch mode...');
60
+ watcher.close();
61
+ process.exit(0);
62
+ };
63
+ process.on('SIGINT', cleanup);
64
+ process.on('SIGTERM', cleanup);
65
+ // Keep process alive
66
+ await new Promise(() => {
67
+ // Never resolves - keeps process running
68
+ });
69
+ }
70
+ //# sourceMappingURL=watch.js.map