@d34dman/flowdrop 0.0.61 → 0.0.62
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 +6 -0
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/agentspec/AgentSpecAdapter.js +3 -1
- package/dist/api/client.d.ts +4 -0
- package/dist/api/client.js +6 -1
- package/dist/api/enhanced-client.js +7 -6
- package/dist/components/App.svelte +143 -219
- package/dist/components/CanvasBanner.stories.svelte +25 -0
- package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
- package/dist/components/CanvasBanner.svelte +2 -2
- package/dist/components/ConfigForm.svelte +37 -36
- package/dist/components/ConfigPanel.stories.svelte +38 -0
- package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
- package/dist/components/ConfigPanel.svelte +2 -2
- package/dist/components/ConnectionLine.svelte +2 -2
- package/dist/components/FlowDropZone.svelte +18 -2
- package/dist/components/FlowDropZone.svelte.d.ts +2 -0
- package/dist/components/LoadingSpinner.stories.svelte +30 -0
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.stories.svelte +22 -0
- package/dist/components/Logo.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.svelte +33 -13
- package/dist/components/Logo.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +21 -0
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
- package/dist/components/MarkdownDisplay.svelte +4 -3
- package/dist/components/Navbar.stories.svelte +41 -0
- package/dist/components/Navbar.stories.svelte.d.ts +27 -0
- package/dist/components/Navbar.svelte +4 -4
- package/dist/components/NodeSidebar.svelte +12 -12
- package/dist/components/NodeStatusOverlay.stories.svelte +74 -0
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
- package/dist/components/PipelineStatus.svelte +11 -4
- package/dist/components/PortCoordinateTracker.svelte +1 -1
- package/dist/components/SchemaForm.stories.svelte +101 -0
- package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
- package/dist/components/SchemaForm.svelte +17 -12
- package/dist/components/SettingsModal.svelte +3 -3
- package/dist/components/SettingsPanel.svelte +23 -22
- package/dist/components/StatusIcon.stories.svelte +60 -0
- package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
- package/dist/components/StatusIcon.svelte +7 -0
- package/dist/components/StatusLabel.stories.svelte +17 -0
- package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.stories.svelte +25 -0
- package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.svelte +8 -8
- package/dist/components/UniversalNode.svelte +1 -1
- package/dist/components/WorkflowEditor.svelte +298 -294
- package/dist/components/form/FormAutocomplete.svelte +20 -19
- package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormField.svelte +3 -3
- package/dist/components/form/FormFieldLight.svelte +2 -2
- package/dist/components/form/FormFieldWrapper.stories.svelte +31 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormFieldset.svelte +7 -7
- package/dist/components/form/FormNumberField.stories.svelte +33 -0
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormRangeField.stories.svelte +31 -0
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormSelect.stories.svelte +50 -0
- package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTemplateEditor.svelte +2 -1
- package/dist/components/form/FormTextField.stories.svelte +30 -0
- package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextarea.stories.svelte +31 -0
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormToggle.stories.svelte +30 -0
- package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormUISchemaRenderer.svelte +1 -1
- package/dist/components/form/types.d.ts +15 -47
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +43 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +24 -24
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +49 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte +19 -19
- package/dist/components/interrupt/FormPrompt.svelte +15 -15
- package/dist/components/interrupt/InterruptBubble.svelte +202 -236
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +46 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ReviewPrompt.svelte +842 -0
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +34 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/TextInputPrompt.svelte +21 -21
- package/dist/components/nodes/GatewayNode.stories.svelte +76 -0
- package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/GatewayNode.svelte +19 -17
- package/dist/components/nodes/IdeaNode.stories.svelte +48 -0
- package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/IdeaNode.svelte +10 -26
- package/dist/components/nodes/NotesNode.stories.svelte +69 -0
- package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/NotesNode.svelte +8 -8
- package/dist/components/nodes/SimpleNode.stories.svelte +101 -0
- package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SimpleNode.svelte +16 -24
- package/dist/components/nodes/SquareNode.stories.svelte +56 -0
- package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SquareNode.svelte +13 -21
- package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/TerminalNode.svelte +6 -6
- package/dist/components/nodes/ToolNode.stories.svelte +71 -0
- package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/ToolNode.svelte +7 -15
- package/dist/components/nodes/WorkflowNode.stories.svelte +50 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/WorkflowNode.svelte +13 -13
- package/dist/components/playground/ChatPanel.svelte +48 -48
- package/dist/components/playground/ExecutionLogs.svelte +23 -23
- package/dist/components/playground/InputCollector.svelte +24 -24
- package/dist/components/playground/MessageBubble.stories.svelte +49 -0
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
- package/dist/components/playground/MessageBubble.svelte +49 -46
- package/dist/components/playground/Playground.svelte +194 -129
- package/dist/components/playground/PlaygroundModal.svelte +5 -5
- package/dist/components/playground/SessionManager.svelte +26 -26
- package/dist/config/constants.d.ts +22 -0
- package/dist/config/constants.js +22 -0
- package/dist/config/endpoints.d.ts +19 -0
- package/dist/config/runtimeConfig.js +2 -1
- package/dist/core/index.d.ts +5 -2
- package/dist/core/index.js +9 -1
- package/dist/editor/index.d.ts +13 -9
- package/dist/editor/index.js +15 -11
- package/dist/form/code.d.ts +2 -1
- package/dist/form/code.js +1 -3
- package/dist/form/markdown.d.ts +2 -1
- package/dist/form/markdown.js +1 -3
- package/dist/helpers/workflowEditorHelper.js +13 -9
- package/dist/mocks/app-forms.js +1 -0
- package/dist/mocks/app-navigation.js +3 -1
- package/dist/mocks/app-stores.d.ts +4 -4
- package/dist/playground/index.d.ts +4 -3
- package/dist/playground/index.js +12 -10
- package/dist/playground/mount.js +6 -13
- package/dist/services/agentSpecExecutionService.js +2 -1
- package/dist/services/api.js +10 -18
- package/dist/services/apiVariableService.js +2 -1
- package/dist/services/autoSaveService.d.ts +3 -3
- package/dist/services/autoSaveService.js +21 -17
- package/dist/services/categoriesApi.js +13 -5
- package/dist/services/draftStorage.js +5 -4
- package/dist/services/dynamicSchemaService.js +4 -4
- package/dist/services/globalSave.d.ts +60 -11
- package/dist/services/globalSave.js +160 -83
- package/dist/services/historyService.d.ts +2 -1
- package/dist/services/historyService.js +7 -3
- package/dist/services/interruptService.js +9 -8
- package/dist/services/nodeExecutionService.js +14 -6
- package/dist/services/playgroundService.js +2 -1
- package/dist/services/portConfigApi.js +11 -7
- package/dist/services/toastService.d.ts +1 -1
- package/dist/services/toastService.js +6 -5
- package/dist/services/variableService.js +3 -2
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/stores/{categoriesStore.d.ts → categoriesStore.svelte.d.ts} +3 -3
- package/dist/stores/{categoriesStore.js → categoriesStore.svelte.js} +15 -18
- package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
- package/dist/stores/editorStateMachine.svelte.js +132 -0
- package/dist/stores/{historyStore.d.ts → historyStore.svelte.d.ts} +18 -15
- package/dist/stores/{historyStore.js → historyStore.svelte.js} +40 -21
- package/dist/stores/{interruptStore.d.ts → interruptStore.svelte.d.ts} +16 -15
- package/dist/stores/{interruptStore.js → interruptStore.svelte.js} +85 -94
- package/dist/stores/{playgroundStore.d.ts → playgroundStore.svelte.d.ts} +41 -33
- package/dist/stores/{playgroundStore.js → playgroundStore.svelte.js} +164 -84
- package/dist/stores/{portCoordinateStore.d.ts → portCoordinateStore.svelte.d.ts} +10 -4
- package/dist/stores/{portCoordinateStore.js → portCoordinateStore.svelte.js} +38 -35
- package/dist/stores/{settingsStore.d.ts → settingsStore.svelte.d.ts} +45 -28
- package/dist/stores/{settingsStore.js → settingsStore.svelte.js} +169 -128
- package/dist/stores/{workflowStore.d.ts → workflowStore.svelte.d.ts} +101 -65
- package/dist/stores/{workflowStore.js → workflowStore.svelte.js} +285 -239
- package/dist/stories/CanvasDecorator.svelte +50 -0
- package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
- package/dist/stories/NodeDecorator.svelte +74 -0
- package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
- package/dist/stories/utils.d.ts +93 -0
- package/dist/stories/utils.js +122 -0
- package/dist/styles/base.css +114 -61
- package/dist/styles/toast.css +2 -2
- package/dist/styles/tokens.css +250 -185
- package/dist/svelte-app.d.ts +0 -6
- package/dist/svelte-app.js +13 -31
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interrupt.d.ts +89 -5
- package/dist/types/interrupt.js +13 -1
- package/dist/types/playground.d.ts +5 -0
- package/dist/types/settings.js +1 -1
- package/dist/utils/colors.js +4 -4
- package/dist/utils/connections.js +33 -8
- package/dist/utils/icons.js +1 -1
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/nodeWrapper.js +1 -1
- package/dist/utils/sanitize.d.ts +19 -0
- package/dist/utils/sanitize.js +31 -0
- package/dist/utils/validation.d.ts +29 -0
- package/dist/utils/validation.js +39 -0
- package/package.json +243 -232
|
@@ -1,75 +1,86 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Interrupt Store
|
|
2
|
+
* Interrupt Store (Svelte 5 Runes)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Rune-based reactive state for managing interrupt state using a lightweight state machine.
|
|
5
5
|
* Ensures valid state transitions and prevents deadlocks.
|
|
6
6
|
*
|
|
7
7
|
* @module stores/interruptStore
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
10
10
|
import { initialState, transition, isTerminalState, isSubmitting as checkIsSubmitting, hasError as checkHasError, getErrorMessage, getResolvedValue, toLegacyStatus } from '../types/interruptState.js';
|
|
11
|
+
import { logger } from '../utils/logger.js';
|
|
11
12
|
// =========================================================================
|
|
12
|
-
// Core
|
|
13
|
+
// Core Reactive State
|
|
13
14
|
// =========================================================================
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
+
* Reactive map of all interrupts by ID.
|
|
17
|
+
* Uses SvelteMap for deep reactivity with Svelte 5 runes.
|
|
16
18
|
* Key: interrupt ID, Value: Interrupt object with state
|
|
17
19
|
*/
|
|
18
|
-
|
|
20
|
+
let interrupts = $state(new SvelteMap());
|
|
19
21
|
// =========================================================================
|
|
20
|
-
//
|
|
22
|
+
// Getter Functions (replace derived stores)
|
|
21
23
|
// =========================================================================
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
25
|
+
* Get the reactive interrupts map.
|
|
26
|
+
* Use this in components within $derived() for reactivity.
|
|
24
27
|
*/
|
|
25
|
-
export
|
|
28
|
+
export function getInterruptsMap() {
|
|
29
|
+
return interrupts;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get pending interrupt IDs (interrupts not in a terminal state)
|
|
33
|
+
*/
|
|
34
|
+
export function getPendingInterruptIds() {
|
|
26
35
|
const pending = [];
|
|
27
|
-
|
|
36
|
+
interrupts.forEach((interrupt, id) => {
|
|
28
37
|
if (!isTerminalState(interrupt.machineState)) {
|
|
29
38
|
pending.push(id);
|
|
30
39
|
}
|
|
31
40
|
});
|
|
32
41
|
return pending;
|
|
33
|
-
}
|
|
42
|
+
}
|
|
34
43
|
/**
|
|
35
|
-
*
|
|
44
|
+
* Get pending interrupts array (interrupts not in a terminal state)
|
|
36
45
|
*/
|
|
37
|
-
export
|
|
46
|
+
export function getPendingInterrupts() {
|
|
38
47
|
const pending = [];
|
|
39
|
-
|
|
48
|
+
interrupts.forEach((interrupt) => {
|
|
40
49
|
if (!isTerminalState(interrupt.machineState)) {
|
|
41
50
|
pending.push(interrupt);
|
|
42
51
|
}
|
|
43
52
|
});
|
|
44
53
|
return pending;
|
|
45
|
-
}
|
|
54
|
+
}
|
|
46
55
|
/**
|
|
47
|
-
*
|
|
56
|
+
* Get count of pending interrupts
|
|
48
57
|
*/
|
|
49
|
-
export
|
|
58
|
+
export function getPendingInterruptCount() {
|
|
59
|
+
return getPendingInterruptIds().length;
|
|
60
|
+
}
|
|
50
61
|
/**
|
|
51
|
-
*
|
|
62
|
+
* Get resolved interrupts array
|
|
52
63
|
*/
|
|
53
|
-
export
|
|
64
|
+
export function getResolvedInterrupts() {
|
|
54
65
|
const resolved = [];
|
|
55
|
-
|
|
66
|
+
interrupts.forEach((interrupt) => {
|
|
56
67
|
if (interrupt.machineState.status === 'resolved') {
|
|
57
68
|
resolved.push(interrupt);
|
|
58
69
|
}
|
|
59
70
|
});
|
|
60
71
|
return resolved;
|
|
61
|
-
}
|
|
72
|
+
}
|
|
62
73
|
/**
|
|
63
|
-
*
|
|
74
|
+
* Check if any interrupt is currently submitting
|
|
64
75
|
*/
|
|
65
|
-
export
|
|
66
|
-
for (const interrupt of
|
|
76
|
+
export function getIsAnySubmitting() {
|
|
77
|
+
for (const interrupt of interrupts.values()) {
|
|
67
78
|
if (checkIsSubmitting(interrupt.machineState)) {
|
|
68
79
|
return true;
|
|
69
80
|
}
|
|
70
81
|
}
|
|
71
82
|
return false;
|
|
72
|
-
}
|
|
83
|
+
}
|
|
73
84
|
// =========================================================================
|
|
74
85
|
// State Machine Actions
|
|
75
86
|
// =========================================================================
|
|
@@ -81,8 +92,7 @@ export const isAnySubmitting = derived(interrupts, ($interrupts) => {
|
|
|
81
92
|
* @returns Transition result with validity and any errors
|
|
82
93
|
*/
|
|
83
94
|
function applyAction(interruptId, action) {
|
|
84
|
-
const
|
|
85
|
-
const interrupt = currentInterrupts.get(interruptId);
|
|
95
|
+
const interrupt = interrupts.get(interruptId);
|
|
86
96
|
if (!interrupt) {
|
|
87
97
|
return {
|
|
88
98
|
state: initialState,
|
|
@@ -92,29 +102,25 @@ function applyAction(interruptId, action) {
|
|
|
92
102
|
}
|
|
93
103
|
const result = transition(interrupt.machineState, action);
|
|
94
104
|
if (result.valid) {
|
|
95
|
-
interrupts.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
? result.state.
|
|
107
|
-
:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
updated.set(interruptId, newInterrupt);
|
|
112
|
-
}
|
|
113
|
-
return updated;
|
|
114
|
-
});
|
|
105
|
+
const current = interrupts.get(interruptId);
|
|
106
|
+
if (current) {
|
|
107
|
+
// Update machine state and sync legacy fields
|
|
108
|
+
const newInterrupt = {
|
|
109
|
+
...current,
|
|
110
|
+
machineState: result.state,
|
|
111
|
+
status: toLegacyStatus(result.state),
|
|
112
|
+
responseValue: getResolvedValue(result.state) ?? current.responseValue,
|
|
113
|
+
resolvedAt: result.state.status === 'resolved'
|
|
114
|
+
? result.state.resolvedAt
|
|
115
|
+
: result.state.status === 'cancelled'
|
|
116
|
+
? result.state.cancelledAt
|
|
117
|
+
: current.resolvedAt
|
|
118
|
+
};
|
|
119
|
+
interrupts.set(interruptId, newInterrupt);
|
|
120
|
+
}
|
|
115
121
|
}
|
|
116
122
|
else {
|
|
117
|
-
|
|
123
|
+
logger.warn(`[InterruptStore] Invalid transition: ${result.error}`);
|
|
118
124
|
}
|
|
119
125
|
return result;
|
|
120
126
|
}
|
|
@@ -131,18 +137,14 @@ export const interruptActions = {
|
|
|
131
137
|
* @param interrupt - The interrupt to add or update
|
|
132
138
|
*/
|
|
133
139
|
addInterrupt: (interrupt) => {
|
|
134
|
-
interrupts.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
};
|
|
143
|
-
updated.set(interrupt.id, interruptWithState);
|
|
144
|
-
return updated;
|
|
145
|
-
});
|
|
140
|
+
const existing = interrupts.get(interrupt.id);
|
|
141
|
+
// Preserve existing machine state if interrupt already exists
|
|
142
|
+
const machineState = existing?.machineState ?? initialState;
|
|
143
|
+
const interruptWithState = {
|
|
144
|
+
...interrupt,
|
|
145
|
+
machineState
|
|
146
|
+
};
|
|
147
|
+
interrupts.set(interrupt.id, interruptWithState);
|
|
146
148
|
},
|
|
147
149
|
/**
|
|
148
150
|
* Add multiple interrupts to the store
|
|
@@ -152,18 +154,14 @@ export const interruptActions = {
|
|
|
152
154
|
addInterrupts: (interruptList) => {
|
|
153
155
|
if (interruptList.length === 0)
|
|
154
156
|
return;
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
};
|
|
164
|
-
updated.set(interrupt.id, interruptWithState);
|
|
165
|
-
});
|
|
166
|
-
return updated;
|
|
157
|
+
interruptList.forEach((interrupt) => {
|
|
158
|
+
const existing = interrupts.get(interrupt.id);
|
|
159
|
+
const machineState = existing?.machineState ?? initialState;
|
|
160
|
+
const interruptWithState = {
|
|
161
|
+
...interrupt,
|
|
162
|
+
machineState
|
|
163
|
+
};
|
|
164
|
+
interrupts.set(interrupt.id, interruptWithState);
|
|
167
165
|
});
|
|
168
166
|
},
|
|
169
167
|
/**
|
|
@@ -251,11 +249,7 @@ export const interruptActions = {
|
|
|
251
249
|
* @param interruptId - The interrupt ID to remove
|
|
252
250
|
*/
|
|
253
251
|
removeInterrupt: (interruptId) => {
|
|
254
|
-
interrupts.
|
|
255
|
-
const updated = new Map($interrupts);
|
|
256
|
-
updated.delete(interruptId);
|
|
257
|
-
return updated;
|
|
258
|
-
});
|
|
252
|
+
interrupts.delete(interruptId);
|
|
259
253
|
},
|
|
260
254
|
/**
|
|
261
255
|
* Clear all interrupts for a specific session
|
|
@@ -263,27 +257,25 @@ export const interruptActions = {
|
|
|
263
257
|
* @param sessionId - The session ID to clear interrupts for
|
|
264
258
|
*/
|
|
265
259
|
clearSessionInterrupts: (sessionId) => {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
return updated;
|
|
260
|
+
const toDelete = [];
|
|
261
|
+
interrupts.forEach((interrupt, id) => {
|
|
262
|
+
if (interrupt.sessionId === sessionId) {
|
|
263
|
+
toDelete.push(id);
|
|
264
|
+
}
|
|
274
265
|
});
|
|
266
|
+
toDelete.forEach((id) => interrupts.delete(id));
|
|
275
267
|
},
|
|
276
268
|
/**
|
|
277
269
|
* Alias for clearSessionInterrupts
|
|
278
270
|
*/
|
|
279
271
|
clearInterrupts: () => {
|
|
280
|
-
interrupts.
|
|
272
|
+
interrupts.clear();
|
|
281
273
|
},
|
|
282
274
|
/**
|
|
283
275
|
* Reset all interrupt state
|
|
284
276
|
*/
|
|
285
277
|
reset: () => {
|
|
286
|
-
interrupts.
|
|
278
|
+
interrupts.clear();
|
|
287
279
|
}
|
|
288
280
|
};
|
|
289
281
|
// =========================================================================
|
|
@@ -296,7 +288,7 @@ export const interruptActions = {
|
|
|
296
288
|
* @returns The interrupt or undefined
|
|
297
289
|
*/
|
|
298
290
|
export function getInterrupt(interruptId) {
|
|
299
|
-
return
|
|
291
|
+
return interrupts.get(interruptId);
|
|
300
292
|
}
|
|
301
293
|
/**
|
|
302
294
|
* Check if an interrupt is pending (not resolved or cancelled)
|
|
@@ -305,7 +297,7 @@ export function getInterrupt(interruptId) {
|
|
|
305
297
|
* @returns True if the interrupt exists and is pending
|
|
306
298
|
*/
|
|
307
299
|
export function isInterruptPending(interruptId) {
|
|
308
|
-
const interrupt =
|
|
300
|
+
const interrupt = interrupts.get(interruptId);
|
|
309
301
|
return interrupt ? !isTerminalState(interrupt.machineState) : false;
|
|
310
302
|
}
|
|
311
303
|
/**
|
|
@@ -315,7 +307,7 @@ export function isInterruptPending(interruptId) {
|
|
|
315
307
|
* @returns True if the interrupt is being submitted
|
|
316
308
|
*/
|
|
317
309
|
export function isInterruptSubmitting(interruptId) {
|
|
318
|
-
const interrupt =
|
|
310
|
+
const interrupt = interrupts.get(interruptId);
|
|
319
311
|
return interrupt ? checkIsSubmitting(interrupt.machineState) : false;
|
|
320
312
|
}
|
|
321
313
|
/**
|
|
@@ -325,7 +317,7 @@ export function isInterruptSubmitting(interruptId) {
|
|
|
325
317
|
* @returns The error message or undefined
|
|
326
318
|
*/
|
|
327
319
|
export function getInterruptError(interruptId) {
|
|
328
|
-
const interrupt =
|
|
320
|
+
const interrupt = interrupts.get(interruptId);
|
|
329
321
|
return interrupt ? getErrorMessage(interrupt.machineState) : undefined;
|
|
330
322
|
}
|
|
331
323
|
/**
|
|
@@ -335,8 +327,7 @@ export function getInterruptError(interruptId) {
|
|
|
335
327
|
* @returns The interrupt or undefined
|
|
336
328
|
*/
|
|
337
329
|
export function getInterruptByMessageId(messageId) {
|
|
338
|
-
const
|
|
339
|
-
for (const interrupt of interruptMap.values()) {
|
|
330
|
+
for (const interrupt of interrupts.values()) {
|
|
340
331
|
if (interrupt.messageId === messageId) {
|
|
341
332
|
return interrupt;
|
|
342
333
|
}
|
|
@@ -350,6 +341,6 @@ export function getInterruptByMessageId(messageId) {
|
|
|
350
341
|
* @returns True if the interrupt has an error
|
|
351
342
|
*/
|
|
352
343
|
export function interruptHasError(interruptId) {
|
|
353
|
-
const interrupt =
|
|
344
|
+
const interrupt = interrupts.get(interruptId);
|
|
354
345
|
return interrupt ? checkHasError(interrupt.machineState) : false;
|
|
355
346
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Playground Store
|
|
3
3
|
*
|
|
4
|
-
* Svelte
|
|
4
|
+
* Svelte 5 rune-based state for managing playground state including sessions,
|
|
5
5
|
* messages, and execution status.
|
|
6
6
|
*
|
|
7
7
|
* @module stores/playgroundStore
|
|
@@ -9,72 +9,72 @@
|
|
|
9
9
|
import type { PlaygroundSession, PlaygroundMessage, PlaygroundInputField, PlaygroundSessionStatus, PlaygroundMessagesApiResponse } from '../types/playground.js';
|
|
10
10
|
import type { Workflow } from '../types/index.js';
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Get the current session
|
|
13
13
|
*/
|
|
14
|
-
export declare
|
|
14
|
+
export declare function getCurrentSession(): PlaygroundSession | null;
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Get all sessions
|
|
17
17
|
*/
|
|
18
|
-
export declare
|
|
18
|
+
export declare function getSessions(): PlaygroundSession[];
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Get all messages
|
|
21
21
|
*/
|
|
22
|
-
export declare
|
|
22
|
+
export declare function getMessages(): PlaygroundMessage[];
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Get executing state
|
|
25
25
|
*/
|
|
26
|
-
export declare
|
|
26
|
+
export declare function getIsExecuting(): boolean;
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* Get loading state
|
|
29
29
|
*/
|
|
30
|
-
export declare
|
|
30
|
+
export declare function getIsLoading(): boolean;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Get error state
|
|
33
33
|
*/
|
|
34
|
-
export declare
|
|
34
|
+
export declare function getError(): string | null;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Get the current workflow
|
|
37
37
|
*/
|
|
38
|
-
export declare
|
|
38
|
+
export declare function getCurrentWorkflow(): Workflow | null;
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Get the last poll timestamp
|
|
41
41
|
*/
|
|
42
|
-
export declare
|
|
42
|
+
export declare function getLastPollTimestamp(): string | null;
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
44
|
+
* Get current session status
|
|
45
45
|
*/
|
|
46
|
-
export declare
|
|
46
|
+
export declare function getSessionStatus(): PlaygroundSessionStatus;
|
|
47
47
|
/**
|
|
48
|
-
*
|
|
48
|
+
* Get message count
|
|
49
49
|
*/
|
|
50
|
-
export declare
|
|
50
|
+
export declare function getMessageCount(): number;
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* Get chat messages (excludes log messages)
|
|
53
53
|
*/
|
|
54
|
-
export declare
|
|
54
|
+
export declare function getChatMessages(): PlaygroundMessage[];
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
56
|
+
* Get log messages only
|
|
57
57
|
*/
|
|
58
|
-
export declare
|
|
58
|
+
export declare function getLogMessages(): PlaygroundMessage[];
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Get the latest message
|
|
61
61
|
*/
|
|
62
|
-
export declare
|
|
62
|
+
export declare function getLatestMessage(): PlaygroundMessage | null;
|
|
63
63
|
/**
|
|
64
|
-
*
|
|
64
|
+
* Get input fields from workflow input nodes
|
|
65
65
|
*
|
|
66
66
|
* Analyzes the workflow to extract input nodes and their configuration
|
|
67
67
|
* schemas for auto-generating input forms.
|
|
68
68
|
*/
|
|
69
|
-
export declare
|
|
69
|
+
export declare function getInputFields(): PlaygroundInputField[];
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Check if workflow has a chat input
|
|
72
72
|
*/
|
|
73
|
-
export declare
|
|
73
|
+
export declare function getHasChatInput(): boolean;
|
|
74
74
|
/**
|
|
75
|
-
*
|
|
75
|
+
* Get session count
|
|
76
76
|
*/
|
|
77
|
-
export declare
|
|
77
|
+
export declare function getSessionCount(): number;
|
|
78
78
|
/**
|
|
79
79
|
* Playground store actions for modifying state
|
|
80
80
|
*/
|
|
@@ -209,6 +209,14 @@ export declare function getMessagesSnapshot(): PlaygroundMessage[];
|
|
|
209
209
|
* @returns ISO 8601 timestamp of the latest message, or null
|
|
210
210
|
*/
|
|
211
211
|
export declare function getLatestMessageTimestamp(): string | null;
|
|
212
|
+
/**
|
|
213
|
+
* Subscribe to session status changes using $effect.root.
|
|
214
|
+
* This is designed for use in non-component contexts (e.g., mount.ts).
|
|
215
|
+
*
|
|
216
|
+
* @param callback - Called when session status changes
|
|
217
|
+
* @returns Cleanup function to stop the subscription
|
|
218
|
+
*/
|
|
219
|
+
export declare function subscribeToSessionStatus(callback: (status: PlaygroundSessionStatus, previousStatus: PlaygroundSessionStatus) => void): () => void;
|
|
212
220
|
/**
|
|
213
221
|
* Refresh messages for the current session
|
|
214
222
|
*
|