stelo 1.0.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.
Files changed (141) hide show
  1. package/LICENSE +184 -0
  2. package/README.md +853 -0
  3. package/dist/accessibility.d.ts +227 -0
  4. package/dist/accessibility.d.ts.map +1 -0
  5. package/dist/accessibility.js +602 -0
  6. package/dist/accessibility.js.map +1 -0
  7. package/dist/agent.d.ts +870 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +1107 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/audio-stream.d.ts +114 -0
  12. package/dist/audio-stream.d.ts.map +1 -0
  13. package/dist/audio-stream.js +167 -0
  14. package/dist/audio-stream.js.map +1 -0
  15. package/dist/clipboard.d.ts +99 -0
  16. package/dist/clipboard.d.ts.map +1 -0
  17. package/dist/clipboard.js +352 -0
  18. package/dist/clipboard.js.map +1 -0
  19. package/dist/config.d.ts +183 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +477 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context.d.ts +213 -0
  24. package/dist/context.d.ts.map +1 -0
  25. package/dist/context.js +387 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/cortex.d.ts +548 -0
  28. package/dist/cortex.d.ts.map +1 -0
  29. package/dist/cortex.js +1479 -0
  30. package/dist/cortex.js.map +1 -0
  31. package/dist/errors.d.ts +133 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +278 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/events.d.ts +227 -0
  36. package/dist/events.d.ts.map +1 -0
  37. package/dist/events.js +429 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/executor.d.ts +212 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +545 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/index.d.ts +69 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +167 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/integration.d.ts +159 -0
  48. package/dist/integration.d.ts.map +1 -0
  49. package/dist/integration.js +533 -0
  50. package/dist/integration.js.map +1 -0
  51. package/dist/keyboard.d.ts +276 -0
  52. package/dist/keyboard.d.ts.map +1 -0
  53. package/dist/keyboard.js +404 -0
  54. package/dist/keyboard.js.map +1 -0
  55. package/dist/logger.d.ts +198 -0
  56. package/dist/logger.d.ts.map +1 -0
  57. package/dist/logger.js +516 -0
  58. package/dist/logger.js.map +1 -0
  59. package/dist/middleware.d.ts +183 -0
  60. package/dist/middleware.d.ts.map +1 -0
  61. package/dist/middleware.js +493 -0
  62. package/dist/middleware.js.map +1 -0
  63. package/dist/monitor.d.ts +136 -0
  64. package/dist/monitor.d.ts.map +1 -0
  65. package/dist/monitor.js +341 -0
  66. package/dist/monitor.js.map +1 -0
  67. package/dist/mouse.d.ts +290 -0
  68. package/dist/mouse.d.ts.map +1 -0
  69. package/dist/mouse.js +466 -0
  70. package/dist/mouse.js.map +1 -0
  71. package/dist/plugin.d.ts +157 -0
  72. package/dist/plugin.d.ts.map +1 -0
  73. package/dist/plugin.js +409 -0
  74. package/dist/plugin.js.map +1 -0
  75. package/dist/process.d.ts +106 -0
  76. package/dist/process.d.ts.map +1 -0
  77. package/dist/process.js +326 -0
  78. package/dist/process.js.map +1 -0
  79. package/dist/recorder.d.ts +100 -0
  80. package/dist/recorder.d.ts.map +1 -0
  81. package/dist/recorder.js +258 -0
  82. package/dist/recorder.js.map +1 -0
  83. package/dist/safety.d.ts +59 -0
  84. package/dist/safety.d.ts.map +1 -0
  85. package/dist/safety.js +98 -0
  86. package/dist/safety.js.map +1 -0
  87. package/dist/scheduler.d.ts +152 -0
  88. package/dist/scheduler.d.ts.map +1 -0
  89. package/dist/scheduler.js +615 -0
  90. package/dist/scheduler.js.map +1 -0
  91. package/dist/screen.d.ts +96 -0
  92. package/dist/screen.d.ts.map +1 -0
  93. package/dist/screen.js +154 -0
  94. package/dist/screen.js.map +1 -0
  95. package/dist/session.d.ts +209 -0
  96. package/dist/session.d.ts.map +1 -0
  97. package/dist/session.js +479 -0
  98. package/dist/session.js.map +1 -0
  99. package/dist/stream.d.ts +168 -0
  100. package/dist/stream.d.ts.map +1 -0
  101. package/dist/stream.js +298 -0
  102. package/dist/stream.js.map +1 -0
  103. package/dist/telemetry.d.ts +223 -0
  104. package/dist/telemetry.d.ts.map +1 -0
  105. package/dist/telemetry.js +433 -0
  106. package/dist/telemetry.js.map +1 -0
  107. package/dist/types.d.ts +165 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +8 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/bezier.d.ts +51 -0
  112. package/dist/utils/bezier.d.ts.map +1 -0
  113. package/dist/utils/bezier.js +117 -0
  114. package/dist/utils/bezier.js.map +1 -0
  115. package/dist/utils/helpers.d.ts +90 -0
  116. package/dist/utils/helpers.d.ts.map +1 -0
  117. package/dist/utils/helpers.js +143 -0
  118. package/dist/utils/helpers.js.map +1 -0
  119. package/dist/utils/index.d.ts +4 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +18 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/validation.d.ts +254 -0
  124. package/dist/validation.d.ts.map +1 -0
  125. package/dist/validation.js +478 -0
  126. package/dist/validation.js.map +1 -0
  127. package/dist/vision.d.ts +719 -0
  128. package/dist/vision.d.ts.map +1 -0
  129. package/dist/vision.js +1197 -0
  130. package/dist/vision.js.map +1 -0
  131. package/dist/window.d.ts +80 -0
  132. package/dist/window.d.ts.map +1 -0
  133. package/dist/window.js +170 -0
  134. package/dist/window.js.map +1 -0
  135. package/dist/workflow.d.ts +224 -0
  136. package/dist/workflow.d.ts.map +1 -0
  137. package/dist/workflow.js +578 -0
  138. package/dist/workflow.js.map +1 -0
  139. package/index.d.ts +840 -0
  140. package/index.js +495 -0
  141. package/package.json +91 -0
@@ -0,0 +1,578 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Workflow Engine (State Machine)
4
+ // ============================================================================
5
+ // Define automation workflows as state machines with typed states,
6
+ // transition guards, entry/exit actions, parallel branches, persistence,
7
+ // and full event integration.
8
+ // ============================================================================
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.workflow = exports.WorkflowInstance = void 0;
11
+ const events_1 = require("./events");
12
+ const logger_1 = require("./logger");
13
+ // ── Workflow Instance ────────────────────────────────────────────────────────
14
+ let _instanceCounter = 0;
15
+ class WorkflowInstance {
16
+ instanceId;
17
+ definition;
18
+ _status = 'idle';
19
+ _currentState;
20
+ _previousState;
21
+ _data = {};
22
+ _history = [];
23
+ _startedAt;
24
+ _stateEnteredAt = 0;
25
+ _transitionCount = 0;
26
+ _log;
27
+ _timeoutHandle;
28
+ _maxDurationHandle;
29
+ _eventUnsubs = [];
30
+ constructor(definition, initialData) {
31
+ this.instanceId = `wf_${Date.now().toString(36)}_${(++_instanceCounter).toString(36)}`;
32
+ this.definition = definition;
33
+ this._currentState = definition.initialState;
34
+ this._data = { ...initialData };
35
+ this._log = logger_1.logger.child(`workflow:${definition.id}`);
36
+ }
37
+ // ── Getters ────────────────────────────────────────────────────────────
38
+ get status() { return this._status; }
39
+ get currentState() { return this._currentState; }
40
+ get previousState() { return this._previousState; }
41
+ get data() { return this._data; }
42
+ get transitionCount() { return this._transitionCount; }
43
+ get history() { return [...this._history]; }
44
+ get elapsedMs() {
45
+ return this._startedAt ? Date.now() - this._startedAt : 0;
46
+ }
47
+ // ── Lifecycle ──────────────────────────────────────────────────────────
48
+ /**
49
+ * Start the workflow.
50
+ */
51
+ async start() {
52
+ if (this._status !== 'idle') {
53
+ throw new Error(`Cannot start workflow in status: ${this._status}`);
54
+ }
55
+ this._status = 'running';
56
+ this._startedAt = Date.now();
57
+ this._stateEnteredAt = Date.now();
58
+ this._log.info(`Workflow started: ${this.definition.name}`, {
59
+ instanceId: this.instanceId,
60
+ initialState: this._currentState,
61
+ });
62
+ events_1.events.emit('workflow.start', 'workflow', {
63
+ action: 'start',
64
+ workflowId: this.instanceId,
65
+ definitionId: this.definition.id,
66
+ state: this._currentState,
67
+ }, { source: 'workflow' });
68
+ // Set up max duration
69
+ if (this.definition.maxDurationMs && this.definition.maxDurationMs > 0) {
70
+ this._maxDurationHandle = setTimeout(() => {
71
+ this._fail(new Error(`Workflow exceeded max duration: ${this.definition.maxDurationMs}ms`));
72
+ }, this.definition.maxDurationMs);
73
+ }
74
+ // Execute initial state's onEnter
75
+ const stateDef = this.definition.states[this._currentState];
76
+ if (stateDef?.onEnter) {
77
+ try {
78
+ await stateDef.onEnter(this._buildContext());
79
+ }
80
+ catch (err) {
81
+ await this._handleError(err instanceof Error ? err : new Error(String(err)));
82
+ }
83
+ }
84
+ // Set up state timeout
85
+ this._setupStateTimeout();
86
+ }
87
+ /**
88
+ * Send an event to the workflow, potentially triggering a transition.
89
+ */
90
+ async send(event) {
91
+ if (this._status !== 'running') {
92
+ this._log.warn(`Cannot send event to workflow in status: ${this._status}`, { event });
93
+ return false;
94
+ }
95
+ const stateDef = this.definition.states[this._currentState];
96
+ if (!stateDef) {
97
+ await this._fail(new Error(`No definition for current state: ${this._currentState}`));
98
+ return false;
99
+ }
100
+ const transition = stateDef.transitions[event];
101
+ if (!transition) {
102
+ this._log.debug(`No transition for event '${event}' in state '${this._currentState}'`);
103
+ return false;
104
+ }
105
+ return this._executeTransition(event, transition);
106
+ }
107
+ /**
108
+ * Pause the workflow.
109
+ */
110
+ pause() {
111
+ if (this._status !== 'running')
112
+ return;
113
+ this._status = 'paused';
114
+ this._clearTimeouts();
115
+ this._log.info('Workflow paused');
116
+ events_1.events.emit('workflow.pause', 'workflow', {
117
+ action: 'pause',
118
+ workflowId: this.instanceId,
119
+ state: this._currentState,
120
+ }, { source: 'workflow' });
121
+ }
122
+ /**
123
+ * Resume the workflow.
124
+ */
125
+ async resume() {
126
+ if (this._status !== 'paused')
127
+ return;
128
+ this._status = 'running';
129
+ this._setupStateTimeout();
130
+ this._log.info('Workflow resumed');
131
+ events_1.events.emit('workflow.resume', 'workflow', {
132
+ action: 'resume',
133
+ workflowId: this.instanceId,
134
+ state: this._currentState,
135
+ }, { source: 'workflow' });
136
+ }
137
+ /**
138
+ * Cancel the workflow.
139
+ */
140
+ cancel() {
141
+ if (this._status === 'completed' || this._status === 'failed' || this._status === 'cancelled')
142
+ return;
143
+ this._status = 'cancelled';
144
+ this._clearTimeouts();
145
+ this._cleanup();
146
+ this._log.info('Workflow cancelled');
147
+ events_1.events.emit('workflow.cancel', 'workflow', {
148
+ action: 'cancel',
149
+ workflowId: this.instanceId,
150
+ state: this._currentState,
151
+ }, { source: 'workflow' });
152
+ }
153
+ /**
154
+ * Wait for the workflow to complete.
155
+ */
156
+ async waitForCompletion(timeoutMs) {
157
+ const timeout = timeoutMs ?? this.definition.maxDurationMs ?? 0;
158
+ return new Promise((resolve, reject) => {
159
+ let timer;
160
+ const check = () => {
161
+ if (this._status === 'completed' || this._status === 'failed' || this._status === 'cancelled') {
162
+ if (timer)
163
+ clearTimeout(timer);
164
+ resolve(this._status);
165
+ return true;
166
+ }
167
+ return false;
168
+ };
169
+ if (check())
170
+ return;
171
+ if (timeout > 0) {
172
+ timer = setTimeout(() => {
173
+ reject(new Error(`Workflow wait timed out after ${timeout}ms`));
174
+ }, timeout);
175
+ }
176
+ const interval = setInterval(() => {
177
+ if (check())
178
+ clearInterval(interval);
179
+ }, 50);
180
+ });
181
+ }
182
+ // ── Data Access ────────────────────────────────────────────────────────
183
+ /** Set workflow data */
184
+ setData(key, value) {
185
+ this._data[key] = value;
186
+ }
187
+ /** Get workflow data */
188
+ getData(key) {
189
+ return this._data[key];
190
+ }
191
+ // ── Event Binding ──────────────────────────────────────────────────────
192
+ /**
193
+ * Bind an external event to a workflow event.
194
+ * When the external event fires, it sends the mapped event to the workflow.
195
+ */
196
+ bindEvent(externalPattern, workflowEvent) {
197
+ const unsub = events_1.events.on(externalPattern, () => {
198
+ this.send(workflowEvent);
199
+ });
200
+ this._eventUnsubs.push(unsub);
201
+ return unsub;
202
+ }
203
+ // ── Snapshot / Restore ─────────────────────────────────────────────────
204
+ /** Take a snapshot of the current workflow state */
205
+ snapshot() {
206
+ return {
207
+ id: this.instanceId,
208
+ definitionId: this.definition.id,
209
+ status: this._status,
210
+ currentState: this._currentState,
211
+ data: { ...this._data },
212
+ transitionCount: this._transitionCount,
213
+ history: [...this._history],
214
+ startedAt: this._startedAt ? new Date(this._startedAt).toISOString() : '',
215
+ elapsedMs: this.elapsedMs,
216
+ };
217
+ }
218
+ /** Restore from a snapshot */
219
+ restore(snapshot) {
220
+ if (this._status === 'running') {
221
+ throw new Error('Cannot restore a running workflow');
222
+ }
223
+ this._status = snapshot.status;
224
+ this._currentState = snapshot.currentState;
225
+ this._data = { ...snapshot.data };
226
+ this._transitionCount = snapshot.transitionCount;
227
+ this._history = [...snapshot.history];
228
+ if (snapshot.startedAt) {
229
+ this._startedAt = new Date(snapshot.startedAt).getTime();
230
+ }
231
+ }
232
+ // ── Visualization ──────────────────────────────────────────────────────
233
+ /**
234
+ * Generate a Mermaid state diagram for this workflow.
235
+ */
236
+ toMermaid() {
237
+ const lines = ['stateDiagram-v2'];
238
+ const states = this.definition.states;
239
+ // Mark initial state
240
+ lines.push(` [*] --> ${this.definition.initialState}`);
241
+ for (const [stateName, stateDef] of Object.entries(states)) {
242
+ // Add transitions
243
+ for (const [eventName, transition] of Object.entries(stateDef.transitions)) {
244
+ const label = transition.description || eventName;
245
+ lines.push(` ${stateName} --> ${transition.target} : ${label}`);
246
+ }
247
+ // Mark final states
248
+ if (stateDef.final) {
249
+ lines.push(` ${stateName} --> [*]`);
250
+ }
251
+ }
252
+ // Mark current state
253
+ if (this._status === 'running' || this._status === 'paused') {
254
+ lines.push(` state ${this._currentState} {`);
255
+ lines.push(` [*] : CURRENT`);
256
+ lines.push(` }`);
257
+ }
258
+ return lines.join('\n');
259
+ }
260
+ // ── Internal ───────────────────────────────────────────────────────────
261
+ _buildContext() {
262
+ return {
263
+ workflow: this,
264
+ currentState: this._currentState,
265
+ previousState: this._previousState,
266
+ data: this._data,
267
+ transitionCount: this._transitionCount,
268
+ elapsedMs: this.elapsedMs,
269
+ stateEnteredAt: this._stateEnteredAt,
270
+ stateElapsedMs: Date.now() - this._stateEnteredAt,
271
+ };
272
+ }
273
+ async _executeTransition(event, transition) {
274
+ const ctx = this._buildContext();
275
+ ctx.event = event;
276
+ // Check guard
277
+ if (transition.guard) {
278
+ try {
279
+ const allowed = await transition.guard(ctx);
280
+ if (!allowed) {
281
+ this._log.debug(`Transition guard rejected: ${event}`, {
282
+ from: this._currentState,
283
+ to: transition.target,
284
+ });
285
+ this._history.push({
286
+ from: this._currentState,
287
+ to: transition.target,
288
+ event,
289
+ timestamp: new Date().toISOString(),
290
+ durationMs: 0,
291
+ guardResult: false,
292
+ });
293
+ return false;
294
+ }
295
+ }
296
+ catch (err) {
297
+ await this._handleError(err instanceof Error ? err : new Error(String(err)));
298
+ return false;
299
+ }
300
+ }
301
+ const startTime = Date.now();
302
+ const fromState = this._currentState;
303
+ const toState = transition.target;
304
+ // Exit current state
305
+ const currentDef = this.definition.states[fromState];
306
+ if (currentDef?.onExit) {
307
+ try {
308
+ await currentDef.onExit(ctx);
309
+ }
310
+ catch (err) {
311
+ await this._handleError(err instanceof Error ? err : new Error(String(err)));
312
+ return false;
313
+ }
314
+ }
315
+ // Clear timeouts
316
+ this._clearTimeouts();
317
+ // Run transition action
318
+ if (transition.action) {
319
+ try {
320
+ await transition.action(ctx);
321
+ }
322
+ catch (err) {
323
+ await this._handleError(err instanceof Error ? err : new Error(String(err)));
324
+ return false;
325
+ }
326
+ }
327
+ // Enter new state
328
+ this._previousState = fromState;
329
+ this._currentState = toState;
330
+ this._transitionCount++;
331
+ this._stateEnteredAt = Date.now();
332
+ const durationMs = Date.now() - startTime;
333
+ this._history.push({
334
+ from: fromState,
335
+ to: toState,
336
+ event,
337
+ timestamp: new Date().toISOString(),
338
+ durationMs,
339
+ guardResult: true,
340
+ });
341
+ this._log.debug(`Transition: ${fromState} → ${toState}`, {
342
+ event,
343
+ durationMs,
344
+ transitionCount: this._transitionCount,
345
+ });
346
+ events_1.events.emit('workflow.transition', 'workflow', {
347
+ action: 'transition',
348
+ workflowId: this.instanceId,
349
+ fromState,
350
+ toState,
351
+ event,
352
+ durationMs,
353
+ }, { source: 'workflow' });
354
+ // Enter new state
355
+ const newStateDef = this.definition.states[toState];
356
+ if (newStateDef?.onEnter) {
357
+ try {
358
+ await newStateDef.onEnter(this._buildContext());
359
+ }
360
+ catch (err) {
361
+ await this._handleError(err instanceof Error ? err : new Error(String(err)));
362
+ return false;
363
+ }
364
+ }
365
+ // Check if final state
366
+ if (newStateDef?.final) {
367
+ await this._complete();
368
+ return true;
369
+ }
370
+ // Set up state timeout
371
+ this._setupStateTimeout();
372
+ return true;
373
+ }
374
+ async _complete() {
375
+ this._status = 'completed';
376
+ this._clearTimeouts();
377
+ this._cleanup();
378
+ this._log.info(`Workflow completed: ${this.definition.name}`, {
379
+ instanceId: this.instanceId,
380
+ finalState: this._currentState,
381
+ transitions: this._transitionCount,
382
+ elapsedMs: this.elapsedMs,
383
+ });
384
+ if (this.definition.onComplete) {
385
+ try {
386
+ await this.definition.onComplete(this._buildContext());
387
+ }
388
+ catch (err) {
389
+ this._log.error('Error in onComplete handler', err);
390
+ }
391
+ }
392
+ events_1.events.emit('workflow.complete', 'workflow', {
393
+ action: 'complete',
394
+ workflowId: this.instanceId,
395
+ finalState: this._currentState,
396
+ transitions: this._transitionCount,
397
+ elapsedMs: this.elapsedMs,
398
+ }, { source: 'workflow' });
399
+ }
400
+ async _fail(error) {
401
+ this._status = 'failed';
402
+ this._clearTimeouts();
403
+ this._cleanup();
404
+ this._data._error = error.message;
405
+ this._log.error(`Workflow failed: ${this.definition.name}`, error, {
406
+ instanceId: this.instanceId,
407
+ state: this._currentState,
408
+ });
409
+ events_1.events.emit('workflow.error', 'workflow', {
410
+ action: 'error',
411
+ workflowId: this.instanceId,
412
+ state: this._currentState,
413
+ error: error.message,
414
+ }, { source: 'workflow' });
415
+ }
416
+ async _handleError(error) {
417
+ if (this.definition.onError) {
418
+ try {
419
+ await this.definition.onError(error, this._buildContext());
420
+ }
421
+ catch {
422
+ // Error handler itself failed
423
+ }
424
+ }
425
+ else {
426
+ await this._fail(error);
427
+ }
428
+ }
429
+ _setupStateTimeout() {
430
+ const stateDef = this.definition.states[this._currentState];
431
+ if (stateDef?.timeoutMs && stateDef.timeoutMs > 0) {
432
+ this._timeoutHandle = setTimeout(() => {
433
+ const event = stateDef.timeoutEvent || 'timeout';
434
+ this.send(event);
435
+ }, stateDef.timeoutMs);
436
+ }
437
+ }
438
+ _clearTimeouts() {
439
+ if (this._timeoutHandle) {
440
+ clearTimeout(this._timeoutHandle);
441
+ this._timeoutHandle = undefined;
442
+ }
443
+ if (this._maxDurationHandle) {
444
+ clearTimeout(this._maxDurationHandle);
445
+ this._maxDurationHandle = undefined;
446
+ }
447
+ }
448
+ _cleanup() {
449
+ for (const unsub of this._eventUnsubs) {
450
+ unsub();
451
+ }
452
+ this._eventUnsubs = [];
453
+ }
454
+ }
455
+ exports.WorkflowInstance = WorkflowInstance;
456
+ // ── Workflow Factory ─────────────────────────────────────────────────────────
457
+ const _definitions = new Map();
458
+ const _instances = new Map();
459
+ exports.workflow = {
460
+ /**
461
+ * Define a reusable workflow.
462
+ *
463
+ * @example
464
+ * ```ts
465
+ * workflow.define({
466
+ * id: 'login-flow',
467
+ * name: 'Login Automation',
468
+ * initialState: 'navigating',
469
+ * states: {
470
+ * navigating: {
471
+ * onEnter: async (ctx) => { await browser.goto(url); },
472
+ * transitions: { loaded: { target: 'filling' } },
473
+ * },
474
+ * filling: {
475
+ * onEnter: async (ctx) => {
476
+ * keyboard.type(ctx.data.username); keyboard.press('tab');
477
+ * keyboard.type(ctx.data.password); keyboard.press('enter');
478
+ * },
479
+ * transitions: { submitted: { target: 'verifying' } },
480
+ * },
481
+ * verifying: {
482
+ * onEnter: async (ctx) => { await vision.waitForStable(0.1, 500, 5000); },
483
+ * transitions: {
484
+ * success: { target: 'done' },
485
+ * failure: { target: 'error' },
486
+ * },
487
+ * },
488
+ * done: { transitions: {}, final: true },
489
+ * error: { transitions: { retry: { target: 'navigating' } } },
490
+ * },
491
+ * });
492
+ * ```
493
+ */
494
+ define(definition) {
495
+ // Validate
496
+ if (!definition.states[definition.initialState]) {
497
+ throw new Error(`Initial state '${definition.initialState}' not defined`);
498
+ }
499
+ for (const [stateName, stateDef] of Object.entries(definition.states)) {
500
+ for (const [eventName, transition] of Object.entries(stateDef.transitions)) {
501
+ if (!definition.states[transition.target]) {
502
+ throw new Error(`Transition target '${transition.target}' (from ${stateName}/${eventName}) not defined`);
503
+ }
504
+ }
505
+ }
506
+ _definitions.set(definition.id, definition);
507
+ events_1.events.emit('workflow.defined', 'workflow', { definitionId: definition.id, name: definition.name }, { source: 'workflow' });
508
+ },
509
+ /**
510
+ * Create a workflow instance from a definition.
511
+ */
512
+ create(definitionId, initialData) {
513
+ const def = _definitions.get(definitionId);
514
+ if (!def)
515
+ throw new Error(`Workflow definition not found: ${definitionId}`);
516
+ const instance = new WorkflowInstance(def, initialData);
517
+ _instances.set(instance.instanceId, instance);
518
+ return instance;
519
+ },
520
+ /**
521
+ * Run a workflow to completion.
522
+ */
523
+ async run(definitionId, initialData) {
524
+ const instance = exports.workflow.create(definitionId, initialData);
525
+ await instance.start();
526
+ return instance;
527
+ },
528
+ /** Get a running workflow instance by ID */
529
+ getInstance(instanceId) {
530
+ return _instances.get(instanceId);
531
+ },
532
+ /** List all active workflow instances */
533
+ listInstances() {
534
+ return [..._instances.values()].map((inst) => ({
535
+ instanceId: inst.instanceId,
536
+ definitionId: inst.definition.id,
537
+ status: inst.status,
538
+ currentState: inst.currentState,
539
+ }));
540
+ },
541
+ /** List all registered workflow definitions */
542
+ listDefinitions() {
543
+ return [..._definitions.keys()];
544
+ },
545
+ /** Get a workflow definition by ID */
546
+ getDefinition(id) {
547
+ return _definitions.get(id);
548
+ },
549
+ /**
550
+ * Create an inline (anonymous) workflow and run it immediately.
551
+ */
552
+ async inline(definition, initialData) {
553
+ const id = `inline_${Date.now().toString(36)}`;
554
+ const fullDef = { ...definition, id };
555
+ exports.workflow.define(fullDef);
556
+ return exports.workflow.run(id, initialData);
557
+ },
558
+ /** Clean up completed/failed instances */
559
+ cleanup() {
560
+ let count = 0;
561
+ for (const [id, inst] of _instances) {
562
+ if (inst.status === 'completed' || inst.status === 'failed' || inst.status === 'cancelled') {
563
+ _instances.delete(id);
564
+ count++;
565
+ }
566
+ }
567
+ return count;
568
+ },
569
+ /** Reset everything */
570
+ reset() {
571
+ for (const inst of _instances.values()) {
572
+ inst.cancel();
573
+ }
574
+ _instances.clear();
575
+ _definitions.clear();
576
+ },
577
+ };
578
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../ts/workflow.ts"],"names":[],"mappings":"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"}