@d34dman/flowdrop 0.0.61 → 0.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +6 -0
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/agentspec/AgentSpecAdapter.js +3 -1
  4. package/dist/api/client.d.ts +4 -0
  5. package/dist/api/client.js +6 -1
  6. package/dist/api/enhanced-client.js +7 -6
  7. package/dist/components/App.svelte +143 -219
  8. package/dist/components/CanvasBanner.stories.svelte +25 -0
  9. package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
  10. package/dist/components/CanvasBanner.svelte +2 -2
  11. package/dist/components/ConfigForm.svelte +37 -36
  12. package/dist/components/ConfigPanel.stories.svelte +38 -0
  13. package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
  14. package/dist/components/ConfigPanel.svelte +2 -2
  15. package/dist/components/ConnectionLine.svelte +2 -2
  16. package/dist/components/FlowDropZone.svelte +18 -2
  17. package/dist/components/FlowDropZone.svelte.d.ts +2 -0
  18. package/dist/components/LoadingSpinner.stories.svelte +30 -0
  19. package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
  20. package/dist/components/Logo.stories.svelte +22 -0
  21. package/dist/components/Logo.stories.svelte.d.ts +27 -0
  22. package/dist/components/Logo.svelte +33 -13
  23. package/dist/components/Logo.svelte.d.ts +1 -1
  24. package/dist/components/MarkdownDisplay.stories.svelte +21 -0
  25. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
  26. package/dist/components/MarkdownDisplay.svelte +4 -3
  27. package/dist/components/Navbar.stories.svelte +41 -0
  28. package/dist/components/Navbar.stories.svelte.d.ts +27 -0
  29. package/dist/components/Navbar.svelte +4 -4
  30. package/dist/components/NodeSidebar.svelte +12 -12
  31. package/dist/components/NodeStatusOverlay.stories.svelte +74 -0
  32. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
  33. package/dist/components/PipelineStatus.svelte +11 -4
  34. package/dist/components/PortCoordinateTracker.svelte +1 -1
  35. package/dist/components/SchemaForm.stories.svelte +101 -0
  36. package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
  37. package/dist/components/SchemaForm.svelte +17 -12
  38. package/dist/components/SettingsModal.svelte +3 -3
  39. package/dist/components/SettingsPanel.svelte +23 -22
  40. package/dist/components/StatusIcon.stories.svelte +60 -0
  41. package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
  42. package/dist/components/StatusIcon.svelte +7 -0
  43. package/dist/components/StatusLabel.stories.svelte +17 -0
  44. package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
  45. package/dist/components/ThemeToggle.stories.svelte +25 -0
  46. package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
  47. package/dist/components/ThemeToggle.svelte +8 -8
  48. package/dist/components/UniversalNode.svelte +1 -1
  49. package/dist/components/WorkflowEditor.svelte +298 -298
  50. package/dist/components/form/FormAutocomplete.svelte +20 -19
  51. package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
  52. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
  53. package/dist/components/form/FormField.svelte +3 -3
  54. package/dist/components/form/FormFieldLight.svelte +2 -2
  55. package/dist/components/form/FormFieldWrapper.stories.svelte +31 -0
  56. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
  57. package/dist/components/form/FormFieldset.svelte +7 -7
  58. package/dist/components/form/FormNumberField.stories.svelte +33 -0
  59. package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
  60. package/dist/components/form/FormRangeField.stories.svelte +31 -0
  61. package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
  62. package/dist/components/form/FormSelect.stories.svelte +50 -0
  63. package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
  64. package/dist/components/form/FormTemplateEditor.svelte +2 -1
  65. package/dist/components/form/FormTextField.stories.svelte +30 -0
  66. package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
  67. package/dist/components/form/FormTextarea.stories.svelte +31 -0
  68. package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
  69. package/dist/components/form/FormToggle.stories.svelte +30 -0
  70. package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
  71. package/dist/components/form/FormUISchemaRenderer.svelte +1 -1
  72. package/dist/components/form/types.d.ts +15 -47
  73. package/dist/components/interrupt/ChoicePrompt.stories.svelte +43 -0
  74. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
  75. package/dist/components/interrupt/ChoicePrompt.svelte +24 -24
  76. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +49 -0
  77. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
  78. package/dist/components/interrupt/ConfirmationPrompt.svelte +19 -19
  79. package/dist/components/interrupt/FormPrompt.svelte +15 -15
  80. package/dist/components/interrupt/InterruptBubble.svelte +202 -236
  81. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +1 -1
  82. package/dist/components/interrupt/ReviewPrompt.stories.svelte +46 -0
  83. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
  84. package/dist/components/interrupt/ReviewPrompt.svelte +842 -0
  85. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
  86. package/dist/components/interrupt/TextInputPrompt.stories.svelte +34 -0
  87. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
  88. package/dist/components/interrupt/TextInputPrompt.svelte +21 -21
  89. package/dist/components/nodes/GatewayNode.stories.svelte +76 -0
  90. package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
  91. package/dist/components/nodes/GatewayNode.svelte +19 -17
  92. package/dist/components/nodes/IdeaNode.stories.svelte +48 -0
  93. package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
  94. package/dist/components/nodes/IdeaNode.svelte +10 -26
  95. package/dist/components/nodes/NotesNode.stories.svelte +69 -0
  96. package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
  97. package/dist/components/nodes/NotesNode.svelte +8 -8
  98. package/dist/components/nodes/SimpleNode.stories.svelte +101 -0
  99. package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
  100. package/dist/components/nodes/SimpleNode.svelte +16 -24
  101. package/dist/components/nodes/SquareNode.stories.svelte +56 -0
  102. package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
  103. package/dist/components/nodes/SquareNode.svelte +13 -21
  104. package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
  105. package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
  106. package/dist/components/nodes/TerminalNode.svelte +7 -7
  107. package/dist/components/nodes/ToolNode.stories.svelte +71 -0
  108. package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
  109. package/dist/components/nodes/ToolNode.svelte +7 -15
  110. package/dist/components/nodes/WorkflowNode.stories.svelte +50 -0
  111. package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
  112. package/dist/components/nodes/WorkflowNode.svelte +13 -13
  113. package/dist/components/playground/ChatPanel.svelte +48 -48
  114. package/dist/components/playground/ExecutionLogs.svelte +23 -23
  115. package/dist/components/playground/InputCollector.svelte +24 -24
  116. package/dist/components/playground/MessageBubble.stories.svelte +49 -0
  117. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
  118. package/dist/components/playground/MessageBubble.svelte +49 -46
  119. package/dist/components/playground/Playground.svelte +194 -129
  120. package/dist/components/playground/PlaygroundModal.svelte +5 -5
  121. package/dist/components/playground/SessionManager.svelte +26 -26
  122. package/dist/config/constants.d.ts +22 -0
  123. package/dist/config/constants.js +22 -0
  124. package/dist/config/endpoints.d.ts +19 -0
  125. package/dist/config/runtimeConfig.js +2 -1
  126. package/dist/core/index.d.ts +5 -2
  127. package/dist/core/index.js +9 -1
  128. package/dist/editor/index.d.ts +13 -9
  129. package/dist/editor/index.js +15 -11
  130. package/dist/form/code.d.ts +2 -1
  131. package/dist/form/code.js +1 -3
  132. package/dist/form/markdown.d.ts +2 -1
  133. package/dist/form/markdown.js +1 -3
  134. package/dist/helpers/workflowEditorHelper.js +18 -33
  135. package/dist/mocks/app-forms.js +1 -0
  136. package/dist/mocks/app-navigation.js +3 -1
  137. package/dist/mocks/app-stores.d.ts +4 -4
  138. package/dist/playground/index.d.ts +4 -3
  139. package/dist/playground/index.js +12 -10
  140. package/dist/playground/mount.js +6 -13
  141. package/dist/services/agentSpecExecutionService.js +2 -1
  142. package/dist/services/api.js +10 -18
  143. package/dist/services/apiVariableService.js +2 -1
  144. package/dist/services/autoSaveService.d.ts +3 -3
  145. package/dist/services/autoSaveService.js +21 -17
  146. package/dist/services/categoriesApi.js +13 -5
  147. package/dist/services/draftStorage.js +5 -4
  148. package/dist/services/dynamicSchemaService.js +4 -4
  149. package/dist/services/globalSave.d.ts +60 -11
  150. package/dist/services/globalSave.js +160 -83
  151. package/dist/services/historyService.d.ts +2 -1
  152. package/dist/services/historyService.js +7 -3
  153. package/dist/services/interruptService.js +9 -8
  154. package/dist/services/nodeExecutionService.js +14 -6
  155. package/dist/services/playgroundService.js +2 -1
  156. package/dist/services/portConfigApi.js +11 -7
  157. package/dist/services/toastService.d.ts +1 -1
  158. package/dist/services/toastService.js +6 -5
  159. package/dist/services/variableService.js +3 -2
  160. package/dist/settings/index.d.ts +1 -1
  161. package/dist/settings/index.js +1 -1
  162. package/dist/stores/{categoriesStore.d.ts → categoriesStore.svelte.d.ts} +3 -3
  163. package/dist/stores/{categoriesStore.js → categoriesStore.svelte.js} +15 -18
  164. package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
  165. package/dist/stores/editorStateMachine.svelte.js +132 -0
  166. package/dist/stores/{historyStore.d.ts → historyStore.svelte.d.ts} +18 -15
  167. package/dist/stores/{historyStore.js → historyStore.svelte.js} +40 -21
  168. package/dist/stores/{interruptStore.d.ts → interruptStore.svelte.d.ts} +16 -15
  169. package/dist/stores/{interruptStore.js → interruptStore.svelte.js} +85 -94
  170. package/dist/stores/{playgroundStore.d.ts → playgroundStore.svelte.d.ts} +41 -33
  171. package/dist/stores/{playgroundStore.js → playgroundStore.svelte.js} +164 -84
  172. package/dist/stores/{portCoordinateStore.d.ts → portCoordinateStore.svelte.d.ts} +10 -4
  173. package/dist/stores/{portCoordinateStore.js → portCoordinateStore.svelte.js} +38 -35
  174. package/dist/stores/{settingsStore.d.ts → settingsStore.svelte.d.ts} +45 -28
  175. package/dist/stores/{settingsStore.js → settingsStore.svelte.js} +169 -128
  176. package/dist/stores/{workflowStore.d.ts → workflowStore.svelte.d.ts} +101 -65
  177. package/dist/stores/{workflowStore.js → workflowStore.svelte.js} +285 -239
  178. package/dist/stories/CanvasDecorator.svelte +50 -0
  179. package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
  180. package/dist/stories/NodeDecorator.svelte +74 -0
  181. package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
  182. package/dist/stories/utils.d.ts +93 -0
  183. package/dist/stories/utils.js +122 -0
  184. package/dist/styles/base.css +114 -61
  185. package/dist/styles/toast.css +2 -2
  186. package/dist/styles/tokens.css +250 -185
  187. package/dist/svelte-app.d.ts +0 -6
  188. package/dist/svelte-app.js +13 -31
  189. package/dist/types/index.d.ts +2 -0
  190. package/dist/types/interrupt.d.ts +89 -5
  191. package/dist/types/interrupt.js +13 -1
  192. package/dist/types/playground.d.ts +5 -0
  193. package/dist/types/settings.js +1 -1
  194. package/dist/utils/colors.js +4 -4
  195. package/dist/utils/connections.js +33 -8
  196. package/dist/utils/icons.js +1 -1
  197. package/dist/utils/logger.d.ts +47 -0
  198. package/dist/utils/logger.js +72 -0
  199. package/dist/utils/nodeWrapper.js +1 -1
  200. package/dist/utils/sanitize.d.ts +19 -0
  201. package/dist/utils/sanitize.js +31 -0
  202. package/dist/utils/validation.d.ts +29 -0
  203. package/dist/utils/validation.js +39 -0
  204. package/package.json +243 -232
@@ -1,75 +1,86 @@
1
1
  /**
2
- * Interrupt Store
2
+ * Interrupt Store (Svelte 5 Runes)
3
3
  *
4
- * Svelte stores for managing interrupt state using a lightweight state machine.
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 { writable, derived, get } from 'svelte/store';
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 Stores
13
+ // Core Reactive State
13
14
  // =========================================================================
14
15
  /**
15
- * Map of all interrupts by ID
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
- export const interrupts = writable(new Map());
20
+ let interrupts = $state(new SvelteMap());
19
21
  // =========================================================================
20
- // Derived Stores
22
+ // Getter Functions (replace derived stores)
21
23
  // =========================================================================
22
24
  /**
23
- * Derived store for pending interrupt IDs
25
+ * Get the reactive interrupts map.
26
+ * Use this in components within $derived() for reactivity.
24
27
  */
25
- export const pendingInterruptIds = derived(interrupts, ($interrupts) => {
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
- $interrupts.forEach((interrupt, id) => {
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
- * Derived store for pending interrupts array
44
+ * Get pending interrupts array (interrupts not in a terminal state)
36
45
  */
37
- export const pendingInterrupts = derived(interrupts, ($interrupts) => {
46
+ export function getPendingInterrupts() {
38
47
  const pending = [];
39
- $interrupts.forEach((interrupt) => {
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
- * Derived store for count of pending interrupts
56
+ * Get count of pending interrupts
48
57
  */
49
- export const pendingInterruptCount = derived(pendingInterruptIds, ($pendingIds) => $pendingIds.length);
58
+ export function getPendingInterruptCount() {
59
+ return getPendingInterruptIds().length;
60
+ }
50
61
  /**
51
- * Derived store for resolved interrupts
62
+ * Get resolved interrupts array
52
63
  */
53
- export const resolvedInterrupts = derived(interrupts, ($interrupts) => {
64
+ export function getResolvedInterrupts() {
54
65
  const resolved = [];
55
- $interrupts.forEach((interrupt) => {
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
- * Derived store to check if any interrupt is currently submitting
74
+ * Check if any interrupt is currently submitting
64
75
  */
65
- export const isAnySubmitting = derived(interrupts, ($interrupts) => {
66
- for (const interrupt of $interrupts.values()) {
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 currentInterrupts = get(interrupts);
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.update(($interrupts) => {
96
- const updated = new Map($interrupts);
97
- const current = updated.get(interruptId);
98
- if (current) {
99
- // Update machine state and sync legacy fields
100
- const newInterrupt = {
101
- ...current,
102
- machineState: result.state,
103
- status: toLegacyStatus(result.state),
104
- responseValue: getResolvedValue(result.state) ?? current.responseValue,
105
- resolvedAt: result.state.status === 'resolved'
106
- ? result.state.resolvedAt
107
- : result.state.status === 'cancelled'
108
- ? result.state.cancelledAt
109
- : current.resolvedAt
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
- console.warn(`[InterruptStore] Invalid transition: ${result.error}`);
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.update(($interrupts) => {
135
- const updated = new Map($interrupts);
136
- const existing = updated.get(interrupt.id);
137
- // Preserve existing machine state if interrupt already exists
138
- const machineState = existing?.machineState ?? initialState;
139
- const interruptWithState = {
140
- ...interrupt,
141
- machineState
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
- interrupts.update(($interrupts) => {
156
- const updated = new Map($interrupts);
157
- interruptList.forEach((interrupt) => {
158
- const existing = updated.get(interrupt.id);
159
- const machineState = existing?.machineState ?? initialState;
160
- const interruptWithState = {
161
- ...interrupt,
162
- machineState
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.update(($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
- interrupts.update(($interrupts) => {
267
- const updated = new Map($interrupts);
268
- $interrupts.forEach((interrupt, id) => {
269
- if (interrupt.sessionId === sessionId) {
270
- updated.delete(id);
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.set(new Map());
272
+ interrupts.clear();
281
273
  },
282
274
  /**
283
275
  * Reset all interrupt state
284
276
  */
285
277
  reset: () => {
286
- interrupts.set(new Map());
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 get(interrupts).get(interruptId);
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 = get(interrupts).get(interruptId);
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 = get(interrupts).get(interruptId);
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 = get(interrupts).get(interruptId);
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 interruptMap = get(interrupts);
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 = get(interrupts).get(interruptId);
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 stores for managing playground state including sessions,
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
- * Currently active playground session
12
+ * Get the current session
13
13
  */
14
- export declare const currentSession: import("svelte/store").Writable<PlaygroundSession>;
14
+ export declare function getCurrentSession(): PlaygroundSession | null;
15
15
  /**
16
- * List of all sessions for the current workflow
16
+ * Get all sessions
17
17
  */
18
- export declare const sessions: import("svelte/store").Writable<PlaygroundSession[]>;
18
+ export declare function getSessions(): PlaygroundSession[];
19
19
  /**
20
- * Messages in the current session
20
+ * Get all messages
21
21
  */
22
- export declare const messages: import("svelte/store").Writable<PlaygroundMessage[]>;
22
+ export declare function getMessages(): PlaygroundMessage[];
23
23
  /**
24
- * Whether an execution is currently running
24
+ * Get executing state
25
25
  */
26
- export declare const isExecuting: import("svelte/store").Writable<boolean>;
26
+ export declare function getIsExecuting(): boolean;
27
27
  /**
28
- * Whether we are currently loading data
28
+ * Get loading state
29
29
  */
30
- export declare const isLoading: import("svelte/store").Writable<boolean>;
30
+ export declare function getIsLoading(): boolean;
31
31
  /**
32
- * Current error message, if any
32
+ * Get error state
33
33
  */
34
- export declare const error: import("svelte/store").Writable<string>;
34
+ export declare function getError(): string | null;
35
35
  /**
36
- * Current workflow being tested
36
+ * Get the current workflow
37
37
  */
38
- export declare const currentWorkflow: import("svelte/store").Writable<Workflow>;
38
+ export declare function getCurrentWorkflow(): Workflow | null;
39
39
  /**
40
- * Last polling timestamp for incremental message fetching
40
+ * Get the last poll timestamp
41
41
  */
42
- export declare const lastPollTimestamp: import("svelte/store").Writable<string>;
42
+ export declare function getLastPollTimestamp(): string | null;
43
43
  /**
44
- * Derived store for current session status
44
+ * Get current session status
45
45
  */
46
- export declare const sessionStatus: import("svelte/store").Readable<PlaygroundSessionStatus>;
46
+ export declare function getSessionStatus(): PlaygroundSessionStatus;
47
47
  /**
48
- * Derived store for message count
48
+ * Get message count
49
49
  */
50
- export declare const messageCount: import("svelte/store").Readable<number>;
50
+ export declare function getMessageCount(): number;
51
51
  /**
52
- * Derived store for chat messages (excludes log messages)
52
+ * Get chat messages (excludes log messages)
53
53
  */
54
- export declare const chatMessages: import("svelte/store").Readable<PlaygroundMessage[]>;
54
+ export declare function getChatMessages(): PlaygroundMessage[];
55
55
  /**
56
- * Derived store for log messages only
56
+ * Get log messages only
57
57
  */
58
- export declare const logMessages: import("svelte/store").Readable<PlaygroundMessage[]>;
58
+ export declare function getLogMessages(): PlaygroundMessage[];
59
59
  /**
60
- * Derived store for the latest message
60
+ * Get the latest message
61
61
  */
62
- export declare const latestMessage: import("svelte/store").Readable<PlaygroundMessage>;
62
+ export declare function getLatestMessage(): PlaygroundMessage | null;
63
63
  /**
64
- * Derived store for input fields from workflow input nodes
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 const inputFields: import("svelte/store").Readable<PlaygroundInputField[]>;
69
+ export declare function getInputFields(): PlaygroundInputField[];
70
70
  /**
71
- * Derived store for detecting if workflow has a chat input
71
+ * Check if workflow has a chat input
72
72
  */
73
- export declare const hasChatInput: import("svelte/store").Readable<boolean>;
73
+ export declare function getHasChatInput(): boolean;
74
74
  /**
75
- * Derived store for session count
75
+ * Get session count
76
76
  */
77
- export declare const sessionCount: import("svelte/store").Readable<number>;
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
  *