@synergenius/flow-weaver 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/LICENSE +122 -0
  2. package/README.md +315 -0
  3. package/dist/annotation-generator.d.ts +45 -0
  4. package/dist/annotation-generator.js +557 -0
  5. package/dist/api/builder.d.ts +223 -0
  6. package/dist/api/builder.js +345 -0
  7. package/dist/api/compile.d.ts +92 -0
  8. package/dist/api/compile.js +149 -0
  9. package/dist/api/extract-types.d.ts +29 -0
  10. package/dist/api/extract-types.js +57 -0
  11. package/dist/api/generate-in-place.d.ts +73 -0
  12. package/dist/api/generate-in-place.js +1353 -0
  13. package/dist/api/generate.d.ts +83 -0
  14. package/dist/api/generate.js +510 -0
  15. package/dist/api/helpers.d.ts +248 -0
  16. package/dist/api/helpers.js +285 -0
  17. package/dist/api/index.d.ts +46 -0
  18. package/dist/api/index.js +45 -0
  19. package/dist/api/inline-runtime.d.ts +27 -0
  20. package/dist/api/inline-runtime.js +551 -0
  21. package/dist/api/manipulation/connections.d.ts +79 -0
  22. package/dist/api/manipulation/connections.js +151 -0
  23. package/dist/api/manipulation/index.d.ts +34 -0
  24. package/dist/api/manipulation/index.js +41 -0
  25. package/dist/api/manipulation/node-types.d.ts +123 -0
  26. package/dist/api/manipulation/node-types.js +200 -0
  27. package/dist/api/manipulation/nodes.d.ts +144 -0
  28. package/dist/api/manipulation/nodes.js +333 -0
  29. package/dist/api/manipulation/ports.d.ts +59 -0
  30. package/dist/api/manipulation/ports.js +228 -0
  31. package/dist/api/manipulation/scopes.d.ts +52 -0
  32. package/dist/api/manipulation/scopes.js +156 -0
  33. package/dist/api/manipulation/validation.d.ts +6 -0
  34. package/dist/api/manipulation/validation.js +6 -0
  35. package/dist/api/manipulation/workflow.d.ts +81 -0
  36. package/dist/api/manipulation/workflow.js +116 -0
  37. package/dist/api/manipulation.d.ts +8 -0
  38. package/dist/api/manipulation.js +8 -0
  39. package/dist/api/parse.d.ts +48 -0
  40. package/dist/api/parse.js +110 -0
  41. package/dist/api/patterns.d.ts +112 -0
  42. package/dist/api/patterns.js +306 -0
  43. package/dist/api/query.d.ts +429 -0
  44. package/dist/api/query.js +816 -0
  45. package/dist/api/templates.d.ts +98 -0
  46. package/dist/api/templates.js +117 -0
  47. package/dist/api/transform.d.ts +31 -0
  48. package/dist/api/transform.js +40 -0
  49. package/dist/api/validate.d.ts +25 -0
  50. package/dist/api/validate.js +39 -0
  51. package/dist/api/workflow-file-operations.d.ts +29 -0
  52. package/dist/api/workflow-file-operations.js +180 -0
  53. package/dist/ast/builder.d.ts +210 -0
  54. package/dist/ast/builder.js +395 -0
  55. package/dist/ast/index.d.ts +5 -0
  56. package/dist/ast/index.js +5 -0
  57. package/dist/ast/serialization-node.d.ts +6 -0
  58. package/dist/ast/serialization-node.js +30 -0
  59. package/dist/ast/serialization.d.ts +43 -0
  60. package/dist/ast/serialization.js +134 -0
  61. package/dist/ast/types.d.ts +852 -0
  62. package/dist/ast/types.js +2 -0
  63. package/dist/ast/workflow-utils.d.ts +54 -0
  64. package/dist/ast/workflow-utils.js +114 -0
  65. package/dist/body-generator.d.ts +31 -0
  66. package/dist/body-generator.js +35 -0
  67. package/dist/built-in-nodes/delay.d.ts +11 -0
  68. package/dist/built-in-nodes/delay.js +29 -0
  69. package/dist/built-in-nodes/index.d.ts +5 -0
  70. package/dist/built-in-nodes/index.js +4 -0
  71. package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
  72. package/dist/built-in-nodes/invoke-workflow.js +25 -0
  73. package/dist/built-in-nodes/mock-types.d.ts +18 -0
  74. package/dist/built-in-nodes/mock-types.js +12 -0
  75. package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
  76. package/dist/built-in-nodes/wait-for-event.js +25 -0
  77. package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
  78. package/dist/chevrotain-parser/connect-parser.js +98 -0
  79. package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
  80. package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
  81. package/dist/chevrotain-parser/index.d.ts +25 -0
  82. package/dist/chevrotain-parser/index.js +27 -0
  83. package/dist/chevrotain-parser/map-parser.d.ts +33 -0
  84. package/dist/chevrotain-parser/map-parser.js +130 -0
  85. package/dist/chevrotain-parser/node-parser.d.ts +36 -0
  86. package/dist/chevrotain-parser/node-parser.js +466 -0
  87. package/dist/chevrotain-parser/path-parser.d.ts +28 -0
  88. package/dist/chevrotain-parser/path-parser.js +118 -0
  89. package/dist/chevrotain-parser/port-parser.d.ts +36 -0
  90. package/dist/chevrotain-parser/port-parser.js +442 -0
  91. package/dist/chevrotain-parser/position-parser.d.ts +20 -0
  92. package/dist/chevrotain-parser/position-parser.js +83 -0
  93. package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
  94. package/dist/chevrotain-parser/scope-parser.js +104 -0
  95. package/dist/chevrotain-parser/tokens.d.ts +78 -0
  96. package/dist/chevrotain-parser/tokens.js +384 -0
  97. package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
  98. package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
  99. package/dist/cli/commands/changelog.d.ts +13 -0
  100. package/dist/cli/commands/changelog.js +135 -0
  101. package/dist/cli/commands/compile.d.ts +64 -0
  102. package/dist/cli/commands/compile.js +278 -0
  103. package/dist/cli/commands/create.d.ts +33 -0
  104. package/dist/cli/commands/create.js +147 -0
  105. package/dist/cli/commands/describe.d.ts +68 -0
  106. package/dist/cli/commands/describe.js +377 -0
  107. package/dist/cli/commands/dev.d.ts +32 -0
  108. package/dist/cli/commands/dev.js +384 -0
  109. package/dist/cli/commands/diagram.d.ts +13 -0
  110. package/dist/cli/commands/diagram.js +33 -0
  111. package/dist/cli/commands/diff.d.ts +11 -0
  112. package/dist/cli/commands/diff.js +59 -0
  113. package/dist/cli/commands/doctor.d.ts +57 -0
  114. package/dist/cli/commands/doctor.js +719 -0
  115. package/dist/cli/commands/export.d.ts +57 -0
  116. package/dist/cli/commands/export.js +163 -0
  117. package/dist/cli/commands/grammar.d.ts +9 -0
  118. package/dist/cli/commands/grammar.js +39 -0
  119. package/dist/cli/commands/init.d.ts +59 -0
  120. package/dist/cli/commands/init.js +435 -0
  121. package/dist/cli/commands/listen.d.ts +16 -0
  122. package/dist/cli/commands/listen.js +39 -0
  123. package/dist/cli/commands/market.d.ts +52 -0
  124. package/dist/cli/commands/market.js +436 -0
  125. package/dist/cli/commands/migrate.d.ts +13 -0
  126. package/dist/cli/commands/migrate.js +89 -0
  127. package/dist/cli/commands/openapi.d.ts +37 -0
  128. package/dist/cli/commands/openapi.js +67 -0
  129. package/dist/cli/commands/pattern.d.ts +34 -0
  130. package/dist/cli/commands/pattern.js +185 -0
  131. package/dist/cli/commands/plugin.d.ts +16 -0
  132. package/dist/cli/commands/plugin.js +176 -0
  133. package/dist/cli/commands/run.d.ts +49 -0
  134. package/dist/cli/commands/run.js +191 -0
  135. package/dist/cli/commands/serve.d.ts +45 -0
  136. package/dist/cli/commands/serve.js +81 -0
  137. package/dist/cli/commands/templates.d.ts +8 -0
  138. package/dist/cli/commands/templates.js +54 -0
  139. package/dist/cli/commands/ui.d.ts +16 -0
  140. package/dist/cli/commands/ui.js +130 -0
  141. package/dist/cli/commands/validate.d.ts +12 -0
  142. package/dist/cli/commands/validate.js +247 -0
  143. package/dist/cli/commands/watch.d.ts +9 -0
  144. package/dist/cli/commands/watch.js +70 -0
  145. package/dist/cli/flow-weaver.mjs +92924 -0
  146. package/dist/cli/index.d.ts +9 -0
  147. package/dist/cli/index.js +742 -0
  148. package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
  149. package/dist/cli/templates/ai/mock-provider.js +64 -0
  150. package/dist/cli/templates/ai/types.d.ts +47 -0
  151. package/dist/cli/templates/ai/types.js +5 -0
  152. package/dist/cli/templates/approvals/index.d.ts +15 -0
  153. package/dist/cli/templates/approvals/index.js +241 -0
  154. package/dist/cli/templates/index.d.ts +102 -0
  155. package/dist/cli/templates/index.js +101 -0
  156. package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
  157. package/dist/cli/templates/nodes/agent-router.js +114 -0
  158. package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
  159. package/dist/cli/templates/nodes/aggregator.js +63 -0
  160. package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
  161. package/dist/cli/templates/nodes/conversation-memory.js +85 -0
  162. package/dist/cli/templates/nodes/http.d.ts +7 -0
  163. package/dist/cli/templates/nodes/http.js +80 -0
  164. package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
  165. package/dist/cli/templates/nodes/human-approval.js +110 -0
  166. package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
  167. package/dist/cli/templates/nodes/json-extractor.js +119 -0
  168. package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
  169. package/dist/cli/templates/nodes/llm-call.js +106 -0
  170. package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
  171. package/dist/cli/templates/nodes/prompt-template.js +52 -0
  172. package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
  173. package/dist/cli/templates/nodes/rag-retriever.js +128 -0
  174. package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
  175. package/dist/cli/templates/nodes/tool-executor.js +108 -0
  176. package/dist/cli/templates/nodes/transformer.d.ts +7 -0
  177. package/dist/cli/templates/nodes/transformer.js +68 -0
  178. package/dist/cli/templates/nodes/validator.d.ts +7 -0
  179. package/dist/cli/templates/nodes/validator.js +62 -0
  180. package/dist/cli/templates/providers/index.d.ts +14 -0
  181. package/dist/cli/templates/providers/index.js +239 -0
  182. package/dist/cli/templates/shared/approval-types.d.ts +9 -0
  183. package/dist/cli/templates/shared/approval-types.js +31 -0
  184. package/dist/cli/templates/shared/llm-types.d.ts +15 -0
  185. package/dist/cli/templates/shared/llm-types.js +104 -0
  186. package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
  187. package/dist/cli/templates/workflows/aggregator.js +104 -0
  188. package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
  189. package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
  190. package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
  191. package/dist/cli/templates/workflows/ai-agent.js +326 -0
  192. package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
  193. package/dist/cli/templates/workflows/ai-chat.js +169 -0
  194. package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
  195. package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
  196. package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
  197. package/dist/cli/templates/workflows/ai-rag.js +186 -0
  198. package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
  199. package/dist/cli/templates/workflows/ai-react.js +294 -0
  200. package/dist/cli/templates/workflows/conditional.d.ts +12 -0
  201. package/dist/cli/templates/workflows/conditional.js +142 -0
  202. package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
  203. package/dist/cli/templates/workflows/error-handler.js +147 -0
  204. package/dist/cli/templates/workflows/foreach.d.ts +7 -0
  205. package/dist/cli/templates/workflows/foreach.js +143 -0
  206. package/dist/cli/templates/workflows/sequential.d.ts +7 -0
  207. package/dist/cli/templates/workflows/sequential.js +198 -0
  208. package/dist/cli/templates/workflows/webhook.d.ts +7 -0
  209. package/dist/cli/templates/workflows/webhook.js +161 -0
  210. package/dist/cli/utils/logger.d.ts +15 -0
  211. package/dist/cli/utils/logger.js +46 -0
  212. package/dist/constants.d.ts +100 -0
  213. package/dist/constants.js +125 -0
  214. package/dist/defaults.d.ts +3 -0
  215. package/dist/defaults.js +3 -0
  216. package/dist/deployment/config/defaults.d.ts +29 -0
  217. package/dist/deployment/config/defaults.js +98 -0
  218. package/dist/deployment/config/loader.d.ts +24 -0
  219. package/dist/deployment/config/loader.js +236 -0
  220. package/dist/deployment/config/types.d.ts +117 -0
  221. package/dist/deployment/config/types.js +5 -0
  222. package/dist/deployment/core/adapters.d.ts +90 -0
  223. package/dist/deployment/core/adapters.js +251 -0
  224. package/dist/deployment/core/executor.d.ts +62 -0
  225. package/dist/deployment/core/executor.js +197 -0
  226. package/dist/deployment/core/formatters.d.ts +57 -0
  227. package/dist/deployment/core/formatters.js +170 -0
  228. package/dist/deployment/index.d.ts +31 -0
  229. package/dist/deployment/index.js +48 -0
  230. package/dist/deployment/openapi/generator.d.ts +146 -0
  231. package/dist/deployment/openapi/generator.js +347 -0
  232. package/dist/deployment/openapi/schema-converter.d.ts +49 -0
  233. package/dist/deployment/openapi/schema-converter.js +192 -0
  234. package/dist/deployment/targets/base.d.ts +316 -0
  235. package/dist/deployment/targets/base.js +823 -0
  236. package/dist/deployment/targets/cloudflare.d.ts +23 -0
  237. package/dist/deployment/targets/cloudflare.js +1125 -0
  238. package/dist/deployment/targets/inngest.d.ts +38 -0
  239. package/dist/deployment/targets/inngest.js +926 -0
  240. package/dist/deployment/targets/lambda.d.ts +23 -0
  241. package/dist/deployment/targets/lambda.js +1289 -0
  242. package/dist/deployment/targets/vercel.d.ts +23 -0
  243. package/dist/deployment/targets/vercel.js +886 -0
  244. package/dist/deployment/types.d.ts +183 -0
  245. package/dist/deployment/types.js +8 -0
  246. package/dist/diagram/geometry.d.ts +26 -0
  247. package/dist/diagram/geometry.js +850 -0
  248. package/dist/diagram/index.d.ts +16 -0
  249. package/dist/diagram/index.js +42 -0
  250. package/dist/diagram/layout.d.ts +11 -0
  251. package/dist/diagram/layout.js +143 -0
  252. package/dist/diagram/orthogonal-router.d.ts +79 -0
  253. package/dist/diagram/orthogonal-router.js +568 -0
  254. package/dist/diagram/renderer.d.ts +3 -0
  255. package/dist/diagram/renderer.js +207 -0
  256. package/dist/diagram/theme.d.ts +20 -0
  257. package/dist/diagram/theme.js +189 -0
  258. package/dist/diagram/types.d.ts +70 -0
  259. package/dist/diagram/types.js +2 -0
  260. package/dist/diff/WorkflowDiffer.d.ts +13 -0
  261. package/dist/diff/WorkflowDiffer.js +429 -0
  262. package/dist/diff/formatDiff.d.ts +10 -0
  263. package/dist/diff/formatDiff.js +220 -0
  264. package/dist/diff/impact.d.ts +29 -0
  265. package/dist/diff/impact.js +119 -0
  266. package/dist/diff/index.d.ts +10 -0
  267. package/dist/diff/index.js +9 -0
  268. package/dist/diff/types.d.ts +138 -0
  269. package/dist/diff/types.js +35 -0
  270. package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
  271. package/dist/doc-metadata/extractors/annotations.js +337 -0
  272. package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
  273. package/dist/doc-metadata/extractors/cli-commands.js +355 -0
  274. package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
  275. package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
  276. package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
  277. package/dist/doc-metadata/extractors/plugin-api.js +279 -0
  278. package/dist/doc-metadata/index.d.ts +5 -0
  279. package/dist/doc-metadata/index.js +4 -0
  280. package/dist/doc-metadata/types.d.ts +120 -0
  281. package/dist/doc-metadata/types.js +5 -0
  282. package/dist/editor-completions/annotationValues.d.ts +12 -0
  283. package/dist/editor-completions/annotationValues.js +138 -0
  284. package/dist/editor-completions/contextParser.d.ts +40 -0
  285. package/dist/editor-completions/contextParser.js +410 -0
  286. package/dist/editor-completions/dataTypes.d.ts +16 -0
  287. package/dist/editor-completions/dataTypes.js +95 -0
  288. package/dist/editor-completions/goToDefinition.d.ts +27 -0
  289. package/dist/editor-completions/goToDefinition.js +112 -0
  290. package/dist/editor-completions/index.d.ts +39 -0
  291. package/dist/editor-completions/index.js +181 -0
  292. package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
  293. package/dist/editor-completions/jsDocAnnotations.js +357 -0
  294. package/dist/editor-completions/modifierCompletions.d.ts +17 -0
  295. package/dist/editor-completions/modifierCompletions.js +197 -0
  296. package/dist/editor-completions/types.d.ts +119 -0
  297. package/dist/editor-completions/types.js +8 -0
  298. package/dist/export/index.d.ts +68 -0
  299. package/dist/export/index.js +1074 -0
  300. package/dist/export/templates.d.ts +24 -0
  301. package/dist/export/templates.js +186 -0
  302. package/dist/friendly-errors.d.ts +35 -0
  303. package/dist/friendly-errors.js +375 -0
  304. package/dist/function-like.d.ts +38 -0
  305. package/dist/function-like.js +83 -0
  306. package/dist/generated-branding.d.ts +16 -0
  307. package/dist/generated-branding.js +22 -0
  308. package/dist/generator/async-detection.d.ts +27 -0
  309. package/dist/generator/async-detection.js +56 -0
  310. package/dist/generator/code-utils.d.ts +76 -0
  311. package/dist/generator/code-utils.js +410 -0
  312. package/dist/generator/control-flow.d.ts +54 -0
  313. package/dist/generator/control-flow.js +284 -0
  314. package/dist/generator/inngest.d.ts +53 -0
  315. package/dist/generator/inngest.js +1126 -0
  316. package/dist/generator/scope-function-generator.d.ts +78 -0
  317. package/dist/generator/scope-function-generator.js +360 -0
  318. package/dist/generator/unified.d.ts +42 -0
  319. package/dist/generator/unified.js +1504 -0
  320. package/dist/generator.d.ts +54 -0
  321. package/dist/generator.js +100 -0
  322. package/dist/index.d.ts +85 -0
  323. package/dist/index.js +89 -0
  324. package/dist/jsdoc-parser.d.ts +308 -0
  325. package/dist/jsdoc-parser.js +923 -0
  326. package/dist/jsdoc-port-sync/constants.d.ts +41 -0
  327. package/dist/jsdoc-port-sync/constants.js +103 -0
  328. package/dist/jsdoc-port-sync/diff.d.ts +76 -0
  329. package/dist/jsdoc-port-sync/diff.js +319 -0
  330. package/dist/jsdoc-port-sync/index.d.ts +42 -0
  331. package/dist/jsdoc-port-sync/index.js +45 -0
  332. package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
  333. package/dist/jsdoc-port-sync/port-parser.js +579 -0
  334. package/dist/jsdoc-port-sync/rename.d.ts +21 -0
  335. package/dist/jsdoc-port-sync/rename.js +256 -0
  336. package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
  337. package/dist/jsdoc-port-sync/signature-parser.js +559 -0
  338. package/dist/jsdoc-port-sync/sync.d.ts +36 -0
  339. package/dist/jsdoc-port-sync/sync.js +644 -0
  340. package/dist/jsdoc-port-sync.d.ts +10 -0
  341. package/dist/jsdoc-port-sync.js +10 -0
  342. package/dist/marketplace/index.d.ts +11 -0
  343. package/dist/marketplace/index.js +10 -0
  344. package/dist/marketplace/manifest.d.ts +32 -0
  345. package/dist/marketplace/manifest.js +176 -0
  346. package/dist/marketplace/registry.d.ts +30 -0
  347. package/dist/marketplace/registry.js +100 -0
  348. package/dist/marketplace/types.d.ts +154 -0
  349. package/dist/marketplace/types.js +9 -0
  350. package/dist/marketplace/validator.d.ts +13 -0
  351. package/dist/marketplace/validator.js +131 -0
  352. package/dist/mcp/auto-registration.d.ts +3 -0
  353. package/dist/mcp/auto-registration.js +62 -0
  354. package/dist/mcp/editor-connection.d.ts +50 -0
  355. package/dist/mcp/editor-connection.js +125 -0
  356. package/dist/mcp/event-buffer.d.ts +62 -0
  357. package/dist/mcp/event-buffer.js +150 -0
  358. package/dist/mcp/index.d.ts +12 -0
  359. package/dist/mcp/index.js +11 -0
  360. package/dist/mcp/resources.d.ts +14 -0
  361. package/dist/mcp/resources.js +55 -0
  362. package/dist/mcp/response-utils.d.ts +63 -0
  363. package/dist/mcp/response-utils.js +89 -0
  364. package/dist/mcp/server.d.ts +4 -0
  365. package/dist/mcp/server.js +99 -0
  366. package/dist/mcp/tools-diagram.d.ts +8 -0
  367. package/dist/mcp/tools-diagram.js +53 -0
  368. package/dist/mcp/tools-editor.d.ts +5 -0
  369. package/dist/mcp/tools-editor.js +190 -0
  370. package/dist/mcp/tools-export.d.ts +9 -0
  371. package/dist/mcp/tools-export.js +180 -0
  372. package/dist/mcp/tools-marketplace.d.ts +9 -0
  373. package/dist/mcp/tools-marketplace.js +132 -0
  374. package/dist/mcp/tools-pattern.d.ts +3 -0
  375. package/dist/mcp/tools-pattern.js +783 -0
  376. package/dist/mcp/tools-query.d.ts +3 -0
  377. package/dist/mcp/tools-query.js +364 -0
  378. package/dist/mcp/tools-template.d.ts +10 -0
  379. package/dist/mcp/tools-template.js +119 -0
  380. package/dist/mcp/types.d.ts +70 -0
  381. package/dist/mcp/types.js +8 -0
  382. package/dist/mcp/workflow-executor.d.ts +47 -0
  383. package/dist/mcp/workflow-executor.js +133 -0
  384. package/dist/migration/registry.d.ts +30 -0
  385. package/dist/migration/registry.js +29 -0
  386. package/dist/node-types-generator.d.ts +49 -0
  387. package/dist/node-types-generator.js +139 -0
  388. package/dist/npm-packages.d.ts +56 -0
  389. package/dist/npm-packages.js +255 -0
  390. package/dist/parser.d.ts +204 -0
  391. package/dist/parser.js +2100 -0
  392. package/dist/plugin/PluginPanel.d.ts +12 -0
  393. package/dist/plugin/PluginPanel.js +5 -0
  394. package/dist/plugin/index.d.ts +13 -0
  395. package/dist/plugin/index.js +14 -0
  396. package/dist/plugin/types.d.ts +75 -0
  397. package/dist/plugin/types.js +8 -0
  398. package/dist/resolve-package-types.d.ts +17 -0
  399. package/dist/resolve-package-types.js +123 -0
  400. package/dist/runtime/CancellationError.d.ts +11 -0
  401. package/dist/runtime/CancellationError.js +20 -0
  402. package/dist/runtime/ExecutionContext.d.ts +146 -0
  403. package/dist/runtime/ExecutionContext.js +235 -0
  404. package/dist/runtime/builtin-functions.d.ts +8 -0
  405. package/dist/runtime/builtin-functions.js +549 -0
  406. package/dist/runtime/events.d.ts +50 -0
  407. package/dist/runtime/events.js +2 -0
  408. package/dist/runtime/function-registry.d.ts +59 -0
  409. package/dist/runtime/function-registry.js +66 -0
  410. package/dist/runtime/index.d.ts +7 -0
  411. package/dist/runtime/index.js +7 -0
  412. package/dist/runtime/parameter-resolver.d.ts +62 -0
  413. package/dist/runtime/parameter-resolver.js +113 -0
  414. package/dist/server/index.d.ts +7 -0
  415. package/dist/server/index.js +6 -0
  416. package/dist/server/types.d.ts +93 -0
  417. package/dist/server/types.js +5 -0
  418. package/dist/server/webhook-server.d.ts +50 -0
  419. package/dist/server/webhook-server.js +269 -0
  420. package/dist/server/workflow-registry.d.ts +61 -0
  421. package/dist/server/workflow-registry.js +202 -0
  422. package/dist/shared-project.d.ts +9 -0
  423. package/dist/shared-project.js +28 -0
  424. package/dist/sugar-optimizer.d.ts +40 -0
  425. package/dist/sugar-optimizer.js +387 -0
  426. package/dist/testing/assertions.d.ts +51 -0
  427. package/dist/testing/assertions.js +127 -0
  428. package/dist/testing/index.d.ts +30 -0
  429. package/dist/testing/index.js +24 -0
  430. package/dist/testing/mock-approval.d.ts +81 -0
  431. package/dist/testing/mock-approval.js +98 -0
  432. package/dist/testing/mock-llm.d.ts +124 -0
  433. package/dist/testing/mock-llm.js +119 -0
  434. package/dist/testing/recorder.d.ts +72 -0
  435. package/dist/testing/recorder.js +70 -0
  436. package/dist/testing/replayer.d.ts +56 -0
  437. package/dist/testing/replayer.js +143 -0
  438. package/dist/testing/token-tracker.d.ts +71 -0
  439. package/dist/testing/token-tracker.js +94 -0
  440. package/dist/type-checker.d.ts +42 -0
  441. package/dist/type-checker.js +190 -0
  442. package/dist/type-mappings.d.ts +29 -0
  443. package/dist/type-mappings.js +125 -0
  444. package/dist/types/branded-ports.d.ts +151 -0
  445. package/dist/types/branded-ports.js +121 -0
  446. package/dist/types/index.d.ts +5 -0
  447. package/dist/types/index.js +5 -0
  448. package/dist/types.d.ts +139 -0
  449. package/dist/types.js +15 -0
  450. package/dist/utils/error-utils.d.ts +15 -0
  451. package/dist/utils/error-utils.js +27 -0
  452. package/dist/utils/lru-cache.d.ts +15 -0
  453. package/dist/utils/lru-cache.js +40 -0
  454. package/dist/utils/port-ordering.d.ts +26 -0
  455. package/dist/utils/port-ordering.js +88 -0
  456. package/dist/utils/port-tag-utils.d.ts +23 -0
  457. package/dist/utils/port-tag-utils.js +41 -0
  458. package/dist/utils/string-distance.d.ts +14 -0
  459. package/dist/utils/string-distance.js +56 -0
  460. package/dist/validation/agent-detection.d.ts +33 -0
  461. package/dist/validation/agent-detection.js +115 -0
  462. package/dist/validation/agent-rules.d.ts +48 -0
  463. package/dist/validation/agent-rules.js +262 -0
  464. package/dist/validator.d.ts +92 -0
  465. package/dist/validator.js +970 -0
  466. package/package.json +109 -0
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Node instance operations for workflow manipulation
3
+ */
4
+ import { produce } from "immer";
5
+ import { withoutValidation, assertNodeExists, assertNodeNotExists, } from "../helpers.js";
6
+ /**
7
+ * Add a node instance to the workflow
8
+ *
9
+ * @param ast - Workflow to modify
10
+ * @param node - Node instance to add
11
+ * @returns Modified workflow
12
+ * @throws {Error} If node ID already exists or node type doesn't exist
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const ast = addNode(workflow, {
17
+ * type: 'NodeInstance',
18
+ * id: 'processor1',
19
+ * nodeType: 'dataProcessor'
20
+ * });
21
+ * ```
22
+ */
23
+ export function addNode(ast, node) {
24
+ // Check for duplicate ID
25
+ assertNodeNotExists(ast, node.id);
26
+ // Note: We don't check if node type exists here (eventual consistency model).
27
+ // Diagnostics will catch INVALID_NODE_TYPE if the type doesn't exist.
28
+ // Use produce directly with simplified type to avoid excessive type instantiation
29
+ return produce(ast, (draft) => {
30
+ draft.instances.push(node);
31
+ });
32
+ }
33
+ /**
34
+ * Remove a node instance from the workflow.
35
+ * Uses minimal validation (only checks node exists) to allow deletion
36
+ * even when the workflow has other validation errors.
37
+ *
38
+ * @param ast - Workflow to modify
39
+ * @param nodeId - ID of node to remove
40
+ * @param options - Remove options
41
+ * @returns Modified workflow
42
+ * @throws {Error} If node doesn't exist
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // Remove node and all its connections
47
+ * const ast = removeNode(workflow, 'processor1');
48
+ *
49
+ * // Remove node, keep connections (will fail validation)
50
+ * const ast = removeNode(workflow, 'processor1', { removeConnections: false });
51
+ * ```
52
+ */
53
+ export function removeNode(ast, nodeId, options = {}) {
54
+ const { removeConnections = true, } = options;
55
+ // First, verify node exists (fail fast with clear error)
56
+ assertNodeExists(ast, nodeId);
57
+ return withoutValidation(ast, (draft) => {
58
+ // Remove node instance
59
+ const nodeIndex = draft.instances.findIndex((n) => n.id === nodeId);
60
+ draft.instances.splice(nodeIndex, 1);
61
+ // Remove connections if requested
62
+ if (removeConnections) {
63
+ draft.connections = draft.connections.filter((conn) => conn.from.node !== nodeId && conn.to.node !== nodeId);
64
+ }
65
+ // Remove from scopes
66
+ if (draft.scopes) {
67
+ Object.keys(draft.scopes).forEach((scopeName) => {
68
+ draft.scopes[scopeName] = draft.scopes[scopeName].filter((id) => id !== nodeId);
69
+ });
70
+ }
71
+ // Clean up macros referencing the deleted node
72
+ if (draft.macros) {
73
+ draft.macros = draft.macros.filter((macro) => {
74
+ if (macro.type === 'map') {
75
+ return macro.instanceId !== nodeId && macro.childId !== nodeId;
76
+ }
77
+ if (macro.type === 'path') {
78
+ return !macro.steps.some(s => s.node === nodeId);
79
+ }
80
+ return true;
81
+ });
82
+ if (draft.macros.length === 0) {
83
+ delete draft.macros;
84
+ }
85
+ }
86
+ });
87
+ }
88
+ /**
89
+ * Rename a node instance (updates all connections)
90
+ *
91
+ * @param ast - Workflow to modify
92
+ * @param oldId - Current node ID
93
+ * @param newId - New node ID
94
+ * @returns Modified workflow
95
+ * @throws {Error} If old ID doesn't exist or new ID already exists
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const ast = renameNode(workflow, 'processor1', 'dataProcessor');
100
+ * // All connections updated automatically
101
+ * ```
102
+ */
103
+ export function renameNode(ast, oldId, newId) {
104
+ assertNodeExists(ast, oldId);
105
+ assertNodeNotExists(ast, newId);
106
+ return withoutValidation(ast, (draft) => {
107
+ // Update node instance ID
108
+ const node = draft.instances.find((n) => n.id === oldId);
109
+ node.id = newId;
110
+ // Update all connections
111
+ draft.connections.forEach((conn) => {
112
+ if (conn.from.node === oldId) {
113
+ conn.from.node = newId;
114
+ }
115
+ if (conn.to.node === oldId) {
116
+ conn.to.node = newId;
117
+ }
118
+ });
119
+ // Update scopes
120
+ if (draft.scopes) {
121
+ Object.keys(draft.scopes).forEach((scopeName) => {
122
+ draft.scopes[scopeName] = draft.scopes[scopeName].map((id) => id === oldId ? newId : id);
123
+ });
124
+ }
125
+ // Update macro references
126
+ if (draft.macros) {
127
+ for (const macro of draft.macros) {
128
+ if (macro.type === 'map') {
129
+ if (macro.instanceId === oldId)
130
+ macro.instanceId = newId;
131
+ if (macro.childId === oldId)
132
+ macro.childId = newId;
133
+ }
134
+ else if (macro.type === 'path') {
135
+ macro.steps = macro.steps.map(s => s.node === oldId ? { ...s, node: newId } : s);
136
+ }
137
+ }
138
+ }
139
+ });
140
+ }
141
+ /**
142
+ * Update a node instance
143
+ *
144
+ * @param ast - Workflow to modify
145
+ * @param nodeId - ID of node to update
146
+ * @param updates - Partial node instance to merge
147
+ * @returns Modified workflow
148
+ * @throws {Error} If node doesn't exist
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const ast = updateNode(workflow, 'processor1', {
153
+ * config: { x: 100, y: 200, label: 'Main Processor' }
154
+ * });
155
+ * ```
156
+ */
157
+ export function updateNode(ast, nodeId, updates) {
158
+ assertNodeExists(ast, nodeId);
159
+ return withoutValidation(ast, (draft) => {
160
+ const node = draft.instances.find((n) => n.id === nodeId);
161
+ Object.assign(node, updates);
162
+ });
163
+ }
164
+ /**
165
+ * Add multiple nodes at once.
166
+ * Uses no validation to allow adding even when workflow has other errors.
167
+ *
168
+ * @param ast - Workflow to modify
169
+ * @param nodes - Array of node instances to add
170
+ * @returns Modified workflow
171
+ */
172
+ export function addNodes(ast, nodes) {
173
+ // Check for duplicate IDs only (eventual consistency model)
174
+ nodes.forEach((node) => {
175
+ assertNodeNotExists(ast, node.id);
176
+ });
177
+ // Use produce directly with simplified type to avoid excessive type instantiation
178
+ return produce(ast, (draft) => {
179
+ nodes.forEach((node) => {
180
+ draft.instances.push(node);
181
+ });
182
+ });
183
+ }
184
+ /**
185
+ * Remove multiple nodes at once.
186
+ * Uses minimal validation (only checks nodes exist) to allow deletion
187
+ * even when the workflow has other validation errors.
188
+ *
189
+ * @param ast - Workflow to modify
190
+ * @param nodeIds - Array of node IDs to remove
191
+ * @returns Modified workflow
192
+ */
193
+ export function removeNodes(ast, nodeIds) {
194
+ // First, verify all nodes exist (fail fast with clear error)
195
+ nodeIds.forEach((nodeId) => {
196
+ assertNodeExists(ast, nodeId);
197
+ });
198
+ return withoutValidation(ast, (draft) => {
199
+ // Remove all nodes
200
+ draft.instances = draft.instances.filter((n) => !nodeIds.includes(n.id));
201
+ // Remove all connections
202
+ draft.connections = draft.connections.filter((conn) => !nodeIds.includes(conn.from.node) &&
203
+ !nodeIds.includes(conn.to.node));
204
+ // Remove from scopes
205
+ if (draft.scopes) {
206
+ Object.keys(draft.scopes).forEach((scopeName) => {
207
+ draft.scopes[scopeName] = draft.scopes[scopeName].filter((id) => !nodeIds.includes(id));
208
+ });
209
+ }
210
+ });
211
+ }
212
+ /**
213
+ * Set node configuration
214
+ *
215
+ * @param ast - Workflow to modify
216
+ * @param nodeId - ID of node to configure
217
+ * @param config - Configuration to set
218
+ * @returns Modified workflow
219
+ */
220
+ export function setNodeConfig(ast, nodeId, config) {
221
+ return updateNode(ast, nodeId, { config });
222
+ }
223
+ /**
224
+ * Set node position (UI coordinates)
225
+ *
226
+ * @param ast - Workflow to modify
227
+ * @param nodeId - ID of node to position (including virtual nodes "Start" and "Exit")
228
+ * @param x - X coordinate
229
+ * @param y - Y coordinate
230
+ * @returns Modified workflow
231
+ */
232
+ export function setNodePosition(ast, nodeId, x, y) {
233
+ // Validate before mutation to avoid type instantiation issues inside callback
234
+ if (nodeId !== "Start" && nodeId !== "Exit") {
235
+ assertNodeExists(ast, nodeId);
236
+ }
237
+ return withoutValidation(ast, (draft) => {
238
+ // Handle Start/Exit virtual nodes
239
+ if (nodeId === "Start" || nodeId === "Exit") {
240
+ const uiField = nodeId === "Start" ? "startNode" : "exitNode";
241
+ draft.ui = {
242
+ ...draft.ui,
243
+ [uiField]: {
244
+ ...draft.ui?.[uiField],
245
+ x,
246
+ y,
247
+ },
248
+ };
249
+ return;
250
+ }
251
+ // Regular nodes - find and update
252
+ const node = draft.instances.find((n) => n.id === nodeId);
253
+ if (!node)
254
+ return; // Already validated above
255
+ if (!node.config) {
256
+ node.config = {};
257
+ }
258
+ node.config.x = x;
259
+ node.config.y = y;
260
+ });
261
+ }
262
+ /**
263
+ * Set node minimized state (UI state)
264
+ *
265
+ * @param ast - Workflow to modify
266
+ * @param nodeId - ID of node to minimize/expand
267
+ * @param minimized - Whether the node is minimized
268
+ * @returns Modified workflow
269
+ */
270
+ export function setNodeMinimized(ast, nodeId, minimized) {
271
+ // Validate before mutation to avoid type instantiation issues inside callback
272
+ assertNodeExists(ast, nodeId);
273
+ return withoutValidation(ast, (draft) => {
274
+ const node = draft.instances.find((n) => n.id === nodeId);
275
+ if (!node)
276
+ return; // Already validated above
277
+ if (!node.config) {
278
+ node.config = {};
279
+ }
280
+ node.config.minimized = minimized;
281
+ });
282
+ }
283
+ /**
284
+ * Set node label (UI display name)
285
+ *
286
+ * @param ast - Workflow to modify
287
+ * @param nodeId - ID of node to label
288
+ * @param label - Label to set (empty string or undefined clears the label)
289
+ * @returns Modified workflow
290
+ */
291
+ export function setNodeLabel(ast, nodeId, label) {
292
+ // Validate before mutation to avoid type instantiation issues inside callback
293
+ assertNodeExists(ast, nodeId);
294
+ return withoutValidation(ast, (draft) => {
295
+ const node = draft.instances.find((n) => n.id === nodeId);
296
+ if (!node)
297
+ return; // Already validated above
298
+ if (!node.config) {
299
+ node.config = {};
300
+ }
301
+ // Set or clear the label
302
+ if (label) {
303
+ node.config.label = label;
304
+ }
305
+ else {
306
+ delete node.config.label;
307
+ }
308
+ });
309
+ }
310
+ /**
311
+ * Set node size (UI state)
312
+ *
313
+ * @param ast - Workflow to modify
314
+ * @param nodeId - ID of node to resize
315
+ * @param width - Node width
316
+ * @param height - Node height
317
+ * @returns Modified workflow
318
+ */
319
+ export function setNodeSize(ast, nodeId, width, height) {
320
+ // Validate before mutation to avoid type instantiation issues inside callback
321
+ assertNodeExists(ast, nodeId);
322
+ return withoutValidation(ast, (draft) => {
323
+ const node = draft.instances.find((n) => n.id === nodeId);
324
+ if (!node)
325
+ return; // Already validated above
326
+ if (!node.config) {
327
+ node.config = {};
328
+ }
329
+ node.config.width = width;
330
+ node.config.height = height;
331
+ });
332
+ }
333
+ //# sourceMappingURL=nodes.js.map
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Port operations for workflow manipulation
3
+ */
4
+ import type { TWorkflowAST } from "../../ast/types.js";
5
+ /**
6
+ * Swap the order of two ports on a node type (Start/Exit only)
7
+ * For regular instances, use swapNodeInstancePortOrder()
8
+ *
9
+ * @param ast - Workflow to modify
10
+ * @param nodeTypeName - Name of the node type ("Start" or "Exit" only)
11
+ * @param portName1 - Name of first port
12
+ * @param portName2 - Name of second port
13
+ * @returns Modified workflow
14
+ * @throws {Error} If used with non-Start/Exit nodes or ports are invalid
15
+ */
16
+ export declare function swapPortOrder(ast: TWorkflowAST, nodeTypeName: string, portName1: string, portName2: string): TWorkflowAST;
17
+ /**
18
+ * Swap the order of two ports on a specific node instance (instance-level only)
19
+ *
20
+ * @param ast - Workflow to modify
21
+ * @param instanceId - ID of the node instance
22
+ * @param portName1 - Name of first port
23
+ * @param portName2 - Name of second port
24
+ * @returns Modified workflow
25
+ * @throws {Error} If instance doesn't exist or ports are invalid
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const ast = swapNodeInstancePortOrder(workflow, 'doubler1', 'value', 'execute');
30
+ * ```
31
+ */
32
+ export declare function swapNodeInstancePortOrder(ast: TWorkflowAST, instanceId: string, portName1: string, portName2: string): TWorkflowAST;
33
+ /**
34
+ * Set Start or Exit node ports directly.
35
+ * Used by worker to persist port configuration changes on virtual nodes.
36
+ *
37
+ * @param ast - Workflow to modify
38
+ * @param nodeType - "Start" or "Exit"
39
+ * @param ports - The ports object to set
40
+ * @returns Modified workflow
41
+ * @throws {Error} If nodeType is not "Start" or "Exit"
42
+ */
43
+ export declare function setStartExitPorts(ast: TWorkflowAST, nodeType: "Start" | "Exit", ports: Record<string, unknown>): TWorkflowAST;
44
+ /**
45
+ * Set instance port configs directly.
46
+ * Used by worker to persist port configuration changes.
47
+ *
48
+ * @param ast - Workflow to modify
49
+ * @param instanceId - ID of the node instance
50
+ * @param portConfigs - The port configs array to set
51
+ * @returns Modified workflow
52
+ * @throws {Error} If instance doesn't exist
53
+ */
54
+ export declare function setInstancePortConfigs(ast: TWorkflowAST, instanceId: string, portConfigs: Array<{
55
+ portName: string;
56
+ direction: "INPUT" | "OUTPUT";
57
+ order?: number;
58
+ }>): TWorkflowAST;
59
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Port operations for workflow manipulation
3
+ */
4
+ import { produce } from "immer";
5
+ import { withoutValidation } from "../helpers.js";
6
+ /**
7
+ * Swap the order of two ports on a node type
8
+ *
9
+ * @param ast - Workflow to modify
10
+ * @param nodeTypeName - Name of the node type (or "Start"/"Exit" for workflow interface)
11
+ * @param portName1 - Name of first port
12
+ * @param portName2 - Name of second port
13
+ * @returns Modified workflow
14
+ * @throws {Error} If node type doesn't exist or ports are invalid
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const ast = swapPortOrder(workflow, 'MyNode', 'input1', 'input2');
19
+ * ```
20
+ */
21
+ /**
22
+ * Helper function to compute implicit port order based on position in the ports object
23
+ */
24
+ function getImplicitOrder(ports, portName) {
25
+ const portNames = Object.keys(ports);
26
+ return portNames.indexOf(portName);
27
+ }
28
+ /**
29
+ * Swap the order of two ports on a node type (Start/Exit only)
30
+ * For regular instances, use swapNodeInstancePortOrder()
31
+ *
32
+ * @param ast - Workflow to modify
33
+ * @param nodeTypeName - Name of the node type ("Start" or "Exit" only)
34
+ * @param portName1 - Name of first port
35
+ * @param portName2 - Name of second port
36
+ * @returns Modified workflow
37
+ * @throws {Error} If used with non-Start/Exit nodes or ports are invalid
38
+ */
39
+ export function swapPortOrder(ast, nodeTypeName, portName1, portName2) {
40
+ if (nodeTypeName !== "Start" && nodeTypeName !== "Exit") {
41
+ throw new Error(`swapPortOrder() only supports Start/Exit nodes. ` +
42
+ `Use swapNodeInstancePortOrder() for instance "${nodeTypeName}".`);
43
+ }
44
+ return withoutValidation(ast, (draft) => {
45
+ // Handle Start/Exit nodes specially
46
+ if (nodeTypeName === "Start") {
47
+ if (!draft.startPorts) {
48
+ throw new Error("Start ports not found");
49
+ }
50
+ const port1 = draft.startPorts[portName1];
51
+ const port2 = draft.startPorts[portName2];
52
+ if (!port1)
53
+ throw new Error(`Port "${portName1}" not found on Start node`);
54
+ if (!port2)
55
+ throw new Error(`Port "${portName2}" not found on Start node`);
56
+ // Use explicit order if present, otherwise compute from position
57
+ const order1 = port1.metadata?.order ?? getImplicitOrder(draft.startPorts, portName1);
58
+ const order2 = port2.metadata?.order ?? getImplicitOrder(draft.startPorts, portName2);
59
+ // Swap orders for all ports (including system ports)
60
+ port1.metadata = { ...port1.metadata, order: order2 };
61
+ port2.metadata = { ...port2.metadata, order: order1 };
62
+ }
63
+ else if (nodeTypeName === "Exit") {
64
+ if (!draft.exitPorts) {
65
+ throw new Error("Exit ports not found");
66
+ }
67
+ const port1 = draft.exitPorts[portName1];
68
+ const port2 = draft.exitPorts[portName2];
69
+ if (!port1)
70
+ throw new Error(`Port "${portName1}" not found on Exit node`);
71
+ if (!port2)
72
+ throw new Error(`Port "${portName2}" not found on Exit node`);
73
+ // Use explicit order if present, otherwise compute from position
74
+ const order1 = port1.metadata?.order ?? getImplicitOrder(draft.exitPorts, portName1);
75
+ const order2 = port2.metadata?.order ?? getImplicitOrder(draft.exitPorts, portName2);
76
+ // Swap orders for all ports (including system ports)
77
+ port1.metadata = { ...port1.metadata, order: order2 };
78
+ port2.metadata = { ...port2.metadata, order: order1 };
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Swap the order of two ports on a specific node instance (instance-level only)
84
+ *
85
+ * @param ast - Workflow to modify
86
+ * @param instanceId - ID of the node instance
87
+ * @param portName1 - Name of first port
88
+ * @param portName2 - Name of second port
89
+ * @returns Modified workflow
90
+ * @throws {Error} If instance doesn't exist or ports are invalid
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * const ast = swapNodeInstancePortOrder(workflow, 'doubler1', 'value', 'execute');
95
+ * ```
96
+ */
97
+ export function swapNodeInstancePortOrder(ast, instanceId, portName1, portName2) {
98
+ return withoutValidation(ast, (draft) => {
99
+ const instance = draft.instances.find(inst => inst.id === instanceId);
100
+ if (!instance) {
101
+ throw new Error(`Instance "${instanceId}" not found`);
102
+ }
103
+ // Find node type by matching either name or functionName
104
+ const nodeType = draft.nodeTypes.find(nt => nt.name === instance.nodeType || nt.functionName === instance.nodeType);
105
+ if (!nodeType) {
106
+ throw new Error(`Node type "${instance.nodeType}" not found`);
107
+ }
108
+ // Helper to get the EFFECTIVE visual order (what user sees in UI)
109
+ // This calculates order by: explicit order first, then implicit position as tiebreaker
110
+ const getEffectiveOrder = (portName) => {
111
+ const isInput = portName in nodeType.inputs;
112
+ const isOutput = portName in nodeType.outputs;
113
+ if (!isInput && !isOutput) {
114
+ throw new Error(`Port "${portName}" not found on node type "${instance.nodeType}"`);
115
+ }
116
+ const direction = isInput ? "INPUT" : "OUTPUT";
117
+ const ports = isInput ? nodeType.inputs : nodeType.outputs;
118
+ // Get all ports in this direction with their orders
119
+ const portsWithOrders = Object.keys(ports).map((pName, implicitIndex) => {
120
+ // Check instance config first
121
+ const instanceConfig = instance.config?.portConfigs?.find(pc => pc.portName === pName && (pc.direction == null || pc.direction === direction));
122
+ if (instanceConfig?.order !== undefined) {
123
+ return { name: pName, explicitOrder: instanceConfig.order, implicitOrder: implicitIndex };
124
+ }
125
+ // Check node type metadata
126
+ const port = ports[pName];
127
+ const metadataOrder = port?.metadata?.order;
128
+ if (typeof metadataOrder === "number") {
129
+ return { name: pName, explicitOrder: metadataOrder, implicitOrder: implicitIndex };
130
+ }
131
+ // No explicit order
132
+ return { name: pName, explicitOrder: undefined, implicitOrder: implicitIndex };
133
+ });
134
+ // Sort by: explicit order first, then implicit order as tiebreaker
135
+ const sorted = portsWithOrders.sort((a, b) => {
136
+ const aExplicit = a.explicitOrder ?? Infinity;
137
+ const bExplicit = b.explicitOrder ?? Infinity;
138
+ if (aExplicit !== bExplicit) {
139
+ return aExplicit - bExplicit;
140
+ }
141
+ // Same explicit order (or both undefined) - use implicit as tiebreaker
142
+ return a.implicitOrder - b.implicitOrder;
143
+ });
144
+ // Find the visual position (index in sorted array)
145
+ const visualPosition = sorted.findIndex(p => p.name === portName);
146
+ return { order: visualPosition, direction };
147
+ };
148
+ const port1Info = getEffectiveOrder(portName1);
149
+ const port2Info = getEffectiveOrder(portName2);
150
+ // Initialize config if needed
151
+ if (!instance.config) {
152
+ instance.config = {};
153
+ }
154
+ if (!instance.config.portConfigs) {
155
+ instance.config.portConfigs = [];
156
+ }
157
+ // Helper to update or add a port config
158
+ const updatePortConfig = (portName, direction, order) => {
159
+ const existingIndex = instance.config.portConfigs.findIndex(pc => pc.portName === portName && (pc.direction == null || pc.direction === direction));
160
+ if (existingIndex >= 0) {
161
+ // Update existing config
162
+ instance.config.portConfigs[existingIndex] = {
163
+ ...instance.config.portConfigs[existingIndex],
164
+ order,
165
+ };
166
+ }
167
+ else {
168
+ // Add new config
169
+ instance.config.portConfigs.push({ portName, direction, order });
170
+ }
171
+ };
172
+ // Swap the orders
173
+ updatePortConfig(portName1, port1Info.direction, port2Info.order);
174
+ updatePortConfig(portName2, port2Info.direction, port1Info.order);
175
+ });
176
+ }
177
+ /**
178
+ * Set Start or Exit node ports directly.
179
+ * Used by worker to persist port configuration changes on virtual nodes.
180
+ *
181
+ * @param ast - Workflow to modify
182
+ * @param nodeType - "Start" or "Exit"
183
+ * @param ports - The ports object to set
184
+ * @returns Modified workflow
185
+ * @throws {Error} If nodeType is not "Start" or "Exit"
186
+ */
187
+ export function setStartExitPorts(ast, nodeType, ports) {
188
+ if (nodeType !== "Start" && nodeType !== "Exit") {
189
+ throw new Error(`nodeType must be "Start" or "Exit", got "${nodeType}"`);
190
+ }
191
+ // Use produce directly with simplified type to avoid excessive type instantiation
192
+ return produce(ast, (draft) => {
193
+ if (nodeType === "Start") {
194
+ draft.startPorts = ports;
195
+ }
196
+ else {
197
+ draft.exitPorts = ports;
198
+ }
199
+ });
200
+ }
201
+ /**
202
+ * Set instance port configs directly.
203
+ * Used by worker to persist port configuration changes.
204
+ *
205
+ * @param ast - Workflow to modify
206
+ * @param instanceId - ID of the node instance
207
+ * @param portConfigs - The port configs array to set
208
+ * @returns Modified workflow
209
+ * @throws {Error} If instance doesn't exist
210
+ */
211
+ export function setInstancePortConfigs(ast, instanceId, portConfigs) {
212
+ // Validate before mutation to avoid type instantiation issues inside callback
213
+ const instance = ast.instances.find(inst => inst.id === instanceId);
214
+ if (!instance) {
215
+ throw new Error(`Instance "${instanceId}" not found`);
216
+ }
217
+ // Use produce directly with simplified type to avoid excessive type instantiation
218
+ return produce(ast, (draft) => {
219
+ const draftInstance = draft.instances.find(inst => inst.id === instanceId);
220
+ if (!draftInstance)
221
+ return; // Already validated above
222
+ if (!draftInstance.config) {
223
+ draftInstance.config = {};
224
+ }
225
+ draftInstance.config.portConfigs = portConfigs;
226
+ });
227
+ }
228
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Scope operations for workflow manipulation
3
+ */
4
+ import type { TWorkflowAST } from "../../ast/types.js";
5
+ /**
6
+ * Create a new scope
7
+ *
8
+ * @param ast - Workflow to modify
9
+ * @param scopeName - Name of scope
10
+ * @param nodeIds - Node IDs in scope
11
+ * @returns Modified workflow
12
+ * @throws {Error} If scope already exists
13
+ */
14
+ export declare function createScope(ast: TWorkflowAST, scopeName: string, nodeIds: string[]): TWorkflowAST;
15
+ /**
16
+ * Remove a scope.
17
+ * Uses no validation to allow deletion even when workflow has other errors.
18
+ *
19
+ * @param ast - Workflow to modify
20
+ * @param scopeName - Name of scope to remove
21
+ * @returns Modified workflow
22
+ */
23
+ export declare function removeScope(ast: TWorkflowAST, scopeName: string): TWorkflowAST;
24
+ /**
25
+ * Add node to existing scope
26
+ *
27
+ * @param ast - Workflow to modify
28
+ * @param scopeName - Name of scope
29
+ * @param nodeId - Node ID to add
30
+ * @returns Modified workflow
31
+ */
32
+ export declare function addToScope(ast: TWorkflowAST, scopeName: string, nodeId: string): TWorkflowAST;
33
+ /**
34
+ * Remove node from scope.
35
+ * Uses no validation to allow deletion even when workflow has other errors.
36
+ *
37
+ * @param ast - Workflow to modify
38
+ * @param scopeName - Name of scope
39
+ * @param nodeId - Node ID to remove
40
+ * @returns Modified workflow
41
+ */
42
+ export declare function removeFromScope(ast: TWorkflowAST, scopeName: string, nodeId: string): TWorkflowAST;
43
+ /**
44
+ * Move node to different scope
45
+ *
46
+ * @param ast - Workflow to modify
47
+ * @param nodeId - Node ID to move
48
+ * @param targetScope - Target scope name
49
+ * @returns Modified workflow
50
+ */
51
+ export declare function moveToScope(ast: TWorkflowAST, nodeId: string, targetScope: string): TWorkflowAST;
52
+ //# sourceMappingURL=scopes.d.ts.map