@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,188 @@
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 * as yaml from 'js-yaml';
8
+ /**
9
+ * Default library file names to search for (in order of preference)
10
+ */
11
+ const DEFAULT_LIBRARY_FILES = ['library.yaml', 'library.yml', 'library.json'];
12
+ /**
13
+ * Configuration directory name
14
+ */
15
+ const CONFIG_DIR = '.vgc';
16
+ /**
17
+ * Loader for component library files
18
+ */
19
+ export class LibraryLoader {
20
+ constructor(fsAdapter) {
21
+ this.fsAdapter = fsAdapter;
22
+ }
23
+ /**
24
+ * Load the component library from the .vgc/ folder
25
+ *
26
+ * Searches for library.yaml, library.yml, or library.json (in that order).
27
+ *
28
+ * @param baseDir - Base directory containing .vgc/ folder
29
+ * @returns Library load result
30
+ */
31
+ load(baseDir) {
32
+ const configPath = this.fsAdapter.join(baseDir, CONFIG_DIR);
33
+ // Check if .vgc directory exists
34
+ if (!this.fsAdapter.exists(configPath) || !this.fsAdapter.isDirectory(configPath)) {
35
+ return {
36
+ success: false,
37
+ error: 'Configuration directory .vgc/ not found',
38
+ path: configPath,
39
+ };
40
+ }
41
+ // Try each default library file name
42
+ for (const fileName of DEFAULT_LIBRARY_FILES) {
43
+ const fullPath = this.fsAdapter.join(configPath, fileName);
44
+ if (this.fsAdapter.exists(fullPath)) {
45
+ return this.loadFromPath(fullPath);
46
+ }
47
+ }
48
+ return {
49
+ success: false,
50
+ error: `No library file found. Expected one of: ${DEFAULT_LIBRARY_FILES.join(', ')}`,
51
+ path: configPath,
52
+ };
53
+ }
54
+ /**
55
+ * Load a library from a specific file path
56
+ *
57
+ * @param filePath - Full path to the library file
58
+ * @returns Library load result
59
+ */
60
+ loadFromPath(filePath) {
61
+ try {
62
+ const content = this.fsAdapter.readFile(filePath);
63
+ const isJson = filePath.endsWith('.json');
64
+ const library = isJson ? this.parseJson(content, filePath) : this.parseYaml(content, filePath);
65
+ const validationError = this.validate(library, filePath);
66
+ if (validationError) {
67
+ return {
68
+ success: false,
69
+ error: validationError,
70
+ path: filePath,
71
+ };
72
+ }
73
+ return {
74
+ success: true,
75
+ library,
76
+ path: filePath,
77
+ };
78
+ }
79
+ catch (error) {
80
+ const errorMessage = error instanceof Error ? error.message : String(error);
81
+ return {
82
+ success: false,
83
+ error: `Failed to load library: ${errorMessage}`,
84
+ path: filePath,
85
+ };
86
+ }
87
+ }
88
+ /**
89
+ * Check if a library file exists in the .vgc/ folder
90
+ *
91
+ * @param baseDir - Base directory containing .vgc/ folder
92
+ * @returns True if a library file exists
93
+ */
94
+ hasLibrary(baseDir) {
95
+ const configPath = this.fsAdapter.join(baseDir, CONFIG_DIR);
96
+ if (!this.fsAdapter.exists(configPath) || !this.fsAdapter.isDirectory(configPath)) {
97
+ return false;
98
+ }
99
+ return DEFAULT_LIBRARY_FILES.some((fileName) => this.fsAdapter.exists(this.fsAdapter.join(configPath, fileName)));
100
+ }
101
+ /**
102
+ * Get the path where the library file would be located
103
+ *
104
+ * @param baseDir - Base directory
105
+ * @param format - Preferred format ('yaml' or 'json')
106
+ * @returns Full path to the library file
107
+ */
108
+ getLibraryPath(baseDir, format = 'yaml') {
109
+ const fileName = format === 'json' ? 'library.json' : 'library.yaml';
110
+ return this.fsAdapter.join(baseDir, CONFIG_DIR, fileName);
111
+ }
112
+ /**
113
+ * Parse YAML content into a library object
114
+ */
115
+ parseYaml(content, filePath) {
116
+ const data = yaml.load(content);
117
+ if (!data || typeof data !== 'object') {
118
+ throw new Error(`Empty or invalid YAML in ${filePath}`);
119
+ }
120
+ return data;
121
+ }
122
+ /**
123
+ * Parse JSON content into a library object
124
+ */
125
+ parseJson(content, filePath) {
126
+ try {
127
+ const data = JSON.parse(content);
128
+ return data;
129
+ }
130
+ catch (error) {
131
+ const errorMessage = error instanceof Error ? error.message : String(error);
132
+ throw new Error(`Invalid JSON in ${filePath}: ${errorMessage}`);
133
+ }
134
+ }
135
+ /**
136
+ * Validate the library structure
137
+ *
138
+ * @param library - Parsed library object
139
+ * @param filePath - File path for error messages
140
+ * @returns Error message if invalid, undefined if valid
141
+ */
142
+ validate(library, filePath) {
143
+ if (!library.version) {
144
+ return `Missing required field 'version' in ${filePath}`;
145
+ }
146
+ if (!library.name) {
147
+ return `Missing required field 'name' in ${filePath}`;
148
+ }
149
+ if (!library.nodeComponents || typeof library.nodeComponents !== 'object') {
150
+ return `Missing or invalid 'nodeComponents' in ${filePath}`;
151
+ }
152
+ if (!library.edgeComponents || typeof library.edgeComponents !== 'object') {
153
+ return `Missing or invalid 'edgeComponents' in ${filePath}`;
154
+ }
155
+ // Validate node components
156
+ for (const [key, node] of Object.entries(library.nodeComponents)) {
157
+ if (!node.shape) {
158
+ return `Node component '${key}' is missing required field 'shape' in ${filePath}`;
159
+ }
160
+ }
161
+ // Validate edge components
162
+ for (const [key, edge] of Object.entries(library.edgeComponents)) {
163
+ if (!edge.style) {
164
+ return `Edge component '${key}' is missing required field 'style' in ${filePath}`;
165
+ }
166
+ }
167
+ // Validate connection rules if present
168
+ if (library.connectionRules) {
169
+ for (const [index, rule] of library.connectionRules.entries()) {
170
+ if (!rule.from || !rule.to || !rule.via) {
171
+ return `Connection rule at index ${index} is missing required fields (from, to, via) in ${filePath}`;
172
+ }
173
+ // Check that referenced types exist
174
+ if (!library.nodeComponents[rule.from]) {
175
+ return `Connection rule references unknown node type '${rule.from}' in ${filePath}`;
176
+ }
177
+ if (!library.nodeComponents[rule.to]) {
178
+ return `Connection rule references unknown node type '${rule.to}' in ${filePath}`;
179
+ }
180
+ if (!library.edgeComponents[rule.via]) {
181
+ return `Connection rule references unknown edge type '${rule.via}' in ${filePath}`;
182
+ }
183
+ }
184
+ }
185
+ return undefined;
186
+ }
187
+ }
188
+ //# sourceMappingURL=LibraryLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LibraryLoader.js","sourceRoot":"","sources":["../src/LibraryLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Path-Based Event Processor
3
+ *
4
+ * Converts log entries to graph events by associating logs with components
5
+ * based on source file paths.
6
+ *
7
+ * Milestone 1: Basic component activity events
8
+ * Milestone 2: Action pattern matching and edge activation
9
+ */
10
+ import type { PathBasedGraphConfiguration, PathBasedEvent, LogLevel } from './types/path-based-config';
11
+ /**
12
+ * Log entry from logger (simplified interface to avoid circular dependency)
13
+ */
14
+ export interface LogEntry {
15
+ message: string;
16
+ metadata: {
17
+ timestamp: number;
18
+ level: LogLevel;
19
+ source?: {
20
+ file: string;
21
+ line?: number;
22
+ column?: number;
23
+ };
24
+ /**
25
+ * Instance identifier for multi-instance components.
26
+ * Used to differentiate between multiple nodes of the same type
27
+ * (e.g., "client-1", "client-2" for components of type "client").
28
+ */
29
+ instanceId?: string;
30
+ };
31
+ args?: any[];
32
+ }
33
+ /**
34
+ * Path-based event processor
35
+ */
36
+ export declare class PathBasedEventProcessor {
37
+ private componentSourceMap;
38
+ private config;
39
+ constructor(config: PathBasedGraphConfiguration);
40
+ /**
41
+ * Build the component-to-source-path mapping from configuration
42
+ */
43
+ private buildComponentSourceMap;
44
+ /**
45
+ * Process a log entry and convert to graph event(s)
46
+ *
47
+ * @param log Log entry from enhanced logger
48
+ * @returns Array of graph events (can be multiple if action triggers edges)
49
+ */
50
+ processLog(log: LogEntry): PathBasedEvent[];
51
+ /**
52
+ * Find component by matching source path against configured patterns
53
+ */
54
+ private findComponentByPath;
55
+ /**
56
+ * Try to match log message against action patterns (Milestone 2)
57
+ */
58
+ private tryMatchActionPattern;
59
+ /**
60
+ * Extract metadata from regex capture groups
61
+ */
62
+ private extractMetadata;
63
+ /**
64
+ * Get edge animations triggered by a component action (Milestone 2)
65
+ */
66
+ private getEdgeAnimationsForAction;
67
+ /**
68
+ * Batch process multiple log entries
69
+ */
70
+ processLogs(logs: LogEntry[]): PathBasedEvent[];
71
+ /**
72
+ * Get statistics about component source mappings
73
+ */
74
+ getStats(): {
75
+ totalComponents: number;
76
+ componentsWithSources: number;
77
+ componentsWithActions: number;
78
+ totalSourcePatterns: number;
79
+ totalActionPatterns: number;
80
+ };
81
+ /**
82
+ * Validate configuration and return warnings/errors
83
+ */
84
+ validate(): Array<{
85
+ type: 'error' | 'warning';
86
+ message: string;
87
+ componentId?: string;
88
+ }>;
89
+ }
90
+ //# sourceMappingURL=PathBasedEventProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathBasedEventProcessor.d.ts","sourceRoot":"","sources":["../src/PathBasedEventProcessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,2BAA2B,EAI3B,cAAc,EAEd,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF;;;;WAIG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;CACd;AAWD;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,EAAE,2BAA2B;IAK/C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;;;;OAKG;IACI,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,cAAc,EAAE;IAqDlD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+BlC;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAUtD;;OAEG;IACI,QAAQ,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;KAC7B;IAUD;;OAEG;IACI,QAAQ,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA2C/F"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Path-Based Event Processor
3
+ *
4
+ * Converts log entries to graph events by associating logs with components
5
+ * based on source file paths.
6
+ *
7
+ * Milestone 1: Basic component activity events
8
+ * Milestone 2: Action pattern matching and edge activation
9
+ */
10
+ import { PathMatcher } from './utils/PathMatcher';
11
+ /**
12
+ * Path-based event processor
13
+ */
14
+ export class PathBasedEventProcessor {
15
+ constructor(config) {
16
+ this.componentSourceMap = [];
17
+ this.config = config;
18
+ this.buildComponentSourceMap();
19
+ }
20
+ /**
21
+ * Build the component-to-source-path mapping from configuration
22
+ */
23
+ buildComponentSourceMap() {
24
+ this.componentSourceMap = [];
25
+ for (const [componentId, nodeType] of Object.entries(this.config.nodeTypes)) {
26
+ if (nodeType.sources && nodeType.sources.length > 0) {
27
+ this.componentSourceMap.push({
28
+ componentId,
29
+ sources: nodeType.sources,
30
+ actions: nodeType.actions
31
+ });
32
+ }
33
+ }
34
+ }
35
+ /**
36
+ * Process a log entry and convert to graph event(s)
37
+ *
38
+ * @param log Log entry from enhanced logger
39
+ * @returns Array of graph events (can be multiple if action triggers edges)
40
+ */
41
+ processLog(log) {
42
+ const events = [];
43
+ // Skip logs without source information
44
+ if (!log.metadata.source?.file) {
45
+ return events;
46
+ }
47
+ // Find component by matching source path
48
+ const component = this.findComponentByPath(log.metadata.source.file);
49
+ if (!component) {
50
+ // Log doesn't match any configured component
51
+ return events;
52
+ }
53
+ // Milestone 2: Try to match action patterns first (if enabled)
54
+ if (this.config.pathBasedConfig?.enableActionPatterns && component.actions) {
55
+ const actionEvent = this.tryMatchActionPattern(log, component);
56
+ if (actionEvent) {
57
+ events.push(actionEvent);
58
+ // Check if this action triggers any edge animations
59
+ const edgeEvents = this.getEdgeAnimationsForAction(component.componentId, actionEvent.action);
60
+ events.push(...edgeEvents);
61
+ return events; // Action pattern matched, don't create activity event
62
+ }
63
+ }
64
+ // Milestone 1: Fallback to generic component activity event
65
+ const activityEvent = {
66
+ type: 'component-activity',
67
+ componentId: component.componentId,
68
+ instanceId: log.metadata.instanceId,
69
+ timestamp: log.metadata.timestamp,
70
+ level: log.metadata.level,
71
+ message: log.message,
72
+ source: {
73
+ file: log.metadata.source.file,
74
+ line: log.metadata.source.line,
75
+ column: log.metadata.source.column
76
+ },
77
+ args: log.args
78
+ };
79
+ events.push(activityEvent);
80
+ return events;
81
+ }
82
+ /**
83
+ * Find component by matching source path against configured patterns
84
+ */
85
+ findComponentByPath(logPath) {
86
+ for (const component of this.componentSourceMap) {
87
+ // Check if any of the component's source patterns match the log path
88
+ for (const sourcePattern of component.sources) {
89
+ if (PathMatcher.matches(logPath, sourcePattern)) {
90
+ return component;
91
+ }
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+ /**
97
+ * Try to match log message against action patterns (Milestone 2)
98
+ */
99
+ tryMatchActionPattern(log, component) {
100
+ if (!component.actions) {
101
+ return null;
102
+ }
103
+ for (const actionPattern of component.actions) {
104
+ const regex = new RegExp(actionPattern.pattern);
105
+ const match = log.message.match(regex);
106
+ if (match) {
107
+ // Extract metadata from capture groups
108
+ const metadata = this.extractMetadata(match, actionPattern.metadata || {});
109
+ return {
110
+ type: 'component-action',
111
+ componentId: component.componentId,
112
+ instanceId: log.metadata.instanceId,
113
+ action: actionPattern.event,
114
+ state: actionPattern.state,
115
+ timestamp: log.metadata.timestamp,
116
+ metadata,
117
+ source: {
118
+ file: log.metadata.source.file,
119
+ line: log.metadata.source.line,
120
+ column: log.metadata.source.column
121
+ }
122
+ };
123
+ }
124
+ }
125
+ return null;
126
+ }
127
+ /**
128
+ * Extract metadata from regex capture groups
129
+ */
130
+ extractMetadata(match, template) {
131
+ const metadata = {};
132
+ for (const [key, value] of Object.entries(template)) {
133
+ // Value is a template like "$lockId" that references a named capture group
134
+ if (value.startsWith('$') && match.groups) {
135
+ const groupName = value.slice(1);
136
+ metadata[key] = match.groups[groupName];
137
+ }
138
+ else {
139
+ // Static value
140
+ metadata[key] = value;
141
+ }
142
+ }
143
+ return metadata;
144
+ }
145
+ /**
146
+ * Get edge animations triggered by a component action (Milestone 2)
147
+ */
148
+ getEdgeAnimationsForAction(componentId, action) {
149
+ const events = [];
150
+ // Check all edges to see if they're activated by this action
151
+ for (const [edgeId, edgeType] of Object.entries(this.config.edgeTypes)) {
152
+ if (edgeType.activatedBy) {
153
+ for (const trigger of edgeType.activatedBy) {
154
+ if (trigger.action === action) {
155
+ events.push({
156
+ type: 'edge-animation',
157
+ edgeId,
158
+ animation: trigger.animation,
159
+ direction: trigger.direction,
160
+ duration: trigger.duration || 2000,
161
+ timestamp: Date.now(),
162
+ triggeredBy: {
163
+ componentId,
164
+ action
165
+ }
166
+ });
167
+ }
168
+ }
169
+ }
170
+ }
171
+ return events;
172
+ }
173
+ /**
174
+ * Batch process multiple log entries
175
+ */
176
+ processLogs(logs) {
177
+ const events = [];
178
+ for (const log of logs) {
179
+ events.push(...this.processLog(log));
180
+ }
181
+ return events;
182
+ }
183
+ /**
184
+ * Get statistics about component source mappings
185
+ */
186
+ getStats() {
187
+ return {
188
+ totalComponents: Object.keys(this.config.nodeTypes).length,
189
+ componentsWithSources: this.componentSourceMap.length,
190
+ componentsWithActions: this.componentSourceMap.filter(c => c.actions && c.actions.length > 0).length,
191
+ totalSourcePatterns: this.componentSourceMap.reduce((sum, c) => sum + c.sources.length, 0),
192
+ totalActionPatterns: this.componentSourceMap.reduce((sum, c) => sum + (c.actions?.length || 0), 0)
193
+ };
194
+ }
195
+ /**
196
+ * Validate configuration and return warnings/errors
197
+ */
198
+ validate() {
199
+ const issues = [];
200
+ // Check for overlapping source patterns
201
+ for (let i = 0; i < this.componentSourceMap.length; i++) {
202
+ for (let j = i + 1; j < this.componentSourceMap.length; j++) {
203
+ const comp1 = this.componentSourceMap[i];
204
+ const comp2 = this.componentSourceMap[j];
205
+ // Check if any patterns overlap
206
+ for (const pattern1 of comp1.sources) {
207
+ for (const pattern2 of comp2.sources) {
208
+ if (pattern1 === pattern2) {
209
+ issues.push({
210
+ type: 'warning',
211
+ message: `Components "${comp1.componentId}" and "${comp2.componentId}" both use pattern "${pattern1}". Logs will be associated with the first match.`,
212
+ componentId: comp1.componentId
213
+ });
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ // Validate action patterns (check for valid regex)
220
+ for (const component of this.componentSourceMap) {
221
+ if (component.actions) {
222
+ for (const action of component.actions) {
223
+ try {
224
+ new RegExp(action.pattern);
225
+ }
226
+ catch (error) {
227
+ issues.push({
228
+ type: 'error',
229
+ message: `Invalid regex pattern in action "${action.event}": ${action.pattern}`,
230
+ componentId: component.componentId
231
+ });
232
+ }
233
+ }
234
+ }
235
+ }
236
+ return issues;
237
+ }
238
+ }
239
+ //# sourceMappingURL=PathBasedEventProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathBasedEventProcessor.js","sourceRoot":"","sources":["../src/PathBasedEventProcessor.ts"],"names":[],"mappings":"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"}