@flowdrop/flowdrop 1.5.0 → 1.6.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 (434) hide show
  1. package/README.md +46 -47
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +26 -26
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +122 -133
  6. package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
  7. package/dist/adapters/agentspec/agentAdapter.js +10 -10
  8. package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
  9. package/dist/adapters/agentspec/autoLayout.js +7 -9
  10. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
  11. package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
  12. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
  13. package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
  14. package/dist/adapters/agentspec/index.d.ts +10 -10
  15. package/dist/adapters/agentspec/index.js +6 -6
  16. package/dist/adapters/agentspec/validator.d.ts +2 -2
  17. package/dist/adapters/agentspec/validator.js +20 -22
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +72 -73
  20. package/dist/chat/commandClassifier.js +6 -6
  21. package/dist/chat/index.d.ts +5 -5
  22. package/dist/chat/index.js +4 -4
  23. package/dist/chat/responseParser.d.ts +6 -6
  24. package/dist/chat/responseParser.js +28 -24
  25. package/dist/commands/batch.d.ts +1 -1
  26. package/dist/commands/batch.js +5 -7
  27. package/dist/commands/executor.d.ts +2 -2
  28. package/dist/commands/executor.js +320 -231
  29. package/dist/commands/index.d.ts +6 -6
  30. package/dist/commands/index.js +5 -5
  31. package/dist/commands/parser.d.ts +1 -1
  32. package/dist/commands/parser.js +91 -74
  33. package/dist/commands/positioner.d.ts +2 -2
  34. package/dist/commands/positioner.js +1 -1
  35. package/dist/commands/storeIntegration.svelte.d.ts +2 -2
  36. package/dist/commands/storeIntegration.svelte.js +5 -5
  37. package/dist/commands/types.d.ts +42 -42
  38. package/dist/commands/types.js +2 -2
  39. package/dist/components/App.svelte +240 -294
  40. package/dist/components/App.svelte.d.ts +9 -9
  41. package/dist/components/CanvasBanner.stories.svelte +10 -16
  42. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  43. package/dist/components/CanvasBanner.svelte +2 -2
  44. package/dist/components/CanvasBanner.svelte.d.ts +1 -1
  45. package/dist/components/CanvasController.svelte +3 -4
  46. package/dist/components/ConfigForm.svelte +118 -256
  47. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  48. package/dist/components/ConfigMappingRow.svelte +7 -9
  49. package/dist/components/ConfigMappingRow.svelte.d.ts +1 -1
  50. package/dist/components/ConfigModal.svelte +3 -3
  51. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  52. package/dist/components/ConfigPanel.stories.svelte +19 -19
  53. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  54. package/dist/components/ConfigPanel.svelte +9 -20
  55. package/dist/components/ConfigPanel.svelte.d.ts +1 -1
  56. package/dist/components/ConnectionLine.svelte +4 -4
  57. package/dist/components/EdgeRefresher.svelte +1 -1
  58. package/dist/components/FlowDropEdge.stories.svelte +110 -110
  59. package/dist/components/FlowDropEdge.svelte +9 -9
  60. package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
  61. package/dist/components/FlowDropZone.svelte +6 -9
  62. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  63. package/dist/components/LoadingSpinner.stories.svelte +13 -13
  64. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  65. package/dist/components/LoadingSpinner.svelte +3 -3
  66. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  67. package/dist/components/Logo.stories.svelte +4 -4
  68. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  69. package/dist/components/Logo.svelte +3 -9
  70. package/dist/components/LogsSidebar.svelte +41 -48
  71. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  72. package/dist/components/MarkdownDisplay.stories.svelte +10 -14
  73. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  74. package/dist/components/MarkdownDisplay.svelte +4 -6
  75. package/dist/components/Navbar.stories.svelte +19 -19
  76. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  77. package/dist/components/Navbar.svelte +28 -49
  78. package/dist/components/Navbar.svelte.d.ts +2 -2
  79. package/dist/components/NodeSidebar.svelte +42 -88
  80. package/dist/components/NodeSidebar.svelte.d.ts +1 -1
  81. package/dist/components/NodeStatusOverlay.stories.svelte +19 -31
  82. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  83. package/dist/components/NodeStatusOverlay.svelte +40 -55
  84. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  85. package/dist/components/NodeSwapPicker.svelte +20 -64
  86. package/dist/components/NodeSwapPicker.svelte.d.ts +1 -1
  87. package/dist/components/PipelineStatus.svelte +63 -89
  88. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  89. package/dist/components/PortCoordinateTracker.svelte +5 -7
  90. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  91. package/dist/components/PortMappingRow.svelte +20 -24
  92. package/dist/components/PortMappingRow.svelte.d.ts +2 -2
  93. package/dist/components/ReadOnlyDetails.svelte +1 -1
  94. package/dist/components/SchemaForm.stories.svelte +53 -53
  95. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  96. package/dist/components/SchemaForm.svelte +24 -51
  97. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  98. package/dist/components/SettingsModal.svelte +6 -9
  99. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  100. package/dist/components/SettingsPanel.svelte +138 -158
  101. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  102. package/dist/components/StatusIcon.stories.svelte +16 -29
  103. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  104. package/dist/components/StatusIcon.svelte +19 -19
  105. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  106. package/dist/components/StatusLabel.stories.svelte +8 -8
  107. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  108. package/dist/components/SwapMappingEditor.svelte +35 -56
  109. package/dist/components/SwapMappingEditor.svelte.d.ts +2 -2
  110. package/dist/components/ThemeToggle.stories.svelte +10 -10
  111. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  112. package/dist/components/ThemeToggle.svelte +22 -33
  113. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  114. package/dist/components/UniversalNode.svelte +29 -41
  115. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  116. package/dist/components/WorkflowEditor.svelte +113 -168
  117. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  118. package/dist/components/chat/AIChatPanel.svelte +272 -133
  119. package/dist/components/chat/AIChatPanel.svelte.d.ts +3 -3
  120. package/dist/components/chat/CommandPreview.svelte +74 -24
  121. package/dist/components/chat/CommandPreview.svelte.d.ts +1 -1
  122. package/dist/components/console/CommandConsole.stories.svelte +71 -53
  123. package/dist/components/console/CommandConsole.stories.svelte.d.ts +1 -1
  124. package/dist/components/console/CommandConsole.svelte +39 -35
  125. package/dist/components/console/CommandConsole.svelte.d.ts +2 -2
  126. package/dist/components/console/ConsoleAutocomplete.svelte +6 -3
  127. package/dist/components/console/ConsoleInput.svelte +148 -89
  128. package/dist/components/console/ConsoleInput.svelte.d.ts +1 -1
  129. package/dist/components/console/ConsoleOutput.svelte +5 -10
  130. package/dist/components/console/ConsoleOutput.svelte.d.ts +1 -1
  131. package/dist/components/console/formatters.d.ts +1 -1
  132. package/dist/components/console/formatters.js +27 -29
  133. package/dist/components/form/FormArray.svelte +75 -132
  134. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  135. package/dist/components/form/FormAutocomplete.svelte +65 -108
  136. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  137. package/dist/components/form/FormCheckboxGroup.stories.svelte +13 -16
  138. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  139. package/dist/components/form/FormCheckboxGroup.svelte +2 -2
  140. package/dist/components/form/FormCodeEditor.svelte +42 -56
  141. package/dist/components/form/FormField.svelte +79 -90
  142. package/dist/components/form/FormField.svelte.d.ts +2 -2
  143. package/dist/components/form/FormFieldLight.svelte +72 -88
  144. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  145. package/dist/components/form/FormFieldWrapper.stories.svelte +14 -14
  146. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  147. package/dist/components/form/FormFieldWrapper.svelte +2 -9
  148. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  149. package/dist/components/form/FormFieldset.svelte +3 -3
  150. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  151. package/dist/components/form/FormMarkdownEditor.svelte +123 -156
  152. package/dist/components/form/FormNumberField.stories.svelte +18 -18
  153. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  154. package/dist/components/form/FormNumberField.svelte +6 -6
  155. package/dist/components/form/FormRangeField.stories.svelte +13 -13
  156. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  157. package/dist/components/form/FormRangeField.svelte +4 -12
  158. package/dist/components/form/FormSelect.stories.svelte +21 -21
  159. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  160. package/dist/components/form/FormSelect.svelte +5 -5
  161. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  162. package/dist/components/form/FormTemplateEditor.svelte +126 -175
  163. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  164. package/dist/components/form/FormTextField.stories.svelte +17 -23
  165. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  166. package/dist/components/form/FormTextField.svelte +4 -4
  167. package/dist/components/form/FormTextarea.stories.svelte +18 -21
  168. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  169. package/dist/components/form/FormTextarea.svelte +4 -4
  170. package/dist/components/form/FormToggle.stories.svelte +13 -16
  171. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  172. package/dist/components/form/FormToggle.svelte +3 -3
  173. package/dist/components/form/FormUISchemaRenderer.svelte +12 -19
  174. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  175. package/dist/components/form/index.d.ts +19 -19
  176. package/dist/components/form/index.js +18 -18
  177. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  178. package/dist/components/form/templateAutocomplete.js +55 -64
  179. package/dist/components/form/types.d.ts +6 -6
  180. package/dist/components/form/types.js +4 -9
  181. package/dist/components/icons/AlertCircleIcon.svelte +1 -6
  182. package/dist/components/icons/CogIcon.svelte +1 -6
  183. package/dist/components/interrupt/ChoicePrompt.stories.svelte +27 -27
  184. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  185. package/dist/components/interrupt/ChoicePrompt.svelte +17 -41
  186. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  187. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +17 -17
  188. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  189. package/dist/components/interrupt/ConfirmationPrompt.svelte +10 -16
  190. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  191. package/dist/components/interrupt/FormPrompt.svelte +10 -15
  192. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  193. package/dist/components/interrupt/InterruptBubble.svelte +87 -121
  194. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  195. package/dist/components/interrupt/ReviewPrompt.stories.svelte +37 -37
  196. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  197. package/dist/components/interrupt/ReviewPrompt.svelte +55 -75
  198. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  199. package/dist/components/interrupt/TextInputPrompt.stories.svelte +16 -17
  200. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  201. package/dist/components/interrupt/TextInputPrompt.svelte +13 -18
  202. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  203. package/dist/components/interrupt/index.d.ts +6 -6
  204. package/dist/components/interrupt/index.js +6 -6
  205. package/dist/components/layouts/MainLayout.svelte +46 -84
  206. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  207. package/dist/components/nodes/GatewayNode.stories.svelte +64 -65
  208. package/dist/components/nodes/GatewayNode.svelte +37 -70
  209. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  210. package/dist/components/nodes/IdeaNode.stories.svelte +25 -26
  211. package/dist/components/nodes/IdeaNode.svelte +22 -36
  212. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  213. package/dist/components/nodes/NotesNode.stories.svelte +37 -38
  214. package/dist/components/nodes/NotesNode.svelte +28 -39
  215. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  216. package/dist/components/nodes/SimpleNode.stories.svelte +137 -138
  217. package/dist/components/nodes/SimpleNode.svelte +44 -74
  218. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  219. package/dist/components/nodes/SquareNode.stories.svelte +75 -75
  220. package/dist/components/nodes/SquareNode.svelte +42 -68
  221. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  222. package/dist/components/nodes/TerminalNode.stories.svelte +10 -10
  223. package/dist/components/nodes/TerminalNode.svelte +74 -112
  224. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  225. package/dist/components/nodes/ToolNode.stories.svelte +115 -116
  226. package/dist/components/nodes/ToolNode.svelte +31 -64
  227. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  228. package/dist/components/nodes/WorkflowNode.stories.svelte +84 -89
  229. package/dist/components/nodes/WorkflowNode.svelte +50 -103
  230. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  231. package/dist/components/playground/ChatPanel.svelte +47 -103
  232. package/dist/components/playground/ExecutionLogs.svelte +45 -68
  233. package/dist/components/playground/InputCollector.svelte +32 -51
  234. package/dist/components/playground/MessageBubble.stories.svelte +25 -25
  235. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  236. package/dist/components/playground/MessageBubble.svelte +54 -70
  237. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  238. package/dist/components/playground/Playground.svelte +60 -91
  239. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  240. package/dist/components/playground/PlaygroundModal.svelte +8 -12
  241. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  242. package/dist/components/playground/SessionManager.svelte +34 -40
  243. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  244. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  245. package/dist/config/agentSpecEndpoints.js +20 -20
  246. package/dist/config/constants.js +2 -2
  247. package/dist/config/defaultCategories.d.ts +1 -1
  248. package/dist/config/defaultCategories.js +86 -86
  249. package/dist/config/defaultPortConfig.d.ts +1 -1
  250. package/dist/config/defaultPortConfig.js +144 -144
  251. package/dist/config/endpoints.d.ts +4 -4
  252. package/dist/config/endpoints.js +68 -68
  253. package/dist/config/runtimeConfig.d.ts +2 -2
  254. package/dist/config/runtimeConfig.js +8 -8
  255. package/dist/core/index.d.ts +68 -68
  256. package/dist/core/index.js +38 -38
  257. package/dist/display/index.d.ts +2 -2
  258. package/dist/display/index.js +2 -2
  259. package/dist/editor/index.d.ts +64 -64
  260. package/dist/editor/index.js +54 -54
  261. package/dist/form/code.d.ts +5 -5
  262. package/dist/form/code.js +14 -14
  263. package/dist/form/fieldRegistry.d.ts +3 -3
  264. package/dist/form/fieldRegistry.js +9 -11
  265. package/dist/form/full.d.ts +8 -8
  266. package/dist/form/full.js +9 -9
  267. package/dist/form/index.d.ts +18 -18
  268. package/dist/form/index.js +16 -16
  269. package/dist/form/markdown.d.ts +4 -4
  270. package/dist/form/markdown.js +8 -8
  271. package/dist/helpers/proximityConnect.d.ts +3 -3
  272. package/dist/helpers/proximityConnect.js +32 -34
  273. package/dist/helpers/workflowEditorHelper.d.ts +6 -6
  274. package/dist/helpers/workflowEditorHelper.js +64 -68
  275. package/dist/index.d.ts +6 -6
  276. package/dist/index.js +6 -6
  277. package/dist/mocks/app-environment.js +2 -2
  278. package/dist/mocks/app-forms.js +1 -1
  279. package/dist/mocks/app-navigation.js +2 -2
  280. package/dist/mocks/app-stores.js +3 -3
  281. package/dist/playground/index.d.ts +19 -19
  282. package/dist/playground/index.js +16 -16
  283. package/dist/playground/mount.d.ts +3 -3
  284. package/dist/playground/mount.js +24 -24
  285. package/dist/registry/builtinFormats.js +13 -13
  286. package/dist/registry/builtinNodes.d.ts +2 -2
  287. package/dist/registry/builtinNodes.js +77 -77
  288. package/dist/registry/index.d.ts +4 -4
  289. package/dist/registry/index.js +4 -4
  290. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  291. package/dist/registry/nodeComponentRegistry.js +9 -11
  292. package/dist/registry/plugin.d.ts +2 -2
  293. package/dist/registry/plugin.js +11 -11
  294. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  295. package/dist/registry/workflowFormatRegistry.js +2 -2
  296. package/dist/schema/index.d.ts +1 -1
  297. package/dist/schema/index.js +2 -2
  298. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  299. package/dist/services/agentSpecExecutionService.js +55 -56
  300. package/dist/services/api.d.ts +2 -2
  301. package/dist/services/api.js +37 -37
  302. package/dist/services/apiVariableService.d.ts +1 -1
  303. package/dist/services/apiVariableService.js +34 -41
  304. package/dist/services/autoSaveService.js +8 -8
  305. package/dist/services/categoriesApi.d.ts +2 -2
  306. package/dist/services/categoriesApi.js +8 -8
  307. package/dist/services/chatService.d.ts +1 -1
  308. package/dist/services/chatService.js +18 -18
  309. package/dist/services/draftStorage.d.ts +1 -1
  310. package/dist/services/draftStorage.js +11 -11
  311. package/dist/services/dynamicSchemaService.d.ts +1 -1
  312. package/dist/services/dynamicSchemaService.js +39 -41
  313. package/dist/services/globalSave.d.ts +2 -2
  314. package/dist/services/globalSave.js +38 -41
  315. package/dist/services/historyService.d.ts +1 -1
  316. package/dist/services/historyService.js +10 -10
  317. package/dist/services/interruptService.d.ts +1 -1
  318. package/dist/services/interruptService.js +29 -35
  319. package/dist/services/nodeExecutionService.d.ts +1 -1
  320. package/dist/services/nodeExecutionService.js +44 -45
  321. package/dist/services/playgroundService.d.ts +1 -1
  322. package/dist/services/playgroundService.js +29 -29
  323. package/dist/services/portConfigApi.d.ts +2 -2
  324. package/dist/services/portConfigApi.js +8 -8
  325. package/dist/services/settingsService.d.ts +2 -2
  326. package/dist/services/settingsService.js +19 -25
  327. package/dist/services/toastService.d.ts +4 -4
  328. package/dist/services/toastService.js +33 -33
  329. package/dist/services/variableService.d.ts +1 -1
  330. package/dist/services/variableService.js +36 -36
  331. package/dist/services/workflowStorage.d.ts +2 -2
  332. package/dist/services/workflowStorage.js +13 -13
  333. package/dist/settings/index.d.ts +7 -7
  334. package/dist/settings/index.js +6 -6
  335. package/dist/skins/default.d.ts +1 -1
  336. package/dist/skins/default.js +1 -1
  337. package/dist/skins/index.d.ts +3 -3
  338. package/dist/skins/index.js +7 -7
  339. package/dist/skins/slate.d.ts +1 -1
  340. package/dist/skins/slate.js +69 -69
  341. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  342. package/dist/stores/categoriesStore.svelte.js +5 -5
  343. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  344. package/dist/stores/editorStateMachine.svelte.js +34 -34
  345. package/dist/stores/historyStore.svelte.d.ts +4 -4
  346. package/dist/stores/historyStore.svelte.js +4 -4
  347. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  348. package/dist/stores/interruptStore.svelte.js +21 -21
  349. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  350. package/dist/stores/playgroundStore.svelte.js +18 -21
  351. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  352. package/dist/stores/portCoordinateStore.svelte.js +10 -13
  353. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  354. package/dist/stores/settingsStore.svelte.js +57 -62
  355. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  356. package/dist/stores/workflowStore.svelte.js +46 -47
  357. package/dist/stories/CanvasDecorator.svelte +7 -10
  358. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  359. package/dist/stories/EdgeDecorator.svelte +28 -31
  360. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  361. package/dist/stories/NodeDecorator.svelte +14 -20
  362. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  363. package/dist/stories/utils.d.ts +2 -2
  364. package/dist/stories/utils.js +89 -93
  365. package/dist/styles/base.css +16 -50
  366. package/dist/styles/tokens.css +10 -28
  367. package/dist/svelte-app.d.ts +10 -10
  368. package/dist/svelte-app.js +39 -39
  369. package/dist/themes/default.d.ts +1 -1
  370. package/dist/themes/default.js +4 -4
  371. package/dist/themes/index.d.ts +3 -3
  372. package/dist/themes/index.js +11 -11
  373. package/dist/themes/minimal.d.ts +1 -1
  374. package/dist/themes/minimal.js +5 -5
  375. package/dist/types/agentspec.d.ts +18 -18
  376. package/dist/types/agentspec.js +2 -2
  377. package/dist/types/auth.d.ts +1 -1
  378. package/dist/types/auth.js +6 -6
  379. package/dist/types/chat.d.ts +2 -2
  380. package/dist/types/config.d.ts +6 -6
  381. package/dist/types/events.d.ts +3 -3
  382. package/dist/types/events.js +2 -2
  383. package/dist/types/index.d.ts +32 -32
  384. package/dist/types/index.js +6 -6
  385. package/dist/types/interrupt.d.ts +6 -6
  386. package/dist/types/interrupt.js +21 -21
  387. package/dist/types/interruptState.d.ts +12 -12
  388. package/dist/types/interruptState.js +66 -66
  389. package/dist/types/playground.d.ts +7 -7
  390. package/dist/types/playground.js +14 -14
  391. package/dist/types/settings.d.ts +7 -5
  392. package/dist/types/settings.js +19 -24
  393. package/dist/types/skin.d.ts +1 -1
  394. package/dist/types/theme.d.ts +2 -2
  395. package/dist/types/uischema.d.ts +4 -4
  396. package/dist/types/uischema.js +3 -3
  397. package/dist/utils/colors.d.ts +1 -1
  398. package/dist/utils/colors.js +95 -97
  399. package/dist/utils/config.d.ts +2 -2
  400. package/dist/utils/config.js +48 -48
  401. package/dist/utils/connections.d.ts +2 -2
  402. package/dist/utils/connections.js +15 -15
  403. package/dist/utils/edgeStyling.d.ts +2 -2
  404. package/dist/utils/edgeStyling.js +36 -39
  405. package/dist/utils/errors.js +3 -3
  406. package/dist/utils/fetchWithAuth.d.ts +1 -1
  407. package/dist/utils/fetchWithAuth.js +2 -2
  408. package/dist/utils/handleIds.d.ts +2 -2
  409. package/dist/utils/handleIds.js +8 -8
  410. package/dist/utils/handlePositioning.d.ts +1 -1
  411. package/dist/utils/handlePositioning.js +2 -2
  412. package/dist/utils/icons.d.ts +1 -1
  413. package/dist/utils/icons.js +74 -74
  414. package/dist/utils/logger.d.ts +1 -1
  415. package/dist/utils/logger.js +7 -7
  416. package/dist/utils/nodeIds.d.ts +1 -1
  417. package/dist/utils/nodeIds.js +1 -1
  418. package/dist/utils/nodeStatus.d.ts +1 -1
  419. package/dist/utils/nodeStatus.js +48 -48
  420. package/dist/utils/nodeSwap.d.ts +9 -9
  421. package/dist/utils/nodeSwap.js +52 -58
  422. package/dist/utils/nodeTypes.d.ts +1 -1
  423. package/dist/utils/nodeTypes.js +20 -21
  424. package/dist/utils/nodeWrapper.d.ts +7 -7
  425. package/dist/utils/nodeWrapper.js +19 -21
  426. package/dist/utils/performanceUtils.d.ts +1 -1
  427. package/dist/utils/performanceUtils.js +1 -2
  428. package/dist/utils/portUtils.d.ts +2 -2
  429. package/dist/utils/portUtils.js +1 -1
  430. package/dist/utils/sanitize.js +1 -1
  431. package/dist/utils/uischema.d.ts +2 -2
  432. package/dist/utils/uischema.js +8 -8
  433. package/dist/utils/validation.js +8 -8
  434. package/package.json +7 -11
@@ -6,11 +6,11 @@
6
6
  *
7
7
  * @module services/draftStorage
8
8
  */
9
- import { logger } from "../utils/logger.js";
9
+ import { logger } from '../utils/logger.js';
10
10
  /**
11
11
  * Default storage key prefix
12
12
  */
13
- const STORAGE_KEY_PREFIX = "flowdrop:draft";
13
+ const STORAGE_KEY_PREFIX = 'flowdrop:draft';
14
14
  /**
15
15
  * Generate a storage key for a workflow
16
16
  *
@@ -44,15 +44,15 @@ export function saveDraft(workflow, storageKey) {
44
44
  metadata: {
45
45
  savedAt: new Date().toISOString(),
46
46
  workflowId: workflow.id,
47
- workflowName: workflow.name,
48
- },
47
+ workflowName: workflow.name
48
+ }
49
49
  };
50
50
  localStorage.setItem(storageKey, JSON.stringify(draft));
51
51
  return true;
52
52
  }
53
53
  catch (error) {
54
54
  // localStorage might be full or disabled
55
- logger.warn("Failed to save draft to localStorage:", error);
55
+ logger.warn('Failed to save draft to localStorage:', error);
56
56
  return false;
57
57
  }
58
58
  }
@@ -71,13 +71,13 @@ export function loadDraft(storageKey) {
71
71
  const draft = JSON.parse(stored);
72
72
  // Validate the draft structure
73
73
  if (!draft.workflow || !draft.metadata) {
74
- logger.warn("Invalid draft structure in localStorage");
74
+ logger.warn('Invalid draft structure in localStorage');
75
75
  return null;
76
76
  }
77
77
  return draft;
78
78
  }
79
79
  catch (error) {
80
- logger.warn("Failed to load draft from localStorage:", error);
80
+ logger.warn('Failed to load draft from localStorage:', error);
81
81
  return null;
82
82
  }
83
83
  }
@@ -91,7 +91,7 @@ export function deleteDraft(storageKey) {
91
91
  localStorage.removeItem(storageKey);
92
92
  }
93
93
  catch (error) {
94
- logger.warn("Failed to delete draft from localStorage:", error);
94
+ logger.warn('Failed to delete draft from localStorage:', error);
95
95
  }
96
96
  }
97
97
  /**
@@ -272,15 +272,15 @@ export class DraftAutoSaveManager {
272
272
  nodes: workflow.nodes.map((n) => ({
273
273
  id: n.id,
274
274
  position: n.position,
275
- data: n.data,
275
+ data: n.data
276
276
  })),
277
277
  edges: workflow.edges.map((e) => ({
278
278
  id: e.id,
279
279
  source: e.source,
280
280
  target: e.target,
281
281
  sourceHandle: e.sourceHandle,
282
- targetHandle: e.targetHandle,
283
- })),
282
+ targetHandle: e.targetHandle
283
+ }))
284
284
  };
285
285
  return JSON.stringify(toHash);
286
286
  }
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @module services/dynamicSchemaService
7
7
  */
8
- import type { ConfigSchema, DynamicSchemaEndpoint, ExternalEditLink, ConfigEditOptions, WorkflowNode } from "../types/index.js";
8
+ import type { ConfigSchema, DynamicSchemaEndpoint, ExternalEditLink, ConfigEditOptions, WorkflowNode } from '../types/index.js';
9
9
  /**
10
10
  * Result of a dynamic schema fetch operation
11
11
  */
@@ -5,8 +5,8 @@
5
5
  *
6
6
  * @module services/dynamicSchemaService
7
7
  */
8
- import { getEndpointConfig } from "./api.js";
9
- import { DEFAULT_CACHE_TTL_MS } from "../config/constants.js";
8
+ import { getEndpointConfig } from './api.js';
9
+ import { DEFAULT_CACHE_TTL_MS } from '../config/constants.js';
10
10
  /**
11
11
  * Schema cache with TTL support
12
12
  * Key format: `{nodeTypeId}:{instanceId}` or `{nodeTypeId}` for type-level caching
@@ -30,13 +30,13 @@ const DEFAULT_CACHE_TTL = DEFAULT_CACHE_TTL_MS;
30
30
  * ```
31
31
  */
32
32
  function resolveVariablePath(context, path) {
33
- const parts = path.split(".");
33
+ const parts = path.split('.');
34
34
  let current = context;
35
35
  for (const part of parts) {
36
36
  if (current === null || current === undefined) {
37
37
  return undefined;
38
38
  }
39
- if (typeof current === "object" && part in current) {
39
+ if (typeof current === 'object' && part in current) {
40
40
  current = current[part];
41
41
  }
42
42
  else {
@@ -77,7 +77,7 @@ function resolveTemplate(template, parameterMapping, context) {
77
77
  const value = resolveVariablePath(context, contextPath);
78
78
  if (value !== undefined) {
79
79
  // Use global regex to replace all occurrences
80
- const regex = new RegExp(`\\{${variableName}\\}`, "g");
80
+ const regex = new RegExp(`\\{${variableName}\\}`, 'g');
81
81
  resolved = resolved.replace(regex, encodeURIComponent(value));
82
82
  }
83
83
  }
@@ -145,7 +145,7 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
145
145
  metadata: node.data.metadata,
146
146
  config: node.data.config,
147
147
  extensions: node.data.extensions,
148
- workflowId,
148
+ workflowId
149
149
  };
150
150
  // Generate cache key
151
151
  const cacheKey = generateCacheKey(endpoint, context);
@@ -156,41 +156,39 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
156
156
  return {
157
157
  success: true,
158
158
  schema: cached.schema,
159
- fromCache: true,
159
+ fromCache: true
160
160
  };
161
161
  }
162
162
  }
163
163
  // Resolve the URL with template variables
164
164
  let url = resolveTemplate(endpoint.url, endpoint.parameterMapping, context);
165
165
  // If URL is relative, try to prepend base URL from endpoint config
166
- if (url.startsWith("/")) {
166
+ if (url.startsWith('/')) {
167
167
  const currentConfig = getEndpointConfig();
168
168
  if (currentConfig?.baseUrl) {
169
169
  // Remove trailing slash from base URL and leading slash from relative URL
170
- const baseUrl = currentConfig.baseUrl.replace(/\/$/, "");
170
+ const baseUrl = currentConfig.baseUrl.replace(/\/$/, '');
171
171
  url = `${baseUrl}${url}`;
172
172
  }
173
173
  }
174
174
  // Prepare request options
175
- const method = endpoint.method ?? "GET";
175
+ const method = endpoint.method ?? 'GET';
176
176
  const timeout = endpoint.timeout ?? 10000;
177
177
  const headers = {
178
- Accept: "application/json",
179
- "Content-Type": "application/json",
180
- ...endpoint.headers,
178
+ Accept: 'application/json',
179
+ 'Content-Type': 'application/json',
180
+ ...endpoint.headers
181
181
  };
182
182
  // Add auth headers from endpoint config if available
183
183
  const currentConfig = getEndpointConfig();
184
184
  if (currentConfig?.auth) {
185
- if (currentConfig.auth.type === "bearer" && currentConfig.auth.token) {
186
- headers["Authorization"] = `Bearer ${currentConfig.auth.token}`;
185
+ if (currentConfig.auth.type === 'bearer' && currentConfig.auth.token) {
186
+ headers['Authorization'] = `Bearer ${currentConfig.auth.token}`;
187
187
  }
188
- else if (currentConfig.auth.type === "api_key" &&
189
- currentConfig.auth.apiKey) {
190
- headers["X-API-Key"] = currentConfig.auth.apiKey;
188
+ else if (currentConfig.auth.type === 'api_key' && currentConfig.auth.apiKey) {
189
+ headers['X-API-Key'] = currentConfig.auth.apiKey;
191
190
  }
192
- else if (currentConfig.auth.type === "custom" &&
193
- currentConfig.auth.headers) {
191
+ else if (currentConfig.auth.type === 'custom' && currentConfig.auth.headers) {
194
192
  Object.assign(headers, currentConfig.auth.headers);
195
193
  }
196
194
  }
@@ -198,14 +196,14 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
198
196
  const fetchOptions = {
199
197
  method,
200
198
  headers,
201
- signal: AbortSignal.timeout(timeout),
199
+ signal: AbortSignal.timeout(timeout)
202
200
  };
203
201
  // Add body for non-GET requests
204
- if (method !== "GET" && endpoint.body) {
202
+ if (method !== 'GET' && endpoint.body) {
205
203
  // Resolve any template variables in the body
206
204
  const resolvedBody = {};
207
205
  for (const [key, value] of Object.entries(endpoint.body)) {
208
- if (typeof value === "string") {
206
+ if (typeof value === 'string') {
209
207
  resolvedBody[key] = resolveTemplate(value, endpoint.parameterMapping, context);
210
208
  }
211
209
  else {
@@ -220,7 +218,7 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
220
218
  const errorText = await response.text();
221
219
  return {
222
220
  success: false,
223
- error: `HTTP ${response.status}: ${errorText || response.statusText}`,
221
+ error: `HTTP ${response.status}: ${errorText || response.statusText}`
224
222
  };
225
223
  }
226
224
  const data = await response.json();
@@ -229,26 +227,26 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
229
227
  // 2. Wrapped in { data: ConfigSchema } or { schema: ConfigSchema }
230
228
  // 3. Wrapped in { success: true, data: ConfigSchema }
231
229
  let schema;
232
- if (data.type === "object" && data.properties) {
230
+ if (data.type === 'object' && data.properties) {
233
231
  // Direct ConfigSchema
234
232
  schema = data;
235
233
  }
236
- else if (data.data?.type === "object" && data.data?.properties) {
234
+ else if (data.data?.type === 'object' && data.data?.properties) {
237
235
  // Wrapped in { data: ... }
238
236
  schema = data.data;
239
237
  }
240
- else if (data.schema?.type === "object" && data.schema?.properties) {
238
+ else if (data.schema?.type === 'object' && data.schema?.properties) {
241
239
  // Wrapped in { schema: ... }
242
240
  schema = data.schema;
243
241
  }
244
- else if (data.success && data.data?.type === "object") {
242
+ else if (data.success && data.data?.type === 'object') {
245
243
  // Wrapped in { success: true, data: ... }
246
244
  schema = data.data;
247
245
  }
248
246
  if (!schema) {
249
247
  return {
250
248
  success: false,
251
- error: "Invalid schema format received from endpoint",
249
+ error: 'Invalid schema format received from endpoint'
252
250
  };
253
251
  }
254
252
  // Cache the schema (if caching is enabled)
@@ -256,32 +254,32 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
256
254
  schemaCache.set(cacheKey, {
257
255
  schema,
258
256
  cachedAt: Date.now(),
259
- cacheKey,
257
+ cacheKey
260
258
  });
261
259
  }
262
260
  return {
263
261
  success: true,
264
262
  schema,
265
- fromCache: false,
263
+ fromCache: false
266
264
  };
267
265
  }
268
266
  catch (error) {
269
267
  // Handle specific error types
270
268
  if (error instanceof Error) {
271
- if (error.name === "AbortError" || error.name === "TimeoutError") {
269
+ if (error.name === 'AbortError' || error.name === 'TimeoutError') {
272
270
  return {
273
271
  success: false,
274
- error: `Request timed out after ${timeout}ms`,
272
+ error: `Request timed out after ${timeout}ms`
275
273
  };
276
274
  }
277
275
  return {
278
276
  success: false,
279
- error: error.message,
277
+ error: error.message
280
278
  };
281
279
  }
282
280
  return {
283
281
  success: false,
284
- error: "Unknown error occurred while fetching schema",
282
+ error: 'Unknown error occurred while fetching schema'
285
283
  };
286
284
  }
287
285
  }
@@ -313,13 +311,13 @@ export function resolveExternalEditUrl(link, node, workflowId, callbackUrl) {
313
311
  metadata: node.data.metadata,
314
312
  config: node.data.config,
315
313
  extensions: node.data.extensions,
316
- workflowId,
314
+ workflowId
317
315
  };
318
316
  // Resolve the URL with template variables
319
317
  let url = resolveTemplate(link.url, link.parameterMapping, context);
320
318
  // Append callback URL if configured
321
319
  if (callbackUrl && link.callbackUrlParam) {
322
- const separator = url.includes("?") ? "&" : "?";
320
+ const separator = url.includes('?') ? '&' : '?';
323
321
  url = `${url}${separator}${link.callbackUrlParam}=${encodeURIComponent(callbackUrl)}`;
324
322
  }
325
323
  return url;
@@ -353,16 +351,16 @@ export function getEffectiveConfigEditOptions(node) {
353
351
  externalEditLink: (instanceConfig.externalEditLink ?? typeConfig.externalEditLink)
354
352
  ? {
355
353
  ...(typeConfig.externalEditLink ?? {}),
356
- ...(instanceConfig.externalEditLink ?? {}),
354
+ ...(instanceConfig.externalEditLink ?? {})
357
355
  }
358
356
  : undefined,
359
357
  // Deep merge dynamic schema
360
358
  dynamicSchema: (instanceConfig.dynamicSchema ?? typeConfig.dynamicSchema)
361
359
  ? {
362
360
  ...(typeConfig.dynamicSchema ?? {}),
363
- ...(instanceConfig.dynamicSchema ?? {}),
361
+ ...(instanceConfig.dynamicSchema ?? {})
364
362
  }
365
- : undefined,
363
+ : undefined
366
364
  };
367
365
  }
368
366
  /**
@@ -395,7 +393,7 @@ export function invalidateSchemaCache(node, endpoint) {
395
393
  type: node.type,
396
394
  metadata: node.data.metadata,
397
395
  config: node.data.config,
398
- extensions: node.data.extensions,
396
+ extensions: node.data.extensions
399
397
  };
400
398
  const cacheKey = generateCacheKey(endpoint, context);
401
399
  schemaCache.delete(cacheKey);
@@ -7,8 +7,8 @@
7
7
  * reimplementing the logic, ensuring "blur active element" flushing and metadata
8
8
  * construction happen in exactly one place.
9
9
  */
10
- import type { Workflow } from "../types/index.js";
11
- import type { FlowDropEventHandlers, FlowDropFeatures } from "../types/events.js";
10
+ import type { Workflow } from '../types/index.js';
11
+ import type { FlowDropEventHandlers, FlowDropFeatures } from '../types/events.js';
12
12
  /**
13
13
  * Minimal interface for the enhanced API client used when an authProvider is present.
14
14
  * Matches the surface of EnhancedFlowDropApiClient that save needs.
@@ -7,14 +7,14 @@
7
7
  * reimplementing the logic, ensuring "blur active element" flushing and metadata
8
8
  * construction happen in exactly one place.
9
9
  */
10
- import { tick } from "svelte";
11
- import { getWorkflowStore, workflowActions, markAsSaved as storeMarkAsSaved, } from "../stores/workflowStore.svelte.js";
12
- import { workflowApi, setEndpointConfig } from "./api.js";
13
- import { createEndpointConfig } from "../config/endpoints.js";
14
- import { v4 as uuidv4 } from "uuid";
15
- import { DEFAULT_WORKFLOW_FORMAT } from "../types/index.js";
16
- import { apiToasts, workflowToasts, dismissToast } from "./toastService.js";
17
- import { DEFAULT_FEATURES } from "../types/events.js";
10
+ import { tick } from 'svelte';
11
+ import { getWorkflowStore, workflowActions, markAsSaved as storeMarkAsSaved } from '../stores/workflowStore.svelte.js';
12
+ import { workflowApi, setEndpointConfig } from './api.js';
13
+ import { createEndpointConfig } from '../config/endpoints.js';
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { DEFAULT_WORKFLOW_FORMAT } from '../types/index.js';
16
+ import { apiToasts, workflowToasts, dismissToast } from './toastService.js';
17
+ import { DEFAULT_FEATURES } from '../types/events.js';
18
18
  // ---------------------------------------------------------------------------
19
19
  // Internal helpers
20
20
  // ---------------------------------------------------------------------------
@@ -25,7 +25,7 @@ import { DEFAULT_FEATURES } from "../types/events.js";
25
25
  */
26
26
  async function ensureApiConfiguration() {
27
27
  try {
28
- const { getEndpointConfig } = await import("./api.js");
28
+ const { getEndpointConfig } = await import('./api.js');
29
29
  const currentConfig = getEndpointConfig();
30
30
  if (currentConfig && currentConfig.baseUrl) {
31
31
  return;
@@ -35,20 +35,20 @@ async function ensureApiConfiguration() {
35
35
  // Could not check existing API configuration, initializing
36
36
  }
37
37
  // API configuration is not initialized — derive URL from window.location when available
38
- const apiBaseUrl = typeof window !== "undefined"
38
+ const apiBaseUrl = typeof window !== 'undefined'
39
39
  ? `${window.location.protocol}//${window.location.host}/api/flowdrop`
40
- : "/api/flowdrop";
40
+ : '/api/flowdrop';
41
41
  const config = createEndpointConfig(apiBaseUrl, {
42
42
  auth: {
43
- type: "none",
43
+ type: 'none'
44
44
  },
45
45
  timeout: 10000,
46
46
  retry: {
47
47
  enabled: true,
48
48
  maxAttempts: 2,
49
49
  delay: 1000,
50
- backoff: "exponential",
51
- },
50
+ backoff: 'exponential'
51
+ }
52
52
  });
53
53
  setEndpointConfig(config);
54
54
  }
@@ -60,8 +60,7 @@ async function ensureApiConfiguration() {
60
60
  * Must be called once, in this file only, so the logic lives in exactly one place.
61
61
  */
62
62
  async function flushPendingFormChanges() {
63
- if (typeof document !== "undefined" &&
64
- document.activeElement instanceof HTMLElement) {
63
+ if (typeof document !== 'undefined' && document.activeElement instanceof HTMLElement) {
65
64
  document.activeElement.blur();
66
65
  }
67
66
  // Wait for any pending DOM / Svelte reactive updates before reading the store
@@ -94,7 +93,7 @@ export async function globalSaveWorkflow(options = {}) {
94
93
  const currentWorkflow = getWorkflowStore();
95
94
  if (!currentWorkflow) {
96
95
  if (features.showToasts) {
97
- apiToasts.error("Save workflow", "No workflow to save");
96
+ apiToasts.error('Save workflow', 'No workflow to save');
98
97
  }
99
98
  return;
100
99
  }
@@ -105,9 +104,7 @@ export async function globalSaveWorkflow(options = {}) {
105
104
  return;
106
105
  }
107
106
  }
108
- const loadingToast = features.showToasts
109
- ? apiToasts.loading("Saving workflow")
110
- : null;
107
+ const loadingToast = features.showToasts ? apiToasts.loading('Saving workflow') : null;
111
108
  try {
112
109
  // Ensure API configuration is initialised (needed when called outside App.svelte)
113
110
  await ensureApiConfiguration();
@@ -121,17 +118,17 @@ export async function globalSaveWorkflow(options = {}) {
121
118
  const workflowId = currentWorkflow.id || uuidv4();
122
119
  const finalWorkflow = {
123
120
  id: workflowId,
124
- name: currentWorkflow.name || "Untitled Workflow",
125
- description: currentWorkflow.description || "",
121
+ name: currentWorkflow.name || 'Untitled Workflow',
122
+ description: currentWorkflow.description || '',
126
123
  nodes: currentWorkflow.nodes || [],
127
124
  edges: currentWorkflow.edges || [],
128
125
  metadata: {
129
126
  ...currentWorkflow.metadata,
130
- version: currentWorkflow.metadata?.version || "1.0.0",
127
+ version: currentWorkflow.metadata?.version || '1.0.0',
131
128
  format: currentWorkflow.metadata?.format || DEFAULT_WORKFLOW_FORMAT,
132
129
  createdAt: currentWorkflow.metadata?.createdAt || new Date().toISOString(),
133
- updatedAt: new Date().toISOString(),
134
- },
130
+ updatedAt: new Date().toISOString()
131
+ }
135
132
  };
136
133
  // Step 4 — Persist
137
134
  let savedWorkflow;
@@ -161,8 +158,8 @@ export async function globalSaveWorkflow(options = {}) {
161
158
  name: finalWorkflow.name,
162
159
  metadata: {
163
160
  ...finalWorkflow.metadata,
164
- ...savedWorkflow.metadata,
165
- },
161
+ ...savedWorkflow.metadata
162
+ }
166
163
  });
167
164
  }
168
165
  // Step 6a — Mark dirty state as clean
@@ -187,7 +184,7 @@ export async function globalSaveWorkflow(options = {}) {
187
184
  catch (error) {
188
185
  if (loadingToast)
189
186
  dismissToast(loadingToast);
190
- const errorObj = error instanceof Error ? error : new Error("Unknown error occurred");
187
+ const errorObj = error instanceof Error ? error : new Error('Unknown error occurred');
191
188
  // onSaveError hook
192
189
  const currentWorkflowForError = getWorkflowStore();
193
190
  if (eventHandlers?.onSaveError && currentWorkflowForError) {
@@ -196,10 +193,10 @@ export async function globalSaveWorkflow(options = {}) {
196
193
  // onApiError hook — return true suppresses the default toast
197
194
  let suppressToast = false;
198
195
  if (eventHandlers?.onApiError) {
199
- suppressToast = eventHandlers.onApiError(errorObj, "save") === true;
196
+ suppressToast = eventHandlers.onApiError(errorObj, 'save') === true;
200
197
  }
201
198
  if (features.showToasts && !suppressToast) {
202
- apiToasts.error("Save workflow", errorObj.message);
199
+ apiToasts.error('Save workflow', errorObj.message);
203
200
  }
204
201
  throw error;
205
202
  }
@@ -220,30 +217,30 @@ export async function globalExportWorkflow(options = {}) {
220
217
  const currentWorkflow = getWorkflowStore();
221
218
  if (!currentWorkflow) {
222
219
  if (features.showToasts) {
223
- apiToasts.error("Export workflow", "No workflow to export");
220
+ apiToasts.error('Export workflow', 'No workflow to export');
224
221
  }
225
222
  return;
226
223
  }
227
224
  // Build the canonical export object — preserve all metadata fields
228
225
  const finalWorkflow = {
229
- id: currentWorkflow.id || "untitled-workflow",
230
- name: currentWorkflow.name || "Untitled Workflow",
231
- description: currentWorkflow.description || "",
226
+ id: currentWorkflow.id || 'untitled-workflow',
227
+ name: currentWorkflow.name || 'Untitled Workflow',
228
+ description: currentWorkflow.description || '',
232
229
  nodes: currentWorkflow.nodes || [],
233
230
  edges: currentWorkflow.edges || [],
234
231
  metadata: {
235
232
  ...currentWorkflow.metadata,
236
- version: currentWorkflow.metadata?.version || "1.0.0",
233
+ version: currentWorkflow.metadata?.version || '1.0.0',
237
234
  format: currentWorkflow.metadata?.format || DEFAULT_WORKFLOW_FORMAT,
238
235
  createdAt: currentWorkflow.metadata?.createdAt || new Date().toISOString(),
239
- updatedAt: new Date().toISOString(),
240
- },
236
+ updatedAt: new Date().toISOString()
237
+ }
241
238
  };
242
239
  // Trigger browser download
243
240
  const dataStr = JSON.stringify(finalWorkflow, null, 2);
244
- const dataBlob = new Blob([dataStr], { type: "application/json" });
241
+ const dataBlob = new Blob([dataStr], { type: 'application/json' });
245
242
  const url = URL.createObjectURL(dataBlob);
246
- const link = document.createElement("a");
243
+ const link = document.createElement('a');
247
244
  link.href = url;
248
245
  link.download = `${finalWorkflow.name}.json`;
249
246
  link.click();
@@ -253,7 +250,7 @@ export async function globalExportWorkflow(options = {}) {
253
250
  }
254
251
  }
255
252
  catch (error) {
256
- const errorObj = error instanceof Error ? error : new Error("Unknown error occurred");
257
- apiToasts.error("Export workflow", errorObj.message);
253
+ const errorObj = error instanceof Error ? error : new Error('Unknown error occurred');
254
+ apiToasts.error('Export workflow', errorObj.message);
258
255
  }
259
256
  }
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module services/historyService
8
8
  */
9
- import type { Workflow } from "../types/index.js";
9
+ import type { Workflow } from '../types/index.js';
10
10
  /**
11
11
  * Represents a single entry in the history stack
12
12
  */
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * @module services/historyService
8
8
  */
9
- import { DEFAULT_BEHAVIOR_SETTINGS } from "../types/settings.js";
10
- import { logger } from "../utils/logger.js";
9
+ import { DEFAULT_BEHAVIOR_SETTINGS } from '../types/settings.js';
10
+ import { logger } from '../utils/logger.js';
11
11
  // =========================================================================
12
12
  // History Service Class
13
13
  // =========================================================================
@@ -77,7 +77,7 @@ export class HistoryService {
77
77
  this.undoStack.push({
78
78
  snapshot: this.cloneWorkflow(workflow),
79
79
  timestamp: Date.now(),
80
- description: "Initial state",
80
+ description: 'Initial state'
81
81
  });
82
82
  this.notifyChange();
83
83
  }
@@ -154,7 +154,7 @@ export class HistoryService {
154
154
  */
155
155
  startTransaction(workflow, description) {
156
156
  if (this.inTransaction) {
157
- logger.warn("HistoryService: Transaction already in progress, ignoring startTransaction");
157
+ logger.warn('HistoryService: Transaction already in progress, ignoring startTransaction');
158
158
  return;
159
159
  }
160
160
  this.inTransaction = true;
@@ -168,7 +168,7 @@ export class HistoryService {
168
168
  */
169
169
  commitTransaction() {
170
170
  if (!this.inTransaction || !this.transactionSnapshot) {
171
- logger.warn("HistoryService: No transaction in progress, ignoring commitTransaction");
171
+ logger.warn('HistoryService: No transaction in progress, ignoring commitTransaction');
172
172
  return;
173
173
  }
174
174
  // Push the snapshot captured at transaction start
@@ -209,7 +209,7 @@ export class HistoryService {
209
209
  this.undoStack.push({
210
210
  snapshot: this.cloneWorkflow(currentWorkflow),
211
211
  timestamp: Date.now(),
212
- description: "Initial state",
212
+ description: 'Initial state'
213
213
  });
214
214
  }
215
215
  this.notifyChange();
@@ -225,7 +225,7 @@ export class HistoryService {
225
225
  canRedo: this.redoStack.length > 0,
226
226
  currentIndex: this.undoStack.length - 1,
227
227
  historyLength: this.undoStack.length + this.redoStack.length,
228
- isInTransaction: this.inTransaction,
228
+ isInTransaction: this.inTransaction
229
229
  };
230
230
  }
231
231
  /**
@@ -276,7 +276,7 @@ export class HistoryService {
276
276
  this.undoStack.push({
277
277
  snapshot: this.cloneWorkflow(workflow),
278
278
  timestamp: Date.now(),
279
- description,
279
+ description
280
280
  });
281
281
  // Trim history if over limit
282
282
  this.trimHistory();
@@ -305,8 +305,8 @@ export class HistoryService {
305
305
  ...workflow,
306
306
  nodes: workflow.nodes.map((n) => ({
307
307
  ...n,
308
- data: { ...n.data, onConfigOpen: undefined },
309
- })),
308
+ data: { ...n.data, onConfigOpen: undefined }
309
+ }))
310
310
  };
311
311
  try {
312
312
  return structuredClone(cleaned);
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module services/interruptService
9
9
  */
10
- import type { Interrupt, InterruptPollingConfig } from "../types/interrupt.js";
10
+ import type { Interrupt, InterruptPollingConfig } from '../types/interrupt.js';
11
11
  /**
12
12
  * Interrupt Service class
13
13
  *