@flowdrop/flowdrop 1.5.0 → 1.7.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 (435) 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 +280 -303
  40. package/dist/components/App.svelte.d.ts +11 -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 +46 -59
  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 +51 -81
  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/schemas/v1/workflow.schema.json +5 -0
  299. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  300. package/dist/services/agentSpecExecutionService.js +55 -56
  301. package/dist/services/api.d.ts +2 -2
  302. package/dist/services/api.js +37 -37
  303. package/dist/services/apiVariableService.d.ts +1 -1
  304. package/dist/services/apiVariableService.js +34 -41
  305. package/dist/services/autoSaveService.js +8 -8
  306. package/dist/services/categoriesApi.d.ts +2 -2
  307. package/dist/services/categoriesApi.js +8 -8
  308. package/dist/services/chatService.d.ts +1 -1
  309. package/dist/services/chatService.js +18 -18
  310. package/dist/services/draftStorage.d.ts +1 -1
  311. package/dist/services/draftStorage.js +11 -11
  312. package/dist/services/dynamicSchemaService.d.ts +1 -1
  313. package/dist/services/dynamicSchemaService.js +39 -41
  314. package/dist/services/globalSave.d.ts +2 -2
  315. package/dist/services/globalSave.js +38 -41
  316. package/dist/services/historyService.d.ts +1 -1
  317. package/dist/services/historyService.js +10 -10
  318. package/dist/services/interruptService.d.ts +1 -1
  319. package/dist/services/interruptService.js +29 -35
  320. package/dist/services/nodeExecutionService.d.ts +1 -1
  321. package/dist/services/nodeExecutionService.js +44 -45
  322. package/dist/services/playgroundService.d.ts +1 -1
  323. package/dist/services/playgroundService.js +29 -29
  324. package/dist/services/portConfigApi.d.ts +2 -2
  325. package/dist/services/portConfigApi.js +8 -8
  326. package/dist/services/settingsService.d.ts +2 -2
  327. package/dist/services/settingsService.js +19 -25
  328. package/dist/services/toastService.d.ts +4 -4
  329. package/dist/services/toastService.js +33 -33
  330. package/dist/services/variableService.d.ts +1 -1
  331. package/dist/services/variableService.js +36 -36
  332. package/dist/services/workflowStorage.d.ts +2 -2
  333. package/dist/services/workflowStorage.js +13 -13
  334. package/dist/settings/index.d.ts +7 -7
  335. package/dist/settings/index.js +6 -6
  336. package/dist/skins/default.d.ts +1 -1
  337. package/dist/skins/default.js +1 -1
  338. package/dist/skins/index.d.ts +3 -3
  339. package/dist/skins/index.js +7 -7
  340. package/dist/skins/slate.d.ts +1 -1
  341. package/dist/skins/slate.js +69 -69
  342. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  343. package/dist/stores/categoriesStore.svelte.js +5 -5
  344. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  345. package/dist/stores/editorStateMachine.svelte.js +34 -34
  346. package/dist/stores/historyStore.svelte.d.ts +4 -4
  347. package/dist/stores/historyStore.svelte.js +4 -4
  348. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  349. package/dist/stores/interruptStore.svelte.js +21 -21
  350. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  351. package/dist/stores/playgroundStore.svelte.js +18 -21
  352. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  353. package/dist/stores/portCoordinateStore.svelte.js +10 -13
  354. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  355. package/dist/stores/settingsStore.svelte.js +57 -62
  356. package/dist/stores/workflowStore.svelte.d.ts +4 -3
  357. package/dist/stores/workflowStore.svelte.js +47 -47
  358. package/dist/stories/CanvasDecorator.svelte +7 -10
  359. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  360. package/dist/stories/EdgeDecorator.svelte +28 -31
  361. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  362. package/dist/stories/NodeDecorator.svelte +14 -20
  363. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  364. package/dist/stories/utils.d.ts +2 -2
  365. package/dist/stories/utils.js +89 -93
  366. package/dist/styles/base.css +16 -50
  367. package/dist/styles/tokens.css +10 -28
  368. package/dist/svelte-app.d.ts +10 -10
  369. package/dist/svelte-app.js +39 -39
  370. package/dist/themes/default.d.ts +1 -1
  371. package/dist/themes/default.js +4 -4
  372. package/dist/themes/index.d.ts +3 -3
  373. package/dist/themes/index.js +11 -11
  374. package/dist/themes/minimal.d.ts +1 -1
  375. package/dist/themes/minimal.js +5 -5
  376. package/dist/types/agentspec.d.ts +18 -18
  377. package/dist/types/agentspec.js +2 -2
  378. package/dist/types/auth.d.ts +1 -1
  379. package/dist/types/auth.js +6 -6
  380. package/dist/types/chat.d.ts +2 -2
  381. package/dist/types/config.d.ts +6 -6
  382. package/dist/types/events.d.ts +3 -3
  383. package/dist/types/events.js +2 -2
  384. package/dist/types/index.d.ts +34 -32
  385. package/dist/types/index.js +6 -6
  386. package/dist/types/interrupt.d.ts +6 -6
  387. package/dist/types/interrupt.js +21 -21
  388. package/dist/types/interruptState.d.ts +12 -12
  389. package/dist/types/interruptState.js +66 -66
  390. package/dist/types/playground.d.ts +7 -7
  391. package/dist/types/playground.js +14 -14
  392. package/dist/types/settings.d.ts +7 -5
  393. package/dist/types/settings.js +19 -24
  394. package/dist/types/skin.d.ts +1 -1
  395. package/dist/types/theme.d.ts +2 -2
  396. package/dist/types/uischema.d.ts +4 -4
  397. package/dist/types/uischema.js +3 -3
  398. package/dist/utils/colors.d.ts +1 -1
  399. package/dist/utils/colors.js +95 -97
  400. package/dist/utils/config.d.ts +2 -2
  401. package/dist/utils/config.js +48 -48
  402. package/dist/utils/connections.d.ts +6 -2
  403. package/dist/utils/connections.js +21 -15
  404. package/dist/utils/edgeStyling.d.ts +2 -2
  405. package/dist/utils/edgeStyling.js +36 -39
  406. package/dist/utils/errors.js +3 -3
  407. package/dist/utils/fetchWithAuth.d.ts +1 -1
  408. package/dist/utils/fetchWithAuth.js +2 -2
  409. package/dist/utils/handleIds.d.ts +2 -2
  410. package/dist/utils/handleIds.js +8 -8
  411. package/dist/utils/handlePositioning.d.ts +1 -1
  412. package/dist/utils/handlePositioning.js +2 -2
  413. package/dist/utils/icons.d.ts +1 -1
  414. package/dist/utils/icons.js +74 -74
  415. package/dist/utils/logger.d.ts +1 -1
  416. package/dist/utils/logger.js +7 -7
  417. package/dist/utils/nodeIds.d.ts +1 -1
  418. package/dist/utils/nodeIds.js +1 -1
  419. package/dist/utils/nodeStatus.d.ts +1 -1
  420. package/dist/utils/nodeStatus.js +48 -48
  421. package/dist/utils/nodeSwap.d.ts +9 -9
  422. package/dist/utils/nodeSwap.js +52 -58
  423. package/dist/utils/nodeTypes.d.ts +1 -1
  424. package/dist/utils/nodeTypes.js +20 -21
  425. package/dist/utils/nodeWrapper.d.ts +7 -7
  426. package/dist/utils/nodeWrapper.js +19 -21
  427. package/dist/utils/performanceUtils.d.ts +1 -1
  428. package/dist/utils/performanceUtils.js +1 -2
  429. package/dist/utils/portUtils.d.ts +2 -2
  430. package/dist/utils/portUtils.js +1 -1
  431. package/dist/utils/sanitize.js +1 -1
  432. package/dist/utils/uischema.d.ts +2 -2
  433. package/dist/utils/uischema.js +8 -8
  434. package/dist/utils/validation.js +8 -8
  435. package/package.json +7 -11
@@ -2,7 +2,7 @@
2
2
  * Client-side API service for FlowDrop
3
3
  * Provides methods to interact with the backend APIs using configurable endpoints
4
4
  */
5
- import { buildEndpointUrl, getEndpointMethod, getEndpointHeaders, } from "../config/endpoints.js";
5
+ import { buildEndpointUrl, getEndpointMethod, getEndpointHeaders } from '../config/endpoints.js';
6
6
  let endpointConfig = null;
7
7
  /**
8
8
  * Set the endpoint configuration at runtime
@@ -21,7 +21,7 @@ export function getEndpointConfig() {
21
21
  */
22
22
  async function apiRequest(endpointKey, endpointPath, params, options = {}) {
23
23
  if (!endpointConfig) {
24
- throw new Error("Endpoint configuration not set. Call setEndpointConfig() first.");
24
+ throw new Error('Endpoint configuration not set. Call setEndpointConfig() first.');
25
25
  }
26
26
  const url = buildEndpointUrl(endpointConfig, endpointPath, params);
27
27
  const method = getEndpointMethod(endpointConfig, endpointKey);
@@ -29,11 +29,11 @@ async function apiRequest(endpointKey, endpointPath, params, options = {}) {
29
29
  const response = await fetch(url, {
30
30
  method,
31
31
  headers,
32
- ...options,
32
+ ...options
33
33
  });
34
34
  // Check if response is JSON
35
- const contentType = response.headers.get("content-type");
36
- const isJson = contentType?.includes("application/json");
35
+ const contentType = response.headers.get('content-type');
36
+ const isJson = contentType?.includes('application/json');
37
37
  if (!response.ok) {
38
38
  // Try to get error details
39
39
  let errorMessage = `HTTP ${response.status}: ${response.statusText}`;
@@ -73,18 +73,18 @@ export const nodeApi = {
73
73
  */
74
74
  async getNodes(options) {
75
75
  if (!endpointConfig) {
76
- throw new Error("Endpoint configuration not set");
76
+ throw new Error('Endpoint configuration not set');
77
77
  }
78
78
  const params = new URLSearchParams();
79
79
  if (options?.category)
80
- params.append("category", options.category);
80
+ params.append('category', options.category);
81
81
  if (options?.search)
82
- params.append("search", options.search);
82
+ params.append('search', options.search);
83
83
  if (options?.limit)
84
- params.append("limit", options.limit.toString());
84
+ params.append('limit', options.limit.toString());
85
85
  if (options?.offset)
86
- params.append("offset", options.offset.toString());
87
- const response = await apiRequest("nodes.list", endpointConfig.endpoints.nodes.list + "?" + params.toString());
86
+ params.append('offset', options.offset.toString());
87
+ const response = await apiRequest('nodes.list', endpointConfig.endpoints.nodes.list + '?' + params.toString());
88
88
  return response.data || [];
89
89
  },
90
90
  /**
@@ -92,14 +92,14 @@ export const nodeApi = {
92
92
  */
93
93
  async getNode(id) {
94
94
  if (!endpointConfig) {
95
- throw new Error("Endpoint configuration not set");
95
+ throw new Error('Endpoint configuration not set');
96
96
  }
97
- const response = await apiRequest("nodes.get", endpointConfig.endpoints.nodes.get, { id });
97
+ const response = await apiRequest('nodes.get', endpointConfig.endpoints.nodes.get, { id });
98
98
  if (!response.data) {
99
- throw new Error("Node not found");
99
+ throw new Error('Node not found');
100
100
  }
101
101
  return response.data;
102
- },
102
+ }
103
103
  };
104
104
  /**
105
105
  * Workflow API methods
@@ -110,16 +110,16 @@ export const workflowApi = {
110
110
  */
111
111
  async getWorkflows(options) {
112
112
  if (!endpointConfig) {
113
- throw new Error("Endpoint configuration not set");
113
+ throw new Error('Endpoint configuration not set');
114
114
  }
115
115
  const params = new URLSearchParams();
116
116
  if (options?.search)
117
- params.append("search", options.search);
117
+ params.append('search', options.search);
118
118
  if (options?.limit)
119
- params.append("limit", options.limit.toString());
119
+ params.append('limit', options.limit.toString());
120
120
  if (options?.offset)
121
- params.append("offset", options.offset.toString());
122
- const response = await apiRequest("workflows.list", endpointConfig.endpoints.workflows.list + "?" + params.toString());
121
+ params.append('offset', options.offset.toString());
122
+ const response = await apiRequest('workflows.list', endpointConfig.endpoints.workflows.list + '?' + params.toString());
123
123
  return response.data || [];
124
124
  },
125
125
  /**
@@ -127,11 +127,11 @@ export const workflowApi = {
127
127
  */
128
128
  async getWorkflow(id) {
129
129
  if (!endpointConfig) {
130
- throw new Error("Endpoint configuration not set");
130
+ throw new Error('Endpoint configuration not set');
131
131
  }
132
- const response = await apiRequest("workflows.get", endpointConfig.endpoints.workflows.get, { id });
132
+ const response = await apiRequest('workflows.get', endpointConfig.endpoints.workflows.get, { id });
133
133
  if (!response.data) {
134
- throw new Error("Workflow not found");
134
+ throw new Error('Workflow not found');
135
135
  }
136
136
  return response.data;
137
137
  },
@@ -140,18 +140,18 @@ export const workflowApi = {
140
140
  */
141
141
  async createWorkflow(workflow) {
142
142
  if (!endpointConfig) {
143
- throw new Error("Endpoint configuration not set");
143
+ throw new Error('Endpoint configuration not set');
144
144
  }
145
145
  // Apply the consumer-provided payload transform (e.g. Drupal's label mapping).
146
146
  // The default is the identity function — no CMS-specific logic in the core library.
147
147
  const transform = endpointConfig.transformWorkflowPayload ?? ((w) => w);
148
148
  const body = transform(workflow);
149
- const response = await apiRequest("workflows.create", endpointConfig.endpoints.workflows.create, undefined, {
150
- method: "POST",
151
- body: JSON.stringify(body),
149
+ const response = await apiRequest('workflows.create', endpointConfig.endpoints.workflows.create, undefined, {
150
+ method: 'POST',
151
+ body: JSON.stringify(body)
152
152
  });
153
153
  if (!response.data) {
154
- throw new Error("Failed to create workflow");
154
+ throw new Error('Failed to create workflow');
155
155
  }
156
156
  return response.data;
157
157
  },
@@ -160,18 +160,18 @@ export const workflowApi = {
160
160
  */
161
161
  async updateWorkflow(id, workflow) {
162
162
  if (!endpointConfig) {
163
- throw new Error("Endpoint configuration not set");
163
+ throw new Error('Endpoint configuration not set');
164
164
  }
165
165
  // Apply the consumer-provided payload transform (e.g. Drupal's label mapping).
166
166
  // The default is the identity function — no CMS-specific logic in the core library.
167
167
  const transform = endpointConfig.transformWorkflowPayload ?? ((w) => w);
168
168
  const body = transform(workflow);
169
- const response = await apiRequest("workflows.update", endpointConfig.endpoints.workflows.update, { id }, {
170
- method: "PUT",
171
- body: JSON.stringify(body),
169
+ const response = await apiRequest('workflows.update', endpointConfig.endpoints.workflows.update, { id }, {
170
+ method: 'PUT',
171
+ body: JSON.stringify(body)
172
172
  });
173
173
  if (!response.data) {
174
- throw new Error("Failed to update workflow");
174
+ throw new Error('Failed to update workflow');
175
175
  }
176
176
  return response.data;
177
177
  },
@@ -180,9 +180,9 @@ export const workflowApi = {
180
180
  */
181
181
  async deleteWorkflow(id) {
182
182
  if (!endpointConfig) {
183
- throw new Error("Endpoint configuration not set");
183
+ throw new Error('Endpoint configuration not set');
184
184
  }
185
- await apiRequest("workflows.delete", endpointConfig.endpoints.workflows.delete, { id }, { method: "DELETE" });
185
+ await apiRequest('workflows.delete', endpointConfig.endpoints.workflows.delete, { id }, { method: 'DELETE' });
186
186
  },
187
187
  /**
188
188
  * Save workflow (create or update).
@@ -206,12 +206,12 @@ export const workflowApi = {
206
206
  const { id, ...workflowData } = workflow;
207
207
  return this.createWorkflow(workflowData);
208
208
  }
209
- },
209
+ }
210
210
  };
211
211
  /**
212
212
  * Export the API service
213
213
  */
214
214
  export const api = {
215
215
  nodes: nodeApi,
216
- workflows: workflowApi,
216
+ workflows: workflowApi
217
217
  };
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @module services/apiVariableService
7
7
  */
8
- import type { VariableSchema, ApiVariablesConfig, AuthProvider } from "../types/index.js";
8
+ import type { VariableSchema, ApiVariablesConfig, AuthProvider } from '../types/index.js';
9
9
  /**
10
10
  * Context for variable API requests
11
11
  */
@@ -5,9 +5,9 @@
5
5
  *
6
6
  * @module services/apiVariableService
7
7
  */
8
- import { getEndpointConfig } from "./api.js";
9
- import { logger } from "../utils/logger.js";
10
- import { DEFAULT_CACHE_TTL_MS } from "../config/constants.js";
8
+ import { getEndpointConfig } from './api.js';
9
+ import { logger } from '../utils/logger.js';
10
+ import { DEFAULT_CACHE_TTL_MS } from '../config/constants.js';
11
11
  /**
12
12
  * Variable schema cache with TTL support
13
13
  * Key format: `variables:{workflowId}:{nodeId}`
@@ -48,7 +48,7 @@ export function resolveEndpointUrl(template, context) {
48
48
  * @returns A unique cache key string
49
49
  */
50
50
  function generateVariableCacheKey(workflowId, nodeId) {
51
- return `variables:${workflowId || "unknown"}:${nodeId}`;
51
+ return `variables:${workflowId || 'unknown'}:${nodeId}`;
52
52
  }
53
53
  /**
54
54
  * Checks if a cached variable schema is still valid (not expired).
@@ -71,7 +71,7 @@ function isCacheValid(entry, ttl = DEFAULT_VARIABLE_CACHE_TTL) {
71
71
  function resolveBodyTemplates(body, context) {
72
72
  const resolved = {};
73
73
  for (const [key, value] of Object.entries(body)) {
74
- if (typeof value === "string") {
74
+ if (typeof value === 'string') {
75
75
  // Resolve template variables in string values
76
76
  let resolvedValue = value;
77
77
  if (context.workflowId) {
@@ -80,9 +80,7 @@ function resolveBodyTemplates(body, context) {
80
80
  resolvedValue = resolvedValue.replace(/\{nodeId\}/g, encodeURIComponent(context.nodeId));
81
81
  resolved[key] = resolvedValue;
82
82
  }
83
- else if (typeof value === "object" &&
84
- value !== null &&
85
- !Array.isArray(value)) {
83
+ else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
86
84
  // Recursively resolve nested objects
87
85
  resolved[key] = resolveBodyTemplates(value, context);
88
86
  }
@@ -131,27 +129,27 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
131
129
  return {
132
130
  success: true,
133
131
  schema: cached.schema,
134
- fromCache: true,
132
+ fromCache: true
135
133
  };
136
134
  }
137
135
  }
138
136
  // Resolve the URL with template variables
139
137
  let url = resolveEndpointUrl(endpoint.url, context);
140
138
  // If URL is relative, prepend base URL from endpoint config
141
- if (url.startsWith("/")) {
139
+ if (url.startsWith('/')) {
142
140
  const currentConfig = getEndpointConfig();
143
141
  if (currentConfig?.baseUrl) {
144
- const baseUrl = currentConfig.baseUrl.replace(/\/$/, "");
142
+ const baseUrl = currentConfig.baseUrl.replace(/\/$/, '');
145
143
  url = `${baseUrl}${url}`;
146
144
  }
147
145
  }
148
146
  // Prepare request options
149
- const method = endpoint.method ?? "GET";
147
+ const method = endpoint.method ?? 'GET';
150
148
  const timeout = endpoint.timeout ?? 30000;
151
149
  const headers = {
152
- Accept: "application/json",
153
- "Content-Type": "application/json",
154
- ...endpoint.headers,
150
+ Accept: 'application/json',
151
+ 'Content-Type': 'application/json',
152
+ ...endpoint.headers
155
153
  };
156
154
  // Add auth headers from AuthProvider if available
157
155
  if (authProvider) {
@@ -160,22 +158,19 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
160
158
  Object.assign(headers, authHeaders);
161
159
  }
162
160
  catch (error) {
163
- logger.warn("Failed to get auth headers:", error);
161
+ logger.warn('Failed to get auth headers:', error);
164
162
  }
165
163
  }
166
164
  // Add auth headers from endpoint config as fallback
167
165
  const currentConfig = getEndpointConfig();
168
166
  if (currentConfig?.auth) {
169
- if (currentConfig.auth.type === "bearer" && currentConfig.auth.token) {
170
- headers["Authorization"] =
171
- headers["Authorization"] ?? `Bearer ${currentConfig.auth.token}`;
167
+ if (currentConfig.auth.type === 'bearer' && currentConfig.auth.token) {
168
+ headers['Authorization'] = headers['Authorization'] ?? `Bearer ${currentConfig.auth.token}`;
172
169
  }
173
- else if (currentConfig.auth.type === "api_key" &&
174
- currentConfig.auth.apiKey) {
175
- headers["X-API-Key"] = headers["X-API-Key"] ?? currentConfig.auth.apiKey;
170
+ else if (currentConfig.auth.type === 'api_key' && currentConfig.auth.apiKey) {
171
+ headers['X-API-Key'] = headers['X-API-Key'] ?? currentConfig.auth.apiKey;
176
172
  }
177
- else if (currentConfig.auth.type === "custom" &&
178
- currentConfig.auth.headers) {
173
+ else if (currentConfig.auth.type === 'custom' && currentConfig.auth.headers) {
179
174
  Object.assign(headers, currentConfig.auth.headers);
180
175
  }
181
176
  }
@@ -183,10 +178,10 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
183
178
  const fetchOptions = {
184
179
  method,
185
180
  headers,
186
- signal: AbortSignal.timeout(timeout),
181
+ signal: AbortSignal.timeout(timeout)
187
182
  };
188
183
  // Add body for non-GET requests
189
- if (method !== "GET" && endpoint.body) {
184
+ if (method !== 'GET' && endpoint.body) {
190
185
  const resolvedBody = resolveBodyTemplates(endpoint.body, context);
191
186
  fetchOptions.body = JSON.stringify(resolvedBody);
192
187
  }
@@ -197,7 +192,7 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
197
192
  return {
198
193
  success: true,
199
194
  schema: { variables: {} },
200
- fromCache: false,
195
+ fromCache: false
201
196
  };
202
197
  }
203
198
  if (!response.ok) {
@@ -212,13 +207,13 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
212
207
  }
213
208
  return {
214
209
  success: false,
215
- error: "Authentication failed",
210
+ error: 'Authentication failed'
216
211
  };
217
212
  }
218
213
  const errorText = await response.text();
219
214
  return {
220
215
  success: false,
221
- error: `HTTP ${response.status}: ${errorText || response.statusText}`,
216
+ error: `HTTP ${response.status}: ${errorText || response.statusText}`
222
217
  };
223
218
  }
224
219
  const data = await response.json();
@@ -228,17 +223,15 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
228
223
  // 3. Wrapped in { schema: { variables: {...} } }
229
224
  // 4. Wrapped in { success: true, data: { variables: {...} } }
230
225
  let schema;
231
- if (data.variables && typeof data.variables === "object") {
226
+ if (data.variables && typeof data.variables === 'object') {
232
227
  // Direct VariableSchema
233
228
  schema = data;
234
229
  }
235
- else if (data.data?.variables &&
236
- typeof data.data.variables === "object") {
230
+ else if (data.data?.variables && typeof data.data.variables === 'object') {
237
231
  // Wrapped in { data: ... }
238
232
  schema = data.data;
239
233
  }
240
- else if (data.schema?.variables &&
241
- typeof data.schema.variables === "object") {
234
+ else if (data.schema?.variables && typeof data.schema.variables === 'object') {
242
235
  // Wrapped in { schema: ... }
243
236
  schema = data.schema;
244
237
  }
@@ -249,7 +242,7 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
249
242
  if (!schema) {
250
243
  return {
251
244
  success: false,
252
- error: "Invalid variable schema format received from endpoint",
245
+ error: 'Invalid variable schema format received from endpoint'
253
246
  };
254
247
  }
255
248
  // Cache the schema (if caching is enabled)
@@ -257,32 +250,32 @@ export async function fetchVariableSchema(workflowId, nodeId, config, authProvid
257
250
  variableCache.set(cacheKey, {
258
251
  schema,
259
252
  cachedAt: Date.now(),
260
- cacheKey,
253
+ cacheKey
261
254
  });
262
255
  }
263
256
  return {
264
257
  success: true,
265
258
  schema,
266
- fromCache: false,
259
+ fromCache: false
267
260
  };
268
261
  }
269
262
  catch (error) {
270
263
  // Handle specific error types
271
264
  if (error instanceof Error) {
272
- if (error.name === "AbortError" || error.name === "TimeoutError") {
265
+ if (error.name === 'AbortError' || error.name === 'TimeoutError') {
273
266
  return {
274
267
  success: false,
275
- error: `Request timed out after ${timeout}ms`,
268
+ error: `Request timed out after ${timeout}ms`
276
269
  };
277
270
  }
278
271
  return {
279
272
  success: false,
280
- error: error.message,
273
+ error: error.message
281
274
  };
282
275
  }
283
276
  return {
284
277
  success: false,
285
- error: "Unknown error occurred while fetching variable schema",
278
+ error: 'Unknown error occurred while fetching variable schema'
286
279
  };
287
280
  }
288
281
  }
@@ -6,9 +6,9 @@
6
6
  *
7
7
  * @module services/autoSaveService
8
8
  */
9
- import { getBehaviorSettings, onSettingsChange, } from "../stores/settingsStore.svelte.js";
10
- import { isDirty } from "../stores/workflowStore.svelte.js";
11
- import { logger } from "../utils/logger.js";
9
+ import { getBehaviorSettings, onSettingsChange } from '../stores/settingsStore.svelte.js';
10
+ import { isDirty } from '../stores/workflowStore.svelte.js';
11
+ import { logger } from '../utils/logger.js';
12
12
  /**
13
13
  * Initialize auto-save functionality based on user settings
14
14
  *
@@ -45,7 +45,7 @@ export function initAutoSave(options) {
45
45
  intervalId: null,
46
46
  isSaving: false,
47
47
  settingsUnsubscriber: null,
48
- dirtyUnsubscriber: null,
48
+ dirtyUnsubscriber: null
49
49
  };
50
50
  /**
51
51
  * Perform auto-save if conditions are met
@@ -62,7 +62,7 @@ export function initAutoSave(options) {
62
62
  }
63
63
  catch (error) {
64
64
  const err = error instanceof Error ? error : new Error(String(error));
65
- logger.error("Auto-save failed:", err);
65
+ logger.error('Auto-save failed:', err);
66
66
  onError?.(err);
67
67
  }
68
68
  finally {
@@ -88,7 +88,7 @@ export function initAutoSave(options) {
88
88
  }
89
89
  // Listen for settings changes to react to auto-save toggle/interval changes
90
90
  state.settingsUnsubscriber = onSettingsChange((event) => {
91
- if (event.category === "behavior") {
91
+ if (event.category === 'behavior') {
92
92
  updateAutoSaveInterval();
93
93
  }
94
94
  });
@@ -147,7 +147,7 @@ export class AutoSaveManager {
147
147
  return; // Already started
148
148
  }
149
149
  this.settingsUnsubscriber = onSettingsChange((event) => {
150
- if (event.category === "behavior") {
150
+ if (event.category === 'behavior') {
151
151
  this.updateInterval();
152
152
  }
153
153
  });
@@ -217,7 +217,7 @@ export class AutoSaveManager {
217
217
  }
218
218
  catch (error) {
219
219
  const err = error instanceof Error ? error : new Error(String(error));
220
- logger.error("Auto-save failed:", err);
220
+ logger.error('Auto-save failed:', err);
221
221
  this.onError?.(err);
222
222
  }
223
223
  finally {
@@ -2,8 +2,8 @@
2
2
  * Categories API Service
3
3
  * Handles fetching category definitions from the backend
4
4
  */
5
- import type { CategoryDefinition } from "../types/index.js";
6
- import type { EndpointConfig } from "../config/endpoints.js";
5
+ import type { CategoryDefinition } from '../types/index.js';
6
+ import type { EndpointConfig } from '../config/endpoints.js';
7
7
  /**
8
8
  * Fetch category definitions from API
9
9
  */
@@ -2,9 +2,9 @@
2
2
  * Categories API Service
3
3
  * Handles fetching category definitions from the backend
4
4
  */
5
- import { buildEndpointUrl } from "../config/endpoints.js";
6
- import { DEFAULT_CATEGORIES } from "../config/defaultCategories.js";
7
- import { logger } from "../utils/logger.js";
5
+ import { buildEndpointUrl } from '../config/endpoints.js';
6
+ import { DEFAULT_CATEGORIES } from '../config/defaultCategories.js';
7
+ import { logger } from '../utils/logger.js';
8
8
  /**
9
9
  * Fetch category definitions from API
10
10
  */
@@ -12,7 +12,7 @@ export async function fetchCategories(endpointConfig) {
12
12
  try {
13
13
  const url = buildEndpointUrl(endpointConfig, endpointConfig.endpoints.categories);
14
14
  const response = await fetch(url, {
15
- headers: { "Content-Type": "application/json" },
15
+ headers: { 'Content-Type': 'application/json' }
16
16
  });
17
17
  if (!response.ok) {
18
18
  throw new Error(`HTTP ${response.status}: ${response.statusText}`);
@@ -20,13 +20,13 @@ export async function fetchCategories(endpointConfig) {
20
20
  const data = await response.json();
21
21
  const categories = data.data ?? data;
22
22
  if (!categories || !Array.isArray(categories)) {
23
- logger.warn("Invalid categories received from API, using default");
23
+ logger.warn('Invalid categories received from API, using default');
24
24
  return DEFAULT_CATEGORIES;
25
25
  }
26
26
  return categories;
27
27
  }
28
28
  catch (error) {
29
- logger.error("Error fetching categories:", error);
29
+ logger.error('Error fetching categories:', error);
30
30
  return DEFAULT_CATEGORIES;
31
31
  }
32
32
  }
@@ -38,10 +38,10 @@ export function validateCategories(categories) {
38
38
  return false;
39
39
  }
40
40
  for (const category of categories) {
41
- if (!category.name || typeof category.name !== "string") {
41
+ if (!category.name || typeof category.name !== 'string') {
42
42
  return false;
43
43
  }
44
- if (!category.label || typeof category.label !== "string") {
44
+ if (!category.label || typeof category.label !== 'string') {
45
45
  return false;
46
46
  }
47
47
  }
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module services/chatService
8
8
  */
9
- import type { ChatRequest, ChatResponse, ChatHistoryMessage } from "../types/chat.js";
9
+ import type { ChatRequest, ChatResponse, ChatHistoryMessage } from '../types/chat.js';
10
10
  /**
11
11
  * Chat Service class
12
12
  *
@@ -6,9 +6,9 @@
6
6
  *
7
7
  * @module services/chatService
8
8
  */
9
- import { buildEndpointUrl, getEndpointHeaders } from "../config/endpoints.js";
10
- import { getEndpointConfig } from "./api.js";
11
- import { logger } from "../utils/logger.js";
9
+ import { buildEndpointUrl, getEndpointHeaders } from '../config/endpoints.js';
10
+ import { getEndpointConfig } from './api.js';
11
+ import { logger } from '../utils/logger.js';
12
12
  /**
13
13
  * Chat Service class
14
14
  *
@@ -38,7 +38,7 @@ export class ChatService {
38
38
  getConfig() {
39
39
  const config = getEndpointConfig();
40
40
  if (!config) {
41
- throw new Error("Endpoint configuration not set. Call setEndpointConfig() first.");
41
+ throw new Error('Endpoint configuration not set. Call setEndpointConfig() first.');
42
42
  }
43
43
  return config;
44
44
  }
@@ -51,13 +51,13 @@ export class ChatService {
51
51
  */
52
52
  async request(url, options = {}) {
53
53
  const config = this.getConfig();
54
- const headers = getEndpointHeaders(config, "chat");
54
+ const headers = getEndpointHeaders(config, 'chat');
55
55
  const response = await fetch(url, {
56
56
  ...options,
57
57
  headers: {
58
58
  ...headers,
59
- ...options.headers,
60
- },
59
+ ...options.headers
60
+ }
61
61
  });
62
62
  if (!response.ok) {
63
63
  const errorData = await response.json().catch(() => ({}));
@@ -68,7 +68,7 @@ export class ChatService {
68
68
  }
69
69
  const json = await response.json();
70
70
  // Unwrap the { success, data } envelope used by the Drupal backend.
71
- if (json && typeof json === "object" && "data" in json) {
71
+ if (json && typeof json === 'object' && 'data' in json) {
72
72
  return json.data;
73
73
  }
74
74
  return json;
@@ -86,12 +86,12 @@ export class ChatService {
86
86
  async sendMessage(workflowId, request) {
87
87
  const config = this.getConfig();
88
88
  const url = buildEndpointUrl(config, config.endpoints.chat.sendMessage, {
89
- id: workflowId,
89
+ id: workflowId
90
90
  });
91
- logger.debug("[ChatService] Sending message to", url);
91
+ logger.debug('[ChatService] Sending message to', url);
92
92
  return this.request(url, {
93
- method: "POST",
94
- body: JSON.stringify(request),
93
+ method: 'POST',
94
+ body: JSON.stringify(request)
95
95
  });
96
96
  }
97
97
  /**
@@ -103,9 +103,9 @@ export class ChatService {
103
103
  async getHistory(workflowId) {
104
104
  const config = this.getConfig();
105
105
  const url = buildEndpointUrl(config, config.endpoints.chat.getHistory, {
106
- id: workflowId,
106
+ id: workflowId
107
107
  });
108
- logger.debug("[ChatService] Getting history from", url);
108
+ logger.debug('[ChatService] Getting history from', url);
109
109
  return this.request(url);
110
110
  }
111
111
  /**
@@ -116,12 +116,12 @@ export class ChatService {
116
116
  async clearHistory(workflowId) {
117
117
  const config = this.getConfig();
118
118
  const url = buildEndpointUrl(config, config.endpoints.chat.clearHistory, {
119
- id: workflowId,
119
+ id: workflowId
120
120
  });
121
- logger.debug("[ChatService] Clearing history at", url);
121
+ logger.debug('[ChatService] Clearing history at', url);
122
122
  await fetch(url, {
123
- method: "DELETE",
124
- headers: getEndpointHeaders(config, "chat"),
123
+ method: 'DELETE',
124
+ headers: getEndpointHeaders(config, 'chat')
125
125
  });
126
126
  }
127
127
  }
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module services/draftStorage
8
8
  */
9
- import type { Workflow } from "../types/index.js";
9
+ import type { Workflow } from '../types/index.js';
10
10
  /**
11
11
  * Draft metadata stored alongside the workflow
12
12
  */