@flowdrop/flowdrop 1.15.0 → 2.0.0-beta.1
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/CHANGELOG.md +475 -0
- package/MIGRATION-2.0.md +472 -0
- package/README.md +23 -23
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +14 -8
- package/dist/adapters/agentspec/AgentSpecAdapter.js +7 -7
- package/dist/chat/batchFeedback.d.ts +39 -0
- package/dist/chat/batchFeedback.js +51 -0
- package/dist/commands/executor.js +15 -1
- package/dist/commands/storeIntegration.svelte.d.ts +4 -1
- package/dist/commands/storeIntegration.svelte.js +26 -21
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/App.svelte +162 -192
- package/dist/components/App.svelte.d.ts +47 -8
- package/dist/components/ConfigForm.svelte +71 -47
- package/dist/components/ConfigModal.svelte +7 -2
- package/dist/components/ConnectionLine.svelte +4 -2
- package/dist/components/Navbar.svelte +61 -1
- package/dist/components/NodeSidebar.svelte +27 -45
- package/dist/components/NodeStatusOverlay.svelte +94 -6
- package/dist/components/NodeSwapPicker.svelte +10 -8
- package/dist/components/PipelineStatus.svelte +16 -67
- package/dist/components/PortCoordinateTracker.svelte +5 -6
- package/dist/components/SchemaForm.stories.svelte +1 -3
- package/dist/components/SchemaForm.svelte +18 -25
- package/dist/components/SchemaForm.svelte.d.ts +0 -8
- package/dist/components/SettingsModal.svelte +8 -3
- package/dist/components/SettingsPanel.svelte +20 -4
- package/dist/components/SwapMappingEditor.svelte +67 -49
- package/dist/components/SwapMappingEditor.svelte.d.ts +0 -2
- package/dist/components/UniversalNode.svelte +9 -7
- package/dist/components/WorkflowEditor.svelte +118 -111
- package/dist/components/WorkflowEditor.svelte.d.ts +18 -10
- package/dist/components/chat/AIChatPanel.svelte +93 -89
- package/dist/components/chat/AIChatPanel.svelte.d.ts +0 -4
- package/dist/components/chat/CommandPreview.svelte +2 -1
- package/dist/components/console/CommandConsole.svelte +7 -5
- package/dist/components/console/ConsoleAutocomplete.svelte +10 -11
- package/dist/components/console/ConsoleAutocomplete.svelte.d.ts +6 -0
- package/dist/components/console/ConsoleInput.svelte +15 -6
- package/dist/components/console/ConsoleOutput.svelte +2 -1
- package/dist/components/form/FormArray.svelte +5 -9
- package/dist/components/form/FormArray.svelte.d.ts +2 -1
- package/dist/components/form/FormAutocomplete.svelte +8 -6
- package/dist/components/form/FormField.svelte +4 -2
- package/dist/components/form/FormFieldLight.svelte +4 -2
- package/dist/components/form/FormMarkdownEditor.svelte +9 -4
- package/dist/components/form/FormRangeField.svelte +1 -0
- package/dist/components/form/FormTemplateEditor.svelte +11 -3
- package/dist/components/form/FormToggle.svelte +5 -12
- package/dist/components/form/FormToggle.svelte.d.ts +4 -2
- package/dist/components/form/templateAutocomplete.js +1 -5
- package/dist/components/form/types.d.ts +1 -14
- package/dist/components/interrupt/FormPrompt.svelte +3 -2
- package/dist/components/interrupt/InterruptBubble.svelte +16 -17
- package/dist/components/interrupt/ReviewPrompt.svelte +10 -3
- package/dist/components/interrupt/TextInputPrompt.svelte +2 -1
- package/dist/components/layouts/MainLayout.svelte +20 -13
- package/dist/components/layouts/MainLayout.svelte.d.ts +4 -0
- package/dist/components/nodes/AtomNode.svelte +17 -5
- package/dist/components/nodes/GatewayNode.svelte +19 -10
- package/dist/components/nodes/IdeaNode.svelte +7 -0
- package/dist/components/nodes/SimpleNode.svelte +11 -6
- package/dist/components/nodes/SquareNode.svelte +15 -8
- package/dist/components/nodes/TerminalNode.svelte +9 -4
- package/dist/components/nodes/ToolNode.svelte +7 -1
- package/dist/components/nodes/WorkflowNode.svelte +16 -7
- package/dist/components/playground/ChatInput.svelte +11 -14
- package/dist/components/playground/ChatPanel.svelte +6 -49
- package/dist/components/playground/ChatPanel.svelte.d.ts +0 -14
- package/dist/components/playground/ControlPanel.svelte +134 -123
- package/dist/components/playground/ControlPanel.svelte.d.ts +3 -0
- package/dist/components/playground/ExecutionLogs.svelte +11 -9
- package/dist/components/playground/InputCollector.svelte +11 -9
- package/dist/components/playground/MessageStream.svelte +17 -23
- package/dist/components/playground/PipelineKanbanView.svelte +65 -6
- package/dist/components/playground/PipelinePanel.svelte +11 -5
- package/dist/components/playground/PipelineTableView.svelte +186 -44
- package/dist/components/playground/Playground.svelte +90 -92
- package/dist/components/playground/Playground.svelte.d.ts +2 -0
- package/dist/components/playground/PlaygroundApp.svelte +6 -1
- package/dist/components/playground/PlaygroundApp.svelte.d.ts +3 -0
- package/dist/components/playground/PlaygroundModal.svelte +13 -3
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -0
- package/dist/components/playground/PlaygroundStudio.svelte +34 -32
- package/dist/components/playground/PlaygroundStudio.svelte.d.ts +3 -0
- package/dist/components/playground/SessionManager.svelte +9 -12
- package/dist/components/playground/pipelineViewUtils.svelte.d.ts +28 -0
- package/dist/components/playground/pipelineViewUtils.svelte.js +38 -1
- package/dist/config/endpoints.d.ts +0 -7
- package/dist/config/endpoints.js +2 -10
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +6 -6
- package/dist/display/index.d.ts +0 -2
- package/dist/display/index.js +0 -6
- package/dist/editor/index.d.ts +19 -20
- package/dist/editor/index.js +25 -35
- package/dist/form/code.d.ts +25 -15
- package/dist/form/code.js +44 -41
- package/dist/form/fieldRegistry.d.ts +17 -13
- package/dist/form/fieldRegistry.js +32 -12
- package/dist/form/full.d.ts +17 -13
- package/dist/form/full.js +22 -27
- package/dist/form/index.d.ts +3 -3
- package/dist/form/index.js +3 -3
- package/dist/form/markdown.d.ts +13 -8
- package/dist/form/markdown.js +22 -23
- package/dist/helpers/proximityConnect.d.ts +3 -2
- package/dist/helpers/proximityConnect.js +2 -5
- package/dist/helpers/workflowEditorHelper.d.ts +12 -5
- package/dist/helpers/workflowEditorHelper.js +27 -25
- package/dist/index.d.ts +28 -24
- package/dist/index.js +27 -50
- package/dist/messages/defaults.d.ts +2 -5
- package/dist/messages/defaults.js +3 -6
- package/dist/messages/index.d.ts +0 -1
- package/dist/messages/index.js +0 -1
- package/dist/mocks/app-forms.d.ts +6 -2
- package/dist/mocks/app-forms.js +11 -4
- package/dist/openapi/v1/openapi.yaml +3 -3
- package/dist/playground/index.d.ts +2 -3
- package/dist/playground/index.js +2 -30
- package/dist/playground/mount.d.ts +15 -0
- package/dist/playground/mount.js +46 -20
- package/dist/registry/{BaseRegistry.d.ts → BaseRegistry.svelte.d.ts} +22 -1
- package/dist/registry/{BaseRegistry.js → BaseRegistry.svelte.js} +37 -1
- package/dist/registry/builtinFormats.d.ts +9 -18
- package/dist/registry/builtinFormats.js +9 -39
- package/dist/registry/builtinNodes.d.ts +0 -25
- package/dist/registry/builtinNodes.js +1 -50
- package/dist/registry/index.d.ts +3 -4
- package/dist/registry/index.js +4 -6
- package/dist/registry/nodeComponentRegistry.d.ts +182 -15
- package/dist/registry/nodeComponentRegistry.js +235 -17
- package/dist/registry/workflowFormatRegistry.d.ts +14 -9
- package/dist/registry/workflowFormatRegistry.js +24 -8
- package/dist/{schema → schemas}/index.d.ts +2 -2
- package/dist/{schema → schemas}/index.js +2 -2
- package/dist/schemas/v1/workflow.schema.json +3 -3
- package/dist/services/agentSpecExecutionService.js +0 -1
- package/dist/services/apiVariableService.d.ts +2 -1
- package/dist/services/apiVariableService.js +5 -22
- package/dist/services/autoSaveService.d.ts +7 -0
- package/dist/services/autoSaveService.js +6 -4
- package/dist/services/chatService.d.ts +8 -4
- package/dist/services/chatService.js +15 -15
- package/dist/services/draftStorage.d.ts +129 -13
- package/dist/services/draftStorage.js +185 -37
- package/dist/services/dynamicSchemaService.d.ts +2 -1
- package/dist/services/dynamicSchemaService.js +5 -22
- package/dist/services/globalSave.d.ts +13 -12
- package/dist/services/globalSave.js +29 -51
- package/dist/services/historyService.d.ts +9 -3
- package/dist/services/historyService.js +9 -3
- package/dist/services/interruptService.d.ts +14 -9
- package/dist/services/interruptService.js +27 -27
- package/dist/services/nodeExecutionService.d.ts +18 -3
- package/dist/services/nodeExecutionService.js +71 -45
- package/dist/services/playgroundService.d.ts +14 -9
- package/dist/services/playgroundService.js +31 -30
- package/dist/services/variableService.d.ts +2 -1
- package/dist/services/variableService.js +2 -2
- package/dist/services/workflowStorage.js +6 -6
- package/dist/stores/apiContext.d.ts +45 -0
- package/dist/stores/apiContext.js +65 -0
- package/dist/stores/categoriesStore.svelte.d.ts +28 -23
- package/dist/stores/categoriesStore.svelte.js +70 -64
- package/dist/stores/getInstance.svelte.d.ts +39 -0
- package/dist/stores/getInstance.svelte.js +65 -0
- package/dist/stores/historyStore.svelte.d.ts +77 -93
- package/dist/stores/historyStore.svelte.js +134 -160
- package/dist/stores/instanceContainer.svelte.d.ts +111 -0
- package/dist/stores/instanceContainer.svelte.js +114 -0
- package/dist/stores/interruptStore.svelte.d.ts +112 -82
- package/dist/stores/interruptStore.svelte.js +253 -226
- package/dist/stores/pipelinePanelStore.svelte.d.ts +27 -3
- package/dist/stores/pipelinePanelStore.svelte.js +61 -14
- package/dist/stores/playgroundStore.svelte.d.ts +169 -222
- package/dist/stores/playgroundStore.svelte.js +515 -580
- package/dist/stores/portCoordinateStore.svelte.d.ts +57 -51
- package/dist/stores/portCoordinateStore.svelte.js +109 -98
- package/dist/stores/settingsStore.svelte.d.ts +4 -1
- package/dist/stores/settingsStore.svelte.js +47 -12
- package/dist/stores/workflowStore.svelte.d.ts +178 -213
- package/dist/stores/workflowStore.svelte.js +449 -501
- package/dist/stories/EdgeDecorator.svelte +5 -2
- package/dist/stories/NodeDecorator.svelte +5 -3
- package/dist/svelte-app.d.ts +60 -10
- package/dist/svelte-app.js +157 -53
- package/dist/types/events.d.ts +6 -3
- package/dist/types/index.d.ts +33 -3
- package/dist/types/navbar.d.ts +7 -0
- package/dist/types/playground.d.ts +18 -3
- package/dist/types/settings.d.ts +13 -0
- package/dist/types/settings.js +1 -0
- package/dist/utils/colors.d.ts +47 -21
- package/dist/utils/colors.js +69 -68
- package/dist/utils/connections.d.ts +9 -15
- package/dist/utils/connections.js +13 -32
- package/dist/utils/duration.d.ts +13 -0
- package/dist/utils/duration.js +45 -0
- package/dist/utils/icons.d.ts +5 -2
- package/dist/utils/icons.js +6 -5
- package/dist/utils/nodeSwap.d.ts +6 -2
- package/dist/utils/nodeSwap.js +62 -126
- package/dist/utils/nodeTypes.d.ts +17 -8
- package/dist/utils/nodeTypes.js +26 -19
- package/dist/utils/performanceUtils.js +7 -0
- package/package.json +6 -5
- package/dist/messages/deprecation.d.ts +0 -20
- package/dist/messages/deprecation.js +0 -33
- package/dist/registry/plugin.d.ts +0 -215
- package/dist/registry/plugin.js +0 -249
- package/dist/services/api.d.ts +0 -129
- package/dist/services/api.js +0 -217
|
@@ -3,19 +3,8 @@
|
|
|
3
3
|
import Icon from '@iconify/svelte';
|
|
4
4
|
import Playground from './Playground.svelte';
|
|
5
5
|
import PipelinePanel from './PipelinePanel.svelte';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
pipelinePanelActions
|
|
9
|
-
} from '../../stores/pipelinePanelStore.svelte.js';
|
|
10
|
-
import {
|
|
11
|
-
getActiveExecutionId,
|
|
12
|
-
getPinnedExecutionId,
|
|
13
|
-
getLatestExecutionId,
|
|
14
|
-
getPipelineRefreshTrigger,
|
|
15
|
-
getSelectableExecutions,
|
|
16
|
-
playgroundActions
|
|
17
|
-
} from '../../stores/playgroundStore.svelte.js';
|
|
18
|
-
import { setEndpointConfig, workflowApi } from '../../services/api.js';
|
|
6
|
+
import { provideInstance } from '../../stores/getInstance.svelte.js';
|
|
7
|
+
import type { FlowDropInstance } from '../../stores/instanceContainer.svelte.js';
|
|
19
8
|
import { logger } from '../../utils/logger.js';
|
|
20
9
|
import type { Workflow, PipelineViewDef } from '../../types/index.js';
|
|
21
10
|
import type { EndpointConfig } from '../../config/endpoints.js';
|
|
@@ -46,6 +35,8 @@
|
|
|
46
35
|
onClose?: () => void;
|
|
47
36
|
/** Additional pipeline views injected by the consumer */
|
|
48
37
|
extraPipelineViews?: PipelineViewDef[];
|
|
38
|
+
/** Explicit FlowDrop instance; defaults to context or the page-default instance. */
|
|
39
|
+
instance?: FlowDropInstance;
|
|
49
40
|
}
|
|
50
41
|
|
|
51
42
|
let {
|
|
@@ -60,17 +51,28 @@
|
|
|
60
51
|
initialPipelineWidth = 500,
|
|
61
52
|
onSessionNavigate,
|
|
62
53
|
onClose,
|
|
63
|
-
extraPipelineViews = []
|
|
54
|
+
extraPipelineViews = [],
|
|
55
|
+
instance
|
|
64
56
|
}: Props = $props();
|
|
65
57
|
|
|
66
|
-
//
|
|
58
|
+
// Resolve/provide once at init; the instance prop is a fixed mount-time choice.
|
|
59
|
+
// svelte-ignore state_referenced_locally
|
|
60
|
+
const fd = provideInstance(instance);
|
|
61
|
+
|
|
62
|
+
// Pre-bound toggle for detached callback props (onclick / onTogglePanel).
|
|
63
|
+
const togglePipeline = () => fd.pipelinePanel.toggle();
|
|
64
|
+
|
|
65
|
+
// seed mutable state from the prop's initial value; workflow may load asynchronously below
|
|
66
|
+
// svelte-ignore state_referenced_locally
|
|
67
67
|
let resolvedWorkflow = $state<Workflow | null>(workflowProp ?? null);
|
|
68
|
-
//
|
|
68
|
+
// initial loading flag derived from whether a workflow was provided up front
|
|
69
|
+
// svelte-ignore state_referenced_locally
|
|
69
70
|
let workflowLoading = $state(workflowProp === undefined);
|
|
70
71
|
let workflowError = $state<string | null>(null);
|
|
71
72
|
|
|
72
73
|
let splitEl = $state<HTMLElement | null>(null);
|
|
73
|
-
//
|
|
74
|
+
// seed mutable width from the initial prop; it changes as the user drags the resizer
|
|
75
|
+
// svelte-ignore state_referenced_locally
|
|
74
76
|
let pipelineWidth = $state(initialPipelineWidth);
|
|
75
77
|
let isResizing = $state(false);
|
|
76
78
|
let containerWidth = $state(0);
|
|
@@ -92,12 +94,12 @@
|
|
|
92
94
|
});
|
|
93
95
|
|
|
94
96
|
onMount(() => {
|
|
95
|
-
|
|
97
|
+
fd.pipelinePanel.init();
|
|
96
98
|
if (initialPipelineOpen !== undefined) {
|
|
97
|
-
|
|
99
|
+
fd.pipelinePanel.setOpen(initialPipelineOpen);
|
|
98
100
|
}
|
|
99
101
|
if (endpointConfig) {
|
|
100
|
-
|
|
102
|
+
fd.api.configure(endpointConfig);
|
|
101
103
|
}
|
|
102
104
|
if (!workflowProp) {
|
|
103
105
|
void loadWorkflow();
|
|
@@ -115,7 +117,7 @@
|
|
|
115
117
|
try {
|
|
116
118
|
workflowLoading = true;
|
|
117
119
|
workflowError = null;
|
|
118
|
-
resolvedWorkflow = await
|
|
120
|
+
resolvedWorkflow = await fd.api.client.loadWorkflow(workflowId);
|
|
119
121
|
} catch (err) {
|
|
120
122
|
workflowError = err instanceof Error ? err.message : 'Failed to load workflow';
|
|
121
123
|
logger.error('[PlaygroundStudio] Workflow load failed:', err);
|
|
@@ -162,16 +164,16 @@
|
|
|
162
164
|
style="--playground-studio-min-chat-width: {minChatWidth}px"
|
|
163
165
|
>
|
|
164
166
|
<div class="playground-studio__panes" bind:this={splitEl}>
|
|
165
|
-
{#if
|
|
166
|
-
{@const activeId =
|
|
167
|
-
{@const executions =
|
|
167
|
+
{#if fd.pipelinePanel.isOpen && resolvedWorkflow && endpointConfig}
|
|
168
|
+
{@const activeId = fd.playground.activeExecutionId}
|
|
169
|
+
{@const executions = fd.playground.selectableExecutions}
|
|
168
170
|
|
|
169
171
|
<div class="playground-studio__pipeline" style="width: {pipelineWidth}px;">
|
|
170
172
|
<button
|
|
171
173
|
type="button"
|
|
172
174
|
class="playground-studio__back-to-chat"
|
|
173
175
|
aria-label="Back to chat"
|
|
174
|
-
onclick={
|
|
176
|
+
onclick={togglePipeline}
|
|
175
177
|
>
|
|
176
178
|
<Icon icon="mdi:arrow-left" aria-hidden="true" />
|
|
177
179
|
<span>Back to chat</span>
|
|
@@ -180,11 +182,11 @@
|
|
|
180
182
|
pipelineId={activeId}
|
|
181
183
|
workflow={resolvedWorkflow}
|
|
182
184
|
{endpointConfig}
|
|
183
|
-
isPinned={
|
|
185
|
+
isPinned={fd.playground.pinnedExecutionId !== null}
|
|
184
186
|
{executions}
|
|
185
|
-
latestExecutionId={
|
|
186
|
-
onSelectExecution={(id) =>
|
|
187
|
-
refreshTrigger={
|
|
187
|
+
latestExecutionId={fd.playground.latestExecutionId}
|
|
188
|
+
onSelectExecution={(id) => fd.playground.pinExecution(id)}
|
|
189
|
+
refreshTrigger={fd.playground.pipelineRefreshTrigger}
|
|
188
190
|
extraViews={extraPipelineViews}
|
|
189
191
|
/>
|
|
190
192
|
</div>
|
|
@@ -214,7 +216,7 @@
|
|
|
214
216
|
|
|
215
217
|
<div
|
|
216
218
|
class="playground-studio__chat"
|
|
217
|
-
class:playground-studio__chat--solo={!
|
|
219
|
+
class:playground-studio__chat--solo={!fd.pipelinePanel.isOpen}
|
|
218
220
|
>
|
|
219
221
|
{#if workflowLoading}
|
|
220
222
|
<div class="playground-studio__loading">
|
|
@@ -241,8 +243,8 @@
|
|
|
241
243
|
{config}
|
|
242
244
|
{onClose}
|
|
243
245
|
{onSessionNavigate}
|
|
244
|
-
onTogglePanel={
|
|
245
|
-
isPipelinePanelOpen={
|
|
246
|
+
onTogglePanel={togglePipeline}
|
|
247
|
+
isPipelinePanelOpen={fd.pipelinePanel.isOpen}
|
|
246
248
|
/>
|
|
247
249
|
{/key}
|
|
248
250
|
{/if}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FlowDropInstance } from '../../stores/instanceContainer.svelte.js';
|
|
1
2
|
import type { Workflow, PipelineViewDef } from '../../types/index.js';
|
|
2
3
|
import type { EndpointConfig } from '../../config/endpoints.js';
|
|
3
4
|
import type { PlaygroundConfig, PlaygroundMode } from '../../types/playground.js';
|
|
@@ -26,6 +27,8 @@ interface Props {
|
|
|
26
27
|
onClose?: () => void;
|
|
27
28
|
/** Additional pipeline views injected by the consumer */
|
|
28
29
|
extraPipelineViews?: PipelineViewDef[];
|
|
30
|
+
/** Explicit FlowDrop instance; defaults to context or the page-default instance. */
|
|
31
|
+
instance?: FlowDropInstance;
|
|
29
32
|
}
|
|
30
33
|
declare const PlaygroundStudio: import("svelte").Component<Props, {}, "">;
|
|
31
34
|
type PlaygroundStudio = ReturnType<typeof PlaygroundStudio>;
|
|
@@ -10,14 +10,11 @@
|
|
|
10
10
|
import Icon from '@iconify/svelte';
|
|
11
11
|
import { slide } from 'svelte/transition';
|
|
12
12
|
import type { PlaygroundSession } from '../../types/playground.js';
|
|
13
|
-
import {
|
|
14
|
-
getSessions,
|
|
15
|
-
getCurrentSession,
|
|
16
|
-
getIsLoading,
|
|
17
|
-
getSessionCount
|
|
18
|
-
} from '../../stores/playgroundStore.svelte.js';
|
|
13
|
+
import { getInstance } from '../../stores/getInstance.svelte.js';
|
|
19
14
|
import { m } from '../../messages/index.js';
|
|
20
15
|
|
|
16
|
+
const fd = getInstance();
|
|
17
|
+
|
|
21
18
|
/**
|
|
22
19
|
* Component props
|
|
23
20
|
*/
|
|
@@ -175,8 +172,8 @@
|
|
|
175
172
|
<div class="session-manager__title">
|
|
176
173
|
<Icon icon="mdi:history" />
|
|
177
174
|
<span>{t.header}</span>
|
|
178
|
-
{#if
|
|
179
|
-
<span class="session-manager__count">{
|
|
175
|
+
{#if fd.playground.sessionCount > 0}
|
|
176
|
+
<span class="session-manager__count">{fd.playground.sessionCount}</span>
|
|
180
177
|
{/if}
|
|
181
178
|
</div>
|
|
182
179
|
<Icon
|
|
@@ -193,7 +190,7 @@
|
|
|
193
190
|
type="button"
|
|
194
191
|
class="session-manager__new-btn"
|
|
195
192
|
onclick={onCreateSession}
|
|
196
|
-
disabled={
|
|
193
|
+
disabled={fd.playground.isLoading}
|
|
197
194
|
>
|
|
198
195
|
<Icon icon="mdi:plus" />
|
|
199
196
|
{t.newSession}
|
|
@@ -201,16 +198,16 @@
|
|
|
201
198
|
|
|
202
199
|
<!-- Sessions List -->
|
|
203
200
|
<div class="session-manager__list">
|
|
204
|
-
{#if
|
|
201
|
+
{#if fd.playground.sessions.length === 0}
|
|
205
202
|
<div class="session-manager__empty">
|
|
206
203
|
<Icon icon="mdi:chat-outline" />
|
|
207
204
|
<span>{t.empty}</span>
|
|
208
205
|
</div>
|
|
209
206
|
{:else}
|
|
210
|
-
{#each
|
|
207
|
+
{#each fd.playground.sessions as session (session.id)}
|
|
211
208
|
<div
|
|
212
209
|
class="session-manager__item"
|
|
213
|
-
class:session-manager__item--active={
|
|
210
|
+
class:session-manager__item--active={fd.playground.currentSession?.id === session.id}
|
|
214
211
|
role="button"
|
|
215
212
|
tabindex="0"
|
|
216
213
|
onclick={() => handleSelectSession(session.id)}
|
|
@@ -5,7 +5,34 @@ export interface NodeStatusData {
|
|
|
5
5
|
status: string;
|
|
6
6
|
last_executed?: string | null;
|
|
7
7
|
execution_time?: number | null;
|
|
8
|
+
/** Precise duration in microseconds, from orchestrator-stamped job metadata */
|
|
9
|
+
execution_time_us?: number | null;
|
|
8
10
|
error?: string | null;
|
|
11
|
+
/** Number of jobs for this node that actually ran (loop iterations) */
|
|
12
|
+
executions?: number | null;
|
|
13
|
+
/** Per-status job counts, e.g. { completed: 2, skipped: 1 } */
|
|
14
|
+
status_counts?: Record<string, number> | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One job from the pipeline payload. Loop-orchestrated workflows create one
|
|
18
|
+
* job per iteration for the same node, so a node can have several of these —
|
|
19
|
+
* the label carries the iteration suffix (e.g. "Invoke tool #2").
|
|
20
|
+
*/
|
|
21
|
+
export interface PipelineJobItem {
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
nodeId: string;
|
|
25
|
+
status: string;
|
|
26
|
+
createdAt?: string | null;
|
|
27
|
+
started?: string | null;
|
|
28
|
+
completed?: string | null;
|
|
29
|
+
/** Precise duration in microseconds, when the job ran to completion */
|
|
30
|
+
executionTimeUs?: number | null;
|
|
31
|
+
error?: string | null;
|
|
32
|
+
retryCount?: number | null;
|
|
33
|
+
maxRetries?: number | null;
|
|
34
|
+
inputData?: unknown;
|
|
35
|
+
outputData?: unknown;
|
|
9
36
|
}
|
|
10
37
|
export declare function resolveStatus(raw: NodeStatusData | undefined): NodeStatus;
|
|
11
38
|
/**
|
|
@@ -15,6 +42,7 @@ export declare function resolveStatus(raw: NodeStatusData | undefined): NodeStat
|
|
|
15
42
|
*/
|
|
16
43
|
export declare function createPipelineDataFetcher(getPipelineId: () => string, endpointConfig: EndpointConfig): {
|
|
17
44
|
readonly nodeStatusMap: Record<string, NodeStatusData>;
|
|
45
|
+
readonly jobs: PipelineJobItem[];
|
|
18
46
|
readonly kanbanConfig: KanbanColumnDef[] | null;
|
|
19
47
|
readonly isLoading: boolean;
|
|
20
48
|
readonly isError: boolean;
|
|
@@ -11,6 +11,35 @@ const KNOWN_STATUSES = new Set([
|
|
|
11
11
|
'failed',
|
|
12
12
|
'cancelled'
|
|
13
13
|
]);
|
|
14
|
+
function toJobItem(raw, index) {
|
|
15
|
+
const started = typeof raw.started === 'string' ? raw.started : null;
|
|
16
|
+
const completed = typeof raw.completed === 'string' ? raw.completed : null;
|
|
17
|
+
// Prefer the orchestrator-stamped microsecond duration; fall back to the
|
|
18
|
+
// second-granularity timestamps for jobs that predate the metadata stamp.
|
|
19
|
+
let executionTimeUs = typeof raw.execution_time_us === 'number' ? raw.execution_time_us : null;
|
|
20
|
+
if (executionTimeUs == null && started && completed) {
|
|
21
|
+
const startMs = Date.parse(started);
|
|
22
|
+
const endMs = Date.parse(completed);
|
|
23
|
+
if (!Number.isNaN(startMs) && !Number.isNaN(endMs)) {
|
|
24
|
+
executionTimeUs = (endMs - startMs) * 1000;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
id: typeof raw.id === 'string' || typeof raw.id === 'number' ? String(raw.id) : `job-${index}`,
|
|
29
|
+
label: typeof raw.label === 'string' ? raw.label : '',
|
|
30
|
+
nodeId: typeof raw.node_id === 'string' ? raw.node_id : '',
|
|
31
|
+
status: typeof raw.status === 'string' ? raw.status : 'idle',
|
|
32
|
+
createdAt: typeof raw.created_at === 'string' ? raw.created_at : null,
|
|
33
|
+
started,
|
|
34
|
+
completed,
|
|
35
|
+
executionTimeUs,
|
|
36
|
+
error: typeof raw.error_message === 'string' ? raw.error_message : null,
|
|
37
|
+
retryCount: typeof raw.retry_count === 'number' ? raw.retry_count : null,
|
|
38
|
+
maxRetries: typeof raw.max_retries === 'number' ? raw.max_retries : null,
|
|
39
|
+
inputData: raw.input_data ?? null,
|
|
40
|
+
outputData: raw.output_data ?? null
|
|
41
|
+
};
|
|
42
|
+
}
|
|
14
43
|
export function resolveStatus(raw) {
|
|
15
44
|
if (!raw)
|
|
16
45
|
return 'pending';
|
|
@@ -29,6 +58,7 @@ export function resolveStatus(raw) {
|
|
|
29
58
|
export function createPipelineDataFetcher(getPipelineId, endpointConfig) {
|
|
30
59
|
const client = new EnhancedFlowDropApiClient(endpointConfig);
|
|
31
60
|
let nodeStatusMap = $state({});
|
|
61
|
+
let jobs = $state([]);
|
|
32
62
|
let kanbanConfig = $state(null);
|
|
33
63
|
let isLoading = $state(false);
|
|
34
64
|
let isError = $state(false);
|
|
@@ -43,10 +73,14 @@ export function createPipelineDataFetcher(getPipelineId, endpointConfig) {
|
|
|
43
73
|
status: info.status,
|
|
44
74
|
last_executed: info.last_executed,
|
|
45
75
|
execution_time: info.execution_time,
|
|
46
|
-
|
|
76
|
+
execution_time_us: info.execution_time_us,
|
|
77
|
+
error: info.error,
|
|
78
|
+
executions: info.executions,
|
|
79
|
+
status_counts: info.status_counts
|
|
47
80
|
};
|
|
48
81
|
}
|
|
49
82
|
nodeStatusMap = map;
|
|
83
|
+
jobs = (data.jobs ?? []).map(toJobItem);
|
|
50
84
|
if (data.kanban_config?.columns) {
|
|
51
85
|
// Server sends statuses as string[]; trust the server and cast at this
|
|
52
86
|
// boundary. resolveStatus() handles unknown values at read time.
|
|
@@ -70,6 +104,9 @@ export function createPipelineDataFetcher(getPipelineId, endpointConfig) {
|
|
|
70
104
|
get nodeStatusMap() {
|
|
71
105
|
return nodeStatusMap;
|
|
72
106
|
},
|
|
107
|
+
get jobs() {
|
|
108
|
+
return jobs;
|
|
109
|
+
},
|
|
73
110
|
get kanbanConfig() {
|
|
74
111
|
return kanbanConfig;
|
|
75
112
|
},
|
|
@@ -110,13 +110,6 @@ export interface EndpointConfig {
|
|
|
110
110
|
headers?: {
|
|
111
111
|
[key: string]: Record<string, string>;
|
|
112
112
|
};
|
|
113
|
-
/** Authentication configuration */
|
|
114
|
-
auth?: {
|
|
115
|
-
type: 'none' | 'bearer' | 'api_key' | 'custom';
|
|
116
|
-
token?: string;
|
|
117
|
-
apiKey?: string;
|
|
118
|
-
headers?: Record<string, string>;
|
|
119
|
-
};
|
|
120
113
|
/** Request timeout in milliseconds */
|
|
121
114
|
timeout?: number;
|
|
122
115
|
/** Retry configuration */
|
package/dist/config/endpoints.js
CHANGED
|
@@ -132,16 +132,8 @@ export function getEndpointHeaders(config, endpointKey) {
|
|
|
132
132
|
const baseHeaders = {
|
|
133
133
|
'Content-Type': 'application/json'
|
|
134
134
|
};
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
baseHeaders['Authorization'] = `Bearer ${config.auth.token}`;
|
|
138
|
-
}
|
|
139
|
-
else if (config.auth?.type === 'api_key' && config.auth.apiKey) {
|
|
140
|
-
baseHeaders['X-API-Key'] = config.auth.apiKey;
|
|
141
|
-
}
|
|
142
|
-
else if (config.auth?.type === 'custom' && config.auth.headers) {
|
|
143
|
-
Object.assign(baseHeaders, config.auth.headers);
|
|
144
|
-
}
|
|
135
|
+
// Authentication is supplied via the AuthProvider passed to the API client /
|
|
136
|
+
// ApiContext — EndpointConfig no longer carries an `auth` block.
|
|
145
137
|
// Add endpoint-specific headers
|
|
146
138
|
const endpointHeaders = config.headers?.[endpointKey];
|
|
147
139
|
if (endpointHeaders) {
|
package/dist/core/index.d.ts
CHANGED
|
@@ -22,12 +22,12 @@ export type { WorkflowEditorConfig, EditorFeatures, UIConfig, APIConfig, Executi
|
|
|
22
22
|
export type { AuthProvider, StaticAuthConfig, CallbackAuthConfig } from '../types/auth.js';
|
|
23
23
|
export type { WorkflowChangeType, FlowDropEventHandlers, FlowDropFeatures } from '../types/events.js';
|
|
24
24
|
export type { FieldSchema, FieldType, FieldFormat, FieldOption, SchemaFormProps, BaseFieldProps, TextFieldProps, TextareaFieldProps, NumberFieldProps, ToggleFieldProps, RangeFieldProps, SelectFieldProps, CheckboxGroupFieldProps, ArrayFieldProps, CodeEditorFieldProps, MarkdownEditorFieldProps, TemplateEditorFieldProps, FormFieldFactoryProps, FormFieldWrapperProps } from '../components/form/types.js';
|
|
25
|
-
export { BaseRegistry } from '../registry/BaseRegistry.js';
|
|
25
|
+
export { BaseRegistry } from '../registry/BaseRegistry.svelte.js';
|
|
26
26
|
export type { NodeComponentProps, NodeTypeInfo, NodeComponentRegistration, NodeComponentCategory, StatusPosition, StatusSize, NodeRegistrationFilter, FlowDropPluginConfig, PluginNodeDefinition, PluginRegistrationResult } from '../registry/index.js';
|
|
27
27
|
export type { FieldMatcherRegistration } from '../form/fieldRegistry.js';
|
|
28
|
-
export {
|
|
28
|
+
export { WorkflowFormatRegistry } from '../registry/workflowFormatRegistry.js';
|
|
29
29
|
export type { WorkflowFormatAdapter, FormatValidationResult } from '../registry/workflowFormatRegistry.js';
|
|
30
|
-
export {
|
|
30
|
+
export { getBuiltinFormatAdapters } from '../registry/builtinFormats.js';
|
|
31
31
|
export type { ToastType, ToastOptions } from '../services/toastService.js';
|
|
32
32
|
export type { DynamicSchemaResult } from '../services/dynamicSchemaService.js';
|
|
33
33
|
export type { PlaygroundSession, PlaygroundMessage, PlaygroundInputField, PlaygroundMessageRequest, PlaygroundMessagesResult, PlaygroundConfig, PlaygroundMode, PlaygroundSessionStatus, PlaygroundMessageRole, PlaygroundMessageLevel, PlaygroundMessageMetadata, PlaygroundApiResponse, PlaygroundSessionsResponse, PlaygroundSessionResponse, PlaygroundMessageResponse, PlaygroundMessagesApiResponse } from '../types/playground.js';
|
|
@@ -70,7 +70,7 @@ export type { AgentSpecEndpointConfig } from '../config/agentSpecEndpoints.js';
|
|
|
70
70
|
export { defaultAgentSpecEndpoints, createAgentSpecEndpointConfig, buildAgentSpecUrl, getAgentSpecAuthHeaders } from '../config/agentSpecEndpoints.js';
|
|
71
71
|
export { AgentSpecExecutionService, agentSpecExecutionService } from '../services/agentSpecExecutionService.js';
|
|
72
72
|
export type { AgentSpecExecutionHandle } from '../services/agentSpecExecutionService.js';
|
|
73
|
-
export { workflowSchema, WORKFLOW_SCHEMA_VERSION } from '../
|
|
73
|
+
export { workflowSchema, WORKFLOW_SCHEMA_VERSION } from '../schemas/index.js';
|
|
74
74
|
export type { FlowDropTheme, FlowDropThemeName, FlowDropThemeConfig } from '../types/theme.js';
|
|
75
75
|
export { defaultTheme, minimalTheme, resolveTheme } from '../themes/index.js';
|
|
76
76
|
export type { FlowDropSkin, FlowDropSkinName, FlowDropSkinTokens } from '../types/skin.js';
|
package/dist/core/index.js
CHANGED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
export { DEFAULT_WORKFLOW_FORMAT } from '../types/index.js';
|
|
18
18
|
export { isUISchemaControl, isUISchemaVerticalLayout, isUISchemaGroup } from '../types/index.js';
|
|
19
19
|
// Base registry
|
|
20
|
-
export { BaseRegistry } from '../registry/BaseRegistry.js';
|
|
21
|
-
// Workflow format registry
|
|
22
|
-
export {
|
|
23
|
-
// Built-in format
|
|
24
|
-
export {
|
|
20
|
+
export { BaseRegistry } from '../registry/BaseRegistry.svelte.js';
|
|
21
|
+
// Workflow format registry (the class — instances live on `fd.formats`)
|
|
22
|
+
export { WorkflowFormatRegistry } from '../registry/workflowFormatRegistry.js';
|
|
23
|
+
// Built-in format adapters (used to seed instance format registries)
|
|
24
|
+
export { getBuiltinFormatAdapters } from '../registry/builtinFormats.js';
|
|
25
25
|
export { isChatInputNode, CHAT_INPUT_PATTERNS } from '../types/playground.js';
|
|
26
26
|
// ============================================================================
|
|
27
27
|
// Authentication Providers (no dependencies)
|
|
@@ -85,7 +85,7 @@ export { AgentSpecExecutionService, agentSpecExecutionService } from '../service
|
|
|
85
85
|
// ============================================================================
|
|
86
86
|
// Workflow JSON Schema
|
|
87
87
|
// ============================================================================
|
|
88
|
-
export { workflowSchema, WORKFLOW_SCHEMA_VERSION } from '../
|
|
88
|
+
export { workflowSchema, WORKFLOW_SCHEMA_VERSION } from '../schemas/index.js';
|
|
89
89
|
export { defaultTheme, minimalTheme, resolveTheme } from '../themes/index.js';
|
|
90
90
|
export { slateSkin, defaultSkin } from '../skins/index.js';
|
|
91
91
|
export { getTheme as theme, getResolvedTheme as resolvedTheme, setTheme, toggleTheme, cycleTheme, initializeTheme, isThemeInitialized } from '../stores/settingsStore.svelte.js';
|
package/dist/display/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* FlowDrop Display Module
|
|
3
3
|
*
|
|
4
4
|
* Provides display components for rendering content.
|
|
5
|
-
* This module includes the marked library for markdown rendering.
|
|
6
5
|
*
|
|
7
6
|
* @module display
|
|
8
7
|
*
|
|
@@ -26,4 +25,3 @@
|
|
|
26
25
|
* ```
|
|
27
26
|
*/
|
|
28
27
|
export { default as MarkdownDisplay } from '../components/MarkdownDisplay.svelte';
|
|
29
|
-
export { marked } from 'marked';
|
package/dist/display/index.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* FlowDrop Display Module
|
|
3
3
|
*
|
|
4
4
|
* Provides display components for rendering content.
|
|
5
|
-
* This module includes the marked library for markdown rendering.
|
|
6
5
|
*
|
|
7
6
|
* @module display
|
|
8
7
|
*
|
|
@@ -29,8 +28,3 @@
|
|
|
29
28
|
// Display Components
|
|
30
29
|
// ============================================================================
|
|
31
30
|
export { default as MarkdownDisplay } from '../components/MarkdownDisplay.svelte';
|
|
32
|
-
// ============================================================================
|
|
33
|
-
// Re-export marked for advanced usage
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// Users can use marked directly if they need more control
|
|
36
|
-
export { marked } from 'marked';
|
package/dist/editor/index.d.ts
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
* building visual workflow editors. This module includes @xyflow/svelte
|
|
6
6
|
* and all node components.
|
|
7
7
|
*
|
|
8
|
-
* **
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* **Multi-instance support.** Each mount gets its own `FlowDropInstance`
|
|
9
|
+
* state container (workflow, undo/redo, playground, …), so multiple editors
|
|
10
|
+
* can coexist on one page. Pass `instanceId` to the mount options to scope
|
|
11
|
+
* draft/panel storage keys per editor; in Svelte, pass `instance` to <App>
|
|
12
|
+
* or resolve it in components via `getInstance()`. State is addressed through
|
|
13
|
+
* the instance — there is no page-default module-level store API.
|
|
14
|
+
* Page-global by design: theme/settings, port-compatibility config, and API
|
|
15
|
+
* endpoint config.
|
|
11
16
|
*
|
|
12
17
|
* @module editor
|
|
13
18
|
*
|
|
@@ -31,7 +36,6 @@
|
|
|
31
36
|
* <WorkflowEditor nodes={availableNodes} />
|
|
32
37
|
* ```
|
|
33
38
|
*/
|
|
34
|
-
import '../registry/builtinNodes.js';
|
|
35
39
|
export { default as WorkflowEditor } from '../components/WorkflowEditor.svelte';
|
|
36
40
|
export { default as App } from '../components/App.svelte';
|
|
37
41
|
export { default as WorkflowNodeComponent } from '../components/nodes/WorkflowNode.svelte';
|
|
@@ -58,33 +62,28 @@ export { default as PipelineStatus } from '../components/PipelineStatus.svelte';
|
|
|
58
62
|
export { default as Navbar } from '../components/Navbar.svelte';
|
|
59
63
|
export { default as Logo } from '../components/Logo.svelte';
|
|
60
64
|
export { default as CommandConsole } from '../components/console/CommandConsole.svelte';
|
|
61
|
-
export { default as Playground } from '../components/playground/Playground.svelte';
|
|
62
|
-
export { default as PlaygroundModal } from '../components/playground/PlaygroundModal.svelte';
|
|
63
|
-
export { default as ChatPanel } from '../components/playground/ChatPanel.svelte';
|
|
64
|
-
export { default as SessionManager } from '../components/playground/SessionManager.svelte';
|
|
65
|
-
export { default as InputCollector } from '../components/playground/InputCollector.svelte';
|
|
66
|
-
export { default as ExecutionLogs } from '../components/playground/ExecutionLogs.svelte';
|
|
67
|
-
export { default as MessageBubble } from '../components/playground/MessageBubble.svelte';
|
|
68
65
|
export { mountWorkflowEditor, mountFlowDropApp, unmountFlowDropApp } from '../svelte-app.js';
|
|
69
|
-
export {
|
|
66
|
+
export { NodeComponentRegistry, createNamespacedType, parseNamespacedType, BUILTIN_NODE_COMPONENTS, BUILTIN_NODE_TYPES, FLOWDROP_SOURCE, isBuiltinType, getBuiltinTypes, resolveBuiltinAlias, createPlugin, isValidNamespace } from '../registry/index.js';
|
|
70
67
|
export { EdgeStylingHelper, NodeOperationsHelper, WorkflowOperationsHelper, ConfigurationHelper } from '../helpers/workflowEditorHelper.js';
|
|
71
|
-
export {
|
|
72
|
-
export {
|
|
73
|
-
export {
|
|
68
|
+
export { createFlowDropInstance, getDefaultInstance, type FlowDropInstance, type CreateInstanceOptions } from '../stores/instanceContainer.svelte.js';
|
|
69
|
+
export { getInstance, provideInstance, FLOWDROP_INSTANCE_KEY } from '../stores/getInstance.svelte.js';
|
|
70
|
+
export { WorkflowStore, type WorkflowStoreActions } from '../stores/workflowStore.svelte.js';
|
|
71
|
+
export { HistoryStore, type HistoryStoreActions } from '../stores/historyStore.svelte.js';
|
|
72
|
+
export { ApiContext } from '../stores/apiContext.js';
|
|
73
|
+
export { PortCoordinateStore } from '../stores/portCoordinateStore.svelte.js';
|
|
74
|
+
export { HistoryService } from '../services/historyService.js';
|
|
74
75
|
export type { HistoryEntry, HistoryState, PushOptions } from '../stores/historyStore.svelte.js';
|
|
75
|
-
export { setEndpointConfig, getEndpointConfig, nodeApi, workflowApi, api } from '../services/api.js';
|
|
76
76
|
export { showSuccess, showError, showWarning, showInfo, showLoading, dismissToast, dismissAllToasts, showPromise, showConfirmation, apiToasts, workflowToasts, pipelineToasts } from '../services/toastService.js';
|
|
77
77
|
export { NodeExecutionService, nodeExecutionService } from '../services/nodeExecutionService.js';
|
|
78
|
-
export { PlaygroundService, playgroundService } from '../services/playgroundService.js';
|
|
79
|
-
export { getCurrentSession, getSessions, getMessages, getIsExecuting, getCanSendMessage, getIsLoading, getError as getPlaygroundError, getCurrentWorkflow, getLastPollSequenceNumber, getSessionStatus, getMessageCount, getChatMessages, getLogMessages, getLatestMessage, getInputFields, getHasChatInput, getSessionCount, playgroundActions, applyServerResponse, subscribeToSessionStatus, getCurrentSessionId, isSessionSelected, getMessagesSnapshot, getLatestSequenceNumber } from '../stores/playgroundStore.svelte.js';
|
|
80
78
|
export { saveWorkflow, updateWorkflow, getWorkflow, getWorkflows, deleteWorkflow, getWorkflowCount, initializeSampleWorkflows } from '../services/workflowStorage.js';
|
|
81
79
|
export { globalSaveWorkflow, globalExportWorkflow } from '../services/globalSave.js';
|
|
82
80
|
export { fetchPortConfig, validatePortConfig } from '../services/portConfigApi.js';
|
|
83
81
|
export { fetchCategories, validateCategories } from '../services/categoriesApi.js';
|
|
84
82
|
export { fetchDynamicSchema, resolveExternalEditUrl, getEffectiveConfigEditOptions, clearSchemaCache, invalidateSchemaCache, hasConfigEditOptions, shouldShowExternalEdit, shouldUseDynamicSchema } from '../services/dynamicSchemaService.js';
|
|
85
|
-
export { getDraftStorageKey, saveDraft, loadDraft, deleteDraft, hasDraft, getDraftMetadata, clearAllDrafts, DraftAutoSaveManager } from '../services/draftStorage.js';
|
|
83
|
+
export { getDraftStorageKey, saveDraft, loadDraft, deleteDraft, hasDraft, getDraftMetadata, clearAllDrafts, setDraftStorage, getDraftStorage, resolveDraftStorage, DraftAutoSaveManager } from '../services/draftStorage.js';
|
|
84
|
+
export type { DraftStorageAdapter, DraftStorageType, DraftStorageOption } from '../services/draftStorage.js';
|
|
86
85
|
export { EnhancedFlowDropApiClient, ApiError } from '../api/enhanced-client.js';
|
|
87
|
-
export { isLoopbackEdge, isValidLoopbackCycle, PortCompatibilityChecker,
|
|
86
|
+
export { isLoopbackEdge, isValidLoopbackCycle, PortCompatibilityChecker, getPossibleConnections, validateConnection, getConnectionSuggestions, hasCycles, hasInvalidCycles, getExecutionOrder } from '../utils/connections.js';
|
|
88
87
|
export { fetchRuntimeConfig, getRuntimeConfig, clearRuntimeConfigCache, initRuntimeConfig } from '../config/runtimeConfig.js';
|
|
89
88
|
export type { RuntimeConfig } from '../config/runtimeConfig.js';
|
|
90
89
|
export type { Workflow, WorkflowNode, WorkflowEdge, NodeMetadata, NodePort, DynamicPort, Branch, ExecutionStatus, ExecutionResult, FlowDropConfig, PortConfig, ConfigSchema, ConfigProperty, ConfigEditOptions } from '../types/index.js';
|