@synergenius/flow-weaver 0.33.1 → 0.44.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 (922) hide show
  1. package/LICENSE +201 -226
  2. package/NOTICE +13 -0
  3. package/README.md +152 -244
  4. package/dist/agent/agent-loop.d.ts +4 -2
  5. package/dist/agent/cli-session.d.ts +3 -3
  6. package/dist/agent/cli-session.js +511 -438
  7. package/dist/agent/cli-spawn-config.d.ts +4 -4
  8. package/dist/agent/gate.d.ts +164 -0
  9. package/dist/agent/index.d.ts +4 -4
  10. package/dist/agent/index.js +174 -28
  11. package/dist/agent/mcp-bridge.d.ts +1 -1
  12. package/dist/agent/mcp-bridge.js +114 -128
  13. package/dist/agent/mcp-tool-server.d.ts +2 -2
  14. package/dist/agent/mcp-tool-server.js +147 -189
  15. package/dist/agent/profiles.d.ts +69 -0
  16. package/dist/agent/providers/anthropic.d.ts +2 -4
  17. package/dist/agent/providers/claude-cli.d.ts +4 -5
  18. package/dist/agent/providers/openai-compat.d.ts +8 -1
  19. package/dist/agent/streaming.d.ts +2 -2
  20. package/dist/agent/types.d.ts +16 -10
  21. package/dist/api/builder.d.ts +3 -3
  22. package/dist/api/compile.d.ts +9 -4
  23. package/dist/api/durable-validation.d.ts +15 -0
  24. package/dist/api/generate-in-place.d.ts +21 -19
  25. package/dist/api/generate.d.ts +21 -16
  26. package/dist/api/generated-module/local-node-functions.d.ts +24 -0
  27. package/dist/api/generated-module/module-format.d.ts +23 -0
  28. package/dist/api/generated-module/module-writer.d.ts +34 -0
  29. package/dist/api/generated-module/node-type-imports.d.ts +39 -0
  30. package/dist/api/generated-module/preamble.d.ts +16 -0
  31. package/dist/api/generated-module/workflow-functions.d.ts +29 -0
  32. package/dist/api/graph-identity.d.ts +39 -0
  33. package/dist/api/helpers.d.ts +4 -60
  34. package/dist/api/in-place/built-in-nodes.d.ts +18 -0
  35. package/dist/api/in-place/function-body.d.ts +21 -0
  36. package/dist/api/in-place/fw-imports.d.ts +30 -0
  37. package/dist/api/in-place/macro-coverage.d.ts +14 -0
  38. package/dist/api/in-place/node-type-functions.d.ts +18 -0
  39. package/dist/api/in-place/node-type-jsdoc.d.ts +20 -0
  40. package/dist/api/in-place/orphaned-node-types.d.ts +16 -0
  41. package/dist/api/in-place/runtime-section.d.ts +16 -0
  42. package/dist/api/in-place/signature.d.ts +47 -0
  43. package/dist/api/in-place/source-file.d.ts +19 -0
  44. package/dist/api/in-place/workflow-jsdoc.d.ts +19 -0
  45. package/dist/api/index.d.ts +18 -21
  46. package/dist/api/index.js +259 -53
  47. package/dist/api/inline-engine.generated.d.ts +3 -0
  48. package/dist/api/inline-runtime.d.ts +10 -2
  49. package/dist/api/manipulation/connections.d.ts +1 -1
  50. package/dist/api/manipulation/index.d.ts +8 -8
  51. package/dist/api/manipulation/node-types.d.ts +1 -1
  52. package/dist/api/manipulation/nodes.d.ts +3 -13
  53. package/dist/api/manipulation/ports.d.ts +1 -1
  54. package/dist/api/manipulation/scopes.d.ts +1 -1
  55. package/dist/api/manipulation/workflow.d.ts +1 -1
  56. package/dist/api/modify-operation.d.ts +0 -2
  57. package/dist/api/parse.d.ts +22 -1
  58. package/dist/api/port-references.d.ts +66 -0
  59. package/dist/api/query.d.ts +18 -2
  60. package/dist/api/templates.d.ts +1 -1
  61. package/dist/api/transform.d.ts +1 -1
  62. package/dist/api/validate.d.ts +1 -1
  63. package/dist/api/validation-registry.d.ts +2 -2
  64. package/dist/artifacts/brief.d.ts +43 -0
  65. package/dist/artifacts/index.d.ts +31 -0
  66. package/dist/artifacts/pdf.d.ts +19 -0
  67. package/dist/ast/builder.d.ts +3 -3
  68. package/dist/ast/index.d.ts +4 -4
  69. package/dist/ast/index.js +60 -5
  70. package/dist/ast/serialization-node.d.ts +1 -1
  71. package/dist/ast/serialization.d.ts +1 -1
  72. package/dist/ast/types.d.ts +82 -291
  73. package/dist/ast/workflow-utils.d.ts +4 -4
  74. package/dist/built-in-nodes/coercion-types.d.ts +1 -1
  75. package/dist/built-in-nodes/delay.d.ts +3 -1
  76. package/dist/built-in-nodes/generated-registry.d.ts +1 -1
  77. package/dist/built-in-nodes/index.d.ts +6 -5
  78. package/dist/built-in-nodes/index.js +79 -5
  79. package/dist/built-in-nodes/invoke-workflow.d.ts +2 -1
  80. package/dist/built-in-nodes/mock-types.d.ts +45 -14
  81. package/dist/built-in-nodes/sleep.d.ts +12 -0
  82. package/dist/built-in-nodes/wait-for-agent.d.ts +2 -1
  83. package/dist/built-in-nodes/wait-for-event.d.ts +2 -1
  84. package/dist/chevrotain-parser/coerce-parser.d.ts +1 -1
  85. package/dist/chevrotain-parser/connect-parser.d.ts +1 -1
  86. package/dist/chevrotain-parser/grammar-diagrams.d.ts +1 -1
  87. package/dist/chevrotain-parser/index.d.ts +20 -23
  88. package/dist/chevrotain-parser/node-parser.d.ts +7 -8
  89. package/dist/chevrotain-parser/parse-line.d.ts +54 -0
  90. package/dist/chevrotain-parser/tokens.d.ts +0 -17
  91. package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +6 -1
  92. package/dist/chunks/chunk-4EUSHAY6.js +298 -0
  93. package/dist/chunks/chunk-4KDUEOFD.js +197 -0
  94. package/dist/chunks/chunk-5Y3AIUWY.js +911 -0
  95. package/dist/chunks/chunk-6KMVP6AU.js +20 -0
  96. package/dist/chunks/chunk-6PNJORFL.js +128 -0
  97. package/dist/chunks/chunk-7AAQNGRH.js +2001 -0
  98. package/dist/chunks/chunk-7YYKTPJ5.js +22705 -0
  99. package/dist/chunks/chunk-A5MBOFVY.js +33 -0
  100. package/dist/chunks/chunk-AXNQRVJB.js +18 -0
  101. package/dist/chunks/chunk-B6HQ6YS5.js +572 -0
  102. package/dist/chunks/chunk-CY3RNVML.js +296 -0
  103. package/dist/chunks/chunk-CYHYDLV4.js +653 -0
  104. package/dist/chunks/chunk-CZBCCK4Y.js +82 -0
  105. package/dist/chunks/chunk-DCMGQP5V.js +505 -0
  106. package/dist/chunks/chunk-DIAA66GL.js +72 -0
  107. package/dist/chunks/chunk-DUO6H5PR.js +20 -0
  108. package/dist/chunks/chunk-E5WN7IGO.js +125 -0
  109. package/dist/chunks/chunk-EFGFXXQF.js +184 -0
  110. package/dist/chunks/chunk-F3RTZV2A.js +2811 -0
  111. package/dist/chunks/chunk-FMTLP5ZX.js +1397 -0
  112. package/dist/chunks/chunk-HKZLQJDV.js +79 -0
  113. package/dist/chunks/chunk-INDEVYEC.js +146 -0
  114. package/dist/chunks/chunk-JQTF4R5L.js +390 -0
  115. package/dist/chunks/chunk-KMCAYNUM.js +331 -0
  116. package/dist/chunks/chunk-KMWCCOUJ.js +1444 -0
  117. package/dist/chunks/chunk-KU3CLJI2.js +338 -0
  118. package/dist/chunks/chunk-NDSTGMKR.js +3300 -0
  119. package/dist/chunks/chunk-NQNLUAPO.js +505 -0
  120. package/dist/chunks/chunk-O2U2LO57.js +466 -0
  121. package/dist/chunks/chunk-OOQG7UPP.js +457 -0
  122. package/dist/chunks/chunk-OZQAW5ZG.js +112 -0
  123. package/dist/chunks/chunk-P2CVDGHR.js +487 -0
  124. package/dist/chunks/chunk-P44RIZ7C.js +592 -0
  125. package/dist/chunks/chunk-PEZCT37T.js +1475 -0
  126. package/dist/chunks/chunk-PKWSAW6O.js +152 -0
  127. package/dist/chunks/chunk-Q6MDDZMT.js +4373 -0
  128. package/dist/chunks/chunk-QDE4Z7KW.js +6 -0
  129. package/dist/chunks/chunk-QJDAVSNY.js +8 -0
  130. package/dist/chunks/chunk-QYPORSLO.js +7552 -0
  131. package/dist/chunks/chunk-R4QGNK34.js +183 -0
  132. package/dist/chunks/chunk-REEYC73I.js +3002 -0
  133. package/dist/chunks/chunk-SEWDMQ6Q.js +46 -0
  134. package/dist/chunks/chunk-TAIUWKZB.js +3057 -0
  135. package/dist/chunks/chunk-TN4YZ3O7.js +196 -0
  136. package/dist/chunks/chunk-TRMFB43C.js +143 -0
  137. package/dist/chunks/chunk-VO4QXG2X.js +1016 -0
  138. package/dist/chunks/chunk-VP2P3BPA.js +1002 -0
  139. package/dist/chunks/chunk-VQ7H33J4.js +2176 -0
  140. package/dist/chunks/chunk-VWA7MCV2.js +105 -0
  141. package/dist/chunks/chunk-XAV22WD7.js +253 -0
  142. package/dist/chunks/chunk-YSPBPZDV.js +148 -0
  143. package/dist/chunks/chunk-ZKEGXO73.js +282 -0
  144. package/dist/chunks/chunk-ZMGN6F3S.js +4256 -0
  145. package/dist/chunks/grammar-diagrams-AI7VDXOM.js +14 -0
  146. package/dist/chunks/index.min-ECJD6GZC.js +37 -0
  147. package/dist/chunks/manifest-EPTR5MYH.js +21 -0
  148. package/dist/chunks/openapi-document-6TCGVDUW.js +69 -0
  149. package/dist/chunks/registry-K2U5KUTY.js +23 -0
  150. package/dist/chunks/serialization-node-UGY6CFH6.js +38 -0
  151. package/dist/chunks/validate-GEKSZPIN.js +24 -0
  152. package/dist/chunks/validation-registry-IQZX3UE3.js +7 -0
  153. package/dist/chunks/validator-VXFHLPDW.js +26 -0
  154. package/dist/chunks/workflow-executor-KBGFKHNR.js +36 -0
  155. package/dist/cli/commands/agents.d.ts +16 -0
  156. package/dist/cli/commands/artifact.d.ts +10 -0
  157. package/dist/cli/commands/compile.d.ts +0 -30
  158. package/dist/cli/commands/console.d.ts +32 -0
  159. package/dist/cli/commands/context.d.ts +0 -3
  160. package/dist/cli/commands/describe.js +386 -352
  161. package/dist/cli/commands/dev.d.ts +9 -4
  162. package/dist/cli/commands/diagram.d.ts +3 -5
  163. package/dist/cli/commands/doctor.d.ts +27 -4
  164. package/dist/cli/commands/doctor.js +3307 -633
  165. package/dist/cli/commands/export.d.ts +6 -4
  166. package/dist/cli/commands/grammar.d.ts +0 -3
  167. package/dist/cli/commands/implement.d.ts +1 -1
  168. package/dist/cli/commands/init/agent-handoff.d.ts +28 -0
  169. package/dist/cli/commands/init/config.d.ts +3 -0
  170. package/dist/cli/commands/init/files.d.ts +12 -0
  171. package/dist/cli/commands/init/naming.d.ts +13 -0
  172. package/dist/cli/commands/init/output.d.ts +12 -0
  173. package/dist/cli/commands/init/setup.d.ts +21 -0
  174. package/dist/cli/commands/init/types.d.ts +53 -0
  175. package/dist/cli/commands/init-personas.d.ts +9 -1
  176. package/dist/cli/commands/init.d.ts +24 -88
  177. package/dist/cli/commands/market.d.ts +1 -1
  178. package/dist/cli/commands/mcp-setup.d.ts +1 -4
  179. package/dist/cli/commands/modify.d.ts +0 -5
  180. package/dist/cli/commands/openapi.d.ts +9 -11
  181. package/dist/cli/commands/run.d.ts +0 -4
  182. package/dist/cli/commands/serve.d.ts +24 -26
  183. package/dist/cli/commands/status.d.ts +1 -1
  184. package/dist/cli/exports.d.ts +3 -4
  185. package/dist/cli/exports.js +124 -23
  186. package/dist/cli/flow-weaver-agents-H653446S.mjs +81 -0
  187. package/dist/cli/flow-weaver-artifact-WBFYTW76.mjs +58 -0
  188. package/dist/cli/flow-weaver-chunk-265CEK74.mjs +2 -0
  189. package/dist/cli/flow-weaver-chunk-2C7PZCV5.mjs +186 -0
  190. package/dist/cli/flow-weaver-chunk-3BSYCWPL.mjs +3109 -0
  191. package/dist/cli/flow-weaver-chunk-3MKUQP3D.mjs +547 -0
  192. package/dist/cli/flow-weaver-chunk-3ZLMPQTH.mjs +27 -0
  193. package/dist/cli/flow-weaver-chunk-4DVY73ML.mjs +280 -0
  194. package/dist/cli/flow-weaver-chunk-54M4KNEL.mjs +200 -0
  195. package/dist/cli/flow-weaver-chunk-55QMUZIA.mjs +256 -0
  196. package/dist/cli/flow-weaver-chunk-6ZUJ7LMX.mjs +2003 -0
  197. package/dist/cli/flow-weaver-chunk-7ET6N32V.mjs +419 -0
  198. package/dist/cli/flow-weaver-chunk-7G63RR4K.mjs +8880 -0
  199. package/dist/cli/flow-weaver-chunk-A6M5K3W7.mjs +4418 -0
  200. package/dist/cli/flow-weaver-chunk-AA3NATMX.mjs +154 -0
  201. package/dist/cli/flow-weaver-chunk-APX6MQ5A.mjs +5652 -0
  202. package/dist/cli/flow-weaver-chunk-BHCC5FE5.mjs +17 -0
  203. package/dist/cli/flow-weaver-chunk-DM4BBRRU.mjs +35 -0
  204. package/dist/cli/flow-weaver-chunk-DRN7KPWY.mjs +168 -0
  205. package/dist/cli/flow-weaver-chunk-EKWF27G6.mjs +23 -0
  206. package/dist/cli/flow-weaver-chunk-EM5HWQ4R.mjs +338 -0
  207. package/dist/cli/flow-weaver-chunk-FPPPU2DG.mjs +226 -0
  208. package/dist/cli/flow-weaver-chunk-GAQXZHNO.mjs +3005 -0
  209. package/dist/cli/flow-weaver-chunk-GBUNNP33.mjs +1329 -0
  210. package/dist/cli/flow-weaver-chunk-HMAKDE55.mjs +636 -0
  211. package/dist/cli/flow-weaver-chunk-HQ3ZAN44.mjs +367 -0
  212. package/dist/cli/flow-weaver-chunk-I4APCXYN.mjs +21442 -0
  213. package/dist/cli/flow-weaver-chunk-IJJ4JXTL.mjs +2297 -0
  214. package/dist/cli/flow-weaver-chunk-J7EPZW2I.mjs +33 -0
  215. package/dist/cli/flow-weaver-chunk-KOEMJHLG.mjs +83 -0
  216. package/dist/cli/flow-weaver-chunk-M6CBWQKJ.mjs +271 -0
  217. package/dist/cli/flow-weaver-chunk-MHJ4N652.mjs +1580 -0
  218. package/dist/cli/flow-weaver-chunk-MKAFQWLP.mjs +202 -0
  219. package/dist/cli/flow-weaver-chunk-MMV2XGD3.mjs +3291 -0
  220. package/dist/cli/flow-weaver-chunk-MSI2UJES.mjs +125 -0
  221. package/dist/cli/flow-weaver-chunk-N767YRAI.mjs +48 -0
  222. package/dist/cli/flow-weaver-chunk-NQKKWDGF.mjs +56 -0
  223. package/dist/cli/flow-weaver-chunk-NYZDQYFU.mjs +45 -0
  224. package/dist/cli/flow-weaver-chunk-OMVWSNHJ.mjs +14 -0
  225. package/dist/cli/flow-weaver-chunk-PUWZ47H5.mjs +2188 -0
  226. package/dist/cli/flow-weaver-chunk-QOPRVDES.mjs +46 -0
  227. package/dist/cli/flow-weaver-chunk-RIWE7YTR.mjs +216 -0
  228. package/dist/cli/flow-weaver-chunk-S63Q3JIU.mjs +789 -0
  229. package/dist/cli/flow-weaver-chunk-T7X5A23H.mjs +558 -0
  230. package/dist/cli/flow-weaver-chunk-TLV3VZUN.mjs +2 -0
  231. package/dist/cli/flow-weaver-chunk-TS5P3PIN.mjs +194 -0
  232. package/dist/cli/flow-weaver-chunk-U3EO3X4B.mjs +649 -0
  233. package/dist/cli/flow-weaver-chunk-UNFS3NQP.mjs +34 -0
  234. package/dist/cli/flow-weaver-chunk-V6DHWFQG.mjs +2811 -0
  235. package/dist/cli/flow-weaver-chunk-VXWNLYQU.mjs +9 -0
  236. package/dist/cli/flow-weaver-chunk-W3YNK26P.mjs +149 -0
  237. package/dist/cli/flow-weaver-chunk-XG2WKXYZ.mjs +324 -0
  238. package/dist/cli/flow-weaver-chunk-YLSRZWFK.mjs +2219 -0
  239. package/dist/cli/flow-weaver-chunk-YVPURWS6.mjs +40 -0
  240. package/dist/cli/flow-weaver-chunk-Z44JK332.mjs +582 -0
  241. package/dist/cli/flow-weaver-chunk-Z5ZJPNSY.mjs +517 -0
  242. package/dist/cli/flow-weaver-chunk-ZQALO25T.mjs +594 -0
  243. package/dist/cli/flow-weaver-compile-A2CABDSB.mjs +37 -0
  244. package/dist/cli/flow-weaver-console-6EBHDBTN.mjs +71 -0
  245. package/dist/cli/flow-weaver-context-ECLYANFF.mjs +17 -0
  246. package/dist/cli/flow-weaver-context-ZRUMW2KE.mjs +69 -0
  247. package/dist/cli/flow-weaver-create-WIP4EFNP.mjs +124 -0
  248. package/dist/cli/flow-weaver-deployment-WJJRK7NO.mjs +14 -0
  249. package/dist/cli/flow-weaver-describe-XDIFF5LI.mjs +41 -0
  250. package/dist/cli/flow-weaver-dev-LG2NSQAU.mjs +196 -0
  251. package/dist/cli/flow-weaver-diagram-3EVQARQE.mjs +52 -0
  252. package/dist/cli/flow-weaver-diagram-7LR7O4M2.mjs +44 -0
  253. package/dist/cli/flow-weaver-diff-USF7DJLU.mjs +85 -0
  254. package/dist/cli/flow-weaver-docs-QU2ZOXKH.mjs +96 -0
  255. package/dist/cli/flow-weaver-doctor-K447YWHR.mjs +43 -0
  256. package/dist/cli/flow-weaver-export-LAS6N56Y.mjs +140 -0
  257. package/dist/cli/flow-weaver-grammar-RIRUS3Q6.mjs +49 -0
  258. package/dist/cli/flow-weaver-grammar-diagrams-WXRTW5SK.mjs +15 -0
  259. package/dist/cli/flow-weaver-implement-5JG6BCFZ.mjs +114 -0
  260. package/dist/cli/flow-weaver-index.min-OR5SIHXD.mjs +39 -0
  261. package/dist/cli/flow-weaver-init-34YZNPQX.mjs +972 -0
  262. package/dist/cli/flow-weaver-init-personas-NOGZTQQ2.mjs +48 -0
  263. package/dist/cli/flow-weaver-manifest-4JNUSEB3.mjs +18 -0
  264. package/dist/cli/flow-weaver-market-WA4CKHKV.mjs +444 -0
  265. package/dist/cli/flow-weaver-mcp-setup-O26MGXSD.mjs +22 -0
  266. package/dist/cli/flow-weaver-migrate-VFVEUTPH.mjs +119 -0
  267. package/dist/cli/flow-weaver-modify-VM3JP5K6.mjs +97 -0
  268. package/dist/cli/flow-weaver-openapi-IRBWI3HM.mjs +71 -0
  269. package/dist/cli/flow-weaver-openapi-document-7N6YMPG3.mjs +30 -0
  270. package/dist/cli/flow-weaver-pack-commands-OS2QRXAK.mjs +146 -0
  271. package/dist/cli/flow-weaver-registry-5MLFRPPT.mjs +25 -0
  272. package/dist/cli/flow-weaver-run-DSTLSTHR.mjs +555 -0
  273. package/dist/cli/flow-weaver-serialization-node-LE6PCG4M.mjs +50 -0
  274. package/dist/cli/flow-weaver-serve-NVLCLSOW.mjs +192 -0
  275. package/dist/cli/flow-weaver-server-7IERLVXE.mjs +2925 -0
  276. package/dist/cli/flow-weaver-server-KWF4PXYC.mjs +19112 -0
  277. package/dist/cli/flow-weaver-status-75W2S3YB.mjs +138 -0
  278. package/dist/cli/flow-weaver-strip-AZPXUYVA.mjs +79 -0
  279. package/dist/cli/flow-weaver-templates-DSNMB6K7.mjs +72 -0
  280. package/dist/cli/flow-weaver-validate-A4UWDQN6.mjs +19 -0
  281. package/dist/cli/flow-weaver-validate-GRBZ5W4C.mjs +296 -0
  282. package/dist/cli/flow-weaver-validation-registry-BINGUNXX.mjs +9 -0
  283. package/dist/cli/flow-weaver-validator-TY56CI42.mjs +21 -0
  284. package/dist/cli/flow-weaver-watch-OPPERXL6.mjs +114 -0
  285. package/dist/cli/flow-weaver-workflow-executor-6AHYPXAN.mjs +26 -0
  286. package/dist/cli/flow-weaver.mjs +3557 -89498
  287. package/dist/cli/index.d.ts +5 -2
  288. package/dist/cli/pack-commands-needed.d.ts +12 -0
  289. package/dist/cli/program.d.ts +14 -0
  290. package/dist/cli/templates/ai/mock-provider.d.ts +1 -1
  291. package/dist/cli/templates/index.d.ts +1 -8
  292. package/dist/cli/templates/nodes/agent-router.d.ts +1 -1
  293. package/dist/cli/templates/nodes/aggregator.d.ts +1 -1
  294. package/dist/cli/templates/nodes/conversation-memory.d.ts +1 -1
  295. package/dist/cli/templates/nodes/http.d.ts +1 -1
  296. package/dist/cli/templates/nodes/human-approval.d.ts +1 -1
  297. package/dist/cli/templates/nodes/json-extractor.d.ts +1 -1
  298. package/dist/cli/templates/nodes/llm-call.d.ts +1 -1
  299. package/dist/cli/templates/nodes/prompt-template.d.ts +1 -1
  300. package/dist/cli/templates/nodes/rag-retriever.d.ts +1 -1
  301. package/dist/cli/templates/nodes/tool-executor.d.ts +1 -1
  302. package/dist/cli/templates/nodes/transformer.d.ts +1 -1
  303. package/dist/cli/templates/nodes/validator.d.ts +1 -1
  304. package/dist/cli/templates/shared/approval-types.d.ts +1 -1
  305. package/dist/cli/templates/shared/case.d.ts +14 -0
  306. package/dist/cli/templates/shared/llm-types.d.ts +4 -4
  307. package/dist/cli/templates/workflows/aggregator.d.ts +1 -1
  308. package/dist/cli/templates/workflows/ai-agent.d.ts +1 -1
  309. package/dist/cli/templates/workflows/ai-chat.d.ts +1 -1
  310. package/dist/cli/templates/workflows/ai-rag.d.ts +1 -1
  311. package/dist/cli/templates/workflows/ai-react.d.ts +1 -1
  312. package/dist/cli/templates/workflows/approval.d.ts +10 -0
  313. package/dist/cli/templates/workflows/conditional.d.ts +2 -2
  314. package/dist/cli/templates/workflows/error-handler.d.ts +2 -2
  315. package/dist/cli/templates/workflows/foreach.d.ts +1 -1
  316. package/dist/cli/templates/workflows/sequential.d.ts +1 -1
  317. package/dist/cli/templates/workflows/webhook.d.ts +1 -1
  318. package/dist/cli/utils/interactive.d.ts +6 -0
  319. package/dist/cli/utils/json-option.d.ts +8 -0
  320. package/dist/cli/utils/logger.d.ts +2 -0
  321. package/dist/compiler/durable-source-proof.d.ts +23 -0
  322. package/dist/compiler/executable-artifact.d.ts +29 -0
  323. package/dist/compiler/index.d.ts +4 -0
  324. package/dist/compiler/index.js +36 -0
  325. package/dist/console/app.js +106 -0
  326. package/dist/console/assets/synergenius.svg +18 -0
  327. package/dist/console/author.d.ts +32 -0
  328. package/dist/console/cli-catalog.d.ts +21 -0
  329. package/dist/console/cli-run.d.ts +35 -0
  330. package/dist/console/cli-run.js +46 -0
  331. package/dist/console/debug.d.ts +67 -0
  332. package/dist/console/diff-view.d.ts +96 -0
  333. package/dist/console/export.d.ts +36 -0
  334. package/dist/console/git.d.ts +27 -0
  335. package/dist/console/index.d.ts +4 -0
  336. package/dist/console/index.html +16 -0
  337. package/dist/console/index.js +203 -0
  338. package/dist/console/packs.d.ts +100 -0
  339. package/dist/console/request-guard.d.ts +10 -0
  340. package/dist/console/respond.d.ts +16 -0
  341. package/dist/console/router.d.ts +64 -0
  342. package/dist/console/routes-agents.d.ts +14 -0
  343. package/dist/console/routes-project.d.ts +3 -0
  344. package/dist/console/routes-runs.d.ts +3 -0
  345. package/dist/console/routes-services.d.ts +7 -0
  346. package/dist/console/routes-tools.d.ts +3 -0
  347. package/dist/console/runs.d.ts +69 -0
  348. package/dist/console/scan.d.ts +49 -0
  349. package/dist/console/schema.d.ts +74 -0
  350. package/dist/console/server.d.ts +34 -0
  351. package/dist/console/server.js +43264 -0
  352. package/dist/console/services.d.ts +119 -0
  353. package/dist/console/source.d.ts +23 -0
  354. package/dist/console/status.d.ts +68 -0
  355. package/dist/console/styles.css +1023 -0
  356. package/dist/console/terminals.d.ts +22 -0
  357. package/dist/console/workflow-view.d.ts +153 -0
  358. package/dist/constants.d.ts +5 -1
  359. package/dist/constants.js +56 -167
  360. package/dist/context/index.d.ts +10 -0
  361. package/dist/context/index.js +14 -191
  362. package/dist/coordinator/agent-gate.d.ts +107 -0
  363. package/dist/coordinator/bundle-digest.d.ts +20 -0
  364. package/dist/coordinator/clock-tick.d.ts +4 -0
  365. package/dist/coordinator/effect-receipts.d.ts +10 -0
  366. package/dist/coordinator/errors.d.ts +31 -0
  367. package/dist/coordinator/file-store.d.ts +3 -0
  368. package/dist/coordinator/gate-labeling.d.ts +33 -0
  369. package/dist/coordinator/gate-resolution.d.ts +28 -0
  370. package/dist/coordinator/index.d.ts +12 -0
  371. package/dist/coordinator/index.js +107 -0
  372. package/dist/coordinator/memory-store.d.ts +3 -0
  373. package/dist/coordinator/params.d.ts +18 -0
  374. package/dist/coordinator/run-annotations.d.ts +6 -0
  375. package/dist/coordinator/run-context.d.ts +11 -0
  376. package/dist/coordinator/run-ending.d.ts +5 -0
  377. package/dist/coordinator/run-outcome.d.ts +31 -0
  378. package/dist/coordinator/run-resume.d.ts +6 -0
  379. package/dist/coordinator/run-start.d.ts +4 -0
  380. package/dist/coordinator/run-store.d.ts +275 -0
  381. package/dist/coordinator/run-trace.d.ts +41 -0
  382. package/dist/coordinator/run-views.d.ts +12 -0
  383. package/dist/coordinator/runs-dir.d.ts +26 -0
  384. package/dist/coordinator/store.d.ts +67 -0
  385. package/dist/coordinator/time.d.ts +39 -0
  386. package/dist/coordinator/workflow-selection.d.ts +6 -0
  387. package/dist/deployment/index.d.ts +11 -16
  388. package/dist/deployment/index.js +541 -50
  389. package/dist/deployment/targets/base.d.ts +11 -13
  390. package/dist/deployment/targets/openapi-parts.d.ts +92 -0
  391. package/dist/diagram/arms.d.ts +70 -0
  392. package/dist/diagram/ascii-renderer.d.ts +1 -1
  393. package/dist/diagram/geometry.d.ts +22 -29
  394. package/dist/diagram/graph/bounds.d.ts +30 -0
  395. package/dist/diagram/graph/metrics.d.ts +21 -0
  396. package/dist/diagram/graph/nodes.d.ts +33 -0
  397. package/dist/diagram/graph/placement.d.ts +22 -0
  398. package/dist/diagram/graph/ports.d.ts +23 -0
  399. package/dist/diagram/graph/routing.d.ts +40 -0
  400. package/dist/diagram/graph/scopes.d.ts +30 -0
  401. package/dist/diagram/index.d.ts +15 -23
  402. package/dist/diagram/index.js +632 -111
  403. package/dist/diagram/labels.d.ts +12 -0
  404. package/dist/diagram/lanes.d.ts +93 -0
  405. package/dist/diagram/layout.d.ts +1 -1
  406. package/dist/diagram/material-symbols.d.ts +7 -0
  407. package/dist/diagram/orthogonal-router.d.ts +15 -51
  408. package/dist/diagram/process-view.d.ts +79 -0
  409. package/dist/diagram/spine.d.ts +25 -0
  410. package/dist/diagram/theme.d.ts +3 -5
  411. package/dist/diagram/types.d.ts +6 -20
  412. package/dist/diff/index.js +53 -9
  413. package/dist/diff/types.d.ts +1 -5
  414. package/dist/doc-metadata/extractors/annotations.d.ts +0 -4
  415. package/dist/doc-metadata/extractors/cli-commands.d.ts +2 -1
  416. package/dist/doc-metadata/extractors/core-metadata.d.ts +19 -4
  417. package/dist/doc-metadata/extractors/error-codes.d.ts +1 -1
  418. package/dist/doc-metadata/extractors/mcp-tools.d.ts +7 -3
  419. package/dist/doc-metadata/index.d.ts +1 -2
  420. package/dist/doc-metadata/index.js +2368 -9
  421. package/dist/doc-metadata/types.d.ts +7 -24
  422. package/dist/docs/guide.d.ts +33 -0
  423. package/dist/docs/index.d.ts +7 -4
  424. package/dist/docs/index.js +298 -298
  425. package/dist/docs/pack-topics.d.ts +18 -0
  426. package/dist/editor-completions/annotationValues.d.ts +1 -1
  427. package/dist/editor-completions/contextParser.d.ts +3 -2
  428. package/dist/editor-completions/dataTypes.d.ts +1 -1
  429. package/dist/editor-completions/goToDefinition.d.ts +1 -1
  430. package/dist/editor-completions/index.d.ts +8 -8
  431. package/dist/editor-completions/index.js +1244 -175
  432. package/dist/editor-completions/jsDocAnnotations.d.ts +1 -1
  433. package/dist/editor-completions/modifierCompletions.d.ts +1 -1
  434. package/dist/export/index.d.ts +7 -1
  435. package/dist/generated-branding.js +8 -21
  436. package/dist/generated-version.d.ts +1 -1
  437. package/dist/generated-version.js +7 -3
  438. package/dist/generator/annotation-generator.d.ts +84 -0
  439. package/dist/generator/async-detection.d.ts +1 -1
  440. package/dist/{body-generator.d.ts → generator/body-generator.d.ts} +7 -3
  441. package/dist/generator/code-utils.d.ts +15 -60
  442. package/dist/generator/connection-reads.d.ts +94 -0
  443. package/dist/generator/control-flow-plan.d.ts +74 -0
  444. package/dist/generator/control-flow.d.ts +1 -1
  445. package/dist/generator/exit-assembly.d.ts +11 -0
  446. package/dist/generator/index.d.ts +4 -5
  447. package/dist/generator/index.js +34 -11
  448. package/dist/generator/input-port-values.d.ts +22 -0
  449. package/dist/generator/{scope-function-generator.d.ts → node-arguments.d.ts} +76 -1
  450. package/dist/generator/node-invocation.d.ts +74 -0
  451. package/dist/{node-types-generator.d.ts → generator/node-types-generator.d.ts} +3 -2
  452. package/dist/generator/scope-closure.d.ts +23 -0
  453. package/dist/generator/scoped-child.d.ts +49 -0
  454. package/dist/{sugar-optimizer.d.ts → generator/sugar-optimizer.d.ts} +1 -1
  455. package/dist/generator/unified.d.ts +14 -2
  456. package/dist/generator/workflow-generator.d.ts +37 -0
  457. package/dist/index.d.ts +29 -26
  458. package/dist/index.js +1322 -92
  459. package/dist/jsdoc-port-sync/apply-diff.d.ts +15 -0
  460. package/dist/jsdoc-port-sync/callback-signature.d.ts +17 -0
  461. package/dist/jsdoc-port-sync/diff.d.ts +5 -7
  462. package/dist/jsdoc-port-sync/incomplete-lines.d.ts +41 -0
  463. package/dist/jsdoc-port-sync/index.d.ts +11 -11
  464. package/dist/jsdoc-port-sync/index.js +88 -45
  465. package/dist/jsdoc-port-sync/jsdoc-to-signature.d.ts +66 -0
  466. package/dist/jsdoc-port-sync/port-parser.d.ts +6 -24
  467. package/dist/jsdoc-port-sync/port-tag-placement.d.ts +55 -0
  468. package/dist/jsdoc-port-sync/scoped-ports.d.ts +21 -0
  469. package/dist/jsdoc-port-sync/signature-parser.d.ts +8 -1
  470. package/dist/jsdoc-port-sync/signature-to-jsdoc.d.ts +77 -0
  471. package/dist/jsdoc-port-sync/sync.d.ts +4 -1
  472. package/dist/marketplace/index.d.ts +5 -3
  473. package/dist/marketplace/index.js +62 -10
  474. package/dist/marketplace/install.d.ts +24 -0
  475. package/dist/marketplace/manifest.d.ts +1 -1
  476. package/dist/marketplace/npmrc.d.ts +24 -0
  477. package/dist/marketplace/registry.d.ts +46 -11
  478. package/dist/marketplace/types.d.ts +41 -24
  479. package/dist/marketplace/validator.d.ts +1 -1
  480. package/dist/mcp/debug-session.d.ts +2 -4
  481. package/dist/mcp/dist-imports.d.ts +12 -0
  482. package/dist/mcp/response-utils.d.ts +11 -9
  483. package/dist/mcp/server.d.ts +0 -1
  484. package/dist/mcp/tools-context.d.ts +11 -0
  485. package/dist/mcp/tools-diagram.d.ts +1 -2
  486. package/dist/mcp/tools-export.d.ts +2 -2
  487. package/dist/mcp/tools-marketplace.d.ts +1 -1
  488. package/dist/mcp/tools-run.d.ts +17 -0
  489. package/dist/mcp/tools-workflow.d.ts +3 -0
  490. package/dist/mcp/types.d.ts +4 -14
  491. package/dist/mcp/workflow-executor.d.ts +57 -19
  492. package/dist/npm-packages.d.ts +1 -1
  493. package/dist/npm-packages.js +10 -473
  494. package/dist/parser/annotation-parser.d.ts +88 -0
  495. package/dist/parser/annotation-suggestion.d.ts +23 -0
  496. package/dist/parser/durable-effect-contract.d.ts +10 -0
  497. package/dist/parser/expression-references.d.ts +101 -0
  498. package/dist/parser/external-node-types.d.ts +69 -0
  499. package/dist/{function-like.d.ts → parser/function-like.d.ts} +10 -3
  500. package/dist/parser/generated-sections.d.ts +25 -0
  501. package/dist/parser/import-resolution.d.ts +67 -0
  502. package/dist/parser/import-stub.d.ts +29 -0
  503. package/dist/parser/jsdoc/config-types.d.ts +209 -0
  504. package/dist/parser/jsdoc/graph-tags.d.ts +54 -0
  505. package/dist/parser/jsdoc/node-type-block.d.ts +23 -0
  506. package/dist/parser/jsdoc/parse-line-once.d.ts +11 -0
  507. package/dist/parser/jsdoc/port-tags.d.ts +42 -0
  508. package/dist/parser/jsdoc/runtime-tags.d.ts +65 -0
  509. package/dist/parser/jsdoc/signature-types.d.ts +52 -0
  510. package/dist/parser/jsdoc/workflow-block.d.ts +22 -0
  511. package/dist/parser/jsdoc-parser.d.ts +23 -0
  512. package/dist/parser/macro-expansion.d.ts +80 -0
  513. package/dist/parser/module-resolution.d.ts +38 -0
  514. package/dist/parser/node-inference.d.ts +39 -0
  515. package/dist/parser/npm-node-types.d.ts +24 -0
  516. package/dist/parser/pack-handlers.d.ts +12 -0
  517. package/dist/parser/path-data-resolution.d.ts +75 -0
  518. package/dist/parser/port-inference.d.ts +15 -0
  519. package/dist/{resolve-package-types.d.ts → parser/resolve-package-types.d.ts} +4 -0
  520. package/dist/parser/serialize-deploy-annotations.d.ts +19 -0
  521. package/dist/parser/tag-registry.d.ts +22 -0
  522. package/dist/parser/workflow-extraction.d.ts +39 -0
  523. package/dist/runtime/ExecutionContext.d.ts +87 -99
  524. package/dist/runtime/continuation-core.d.ts +147 -0
  525. package/dist/runtime/continuation.d.ts +48 -0
  526. package/dist/runtime/debug-controller.d.ts +7 -22
  527. package/dist/runtime/durable-execution.d.ts +176 -0
  528. package/dist/runtime/events.d.ts +16 -1
  529. package/dist/runtime/executable-module-contract.d.ts +16 -0
  530. package/dist/runtime/index.d.ts +13 -10
  531. package/dist/runtime/index.js +947 -9
  532. package/dist/runtime/strict-json.d.ts +15 -0
  533. package/dist/server/access.d.ts +12 -0
  534. package/dist/server/api.d.ts +126 -0
  535. package/dist/server/callback-delivery.d.ts +62 -0
  536. package/dist/server/callback-url.d.ts +44 -0
  537. package/dist/server/context.d.ts +35 -0
  538. package/dist/server/http-error.d.ts +10 -0
  539. package/dist/server/index.d.ts +7 -1
  540. package/dist/server/index.js +125 -6
  541. package/dist/server/openapi-document.d.ts +33 -0
  542. package/dist/server/openapi.d.ts +32 -0
  543. package/dist/server/respond.d.ts +35 -0
  544. package/dist/server/route-params.d.ts +17 -0
  545. package/dist/server/route-plan.d.ts +41 -0
  546. package/dist/server/routes-catalog.d.ts +5 -0
  547. package/dist/server/routes-declared.d.ts +12 -0
  548. package/dist/server/routes-runs.d.ts +8 -0
  549. package/dist/server/run-driver.d.ts +58 -0
  550. package/dist/server/run-view.d.ts +26 -0
  551. package/dist/server/transport.d.ts +35 -0
  552. package/dist/server/types.d.ts +143 -52
  553. package/dist/server/webhook-server.d.ts +12 -38
  554. package/dist/server/workflow-registry.d.ts +7 -4
  555. package/dist/service-registry.d.ts +49 -0
  556. package/dist/service-registry.js +123 -0
  557. package/dist/testing/assertions.d.ts +2 -2
  558. package/dist/testing/index.d.ts +14 -13
  559. package/dist/testing/index.js +582 -24
  560. package/dist/testing/mock-approval.d.ts +3 -5
  561. package/dist/testing/mock-llm.d.ts +2 -3
  562. package/dist/testing/recorder.d.ts +5 -6
  563. package/dist/testing/replayer.d.ts +6 -7
  564. package/dist/testing/run-store-check.d.ts +3 -0
  565. package/dist/testing/token-tracker.d.ts +2 -2
  566. package/dist/{type-mappings.d.ts → types/type-mappings.d.ts} +13 -1
  567. package/dist/utils/error-utils.d.ts +4 -2
  568. package/dist/utils/port-ordering.d.ts +2 -2
  569. package/dist/utils/port-tag-utils.d.ts +1 -1
  570. package/dist/validation/agent-detection.d.ts +17 -5
  571. package/dist/validation/agent-rules.d.ts +6 -7
  572. package/dist/validation/core-rules.d.ts +49 -0
  573. package/dist/validation/design-rules.d.ts +9 -3
  574. package/dist/validation/rule-registry.d.ts +3 -3
  575. package/dist/validation/rules/connections.d.ts +27 -0
  576. package/dist/validation/rules/context.d.ts +11 -0
  577. package/dist/validation/rules/cycles.d.ts +17 -0
  578. package/dist/validation/rules/data-flow.d.ts +19 -0
  579. package/dist/validation/rules/scope-topology.d.ts +35 -0
  580. package/dist/validation/rules/type-compatibility.d.ts +30 -0
  581. package/dist/validation/type-checker.d.ts +39 -0
  582. package/dist/validation/validator-helpers.d.ts +31 -0
  583. package/dist/validation/validator.d.ts +30 -0
  584. package/docs/reference/advanced-annotations.md +277 -60
  585. package/docs/reference/built-in-nodes.md +164 -94
  586. package/docs/reference/cancellation.md +44 -0
  587. package/docs/reference/cli-reference.md +252 -234
  588. package/docs/reference/compilation.md +36 -109
  589. package/docs/reference/concepts.md +80 -63
  590. package/docs/reference/console.md +169 -0
  591. package/docs/reference/debugging.md +26 -57
  592. package/docs/reference/deployment.md +217 -143
  593. package/docs/reference/durable-gates.md +445 -0
  594. package/docs/reference/error-codes.md +90 -43
  595. package/docs/reference/export-interface.md +91 -26
  596. package/docs/reference/iterative-development.md +50 -28
  597. package/docs/reference/jsdoc-grammar.md +66 -311
  598. package/docs/reference/library.md +250 -0
  599. package/docs/reference/marketplace.md +301 -152
  600. package/docs/reference/mcp-tools.md +102 -0
  601. package/docs/reference/node-conversion.md +84 -59
  602. package/docs/reference/orientation.md +68 -0
  603. package/docs/reference/scaffold.md +5 -4
  604. package/docs/reference/tutorial.md +106 -166
  605. package/docs/reference/visual-reference.md +1 -1
  606. package/package.json +85 -50
  607. package/dist/agent/agent-loop.js +0 -156
  608. package/dist/agent/cli-spawn-config.js +0 -65
  609. package/dist/agent/device-connection.d.ts +0 -79
  610. package/dist/agent/device-connection.js +0 -184
  611. package/dist/agent/env-allowlist.js +0 -60
  612. package/dist/agent/providers/anthropic.js +0 -198
  613. package/dist/agent/providers/claude-cli.js +0 -161
  614. package/dist/agent/providers/openai-compat.js +0 -205
  615. package/dist/agent/providers/platform.d.ts +0 -23
  616. package/dist/agent/providers/platform.js +0 -132
  617. package/dist/agent/streaming.js +0 -186
  618. package/dist/agent/types.js +0 -20
  619. package/dist/annotation-generator.d.ts +0 -50
  620. package/dist/annotation-generator.js +0 -743
  621. package/dist/api/builder.js +0 -345
  622. package/dist/api/command-runner.js +0 -787
  623. package/dist/api/compile.js +0 -148
  624. package/dist/api/extract-types.js +0 -57
  625. package/dist/api/generate-in-place.js +0 -1477
  626. package/dist/api/generate.js +0 -514
  627. package/dist/api/helpers.js +0 -285
  628. package/dist/api/inline-runtime.js +0 -526
  629. package/dist/api/manipulation/connections.js +0 -151
  630. package/dist/api/manipulation/index.js +0 -41
  631. package/dist/api/manipulation/node-types.js +0 -200
  632. package/dist/api/manipulation/nodes.js +0 -355
  633. package/dist/api/manipulation/ports.js +0 -228
  634. package/dist/api/manipulation/scopes.js +0 -156
  635. package/dist/api/manipulation/workflow.js +0 -116
  636. package/dist/api/modify-operation.js +0 -177
  637. package/dist/api/parse.js +0 -115
  638. package/dist/api/patterns.d.ts +0 -112
  639. package/dist/api/patterns.js +0 -303
  640. package/dist/api/query.js +0 -840
  641. package/dist/api/templates.js +0 -117
  642. package/dist/api/transform.js +0 -40
  643. package/dist/api/validate.js +0 -64
  644. package/dist/api/validation-registry.js +0 -10
  645. package/dist/api/workflow-file-operations.js +0 -180
  646. package/dist/ast/builder.js +0 -395
  647. package/dist/ast/serialization-node.js +0 -30
  648. package/dist/ast/serialization.js +0 -134
  649. package/dist/ast/types.js +0 -2
  650. package/dist/ast/workflow-utils.js +0 -114
  651. package/dist/body-generator.js +0 -35
  652. package/dist/built-in-nodes/coercion-types.js +0 -61
  653. package/dist/built-in-nodes/delay.js +0 -29
  654. package/dist/built-in-nodes/generated-registry.js +0 -299
  655. package/dist/built-in-nodes/invoke-workflow.js +0 -36
  656. package/dist/built-in-nodes/mock-types.js +0 -42
  657. package/dist/built-in-nodes/wait-for-agent.js +0 -31
  658. package/dist/built-in-nodes/wait-for-event.js +0 -25
  659. package/dist/chevrotain-parser/coerce-parser.js +0 -103
  660. package/dist/chevrotain-parser/connect-parser.js +0 -136
  661. package/dist/chevrotain-parser/fan-parser.js +0 -149
  662. package/dist/chevrotain-parser/grammar-diagrams.js +0 -273
  663. package/dist/chevrotain-parser/index.js +0 -31
  664. package/dist/chevrotain-parser/map-parser.js +0 -130
  665. package/dist/chevrotain-parser/node-parser.js +0 -558
  666. package/dist/chevrotain-parser/path-parser.js +0 -140
  667. package/dist/chevrotain-parser/port-parser.js +0 -519
  668. package/dist/chevrotain-parser/position-parser.d.ts +0 -20
  669. package/dist/chevrotain-parser/position-parser.js +0 -83
  670. package/dist/chevrotain-parser/scope-parser.js +0 -104
  671. package/dist/chevrotain-parser/tokens.js +0 -429
  672. package/dist/chevrotain-parser/trigger-cancel-parser.js +0 -291
  673. package/dist/cli/commands/account.d.ts +0 -4
  674. package/dist/cli/commands/account.js +0 -50
  675. package/dist/cli/commands/ai-credentials.d.ts +0 -12
  676. package/dist/cli/commands/ai-credentials.js +0 -95
  677. package/dist/cli/commands/apikey.d.ts +0 -4
  678. package/dist/cli/commands/apikey.js +0 -64
  679. package/dist/cli/commands/auth.d.ts +0 -9
  680. package/dist/cli/commands/auth.js +0 -255
  681. package/dist/cli/commands/compile.js +0 -331
  682. package/dist/cli/commands/connect.d.ts +0 -4
  683. package/dist/cli/commands/connect.js +0 -163
  684. package/dist/cli/commands/context.js +0 -51
  685. package/dist/cli/commands/create.js +0 -139
  686. package/dist/cli/commands/deploy.d.ts +0 -6
  687. package/dist/cli/commands/deploy.js +0 -74
  688. package/dist/cli/commands/dev.js +0 -227
  689. package/dist/cli/commands/diagram.js +0 -39
  690. package/dist/cli/commands/diff.js +0 -57
  691. package/dist/cli/commands/docs.js +0 -74
  692. package/dist/cli/commands/export.js +0 -153
  693. package/dist/cli/commands/grammar.js +0 -40
  694. package/dist/cli/commands/implement.js +0 -91
  695. package/dist/cli/commands/init-personas.js +0 -541
  696. package/dist/cli/commands/init.js +0 -797
  697. package/dist/cli/commands/market.js +0 -440
  698. package/dist/cli/commands/mcp-setup.js +0 -433
  699. package/dist/cli/commands/migrate.js +0 -91
  700. package/dist/cli/commands/modify.js +0 -58
  701. package/dist/cli/commands/openapi.js +0 -71
  702. package/dist/cli/commands/org.d.ts +0 -8
  703. package/dist/cli/commands/org.js +0 -136
  704. package/dist/cli/commands/pattern.d.ts +0 -34
  705. package/dist/cli/commands/pattern.js +0 -186
  706. package/dist/cli/commands/plugin.d.ts +0 -16
  707. package/dist/cli/commands/plugin.js +0 -176
  708. package/dist/cli/commands/run.js +0 -742
  709. package/dist/cli/commands/serve.js +0 -93
  710. package/dist/cli/commands/status.js +0 -123
  711. package/dist/cli/commands/strip.js +0 -61
  712. package/dist/cli/commands/templates.js +0 -58
  713. package/dist/cli/commands/validate.js +0 -267
  714. package/dist/cli/commands/watch.js +0 -71
  715. package/dist/cli/config/credentials.d.ts +0 -15
  716. package/dist/cli/config/credentials.js +0 -43
  717. package/dist/cli/config/platform-client.d.ts +0 -123
  718. package/dist/cli/config/platform-client.js +0 -248
  719. package/dist/cli/env-setup.js +0 -12
  720. package/dist/cli/index.js +0 -850
  721. package/dist/cli/pack-commands.js +0 -122
  722. package/dist/cli/postinstall.d.ts +0 -16
  723. package/dist/cli/postinstall.js +0 -119
  724. package/dist/cli/templates/ai/mock-provider.js +0 -64
  725. package/dist/cli/templates/ai/types.js +0 -5
  726. package/dist/cli/templates/approvals/index.d.ts +0 -15
  727. package/dist/cli/templates/approvals/index.js +0 -241
  728. package/dist/cli/templates/index.js +0 -123
  729. package/dist/cli/templates/nodes/agent-router.js +0 -114
  730. package/dist/cli/templates/nodes/aggregator.js +0 -63
  731. package/dist/cli/templates/nodes/conversation-memory.js +0 -85
  732. package/dist/cli/templates/nodes/http.js +0 -80
  733. package/dist/cli/templates/nodes/human-approval.js +0 -109
  734. package/dist/cli/templates/nodes/json-extractor.js +0 -119
  735. package/dist/cli/templates/nodes/llm-call.js +0 -106
  736. package/dist/cli/templates/nodes/prompt-template.js +0 -52
  737. package/dist/cli/templates/nodes/rag-retriever.js +0 -128
  738. package/dist/cli/templates/nodes/tool-executor.js +0 -108
  739. package/dist/cli/templates/nodes/transformer.js +0 -68
  740. package/dist/cli/templates/nodes/validator.js +0 -62
  741. package/dist/cli/templates/pack-loader.js +0 -58
  742. package/dist/cli/templates/providers/index.js +0 -239
  743. package/dist/cli/templates/shared/approval-types.js +0 -31
  744. package/dist/cli/templates/shared/llm-types.js +0 -109
  745. package/dist/cli/templates/workflows/aggregator.js +0 -101
  746. package/dist/cli/templates/workflows/ai-agent.js +0 -326
  747. package/dist/cli/templates/workflows/ai-chat.js +0 -167
  748. package/dist/cli/templates/workflows/ai-rag.js +0 -184
  749. package/dist/cli/templates/workflows/ai-react.js +0 -293
  750. package/dist/cli/templates/workflows/conditional.js +0 -139
  751. package/dist/cli/templates/workflows/error-handler.js +0 -145
  752. package/dist/cli/templates/workflows/foreach.js +0 -140
  753. package/dist/cli/templates/workflows/sequential.js +0 -200
  754. package/dist/cli/templates/workflows/webhook.js +0 -158
  755. package/dist/cli/utils/cli-helpers.d.ts +0 -44
  756. package/dist/cli/utils/cli-helpers.js +0 -99
  757. package/dist/cli/utils/logger.js +0 -126
  758. package/dist/cli/utils/parse-int-strict.js +0 -17
  759. package/dist/cli/utils/safe-write.js +0 -54
  760. package/dist/deployment/config/defaults.d.ts +0 -29
  761. package/dist/deployment/config/defaults.js +0 -98
  762. package/dist/deployment/config/loader.d.ts +0 -24
  763. package/dist/deployment/config/loader.js +0 -237
  764. package/dist/deployment/config/types.d.ts +0 -117
  765. package/dist/deployment/config/types.js +0 -5
  766. package/dist/deployment/core/adapters.d.ts +0 -66
  767. package/dist/deployment/core/adapters.js +0 -156
  768. package/dist/deployment/core/executor.d.ts +0 -62
  769. package/dist/deployment/core/executor.js +0 -197
  770. package/dist/deployment/core/formatters.d.ts +0 -42
  771. package/dist/deployment/core/formatters.js +0 -146
  772. package/dist/deployment/openapi/generator.d.ts +0 -146
  773. package/dist/deployment/openapi/generator.js +0 -347
  774. package/dist/deployment/openapi/schema-converter.d.ts +0 -49
  775. package/dist/deployment/openapi/schema-converter.js +0 -192
  776. package/dist/deployment/targets/base.js +0 -855
  777. package/dist/deployment/types.d.ts +0 -140
  778. package/dist/deployment/types.js +0 -8
  779. package/dist/diagram/ascii-renderer.js +0 -528
  780. package/dist/diagram/geometry.js +0 -1267
  781. package/dist/diagram/html-viewer.d.ts +0 -21
  782. package/dist/diagram/html-viewer.js +0 -1689
  783. package/dist/diagram/layout.js +0 -143
  784. package/dist/diagram/orthogonal-router.js +0 -568
  785. package/dist/diagram/renderer.d.ts +0 -3
  786. package/dist/diagram/renderer.js +0 -266
  787. package/dist/diagram/theme.js +0 -282
  788. package/dist/diagram/types.js +0 -2
  789. package/dist/diff/WorkflowDiffer.js +0 -429
  790. package/dist/diff/formatDiff.js +0 -239
  791. package/dist/diff/impact.js +0 -119
  792. package/dist/diff/types.js +0 -35
  793. package/dist/doc-metadata/extractors/annotations.js +0 -638
  794. package/dist/doc-metadata/extractors/cli-commands.js +0 -326
  795. package/dist/doc-metadata/extractors/core-metadata.js +0 -61
  796. package/dist/doc-metadata/extractors/error-codes.js +0 -372
  797. package/dist/doc-metadata/extractors/grammar-rules.js +0 -51
  798. package/dist/doc-metadata/extractors/mcp-tools.js +0 -705
  799. package/dist/doc-metadata/extractors/plugin-api.d.ts +0 -19
  800. package/dist/doc-metadata/extractors/plugin-api.js +0 -279
  801. package/dist/doc-metadata/types.js +0 -5
  802. package/dist/editor-completions/annotationValues.js +0 -146
  803. package/dist/editor-completions/contextParser.js +0 -410
  804. package/dist/editor-completions/dataTypes.js +0 -95
  805. package/dist/editor-completions/goToDefinition.js +0 -112
  806. package/dist/editor-completions/jsDocAnnotations.js +0 -359
  807. package/dist/editor-completions/modifierCompletions.js +0 -197
  808. package/dist/editor-completions/types.js +0 -8
  809. package/dist/export/index.js +0 -212
  810. package/dist/extensions/index.d.ts +0 -16
  811. package/dist/extensions/index.js +0 -17
  812. package/dist/friendly-errors.js +0 -761
  813. package/dist/function-like.js +0 -84
  814. package/dist/generator/async-detection.js +0 -56
  815. package/dist/generator/code-utils.js +0 -551
  816. package/dist/generator/compile-target-registry.d.ts +0 -20
  817. package/dist/generator/compile-target-registry.js +0 -20
  818. package/dist/generator/control-flow.js +0 -358
  819. package/dist/generator/dev-mode-registry.d.ts +0 -27
  820. package/dist/generator/dev-mode-registry.js +0 -20
  821. package/dist/generator/scope-function-generator.js +0 -397
  822. package/dist/generator/unified.js +0 -1831
  823. package/dist/generator.d.ts +0 -54
  824. package/dist/generator.js +0 -101
  825. package/dist/jsdoc-parser.d.ts +0 -377
  826. package/dist/jsdoc-parser.js +0 -1189
  827. package/dist/jsdoc-port-sync/constants.js +0 -103
  828. package/dist/jsdoc-port-sync/diff.js +0 -319
  829. package/dist/jsdoc-port-sync/port-parser.js +0 -579
  830. package/dist/jsdoc-port-sync/rename.js +0 -256
  831. package/dist/jsdoc-port-sync/signature-parser.js +0 -559
  832. package/dist/jsdoc-port-sync/sync.js +0 -653
  833. package/dist/marketplace/manifest.js +0 -194
  834. package/dist/marketplace/registry.js +0 -198
  835. package/dist/marketplace/types.js +0 -9
  836. package/dist/marketplace/validator.js +0 -150
  837. package/dist/mcp/agent-channel.d.ts +0 -35
  838. package/dist/mcp/agent-channel.js +0 -61
  839. package/dist/mcp/auto-registration.d.ts +0 -3
  840. package/dist/mcp/auto-registration.js +0 -62
  841. package/dist/mcp/debug-session.js +0 -25
  842. package/dist/mcp/index.d.ts +0 -11
  843. package/dist/mcp/index.js +0 -10
  844. package/dist/mcp/pack-tools.js +0 -59
  845. package/dist/mcp/prompts.js +0 -68
  846. package/dist/mcp/response-utils.js +0 -97
  847. package/dist/mcp/run-registry.d.ts +0 -29
  848. package/dist/mcp/run-registry.js +0 -24
  849. package/dist/mcp/server.js +0 -63
  850. package/dist/mcp/tools-context.js +0 -51
  851. package/dist/mcp/tools-debug.js +0 -451
  852. package/dist/mcp/tools-diagram.js +0 -97
  853. package/dist/mcp/tools-docs.js +0 -62
  854. package/dist/mcp/tools-export.js +0 -222
  855. package/dist/mcp/tools-marketplace.js +0 -132
  856. package/dist/mcp/tools-model.d.ts +0 -3
  857. package/dist/mcp/tools-model.js +0 -279
  858. package/dist/mcp/tools-pattern.d.ts +0 -3
  859. package/dist/mcp/tools-pattern.js +0 -604
  860. package/dist/mcp/tools-query.js +0 -377
  861. package/dist/mcp/tools-resources.js +0 -41
  862. package/dist/mcp/tools-template.js +0 -119
  863. package/dist/mcp/tools-workflow-run.d.ts +0 -40
  864. package/dist/mcp/tools-workflow-run.js +0 -150
  865. package/dist/mcp/types.js +0 -2
  866. package/dist/mcp/workflow-executor.js +0 -242
  867. package/dist/migration/registry.js +0 -29
  868. package/dist/node-types-generator.js +0 -139
  869. package/dist/parser/tag-registry.js +0 -57
  870. package/dist/parser.d.ts +0 -232
  871. package/dist/parser.js +0 -2500
  872. package/dist/plugin/PluginPanel.d.ts +0 -12
  873. package/dist/plugin/PluginPanel.js +0 -5
  874. package/dist/plugin/index.d.ts +0 -13
  875. package/dist/plugin/index.js +0 -14
  876. package/dist/plugin/types.d.ts +0 -75
  877. package/dist/plugin/types.js +0 -8
  878. package/dist/resolve-package-types.js +0 -123
  879. package/dist/runtime/CancellationError.js +0 -20
  880. package/dist/runtime/ExecutionContext.js +0 -280
  881. package/dist/runtime/builtin-functions.js +0 -549
  882. package/dist/runtime/checkpoint.d.ts +0 -84
  883. package/dist/runtime/checkpoint.js +0 -225
  884. package/dist/runtime/debug-controller.js +0 -247
  885. package/dist/runtime/events.js +0 -2
  886. package/dist/runtime/function-registry.js +0 -66
  887. package/dist/runtime/parameter-resolver.js +0 -113
  888. package/dist/server/types.js +0 -5
  889. package/dist/server/webhook-server.js +0 -269
  890. package/dist/server/workflow-registry.js +0 -202
  891. package/dist/shared-project.js +0 -28
  892. package/dist/sugar-optimizer.js +0 -498
  893. package/dist/testing/assertions.js +0 -127
  894. package/dist/testing/mock-approval.js +0 -98
  895. package/dist/testing/mock-llm.js +0 -119
  896. package/dist/testing/recorder.js +0 -70
  897. package/dist/testing/replayer.js +0 -143
  898. package/dist/testing/token-tracker.js +0 -94
  899. package/dist/type-checker.d.ts +0 -42
  900. package/dist/type-checker.js +0 -190
  901. package/dist/type-mappings.js +0 -131
  902. package/dist/types/branded-ports.d.ts +0 -151
  903. package/dist/types/branded-ports.js +0 -121
  904. package/dist/types/index.d.ts +0 -5
  905. package/dist/types/index.js +0 -5
  906. package/dist/types.d.ts +0 -139
  907. package/dist/types.js +0 -15
  908. package/dist/utils/error-utils.js +0 -27
  909. package/dist/utils/lru-cache.js +0 -40
  910. package/dist/utils/port-ordering.js +0 -81
  911. package/dist/utils/port-tag-utils.js +0 -41
  912. package/dist/utils/string-distance.js +0 -56
  913. package/dist/validation/agent-detection.js +0 -115
  914. package/dist/validation/agent-rules.js +0 -262
  915. package/dist/validation/design-rules.js +0 -377
  916. package/dist/validation/rule-registry.js +0 -37
  917. package/dist/validator.d.ts +0 -113
  918. package/dist/validator.js +0 -1631
  919. package/docs/reference/patterns.md +0 -159
  920. package/scripts/postinstall.cjs +0 -86
  921. /package/dist/{shared-project.d.ts → parser/shared-project.d.ts} +0 -0
  922. /package/dist/{friendly-errors.d.ts → validation/friendly-errors.d.ts} +0 -0
@@ -1,1189 +0,0 @@
1
- /**
2
- * JSDoc annotation parser for Flow Weaver
3
- *
4
- * Parses @flowWeaver annotations from JSDoc comments.
5
- */
6
- import { isExecutePort, isSuccessPort, isFailurePort, isScopedMandatoryPort, KNOWN_NODETYPE_TAGS, KNOWN_PATTERN_TAGS, STANDARD_JSDOC_TAGS, getKnownWorkflowTags, } from './constants.js';
7
- import { inferDataTypeFromTS } from './type-mappings.js';
8
- import { findClosestMatches } from './utils/string-distance.js';
9
- import { parsePortLine, parseNodeLine, parseConnectLine, parsePositionLine, parseScopeLine, parseMapLine, parsePathLine, parseFanOutLine, parseFanInLine, parseCoerceLine, parseTriggerLine, parseCancelOnLine, parseThrottleLine, } from './chevrotain-parser/index.js';
10
- /**
11
- * Extract the type of a field from a callback's return type using ts-morph Type API.
12
- *
13
- * For scoped INPUT ports, we need to find the return type of the callback and extract
14
- * the type of a specific field from that return type object.
15
- *
16
- * @param callbackType - The Type of the callback parameter
17
- * @param fieldName - The name of the field to extract from the return type
18
- * @returns The TypeScript type string, or undefined if extraction fails
19
- */
20
- function extractCallbackReturnFieldType(callbackType, fieldName) {
21
- // Get call signatures from the callback type
22
- const callSignatures = callbackType.getCallSignatures();
23
- if (callSignatures.length === 0) {
24
- return undefined;
25
- }
26
- // Use the first call signature (callbacks typically have one)
27
- let returnType = callSignatures[0].getReturnType();
28
- // Unwrap Promise<T> to get T - async callbacks return Promise<{...}>
29
- const returnTypeText = returnType.getText();
30
- if (returnTypeText.startsWith('Promise<')) {
31
- const typeArgs = returnType.getTypeArguments();
32
- if (typeArgs.length > 0) {
33
- returnType = typeArgs[0];
34
- }
35
- }
36
- // Get the property from the return type
37
- const property = returnType.getProperty(fieldName);
38
- if (!property) {
39
- return undefined;
40
- }
41
- // Get the type of the property
42
- const propertyType = getPropertyType(property, returnType);
43
- if (!propertyType) {
44
- return undefined;
45
- }
46
- // Get the type text - use getText() which handles complex types properly
47
- // Pass undefined to avoid import path expansion
48
- return propertyType.getText(undefined, 0);
49
- }
50
- /**
51
- * Get the type of a property Symbol.
52
- */
53
- function getPropertyType(property, containerType) {
54
- // Try to get the type via getTypeAtLocation on the value declaration
55
- const valueDecl = property.getValueDeclaration();
56
- if (valueDecl) {
57
- return valueDecl.getType();
58
- }
59
- // Fallback: get the declared type from the container
60
- const declaredType = containerType.getPropertyOrThrow(property.getName());
61
- if (declaredType) {
62
- // This returns a Symbol, get its type via declarations
63
- const decls = declaredType.getDeclarations();
64
- if (decls.length > 0) {
65
- return decls[0].getType();
66
- }
67
- }
68
- return undefined;
69
- }
70
- /**
71
- * Extract the type of a parameter from a callback's parameter list using ts-morph Type API.
72
- *
73
- * For scoped OUTPUT ports, we need to find the parameters of the callback and extract
74
- * the type of a specific parameter by name.
75
- *
76
- * @param callbackType - The Type of the callback parameter
77
- * @param paramName - The name of the parameter to extract
78
- * @returns The TypeScript type string, or undefined if extraction fails
79
- */
80
- function extractCallbackParamType(callbackType, paramName) {
81
- // Get call signatures from the callback type
82
- const callSignatures = callbackType.getCallSignatures();
83
- if (callSignatures.length === 0) {
84
- return undefined;
85
- }
86
- // Use the first call signature
87
- const parameters = callSignatures[0].getParameters();
88
- // Find the parameter by name
89
- for (const param of parameters) {
90
- if (param.getName() === paramName) {
91
- const valueDecl = param.getValueDeclaration();
92
- if (valueDecl) {
93
- const paramType = valueDecl.getType();
94
- return paramType.getText(undefined, 0);
95
- }
96
- }
97
- }
98
- return undefined;
99
- }
100
- export class JSDocParser {
101
- /**
102
- * Parse @flowWeaver nodeType from JSDoc comments.
103
- * When a TagHandlerRegistry is provided, unknown tags are checked against it
104
- * before being reported as warnings.
105
- */
106
- parseNodeType(func, warnings, tagRegistry) {
107
- const jsdocs = func.getJsDocs();
108
- if (jsdocs.length === 0)
109
- return null;
110
- // Find the JSDoc block that contains @flowWeaver nodeType (or @flowWeaver node shorthand)
111
- let jsdoc = null;
112
- let flowWeaverTag = null;
113
- let isNodeShorthand = false;
114
- for (const doc of jsdocs) {
115
- const tags = doc.getTags();
116
- const tag = tags.find((t) => {
117
- if (t.getTagName() !== 'flowWeaver')
118
- return false;
119
- const comment = t.getCommentText()?.trim();
120
- return comment === 'nodeType' || comment === 'node';
121
- });
122
- if (tag) {
123
- jsdoc = doc;
124
- flowWeaverTag = tag;
125
- isNodeShorthand = flowWeaverTag.getCommentText()?.trim() === 'node';
126
- break;
127
- }
128
- }
129
- if (!jsdoc || !flowWeaverTag)
130
- return null;
131
- const tags = jsdoc.getTags();
132
- const config = {
133
- inputs: {},
134
- outputs: {},
135
- };
136
- // @flowWeaver node implies expression mode (auto-detect from signature)
137
- if (isNodeShorthand) {
138
- config.expression = true;
139
- }
140
- // Extract description from JSDoc comment text (before tags)
141
- const descriptionText = jsdoc.getDescription();
142
- if (descriptionText && descriptionText.trim()) {
143
- config.description = descriptionText.trim();
144
- }
145
- // Parse tags
146
- tags.forEach((tag) => {
147
- const tagName = tag.getTagName();
148
- const comment = tag.getCommentText() || '';
149
- switch (tagName) {
150
- case 'name':
151
- config.name = comment.trim();
152
- break;
153
- case 'label':
154
- config.label = comment.trim();
155
- break;
156
- case 'description':
157
- config.description = comment.trim();
158
- break;
159
- case 'color':
160
- config.color = comment.trim().replace(/^["']|["']$/g, '');
161
- break;
162
- case 'icon':
163
- config.icon = comment.trim().replace(/^["']|["']$/g, '');
164
- break;
165
- case 'tag':
166
- config.tags = config.tags || [];
167
- const tagMatch = comment.match(/^(\S+)(?:\s+"([^"]+)")?$/);
168
- if (tagMatch) {
169
- config.tags.push({
170
- label: tagMatch[1],
171
- ...(tagMatch[2] && { tooltip: tagMatch[2] }),
172
- });
173
- }
174
- break;
175
- case 'executeWhen':
176
- config.executeWhen = comment.trim();
177
- break;
178
- case 'scope':
179
- config.scope = comment.trim();
180
- break;
181
- case 'expression':
182
- config.expression = true;
183
- break;
184
- case 'pullExecution':
185
- const pullValue = comment.trim();
186
- if (pullValue) {
187
- config.defaultConfig = config.defaultConfig || {};
188
- config.defaultConfig.pullExecution = { triggerPort: pullValue };
189
- }
190
- break;
191
- case 'input':
192
- this.parseInputTag(tag, config, func, warnings);
193
- break;
194
- case 'output':
195
- this.parseOutputTag(tag, config, func, warnings);
196
- break;
197
- case 'step':
198
- this.parseStepTag(tag, config, func, warnings);
199
- break;
200
- case 'deploy':
201
- config.deploy = config.deploy || {};
202
- this.parseDeployTag(tag, config.deploy);
203
- break;
204
- default: {
205
- // D: Context validation - tags that belong to other block types
206
- if (tagName === 'param' || tagName === 'returns' || tagName === 'return') {
207
- warnings.push(`@${tagName} is for workflows, not node types. Use @input/@output instead.`);
208
- }
209
- else if (tagRegistry && tagRegistry.has(tagName)) {
210
- // Delegate to pack-contributed tag handler
211
- if (!config.deploy)
212
- config.deploy = {};
213
- tagRegistry.handle(tagName, comment, 'nodeType', config.deploy, warnings);
214
- }
215
- else if (!KNOWN_NODETYPE_TAGS.has(tagName) && !STANDARD_JSDOC_TAGS.has(tagName)) {
216
- // C: Unknown tag detection with suggestions
217
- const suggestions = findClosestMatches(tagName, [...KNOWN_NODETYPE_TAGS]);
218
- const hint = suggestions.length > 0 ? ` Did you mean @${suggestions[0]}?` : '';
219
- warnings.push(`Unknown annotation @${tagName} in nodeType block.${hint}`);
220
- }
221
- break;
222
- }
223
- }
224
- });
225
- return config;
226
- }
227
- /**
228
- * Parse @flowWeaver workflow from JSDoc comments.
229
- * When a TagHandlerRegistry is provided, unknown tags are checked against it
230
- * before being reported as warnings.
231
- */
232
- parseWorkflow(func, warnings, tagRegistry) {
233
- const jsdocs = func.getJsDocs();
234
- if (jsdocs.length === 0)
235
- return null;
236
- // Find the JSDoc block that contains @flowWeaver workflow
237
- let jsdoc = null;
238
- let flowWeaverTag = null;
239
- for (const doc of jsdocs) {
240
- const tags = doc.getTags();
241
- const tag = tags.find((t) => t.getTagName() === 'flowWeaver' && t.getCommentText()?.trim() === 'workflow');
242
- if (tag) {
243
- jsdoc = doc;
244
- flowWeaverTag = tag;
245
- break;
246
- }
247
- }
248
- if (!jsdoc || !flowWeaverTag)
249
- return null;
250
- const tags = jsdoc.getTags();
251
- const config = {
252
- imports: [],
253
- instances: [],
254
- connections: [],
255
- scopes: {},
256
- positions: {},
257
- };
258
- // Parse tags
259
- tags.forEach((tag) => {
260
- const tagName = tag.getTagName();
261
- const comment = tag.getCommentText() || '';
262
- switch (tagName) {
263
- case 'name':
264
- config.name = comment.trim();
265
- break;
266
- case 'fwImport':
267
- // Parse @fwImport nodeName functionName from "packageName"
268
- // Example: @fwImport npm/autoprefixer/autoprefixer autoprefixer from "autoprefixer"
269
- this.parseImportTag(tag, config, warnings);
270
- break;
271
- case 'description':
272
- config.description = comment.trim();
273
- break;
274
- case 'strictTypes':
275
- // @strictTypes with no value or any truthy value = true
276
- // @strictTypes false = false
277
- config.strictTypes = comment.trim().toLowerCase() !== 'false';
278
- break;
279
- case 'autoConnect':
280
- // @autoConnect enables automatic linear connection wiring
281
- // OPT-IN: only applies when present, without it behavior is unchanged
282
- config.autoConnect = true;
283
- break;
284
- case 'node':
285
- this.parseNodeTag(tag, config, warnings);
286
- break;
287
- case 'position':
288
- this.parsePositionTag(tag, config, warnings);
289
- break;
290
- case 'connect':
291
- this.parseConnectTag(tag, config, warnings);
292
- break;
293
- case 'scope':
294
- this.parseScopeTag(tag, config, warnings);
295
- break;
296
- case 'map':
297
- this.parseMapTag(tag, config, warnings);
298
- break;
299
- case 'path':
300
- this.parsePathTag(tag, config, warnings);
301
- break;
302
- case 'fanOut':
303
- this.parseFanOutTag(tag, config, warnings);
304
- break;
305
- case 'fanIn':
306
- this.parseFanInTag(tag, config, warnings);
307
- break;
308
- case 'coerce':
309
- this.parseCoerceTag(tag, config, warnings);
310
- break;
311
- case 'trigger':
312
- this.parseTriggerTag(tag, config, warnings, tagRegistry);
313
- break;
314
- case 'cancelOn':
315
- this.parseCancelOnTag(tag, config, warnings);
316
- break;
317
- case 'retries': {
318
- const n = parseInt(comment.trim(), 10);
319
- if (!isNaN(n) && n >= 0)
320
- config.retries = n;
321
- else
322
- warnings.push(`Invalid @retries value: "${comment.trim()}". Expected non-negative integer.`);
323
- break;
324
- }
325
- case 'timeout': {
326
- const val = comment.trim().replace(/^["']|["']$/g, '');
327
- if (val)
328
- config.timeout = val;
329
- break;
330
- }
331
- case 'throttle':
332
- this.parseThrottleTag(tag, config, warnings);
333
- break;
334
- case 'deploy':
335
- config.deploy = config.deploy || {};
336
- this.parseDeployTag(tag, config.deploy);
337
- break;
338
- case 'param':
339
- this.parseParamTag(tag, config, func, warnings);
340
- break;
341
- case 'return':
342
- case 'returns':
343
- this.parseReturnTag(tag, config, func, warnings);
344
- break;
345
- default: {
346
- // D: Context validation - tags that belong to other block types
347
- if (tagName === 'color' || tagName === 'icon' || tagName === 'tag') {
348
- warnings.push(`@${tagName} is for node types, not workflows. Use it on @flowWeaver nodeType instead.`);
349
- }
350
- else if (tagName === 'input' || tagName === 'output' || tagName === 'step') {
351
- warnings.push(`@${tagName} is for node types, not workflows. Use @param/@returns for workflows.`);
352
- }
353
- else if (tagRegistry && tagRegistry.has(tagName)) {
354
- // Delegate to pack-contributed tag handler
355
- if (!config.deploy)
356
- config.deploy = {};
357
- tagRegistry.handle(tagName, comment, 'workflow', config.deploy, warnings);
358
- }
359
- else {
360
- const knownTags = getKnownWorkflowTags(tagRegistry?.getRegisteredTags());
361
- if (!knownTags.has(tagName) && !STANDARD_JSDOC_TAGS.has(tagName)) {
362
- // C: Unknown tag detection with suggestions
363
- const suggestions = findClosestMatches(tagName, [...knownTags]);
364
- const hint = suggestions.length > 0 ? ` Did you mean @${suggestions[0]}?` : '';
365
- warnings.push(`Unknown annotation @${tagName} in workflow block.${hint}`);
366
- }
367
- }
368
- break;
369
- }
370
- }
371
- });
372
- return config;
373
- }
374
- /**
375
- * Parse @flowWeaver pattern from JSDoc comments
376
- */
377
- parsePattern(func, warnings) {
378
- const jsdocs = func.getJsDocs();
379
- if (jsdocs.length === 0)
380
- return null;
381
- // Find the JSDoc block that contains @flowWeaver pattern
382
- let jsdoc = null;
383
- let flowWeaverTag = null;
384
- for (const doc of jsdocs) {
385
- const tags = doc.getTags();
386
- const tag = tags.find((t) => t.getTagName() === 'flowWeaver' && t.getCommentText()?.trim() === 'pattern');
387
- if (tag) {
388
- jsdoc = doc;
389
- flowWeaverTag = tag;
390
- break;
391
- }
392
- }
393
- if (!jsdoc || !flowWeaverTag)
394
- return null;
395
- const tags = jsdoc.getTags();
396
- const config = {
397
- instances: [],
398
- connections: [],
399
- ports: [],
400
- positions: {},
401
- };
402
- // Parse tags
403
- tags.forEach((tag) => {
404
- const tagName = tag.getTagName();
405
- const comment = tag.getCommentText() || '';
406
- switch (tagName) {
407
- case 'name':
408
- config.name = comment.trim();
409
- break;
410
- case 'description':
411
- config.description = comment.trim();
412
- break;
413
- case 'node':
414
- this.parsePatternNodeTag(tag, config, warnings);
415
- break;
416
- case 'position':
417
- this.parsePatternPositionTag(tag, config, warnings);
418
- break;
419
- case 'connect':
420
- this.parsePatternConnectTag(tag, config, warnings);
421
- break;
422
- case 'port':
423
- this.parsePatternPortTag(tag, config, warnings);
424
- break;
425
- default:
426
- if (!KNOWN_PATTERN_TAGS.has(tagName) && !STANDARD_JSDOC_TAGS.has(tagName)) {
427
- const suggestions = findClosestMatches(tagName, [...KNOWN_PATTERN_TAGS]);
428
- const hint = suggestions.length > 0 ? ` Did you mean @${suggestions[0]}?` : '';
429
- warnings.push(`Unknown annotation @${tagName} in pattern block.${hint}`);
430
- }
431
- break;
432
- }
433
- });
434
- // Apply positions to instances
435
- if (config.positions && config.instances) {
436
- for (const instance of config.instances) {
437
- const pos = config.positions[instance.id];
438
- if (pos) {
439
- instance.config = instance.config || {};
440
- instance.config.x = pos.x;
441
- instance.config.y = pos.y;
442
- }
443
- }
444
- }
445
- return config;
446
- }
447
- /**
448
- * Parse @node tag for patterns.
449
- * Format: @node instanceId nodeType
450
- */
451
- parsePatternNodeTag(tag, config, warnings) {
452
- const comment = tag.getCommentText() || '';
453
- const result = parseNodeLine(`@node ${comment}`, warnings);
454
- if (!result) {
455
- warnings.push(`Invalid @node tag format in pattern: ${comment}`);
456
- return;
457
- }
458
- const { instanceId, nodeType } = result;
459
- config.instances.push({
460
- id: instanceId,
461
- nodeType: nodeType,
462
- });
463
- }
464
- /**
465
- * Parse @position tag for patterns.
466
- * Format: @position nodeId x y
467
- */
468
- parsePatternPositionTag(tag, config, warnings) {
469
- const comment = tag.getCommentText() || '';
470
- const result = parsePositionLine(`@position ${comment}`, warnings);
471
- if (!result) {
472
- warnings.push(`Invalid @position tag format in pattern: ${comment}`);
473
- return;
474
- }
475
- const { nodeId, x, y } = result;
476
- config.positions[nodeId] = { x, y };
477
- }
478
- /**
479
- * Parse @connect tag for patterns.
480
- * Supports IN/OUT pseudo-nodes: IN.port -> node.port, node.port -> OUT.port
481
- */
482
- parsePatternConnectTag(tag, config, warnings) {
483
- const comment = tag.getCommentText() || '';
484
- const result = parseConnectLine(`@connect ${comment}`, warnings);
485
- if (!result) {
486
- warnings.push(`Invalid @connect tag format in pattern: ${comment}`);
487
- return;
488
- }
489
- const { source, target } = result;
490
- config.connections.push({
491
- from: { node: source.nodeId, port: source.portName },
492
- to: { node: target.nodeId, port: target.portName },
493
- });
494
- }
495
- /**
496
- * Parse @port tag for patterns.
497
- * Format: @port IN.name - description OR @port OUT.name - description
498
- */
499
- parsePatternPortTag(tag, config, warnings) {
500
- const comment = tag.getCommentText() || '';
501
- // Parse format: IN.name - description OR OUT.name - description
502
- const match = comment.match(/^(IN|OUT)\.(\w+)\s*(?:-\s*(.*))?$/);
503
- if (!match) {
504
- warnings.push(`Invalid @port tag format in pattern: ${comment}`);
505
- return;
506
- }
507
- const [, direction, name, description] = match;
508
- config.ports.push({
509
- direction: direction,
510
- name,
511
- description: description?.trim(),
512
- });
513
- }
514
- /**
515
- * Parse @input tag using Chevrotain parser.
516
- * Supports: @input name, @input [name], @input [name=default]
517
- * With optional: scope:scopeName, [order:N], [placement:TOP/BOTTOM], - description
518
- */
519
- parseInputTag(tag, config, func, warnings) {
520
- const comment = tag.getCommentText() || '';
521
- const result = parsePortLine(`@input ${comment}`, warnings);
522
- if (!result) {
523
- return;
524
- }
525
- const { name, defaultValue, isOptional, scope, order, mergeStrategy, hidden, description, customMetadata } = result;
526
- // Infer type from signature or scope callback return type
527
- let type;
528
- let tsType;
529
- // Check for STEP ports: execute OR scoped mandatory ports (success, failure with scope)
530
- const isScopedStepInput = scope && isScopedMandatoryPort(name);
531
- if (isExecutePort(name) || isScopedStepInput) {
532
- // E: Warn if user explicitly specified a non-STEP type on a reserved port
533
- if (result.dataType && result.dataType !== 'STEP') {
534
- warnings.push(`Port "${name}" is a reserved control port; type will always be STEP.`);
535
- }
536
- type = 'STEP';
537
- }
538
- else if (scope) {
539
- // For scoped INPUT ports, look up type from the scope callback's return type
540
- // The scope name matches a function parameter that is a callback
541
- // Scoped INPUT ports become the callback's return values
542
- const scopeParam = func.getParameters().find((p) => p.getName() === scope);
543
- if (scopeParam) {
544
- const scopeParamType = scopeParam.getType();
545
- // Use ts-morph Type API to extract the return field type
546
- // This handles complex types (generics, nested objects) that regex can't
547
- const extractedType = extractCallbackReturnFieldType(scopeParamType, name);
548
- if (extractedType) {
549
- tsType = extractedType;
550
- type = inferDataTypeFromTS(tsType);
551
- }
552
- else {
553
- // Emit warning when type inference fails for a scoped INPUT port
554
- const nodeTypeName = func.getName() || 'unknown';
555
- warnings.push(`Cannot infer type for scoped INPUT port '${name}' in scope '${scope}' of node type '${nodeTypeName}'. ` +
556
- `The callback parameter '${scope}' should have a return type that includes '${name}'. ` +
557
- `Consider adding an explicit type annotation to the callback signature.`);
558
- type = 'ANY';
559
- }
560
- }
561
- else {
562
- // Scope callback parameter not found - emit warning
563
- const nodeTypeName = func.getName() || 'unknown';
564
- warnings.push(`Scoped INPUT port '${name}' references scope '${scope}', but no callback parameter named '${scope}' was found ` +
565
- `in node type '${nodeTypeName}'. Add a callback parameter: ${scope}: (...) => { ${name}: YourType }`);
566
- type = 'ANY';
567
- }
568
- }
569
- else {
570
- const param = func.getParameters().find((p) => {
571
- const pName = p.getName();
572
- return pName === name || pName === `_${name}`;
573
- });
574
- if (param) {
575
- tsType = param.getType().getText(param);
576
- type = inferDataTypeFromTS(tsType);
577
- }
578
- else {
579
- type = 'ANY';
580
- }
581
- }
582
- // Check if description contains an expression
583
- let label = description?.trim();
584
- let expression = undefined;
585
- if (label && label.startsWith('Expression:')) {
586
- expression = label.substring('Expression:'.length).trim();
587
- label = undefined;
588
- }
589
- // B: Duplicate port detection
590
- if (config.inputs.hasOwnProperty(name)) {
591
- warnings.push(`Duplicate @input "${name}". The second declaration will overwrite the first.`);
592
- }
593
- config.inputs[name] = {
594
- type,
595
- defaultValue: defaultValue ? this.parseDefaultValue(defaultValue) : undefined,
596
- ...(isOptional && { optional: true }),
597
- label,
598
- ...(expression && { expression }),
599
- ...(scope && { scope }),
600
- ...(mergeStrategy && { mergeStrategy: mergeStrategy }),
601
- ...(hidden && { hidden }),
602
- ...((order !== undefined || customMetadata) && {
603
- metadata: { ...(order !== undefined && { order }), ...customMetadata },
604
- }),
605
- ...(tsType && { tsType }),
606
- };
607
- }
608
- /**
609
- * Parse @output tag using Chevrotain parser.
610
- * Supports: @output name, scope:scopeName, [order:N], - description
611
- */
612
- parseOutputTag(tag, config, func, warnings) {
613
- const comment = tag.getCommentText() || '';
614
- const result = parsePortLine(`@output ${comment}`, warnings);
615
- if (!result) {
616
- return;
617
- }
618
- const { name, scope, order, hidden, description, customMetadata } = result;
619
- // Infer type from return type or scope callback parameter
620
- let type;
621
- let tsType;
622
- // Check for STEP ports: onSuccess/onFailure OR scoped mandatory ports (start with scope)
623
- const isScopedStepOutput = scope && isScopedMandatoryPort(name);
624
- if (isSuccessPort(name) || isFailurePort(name) || isScopedStepOutput) {
625
- // E: Warn if user explicitly specified a non-STEP type on a reserved port
626
- if (result.dataType && result.dataType !== 'STEP') {
627
- warnings.push(`Port "${name}" is a reserved control port; type will always be STEP.`);
628
- }
629
- type = 'STEP';
630
- }
631
- else if (scope) {
632
- // For scoped OUTPUT ports, look up type from the scope callback parameter
633
- // The scope name matches a function parameter that is a callback
634
- // Scoped OUTPUT ports become the callback's parameters
635
- const scopeParam = func.getParameters().find((p) => p.getName() === scope);
636
- if (scopeParam) {
637
- const scopeParamType = scopeParam.getType();
638
- // Use ts-morph Type API to extract the callback parameter type
639
- const extractedType = extractCallbackParamType(scopeParamType, name);
640
- if (extractedType) {
641
- tsType = extractedType;
642
- type = inferDataTypeFromTS(tsType);
643
- }
644
- else {
645
- // Emit warning when type inference fails for a scoped OUTPUT port
646
- const nodeTypeName = func.getName() || 'unknown';
647
- warnings.push(`Cannot infer type for scoped OUTPUT port '${name}' in scope '${scope}' of node type '${nodeTypeName}'. ` +
648
- `The callback parameter '${scope}' should have a parameter named '${name}'. ` +
649
- `Consider adding an explicit type annotation to the callback signature.`);
650
- type = 'ANY';
651
- }
652
- }
653
- else {
654
- // Scope callback parameter not found - emit warning
655
- const nodeTypeName = func.getName() || 'unknown';
656
- warnings.push(`Scoped OUTPUT port '${name}' references scope '${scope}', but no callback parameter named '${scope}' was found ` +
657
- `in node type '${nodeTypeName}'. Add a callback parameter: ${scope}: (${name}: YourType, ...) => { ... }`);
658
- type = 'ANY';
659
- }
660
- }
661
- else {
662
- const returnType = func.getReturnType();
663
- // Use ts-morph API to extract property type (handles generics with commas correctly)
664
- const property = returnType.getProperty(name);
665
- if (property) {
666
- const propertyType = getPropertyType(property, returnType);
667
- if (propertyType) {
668
- tsType = propertyType.getText(undefined, 0);
669
- type = inferDataTypeFromTS(tsType);
670
- }
671
- else {
672
- type = 'ANY';
673
- }
674
- }
675
- else {
676
- type = 'ANY';
677
- }
678
- }
679
- // B: Duplicate port detection
680
- if (config.outputs.hasOwnProperty(name)) {
681
- warnings.push(`Duplicate @output "${name}". The second declaration will overwrite the first.`);
682
- }
683
- config.outputs[name] = {
684
- type,
685
- label: description?.trim(),
686
- ...(scope && { scope }),
687
- ...(hidden && { hidden }),
688
- ...((order !== undefined || customMetadata) && {
689
- metadata: { ...(order !== undefined && { order }), ...customMetadata },
690
- }),
691
- ...(tsType && { tsType }),
692
- };
693
- }
694
- /**
695
- * Parse @step tag using Chevrotain parser.
696
- * Used for explicit STEP/control-flow ports that are not reserved.
697
- */
698
- parseStepTag(tag, config, func, warnings) {
699
- const comment = tag.getCommentText() || '';
700
- // Use Chevrotain to parse the port content
701
- const result = parsePortLine(`@step ${comment}`, warnings);
702
- if (!result) {
703
- return;
704
- }
705
- const { name, description } = result;
706
- // @step ports are control flow - determine if input or output from signature
707
- const param = func.getParameters().find((p) => p.getName() === name);
708
- if (param) {
709
- // It's an input STEP port
710
- config.inputs[name] = {
711
- type: 'STEP',
712
- label: description?.trim(),
713
- };
714
- }
715
- else {
716
- // It's an output STEP port (check return type or assume output)
717
- config.outputs[name] = {
718
- type: 'STEP',
719
- label: description?.trim(),
720
- };
721
- }
722
- }
723
- /**
724
- * Parse @return/@returns tag for workflow functions using Chevrotain.
725
- * Format: @returns name [order:N] - Description (type inferred from signature)
726
- */
727
- parseReturnTag(tag, config, func, warnings) {
728
- const comment = tag.getCommentText() || '';
729
- // Reuse port-parser: @output has same format as @returns
730
- const result = parsePortLine(`@output ${comment}`, warnings);
731
- if (!result) {
732
- return;
733
- }
734
- const { name, order, description, customMetadata } = result;
735
- // Infer type from return type signature
736
- let type = 'ANY';
737
- if (isSuccessPort(name) || isFailurePort(name)) {
738
- type = 'STEP';
739
- }
740
- else if (func) {
741
- const returnType = func.getReturnType();
742
- const returnTypeText = returnType.getText();
743
- const fieldMatch = returnTypeText.match(new RegExp(`${name}\\??\\s*:\\s*([^;},]+)`));
744
- if (fieldMatch) {
745
- type = inferDataTypeFromTS(fieldMatch[1].trim());
746
- }
747
- else {
748
- // G: Type inference fallback to ANY
749
- warnings.push(`Could not infer type for @returns "${name}", defaulting to ANY.`);
750
- }
751
- }
752
- config.returnPorts = config.returnPorts || {};
753
- // B: Duplicate port detection
754
- if (config.returnPorts.hasOwnProperty(name)) {
755
- warnings.push(`Duplicate @returns "${name}". The second declaration will overwrite the first.`);
756
- }
757
- config.returnPorts[name] = {
758
- dataType: type,
759
- label: description?.trim(),
760
- ...((order !== undefined || customMetadata) && {
761
- metadata: { ...(order !== undefined && { order }), ...customMetadata },
762
- }),
763
- };
764
- }
765
- /**
766
- * Parse @param tag for workflow functions using Chevrotain.
767
- * Format: @param name [order:N] - Description (type inferred from signature)
768
- */
769
- parseParamTag(tag, config, func, warnings) {
770
- const compilerNode = tag.compilerNode;
771
- const tagWithGetName = tag;
772
- const name = compilerNode.name?.getText?.() || (tagWithGetName.getName && tagWithGetName.getName());
773
- if (!name) {
774
- return;
775
- }
776
- // Comment contains: [order:N] - Description (name parsed separately by ts-morph)
777
- // Prepend name to reuse port-parser
778
- const comment = tag.getCommentText() || '';
779
- const result = parsePortLine(`@input ${name} ${comment}`, warnings);
780
- const order = result?.order;
781
- const description = result?.description;
782
- // Infer type from function parameter signature
783
- let type = 'ANY';
784
- if (isExecutePort(name)) {
785
- type = 'STEP';
786
- }
787
- else if (func) {
788
- const params = func.getParameters();
789
- const paramsParam = params.find((p) => p.getName() === 'params');
790
- if (paramsParam) {
791
- const paramType = paramsParam.getType();
792
- const paramTypeText = paramType.getText();
793
- // Skip field-matching for catch-all Record types — @param annotations are intentional metadata
794
- const isCatchAllRecord = (/^Record<string,\s*(never|any|unknown)>$/.test(paramTypeText) ||
795
- paramTypeText === '{}' ||
796
- /^\{\s*\[[\w]+:\s*string\]:\s*(never|any|unknown);\s*\}$/.test(paramTypeText));
797
- if (!isCatchAllRecord) {
798
- const fieldMatch = paramTypeText.match(new RegExp(`${name}\\??\\s*:\\s*([^;},]+)`));
799
- if (fieldMatch) {
800
- type = inferDataTypeFromTS(fieldMatch[1].trim());
801
- }
802
- else {
803
- // F: @param doesn't match any field in the params object
804
- // G: Type inference fallback to ANY
805
- warnings.push(`@param "${name}" does not match any field in the params object. Type defaults to ANY.`);
806
- }
807
- }
808
- }
809
- }
810
- config.startPorts = config.startPorts || {};
811
- // B: Duplicate port detection
812
- if (config.startPorts.hasOwnProperty(name)) {
813
- warnings.push(`Duplicate @param "${name}". The second declaration will overwrite the first.`);
814
- }
815
- config.startPorts[name] = {
816
- dataType: type,
817
- label: description?.trim(),
818
- ...(order !== undefined && { metadata: { order } }),
819
- };
820
- }
821
- /**
822
- * Parse @fwImport tag for npm package node types.
823
- * Format: @fwImport nodeName functionName from "packageName"
824
- * Examples:
825
- * @fwImport npm/autoprefixer/autoprefixer autoprefixer from "autoprefixer"
826
- * @fwImport npm/lodash/map map from "lodash"
827
- * Note: We use @fwImport instead of @import because TypeScript treats @import specially
828
- * and truncates the first word as a type annotation.
829
- */
830
- parseImportTag(tag, config, warnings) {
831
- const comment = tag.getCommentText()?.trim() || '';
832
- // Parse format: nodeName functionName from "packageName"
833
- const match = comment.match(/^(\S+)\s+(\S+)\s+from\s+["']([^"']+)["']$/);
834
- if (match) {
835
- const [, name, functionName, importSource] = match;
836
- config.imports.push({ name, functionName, importSource });
837
- }
838
- else {
839
- warnings.push(`Invalid @fwImport tag format: "${comment}". Expected: @fwImport nodeName functionName from "packageName"`);
840
- }
841
- }
842
- /**
843
- * Parse @node tag using Chevrotain parser.
844
- * Supports: @node instanceId nodeType [parentScope] [label: "..."] [portOrder: port=N] [portLabel: port="label"] [expr: port="val"] [minimized] [pullExecution: triggerPort]
845
- */
846
- parseNodeTag(tag, config, warnings) {
847
- const comment = tag.getCommentText() || '';
848
- // Use Chevrotain to parse the node line
849
- const result = parseNodeLine(`@node ${comment}`, warnings);
850
- if (!result) {
851
- return;
852
- }
853
- const { instanceId, nodeType, parentScope, label, expressions, portOrder, portLabel, minimized, pullExecution, size, position, color, icon, tags, job, environment, suppress, } = result;
854
- // Capture source location from tag
855
- const line = tag.getStartLineNumber();
856
- // Build portConfigs from portOrder, portLabel, and expressions
857
- let portConfigs;
858
- if (portOrder) {
859
- portConfigs = Object.entries(portOrder).map(([portName, order]) => ({
860
- portName,
861
- order,
862
- }));
863
- }
864
- if (portLabel) {
865
- portConfigs = portConfigs || [];
866
- for (const [portName, labelVal] of Object.entries(portLabel)) {
867
- const existingIndex = portConfigs.findIndex((pc) => pc.portName === portName);
868
- if (existingIndex >= 0) {
869
- portConfigs[existingIndex] = { ...portConfigs[existingIndex], label: labelVal };
870
- }
871
- else {
872
- portConfigs.push({ portName, label: labelVal });
873
- }
874
- }
875
- }
876
- if (expressions) {
877
- portConfigs = portConfigs || [];
878
- for (const [portName, expression] of Object.entries(expressions)) {
879
- const existingIndex = portConfigs.findIndex((pc) => pc.portName === portName);
880
- if (existingIndex >= 0) {
881
- portConfigs[existingIndex] = { ...portConfigs[existingIndex], expression };
882
- }
883
- else {
884
- portConfigs.push({ portName, expression });
885
- }
886
- }
887
- }
888
- config.instances.push({
889
- id: instanceId,
890
- type: nodeType,
891
- ...(parentScope && { parentScope }),
892
- ...(label && { label }),
893
- ...(portConfigs && portConfigs.length > 0 && { portConfigs }),
894
- ...(pullExecution && { pullExecution: { triggerPort: pullExecution } }),
895
- ...(minimized && { minimized }),
896
- ...(color && { color }),
897
- ...(icon && { icon }),
898
- ...(tags && tags.length > 0 && { tags }),
899
- ...(size && { width: size.width, height: size.height }),
900
- ...(position && { x: position.x, y: position.y }),
901
- ...(job && { job }),
902
- ...(environment && { environment }),
903
- ...(suppress && suppress.length > 0 && { suppressWarnings: suppress }),
904
- sourceLocation: { line, column: 0 },
905
- });
906
- }
907
- /**
908
- * Parse @position tag using Chevrotain parser.
909
- * Supports: @position nodeId x y
910
- */
911
- parsePositionTag(tag, config, warnings) {
912
- const comment = tag.getCommentText() || '';
913
- // Use Chevrotain to parse the position line
914
- const result = parsePositionLine(`@position ${comment}`, warnings);
915
- if (!result) {
916
- warnings.push(`Invalid @position tag format: ${comment}`);
917
- return;
918
- }
919
- const { nodeId, x, y } = result;
920
- config.positions[nodeId] = { x, y };
921
- // Emit deprecation warning for non-virtual nodes
922
- if (nodeId !== 'Start' && nodeId !== 'Exit') {
923
- warnings.push(`Deprecated: @position ${nodeId} — use [position: ${x} ${y}] on the @node declaration instead.`);
924
- }
925
- }
926
- /**
927
- * Parse @connect tag using Chevrotain parser.
928
- * Supports: node.port -> node.port and node.port:scope -> node.port:scope
929
- */
930
- parseConnectTag(tag, config, warnings) {
931
- const comment = tag.getCommentText() || '';
932
- // Use Chevrotain to parse the connect line
933
- const result = parseConnectLine(`@connect ${comment}`, warnings);
934
- if (!result) {
935
- warnings.push(`Invalid @connect tag format: @connect ${comment}`);
936
- return;
937
- }
938
- const { source, target, coerce } = result;
939
- // Capture source location from tag
940
- const line = tag.getStartLineNumber();
941
- config.connections.push({
942
- from: {
943
- node: source.nodeId,
944
- port: source.portName,
945
- ...(source.scope && { scope: source.scope }),
946
- },
947
- to: {
948
- node: target.nodeId,
949
- port: target.portName,
950
- ...(target.scope && { scope: target.scope }),
951
- },
952
- sourceLocation: { line, column: 0 },
953
- ...(coerce && { coerce }),
954
- });
955
- }
956
- /**
957
- * Parse @scope tag using Chevrotain parser.
958
- * Format: @scope scopeName [child1, child2] or @scope container.scopeName [child1, child2]
959
- */
960
- parseScopeTag(tag, config, warnings) {
961
- const comment = tag.getCommentText() || '';
962
- const result = parseScopeLine(`@scope ${comment}`, warnings);
963
- if (!result) {
964
- warnings.push(`Invalid @scope tag format: ${comment}`);
965
- return;
966
- }
967
- config.scopes[result.scopeName] = result.children;
968
- }
969
- /**
970
- * Parse @map tag using Chevrotain parser.
971
- * Format: @map instanceId childNode over source.port
972
- * Or: @map instanceId childNode(inputPort -> outputPort) over source.port
973
- */
974
- parseMapTag(tag, config, warnings) {
975
- const comment = tag.getCommentText() || '';
976
- const result = parseMapLine(`@map ${comment}`, warnings);
977
- if (!result) {
978
- warnings.push(`Invalid @map tag format: ${comment}`);
979
- return;
980
- }
981
- config.maps = config.maps || [];
982
- config.maps.push({
983
- instanceId: result.instanceId,
984
- childId: result.childId,
985
- sourceNode: result.sourceNode,
986
- sourcePort: result.sourcePort,
987
- ...(result.inputPort && { inputPort: result.inputPort }),
988
- ...(result.outputPort && { outputPort: result.outputPort }),
989
- });
990
- }
991
- /**
992
- * Parse @path tag using Chevrotain parser.
993
- * Format: @path Start -> validator:ok -> classifier -> urgencyRouter:fail -> escalate -> Exit
994
- */
995
- parsePathTag(tag, config, warnings) {
996
- const comment = tag.getCommentText() || '';
997
- const results = parsePathLine(`@path ${comment}`, warnings);
998
- if (!results) {
999
- warnings.push(`Invalid @path tag format: ${comment}`);
1000
- return;
1001
- }
1002
- config.paths = config.paths || [];
1003
- for (const result of results) {
1004
- config.paths.push({
1005
- steps: result.steps,
1006
- });
1007
- }
1008
- }
1009
- parseFanOutTag(tag, config, warnings) {
1010
- const comment = tag.getCommentText() || '';
1011
- const result = parseFanOutLine(`@fanOut ${comment}`, warnings);
1012
- if (!result) {
1013
- warnings.push(`Invalid @fanOut tag format: ${comment}`);
1014
- return;
1015
- }
1016
- if (!result.source.port) {
1017
- warnings.push(`@fanOut source must specify a port: ${comment}`);
1018
- return;
1019
- }
1020
- config.fanOuts = config.fanOuts || [];
1021
- config.fanOuts.push({
1022
- source: { node: result.source.node, port: result.source.port },
1023
- targets: result.targets,
1024
- });
1025
- }
1026
- parseFanInTag(tag, config, warnings) {
1027
- const comment = tag.getCommentText() || '';
1028
- const result = parseFanInLine(`@fanIn ${comment}`, warnings);
1029
- if (!result) {
1030
- warnings.push(`Invalid @fanIn tag format: ${comment}`);
1031
- return;
1032
- }
1033
- if (!result.target.port) {
1034
- warnings.push(`@fanIn target must specify a port: ${comment}`);
1035
- return;
1036
- }
1037
- config.fanIns = config.fanIns || [];
1038
- config.fanIns.push({
1039
- sources: result.sources,
1040
- target: { node: result.target.node, port: result.target.port },
1041
- });
1042
- }
1043
- parseCoerceTag(tag, config, warnings) {
1044
- const comment = tag.getCommentText() || '';
1045
- const result = parseCoerceLine(`@coerce ${comment}`, warnings);
1046
- if (!result) {
1047
- warnings.push(`Invalid @coerce tag format: ${comment}`);
1048
- return;
1049
- }
1050
- config.coercions = config.coercions || [];
1051
- config.coercions.push({
1052
- instanceId: result.instanceId,
1053
- source: result.source,
1054
- target: result.target,
1055
- targetType: result.targetType,
1056
- });
1057
- }
1058
- /**
1059
- * Parse @trigger tag using Chevrotain parser.
1060
- * Delegates unrecognized trigger formats to the tag registry (e.g. CI/CD triggers).
1061
- */
1062
- parseTriggerTag(tag, config, warnings, tagRegistry) {
1063
- const comment = (tag.getCommentText() || '').trim();
1064
- // Check if the trigger looks like a CI/CD keyword (push, pull_request, etc.)
1065
- const cicdKeywords = ['push', 'pull_request', 'dispatch', 'tag', 'schedule'];
1066
- const firstToken = comment.split(/\s/)[0];
1067
- // CI/CD triggers: delegate to pack handler if registered
1068
- if (cicdKeywords.includes(firstToken) && tagRegistry && tagRegistry.has('_cicdTrigger')) {
1069
- if (!config.deploy)
1070
- config.deploy = {};
1071
- tagRegistry.handle('_cicdTrigger', comment, 'workflow', config.deploy, warnings);
1072
- return;
1073
- }
1074
- // Core FW trigger parsing (event= and/or cron=)
1075
- const result = parseTriggerLine(`@trigger ${comment}`, warnings);
1076
- if (result) {
1077
- // Merge: multiple @trigger tags accumulate (event + cron can be separate tags)
1078
- config.trigger = config.trigger || {};
1079
- if (result.event)
1080
- config.trigger.event = result.event;
1081
- if (result.cron)
1082
- config.trigger.cron = result.cron;
1083
- return;
1084
- }
1085
- // Not a core trigger and no CI/CD handler available. Try CI/CD keywords as fallback hint.
1086
- if (cicdKeywords.includes(firstToken)) {
1087
- warnings.push(`@trigger ${firstToken} looks like a CI/CD trigger but no CI/CD pack is installed. ` +
1088
- `Install @synergenius/flow-weaver-pack-cicd to enable CI/CD pipeline annotations.`);
1089
- return;
1090
- }
1091
- warnings.push(`Invalid @trigger format: @trigger ${comment}`);
1092
- }
1093
- /**
1094
- * Parse @cancelOn tag using Chevrotain parser.
1095
- */
1096
- parseCancelOnTag(tag, config, warnings) {
1097
- const comment = tag.getCommentText() || '';
1098
- const result = parseCancelOnLine(`@cancelOn ${comment}`, warnings);
1099
- if (!result) {
1100
- warnings.push(`Invalid @cancelOn format: @cancelOn ${comment}`);
1101
- return;
1102
- }
1103
- config.cancelOn = result;
1104
- }
1105
- /**
1106
- * Parse @throttle tag using Chevrotain parser.
1107
- */
1108
- parseThrottleTag(tag, config, warnings) {
1109
- const comment = tag.getCommentText() || '';
1110
- const result = parseThrottleLine(`@throttle ${comment}`, warnings);
1111
- if (!result) {
1112
- warnings.push(`Invalid @throttle format: @throttle ${comment}`);
1113
- return;
1114
- }
1115
- config.throttle = result;
1116
- }
1117
- /**
1118
- * Parse @deploy tag.
1119
- * Format: @deploy <target> key=value key2="value with spaces" key3=123 key4=true
1120
- *
1121
- * Examples:
1122
- * @deploy github-actions action="actions/checkout@v4"
1123
- * @deploy my-target durableSteps=true framework="next" retries=3
1124
- * @deploy another-target memory=256 timeout=30
1125
- *
1126
- * Values are auto-coerced: "true"/"false" → boolean, numeric strings → number.
1127
- */
1128
- parseDeployTag(tag, deployMap) {
1129
- const text = (tag.getCommentText() || '').trim();
1130
- if (!text)
1131
- return;
1132
- // Split target name from remaining key=value pairs
1133
- const spaceIdx = text.indexOf(' ');
1134
- const targetName = spaceIdx === -1 ? text : text.substring(0, spaceIdx);
1135
- const rest = spaceIdx === -1 ? '' : text.substring(spaceIdx + 1);
1136
- if (!targetName)
1137
- return;
1138
- if (!deployMap[targetName])
1139
- deployMap[targetName] = {};
1140
- if (!rest)
1141
- return;
1142
- // Parse key=value and key="value with spaces" pairs
1143
- // The quoted value pattern handles escaped quotes: "echo \"hello\""
1144
- const kvRegex = /(\w[\w-]*)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([\S]+))/g;
1145
- let match;
1146
- while ((match = kvRegex.exec(rest)) !== null) {
1147
- const key = match[1];
1148
- const quotedVal = match[2]; // captured from "..."
1149
- const bareVal = match[3]; // captured from unquoted
1150
- if (quotedVal !== undefined) {
1151
- // Quoted values: check if comma-separated list → string[]
1152
- if (quotedVal.includes(',')) {
1153
- deployMap[targetName][key] = quotedVal.split(',').map(v => v.trim());
1154
- }
1155
- else {
1156
- deployMap[targetName][key] = quotedVal;
1157
- }
1158
- }
1159
- else if (bareVal !== undefined) {
1160
- // Bare values: auto-coerce boolean and number
1161
- if (bareVal === 'true') {
1162
- deployMap[targetName][key] = true;
1163
- }
1164
- else if (bareVal === 'false') {
1165
- deployMap[targetName][key] = false;
1166
- }
1167
- else {
1168
- const num = Number(bareVal);
1169
- deployMap[targetName][key] = isNaN(num) ? bareVal : num;
1170
- }
1171
- }
1172
- }
1173
- }
1174
- /**
1175
- * Parse default value from string
1176
- */
1177
- parseDefaultValue(value) {
1178
- // Try to parse as JSON
1179
- try {
1180
- return JSON.parse(value);
1181
- }
1182
- catch {
1183
- // Return as string if not valid JSON
1184
- return value;
1185
- }
1186
- }
1187
- }
1188
- export const jsdocParser = new JSDocParser();
1189
- //# sourceMappingURL=jsdoc-parser.js.map