@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,114 @@
1
+ import { toPascalCase } from '../index.js';
2
+ export const agentRouterNodeTemplate = {
3
+ id: 'agent-router',
4
+ name: 'Agent Router',
5
+ description: 'Route to different handlers based on a classification result',
6
+ category: 'ai',
7
+ generate: (name) => {
8
+ const funcName = name || 'agentRouter';
9
+ const label = toPascalCase(funcName);
10
+ return `
11
+ // ============================================================
12
+ // ROUTE DEFINITIONS
13
+ // ============================================================
14
+ //
15
+ // Define your routes here. The router matches the 'category' input
16
+ // (from an upstream LLM call) against route names using case-insensitive
17
+ // comparison. The last route is used as a default/fallback.
18
+ //
19
+ // Example wiring in a workflow:
20
+ // llmCall.content → agentRouter.category
21
+ // agentRouter.selectedRoute → (use for downstream branching)
22
+
23
+ interface Route {
24
+ name: string;
25
+ description: string;
26
+ }
27
+
28
+ const DEFAULT_ROUTES: Route[] = [
29
+ { name: 'billing', description: 'Billing inquiries, invoices, payments' },
30
+ { name: 'technical', description: 'Technical support, bugs, troubleshooting' },
31
+ { name: 'general', description: 'General questions (default fallback)' },
32
+ ];
33
+
34
+ /**
35
+ * Route to different handlers based on a classification result.
36
+ * Matches the category string against route names (case-insensitive).
37
+ * Falls back to the last route if no match is found.
38
+ *
39
+ * @flowWeaver nodeType
40
+ * @label ${label}
41
+ * @color blue
42
+ * @icon altRoute
43
+ * @input execute [order:0] - Execute
44
+ * @input category [order:1] - Classification result (from upstream LLM call)
45
+ * @input routes [order:2] - Available routes with name and description (optional)
46
+ * @output onSuccess [order:0] - On Success
47
+ * @output onFailure [order:1] - On Failure (no routes provided)
48
+ * @output selectedRoute [order:2] - Name of the matched route
49
+ * @output routeDescription [order:3] - Description of the matched route
50
+ * @output isDefault [order:4] - Whether the default/fallback route was used
51
+ */
52
+ function ${funcName}(
53
+ execute: boolean,
54
+ category: string,
55
+ routes?: Route[]
56
+ ): {
57
+ onSuccess: boolean;
58
+ onFailure: boolean;
59
+ selectedRoute: string;
60
+ routeDescription: string;
61
+ isDefault: boolean;
62
+ } {
63
+ if (!execute) {
64
+ return {
65
+ onSuccess: false,
66
+ onFailure: false,
67
+ selectedRoute: '',
68
+ routeDescription: '',
69
+ isDefault: false,
70
+ };
71
+ }
72
+
73
+ const activeRoutes = routes && routes.length > 0 ? routes : DEFAULT_ROUTES;
74
+
75
+ if (activeRoutes.length === 0) {
76
+ return {
77
+ onSuccess: false,
78
+ onFailure: true,
79
+ selectedRoute: '',
80
+ routeDescription: '',
81
+ isDefault: false,
82
+ };
83
+ }
84
+
85
+ // Case-insensitive match against route names
86
+ const normalized = (category || '').trim().toLowerCase();
87
+ const matched = activeRoutes.find(
88
+ (r) => r.name.toLowerCase() === normalized
89
+ );
90
+
91
+ if (matched) {
92
+ return {
93
+ onSuccess: true,
94
+ onFailure: false,
95
+ selectedRoute: matched.name,
96
+ routeDescription: matched.description,
97
+ isDefault: false,
98
+ };
99
+ }
100
+
101
+ // Fallback to last route as default
102
+ const fallback = activeRoutes[activeRoutes.length - 1];
103
+ return {
104
+ onSuccess: true,
105
+ onFailure: false,
106
+ selectedRoute: fallback.name,
107
+ routeDescription: fallback.description,
108
+ isDefault: true,
109
+ };
110
+ }
111
+ `.trim();
112
+ },
113
+ };
114
+ //# sourceMappingURL=agent-router.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Aggregator Node Template
3
+ * Combine multiple inputs into a single output
4
+ */
5
+ import type { NodeTemplate } from "../index.js";
6
+ export declare const aggregatorNodeTemplate: NodeTemplate;
7
+ //# sourceMappingURL=aggregator.d.ts.map
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Aggregator Node Template
3
+ * Combine multiple inputs into a single output
4
+ */
5
+ import { toPascalCase } from "../index.js";
6
+ export const aggregatorNodeTemplate = {
7
+ id: "aggregator",
8
+ name: "Aggregator",
9
+ description: "Combine multiple inputs into a single output",
10
+ category: "data",
11
+ generate: (name) => {
12
+ const pascalName = toPascalCase(name);
13
+ return `
14
+ /**
15
+ * Combines multiple inputs into a single output
16
+ *
17
+ * @flowWeaver nodeType
18
+ * @label ${pascalName}
19
+ * @color orange
20
+ * @icon callMerge
21
+ * @input inputA [order:1] - First input
22
+ * @input inputB [order:2] - Second input
23
+ * @input inputC [order:3] - Third input (optional)
24
+ * @input execute [order:0] - Execute
25
+ * @output combined [order:2] - Combined result
26
+ * @output count [order:3] - Number of non-null inputs combined
27
+ * @output onSuccess [order:0] - On Success
28
+ * @output onFailure [order:1] - On Failure
29
+ */
30
+ function ${name}(
31
+ execute: boolean,
32
+ inputA: any,
33
+ inputB: any,
34
+ inputC: any
35
+ ): { onSuccess: boolean; onFailure: boolean; combined: any; count: number } {
36
+ if (!execute) {
37
+ return { onSuccess: false, onFailure: false, combined: null, count: 0 };
38
+ }
39
+
40
+ // TODO: Customize aggregation logic based on your data types
41
+ const inputs = [inputA, inputB, inputC].filter(x => x !== null && x !== undefined);
42
+ const count = inputs.length;
43
+
44
+ // Default: merge arrays or objects, or collect into array
45
+ let combined: any;
46
+
47
+ if (inputs.every(Array.isArray)) {
48
+ // Merge arrays
49
+ combined = inputs.flat();
50
+ } else if (inputs.every(x => typeof x === "object" && x !== null && !Array.isArray(x))) {
51
+ // Merge objects
52
+ combined = Object.assign({}, ...inputs);
53
+ } else {
54
+ // Collect as array
55
+ combined = inputs;
56
+ }
57
+
58
+ return { onSuccess: true, onFailure: false, combined, count };
59
+ }
60
+ `.trim();
61
+ },
62
+ };
63
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1,3 @@
1
+ import type { NodeTemplate } from '../index.js';
2
+ export declare const conversationMemoryNodeTemplate: NodeTemplate;
3
+ //# sourceMappingURL=conversation-memory.d.ts.map
@@ -0,0 +1,85 @@
1
+ export const conversationMemoryNodeTemplate = {
2
+ id: 'conversation-memory',
3
+ name: 'Conversation Memory',
4
+ description: 'Stores and retrieves conversation history',
5
+ category: 'ai',
6
+ generate: (name) => {
7
+ const funcName = name || 'conversationMemory';
8
+ return `
9
+ // LLM Types
10
+ interface LLMMessage { role: 'system' | 'user' | 'assistant' | 'tool'; content: string; toolCallId?: string; }
11
+
12
+ // In-memory store (replace with Redis, database, etc. for production)
13
+ const conversations: Map<string, LLMMessage[]> = new Map();
14
+
15
+ /**
16
+ * Manages conversation history for stateful chat
17
+ *
18
+ * @flowWeaver nodeType
19
+ * @label ${funcName}
20
+ * @color blue
21
+ * @icon database
22
+ * @input conversationId [order:1] - Unique conversation identifier
23
+ * @input newMessage [order:2] - New message to add (optional)
24
+ * @input maxMessages [order:3] - Max messages to retain (optional, default 50)
25
+ * @input execute [order:0] - Execute
26
+ * @output messages [order:2] - Full conversation history
27
+ * @output messageCount [order:3] - Number of messages
28
+ * @output onSuccess [order:0] - On Success
29
+ * @output onFailure [order:1] - On Failure
30
+ */
31
+ function ${funcName}(
32
+ execute: boolean,
33
+ conversationId: string,
34
+ newMessage?: LLMMessage,
35
+ maxMessages?: number
36
+ ): {
37
+ onSuccess: boolean;
38
+ onFailure: boolean;
39
+ messages: LLMMessage[];
40
+ messageCount: number;
41
+ } {
42
+ if (!execute) {
43
+ return {
44
+ onSuccess: false,
45
+ onFailure: false,
46
+ messages: [],
47
+ messageCount: 0
48
+ };
49
+ }
50
+
51
+ const limit = maxMessages ?? 50;
52
+
53
+ // Get or create conversation
54
+ if (!conversations.has(conversationId)) {
55
+ conversations.set(conversationId, []);
56
+ }
57
+
58
+ const history = conversations.get(conversationId)!;
59
+
60
+ // Add new message if provided
61
+ if (newMessage) {
62
+ history.push(newMessage);
63
+
64
+ // Trim to max length (keep system message if present)
65
+ while (history.length > limit) {
66
+ const firstNonSystem = history.findIndex(m => m.role !== 'system');
67
+ if (firstNonSystem > 0) {
68
+ history.splice(firstNonSystem, 1);
69
+ } else {
70
+ history.shift();
71
+ }
72
+ }
73
+ }
74
+
75
+ return {
76
+ onSuccess: true,
77
+ onFailure: false,
78
+ messages: [...history],
79
+ messageCount: history.length
80
+ };
81
+ }
82
+ `.trim();
83
+ },
84
+ };
85
+ //# sourceMappingURL=conversation-memory.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * HTTP Node Template
3
+ * HTTP request with configurable method, headers, body
4
+ */
5
+ import type { NodeTemplate } from "../index.js";
6
+ export declare const httpNodeTemplate: NodeTemplate;
7
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1,80 @@
1
+ /**
2
+ * HTTP Node Template
3
+ * HTTP request with configurable method, headers, body
4
+ */
5
+ import { toPascalCase } from "../index.js";
6
+ export const httpNodeTemplate = {
7
+ id: "http",
8
+ name: "HTTP Request",
9
+ description: "Make HTTP requests to external APIs",
10
+ category: "integration",
11
+ generate: (name) => {
12
+ const pascalName = toPascalCase(name);
13
+ return `
14
+ /**
15
+ * Makes an HTTP request
16
+ *
17
+ * @flowWeaver nodeType
18
+ * @label ${pascalName}
19
+ * @color blue
20
+ * @icon api
21
+ * @input url [order:1] - Request URL
22
+ * @input method [order:2] - HTTP method (GET, POST, PUT, DELETE)
23
+ * @input headers [order:3] - Request headers
24
+ * @input body [order:4] - Request body
25
+ * @input execute [order:0] - Execute
26
+ * @output response [order:2] - Response data
27
+ * @output statusCode [order:3] - HTTP status code
28
+ * @output onSuccess [order:0] - On Success
29
+ * @output onFailure [order:1] - On Failure
30
+ */
31
+ async function ${name}(
32
+ execute: boolean,
33
+ url: string,
34
+ method: "GET" | "POST" | "PUT" | "DELETE",
35
+ headers: Record<string, string>,
36
+ body: any
37
+ ): Promise<{ onSuccess: boolean; onFailure: boolean; response: any; statusCode: number }> {
38
+ if (!execute) {
39
+ return { onSuccess: false, onFailure: false, response: null, statusCode: 0 };
40
+ }
41
+
42
+ try {
43
+ const options: RequestInit = {
44
+ method,
45
+ headers: {
46
+ "Content-Type": "application/json",
47
+ ...headers
48
+ }
49
+ };
50
+
51
+ if (method !== "GET" && body) {
52
+ options.body = JSON.stringify(body);
53
+ }
54
+
55
+ const res = await fetch(url, options);
56
+ const statusCode = res.status;
57
+
58
+ let response;
59
+ const contentType = res.headers.get("content-type");
60
+ if (contentType?.includes("application/json")) {
61
+ response = await res.json();
62
+ } else {
63
+ response = await res.text();
64
+ }
65
+
66
+ if (!res.ok) {
67
+ console.error("[${pascalName}] HTTP error:", statusCode, response);
68
+ return { onSuccess: false, onFailure: true, response, statusCode };
69
+ }
70
+
71
+ return { onSuccess: true, onFailure: false, response, statusCode };
72
+ } catch (err) {
73
+ console.error("[${pascalName}] Request failed:", err);
74
+ return { onSuccess: false, onFailure: true, response: null, statusCode: 0 };
75
+ }
76
+ }
77
+ `.trim();
78
+ },
79
+ };
80
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1,3 @@
1
+ import type { NodeTemplate } from '../index.js';
2
+ export declare const humanApprovalNodeTemplate: NodeTemplate;
3
+ //# sourceMappingURL=human-approval.d.ts.map
@@ -0,0 +1,110 @@
1
+ import { toPascalCase } from '../index.js';
2
+ import { APPROVAL_TYPES } from '../shared/approval-types.js';
3
+ import { getApprovalCode } from '../approvals/index.js';
4
+ const configSchema = {
5
+ strategy: {
6
+ type: 'select',
7
+ label: 'Approval Strategy',
8
+ description: 'How approval requests are handled',
9
+ default: 'mock',
10
+ options: [
11
+ { value: 'mock', label: 'Mock (Testing)' },
12
+ { value: 'callback', label: 'Callback (Promise-based)' },
13
+ { value: 'webhook', label: 'Webhook (HTTP handler)' },
14
+ ],
15
+ },
16
+ };
17
+ export const humanApprovalNodeTemplate = {
18
+ id: 'human-approval',
19
+ name: 'Human Approval',
20
+ description: 'Pause workflow and wait for human approval',
21
+ category: 'workflow',
22
+ configSchema,
23
+ generate: (name, config) => {
24
+ const funcName = name || 'humanApproval';
25
+ const label = toPascalCase(funcName);
26
+ const strategy = config?.strategy || 'mock';
27
+ const approvalCode = getApprovalCode(strategy);
28
+ return `
29
+ // ============================================================
30
+ // APPROVAL TYPES
31
+ // ============================================================
32
+ //
33
+ // On Inngest targets, consider using the built-in waitForEvent node instead —
34
+ // it maps to step.waitForEvent() for zero-cost durable pauses.
35
+ // See: https://www.inngest.com/docs/reference/functions/step-wait-for-event
36
+
37
+ ${APPROVAL_TYPES}
38
+
39
+ // ============================================================
40
+ // APPROVAL PROVIDER
41
+ // ============================================================
42
+
43
+ ${approvalCode}
44
+
45
+ /**
46
+ * Pause workflow and wait for human approval.
47
+ * Returns whether the request was approved, along with the reviewer's response.
48
+ *
49
+ * @flowWeaver nodeType
50
+ * @label ${label}
51
+ * @color orange
52
+ * @icon verified
53
+ * @input execute [order:0] - Execute
54
+ * @input prompt [order:1] - Approval prompt shown to reviewer
55
+ * @input context [order:2] - Additional context for the reviewer (optional)
56
+ * @input timeout [order:3] - Timeout duration e.g. "7d", "1h" (optional)
57
+ * @output onSuccess [order:0] - On Success
58
+ * @output onFailure [order:1] - On Failure (timeout or error)
59
+ * @output approved [order:2] - Whether the request was approved
60
+ * @output response [order:3] - Reviewer's response text
61
+ * @output reviewer [order:4] - Reviewer identifier
62
+ */
63
+ async function ${funcName}(
64
+ execute: boolean,
65
+ prompt: string,
66
+ context?: Record<string, unknown>,
67
+ timeout?: string
68
+ ): Promise<{
69
+ onSuccess: boolean;
70
+ onFailure: boolean;
71
+ approved: boolean;
72
+ response?: string;
73
+ reviewer?: string;
74
+ }> {
75
+ if (!execute) {
76
+ return {
77
+ onSuccess: false,
78
+ onFailure: false,
79
+ approved: false,
80
+ };
81
+ }
82
+
83
+ try {
84
+ const result = await approvalProvider.requestApproval({
85
+ id: crypto.randomUUID(),
86
+ prompt,
87
+ context,
88
+ timeout,
89
+ });
90
+
91
+ return {
92
+ onSuccess: true,
93
+ onFailure: false,
94
+ approved: result.approved,
95
+ response: result.response,
96
+ reviewer: result.reviewer,
97
+ };
98
+ } catch (error) {
99
+ console.error('Approval request failed:', error);
100
+ return {
101
+ onSuccess: false,
102
+ onFailure: true,
103
+ approved: false,
104
+ };
105
+ }
106
+ }
107
+ `.trim();
108
+ },
109
+ };
110
+ //# sourceMappingURL=human-approval.js.map
@@ -0,0 +1,3 @@
1
+ import type { NodeTemplate } from '../index.js';
2
+ export declare const jsonExtractorNodeTemplate: NodeTemplate;
3
+ //# sourceMappingURL=json-extractor.d.ts.map
@@ -0,0 +1,119 @@
1
+ import { toPascalCase } from '../index.js';
2
+ export const jsonExtractorNodeTemplate = {
3
+ id: 'json-extractor',
4
+ name: 'JSON Extractor',
5
+ description: 'Extract structured JSON from LLM text output',
6
+ category: 'ai',
7
+ generate: (name) => {
8
+ const funcName = name || 'jsonExtractor';
9
+ const label = toPascalCase(funcName);
10
+ return `
11
+ /**
12
+ * Extract structured JSON from LLM text output.
13
+ * Handles markdown code fences, leading/trailing text, and optional schema validation.
14
+ *
15
+ * Strips \\\`\\\`\\\`json ... \\\`\\\`\\\` fences, finds the first valid JSON object or array,
16
+ * and optionally validates that expected field names are present.
17
+ *
18
+ * @flowWeaver nodeType
19
+ * @expression
20
+ * @label ${label}
21
+ * @color cyan
22
+ * @icon dataObject
23
+ * @input text [order:0] - Raw text potentially containing JSON
24
+ * @input schema [order:1] - Expected field names for validation (optional)
25
+ * @output extracted [order:0] - Parsed JSON object (null if extraction failed)
26
+ * @output valid [order:1] - Whether extraction and validation succeeded
27
+ * @output raw [order:2] - The raw JSON string that was found
28
+ */
29
+ function ${funcName}(
30
+ text: string,
31
+ schema?: string[]
32
+ ): {
33
+ extracted: Record<string, unknown> | null;
34
+ valid: boolean;
35
+ raw: string;
36
+ } {
37
+ if (!text || typeof text !== 'string') {
38
+ return { extracted: null, valid: false, raw: '' };
39
+ }
40
+
41
+ // Strip markdown code fences
42
+ let cleaned = text;
43
+ const fenceMatch = cleaned.match(/\\\`\\\`\\\`(?:json)?\\s*([\\s\\S]*?)\\\`\\\`\\\`/);
44
+ if (fenceMatch) {
45
+ cleaned = fenceMatch[1].trim();
46
+ }
47
+
48
+ // Find first JSON object or array via brace/bracket matching
49
+ const startChar = cleaned.indexOf('{') !== -1 && (cleaned.indexOf('[') === -1 || cleaned.indexOf('{') < cleaned.indexOf('['))
50
+ ? '{'
51
+ : '[';
52
+ const endChar = startChar === '{' ? '}' : ']';
53
+ const startIdx = cleaned.indexOf(startChar);
54
+
55
+ if (startIdx === -1) {
56
+ return { extracted: null, valid: false, raw: '' };
57
+ }
58
+
59
+ // Walk forward to find the matching closing brace/bracket
60
+ let depth = 0;
61
+ let inString = false;
62
+ let escape = false;
63
+ let endIdx = -1;
64
+
65
+ for (let i = startIdx; i < cleaned.length; i++) {
66
+ const ch = cleaned[i];
67
+
68
+ if (escape) {
69
+ escape = false;
70
+ continue;
71
+ }
72
+
73
+ if (ch === '\\\\') {
74
+ escape = true;
75
+ continue;
76
+ }
77
+
78
+ if (ch === '"') {
79
+ inString = !inString;
80
+ continue;
81
+ }
82
+
83
+ if (inString) continue;
84
+
85
+ if (ch === startChar) depth++;
86
+ if (ch === endChar) depth--;
87
+
88
+ if (depth === 0) {
89
+ endIdx = i;
90
+ break;
91
+ }
92
+ }
93
+
94
+ if (endIdx === -1) {
95
+ return { extracted: null, valid: false, raw: '' };
96
+ }
97
+
98
+ const raw = cleaned.slice(startIdx, endIdx + 1);
99
+
100
+ try {
101
+ const parsed = JSON.parse(raw);
102
+
103
+ // Validate schema if provided
104
+ if (schema && schema.length > 0 && typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
105
+ const missingFields = schema.filter(field => !(field in parsed));
106
+ if (missingFields.length > 0) {
107
+ return { extracted: parsed, valid: false, raw };
108
+ }
109
+ }
110
+
111
+ return { extracted: parsed, valid: true, raw };
112
+ } catch {
113
+ return { extracted: null, valid: false, raw };
114
+ }
115
+ }
116
+ `.trim();
117
+ },
118
+ };
119
+ //# sourceMappingURL=json-extractor.js.map
@@ -0,0 +1,3 @@
1
+ import type { NodeTemplate } from '../index.js';
2
+ export declare const llmCallNodeTemplate: NodeTemplate;
3
+ //# sourceMappingURL=llm-call.d.ts.map