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,227 @@
1
+ /** All known Stelo event categories */
2
+ export type EventCategory = 'mouse' | 'keyboard' | 'screen' | 'window' | 'stream' | 'audio' | 'vision' | 'agent' | 'safety' | 'executor' | 'middleware' | 'workflow' | 'clipboard' | 'process' | 'scheduler' | 'session' | 'plugin' | 'system' | 'accessibility' | 'integration' | 'monitor' | 'custom';
3
+ /** Base event shape — all events extend this */
4
+ export interface SteloEvent {
5
+ /** e.g. 'mouse.move', 'keyboard.type', 'workflow.transition' */
6
+ type: string;
7
+ /** ISO timestamp */
8
+ timestamp: string;
9
+ /** Event category */
10
+ category: EventCategory;
11
+ /** Arbitrary payload */
12
+ data?: Record<string, unknown>;
13
+ /** Source module that emitted the event */
14
+ source?: string;
15
+ /** Unique event ID */
16
+ id: string;
17
+ /** Whether the event can be cancelled by listeners */
18
+ cancelable?: boolean;
19
+ /** Set to true by a listener to cancel propagation */
20
+ cancelled?: boolean;
21
+ }
22
+ /** Mouse-specific events */
23
+ export interface MouseEvent extends SteloEvent {
24
+ category: 'mouse';
25
+ data: {
26
+ action: 'move' | 'click' | 'doubleClick' | 'tripleClick' | 'down' | 'up' | 'scroll' | 'drag';
27
+ x?: number;
28
+ y?: number;
29
+ button?: string;
30
+ [key: string]: unknown;
31
+ };
32
+ }
33
+ /** Keyboard-specific events */
34
+ export interface KeyboardEvent extends SteloEvent {
35
+ category: 'keyboard';
36
+ data: {
37
+ action: 'type' | 'press' | 'down' | 'up' | 'hotkey' | 'sequence';
38
+ key?: string;
39
+ text?: string;
40
+ [key: string]: unknown;
41
+ };
42
+ }
43
+ /** Workflow-specific events */
44
+ export interface WorkflowEvent extends SteloEvent {
45
+ category: 'workflow';
46
+ data: {
47
+ action: 'start' | 'transition' | 'complete' | 'error' | 'pause' | 'resume';
48
+ workflowId: string;
49
+ fromState?: string;
50
+ toState?: string;
51
+ [key: string]: unknown;
52
+ };
53
+ }
54
+ /** Safety-specific events */
55
+ export interface SafetyEvent extends SteloEvent {
56
+ category: 'safety';
57
+ data: {
58
+ action: 'failsafe_triggered' | 'emergency_stop' | 'rate_limited' | 'boundary_violation' | 'reset';
59
+ [key: string]: unknown;
60
+ };
61
+ }
62
+ /** Executor-specific events */
63
+ export interface ExecutorEvent extends SteloEvent {
64
+ category: 'executor';
65
+ data: {
66
+ action: 'enqueue' | 'dequeue' | 'execute' | 'complete' | 'cancel' | 'timeout' | 'error' | 'drain';
67
+ taskId?: string;
68
+ priority?: number;
69
+ [key: string]: unknown;
70
+ };
71
+ }
72
+ export type EventListener<T extends SteloEvent = SteloEvent> = (event: T) => void | Promise<void>;
73
+ export interface ListenerRegistration {
74
+ /** The event pattern this listener matches */
75
+ pattern: string;
76
+ /** Listener priority (higher = called first). Default: 0 */
77
+ priority: number;
78
+ /** Auto-remove after this many invocations (0 = unlimited) */
79
+ maxInvocations: number;
80
+ /** Current invocation count */
81
+ invocations: number;
82
+ /** The listener function */
83
+ handler: EventListener;
84
+ /** Unique ID for this registration */
85
+ id: string;
86
+ }
87
+ export interface EventFilter {
88
+ /** Only include events from these categories */
89
+ categories?: EventCategory[];
90
+ /** Only include events matching these patterns */
91
+ patterns?: string[];
92
+ /** Only include events from these sources */
93
+ sources?: string[];
94
+ /** Only include events after this timestamp */
95
+ after?: string;
96
+ /** Only include events before this timestamp */
97
+ before?: string;
98
+ }
99
+ export interface EventBusOptions {
100
+ /** Maximum events to keep in history (default: 1000) */
101
+ maxHistory?: number;
102
+ /** Enable event history tracking (default: true) */
103
+ trackHistory?: boolean;
104
+ /** Enable async listener execution (default: true) */
105
+ asyncListeners?: boolean;
106
+ /** Log events to console (default: false) */
107
+ debug?: boolean;
108
+ }
109
+ export declare const events: {
110
+ /**
111
+ * Configure the event bus.
112
+ */
113
+ configure(options: EventBusOptions): void;
114
+ /** Get current configuration */
115
+ getConfig(): Readonly<Required<EventBusOptions>>;
116
+ /**
117
+ * Subscribe to events matching a pattern.
118
+ *
119
+ * @param pattern - Event pattern to match (e.g. 'mouse.*', 'keyboard.type', '*')
120
+ * @param handler - Listener function
121
+ * @param options - Optional priority and maxInvocations
122
+ * @returns Unsubscribe function
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * // Listen to all mouse events
127
+ * const unsub = events.on('mouse.*', (e) => console.log(e));
128
+ *
129
+ * // Listen to specific event, high priority
130
+ * events.on('safety.emergency_stop', handler, { priority: 100 });
131
+ *
132
+ * // One-shot listener
133
+ * events.once('workflow.complete', handler);
134
+ * ```
135
+ */
136
+ on(pattern: string, handler: EventListener, options?: {
137
+ priority?: number;
138
+ maxInvocations?: number;
139
+ }): () => void;
140
+ /**
141
+ * Subscribe to a single occurrence of an event.
142
+ */
143
+ once(pattern: string, handler: EventListener, priority?: number): () => void;
144
+ /**
145
+ * Remove all listeners for a pattern (or all listeners if no pattern).
146
+ */
147
+ off(pattern?: string): void;
148
+ /**
149
+ * Get count of registered listeners.
150
+ */
151
+ listenerCount(pattern?: string): number;
152
+ /**
153
+ * Emit an event. All matching listeners will be invoked.
154
+ *
155
+ * @param type - Event type (e.g. 'mouse.move')
156
+ * @param category - Event category
157
+ * @param data - Event payload
158
+ * @param options - Additional event options
159
+ * @returns The emitted event object
160
+ */
161
+ emit(type: string, category: EventCategory, data?: Record<string, unknown>, options?: {
162
+ source?: string;
163
+ cancelable?: boolean;
164
+ }): SteloEvent;
165
+ /**
166
+ * Emit and wait for all async listeners to complete.
167
+ */
168
+ emitAsync(type: string, category: EventCategory, data?: Record<string, unknown>, options?: {
169
+ source?: string;
170
+ cancelable?: boolean;
171
+ }): Promise<SteloEvent>;
172
+ /**
173
+ * Get event history, optionally filtered.
174
+ */
175
+ getHistory(filter?: EventFilter): SteloEvent[];
176
+ /** Get the last N events from history */
177
+ recent(count?: number): SteloEvent[];
178
+ /** Clear event history */
179
+ clearHistory(): void;
180
+ /** Get total events emitted since startup */
181
+ readonly totalEmitted: number;
182
+ /**
183
+ * Wait for a specific event. Returns a promise that resolves with the event.
184
+ *
185
+ * @example
186
+ * ```ts
187
+ * const event = await events.waitFor('workflow.complete', 30000);
188
+ * ```
189
+ */
190
+ waitFor(pattern: string, timeoutMs?: number): Promise<SteloEvent>;
191
+ /**
192
+ * Create a channel — an async iterable that yields matching events.
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * const channel = events.channel('mouse.*');
197
+ * for await (const event of channel) {
198
+ * console.log(event.type, event.data);
199
+ * if (shouldStop) channel.close();
200
+ * }
201
+ * ```
202
+ */
203
+ channel(pattern: string): EventChannel;
204
+ /**
205
+ * Pipe events from one pattern to another type.
206
+ * Useful for event transformation/routing.
207
+ */
208
+ pipe(sourcePattern: string, transform: (event: SteloEvent) => {
209
+ type: string;
210
+ category: EventCategory;
211
+ data?: Record<string, unknown>;
212
+ } | null): () => void;
213
+ /**
214
+ * Reset the entire event bus (clear listeners + history).
215
+ */
216
+ reset(): void;
217
+ };
218
+ export declare class EventChannel implements AsyncIterable<SteloEvent> {
219
+ private _queue;
220
+ private _waiting;
221
+ private _closed;
222
+ private _unsub;
223
+ constructor(pattern: string);
224
+ close(): void;
225
+ [Symbol.asyncIterator](): AsyncIterator<SteloEvent>;
226
+ }
227
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../ts/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js ADDED
@@ -0,0 +1,429 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Typed Event Bus
4
+ // ============================================================================
5
+ // Cross-module event coordination with typed events, wildcards,
6
+ // event history, filtering, and priority-ordered listeners.
7
+ // ============================================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EventChannel = exports.events = void 0;
10
+ // ── Internal State ───────────────────────────────────────────────────────────
11
+ let _eventId = 0;
12
+ const _listeners = new Map();
13
+ const _history = [];
14
+ let _options = {
15
+ maxHistory: 1000,
16
+ trackHistory: true,
17
+ asyncListeners: true,
18
+ debug: false,
19
+ };
20
+ // ── Event ID Generation ──────────────────────────────────────────────────────
21
+ function nextEventId() {
22
+ return `evt_${Date.now()}_${++_eventId}`;
23
+ }
24
+ function nextListenerId() {
25
+ return `lst_${Date.now()}_${++_eventId}`;
26
+ }
27
+ // ── Pattern Matching ─────────────────────────────────────────────────────────
28
+ /**
29
+ * Match event type against a pattern.
30
+ * Supports:
31
+ * - Exact: 'mouse.move'
32
+ * - Wildcard suffix: 'mouse.*'
33
+ * - Category prefix: 'mouse'
34
+ * - Global wildcard: '*'
35
+ */
36
+ function matchesPattern(eventType, pattern) {
37
+ if (pattern === '*')
38
+ return true;
39
+ if (pattern === eventType)
40
+ return true;
41
+ // 'mouse.*' matches 'mouse.move', 'mouse.click', etc.
42
+ if (pattern.endsWith('.*')) {
43
+ const prefix = pattern.slice(0, -2);
44
+ return eventType.startsWith(prefix + '.');
45
+ }
46
+ // 'mouse' matches 'mouse.move' (category prefix)
47
+ if (!pattern.includes('.') && !pattern.includes('*')) {
48
+ return eventType.startsWith(pattern + '.');
49
+ }
50
+ // Glob-like: 'mouse.*.done' → regex
51
+ if (pattern.includes('*')) {
52
+ const regex = new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '[^.]+') + '$');
53
+ return regex.test(eventType);
54
+ }
55
+ return false;
56
+ }
57
+ // ── Core Event Bus ───────────────────────────────────────────────────────────
58
+ exports.events = {
59
+ // ── Configuration ────────────────────────────────────────────────────────
60
+ /**
61
+ * Configure the event bus.
62
+ */
63
+ configure(options) {
64
+ _options = { ..._options, ...options };
65
+ // Trim history if maxHistory was reduced
66
+ while (_history.length > _options.maxHistory) {
67
+ _history.shift();
68
+ }
69
+ },
70
+ /** Get current configuration */
71
+ getConfig() {
72
+ return { ..._options };
73
+ },
74
+ // ── Subscribing ──────────────────────────────────────────────────────────
75
+ /**
76
+ * Subscribe to events matching a pattern.
77
+ *
78
+ * @param pattern - Event pattern to match (e.g. 'mouse.*', 'keyboard.type', '*')
79
+ * @param handler - Listener function
80
+ * @param options - Optional priority and maxInvocations
81
+ * @returns Unsubscribe function
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * // Listen to all mouse events
86
+ * const unsub = events.on('mouse.*', (e) => console.log(e));
87
+ *
88
+ * // Listen to specific event, high priority
89
+ * events.on('safety.emergency_stop', handler, { priority: 100 });
90
+ *
91
+ * // One-shot listener
92
+ * events.once('workflow.complete', handler);
93
+ * ```
94
+ */
95
+ on(pattern, handler, options) {
96
+ const reg = {
97
+ pattern,
98
+ priority: options?.priority ?? 0,
99
+ maxInvocations: options?.maxInvocations ?? 0,
100
+ invocations: 0,
101
+ handler,
102
+ id: nextListenerId(),
103
+ };
104
+ if (!_listeners.has(pattern)) {
105
+ _listeners.set(pattern, []);
106
+ }
107
+ const list = _listeners.get(pattern);
108
+ list.push(reg);
109
+ // Sort by priority descending (higher priority first)
110
+ list.sort((a, b) => b.priority - a.priority);
111
+ return () => {
112
+ const idx = list.indexOf(reg);
113
+ if (idx !== -1)
114
+ list.splice(idx, 1);
115
+ if (list.length === 0)
116
+ _listeners.delete(pattern);
117
+ };
118
+ },
119
+ /**
120
+ * Subscribe to a single occurrence of an event.
121
+ */
122
+ once(pattern, handler, priority) {
123
+ return exports.events.on(pattern, handler, { priority, maxInvocations: 1 });
124
+ },
125
+ /**
126
+ * Remove all listeners for a pattern (or all listeners if no pattern).
127
+ */
128
+ off(pattern) {
129
+ if (pattern) {
130
+ _listeners.delete(pattern);
131
+ }
132
+ else {
133
+ _listeners.clear();
134
+ }
135
+ },
136
+ /**
137
+ * Get count of registered listeners.
138
+ */
139
+ listenerCount(pattern) {
140
+ if (pattern) {
141
+ return _listeners.get(pattern)?.length ?? 0;
142
+ }
143
+ let total = 0;
144
+ for (const list of _listeners.values()) {
145
+ total += list.length;
146
+ }
147
+ return total;
148
+ },
149
+ // ── Emitting ─────────────────────────────────────────────────────────────
150
+ /**
151
+ * Emit an event. All matching listeners will be invoked.
152
+ *
153
+ * @param type - Event type (e.g. 'mouse.move')
154
+ * @param category - Event category
155
+ * @param data - Event payload
156
+ * @param options - Additional event options
157
+ * @returns The emitted event object
158
+ */
159
+ emit(type, category, data, options) {
160
+ const event = {
161
+ type,
162
+ timestamp: new Date().toISOString(),
163
+ category,
164
+ data,
165
+ source: options?.source,
166
+ id: nextEventId(),
167
+ cancelable: options?.cancelable ?? false,
168
+ cancelled: false,
169
+ };
170
+ if (_options.debug) {
171
+ console.log(`[Stelo Event] ${type}`, data ?? '');
172
+ }
173
+ // Store in history
174
+ if (_options.trackHistory) {
175
+ _history.push(event);
176
+ while (_history.length > _options.maxHistory) {
177
+ _history.shift();
178
+ }
179
+ }
180
+ // Collect all matching listeners across all patterns
181
+ const matchedListeners = [];
182
+ for (const [pattern, list] of _listeners.entries()) {
183
+ for (const reg of list) {
184
+ if (matchesPattern(type, pattern)) {
185
+ matchedListeners.push(reg);
186
+ }
187
+ }
188
+ }
189
+ // Sort all matched listeners by priority
190
+ matchedListeners.sort((a, b) => b.priority - a.priority);
191
+ // Invoke listeners
192
+ const toRemove = [];
193
+ for (const reg of matchedListeners) {
194
+ if (event.cancelable && event.cancelled)
195
+ break;
196
+ try {
197
+ const result = reg.handler(event);
198
+ // If async and we support it, let it run
199
+ if (_options.asyncListeners && result instanceof Promise) {
200
+ result.catch((err) => {
201
+ if (_options.debug) {
202
+ console.error(`[Stelo Event] Listener error for ${type}:`, err);
203
+ }
204
+ });
205
+ }
206
+ }
207
+ catch (err) {
208
+ if (_options.debug) {
209
+ console.error(`[Stelo Event] Listener error for ${type}:`, err);
210
+ }
211
+ }
212
+ reg.invocations++;
213
+ if (reg.maxInvocations > 0 && reg.invocations >= reg.maxInvocations) {
214
+ toRemove.push(reg);
215
+ }
216
+ }
217
+ // Clean up expired listeners
218
+ for (const reg of toRemove) {
219
+ const list = _listeners.get(reg.pattern);
220
+ if (list) {
221
+ const idx = list.indexOf(reg);
222
+ if (idx !== -1)
223
+ list.splice(idx, 1);
224
+ if (list.length === 0)
225
+ _listeners.delete(reg.pattern);
226
+ }
227
+ }
228
+ return event;
229
+ },
230
+ /**
231
+ * Emit and wait for all async listeners to complete.
232
+ */
233
+ async emitAsync(type, category, data, options) {
234
+ const event = {
235
+ type,
236
+ timestamp: new Date().toISOString(),
237
+ category,
238
+ data,
239
+ source: options?.source,
240
+ id: nextEventId(),
241
+ cancelable: options?.cancelable ?? false,
242
+ cancelled: false,
243
+ };
244
+ if (_options.trackHistory) {
245
+ _history.push(event);
246
+ while (_history.length > _options.maxHistory) {
247
+ _history.shift();
248
+ }
249
+ }
250
+ const matchedListeners = [];
251
+ for (const [pattern, list] of _listeners.entries()) {
252
+ for (const reg of list) {
253
+ if (matchesPattern(type, pattern)) {
254
+ matchedListeners.push(reg);
255
+ }
256
+ }
257
+ }
258
+ matchedListeners.sort((a, b) => b.priority - a.priority);
259
+ for (const reg of matchedListeners) {
260
+ if (event.cancelable && event.cancelled)
261
+ break;
262
+ try {
263
+ await reg.handler(event);
264
+ }
265
+ catch (err) {
266
+ if (_options.debug) {
267
+ console.error(`[Stelo Event] Async listener error for ${type}:`, err);
268
+ }
269
+ }
270
+ reg.invocations++;
271
+ if (reg.maxInvocations > 0 && reg.invocations >= reg.maxInvocations) {
272
+ const list = _listeners.get(reg.pattern);
273
+ if (list) {
274
+ const idx = list.indexOf(reg);
275
+ if (idx !== -1)
276
+ list.splice(idx, 1);
277
+ }
278
+ }
279
+ }
280
+ return event;
281
+ },
282
+ // ── History ──────────────────────────────────────────────────────────────
283
+ /**
284
+ * Get event history, optionally filtered.
285
+ */
286
+ getHistory(filter) {
287
+ let result = [..._history];
288
+ if (filter?.categories) {
289
+ result = result.filter((e) => filter.categories.includes(e.category));
290
+ }
291
+ if (filter?.patterns) {
292
+ result = result.filter((e) => filter.patterns.some((p) => matchesPattern(e.type, p)));
293
+ }
294
+ if (filter?.sources) {
295
+ result = result.filter((e) => e.source && filter.sources.includes(e.source));
296
+ }
297
+ if (filter?.after) {
298
+ result = result.filter((e) => e.timestamp > filter.after);
299
+ }
300
+ if (filter?.before) {
301
+ result = result.filter((e) => e.timestamp < filter.before);
302
+ }
303
+ return result;
304
+ },
305
+ /** Get the last N events from history */
306
+ recent(count = 10) {
307
+ return _history.slice(-count);
308
+ },
309
+ /** Clear event history */
310
+ clearHistory() {
311
+ _history.length = 0;
312
+ },
313
+ /** Get total events emitted since startup */
314
+ get totalEmitted() {
315
+ return _eventId;
316
+ },
317
+ // ── Utilities ────────────────────────────────────────────────────────────
318
+ /**
319
+ * Wait for a specific event. Returns a promise that resolves with the event.
320
+ *
321
+ * @example
322
+ * ```ts
323
+ * const event = await events.waitFor('workflow.complete', 30000);
324
+ * ```
325
+ */
326
+ waitFor(pattern, timeoutMs = 30000) {
327
+ return new Promise((resolve, reject) => {
328
+ const timer = setTimeout(() => {
329
+ unsub();
330
+ reject(new Error(`Timed out waiting for event: ${pattern}`));
331
+ }, timeoutMs);
332
+ const unsub = exports.events.once(pattern, (event) => {
333
+ clearTimeout(timer);
334
+ resolve(event);
335
+ });
336
+ });
337
+ },
338
+ /**
339
+ * Create a channel — an async iterable that yields matching events.
340
+ *
341
+ * @example
342
+ * ```ts
343
+ * const channel = events.channel('mouse.*');
344
+ * for await (const event of channel) {
345
+ * console.log(event.type, event.data);
346
+ * if (shouldStop) channel.close();
347
+ * }
348
+ * ```
349
+ */
350
+ channel(pattern) {
351
+ return new EventChannel(pattern);
352
+ },
353
+ /**
354
+ * Pipe events from one pattern to another type.
355
+ * Useful for event transformation/routing.
356
+ */
357
+ pipe(sourcePattern, transform) {
358
+ return exports.events.on(sourcePattern, (event) => {
359
+ const transformed = transform(event);
360
+ if (transformed) {
361
+ exports.events.emit(transformed.type, transformed.category, transformed.data, { source: 'pipe' });
362
+ }
363
+ });
364
+ },
365
+ /**
366
+ * Reset the entire event bus (clear listeners + history).
367
+ */
368
+ reset() {
369
+ _listeners.clear();
370
+ _history.length = 0;
371
+ _eventId = 0;
372
+ _options = {
373
+ maxHistory: 1000,
374
+ trackHistory: true,
375
+ asyncListeners: true,
376
+ debug: false,
377
+ };
378
+ },
379
+ };
380
+ // ── Event Channel (Async Iterable) ──────────────────────────────────────────
381
+ class EventChannel {
382
+ _queue = [];
383
+ _waiting = null;
384
+ _closed = false;
385
+ _unsub = null;
386
+ constructor(pattern) {
387
+ this._unsub = exports.events.on(pattern, (event) => {
388
+ if (this._closed)
389
+ return;
390
+ if (this._waiting) {
391
+ const resolve = this._waiting;
392
+ this._waiting = null;
393
+ resolve({ value: event, done: false });
394
+ }
395
+ else {
396
+ this._queue.push(event);
397
+ }
398
+ });
399
+ }
400
+ close() {
401
+ this._closed = true;
402
+ this._unsub?.();
403
+ if (this._waiting) {
404
+ this._waiting({ value: undefined, done: true });
405
+ this._waiting = null;
406
+ }
407
+ }
408
+ [Symbol.asyncIterator]() {
409
+ return {
410
+ next: () => {
411
+ if (this._queue.length > 0) {
412
+ return Promise.resolve({ value: this._queue.shift(), done: false });
413
+ }
414
+ if (this._closed) {
415
+ return Promise.resolve({ value: undefined, done: true });
416
+ }
417
+ return new Promise((resolve) => {
418
+ this._waiting = resolve;
419
+ });
420
+ },
421
+ return: () => {
422
+ this.close();
423
+ return Promise.resolve({ value: undefined, done: true });
424
+ },
425
+ };
426
+ }
427
+ }
428
+ exports.EventChannel = EventChannel;
429
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../ts/events.ts"],"names":[],"mappings":"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"}