@principal-ai/principal-view-core 0.5.6

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 (204) hide show
  1. package/README.md +126 -0
  2. package/dist/ConfigurationLoader.d.ts +76 -0
  3. package/dist/ConfigurationLoader.d.ts.map +1 -0
  4. package/dist/ConfigurationLoader.js +144 -0
  5. package/dist/ConfigurationLoader.js.map +1 -0
  6. package/dist/ConfigurationValidator.d.ts +31 -0
  7. package/dist/ConfigurationValidator.d.ts.map +1 -0
  8. package/dist/ConfigurationValidator.js +242 -0
  9. package/dist/ConfigurationValidator.js.map +1 -0
  10. package/dist/EventProcessor.d.ts +49 -0
  11. package/dist/EventProcessor.d.ts.map +1 -0
  12. package/dist/EventProcessor.js +215 -0
  13. package/dist/EventProcessor.js.map +1 -0
  14. package/dist/EventRecorderService.d.ts +305 -0
  15. package/dist/EventRecorderService.d.ts.map +1 -0
  16. package/dist/EventRecorderService.js +463 -0
  17. package/dist/EventRecorderService.js.map +1 -0
  18. package/dist/LibraryLoader.d.ts +63 -0
  19. package/dist/LibraryLoader.d.ts.map +1 -0
  20. package/dist/LibraryLoader.js +188 -0
  21. package/dist/LibraryLoader.js.map +1 -0
  22. package/dist/PathBasedEventProcessor.d.ts +90 -0
  23. package/dist/PathBasedEventProcessor.d.ts.map +1 -0
  24. package/dist/PathBasedEventProcessor.js +239 -0
  25. package/dist/PathBasedEventProcessor.js.map +1 -0
  26. package/dist/SessionManager.d.ts +194 -0
  27. package/dist/SessionManager.d.ts.map +1 -0
  28. package/dist/SessionManager.js +299 -0
  29. package/dist/SessionManager.js.map +1 -0
  30. package/dist/ValidationEngine.d.ts +31 -0
  31. package/dist/ValidationEngine.d.ts.map +1 -0
  32. package/dist/ValidationEngine.js +158 -0
  33. package/dist/ValidationEngine.js.map +1 -0
  34. package/dist/helpers/GraphInstrumentationHelper.d.ts +93 -0
  35. package/dist/helpers/GraphInstrumentationHelper.d.ts.map +1 -0
  36. package/dist/helpers/GraphInstrumentationHelper.js +248 -0
  37. package/dist/helpers/GraphInstrumentationHelper.js.map +1 -0
  38. package/dist/index.d.ts +33 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +34 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/rules/config.d.ts +57 -0
  43. package/dist/rules/config.d.ts.map +1 -0
  44. package/dist/rules/config.js +382 -0
  45. package/dist/rules/config.js.map +1 -0
  46. package/dist/rules/engine.d.ts +70 -0
  47. package/dist/rules/engine.d.ts.map +1 -0
  48. package/dist/rules/engine.js +252 -0
  49. package/dist/rules/engine.js.map +1 -0
  50. package/dist/rules/implementations/connection-type-references.d.ts +7 -0
  51. package/dist/rules/implementations/connection-type-references.d.ts.map +1 -0
  52. package/dist/rules/implementations/connection-type-references.js +104 -0
  53. package/dist/rules/implementations/connection-type-references.js.map +1 -0
  54. package/dist/rules/implementations/dead-end-states.d.ts +17 -0
  55. package/dist/rules/implementations/dead-end-states.d.ts.map +1 -0
  56. package/dist/rules/implementations/dead-end-states.js +72 -0
  57. package/dist/rules/implementations/dead-end-states.js.map +1 -0
  58. package/dist/rules/implementations/index.d.ts +24 -0
  59. package/dist/rules/implementations/index.d.ts.map +1 -0
  60. package/dist/rules/implementations/index.js +62 -0
  61. package/dist/rules/implementations/index.js.map +1 -0
  62. package/dist/rules/implementations/library-node-type-match.d.ts +17 -0
  63. package/dist/rules/implementations/library-node-type-match.d.ts.map +1 -0
  64. package/dist/rules/implementations/library-node-type-match.js +123 -0
  65. package/dist/rules/implementations/library-node-type-match.js.map +1 -0
  66. package/dist/rules/implementations/minimum-node-sources.d.ts +22 -0
  67. package/dist/rules/implementations/minimum-node-sources.d.ts.map +1 -0
  68. package/dist/rules/implementations/minimum-node-sources.js +54 -0
  69. package/dist/rules/implementations/minimum-node-sources.js.map +1 -0
  70. package/dist/rules/implementations/no-unknown-fields.d.ts +7 -0
  71. package/dist/rules/implementations/no-unknown-fields.d.ts.map +1 -0
  72. package/dist/rules/implementations/no-unknown-fields.js +211 -0
  73. package/dist/rules/implementations/no-unknown-fields.js.map +1 -0
  74. package/dist/rules/implementations/orphaned-edge-types.d.ts +7 -0
  75. package/dist/rules/implementations/orphaned-edge-types.d.ts.map +1 -0
  76. package/dist/rules/implementations/orphaned-edge-types.js +47 -0
  77. package/dist/rules/implementations/orphaned-edge-types.js.map +1 -0
  78. package/dist/rules/implementations/orphaned-node-types.d.ts +7 -0
  79. package/dist/rules/implementations/orphaned-node-types.d.ts.map +1 -0
  80. package/dist/rules/implementations/orphaned-node-types.js +50 -0
  81. package/dist/rules/implementations/orphaned-node-types.js.map +1 -0
  82. package/dist/rules/implementations/required-metadata.d.ts +7 -0
  83. package/dist/rules/implementations/required-metadata.d.ts.map +1 -0
  84. package/dist/rules/implementations/required-metadata.js +57 -0
  85. package/dist/rules/implementations/required-metadata.js.map +1 -0
  86. package/dist/rules/implementations/state-transition-references.d.ts +7 -0
  87. package/dist/rules/implementations/state-transition-references.d.ts.map +1 -0
  88. package/dist/rules/implementations/state-transition-references.js +135 -0
  89. package/dist/rules/implementations/state-transition-references.js.map +1 -0
  90. package/dist/rules/implementations/unreachable-states.d.ts +7 -0
  91. package/dist/rules/implementations/unreachable-states.d.ts.map +1 -0
  92. package/dist/rules/implementations/unreachable-states.js +80 -0
  93. package/dist/rules/implementations/unreachable-states.js.map +1 -0
  94. package/dist/rules/implementations/valid-action-patterns.d.ts +17 -0
  95. package/dist/rules/implementations/valid-action-patterns.d.ts.map +1 -0
  96. package/dist/rules/implementations/valid-action-patterns.js +109 -0
  97. package/dist/rules/implementations/valid-action-patterns.js.map +1 -0
  98. package/dist/rules/implementations/valid-color-format.d.ts +7 -0
  99. package/dist/rules/implementations/valid-color-format.d.ts.map +1 -0
  100. package/dist/rules/implementations/valid-color-format.js +91 -0
  101. package/dist/rules/implementations/valid-color-format.js.map +1 -0
  102. package/dist/rules/implementations/valid-edge-types.d.ts +7 -0
  103. package/dist/rules/implementations/valid-edge-types.d.ts.map +1 -0
  104. package/dist/rules/implementations/valid-edge-types.js +244 -0
  105. package/dist/rules/implementations/valid-edge-types.js.map +1 -0
  106. package/dist/rules/implementations/valid-node-types.d.ts +7 -0
  107. package/dist/rules/implementations/valid-node-types.d.ts.map +1 -0
  108. package/dist/rules/implementations/valid-node-types.js +175 -0
  109. package/dist/rules/implementations/valid-node-types.js.map +1 -0
  110. package/dist/rules/index.d.ts +28 -0
  111. package/dist/rules/index.d.ts.map +1 -0
  112. package/dist/rules/index.js +45 -0
  113. package/dist/rules/index.js.map +1 -0
  114. package/dist/rules/types.d.ts +309 -0
  115. package/dist/rules/types.d.ts.map +1 -0
  116. package/dist/rules/types.js +35 -0
  117. package/dist/rules/types.js.map +1 -0
  118. package/dist/types/canvas.d.ts +409 -0
  119. package/dist/types/canvas.d.ts.map +1 -0
  120. package/dist/types/canvas.js +70 -0
  121. package/dist/types/canvas.js.map +1 -0
  122. package/dist/types/index.d.ts +311 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/index.js +13 -0
  125. package/dist/types/index.js.map +1 -0
  126. package/dist/types/library.d.ts +185 -0
  127. package/dist/types/library.d.ts.map +1 -0
  128. package/dist/types/library.js +15 -0
  129. package/dist/types/library.js.map +1 -0
  130. package/dist/types/path-based-config.d.ts +230 -0
  131. package/dist/types/path-based-config.d.ts.map +1 -0
  132. package/dist/types/path-based-config.js +9 -0
  133. package/dist/types/path-based-config.js.map +1 -0
  134. package/dist/utils/CanvasConverter.d.ts +118 -0
  135. package/dist/utils/CanvasConverter.d.ts.map +1 -0
  136. package/dist/utils/CanvasConverter.js +315 -0
  137. package/dist/utils/CanvasConverter.js.map +1 -0
  138. package/dist/utils/GraphConverter.d.ts +18 -0
  139. package/dist/utils/GraphConverter.d.ts.map +1 -0
  140. package/dist/utils/GraphConverter.js +61 -0
  141. package/dist/utils/GraphConverter.js.map +1 -0
  142. package/dist/utils/LibraryConverter.d.ts +113 -0
  143. package/dist/utils/LibraryConverter.d.ts.map +1 -0
  144. package/dist/utils/LibraryConverter.js +166 -0
  145. package/dist/utils/LibraryConverter.js.map +1 -0
  146. package/dist/utils/PathMatcher.d.ts +55 -0
  147. package/dist/utils/PathMatcher.d.ts.map +1 -0
  148. package/dist/utils/PathMatcher.js +172 -0
  149. package/dist/utils/PathMatcher.js.map +1 -0
  150. package/dist/utils/YamlParser.d.ts +36 -0
  151. package/dist/utils/YamlParser.d.ts.map +1 -0
  152. package/dist/utils/YamlParser.js +63 -0
  153. package/dist/utils/YamlParser.js.map +1 -0
  154. package/package.json +47 -0
  155. package/src/ConfigurationLoader.test.ts +490 -0
  156. package/src/ConfigurationLoader.ts +185 -0
  157. package/src/ConfigurationValidator.test.ts +200 -0
  158. package/src/ConfigurationValidator.ts +283 -0
  159. package/src/EventProcessor.test.ts +405 -0
  160. package/src/EventProcessor.ts +250 -0
  161. package/src/EventRecorderService.test.ts +541 -0
  162. package/src/EventRecorderService.ts +744 -0
  163. package/src/LibraryLoader.ts +215 -0
  164. package/src/PathBasedEventProcessor.test.ts +567 -0
  165. package/src/PathBasedEventProcessor.ts +332 -0
  166. package/src/SessionManager.test.ts +424 -0
  167. package/src/SessionManager.ts +470 -0
  168. package/src/ValidationEngine.test.ts +371 -0
  169. package/src/ValidationEngine.ts +196 -0
  170. package/src/helpers/GraphInstrumentationHelper.test.ts +340 -0
  171. package/src/helpers/GraphInstrumentationHelper.ts +326 -0
  172. package/src/index.ts +85 -0
  173. package/src/rules/config.test.ts +278 -0
  174. package/src/rules/config.ts +459 -0
  175. package/src/rules/engine.test.ts +332 -0
  176. package/src/rules/engine.ts +318 -0
  177. package/src/rules/implementations/connection-type-references.ts +117 -0
  178. package/src/rules/implementations/dead-end-states.ts +101 -0
  179. package/src/rules/implementations/index.ts +73 -0
  180. package/src/rules/implementations/library-node-type-match.ts +148 -0
  181. package/src/rules/implementations/minimum-node-sources.ts +82 -0
  182. package/src/rules/implementations/no-unknown-fields.ts +342 -0
  183. package/src/rules/implementations/orphaned-edge-types.ts +55 -0
  184. package/src/rules/implementations/orphaned-node-types.ts +58 -0
  185. package/src/rules/implementations/required-metadata.ts +64 -0
  186. package/src/rules/implementations/state-transition-references.ts +151 -0
  187. package/src/rules/implementations/unreachable-states.ts +94 -0
  188. package/src/rules/implementations/valid-action-patterns.ts +136 -0
  189. package/src/rules/implementations/valid-color-format.ts +140 -0
  190. package/src/rules/implementations/valid-edge-types.ts +258 -0
  191. package/src/rules/implementations/valid-node-types.ts +189 -0
  192. package/src/rules/index.ts +95 -0
  193. package/src/rules/types.ts +426 -0
  194. package/src/types/canvas.ts +496 -0
  195. package/src/types/index.ts +382 -0
  196. package/src/types/library.ts +233 -0
  197. package/src/types/path-based-config.ts +281 -0
  198. package/src/utils/CanvasConverter.ts +431 -0
  199. package/src/utils/GraphConverter.test.ts +195 -0
  200. package/src/utils/GraphConverter.ts +71 -0
  201. package/src/utils/LibraryConverter.ts +245 -0
  202. package/src/utils/PathMatcher.test.ts +148 -0
  203. package/src/utils/PathMatcher.ts +183 -0
  204. package/src/utils/YamlParser.ts +75 -0
@@ -0,0 +1,463 @@
1
+ /**
2
+ * EventRecorderService - Log ingestion and event recording service
3
+ *
4
+ * This service:
5
+ * 1. Accepts logs via message protocol or direct API
6
+ * 2. Processes logs through PathBasedEventProcessor
7
+ * 3. Manages sessions through SessionManager
8
+ * 4. Emits events to subscribers for visualization
9
+ *
10
+ * The service is transport-agnostic - it handles message parsing and responses
11
+ * but does not implement any specific transport (WebSocket, IPC, etc.).
12
+ * The host application is responsible for the actual transport layer.
13
+ */
14
+ import { SessionManager } from './SessionManager';
15
+ import { PathBasedEventProcessor } from './PathBasedEventProcessor';
16
+ /**
17
+ * EventRecorderService - Main service for log ingestion and event recording
18
+ */
19
+ export class EventRecorderService {
20
+ constructor(config) {
21
+ this.eventListeners = new Set();
22
+ this.batchListeners = new Set();
23
+ this.eventBuffer = [];
24
+ this.batchTimer = null;
25
+ this.connections = new Map();
26
+ this.isRecording = false;
27
+ this.config = {
28
+ graphConfig: config.graphConfig,
29
+ recordingMode: config.recordingMode ?? 'manual',
30
+ emitImmediately: config.emitImmediately ?? true,
31
+ batchIntervalMs: config.batchIntervalMs ?? 100,
32
+ };
33
+ this.sessionManager = new SessionManager(config.sessionConfig);
34
+ this.eventProcessor = new PathBasedEventProcessor(config.graphConfig);
35
+ // Start batch processing if not emitting immediately
36
+ if (!this.config.emitImmediately) {
37
+ this.startBatchProcessing();
38
+ }
39
+ // In continuous mode, start recording immediately
40
+ if (this.config.recordingMode === 'continuous') {
41
+ this.isRecording = true;
42
+ }
43
+ }
44
+ /**
45
+ * Process an incoming protocol message
46
+ */
47
+ processMessage(message, connectionId) {
48
+ // Update connection activity
49
+ const connection = this.connections.get(connectionId);
50
+ if (connection) {
51
+ connection.lastActivityAt = Date.now();
52
+ }
53
+ switch (message.type) {
54
+ case 'session_start':
55
+ return this.handleSessionStart(message, connectionId);
56
+ case 'session_end':
57
+ return this.handleSessionEnd(message, connectionId);
58
+ case 'log':
59
+ return this.handleLog(message, connectionId);
60
+ case 'log_batch':
61
+ return this.handleLogBatch(message, connectionId);
62
+ case 'ping':
63
+ return this.handlePing(message);
64
+ default: {
65
+ const exhaustiveCheck = message;
66
+ return this.createError('UNKNOWN_MESSAGE_TYPE', `Unknown message type: ${exhaustiveCheck.type}`);
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * Handle session start message
72
+ */
73
+ handleSessionStart(message, connectionId) {
74
+ try {
75
+ const session = this.sessionManager.createSession({
76
+ name: message.payload.name,
77
+ id: message.payload.id,
78
+ metadata: message.payload.metadata,
79
+ });
80
+ // Associate session with connection
81
+ const connection = this.connections.get(connectionId);
82
+ if (connection) {
83
+ connection.activeSessionId = session.id;
84
+ }
85
+ this.isRecording = true;
86
+ return {
87
+ type: 'ack',
88
+ timestamp: Date.now(),
89
+ payload: {
90
+ requestId: message.requestId || '',
91
+ sessionId: session.id,
92
+ },
93
+ };
94
+ }
95
+ catch (error) {
96
+ return this.createError('SESSION_START_FAILED', error instanceof Error ? error.message : 'Failed to start session', message.requestId);
97
+ }
98
+ }
99
+ /**
100
+ * Handle session end message
101
+ */
102
+ handleSessionEnd(message, connectionId) {
103
+ try {
104
+ this.sessionManager.endSession(message.payload.sessionId, {
105
+ result: message.payload.result,
106
+ error: message.payload.error,
107
+ });
108
+ // Clear session from connection
109
+ const connection = this.connections.get(connectionId);
110
+ if (connection && connection.activeSessionId === message.payload.sessionId) {
111
+ connection.activeSessionId = null;
112
+ }
113
+ // In manual mode, stop recording when session ends
114
+ if (this.config.recordingMode === 'manual') {
115
+ this.isRecording = false;
116
+ }
117
+ return {
118
+ type: 'ack',
119
+ timestamp: Date.now(),
120
+ payload: {
121
+ requestId: message.requestId || '',
122
+ sessionId: message.payload.sessionId,
123
+ },
124
+ };
125
+ }
126
+ catch (error) {
127
+ return this.createError('SESSION_END_FAILED', error instanceof Error ? error.message : 'Failed to end session', message.requestId);
128
+ }
129
+ }
130
+ /**
131
+ * Handle single log message
132
+ */
133
+ handleLog(message, connectionId) {
134
+ if (!this.isRecording) {
135
+ return null; // Silently ignore logs when not recording
136
+ }
137
+ const events = this.eventProcessor.processLog(message.payload);
138
+ // Add events to active session
139
+ const activeSession = this.sessionManager.getActiveSession();
140
+ if (activeSession) {
141
+ for (const event of events) {
142
+ this.sessionManager.addEvent(activeSession.id, event);
143
+ }
144
+ }
145
+ // Emit events
146
+ this.emitEvents(events);
147
+ if (message.requestId) {
148
+ return {
149
+ type: 'ack',
150
+ timestamp: Date.now(),
151
+ payload: {
152
+ requestId: message.requestId,
153
+ },
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+ /**
159
+ * Handle batch log message
160
+ */
161
+ handleLogBatch(message, connectionId) {
162
+ if (!this.isRecording) {
163
+ return null;
164
+ }
165
+ const events = this.eventProcessor.processLogs(message.payload.logs);
166
+ // Add events to active session
167
+ const activeSession = this.sessionManager.getActiveSession();
168
+ if (activeSession) {
169
+ for (const event of events) {
170
+ this.sessionManager.addEvent(activeSession.id, event);
171
+ }
172
+ }
173
+ // Emit events
174
+ this.emitEvents(events);
175
+ if (message.requestId) {
176
+ return {
177
+ type: 'ack',
178
+ timestamp: Date.now(),
179
+ payload: {
180
+ requestId: message.requestId,
181
+ },
182
+ };
183
+ }
184
+ return null;
185
+ }
186
+ /**
187
+ * Handle ping message
188
+ */
189
+ handlePing(message) {
190
+ return {
191
+ type: 'pong',
192
+ timestamp: Date.now(),
193
+ };
194
+ }
195
+ /**
196
+ * Create an error response
197
+ */
198
+ createError(code, message, requestId) {
199
+ return {
200
+ type: 'error',
201
+ timestamp: Date.now(),
202
+ payload: {
203
+ code,
204
+ message,
205
+ requestId,
206
+ },
207
+ };
208
+ }
209
+ /**
210
+ * Emit events to listeners
211
+ */
212
+ emitEvents(events) {
213
+ if (events.length === 0)
214
+ return;
215
+ if (this.config.emitImmediately) {
216
+ // Emit immediately to all listeners
217
+ for (const event of events) {
218
+ for (const listener of this.eventListeners) {
219
+ try {
220
+ listener(event);
221
+ }
222
+ catch (error) {
223
+ console.error('Event listener error:', error);
224
+ }
225
+ }
226
+ }
227
+ }
228
+ else {
229
+ // Buffer events for batch emission
230
+ this.eventBuffer.push(...events);
231
+ }
232
+ }
233
+ /**
234
+ * Start batch processing timer
235
+ */
236
+ startBatchProcessing() {
237
+ this.batchTimer = setInterval(() => {
238
+ if (this.eventBuffer.length > 0) {
239
+ const events = [...this.eventBuffer];
240
+ this.eventBuffer = [];
241
+ for (const listener of this.batchListeners) {
242
+ try {
243
+ listener(events);
244
+ }
245
+ catch (error) {
246
+ console.error('Batch listener error:', error);
247
+ }
248
+ }
249
+ }
250
+ }, this.config.batchIntervalMs);
251
+ }
252
+ /**
253
+ * Stop batch processing timer
254
+ */
255
+ stopBatchProcessing() {
256
+ if (this.batchTimer) {
257
+ clearInterval(this.batchTimer);
258
+ this.batchTimer = null;
259
+ }
260
+ }
261
+ // === Direct API ===
262
+ /**
263
+ * Process a log entry directly (without protocol message wrapper)
264
+ */
265
+ processLog(log) {
266
+ if (!this.isRecording) {
267
+ return [];
268
+ }
269
+ const events = this.eventProcessor.processLog(log);
270
+ // Add events to active session
271
+ const activeSession = this.sessionManager.getActiveSession();
272
+ if (activeSession) {
273
+ for (const event of events) {
274
+ this.sessionManager.addEvent(activeSession.id, event);
275
+ }
276
+ }
277
+ // Emit events
278
+ this.emitEvents(events);
279
+ return events;
280
+ }
281
+ /**
282
+ * Process multiple log entries directly (without protocol message wrapper)
283
+ */
284
+ processLogs(logs) {
285
+ if (!this.isRecording) {
286
+ return [];
287
+ }
288
+ const events = this.eventProcessor.processLogs(logs);
289
+ // Add events to active session
290
+ const activeSession = this.sessionManager.getActiveSession();
291
+ if (activeSession) {
292
+ for (const event of events) {
293
+ this.sessionManager.addEvent(activeSession.id, event);
294
+ }
295
+ }
296
+ // Emit events
297
+ this.emitEvents(events);
298
+ return events;
299
+ }
300
+ /**
301
+ * Start a new session directly
302
+ */
303
+ startSession(options) {
304
+ const session = this.sessionManager.createSession(options);
305
+ this.isRecording = true;
306
+ return session;
307
+ }
308
+ /**
309
+ * End a session directly
310
+ */
311
+ endSession(sessionId, options) {
312
+ this.sessionManager.endSession(sessionId, options);
313
+ if (this.config.recordingMode === 'manual') {
314
+ this.isRecording = false;
315
+ }
316
+ }
317
+ /**
318
+ * End the active session
319
+ */
320
+ endActiveSession(options) {
321
+ this.sessionManager.endActiveSession(options);
322
+ if (this.config.recordingMode === 'manual') {
323
+ this.isRecording = false;
324
+ }
325
+ }
326
+ /**
327
+ * Start recording (for manual mode)
328
+ */
329
+ startRecording() {
330
+ this.isRecording = true;
331
+ }
332
+ /**
333
+ * Stop recording (for manual mode)
334
+ */
335
+ stopRecording() {
336
+ this.isRecording = false;
337
+ }
338
+ /**
339
+ * Check if currently recording
340
+ */
341
+ get recording() {
342
+ return this.isRecording;
343
+ }
344
+ // === Connection Management ===
345
+ /**
346
+ * Register a new connection
347
+ */
348
+ registerConnection(connectionId) {
349
+ this.connections.set(connectionId, {
350
+ id: connectionId,
351
+ connectedAt: Date.now(),
352
+ lastActivityAt: Date.now(),
353
+ activeSessionId: null,
354
+ });
355
+ }
356
+ /**
357
+ * Unregister a connection
358
+ */
359
+ unregisterConnection(connectionId) {
360
+ const connection = this.connections.get(connectionId);
361
+ // End any active session for this connection
362
+ if (connection?.activeSessionId) {
363
+ try {
364
+ this.sessionManager.errorSession(connection.activeSessionId, 'Connection closed unexpectedly');
365
+ }
366
+ catch {
367
+ // Session may have already ended
368
+ }
369
+ }
370
+ this.connections.delete(connectionId);
371
+ }
372
+ /**
373
+ * Get connection state
374
+ */
375
+ getConnection(connectionId) {
376
+ return this.connections.get(connectionId);
377
+ }
378
+ /**
379
+ * Get all active connections
380
+ */
381
+ getConnections() {
382
+ return Array.from(this.connections.values());
383
+ }
384
+ // === Event Subscription ===
385
+ /**
386
+ * Subscribe to individual events
387
+ */
388
+ onEvent(callback) {
389
+ this.eventListeners.add(callback);
390
+ return () => {
391
+ this.eventListeners.delete(callback);
392
+ };
393
+ }
394
+ /**
395
+ * Subscribe to event batches
396
+ */
397
+ onEventBatch(callback) {
398
+ this.batchListeners.add(callback);
399
+ return () => {
400
+ this.batchListeners.delete(callback);
401
+ };
402
+ }
403
+ // === Session Access ===
404
+ /**
405
+ * Get SessionManager for direct access
406
+ */
407
+ getSessionManager() {
408
+ return this.sessionManager;
409
+ }
410
+ /**
411
+ * Get active session
412
+ */
413
+ getActiveSession() {
414
+ return this.sessionManager.getActiveSession();
415
+ }
416
+ /**
417
+ * Get session by ID
418
+ */
419
+ getSession(id) {
420
+ return this.sessionManager.getSession(id);
421
+ }
422
+ /**
423
+ * List all sessions
424
+ */
425
+ listSessions() {
426
+ return this.sessionManager.listSessions();
427
+ }
428
+ // === Statistics ===
429
+ /**
430
+ * Get service statistics
431
+ */
432
+ getStats() {
433
+ const sessionStats = this.sessionManager.getStats();
434
+ const processorStats = this.eventProcessor.getStats();
435
+ return {
436
+ isRecording: this.isRecording,
437
+ recordingMode: this.config.recordingMode,
438
+ activeConnections: this.connections.size,
439
+ sessions: {
440
+ total: sessionStats.totalSessions,
441
+ active: sessionStats.activeSessions,
442
+ totalEvents: sessionStats.totalEvents,
443
+ },
444
+ processor: {
445
+ totalComponents: processorStats.totalComponents,
446
+ componentsWithSources: processorStats.componentsWithSources,
447
+ totalSourcePatterns: processorStats.totalSourcePatterns,
448
+ },
449
+ };
450
+ }
451
+ /**
452
+ * Dispose of the service
453
+ */
454
+ dispose() {
455
+ this.stopBatchProcessing();
456
+ this.sessionManager.dispose();
457
+ this.eventListeners.clear();
458
+ this.batchListeners.clear();
459
+ this.connections.clear();
460
+ this.eventBuffer = [];
461
+ }
462
+ }
463
+ //# sourceMappingURL=EventRecorderService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventRecorderService.js","sourceRoot":"","sources":["../src/EventRecorderService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Library Loader
3
+ *
4
+ * Loads component library files (.yaml, .yml, or .json) from the .vgc/ folder.
5
+ * Component libraries contain reusable node and edge type definitions.
6
+ */
7
+ import type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
8
+ import type { LibraryLoadResult } from './types/library';
9
+ /**
10
+ * Loader for component library files
11
+ */
12
+ export declare class LibraryLoader {
13
+ private fsAdapter;
14
+ constructor(fsAdapter: FileSystemAdapter);
15
+ /**
16
+ * Load the component library from the .vgc/ folder
17
+ *
18
+ * Searches for library.yaml, library.yml, or library.json (in that order).
19
+ *
20
+ * @param baseDir - Base directory containing .vgc/ folder
21
+ * @returns Library load result
22
+ */
23
+ load(baseDir: string): LibraryLoadResult;
24
+ /**
25
+ * Load a library from a specific file path
26
+ *
27
+ * @param filePath - Full path to the library file
28
+ * @returns Library load result
29
+ */
30
+ loadFromPath(filePath: string): LibraryLoadResult;
31
+ /**
32
+ * Check if a library file exists in the .vgc/ folder
33
+ *
34
+ * @param baseDir - Base directory containing .vgc/ folder
35
+ * @returns True if a library file exists
36
+ */
37
+ hasLibrary(baseDir: string): boolean;
38
+ /**
39
+ * Get the path where the library file would be located
40
+ *
41
+ * @param baseDir - Base directory
42
+ * @param format - Preferred format ('yaml' or 'json')
43
+ * @returns Full path to the library file
44
+ */
45
+ getLibraryPath(baseDir: string, format?: 'yaml' | 'json'): string;
46
+ /**
47
+ * Parse YAML content into a library object
48
+ */
49
+ private parseYaml;
50
+ /**
51
+ * Parse JSON content into a library object
52
+ */
53
+ private parseJson;
54
+ /**
55
+ * Validate the library structure
56
+ *
57
+ * @param library - Parsed library object
58
+ * @param filePath - File path for error messages
59
+ * @returns Error message if invalid, undefined if valid
60
+ */
61
+ private validate;
62
+ }
63
+ //# sourceMappingURL=LibraryLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LibraryLoader.d.ts","sourceRoot":"","sources":["../src/LibraryLoader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAa3E;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAEhD;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IA4BxC;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IA+BjD;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAUpC;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,MAAe,GAAG,MAAM;IAKzE;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAqDjB"}