@synergenius/flow-weaver 0.33.2 → 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 -245
  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 -89384
  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 +20 -32
  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 +2 -3
  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 +1 -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 -1226
  781. package/dist/diagram/html-viewer.d.ts +0 -21
  782. package/dist/diagram/html-viewer.js +0 -1745
  783. package/dist/diagram/layout.js +0 -143
  784. package/dist/diagram/orthogonal-router.js +0 -458
  785. package/dist/diagram/renderer.d.ts +0 -3
  786. package/dist/diagram/renderer.js +0 -280
  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
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Workflow JSDoc.
3
+ *
4
+ * Decides the `@flowWeaver workflow` comment above the workflow function:
5
+ * workflow options, pack deploy tags, `@fwImport` lines, `@node` instances,
6
+ * macros (authored ones that still hold, plus `@path` chains detected in the
7
+ * connections), the `@connect` lines no macro or expression already implies,
8
+ * `@param`/`@returns` ports, and scopes. Only the comment is replaced; the
9
+ * function is left alone.
10
+ */
11
+ import type { TWorkflowAST } from '../../ast/types';
12
+ import { type SourceEdit } from './source-file';
13
+ /**
14
+ * Replace the workflow function's JSDoc comment with updated annotations
15
+ */
16
+ export declare function replaceWorkflowJSDoc(source: string, ast: TWorkflowAST, options?: {
17
+ skipParamReturns?: boolean;
18
+ }): SourceEdit;
19
+ //# sourceMappingURL=workflow-jsdoc.d.ts.map
@@ -29,25 +29,22 @@
29
29
  * - **Manipulation**: `addNode()`, `removeNode()`, `addConnection()`, etc.
30
30
  * - **Builder**: `WorkflowBuilder` for programmatic AST construction
31
31
  */
32
- export type { TWorkflowAST, TNodeTypeDefaultConfig, TNodeTypeAST, TNodeInstanceConfig, TNodeInstanceAST, TConnectionAST, TPortReference, TImportDeclaration, TImportSpecifier, TPortDefinition, TDataType, TSerializableValue, TSerializableObject, TSerializableArray, TExecuteWhen, TBranchingStrategy, TWorkflowMetadata, TNodeMetadata, TConnectionMetadata, TSourceLocation, TControlFlowGraph, TControlFlowEdge, TValidationError, TAnalysisResult, TBranchingNodeInfo, TBranchRegion, TMergeNodeInfo, TASTTransformer, TASTVisitor, TParseOptions, TValidationRule, TGenerateOptions, TCompileResult, TCompilationMetadata, } from '../ast/types.js';
33
- export { type CompileOptions, compileWorkflow } from './compile.js';
34
- export { type GenerateResult, generateCode } from './generate.js';
35
- export { type InPlaceGenerateOptions, type InPlaceGenerateResult, generateInPlace, hasInPlaceMarkers, stripGeneratedSections, MARKERS, } from './generate-in-place.js';
36
- export { type ParseResult, parseWorkflow } from './parse.js';
37
- export { transformWorkflow } from './transform.js';
38
- export { type ValidationResult, validateWorkflow } from './validate.js';
39
- export { validationRuleRegistry } from './validation-registry.js';
40
- export * from './manipulation/index.js';
41
- export { applyModifyOperation, validateModifyParams } from './modify-operation.js';
42
- export { withValidation, withMinimalValidation, withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeTypeExists, assertNodeExists, assertNodeNotExists, } from './helpers.js';
43
- export * from './query.js';
44
- export * from './builder.js';
45
- export * from './workflow-file-operations.js';
46
- export * from './templates.js';
47
- export * from './patterns.js';
48
- export { type CommandResult, runCommand, getAvailableCommands } from './command-runner.js';
49
- export { AnnotationParser } from '../parser.js';
50
- export { compileTargetRegistry, type CompileTarget } from '../generator/compile-target-registry.js';
51
- export { devModeRegistry, type DevModeProvider, type DevModeOptions } from '../generator/dev-mode-registry.js';
52
- export { tagHandlerRegistry, type TagHandlerRegistry, type TTagHandlerFn, type TTagHandlerContext } from '../parser/tag-registry.js';
32
+ export type { TWorkflowAST, TNodeTypeDefaultConfig, TNodeTypeAST, TNodeInstanceConfig, TNodeInstanceAST, TConnectionAST, TPortReference, TImportDeclaration, TImportSpecifier, TPortDefinition, TDataType, TSerializableValue, TSerializableObject, TSerializableArray, TExecuteWhen, TBranchingStrategy, TWorkflowMetadata, TNodeMetadata, TConnectionMetadata, TSourceLocation, TControlFlowGraph, TControlFlowEdge, TValidationError, TAnalysisResult, TBranchingNodeInfo, TBranchRegion, TMergeNodeInfo, TASTTransformer, TASTVisitor, TParseOptions, TValidationRule, TGenerateOptions, TCompileResult, TCompilationMetadata, } from '../ast/types';
33
+ export { type CompileOptions, compileWorkflow } from './compile';
34
+ export { type GenerateResult, generateCode } from './generate';
35
+ export { type InPlaceGenerateOptions, type InPlaceGenerateResult, generateInPlace, hasInPlaceMarkers, stripGeneratedSections, MARKERS, } from './generate-in-place';
36
+ export { type ParseResult, parseWorkflow, parseWorkflowSourceAtPath, } from './parse';
37
+ export { transformWorkflow } from './transform';
38
+ export { type ValidationResult, validateWorkflow } from './validate';
39
+ export { validationRuleRegistry } from './validation-registry';
40
+ export * from './manipulation';
41
+ export { applyModifyOperation, validateModifyParams } from './modify-operation';
42
+ export { withValidation, withMinimalValidation, withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeTypeExists, assertNodeExists, assertNodeNotExists, } from './helpers';
43
+ export * from './query';
44
+ export * from './builder';
45
+ export * from './workflow-file-operations';
46
+ export * from './templates';
47
+ export { type CommandResult, runCommand, getAvailableCommands } from './command-runner';
48
+ export { AnnotationParser } from '../parser/annotation-parser.js';
49
+ export { tagHandlerRegistry, type TagHandlerRegistry, type TTagHandlerFn, type TTagHandlerContext, type TTagSerializerFn } from '../parser/tag-registry.js';
53
50
  //# sourceMappingURL=index.d.ts.map
package/dist/api/index.js CHANGED
@@ -1,53 +1,259 @@
1
- /**
2
- * @module api
3
- *
4
- * # Flow Weaver API
5
- *
6
- * High-level API for working with Flow Weaver workflows.
7
- *
8
- * ## Parse → Validate → Generate Pipeline
9
- *
10
- * ```
11
- * Source File (.ts)
12
- * ↓
13
- * parseWorkflow() → TWorkflowAST
14
- * ↓
15
- * validateWorkflow() → ValidationResult
16
- * ↓
17
- * generateCode() → Executable code
18
- * ```
19
- *
20
- * Or use `compileWorkflow()` for all steps in one call.
21
- *
22
- * ## Key Exports
23
- *
24
- * - **Parsing**: {@link parseWorkflow}
25
- * - **Validation**: {@link validateWorkflow}
26
- * - **Generation**: {@link generateCode}, {@link generateInPlace}
27
- * - **Compilation**: {@link compileWorkflow}
28
- * - **Query**: `getNode()`, `getNodeType()`, `findConnections()`
29
- * - **Manipulation**: `addNode()`, `removeNode()`, `addConnection()`, etc.
30
- * - **Builder**: `WorkflowBuilder` for programmatic AST construction
31
- */
32
- export { compileWorkflow } from './compile.js';
33
- export { generateCode } from './generate.js';
34
- export { generateInPlace, hasInPlaceMarkers, stripGeneratedSections, MARKERS, } from './generate-in-place.js';
35
- export { parseWorkflow } from './parse.js';
36
- export { transformWorkflow } from './transform.js';
37
- export { validateWorkflow } from './validate.js';
38
- export { validationRuleRegistry } from './validation-registry.js';
39
- export * from './manipulation/index.js';
40
- export { applyModifyOperation, validateModifyParams } from './modify-operation.js';
41
- export { withValidation, withMinimalValidation, withoutValidation, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeTypeExists, assertNodeExists, assertNodeNotExists, } from './helpers.js';
42
- export * from './query.js';
43
- export * from './builder.js';
44
- export * from './workflow-file-operations.js';
45
- export * from './templates.js';
46
- export * from './patterns.js';
47
- export { runCommand, getAvailableCommands } from './command-runner.js';
48
- // Re-exports needed by export target packs
49
- export { AnnotationParser } from '../parser.js';
50
- export { compileTargetRegistry } from '../generator/compile-target-registry.js';
51
- export { devModeRegistry } from '../generator/dev-mode-registry.js';
52
- export { tagHandlerRegistry } from '../parser/tag-registry.js';
53
- //# sourceMappingURL=index.js.map
1
+ import {
2
+ WorkflowBuilder,
3
+ addConnection,
4
+ addConnections,
5
+ addNode,
6
+ addNodeType,
7
+ addNodes,
8
+ addToScope,
9
+ applyModifyOperation,
10
+ assertNodeExists,
11
+ assertNodeNotExists,
12
+ assertNodeTypeExists,
13
+ cloneWorkflow,
14
+ createScope,
15
+ createWorkflow,
16
+ fromAST,
17
+ generateNodeFromTemplate,
18
+ generateUniqueNodeId,
19
+ generateWorkflowFromTemplate,
20
+ getAvailableCommands,
21
+ getNodeTemplate,
22
+ getNodeType,
23
+ getWorkflowTemplate,
24
+ hasNodeType,
25
+ listNodeTemplates,
26
+ listNodeTypes,
27
+ listWorkflowTemplates,
28
+ moveToScope,
29
+ reconnect,
30
+ removeAllConnections,
31
+ removeConnection,
32
+ removeFromScope,
33
+ removeNode,
34
+ removeNodeType,
35
+ removeNodes,
36
+ removeScope,
37
+ renameNode,
38
+ renameNodeType,
39
+ renameWorkflow,
40
+ replaceConnections,
41
+ replaceNodeTypes,
42
+ runCommand,
43
+ setInstancePortConfigs,
44
+ setNodeConfig,
45
+ setNodeLabel,
46
+ setNodeMinimized,
47
+ setNodeSize,
48
+ setOutputFileType,
49
+ setStartExitPorts,
50
+ setWorkflowDescription,
51
+ setWorkflowMetadata,
52
+ setWorkflowPorts,
53
+ swapNodeInstancePortOrder,
54
+ swapPortOrder,
55
+ transformWorkflow,
56
+ updateNode,
57
+ updateNodeType,
58
+ validateModifyParams,
59
+ withMinimalValidation,
60
+ withValidation,
61
+ withoutValidation
62
+ } from "../chunks/chunk-7YYKTPJ5.js";
63
+ import {
64
+ validateWorkflow
65
+ } from "../chunks/chunk-P44RIZ7C.js";
66
+ import "../chunks/chunk-ZKEGXO73.js";
67
+ import {
68
+ validationRuleRegistry
69
+ } from "../chunks/chunk-A5MBOFVY.js";
70
+ import "../chunks/chunk-CYHYDLV4.js";
71
+ import {
72
+ compileWorkflow,
73
+ generateCode
74
+ } from "../chunks/chunk-F3RTZV2A.js";
75
+ import {
76
+ addWorkflowToSource,
77
+ getAvailableWorkflows,
78
+ removeWorkflowFromSource,
79
+ toggleWorkflowExport
80
+ } from "../chunks/chunk-YSPBPZDV.js";
81
+ import "../chunks/chunk-VQ7H33J4.js";
82
+ import "../chunks/chunk-HKZLQJDV.js";
83
+ import "../chunks/chunk-NQNLUAPO.js";
84
+ import {
85
+ generateInPlace
86
+ } from "../chunks/chunk-TAIUWKZB.js";
87
+ import {
88
+ parseWorkflow,
89
+ parseWorkflowSourceAtPath
90
+ } from "../chunks/chunk-INDEVYEC.js";
91
+ import "../chunks/chunk-KU3CLJI2.js";
92
+ import "../chunks/chunk-5Y3AIUWY.js";
93
+ import "../chunks/chunk-CZBCCK4Y.js";
94
+ import "../chunks/chunk-AXNQRVJB.js";
95
+ import "../chunks/chunk-O2U2LO57.js";
96
+ import "../chunks/chunk-QDE4Z7KW.js";
97
+ import "../chunks/chunk-XAV22WD7.js";
98
+ import {
99
+ countConnections,
100
+ countNodeTypes,
101
+ countNodes,
102
+ findDeadEndDetails,
103
+ findDeadEnds,
104
+ findDisconnectedOutputPorts,
105
+ findIsolatedNodes,
106
+ findNodesByName,
107
+ findPath,
108
+ findUnusedNodeTypes,
109
+ findWorkflows,
110
+ formatPortReference,
111
+ getConnectedPorts,
112
+ getConnections,
113
+ getDataDependencies,
114
+ getDependencies,
115
+ getDependents,
116
+ getExecutionGroups,
117
+ getIncomingConnections,
118
+ getNode,
119
+ getNodes,
120
+ getNodesByType,
121
+ getNodesInScope,
122
+ getOutgoingConnections,
123
+ getTopologicalOrder,
124
+ getTransitiveDependencies,
125
+ getUnconnectedPorts,
126
+ hasNode,
127
+ isConnected,
128
+ portReferencesEqual,
129
+ validatePortReference
130
+ } from "../chunks/chunk-P2CVDGHR.js";
131
+ import {
132
+ AnnotationParser,
133
+ MARKERS,
134
+ hasInPlaceMarkers,
135
+ stripGeneratedSections
136
+ } from "../chunks/chunk-ZMGN6F3S.js";
137
+ import "../chunks/chunk-REEYC73I.js";
138
+ import "../chunks/chunk-4EUSHAY6.js";
139
+ import "../chunks/chunk-4KDUEOFD.js";
140
+ import "../chunks/chunk-DUO6H5PR.js";
141
+ import {
142
+ tagHandlerRegistry
143
+ } from "../chunks/chunk-VP2P3BPA.js";
144
+ import "../chunks/chunk-B6HQ6YS5.js";
145
+ import "../chunks/chunk-E5WN7IGO.js";
146
+ import "../chunks/chunk-NDSTGMKR.js";
147
+ import "../chunks/chunk-KMWCCOUJ.js";
148
+ import "../chunks/chunk-QYPORSLO.js";
149
+ import "../chunks/chunk-R4QGNK34.js";
150
+ import "../chunks/chunk-SEWDMQ6Q.js";
151
+ export {
152
+ AnnotationParser,
153
+ MARKERS,
154
+ WorkflowBuilder,
155
+ addConnection,
156
+ addConnections,
157
+ addNode,
158
+ addNodeType,
159
+ addNodes,
160
+ addToScope,
161
+ addWorkflowToSource,
162
+ applyModifyOperation,
163
+ assertNodeExists,
164
+ assertNodeNotExists,
165
+ assertNodeTypeExists,
166
+ cloneWorkflow,
167
+ compileWorkflow,
168
+ countConnections,
169
+ countNodeTypes,
170
+ countNodes,
171
+ createScope,
172
+ createWorkflow,
173
+ findDeadEndDetails,
174
+ findDeadEnds,
175
+ findDisconnectedOutputPorts,
176
+ findIsolatedNodes,
177
+ findNodesByName,
178
+ findPath,
179
+ findUnusedNodeTypes,
180
+ findWorkflows,
181
+ formatPortReference,
182
+ fromAST,
183
+ generateCode,
184
+ generateInPlace,
185
+ generateNodeFromTemplate,
186
+ generateUniqueNodeId,
187
+ generateWorkflowFromTemplate,
188
+ getAvailableCommands,
189
+ getAvailableWorkflows,
190
+ getConnectedPorts,
191
+ getConnections,
192
+ getDataDependencies,
193
+ getDependencies,
194
+ getDependents,
195
+ getExecutionGroups,
196
+ getIncomingConnections,
197
+ getNode,
198
+ getNodeTemplate,
199
+ getNodeType,
200
+ getNodes,
201
+ getNodesByType,
202
+ getNodesInScope,
203
+ getOutgoingConnections,
204
+ getTopologicalOrder,
205
+ getTransitiveDependencies,
206
+ getUnconnectedPorts,
207
+ getWorkflowTemplate,
208
+ hasInPlaceMarkers,
209
+ hasNode,
210
+ hasNodeType,
211
+ isConnected,
212
+ listNodeTemplates,
213
+ listNodeTypes,
214
+ listWorkflowTemplates,
215
+ moveToScope,
216
+ parseWorkflow,
217
+ parseWorkflowSourceAtPath,
218
+ portReferencesEqual,
219
+ reconnect,
220
+ removeAllConnections,
221
+ removeConnection,
222
+ removeFromScope,
223
+ removeNode,
224
+ removeNodeType,
225
+ removeNodes,
226
+ removeScope,
227
+ removeWorkflowFromSource,
228
+ renameNode,
229
+ renameNodeType,
230
+ renameWorkflow,
231
+ replaceConnections,
232
+ replaceNodeTypes,
233
+ runCommand,
234
+ setInstancePortConfigs,
235
+ setNodeConfig,
236
+ setNodeLabel,
237
+ setNodeMinimized,
238
+ setNodeSize,
239
+ setOutputFileType,
240
+ setStartExitPorts,
241
+ setWorkflowDescription,
242
+ setWorkflowMetadata,
243
+ setWorkflowPorts,
244
+ stripGeneratedSections,
245
+ swapNodeInstancePortOrder,
246
+ swapPortOrder,
247
+ tagHandlerRegistry,
248
+ toggleWorkflowExport,
249
+ transformWorkflow,
250
+ updateNode,
251
+ updateNodeType,
252
+ validateModifyParams,
253
+ validatePortReference,
254
+ validateWorkflow,
255
+ validationRuleRegistry,
256
+ withMinimalValidation,
257
+ withValidation,
258
+ withoutValidation
259
+ };
@@ -0,0 +1,3 @@
1
+ export declare const INLINE_ENGINE_SOURCE = "// ---- src/runtime/continuation-core.ts ------------------------------------------\n\n/* The version of the engine that wrote a continuation: the package's own. */\nconst ENGINE_VERSION: string = VERSION;\nconst CONTINUATION_FORMAT_VERSION = 1 as const;\nconst GENERATOR_ABI = \"flow-weaver-generated-v2\" as const;\nconst MAX_CONTINUATION_BYTES = 1024 * 1024;\nconst MAX_CONTINUATION_DEPTH = 32;\nconst MAX_CONTINUATION_ENTRIES = 10_000;\nconst MAX_CONTINUATION_STRING_BYTES = 256 * 1024;\n\n/*\n * Who answers a gate: a person deciding, a system supplying data, an agent\n * doing a task, or the clock (`timer`: a `sleep` node, woken by whoever\n * keeps the run when its time has come).\n */\ntype DurableGateKind = \"approval\" | \"input\" | \"agent\" | \"timer\";\n\ntype WireValue =\n | null\n | boolean\n | number\n | string\n | readonly WireValue[]\n | { readonly [key: string]: WireValue };\n\ninterface WorkflowFrameAddress {\n readonly workflowId: string;\n readonly invocation: number;\n readonly callerNodeId?: string;\n readonly callerExecutionIndex?: number;\n}\n\ninterface ScopeAddress {\n readonly parentNodeId: string;\n readonly parentExecutionIndex: number;\n readonly scopeName: string;\n readonly invocation: number;\n readonly loopIteration?: number;\n readonly branchArm?: string;\n}\n\ninterface BranchAddress {\n readonly workflowId: string;\n readonly frameDepth: number;\n readonly nodeId: string;\n readonly executionIndex: number;\n readonly arm: string;\n}\n\ninterface ExecutionAddress {\n readonly frames: readonly WorkflowFrameAddress[];\n readonly scopes: readonly ScopeAddress[];\n readonly branches: readonly BranchAddress[];\n readonly nodeId: string;\n readonly nodeType: string;\n readonly executionIndex: number;\n}\n\ninterface ContinuationVariable {\n readonly address: ExecutionAddress;\n readonly portName: string;\n readonly value: WireValue;\n}\n\ninterface EffectReceipt {\n readonly address: ExecutionAddress;\n readonly operationKey: string;\n readonly receipt: WireValue;\n}\n\ninterface ContinuationState {\n readonly completed: readonly ExecutionAddress[];\n readonly variables: readonly ContinuationVariable[];\n readonly nextBoundary: ExecutionAddress;\n}\n\ninterface DurableGate {\n readonly id: string;\n readonly kind: DurableGateKind;\n readonly address: ExecutionAddress;\n readonly payload: WireValue;\n}\n\n/* The branch arms a node sits under, as the compiled graph describes them. */\ntype ContinuationGraphNodeBranchPath = readonly {\n readonly nodeId: string;\n readonly arm: string;\n}[];\n\ninterface ContinuationEnvelope {\n readonly formatVersion: typeof CONTINUATION_FORMAT_VERSION;\n readonly runId: string;\n readonly gateId: string;\n readonly gateKind: DurableGateKind;\n readonly workflowId: string;\n readonly bundleDigest: string;\n readonly graphFingerprint: string;\n readonly engineVersion: string;\n readonly generatorAbi: string;\n readonly location: ExecutionAddress;\n readonly state: ContinuationState;\n readonly receipts: readonly EffectReceipt[];\n readonly createdAt: string;\n readonly checksum: string;\n}\n\ndeclare const acceptedContinuationBrand: unique symbol;\ntype AcceptedContinuationEnvelope = ContinuationEnvelope & {\n readonly [acceptedContinuationBrand]: true;\n};\n\ntype ContinuationRefusalReason =\n | \"malformed\"\n | \"oversized\"\n | \"unsupported-format\"\n | \"incompatible-engine\"\n | \"incompatible-generator\"\n | \"wrong-workflow\"\n | \"wrong-bundle\"\n | \"wrong-graph\"\n | \"checksum-mismatch\"\n | \"stale-gate\"\n | \"wrong-run\"\n | \"ambiguous-effect\";\n\ninterface ContinuationRefusal {\n readonly accepted: false;\n readonly reason: ContinuationRefusalReason;\n readonly message: string;\n}\n\ninterface AcceptedContinuation {\n readonly accepted: true;\n readonly envelope: AcceptedContinuationEnvelope;\n}\n\ntype DecodedContinuation = AcceptedContinuation | ContinuationRefusal;\n\n/* What a resume must match before an envelope is trusted. */\ninterface ContinuationIdentity {\n readonly runId: string;\n readonly workflowId: string;\n /* When given, the envelope must be the one this gate answer belongs to. */\n readonly gateId?: string;\n}\n\nconst ENVELOPE_KEYS = [\n \"formatVersion\",\n \"runId\",\n \"gateId\",\n \"gateKind\",\n \"workflowId\",\n \"bundleDigest\",\n \"graphFingerprint\",\n \"engineVersion\",\n \"generatorAbi\",\n \"location\",\n \"state\",\n \"receipts\",\n \"createdAt\",\n \"checksum\",\n] as const;\n\nconst acceptedContinuations = new WeakSet<object>();\n\n// ---------------------------------------------------------------------------\n// Hashing. A compiled file has no `node:crypto`, and Web Crypto only hashes\n// asynchronously, while gate ids are needed synchronously in the middle of a\n// run. This is SHA-256 from the specification, over UTF-8 bytes.\n// ---------------------------------------------------------------------------\n\nfunction utf8BytesOf(text: string): number[] {\n const bytes: number[] = [];\n for (let index = 0; index < text.length; index++) {\n let code = text.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff && index + 1 < text.length) {\n const low = text.charCodeAt(index + 1);\n if (low >= 0xdc00 && low <= 0xdfff) {\n code = 0x10000 + ((code - 0xd800) << 10) + (low - 0xdc00);\n index++;\n }\n }\n // A lone surrogate is not encodable. Every UTF-8 encoder, Node's\n // included, writes the replacement character for it.\n if (code >= 0xd800 && code <= 0xdfff) code = 0xfffd;\n if (code < 0x80) bytes.push(code);\n else if (code < 0x800) bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n else if (code < 0x10000) {\n bytes.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n } else {\n bytes.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n );\n }\n }\n return bytes;\n}\n\nfunction utf8ByteLength(text: string): number {\n return utf8BytesOf(text).length;\n}\n\nconst SHA256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n\n/* The SHA-256 of a string's UTF-8 bytes, as lowercase hex. */\nfunction sha256Hex(text: string): string {\n const bytes = utf8BytesOf(text);\n const bitLength = bytes.length * 8;\n bytes.push(0x80);\n while (bytes.length % 64 !== 56) bytes.push(0);\n // The length is a 64-bit big-endian integer. Strings this long never\n // occur, so the high word is the floor of the division.\n const high = Math.floor(bitLength / 0x100000000);\n const low = bitLength >>> 0;\n bytes.push(\n (high >>> 24) & 0xff, (high >>> 16) & 0xff, (high >>> 8) & 0xff, high & 0xff,\n (low >>> 24) & 0xff, (low >>> 16) & 0xff, (low >>> 8) & 0xff, low & 0xff,\n );\n\n const h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n const w = new Array<number>(64);\n const rotr = (value: number, bits: number): number => (value >>> bits) | (value << (32 - bits));\n\n for (let offset = 0; offset < bytes.length; offset += 64) {\n for (let i = 0; i < 16; i++) {\n const j = offset + i * 4;\n w[i] = ((bytes[j] << 24) | (bytes[j + 1] << 16) | (bytes[j + 2] << 8) | bytes[j + 3]) >>> 0;\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n let [a, b, c, d, e, f, g, hh] = h;\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = (e & f) ^ (~e & g);\n const temp1 = (hh + S1 + ch + SHA256_K[i] + w[i]) >>> 0;\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (S0 + maj) >>> 0;\n hh = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n h[0] = (h[0] + a) >>> 0;\n h[1] = (h[1] + b) >>> 0;\n h[2] = (h[2] + c) >>> 0;\n h[3] = (h[3] + d) >>> 0;\n h[4] = (h[4] + e) >>> 0;\n h[5] = (h[5] + f) >>> 0;\n h[6] = (h[6] + g) >>> 0;\n h[7] = (h[7] + hh) >>> 0;\n }\n return h.map((word) => word.toString(16).padStart(8, \"0\")).join(\"\");\n}\n\n// ---------------------------------------------------------------------------\n// Wire values: what may cross a gate or live in a continuation.\n// ---------------------------------------------------------------------------\n\nclass WireValidationError extends Error {\n constructor(\n readonly reason: \"malformed\" | \"oversized\",\n message: string,\n ) {\n super(message);\n this.name = \"WireValidationError\";\n }\n}\n\ninterface ValidationBudget {\n entries: number;\n bytes: number;\n readonly seen: Set<object>;\n}\n\nconst ownKeyOf = (value: object, key: string): boolean => Object.prototype.hasOwnProperty.call(value, key);\n\nfunction assertWireValue(\n value: unknown,\n path: string,\n depth: number,\n budget: ValidationBudget,\n): asserts value is WireValue {\n if (depth > MAX_CONTINUATION_DEPTH) {\n throw new WireValidationError(\"oversized\", `${path} exceeds maximum depth`);\n }\n\n budget.entries++;\n if (budget.entries > MAX_CONTINUATION_ENTRIES) {\n throw new WireValidationError(\"oversized\", \"continuation exceeds aggregate entry limit\");\n }\n\n if (value === null || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new WireValidationError(\"malformed\", `${path} contains a non-finite number`);\n }\n return;\n }\n if (typeof value === \"string\") {\n const bytes = utf8ByteLength(value);\n if (bytes > MAX_CONTINUATION_STRING_BYTES) {\n throw new WireValidationError(\"oversized\", `${path} exceeds maximum string size`);\n }\n budget.bytes += bytes;\n if (budget.bytes > MAX_CONTINUATION_BYTES) {\n throw new WireValidationError(\"oversized\", \"continuation exceeds maximum wire size\");\n }\n return;\n }\n if (\n value === undefined ||\n typeof value === \"bigint\" ||\n typeof value === \"symbol\" ||\n typeof value === \"function\"\n ) {\n throw new WireValidationError(\"malformed\", `${path} is not a plain wire value`);\n }\n // Everything that is not an object was returned or refused above. The cast\n // is for a compiled file checked without strictNullChecks, where `unknown`\n // does not narrow to `object` by exclusion.\n const seen = value as object;\n if (budget.seen.has(seen)) {\n throw new WireValidationError(\"malformed\", `${path} contains a cycle or repeated object`);\n }\n budget.seen.add(seen);\n\n if (Array.isArray(value)) {\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new WireValidationError(\"malformed\", `${path} contains a symbol property`);\n }\n const descriptors = Object.getOwnPropertyDescriptors(value);\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if (key === \"length\") continue;\n if (!/^(0|[1-9]\\d*)$/.test(key) || descriptor.get || descriptor.set || !descriptor.enumerable) {\n throw new WireValidationError(\"malformed\", `${path} contains an accessor or property`);\n }\n }\n for (let index = 0; index < value.length; index++) {\n if (!ownKeyOf(descriptors, String(index))) {\n throw new WireValidationError(\"malformed\", `${path} contains a sparse array`);\n }\n assertWireValue(descriptors[String(index)].value, `${path}[${index}]`, depth + 1, budget);\n }\n budget.seen.delete(seen);\n return;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new WireValidationError(\"malformed\", `${path} contains a class or host object`);\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new WireValidationError(\"malformed\", `${path} contains a symbol property`);\n }\n const descriptors = Object.getOwnPropertyDescriptors(value);\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if (descriptor.get || descriptor.set || !descriptor.enumerable) {\n throw new WireValidationError(\"malformed\", `${path}.${key} is an accessor or non-enumerable property`);\n }\n const keyBytes = utf8ByteLength(key);\n if (keyBytes > MAX_CONTINUATION_STRING_BYTES) {\n throw new WireValidationError(\"oversized\", `${path} contains an oversized key`);\n }\n budget.bytes += keyBytes;\n assertWireValue(descriptor.value, `${path}.${key}`, depth + 1, budget);\n }\n budget.seen.delete(seen);\n}\n\nfunction validateWireValue(value: unknown): asserts value is WireValue {\n assertWireValue(value, \"$\", 0, { entries: 0, bytes: 0, seen: new Set() });\n}\n\nfunction canonicalJson(value: WireValue): string {\n if (value === null || typeof value === \"boolean\" || typeof value === \"number\") {\n return JSON.stringify(value);\n }\n if (typeof value === \"string\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n const record = value as { readonly [key: string]: WireValue };\n return `{${Object.keys(record)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`)\n .join(\",\")}}`;\n}\n\nfunction canonicalWireValue(value: unknown): string {\n validateWireValue(value);\n return canonicalJson(value);\n}\n\nfunction cloneAndFreezeWireValue<T extends WireValue>(value: T): T {\n const cloned = JSON.parse(canonicalJson(value)) as T;\n const freeze = (entry: WireValue): void => {\n if (typeof entry !== \"object\" || entry === null) return;\n for (const child of Array.isArray(entry) ? entry : Object.values(entry)) {\n freeze(child);\n }\n Object.freeze(entry);\n };\n freeze(cloned);\n return cloned;\n}\n\n// ---------------------------------------------------------------------------\n// Identity: addresses, gate ids, operation keys, checksums.\n// ---------------------------------------------------------------------------\n\nfunction executionAddressKey(address: ExecutionAddress): string {\n return canonicalWireValue(address);\n}\n\nfunction durableGateId(runId: string, kind: DurableGateKind, address: ExecutionAddress): string {\n return sha256Hex(`${runId}\\0${kind}\\0${executionAddressKey(address)}`);\n}\n\nfunction operationKey(runId: string, address: ExecutionAddress): string {\n validateWireValue(address);\n return sha256Hex(`${runId}\\0${canonicalJson(address as unknown as WireValue)}`);\n}\n\nfunction withoutChecksum(envelope: ContinuationEnvelope): WireValue {\n const { checksum: _checksum, ...unsigned } = envelope;\n return unsigned as unknown as WireValue;\n}\n\nfunction continuationChecksum(envelope: ContinuationEnvelope): string {\n validateWireValue(withoutChecksum(envelope));\n return sha256Hex(canonicalJson(withoutChecksum(envelope)));\n}\n\nfunction createContinuationEnvelope(\n fields: Omit<\n ContinuationEnvelope,\n \"formatVersion\" | \"engineVersion\" | \"generatorAbi\" | \"createdAt\" | \"checksum\"\n > & {\n readonly engineVersion?: string;\n readonly generatorAbi?: string;\n readonly createdAt?: string;\n },\n): ContinuationEnvelope {\n const unsigned = {\n formatVersion: CONTINUATION_FORMAT_VERSION,\n runId: fields.runId,\n gateId: fields.gateId,\n gateKind: fields.gateKind,\n workflowId: fields.workflowId,\n bundleDigest: fields.bundleDigest,\n graphFingerprint: fields.graphFingerprint,\n engineVersion: fields.engineVersion ?? VERSION,\n generatorAbi: fields.generatorAbi ?? GENERATOR_ABI,\n location: fields.location,\n state: fields.state,\n receipts: fields.receipts,\n createdAt: fields.createdAt ?? new Date().toISOString(),\n } satisfies Omit<ContinuationEnvelope, \"checksum\">;\n validateWireValue(unsigned);\n const envelope = Object.assign({}, unsigned, { checksum: \"\" }) as ContinuationEnvelope;\n return { ...envelope, checksum: continuationChecksum(envelope) };\n}\n\n// ---------------------------------------------------------------------------\n// Structure: is this JSON shaped like an envelope at all?\n// ---------------------------------------------------------------------------\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction hasExactlyTheKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const actual = Object.keys(value).sort();\n const expected = [...keys].sort();\n return actual.length === expected.length && actual.every((key, index) => key === expected[index]);\n}\n\nfunction hasRequiredAndOptionalKeys(\n value: Record<string, unknown>,\n required: readonly string[],\n optional: readonly string[] = [],\n): boolean {\n const keys = Object.keys(value);\n return (\n required.every((key) => ownKeyOf(value, key)) &&\n keys.every((key) => required.includes(key) || optional.includes(key))\n );\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction isFrameAddress(value: unknown): value is WorkflowFrameAddress {\n return (\n isPlainObjectRecord(value) &&\n hasRequiredAndOptionalKeys(value, [\"workflowId\", \"invocation\"], [\"callerNodeId\", \"callerExecutionIndex\"]) &&\n typeof value.workflowId === \"string\" &&\n value.workflowId.length > 0 &&\n isNonNegativeInteger(value.invocation) &&\n (value.callerNodeId === undefined || typeof value.callerNodeId === \"string\") &&\n (value.callerExecutionIndex === undefined || isNonNegativeInteger(value.callerExecutionIndex)) &&\n ((value.callerNodeId === undefined && value.callerExecutionIndex === undefined) ||\n (typeof value.callerNodeId === \"string\" && isNonNegativeInteger(value.callerExecutionIndex)))\n );\n}\n\nfunction isScopeAddress(value: unknown): value is ScopeAddress {\n return (\n isPlainObjectRecord(value) &&\n hasRequiredAndOptionalKeys(\n value,\n [\"parentNodeId\", \"parentExecutionIndex\", \"scopeName\", \"invocation\"],\n [\"loopIteration\", \"branchArm\"],\n ) &&\n typeof value.parentNodeId === \"string\" &&\n value.parentNodeId.length > 0 &&\n isNonNegativeInteger(value.parentExecutionIndex) &&\n typeof value.scopeName === \"string\" &&\n value.scopeName.length > 0 &&\n isNonNegativeInteger(value.invocation) &&\n (value.loopIteration === undefined || isNonNegativeInteger(value.loopIteration)) &&\n (value.branchArm === undefined || typeof value.branchArm === \"string\")\n );\n}\n\nfunction isExecutionAddress(value: unknown): value is ExecutionAddress {\n return (\n isPlainObjectRecord(value) &&\n hasExactlyTheKeys(value, [\"frames\", \"scopes\", \"branches\", \"nodeId\", \"nodeType\", \"executionIndex\"]) &&\n Array.isArray(value.frames) &&\n value.frames.length > 0 &&\n value.frames.every(isFrameAddress) &&\n Array.isArray(value.scopes) &&\n value.scopes.every(isScopeAddress) &&\n Array.isArray(value.branches) &&\n value.branches.every(\n (branch) =>\n isPlainObjectRecord(branch) &&\n hasExactlyTheKeys(branch, [\"workflowId\", \"frameDepth\", \"nodeId\", \"executionIndex\", \"arm\"]) &&\n typeof branch.workflowId === \"string\" &&\n branch.workflowId.length > 0 &&\n isNonNegativeInteger(branch.frameDepth) &&\n typeof branch.nodeId === \"string\" &&\n branch.nodeId.length > 0 &&\n isNonNegativeInteger(branch.executionIndex) &&\n typeof branch.arm === \"string\" &&\n branch.arm.length > 0,\n ) &&\n typeof value.nodeId === \"string\" &&\n value.nodeId.length > 0 &&\n typeof value.nodeType === \"string\" &&\n value.nodeType.length > 0 &&\n isNonNegativeInteger(value.executionIndex)\n );\n}\n\nfunction isContinuationVariable(value: unknown): value is ContinuationVariable {\n return (\n isPlainObjectRecord(value) &&\n hasExactlyTheKeys(value, [\"address\", \"portName\", \"value\"]) &&\n isExecutionAddress(value.address) &&\n typeof value.portName === \"string\" &&\n value.portName.length > 0\n );\n}\n\nfunction isEffectReceipt(value: unknown): value is EffectReceipt {\n return (\n isPlainObjectRecord(value) &&\n hasExactlyTheKeys(value, [\"address\", \"operationKey\", \"receipt\"]) &&\n isExecutionAddress(value.address) &&\n typeof value.operationKey === \"string\" &&\n /^[0-9a-f]{64}$/.test(value.operationKey)\n );\n}\n\nfunction isContinuationState(value: unknown): value is ContinuationState {\n return (\n isPlainObjectRecord(value) &&\n hasExactlyTheKeys(value, [\"completed\", \"variables\", \"nextBoundary\"]) &&\n Array.isArray(value.completed) &&\n value.completed.every(isExecutionAddress) &&\n Array.isArray(value.variables) &&\n value.variables.every(isContinuationVariable) &&\n isExecutionAddress(value.nextBoundary)\n );\n}\n\nfunction isExactIsoUtc(value: string): boolean {\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;\n}\n\nfunction structurallyValidEnvelope(value: unknown): value is ContinuationEnvelope {\n if (!isPlainObjectRecord(value) || !hasExactlyTheKeys(value, ENVELOPE_KEYS)) return false;\n return !(\n typeof value.formatVersion !== \"number\" ||\n typeof value.runId !== \"string\" ||\n typeof value.gateId !== \"string\" ||\n ![\"approval\", \"input\", \"agent\", \"timer\"].includes(value.gateKind as string) ||\n typeof value.workflowId !== \"string\" ||\n typeof value.bundleDigest !== \"string\" ||\n typeof value.graphFingerprint !== \"string\" ||\n typeof value.engineVersion !== \"string\" ||\n typeof value.generatorAbi !== \"string\" ||\n typeof value.createdAt !== \"string\" ||\n typeof value.checksum !== \"string\" ||\n value.runId.length === 0 ||\n !/^[0-9a-f]{64}$/.test(value.gateId) ||\n value.workflowId.length === 0 ||\n value.engineVersion.length === 0 ||\n value.generatorAbi.length === 0 ||\n !isExecutionAddress(value.location) ||\n !isContinuationState(value.state) ||\n !Array.isArray(value.receipts) ||\n !value.receipts.every(isEffectReceipt) ||\n !/^sha256:[0-9a-f]{64}$/.test(value.bundleDigest) ||\n !/^[0-9a-f]{64}$/.test(value.graphFingerprint) ||\n !/^[0-9a-f]{64}$/.test(value.checksum) ||\n !isExactIsoUtc(value.createdAt) ||\n executionAddressKey(value.location) !== executionAddressKey(value.state.nextBoundary)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Acceptance: the checks a host can make without the compiled graph.\n// ---------------------------------------------------------------------------\n\n/*\n * Take an envelope back from wherever a host kept it. It is parsed when given\n * as text, checked for shape, checksum, gate identity, engine and generator\n * versions, and bound to the run and workflow it is about to resume. What is\n * accepted is a frozen copy; the input is never trusted afterwards.\n *\n * This is what the compiled file offers a host of its own. The coordinator's\n * `decodeContinuation` does this and, having the compiled graph, more.\n */\nfunction acceptContinuation(input: unknown, identity: ContinuationIdentity): DecodedContinuation {\n let value: unknown = input;\n if (typeof input === \"string\") {\n if (utf8ByteLength(input) > MAX_CONTINUATION_BYTES) {\n return { accepted: false, reason: \"oversized\", message: \"continuation exceeds maximum wire size\" };\n }\n try {\n value = JSON.parse(input);\n } catch {\n return { accepted: false, reason: \"malformed\", message: \"continuation is not valid JSON\" };\n }\n }\n try {\n validateWireValue(value);\n } catch (error) {\n if (error instanceof WireValidationError) {\n return { accepted: false, reason: error.reason, message: error.message };\n }\n return { accepted: false, reason: \"malformed\", message: \"continuation is not a wire value\" };\n }\n if (!structurallyValidEnvelope(value)) {\n return { accepted: false, reason: \"malformed\", message: \"continuation has missing, unknown, or invalid fields\" };\n }\n if (value.formatVersion !== CONTINUATION_FORMAT_VERSION) {\n return { accepted: false, reason: \"unsupported-format\", message: `unsupported continuation format ${value.formatVersion}` };\n }\n if (continuationChecksum(value) !== value.checksum) {\n return { accepted: false, reason: \"checksum-mismatch\", message: \"continuation checksum does not match\" };\n }\n if (value.gateId !== durableGateId(value.runId, value.gateKind, value.location)) {\n return { accepted: false, reason: \"malformed\", message: \"continuation gate identity does not match its execution address\" };\n }\n if (value.engineVersion !== VERSION) {\n return { accepted: false, reason: \"incompatible-engine\", message: `continuation was written by engine ${value.engineVersion}, this is ${VERSION}` };\n }\n if (value.generatorAbi !== GENERATOR_ABI) {\n return { accepted: false, reason: \"incompatible-generator\", message: \"continuation generator ABI does not match\" };\n }\n if (value.runId !== identity.runId) {\n return { accepted: false, reason: \"wrong-run\", message: \"continuation belongs to another run\" };\n }\n if (value.workflowId !== identity.workflowId) {\n return { accepted: false, reason: \"wrong-workflow\", message: \"continuation belongs to another workflow\" };\n }\n if (identity.gateId !== undefined && value.gateId !== identity.gateId) {\n return { accepted: false, reason: \"stale-gate\", message: \"continuation gate is stale or reordered\" };\n }\n const accepted = cloneAndFreezeWireValue(value as unknown as WireValue) as unknown as AcceptedContinuationEnvelope;\n acceptedContinuations.add(accepted);\n return { accepted: true, envelope: accepted };\n}\n\nfunction assertAcceptedContinuation(\n value: ContinuationEnvelope,\n): asserts value is AcceptedContinuationEnvelope {\n if (!acceptedContinuations.has(value)) {\n throw new Error(\"ContinuationEnvelope must come from a successful decodeContinuation or acceptContinuation result\");\n }\n}\n\n// ---- src/runtime/durable-execution.ts ------------------------------------------\n\ninterface GateResolution {\n readonly gateId: string;\n readonly value: WireValue;\n}\n\nfunction acceptGateResolution(resolution: GateResolution | undefined): GateResolution | undefined {\n if (resolution === undefined) return undefined;\n validateWireValue(resolution);\n const keys = Object.keys(resolution).sort();\n if (keys.length !== 2 || keys[0] !== 'gateId' || keys[1] !== 'value' || !/^[0-9a-f]{64}$/.test(resolution.gateId)) {\n throw new Error('resolution must contain exactly a canonical gateId and wire value');\n }\n return cloneAndFreezeWireValue(resolution as unknown as WireValue) as unknown as GateResolution;\n}\n\ntype EffectRecovery =\n | { readonly kind: 'not-committed' }\n | {\n readonly kind: 'committed';\n readonly receipt: WireValue;\n readonly result: WireValue;\n }\n | { readonly kind: 'repeatable' }\n | { readonly kind: 'ambiguous' };\n\ninterface EffectAdapter {\n recover(operationKey: string, address: ExecutionAddress): Promise<EffectRecovery>;\n /* Persist the exact successful effect result before it enters a continuation. */\n commit?(\n operationKey: string,\n address: ExecutionAddress,\n execution: EffectExecution<WireValue>,\n ): Promise<void>;\n}\n\ninterface WorkflowRuntimeServices {\n readonly debugger?: TDebugger;\n readonly debugController?: DebugController;\n readonly mocks?: FwMockConfig;\n readonly workflowRegistry?: Readonly<Record<string, (...args: unknown[]) => unknown>>;\n readonly effectAdapter?: EffectAdapter;\n}\n\n/*\n * The engine as a generated body sees it. It is an interface, not the class,\n * so a runtime built by the package and one built by a compiled file's own\n * copy of the engine are interchangeable to the type checker: two classes\n * with private members never are.\n */\ninterface DurableEngine {\n address(\n runtime: Pick<WorkflowRuntime, 'frames' | 'scopes' | 'branches'>,\n nodeId: string,\n nodeType: string,\n executionIndex: number,\n ): ExecutionAddress;\n /* Called once at the top of a root body: the workflow's name and graph identity. */\n bind(runtime: Pick<WorkflowRuntime, 'frames'>, workflowId: string, graphFingerprint: string): void;\n shouldExecute(address: ExecutionAddress): boolean;\n commitNode(address: ExecutionAddress): void;\n setVariable(address: ExecutionAddress, portName: string, value: unknown): void;\n getVariable(address: ExecutionAddress, portName: string, allowAncestorLookup?: boolean): unknown;\n resolveGate(runtime: WorkflowRuntime, boundary: GateBoundary): WireValue;\n executeEffect<T extends WireValue>(\n runtime: WorkflowRuntime,\n boundary: EffectBoundary,\n execute: (operationKey: string) => Promise<EffectExecution<T>>,\n ): Promise<T>;\n assertResumeResolutionConsumed(): void;\n}\n\ninterface WorkflowRuntime {\n readonly runId: string;\n readonly abortSignal?: AbortSignal;\n readonly services: WorkflowRuntimeServices;\n readonly durable: DurableEngine;\n readonly frames: readonly WorkflowFrameAddress[];\n readonly scopes: readonly ScopeAddress[];\n readonly branches: readonly BranchAddress[];\n}\n\ninterface NodeExecutionRuntime {\n readonly nodeId: string;\n readonly runtime: WorkflowRuntime;\n readonly recursionDepth: number;\n createNestedRuntime(workflowId: string): WorkflowRuntime;\n}\n\ninterface CreateWorkflowRuntimeOptions {\n readonly runId: string;\n readonly workflowId: string;\n readonly abortSignal?: AbortSignal;\n readonly services?: WorkflowRuntimeServices;\n readonly continuation?: AcceptedContinuationEnvelope;\n readonly resolution?: GateResolution;\n /*\n * The identity of the compiled artifact this run executes, `sha256:<hex>`.\n * A coordinator that hashes the artifact passes it, and a continuation is\n * refused on resume when it names another. Left out, the engine derives one\n * from the workflow's own graph identity, so a host that keeps a\n * continuation and brings it back to the same compiled file needs nothing\n * more.\n */\n readonly bundleDigest?: string;\n}\n\ninterface GateBoundary {\n readonly kind: DurableGateKind;\n readonly nodeId: string;\n readonly nodeType: string;\n readonly executionIndex: number;\n readonly payload: WireValue;\n}\n\n/*\n * A gate answered from the mocks, or undefined to yield for real.\n *\n * Any gate is answered by its node id through `gates`, with its data outputs\n * as the object. The built-in agent and event gates are also answered from\n * their own sections, keyed by what the node was given as its first input\n * (the agent id, the event name), by `node:key`, or by `node:*`. The answer\n * becomes the gate's whole output envelope, control ports filled in, which\n * is exactly what a person's answer becomes in `buildGateResolution`.\n */\nfunction mockedGateAnswer(mocks: FwMockConfig | undefined, boundary: GateBoundary): WireValue | undefined {\n if (!mocks) return undefined;\n const { nodeId, nodeType } = boundary;\n const pick = (section: Record<string, object> | undefined, key: string | undefined): object | undefined => {\n if (!section) return undefined;\n if (key !== undefined && section[`${nodeId}:${key}`] !== undefined) return section[`${nodeId}:${key}`];\n if (section[`${nodeId}:*`] !== undefined) return section[`${nodeId}:*`];\n return key !== undefined ? section[key] : undefined;\n };\n const firstInput = (): string | undefined => {\n const p = boundary.payload as { arguments?: Array<{ value?: unknown; absent?: boolean }> } | null;\n const v = p?.arguments?.[0]?.value;\n return v === undefined || v === null ? undefined : String(v);\n };\n let data: object | undefined = mocks.gates?.[nodeId];\n if (data === undefined && nodeType === 'waitForAgent') {\n const v = pick(mocks.agents, firstInput());\n if (v !== undefined) data = { agentResult: v };\n }\n if (data === undefined && nodeType === 'waitForEvent') {\n const v = pick(mocks.events, firstInput());\n if (v !== undefined) data = { eventData: v };\n }\n // `fast` skips waits: a sleeping run wakes at once, as `delay` returns at once.\n if (data === undefined && nodeType === 'sleep' && mocks.fast === true) {\n data = { wokeAt: new Date().toISOString() };\n }\n if (data === undefined || typeof data !== 'object') return undefined;\n const value = { onSuccess: true, onFailure: false, ...(data as Record<string, unknown>) };\n validateWireValue(value);\n return value as WireValue;\n}\n\ninterface EffectBoundary {\n readonly nodeId: string;\n readonly nodeType: string;\n readonly executionIndex: number;\n}\n\ninterface EffectExecution<T extends WireValue> {\n readonly result: T;\n readonly receipt: WireValue;\n}\n\n/*\n * Thrown out of a generated body when a gate has to wait for the outside.\n * It carries everything a host needs to keep: the gate to answer, and the\n * continuation to bring back with the answer. `continuation` is present when\n * the body declared its identity (every body compiled by this version does);\n * a coordinator may also build its own from `state` and `receipts`.\n */\nclass DurableGateYield extends Error {\n readonly code = 'FLOW_WEAVER_DURABLE_GATE_YIELD';\n\n constructor(\n readonly gate: DurableGate,\n readonly state: ContinuationState,\n readonly receipts: readonly EffectReceipt[],\n readonly continuation?: ContinuationEnvelope,\n ) {\n super(`Workflow yielded at ${gate.kind} gate \"${gate.id}\"`);\n this.name = 'DurableGateYield';\n }\n}\n\nclass AmbiguousEffectError extends Error {\n readonly code = 'FLOW_WEAVER_AMBIGUOUS_EFFECT';\n\n constructor(\n readonly operationKey: string,\n readonly address: ExecutionAddress,\n ) {\n super(`Effect \"${operationKey}\" has an ambiguous commit state`);\n this.name = 'AmbiguousEffectError';\n }\n}\n\nfunction durableAddressKey(address: ExecutionAddress): string {\n return executionAddressKey(address);\n}\n\nfunction durableVariableKey(address: ExecutionAddress, portName: string): string {\n return `${executionAddressKey(address)}\\0${portName}`;\n}\n\nfunction cloneExecutionAddress(address: ExecutionAddress): ExecutionAddress {\n return {\n frames: address.frames.map((frame) => ({ ...frame })),\n scopes: address.scopes.map((scope) => ({ ...scope })),\n branches: address.branches.map((branch) => ({ ...branch })),\n nodeId: address.nodeId,\n nodeType: address.nodeType,\n executionIndex: address.executionIndex,\n };\n}\n\nfunction isCanonicalPrefix(candidate: readonly unknown[], current: readonly unknown[]): boolean {\n return (\n candidate.length <= current.length &&\n canonicalWireValue(candidate) === canonicalWireValue(current.slice(0, candidate.length))\n );\n}\n\nfunction isCanonicalEqual(left: readonly unknown[], right: readonly unknown[]): boolean {\n return left.length === right.length && canonicalWireValue(left) === canonicalWireValue(right);\n}\n\nfunction requireEffectRecovery(value: unknown, key: string, address: ExecutionAddress): EffectRecovery {\n try {\n validateWireValue(value);\n } catch {\n throw new AmbiguousEffectError(key, address);\n }\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new AmbiguousEffectError(key, address);\n }\n const record = value as Record<string, unknown>;\n const kind = record.kind;\n if ((kind === 'not-committed' || kind === 'repeatable' || kind === 'ambiguous') && Object.keys(record).length === 1) {\n return { kind };\n }\n if (\n kind === 'committed' &&\n Object.keys(record).length === 3 &&\n Object.prototype.hasOwnProperty.call(record, 'receipt') &&\n Object.prototype.hasOwnProperty.call(record, 'result')\n ) {\n return {\n kind,\n receipt: record.receipt as WireValue,\n result: record.result as WireValue,\n };\n }\n throw new AmbiguousEffectError(key, address);\n}\n\nfunction requireEffectExecution<T extends WireValue>(\n value: unknown,\n key: string,\n address: ExecutionAddress,\n): EffectExecution<T> {\n try {\n validateWireValue(value);\n } catch {\n throw new AmbiguousEffectError(key, address);\n }\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new AmbiguousEffectError(key, address);\n }\n const record = value as Record<string, unknown>;\n if (\n Object.keys(record).length !== 2 ||\n !Object.prototype.hasOwnProperty.call(record, 'result') ||\n !Object.prototype.hasOwnProperty.call(record, 'receipt')\n ) {\n throw new AmbiguousEffectError(key, address);\n }\n return {\n result: record.result as T,\n receipt: record.receipt as WireValue,\n };\n}\n\nclass DurableExecution implements DurableEngine {\n private readonly completed = new Map<string, ExecutionAddress>();\n private readonly variables = new Map<string, Omit<ContinuationVariable, 'value'> & { readonly value: unknown }>();\n private readonly receipts = new Map<string, EffectReceipt>();\n private readonly resumeEnvelope?: ContinuationEnvelope;\n private readonly resolution?: GateResolution;\n private readonly givenBundleDigest?: string;\n private graphFingerprint?: string;\n private resolutionConsumed = false;\n\n constructor(\n readonly runId: string,\n readonly workflowId: string,\n continuation?: AcceptedContinuationEnvelope,\n resolution?: GateResolution,\n bundleDigest?: string,\n ) {\n if (continuation !== undefined) {\n assertAcceptedContinuation(continuation);\n if (continuation.runId !== runId) {\n throw new Error('accepted continuation belongs to another run');\n }\n if (continuation.workflowId !== workflowId) {\n throw new Error('accepted continuation belongs to another workflow');\n }\n }\n if (bundleDigest !== undefined && !/^sha256:[0-9a-f]{64}$/.test(bundleDigest)) {\n throw new Error('bundleDigest must use canonical sha256:<64hex> form');\n }\n this.givenBundleDigest = bundleDigest;\n this.resumeEnvelope = continuation;\n this.resolution = acceptGateResolution(resolution);\n\n for (const address of continuation?.state.completed ?? []) {\n this.completed.set(durableAddressKey(address), cloneExecutionAddress(address));\n }\n for (const variable of continuation?.state.variables ?? []) {\n this.variables.set(durableVariableKey(variable.address, variable.portName), {\n address: cloneExecutionAddress(variable.address),\n portName: variable.portName,\n value: variable.value,\n });\n }\n for (const receipt of continuation?.receipts ?? []) {\n this.receipts.set(durableAddressKey(receipt.address), {\n address: cloneExecutionAddress(receipt.address),\n operationKey: receipt.operationKey,\n receipt: receipt.receipt,\n });\n }\n }\n\n address(\n runtime: Pick<WorkflowRuntime, 'frames' | 'scopes' | 'branches'>,\n nodeId: string,\n nodeType: string,\n executionIndex: number,\n ): ExecutionAddress {\n return {\n frames: runtime.frames.map((frame) => ({ ...frame })),\n scopes: runtime.scopes.map((scope) => ({ ...scope })),\n branches: runtime.branches.map((branch) => ({ ...branch })),\n nodeId,\n nodeType,\n executionIndex,\n };\n }\n\n /*\n * The artifact identity this run executes under: the one the coordinator\n * gave, or one derived from the graph identity the body declared. Known\n * only after `bind`.\n */\n bundleDigest(): string | undefined {\n if (this.givenBundleDigest !== undefined) return this.givenBundleDigest;\n if (this.graphFingerprint === undefined) return undefined;\n return `sha256:${sha256Hex(`flow-weaver-inline\\0${this.workflowId}\\0${this.graphFingerprint}\\0${ENGINE_VERSION}`)}`;\n }\n\n bind(runtime: Pick<WorkflowRuntime, 'frames'>, workflowId: string, graphFingerprint: string): void {\n // Nested bodies (a workflow used as a node, `invokeWorkflow`) bind too;\n // only the root frame names the run's graph.\n if (runtime.frames.length !== 1) return;\n if (workflowId !== this.workflowId) {\n throw new Error(`runtime was created for workflow \"${this.workflowId}\" but \"${workflowId}\" is running on it`);\n }\n this.graphFingerprint = graphFingerprint;\n if (this.resumeEnvelope === undefined) return;\n if (this.resumeEnvelope.graphFingerprint !== graphFingerprint) {\n const error = new Error('continuation belongs to another workflow graph');\n error.name = 'ContinuationMismatchError';\n throw error;\n }\n const bundleDigest = this.bundleDigest();\n if (bundleDigest !== undefined && this.resumeEnvelope.bundleDigest !== bundleDigest) {\n const error = new Error('continuation belongs to another bundle');\n error.name = 'ContinuationMismatchError';\n throw error;\n }\n }\n\n shouldExecute(address: ExecutionAddress): boolean {\n return !this.completed.has(durableAddressKey(address));\n }\n\n commitNode(address: ExecutionAddress): void {\n this.completed.set(durableAddressKey(address), cloneExecutionAddress(address));\n }\n\n setVariable(address: ExecutionAddress, portName: string, value: unknown): void {\n this.variables.set(durableVariableKey(address, portName), {\n address: cloneExecutionAddress(address),\n portName,\n value,\n });\n }\n\n getVariable(address: ExecutionAddress, portName: string, allowAncestorLookup = true): unknown {\n const exact = this.variables.get(durableVariableKey(address, portName));\n if (exact !== undefined) return exact.value;\n if (!allowAncestorLookup) return undefined;\n\n const candidates = [...this.variables.values()]\n .filter(\n (variable) =>\n variable.portName === portName &&\n variable.address.nodeId === address.nodeId &&\n variable.address.nodeType === address.nodeType &&\n variable.address.executionIndex === address.executionIndex &&\n isCanonicalPrefix(variable.address.frames, address.frames) &&\n isCanonicalPrefix(variable.address.scopes, address.scopes) &&\n isCanonicalPrefix(variable.address.branches, address.branches),\n )\n .sort(\n (left, right) =>\n right.address.frames.length +\n right.address.scopes.length +\n right.address.branches.length -\n (left.address.frames.length + left.address.scopes.length + left.address.branches.length),\n );\n const specificity = (candidate: (typeof candidates)[number]): number =>\n candidate.address.frames.length + candidate.address.scopes.length + candidate.address.branches.length;\n if (candidates.length > 1 && specificity(candidates[0]) === specificity(candidates[1])) {\n throw new Error(`Ambiguous durable variable address for ${address.nodeId}.${portName}`);\n }\n if (candidates[0] !== undefined) return candidates[0].value;\n\n // Generated workflows leave a selected control-flow branch before\n // projecting its outputs through Exit. A fresh continuation resume has no\n // process-local variable cache, so that projection must recover the one\n // value committed by the branch that actually ran. This is deliberately\n // narrower than ancestor lookup: it cannot cross workflow frames or\n // scopes, and more than one compatible descendant fails closed.\n const converged = [...this.variables.values()].filter(\n (variable) =>\n variable.portName === portName &&\n variable.address.nodeId === address.nodeId &&\n variable.address.nodeType === address.nodeType &&\n variable.address.executionIndex === address.executionIndex &&\n isCanonicalEqual(variable.address.frames, address.frames) &&\n isCanonicalEqual(variable.address.scopes, address.scopes) &&\n isCanonicalPrefix(address.branches, variable.address.branches),\n );\n if (converged.length > 1) {\n throw new Error(`Ambiguous durable variable address for ${address.nodeId}.${portName}`);\n }\n return converged[0]?.value;\n }\n\n resolveGate(runtime: WorkflowRuntime, boundary: GateBoundary): WireValue {\n validateWireValue(boundary.payload);\n // A mocked gate is answered here, on the first run and on every replay\n // alike, so it never pauses and never enters the resume bookkeeping below.\n const mocked = mockedGateAnswer(runtime.services.mocks, boundary);\n if (mocked !== undefined) return mocked;\n const address = this.address(runtime, boundary.nodeId, boundary.nodeType, boundary.executionIndex);\n const id = durableGateId(this.runId, boundary.kind, address);\n\n if (this.resumeEnvelope !== undefined && !this.resolutionConsumed) {\n if (\n durableAddressKey(this.resumeEnvelope.location) !== durableAddressKey(address) ||\n this.resumeEnvelope.gateId !== id ||\n this.resumeEnvelope.gateKind !== boundary.kind ||\n this.resolution === undefined ||\n this.resolution.gateId !== id\n ) {\n const error = new Error('Gate resolution is stale, reordered, or does not match the resume boundary');\n error.name = 'StaleGateError';\n throw error;\n }\n validateWireValue(this.resolution.value);\n this.resolutionConsumed = true;\n return this.resolution.value;\n }\n\n if (this.resumeEnvelope !== undefined && durableAddressKey(this.resumeEnvelope.location) === durableAddressKey(address)) {\n const error = new Error('The consumed resume gate was re-entered');\n error.name = 'StaleGateError';\n throw error;\n }\n\n const gate: DurableGate = {\n id,\n kind: boundary.kind,\n address,\n payload: boundary.payload,\n };\n const state = this.snapshot(address);\n const receipts = [...this.receipts.values()];\n const bundleDigest = this.bundleDigest();\n const continuation =\n this.graphFingerprint === undefined || bundleDigest === undefined\n ? undefined\n : createContinuationEnvelope({\n runId: this.runId,\n gateId: id,\n gateKind: boundary.kind,\n workflowId: this.workflowId,\n bundleDigest,\n graphFingerprint: this.graphFingerprint,\n location: address,\n state,\n receipts,\n });\n throw new DurableGateYield(gate, state, receipts, continuation);\n }\n\n async executeEffect<T extends WireValue>(\n runtime: WorkflowRuntime,\n boundary: EffectBoundary,\n execute: (operationKey: string) => Promise<EffectExecution<T>>,\n ): Promise<T> {\n const address = this.address(runtime, boundary.nodeId, boundary.nodeType, boundary.executionIndex);\n const key = operationKey(this.runId, address);\n const committed = this.receipts.get(durableAddressKey(address));\n if (committed !== undefined) {\n throw new Error(`Committed effect \"${key}\" reached its execution body`);\n }\n\n let recovery: EffectRecovery | undefined;\n try {\n recovery = await runtime.services.effectAdapter?.recover(key, address);\n } catch {\n throw new AmbiguousEffectError(key, address);\n }\n if (recovery === undefined) {\n throw new AmbiguousEffectError(key, address);\n }\n recovery = requireEffectRecovery(recovery, key, address);\n if (recovery.kind === 'ambiguous') throw new AmbiguousEffectError(key, address);\n if (recovery.kind === 'committed') {\n this.receipts.set(durableAddressKey(address), {\n address: cloneExecutionAddress(address),\n operationKey: key,\n receipt: recovery.receipt,\n });\n return recovery.result as T;\n }\n\n let executed: EffectExecution<T>;\n try {\n executed = requireEffectExecution<T>(await execute(key), key, address);\n } catch (error) {\n let afterFailure: EffectRecovery;\n try {\n afterFailure =\n (await runtime.services.effectAdapter?.recover(key, address)) ?? ({ kind: 'ambiguous' } as const);\n } catch {\n throw new AmbiguousEffectError(key, address);\n }\n afterFailure = requireEffectRecovery(afterFailure, key, address);\n if (afterFailure.kind === 'committed') {\n this.receipts.set(durableAddressKey(address), {\n address: cloneExecutionAddress(address),\n operationKey: key,\n receipt: afterFailure.receipt,\n });\n return afterFailure.result as T;\n }\n if (afterFailure.kind === 'ambiguous') {\n throw new AmbiguousEffectError(key, address);\n }\n throw error;\n }\n if (runtime.services.effectAdapter?.commit !== undefined) {\n try {\n await runtime.services.effectAdapter.commit(key, address, executed);\n } catch {\n let committed: EffectRecovery;\n try {\n committed = requireEffectRecovery(\n await runtime.services.effectAdapter.recover(key, address),\n key,\n address,\n );\n } catch {\n throw new AmbiguousEffectError(key, address);\n }\n if (\n committed.kind !== 'committed' ||\n canonicalWireValue(committed.receipt) !== canonicalWireValue(executed.receipt) ||\n canonicalWireValue(committed.result) !== canonicalWireValue(executed.result)\n ) throw new AmbiguousEffectError(key, address);\n this.receipts.set(durableAddressKey(address), {\n address: cloneExecutionAddress(address),\n operationKey: key,\n receipt: committed.receipt,\n });\n return committed.result as T;\n }\n }\n this.receipts.set(durableAddressKey(address), {\n address: cloneExecutionAddress(address),\n operationKey: key,\n receipt: executed.receipt,\n });\n return executed.result;\n }\n\n snapshot(nextBoundary: ExecutionAddress): ContinuationState {\n const completedKeys = new Set(this.completed.keys());\n return {\n completed: [...this.completed.values()].map(cloneExecutionAddress),\n variables: [...this.variables.values()]\n .filter((variable) => completedKeys.has(durableAddressKey(variable.address)))\n .map((variable) => {\n try {\n validateWireValue(variable.value);\n } catch (error) {\n throw new Error(\n `Continuation variable ${variable.address.nodeId}.${variable.portName} is not a wire value: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n return {\n address: cloneExecutionAddress(variable.address),\n portName: variable.portName,\n value: variable.value,\n };\n }),\n nextBoundary: cloneExecutionAddress(nextBoundary),\n };\n }\n\n assertResumeResolutionConsumed(): void {\n if (this.resumeEnvelope !== undefined && !this.resolutionConsumed) {\n const error = new Error('Resumed execution completed or yielded without consuming its exact gate resolution');\n error.name = 'UnconsumedGateResolutionError';\n throw error;\n }\n }\n}\n\nfunction createWorkflowRuntime(options: CreateWorkflowRuntimeOptions): WorkflowRuntime {\n if (options.runId.trim().length === 0) {\n throw new Error('runId must be a non-empty coordinator-owned identity');\n }\n const rootFrame: WorkflowFrameAddress = {\n workflowId: options.workflowId,\n invocation: 0,\n };\n return {\n runId: options.runId,\n abortSignal: options.abortSignal,\n services: options.services ?? {},\n durable: new DurableExecution(\n options.runId,\n options.workflowId,\n options.continuation,\n options.resolution,\n options.bundleDigest,\n ),\n frames: [rootFrame],\n scopes: [],\n branches: [],\n };\n}\n\nfunction createNestedWorkflowRuntime(\n runtime: WorkflowRuntime,\n workflowId: string,\n callerNodeId: string,\n callerExecutionIndex: number,\n invocation: number,\n): WorkflowRuntime {\n return {\n ...runtime,\n frames: [\n ...runtime.frames,\n {\n workflowId,\n invocation,\n callerNodeId,\n callerExecutionIndex,\n },\n ],\n scopes: runtime.scopes,\n branches: runtime.branches,\n };\n}\n\nfunction createScopedWorkflowRuntime(runtime: WorkflowRuntime, scope: ScopeAddress): WorkflowRuntime {\n return {\n ...runtime,\n scopes: [...runtime.scopes, scope],\n branches: runtime.branches,\n };\n}\n\nfunction isDurableGateYield(error: unknown): error is DurableGateYield {\n return (\n error instanceof DurableGateYield ||\n (typeof error === 'object' &&\n error !== null &&\n (error as { code?: unknown }).code === 'FLOW_WEAVER_DURABLE_GATE_YIELD')\n );\n}\n\nfunction isAmbiguousEffectError(error: unknown): error is AmbiguousEffectError {\n return (\n error instanceof AmbiguousEffectError ||\n (typeof error === 'object' &&\n error !== null &&\n (error as { code?: unknown }).code === 'FLOW_WEAVER_AMBIGUOUS_EFFECT')\n );\n}\n";
2
+ export declare const INLINE_EXECUTION_CONTEXT_SOURCE = "// ---- src/runtime/ExecutionContext.ts -------------------------------------------\n\n/*\n * Address of a variable in the execution context. Variables are stored under\n * the key `id:portName:executionIndex`.\n */\ninterface VariableAddress {\n id: string;\n portName: string;\n executionIndex: number;\n nodeTypeName?: string | undefined;\n scope?: string | undefined;\n side?: 'start' | 'exit' | undefined;\n /* Inputs remain live/debug-visible but are never serialized as durable outputs. */\n durable?: boolean | undefined;\n}\n\ninterface ExecutionInfo {\n id: string;\n index: number;\n parentIndex?: number | undefined;\n scopeName?: string | undefined;\n}\n\ntype VariableValue = unknown | (() => unknown) | (() => Promise<unknown>);\n\n/*\n * Variable storage with execution-scoped addressing, per-node execution\n * indices, pull execution (lazy evaluation), scopes and parallel lanes, debug\n * events, and the durable engine calls a generated body makes.\n *\n * Scope counters start at 0 on every construction. A resume replays the body\n * from its first node, skipping what the continuation holds, and so reaches\n * the same iteration ordinals the first run assigned\n * (`tests/continuation/durable-loops.test.ts`).\n */\nclass GeneratedExecutionContext {\n private variables: Map<string, VariableValue> = new Map();\n private executions: Map<string, ExecutionInfo> = new Map();\n private executionCounter: number = 0;\n private nodeExecutionCounts: Map<string, number> = new Map();\n private isAsync: boolean;\n // inline: development only\n private flowWeaverDebugger?: TDebugger | undefined;\n // inline: end\n private pullExecutors: Map<string, () => void | Promise<void>> = new Map();\n private nodeExecutionIndices: Map<string, number> = new Map();\n private runtime: WorkflowRuntime;\n private scopeInvocationCounts: Map<string, number> = new Map();\n private nestedInvocationCounts: Map<string, number> = new Map();\n private branchStack: BranchAddress[];\n private allowAncestorDurableVariables = true;\n\n /* `isAsync` is the workflow's async mode; `runtime` is the execution-scoped runtime. */\n constructor(isAsync: boolean = true, runtime: WorkflowRuntime) {\n this.isAsync = isAsync;\n // inline: development only\n this.flowWeaverDebugger = runtime.services.debugger;\n // inline: end\n this.runtime = runtime;\n this.branchStack = [...runtime.branches];\n }\n\n registerPullExecutor(id: string, executor: () => void | Promise<void>): void {\n this.pullExecutors.set(id, executor);\n }\n\n /* Record one execution of a node; each node counts its own executions from 0. */\n addExecution(id: string, parentIndex?: number, scopeName?: string): number {\n const index = this.nodeExecutionCounts.get(id) ?? 0;\n this.nodeExecutionCounts.set(id, index + 1);\n this.executionCounter++;\n this.executions.set(this.getExecutionKey(id, index), {\n id,\n index,\n parentIndex,\n scopeName,\n });\n this.nodeExecutionIndices.set(id, index);\n return index;\n }\n\n setVariable(address: VariableAddress, value: VariableValue): void | Promise<void> {\n const key = this.getVariableKey(address);\n this.variables.set(key, value);\n if (typeof value !== 'function' && address.durable !== false) {\n this.runtime.durable.setVariable(this.executionAddress(address), address.portName, value);\n }\n // inline: development only\n if (this.flowWeaverDebugger) {\n const actualValue = typeof value === 'function' ? value() : value;\n this.sendVariableSetEvent({\n identifier: {\n nodeTypeName: address.nodeTypeName || 'unknown',\n id: address.id,\n portName: address.portName,\n executionIndex: address.executionIndex,\n key: 'default',\n ...(address.scope && { scope: address.scope }),\n ...(address.side && { side: address.side }),\n },\n value: actualValue,\n });\n }\n // inline: end\n return this.isAsync ? Promise.resolve() : undefined;\n }\n\n getVariable(address: VariableAddress): unknown | Promise<unknown> {\n const executor = this.pullExecutors.get(address.id);\n if (executor) {\n if (!this.hasVariable(address)) {\n const result = executor();\n // Handle async executor (returns Promise)\n if (result instanceof Promise) {\n return result.then(() => {\n const trackedIndex = this.nodeExecutionIndices.get(address.id);\n const finalAddress = trackedIndex !== undefined ? { ...address, executionIndex: trackedIndex } : address;\n return this.retrieveVariable(finalAddress);\n });\n }\n // Handle sync executor (returns void)\n const trackedIndex = this.nodeExecutionIndices.get(address.id);\n const finalAddress = trackedIndex !== undefined ? { ...address, executionIndex: trackedIndex } : address;\n return this.retrieveVariable(finalAddress);\n }\n }\n return this.retrieveVariable(address);\n }\n\n private retrieveVariable(address: VariableAddress): unknown | Promise<unknown> {\n const key = this.getVariableKey(address);\n let value = this.variables.get(key);\n if (!this.variables.has(key)) {\n value = this.runtime.durable.getVariable(\n this.executionAddress(address),\n address.portName,\n this.allowAncestorDurableVariables,\n );\n if (value === undefined) {\n throw new Error(`Variable not found: ${address.id}.${address.portName}[${address.executionIndex}]`);\n }\n this.variables.set(key, value);\n }\n if (typeof value === 'function') {\n const result = value();\n if (result instanceof Promise) {\n return result;\n }\n return this.isAsync ? Promise.resolve(result) : result;\n }\n return this.isAsync ? Promise.resolve(value) : value;\n }\n\n hasVariable(address: VariableAddress): boolean {\n const key = this.getVariableKey(address);\n return (\n this.variables.has(key) ||\n this.runtime.durable.getVariable(\n this.executionAddress(address),\n address.portName,\n this.allowAncestorDurableVariables,\n ) !== undefined\n );\n }\n\n executionAddress(address: Pick<VariableAddress, 'id' | 'executionIndex' | 'nodeTypeName'>): ExecutionAddress {\n const runtime = this.getRuntime();\n return runtime.durable.address(runtime, address.id, address.nodeTypeName ?? address.id, address.executionIndex);\n }\n\n shouldExecute(nodeId: string, nodeType: string, executionIndex: number): boolean {\n const runtime = this.getRuntime();\n return runtime.durable.shouldExecute(runtime.durable.address(runtime, nodeId, nodeType, executionIndex));\n }\n\n commitNode(nodeId: string, nodeType: string, executionIndex: number): void {\n const runtime = this.getRuntime();\n runtime.durable.commitNode(runtime.durable.address(runtime, nodeId, nodeType, executionIndex));\n }\n\n /* The first thing a gated body does: name its workflow and graph to the engine. */\n bindWorkflow(workflowId: string, graphFingerprint: string): void {\n this.runtime.durable.bind(this.runtime, workflowId, graphFingerprint);\n }\n\n resolveGate(\n kind: DurableGateKind,\n nodeId: string,\n nodeType: string,\n executionIndex: number,\n payload: WireValue,\n ): WireValue {\n const runtime = this.getRuntime();\n return runtime.durable.resolveGate(runtime, { kind, nodeId, nodeType, executionIndex, payload });\n }\n\n executeEffect<T extends WireValue>(\n nodeId: string,\n nodeType: string,\n executionIndex: number,\n execute: (operationKey: string) => Promise<{ result: T; receipt: WireValue }>,\n ): Promise<T> {\n const runtime = this.getRuntime();\n return runtime.durable.executeEffect(runtime, { nodeId, nodeType, executionIndex }, execute);\n }\n\n createNestedRuntime(workflowId: string, callerNodeId: string, callerExecutionIndex: number): WorkflowRuntime {\n const invocation = this.nestedInvocationCounts.get(callerNodeId) ?? 0;\n this.nestedInvocationCounts.set(callerNodeId, invocation + 1);\n const parentRuntime = this.getRuntime();\n return {\n ...parentRuntime,\n frames: [...parentRuntime.frames, { workflowId, invocation, callerNodeId, callerExecutionIndex }],\n scopes: parentRuntime.scopes,\n };\n }\n\n enterBranch(nodeId: string, executionIndex: number, arm: string): void {\n const frameDepth = this.runtime.frames.length - 1;\n const workflowId = this.runtime.frames[frameDepth].workflowId;\n this.branchStack.push({ workflowId, frameDepth, nodeId, executionIndex, arm });\n }\n\n exitBranch(): void {\n this.branchStack.pop();\n }\n\n getRuntime(): WorkflowRuntime {\n return { ...this.runtime, branches: [...this.branchStack] };\n }\n\n /*\n * Fork the mutable bookkeeping for one lane of a parallel group. Durable\n * state stays execution-scoped and shared through `runtime`, while the\n * branch and scope address stacks are copied so concurrent lanes cannot\n * corrupt one another's continuation addresses.\n */\n forkParallel(): GeneratedExecutionContext {\n const parallelContext = new GeneratedExecutionContext(this.isAsync, this.getRuntime());\n parallelContext.variables = new Map(this.variables);\n parallelContext.executions = new Map(this.executions);\n parallelContext.executionCounter = this.executionCounter;\n parallelContext.pullExecutors = new Map(this.pullExecutors);\n parallelContext.nodeExecutionIndices = new Map(this.nodeExecutionIndices);\n parallelContext.nodeExecutionCounts = new Map(this.nodeExecutionCounts);\n parallelContext.scopeInvocationCounts = new Map(this.scopeInvocationCounts);\n parallelContext.nestedInvocationCounts = new Map(this.nestedInvocationCounts);\n parallelContext.allowAncestorDurableVariables = this.allowAncestorDurableVariables;\n return parallelContext;\n }\n\n mergeParallel(parallelContext: GeneratedExecutionContext): void {\n this.mergeScope(parallelContext);\n parallelContext.nodeExecutionIndices.forEach((index, id) => {\n this.nodeExecutionIndices.set(id, index);\n });\n parallelContext.scopeInvocationCounts.forEach((count, key) => {\n this.scopeInvocationCounts.set(key, Math.max(this.scopeInvocationCounts.get(key) ?? 0, count));\n });\n parallelContext.nestedInvocationCounts.forEach((count, key) => {\n this.nestedInvocationCounts.set(key, Math.max(this.nestedInvocationCounts.get(key) ?? 0, count));\n });\n }\n\n getExecution(id: string, index: number): ExecutionInfo | undefined {\n return this.executions.get(this.getExecutionKey(id, index));\n }\n\n /*\n * Create the execution context for one invocation of a scope (a loop body,\n * a per-port function). Each call is the next invocation of that scope key.\n * A clean scope (a per-port scope) starts with no variables and cannot read\n * its ancestors' durable variables; any other (a node-level scope) inherits\n * the parent's variables. `isAsyncOverride` is the scope's own async mode,\n * when it differs from the parent's.\n */\n createScope(\n _parentNodeName: string,\n _parentIndex: number,\n _scopeName: string,\n cleanScope: boolean = false,\n isAsyncOverride?: boolean,\n ): GeneratedExecutionContext {\n const effectiveIsAsync = isAsyncOverride !== undefined ? isAsyncOverride : this.isAsync;\n const scopeKey = `${_parentNodeName}:${_parentIndex}:${_scopeName}`;\n const scopeInvocation = this.scopeInvocationCounts.get(scopeKey) ?? 0;\n this.scopeInvocationCounts.set(scopeKey, scopeInvocation + 1);\n const parentRuntime = this.getRuntime();\n const scopedRuntime: WorkflowRuntime = {\n ...parentRuntime,\n scopes: [\n ...parentRuntime.scopes,\n {\n parentNodeId: _parentNodeName,\n parentExecutionIndex: _parentIndex,\n scopeName: _scopeName,\n invocation: scopeInvocation,\n loopIteration: scopeInvocation,\n },\n ],\n };\n const scopedContext = new GeneratedExecutionContext(effectiveIsAsync, scopedRuntime);\n scopedContext.variables = cleanScope ? new Map() : new Map(this.variables);\n scopedContext.allowAncestorDurableVariables = this.allowAncestorDurableVariables && !cleanScope;\n scopedContext.executions = new Map(this.executions);\n scopedContext.executionCounter = this.executionCounter;\n scopedContext.nodeExecutionCounts = new Map(this.nodeExecutionCounts);\n return scopedContext;\n }\n\n /* Merge a scope's variables, executions and counters back into this context. */\n mergeScope(scopedContext: GeneratedExecutionContext): void {\n scopedContext.executions.forEach((info, key) => {\n this.executions.set(key, info);\n });\n scopedContext.variables.forEach((value, key) => {\n this.variables.set(key, value);\n });\n this.executionCounter = Math.max(this.executionCounter, scopedContext.executionCounter);\n scopedContext.nodeExecutionCounts.forEach((count, id) => {\n this.nodeExecutionCounts.set(id, Math.max(this.nodeExecutionCounts.get(id) ?? 0, count));\n });\n }\n\n private getVariableKey(address: VariableAddress): string {\n return `${address.id}:${address.portName}:${address.executionIndex}`;\n }\n\n private getExecutionKey(id: string, index: number): string {\n return `${id}:${index}`;\n }\n\n getExecutionCount(): number {\n return this.executionCounter;\n }\n\n reset(): void {\n this.variables.clear();\n this.executions.clear();\n this.executionCounter = 0;\n this.nodeExecutionCounts.clear();\n }\n\n isAborted(): boolean {\n return this.runtime.abortSignal?.aborted ?? false;\n }\n\n /* Return the parent-owned signal without transferring ownership. */\n getAbortSignal(): AbortSignal | undefined {\n return this.runtime.abortSignal;\n }\n\n /* Throw a CancellationError, naming `nodeId` when given, if the run was aborted. */\n checkAborted(nodeId?: string): void {\n if (this.runtime.abortSignal?.aborted) {\n throw new CancellationError(\n `Workflow execution cancelled${nodeId ? ` at ${nodeId}` : ''}`,\n this.executionCounter,\n nodeId,\n );\n }\n }\n\n // inline: development only, a no-op stub in production\n /* Awaited by generated code, so a debugger can hold a node at a breakpoint. */\n async sendStatusChangedEvent(args: {\n nodeTypeName: string;\n id: string;\n scope?: string;\n side?: 'start' | 'exit';\n executionIndex: number;\n status: TStatusType;\n }): Promise<void> {\n if (this.flowWeaverDebugger) {\n await this.flowWeaverDebugger.sendEvent({\n type: 'STATUS_CHANGED',\n ...args,\n innerFlowInvocation: this.flowWeaverDebugger.innerFlowInvocation,\n });\n }\n }\n\n async sendLogErrorEvent(args: {\n nodeTypeName: string;\n id: string;\n scope?: string;\n side?: 'start' | 'exit';\n executionIndex: number;\n error: string;\n code?: string;\n }): Promise<void> {\n if (this.flowWeaverDebugger) {\n await this.flowWeaverDebugger.sendEvent({\n type: 'LOG_ERROR',\n ...args,\n innerFlowInvocation: this.flowWeaverDebugger.innerFlowInvocation,\n });\n }\n }\n\n async sendWorkflowCompletedEvent(args: {\n executionIndex: number;\n status: 'SUCCEEDED' | 'FAILED' | 'CANCELLED';\n result?: unknown;\n }): Promise<void> {\n if (this.flowWeaverDebugger) {\n await this.flowWeaverDebugger.sendEvent({\n type: 'WORKFLOW_COMPLETED',\n ...args,\n innerFlowInvocation: this.flowWeaverDebugger.innerFlowInvocation,\n });\n }\n }\n // inline: end\n // inline: development only\n\n private async sendVariableSetEvent(args: { identifier: TVariableIdentification; value: unknown }): Promise<void> {\n if (this.flowWeaverDebugger) {\n await this.flowWeaverDebugger.sendEvent({\n type: 'VARIABLE_SET',\n ...args,\n innerFlowInvocation: this.flowWeaverDebugger.innerFlowInvocation,\n });\n }\n }\n\n /* Return live debugger-visible variables without invoking lazy values. */\n inspectVariables(): Record<string, unknown> {\n const vars: Record<string, unknown> = {};\n for (const [key, value] of this.variables) {\n vars[key] = typeof value === 'function' ? '[lazy value]' : value;\n }\n return vars;\n }\n // inline: end\n}\n";
3
+ //# sourceMappingURL=inline-engine.generated.d.ts.map
@@ -1,4 +1,11 @@
1
+ import type { TModuleFormat } from '../ast/types';
1
2
  export type TOutputFormat = 'typescript' | 'javascript';
3
+ /**
4
+ * What a compiled file exports from its runtime section besides the
5
+ * workflows: the durable engine's public surface, under the same names the
6
+ * package exports, so calling code can import them from either.
7
+ */
8
+ export declare const INLINE_ENGINE_EXPORTS: readonly string[];
2
9
  /**
3
10
  * Strip TypeScript type syntax from code using esbuild.
4
11
  * Removes type declarations, interfaces, declare statements, and type annotations
@@ -15,9 +22,10 @@ export declare function stripTypeScript(code: string): string;
15
22
  * @param production - Whether to generate production-optimized code (no debug events)
16
23
  * @param exportClasses - Whether to add 'export' keyword to classes (for shared modules)
17
24
  * @param outputFormat - Output format: 'typescript' (default) or 'javascript' (strips types)
25
+ * @param moduleFormat - 'esm' (default) exports the engine's helpers with an `export` statement;
26
+ * 'cjs' leaves that to the caller's `module.exports` (see `INLINE_ENGINE_EXPORTS`)
18
27
  */
19
- export declare function generateInlineRuntime(production: boolean, exportClasses?: boolean, outputFormat?: TOutputFormat): string;
20
- import type { TModuleFormat } from '../ast/types.js';
28
+ export declare function generateInlineRuntime(production: boolean, exportClasses?: boolean, outputFormat?: TOutputFormat, moduleFormat?: TModuleFormat): string;
21
29
  /**
22
30
  * Generates a standalone runtime module file for multi-workflow bundles.
23
31
  * This exports all runtime types and classes so individual workflow files can import them.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Connection operations for workflow manipulation
3
3
  */
4
- import type { TWorkflowAST, TConnectionAST, TPortReference } from "../../ast/types.js";
4
+ import type { TWorkflowAST, TConnectionAST, TPortReference } from "../../ast/types";
5
5
  /**
6
6
  * Add a connection between two ports
7
7
  *
@@ -12,7 +12,7 @@
12
12
  * |-------------|-----------|
13
13
  * | Workflow | `cloneWorkflow`, `renameWorkflow`, `setWorkflowPorts` |
14
14
  * | Node Types | `addNodeType`, `removeNodeType`, `updateNodeType` |
15
- * | Nodes | `addNode`, `removeNode`, `renameNode`, `setNodePosition` |
15
+ * | Nodes | `addNode`, `removeNode`, `renameNode`, `setNodeLabel` |
16
16
  * | Connections | `addConnection`, `removeConnection`, `reconnect` |
17
17
  * | Ports | `swapPortOrder`, `swapNodeInstancePortOrder` |
18
18
  * | Scopes | `createScope`, `removeScope`, `addToScope` |
@@ -24,11 +24,11 @@
24
24
  * - `withMinimalValidation(workflow)` - Skip expensive checks
25
25
  * - `withoutValidation(workflow)` - No validation (use with caution)
26
26
  */
27
- export { withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeExists, assertNodeNotExists, } from "../helpers.js";
28
- export { cloneWorkflow, setWorkflowDescription, setWorkflowMetadata, setOutputFileType, renameWorkflow, setWorkflowPorts, } from "./workflow.js";
29
- export { addNodeType, removeNodeType, updateNodeType, getNodeType, hasNodeType, listNodeTypes, renameNodeType, replaceNodeTypes, } from "./node-types.js";
30
- export { addNode, removeNode, renameNode, updateNode, addNodes, removeNodes, setNodeConfig, setNodePosition, setNodeMinimized, setNodeSize, setNodeLabel, } from "./nodes.js";
31
- export { addConnection, removeConnection, removeAllConnections, reconnect, addConnections, replaceConnections, } from "./connections.js";
32
- export { swapPortOrder, swapNodeInstancePortOrder, setStartExitPorts, setInstancePortConfigs, } from "./ports.js";
33
- export { createScope, removeScope, addToScope, removeFromScope, moveToScope, } from "./scopes.js";
27
+ export { withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeExists, assertNodeNotExists, } from "../helpers";
28
+ export { cloneWorkflow, setWorkflowDescription, setWorkflowMetadata, setOutputFileType, renameWorkflow, setWorkflowPorts, } from "./workflow";
29
+ export { addNodeType, removeNodeType, updateNodeType, getNodeType, hasNodeType, listNodeTypes, renameNodeType, replaceNodeTypes, } from "./node-types";
30
+ export { addNode, removeNode, renameNode, updateNode, addNodes, removeNodes, setNodeConfig, setNodeMinimized, setNodeSize, setNodeLabel, } from "./nodes";
31
+ export { addConnection, removeConnection, removeAllConnections, reconnect, addConnections, replaceConnections, } from "./connections";
32
+ export { swapPortOrder, swapNodeInstancePortOrder, setStartExitPorts, setInstancePortConfigs, } from "./ports";
33
+ export { createScope, removeScope, addToScope, removeFromScope, moveToScope, } from "./scopes";
34
34
  //# sourceMappingURL=index.d.ts.map
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Node type operations for workflow manipulation
3
3
  */
4
- import type { TWorkflowAST, TNodeTypeAST } from "../../ast/types.js";
4
+ import type { TWorkflowAST, TNodeTypeAST } from "../../ast/types";
5
5
  /**
6
6
  * Add a node type definition to the workflow (idempotent).
7
7
  * Uses no validation to allow adding even when workflow has other errors.