@theihtisham/agent-shadow-brain 2.1.0 → 4.0.0

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 (116) hide show
  1. package/README.md +443 -602
  2. package/dist/brain/accessibility-checker.d.ts +10 -0
  3. package/dist/brain/accessibility-checker.d.ts.map +1 -0
  4. package/dist/brain/accessibility-checker.js +379 -0
  5. package/dist/brain/accessibility-checker.js.map +1 -0
  6. package/dist/brain/adversarial-defense.d.ts +57 -0
  7. package/dist/brain/adversarial-defense.d.ts.map +1 -0
  8. package/dist/brain/adversarial-defense.js +303 -0
  9. package/dist/brain/adversarial-defense.js.map +1 -0
  10. package/dist/brain/api-contract-analyzer.d.ts +19 -0
  11. package/dist/brain/api-contract-analyzer.d.ts.map +1 -0
  12. package/dist/brain/api-contract-analyzer.js +251 -0
  13. package/dist/brain/api-contract-analyzer.js.map +1 -0
  14. package/dist/brain/ast-analyzer.d.ts +23 -0
  15. package/dist/brain/ast-analyzer.d.ts.map +1 -0
  16. package/dist/brain/ast-analyzer.js +462 -0
  17. package/dist/brain/ast-analyzer.js.map +1 -0
  18. package/dist/brain/code-age-analyzer.d.ts +11 -0
  19. package/dist/brain/code-age-analyzer.d.ts.map +1 -0
  20. package/dist/brain/code-age-analyzer.js +152 -0
  21. package/dist/brain/code-age-analyzer.js.map +1 -0
  22. package/dist/brain/cognitive-load.d.ts +27 -0
  23. package/dist/brain/cognitive-load.d.ts.map +1 -0
  24. package/dist/brain/cognitive-load.js +304 -0
  25. package/dist/brain/cognitive-load.js.map +1 -0
  26. package/dist/brain/config-drift-detector.d.ts +13 -0
  27. package/dist/brain/config-drift-detector.d.ts.map +1 -0
  28. package/dist/brain/config-drift-detector.js +198 -0
  29. package/dist/brain/config-drift-detector.js.map +1 -0
  30. package/dist/brain/cross-agent-protocol.d.ts +48 -0
  31. package/dist/brain/cross-agent-protocol.d.ts.map +1 -0
  32. package/dist/brain/cross-agent-protocol.js +306 -0
  33. package/dist/brain/cross-agent-protocol.js.map +1 -0
  34. package/dist/brain/dead-code-eliminator.d.ts +16 -0
  35. package/dist/brain/dead-code-eliminator.d.ts.map +1 -0
  36. package/dist/brain/dead-code-eliminator.js +359 -0
  37. package/dist/brain/dead-code-eliminator.js.map +1 -0
  38. package/dist/brain/env-analyzer.d.ts +13 -0
  39. package/dist/brain/env-analyzer.d.ts.map +1 -0
  40. package/dist/brain/env-analyzer.js +277 -0
  41. package/dist/brain/env-analyzer.js.map +1 -0
  42. package/dist/brain/i18n-detector.d.ts +12 -0
  43. package/dist/brain/i18n-detector.d.ts.map +1 -0
  44. package/dist/brain/i18n-detector.js +242 -0
  45. package/dist/brain/i18n-detector.js.map +1 -0
  46. package/dist/brain/influence-map.d.ts +31 -0
  47. package/dist/brain/influence-map.d.ts.map +1 -0
  48. package/dist/brain/influence-map.js +375 -0
  49. package/dist/brain/influence-map.js.map +1 -0
  50. package/dist/brain/knowledge-graph.d.ts +56 -0
  51. package/dist/brain/knowledge-graph.d.ts.map +1 -0
  52. package/dist/brain/knowledge-graph.js +427 -0
  53. package/dist/brain/knowledge-graph.js.map +1 -0
  54. package/dist/brain/learning-engine.d.ts +11 -0
  55. package/dist/brain/learning-engine.d.ts.map +1 -1
  56. package/dist/brain/learning-engine.js +44 -1
  57. package/dist/brain/learning-engine.js.map +1 -1
  58. package/dist/brain/license-compliance.d.ts +13 -0
  59. package/dist/brain/license-compliance.d.ts.map +1 -0
  60. package/dist/brain/license-compliance.js +213 -0
  61. package/dist/brain/license-compliance.js.map +1 -0
  62. package/dist/brain/llm-client.d.ts.map +1 -1
  63. package/dist/brain/llm-client.js +3 -0
  64. package/dist/brain/llm-client.js.map +1 -1
  65. package/dist/brain/mutation-advisor.d.ts +11 -0
  66. package/dist/brain/mutation-advisor.d.ts.map +1 -0
  67. package/dist/brain/mutation-advisor.js +154 -0
  68. package/dist/brain/mutation-advisor.js.map +1 -0
  69. package/dist/brain/neural-mesh.d.ts +9 -1
  70. package/dist/brain/neural-mesh.d.ts.map +1 -1
  71. package/dist/brain/neural-mesh.js +75 -16
  72. package/dist/brain/neural-mesh.js.map +1 -1
  73. package/dist/brain/orchestrator.d.ts +71 -2
  74. package/dist/brain/orchestrator.d.ts.map +1 -1
  75. package/dist/brain/orchestrator.js +383 -3
  76. package/dist/brain/orchestrator.js.map +1 -1
  77. package/dist/brain/pattern-memory.d.ts +8 -3
  78. package/dist/brain/pattern-memory.d.ts.map +1 -1
  79. package/dist/brain/pattern-memory.js +71 -3
  80. package/dist/brain/pattern-memory.js.map +1 -1
  81. package/dist/brain/predictive-engine.d.ts +45 -0
  82. package/dist/brain/predictive-engine.d.ts.map +1 -0
  83. package/dist/brain/predictive-engine.js +238 -0
  84. package/dist/brain/predictive-engine.js.map +1 -0
  85. package/dist/brain/security-audit.d.ts +20 -0
  86. package/dist/brain/security-audit.d.ts.map +1 -0
  87. package/dist/brain/security-audit.js +340 -0
  88. package/dist/brain/security-audit.js.map +1 -0
  89. package/dist/brain/self-evolution.d.ts +53 -0
  90. package/dist/brain/self-evolution.d.ts.map +1 -0
  91. package/dist/brain/self-evolution.js +278 -0
  92. package/dist/brain/self-evolution.js.map +1 -0
  93. package/dist/brain/sssp-router.d.ts +58 -0
  94. package/dist/brain/sssp-router.d.ts.map +1 -0
  95. package/dist/brain/sssp-router.js +295 -0
  96. package/dist/brain/sssp-router.js.map +1 -0
  97. package/dist/brain/swarm-intelligence.d.ts +48 -0
  98. package/dist/brain/swarm-intelligence.d.ts.map +1 -0
  99. package/dist/brain/swarm-intelligence.js +215 -0
  100. package/dist/brain/swarm-intelligence.js.map +1 -0
  101. package/dist/brain/turbo-memory.d.ts +56 -0
  102. package/dist/brain/turbo-memory.d.ts.map +1 -0
  103. package/dist/brain/turbo-memory.js +388 -0
  104. package/dist/brain/turbo-memory.js.map +1 -0
  105. package/dist/cli.js +744 -3
  106. package/dist/cli.js.map +1 -1
  107. package/dist/index.d.ts +19 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +21 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/types.d.ts +422 -2
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/ui/dashboard.d.ts.map +1 -1
  114. package/dist/ui/dashboard.js +20 -3
  115. package/dist/ui/dashboard.js.map +1 -1
  116. package/package.json +16 -7
@@ -0,0 +1,375 @@
1
+ // src/brain/influence-map.ts — Code change influence mapping
2
+ // v3.1.0 — Predicts which files are affected by changes using import graph analysis
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ const IGNORE_DIRS = new Set([
6
+ 'node_modules', '.git', 'dist', 'build', 'out', 'coverage', '.next', '.nuxt', '.cache',
7
+ ]);
8
+ const CODE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py', '.rs', '.go', '.java']);
9
+ export class InfluenceMapper {
10
+ constructor(projectDir) {
11
+ this.graph = new Map();
12
+ this.projectDir = projectDir;
13
+ }
14
+ async analyzeProject(maxFiles = 300) {
15
+ const files = this.collectFiles(this.projectDir, maxFiles);
16
+ const insights = [];
17
+ // Build the import graph
18
+ this.buildGraph(files);
19
+ // Find high-influence files (files imported by many others)
20
+ const influenceMap = this.calculateInfluenceScores();
21
+ // Generate insights for high-influence files
22
+ const highInfluence = influenceMap
23
+ .filter(f => f.score >= 5)
24
+ .sort((a, b) => b.score - a.score)
25
+ .slice(0, 20);
26
+ if (highInfluence.length > 0) {
27
+ insights.push({
28
+ type: 'architecture',
29
+ priority: 'medium',
30
+ title: `[architecture] ${highInfluence.length} high-influence files detected (change impact analysis)`,
31
+ content: `Import graph analysis found ${highInfluence.length} files with high change influence.\n` +
32
+ ` Total files in graph: ${this.graph.size}\n` +
33
+ ` These files affect many others when changed:\n` +
34
+ highInfluence.map(f => ` - ${f.file} (influence: ${f.score}, imported by ${this.graph.get(f.file)?.importedBy.size || 0} files)`).join('\n') +
35
+ `\n Changes to these files require thorough testing of dependent modules.`,
36
+ files: highInfluence.map(f => f.file),
37
+ timestamp: new Date(),
38
+ confidence: 0.8,
39
+ metadata: {
40
+ totalFiles: this.graph.size,
41
+ highInfluenceFiles: highInfluence.map(f => ({
42
+ file: f.file,
43
+ score: f.score,
44
+ dependents: this.graph.get(f.file)?.importedBy.size || 0,
45
+ })),
46
+ },
47
+ });
48
+ }
49
+ // Detect potential orphan files
50
+ const orphans = [...this.graph.values()].filter(node => node.imports.size === 0 && node.importedBy.size === 0);
51
+ if (orphans.length > 0 && orphans.length < this.graph.size * 0.5) {
52
+ insights.push({
53
+ type: 'architecture',
54
+ priority: 'low',
55
+ title: `[architecture] ${orphans.length} orphan files (no import relationships)`,
56
+ content: `${orphans.length} files have no detected import relationships.\n` +
57
+ ` These may be: entry points, standalone scripts, or dead code.\n` +
58
+ ` Files: ${orphans.slice(0, 10).map(o => o.path).join(', ')}${orphans.length > 10 ? ' ...' : ''}`,
59
+ files: orphans.map(o => o.path).slice(0, 20),
60
+ timestamp: new Date(),
61
+ confidence: 0.6,
62
+ metadata: { orphanCount: orphans.length },
63
+ });
64
+ }
65
+ return insights;
66
+ }
67
+ analyzeInfluence(changedFiles) {
68
+ const affectedMap = new Map();
69
+ for (const changedFile of changedFiles) {
70
+ const relPath = this.toRelative(changedFile);
71
+ // 1. Direct reverse dependencies (weight 3)
72
+ const directDeps = this.getReverseDependencies(relPath);
73
+ for (const dep of directDeps) {
74
+ if (!affectedMap.has(dep)) {
75
+ affectedMap.set(dep, { score: 0, reasons: new Set() });
76
+ }
77
+ const entry = affectedMap.get(dep);
78
+ entry.score += 3;
79
+ entry.reasons.add(`directly imports ${relPath}`);
80
+ }
81
+ // 2. Transitive (indirect) dependencies (weight 1)
82
+ const transitiveDeps = this.getTransitiveReverseDependencies(relPath, new Set(), 0, 3);
83
+ for (const dep of transitiveDeps) {
84
+ if (directDeps.has(dep))
85
+ continue; // already counted as direct
86
+ if (!affectedMap.has(dep)) {
87
+ affectedMap.set(dep, { score: 0, reasons: new Set() });
88
+ }
89
+ const entry = affectedMap.get(dep);
90
+ entry.score += 1;
91
+ entry.reasons.add(`indirectly depends on ${relPath}`);
92
+ }
93
+ // 3. Test file correlation (weight 2)
94
+ const testFile = this.findTestCorrelation(relPath);
95
+ if (testFile && this.graph.has(testFile)) {
96
+ if (!affectedMap.has(testFile)) {
97
+ affectedMap.set(testFile, { score: 0, reasons: new Set() });
98
+ }
99
+ const entry = affectedMap.get(testFile);
100
+ entry.score += 2;
101
+ entry.reasons.add(`test file for ${relPath}`);
102
+ }
103
+ // Also check if the changed file IS a test file — mark the source
104
+ const sourceFile = this.findSourceForTest(relPath);
105
+ if (sourceFile && this.graph.has(sourceFile)) {
106
+ if (!affectedMap.has(sourceFile)) {
107
+ affectedMap.set(sourceFile, { score: 0, reasons: new Set() });
108
+ }
109
+ const entry = affectedMap.get(sourceFile);
110
+ entry.score += 2;
111
+ entry.reasons.add(`source file tested by ${relPath}`);
112
+ }
113
+ }
114
+ // Sort by score descending, take top 20
115
+ const affected = [...affectedMap.entries()]
116
+ .map(([file, data]) => ({
117
+ file,
118
+ score: data.score,
119
+ reasons: [...data.reasons],
120
+ }))
121
+ .sort((a, b) => b.score - a.score)
122
+ .slice(0, 20);
123
+ const maxScore = affected.length > 0 ? affected[0].score : 0;
124
+ const riskLevel = maxScore >= 15 ? 'high' : maxScore >= 8 ? 'medium' : 'low';
125
+ return {
126
+ changedFiles: changedFiles.map(f => this.toRelative(f)),
127
+ affectedFiles: affected,
128
+ totalReachable: affectedMap.size,
129
+ riskLevel,
130
+ };
131
+ }
132
+ buildGraph(files) {
133
+ this.graph.clear();
134
+ // Phase 1: Create nodes
135
+ for (const filePath of files) {
136
+ const relPath = path.relative(this.projectDir, filePath).replace(/\\/g, '/');
137
+ this.graph.set(relPath, {
138
+ path: relPath,
139
+ imports: new Set(),
140
+ importedBy: new Set(),
141
+ testCorrelation: this.inferTestFile(relPath),
142
+ });
143
+ }
144
+ // Phase 2: Extract imports and build edges
145
+ for (const filePath of files) {
146
+ const relPath = path.relative(this.projectDir, filePath).replace(/\\/g, '/');
147
+ const imports = this.extractImports(filePath, relPath);
148
+ const node = this.graph.get(relPath);
149
+ if (!node)
150
+ continue;
151
+ for (const importPath of imports) {
152
+ node.imports.add(importPath);
153
+ const targetNode = this.graph.get(importPath);
154
+ if (targetNode) {
155
+ targetNode.importedBy.add(relPath);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ extractImports(filePath, relPath) {
161
+ let content;
162
+ try {
163
+ content = fs.readFileSync(filePath, 'utf-8');
164
+ }
165
+ catch {
166
+ return [];
167
+ }
168
+ const ext = path.extname(filePath);
169
+ const dir = path.dirname(relPath);
170
+ const imports = [];
171
+ if (['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {
172
+ // ESM: import ... from './foo'
173
+ const esmPattern = /import\s+(?:type\s+)?(?:[\w{},\s*]*\s+from\s+)?['"]([^'"]+)['"]/g;
174
+ let match;
175
+ while ((match = esmPattern.exec(content)) !== null) {
176
+ const resolved = this.resolveImport(match[1], dir, ext);
177
+ if (resolved)
178
+ imports.push(resolved);
179
+ }
180
+ // Dynamic imports: import('./foo')
181
+ const dynamicPattern = /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
182
+ while ((match = dynamicPattern.exec(content)) !== null) {
183
+ const resolved = this.resolveImport(match[1], dir, ext);
184
+ if (resolved)
185
+ imports.push(resolved);
186
+ }
187
+ // CJS: require('./foo')
188
+ const cjsPattern = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
189
+ while ((match = cjsPattern.exec(content)) !== null) {
190
+ const resolved = this.resolveImport(match[1], dir, ext);
191
+ if (resolved)
192
+ imports.push(resolved);
193
+ }
194
+ }
195
+ else if (ext === '.py') {
196
+ const pyPattern = /(?:from|import)\s+([.\w]+)/g;
197
+ let match;
198
+ while ((match = pyPattern.exec(content)) !== null) {
199
+ const resolved = this.resolvePythonImport(match[1], dir);
200
+ if (resolved)
201
+ imports.push(resolved);
202
+ }
203
+ }
204
+ else if (ext === '.go') {
205
+ // Go imports are in import blocks
206
+ const goPattern = /"([^"]+)"/g;
207
+ const importBlock = content.match(/import\s*\([\s\S]*?\)/);
208
+ let match;
209
+ if (importBlock) {
210
+ while ((match = goPattern.exec(importBlock[0])) !== null) {
211
+ // Go uses module paths, limited local resolution
212
+ const localPath = match[1].replace(/\/.*$/, '');
213
+ if (this.graph.has(localPath))
214
+ imports.push(localPath);
215
+ }
216
+ }
217
+ }
218
+ return [...new Set(imports)];
219
+ }
220
+ resolveImport(importPath, fromDir, ext) {
221
+ // Only resolve relative imports (not node_modules or packages)
222
+ if (!importPath.startsWith('.'))
223
+ return null;
224
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', '/index.js', '/index.jsx'];
225
+ // Normalize the path
226
+ let resolved = path.normalize(path.join(fromDir, importPath)).replace(/\\/g, '/');
227
+ // Try exact path first
228
+ if (this.graph.has(resolved))
229
+ return resolved;
230
+ // Try with extensions
231
+ for (const tryExt of extensions) {
232
+ const candidate = resolved + tryExt;
233
+ if (this.graph.has(candidate))
234
+ return candidate;
235
+ }
236
+ return null;
237
+ }
238
+ resolvePythonImport(importPath, fromDir) {
239
+ const parts = importPath.split('.');
240
+ const candidates = [
241
+ parts.join('/') + '.py',
242
+ path.join(...parts.slice(0, -1), '__init__.py'),
243
+ ];
244
+ for (const candidate of candidates) {
245
+ if (this.graph.has(candidate))
246
+ return candidate;
247
+ }
248
+ return null;
249
+ }
250
+ getReverseDependencies(filePath) {
251
+ const node = this.graph.get(filePath);
252
+ if (!node)
253
+ return new Set();
254
+ return new Set(node.importedBy);
255
+ }
256
+ getTransitiveReverseDependencies(filePath, visited, depth, maxDepth) {
257
+ const result = new Set();
258
+ if (depth >= maxDepth)
259
+ return result;
260
+ const node = this.graph.get(filePath);
261
+ if (!node)
262
+ return result;
263
+ for (const dep of node.importedBy) {
264
+ if (visited.has(dep))
265
+ continue;
266
+ visited.add(dep);
267
+ result.add(dep);
268
+ // Recurse to find transitive deps
269
+ const transitive = this.getTransitiveReverseDependencies(dep, visited, depth + 1, maxDepth);
270
+ for (const t of transitive) {
271
+ result.add(t);
272
+ }
273
+ }
274
+ return result;
275
+ }
276
+ inferTestFile(relPath) {
277
+ const ext = path.extname(relPath);
278
+ const base = relPath.replace(ext, '');
279
+ const testPatterns = [
280
+ `${base}.test${ext}`,
281
+ `${base}.spec${ext}`,
282
+ `${base}.test.ts`,
283
+ `${base}.spec.ts`,
284
+ `tests/${base}.test${ext}`,
285
+ `test/${base}.test${ext}`,
286
+ `__tests__/${base}.test${ext}`,
287
+ ];
288
+ for (const pattern of testPatterns) {
289
+ if (this.graph.has(pattern))
290
+ return pattern;
291
+ }
292
+ return null;
293
+ }
294
+ findTestCorrelation(relPath) {
295
+ const node = this.graph.get(relPath);
296
+ if (node?.testCorrelation)
297
+ return node.testCorrelation;
298
+ // Try inferring
299
+ return this.inferTestFile(relPath);
300
+ }
301
+ findSourceForTest(testPath) {
302
+ // Reverse: given a test file, find the source
303
+ const testMatch = testPath.match(/^(.+?)(?:\.test|\.spec|_test|Test)(\.\w+)$/);
304
+ if (!testMatch)
305
+ return null;
306
+ const sourcePath = testMatch[1] + testMatch[2];
307
+ if (this.graph.has(sourcePath))
308
+ return sourcePath;
309
+ // Try common extensions
310
+ const ext = testMatch[2];
311
+ const base = testMatch[1];
312
+ const candidates = [base + ext, base + '.ts', base + '.tsx', base + '.js'];
313
+ for (const candidate of candidates) {
314
+ if (this.graph.has(candidate))
315
+ return candidate;
316
+ }
317
+ return null;
318
+ }
319
+ calculateInfluenceScores() {
320
+ const scores = [];
321
+ for (const [file, node] of this.graph) {
322
+ let score = 0;
323
+ // Direct dependents
324
+ score += node.importedBy.size * 3;
325
+ // Transitive reach
326
+ const transitive = this.getTransitiveReverseDependencies(file, new Set([file]), 0, 2);
327
+ score += transitive.size * 1;
328
+ // Is imported by many = higher influence
329
+ // Is a hub (imports many + imported by many) = higher influence
330
+ if (node.imports.size > 3 && node.importedBy.size > 3) {
331
+ score += 5;
332
+ }
333
+ scores.push({ file, score });
334
+ }
335
+ return scores;
336
+ }
337
+ toRelative(filePath) {
338
+ if (path.isAbsolute(filePath)) {
339
+ return path.relative(this.projectDir, filePath).replace(/\\/g, '/');
340
+ }
341
+ return filePath.replace(/\\/g, '/');
342
+ }
343
+ collectFiles(dir, maxFiles) {
344
+ const results = [];
345
+ const walk = (currentDir, depth) => {
346
+ if (results.length >= maxFiles || depth > 10)
347
+ return;
348
+ let entries;
349
+ try {
350
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
351
+ }
352
+ catch {
353
+ return;
354
+ }
355
+ for (const entry of entries) {
356
+ if (results.length >= maxFiles)
357
+ return;
358
+ if (entry.name.startsWith('.'))
359
+ continue;
360
+ const fullPath = path.join(currentDir, entry.name);
361
+ if (entry.isDirectory()) {
362
+ if (IGNORE_DIRS.has(entry.name))
363
+ continue;
364
+ walk(fullPath, depth + 1);
365
+ }
366
+ else if (entry.isFile() && CODE_EXTENSIONS.has(path.extname(entry.name))) {
367
+ results.push(fullPath);
368
+ }
369
+ }
370
+ };
371
+ walk(dir, 0);
372
+ return results;
373
+ }
374
+ }
375
+ //# sourceMappingURL=influence-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"influence-map.js","sourceRoot":"","sources":["../../src/brain/influence-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { KGEntity, KGRelation, KGGraph, PageRankResult } from '../types.js';
2
+ /**
3
+ * Knowledge Graph — maps your entire codebase as a living graph.
4
+ *
5
+ * Entity extraction: Parse source files for functions, classes, interfaces,
6
+ * modules, variables (exported only).
7
+ *
8
+ * Relations: calls, imports, extends, implements, uses, tests
9
+ *
10
+ * PageRank: Damping factor 0.85, convergence < 0.0001, max 100 iterations.
11
+ * Result: normalized score 0-1 for each entity.
12
+ *
13
+ * Use cases:
14
+ * - Most critical functions to test (high PageRank)
15
+ * - Orphan code (zero in-degree, zero PageRank)
16
+ * - Circular dependency detection (cycles)
17
+ * - Impact analysis: what breaks if X changes?
18
+ */
19
+ export declare class KnowledgeGraph {
20
+ private graph;
21
+ private projectDir;
22
+ constructor(projectDir: string);
23
+ /** Build the knowledge graph from project source files */
24
+ build(): Promise<KGGraph>;
25
+ /** Add a single entity */
26
+ addEntity(entity: KGEntity): void;
27
+ /** Add a relation */
28
+ addRelation(relation: KGRelation): void;
29
+ /** Extract code entities from source file content */
30
+ private extractEntities;
31
+ /** Extract relations between entities based on imports, calls, etc. */
32
+ private extractRelations;
33
+ /**
34
+ * Compute PageRank scores for all entities.
35
+ * Damping factor: 0.85, convergence: < 0.0001, max iterations: 100.
36
+ */
37
+ pageRank(iterations?: number): PageRankResult;
38
+ /** Get top-N most important entities by PageRank */
39
+ getTopEntities(topN?: number): KGEntity[];
40
+ /** Find entities impacted by a change to the given entity */
41
+ getImpactedBy(entityId: string): KGEntity[];
42
+ private findDownstream;
43
+ /** Find circular dependencies */
44
+ findCycles(): string[][];
45
+ /** Get graph statistics */
46
+ getStats(): {
47
+ entities: number;
48
+ relations: number;
49
+ avgPageRank: number;
50
+ orphanCount: number;
51
+ };
52
+ private findSourceFiles;
53
+ private saveToDisk;
54
+ private loadFromDisk;
55
+ }
56
+ //# sourceMappingURL=knowledge-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../../src/brain/knowledge-graph.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI5E;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAa9B,0DAA0D;IACpD,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA+B/B,0BAA0B;IAC1B,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAIjC,qBAAqB;IACrB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAMvC,qDAAqD;IACrD,OAAO,CAAC,eAAe;IA4FvB,uEAAuE;IACvE,OAAO,CAAC,gBAAgB;IAmDxB;;;OAGG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAY,GAAG,cAAc;IAsGlD,oDAAoD;IACpD,cAAc,CAAC,IAAI,GAAE,MAAW,GAAG,QAAQ,EAAE;IAM7C,6DAA6D;IAC7D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAS3C,OAAO,CAAC,cAAc;IAWtB,iCAAiC;IACjC,UAAU,IAAI,MAAM,EAAE,EAAE;IAsCxB,2BAA2B;IAC3B,QAAQ,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAa7F,OAAO,CAAC,eAAe;YAsBT,UAAU;IAyBxB,OAAO,CAAC,YAAY;CAgBrB"}