@flowdrop/flowdrop 1.4.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 +94 -51
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +27 -47
- 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 +52 -6
- package/dist/adapters/agentspec/autoLayout.js +118 -23
- 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.d.ts +19 -0
- package/dist/chat/commandClassifier.js +30 -0
- package/dist/chat/index.d.ts +27 -0
- package/dist/chat/index.js +32 -0
- package/dist/chat/responseParser.d.ts +21 -0
- package/dist/chat/responseParser.js +91 -0
- package/dist/commands/batch.d.ts +18 -0
- package/dist/commands/batch.js +54 -0
- package/dist/commands/executor.d.ts +37 -0
- package/dist/commands/executor.js +1133 -0
- package/dist/commands/index.d.ts +14 -0
- package/dist/commands/index.js +17 -0
- package/dist/commands/parser.d.ts +16 -0
- package/dist/commands/parser.js +295 -0
- package/dist/commands/positioner.d.ts +19 -0
- package/dist/commands/positioner.js +33 -0
- package/dist/commands/storeIntegration.svelte.d.ts +16 -0
- package/dist/commands/storeIntegration.svelte.js +67 -0
- package/dist/commands/types.d.ts +343 -0
- package/dist/commands/types.js +45 -0
- package/dist/components/App.svelte +522 -237
- package/dist/components/App.svelte.d.ts +11 -8
- 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 +37 -0
- package/dist/components/CanvasController.svelte.d.ts +32 -0
- package/dist/components/ConfigForm.svelte +118 -256
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigMappingRow.svelte +128 -0
- package/dist/components/ConfigMappingRow.svelte.d.ts +8 -0
- 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 +57 -19
- package/dist/components/ConfigPanel.svelte.d.ts +3 -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 +11 -19
- 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 +46 -53
- 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 +55 -135
- 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 +493 -0
- package/dist/components/NodeSwapPicker.svelte.d.ts +16 -0
- 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 +205 -0
- package/dist/components/PortMappingRow.svelte.d.ts +12 -0
- 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 +529 -0
- package/dist/components/SwapMappingEditor.svelte.d.ts +12 -0
- 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 +210 -170
- package/dist/components/WorkflowEditor.svelte.d.ts +12 -4
- package/dist/components/chat/AIChatPanel.svelte +797 -0
- package/dist/components/chat/AIChatPanel.svelte.d.ts +13 -0
- package/dist/components/chat/CommandPreview.svelte +234 -0
- package/dist/components/chat/CommandPreview.svelte.d.ts +9 -0
- package/dist/components/console/CommandConsole.stories.svelte +111 -0
- package/dist/components/console/CommandConsole.stories.svelte.d.ts +27 -0
- package/dist/components/console/CommandConsole.svelte +263 -0
- package/dist/components/console/CommandConsole.svelte.d.ts +11 -0
- package/dist/components/console/ConsoleAutocomplete.svelte +142 -0
- package/dist/components/console/ConsoleAutocomplete.svelte.d.ts +21 -0
- package/dist/components/console/ConsoleInput.svelte +771 -0
- package/dist/components/console/ConsoleInput.svelte.d.ts +16 -0
- package/dist/components/console/ConsoleOutput.svelte +116 -0
- package/dist/components/console/ConsoleOutput.svelte.d.ts +11 -0
- package/dist/components/console/formatters.d.ts +26 -0
- package/dist/components/console/formatters.js +116 -0
- 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 -5
- package/dist/components/interrupt/index.js +6 -5
- 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 +12 -4
- package/dist/config/endpoints.js +70 -65
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +68 -63
- package/dist/core/index.js +44 -35
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +64 -62
- package/dist/editor/index.js +57 -55
- 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 +40 -35
- package/dist/helpers/workflowEditorHelper.d.ts +8 -58
- package/dist/helpers/workflowEditorHelper.js +73 -292
- 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/schemas/v1/workflow.schema.json +107 -22
- 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 +65 -0
- package/dist/services/chatService.js +131 -0
- 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 +7 -5
- package/dist/services/historyService.js +29 -14
- 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 +27 -22
- package/dist/stores/playgroundStore.svelte.d.ts +3 -3
- package/dist/stores/playgroundStore.svelte.js +29 -23
- package/dist/stores/portCoordinateStore.svelte.d.ts +6 -2
- package/dist/stores/portCoordinateStore.svelte.js +30 -39
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +57 -62
- package/dist/stores/workflowStore.svelte.d.ts +34 -5
- package/dist/stores/workflowStore.svelte.js +127 -108
- 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 +63 -0
- package/dist/types/chat.js +9 -0
- package/dist/types/config.d.ts +6 -6
- package/dist/types/events.d.ts +28 -2
- package/dist/types/events.js +2 -1
- package/dist/types/index.d.ts +40 -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 +12 -4
- package/dist/types/settings.js +21 -23
- 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 +42 -0
- package/dist/utils/edgeStyling.js +173 -0
- 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 +31 -0
- package/dist/utils/nodeIds.js +42 -0
- package/dist/utils/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeSwap.d.ts +221 -0
- package/dist/utils/nodeSwap.js +680 -0
- 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 +12 -11
- package/dist/helpers/nodeLayoutHelper.d.ts +0 -14
- package/dist/helpers/nodeLayoutHelper.js +0 -19
|
@@ -2,241 +2,44 @@
|
|
|
2
2
|
* Workflow Editor Helper
|
|
3
3
|
* Contains business logic for workflow operations
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
5
|
+
import { hasCycles, hasInvalidCycles } from '../utils/connections.js';
|
|
6
|
+
import { workflowApi, nodeApi, setEndpointConfig } from '../services/api.js';
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import { workflowActions } from '../stores/workflowStore.svelte.js';
|
|
9
|
+
import { nodeExecutionService } from '../services/nodeExecutionService.js';
|
|
10
|
+
import { WorkflowAdapter } from '../adapters/WorkflowAdapter.js';
|
|
11
|
+
import { AgentSpecAdapter } from '../adapters/agentspec/AgentSpecAdapter.js';
|
|
12
|
+
import { validateForAgentSpecExport } from '../adapters/agentspec/validator.js';
|
|
13
|
+
import { extractPortId } from '../utils/handleIds.js';
|
|
14
|
+
import { logger } from '../utils/logger.js';
|
|
15
|
+
import { generateNodeId, extractConfigDefaults } from '../utils/nodeIds.js';
|
|
16
|
+
import { applyConnectionStyling as applyConnectionStylingUtil, updateEdgeStyles as updateEdgeStylesUtil, isGatewayBranch as isGatewayBranchUtil, getPortDataType as getPortDataTypeUtil, getEdgeCategory as getEdgeCategoryUtil, getEdgeCategoryWithLoopback as getEdgeCategoryWithLoopbackUtil } from '../utils/edgeStyling.js';
|
|
17
|
+
export { generateNodeId, extractConfigDefaults } from '../utils/nodeIds.js';
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* Example: boolean_gateway.1, calculator.2
|
|
21
|
-
*/
|
|
22
|
-
export function generateNodeId(nodeTypeId, existingNodes) {
|
|
23
|
-
// Count how many nodes of this type already exist
|
|
24
|
-
const existingNodeIds = existingNodes
|
|
25
|
-
.filter((node) => node.data?.metadata?.id === nodeTypeId)
|
|
26
|
-
.map((node) => node.id);
|
|
27
|
-
// Extract the numbers from existing IDs with the same prefix
|
|
28
|
-
const existingNumbers = existingNodeIds
|
|
29
|
-
.map((id) => {
|
|
30
|
-
const match = id.match(new RegExp(`^${nodeTypeId}\\.(\\d+)$`));
|
|
31
|
-
return match ? parseInt(match[1], 10) : 0;
|
|
32
|
-
})
|
|
33
|
-
.filter((num) => num > 0);
|
|
34
|
-
// Find the next available number (highest + 1)
|
|
35
|
-
const nextNumber = existingNumbers.length > 0 ? Math.max(...existingNumbers) + 1 : 1;
|
|
36
|
-
return `${nodeTypeId}.${nextNumber}`;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Edge styling configuration based on source port data type
|
|
19
|
+
* Edge styling configuration based on source port data type.
|
|
20
|
+
* Delegates to standalone functions in utils/edgeStyling.ts.
|
|
40
21
|
*/
|
|
41
22
|
export class EdgeStylingHelper {
|
|
42
|
-
/**
|
|
43
|
-
* Extract the port ID from a handle ID
|
|
44
|
-
* @param handleId - The handle ID string (e.g., "sample-node.1-output-trigger" or "trigger")
|
|
45
|
-
* @returns The port ID (e.g., "trigger") or the handleId itself for short format
|
|
46
|
-
*/
|
|
47
23
|
static extractPortIdFromHandle(handleId) {
|
|
48
24
|
return extractPortId(handleId);
|
|
49
25
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if a port ID matches a dynamic branch in a Gateway node
|
|
52
|
-
* Gateway nodes store branches in config.branches array
|
|
53
|
-
* @param node - The workflow node to check
|
|
54
|
-
* @param portId - The port ID to look up
|
|
55
|
-
* @returns true if the portId matches a gateway branch
|
|
56
|
-
*/
|
|
57
26
|
static isGatewayBranch(node, portId) {
|
|
58
|
-
|
|
59
|
-
const nodeType = node.data?.metadata?.type || node.type;
|
|
60
|
-
if (nodeType !== "gateway") {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
// Check if the portId matches a branch name in config.branches
|
|
64
|
-
const branches = node.data?.config?.branches;
|
|
65
|
-
if (!branches || !Array.isArray(branches)) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
return branches.some((branch) => branch.name === portId);
|
|
27
|
+
return isGatewayBranchUtil(node, portId);
|
|
69
28
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Get the data type of a port from a node's metadata
|
|
72
|
-
* Also handles dynamic ports like Gateway branches
|
|
73
|
-
* @param node - The workflow node containing the port
|
|
74
|
-
* @param portId - The port ID to look up
|
|
75
|
-
* @param portType - Whether to look in "inputs" or "outputs"
|
|
76
|
-
* @returns The port's dataType or null if not found
|
|
77
|
-
*/
|
|
78
29
|
static getPortDataType(node, portId, portType) {
|
|
79
|
-
|
|
80
|
-
const ports = portType === "output"
|
|
81
|
-
? node.data?.metadata?.outputs
|
|
82
|
-
: node.data?.metadata?.inputs;
|
|
83
|
-
if (ports && Array.isArray(ports)) {
|
|
84
|
-
const port = ports.find((p) => p.id === portId);
|
|
85
|
-
if (port?.dataType) {
|
|
86
|
-
return port.dataType;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Check dynamic ports from config (dynamicInputs/dynamicOutputs)
|
|
90
|
-
const dynamicKey = portType === "output" ? "dynamicOutputs" : "dynamicInputs";
|
|
91
|
-
const dynamicPorts = node.data?.config?.[dynamicKey];
|
|
92
|
-
if (dynamicPorts && Array.isArray(dynamicPorts)) {
|
|
93
|
-
const dynamicPort = dynamicPorts.find((p) => p.name === portId);
|
|
94
|
-
if (dynamicPort?.dataType) {
|
|
95
|
-
return dynamicPort.dataType;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// For output ports, also check dynamic Gateway branches
|
|
99
|
-
// Gateway branches are always trigger type (control flow)
|
|
100
|
-
if (portType === "output" && this.isGatewayBranch(node, portId)) {
|
|
101
|
-
return "trigger";
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
30
|
+
return getPortDataTypeUtil(node, portId, portType);
|
|
104
31
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Determine the edge category based on source port data type
|
|
107
|
-
* Note: This method does not check for loopback edges.
|
|
108
|
-
* Use getEdgeCategoryWithLoopback() for full edge categorization.
|
|
109
|
-
*
|
|
110
|
-
* @param sourcePortDataType - The data type of the source output port
|
|
111
|
-
* @returns The edge category for styling
|
|
112
|
-
*/
|
|
113
32
|
static getEdgeCategory(sourcePortDataType) {
|
|
114
|
-
|
|
115
|
-
return "trigger";
|
|
116
|
-
}
|
|
117
|
-
if (sourcePortDataType === "tool") {
|
|
118
|
-
return "tool";
|
|
119
|
-
}
|
|
120
|
-
// All other data types (string, number, boolean, array, etc.) are "data" edges
|
|
121
|
-
return "data";
|
|
33
|
+
return getEdgeCategoryUtil(sourcePortDataType);
|
|
122
34
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Determine the full edge category including loopback detection
|
|
125
|
-
* Loopback edges take precedence over source port data type
|
|
126
|
-
*
|
|
127
|
-
* @param edge - The edge to categorize
|
|
128
|
-
* @param sourcePortDataType - The data type of the source output port
|
|
129
|
-
* @returns The edge category for styling
|
|
130
|
-
*/
|
|
131
35
|
static getEdgeCategoryWithLoopback(edge, sourcePortDataType) {
|
|
132
|
-
|
|
133
|
-
// Check this first as it takes precedence
|
|
134
|
-
if (isLoopbackEdge(edge)) {
|
|
135
|
-
return "loopback";
|
|
136
|
-
}
|
|
137
|
-
// Fall back to source port data type categorization
|
|
138
|
-
return this.getEdgeCategory(sourcePortDataType);
|
|
36
|
+
return getEdgeCategoryWithLoopbackUtil(edge, sourcePortDataType);
|
|
139
37
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Apply custom styling to connection edges based on edge type:
|
|
142
|
-
* - Loopback: Dashed gray line for loop iteration (targets loop_back port)
|
|
143
|
-
* - Trigger ports: Solid black line with arrow
|
|
144
|
-
* - Tool ports: Dashed amber line with arrow
|
|
145
|
-
* - Data ports: Normal gray line with arrow
|
|
146
|
-
*/
|
|
147
38
|
static applyConnectionStyling(edge, sourceNode, targetNode) {
|
|
148
|
-
|
|
149
|
-
const sourcePortId = this.extractPortIdFromHandle(edge.sourceHandle);
|
|
150
|
-
// Get the source port's data type
|
|
151
|
-
const sourcePortDataType = sourcePortId
|
|
152
|
-
? this.getPortDataType(sourceNode, sourcePortId, "output")
|
|
153
|
-
: null;
|
|
154
|
-
// Determine edge category (loopback takes precedence)
|
|
155
|
-
const edgeCategory = this.getEdgeCategoryWithLoopback(edge, sourcePortDataType);
|
|
156
|
-
// Apply styling based on edge category
|
|
157
|
-
// Marker colors use CSS custom properties so they respond to theme changes automatically
|
|
158
|
-
switch (edgeCategory) {
|
|
159
|
-
case "loopback":
|
|
160
|
-
// Loopback edges: dashed gray line for loop iteration
|
|
161
|
-
edge.style =
|
|
162
|
-
"stroke: var(--fd-edge-loopback); stroke-dasharray: var(--fd-edge-loopback-dasharray); stroke-width: var(--fd-edge-loopback-width); opacity: var(--fd-edge-loopback-opacity);";
|
|
163
|
-
edge.class = "flowdrop--edge--loopback";
|
|
164
|
-
edge.markerEnd = {
|
|
165
|
-
type: MarkerType.ArrowClosed,
|
|
166
|
-
...EDGE_MARKER_SIZES.loopback,
|
|
167
|
-
color: "var(--fd-edge-loopback)",
|
|
168
|
-
};
|
|
169
|
-
break;
|
|
170
|
-
case "trigger":
|
|
171
|
-
// Trigger edges: solid dark line for control flow
|
|
172
|
-
edge.style =
|
|
173
|
-
"stroke: var(--fd-edge-trigger); stroke-width: var(--fd-edge-trigger-width);";
|
|
174
|
-
edge.class = "flowdrop--edge--trigger";
|
|
175
|
-
edge.markerEnd = {
|
|
176
|
-
type: MarkerType.ArrowClosed,
|
|
177
|
-
...EDGE_MARKER_SIZES.trigger,
|
|
178
|
-
color: "var(--fd-edge-trigger)",
|
|
179
|
-
};
|
|
180
|
-
break;
|
|
181
|
-
case "tool":
|
|
182
|
-
// Tool edges: dashed amber line
|
|
183
|
-
edge.style = "stroke: var(--fd-edge-tool); stroke-dasharray: 5 3;";
|
|
184
|
-
edge.class = "flowdrop--edge--tool";
|
|
185
|
-
edge.markerEnd = {
|
|
186
|
-
type: MarkerType.ArrowClosed,
|
|
187
|
-
...EDGE_MARKER_SIZES.tool,
|
|
188
|
-
color: "var(--fd-edge-tool)",
|
|
189
|
-
};
|
|
190
|
-
break;
|
|
191
|
-
case "data":
|
|
192
|
-
default:
|
|
193
|
-
// Data edges: normal gray line
|
|
194
|
-
edge.style = "stroke: var(--fd-edge-data);";
|
|
195
|
-
edge.class = "flowdrop--edge--data";
|
|
196
|
-
edge.markerEnd = {
|
|
197
|
-
type: MarkerType.ArrowClosed,
|
|
198
|
-
...EDGE_MARKER_SIZES.data,
|
|
199
|
-
color: "var(--fd-edge-data)",
|
|
200
|
-
};
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
// Store metadata in edge data for API and persistence
|
|
204
|
-
edge.data = {
|
|
205
|
-
...edge.data,
|
|
206
|
-
metadata: {
|
|
207
|
-
...(edge.data?.metadata || {}),
|
|
208
|
-
edgeType: edgeCategory,
|
|
209
|
-
sourcePortDataType: sourcePortDataType ?? undefined,
|
|
210
|
-
},
|
|
211
|
-
targetNodeType: targetNode.type,
|
|
212
|
-
targetCategory: targetNode.data.metadata.category,
|
|
213
|
-
};
|
|
39
|
+
applyConnectionStylingUtil(edge, sourceNode, targetNode);
|
|
214
40
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Update existing edges with custom styling rules
|
|
217
|
-
*/
|
|
218
41
|
static updateEdgeStyles(edges, nodes) {
|
|
219
|
-
return edges
|
|
220
|
-
// Find source and target nodes
|
|
221
|
-
const sourceNode = nodes.find((node) => node.id === edge.source);
|
|
222
|
-
const targetNode = nodes.find((node) => node.id === edge.target);
|
|
223
|
-
// Create a copy of the edge
|
|
224
|
-
const updatedEdge = { ...edge };
|
|
225
|
-
if (!sourceNode || !targetNode) {
|
|
226
|
-
// Set default edgeType even when nodes are not found
|
|
227
|
-
updatedEdge.data = {
|
|
228
|
-
...updatedEdge.data,
|
|
229
|
-
metadata: {
|
|
230
|
-
...(updatedEdge.data?.metadata || {}),
|
|
231
|
-
edgeType: "data",
|
|
232
|
-
},
|
|
233
|
-
};
|
|
234
|
-
return updatedEdge;
|
|
235
|
-
}
|
|
236
|
-
// Apply full styling when nodes are available
|
|
237
|
-
this.applyConnectionStyling(updatedEdge, sourceNode, targetNode);
|
|
238
|
-
return updatedEdge;
|
|
239
|
-
});
|
|
42
|
+
return updateEdgeStylesUtil(edges, nodes);
|
|
240
43
|
}
|
|
241
44
|
}
|
|
242
45
|
/**
|
|
@@ -257,33 +60,29 @@ export class NodeOperationsHelper {
|
|
|
257
60
|
return fetchedNodes;
|
|
258
61
|
}
|
|
259
62
|
catch (error) {
|
|
260
|
-
logger.error(
|
|
63
|
+
logger.error('Failed to load nodes from API:', error);
|
|
261
64
|
// Use fallback sample nodes
|
|
262
65
|
return [
|
|
263
66
|
{
|
|
264
|
-
id:
|
|
265
|
-
name:
|
|
266
|
-
category:
|
|
267
|
-
description:
|
|
268
|
-
version:
|
|
269
|
-
icon:
|
|
67
|
+
id: 'text-input',
|
|
68
|
+
name: 'Text Input',
|
|
69
|
+
category: 'inputs',
|
|
70
|
+
description: 'Simple text input field',
|
|
71
|
+
version: '1.0.0',
|
|
72
|
+
icon: 'mdi:text-box',
|
|
270
73
|
inputs: [],
|
|
271
|
-
outputs: [
|
|
272
|
-
{ id: "text", name: "text", type: "output", dataType: "string" },
|
|
273
|
-
],
|
|
74
|
+
outputs: [{ id: 'text', name: 'text', type: 'output', dataType: 'string' }]
|
|
274
75
|
},
|
|
275
76
|
{
|
|
276
|
-
id:
|
|
277
|
-
name:
|
|
278
|
-
category:
|
|
279
|
-
description:
|
|
280
|
-
version:
|
|
281
|
-
icon:
|
|
282
|
-
inputs: [
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
outputs: [],
|
|
286
|
-
},
|
|
77
|
+
id: 'text-output',
|
|
78
|
+
name: 'Text Output',
|
|
79
|
+
category: 'outputs',
|
|
80
|
+
description: 'Display text output',
|
|
81
|
+
version: '1.0.0',
|
|
82
|
+
icon: 'mdi:text-box-outline',
|
|
83
|
+
inputs: [{ id: 'text', name: 'text', type: 'input', dataType: 'string' }],
|
|
84
|
+
outputs: []
|
|
85
|
+
}
|
|
287
86
|
];
|
|
288
87
|
}
|
|
289
88
|
}
|
|
@@ -302,7 +101,7 @@ export class NodeOperationsHelper {
|
|
|
302
101
|
return executionInfo;
|
|
303
102
|
}
|
|
304
103
|
catch (error) {
|
|
305
|
-
logger.error(
|
|
104
|
+
logger.error('Failed to load node execution info:', error);
|
|
306
105
|
return {};
|
|
307
106
|
}
|
|
308
107
|
}
|
|
@@ -315,7 +114,7 @@ export class NodeOperationsHelper {
|
|
|
315
114
|
// Handle both old format (with type: "node") and new format (direct NodeMetadata)
|
|
316
115
|
let nodeType;
|
|
317
116
|
let nodeData;
|
|
318
|
-
if (parsedData.type ===
|
|
117
|
+
if (parsedData.type === 'node') {
|
|
319
118
|
// Old format from sidebar
|
|
320
119
|
nodeType = parsedData.nodeData.metadata;
|
|
321
120
|
nodeData = parsedData.nodeData;
|
|
@@ -323,28 +122,10 @@ export class NodeOperationsHelper {
|
|
|
323
122
|
else {
|
|
324
123
|
// New format (direct NodeMetadata)
|
|
325
124
|
nodeType = parsedData;
|
|
326
|
-
// Extract initial config from configSchema
|
|
327
|
-
let initialConfig = {};
|
|
328
|
-
if (nodeType.configSchema &&
|
|
329
|
-
typeof nodeType.configSchema === "object") {
|
|
330
|
-
// If configSchema is a JSON Schema, extract default values
|
|
331
|
-
if (nodeType.configSchema.properties) {
|
|
332
|
-
// JSON Schema format - extract defaults
|
|
333
|
-
Object.entries(nodeType.configSchema.properties).forEach(([key, prop]) => {
|
|
334
|
-
if (prop && typeof prop === "object" && "default" in prop) {
|
|
335
|
-
initialConfig[key] = prop.default;
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
// Simple object format - use as is
|
|
341
|
-
initialConfig = { ...nodeType.configSchema };
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
125
|
nodeData = {
|
|
345
126
|
label: nodeType.name,
|
|
346
|
-
config:
|
|
347
|
-
metadata: nodeType
|
|
127
|
+
config: extractConfigDefaults(nodeType.configSchema),
|
|
128
|
+
metadata: nodeType
|
|
348
129
|
};
|
|
349
130
|
}
|
|
350
131
|
// Generate node ID based on node type and existing nodes
|
|
@@ -353,18 +134,18 @@ export class NodeOperationsHelper {
|
|
|
353
134
|
// UniversalNode component handles internal switching based on metadata and config
|
|
354
135
|
const newNode = {
|
|
355
136
|
id: newNodeId,
|
|
356
|
-
type:
|
|
137
|
+
type: 'universalNode',
|
|
357
138
|
position, // Use the position calculated from the drop event
|
|
358
139
|
deletable: true,
|
|
359
140
|
data: {
|
|
360
141
|
...nodeData,
|
|
361
|
-
nodeId: newNodeId
|
|
362
|
-
}
|
|
142
|
+
nodeId: newNodeId // Use the same ID
|
|
143
|
+
}
|
|
363
144
|
};
|
|
364
145
|
return newNode;
|
|
365
146
|
}
|
|
366
147
|
catch (error) {
|
|
367
|
-
logger.error(
|
|
148
|
+
logger.error('Error parsing node data:', error);
|
|
368
149
|
return null;
|
|
369
150
|
}
|
|
370
151
|
}
|
|
@@ -379,12 +160,12 @@ export class WorkflowOperationsHelper {
|
|
|
379
160
|
static generateMetadata(existingMetadata) {
|
|
380
161
|
const now = new Date().toISOString();
|
|
381
162
|
return {
|
|
382
|
-
version:
|
|
163
|
+
version: '1.0.0',
|
|
383
164
|
createdAt: now,
|
|
384
165
|
...(existingMetadata ?? {}),
|
|
385
166
|
updatedAt: now,
|
|
386
167
|
versionId: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
387
|
-
updateNumber: (existingMetadata?.updateNumber || 0) + 1
|
|
168
|
+
updateNumber: (existingMetadata?.updateNumber || 0) + 1
|
|
388
169
|
};
|
|
389
170
|
}
|
|
390
171
|
/**
|
|
@@ -395,7 +176,7 @@ export class WorkflowOperationsHelper {
|
|
|
395
176
|
...workflow,
|
|
396
177
|
nodes,
|
|
397
178
|
edges,
|
|
398
|
-
metadata: this.generateMetadata(workflow.metadata)
|
|
179
|
+
metadata: this.generateMetadata(workflow.metadata)
|
|
399
180
|
};
|
|
400
181
|
}
|
|
401
182
|
/**
|
|
@@ -406,7 +187,7 @@ export class WorkflowOperationsHelper {
|
|
|
406
187
|
...workflow,
|
|
407
188
|
nodes: [],
|
|
408
189
|
edges: [],
|
|
409
|
-
metadata: this.generateMetadata(workflow.metadata)
|
|
190
|
+
metadata: this.generateMetadata(workflow.metadata)
|
|
410
191
|
};
|
|
411
192
|
}
|
|
412
193
|
/**
|
|
@@ -418,10 +199,10 @@ export class WorkflowOperationsHelper {
|
|
|
418
199
|
nodes: workflow.nodes.map((node) => node.id === nodeId
|
|
419
200
|
? {
|
|
420
201
|
...node,
|
|
421
|
-
data: { ...node.data, config: { ...newConfig } }
|
|
202
|
+
data: { ...node.data, config: { ...newConfig } }
|
|
422
203
|
}
|
|
423
204
|
: node),
|
|
424
|
-
metadata: this.generateMetadata(workflow.metadata)
|
|
205
|
+
metadata: this.generateMetadata(workflow.metadata)
|
|
425
206
|
};
|
|
426
207
|
}
|
|
427
208
|
/**
|
|
@@ -431,7 +212,7 @@ export class WorkflowOperationsHelper {
|
|
|
431
212
|
return {
|
|
432
213
|
...workflow,
|
|
433
214
|
nodes: [...workflow.nodes, node],
|
|
434
|
-
metadata: this.generateMetadata(workflow.metadata)
|
|
215
|
+
metadata: this.generateMetadata(workflow.metadata)
|
|
435
216
|
};
|
|
436
217
|
}
|
|
437
218
|
/**
|
|
@@ -439,7 +220,7 @@ export class WorkflowOperationsHelper {
|
|
|
439
220
|
*/
|
|
440
221
|
static async saveWorkflow(workflow) {
|
|
441
222
|
if (!workflow) {
|
|
442
|
-
logger.warn(
|
|
223
|
+
logger.warn('No workflow data available to save');
|
|
443
224
|
return null;
|
|
444
225
|
}
|
|
445
226
|
try {
|
|
@@ -455,14 +236,14 @@ export class WorkflowOperationsHelper {
|
|
|
455
236
|
}
|
|
456
237
|
const workflowToSave = {
|
|
457
238
|
id: workflowId,
|
|
458
|
-
name: workflow.name ||
|
|
239
|
+
name: workflow.name || 'Untitled Workflow',
|
|
459
240
|
nodes: workflow.nodes || [],
|
|
460
241
|
edges: workflow.edges || [],
|
|
461
242
|
metadata: {
|
|
462
|
-
version:
|
|
243
|
+
version: '1.0.0',
|
|
463
244
|
createdAt: workflow.metadata?.createdAt || new Date().toISOString(),
|
|
464
|
-
updatedAt: new Date().toISOString()
|
|
465
|
-
}
|
|
245
|
+
updatedAt: new Date().toISOString()
|
|
246
|
+
}
|
|
466
247
|
};
|
|
467
248
|
const savedWorkflow = await workflowApi.saveWorkflow(workflowToSave);
|
|
468
249
|
// Update the workflow ID if it changed (new workflow)
|
|
@@ -473,14 +254,14 @@ export class WorkflowOperationsHelper {
|
|
|
473
254
|
name: workflowToSave.name,
|
|
474
255
|
metadata: {
|
|
475
256
|
...workflowToSave.metadata,
|
|
476
|
-
...savedWorkflow.metadata
|
|
477
|
-
}
|
|
257
|
+
...savedWorkflow.metadata
|
|
258
|
+
}
|
|
478
259
|
});
|
|
479
260
|
}
|
|
480
261
|
return savedWorkflow;
|
|
481
262
|
}
|
|
482
263
|
catch (error) {
|
|
483
|
-
logger.error(
|
|
264
|
+
logger.error('Failed to save workflow:', error);
|
|
484
265
|
throw error;
|
|
485
266
|
}
|
|
486
267
|
}
|
|
@@ -489,26 +270,26 @@ export class WorkflowOperationsHelper {
|
|
|
489
270
|
*/
|
|
490
271
|
static exportWorkflow(workflow) {
|
|
491
272
|
if (!workflow) {
|
|
492
|
-
logger.warn(
|
|
273
|
+
logger.warn('No workflow data available to export');
|
|
493
274
|
return;
|
|
494
275
|
}
|
|
495
276
|
// Use the same ID logic as saveWorkflow
|
|
496
277
|
const workflowId = workflow.id || uuidv4();
|
|
497
278
|
const workflowToExport = {
|
|
498
279
|
id: workflowId,
|
|
499
|
-
name: workflow.name ||
|
|
280
|
+
name: workflow.name || 'Untitled Workflow',
|
|
500
281
|
nodes: workflow.nodes || [],
|
|
501
282
|
edges: workflow.edges || [],
|
|
502
283
|
metadata: {
|
|
503
|
-
version:
|
|
284
|
+
version: '1.0.0',
|
|
504
285
|
createdAt: workflow.metadata?.createdAt || new Date().toISOString(),
|
|
505
|
-
updatedAt: new Date().toISOString()
|
|
506
|
-
}
|
|
286
|
+
updatedAt: new Date().toISOString()
|
|
287
|
+
}
|
|
507
288
|
};
|
|
508
289
|
const dataStr = JSON.stringify(workflowToExport, null, 2);
|
|
509
|
-
const dataBlob = new Blob([dataStr], { type:
|
|
290
|
+
const dataBlob = new Blob([dataStr], { type: 'application/json' });
|
|
510
291
|
const url = URL.createObjectURL(dataBlob);
|
|
511
|
-
const link = document.createElement(
|
|
292
|
+
const link = document.createElement('a');
|
|
512
293
|
link.href = url;
|
|
513
294
|
link.download = `${workflowToExport.name}.json`;
|
|
514
295
|
link.click();
|
|
@@ -527,8 +308,8 @@ export class WorkflowOperationsHelper {
|
|
|
527
308
|
if (!workflow) {
|
|
528
309
|
return {
|
|
529
310
|
valid: false,
|
|
530
|
-
errors: [
|
|
531
|
-
warnings: []
|
|
311
|
+
errors: ['No workflow data available to export'],
|
|
312
|
+
warnings: []
|
|
532
313
|
};
|
|
533
314
|
}
|
|
534
315
|
// Convert to StandardWorkflow first
|
|
@@ -543,11 +324,11 @@ export class WorkflowOperationsHelper {
|
|
|
543
324
|
const agentSpecAdapter = new AgentSpecAdapter();
|
|
544
325
|
const agentSpecJson = agentSpecAdapter.exportJSON(standardWorkflow);
|
|
545
326
|
// Trigger download
|
|
546
|
-
const dataBlob = new Blob([agentSpecJson], { type:
|
|
327
|
+
const dataBlob = new Blob([agentSpecJson], { type: 'application/json' });
|
|
547
328
|
const url = URL.createObjectURL(dataBlob);
|
|
548
|
-
const link = document.createElement(
|
|
329
|
+
const link = document.createElement('a');
|
|
549
330
|
link.href = url;
|
|
550
|
-
link.download = `${workflow.name ||
|
|
331
|
+
link.download = `${workflow.name || 'workflow'}-agentspec.json`;
|
|
551
332
|
link.click();
|
|
552
333
|
URL.revokeObjectURL(url);
|
|
553
334
|
return validation;
|
package/dist/index.d.ts
CHANGED
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
*
|
|
30
30
|
* @module flowdrop
|
|
31
31
|
*/
|
|
32
|
-
export * from
|
|
33
|
-
export * from
|
|
34
|
-
export * from
|
|
35
|
-
export * from
|
|
36
|
-
export * from
|
|
37
|
-
export * from
|
|
32
|
+
export * from './core/index.js';
|
|
33
|
+
export * from './form/index.js';
|
|
34
|
+
export * from './display/index.js';
|
|
35
|
+
export * from './playground/index.js';
|
|
36
|
+
export * from './editor/index.js';
|
|
37
|
+
export * from './settings/index.js';
|
package/dist/index.js
CHANGED
|
@@ -39,26 +39,26 @@
|
|
|
39
39
|
// ============================================================================
|
|
40
40
|
// Core Exports (Types & Utilities - No Heavy Dependencies)
|
|
41
41
|
// ============================================================================
|
|
42
|
-
export * from
|
|
42
|
+
export * from './core/index.js';
|
|
43
43
|
// ============================================================================
|
|
44
44
|
// Form Exports
|
|
45
45
|
// ============================================================================
|
|
46
|
-
export * from
|
|
46
|
+
export * from './form/index.js';
|
|
47
47
|
// Note: Heavy form fields (code, markdown) are NOT auto-registered.
|
|
48
48
|
// Users must import from form/code or form/markdown and register explicitly.
|
|
49
49
|
// ============================================================================
|
|
50
50
|
// Display Exports
|
|
51
51
|
// ============================================================================
|
|
52
|
-
export * from
|
|
52
|
+
export * from './display/index.js';
|
|
53
53
|
// ============================================================================
|
|
54
54
|
// Playground Exports
|
|
55
55
|
// ============================================================================
|
|
56
|
-
export * from
|
|
56
|
+
export * from './playground/index.js';
|
|
57
57
|
// ============================================================================
|
|
58
58
|
// Editor Exports (includes @xyflow/svelte and auto-registers builtin nodes)
|
|
59
59
|
// ============================================================================
|
|
60
|
-
export * from
|
|
60
|
+
export * from './editor/index.js';
|
|
61
61
|
// ============================================================================
|
|
62
62
|
// Settings Exports (stores, services, components, types)
|
|
63
63
|
// ============================================================================
|
|
64
|
-
export * from
|
|
64
|
+
export * from './settings/index.js';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// Mock browser check
|
|
7
|
-
export const browser = typeof window !==
|
|
7
|
+
export const browser = typeof window !== 'undefined';
|
|
8
8
|
|
|
9
9
|
// Mock dev check
|
|
10
10
|
export const dev = false;
|
|
@@ -13,4 +13,4 @@ export const dev = false;
|
|
|
13
13
|
export const building = false;
|
|
14
14
|
|
|
15
15
|
// Mock version
|
|
16
|
-
export const version =
|
|
16
|
+
export const version = '1.0.0';
|
package/dist/mocks/app-forms.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Provides minimal implementations for SvelteKit navigation in library context
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { logger } from
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
7
|
|
|
8
8
|
// Mock goto function
|
|
9
9
|
export const goto = async () => {
|
|
10
10
|
// No-op for library context
|
|
11
|
-
logger.warn(
|
|
11
|
+
logger.warn('Navigation not available in library context');
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
// Mock invalidate function
|
package/dist/mocks/app-stores.js
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
* Provides minimal implementations for SvelteKit stores in library context
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { writable } from
|
|
6
|
+
import { writable } from 'svelte/store';
|
|
7
7
|
|
|
8
8
|
// Mock page store
|
|
9
9
|
export const page = writable({
|
|
10
|
-
url: new URL(
|
|
10
|
+
url: new URL('http://localhost:3000'),
|
|
11
11
|
params: {},
|
|
12
12
|
route: { id: null },
|
|
13
13
|
status: 200,
|
|
14
14
|
error: null,
|
|
15
15
|
data: {},
|
|
16
|
-
form: null
|
|
16
|
+
form: null
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
// Mock navigating store
|