@flowdrop/flowdrop 1.0.0 → 1.1.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 (388) hide show
  1. package/README.md +50 -50
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +25 -25
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
  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 +2 -2
  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 +22 -20
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +73 -72
  20. package/dist/components/App.svelte +1081 -961
  21. package/dist/components/App.svelte.d.ts +9 -6
  22. package/dist/components/CanvasBanner.stories.svelte +23 -20
  23. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  24. package/dist/components/CanvasBanner.svelte +46 -46
  25. package/dist/components/ConfigForm.svelte +1164 -1065
  26. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  27. package/dist/components/ConfigModal.svelte +180 -180
  28. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  29. package/dist/components/ConfigPanel.stories.svelte +35 -35
  30. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  31. package/dist/components/ConfigPanel.svelte +178 -167
  32. package/dist/components/ConfigPanel.svelte.d.ts +1 -1
  33. package/dist/components/ConnectionLine.svelte +25 -25
  34. package/dist/components/EdgeRefresher.svelte +26 -26
  35. package/dist/components/FlowDropEdge.stories.svelte +197 -0
  36. package/dist/components/FlowDropEdge.stories.svelte.d.ts +26 -0
  37. package/dist/components/FlowDropEdge.svelte +168 -0
  38. package/dist/components/FlowDropEdge.svelte.d.ts +4 -0
  39. package/dist/components/FlowDropZone.svelte +63 -60
  40. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  41. package/dist/components/LoadingSpinner.stories.svelte +19 -19
  42. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  43. package/dist/components/LoadingSpinner.svelte +21 -21
  44. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  45. package/dist/components/Logo.stories.svelte +13 -13
  46. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  47. package/dist/components/Logo.svelte +101 -95
  48. package/dist/components/LogsSidebar.svelte +553 -546
  49. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  50. package/dist/components/MarkdownDisplay.stories.svelte +29 -23
  51. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  52. package/dist/components/MarkdownDisplay.svelte +16 -14
  53. package/dist/components/Navbar.stories.svelte +43 -38
  54. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  55. package/dist/components/Navbar.svelte +760 -706
  56. package/dist/components/Navbar.svelte.d.ts +1 -1
  57. package/dist/components/NodeSidebar.svelte +900 -746
  58. package/dist/components/NodeSidebar.svelte.d.ts +3 -1
  59. package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
  60. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  61. package/dist/components/NodeStatusOverlay.svelte +295 -280
  62. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  63. package/dist/components/PipelineStatus.svelte +326 -300
  64. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  65. package/dist/components/PortCoordinateTracker.svelte +49 -47
  66. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  67. package/dist/components/ReadOnlyDetails.svelte +156 -156
  68. package/dist/components/SchemaForm.stories.svelte +106 -98
  69. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  70. package/dist/components/SchemaForm.svelte +490 -463
  71. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  72. package/dist/components/SettingsModal.svelte +226 -223
  73. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  74. package/dist/components/SettingsPanel.svelte +637 -601
  75. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  76. package/dist/components/StatusIcon.stories.svelte +62 -49
  77. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  78. package/dist/components/StatusIcon.svelte +87 -87
  79. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  80. package/dist/components/StatusLabel.stories.svelte +12 -12
  81. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  82. package/dist/components/StatusLabel.svelte +19 -19
  83. package/dist/components/ThemeToggle.stories.svelte +16 -16
  84. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  85. package/dist/components/ThemeToggle.svelte +180 -169
  86. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  87. package/dist/components/UniversalNode.svelte +150 -138
  88. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  89. package/dist/components/WorkflowEditor.svelte +1069 -1007
  90. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  91. package/dist/components/form/FormArray.svelte +1034 -973
  92. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  93. package/dist/components/form/FormAutocomplete.svelte +1021 -978
  94. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  95. package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
  96. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  97. package/dist/components/form/FormCheckboxGroup.svelte +136 -136
  98. package/dist/components/form/FormCodeEditor.svelte +452 -434
  99. package/dist/components/form/FormField.svelte +366 -355
  100. package/dist/components/form/FormField.svelte.d.ts +2 -2
  101. package/dist/components/form/FormFieldLight.svelte +400 -384
  102. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  103. package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
  104. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  105. package/dist/components/form/FormFieldWrapper.svelte +100 -93
  106. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  107. package/dist/components/form/FormFieldset.svelte +108 -108
  108. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  109. package/dist/components/form/FormMarkdownEditor.svelte +758 -725
  110. package/dist/components/form/FormNumberField.stories.svelte +25 -25
  111. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  112. package/dist/components/form/FormNumberField.svelte +88 -88
  113. package/dist/components/form/FormRangeField.stories.svelte +20 -20
  114. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  115. package/dist/components/form/FormRangeField.svelte +234 -226
  116. package/dist/components/form/FormSelect.stories.svelte +38 -38
  117. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  118. package/dist/components/form/FormSelect.svelte +101 -101
  119. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  120. package/dist/components/form/FormTemplateEditor.svelte +847 -798
  121. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  122. package/dist/components/form/FormTextField.stories.svelte +29 -23
  123. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  124. package/dist/components/form/FormTextField.svelte +68 -68
  125. package/dist/components/form/FormTextarea.stories.svelte +28 -25
  126. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  127. package/dist/components/form/FormTextarea.svelte +74 -74
  128. package/dist/components/form/FormToggle.stories.svelte +23 -20
  129. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  130. package/dist/components/form/FormToggle.svelte +98 -98
  131. package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
  132. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  133. package/dist/components/form/index.d.ts +19 -19
  134. package/dist/components/form/index.js +18 -18
  135. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  136. package/dist/components/form/templateAutocomplete.js +64 -55
  137. package/dist/components/form/types.d.ts +6 -6
  138. package/dist/components/form/types.js +9 -4
  139. package/dist/components/icons/AlertCircleIcon.svelte +11 -0
  140. package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
  141. package/dist/components/icons/CogIcon.svelte +11 -0
  142. package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
  143. package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
  144. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  145. package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
  146. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  147. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
  148. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  149. package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
  150. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  151. package/dist/components/interrupt/FormPrompt.svelte +223 -218
  152. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  153. package/dist/components/interrupt/InterruptBubble.svelte +617 -583
  154. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  155. package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
  156. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  157. package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
  158. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  159. package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
  160. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  161. package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
  162. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  163. package/dist/components/interrupt/index.d.ts +5 -5
  164. package/dist/components/interrupt/index.js +5 -5
  165. package/dist/components/layouts/MainLayout.svelte +724 -691
  166. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  167. package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
  168. package/dist/components/nodes/GatewayNode.svelte +605 -571
  169. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  170. package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
  171. package/dist/components/nodes/IdeaNode.svelte +451 -437
  172. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  173. package/dist/components/nodes/NotesNode.stories.svelte +65 -64
  174. package/dist/components/nodes/NotesNode.svelte +380 -369
  175. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  176. package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
  177. package/dist/components/nodes/SimpleNode.svelte +486 -424
  178. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  179. package/dist/components/nodes/SquareNode.stories.svelte +73 -73
  180. package/dist/components/nodes/SquareNode.svelte +439 -380
  181. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  182. package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
  183. package/dist/components/nodes/TerminalNode.svelte +709 -670
  184. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  185. package/dist/components/nodes/ToolNode.stories.svelte +181 -180
  186. package/dist/components/nodes/ToolNode.svelte +505 -447
  187. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  188. package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
  189. package/dist/components/nodes/WorkflowNode.svelte +621 -551
  190. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  191. package/dist/components/playground/ChatPanel.svelte +945 -889
  192. package/dist/components/playground/ExecutionLogs.svelte +495 -472
  193. package/dist/components/playground/InputCollector.svelte +449 -428
  194. package/dist/components/playground/MessageBubble.stories.svelte +47 -47
  195. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  196. package/dist/components/playground/MessageBubble.svelte +626 -610
  197. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  198. package/dist/components/playground/Playground.svelte +1088 -1057
  199. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  200. package/dist/components/playground/PlaygroundModal.svelte +208 -204
  201. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  202. package/dist/components/playground/SessionManager.svelte +527 -521
  203. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  204. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  205. package/dist/config/agentSpecEndpoints.js +20 -20
  206. package/dist/config/constants.d.ts +8 -0
  207. package/dist/config/constants.js +10 -2
  208. package/dist/config/defaultCategories.d.ts +1 -1
  209. package/dist/config/defaultCategories.js +86 -86
  210. package/dist/config/defaultPortConfig.d.ts +1 -1
  211. package/dist/config/defaultPortConfig.js +144 -144
  212. package/dist/config/endpoints.d.ts +4 -4
  213. package/dist/config/endpoints.js +65 -65
  214. package/dist/config/runtimeConfig.d.ts +2 -2
  215. package/dist/config/runtimeConfig.js +8 -8
  216. package/dist/core/index.d.ts +63 -59
  217. package/dist/core/index.js +35 -33
  218. package/dist/display/index.d.ts +2 -2
  219. package/dist/display/index.js +2 -2
  220. package/dist/editor/index.d.ts +62 -62
  221. package/dist/editor/index.js +53 -53
  222. package/dist/form/code.d.ts +5 -5
  223. package/dist/form/code.js +14 -14
  224. package/dist/form/fieldRegistry.d.ts +3 -3
  225. package/dist/form/fieldRegistry.js +11 -9
  226. package/dist/form/full.d.ts +8 -8
  227. package/dist/form/full.js +9 -9
  228. package/dist/form/index.d.ts +18 -18
  229. package/dist/form/index.js +16 -16
  230. package/dist/form/markdown.d.ts +4 -4
  231. package/dist/form/markdown.js +8 -8
  232. package/dist/helpers/proximityConnect.d.ts +3 -3
  233. package/dist/helpers/proximityConnect.js +34 -32
  234. package/dist/helpers/workflowEditorHelper.d.ts +5 -5
  235. package/dist/helpers/workflowEditorHelper.js +108 -96
  236. package/dist/index.d.ts +6 -6
  237. package/dist/index.js +6 -6
  238. package/dist/mocks/app-environment.js +2 -2
  239. package/dist/mocks/app-forms.js +9 -9
  240. package/dist/mocks/app-navigation.js +11 -11
  241. package/dist/mocks/app-stores.js +8 -8
  242. package/dist/playground/index.d.ts +19 -19
  243. package/dist/playground/index.js +16 -16
  244. package/dist/playground/mount.d.ts +3 -3
  245. package/dist/playground/mount.js +24 -24
  246. package/dist/registry/builtinFormats.js +13 -13
  247. package/dist/registry/builtinNodes.d.ts +2 -2
  248. package/dist/registry/builtinNodes.js +77 -77
  249. package/dist/registry/index.d.ts +4 -4
  250. package/dist/registry/index.js +4 -4
  251. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  252. package/dist/registry/nodeComponentRegistry.js +11 -9
  253. package/dist/registry/plugin.d.ts +2 -2
  254. package/dist/registry/plugin.js +11 -11
  255. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  256. package/dist/registry/workflowFormatRegistry.js +2 -2
  257. package/dist/schema/index.d.ts +1 -1
  258. package/dist/schema/index.js +2 -2
  259. package/dist/schemas/v1/workflow.schema.json +22 -107
  260. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  261. package/dist/services/agentSpecExecutionService.js +59 -55
  262. package/dist/services/api.d.ts +18 -4
  263. package/dist/services/api.js +46 -43
  264. package/dist/services/apiVariableService.d.ts +1 -1
  265. package/dist/services/apiVariableService.js +41 -34
  266. package/dist/services/autoSaveService.js +8 -8
  267. package/dist/services/categoriesApi.d.ts +2 -2
  268. package/dist/services/categoriesApi.js +8 -8
  269. package/dist/services/draftStorage.d.ts +1 -1
  270. package/dist/services/draftStorage.js +11 -11
  271. package/dist/services/dynamicSchemaService.d.ts +1 -1
  272. package/dist/services/dynamicSchemaService.js +41 -39
  273. package/dist/services/globalSave.d.ts +2 -2
  274. package/dist/services/globalSave.js +53 -42
  275. package/dist/services/historyService.d.ts +1 -1
  276. package/dist/services/historyService.js +8 -8
  277. package/dist/services/interruptService.d.ts +1 -1
  278. package/dist/services/interruptService.js +35 -29
  279. package/dist/services/nodeExecutionService.d.ts +1 -1
  280. package/dist/services/nodeExecutionService.js +45 -44
  281. package/dist/services/playgroundService.d.ts +1 -1
  282. package/dist/services/playgroundService.js +29 -29
  283. package/dist/services/portConfigApi.d.ts +2 -2
  284. package/dist/services/portConfigApi.js +8 -8
  285. package/dist/services/settingsService.d.ts +2 -2
  286. package/dist/services/settingsService.js +25 -19
  287. package/dist/services/toastService.d.ts +4 -4
  288. package/dist/services/toastService.js +33 -33
  289. package/dist/services/variableService.d.ts +1 -1
  290. package/dist/services/variableService.js +36 -36
  291. package/dist/services/workflowStorage.d.ts +2 -2
  292. package/dist/services/workflowStorage.js +13 -13
  293. package/dist/settings/index.d.ts +7 -7
  294. package/dist/settings/index.js +6 -6
  295. package/dist/skins/default.d.ts +2 -0
  296. package/dist/skins/default.js +1 -0
  297. package/dist/skins/index.d.ts +13 -0
  298. package/dist/skins/index.js +30 -0
  299. package/dist/skins/slate.d.ts +2 -0
  300. package/dist/skins/slate.js +78 -0
  301. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  302. package/dist/stores/categoriesStore.svelte.js +5 -5
  303. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  304. package/dist/stores/editorStateMachine.svelte.js +65 -33
  305. package/dist/stores/historyStore.svelte.d.ts +4 -4
  306. package/dist/stores/historyStore.svelte.js +4 -4
  307. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  308. package/dist/stores/interruptStore.svelte.js +21 -21
  309. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  310. package/dist/stores/playgroundStore.svelte.js +25 -18
  311. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  312. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  313. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  314. package/dist/stores/settingsStore.svelte.js +62 -57
  315. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  316. package/dist/stores/workflowStore.svelte.js +50 -47
  317. package/dist/stories/CanvasDecorator.svelte +35 -32
  318. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  319. package/dist/stories/EdgeDecorator.svelte +125 -0
  320. package/dist/stories/EdgeDecorator.svelte.d.ts +17 -0
  321. package/dist/stories/NodeDecorator.svelte +59 -53
  322. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  323. package/dist/stories/utils.d.ts +2 -2
  324. package/dist/stories/utils.js +105 -67
  325. package/dist/styles/base.css +599 -595
  326. package/dist/styles/toast.css +14 -14
  327. package/dist/styles/tokens.css +409 -378
  328. package/dist/svelte-app.d.ts +9 -9
  329. package/dist/svelte-app.js +39 -39
  330. package/dist/themes/default.d.ts +2 -0
  331. package/dist/themes/default.js +9 -0
  332. package/dist/themes/index.d.ts +13 -0
  333. package/dist/themes/index.js +44 -0
  334. package/dist/themes/minimal.d.ts +2 -0
  335. package/dist/themes/minimal.js +11 -0
  336. package/dist/types/agentspec.d.ts +18 -18
  337. package/dist/types/agentspec.js +2 -2
  338. package/dist/types/auth.d.ts +1 -1
  339. package/dist/types/auth.js +6 -6
  340. package/dist/types/config.d.ts +6 -6
  341. package/dist/types/events.d.ts +2 -2
  342. package/dist/types/events.js +2 -2
  343. package/dist/types/index.d.ts +32 -32
  344. package/dist/types/index.js +6 -6
  345. package/dist/types/interrupt.d.ts +6 -6
  346. package/dist/types/interrupt.js +21 -21
  347. package/dist/types/interruptState.d.ts +12 -12
  348. package/dist/types/interruptState.js +66 -66
  349. package/dist/types/playground.d.ts +7 -7
  350. package/dist/types/playground.js +14 -14
  351. package/dist/types/settings.d.ts +5 -3
  352. package/dist/types/settings.js +25 -18
  353. package/dist/types/skin.d.ts +31 -0
  354. package/dist/types/skin.js +1 -0
  355. package/dist/types/theme.d.ts +35 -0
  356. package/dist/types/theme.js +1 -0
  357. package/dist/types/uischema.d.ts +4 -4
  358. package/dist/types/uischema.js +3 -3
  359. package/dist/utils/colors.d.ts +1 -1
  360. package/dist/utils/colors.js +97 -95
  361. package/dist/utils/config.d.ts +2 -2
  362. package/dist/utils/config.js +48 -48
  363. package/dist/utils/connections.d.ts +2 -2
  364. package/dist/utils/connections.js +15 -15
  365. package/dist/utils/errors.js +3 -3
  366. package/dist/utils/fetchWithAuth.d.ts +1 -1
  367. package/dist/utils/fetchWithAuth.js +2 -2
  368. package/dist/utils/handleIds.d.ts +2 -2
  369. package/dist/utils/handleIds.js +8 -8
  370. package/dist/utils/handlePositioning.d.ts +1 -1
  371. package/dist/utils/handlePositioning.js +2 -2
  372. package/dist/utils/icons.d.ts +1 -1
  373. package/dist/utils/icons.js +74 -74
  374. package/dist/utils/logger.d.ts +1 -1
  375. package/dist/utils/logger.js +7 -7
  376. package/dist/utils/nodeStatus.d.ts +1 -1
  377. package/dist/utils/nodeStatus.js +48 -48
  378. package/dist/utils/nodeTypes.d.ts +1 -1
  379. package/dist/utils/nodeTypes.js +21 -20
  380. package/dist/utils/nodeWrapper.d.ts +7 -7
  381. package/dist/utils/nodeWrapper.js +21 -19
  382. package/dist/utils/performanceUtils.d.ts +1 -1
  383. package/dist/utils/performanceUtils.js +2 -1
  384. package/dist/utils/sanitize.js +1 -1
  385. package/dist/utils/uischema.d.ts +2 -2
  386. package/dist/utils/uischema.js +8 -8
  387. package/dist/utils/validation.js +20 -8
  388. package/package.json +296 -291
@@ -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,11 +148,15 @@ 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 ? { 'flowdrop:author': workflow.metadata.author } : {}),
154
- ...(workflow.metadata?.tags ? { 'flowdrop:tags': workflow.metadata.tags } : {})
155
- }
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
+ },
156
160
  };
157
161
  }
158
162
  /**
@@ -209,18 +213,19 @@ export class AgentSpecAdapter {
209
213
  }
210
214
  }
211
215
  return {
212
- id: agentSpecFlow.metadata?.['flowdrop:workflow_id'] || uuidv4(),
216
+ id: agentSpecFlow.metadata?.["flowdrop:workflow_id"] ||
217
+ uuidv4(),
213
218
  name: agentSpecFlow.name,
214
219
  description: agentSpecFlow.description,
215
220
  nodes,
216
221
  edges,
217
222
  metadata: {
218
- version: agentSpecFlow.metadata?.['flowdrop:version'] || '1.0.0',
223
+ version: agentSpecFlow.metadata?.["flowdrop:version"] || "1.0.0",
219
224
  createdAt: new Date().toISOString(),
220
225
  updatedAt: new Date().toISOString(),
221
- author: agentSpecFlow.metadata?.['flowdrop:author'],
222
- tags: agentSpecFlow.metadata?.['flowdrop:tags']
223
- }
226
+ author: agentSpecFlow.metadata?.["flowdrop:author"],
227
+ tags: agentSpecFlow.metadata?.["flowdrop:tags"],
228
+ },
224
229
  };
225
230
  }
226
231
  /**
@@ -251,10 +256,10 @@ export class AgentSpecAdapter {
251
256
  const name = nodeIdToName.get(node.id) || node.id;
252
257
  // Convert data ports (skip trigger/tool ports — those are handled as edges)
253
258
  const dataInputs = node.data.metadata.inputs
254
- .filter((p) => p.dataType !== 'trigger' && p.dataType !== 'tool')
259
+ .filter((p) => p.dataType !== "trigger" && p.dataType !== "tool")
255
260
  .map((p) => nodePortToAgentSpecProperty(p));
256
261
  const dataOutputs = node.data.metadata.outputs
257
- .filter((p) => p.dataType !== 'trigger' && p.dataType !== 'tool')
262
+ .filter((p) => p.dataType !== "trigger" && p.dataType !== "tool")
258
263
  .map((p) => nodePortToAgentSpecProperty(p));
259
264
  // Build base node
260
265
  const base = {
@@ -264,10 +269,10 @@ export class AgentSpecAdapter {
264
269
  inputs: dataInputs.length > 0 ? dataInputs : undefined,
265
270
  outputs: dataOutputs.length > 0 ? dataOutputs : undefined,
266
271
  metadata: {
267
- 'flowdrop:position': node.position,
268
- 'flowdrop:node_id': node.id,
269
- 'flowdrop:node_type_id': node.data.metadata.id
270
- }
272
+ "flowdrop:position": node.position,
273
+ "flowdrop:node_id": node.id,
274
+ "flowdrop:node_type_id": node.data.metadata.id,
275
+ },
271
276
  };
272
277
  // Add type-specific attributes from config
273
278
  return this.addNodeSpecificAttributes(base, node);
@@ -278,7 +283,7 @@ export class AgentSpecAdapter {
278
283
  addNodeSpecificAttributes(asNode, fdNode) {
279
284
  const config = fdNode.data.config || {};
280
285
  switch (asNode.component_type) {
281
- case 'llm_node': {
286
+ case "llm_node": {
282
287
  const llmNode = asNode;
283
288
  if (config.prompt_template)
284
289
  llmNode.prompt_template = config.prompt_template;
@@ -288,19 +293,19 @@ export class AgentSpecAdapter {
288
293
  llmNode.llm_config = config.llm_config_ref;
289
294
  return llmNode;
290
295
  }
291
- case 'branching_node': {
296
+ case "branching_node": {
292
297
  const branchNode = asNode;
293
298
  const branches = config.branches;
294
299
  branchNode.branches = branches
295
300
  ? branches.map((b) => ({
296
301
  name: b.name,
297
302
  condition: b.condition || undefined,
298
- description: b.description || undefined
303
+ description: b.description || undefined,
299
304
  }))
300
305
  : [];
301
306
  return branchNode;
302
307
  }
303
- case 'api_node': {
308
+ case "api_node": {
304
309
  const apiNode = asNode;
305
310
  if (config.endpoint)
306
311
  apiNode.endpoint = config.endpoint;
@@ -309,30 +314,30 @@ export class AgentSpecAdapter {
309
314
  if (config.headers) {
310
315
  try {
311
316
  apiNode.headers =
312
- typeof config.headers === 'string'
317
+ typeof config.headers === "string"
313
318
  ? JSON.parse(config.headers)
314
319
  : config.headers;
315
320
  }
316
321
  catch (error) {
317
322
  // Ignore parse errors
318
- logger.warn('Failed to parse header JSON', error);
323
+ logger.warn("Failed to parse header JSON", error);
319
324
  }
320
325
  }
321
326
  return apiNode;
322
327
  }
323
- case 'agent_node': {
328
+ case "agent_node": {
324
329
  const agentNode = asNode;
325
330
  if (config.agent_ref)
326
331
  agentNode.agent = config.agent_ref;
327
332
  return agentNode;
328
333
  }
329
- case 'flow_node': {
334
+ case "flow_node": {
330
335
  const flowNode = asNode;
331
336
  if (config.flow_ref)
332
337
  flowNode.flow = config.flow_ref;
333
338
  return flowNode;
334
339
  }
335
- case 'map_node': {
340
+ case "map_node": {
336
341
  const mapNode = asNode;
337
342
  if (config.input_collection)
338
343
  mapNode.input_collection = config.input_collection;
@@ -342,7 +347,7 @@ export class AgentSpecAdapter {
342
347
  mapNode.map_flow = config.map_flow_ref;
343
348
  return mapNode;
344
349
  }
345
- case 'tool_node': {
350
+ case "tool_node": {
346
351
  const toolNode = asNode;
347
352
  if (config.tool_ref)
348
353
  toolNode.tool = config.tool_ref;
@@ -357,8 +362,8 @@ export class AgentSpecAdapter {
357
362
  */
358
363
  resolveComponentType(node) {
359
364
  // Check extensions first (round-trip preservation)
360
- const ext = node.data.metadata.extensions?.['agentspec:component_type'];
361
- if (ext && typeof ext === 'string') {
365
+ const ext = node.data.metadata.extensions?.["agentspec:component_type"];
366
+ if (ext && typeof ext === "string") {
362
367
  return ext;
363
368
  }
364
369
  // Infer from FlowDrop node type ID
@@ -368,22 +373,22 @@ export class AgentSpecAdapter {
368
373
  // Infer from FlowDrop visual type + category
369
374
  const nodeType = node.data.metadata.type;
370
375
  const category = node.data.metadata.category;
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';
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";
385
390
  // Default fallback
386
- return 'llm_node';
391
+ return "llm_node";
387
392
  }
388
393
  /**
389
394
  * Convert an Agent Spec node to a FlowDrop StandardNode.
@@ -394,14 +399,14 @@ export class AgentSpecAdapter {
394
399
  */
395
400
  convertNodeFromAgentSpec(asNode, nodeId, position) {
396
401
  // Restore position from metadata if available (round-trip)
397
- const savedPosition = asNode.metadata?.['flowdrop:position'];
402
+ const savedPosition = asNode.metadata?.["flowdrop:position"];
398
403
  const finalPosition = savedPosition || position;
399
404
  // Convert inputs/outputs to FlowDrop ports
400
- const dataInputs = (asNode.inputs || []).map((p) => agentSpecPropertyToNodePort(p, 'input'));
401
- const dataOutputs = (asNode.outputs || []).map((p) => agentSpecPropertyToNodePort(p, 'output'));
405
+ const dataInputs = (asNode.inputs || []).map((p) => agentSpecPropertyToNodePort(p, "input"));
406
+ const dataOutputs = (asNode.outputs || []).map((p) => agentSpecPropertyToNodePort(p, "output"));
402
407
  // Use lightweight adapter defaults (never throws on unknown types)
403
408
  const defaults = getComponentTypeDefaults(asNode.component_type);
404
- const nodeTypeId = asNode.metadata?.['flowdrop:node_type_id'] ||
409
+ const nodeTypeId = asNode.metadata?.["flowdrop:node_type_id"] ||
405
410
  `${AGENTSPEC_NAMESPACE}.${asNode.component_type}`;
406
411
  const metadata = {
407
412
  id: nodeTypeId,
@@ -409,18 +414,18 @@ export class AgentSpecAdapter {
409
414
  type: defaults.visualType,
410
415
  description: asNode.description || defaults.defaultDescription,
411
416
  category: defaults.category,
412
- version: '1.0.0',
417
+ version: "1.0.0",
413
418
  icon: defaults.icon,
414
419
  color: defaults.color,
415
420
  badge: defaults.badge,
416
421
  inputs: [...defaults.triggerInputs, ...dataInputs],
417
422
  outputs: [...defaults.triggerOutputs, ...dataOutputs],
418
- configSchema: { type: 'object', properties: {} },
419
- formats: ['agentspec'],
423
+ configSchema: { type: "object", properties: {} },
424
+ formats: ["agentspec"],
420
425
  extensions: {
421
- 'agentspec:component_type': asNode.component_type,
422
- 'agentspec:original_name': asNode.name
423
- }
426
+ "agentspec:component_type": asNode.component_type,
427
+ "agentspec:original_name": asNode.name,
428
+ },
424
429
  };
425
430
  // Build config from Agent Spec node-specific attributes
426
431
  const config = this.extractConfigFromAgentSpec(asNode);
@@ -431,8 +436,8 @@ export class AgentSpecAdapter {
431
436
  data: {
432
437
  label: asNode.name,
433
438
  config,
434
- metadata
435
- }
439
+ metadata,
440
+ },
436
441
  };
437
442
  }
438
443
  /**
@@ -441,7 +446,7 @@ export class AgentSpecAdapter {
441
446
  extractConfigFromAgentSpec(asNode) {
442
447
  const config = {};
443
448
  switch (asNode.component_type) {
444
- case 'llm_node': {
449
+ case "llm_node": {
445
450
  const llm = asNode;
446
451
  if (llm.prompt_template)
447
452
  config.prompt_template = llm.prompt_template;
@@ -449,21 +454,23 @@ export class AgentSpecAdapter {
449
454
  config.system_prompt = llm.system_prompt;
450
455
  if (llm.llm_config) {
451
456
  config.llm_config_ref =
452
- typeof llm.llm_config === 'string' ? llm.llm_config : llm.llm_config.name;
457
+ typeof llm.llm_config === "string"
458
+ ? llm.llm_config
459
+ : llm.llm_config.name;
453
460
  }
454
461
  break;
455
462
  }
456
- case 'branching_node': {
463
+ case "branching_node": {
457
464
  const branch = asNode;
458
465
  config.branches = branch.branches.map((b) => ({
459
466
  name: b.name,
460
467
  label: b.name,
461
- condition: b.condition || '',
462
- isDefault: !b.condition
468
+ condition: b.condition || "",
469
+ isDefault: !b.condition,
463
470
  }));
464
471
  break;
465
472
  }
466
- case 'api_node': {
473
+ case "api_node": {
467
474
  const api = asNode;
468
475
  if (api.endpoint)
469
476
  config.endpoint = api.endpoint;
@@ -473,35 +480,39 @@ export class AgentSpecAdapter {
473
480
  config.headers = JSON.stringify(api.headers, null, 2);
474
481
  break;
475
482
  }
476
- case 'agent_node': {
483
+ case "agent_node": {
477
484
  const agent = asNode;
478
485
  if (agent.agent) {
479
- config.agent_ref = typeof agent.agent === 'string' ? agent.agent : agent.agent.name;
486
+ config.agent_ref =
487
+ typeof agent.agent === "string" ? agent.agent : agent.agent.name;
480
488
  }
481
489
  break;
482
490
  }
483
- case 'flow_node': {
491
+ case "flow_node": {
484
492
  const flow = asNode;
485
493
  if (flow.flow) {
486
- config.flow_ref = typeof flow.flow === 'string' ? flow.flow : flow.flow.name;
494
+ config.flow_ref =
495
+ typeof flow.flow === "string" ? flow.flow : flow.flow.name;
487
496
  }
488
497
  break;
489
498
  }
490
- case 'map_node': {
499
+ case "map_node": {
491
500
  const map = asNode;
492
501
  if (map.input_collection)
493
502
  config.input_collection = map.input_collection;
494
503
  if (map.output_collection)
495
504
  config.output_collection = map.output_collection;
496
505
  if (map.map_flow) {
497
- config.map_flow_ref = typeof map.map_flow === 'string' ? map.map_flow : map.map_flow.name;
506
+ config.map_flow_ref =
507
+ typeof map.map_flow === "string" ? map.map_flow : map.map_flow.name;
498
508
  }
499
509
  break;
500
510
  }
501
- case 'tool_node': {
511
+ case "tool_node": {
502
512
  const tool = asNode;
503
513
  if (tool.tool) {
504
- config.tool_ref = typeof tool.tool === 'string' ? tool.tool : tool.tool.name;
514
+ config.tool_ref =
515
+ typeof tool.tool === "string" ? tool.tool : tool.tool.name;
505
516
  }
506
517
  break;
507
518
  }
@@ -522,10 +533,10 @@ export class AgentSpecAdapter {
522
533
  if (port)
523
534
  return port.dataType;
524
535
  // Check if it's a gateway branch (always trigger)
525
- if (node.data.metadata.type === 'gateway') {
536
+ if (node.data.metadata.type === "gateway") {
526
537
  const branches = node.data.config?.branches;
527
538
  if (branches?.some((b) => b.name === portId)) {
528
- return 'trigger';
539
+ return "trigger";
529
540
  }
530
541
  }
531
542
  // Check dynamic outputs
@@ -546,17 +557,17 @@ export class AgentSpecAdapter {
546
557
  const sourcePortId = extractPortId(edge.sourceHandle);
547
558
  // Determine from_branch for gateway nodes
548
559
  let fromBranch;
549
- if (sourceNode.data.metadata.type === 'gateway' && sourcePortId) {
560
+ if (sourceNode.data.metadata.type === "gateway" && sourcePortId) {
550
561
  const branches = sourceNode.data.config?.branches;
551
562
  if (branches?.some((b) => b.name === sourcePortId)) {
552
563
  fromBranch = sourcePortId;
553
564
  }
554
565
  }
555
566
  return {
556
- name: `${fromNode}_to_${toNode}${fromBranch ? `_${fromBranch}` : ''}`,
567
+ name: `${fromNode}_to_${toNode}${fromBranch ? `_${fromBranch}` : ""}`,
557
568
  from_node: fromNode,
558
569
  to_node: toNode,
559
- from_branch: fromBranch
570
+ from_branch: fromBranch,
560
571
  };
561
572
  }
562
573
  /**
@@ -565,14 +576,14 @@ export class AgentSpecAdapter {
565
576
  convertToDataFlowEdge(edge, nodeIdToName) {
566
577
  const sourceNode = nodeIdToName.get(edge.source) || edge.source;
567
578
  const destNode = nodeIdToName.get(edge.target) || edge.target;
568
- const sourceOutput = extractPortId(edge.sourceHandle) || 'output';
569
- const destInput = extractPortId(edge.targetHandle) || 'input';
579
+ const sourceOutput = extractPortId(edge.sourceHandle) || "output";
580
+ const destInput = extractPortId(edge.targetHandle) || "input";
570
581
  return {
571
582
  name: `${sourceNode}_${sourceOutput}_to_${destNode}_${destInput}`,
572
583
  source_node: sourceNode,
573
584
  source_output: sourceOutput,
574
585
  destination_node: destNode,
575
- destination_input: destInput
586
+ destination_input: destInput,
576
587
  };
577
588
  }
578
589
  /**
@@ -584,7 +595,7 @@ export class AgentSpecAdapter {
584
595
  if (!sourceId || !targetId)
585
596
  return null;
586
597
  // Determine source handle
587
- let sourcePortId = 'trigger'; // default for non-branch control flow
598
+ let sourcePortId = "trigger"; // default for non-branch control flow
588
599
  if (cfEdge.from_branch) {
589
600
  sourcePortId = cfEdge.from_branch;
590
601
  }
@@ -592,8 +603,8 @@ export class AgentSpecAdapter {
592
603
  id: uuidv4(),
593
604
  source: sourceId,
594
605
  target: targetId,
595
- sourceHandle: buildHandleId(sourceId, 'output', sourcePortId),
596
- targetHandle: buildHandleId(targetId, 'input', 'trigger')
606
+ sourceHandle: buildHandleId(sourceId, "output", sourcePortId),
607
+ targetHandle: buildHandleId(targetId, "input", "trigger"),
597
608
  };
598
609
  }
599
610
  /**
@@ -608,8 +619,8 @@ export class AgentSpecAdapter {
608
619
  id: uuidv4(),
609
620
  source: sourceId,
610
621
  target: targetId,
611
- sourceHandle: buildHandleId(sourceId, 'output', dfEdge.source_output),
612
- targetHandle: buildHandleId(targetId, 'input', dfEdge.destination_input)
622
+ sourceHandle: buildHandleId(sourceId, "output", dfEdge.source_output),
623
+ targetHandle: buildHandleId(targetId, "input", dfEdge.destination_input),
613
624
  };
614
625
  }
615
626
  /**
@@ -617,10 +628,10 @@ export class AgentSpecAdapter {
617
628
  */
618
629
  findStartNodeName(nodes, nodeIdToName) {
619
630
  // Look for an explicit start_node
620
- const startNode = nodes.find((n) => n.component_type === 'start_node');
631
+ const startNode = nodes.find((n) => n.component_type === "start_node");
621
632
  if (startNode)
622
633
  return startNode.name;
623
634
  // Fall back to the first node
624
- return nodes.length > 0 ? nodes[0].name : 'start';
635
+ return nodes.length > 0 ? nodes[0].name : "start";
625
636
  }
626
637
  }
@@ -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
  /** Layout configuration */
14
14
  export interface AutoLayoutConfig {
15
15
  /** Horizontal spacing between layers (px) */