@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.
- package/README.md +126 -0
- package/dist/ConfigurationLoader.d.ts +76 -0
- package/dist/ConfigurationLoader.d.ts.map +1 -0
- package/dist/ConfigurationLoader.js +144 -0
- package/dist/ConfigurationLoader.js.map +1 -0
- package/dist/ConfigurationValidator.d.ts +31 -0
- package/dist/ConfigurationValidator.d.ts.map +1 -0
- package/dist/ConfigurationValidator.js +242 -0
- package/dist/ConfigurationValidator.js.map +1 -0
- package/dist/EventProcessor.d.ts +49 -0
- package/dist/EventProcessor.d.ts.map +1 -0
- package/dist/EventProcessor.js +215 -0
- package/dist/EventProcessor.js.map +1 -0
- package/dist/EventRecorderService.d.ts +305 -0
- package/dist/EventRecorderService.d.ts.map +1 -0
- package/dist/EventRecorderService.js +463 -0
- package/dist/EventRecorderService.js.map +1 -0
- package/dist/LibraryLoader.d.ts +63 -0
- package/dist/LibraryLoader.d.ts.map +1 -0
- package/dist/LibraryLoader.js +188 -0
- package/dist/LibraryLoader.js.map +1 -0
- package/dist/PathBasedEventProcessor.d.ts +90 -0
- package/dist/PathBasedEventProcessor.d.ts.map +1 -0
- package/dist/PathBasedEventProcessor.js +239 -0
- package/dist/PathBasedEventProcessor.js.map +1 -0
- package/dist/SessionManager.d.ts +194 -0
- package/dist/SessionManager.d.ts.map +1 -0
- package/dist/SessionManager.js +299 -0
- package/dist/SessionManager.js.map +1 -0
- package/dist/ValidationEngine.d.ts +31 -0
- package/dist/ValidationEngine.d.ts.map +1 -0
- package/dist/ValidationEngine.js +158 -0
- package/dist/ValidationEngine.js.map +1 -0
- package/dist/helpers/GraphInstrumentationHelper.d.ts +93 -0
- package/dist/helpers/GraphInstrumentationHelper.d.ts.map +1 -0
- package/dist/helpers/GraphInstrumentationHelper.js +248 -0
- package/dist/helpers/GraphInstrumentationHelper.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/config.d.ts +57 -0
- package/dist/rules/config.d.ts.map +1 -0
- package/dist/rules/config.js +382 -0
- package/dist/rules/config.js.map +1 -0
- package/dist/rules/engine.d.ts +70 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +252 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/implementations/connection-type-references.d.ts +7 -0
- package/dist/rules/implementations/connection-type-references.d.ts.map +1 -0
- package/dist/rules/implementations/connection-type-references.js +104 -0
- package/dist/rules/implementations/connection-type-references.js.map +1 -0
- package/dist/rules/implementations/dead-end-states.d.ts +17 -0
- package/dist/rules/implementations/dead-end-states.d.ts.map +1 -0
- package/dist/rules/implementations/dead-end-states.js +72 -0
- package/dist/rules/implementations/dead-end-states.js.map +1 -0
- package/dist/rules/implementations/index.d.ts +24 -0
- package/dist/rules/implementations/index.d.ts.map +1 -0
- package/dist/rules/implementations/index.js +62 -0
- package/dist/rules/implementations/index.js.map +1 -0
- package/dist/rules/implementations/library-node-type-match.d.ts +17 -0
- package/dist/rules/implementations/library-node-type-match.d.ts.map +1 -0
- package/dist/rules/implementations/library-node-type-match.js +123 -0
- package/dist/rules/implementations/library-node-type-match.js.map +1 -0
- package/dist/rules/implementations/minimum-node-sources.d.ts +22 -0
- package/dist/rules/implementations/minimum-node-sources.d.ts.map +1 -0
- package/dist/rules/implementations/minimum-node-sources.js +54 -0
- package/dist/rules/implementations/minimum-node-sources.js.map +1 -0
- package/dist/rules/implementations/no-unknown-fields.d.ts +7 -0
- package/dist/rules/implementations/no-unknown-fields.d.ts.map +1 -0
- package/dist/rules/implementations/no-unknown-fields.js +211 -0
- package/dist/rules/implementations/no-unknown-fields.js.map +1 -0
- package/dist/rules/implementations/orphaned-edge-types.d.ts +7 -0
- package/dist/rules/implementations/orphaned-edge-types.d.ts.map +1 -0
- package/dist/rules/implementations/orphaned-edge-types.js +47 -0
- package/dist/rules/implementations/orphaned-edge-types.js.map +1 -0
- package/dist/rules/implementations/orphaned-node-types.d.ts +7 -0
- package/dist/rules/implementations/orphaned-node-types.d.ts.map +1 -0
- package/dist/rules/implementations/orphaned-node-types.js +50 -0
- package/dist/rules/implementations/orphaned-node-types.js.map +1 -0
- package/dist/rules/implementations/required-metadata.d.ts +7 -0
- package/dist/rules/implementations/required-metadata.d.ts.map +1 -0
- package/dist/rules/implementations/required-metadata.js +57 -0
- package/dist/rules/implementations/required-metadata.js.map +1 -0
- package/dist/rules/implementations/state-transition-references.d.ts +7 -0
- package/dist/rules/implementations/state-transition-references.d.ts.map +1 -0
- package/dist/rules/implementations/state-transition-references.js +135 -0
- package/dist/rules/implementations/state-transition-references.js.map +1 -0
- package/dist/rules/implementations/unreachable-states.d.ts +7 -0
- package/dist/rules/implementations/unreachable-states.d.ts.map +1 -0
- package/dist/rules/implementations/unreachable-states.js +80 -0
- package/dist/rules/implementations/unreachable-states.js.map +1 -0
- package/dist/rules/implementations/valid-action-patterns.d.ts +17 -0
- package/dist/rules/implementations/valid-action-patterns.d.ts.map +1 -0
- package/dist/rules/implementations/valid-action-patterns.js +109 -0
- package/dist/rules/implementations/valid-action-patterns.js.map +1 -0
- package/dist/rules/implementations/valid-color-format.d.ts +7 -0
- package/dist/rules/implementations/valid-color-format.d.ts.map +1 -0
- package/dist/rules/implementations/valid-color-format.js +91 -0
- package/dist/rules/implementations/valid-color-format.js.map +1 -0
- package/dist/rules/implementations/valid-edge-types.d.ts +7 -0
- package/dist/rules/implementations/valid-edge-types.d.ts.map +1 -0
- package/dist/rules/implementations/valid-edge-types.js +244 -0
- package/dist/rules/implementations/valid-edge-types.js.map +1 -0
- package/dist/rules/implementations/valid-node-types.d.ts +7 -0
- package/dist/rules/implementations/valid-node-types.d.ts.map +1 -0
- package/dist/rules/implementations/valid-node-types.js +175 -0
- package/dist/rules/implementations/valid-node-types.js.map +1 -0
- package/dist/rules/index.d.ts +28 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +45 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/types.d.ts +309 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +35 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/types/canvas.d.ts +409 -0
- package/dist/types/canvas.d.ts.map +1 -0
- package/dist/types/canvas.js +70 -0
- package/dist/types/canvas.js.map +1 -0
- package/dist/types/index.d.ts +311 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/library.d.ts +185 -0
- package/dist/types/library.d.ts.map +1 -0
- package/dist/types/library.js +15 -0
- package/dist/types/library.js.map +1 -0
- package/dist/types/path-based-config.d.ts +230 -0
- package/dist/types/path-based-config.d.ts.map +1 -0
- package/dist/types/path-based-config.js +9 -0
- package/dist/types/path-based-config.js.map +1 -0
- package/dist/utils/CanvasConverter.d.ts +118 -0
- package/dist/utils/CanvasConverter.d.ts.map +1 -0
- package/dist/utils/CanvasConverter.js +315 -0
- package/dist/utils/CanvasConverter.js.map +1 -0
- package/dist/utils/GraphConverter.d.ts +18 -0
- package/dist/utils/GraphConverter.d.ts.map +1 -0
- package/dist/utils/GraphConverter.js +61 -0
- package/dist/utils/GraphConverter.js.map +1 -0
- package/dist/utils/LibraryConverter.d.ts +113 -0
- package/dist/utils/LibraryConverter.d.ts.map +1 -0
- package/dist/utils/LibraryConverter.js +166 -0
- package/dist/utils/LibraryConverter.js.map +1 -0
- package/dist/utils/PathMatcher.d.ts +55 -0
- package/dist/utils/PathMatcher.d.ts.map +1 -0
- package/dist/utils/PathMatcher.js +172 -0
- package/dist/utils/PathMatcher.js.map +1 -0
- package/dist/utils/YamlParser.d.ts +36 -0
- package/dist/utils/YamlParser.d.ts.map +1 -0
- package/dist/utils/YamlParser.js +63 -0
- package/dist/utils/YamlParser.js.map +1 -0
- package/package.json +47 -0
- package/src/ConfigurationLoader.test.ts +490 -0
- package/src/ConfigurationLoader.ts +185 -0
- package/src/ConfigurationValidator.test.ts +200 -0
- package/src/ConfigurationValidator.ts +283 -0
- package/src/EventProcessor.test.ts +405 -0
- package/src/EventProcessor.ts +250 -0
- package/src/EventRecorderService.test.ts +541 -0
- package/src/EventRecorderService.ts +744 -0
- package/src/LibraryLoader.ts +215 -0
- package/src/PathBasedEventProcessor.test.ts +567 -0
- package/src/PathBasedEventProcessor.ts +332 -0
- package/src/SessionManager.test.ts +424 -0
- package/src/SessionManager.ts +470 -0
- package/src/ValidationEngine.test.ts +371 -0
- package/src/ValidationEngine.ts +196 -0
- package/src/helpers/GraphInstrumentationHelper.test.ts +340 -0
- package/src/helpers/GraphInstrumentationHelper.ts +326 -0
- package/src/index.ts +85 -0
- package/src/rules/config.test.ts +278 -0
- package/src/rules/config.ts +459 -0
- package/src/rules/engine.test.ts +332 -0
- package/src/rules/engine.ts +318 -0
- package/src/rules/implementations/connection-type-references.ts +117 -0
- package/src/rules/implementations/dead-end-states.ts +101 -0
- package/src/rules/implementations/index.ts +73 -0
- package/src/rules/implementations/library-node-type-match.ts +148 -0
- package/src/rules/implementations/minimum-node-sources.ts +82 -0
- package/src/rules/implementations/no-unknown-fields.ts +342 -0
- package/src/rules/implementations/orphaned-edge-types.ts +55 -0
- package/src/rules/implementations/orphaned-node-types.ts +58 -0
- package/src/rules/implementations/required-metadata.ts +64 -0
- package/src/rules/implementations/state-transition-references.ts +151 -0
- package/src/rules/implementations/unreachable-states.ts +94 -0
- package/src/rules/implementations/valid-action-patterns.ts +136 -0
- package/src/rules/implementations/valid-color-format.ts +140 -0
- package/src/rules/implementations/valid-edge-types.ts +258 -0
- package/src/rules/implementations/valid-node-types.ts +189 -0
- package/src/rules/index.ts +95 -0
- package/src/rules/types.ts +426 -0
- package/src/types/canvas.ts +496 -0
- package/src/types/index.ts +382 -0
- package/src/types/library.ts +233 -0
- package/src/types/path-based-config.ts +281 -0
- package/src/utils/CanvasConverter.ts +431 -0
- package/src/utils/GraphConverter.test.ts +195 -0
- package/src/utils/GraphConverter.ts +71 -0
- package/src/utils/LibraryConverter.ts +245 -0
- package/src/utils/PathMatcher.test.ts +148 -0
- package/src/utils/PathMatcher.ts +183 -0
- 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"}
|