@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,194 @@
1
+ /**
2
+ * SessionManager - Manages event recording sessions
3
+ *
4
+ * Sessions group events by test case or recording context.
5
+ * Each session contains a sequence of GraphEvents that can be
6
+ * replayed through the EventControllerPanel.
7
+ */
8
+ import type { GraphEvent } from './types';
9
+ /**
10
+ * Session status
11
+ */
12
+ export type SessionStatus = 'recording' | 'completed' | 'error';
13
+ /**
14
+ * Session result when completed
15
+ */
16
+ export type SessionResult = 'pass' | 'fail' | 'skip';
17
+ /**
18
+ * Metadata associated with a session
19
+ */
20
+ export interface SessionMetadata {
21
+ /** Test file path */
22
+ testFile?: string;
23
+ /** Test case name */
24
+ testName?: string;
25
+ /** Test suite name */
26
+ testSuite?: string;
27
+ /** Custom tags for filtering */
28
+ tags?: string[];
29
+ /** Test result (set when session completes) */
30
+ result?: SessionResult;
31
+ /** Error message if test failed */
32
+ error?: string;
33
+ /** Duration in milliseconds */
34
+ duration?: number;
35
+ }
36
+ /**
37
+ * An event recording session
38
+ */
39
+ export interface EventSession {
40
+ /** Unique session identifier */
41
+ id: string;
42
+ /** Human-readable name (e.g., test name) */
43
+ name: string;
44
+ /** When recording started */
45
+ startedAt: number;
46
+ /** When recording ended (undefined if still recording) */
47
+ endedAt?: number;
48
+ /** Status of the session */
49
+ status: SessionStatus;
50
+ /** Recorded events */
51
+ events: GraphEvent[];
52
+ /** Session metadata */
53
+ metadata: SessionMetadata;
54
+ }
55
+ /**
56
+ * Options for creating a session
57
+ */
58
+ export interface CreateSessionOptions {
59
+ /** Session name */
60
+ name: string;
61
+ /** Optional metadata */
62
+ metadata?: SessionMetadata;
63
+ /** Optional custom ID (auto-generated if not provided) */
64
+ id?: string;
65
+ }
66
+ /**
67
+ * Options for ending a session
68
+ */
69
+ export interface EndSessionOptions {
70
+ /** Test result */
71
+ result?: SessionResult;
72
+ /** Error message if failed */
73
+ error?: string;
74
+ }
75
+ /**
76
+ * Session change callback
77
+ */
78
+ export type SessionChangeCallback = (sessions: EventSession[]) => void;
79
+ /**
80
+ * SessionManager configuration
81
+ */
82
+ export interface SessionManagerConfig {
83
+ /** Maximum events per session (default: 10000) */
84
+ maxEventsPerSession?: number;
85
+ /** Maximum number of sessions to keep (default: 100) */
86
+ maxSessions?: number;
87
+ /** Auto-cleanup sessions older than this (ms, default: 3600000 = 1 hour) */
88
+ sessionRetention?: number;
89
+ /** Whether to auto-cleanup old sessions (default: true) */
90
+ autoCleanup?: boolean;
91
+ }
92
+ /**
93
+ * Manages event recording sessions
94
+ */
95
+ export declare class SessionManager {
96
+ private sessions;
97
+ private activeSessionId;
98
+ private listeners;
99
+ private config;
100
+ private cleanupInterval;
101
+ constructor(config?: SessionManagerConfig);
102
+ /**
103
+ * Generate a unique session ID
104
+ */
105
+ private generateId;
106
+ /**
107
+ * Notify all listeners of session changes
108
+ */
109
+ private notifyListeners;
110
+ /**
111
+ * Start auto-cleanup interval
112
+ */
113
+ private startAutoCleanup;
114
+ /**
115
+ * Stop auto-cleanup interval
116
+ */
117
+ private stopAutoCleanup;
118
+ /**
119
+ * Clean up sessions older than retention period
120
+ */
121
+ private cleanupOldSessions;
122
+ /**
123
+ * Create a new session
124
+ */
125
+ createSession(options: CreateSessionOptions): EventSession;
126
+ /**
127
+ * Get session by ID
128
+ */
129
+ getSession(id: string): EventSession | undefined;
130
+ /**
131
+ * Get the currently active (recording) session
132
+ */
133
+ getActiveSession(): EventSession | undefined;
134
+ /**
135
+ * List all sessions, sorted by start time (newest first)
136
+ */
137
+ listSessions(): EventSession[];
138
+ /**
139
+ * Add an event to a session
140
+ */
141
+ addEvent(sessionId: string, event: GraphEvent): void;
142
+ /**
143
+ * Add an event to the active session (convenience method)
144
+ */
145
+ addEventToActive(event: GraphEvent): void;
146
+ /**
147
+ * End a session
148
+ */
149
+ endSession(sessionId: string, options?: EndSessionOptions): void;
150
+ /**
151
+ * End the active session (convenience method)
152
+ */
153
+ endActiveSession(options?: EndSessionOptions): void;
154
+ /**
155
+ * Mark a session as errored
156
+ */
157
+ errorSession(sessionId: string, error: string): void;
158
+ /**
159
+ * Delete a session
160
+ */
161
+ deleteSession(id: string): boolean;
162
+ /**
163
+ * Clear all sessions
164
+ */
165
+ clearSessions(): void;
166
+ /**
167
+ * Export a session to JSON string
168
+ */
169
+ exportSession(id: string): string;
170
+ /**
171
+ * Import a session from JSON string
172
+ */
173
+ importSession(json: string): EventSession;
174
+ /**
175
+ * Subscribe to session changes
176
+ * Returns unsubscribe function
177
+ */
178
+ onSessionChange(callback: SessionChangeCallback): () => void;
179
+ /**
180
+ * Get session statistics
181
+ */
182
+ getStats(): {
183
+ totalSessions: number;
184
+ activeSessions: number;
185
+ totalEvents: number;
186
+ oldestSession: number | null;
187
+ newestSession: number | null;
188
+ };
189
+ /**
190
+ * Dispose of the session manager
191
+ */
192
+ dispose(): void;
193
+ }
194
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * SessionManager - Manages event recording sessions
3
+ *
4
+ * Sessions group events by test case or recording context.
5
+ * Each session contains a sequence of GraphEvents that can be
6
+ * replayed through the EventControllerPanel.
7
+ */
8
+ /**
9
+ * Manages event recording sessions
10
+ */
11
+ export class SessionManager {
12
+ constructor(config = {}) {
13
+ this.sessions = new Map();
14
+ this.activeSessionId = null;
15
+ this.listeners = new Set();
16
+ this.cleanupInterval = null;
17
+ this.config = {
18
+ maxEventsPerSession: config.maxEventsPerSession ?? 10000,
19
+ maxSessions: config.maxSessions ?? 100,
20
+ sessionRetention: config.sessionRetention ?? 3600000, // 1 hour
21
+ autoCleanup: config.autoCleanup ?? true,
22
+ };
23
+ // Start auto-cleanup if enabled
24
+ if (this.config.autoCleanup) {
25
+ this.startAutoCleanup();
26
+ }
27
+ }
28
+ /**
29
+ * Generate a unique session ID
30
+ */
31
+ generateId() {
32
+ return `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
33
+ }
34
+ /**
35
+ * Notify all listeners of session changes
36
+ */
37
+ notifyListeners() {
38
+ const sessions = this.listSessions();
39
+ for (const listener of this.listeners) {
40
+ try {
41
+ listener(sessions);
42
+ }
43
+ catch (error) {
44
+ console.error('Session listener error:', error);
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Start auto-cleanup interval
50
+ */
51
+ startAutoCleanup() {
52
+ // Clean up every minute
53
+ this.cleanupInterval = setInterval(() => {
54
+ this.cleanupOldSessions();
55
+ }, 60000);
56
+ }
57
+ /**
58
+ * Stop auto-cleanup interval
59
+ */
60
+ stopAutoCleanup() {
61
+ if (this.cleanupInterval) {
62
+ clearInterval(this.cleanupInterval);
63
+ this.cleanupInterval = null;
64
+ }
65
+ }
66
+ /**
67
+ * Clean up sessions older than retention period
68
+ */
69
+ cleanupOldSessions() {
70
+ const now = Date.now();
71
+ const cutoff = now - this.config.sessionRetention;
72
+ for (const [id, session] of this.sessions) {
73
+ // Don't cleanup active session
74
+ if (id === this.activeSessionId)
75
+ continue;
76
+ // Cleanup completed/error sessions past retention
77
+ if (session.status !== 'recording' && session.startedAt < cutoff) {
78
+ this.sessions.delete(id);
79
+ }
80
+ }
81
+ // Enforce max sessions limit
82
+ if (this.sessions.size > this.config.maxSessions) {
83
+ const sortedSessions = Array.from(this.sessions.entries())
84
+ .filter(([id]) => id !== this.activeSessionId)
85
+ .sort((a, b) => a[1].startedAt - b[1].startedAt);
86
+ const toDelete = sortedSessions.slice(0, this.sessions.size - this.config.maxSessions);
87
+ for (const [id] of toDelete) {
88
+ this.sessions.delete(id);
89
+ }
90
+ }
91
+ this.notifyListeners();
92
+ }
93
+ /**
94
+ * Create a new session
95
+ */
96
+ createSession(options) {
97
+ const id = options.id || this.generateId();
98
+ // Check if session already exists
99
+ if (this.sessions.has(id)) {
100
+ throw new Error(`Session with ID "${id}" already exists`);
101
+ }
102
+ const session = {
103
+ id,
104
+ name: options.name,
105
+ startedAt: Date.now(),
106
+ status: 'recording',
107
+ events: [],
108
+ metadata: options.metadata || {},
109
+ };
110
+ this.sessions.set(id, session);
111
+ this.activeSessionId = id;
112
+ this.notifyListeners();
113
+ return session;
114
+ }
115
+ /**
116
+ * Get session by ID
117
+ */
118
+ getSession(id) {
119
+ return this.sessions.get(id);
120
+ }
121
+ /**
122
+ * Get the currently active (recording) session
123
+ */
124
+ getActiveSession() {
125
+ if (!this.activeSessionId)
126
+ return undefined;
127
+ return this.sessions.get(this.activeSessionId);
128
+ }
129
+ /**
130
+ * List all sessions, sorted by start time (newest first)
131
+ */
132
+ listSessions() {
133
+ return Array.from(this.sessions.values())
134
+ .sort((a, b) => b.startedAt - a.startedAt);
135
+ }
136
+ /**
137
+ * Add an event to a session
138
+ */
139
+ addEvent(sessionId, event) {
140
+ const session = this.sessions.get(sessionId);
141
+ if (!session) {
142
+ throw new Error(`Session "${sessionId}" not found`);
143
+ }
144
+ if (session.status !== 'recording') {
145
+ throw new Error(`Session "${sessionId}" is not recording (status: ${session.status})`);
146
+ }
147
+ // Check max events limit
148
+ if (session.events.length >= this.config.maxEventsPerSession) {
149
+ console.warn(`Session "${sessionId}" reached max events limit (${this.config.maxEventsPerSession})`);
150
+ return;
151
+ }
152
+ session.events.push(event);
153
+ this.notifyListeners();
154
+ }
155
+ /**
156
+ * Add an event to the active session (convenience method)
157
+ */
158
+ addEventToActive(event) {
159
+ if (!this.activeSessionId) {
160
+ throw new Error('No active session');
161
+ }
162
+ this.addEvent(this.activeSessionId, event);
163
+ }
164
+ /**
165
+ * End a session
166
+ */
167
+ endSession(sessionId, options = {}) {
168
+ const session = this.sessions.get(sessionId);
169
+ if (!session) {
170
+ throw new Error(`Session "${sessionId}" not found`);
171
+ }
172
+ if (session.status !== 'recording') {
173
+ throw new Error(`Session "${sessionId}" is not recording (status: ${session.status})`);
174
+ }
175
+ session.endedAt = Date.now();
176
+ session.status = 'completed';
177
+ session.metadata.result = options.result;
178
+ session.metadata.error = options.error;
179
+ session.metadata.duration = session.endedAt - session.startedAt;
180
+ // Clear active session if this was it
181
+ if (this.activeSessionId === sessionId) {
182
+ this.activeSessionId = null;
183
+ }
184
+ this.notifyListeners();
185
+ }
186
+ /**
187
+ * End the active session (convenience method)
188
+ */
189
+ endActiveSession(options = {}) {
190
+ if (!this.activeSessionId) {
191
+ throw new Error('No active session');
192
+ }
193
+ this.endSession(this.activeSessionId, options);
194
+ }
195
+ /**
196
+ * Mark a session as errored
197
+ */
198
+ errorSession(sessionId, error) {
199
+ const session = this.sessions.get(sessionId);
200
+ if (!session) {
201
+ throw new Error(`Session "${sessionId}" not found`);
202
+ }
203
+ session.endedAt = Date.now();
204
+ session.status = 'error';
205
+ session.metadata.error = error;
206
+ session.metadata.duration = session.endedAt - session.startedAt;
207
+ if (this.activeSessionId === sessionId) {
208
+ this.activeSessionId = null;
209
+ }
210
+ this.notifyListeners();
211
+ }
212
+ /**
213
+ * Delete a session
214
+ */
215
+ deleteSession(id) {
216
+ if (this.activeSessionId === id) {
217
+ this.activeSessionId = null;
218
+ }
219
+ const deleted = this.sessions.delete(id);
220
+ if (deleted) {
221
+ this.notifyListeners();
222
+ }
223
+ return deleted;
224
+ }
225
+ /**
226
+ * Clear all sessions
227
+ */
228
+ clearSessions() {
229
+ this.sessions.clear();
230
+ this.activeSessionId = null;
231
+ this.notifyListeners();
232
+ }
233
+ /**
234
+ * Export a session to JSON string
235
+ */
236
+ exportSession(id) {
237
+ const session = this.sessions.get(id);
238
+ if (!session) {
239
+ throw new Error(`Session "${id}" not found`);
240
+ }
241
+ return JSON.stringify(session, null, 2);
242
+ }
243
+ /**
244
+ * Import a session from JSON string
245
+ */
246
+ importSession(json) {
247
+ const session = JSON.parse(json);
248
+ // Validate required fields
249
+ if (!session.id || !session.name || !session.events) {
250
+ throw new Error('Invalid session format: missing required fields');
251
+ }
252
+ // Generate new ID if session with same ID exists
253
+ if (this.sessions.has(session.id)) {
254
+ session.id = this.generateId();
255
+ }
256
+ // Mark as completed (imported sessions can't be recorded to)
257
+ session.status = 'completed';
258
+ this.sessions.set(session.id, session);
259
+ this.notifyListeners();
260
+ return session;
261
+ }
262
+ /**
263
+ * Subscribe to session changes
264
+ * Returns unsubscribe function
265
+ */
266
+ onSessionChange(callback) {
267
+ this.listeners.add(callback);
268
+ // Immediately call with current sessions
269
+ callback(this.listSessions());
270
+ return () => {
271
+ this.listeners.delete(callback);
272
+ };
273
+ }
274
+ /**
275
+ * Get session statistics
276
+ */
277
+ getStats() {
278
+ const sessions = this.listSessions();
279
+ const activeSessions = sessions.filter(s => s.status === 'recording').length;
280
+ const totalEvents = sessions.reduce((sum, s) => sum + s.events.length, 0);
281
+ return {
282
+ totalSessions: sessions.length,
283
+ activeSessions,
284
+ totalEvents,
285
+ oldestSession: sessions.length > 0 ? sessions[sessions.length - 1].startedAt : null,
286
+ newestSession: sessions.length > 0 ? sessions[0].startedAt : null,
287
+ };
288
+ }
289
+ /**
290
+ * Dispose of the session manager
291
+ */
292
+ dispose() {
293
+ this.stopAutoCleanup();
294
+ this.listeners.clear();
295
+ this.sessions.clear();
296
+ this.activeSessionId = null;
297
+ }
298
+ }
299
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { GraphEvent, GraphState, ValidationResult, ValidationRules, Violation } from './types';
2
+ /**
3
+ * ValidationEngine checks events against defined rules
4
+ */
5
+ export declare class ValidationEngine {
6
+ private rules;
7
+ private violationCount;
8
+ private warningCount;
9
+ constructor(rules: ValidationRules);
10
+ /**
11
+ * Validate an event against all rules
12
+ */
13
+ validate(event: GraphEvent, state: GraphState): ValidationResult;
14
+ /**
15
+ * Check constraints across the entire graph state
16
+ */
17
+ checkConstraints(state: GraphState): Violation[];
18
+ /**
19
+ * Validate connection rules
20
+ */
21
+ private validateConnection;
22
+ /**
23
+ * Validate state transitions
24
+ */
25
+ private validateStateTransition;
26
+ /**
27
+ * Create violation for unexpected event
28
+ */
29
+ private createUnexpectedEventViolation;
30
+ }
31
+ //# sourceMappingURL=ValidationEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationEngine.d.ts","sourceRoot":"","sources":["../src/ValidationEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EAEV,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAK;gBAEb,KAAK,EAAE,eAAe;IAIlC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB;IAsChE;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE;IA+BhD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;IACH,OAAO,CAAC,8BAA8B;CASvC"}