@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
@@ -9,11 +9,11 @@
9
9
  *
10
10
  * @see https://github.com/oracle/agent-spec
11
11
  */
12
- import { getComponentTypeDefaults, extractComponentType, AGENTSPEC_NAMESPACE, } from "./componentTypeDefaults.js";
13
- import { computeAutoLayout } from "./autoLayout.js";
14
- import { v4 as uuidv4 } from "uuid";
15
- import { logger } from "../../utils/logger.js";
16
- import { buildHandleId, extractPortId, extractDirection, } from "../../utils/handleIds.js";
12
+ import { getComponentTypeDefaults, extractComponentType, AGENTSPEC_NAMESPACE } from './componentTypeDefaults.js';
13
+ import { computeAutoLayout } from './autoLayout.js';
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { logger } from '../../utils/logger.js';
16
+ import { buildHandleId, extractPortId, extractDirection } from '../../utils/handleIds.js';
17
17
  // ============================================================================
18
18
  // Property ↔ Port Conversion
19
19
  // ============================================================================
@@ -24,27 +24,27 @@ function agentSpecPropertyToNodePort(prop, portType) {
24
24
  // Map JSON Schema types to FlowDrop data types
25
25
  let dataType;
26
26
  switch (prop.type) {
27
- case "string":
28
- dataType = "string";
27
+ case 'string':
28
+ dataType = 'string';
29
29
  break;
30
- case "number":
31
- case "float":
32
- dataType = "number";
30
+ case 'number':
31
+ case 'float':
32
+ dataType = 'number';
33
33
  break;
34
- case "integer":
35
- dataType = "number";
34
+ case 'integer':
35
+ dataType = 'number';
36
36
  break;
37
- case "boolean":
38
- dataType = "boolean";
37
+ case 'boolean':
38
+ dataType = 'boolean';
39
39
  break;
40
- case "array":
41
- dataType = "array";
40
+ case 'array':
41
+ dataType = 'array';
42
42
  break;
43
- case "object":
44
- dataType = "json";
43
+ case 'object':
44
+ dataType = 'json';
45
45
  break;
46
46
  default:
47
- dataType = "mixed";
47
+ dataType = 'mixed';
48
48
  }
49
49
  return {
50
50
  id: prop.title,
@@ -52,7 +52,7 @@ function agentSpecPropertyToNodePort(prop, portType) {
52
52
  type: portType,
53
53
  dataType,
54
54
  required: false,
55
- description: prop.description,
55
+ description: prop.description
56
56
  };
57
57
  }
58
58
  /**
@@ -62,32 +62,32 @@ function nodePortToAgentSpecProperty(port) {
62
62
  // Map FlowDrop data types to JSON Schema types
63
63
  let type;
64
64
  switch (port.dataType) {
65
- case "string":
66
- type = "string";
65
+ case 'string':
66
+ type = 'string';
67
67
  break;
68
- case "number":
69
- case "float":
70
- type = "number";
68
+ case 'number':
69
+ case 'float':
70
+ type = 'number';
71
71
  break;
72
- case "integer":
73
- type = "integer";
72
+ case 'integer':
73
+ type = 'integer';
74
74
  break;
75
- case "boolean":
76
- type = "boolean";
75
+ case 'boolean':
76
+ type = 'boolean';
77
77
  break;
78
- case "array":
79
- type = "array";
78
+ case 'array':
79
+ type = 'array';
80
80
  break;
81
- case "json":
82
- case "object":
83
- type = "object";
81
+ case 'json':
82
+ case 'object':
83
+ type = 'object';
84
84
  break;
85
85
  default:
86
- type = "string";
86
+ type = 'string';
87
87
  }
88
88
  const prop = {
89
89
  title: port.id,
90
- type,
90
+ type
91
91
  };
92
92
  if (port.description)
93
93
  prop.description = port.description;
@@ -130,7 +130,7 @@ export class AgentSpecAdapter {
130
130
  continue;
131
131
  const sourcePortId = extractPortId(edge.sourceHandle);
132
132
  const sourcePortDataType = this.getSourcePortDataType(sourceNode, sourcePortId);
133
- if (sourcePortDataType === "trigger") {
133
+ if (sourcePortDataType === 'trigger') {
134
134
  controlFlowEdges.push(this.convertToControlFlowEdge(edge, sourceNode, nodeIdToName));
135
135
  }
136
136
  else {
@@ -140,7 +140,7 @@ export class AgentSpecAdapter {
140
140
  // Find start node
141
141
  const startNodeName = this.findStartNodeName(agentSpecNodes, nodeIdToName);
142
142
  return {
143
- component_type: "flow",
143
+ component_type: 'flow',
144
144
  name: workflow.name,
145
145
  description: workflow.description,
146
146
  start_node: startNodeName,
@@ -148,15 +148,11 @@ export class AgentSpecAdapter {
148
148
  control_flow_connections: controlFlowEdges,
149
149
  data_flow_connections: dataFlowEdges.length > 0 ? dataFlowEdges : null,
150
150
  metadata: {
151
- "flowdrop:workflow_id": workflow.id,
152
- "flowdrop:version": workflow.metadata?.version,
153
- ...(workflow.metadata?.author
154
- ? { "flowdrop:author": workflow.metadata.author }
155
- : {}),
156
- ...(workflow.metadata?.tags
157
- ? { "flowdrop:tags": workflow.metadata.tags }
158
- : {}),
159
- },
151
+ 'flowdrop:workflow_id': workflow.id,
152
+ 'flowdrop:version': workflow.metadata?.version,
153
+ ...(workflow.metadata?.author ? { 'flowdrop:author': workflow.metadata.author } : {}),
154
+ ...(workflow.metadata?.tags ? { 'flowdrop:tags': workflow.metadata.tags } : {})
155
+ }
160
156
  };
161
157
  }
162
158
  /**
@@ -213,19 +209,18 @@ export class AgentSpecAdapter {
213
209
  }
214
210
  }
215
211
  return {
216
- id: agentSpecFlow.metadata?.["flowdrop:workflow_id"] ||
217
- uuidv4(),
212
+ id: agentSpecFlow.metadata?.['flowdrop:workflow_id'] || uuidv4(),
218
213
  name: agentSpecFlow.name,
219
214
  description: agentSpecFlow.description,
220
215
  nodes,
221
216
  edges,
222
217
  metadata: {
223
- version: agentSpecFlow.metadata?.["flowdrop:version"] || "1.0.0",
218
+ version: agentSpecFlow.metadata?.['flowdrop:version'] || '1.0.0',
224
219
  createdAt: new Date().toISOString(),
225
220
  updatedAt: new Date().toISOString(),
226
- author: agentSpecFlow.metadata?.["flowdrop:author"],
227
- tags: agentSpecFlow.metadata?.["flowdrop:tags"],
228
- },
221
+ author: agentSpecFlow.metadata?.['flowdrop:author'],
222
+ tags: agentSpecFlow.metadata?.['flowdrop:tags']
223
+ }
229
224
  };
230
225
  }
231
226
  /**
@@ -256,10 +251,10 @@ export class AgentSpecAdapter {
256
251
  const name = nodeIdToName.get(node.id) || node.id;
257
252
  // Convert data ports (skip trigger/tool ports — those are handled as edges)
258
253
  const dataInputs = node.data.metadata.inputs
259
- .filter((p) => p.dataType !== "trigger" && p.dataType !== "tool")
254
+ .filter((p) => p.dataType !== 'trigger' && p.dataType !== 'tool')
260
255
  .map((p) => nodePortToAgentSpecProperty(p));
261
256
  const dataOutputs = node.data.metadata.outputs
262
- .filter((p) => p.dataType !== "trigger" && p.dataType !== "tool")
257
+ .filter((p) => p.dataType !== 'trigger' && p.dataType !== 'tool')
263
258
  .map((p) => nodePortToAgentSpecProperty(p));
264
259
  // Build base node
265
260
  const base = {
@@ -269,10 +264,10 @@ export class AgentSpecAdapter {
269
264
  inputs: dataInputs.length > 0 ? dataInputs : undefined,
270
265
  outputs: dataOutputs.length > 0 ? dataOutputs : undefined,
271
266
  metadata: {
272
- "flowdrop:position": node.position,
273
- "flowdrop:node_id": node.id,
274
- "flowdrop:node_type_id": node.data.metadata.id,
275
- },
267
+ 'flowdrop:position': node.position,
268
+ 'flowdrop:node_id': node.id,
269
+ 'flowdrop:node_type_id': node.data.metadata.id
270
+ }
276
271
  };
277
272
  // Add type-specific attributes from config
278
273
  return this.addNodeSpecificAttributes(base, node);
@@ -283,7 +278,7 @@ export class AgentSpecAdapter {
283
278
  addNodeSpecificAttributes(asNode, fdNode) {
284
279
  const config = fdNode.data.config || {};
285
280
  switch (asNode.component_type) {
286
- case "llm_node": {
281
+ case 'llm_node': {
287
282
  const llmNode = asNode;
288
283
  if (config.prompt_template)
289
284
  llmNode.prompt_template = config.prompt_template;
@@ -293,19 +288,19 @@ export class AgentSpecAdapter {
293
288
  llmNode.llm_config = config.llm_config_ref;
294
289
  return llmNode;
295
290
  }
296
- case "branching_node": {
291
+ case 'branching_node': {
297
292
  const branchNode = asNode;
298
293
  const branches = config.branches;
299
294
  branchNode.branches = branches
300
295
  ? branches.map((b) => ({
301
296
  name: b.name,
302
297
  condition: b.condition || undefined,
303
- description: b.description || undefined,
298
+ description: b.description || undefined
304
299
  }))
305
300
  : [];
306
301
  return branchNode;
307
302
  }
308
- case "api_node": {
303
+ case 'api_node': {
309
304
  const apiNode = asNode;
310
305
  if (config.endpoint)
311
306
  apiNode.endpoint = config.endpoint;
@@ -314,30 +309,30 @@ export class AgentSpecAdapter {
314
309
  if (config.headers) {
315
310
  try {
316
311
  apiNode.headers =
317
- typeof config.headers === "string"
312
+ typeof config.headers === 'string'
318
313
  ? JSON.parse(config.headers)
319
314
  : config.headers;
320
315
  }
321
316
  catch (error) {
322
317
  // Ignore parse errors
323
- logger.warn("Failed to parse header JSON", error);
318
+ logger.warn('Failed to parse header JSON', error);
324
319
  }
325
320
  }
326
321
  return apiNode;
327
322
  }
328
- case "agent_node": {
323
+ case 'agent_node': {
329
324
  const agentNode = asNode;
330
325
  if (config.agent_ref)
331
326
  agentNode.agent = config.agent_ref;
332
327
  return agentNode;
333
328
  }
334
- case "flow_node": {
329
+ case 'flow_node': {
335
330
  const flowNode = asNode;
336
331
  if (config.flow_ref)
337
332
  flowNode.flow = config.flow_ref;
338
333
  return flowNode;
339
334
  }
340
- case "map_node": {
335
+ case 'map_node': {
341
336
  const mapNode = asNode;
342
337
  if (config.input_collection)
343
338
  mapNode.input_collection = config.input_collection;
@@ -347,7 +342,7 @@ export class AgentSpecAdapter {
347
342
  mapNode.map_flow = config.map_flow_ref;
348
343
  return mapNode;
349
344
  }
350
- case "tool_node": {
345
+ case 'tool_node': {
351
346
  const toolNode = asNode;
352
347
  if (config.tool_ref)
353
348
  toolNode.tool = config.tool_ref;
@@ -362,8 +357,8 @@ export class AgentSpecAdapter {
362
357
  */
363
358
  resolveComponentType(node) {
364
359
  // Check extensions first (round-trip preservation)
365
- const ext = node.data.metadata.extensions?.["agentspec:component_type"];
366
- if (ext && typeof ext === "string") {
360
+ const ext = node.data.metadata.extensions?.['agentspec:component_type'];
361
+ if (ext && typeof ext === 'string') {
367
362
  return ext;
368
363
  }
369
364
  // Infer from FlowDrop node type ID
@@ -373,22 +368,22 @@ export class AgentSpecAdapter {
373
368
  // Infer from FlowDrop visual type + category
374
369
  const nodeType = node.data.metadata.type;
375
370
  const category = node.data.metadata.category;
376
- if (nodeType === "terminal" && category === "triggers")
377
- return "start_node";
378
- if (nodeType === "terminal" && category === "outputs")
379
- return "end_node";
380
- if (nodeType === "gateway")
381
- return "branching_node";
382
- if (nodeType === "tool")
383
- return "tool_node";
384
- if (category === "ai" || category === "models")
385
- return "llm_node";
386
- if (category === "agents")
387
- return "agent_node";
388
- if (category === "data")
389
- return "api_node";
371
+ if (nodeType === 'terminal' && category === 'triggers')
372
+ return 'start_node';
373
+ if (nodeType === 'terminal' && category === 'outputs')
374
+ return 'end_node';
375
+ if (nodeType === 'gateway')
376
+ return 'branching_node';
377
+ if (nodeType === 'tool')
378
+ return 'tool_node';
379
+ if (category === 'ai' || category === 'models')
380
+ return 'llm_node';
381
+ if (category === 'agents')
382
+ return 'agent_node';
383
+ if (category === 'data')
384
+ return 'api_node';
390
385
  // Default fallback
391
- return "llm_node";
386
+ return 'llm_node';
392
387
  }
393
388
  /**
394
389
  * Convert an Agent Spec node to a FlowDrop StandardNode.
@@ -399,14 +394,14 @@ export class AgentSpecAdapter {
399
394
  */
400
395
  convertNodeFromAgentSpec(asNode, nodeId, position) {
401
396
  // Restore position from metadata if available (round-trip)
402
- const savedPosition = asNode.metadata?.["flowdrop:position"];
397
+ const savedPosition = asNode.metadata?.['flowdrop:position'];
403
398
  const finalPosition = savedPosition || position;
404
399
  // Convert inputs/outputs to FlowDrop ports
405
- const dataInputs = (asNode.inputs || []).map((p) => agentSpecPropertyToNodePort(p, "input"));
406
- const dataOutputs = (asNode.outputs || []).map((p) => agentSpecPropertyToNodePort(p, "output"));
400
+ const dataInputs = (asNode.inputs || []).map((p) => agentSpecPropertyToNodePort(p, 'input'));
401
+ const dataOutputs = (asNode.outputs || []).map((p) => agentSpecPropertyToNodePort(p, 'output'));
407
402
  // Use lightweight adapter defaults (never throws on unknown types)
408
403
  const defaults = getComponentTypeDefaults(asNode.component_type);
409
- const nodeTypeId = asNode.metadata?.["flowdrop:node_type_id"] ||
404
+ const nodeTypeId = asNode.metadata?.['flowdrop:node_type_id'] ||
410
405
  `${AGENTSPEC_NAMESPACE}.${asNode.component_type}`;
411
406
  const metadata = {
412
407
  id: nodeTypeId,
@@ -414,18 +409,18 @@ export class AgentSpecAdapter {
414
409
  type: defaults.visualType,
415
410
  description: asNode.description || defaults.defaultDescription,
416
411
  category: defaults.category,
417
- version: "1.0.0",
412
+ version: '1.0.0',
418
413
  icon: defaults.icon,
419
414
  color: defaults.color,
420
415
  badge: defaults.badge,
421
416
  inputs: [...defaults.triggerInputs, ...dataInputs],
422
417
  outputs: [...defaults.triggerOutputs, ...dataOutputs],
423
- configSchema: { type: "object", properties: {} },
424
- formats: ["agentspec"],
418
+ configSchema: { type: 'object', properties: {} },
419
+ formats: ['agentspec'],
425
420
  extensions: {
426
- "agentspec:component_type": asNode.component_type,
427
- "agentspec:original_name": asNode.name,
428
- },
421
+ 'agentspec:component_type': asNode.component_type,
422
+ 'agentspec:original_name': asNode.name
423
+ }
429
424
  };
430
425
  // Build config from Agent Spec node-specific attributes
431
426
  const config = this.extractConfigFromAgentSpec(asNode);
@@ -436,8 +431,8 @@ export class AgentSpecAdapter {
436
431
  data: {
437
432
  label: asNode.name,
438
433
  config,
439
- metadata,
440
- },
434
+ metadata
435
+ }
441
436
  };
442
437
  }
443
438
  /**
@@ -446,7 +441,7 @@ export class AgentSpecAdapter {
446
441
  extractConfigFromAgentSpec(asNode) {
447
442
  const config = {};
448
443
  switch (asNode.component_type) {
449
- case "llm_node": {
444
+ case 'llm_node': {
450
445
  const llm = asNode;
451
446
  if (llm.prompt_template)
452
447
  config.prompt_template = llm.prompt_template;
@@ -454,23 +449,21 @@ export class AgentSpecAdapter {
454
449
  config.system_prompt = llm.system_prompt;
455
450
  if (llm.llm_config) {
456
451
  config.llm_config_ref =
457
- typeof llm.llm_config === "string"
458
- ? llm.llm_config
459
- : llm.llm_config.name;
452
+ typeof llm.llm_config === 'string' ? llm.llm_config : llm.llm_config.name;
460
453
  }
461
454
  break;
462
455
  }
463
- case "branching_node": {
456
+ case 'branching_node': {
464
457
  const branch = asNode;
465
458
  config.branches = branch.branches.map((b) => ({
466
459
  name: b.name,
467
460
  label: b.name,
468
- condition: b.condition || "",
469
- isDefault: !b.condition,
461
+ condition: b.condition || '',
462
+ isDefault: !b.condition
470
463
  }));
471
464
  break;
472
465
  }
473
- case "api_node": {
466
+ case 'api_node': {
474
467
  const api = asNode;
475
468
  if (api.endpoint)
476
469
  config.endpoint = api.endpoint;
@@ -480,39 +473,35 @@ export class AgentSpecAdapter {
480
473
  config.headers = JSON.stringify(api.headers, null, 2);
481
474
  break;
482
475
  }
483
- case "agent_node": {
476
+ case 'agent_node': {
484
477
  const agent = asNode;
485
478
  if (agent.agent) {
486
- config.agent_ref =
487
- typeof agent.agent === "string" ? agent.agent : agent.agent.name;
479
+ config.agent_ref = typeof agent.agent === 'string' ? agent.agent : agent.agent.name;
488
480
  }
489
481
  break;
490
482
  }
491
- case "flow_node": {
483
+ case 'flow_node': {
492
484
  const flow = asNode;
493
485
  if (flow.flow) {
494
- config.flow_ref =
495
- typeof flow.flow === "string" ? flow.flow : flow.flow.name;
486
+ config.flow_ref = typeof flow.flow === 'string' ? flow.flow : flow.flow.name;
496
487
  }
497
488
  break;
498
489
  }
499
- case "map_node": {
490
+ case 'map_node': {
500
491
  const map = asNode;
501
492
  if (map.input_collection)
502
493
  config.input_collection = map.input_collection;
503
494
  if (map.output_collection)
504
495
  config.output_collection = map.output_collection;
505
496
  if (map.map_flow) {
506
- config.map_flow_ref =
507
- typeof map.map_flow === "string" ? map.map_flow : map.map_flow.name;
497
+ config.map_flow_ref = typeof map.map_flow === 'string' ? map.map_flow : map.map_flow.name;
508
498
  }
509
499
  break;
510
500
  }
511
- case "tool_node": {
501
+ case 'tool_node': {
512
502
  const tool = asNode;
513
503
  if (tool.tool) {
514
- config.tool_ref =
515
- typeof tool.tool === "string" ? tool.tool : tool.tool.name;
504
+ config.tool_ref = typeof tool.tool === 'string' ? tool.tool : tool.tool.name;
516
505
  }
517
506
  break;
518
507
  }
@@ -533,10 +522,10 @@ export class AgentSpecAdapter {
533
522
  if (port)
534
523
  return port.dataType;
535
524
  // Check if it's a gateway branch (always trigger)
536
- if (node.data.metadata.type === "gateway") {
525
+ if (node.data.metadata.type === 'gateway') {
537
526
  const branches = node.data.config?.branches;
538
527
  if (branches?.some((b) => b.name === portId)) {
539
- return "trigger";
528
+ return 'trigger';
540
529
  }
541
530
  }
542
531
  // Check dynamic outputs
@@ -557,17 +546,17 @@ export class AgentSpecAdapter {
557
546
  const sourcePortId = extractPortId(edge.sourceHandle);
558
547
  // Determine from_branch for gateway nodes
559
548
  let fromBranch;
560
- if (sourceNode.data.metadata.type === "gateway" && sourcePortId) {
549
+ if (sourceNode.data.metadata.type === 'gateway' && sourcePortId) {
561
550
  const branches = sourceNode.data.config?.branches;
562
551
  if (branches?.some((b) => b.name === sourcePortId)) {
563
552
  fromBranch = sourcePortId;
564
553
  }
565
554
  }
566
555
  return {
567
- name: `${fromNode}_to_${toNode}${fromBranch ? `_${fromBranch}` : ""}`,
556
+ name: `${fromNode}_to_${toNode}${fromBranch ? `_${fromBranch}` : ''}`,
568
557
  from_node: fromNode,
569
558
  to_node: toNode,
570
- from_branch: fromBranch,
559
+ from_branch: fromBranch
571
560
  };
572
561
  }
573
562
  /**
@@ -576,14 +565,14 @@ export class AgentSpecAdapter {
576
565
  convertToDataFlowEdge(edge, nodeIdToName) {
577
566
  const sourceNode = nodeIdToName.get(edge.source) || edge.source;
578
567
  const destNode = nodeIdToName.get(edge.target) || edge.target;
579
- const sourceOutput = extractPortId(edge.sourceHandle) || "output";
580
- const destInput = extractPortId(edge.targetHandle) || "input";
568
+ const sourceOutput = extractPortId(edge.sourceHandle) || 'output';
569
+ const destInput = extractPortId(edge.targetHandle) || 'input';
581
570
  return {
582
571
  name: `${sourceNode}_${sourceOutput}_to_${destNode}_${destInput}`,
583
572
  source_node: sourceNode,
584
573
  source_output: sourceOutput,
585
574
  destination_node: destNode,
586
- destination_input: destInput,
575
+ destination_input: destInput
587
576
  };
588
577
  }
589
578
  /**
@@ -595,7 +584,7 @@ export class AgentSpecAdapter {
595
584
  if (!sourceId || !targetId)
596
585
  return null;
597
586
  // Determine source handle
598
- let sourcePortId = "trigger"; // default for non-branch control flow
587
+ let sourcePortId = 'trigger'; // default for non-branch control flow
599
588
  if (cfEdge.from_branch) {
600
589
  sourcePortId = cfEdge.from_branch;
601
590
  }
@@ -603,8 +592,8 @@ export class AgentSpecAdapter {
603
592
  id: uuidv4(),
604
593
  source: sourceId,
605
594
  target: targetId,
606
- sourceHandle: buildHandleId(sourceId, "output", sourcePortId),
607
- targetHandle: buildHandleId(targetId, "input", "trigger"),
595
+ sourceHandle: buildHandleId(sourceId, 'output', sourcePortId),
596
+ targetHandle: buildHandleId(targetId, 'input', 'trigger')
608
597
  };
609
598
  }
610
599
  /**
@@ -619,8 +608,8 @@ export class AgentSpecAdapter {
619
608
  id: uuidv4(),
620
609
  source: sourceId,
621
610
  target: targetId,
622
- sourceHandle: buildHandleId(sourceId, "output", dfEdge.source_output),
623
- targetHandle: buildHandleId(targetId, "input", dfEdge.destination_input),
611
+ sourceHandle: buildHandleId(sourceId, 'output', dfEdge.source_output),
612
+ targetHandle: buildHandleId(targetId, 'input', dfEdge.destination_input)
624
613
  };
625
614
  }
626
615
  /**
@@ -628,10 +617,10 @@ export class AgentSpecAdapter {
628
617
  */
629
618
  findStartNodeName(nodes, nodeIdToName) {
630
619
  // Look for an explicit start_node
631
- const startNode = nodes.find((n) => n.component_type === "start_node");
620
+ const startNode = nodes.find((n) => n.component_type === 'start_node');
632
621
  if (startNode)
633
622
  return startNode.name;
634
623
  // Fall back to the first node
635
- return nodes.length > 0 ? nodes[0].name : "start";
624
+ return nodes.length > 0 ? nodes[0].name : 'start';
636
625
  }
637
626
  }
@@ -4,8 +4,8 @@
4
4
  * Handles conversion between FlowDrop workflows and full Agent Spec Documents
5
5
  * (which wrap a Flow with Agent metadata like tools, LLM config, etc.)
6
6
  */
7
- import type { AgentSpecDocument, AgentSpecTool, AgentSpecLLMConfig } from "../../types/agentspec.js";
8
- import type { StandardWorkflow } from "../WorkflowAdapter.js";
7
+ import type { AgentSpecDocument, AgentSpecTool, AgentSpecLLMConfig } from '../../types/agentspec.js';
8
+ import type { StandardWorkflow } from '../WorkflowAdapter.js';
9
9
  /**
10
10
  * Agent-level configuration that wraps a workflow.
11
11
  * Contains the Agent Spec agent metadata that lives outside the flow.
@@ -4,7 +4,7 @@
4
4
  * Handles conversion between FlowDrop workflows and full Agent Spec Documents
5
5
  * (which wrap a Flow with Agent metadata like tools, LLM config, etc.)
6
6
  */
7
- import { AgentSpecAdapter } from "./AgentSpecAdapter.js";
7
+ import { AgentSpecAdapter } from './AgentSpecAdapter.js';
8
8
  export class AgentSpecAgentAdapter {
9
9
  flowAdapter;
10
10
  constructor() {
@@ -20,18 +20,18 @@ export class AgentSpecAgentAdapter {
20
20
  const doc = {
21
21
  flow,
22
22
  metadata: {
23
- "flowdrop:exported_at": new Date().toISOString(),
24
- },
23
+ 'flowdrop:exported_at': new Date().toISOString()
24
+ }
25
25
  };
26
26
  // Add agent definition if config provided
27
27
  if (agentConfig) {
28
28
  const agent = {
29
- component_type: "agent",
29
+ component_type: 'agent',
30
30
  name: agentConfig.name,
31
31
  description: agentConfig.description,
32
32
  system_prompt: agentConfig.systemPrompt,
33
33
  tools: agentConfig.tools,
34
- llm_config: agentConfig.llmConfig,
34
+ llm_config: agentConfig.llmConfig
35
35
  };
36
36
  doc.agent = agent;
37
37
  }
@@ -50,11 +50,11 @@ export class AgentSpecAgentAdapter {
50
50
  */
51
51
  fromAgentSpecDocument(doc) {
52
52
  if (!doc.flow) {
53
- throw new Error("AgentSpecDocument has no flow definition");
53
+ throw new Error('AgentSpecDocument has no flow definition');
54
54
  }
55
55
  const workflow = this.flowAdapter.fromAgentSpec(doc.flow);
56
56
  const result = {
57
- workflow,
57
+ workflow
58
58
  };
59
59
  // Extract agent config
60
60
  if (doc.agent) {
@@ -62,10 +62,10 @@ export class AgentSpecAgentAdapter {
62
62
  name: doc.agent.name,
63
63
  description: doc.agent.description,
64
64
  systemPrompt: doc.agent.system_prompt,
65
- tools: doc.agent.tools?.filter((t) => typeof t !== "string"),
66
- llmConfig: doc.agent.llm_config && typeof doc.agent.llm_config !== "string"
65
+ tools: doc.agent.tools?.filter((t) => typeof t !== 'string'),
66
+ llmConfig: doc.agent.llm_config && typeof doc.agent.llm_config !== 'string'
67
67
  ? doc.agent.llm_config
68
- : undefined,
68
+ : undefined
69
69
  };
70
70
  }
71
71
  // Extract shared declarations
@@ -9,7 +9,7 @@
9
9
  * 3. Position nodes with configurable spacing
10
10
  * 4. Fan out branches vertically from BranchingNode
11
11
  */
12
- import type { AgentSpecFlow } from "../../types/agentspec.js";
12
+ import type { AgentSpecFlow } from '../../types/agentspec.js';
13
13
  /** Measured dimensions for a node */
14
14
  export interface NodeDimensions {
15
15
  width: number;