@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,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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"}
|