@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 @@
1
+ {"version":3,"file":"code-age-analyzer.js","sourceRoot":"","sources":["../../src/brain/code-age-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { BrainInsight } from '../types.js';
2
+ export interface CognitiveFunction {
3
+ name: string;
4
+ file: string;
5
+ startLine: number;
6
+ endLine: number;
7
+ cognitiveScore: number;
8
+ nestingContributions: number;
9
+ booleanContributions: number;
10
+ controlFlowContributions: number;
11
+ recursionContributions: number;
12
+ linesOfCode: number;
13
+ }
14
+ export declare class CognitiveLoadAnalyzer {
15
+ private projectDir;
16
+ constructor(projectDir: string);
17
+ analyzeProject(maxFiles?: number): Promise<BrainInsight[]>;
18
+ analyzeFile(filePath: string): CognitiveFunction[];
19
+ private getFunctionPattern;
20
+ private extractFunctionBody;
21
+ private skipString;
22
+ private calculateCognitiveComplexity;
23
+ private removeStringsAndComments;
24
+ private functionToInsight;
25
+ private collectFiles;
26
+ }
27
+ //# sourceMappingURL=cognitive-load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognitive-load.d.ts","sourceRoot":"","sources":["../../src/brain/cognitive-load.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,cAAc,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwDrE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IA4ClD,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,4BAA4B;IA0EpC,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,YAAY;CAqBrB"}
@@ -0,0 +1,304 @@
1
+ // src/brain/cognitive-load.ts — Cognitive complexity analysis
2
+ // v3.1.0 — Measures function cognitive complexity: nesting, boolean ops, control flow
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 CognitiveLoadAnalyzer {
10
+ constructor(projectDir) {
11
+ this.projectDir = projectDir;
12
+ }
13
+ async analyzeProject(maxFiles = 300) {
14
+ const files = this.collectFiles(this.projectDir, maxFiles);
15
+ const insights = [];
16
+ const allFunctions = [];
17
+ for (const filePath of files) {
18
+ const functions = this.analyzeFile(filePath);
19
+ allFunctions.push(...functions);
20
+ }
21
+ // Sort by cognitive score descending
22
+ allFunctions.sort((a, b) => b.cognitiveScore - a.cognitiveScore);
23
+ // Generate insights for functions exceeding thresholds
24
+ for (const fn of allFunctions) {
25
+ if (fn.cognitiveScore > 15) {
26
+ insights.push(this.functionToInsight(fn));
27
+ }
28
+ }
29
+ // Summary insight for high-complexity hotspots
30
+ const highCount = allFunctions.filter(f => f.cognitiveScore > 25).length;
31
+ const mediumCount = allFunctions.filter(f => f.cognitiveScore > 15 && f.cognitiveScore <= 25).length;
32
+ const totalFunctions = allFunctions.length;
33
+ if ((highCount + mediumCount) > 0 && totalFunctions > 5) {
34
+ insights.push({
35
+ type: 'complexity',
36
+ priority: highCount > 5 ? 'high' : 'medium',
37
+ title: `[complexity] ${highCount + mediumCount} functions with high cognitive complexity`,
38
+ content: `Cognitive complexity analysis found ${highCount} high (>25) and ${mediumCount} medium (>15) complexity functions.\n` +
39
+ ` Total functions analyzed: ${totalFunctions}\n` +
40
+ ` High complexity makes code harder to understand, test, and maintain.\n` +
41
+ ` Consider breaking complex functions into smaller, well-named helpers.\n` +
42
+ ` Top offenders:\n` +
43
+ allFunctions.slice(0, 5).map(f => ` - ${f.name} in ${f.file}:${f.startLine} (score: ${f.cognitiveScore})`).join('\n'),
44
+ files: allFunctions.filter(f => f.cognitiveScore > 15).map(f => f.file).slice(0, 20),
45
+ timestamp: new Date(),
46
+ confidence: 0.8,
47
+ metadata: {
48
+ totalFunctions,
49
+ highComplexityCount: highCount,
50
+ mediumComplexityCount: mediumCount,
51
+ avgComplexity: totalFunctions > 0
52
+ ? Math.round(allFunctions.reduce((s, f) => s + f.cognitiveScore, 0) / totalFunctions * 10) / 10
53
+ : 0,
54
+ },
55
+ });
56
+ }
57
+ return insights;
58
+ }
59
+ analyzeFile(filePath) {
60
+ let content;
61
+ try {
62
+ content = fs.readFileSync(filePath, 'utf-8');
63
+ }
64
+ catch {
65
+ return [];
66
+ }
67
+ const relPath = path.relative(this.projectDir, filePath);
68
+ const ext = path.extname(filePath);
69
+ const functions = [];
70
+ // Extract function boundaries using regex
71
+ const functionPattern = this.getFunctionPattern(ext);
72
+ let match;
73
+ functionPattern.lastIndex = 0;
74
+ while ((match = functionPattern.exec(content)) !== null) {
75
+ const name = match[1] || match[2] || '<anonymous>';
76
+ const startLine = content.substring(0, match.index).split('\n').length;
77
+ // Find the function body by matching braces
78
+ const bodyResult = this.extractFunctionBody(content, match.index);
79
+ if (!bodyResult)
80
+ continue;
81
+ const { body, endIndex } = bodyResult;
82
+ const endLine = content.substring(0, endIndex).split('\n').length;
83
+ // Calculate cognitive complexity
84
+ const score = this.calculateCognitiveComplexity(body, name);
85
+ functions.push({
86
+ name,
87
+ file: relPath,
88
+ startLine,
89
+ endLine,
90
+ cognitiveScore: score.total,
91
+ nestingContributions: score.nesting,
92
+ booleanContributions: score.booleanOps,
93
+ controlFlowContributions: score.controlFlow,
94
+ recursionContributions: score.recursion,
95
+ linesOfCode: body.split('\n').length,
96
+ });
97
+ }
98
+ return functions;
99
+ }
100
+ getFunctionPattern(ext) {
101
+ if (ext === '.py') {
102
+ return /def\s+(\w+)\s*\(/g;
103
+ }
104
+ if (ext === '.rs') {
105
+ return /(?:fn|pub\s+fn)\s+(\w+)\s*[<(]/g;
106
+ }
107
+ if (ext === '.go') {
108
+ return /func\s+(?:\([^)]*\)\s+)?(\w+)\s*\(/g;
109
+ }
110
+ if (ext === '.java') {
111
+ return /(?:public|private|protected|static)\s+\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;
112
+ }
113
+ // TypeScript / JavaScript
114
+ return /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>)/g;
115
+ }
116
+ extractFunctionBody(content, startIndex) {
117
+ // Find the opening brace
118
+ let braceIndex = content.indexOf('{', startIndex);
119
+ if (braceIndex === -1)
120
+ return null;
121
+ // For arrow functions without braces, find the line end
122
+ const arrowMatch = content.substring(startIndex, braceIndex).match(/=>\s*[^{]/);
123
+ if (arrowMatch) {
124
+ // Arrow function with expression body (no braces)
125
+ const lineEnd = content.indexOf('\n', startIndex);
126
+ const body = content.substring(startIndex, lineEnd !== -1 ? lineEnd : content.length);
127
+ return { body, endIndex: lineEnd !== -1 ? lineEnd : content.length };
128
+ }
129
+ // Match braces to find the end of the function
130
+ let depth = 0;
131
+ let i = braceIndex;
132
+ while (i < content.length) {
133
+ if (content[i] === '{')
134
+ depth++;
135
+ else if (content[i] === '}') {
136
+ depth--;
137
+ if (depth === 0) {
138
+ const body = content.substring(startIndex, i + 1);
139
+ return { body, endIndex: i + 1 };
140
+ }
141
+ }
142
+ // Skip strings
143
+ if (content[i] === '"' || content[i] === "'" || content[i] === '`') {
144
+ i = this.skipString(content, i);
145
+ continue;
146
+ }
147
+ i++;
148
+ }
149
+ return null;
150
+ }
151
+ skipString(content, start) {
152
+ const quote = content[start];
153
+ let i = start + 1;
154
+ while (i < content.length) {
155
+ if (content[i] === '\\') {
156
+ i += 2;
157
+ continue;
158
+ }
159
+ if (content[i] === quote)
160
+ return i + 1;
161
+ if (quote !== '`' && content[i] === '\n')
162
+ return i;
163
+ i++;
164
+ }
165
+ return i;
166
+ }
167
+ calculateCognitiveComplexity(body, functionName) {
168
+ let nesting = 0;
169
+ let booleanOps = 0;
170
+ let controlFlow = 0;
171
+ let recursion = 0;
172
+ // Remove string literals and comments to avoid false positives
173
+ const cleaned = this.removeStringsAndComments(body);
174
+ const lines = cleaned.split('\n');
175
+ for (let i = 0; i < lines.length; i++) {
176
+ const line = lines[i].trim();
177
+ if (line === '' || line.startsWith('//') || line.startsWith('/*') || line.startsWith('*'))
178
+ continue;
179
+ // Nesting depth: count open braces minus close braces
180
+ const opens = (line.match(/\{/g) || []).length;
181
+ const closes = (line.match(/\}/g) || []).length;
182
+ const prevNesting = nesting;
183
+ // Count nesting contributions (only for lines that open blocks)
184
+ if (opens > closes) {
185
+ nesting += (opens - closes);
186
+ }
187
+ // Nesting complexity: +1 per nesting level for control flow
188
+ if (/\b(if|else|for|while|switch|try|catch|finally)\b/.test(line)) {
189
+ controlFlow += Math.max(0, nesting - 1);
190
+ }
191
+ // else / else if: +1 each
192
+ if (/\belse\s+(if\s*)?[\{(]/.test(line) || line === 'else {') {
193
+ controlFlow += 1;
194
+ }
195
+ // catch: +1
196
+ if (/\bcatch\s*\(/.test(line)) {
197
+ controlFlow += 1;
198
+ }
199
+ // break / continue in loops: +1
200
+ if (/\b(break|continue)\b/.test(line) && !line.startsWith('//')) {
201
+ controlFlow += 1;
202
+ }
203
+ // Boolean operators: && and || each +1
204
+ const andMatches = line.match(/&&/g);
205
+ const orMatches = line.match(/\|\|/g);
206
+ booleanOps += (andMatches ? andMatches.length : 0) + (orMatches ? orMatches.length : 0);
207
+ // Recursive calls: +2
208
+ const escapedName = functionName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
209
+ if (functionName !== '<anonymous>' && new RegExp(`\\b${escapedName}\\s*\\(`).test(line)) {
210
+ // Make sure it's not just the function declaration
211
+ if (!line.includes(`function ${functionName}`) && !line.includes(`${functionName} =`)) {
212
+ recursion += 2;
213
+ }
214
+ }
215
+ }
216
+ return {
217
+ total: nesting + booleanOps + controlFlow + recursion,
218
+ nesting,
219
+ booleanOps,
220
+ controlFlow,
221
+ recursion,
222
+ };
223
+ }
224
+ removeStringsAndComments(code) {
225
+ // Remove single-line comments
226
+ let result = code.replace(/\/\/.*$/gm, '');
227
+ // Remove multi-line comments
228
+ result = result.replace(/\/\*[\s\S]*?\*\//g, '');
229
+ // Remove double-quoted strings
230
+ result = result.replace(/"(?:[^"\\]|\\.)*"/g, '""');
231
+ // Remove single-quoted strings
232
+ result = result.replace(/'(?:[^'\\]|\\.)*'/g, "''");
233
+ // Remove template literals
234
+ result = result.replace(/`(?:[^`\\]|\\.)*`/g, '``');
235
+ return result;
236
+ }
237
+ functionToInsight(fn) {
238
+ const priority = fn.cognitiveScore > 25 ? 'high' : 'medium';
239
+ const severity = fn.cognitiveScore > 25 ? 'HIGH' : 'MEDIUM';
240
+ return {
241
+ type: 'complexity',
242
+ priority,
243
+ title: `[complexity] ${severity} cognitive load in ${fn.name} (${fn.file}:${fn.startLine})`,
244
+ content: `Function \`${fn.name}\` in ${fn.file}:${fn.startLine}-${fn.endLine} has cognitive complexity of ${fn.cognitiveScore}.\n` +
245
+ ` Score breakdown:\n` +
246
+ ` - Nesting depth: ${fn.nestingContributions}\n` +
247
+ ` - Boolean operators: ${fn.booleanContributions}\n` +
248
+ ` - Control flow (else/catch/break): ${fn.controlFlowContributions}\n` +
249
+ ` - Recursion: ${fn.recursionContributions}\n` +
250
+ ` Lines of code: ${fn.linesOfCode}\n` +
251
+ ` Thresholds: medium >15, high >25\n` +
252
+ ` Suggestion: Break into smaller functions with single responsibilities. ` +
253
+ `Extract complex conditions into well-named variables.`,
254
+ files: [fn.file],
255
+ timestamp: new Date(),
256
+ confidence: 0.75,
257
+ metadata: {
258
+ functionName: fn.name,
259
+ cognitiveScore: fn.cognitiveScore,
260
+ startLine: fn.startLine,
261
+ endLine: fn.endLine,
262
+ linesOfCode: fn.linesOfCode,
263
+ breakdown: {
264
+ nesting: fn.nestingContributions,
265
+ booleanOps: fn.booleanContributions,
266
+ controlFlow: fn.controlFlowContributions,
267
+ recursion: fn.recursionContributions,
268
+ },
269
+ },
270
+ };
271
+ }
272
+ collectFiles(dir, maxFiles) {
273
+ const results = [];
274
+ const walk = (currentDir, depth) => {
275
+ if (results.length >= maxFiles || depth > 10)
276
+ return;
277
+ let entries;
278
+ try {
279
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
280
+ }
281
+ catch {
282
+ return;
283
+ }
284
+ for (const entry of entries) {
285
+ if (results.length >= maxFiles)
286
+ return;
287
+ if (entry.name.startsWith('.'))
288
+ continue;
289
+ const fullPath = path.join(currentDir, entry.name);
290
+ if (entry.isDirectory()) {
291
+ if (IGNORE_DIRS.has(entry.name))
292
+ continue;
293
+ walk(fullPath, depth + 1);
294
+ }
295
+ else if (entry.isFile() && CODE_EXTENSIONS.has(path.extname(entry.name))) {
296
+ results.push(fullPath);
297
+ }
298
+ }
299
+ };
300
+ walk(dir, 0);
301
+ return results;
302
+ }
303
+ }
304
+ //# sourceMappingURL=cognitive-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognitive-load.js","sourceRoot":"","sources":["../../src/brain/cognitive-load.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { BrainInsight } from '../types.js';
2
+ export declare class ConfigDriftDetector {
3
+ private projectDir;
4
+ constructor(projectDir: string);
5
+ analyzeProject(): Promise<BrainInsight[]>;
6
+ private detectMissingConfigs;
7
+ private detectTsconfigDrift;
8
+ private detectGitignoreDrift;
9
+ private detectPackageJsonDrift;
10
+ private detectEditorConfigDrift;
11
+ private driftToInsight;
12
+ }
13
+ //# sourceMappingURL=config-drift-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-drift-detector.d.ts","sourceRoot":"","sources":["../../src/brain/config-drift-detector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AA0BxD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB/C,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,cAAc;CAkBvB"}
@@ -0,0 +1,198 @@
1
+ // src/brain/config-drift-detector.ts — Configuration drift detection
2
+ // v3.0.0 — Detects drift between expected and actual config across environments
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ const TEMPLATES = [
6
+ { path: 'tsconfig.json', required: true },
7
+ { path: '.eslintrc.json', required: false },
8
+ { path: '.eslintrc.js', required: false },
9
+ { path: '.prettierrc', required: false },
10
+ { path: '.prettierrc.json', required: false },
11
+ { path: 'jest.config.js', required: false },
12
+ { path: 'jest.config.ts', required: false },
13
+ { path: '.gitignore', required: true },
14
+ { path: '.editorconfig', required: false },
15
+ { path: '.npmrc', required: false },
16
+ { path: '.nvmrc', required: false },
17
+ { path: 'docker-compose.yml', required: false },
18
+ { path: 'Dockerfile', required: false },
19
+ ];
20
+ export class ConfigDriftDetector {
21
+ constructor(projectDir) {
22
+ this.projectDir = projectDir;
23
+ }
24
+ async analyzeProject() {
25
+ const drifts = [];
26
+ // Phase 1: Missing required config files
27
+ drifts.push(...this.detectMissingConfigs());
28
+ // Phase 2: tsconfig.json drift
29
+ drifts.push(...this.detectTsconfigDrift());
30
+ // Phase 3: .gitignore drift
31
+ drifts.push(...this.detectGitignoreDrift());
32
+ // Phase 4: package.json consistency
33
+ drifts.push(...this.detectPackageJsonDrift());
34
+ // Phase 5: Editor config consistency
35
+ drifts.push(...this.detectEditorConfigDrift());
36
+ return drifts.map(d => this.driftToInsight(d));
37
+ }
38
+ detectMissingConfigs() {
39
+ const drifts = [];
40
+ for (const template of TEMPLATES) {
41
+ const fullPath = path.join(this.projectDir, template.path);
42
+ const exists = fs.existsSync(fullPath);
43
+ if (template.required && !exists) {
44
+ drifts.push({
45
+ file: template.path,
46
+ expected: 'File should exist',
47
+ actual: 'File is missing',
48
+ severity: 'high',
49
+ description: `Required config file ${template.path} is missing. This may cause inconsistent behavior across environments.`,
50
+ autoFixable: true,
51
+ });
52
+ }
53
+ }
54
+ return drifts;
55
+ }
56
+ detectTsconfigDrift() {
57
+ const drifts = [];
58
+ const tsconfigPath = path.join(this.projectDir, 'tsconfig.json');
59
+ let tsconfig;
60
+ try {
61
+ tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, 'utf-8'));
62
+ }
63
+ catch {
64
+ return drifts; // missing tsconfig handled above
65
+ }
66
+ const compilerOptions = (tsconfig.compilerOptions || {});
67
+ // Check for recommended settings
68
+ const recommended = {
69
+ 'strict': { value: true, reason: 'Strict mode catches many common bugs' },
70
+ 'esModuleInterop': { value: true, reason: 'Enables proper interop between CJS and ESM' },
71
+ 'skipLibCheck': { value: true, reason: 'Speeds up compilation by skipping type checking of .d.ts files' },
72
+ 'forceConsistentCasingInFileNames': { value: true, reason: 'Ensures consistent file references across OS' },
73
+ 'resolveJsonModule': { value: true, reason: 'Allows importing JSON files' },
74
+ 'declaration': { value: true, reason: 'Generates .d.ts files for library consumers' },
75
+ 'declarationMap': { value: true, reason: 'Enables source maps for declarations' },
76
+ 'sourceMap': { value: true, reason: 'Enables debugging with source maps' },
77
+ };
78
+ for (const [key, { value, reason }] of Object.entries(recommended)) {
79
+ if (compilerOptions[key] === undefined) {
80
+ drifts.push({
81
+ file: 'tsconfig.json',
82
+ expected: `compilerOptions.${key}: ${JSON.stringify(value)}`,
83
+ actual: `${key} is not set`,
84
+ severity: 'medium',
85
+ description: `Missing recommended tsconfig option: ${key}. ${reason}.`,
86
+ autoFixable: true,
87
+ });
88
+ }
89
+ else if (compilerOptions[key] !== value) {
90
+ drifts.push({
91
+ file: 'tsconfig.json',
92
+ expected: `compilerOptions.${key}: ${JSON.stringify(value)}`,
93
+ actual: `compilerOptions.${key}: ${JSON.stringify(compilerOptions[key])}`,
94
+ severity: 'low',
95
+ description: `tsconfig option ${key} is ${JSON.stringify(compilerOptions[key])}, recommended: ${JSON.stringify(value)}. ${reason}.`,
96
+ autoFixable: true,
97
+ });
98
+ }
99
+ }
100
+ return drifts;
101
+ }
102
+ detectGitignoreDrift() {
103
+ const drifts = [];
104
+ const gitignorePath = path.join(this.projectDir, '.gitignore');
105
+ let content;
106
+ try {
107
+ content = fs.readFileSync(gitignorePath, 'utf-8');
108
+ }
109
+ catch {
110
+ return drifts;
111
+ }
112
+ const entries = new Set(content.split('\n').map(l => l.trim()).filter(l => l && !l.startsWith('#')));
113
+ // Recommended gitignore entries
114
+ const recommended = [
115
+ 'node_modules', 'dist', 'build', '.env', '.env.local',
116
+ '*.log', 'coverage', '.DS_Store', 'thumbs.db',
117
+ ];
118
+ for (const entry of recommended) {
119
+ if (!entries.has(entry) && !entries.has(entry.replace('*', ''))) {
120
+ drifts.push({
121
+ file: '.gitignore',
122
+ expected: `${entry} should be ignored`,
123
+ actual: `${entry} is not in .gitignore`,
124
+ severity: entry === '.env' || entry === '.env.local' ? 'high' : 'medium',
125
+ description: `${entry} is missing from .gitignore. This may result in committing sensitive or generated files.`,
126
+ autoFixable: true,
127
+ });
128
+ }
129
+ }
130
+ return drifts;
131
+ }
132
+ detectPackageJsonDrift() {
133
+ const drifts = [];
134
+ const pkgPath = path.join(this.projectDir, 'package.json');
135
+ let pkg;
136
+ try {
137
+ pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
138
+ }
139
+ catch {
140
+ return drifts;
141
+ }
142
+ // Check for missing recommended fields
143
+ const recommendedFields = {
144
+ 'license': { expected: 'MIT or appropriate license', reason: 'Required for npm publishing and legal clarity' },
145
+ 'repository': { expected: '{ type: "git", url: "..." }', reason: 'Helps users find the source code' },
146
+ 'description': { expected: 'Short project description', reason: 'Improves discoverability on npm' },
147
+ 'keywords': { expected: 'Array of keywords', reason: 'Improves npm search results' },
148
+ 'engines': { expected: '{ node: ">=18" }', reason: 'Specifies compatible Node.js versions' },
149
+ };
150
+ for (const [field, { expected, reason }] of Object.entries(recommendedFields)) {
151
+ if (!pkg[field]) {
152
+ drifts.push({
153
+ file: 'package.json',
154
+ expected: `${field}: ${expected}`,
155
+ actual: `${field} is missing`,
156
+ severity: 'low',
157
+ description: `Missing package.json field: ${field}. ${reason}.`,
158
+ autoFixable: true,
159
+ });
160
+ }
161
+ }
162
+ return drifts;
163
+ }
164
+ detectEditorConfigDrift() {
165
+ const drifts = [];
166
+ const editorConfigPath = path.join(this.projectDir, '.editorconfig');
167
+ if (!fs.existsSync(editorConfigPath)) {
168
+ // Not critical, but worth noting
169
+ drifts.push({
170
+ file: '.editorconfig',
171
+ expected: 'Editor config file for consistent formatting',
172
+ actual: 'No .editorconfig file found',
173
+ severity: 'low',
174
+ description: 'Missing .editorconfig. Team members may use different editor settings (indentation, line endings, etc.).',
175
+ autoFixable: true,
176
+ });
177
+ }
178
+ return drifts;
179
+ }
180
+ driftToInsight(drift) {
181
+ return {
182
+ type: 'config-drift',
183
+ priority: drift.severity === 'high' ? 'high' : drift.severity === 'medium' ? 'medium' : 'low',
184
+ title: `[config-drift] ${drift.file}: ${drift.description.slice(0, 60)}`,
185
+ content: `Configuration drift in ${drift.file}\n` +
186
+ ` Expected: ${drift.expected}\n` +
187
+ ` Actual: ${drift.actual}\n` +
188
+ ` Severity: ${drift.severity}\n` +
189
+ ` ${drift.autoFixable ? 'This can be auto-fixed.' : 'Manual review required.'}\n` +
190
+ ` Description: ${drift.description}`,
191
+ files: [drift.file],
192
+ timestamp: new Date(),
193
+ confidence: 0.9,
194
+ metadata: { autoFixable: drift.autoFixable, severity: drift.severity },
195
+ };
196
+ }
197
+ }
198
+ //# sourceMappingURL=config-drift-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-drift-detector.js","sourceRoot":"","sources":["../../src/brain/config-drift-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { AgentTool, CAIPMessage, CAIPHandshake, CAIPChannel, AgentBoostPacket, CrossAgentBus } from '../types.js';
2
+ /**
3
+ * Cross-Agent Intelligence Protocol — the hub that makes all coding agents talk to each other.
4
+ *
5
+ * Transport:
6
+ * Primary: WebSocket on port 7344 (CAIP bus)
7
+ * Fallback: Shared filesystem at ~/.shadow-brain-caip/ (polling every 2s)
8
+ *
9
+ * Protocol:
10
+ * 1. Handshake — each agent sends identity, version, capabilities
11
+ * 2. Channels — broadcast (all), pair (two agents), team (subset)
12
+ * 3. Boost Packet — high-value insight shared to all connected agents
13
+ * 4. Deduplication — message hash ring prevents infinite loops
14
+ */
15
+ export declare class CrossAgentProtocol {
16
+ private wss;
17
+ private clients;
18
+ private bus;
19
+ private messageHashes;
20
+ private boostHandlers;
21
+ private filePollTimer;
22
+ private running;
23
+ constructor();
24
+ /** Start the CAIP WebSocket server + filesystem fallback */
25
+ start(): Promise<void>;
26
+ /** Stop the CAIP server */
27
+ stop(): Promise<void>;
28
+ /** Register an agent via handshake */
29
+ connect(handshake: CAIPHandshake): Promise<CAIPChannel>;
30
+ /** Broadcast a message to all connected agents */
31
+ broadcast(from: AgentTool, payload: unknown, priority?: CAIPMessage['priority']): Promise<void>;
32
+ /** Send a boost packet — high-value insights shared across agents */
33
+ sendBoostPacket(packet: AgentBoostPacket): Promise<void>;
34
+ /** Send targeted message to specific agent */
35
+ sendDirect(from: AgentTool, to: AgentTool, payload: unknown): Promise<void>;
36
+ /** Subscribe to boost packets from a specific agent */
37
+ subscribeToBoosts(agent: AgentTool, handler: (packet: AgentBoostPacket) => void): void;
38
+ /** Get all connected agents */
39
+ getConnectedAgents(): AgentTool[];
40
+ /** Get bus statistics */
41
+ getBusStats(): CrossAgentBus;
42
+ private handleMessage;
43
+ private deliverMessage;
44
+ private writeFileMessage;
45
+ private startFilePolling;
46
+ private hashMessage;
47
+ }
48
+ //# sourceMappingURL=cross-agent-protocol.d.ts.map