@flowdrop/flowdrop 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -47
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +26 -26
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/AgentSpecAdapter.js +122 -133
- package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/agentAdapter.js +10 -10
- package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
- package/dist/adapters/agentspec/autoLayout.js +7 -9
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
- package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
- package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
- package/dist/adapters/agentspec/index.d.ts +10 -10
- package/dist/adapters/agentspec/index.js +6 -6
- package/dist/adapters/agentspec/validator.d.ts +2 -2
- package/dist/adapters/agentspec/validator.js +20 -22
- package/dist/api/enhanced-client.d.ts +3 -3
- package/dist/api/enhanced-client.js +72 -73
- package/dist/chat/commandClassifier.js +6 -6
- package/dist/chat/index.d.ts +5 -5
- package/dist/chat/index.js +4 -4
- package/dist/chat/responseParser.d.ts +6 -6
- package/dist/chat/responseParser.js +28 -24
- package/dist/commands/batch.d.ts +1 -1
- package/dist/commands/batch.js +5 -7
- package/dist/commands/executor.d.ts +2 -2
- package/dist/commands/executor.js +320 -231
- package/dist/commands/index.d.ts +6 -6
- package/dist/commands/index.js +5 -5
- package/dist/commands/parser.d.ts +1 -1
- package/dist/commands/parser.js +91 -74
- package/dist/commands/positioner.d.ts +2 -2
- package/dist/commands/positioner.js +1 -1
- package/dist/commands/storeIntegration.svelte.d.ts +2 -2
- package/dist/commands/storeIntegration.svelte.js +5 -5
- package/dist/commands/types.d.ts +42 -42
- package/dist/commands/types.js +2 -2
- package/dist/components/App.svelte +240 -294
- package/dist/components/App.svelte.d.ts +9 -9
- package/dist/components/CanvasBanner.stories.svelte +10 -16
- package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
- package/dist/components/CanvasBanner.svelte +2 -2
- package/dist/components/CanvasBanner.svelte.d.ts +1 -1
- package/dist/components/CanvasController.svelte +3 -4
- package/dist/components/ConfigForm.svelte +118 -256
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigMappingRow.svelte +7 -9
- package/dist/components/ConfigMappingRow.svelte.d.ts +1 -1
- package/dist/components/ConfigModal.svelte +3 -3
- package/dist/components/ConfigModal.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.stories.svelte +19 -19
- package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.svelte +9 -20
- package/dist/components/ConfigPanel.svelte.d.ts +1 -1
- package/dist/components/ConnectionLine.svelte +4 -4
- package/dist/components/EdgeRefresher.svelte +1 -1
- package/dist/components/FlowDropEdge.stories.svelte +110 -110
- package/dist/components/FlowDropEdge.svelte +9 -9
- package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
- package/dist/components/FlowDropZone.svelte +6 -9
- package/dist/components/FlowDropZone.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.stories.svelte +13 -13
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.svelte +3 -3
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.stories.svelte +4 -4
- package/dist/components/Logo.stories.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +3 -9
- package/dist/components/LogsSidebar.svelte +41 -48
- package/dist/components/LogsSidebar.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +10 -14
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.svelte +4 -6
- package/dist/components/Navbar.stories.svelte +19 -19
- package/dist/components/Navbar.stories.svelte.d.ts +1 -1
- package/dist/components/Navbar.svelte +28 -49
- package/dist/components/Navbar.svelte.d.ts +2 -2
- package/dist/components/NodeSidebar.svelte +42 -88
- package/dist/components/NodeSidebar.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.stories.svelte +19 -31
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.svelte +40 -55
- package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
- package/dist/components/NodeSwapPicker.svelte +20 -64
- package/dist/components/NodeSwapPicker.svelte.d.ts +1 -1
- package/dist/components/PipelineStatus.svelte +63 -89
- package/dist/components/PipelineStatus.svelte.d.ts +4 -4
- package/dist/components/PortCoordinateTracker.svelte +5 -7
- package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
- package/dist/components/PortMappingRow.svelte +20 -24
- package/dist/components/PortMappingRow.svelte.d.ts +2 -2
- package/dist/components/ReadOnlyDetails.svelte +1 -1
- package/dist/components/SchemaForm.stories.svelte +53 -53
- package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
- package/dist/components/SchemaForm.svelte +24 -51
- package/dist/components/SchemaForm.svelte.d.ts +2 -2
- package/dist/components/SettingsModal.svelte +6 -9
- package/dist/components/SettingsModal.svelte.d.ts +1 -1
- package/dist/components/SettingsPanel.svelte +138 -158
- package/dist/components/SettingsPanel.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.stories.svelte +16 -29
- package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.svelte +19 -19
- package/dist/components/StatusIcon.svelte.d.ts +2 -2
- package/dist/components/StatusLabel.stories.svelte +8 -8
- package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
- package/dist/components/SwapMappingEditor.svelte +35 -56
- package/dist/components/SwapMappingEditor.svelte.d.ts +2 -2
- package/dist/components/ThemeToggle.stories.svelte +10 -10
- package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
- package/dist/components/ThemeToggle.svelte +22 -33
- package/dist/components/ThemeToggle.svelte.d.ts +1 -1
- package/dist/components/UniversalNode.svelte +29 -41
- package/dist/components/UniversalNode.svelte.d.ts +3 -3
- package/dist/components/WorkflowEditor.svelte +113 -168
- package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
- package/dist/components/chat/AIChatPanel.svelte +272 -133
- package/dist/components/chat/AIChatPanel.svelte.d.ts +3 -3
- package/dist/components/chat/CommandPreview.svelte +74 -24
- package/dist/components/chat/CommandPreview.svelte.d.ts +1 -1
- package/dist/components/console/CommandConsole.stories.svelte +71 -53
- package/dist/components/console/CommandConsole.stories.svelte.d.ts +1 -1
- package/dist/components/console/CommandConsole.svelte +39 -35
- package/dist/components/console/CommandConsole.svelte.d.ts +2 -2
- package/dist/components/console/ConsoleAutocomplete.svelte +6 -3
- package/dist/components/console/ConsoleInput.svelte +148 -89
- package/dist/components/console/ConsoleInput.svelte.d.ts +1 -1
- package/dist/components/console/ConsoleOutput.svelte +5 -10
- package/dist/components/console/ConsoleOutput.svelte.d.ts +1 -1
- package/dist/components/console/formatters.d.ts +1 -1
- package/dist/components/console/formatters.js +27 -29
- package/dist/components/form/FormArray.svelte +75 -132
- package/dist/components/form/FormArray.svelte.d.ts +1 -1
- package/dist/components/form/FormAutocomplete.svelte +65 -108
- package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.stories.svelte +13 -16
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.svelte +2 -2
- package/dist/components/form/FormCodeEditor.svelte +42 -56
- package/dist/components/form/FormField.svelte +79 -90
- package/dist/components/form/FormField.svelte.d.ts +2 -2
- package/dist/components/form/FormFieldLight.svelte +72 -88
- package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.stories.svelte +14 -14
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.svelte +2 -9
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldset.svelte +3 -3
- package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
- package/dist/components/form/FormMarkdownEditor.svelte +123 -156
- package/dist/components/form/FormNumberField.stories.svelte +18 -18
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormNumberField.svelte +6 -6
- package/dist/components/form/FormRangeField.stories.svelte +13 -13
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormRangeField.svelte +4 -12
- package/dist/components/form/FormSelect.stories.svelte +21 -21
- package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormSelect.svelte +5 -5
- package/dist/components/form/FormSelect.svelte.d.ts +1 -1
- package/dist/components/form/FormTemplateEditor.svelte +126 -175
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.stories.svelte +17 -23
- package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.svelte +4 -4
- package/dist/components/form/FormTextarea.stories.svelte +18 -21
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextarea.svelte +4 -4
- package/dist/components/form/FormToggle.stories.svelte +13 -16
- package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormToggle.svelte +3 -3
- package/dist/components/form/FormUISchemaRenderer.svelte +12 -19
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
- package/dist/components/form/index.d.ts +19 -19
- package/dist/components/form/index.js +18 -18
- package/dist/components/form/templateAutocomplete.d.ts +2 -2
- package/dist/components/form/templateAutocomplete.js +55 -64
- package/dist/components/form/types.d.ts +6 -6
- package/dist/components/form/types.js +4 -9
- package/dist/components/icons/AlertCircleIcon.svelte +1 -6
- package/dist/components/icons/CogIcon.svelte +1 -6
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +27 -27
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ChoicePrompt.svelte +17 -41
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +17 -17
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.svelte +10 -16
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/FormPrompt.svelte +10 -15
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/InterruptBubble.svelte +87 -121
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +37 -37
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.svelte +55 -75
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +16 -17
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.svelte +13 -18
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/index.d.ts +6 -6
- package/dist/components/interrupt/index.js +6 -6
- package/dist/components/layouts/MainLayout.svelte +46 -84
- package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
- package/dist/components/nodes/GatewayNode.stories.svelte +64 -65
- package/dist/components/nodes/GatewayNode.svelte +37 -70
- package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
- package/dist/components/nodes/IdeaNode.stories.svelte +25 -26
- package/dist/components/nodes/IdeaNode.svelte +22 -36
- package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
- package/dist/components/nodes/NotesNode.stories.svelte +37 -38
- package/dist/components/nodes/NotesNode.svelte +28 -39
- package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SimpleNode.stories.svelte +137 -138
- package/dist/components/nodes/SimpleNode.svelte +44 -74
- package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SquareNode.stories.svelte +75 -75
- package/dist/components/nodes/SquareNode.svelte +42 -68
- package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
- package/dist/components/nodes/TerminalNode.stories.svelte +10 -10
- package/dist/components/nodes/TerminalNode.svelte +74 -112
- package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
- package/dist/components/nodes/ToolNode.stories.svelte +115 -116
- package/dist/components/nodes/ToolNode.svelte +31 -64
- package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
- package/dist/components/nodes/WorkflowNode.stories.svelte +84 -89
- package/dist/components/nodes/WorkflowNode.svelte +50 -103
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
- package/dist/components/playground/ChatPanel.svelte +47 -103
- package/dist/components/playground/ExecutionLogs.svelte +45 -68
- package/dist/components/playground/InputCollector.svelte +32 -51
- package/dist/components/playground/MessageBubble.stories.svelte +25 -25
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
- package/dist/components/playground/MessageBubble.svelte +54 -70
- package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
- package/dist/components/playground/Playground.svelte +60 -91
- package/dist/components/playground/Playground.svelte.d.ts +3 -3
- package/dist/components/playground/PlaygroundModal.svelte +8 -12
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
- package/dist/components/playground/SessionManager.svelte +34 -40
- package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.js +20 -20
- package/dist/config/constants.js +2 -2
- package/dist/config/defaultCategories.d.ts +1 -1
- package/dist/config/defaultCategories.js +86 -86
- package/dist/config/defaultPortConfig.d.ts +1 -1
- package/dist/config/defaultPortConfig.js +144 -144
- package/dist/config/endpoints.d.ts +4 -4
- package/dist/config/endpoints.js +68 -68
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +68 -68
- package/dist/core/index.js +38 -38
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +64 -64
- package/dist/editor/index.js +54 -54
- package/dist/form/code.d.ts +5 -5
- package/dist/form/code.js +14 -14
- package/dist/form/fieldRegistry.d.ts +3 -3
- package/dist/form/fieldRegistry.js +9 -11
- package/dist/form/full.d.ts +8 -8
- package/dist/form/full.js +9 -9
- package/dist/form/index.d.ts +18 -18
- package/dist/form/index.js +16 -16
- package/dist/form/markdown.d.ts +4 -4
- package/dist/form/markdown.js +8 -8
- package/dist/helpers/proximityConnect.d.ts +3 -3
- package/dist/helpers/proximityConnect.js +32 -34
- package/dist/helpers/workflowEditorHelper.d.ts +6 -6
- package/dist/helpers/workflowEditorHelper.js +64 -68
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/mocks/app-environment.js +2 -2
- package/dist/mocks/app-forms.js +1 -1
- package/dist/mocks/app-navigation.js +2 -2
- package/dist/mocks/app-stores.js +3 -3
- package/dist/playground/index.d.ts +19 -19
- package/dist/playground/index.js +16 -16
- package/dist/playground/mount.d.ts +3 -3
- package/dist/playground/mount.js +24 -24
- package/dist/registry/builtinFormats.js +13 -13
- package/dist/registry/builtinNodes.d.ts +2 -2
- package/dist/registry/builtinNodes.js +77 -77
- package/dist/registry/index.d.ts +4 -4
- package/dist/registry/index.js +4 -4
- package/dist/registry/nodeComponentRegistry.d.ts +8 -8
- package/dist/registry/nodeComponentRegistry.js +9 -11
- package/dist/registry/plugin.d.ts +2 -2
- package/dist/registry/plugin.js +11 -11
- package/dist/registry/workflowFormatRegistry.d.ts +3 -3
- package/dist/registry/workflowFormatRegistry.js +2 -2
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +2 -2
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +55 -56
- package/dist/services/api.d.ts +2 -2
- package/dist/services/api.js +37 -37
- package/dist/services/apiVariableService.d.ts +1 -1
- package/dist/services/apiVariableService.js +34 -41
- package/dist/services/autoSaveService.js +8 -8
- package/dist/services/categoriesApi.d.ts +2 -2
- package/dist/services/categoriesApi.js +8 -8
- package/dist/services/chatService.d.ts +1 -1
- package/dist/services/chatService.js +18 -18
- package/dist/services/draftStorage.d.ts +1 -1
- package/dist/services/draftStorage.js +11 -11
- package/dist/services/dynamicSchemaService.d.ts +1 -1
- package/dist/services/dynamicSchemaService.js +39 -41
- package/dist/services/globalSave.d.ts +2 -2
- package/dist/services/globalSave.js +38 -41
- package/dist/services/historyService.d.ts +1 -1
- package/dist/services/historyService.js +10 -10
- package/dist/services/interruptService.d.ts +1 -1
- package/dist/services/interruptService.js +29 -35
- package/dist/services/nodeExecutionService.d.ts +1 -1
- package/dist/services/nodeExecutionService.js +44 -45
- package/dist/services/playgroundService.d.ts +1 -1
- package/dist/services/playgroundService.js +29 -29
- package/dist/services/portConfigApi.d.ts +2 -2
- package/dist/services/portConfigApi.js +8 -8
- package/dist/services/settingsService.d.ts +2 -2
- package/dist/services/settingsService.js +19 -25
- package/dist/services/toastService.d.ts +4 -4
- package/dist/services/toastService.js +33 -33
- package/dist/services/variableService.d.ts +1 -1
- package/dist/services/variableService.js +36 -36
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +13 -13
- package/dist/settings/index.d.ts +7 -7
- package/dist/settings/index.js +6 -6
- package/dist/skins/default.d.ts +1 -1
- package/dist/skins/default.js +1 -1
- package/dist/skins/index.d.ts +3 -3
- package/dist/skins/index.js +7 -7
- package/dist/skins/slate.d.ts +1 -1
- package/dist/skins/slate.js +69 -69
- package/dist/stores/categoriesStore.svelte.d.ts +1 -1
- package/dist/stores/categoriesStore.svelte.js +5 -5
- package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
- package/dist/stores/editorStateMachine.svelte.js +34 -34
- package/dist/stores/historyStore.svelte.d.ts +4 -4
- package/dist/stores/historyStore.svelte.js +4 -4
- package/dist/stores/interruptStore.svelte.d.ts +3 -3
- package/dist/stores/interruptStore.svelte.js +21 -21
- package/dist/stores/playgroundStore.svelte.d.ts +2 -2
- package/dist/stores/playgroundStore.svelte.js +18 -21
- package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
- package/dist/stores/portCoordinateStore.svelte.js +10 -13
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +57 -62
- package/dist/stores/workflowStore.svelte.d.ts +3 -3
- package/dist/stores/workflowStore.svelte.js +46 -47
- package/dist/stories/CanvasDecorator.svelte +7 -10
- package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
- package/dist/stories/EdgeDecorator.svelte +28 -31
- package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
- package/dist/stories/NodeDecorator.svelte +14 -20
- package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
- package/dist/stories/utils.d.ts +2 -2
- package/dist/stories/utils.js +89 -93
- package/dist/styles/base.css +16 -50
- package/dist/styles/tokens.css +10 -28
- package/dist/svelte-app.d.ts +10 -10
- package/dist/svelte-app.js +39 -39
- package/dist/themes/default.d.ts +1 -1
- package/dist/themes/default.js +4 -4
- package/dist/themes/index.d.ts +3 -3
- package/dist/themes/index.js +11 -11
- package/dist/themes/minimal.d.ts +1 -1
- package/dist/themes/minimal.js +5 -5
- package/dist/types/agentspec.d.ts +18 -18
- package/dist/types/agentspec.js +2 -2
- package/dist/types/auth.d.ts +1 -1
- package/dist/types/auth.js +6 -6
- package/dist/types/chat.d.ts +2 -2
- package/dist/types/config.d.ts +6 -6
- package/dist/types/events.d.ts +3 -3
- package/dist/types/events.js +2 -2
- package/dist/types/index.d.ts +32 -32
- package/dist/types/index.js +6 -6
- package/dist/types/interrupt.d.ts +6 -6
- package/dist/types/interrupt.js +21 -21
- package/dist/types/interruptState.d.ts +12 -12
- package/dist/types/interruptState.js +66 -66
- package/dist/types/playground.d.ts +7 -7
- package/dist/types/playground.js +14 -14
- package/dist/types/settings.d.ts +7 -5
- package/dist/types/settings.js +19 -24
- package/dist/types/skin.d.ts +1 -1
- package/dist/types/theme.d.ts +2 -2
- package/dist/types/uischema.d.ts +4 -4
- package/dist/types/uischema.js +3 -3
- package/dist/utils/colors.d.ts +1 -1
- package/dist/utils/colors.js +95 -97
- package/dist/utils/config.d.ts +2 -2
- package/dist/utils/config.js +48 -48
- package/dist/utils/connections.d.ts +2 -2
- package/dist/utils/connections.js +15 -15
- package/dist/utils/edgeStyling.d.ts +2 -2
- package/dist/utils/edgeStyling.js +36 -39
- package/dist/utils/errors.js +3 -3
- package/dist/utils/fetchWithAuth.d.ts +1 -1
- package/dist/utils/fetchWithAuth.js +2 -2
- package/dist/utils/handleIds.d.ts +2 -2
- package/dist/utils/handleIds.js +8 -8
- package/dist/utils/handlePositioning.d.ts +1 -1
- package/dist/utils/handlePositioning.js +2 -2
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +74 -74
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/nodeIds.d.ts +1 -1
- package/dist/utils/nodeIds.js +1 -1
- package/dist/utils/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeSwap.d.ts +9 -9
- package/dist/utils/nodeSwap.js +52 -58
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +20 -21
- package/dist/utils/nodeWrapper.d.ts +7 -7
- package/dist/utils/nodeWrapper.js +19 -21
- package/dist/utils/performanceUtils.d.ts +1 -1
- package/dist/utils/performanceUtils.js +1 -2
- package/dist/utils/portUtils.d.ts +2 -2
- package/dist/utils/portUtils.js +1 -1
- package/dist/utils/sanitize.js +1 -1
- package/dist/utils/uischema.d.ts +2 -2
- package/dist/utils/uischema.js +8 -8
- package/dist/utils/validation.js +8 -8
- 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
|
|
13
|
-
import { computeAutoLayout } from
|
|
14
|
-
import { v4 as uuidv4 } from
|
|
15
|
-
import { logger } from
|
|
16
|
-
import { buildHandleId, extractPortId, extractDirection
|
|
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
|
|
28
|
-
dataType =
|
|
27
|
+
case 'string':
|
|
28
|
+
dataType = 'string';
|
|
29
29
|
break;
|
|
30
|
-
case
|
|
31
|
-
case
|
|
32
|
-
dataType =
|
|
30
|
+
case 'number':
|
|
31
|
+
case 'float':
|
|
32
|
+
dataType = 'number';
|
|
33
33
|
break;
|
|
34
|
-
case
|
|
35
|
-
dataType =
|
|
34
|
+
case 'integer':
|
|
35
|
+
dataType = 'number';
|
|
36
36
|
break;
|
|
37
|
-
case
|
|
38
|
-
dataType =
|
|
37
|
+
case 'boolean':
|
|
38
|
+
dataType = 'boolean';
|
|
39
39
|
break;
|
|
40
|
-
case
|
|
41
|
-
dataType =
|
|
40
|
+
case 'array':
|
|
41
|
+
dataType = 'array';
|
|
42
42
|
break;
|
|
43
|
-
case
|
|
44
|
-
dataType =
|
|
43
|
+
case 'object':
|
|
44
|
+
dataType = 'json';
|
|
45
45
|
break;
|
|
46
46
|
default:
|
|
47
|
-
dataType =
|
|
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
|
|
66
|
-
type =
|
|
65
|
+
case 'string':
|
|
66
|
+
type = 'string';
|
|
67
67
|
break;
|
|
68
|
-
case
|
|
69
|
-
case
|
|
70
|
-
type =
|
|
68
|
+
case 'number':
|
|
69
|
+
case 'float':
|
|
70
|
+
type = 'number';
|
|
71
71
|
break;
|
|
72
|
-
case
|
|
73
|
-
type =
|
|
72
|
+
case 'integer':
|
|
73
|
+
type = 'integer';
|
|
74
74
|
break;
|
|
75
|
-
case
|
|
76
|
-
type =
|
|
75
|
+
case 'boolean':
|
|
76
|
+
type = 'boolean';
|
|
77
77
|
break;
|
|
78
|
-
case
|
|
79
|
-
type =
|
|
78
|
+
case 'array':
|
|
79
|
+
type = 'array';
|
|
80
80
|
break;
|
|
81
|
-
case
|
|
82
|
-
case
|
|
83
|
-
type =
|
|
81
|
+
case 'json':
|
|
82
|
+
case 'object':
|
|
83
|
+
type = 'object';
|
|
84
84
|
break;
|
|
85
85
|
default:
|
|
86
|
-
type =
|
|
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 ===
|
|
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:
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
...(workflow.metadata?.author
|
|
154
|
-
|
|
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?.[
|
|
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?.[
|
|
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?.[
|
|
227
|
-
tags: agentSpecFlow.metadata?.[
|
|
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 !==
|
|
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 !==
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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
|
|
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
|
|
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
|
|
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 ===
|
|
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(
|
|
318
|
+
logger.warn('Failed to parse header JSON', error);
|
|
324
319
|
}
|
|
325
320
|
}
|
|
326
321
|
return apiNode;
|
|
327
322
|
}
|
|
328
|
-
case
|
|
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
|
|
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
|
|
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
|
|
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?.[
|
|
366
|
-
if (ext && typeof ext ===
|
|
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 ===
|
|
377
|
-
return
|
|
378
|
-
if (nodeType ===
|
|
379
|
-
return
|
|
380
|
-
if (nodeType ===
|
|
381
|
-
return
|
|
382
|
-
if (nodeType ===
|
|
383
|
-
return
|
|
384
|
-
if (category ===
|
|
385
|
-
return
|
|
386
|
-
if (category ===
|
|
387
|
-
return
|
|
388
|
-
if (category ===
|
|
389
|
-
return
|
|
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
|
|
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?.[
|
|
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,
|
|
406
|
-
const dataOutputs = (asNode.outputs || []).map((p) => agentSpecPropertyToNodePort(p,
|
|
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?.[
|
|
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:
|
|
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:
|
|
424
|
-
formats: [
|
|
418
|
+
configSchema: { type: 'object', properties: {} },
|
|
419
|
+
formats: ['agentspec'],
|
|
425
420
|
extensions: {
|
|
426
|
-
|
|
427
|
-
|
|
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
|
|
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 ===
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 ===
|
|
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
|
|
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 ===
|
|
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) ||
|
|
580
|
-
const destInput = extractPortId(edge.targetHandle) ||
|
|
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 =
|
|
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,
|
|
607
|
-
targetHandle: buildHandleId(targetId,
|
|
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,
|
|
623
|
-
targetHandle: buildHandleId(targetId,
|
|
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 ===
|
|
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 :
|
|
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
|
|
8
|
-
import type { StandardWorkflow } from
|
|
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
|
|
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
|
-
|
|
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:
|
|
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(
|
|
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 !==
|
|
66
|
-
llmConfig: doc.agent.llm_config && typeof doc.agent.llm_config !==
|
|
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
|
|
12
|
+
import type { AgentSpecFlow } from '../../types/agentspec.js';
|
|
13
13
|
/** Measured dimensions for a node */
|
|
14
14
|
export interface NodeDimensions {
|
|
15
15
|
width: number;
|