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.
- package/CONTRIBUTING.md +195 -0
- package/LICENSE +45 -0
- package/PERSISTENCE.md +774 -0
- package/README.md +594 -0
- package/dist/agents.d.ts +81 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +405 -0
- package/dist/agents.js.map +1 -0
- package/dist/api.d.ts +36 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +404 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +437 -0
- package/dist/cli.js.map +1 -0
- package/dist/component-registry.d.ts +190 -0
- package/dist/component-registry.d.ts.map +1 -0
- package/dist/component-registry.js +382 -0
- package/dist/component-registry.js.map +1 -0
- package/dist/fsm-runtime.d.ts +263 -0
- package/dist/fsm-runtime.d.ts.map +1 -0
- package/dist/fsm-runtime.js +1122 -0
- package/dist/fsm-runtime.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/monitoring.d.ts +68 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +176 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/persistence.d.ts +100 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +270 -0
- package/dist/persistence.js.map +1 -0
- package/dist/timer-wheel.d.ts +85 -0
- package/dist/timer-wheel.d.ts.map +1 -0
- package/dist/timer-wheel.js +181 -0
- package/dist/timer-wheel.js.map +1 -0
- package/dist/types.d.ts +404 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +40 -0
- package/dist/types.js.map +1 -0
- package/dist/websockets.d.ts +32 -0
- package/dist/websockets.d.ts.map +1 -0
- package/dist/websockets.js +117 -0
- package/dist/websockets.js.map +1 -0
- package/package.json +103 -0
package/dist/types.d.ts
ADDED
|
@@ -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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"}
|