xcomponent-ai 0.1.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 (49) hide show
  1. package/CONTRIBUTING.md +195 -0
  2. package/LICENSE +45 -0
  3. package/PERSISTENCE.md +774 -0
  4. package/README.md +594 -0
  5. package/dist/agents.d.ts +81 -0
  6. package/dist/agents.d.ts.map +1 -0
  7. package/dist/agents.js +405 -0
  8. package/dist/agents.js.map +1 -0
  9. package/dist/api.d.ts +36 -0
  10. package/dist/api.d.ts.map +1 -0
  11. package/dist/api.js +404 -0
  12. package/dist/api.js.map +1 -0
  13. package/dist/cli.d.ts +7 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +437 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/component-registry.d.ts +190 -0
  18. package/dist/component-registry.d.ts.map +1 -0
  19. package/dist/component-registry.js +382 -0
  20. package/dist/component-registry.js.map +1 -0
  21. package/dist/fsm-runtime.d.ts +263 -0
  22. package/dist/fsm-runtime.d.ts.map +1 -0
  23. package/dist/fsm-runtime.js +1122 -0
  24. package/dist/fsm-runtime.js.map +1 -0
  25. package/dist/index.d.ts +23 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +56 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/monitoring.d.ts +68 -0
  30. package/dist/monitoring.d.ts.map +1 -0
  31. package/dist/monitoring.js +176 -0
  32. package/dist/monitoring.js.map +1 -0
  33. package/dist/persistence.d.ts +100 -0
  34. package/dist/persistence.d.ts.map +1 -0
  35. package/dist/persistence.js +270 -0
  36. package/dist/persistence.js.map +1 -0
  37. package/dist/timer-wheel.d.ts +85 -0
  38. package/dist/timer-wheel.d.ts.map +1 -0
  39. package/dist/timer-wheel.js +181 -0
  40. package/dist/timer-wheel.js.map +1 -0
  41. package/dist/types.d.ts +404 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +40 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/websockets.d.ts +32 -0
  46. package/dist/websockets.d.ts.map +1 -0
  47. package/dist/websockets.js +117 -0
  48. package/dist/websockets.js.map +1 -0
  49. package/package.json +103 -0
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Core type definitions for xcomponent-ai FSM system
3
+ * Inspired by XComponent state machine architecture
4
+ */
5
+ /**
6
+ * State types following XComponent conventions
7
+ */
8
+ export declare enum StateType {
9
+ /** Initial state (unique, black, entry point) */
10
+ ENTRY = "entry",
11
+ /** Regular state (white) */
12
+ REGULAR = "regular",
13
+ /** Final state (green, disposes instance) */
14
+ FINAL = "final",
15
+ /** Error state (purple, implicit, disposes instance) */
16
+ ERROR = "error"
17
+ }
18
+ /**
19
+ * Transition types
20
+ */
21
+ export declare enum TransitionType {
22
+ /** Regular intra-machine transition (gray) */
23
+ REGULAR = "regular",
24
+ /** Inter-machine transition (green, instantiates new instance) */
25
+ INTER_MACHINE = "inter_machine",
26
+ /** Timeout transition */
27
+ TIMEOUT = "timeout",
28
+ /** Internal self-transition */
29
+ INTERNAL = "internal",
30
+ /** Triggerable from code */
31
+ TRIGGERABLE = "triggerable",
32
+ /** Auto-transition (triggered automatically when entering state) */
33
+ AUTO = "auto"
34
+ }
35
+ /**
36
+ * Guard function for conditional transitions
37
+ */
38
+ export type GuardFunction = (event: FSMEvent, context: any) => boolean;
39
+ /**
40
+ * Sender interface for triggered methods
41
+ * Allows state machines to send events to other instances (XComponent pattern)
42
+ *
43
+ * Supports both intra-component (within same component) and
44
+ * cross-component (between different components) communication
45
+ */
46
+ export interface Sender {
47
+ /**
48
+ * Send event to specific instance by ID (intra-component)
49
+ */
50
+ sendTo(instanceId: string, event: FSMEvent): Promise<void>;
51
+ /**
52
+ * Send event to specific instance in another component (cross-component)
53
+ */
54
+ sendToComponent(componentName: string, instanceId: string, event: FSMEvent): Promise<void>;
55
+ /**
56
+ * Broadcast event to instances matching property rules (intra-component)
57
+ */
58
+ broadcast(machineName: string, currentState: string, event: FSMEvent): Promise<number>;
59
+ /**
60
+ * Broadcast event to instances in another component (cross-component)
61
+ */
62
+ broadcastToComponent(componentName: string, machineName: string, currentState: string, event: FSMEvent): Promise<number>;
63
+ /**
64
+ * Create new instance (intra-component)
65
+ */
66
+ createInstance(machineName: string, initialContext: Record<string, any>): string;
67
+ /**
68
+ * Create new instance in another component (cross-component)
69
+ */
70
+ createInstanceInComponent(componentName: string, machineName: string, initialContext: Record<string, any>): string;
71
+ }
72
+ /**
73
+ * Triggered method (async JS hook on entry/transition)
74
+ * Receives event, context, and sender for cross-instance communication
75
+ */
76
+ export type TriggeredMethod = (event: FSMEvent, context: any, sender: Sender) => Promise<void>;
77
+ /**
78
+ * Guard configuration
79
+ */
80
+ export interface Guard {
81
+ /** Matching keys */
82
+ keys?: string[];
83
+ /** Contains check */
84
+ contains?: string;
85
+ /** Custom JavaScript function */
86
+ customFunction?: string;
87
+ }
88
+ /**
89
+ * Property matching rule for instance routing
90
+ * Enables XComponent-style event routing: ExecutionInput.OrderId = Order.Id
91
+ */
92
+ export interface MatchingRule {
93
+ /** Property path in event payload (e.g., "OrderId", "customer.id") */
94
+ eventProperty: string;
95
+ /** Property path in instance context (e.g., "Id", "customer.id") */
96
+ instanceProperty: string;
97
+ /** Optional comparison operator (default: '===') */
98
+ operator?: '===' | '!==' | '>' | '<' | '>=' | '<=';
99
+ }
100
+ /**
101
+ * Cascading rule for automatic cross-machine updates
102
+ * When a source machine reaches a specific state, automatically triggers events on target machines
103
+ *
104
+ * Example: When Order reaches Confirmed, start Shipment workflow
105
+ */
106
+ export interface CascadingRule {
107
+ /** Target machine name */
108
+ targetMachine: string;
109
+ /** Target state filter (only instances in this state) */
110
+ targetState: string;
111
+ /** Event to send to target instances */
112
+ event: string;
113
+ /** Property matching rules for routing */
114
+ matchingRules?: MatchingRule[];
115
+ /** Payload template with {{property}} syntax */
116
+ payload?: Record<string, any>;
117
+ }
118
+ /**
119
+ * State definition
120
+ */
121
+ export interface State {
122
+ /** State name */
123
+ name: string;
124
+ /** State type */
125
+ type: StateType;
126
+ /** Entry method name */
127
+ entryMethod?: string;
128
+ /** Exit method name */
129
+ exitMethod?: string;
130
+ /** Metadata */
131
+ metadata?: Record<string, any>;
132
+ /** Cascading rules triggered when entering this state */
133
+ cascadingRules?: CascadingRule[];
134
+ }
135
+ /**
136
+ * Transition definition
137
+ */
138
+ export interface Transition {
139
+ /** Source state */
140
+ from: string;
141
+ /** Target state */
142
+ to: string;
143
+ /** Event that triggers this transition */
144
+ event: string;
145
+ /** Transition type */
146
+ type: TransitionType;
147
+ /** Guards for conditional execution */
148
+ guards?: Guard[];
149
+ /** Timeout in milliseconds (for TIMEOUT type) */
150
+ timeoutMs?: number;
151
+ /** Target machine for inter-machine transitions */
152
+ targetMachine?: string;
153
+ /** Triggered method name */
154
+ triggeredMethod?: string;
155
+ /**
156
+ * Property matching rules for instance routing (XComponent-style)
157
+ * When present, event is routed to instances where these property equality checks pass
158
+ * Example: ExecutionInput.OrderId = Order.Id
159
+ */
160
+ matchingRules?: MatchingRule[];
161
+ /**
162
+ * Specific triggering rule for differentiation when multiple transitions
163
+ * from same state use same event
164
+ * Boolean JavaScript expression evaluated with (event, context)
165
+ * Example: "event.payload.Quantity === context.RemainingQuantity"
166
+ */
167
+ specificTriggeringRule?: string;
168
+ /** Metadata */
169
+ metadata?: Record<string, any>;
170
+ }
171
+ /**
172
+ * State Machine definition
173
+ */
174
+ export interface StateMachine {
175
+ /** Machine name */
176
+ name: string;
177
+ /** States */
178
+ states: State[];
179
+ /** Transitions */
180
+ transitions: Transition[];
181
+ /** Initial state name */
182
+ initialState: string;
183
+ /**
184
+ * Public member type name (XComponent pattern)
185
+ * Defines the business object type visible to external components
186
+ * Example: "Order", "Trade", "Customer"
187
+ */
188
+ publicMemberType?: string;
189
+ /** Metadata */
190
+ metadata?: Record<string, any>;
191
+ }
192
+ /**
193
+ * Component definition (container for state machines)
194
+ */
195
+ export interface Component {
196
+ /** Component name */
197
+ name: string;
198
+ /** Version */
199
+ version: string;
200
+ /** State machines */
201
+ stateMachines: StateMachine[];
202
+ /** Metadata */
203
+ metadata?: Record<string, any>;
204
+ }
205
+ /**
206
+ * FSM Event
207
+ */
208
+ export interface FSMEvent {
209
+ /** Event type */
210
+ type: string;
211
+ /** Event payload */
212
+ payload: Record<string, any>;
213
+ /** Timestamp */
214
+ timestamp: number;
215
+ }
216
+ /**
217
+ * FSM Instance
218
+ */
219
+ export interface FSMInstance {
220
+ /** Unique instance ID */
221
+ id: string;
222
+ /** Machine name */
223
+ machineName: string;
224
+ /** Current state */
225
+ currentState: string;
226
+ /**
227
+ * Context data (legacy/simple usage)
228
+ * For XComponent pattern, use publicMember + internalMember instead
229
+ */
230
+ context: Record<string, any>;
231
+ /**
232
+ * Public member (XComponent pattern)
233
+ * Business object visible to external components/APIs
234
+ * Example: Order { Id, Quantity, AssetName, ... }
235
+ */
236
+ publicMember?: Record<string, any>;
237
+ /**
238
+ * Internal member (XComponent pattern)
239
+ * Private state not exposed externally (rarely used)
240
+ */
241
+ internalMember?: Record<string, any>;
242
+ /** Creation timestamp */
243
+ createdAt: number;
244
+ /** Last update timestamp */
245
+ updatedAt: number;
246
+ /** Instance status */
247
+ status: 'active' | 'completed' | 'error';
248
+ }
249
+ /**
250
+ * Monitoring log entry
251
+ */
252
+ export interface LogEntry {
253
+ /** Instance ID */
254
+ instanceId: string;
255
+ /** From state */
256
+ from: string;
257
+ /** To state */
258
+ to: string;
259
+ /** Event that triggered transition */
260
+ event: string;
261
+ /** Timestamp */
262
+ time: number;
263
+ /** Error message if any */
264
+ error?: string;
265
+ /** Additional metadata */
266
+ metadata?: Record<string, any>;
267
+ }
268
+ /**
269
+ * WebSocket message for state changes
270
+ */
271
+ export interface StateChangeMessage {
272
+ /** Instance ID */
273
+ instanceId: string;
274
+ /** New state */
275
+ newState: string;
276
+ /** Previous state */
277
+ previousState: string;
278
+ /** Event that triggered change */
279
+ event: FSMEvent;
280
+ /** Timestamp */
281
+ timestamp: number;
282
+ }
283
+ /**
284
+ * Agent tool result
285
+ */
286
+ export interface AgentToolResult {
287
+ /** Success status */
288
+ success: boolean;
289
+ /** Result data */
290
+ data?: any;
291
+ /** Error message */
292
+ error?: string;
293
+ /** Suggestions */
294
+ suggestions?: string[];
295
+ }
296
+ /**
297
+ * Persisted event with causality tracking
298
+ * Enables full event sourcing and auditability
299
+ */
300
+ export interface PersistedEvent {
301
+ /** Unique event ID */
302
+ id: string;
303
+ /** Instance ID that received this event */
304
+ instanceId: string;
305
+ /** Machine name */
306
+ machineName: string;
307
+ /** Component name where this event occurred */
308
+ componentName: string;
309
+ /** The FSM event */
310
+ event: FSMEvent;
311
+ /** State before transition */
312
+ stateBefore: string;
313
+ /** State after transition */
314
+ stateAfter: string;
315
+ /** Timestamp when persisted */
316
+ persistedAt: number;
317
+ /** Causality: IDs of events that caused this event (cascading/sender) */
318
+ causedBy?: string[];
319
+ /** Causality: IDs of events caused by this event */
320
+ caused?: string[];
321
+ /** Cross-component: Source component name (if event originated from another component) */
322
+ sourceComponentName?: string;
323
+ /** Cross-component: Target component name (if event was sent to another component) */
324
+ targetComponentName?: string;
325
+ }
326
+ /**
327
+ * Instance snapshot for fast restoration
328
+ */
329
+ export interface InstanceSnapshot {
330
+ /** Instance data */
331
+ instance: FSMInstance;
332
+ /** Snapshot timestamp */
333
+ snapshotAt: number;
334
+ /** Last event ID processed */
335
+ lastEventId: string;
336
+ /** Pending timeouts (relative ms from now) */
337
+ pendingTimeouts?: Array<{
338
+ stateKey: string;
339
+ eventType: string;
340
+ remainingMs: number;
341
+ }>;
342
+ }
343
+ /**
344
+ * Event store interface for persistence
345
+ */
346
+ export interface EventStore {
347
+ /**
348
+ * Append event to store
349
+ */
350
+ append(event: PersistedEvent): Promise<void>;
351
+ /**
352
+ * Get all events for an instance
353
+ */
354
+ getEventsForInstance(instanceId: string): Promise<PersistedEvent[]>;
355
+ /**
356
+ * Get events in time range
357
+ */
358
+ getEventsByTimeRange(startTime: number, endTime: number): Promise<PersistedEvent[]>;
359
+ /**
360
+ * Get events caused by another event (tracing)
361
+ */
362
+ getCausedEvents(eventId: string): Promise<PersistedEvent[]>;
363
+ /**
364
+ * Get all events (for replay)
365
+ */
366
+ getAllEvents(): Promise<PersistedEvent[]>;
367
+ }
368
+ /**
369
+ * Snapshot store interface
370
+ */
371
+ export interface SnapshotStore {
372
+ /**
373
+ * Save instance snapshot
374
+ */
375
+ saveSnapshot(snapshot: InstanceSnapshot): Promise<void>;
376
+ /**
377
+ * Get latest snapshot for instance
378
+ */
379
+ getSnapshot(instanceId: string): Promise<InstanceSnapshot | null>;
380
+ /**
381
+ * Get all snapshots (for full restore)
382
+ */
383
+ getAllSnapshots(): Promise<InstanceSnapshot[]>;
384
+ /**
385
+ * Delete snapshot
386
+ */
387
+ deleteSnapshot(instanceId: string): Promise<void>;
388
+ }
389
+ /**
390
+ * Persistence configuration
391
+ */
392
+ export interface PersistenceConfig {
393
+ /** Enable event sourcing */
394
+ eventSourcing?: boolean;
395
+ /** Enable snapshots */
396
+ snapshots?: boolean;
397
+ /** Snapshot interval (save every N transitions) */
398
+ snapshotInterval?: number;
399
+ /** Event store implementation */
400
+ eventStore?: EventStore;
401
+ /** Snapshot store implementation */
402
+ snapshotStore?: SnapshotStore;
403
+ }
404
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Core type definitions for xcomponent-ai FSM system
4
+ * Inspired by XComponent state machine architecture
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TransitionType = exports.StateType = void 0;
8
+ /**
9
+ * State types following XComponent conventions
10
+ */
11
+ var StateType;
12
+ (function (StateType) {
13
+ /** Initial state (unique, black, entry point) */
14
+ StateType["ENTRY"] = "entry";
15
+ /** Regular state (white) */
16
+ StateType["REGULAR"] = "regular";
17
+ /** Final state (green, disposes instance) */
18
+ StateType["FINAL"] = "final";
19
+ /** Error state (purple, implicit, disposes instance) */
20
+ StateType["ERROR"] = "error";
21
+ })(StateType || (exports.StateType = StateType = {}));
22
+ /**
23
+ * Transition types
24
+ */
25
+ var TransitionType;
26
+ (function (TransitionType) {
27
+ /** Regular intra-machine transition (gray) */
28
+ TransitionType["REGULAR"] = "regular";
29
+ /** Inter-machine transition (green, instantiates new instance) */
30
+ TransitionType["INTER_MACHINE"] = "inter_machine";
31
+ /** Timeout transition */
32
+ TransitionType["TIMEOUT"] = "timeout";
33
+ /** Internal self-transition */
34
+ TransitionType["INTERNAL"] = "internal";
35
+ /** Triggerable from code */
36
+ TransitionType["TRIGGERABLE"] = "triggerable";
37
+ /** Auto-transition (triggered automatically when entering state) */
38
+ TransitionType["AUTO"] = "auto";
39
+ })(TransitionType || (exports.TransitionType = TransitionType = {}));
40
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;GAEG;AACH,IAAY,SASX;AATD,WAAY,SAAS;IACnB,iDAAiD;IACjD,4BAAe,CAAA;IACf,4BAA4B;IAC5B,gCAAmB,CAAA;IACnB,6CAA6C;IAC7C,4BAAe,CAAA;IACf,wDAAwD;IACxD,4BAAe,CAAA;AACjB,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED;;GAEG;AACH,IAAY,cAaX;AAbD,WAAY,cAAc;IACxB,8CAA8C;IAC9C,qCAAmB,CAAA;IACnB,kEAAkE;IAClE,iDAA+B,CAAA;IAC/B,yBAAyB;IACzB,qCAAmB,CAAA;IACnB,+BAA+B;IAC/B,uCAAqB,CAAA;IACrB,4BAA4B;IAC5B,6CAA2B,CAAA;IAC3B,oEAAoE;IACpE,+BAAa,CAAA;AACf,CAAC,EAbW,cAAc,8BAAd,cAAc,QAazB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * WebSocket Infrastructure for Real-time FSM Monitoring
3
+ * Socket.io-based live state change broadcasting
4
+ */
5
+ import { Server as SocketIOServer } from 'socket.io';
6
+ import { Server as HTTPServer } from 'http';
7
+ import { FSMRuntime } from './fsm-runtime';
8
+ /**
9
+ * WebSocket Manager
10
+ */
11
+ export declare class WebSocketManager {
12
+ private io;
13
+ private runtimes;
14
+ constructor(httpServer: HTTPServer);
15
+ /**
16
+ * Register FSM runtime for WebSocket broadcasting
17
+ */
18
+ registerRuntime(componentName: string, runtime: FSMRuntime): void;
19
+ /**
20
+ * Setup WebSocket handlers
21
+ */
22
+ private setupHandlers;
23
+ /**
24
+ * Broadcast state change to subscribers
25
+ */
26
+ private broadcastStateChange;
27
+ /**
28
+ * Get Socket.IO server instance
29
+ */
30
+ getIO(): SocketIOServer;
31
+ }
32
+ //# sourceMappingURL=websockets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../src/websockets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,UAAU,EAAE,UAAU;IAYlC;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAyBjE;;OAEG;IACH,OAAO,CAAC,aAAa;IAwDrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,KAAK,IAAI,cAAc;CAGxB"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * WebSocket Infrastructure for Real-time FSM Monitoring
4
+ * Socket.io-based live state change broadcasting
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WebSocketManager = void 0;
8
+ const socket_io_1 = require("socket.io");
9
+ /**
10
+ * WebSocket Manager
11
+ */
12
+ class WebSocketManager {
13
+ io;
14
+ runtimes;
15
+ constructor(httpServer) {
16
+ this.io = new socket_io_1.Server(httpServer, {
17
+ cors: {
18
+ origin: '*',
19
+ methods: ['GET', 'POST'],
20
+ },
21
+ });
22
+ this.runtimes = new Map();
23
+ this.setupHandlers();
24
+ }
25
+ /**
26
+ * Register FSM runtime for WebSocket broadcasting
27
+ */
28
+ registerRuntime(componentName, runtime) {
29
+ this.runtimes.set(componentName, runtime);
30
+ // Subscribe to state changes
31
+ runtime.on('state_change', (data) => {
32
+ this.broadcastStateChange(componentName, data);
33
+ });
34
+ runtime.on('instance_created', (instance) => {
35
+ this.io.to(`component:${componentName}`).emit('instance_created', instance);
36
+ });
37
+ runtime.on('instance_disposed', (instance) => {
38
+ this.io.to(`component:${componentName}`).emit('instance_disposed', instance);
39
+ });
40
+ runtime.on('instance_error', (data) => {
41
+ this.io.to(`component:${componentName}`).emit('instance_error', data);
42
+ });
43
+ runtime.on('guard_failed', (data) => {
44
+ this.io.to(`component:${componentName}`).emit('guard_failed', data);
45
+ });
46
+ }
47
+ /**
48
+ * Setup WebSocket handlers
49
+ */
50
+ setupHandlers() {
51
+ this.io.on('connection', (socket) => {
52
+ console.log(`Client connected: ${socket.id}`);
53
+ // Subscribe to component events
54
+ socket.on('subscribe_component', (componentName) => {
55
+ socket.join(`component:${componentName}`);
56
+ console.log(`Client ${socket.id} subscribed to component: ${componentName}`);
57
+ socket.emit('subscribed', { componentName });
58
+ });
59
+ // Subscribe to specific instance
60
+ socket.on('subscribe_instance', (data) => {
61
+ socket.join(`instance:${data.instanceId}`);
62
+ console.log(`Client ${socket.id} subscribed to instance: ${data.instanceId}`);
63
+ socket.emit('subscribed', { instanceId: data.instanceId });
64
+ });
65
+ // Unsubscribe
66
+ socket.on('unsubscribe_component', (componentName) => {
67
+ socket.leave(`component:${componentName}`);
68
+ console.log(`Client ${socket.id} unsubscribed from component: ${componentName}`);
69
+ });
70
+ socket.on('unsubscribe_instance', (instanceId) => {
71
+ socket.leave(`instance:${instanceId}`);
72
+ console.log(`Client ${socket.id} unsubscribed from instance: ${instanceId}`);
73
+ });
74
+ // Get runtime info
75
+ socket.on('get_runtime_info', (componentName, callback) => {
76
+ const runtime = this.runtimes.get(componentName);
77
+ if (runtime) {
78
+ const instances = runtime.getAllInstances();
79
+ callback({
80
+ success: true,
81
+ data: {
82
+ componentName,
83
+ instanceCount: instances.length,
84
+ instances,
85
+ },
86
+ });
87
+ }
88
+ else {
89
+ callback({
90
+ success: false,
91
+ error: `Component ${componentName} not found`,
92
+ });
93
+ }
94
+ });
95
+ socket.on('disconnect', () => {
96
+ console.log(`Client disconnected: ${socket.id}`);
97
+ });
98
+ });
99
+ }
100
+ /**
101
+ * Broadcast state change to subscribers
102
+ */
103
+ broadcastStateChange(componentName, data) {
104
+ // Broadcast to component subscribers
105
+ this.io.to(`component:${componentName}`).emit('state_change', data);
106
+ // Broadcast to instance subscribers
107
+ this.io.to(`instance:${data.instanceId}`).emit('state_change', data);
108
+ }
109
+ /**
110
+ * Get Socket.IO server instance
111
+ */
112
+ getIO() {
113
+ return this.io;
114
+ }
115
+ }
116
+ exports.WebSocketManager = WebSocketManager;
117
+ //# sourceMappingURL=websockets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets.js","sourceRoot":"","sources":["../src/websockets.ts"],"names":[],"mappings":"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"}