@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,133 @@
1
+ /**
2
+ * Workflow executor for MCP-side compilation and execution.
3
+ * Copies source to a temp file, compiles all workflows in-place, then dynamically imports and executes.
4
+ */
5
+ import * as path from 'path';
6
+ import * as fs from 'fs';
7
+ import * as os from 'os';
8
+ import ts from 'typescript';
9
+ import { compileWorkflow } from '../api/index.js';
10
+ import { getAvailableWorkflows } from '../api/workflow-file-operations.js';
11
+ /**
12
+ * Compiles and executes a workflow from a TypeScript source file.
13
+ * Copies the source to a temp file, compiles all workflows in-place (preserving sibling
14
+ * functions for workflow composition), injects a trace-capturing debugger, and dynamically
15
+ * imports and runs the target workflow function.
16
+ * @param filePath - Path to the workflow `.ts` source file.
17
+ * @param params - Parameters to pass to the workflow function.
18
+ * @param options - Execution options.
19
+ * @param options.workflowName - Name of a specific exported workflow function to execute.
20
+ * If omitted, the first exported function is used.
21
+ * @param options.production - Enable production mode (no debug events). Defaults to `!includeTrace`.
22
+ * @param options.includeTrace - Whether to capture and return execution trace events. Defaults to `true`.
23
+ * @returns The workflow result, function name, execution time, and optional trace.
24
+ * @throws If no exported workflow function is found in the compiled module.
25
+ */
26
+ export async function executeWorkflowFromFile(filePath, params, options) {
27
+ const resolvedPath = path.resolve(filePath);
28
+ const includeTrace = options?.includeTrace !== false;
29
+ // Copy source to temp file and compile ALL workflows in-place there.
30
+ // In-place compilation preserves all functions in the module (node types,
31
+ // sibling workflows), which is required for workflow composition where one
32
+ // workflow calls another as a node type.
33
+ const tmpBase = path.join(os.tmpdir(), `fw-exec-${Date.now()}-${Math.random().toString(36).slice(2)}`);
34
+ const tmpTsFile = `${tmpBase}.ts`;
35
+ const tmpFile = `${tmpBase}.mjs`;
36
+ try {
37
+ fs.copyFileSync(resolvedPath, tmpTsFile);
38
+ // Discover all workflows in the file
39
+ const source = fs.readFileSync(resolvedPath, 'utf8');
40
+ const allWorkflows = getAvailableWorkflows(source);
41
+ // Compile each workflow in-place so all function bodies are generated
42
+ for (const wf of allWorkflows) {
43
+ await compileWorkflow(tmpTsFile, {
44
+ write: true,
45
+ inPlace: true,
46
+ parse: { workflowName: wf.functionName },
47
+ generate: { production: options?.production ?? !includeTrace },
48
+ });
49
+ }
50
+ // Inject debugger binding: replace the TypeScript-only `declare const`
51
+ // with an actual assignment from globalThis so the executor can pass
52
+ // a trace-capturing debugger at runtime.
53
+ let compiledCode = fs.readFileSync(tmpTsFile, 'utf8');
54
+ compiledCode = compiledCode.replace('declare const __flowWeaverDebugger__: TDebugger | undefined;', 'const __flowWeaverDebugger__ = (globalThis as any).__fw_debugger__;');
55
+ // Transpile TypeScript to JavaScript so Node.js can import it directly
56
+ const jsOutput = ts.transpileModule(compiledCode, {
57
+ compilerOptions: {
58
+ module: ts.ModuleKind.ESNext,
59
+ target: ts.ScriptTarget.ESNext,
60
+ esModuleInterop: true,
61
+ },
62
+ });
63
+ fs.writeFileSync(tmpFile, jsOutput.outputText, 'utf8');
64
+ // Create debugger to capture trace events
65
+ const trace = [];
66
+ const debugger_ = includeTrace
67
+ ? {
68
+ sendEvent: (event) => {
69
+ trace.push({
70
+ type: event.type || 'UNKNOWN',
71
+ timestamp: Date.now(),
72
+ data: event,
73
+ });
74
+ },
75
+ innerFlowInvocation: false,
76
+ }
77
+ : undefined;
78
+ // Set global debugger before import so compiled code picks it up
79
+ globalThis.__fw_debugger__ = debugger_;
80
+ // Set mock config for built-in nodes (delay, waitForEvent, invokeWorkflow)
81
+ if (options?.mocks) {
82
+ globalThis.__fw_mocks__ = options.mocks;
83
+ }
84
+ // Dynamic import (tsx runtime supports .ts imports)
85
+ const mod = await import(tmpFile);
86
+ // Find the target exported function
87
+ const exportedFn = findExportedFunction(mod, options?.workflowName);
88
+ if (!exportedFn) {
89
+ throw new Error(`No exported workflow function found${options?.workflowName ? ` named "${options.workflowName}"` : ''}`);
90
+ }
91
+ const startTime = Date.now();
92
+ // Execute the workflow function: (execute, params, abortSignal?)
93
+ // In-place compiled functions use the module-level debugger, not a parameter.
94
+ const result = await exportedFn.fn(true, params ?? {});
95
+ const executionTime = Date.now() - startTime;
96
+ return {
97
+ result,
98
+ functionName: exportedFn.name,
99
+ executionTime,
100
+ ...(includeTrace && { trace }),
101
+ };
102
+ }
103
+ finally {
104
+ // Clean up globals
105
+ delete globalThis.__fw_debugger__;
106
+ delete globalThis.__fw_mocks__;
107
+ // Clean up temp files
108
+ try {
109
+ fs.unlinkSync(tmpFile);
110
+ }
111
+ catch { /* ignore */ }
112
+ try {
113
+ fs.unlinkSync(tmpTsFile);
114
+ }
115
+ catch { /* ignore */ }
116
+ }
117
+ }
118
+ function findExportedFunction(mod, preferredName) {
119
+ // If a preferred name is specified, try it first
120
+ if (preferredName && typeof mod[preferredName] === 'function') {
121
+ return { name: preferredName, fn: mod[preferredName] };
122
+ }
123
+ // Find first exported function (skip default if it's not a function)
124
+ for (const [key, value] of Object.entries(mod)) {
125
+ if (key === '__esModule')
126
+ continue;
127
+ if (typeof value === 'function') {
128
+ return { name: key, fn: value };
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ //# sourceMappingURL=workflow-executor.js.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Edge-Case Migration Registry
3
+ *
4
+ * The parse → generate round-trip handles ~95% of migrations automatically:
5
+ * the parser adds defaults for missing fields, and the generator writes
6
+ * current syntax. This registry is only for rare cases where that
7
+ * round-trip can't handle a change (e.g., semantic renames, removed features).
8
+ *
9
+ * Expected growth: ~1-2 entries per year.
10
+ */
11
+ import type { TWorkflowAST } from '../ast/types.js';
12
+ export type MigrationFn = (ast: TWorkflowAST) => TWorkflowAST;
13
+ export interface Migration {
14
+ /** Short descriptive name (e.g., "rename-executeWhen-to-branchingStrategy") */
15
+ name: string;
16
+ /** The migration transform */
17
+ apply: MigrationFn;
18
+ }
19
+ /**
20
+ * Apply all registered edge-case migrations to a workflow AST.
21
+ * Called after parsing, before regeneration.
22
+ */
23
+ export declare function applyMigrations(ast: TWorkflowAST): TWorkflowAST;
24
+ /**
25
+ * Get the list of registered migrations (for diagnostics/logging).
26
+ */
27
+ export declare function getRegisteredMigrations(): ReadonlyArray<{
28
+ name: string;
29
+ }>;
30
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Edge-Case Migration Registry
3
+ *
4
+ * The parse → generate round-trip handles ~95% of migrations automatically:
5
+ * the parser adds defaults for missing fields, and the generator writes
6
+ * current syntax. This registry is only for rare cases where that
7
+ * round-trip can't handle a change (e.g., semantic renames, removed features).
8
+ *
9
+ * Expected growth: ~1-2 entries per year.
10
+ */
11
+ /**
12
+ * Registry of edge-case migrations. Starts empty.
13
+ * Add entries only when the parse→generate round-trip can't handle a change.
14
+ */
15
+ const migrations = [];
16
+ /**
17
+ * Apply all registered edge-case migrations to a workflow AST.
18
+ * Called after parsing, before regeneration.
19
+ */
20
+ export function applyMigrations(ast) {
21
+ return migrations.reduce((current, migration) => migration.apply(current), ast);
22
+ }
23
+ /**
24
+ * Get the list of registered migrations (for diagnostics/logging).
25
+ */
26
+ export function getRegisteredMigrations() {
27
+ return migrations.map((m) => ({ name: m.name }));
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1,49 @@
1
+ import type { TNodeTypeAST } from "./ast/types.js";
2
+ export interface TNodeTypePort {
3
+ name: string;
4
+ defaultLabel: string;
5
+ reference: string;
6
+ type: string;
7
+ direction: "INPUT" | "OUTPUT";
8
+ defaultOrder: number;
9
+ defaultHidden?: boolean;
10
+ failure?: boolean;
11
+ defaultPlacement?: "TOP" | "BOTTOM" | "LEFT" | "RIGHT";
12
+ scope?: string;
13
+ }
14
+ export interface TPortConfig {
15
+ portName: string;
16
+ direction: "INPUT" | "OUTPUT";
17
+ order?: number;
18
+ label?: string;
19
+ expression?: string;
20
+ }
21
+ export interface TLocalFunctionNodeType {
22
+ name: string;
23
+ variant: "LOCAL_FUNCTION";
24
+ synchronicity: "SYNC" | "ASYNC" | "BOTH" | "UNKNOWN";
25
+ defaultLabel: string;
26
+ description: string;
27
+ category: string;
28
+ scopes: string[];
29
+ portConfigs: TPortConfig[];
30
+ ports: TNodeTypePort[];
31
+ defaultPullExecutionConfig?: {
32
+ method: string;
33
+ };
34
+ path: string;
35
+ projectPath: string;
36
+ function: string;
37
+ parameters: string[];
38
+ }
39
+ export declare class NodeTypesGenerator {
40
+ generateNodeType(node: TNodeTypeAST, filePath: string, projectPath: string): TLocalFunctionNodeType;
41
+ generateAllNodeTypes(nodes: TNodeTypeAST[], filePath: string, projectPath: string): TLocalFunctionNodeType[];
42
+ generateNodeTypesModule(nodes: TNodeTypeAST[], filePath: string, projectPath: string): string;
43
+ private formatLabel;
44
+ private extractDescription;
45
+ private extractParameters;
46
+ private determineSynchronicity;
47
+ }
48
+ export declare const nodeTypesGenerator: NodeTypesGenerator;
49
+ //# sourceMappingURL=node-types-generator.d.ts.map
@@ -0,0 +1,139 @@
1
+ import { RESERVED_PORT_NAMES, isExecutePort, isSuccessPort, isFailurePort, } from "./constants.js";
2
+ export class NodeTypesGenerator {
3
+ generateNodeType(node, filePath, projectPath) {
4
+ const ports = [];
5
+ let portOrder = 0;
6
+ ports.push({
7
+ name: RESERVED_PORT_NAMES.EXECUTE,
8
+ defaultLabel: "Execute",
9
+ reference: RESERVED_PORT_NAMES.EXECUTE,
10
+ type: "STEP",
11
+ direction: "INPUT",
12
+ defaultOrder: portOrder++,
13
+ });
14
+ ports.push({
15
+ name: RESERVED_PORT_NAMES.ON_SUCCESS,
16
+ defaultLabel: "On Success",
17
+ reference: RESERVED_PORT_NAMES.ON_SUCCESS,
18
+ type: "STEP",
19
+ direction: "OUTPUT",
20
+ defaultOrder: portOrder++,
21
+ });
22
+ ports.push({
23
+ name: RESERVED_PORT_NAMES.ON_FAILURE,
24
+ defaultLabel: "On Failure",
25
+ reference: RESERVED_PORT_NAMES.ON_FAILURE,
26
+ type: "STEP",
27
+ direction: "OUTPUT",
28
+ failure: true,
29
+ defaultPlacement: "BOTTOM",
30
+ defaultOrder: portOrder++,
31
+ });
32
+ Object.entries(node.inputs).forEach(([portName, portConfig]) => {
33
+ if (isExecutePort(portName))
34
+ return;
35
+ ports.push({
36
+ name: portName,
37
+ defaultLabel: portConfig.label || this.formatLabel(portName),
38
+ reference: portName,
39
+ type: portConfig.dataType,
40
+ direction: "INPUT",
41
+ defaultOrder: portOrder++,
42
+ defaultHidden: portConfig.hidden,
43
+ ...(portConfig.scope && { scope: portConfig.scope }),
44
+ });
45
+ });
46
+ Object.entries(node.outputs).forEach(([portName, portConfig]) => {
47
+ if (isSuccessPort(portName) || isFailurePort(portName))
48
+ return;
49
+ ports.push({
50
+ name: portName,
51
+ defaultLabel: portConfig.label || this.formatLabel(portName),
52
+ reference: portName,
53
+ type: portConfig.dataType,
54
+ direction: "OUTPUT",
55
+ defaultOrder: portOrder++,
56
+ defaultHidden: portConfig.hidden,
57
+ ...(portConfig.scope && { scope: portConfig.scope }),
58
+ });
59
+ });
60
+ const functionText = node.functionText || '';
61
+ const parameters = this.extractParameters(functionText);
62
+ const synchronicity = this.determineSynchronicity(functionText);
63
+ const label = node.label || this.formatLabel(node.functionName);
64
+ const description = node.description ||
65
+ this.extractDescription(functionText) ||
66
+ `Node: ${label}`;
67
+ const category = "Custom";
68
+ return {
69
+ name: node.functionName,
70
+ variant: "LOCAL_FUNCTION",
71
+ synchronicity,
72
+ defaultLabel: label,
73
+ description,
74
+ category,
75
+ scopes: node.scope ? [node.scope] : node.scopes || [],
76
+ portConfigs: [],
77
+ ports,
78
+ defaultPullExecutionConfig: {
79
+ method: RESERVED_PORT_NAMES.EXECUTE,
80
+ },
81
+ path: filePath,
82
+ projectPath,
83
+ function: node.functionName,
84
+ parameters,
85
+ };
86
+ }
87
+ generateAllNodeTypes(nodes, filePath, projectPath) {
88
+ return nodes.map((node) => this.generateNodeType(node, filePath, projectPath));
89
+ }
90
+ generateNodeTypesModule(nodes, filePath, projectPath) {
91
+ const nodeTypes = this.generateAllNodeTypes(nodes, filePath, projectPath);
92
+ const lines = [];
93
+ lines.push("");
94
+ lines.push("");
95
+ lines.push("");
96
+ lines.push("import type { TLocalFunctionNodeType } from '@synergenius/flow-weaver';");
97
+ lines.push("");
98
+ lines.push("export const nodeTypes: TLocalFunctionNodeType[] = [");
99
+ nodeTypes.forEach((nodeType, idx) => {
100
+ lines.push(` ${JSON.stringify(nodeType, null, 2)}${idx < nodeTypes.length - 1 ? "," : ""}`);
101
+ });
102
+ lines.push("];");
103
+ lines.push("");
104
+ nodeTypes.forEach((nodeType) => {
105
+ lines.push(`export const ${nodeType.name}NodeType = nodeTypes.find(n => n.name === '${nodeType.name}')!;`);
106
+ });
107
+ return lines.join("\n");
108
+ }
109
+ formatLabel(name) {
110
+ return name
111
+ .replace(/([A-Z])/g, " $1")
112
+ .replace(/^./, (str) => str.toUpperCase())
113
+ .trim();
114
+ }
115
+ extractDescription(functionText) {
116
+ const match = functionText.match(/\/\*\*\s*\n\s*\*\s*(.+?)\s*\n/);
117
+ return match ? match[1] : null;
118
+ }
119
+ extractParameters(functionText) {
120
+ const match = functionText.match(/function\s+\w+\s*\(([^)]*)\)/);
121
+ if (!match || !match[1])
122
+ return [];
123
+ return match[1]
124
+ .split(",")
125
+ .map((param) => param.trim().split(":")[0].trim())
126
+ .filter((p) => p.length > 0);
127
+ }
128
+ determineSynchronicity(functionText) {
129
+ if (functionText.includes("async function")) {
130
+ return "ASYNC";
131
+ }
132
+ if (!functionText.includes("await") && !functionText.includes("Promise")) {
133
+ return "SYNC";
134
+ }
135
+ return "BOTH";
136
+ }
137
+ }
138
+ export const nodeTypesGenerator = new NodeTypesGenerator();
139
+ //# sourceMappingURL=node-types-generator.js.map
@@ -0,0 +1,56 @@
1
+ /**
2
+ * NPM Package Type Resolution
3
+ *
4
+ * Functions for discovering and extracting type information from npm packages
5
+ * that have TypeScript declaration files (.d.ts).
6
+ */
7
+ import type { TDataType } from './ast/types.js';
8
+ /**
9
+ * Port definition compatible with TNodeType.ports
10
+ */
11
+ export type TNpmPackagePort = {
12
+ name: string;
13
+ defaultLabel?: string;
14
+ reference?: string;
15
+ type: TDataType;
16
+ direction: 'INPUT' | 'OUTPUT';
17
+ scope?: string;
18
+ };
19
+ /**
20
+ * Node type for npm package functions
21
+ */
22
+ export type TNpmNodeType = {
23
+ name: string;
24
+ variant: 'FUNCTION';
25
+ category: string;
26
+ function: string;
27
+ label: string;
28
+ importSource: string;
29
+ ports: TNpmPackagePort[];
30
+ synchronicity: 'SYNC' | 'ASYNC';
31
+ description: string;
32
+ };
33
+ /**
34
+ * Get list of packages that have TypeScript declarations (.d.ts files).
35
+ * Excludes @types/* packages as they are type augmentations.
36
+ *
37
+ * @param workdir - Directory to start searching from
38
+ * @param nodeModulesOverride - Optional explicit node_modules path (for testing)
39
+ * @returns Object with packages array, each containing name and typesPath
40
+ */
41
+ export declare function getTypedPackages(workdir: string, nodeModulesOverride?: string): {
42
+ packages: Array<{
43
+ name: string;
44
+ typesPath: string | null;
45
+ }>;
46
+ };
47
+ /**
48
+ * Get function exports from a package's .d.ts file and return as TNodeType[].
49
+ *
50
+ * @param packageName - The npm package name
51
+ * @param workdir - Directory to start searching from
52
+ * @param nodeModulesOverride - Optional explicit node_modules path (for testing)
53
+ * @returns Array of node types for the package's exported functions
54
+ */
55
+ export declare function getPackageExports(packageName: string, workdir: string, nodeModulesOverride?: string): TNpmNodeType[];
56
+ //# sourceMappingURL=npm-packages.d.ts.map
@@ -0,0 +1,255 @@
1
+ /**
2
+ * NPM Package Type Resolution
3
+ *
4
+ * Functions for discovering and extracting type information from npm packages
5
+ * that have TypeScript declaration files (.d.ts).
6
+ */
7
+ import * as path from 'node:path';
8
+ import * as fs from 'node:fs';
9
+ import { resolvePackageTypesPath } from './resolve-package-types.js';
10
+ import { extractFunctionLikes } from './function-like.js';
11
+ import { inferDataTypeFromTS } from './type-mappings.js';
12
+ import { getSharedProject } from './shared-project.js';
13
+ /**
14
+ * Find all node_modules directories starting from fromDir and walking up.
15
+ */
16
+ function findNodeModulesDirs(fromDir) {
17
+ const dirs = [];
18
+ let current = path.resolve(fromDir);
19
+ const root = path.parse(current).root;
20
+ while (current !== root) {
21
+ const candidate = path.join(current, 'node_modules');
22
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
23
+ dirs.push(candidate);
24
+ }
25
+ const parent = path.dirname(current);
26
+ if (parent === current)
27
+ break;
28
+ current = parent;
29
+ }
30
+ return dirs;
31
+ }
32
+ /**
33
+ * List all packages in a node_modules directory (including scoped packages).
34
+ */
35
+ function listPackagesInNodeModules(nmDir) {
36
+ const packages = [];
37
+ if (!fs.existsSync(nmDir))
38
+ return packages;
39
+ try {
40
+ const entries = fs.readdirSync(nmDir, { withFileTypes: true });
41
+ for (const entry of entries) {
42
+ if (!entry.isDirectory())
43
+ continue;
44
+ // Handle scoped packages (@scope/pkg)
45
+ if (entry.name.startsWith('@')) {
46
+ const scopeDir = path.join(nmDir, entry.name);
47
+ try {
48
+ const scopedEntries = fs.readdirSync(scopeDir, { withFileTypes: true });
49
+ for (const scopedEntry of scopedEntries) {
50
+ if (scopedEntry.isDirectory()) {
51
+ packages.push(`${entry.name}/${scopedEntry.name}`);
52
+ }
53
+ }
54
+ }
55
+ catch {
56
+ // Ignore permission errors
57
+ }
58
+ }
59
+ else {
60
+ // Regular package
61
+ packages.push(entry.name);
62
+ }
63
+ }
64
+ }
65
+ catch {
66
+ // Ignore permission errors
67
+ }
68
+ return packages;
69
+ }
70
+ /**
71
+ * Get list of packages that have TypeScript declarations (.d.ts files).
72
+ * Excludes @types/* packages as they are type augmentations.
73
+ *
74
+ * @param workdir - Directory to start searching from
75
+ * @param nodeModulesOverride - Optional explicit node_modules path (for testing)
76
+ * @returns Object with packages array, each containing name and typesPath
77
+ */
78
+ export function getTypedPackages(workdir, nodeModulesOverride) {
79
+ const nodeModulesDirs = nodeModulesOverride
80
+ ? [nodeModulesOverride]
81
+ : findNodeModulesDirs(workdir);
82
+ const typed = [];
83
+ const seenPackages = new Set();
84
+ for (const nmDir of nodeModulesDirs) {
85
+ const packages = listPackagesInNodeModules(nmDir);
86
+ for (const pkg of packages) {
87
+ // Skip @types/* packages - they are type augmentations, not actual packages
88
+ if (pkg.startsWith('@types/'))
89
+ continue;
90
+ // Skip if already seen (from a closer node_modules)
91
+ if (seenPackages.has(pkg))
92
+ continue;
93
+ seenPackages.add(pkg);
94
+ // Check if package has types
95
+ const typesPath = resolvePackageTypesPath(pkg, workdir, nodeModulesOverride);
96
+ if (typesPath) {
97
+ typed.push({ name: pkg, typesPath });
98
+ }
99
+ }
100
+ }
101
+ return { packages: typed };
102
+ }
103
+ /**
104
+ * Capitalize first letter of a string.
105
+ */
106
+ function capitalize(str) {
107
+ return str.charAt(0).toUpperCase() + str.slice(1);
108
+ }
109
+ /**
110
+ * Infer node type from a function declaration in a .d.ts file.
111
+ */
112
+ function inferNodeTypeFromDtsFunction(fn, packageName, _dtsPath) {
113
+ const fnName = fn.getName();
114
+ if (!fnName)
115
+ return null;
116
+ const ports = [];
117
+ // Add execute input port (mandatory)
118
+ ports.push({
119
+ name: 'execute',
120
+ defaultLabel: 'Execute',
121
+ reference: 'execute',
122
+ type: 'STEP',
123
+ direction: 'INPUT',
124
+ });
125
+ // Infer inputs from parameters
126
+ for (const param of fn.getParameters()) {
127
+ const paramName = param.getName();
128
+ const tsType = param.getType().getText(param);
129
+ const dataType = inferDataTypeFromTS(tsType);
130
+ ports.push({
131
+ name: paramName,
132
+ defaultLabel: capitalize(paramName),
133
+ reference: paramName,
134
+ type: dataType,
135
+ direction: 'INPUT',
136
+ });
137
+ }
138
+ // Infer outputs from return type
139
+ let returnType = fn.getReturnType();
140
+ const returnTypeText = returnType.getText();
141
+ let isAsync = false;
142
+ // Unwrap Promise<T>
143
+ if (returnTypeText.startsWith('Promise<')) {
144
+ isAsync = true;
145
+ const typeArgs = returnType.getTypeArguments();
146
+ if (typeArgs && typeArgs.length > 0) {
147
+ returnType = typeArgs[0];
148
+ }
149
+ }
150
+ const unwrappedText = returnType.getText();
151
+ if (unwrappedText !== 'void' && unwrappedText !== 'undefined') {
152
+ const primitiveTypes = new Set(['string', 'number', 'boolean', 'any', 'unknown', 'never']);
153
+ const isPrimitive = primitiveTypes.has(unwrappedText);
154
+ const isArray = unwrappedText.endsWith('[]') || unwrappedText.startsWith('Array<');
155
+ const properties = returnType.getProperties();
156
+ const isObjectLike = !isPrimitive && !isArray && returnType.isObject() && properties.length > 0;
157
+ if (isObjectLike) {
158
+ // Multiple output ports from object properties
159
+ for (const prop of properties) {
160
+ const propName = prop.getName();
161
+ if (propName === 'onSuccess' || propName === 'onFailure')
162
+ continue;
163
+ const propType = prop.getTypeAtLocation(fn.getTypeResolutionNode());
164
+ const propTypeText = propType.getText();
165
+ const dataType = inferDataTypeFromTS(propTypeText);
166
+ ports.push({
167
+ name: propName,
168
+ defaultLabel: capitalize(propName),
169
+ reference: propName,
170
+ type: dataType,
171
+ direction: 'OUTPUT',
172
+ });
173
+ }
174
+ }
175
+ else {
176
+ // Single result output port
177
+ const dataType = inferDataTypeFromTS(unwrappedText);
178
+ ports.push({
179
+ name: 'result',
180
+ defaultLabel: 'Result',
181
+ reference: 'result',
182
+ type: dataType,
183
+ direction: 'OUTPUT',
184
+ });
185
+ }
186
+ }
187
+ // Add mandatory control flow output ports
188
+ ports.push({
189
+ name: 'onSuccess',
190
+ defaultLabel: 'On Success',
191
+ reference: 'onSuccess',
192
+ type: 'STEP',
193
+ direction: 'OUTPUT',
194
+ });
195
+ ports.push({
196
+ name: 'onFailure',
197
+ defaultLabel: 'On Failure',
198
+ reference: 'onFailure',
199
+ type: 'STEP',
200
+ direction: 'OUTPUT',
201
+ });
202
+ return {
203
+ name: `npm/${packageName}/${fnName}`,
204
+ variant: 'FUNCTION',
205
+ category: 'NPM Packages',
206
+ function: fnName,
207
+ label: fnName,
208
+ importSource: packageName,
209
+ ports,
210
+ synchronicity: isAsync ? 'ASYNC' : 'SYNC',
211
+ description: `${fnName} from ${packageName}`,
212
+ };
213
+ }
214
+ /**
215
+ * Get function exports from a package's .d.ts file and return as TNodeType[].
216
+ *
217
+ * @param packageName - The npm package name
218
+ * @param workdir - Directory to start searching from
219
+ * @param nodeModulesOverride - Optional explicit node_modules path (for testing)
220
+ * @returns Array of node types for the package's exported functions
221
+ */
222
+ export function getPackageExports(packageName, workdir, nodeModulesOverride) {
223
+ const typesPath = resolvePackageTypesPath(packageName, workdir, nodeModulesOverride);
224
+ if (!typesPath) {
225
+ return [];
226
+ }
227
+ try {
228
+ const project = getSharedProject();
229
+ const dtsContent = fs.readFileSync(typesPath, 'utf-8');
230
+ // Create source file with unique path to avoid conflicts
231
+ const virtualPath = `__npm_exports__/${packageName}/${Date.now()}.d.ts`;
232
+ const dtsFile = project.createSourceFile(virtualPath, dtsContent, { overwrite: true });
233
+ const functions = extractFunctionLikes(dtsFile);
234
+ const nodeTypes = [];
235
+ const seenFunctionNames = new Set();
236
+ for (const fn of functions) {
237
+ const fnName = fn.getName();
238
+ // Skip duplicates (can happen with re-exports or declaration merging)
239
+ if (!fnName || seenFunctionNames.has(fnName))
240
+ continue;
241
+ seenFunctionNames.add(fnName);
242
+ const nodeType = inferNodeTypeFromDtsFunction(fn, packageName, typesPath);
243
+ if (nodeType) {
244
+ nodeTypes.push(nodeType);
245
+ }
246
+ }
247
+ // Clean up the temporary source file
248
+ project.removeSourceFile(dtsFile);
249
+ return nodeTypes;
250
+ }
251
+ catch {
252
+ return [];
253
+ }
254
+ }
255
+ //# sourceMappingURL=npm-packages.js.map