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,479 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Session Management
4
+ // ============================================================================
5
+ // Checkpoint creation, state persistence, session restore, undo/rollback,
6
+ // and session isolation for enterprise automation workflows.
7
+ // ============================================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.session = void 0;
10
+ const events_1 = require("./events");
11
+ const logger_1 = require("./logger");
12
+ let _sessionIdCounter = 0;
13
+ let _activeSession = null;
14
+ const _sessions = new Map();
15
+ const _log = logger_1.logger.child('session');
16
+ function generateSessionId() {
17
+ return `sess_${Date.now()}_${++_sessionIdCounter}`;
18
+ }
19
+ function generateCheckpointId() {
20
+ return `ckpt_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
21
+ }
22
+ function toMetadata(s) {
23
+ return {
24
+ id: s.id,
25
+ name: s.name,
26
+ status: s.status,
27
+ createdAt: new Date(s.createdAt).toISOString(),
28
+ updatedAt: new Date(s.updatedAt).toISOString(),
29
+ checkpointCount: s.checkpoints.length,
30
+ actionCount: s.actions.length,
31
+ tags: [...s.tags],
32
+ custom: { ...s.custom },
33
+ };
34
+ }
35
+ // ── Public API ───────────────────────────────────────────────────────────────
36
+ exports.session = {
37
+ /**
38
+ * Start a new session.
39
+ */
40
+ start(options) {
41
+ const id = generateSessionId();
42
+ const now = Date.now();
43
+ const sess = {
44
+ id,
45
+ name: options?.name ?? `Session ${id}`,
46
+ status: 'active',
47
+ createdAt: now,
48
+ updatedAt: now,
49
+ checkpoints: [],
50
+ actions: [],
51
+ store: {},
52
+ tags: options?.tags ?? [],
53
+ custom: options?.custom ?? {},
54
+ options: {
55
+ name: options?.name ?? `Session ${id}`,
56
+ autoCheckpointInterval: options?.autoCheckpointInterval ?? 0,
57
+ maxCheckpoints: options?.maxCheckpoints ?? 50,
58
+ maxActions: options?.maxActions ?? 10000,
59
+ tags: options?.tags ?? [],
60
+ custom: options?.custom ?? {},
61
+ },
62
+ undoStack: [],
63
+ };
64
+ _sessions.set(id, sess);
65
+ _activeSession = sess;
66
+ events_1.events.emit('session.start', 'session', { sessionId: id, name: sess.name }, { source: 'session' });
67
+ _log.info('Session started', { id, name: sess.name });
68
+ return id;
69
+ },
70
+ /**
71
+ * Get the active session ID (or null).
72
+ */
73
+ getActiveId() {
74
+ return _activeSession?.id ?? null;
75
+ },
76
+ /**
77
+ * Get the active session metadata.
78
+ */
79
+ getActive() {
80
+ if (!_activeSession)
81
+ return null;
82
+ return toMetadata(_activeSession);
83
+ },
84
+ /**
85
+ * Switch to a different (existing) session.
86
+ */
87
+ switchTo(sessionId) {
88
+ const sess = _sessions.get(sessionId);
89
+ if (!sess)
90
+ return false;
91
+ _activeSession = sess;
92
+ return true;
93
+ },
94
+ /**
95
+ * Pause the active session.
96
+ */
97
+ pause() {
98
+ if (!_activeSession || _activeSession.status !== 'active')
99
+ return false;
100
+ _activeSession.status = 'paused';
101
+ _activeSession.updatedAt = Date.now();
102
+ events_1.events.emit('session.pause', 'session', { sessionId: _activeSession.id }, { source: 'session' });
103
+ return true;
104
+ },
105
+ /**
106
+ * Resume the active session.
107
+ */
108
+ resume() {
109
+ if (!_activeSession || _activeSession.status !== 'paused')
110
+ return false;
111
+ _activeSession.status = 'active';
112
+ _activeSession.updatedAt = Date.now();
113
+ events_1.events.emit('session.resume', 'session', { sessionId: _activeSession.id }, { source: 'session' });
114
+ return true;
115
+ },
116
+ /**
117
+ * End the active session.
118
+ */
119
+ end(status = 'completed') {
120
+ if (!_activeSession)
121
+ return null;
122
+ _activeSession.status = status;
123
+ _activeSession.updatedAt = Date.now();
124
+ const meta = toMetadata(_activeSession);
125
+ events_1.events.emit('session.end', 'session', { sessionId: _activeSession.id, status }, { source: 'session' });
126
+ _log.info('Session ended', { id: _activeSession.id, status, actions: _activeSession.actions.length });
127
+ _activeSession = null;
128
+ return meta;
129
+ },
130
+ // ── Action Recording ───────────────────────────────────────────────────
131
+ /**
132
+ * Record an action in the active session.
133
+ */
134
+ recordAction(type, args, options) {
135
+ if (!_activeSession || _activeSession.status !== 'active')
136
+ return -1;
137
+ const index = _activeSession.actions.length;
138
+ const action = {
139
+ index,
140
+ type,
141
+ args,
142
+ timestamp: new Date().toISOString(),
143
+ durationMs: options?.durationMs ?? 0,
144
+ result: options?.result,
145
+ error: options?.error,
146
+ undoable: options?.undoable ?? false,
147
+ undoHint: options?.undoHint,
148
+ };
149
+ _activeSession.actions.push(action);
150
+ _activeSession.updatedAt = Date.now();
151
+ // Track undo function
152
+ if (options?.undoFn) {
153
+ _activeSession.undoStack.push(options.undoFn);
154
+ }
155
+ // Enforce max actions
156
+ while (_activeSession.actions.length > _activeSession.options.maxActions) {
157
+ _activeSession.actions.shift();
158
+ }
159
+ // Auto-checkpoint
160
+ const autoInterval = _activeSession.options.autoCheckpointInterval;
161
+ if (autoInterval > 0 && index > 0 && index % autoInterval === 0) {
162
+ exports.session.checkpoint(`auto-${index}`);
163
+ }
164
+ return index;
165
+ },
166
+ /**
167
+ * Get the action history from the active session.
168
+ */
169
+ getActions(filter) {
170
+ if (!_activeSession)
171
+ return [];
172
+ let actions = [..._activeSession.actions];
173
+ if (filter?.type) {
174
+ actions = actions.filter((a) => a.type.startsWith(filter.type));
175
+ }
176
+ if (filter?.since) {
177
+ const since = new Date(filter.since).getTime();
178
+ actions = actions.filter((a) => new Date(a.timestamp).getTime() >= since);
179
+ }
180
+ if (filter?.limit && filter.limit > 0) {
181
+ actions = actions.slice(-filter.limit);
182
+ }
183
+ return actions;
184
+ },
185
+ // ── Checkpoints ────────────────────────────────────────────────────────
186
+ /**
187
+ * Create a checkpoint (snapshot) at the current point.
188
+ */
189
+ checkpoint(label, metadata) {
190
+ if (!_activeSession)
191
+ return null;
192
+ const id = generateCheckpointId();
193
+ const ckpt = {
194
+ id,
195
+ label: label ?? `Checkpoint ${_activeSession.checkpoints.length + 1}`,
196
+ timestamp: new Date().toISOString(),
197
+ actionIndex: _activeSession.actions.length,
198
+ state: JSON.parse(JSON.stringify(_activeSession.store)),
199
+ metadata,
200
+ };
201
+ _activeSession.checkpoints.push(ckpt);
202
+ _activeSession.updatedAt = Date.now();
203
+ // Enforce max checkpoints
204
+ while (_activeSession.checkpoints.length > _activeSession.options.maxCheckpoints) {
205
+ _activeSession.checkpoints.shift();
206
+ }
207
+ events_1.events.emit('session.checkpoint', 'session', {
208
+ sessionId: _activeSession.id,
209
+ checkpointId: id,
210
+ label: ckpt.label,
211
+ actionIndex: ckpt.actionIndex,
212
+ }, { source: 'session' });
213
+ _log.debug('Checkpoint created', { id, label: ckpt.label });
214
+ return id;
215
+ },
216
+ /**
217
+ * List all checkpoints in the active session.
218
+ */
219
+ listCheckpoints() {
220
+ if (!_activeSession)
221
+ return [];
222
+ return [..._activeSession.checkpoints];
223
+ },
224
+ /**
225
+ * Restore state from a checkpoint (does NOT undo actions — use rollback for that).
226
+ */
227
+ restoreCheckpoint(checkpointId) {
228
+ if (!_activeSession)
229
+ return false;
230
+ const ckpt = _activeSession.checkpoints.find((c) => c.id === checkpointId);
231
+ if (!ckpt)
232
+ return false;
233
+ _activeSession.store = JSON.parse(JSON.stringify(ckpt.state));
234
+ _activeSession.updatedAt = Date.now();
235
+ events_1.events.emit('session.restore', 'session', {
236
+ sessionId: _activeSession.id,
237
+ checkpointId,
238
+ label: ckpt.label,
239
+ }, { source: 'session' });
240
+ _log.info('Restored checkpoint', { checkpointId, label: ckpt.label });
241
+ return true;
242
+ },
243
+ /**
244
+ * Rollback: undo actions back to a checkpoint.
245
+ * This calls the undo functions for actions recorded since the checkpoint.
246
+ */
247
+ async rollback(checkpointId) {
248
+ if (!_activeSession)
249
+ return { undone: 0, errors: 0 };
250
+ const ckpt = _activeSession.checkpoints.find((c) => c.id === checkpointId);
251
+ if (!ckpt)
252
+ return { undone: 0, errors: 0 };
253
+ // Restore state
254
+ _activeSession.store = JSON.parse(JSON.stringify(ckpt.state));
255
+ // Undo actions in reverse order
256
+ const actionsToUndo = _activeSession.actions.slice(ckpt.actionIndex);
257
+ let undone = 0;
258
+ let errors = 0;
259
+ // Calculate how many undo fns to pop
260
+ const undoCount = Math.min(actionsToUndo.filter((a) => a.undoable).length, _activeSession.undoStack.length);
261
+ for (let i = 0; i < undoCount; i++) {
262
+ const undoFn = _activeSession.undoStack.pop();
263
+ if (undoFn) {
264
+ try {
265
+ await undoFn();
266
+ undone++;
267
+ }
268
+ catch (err) {
269
+ errors++;
270
+ _log.error('Undo failed', err);
271
+ }
272
+ }
273
+ }
274
+ // Trim action history
275
+ _activeSession.actions = _activeSession.actions.slice(0, ckpt.actionIndex);
276
+ // Remove checkpoints after this one
277
+ const ckptIdx = _activeSession.checkpoints.indexOf(ckpt);
278
+ _activeSession.checkpoints = _activeSession.checkpoints.slice(0, ckptIdx + 1);
279
+ _activeSession.status = 'rolled_back';
280
+ _activeSession.updatedAt = Date.now();
281
+ events_1.events.emit('session.rollback', 'session', {
282
+ sessionId: _activeSession.id,
283
+ checkpointId,
284
+ undone,
285
+ errors,
286
+ }, { source: 'session' });
287
+ _log.info('Rolled back to checkpoint', { checkpointId, undone, errors });
288
+ return { undone, errors };
289
+ },
290
+ /**
291
+ * Undo the last undoable action.
292
+ */
293
+ async undo() {
294
+ if (!_activeSession || _activeSession.undoStack.length === 0)
295
+ return false;
296
+ const undoFn = _activeSession.undoStack.pop();
297
+ if (!undoFn)
298
+ return false;
299
+ try {
300
+ await undoFn();
301
+ _activeSession.updatedAt = Date.now();
302
+ events_1.events.emit('session.undo', 'session', { sessionId: _activeSession.id }, { source: 'session' });
303
+ return true;
304
+ }
305
+ catch (err) {
306
+ _log.error('Undo failed', err);
307
+ return false;
308
+ }
309
+ },
310
+ // ── State Store ────────────────────────────────────────────────────────
311
+ /**
312
+ * Set a key in the session store.
313
+ */
314
+ set(key, value) {
315
+ if (!_activeSession)
316
+ return;
317
+ _activeSession.store[key] = value;
318
+ _activeSession.updatedAt = Date.now();
319
+ },
320
+ /**
321
+ * Get a value from the session store.
322
+ */
323
+ get(key, defaultValue) {
324
+ if (!_activeSession)
325
+ return defaultValue;
326
+ return (key in _activeSession.store
327
+ ? _activeSession.store[key]
328
+ : defaultValue);
329
+ },
330
+ /**
331
+ * Check if a key exists in the session store.
332
+ */
333
+ has(key) {
334
+ if (!_activeSession)
335
+ return false;
336
+ return key in _activeSession.store;
337
+ },
338
+ /**
339
+ * Delete a key from the session store.
340
+ */
341
+ delete(key) {
342
+ if (!_activeSession)
343
+ return false;
344
+ if (key in _activeSession.store) {
345
+ delete _activeSession.store[key];
346
+ return true;
347
+ }
348
+ return false;
349
+ },
350
+ /**
351
+ * Get all keys in the session store.
352
+ */
353
+ keys() {
354
+ if (!_activeSession)
355
+ return [];
356
+ return Object.keys(_activeSession.store);
357
+ },
358
+ // ── Serialization ──────────────────────────────────────────────────────
359
+ /**
360
+ * Export the active session as a JSON-serializable snapshot.
361
+ */
362
+ export() {
363
+ if (!_activeSession)
364
+ return null;
365
+ return {
366
+ metadata: toMetadata(_activeSession),
367
+ checkpoints: [..._activeSession.checkpoints],
368
+ actions: [..._activeSession.actions],
369
+ store: JSON.parse(JSON.stringify(_activeSession.store)),
370
+ version: 1,
371
+ };
372
+ },
373
+ /**
374
+ * Export session as a JSON string.
375
+ */
376
+ toJSON(pretty = false) {
377
+ const snapshot = exports.session.export();
378
+ if (!snapshot)
379
+ return null;
380
+ return JSON.stringify(snapshot, null, pretty ? 2 : undefined);
381
+ },
382
+ /**
383
+ * Import a session from a snapshot (creates a new session).
384
+ */
385
+ import(snapshot) {
386
+ const id = generateSessionId();
387
+ const now = Date.now();
388
+ const sess = {
389
+ id,
390
+ name: snapshot.metadata.name + ' (imported)',
391
+ status: 'active',
392
+ createdAt: now,
393
+ updatedAt: now,
394
+ checkpoints: [...snapshot.checkpoints],
395
+ actions: [...snapshot.actions],
396
+ store: JSON.parse(JSON.stringify(snapshot.store)),
397
+ tags: [...snapshot.metadata.tags],
398
+ custom: { ...snapshot.metadata.custom, importedFrom: snapshot.metadata.id },
399
+ options: {
400
+ name: snapshot.metadata.name,
401
+ autoCheckpointInterval: 0,
402
+ maxCheckpoints: 50,
403
+ maxActions: 10000,
404
+ tags: snapshot.metadata.tags,
405
+ custom: snapshot.metadata.custom,
406
+ },
407
+ undoStack: [],
408
+ };
409
+ _sessions.set(id, sess);
410
+ _activeSession = sess;
411
+ _log.info('Session imported', {
412
+ id,
413
+ fromId: snapshot.metadata.id,
414
+ actions: snapshot.actions.length,
415
+ });
416
+ return id;
417
+ },
418
+ /**
419
+ * Import session from a JSON string.
420
+ */
421
+ fromJSON(json) {
422
+ const snapshot = JSON.parse(json);
423
+ return exports.session.import(snapshot);
424
+ },
425
+ // ── Management ─────────────────────────────────────────────────────────
426
+ /**
427
+ * List all sessions.
428
+ */
429
+ listSessions() {
430
+ return [..._sessions.values()].map(toMetadata);
431
+ },
432
+ /**
433
+ * Delete a session.
434
+ */
435
+ deleteSession(sessionId) {
436
+ if (_activeSession?.id === sessionId) {
437
+ _activeSession = null;
438
+ }
439
+ return _sessions.delete(sessionId);
440
+ },
441
+ /**
442
+ * Get session duration (ms) for the active session.
443
+ */
444
+ getDuration() {
445
+ if (!_activeSession)
446
+ return 0;
447
+ return Date.now() - _activeSession.createdAt;
448
+ },
449
+ /**
450
+ * Get a summary of the active session (for display/logging).
451
+ */
452
+ getSummary() {
453
+ if (!_activeSession)
454
+ return 'No active session';
455
+ const durationSec = Math.round(exports.session.getDuration() / 1000);
456
+ const actionTypes = new Map();
457
+ for (const a of _activeSession.actions) {
458
+ actionTypes.set(a.type, (actionTypes.get(a.type) ?? 0) + 1);
459
+ }
460
+ const typesSummary = [...actionTypes.entries()]
461
+ .sort((a, b) => b[1] - a[1])
462
+ .map(([t, c]) => `${t}:${c}`)
463
+ .join(', ');
464
+ return [
465
+ `Session: ${_activeSession.name} [${_activeSession.status}]`,
466
+ `Duration: ${durationSec}s`,
467
+ `Actions: ${_activeSession.actions.length}`,
468
+ `Checkpoints: ${_activeSession.checkpoints.length}`,
469
+ `Types: ${typesSummary || 'none'}`,
470
+ ].join(' | ');
471
+ },
472
+ /** Reset all session state */
473
+ reset() {
474
+ _activeSession = null;
475
+ _sessions.clear();
476
+ _sessionIdCounter = 0;
477
+ },
478
+ };
479
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../ts/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import type { Region } from './types';
2
+ /** Configuration for the screen stream. */
3
+ export interface StreamConfig {
4
+ /** Target frames per second (1–120, default: 30) */
5
+ fps?: number;
6
+ /** Capture a specific region instead of full screen */
7
+ region?: Region;
8
+ /** Scale factor (0.1–1.0, default: 1.0). Use 0.5 for half resolution. */
9
+ scale?: number;
10
+ /** Number of frames to keep in the ring buffer (default: 3) */
11
+ bufferSize?: number;
12
+ }
13
+ /** A single captured frame with metadata. */
14
+ export interface StreamFrame {
15
+ /** Raw RGBA pixel data (4 bytes per pixel) */
16
+ data: Buffer;
17
+ /** Frame width in pixels */
18
+ width: number;
19
+ /** Frame height in pixels */
20
+ height: number;
21
+ /** Monotonic frame sequence number (starts at 1) */
22
+ sequence: number;
23
+ /** Milliseconds since stream started */
24
+ timestampMs: number;
25
+ /** Actual measured FPS at this point */
26
+ measuredFps: number;
27
+ /** Cursor X position at time of capture */
28
+ cursorX: number;
29
+ /** Cursor Y position at time of capture */
30
+ cursorY: number;
31
+ }
32
+ /** Stream performance statistics. */
33
+ export interface StreamStats {
34
+ /** Whether the stream is currently running */
35
+ isRunning: boolean;
36
+ /** Total frames captured since stream started */
37
+ totalFrames: number;
38
+ /** Frames that failed to capture */
39
+ droppedFrames: number;
40
+ /** Current measured FPS */
41
+ currentFps: number;
42
+ /** Configured target FPS */
43
+ targetFps: number;
44
+ /** Milliseconds since stream started */
45
+ uptimeMs: number;
46
+ }
47
+ /** Callback for frame events */
48
+ export type FrameHandler = (frame: StreamFrame) => void;
49
+ /**
50
+ * Real-time screen streaming engine.
51
+ *
52
+ * Provides continuous, non-blocking screen capture at up to 4K resolution
53
+ * and 120fps. The capture runs on a dedicated native thread, so it never
54
+ * blocks the Node.js event loop.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * import { stream } from 'stelo';
59
+ *
60
+ * // Start 4K stream at 60fps
61
+ * stream.start({ fps: 60 });
62
+ *
63
+ * // Get latest frame for processing
64
+ * const frame = stream.latestFrame();
65
+ *
66
+ * // Get stream performance info
67
+ * const stats = stream.stats();
68
+ * console.log(`Running at ${stats.currentFps} fps`);
69
+ *
70
+ * // Subscribe to frames
71
+ * const unsub = stream.onFrame(frame => {
72
+ * // Process every frame
73
+ * });
74
+ *
75
+ * // Async iteration
76
+ * for await (const frame of stream) {
77
+ * await analyzeFrame(frame);
78
+ * }
79
+ *
80
+ * stream.stop();
81
+ * ```
82
+ */
83
+ export declare const stream: {
84
+ _frameHandlers: FrameHandler[];
85
+ _pollTimer: ReturnType<typeof setInterval> | null;
86
+ _lastSequence: number;
87
+ /**
88
+ * Start a continuous real-time screen stream.
89
+ *
90
+ * The stream runs on a dedicated native thread and captures frames
91
+ * continuously at the configured FPS. Frames are double-buffered,
92
+ * so reading never blocks capture.
93
+ *
94
+ * @param config - Stream configuration (fps, region, scale, buffer)
95
+ */
96
+ start(config?: StreamConfig): void;
97
+ /**
98
+ * Stop the screen stream and release all resources.
99
+ */
100
+ stop(): void;
101
+ /**
102
+ * Check if a stream is currently running.
103
+ */
104
+ isRunning(): boolean;
105
+ /**
106
+ * Get the latest captured frame.
107
+ * Returns null if no frames have been captured yet.
108
+ *
109
+ * This is the primary method for real-time automation — call it whenever
110
+ * you need the current screen state.
111
+ */
112
+ latestFrame(): StreamFrame | null;
113
+ /**
114
+ * Get the most recent N frames from the ring buffer.
115
+ * Useful for temporal analysis (motion detection, change tracking).
116
+ *
117
+ * @param count - Number of recent frames to retrieve (default: 3)
118
+ */
119
+ recentFrames(count?: number): StreamFrame[];
120
+ /**
121
+ * Wait for the next new frame (blocks until available or timeout).
122
+ * Returns null if timeout is reached before a new frame arrives.
123
+ *
124
+ * @param timeoutMs - Maximum time to wait in ms (default: 1000)
125
+ */
126
+ waitForFrame(timeoutMs?: number): StreamFrame | null;
127
+ /**
128
+ * Get stream performance statistics.
129
+ */
130
+ stats(): StreamStats;
131
+ /**
132
+ * Register a callback that fires for every new frame.
133
+ * Returns an unsubscribe function.
134
+ *
135
+ * @param handler - Function called with each new frame
136
+ * @returns Unsubscribe function
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const unsub = stream.onFrame(frame => {
141
+ * console.log(`Frame ${frame.sequence}: ${frame.width}x${frame.height}`);
142
+ * });
143
+ *
144
+ * // Later: stop receiving frames
145
+ * unsub();
146
+ * ```
147
+ */
148
+ onFrame(handler: FrameHandler): () => void;
149
+ /**
150
+ * Async iterator for frames. Yields new frames as they arrive.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * stream.start({ fps: 30 });
155
+ * for await (const frame of stream) {
156
+ * const result = await model.analyze(frame.data);
157
+ * if (result.found) break;
158
+ * }
159
+ * stream.stop();
160
+ * ```
161
+ */
162
+ [Symbol.asyncIterator](): AsyncIterableIterator<StreamFrame>;
163
+ /** @internal */
164
+ _startPollingIfNeeded(): void;
165
+ /** @internal */
166
+ _stopPolling(): void;
167
+ };
168
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../ts/stream.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMtC,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAIxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,MAAM;oBAEK,YAAY,EAAE;gBAChB,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI;;IAGzD;;;;;;;;OAQG;mBACY,YAAY,GAAG,IAAI;IA+BlC;;OAEG;YACK,IAAI;IAMZ;;OAEG;iBACU,OAAO;IAIpB;;;;;;OAMG;mBACY,WAAW,GAAG,IAAI;IAKjC;;;;;OAKG;yBACkB,MAAM,GAAG,WAAW,EAAE;IAK3C;;;;;OAKG;6BACsB,MAAM,GAAG,WAAW,GAAG,IAAI;IAKpD;;OAEG;aACM,WAAW;IAYpB;;;;;;;;;;;;;;;;OAgBG;qBACc,YAAY,GAAG,MAAM,IAAI;IAe1C;;;;;;;;;;;;OAYG;8BACuB,qBAAqB,CAAC,WAAW,CAAC;IAqB5D,gBAAgB;6BACS,IAAI;IA0B7B,gBAAgB;oBACA,IAAI;CAMrB,CAAC"}