@flowdrop/flowdrop 1.0.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 (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +252 -0
  3. package/dist/adapters/WorkflowAdapter.d.ts +167 -0
  4. package/dist/adapters/WorkflowAdapter.js +368 -0
  5. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
  6. package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
  7. package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
  8. package/dist/adapters/agentspec/agentAdapter.js +91 -0
  9. package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
  10. package/dist/adapters/agentspec/autoLayout.js +127 -0
  11. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
  12. package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
  13. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
  14. package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
  15. package/dist/adapters/agentspec/index.d.ts +37 -0
  16. package/dist/adapters/agentspec/index.js +39 -0
  17. package/dist/adapters/agentspec/validator.d.ts +34 -0
  18. package/dist/adapters/agentspec/validator.js +169 -0
  19. package/dist/api/enhanced-client.d.ts +183 -0
  20. package/dist/api/enhanced-client.js +430 -0
  21. package/dist/components/App.svelte +981 -0
  22. package/dist/components/App.svelte.d.ts +54 -0
  23. package/dist/components/CanvasBanner.stories.svelte +29 -0
  24. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  25. package/dist/components/CanvasBanner.svelte +57 -0
  26. package/dist/components/CanvasBanner.svelte.d.ts +8 -0
  27. package/dist/components/ConfigForm.svelte +1138 -0
  28. package/dist/components/ConfigForm.svelte.d.ts +44 -0
  29. package/dist/components/ConfigModal.svelte +188 -0
  30. package/dist/components/ConfigModal.svelte.d.ts +13 -0
  31. package/dist/components/ConfigPanel.stories.svelte +47 -0
  32. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  33. package/dist/components/ConfigPanel.svelte +182 -0
  34. package/dist/components/ConfigPanel.svelte.d.ts +32 -0
  35. package/dist/components/ConnectionLine.svelte +32 -0
  36. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  37. package/dist/components/EdgeRefresher.svelte +41 -0
  38. package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
  39. package/dist/components/FlowDropZone.svelte +83 -0
  40. package/dist/components/FlowDropZone.svelte.d.ts +13 -0
  41. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  43. package/dist/components/LoadingSpinner.svelte +36 -0
  44. package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
  45. package/dist/components/Logo.stories.svelte +22 -0
  46. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  47. package/dist/components/Logo.svelte +102 -0
  48. package/dist/components/Logo.svelte.d.ts +26 -0
  49. package/dist/components/LogsSidebar.svelte +563 -0
  50. package/dist/components/LogsSidebar.svelte.d.ts +17 -0
  51. package/dist/components/MarkdownDisplay.stories.svelte +36 -0
  52. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  53. package/dist/components/MarkdownDisplay.svelte +29 -0
  54. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  55. package/dist/components/Navbar.stories.svelte +53 -0
  56. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  57. package/dist/components/Navbar.svelte +726 -0
  58. package/dist/components/Navbar.svelte.d.ts +29 -0
  59. package/dist/components/NodeSidebar.svelte +762 -0
  60. package/dist/components/NodeSidebar.svelte.d.ts +9 -0
  61. package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
  62. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  63. package/dist/components/NodeStatusOverlay.svelte +327 -0
  64. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  65. package/dist/components/PipelineStatus.svelte +314 -0
  66. package/dist/components/PipelineStatus.svelte.d.ts +20 -0
  67. package/dist/components/PortCoordinateTracker.svelte +58 -0
  68. package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
  69. package/dist/components/ReadOnlyDetails.svelte +170 -0
  70. package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
  71. package/dist/components/SchemaForm.stories.svelte +116 -0
  72. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  73. package/dist/components/SchemaForm.svelte +536 -0
  74. package/dist/components/SchemaForm.svelte.d.ts +83 -0
  75. package/dist/components/SettingsModal.svelte +279 -0
  76. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  77. package/dist/components/SettingsPanel.svelte +638 -0
  78. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  79. package/dist/components/StatusIcon.stories.svelte +60 -0
  80. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  81. package/dist/components/StatusIcon.svelte +119 -0
  82. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  83. package/dist/components/StatusLabel.stories.svelte +17 -0
  84. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  85. package/dist/components/StatusLabel.svelte +33 -0
  86. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  87. package/dist/components/ThemeToggle.stories.svelte +25 -0
  88. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  89. package/dist/components/ThemeToggle.svelte +185 -0
  90. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  91. package/dist/components/UniversalNode.svelte +155 -0
  92. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  93. package/dist/components/WorkflowEditor.svelte +1035 -0
  94. package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
  95. package/dist/components/form/FormArray.svelte +1049 -0
  96. package/dist/components/form/FormArray.svelte.d.ts +22 -0
  97. package/dist/components/form/FormAutocomplete.svelte +1009 -0
  98. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  99. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  100. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  101. package/dist/components/form/FormCheckboxGroup.svelte +155 -0
  102. package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
  103. package/dist/components/form/FormCodeEditor.svelte +458 -0
  104. package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
  105. package/dist/components/form/FormField.svelte +417 -0
  106. package/dist/components/form/FormField.svelte.d.ts +29 -0
  107. package/dist/components/form/FormFieldLight.svelte +425 -0
  108. package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
  109. package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
  110. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  111. package/dist/components/form/FormFieldWrapper.svelte +125 -0
  112. package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
  113. package/dist/components/form/FormFieldset.svelte +142 -0
  114. package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
  115. package/dist/components/form/FormMarkdownEditor.svelte +752 -0
  116. package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
  117. package/dist/components/form/FormNumberField.stories.svelte +36 -0
  118. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  119. package/dist/components/form/FormNumberField.svelte +112 -0
  120. package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
  121. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  122. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  123. package/dist/components/form/FormRangeField.svelte +246 -0
  124. package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
  125. package/dist/components/form/FormSelect.stories.svelte +50 -0
  126. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  127. package/dist/components/form/FormSelect.svelte +129 -0
  128. package/dist/components/form/FormSelect.svelte.d.ts +20 -0
  129. package/dist/components/form/FormTemplateEditor.svelte +825 -0
  130. package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
  131. package/dist/components/form/FormTextField.stories.svelte +30 -0
  132. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  133. package/dist/components/form/FormTextField.svelte +91 -0
  134. package/dist/components/form/FormTextField.svelte.d.ts +19 -0
  135. package/dist/components/form/FormTextarea.stories.svelte +34 -0
  136. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  137. package/dist/components/form/FormTextarea.svelte +97 -0
  138. package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
  139. package/dist/components/form/FormToggle.stories.svelte +30 -0
  140. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  141. package/dist/components/form/FormToggle.svelte +126 -0
  142. package/dist/components/form/FormToggle.svelte.d.ts +19 -0
  143. package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
  144. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
  145. package/dist/components/form/index.d.ts +50 -0
  146. package/dist/components/form/index.js +54 -0
  147. package/dist/components/form/templateAutocomplete.d.ts +29 -0
  148. package/dist/components/form/templateAutocomplete.js +254 -0
  149. package/dist/components/form/types.d.ts +485 -0
  150. package/dist/components/form/types.js +73 -0
  151. package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
  152. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  153. package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
  154. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
  155. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
  156. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  157. package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
  158. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
  159. package/dist/components/interrupt/FormPrompt.svelte +236 -0
  160. package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
  161. package/dist/components/interrupt/InterruptBubble.svelte +601 -0
  162. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
  163. package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
  164. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  165. package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
  166. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  167. package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
  168. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  169. package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
  170. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
  171. package/dist/components/interrupt/index.d.ts +13 -0
  172. package/dist/components/interrupt/index.js +15 -0
  173. package/dist/components/layouts/MainLayout.svelte +718 -0
  174. package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
  175. package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
  176. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  177. package/dist/components/nodes/GatewayNode.svelte +591 -0
  178. package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
  179. package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
  180. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  181. package/dist/components/nodes/IdeaNode.svelte +455 -0
  182. package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
  183. package/dist/components/nodes/NotesNode.stories.svelte +76 -0
  184. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  185. package/dist/components/nodes/NotesNode.svelte +378 -0
  186. package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
  187. package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
  188. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  189. package/dist/components/nodes/SimpleNode.svelte +451 -0
  190. package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
  191. package/dist/components/nodes/SquareNode.stories.svelte +82 -0
  192. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  193. package/dist/components/nodes/SquareNode.svelte +407 -0
  194. package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
  195. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  196. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  197. package/dist/components/nodes/TerminalNode.svelte +690 -0
  198. package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
  199. package/dist/components/nodes/ToolNode.stories.svelte +189 -0
  200. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  201. package/dist/components/nodes/ToolNode.svelte +471 -0
  202. package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
  203. package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
  204. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  205. package/dist/components/nodes/WorkflowNode.svelte +571 -0
  206. package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
  207. package/dist/components/playground/ChatPanel.svelte +905 -0
  208. package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
  209. package/dist/components/playground/ExecutionLogs.svelte +488 -0
  210. package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
  211. package/dist/components/playground/InputCollector.svelte +444 -0
  212. package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
  213. package/dist/components/playground/MessageBubble.stories.svelte +62 -0
  214. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  215. package/dist/components/playground/MessageBubble.svelte +633 -0
  216. package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
  217. package/dist/components/playground/Playground.svelte +1075 -0
  218. package/dist/components/playground/Playground.svelte.d.ts +25 -0
  219. package/dist/components/playground/PlaygroundModal.svelte +220 -0
  220. package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
  221. package/dist/components/playground/SessionManager.svelte +538 -0
  222. package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
  223. package/dist/config/agentSpecEndpoints.d.ts +70 -0
  224. package/dist/config/agentSpecEndpoints.js +65 -0
  225. package/dist/config/constants.d.ts +43 -0
  226. package/dist/config/constants.js +31 -0
  227. package/dist/config/defaultCategories.d.ts +7 -0
  228. package/dist/config/defaultCategories.js +126 -0
  229. package/dist/config/defaultPortConfig.d.ts +6 -0
  230. package/dist/config/defaultPortConfig.js +201 -0
  231. package/dist/config/endpoints.d.ts +160 -0
  232. package/dist/config/endpoints.js +146 -0
  233. package/dist/config/runtimeConfig.d.ts +47 -0
  234. package/dist/config/runtimeConfig.js +80 -0
  235. package/dist/core/index.d.ts +75 -0
  236. package/dist/core/index.js +92 -0
  237. package/dist/display/index.d.ts +29 -0
  238. package/dist/display/index.js +36 -0
  239. package/dist/editor/index.d.ts +95 -0
  240. package/dist/editor/index.js +138 -0
  241. package/dist/form/code.d.ts +101 -0
  242. package/dist/form/code.js +168 -0
  243. package/dist/form/fieldRegistry.d.ts +169 -0
  244. package/dist/form/fieldRegistry.js +152 -0
  245. package/dist/form/full.d.ts +56 -0
  246. package/dist/form/full.js +80 -0
  247. package/dist/form/index.d.ts +77 -0
  248. package/dist/form/index.js +91 -0
  249. package/dist/form/markdown.d.ts +69 -0
  250. package/dist/form/markdown.js +103 -0
  251. package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
  252. package/dist/helpers/nodeLayoutHelper.js +19 -0
  253. package/dist/helpers/proximityConnect.d.ts +94 -0
  254. package/dist/helpers/proximityConnect.js +314 -0
  255. package/dist/helpers/workflowEditorHelper.d.ts +183 -0
  256. package/dist/helpers/workflowEditorHelper.js +595 -0
  257. package/dist/index.d.ts +37 -0
  258. package/dist/index.js +64 -0
  259. package/dist/mocks/app-environment.d.ts +8 -0
  260. package/dist/mocks/app-environment.js +16 -0
  261. package/dist/mocks/app-forms.d.ts +2 -0
  262. package/dist/mocks/app-forms.js +22 -0
  263. package/dist/mocks/app-navigation.d.ts +5 -0
  264. package/dist/mocks/app-navigation.js +36 -0
  265. package/dist/mocks/app-stores.d.ts +14 -0
  266. package/dist/mocks/app-stores.js +26 -0
  267. package/dist/playground/index.d.ts +131 -0
  268. package/dist/playground/index.js +172 -0
  269. package/dist/playground/mount.d.ts +203 -0
  270. package/dist/playground/mount.js +235 -0
  271. package/dist/registry/BaseRegistry.d.ts +92 -0
  272. package/dist/registry/BaseRegistry.js +124 -0
  273. package/dist/registry/builtinFormats.d.ts +23 -0
  274. package/dist/registry/builtinFormats.js +70 -0
  275. package/dist/registry/builtinNodes.d.ts +77 -0
  276. package/dist/registry/builtinNodes.js +211 -0
  277. package/dist/registry/index.d.ts +8 -0
  278. package/dist/registry/index.js +12 -0
  279. package/dist/registry/nodeComponentRegistry.d.ts +276 -0
  280. package/dist/registry/nodeComponentRegistry.js +262 -0
  281. package/dist/registry/plugin.d.ts +215 -0
  282. package/dist/registry/plugin.js +249 -0
  283. package/dist/registry/workflowFormatRegistry.d.ts +122 -0
  284. package/dist/registry/workflowFormatRegistry.js +96 -0
  285. package/dist/schema/index.d.ts +23 -0
  286. package/dist/schema/index.js +23 -0
  287. package/dist/schemas/v1/workflow.schema.json +1078 -0
  288. package/dist/services/agentSpecExecutionService.d.ts +106 -0
  289. package/dist/services/agentSpecExecutionService.js +334 -0
  290. package/dist/services/api.d.ts +115 -0
  291. package/dist/services/api.js +214 -0
  292. package/dist/services/apiVariableService.d.ts +114 -0
  293. package/dist/services/apiVariableService.js +338 -0
  294. package/dist/services/autoSaveService.d.ts +112 -0
  295. package/dist/services/autoSaveService.js +227 -0
  296. package/dist/services/categoriesApi.d.ts +14 -0
  297. package/dist/services/categoriesApi.js +49 -0
  298. package/dist/services/draftStorage.d.ts +171 -0
  299. package/dist/services/draftStorage.js +299 -0
  300. package/dist/services/dynamicSchemaService.d.ts +108 -0
  301. package/dist/services/dynamicSchemaService.js +444 -0
  302. package/dist/services/globalSave.d.ts +69 -0
  303. package/dist/services/globalSave.js +248 -0
  304. package/dist/services/historyService.d.ts +208 -0
  305. package/dist/services/historyService.js +321 -0
  306. package/dist/services/interruptService.d.ts +133 -0
  307. package/dist/services/interruptService.js +280 -0
  308. package/dist/services/nodeExecutionService.d.ts +63 -0
  309. package/dist/services/nodeExecutionService.js +266 -0
  310. package/dist/services/playgroundService.d.ts +130 -0
  311. package/dist/services/playgroundService.js +321 -0
  312. package/dist/services/portConfigApi.d.ts +14 -0
  313. package/dist/services/portConfigApi.js +54 -0
  314. package/dist/services/settingsService.d.ts +92 -0
  315. package/dist/services/settingsService.js +196 -0
  316. package/dist/services/toastService.d.ts +156 -0
  317. package/dist/services/toastService.js +265 -0
  318. package/dist/services/variableService.d.ts +141 -0
  319. package/dist/services/variableService.js +463 -0
  320. package/dist/services/workflowStorage.d.ts +37 -0
  321. package/dist/services/workflowStorage.js +116 -0
  322. package/dist/settings/index.d.ts +25 -0
  323. package/dist/settings/index.js +33 -0
  324. package/dist/stores/categoriesStore.svelte.d.ts +32 -0
  325. package/dist/stores/categoriesStore.svelte.js +77 -0
  326. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  327. package/dist/stores/editorStateMachine.svelte.js +132 -0
  328. package/dist/stores/historyStore.svelte.d.ts +136 -0
  329. package/dist/stores/historyStore.svelte.js +207 -0
  330. package/dist/stores/interruptStore.svelte.d.ts +179 -0
  331. package/dist/stores/interruptStore.svelte.js +346 -0
  332. package/dist/stores/playgroundStore.svelte.d.ts +230 -0
  333. package/dist/stores/playgroundStore.svelte.js +515 -0
  334. package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
  335. package/dist/stores/portCoordinateStore.svelte.js +186 -0
  336. package/dist/stores/settingsStore.svelte.d.ts +158 -0
  337. package/dist/stores/settingsStore.svelte.js +544 -0
  338. package/dist/stores/workflowStore.svelte.d.ts +260 -0
  339. package/dist/stores/workflowStore.svelte.js +649 -0
  340. package/dist/stories/CanvasDecorator.svelte +49 -0
  341. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  342. package/dist/stories/NodeDecorator.svelte +73 -0
  343. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  344. package/dist/stories/utils.d.ts +93 -0
  345. package/dist/stories/utils.js +122 -0
  346. package/dist/styles/base.css +1300 -0
  347. package/dist/styles/toast.css +35 -0
  348. package/dist/styles/tokens.css +475 -0
  349. package/dist/svelte-app.d.ts +150 -0
  350. package/dist/svelte-app.js +295 -0
  351. package/dist/types/agentspec.d.ts +318 -0
  352. package/dist/types/agentspec.js +48 -0
  353. package/dist/types/auth.d.ts +263 -0
  354. package/dist/types/auth.js +229 -0
  355. package/dist/types/config.d.ts +151 -0
  356. package/dist/types/config.js +7 -0
  357. package/dist/types/events.d.ts +190 -0
  358. package/dist/types/events.js +30 -0
  359. package/dist/types/index.d.ts +1234 -0
  360. package/dist/types/index.js +27 -0
  361. package/dist/types/interrupt.d.ts +390 -0
  362. package/dist/types/interrupt.js +145 -0
  363. package/dist/types/interruptState.d.ts +211 -0
  364. package/dist/types/interruptState.js +308 -0
  365. package/dist/types/playground.d.ts +351 -0
  366. package/dist/types/playground.js +95 -0
  367. package/dist/types/settings.d.ts +189 -0
  368. package/dist/types/settings.js +97 -0
  369. package/dist/types/uischema.d.ts +144 -0
  370. package/dist/types/uischema.js +51 -0
  371. package/dist/utils/colors.d.ts +288 -0
  372. package/dist/utils/colors.js +548 -0
  373. package/dist/utils/config.d.ts +37 -0
  374. package/dist/utils/config.js +226 -0
  375. package/dist/utils/connections.d.ts +125 -0
  376. package/dist/utils/connections.js +414 -0
  377. package/dist/utils/errors.d.ts +28 -0
  378. package/dist/utils/errors.js +44 -0
  379. package/dist/utils/fetchWithAuth.d.ts +25 -0
  380. package/dist/utils/fetchWithAuth.js +34 -0
  381. package/dist/utils/handleIds.d.ts +35 -0
  382. package/dist/utils/handleIds.js +58 -0
  383. package/dist/utils/handlePositioning.d.ts +31 -0
  384. package/dist/utils/handlePositioning.js +35 -0
  385. package/dist/utils/icons.d.ts +106 -0
  386. package/dist/utils/icons.js +157 -0
  387. package/dist/utils/logger.d.ts +47 -0
  388. package/dist/utils/logger.js +72 -0
  389. package/dist/utils/nodeStatus.d.ts +53 -0
  390. package/dist/utils/nodeStatus.js +183 -0
  391. package/dist/utils/nodeTypes.d.ts +117 -0
  392. package/dist/utils/nodeTypes.js +244 -0
  393. package/dist/utils/nodeWrapper.d.ts +39 -0
  394. package/dist/utils/nodeWrapper.js +62 -0
  395. package/dist/utils/performanceUtils.d.ts +30 -0
  396. package/dist/utils/performanceUtils.js +108 -0
  397. package/dist/utils/sanitize.d.ts +19 -0
  398. package/dist/utils/sanitize.js +31 -0
  399. package/dist/utils/uischema.d.ts +52 -0
  400. package/dist/utils/uischema.js +88 -0
  401. package/dist/utils/validation.d.ts +29 -0
  402. package/dist/utils/validation.js +39 -0
  403. package/package.json +292 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Proximity Connect Helper
3
+ *
4
+ * Provides type-aware proximity connect logic for the workflow editor.
5
+ * When a node is dragged near another node, this helper finds the best
6
+ * compatible port pair and creates a preview/permanent edge.
7
+ */
8
+ import type { WorkflowNode as WorkflowNodeType, WorkflowEdge, NodePort, PortCoordinateMap } from '../types/index.js';
9
+ /** A candidate proximity edge before it is finalized */
10
+ export interface ProximityEdgeCandidate {
11
+ id: string;
12
+ source: string;
13
+ target: string;
14
+ sourceHandle: string;
15
+ targetHandle: string;
16
+ sourcePortDataType: string;
17
+ targetPortDataType: string;
18
+ }
19
+ export declare class ProximityConnectHelper {
20
+ /**
21
+ * Get ALL ports (static + dynamic + gateway branches) for a node.
22
+ */
23
+ static getAllPorts(node: WorkflowNodeType, direction: 'input' | 'output'): NodePort[];
24
+ /**
25
+ * Build handle ID in the standard format.
26
+ */
27
+ static buildHandleId(nodeId: string, direction: 'input' | 'output', portId: string): string;
28
+ /**
29
+ * Calculate center-to-center distance between two nodes.
30
+ */
31
+ static getNodeDistance(nodeA: {
32
+ position: {
33
+ x: number;
34
+ y: number;
35
+ };
36
+ measured?: {
37
+ width?: number;
38
+ height?: number;
39
+ };
40
+ }, nodeB: {
41
+ position: {
42
+ x: number;
43
+ y: number;
44
+ };
45
+ measured?: {
46
+ width?: number;
47
+ height?: number;
48
+ };
49
+ }): number;
50
+ /**
51
+ * Find the single best compatible edge between a dragged node and nearby nodes.
52
+ *
53
+ * Algorithm:
54
+ * 1. Find the closest node within minDistance (edge-to-edge)
55
+ * 2. Check both directions (dragged->nearby and nearby->dragged)
56
+ * 3. Return the first exact-type match, or first compatible match
57
+ * 4. Skip pairs where an edge already exists
58
+ *
59
+ * @returns Array with at most ONE ProximityEdgeCandidate
60
+ */
61
+ static findCompatibleEdges(draggedNode: WorkflowNodeType, allNodes: WorkflowNodeType[], existingEdges: WorkflowEdge[], minDistance: number): ProximityEdgeCandidate[];
62
+ /**
63
+ * Find the single best compatible edge using port-to-port distance.
64
+ *
65
+ * Unlike findCompatibleEdges() which uses node center distance,
66
+ * this method compares actual handle positions from the port coordinate store.
67
+ * This is more accurate for large nodes or nodes with many ports.
68
+ *
69
+ * Algorithm:
70
+ * 1. Partition ports by owner (dragged vs other) and direction (input vs output)
71
+ * 2. Group other-node ports by dataType for O(1) lookup of compatible groups
72
+ * 3. For each dragged port, only iterate compatible dataType groups
73
+ * 4. Return the closest compatible pair (exact type match preferred)
74
+ *
75
+ * @returns Array with at most ONE ProximityEdgeCandidate
76
+ */
77
+ static findCompatibleEdgesByPortCoordinates(draggedNodeId: string, portCoordinates: PortCoordinateMap, existingEdges: WorkflowEdge[], maxDistance: number): ProximityEdgeCandidate[];
78
+ /**
79
+ * Convert candidates to temporary (preview) WorkflowEdge objects with dashed styling.
80
+ */
81
+ static createPreviewEdges(candidates: ProximityEdgeCandidate[]): WorkflowEdge[];
82
+ /**
83
+ * Convert candidates to permanent WorkflowEdge objects.
84
+ */
85
+ static createPermanentEdges(candidates: ProximityEdgeCandidate[]): WorkflowEdge[];
86
+ /**
87
+ * Check if an edge is a temporary proximity preview edge.
88
+ */
89
+ static isProximityPreviewEdge(edge: WorkflowEdge): boolean;
90
+ /**
91
+ * Remove all proximity preview edges from an edge array.
92
+ */
93
+ static removePreviewEdges(edges: WorkflowEdge[]): WorkflowEdge[];
94
+ }
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Proximity Connect Helper
3
+ *
4
+ * Provides type-aware proximity connect logic for the workflow editor.
5
+ * When a node is dragged near another node, this helper finds the best
6
+ * compatible port pair and creates a preview/permanent edge.
7
+ */
8
+ import { dynamicPortToNodePort } from '../types/index.js';
9
+ import { getPortCompatibilityChecker } from '../utils/connections.js';
10
+ import { v4 as uuidv4 } from 'uuid';
11
+ /** CSS class applied to proximity preview edges */
12
+ const PROXIMITY_EDGE_CLASS = 'flowdrop--edge--proximity-preview';
13
+ export class ProximityConnectHelper {
14
+ /**
15
+ * Get ALL ports (static + dynamic + gateway branches) for a node.
16
+ */
17
+ static getAllPorts(node, direction) {
18
+ // Static ports from metadata
19
+ const staticPorts = direction === 'output'
20
+ ? (node.data?.metadata?.outputs ?? [])
21
+ : (node.data?.metadata?.inputs ?? []);
22
+ // Dynamic ports from config
23
+ const dynamicKey = direction === 'output' ? 'dynamicOutputs' : 'dynamicInputs';
24
+ const rawDynamic = node.data?.config?.[dynamicKey] ?? [];
25
+ const dynamicPorts = rawDynamic.map((p) => dynamicPortToNodePort(p, direction));
26
+ // Gateway branches (output only, dataType = 'trigger')
27
+ if (direction === 'output') {
28
+ const branches = node.data?.config?.branches;
29
+ const nodeType = node.data?.metadata?.type || node.type;
30
+ if (nodeType === 'gateway' && branches?.length) {
31
+ const branchPorts = branches
32
+ .filter((b) => !staticPorts.some((sp) => sp.id === b.name))
33
+ .map((b) => ({
34
+ id: b.name,
35
+ name: b.name,
36
+ type: 'output',
37
+ dataType: 'trigger'
38
+ }));
39
+ return [...staticPorts, ...dynamicPorts, ...branchPorts];
40
+ }
41
+ }
42
+ return [...staticPorts, ...dynamicPorts];
43
+ }
44
+ /**
45
+ * Build handle ID in the standard format.
46
+ */
47
+ static buildHandleId(nodeId, direction, portId) {
48
+ return `${nodeId}-${direction}-${portId}`;
49
+ }
50
+ /**
51
+ * Calculate center-to-center distance between two nodes.
52
+ */
53
+ static getNodeDistance(nodeA, nodeB) {
54
+ const aCenterX = nodeA.position.x + (nodeA.measured?.width ?? 0) / 2;
55
+ const aCenterY = nodeA.position.y + (nodeA.measured?.height ?? 0) / 2;
56
+ const bCenterX = nodeB.position.x + (nodeB.measured?.width ?? 0) / 2;
57
+ const bCenterY = nodeB.position.y + (nodeB.measured?.height ?? 0) / 2;
58
+ const dx = aCenterX - bCenterX;
59
+ const dy = aCenterY - bCenterY;
60
+ return Math.sqrt(dx * dx + dy * dy);
61
+ }
62
+ /**
63
+ * Find the single best compatible edge between a dragged node and nearby nodes.
64
+ *
65
+ * Algorithm:
66
+ * 1. Find the closest node within minDistance (edge-to-edge)
67
+ * 2. Check both directions (dragged->nearby and nearby->dragged)
68
+ * 3. Return the first exact-type match, or first compatible match
69
+ * 4. Skip pairs where an edge already exists
70
+ *
71
+ * @returns Array with at most ONE ProximityEdgeCandidate
72
+ */
73
+ static findCompatibleEdges(draggedNode, allNodes, existingEdges, minDistance) {
74
+ const checker = getPortCompatibilityChecker();
75
+ // Build lookup set for O(1) duplicate checks
76
+ const existingEdgeSet = new Set(existingEdges.map((e) => `${e.source}:${e.sourceHandle}->${e.target}:${e.targetHandle}`));
77
+ // Find the closest node within distance
78
+ let closestNode = null;
79
+ let closestDistance = Infinity;
80
+ for (const node of allNodes) {
81
+ if (node.id === draggedNode.id)
82
+ continue;
83
+ const dist = this.getNodeDistance(draggedNode, node);
84
+ if (dist < minDistance && dist < closestDistance) {
85
+ closestDistance = dist;
86
+ closestNode = node;
87
+ }
88
+ }
89
+ if (!closestNode)
90
+ return [];
91
+ const draggedOutputs = this.getAllPorts(draggedNode, 'output');
92
+ const draggedInputs = this.getAllPorts(draggedNode, 'input');
93
+ const nearbyInputs = this.getAllPorts(closestNode, 'input');
94
+ const nearbyOutputs = this.getAllPorts(closestNode, 'output');
95
+ // Collect all compatible pairs, then pick the best one
96
+ let exactMatch = null;
97
+ let compatibleMatch = null;
98
+ // Direction A: dragged (source) -> nearby (target)
99
+ for (const outPort of draggedOutputs) {
100
+ for (const inPort of nearbyInputs) {
101
+ if (!checker.areDataTypesCompatible(outPort.dataType, inPort.dataType))
102
+ continue;
103
+ const sourceHandle = this.buildHandleId(draggedNode.id, 'output', outPort.id);
104
+ const targetHandle = this.buildHandleId(closestNode.id, 'input', inPort.id);
105
+ const edgeKey = `${draggedNode.id}:${sourceHandle}->${closestNode.id}:${targetHandle}`;
106
+ if (existingEdgeSet.has(edgeKey))
107
+ continue;
108
+ const candidate = {
109
+ id: `proximity-${uuidv4()}`,
110
+ source: draggedNode.id,
111
+ target: closestNode.id,
112
+ sourceHandle,
113
+ targetHandle,
114
+ sourcePortDataType: outPort.dataType,
115
+ targetPortDataType: inPort.dataType
116
+ };
117
+ if (outPort.dataType === inPort.dataType) {
118
+ if (!exactMatch)
119
+ exactMatch = candidate;
120
+ }
121
+ else {
122
+ if (!compatibleMatch)
123
+ compatibleMatch = candidate;
124
+ }
125
+ // Early exit if we found an exact match
126
+ if (exactMatch)
127
+ break;
128
+ }
129
+ if (exactMatch)
130
+ break;
131
+ }
132
+ // Direction B: nearby (source) -> dragged (target)
133
+ if (!exactMatch) {
134
+ for (const outPort of nearbyOutputs) {
135
+ for (const inPort of draggedInputs) {
136
+ if (!checker.areDataTypesCompatible(outPort.dataType, inPort.dataType))
137
+ continue;
138
+ const sourceHandle = this.buildHandleId(closestNode.id, 'output', outPort.id);
139
+ const targetHandle = this.buildHandleId(draggedNode.id, 'input', inPort.id);
140
+ const edgeKey = `${closestNode.id}:${sourceHandle}->${draggedNode.id}:${targetHandle}`;
141
+ if (existingEdgeSet.has(edgeKey))
142
+ continue;
143
+ const candidate = {
144
+ id: `proximity-${uuidv4()}`,
145
+ source: closestNode.id,
146
+ target: draggedNode.id,
147
+ sourceHandle,
148
+ targetHandle,
149
+ sourcePortDataType: outPort.dataType,
150
+ targetPortDataType: inPort.dataType
151
+ };
152
+ if (outPort.dataType === inPort.dataType) {
153
+ if (!exactMatch)
154
+ exactMatch = candidate;
155
+ }
156
+ else {
157
+ if (!compatibleMatch)
158
+ compatibleMatch = candidate;
159
+ }
160
+ if (exactMatch)
161
+ break;
162
+ }
163
+ if (exactMatch)
164
+ break;
165
+ }
166
+ }
167
+ const best = exactMatch ?? compatibleMatch;
168
+ return best ? [best] : [];
169
+ }
170
+ /**
171
+ * Find the single best compatible edge using port-to-port distance.
172
+ *
173
+ * Unlike findCompatibleEdges() which uses node center distance,
174
+ * this method compares actual handle positions from the port coordinate store.
175
+ * This is more accurate for large nodes or nodes with many ports.
176
+ *
177
+ * Algorithm:
178
+ * 1. Partition ports by owner (dragged vs other) and direction (input vs output)
179
+ * 2. Group other-node ports by dataType for O(1) lookup of compatible groups
180
+ * 3. For each dragged port, only iterate compatible dataType groups
181
+ * 4. Return the closest compatible pair (exact type match preferred)
182
+ *
183
+ * @returns Array with at most ONE ProximityEdgeCandidate
184
+ */
185
+ static findCompatibleEdgesByPortCoordinates(draggedNodeId, portCoordinates, existingEdges, maxDistance) {
186
+ const checker = getPortCompatibilityChecker();
187
+ // Build lookup set for O(1) duplicate checks
188
+ const existingEdgeSet = new Set(existingEdges.map((e) => `${e.source}:${e.sourceHandle}->${e.target}:${e.targetHandle}`));
189
+ // Partition ports by owner and direction, group other-node ports by dataType
190
+ const draggedOutputs = [];
191
+ const draggedInputs = [];
192
+ const otherInputsByType = new Map();
193
+ const otherOutputsByType = new Map();
194
+ for (const coord of portCoordinates.values()) {
195
+ if (coord.nodeId === draggedNodeId) {
196
+ if (coord.direction === 'output')
197
+ draggedOutputs.push(coord);
198
+ else
199
+ draggedInputs.push(coord);
200
+ }
201
+ else {
202
+ const groupMap = coord.direction === 'input' ? otherInputsByType : otherOutputsByType;
203
+ let group = groupMap.get(coord.dataType);
204
+ if (!group) {
205
+ group = [];
206
+ groupMap.set(coord.dataType, group);
207
+ }
208
+ group.push(coord);
209
+ }
210
+ }
211
+ let bestCandidate = null;
212
+ let bestDistance = Infinity;
213
+ let bestIsExact = false;
214
+ const evaluatePair = (sourceCoord, targetCoord) => {
215
+ // Check for existing edge
216
+ const edgeKey = `${sourceCoord.nodeId}:${sourceCoord.handleId}->${targetCoord.nodeId}:${targetCoord.handleId}`;
217
+ if (existingEdgeSet.has(edgeKey))
218
+ return;
219
+ // Calculate port-to-port distance
220
+ const dx = sourceCoord.x - targetCoord.x;
221
+ const dy = sourceCoord.y - targetCoord.y;
222
+ const dist = Math.sqrt(dx * dx + dy * dy);
223
+ if (dist > maxDistance)
224
+ return;
225
+ const isExact = sourceCoord.dataType === targetCoord.dataType;
226
+ // Prefer exact match, then closest distance
227
+ if ((isExact && !bestIsExact) || (isExact === bestIsExact && dist < bestDistance)) {
228
+ bestCandidate = {
229
+ id: `proximity-${uuidv4()}`,
230
+ source: sourceCoord.nodeId,
231
+ target: targetCoord.nodeId,
232
+ sourceHandle: sourceCoord.handleId,
233
+ targetHandle: targetCoord.handleId,
234
+ sourcePortDataType: sourceCoord.dataType,
235
+ targetPortDataType: targetCoord.dataType
236
+ };
237
+ bestDistance = dist;
238
+ bestIsExact = isExact;
239
+ }
240
+ };
241
+ // Direction A: dragged outputs → other inputs (only compatible types)
242
+ for (const srcPort of draggedOutputs) {
243
+ const compatibleTypes = checker.getCompatibleTypes(srcPort.dataType);
244
+ for (const targetType of compatibleTypes) {
245
+ const targets = otherInputsByType.get(targetType);
246
+ if (!targets)
247
+ continue;
248
+ for (const tgtPort of targets) {
249
+ evaluatePair(srcPort, tgtPort);
250
+ }
251
+ }
252
+ }
253
+ // Direction B: other outputs → dragged inputs (only compatible types)
254
+ for (const tgtPort of draggedInputs) {
255
+ for (const [srcType, sources] of otherOutputsByType) {
256
+ if (!checker.areDataTypesCompatible(srcType, tgtPort.dataType))
257
+ continue;
258
+ for (const srcPort of sources) {
259
+ evaluatePair(srcPort, tgtPort);
260
+ }
261
+ }
262
+ }
263
+ return bestCandidate ? [bestCandidate] : [];
264
+ }
265
+ /**
266
+ * Convert candidates to temporary (preview) WorkflowEdge objects with dashed styling.
267
+ */
268
+ static createPreviewEdges(candidates) {
269
+ return candidates.map((c) => ({
270
+ id: c.id,
271
+ source: c.source,
272
+ target: c.target,
273
+ sourceHandle: c.sourceHandle,
274
+ targetHandle: c.targetHandle,
275
+ class: PROXIMITY_EDGE_CLASS,
276
+ style: 'stroke-dasharray: 5 5; opacity: 0.6;',
277
+ animated: true,
278
+ selectable: false,
279
+ deletable: false,
280
+ data: {
281
+ metadata: {
282
+ edgeType: 'data',
283
+ sourcePortDataType: c.sourcePortDataType,
284
+ isProximityPreview: true
285
+ }
286
+ }
287
+ }));
288
+ }
289
+ /**
290
+ * Convert candidates to permanent WorkflowEdge objects.
291
+ */
292
+ static createPermanentEdges(candidates) {
293
+ return candidates.map((c) => ({
294
+ id: uuidv4(),
295
+ source: c.source,
296
+ target: c.target,
297
+ sourceHandle: c.sourceHandle,
298
+ targetHandle: c.targetHandle
299
+ }));
300
+ }
301
+ /**
302
+ * Check if an edge is a temporary proximity preview edge.
303
+ */
304
+ static isProximityPreviewEdge(edge) {
305
+ return (edge.id.startsWith('proximity-') ||
306
+ edge.data?.metadata?.isProximityPreview === true);
307
+ }
308
+ /**
309
+ * Remove all proximity preview edges from an edge array.
310
+ */
311
+ static removePreviewEdges(edges) {
312
+ return edges.filter((e) => !this.isProximityPreviewEdge(e));
313
+ }
314
+ }
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Workflow Editor Helper
3
+ * Contains business logic for workflow operations
4
+ */
5
+ import type { WorkflowNode as WorkflowNodeType, NodeMetadata, Workflow, WorkflowEdge, NodeExecutionInfo } from '../types/index.js';
6
+ import type { EndpointConfig } from '../config/endpoints.js';
7
+ /**
8
+ * Generate a unique node ID based on node type and existing nodes
9
+ * Format: <node_type>.<number>
10
+ * Example: boolean_gateway.1, calculator.2
11
+ */
12
+ export declare function generateNodeId(nodeTypeId: string, existingNodes: WorkflowNodeType[]): string;
13
+ /**
14
+ * Edge category type for styling purposes
15
+ * - trigger: For control flow connections (dataType: "trigger")
16
+ * - tool: Dashed amber line for tool connections (dataType: "tool")
17
+ * - loopback: Dashed gray line for loop iteration connections (targets loop_back port)
18
+ * - data: Normal gray line for all other data connections
19
+ */
20
+ export type EdgeCategory = 'trigger' | 'tool' | 'loopback' | 'data';
21
+ /**
22
+ * Edge styling configuration based on source port data type
23
+ */
24
+ export declare class EdgeStylingHelper {
25
+ /**
26
+ * Extract the port ID from a handle ID
27
+ * @param handleId - The handle ID string (e.g., "sample-node.1-output-trigger" or "trigger")
28
+ * @returns The port ID (e.g., "trigger") or the handleId itself for short format
29
+ */
30
+ static extractPortIdFromHandle(handleId: string | undefined): string | null;
31
+ /**
32
+ * Check if a port ID matches a dynamic branch in a Gateway node
33
+ * Gateway nodes store branches in config.branches array
34
+ * @param node - The workflow node to check
35
+ * @param portId - The port ID to look up
36
+ * @returns true if the portId matches a gateway branch
37
+ */
38
+ static isGatewayBranch(node: WorkflowNodeType, portId: string): boolean;
39
+ /**
40
+ * Get the data type of a port from a node's metadata
41
+ * Also handles dynamic ports like Gateway branches
42
+ * @param node - The workflow node containing the port
43
+ * @param portId - The port ID to look up
44
+ * @param portType - Whether to look in "inputs" or "outputs"
45
+ * @returns The port's dataType or null if not found
46
+ */
47
+ static getPortDataType(node: WorkflowNodeType, portId: string, portType: 'input' | 'output'): string | null;
48
+ /**
49
+ * Determine the edge category based on source port data type
50
+ * Note: This method does not check for loopback edges.
51
+ * Use getEdgeCategoryWithLoopback() for full edge categorization.
52
+ *
53
+ * @param sourcePortDataType - The data type of the source output port
54
+ * @returns The edge category for styling
55
+ */
56
+ static getEdgeCategory(sourcePortDataType: string | null): EdgeCategory;
57
+ /**
58
+ * Determine the full edge category including loopback detection
59
+ * Loopback edges take precedence over source port data type
60
+ *
61
+ * @param edge - The edge to categorize
62
+ * @param sourcePortDataType - The data type of the source output port
63
+ * @returns The edge category for styling
64
+ */
65
+ static getEdgeCategoryWithLoopback(edge: WorkflowEdge, sourcePortDataType: string | null): EdgeCategory;
66
+ /**
67
+ * Apply custom styling to connection edges based on edge type:
68
+ * - Loopback: Dashed gray line for loop iteration (targets loop_back port)
69
+ * - Trigger ports: Solid black line with arrow
70
+ * - Tool ports: Dashed amber line with arrow
71
+ * - Data ports: Normal gray line with arrow
72
+ */
73
+ static applyConnectionStyling(edge: WorkflowEdge, sourceNode: WorkflowNodeType, targetNode: WorkflowNodeType): void;
74
+ /**
75
+ * Update existing edges with custom styling rules
76
+ */
77
+ static updateEdgeStyles(edges: WorkflowEdge[], nodes: WorkflowNodeType[]): WorkflowEdge[];
78
+ }
79
+ /**
80
+ * Node operations helper
81
+ */
82
+ export declare class NodeOperationsHelper {
83
+ /**
84
+ * Load nodes from API
85
+ */
86
+ static loadNodesFromApi(providedNodes?: NodeMetadata[]): Promise<NodeMetadata[]>;
87
+ /**
88
+ * Load node execution information for all nodes in the workflow
89
+ */
90
+ static loadNodeExecutionInfo(workflow: Workflow | null, pipelineId?: string): Promise<Record<string, NodeExecutionInfo>>;
91
+ /**
92
+ * Create a new node from dropped data
93
+ */
94
+ static createNodeFromDrop(nodeTypeData: string, position: {
95
+ x: number;
96
+ y: number;
97
+ }, existingNodes?: WorkflowNodeType[]): WorkflowNodeType | null;
98
+ }
99
+ /**
100
+ * Workflow operations helper
101
+ */
102
+ export declare class WorkflowOperationsHelper {
103
+ /**
104
+ * Generate workflow metadata for updates
105
+ */
106
+ static generateMetadata(existingMetadata?: Workflow['metadata']): Workflow['metadata'];
107
+ /**
108
+ * Update workflow with new nodes/edges and generate new metadata
109
+ */
110
+ static updateWorkflow(workflow: Workflow, nodes: WorkflowNodeType[], edges: WorkflowEdge[]): Workflow;
111
+ /**
112
+ * Clear workflow (remove all nodes and edges)
113
+ */
114
+ static clearWorkflow(workflow: Workflow): Workflow;
115
+ /**
116
+ * Update node configuration
117
+ */
118
+ static updateNodeConfig(workflow: Workflow, nodeId: string, newConfig: Record<string, unknown>): Workflow;
119
+ /**
120
+ * Add a new node to the workflow
121
+ */
122
+ static addNode(workflow: Workflow, node: WorkflowNodeType): Workflow;
123
+ /**
124
+ * Save workflow to backend
125
+ */
126
+ static saveWorkflow(workflow: Workflow | null): Promise<Workflow | null>;
127
+ /**
128
+ * Export workflow as JSON file
129
+ */
130
+ static exportWorkflow(workflow: Workflow | null): void;
131
+ /**
132
+ * Export workflow as Agent Spec JSON file.
133
+ *
134
+ * Converts the FlowDrop workflow to Agent Spec format and triggers a download.
135
+ * Validates the workflow for Agent Spec compatibility first.
136
+ *
137
+ * @param workflow - The FlowDrop workflow to export
138
+ * @returns Validation result (check .valid before assuming success)
139
+ */
140
+ static exportAsAgentSpec(workflow: Workflow | null): {
141
+ valid: boolean;
142
+ errors: string[];
143
+ warnings: string[];
144
+ };
145
+ /**
146
+ * Import a workflow from an Agent Spec JSON or YAML file.
147
+ *
148
+ * Reads the file, detects format, converts to FlowDrop format,
149
+ * and returns a Workflow ready for the editor.
150
+ *
151
+ * @param file - The file to import (JSON or YAML)
152
+ * @returns Promise resolving to the imported FlowDrop Workflow
153
+ */
154
+ static importFromAgentSpec(file: File): Promise<Workflow>;
155
+ /**
156
+ * Check if workflow has invalid cycles (excludes valid loopback cycles)
157
+ * Valid loopback cycles are used for ForEach node iteration and should not
158
+ * trigger a warning.
159
+ *
160
+ * @param nodes - Array of workflow nodes
161
+ * @param edges - Array of workflow edges
162
+ * @returns True if there are invalid (non-loopback) cycles
163
+ */
164
+ static checkWorkflowCycles(nodes: WorkflowNodeType[], edges: WorkflowEdge[]): boolean;
165
+ /**
166
+ * Check if workflow has any cycles (including valid loopback cycles)
167
+ * Use this when you need to detect ALL cycles regardless of type.
168
+ *
169
+ * @param nodes - Array of workflow nodes
170
+ * @param edges - Array of workflow edges
171
+ * @returns True if any cycle exists
172
+ */
173
+ static checkWorkflowHasAnyCycles(nodes: WorkflowNodeType[], edges: WorkflowEdge[]): boolean;
174
+ }
175
+ /**
176
+ * Configuration helper
177
+ */
178
+ export declare class ConfigurationHelper {
179
+ /**
180
+ * Configure API endpoints
181
+ */
182
+ static configureEndpoints(config: EndpointConfig): void;
183
+ }