@theihtisham/agent-shadow-brain 5.0.0 → 5.1.1

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 (61) hide show
  1. package/README.md +575 -292
  2. package/dist/adapters/index.d.ts.map +1 -1
  3. package/dist/adapters/index.js +1 -0
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/brain/auto-setup.d.ts +54 -0
  6. package/dist/brain/auto-setup.d.ts.map +1 -0
  7. package/dist/brain/auto-setup.js +660 -0
  8. package/dist/brain/auto-setup.js.map +1 -0
  9. package/dist/brain/brain-portability.d.ts +81 -0
  10. package/dist/brain/brain-portability.d.ts.map +1 -0
  11. package/dist/brain/brain-portability.js +329 -0
  12. package/dist/brain/brain-portability.js.map +1 -0
  13. package/dist/brain/code-dna.d.ts +70 -0
  14. package/dist/brain/code-dna.d.ts.map +1 -0
  15. package/dist/brain/code-dna.js +611 -0
  16. package/dist/brain/code-dna.js.map +1 -0
  17. package/dist/brain/fine-tuning-engine.d.ts +99 -0
  18. package/dist/brain/fine-tuning-engine.d.ts.map +1 -0
  19. package/dist/brain/fine-tuning-engine.js +681 -0
  20. package/dist/brain/fine-tuning-engine.js.map +1 -0
  21. package/dist/brain/intent-engine.d.ts +64 -0
  22. package/dist/brain/intent-engine.d.ts.map +1 -0
  23. package/dist/brain/intent-engine.js +374 -0
  24. package/dist/brain/intent-engine.js.map +1 -0
  25. package/dist/brain/lsp-server.d.ts +62 -0
  26. package/dist/brain/lsp-server.d.ts.map +1 -0
  27. package/dist/brain/lsp-server.js +480 -0
  28. package/dist/brain/lsp-server.js.map +1 -0
  29. package/dist/brain/mcp-server.d.ts +12 -0
  30. package/dist/brain/mcp-server.d.ts.map +1 -1
  31. package/dist/brain/mcp-server.js +396 -37
  32. package/dist/brain/mcp-server.js.map +1 -1
  33. package/dist/brain/orchestrator.d.ts +13 -0
  34. package/dist/brain/orchestrator.d.ts.map +1 -1
  35. package/dist/brain/orchestrator.js +25 -1
  36. package/dist/brain/orchestrator.js.map +1 -1
  37. package/dist/brain/plugin-system.d.ts +97 -0
  38. package/dist/brain/plugin-system.d.ts.map +1 -0
  39. package/dist/brain/plugin-system.js +404 -0
  40. package/dist/brain/plugin-system.js.map +1 -0
  41. package/dist/brain/smart-cache.d.ts +100 -0
  42. package/dist/brain/smart-cache.d.ts.map +1 -0
  43. package/dist/brain/smart-cache.js +417 -0
  44. package/dist/brain/smart-cache.js.map +1 -0
  45. package/dist/brain/temporal-intelligence.d.ts +89 -0
  46. package/dist/brain/temporal-intelligence.d.ts.map +1 -0
  47. package/dist/brain/temporal-intelligence.js +378 -0
  48. package/dist/brain/temporal-intelligence.js.map +1 -0
  49. package/dist/cli.js +444 -3
  50. package/dist/cli.js.map +1 -1
  51. package/dist/dashboard/server.d.ts +4 -0
  52. package/dist/dashboard/server.d.ts.map +1 -1
  53. package/dist/dashboard/server.js +453 -330
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.d.ts +11 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +12 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/types.d.ts +284 -1
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +28 -4
@@ -0,0 +1,611 @@
1
+ // src/brain/code-dna.ts — Code DNA fingerprinting for style analysis
2
+ // v6.0.0 — Codebase style genome extraction
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import * as crypto from 'crypto';
6
+ const GENE_EXTRACTORS = [
7
+ // Formatting genes
8
+ {
9
+ name: 'indent-spaces',
10
+ category: 'formatting',
11
+ extract: (_content, lines) => {
12
+ const indented = lines.filter(l => /^\s+/.test(l));
13
+ if (indented.length === 0)
14
+ return 0.5;
15
+ const spaces = indented.filter(l => /^ /.test(l)).length;
16
+ return spaces / indented.length;
17
+ },
18
+ },
19
+ {
20
+ name: 'indent-size',
21
+ category: 'formatting',
22
+ extract: (_content, lines) => {
23
+ const indentSizes = [];
24
+ for (const line of lines) {
25
+ const match = line.match(/^( +)/);
26
+ if (match && match[1].length <= 8)
27
+ indentSizes.push(match[1].length);
28
+ }
29
+ if (indentSizes.length === 0)
30
+ return 0.5;
31
+ const avg = indentSizes.reduce((s, v) => s + v, 0) / indentSizes.length;
32
+ return Math.min(1, avg / 8); // Normalize: 2 spaces=0.25, 4=0.5, 8=1.0
33
+ },
34
+ },
35
+ {
36
+ name: 'semicolons',
37
+ category: 'formatting',
38
+ extract: (content) => {
39
+ const statements = (content.match(/[^;{}\n]\s*$/gm) || []).length;
40
+ const withSemicolons = (content.match(/;\s*$/gm) || []).length;
41
+ const total = statements + withSemicolons;
42
+ return total > 0 ? withSemicolons / total : 0.5;
43
+ },
44
+ },
45
+ {
46
+ name: 'single-quotes',
47
+ category: 'formatting',
48
+ extract: (content) => {
49
+ const singles = (content.match(/'/g) || []).length;
50
+ const doubles = (content.match(/(?<!=)"(?!=)/g) || []).length;
51
+ const total = singles + doubles;
52
+ return total > 0 ? singles / total : 0.5;
53
+ },
54
+ },
55
+ {
56
+ name: 'trailing-comma',
57
+ category: 'formatting',
58
+ extract: (content) => {
59
+ const commaBeforeClose = (content.match(/,\s*[\]})\n]/g) || []).length;
60
+ const noCommaBeforeClose = (content.match(/[^,\s]\s*[\]})\n]/g) || []).length;
61
+ const total = commaBeforeClose + noCommaBeforeClose;
62
+ return total > 0 ? commaBeforeClose / total : 0.5;
63
+ },
64
+ },
65
+ {
66
+ name: 'avg-line-length',
67
+ category: 'formatting',
68
+ extract: (_content, lines) => {
69
+ const nonEmpty = lines.filter(l => l.trim().length > 0);
70
+ if (nonEmpty.length === 0)
71
+ return 0.5;
72
+ const avg = nonEmpty.reduce((s, l) => s + l.length, 0) / nonEmpty.length;
73
+ return Math.min(1, avg / 120); // Normalize to 120 char max
74
+ },
75
+ },
76
+ // Naming genes
77
+ {
78
+ name: 'camel-case-ratio',
79
+ category: 'naming',
80
+ extract: (content) => {
81
+ const camel = (content.match(/\b[a-z][a-zA-Z0-9]*[A-Z][a-zA-Z0-9]*\b/g) || []).length;
82
+ const snake = (content.match(/\b[a-z][a-z0-9]*_[a-z][a-z0-9]*\b/g) || []).length;
83
+ const total = camel + snake;
84
+ return total > 0 ? camel / total : 0.5;
85
+ },
86
+ },
87
+ {
88
+ name: 'prefix-bool',
89
+ category: 'naming',
90
+ extract: (content) => {
91
+ const boolNames = (content.match(/\b(?:is|has|can|should|will|did|was)\w+/g) || []).length;
92
+ const allVars = (content.match(/(?:const|let|var)\s+\w+/g) || []).length;
93
+ return allVars > 0 ? Math.min(1, boolNames / (allVars * 0.2)) : 0.5;
94
+ },
95
+ },
96
+ {
97
+ name: 'constant-naming',
98
+ category: 'naming',
99
+ extract: (content) => {
100
+ const screaming = (content.match(/\b[A-Z][A-Z0-9_]{2,}\b/g) || []).length;
101
+ const allConst = (content.match(/const\s+\w+/g) || []).length;
102
+ return allConst > 0 ? Math.min(1, screaming / (allConst * 0.3)) : 0.5;
103
+ },
104
+ },
105
+ // Structure genes
106
+ {
107
+ name: 'arrow-fn-ratio',
108
+ category: 'structure',
109
+ extract: (content) => {
110
+ const arrow = (content.match(/=>/g) || []).length;
111
+ const regular = (content.match(/function\s+\w+/g) || []).length;
112
+ const total = arrow + regular;
113
+ return total > 0 ? arrow / total : 0.5;
114
+ },
115
+ },
116
+ {
117
+ name: 'destructuring-usage',
118
+ category: 'structure',
119
+ extract: (content) => {
120
+ const destructured = (content.match(/(?:const|let)\s*\{[^}]+\}\s*=/g) || []).length;
121
+ const allDecl = (content.match(/(?:const|let|var)\s+\w+/g) || []).length;
122
+ return allDecl > 0 ? Math.min(1, destructured / (allDecl * 0.3)) : 0;
123
+ },
124
+ },
125
+ {
126
+ name: 'optional-chaining',
127
+ category: 'structure',
128
+ extract: (content) => {
129
+ const optChain = (content.match(/\?\./g) || []).length;
130
+ const dotAccess = (content.match(/\.\w+/g) || []).length;
131
+ return dotAccess > 0 ? Math.min(1, optChain / (dotAccess * 0.1)) : 0;
132
+ },
133
+ },
134
+ {
135
+ name: 'spread-usage',
136
+ category: 'structure',
137
+ extract: (content) => {
138
+ const spreads = (content.match(/\.{3}\w+/g) || []).length;
139
+ return Math.min(1, spreads / 20);
140
+ },
141
+ },
142
+ {
143
+ name: 'export-style',
144
+ category: 'structure',
145
+ extract: (content) => {
146
+ const named = (content.match(/export\s+(?:const|function|class|interface|type|enum)/g) || []).length;
147
+ const defaultExport = (content.match(/export\s+default/g) || []).length;
148
+ const total = named + defaultExport;
149
+ return total > 0 ? named / total : 0.5; // 1 = all named, 0 = all default
150
+ },
151
+ },
152
+ // Complexity genes
153
+ {
154
+ name: 'avg-fn-length',
155
+ category: 'complexity',
156
+ extract: (_content, lines) => {
157
+ let fnCount = 0;
158
+ let totalFnLines = 0;
159
+ let depth = 0;
160
+ let inFn = false;
161
+ let fnStart = 0;
162
+ for (let i = 0; i < lines.length; i++) {
163
+ if (/(?:function|=>)\s*\{/.test(lines[i]) || /(?:function|=>)/.test(lines[i])) {
164
+ if (!inFn) {
165
+ inFn = true;
166
+ fnStart = i;
167
+ }
168
+ }
169
+ for (const ch of lines[i]) {
170
+ if (ch === '{')
171
+ depth++;
172
+ if (ch === '}') {
173
+ depth--;
174
+ if (depth === 0 && inFn) {
175
+ fnCount++;
176
+ totalFnLines += i - fnStart;
177
+ inFn = false;
178
+ }
179
+ }
180
+ }
181
+ }
182
+ if (fnCount === 0)
183
+ return 0.5;
184
+ const avg = totalFnLines / fnCount;
185
+ return Math.min(1, avg / 50); // Normalize to 50 lines
186
+ },
187
+ },
188
+ {
189
+ name: 'nesting-depth',
190
+ category: 'complexity',
191
+ extract: (_content, lines) => {
192
+ let maxDepth = 0;
193
+ let currentDepth = 0;
194
+ for (const line of lines) {
195
+ for (const ch of line) {
196
+ if (ch === '{') {
197
+ currentDepth++;
198
+ maxDepth = Math.max(maxDepth, currentDepth);
199
+ }
200
+ if (ch === '}')
201
+ currentDepth--;
202
+ }
203
+ }
204
+ return Math.min(1, maxDepth / 8);
205
+ },
206
+ },
207
+ // Documentation genes
208
+ {
209
+ name: 'jsdoc-coverage',
210
+ category: 'documentation',
211
+ extract: (content) => {
212
+ const jsdocs = (content.match(/\/\*\*[\s\S]*?\*\//g) || []).length;
213
+ const functions = (content.match(/(?:function|=>|class)\s/g) || []).length;
214
+ return functions > 0 ? Math.min(1, jsdocs / functions) : 0;
215
+ },
216
+ },
217
+ {
218
+ name: 'inline-comments',
219
+ category: 'documentation',
220
+ extract: (_content, lines) => {
221
+ const comments = lines.filter(l => /^\s*\/\//.test(l)).length;
222
+ return lines.length > 0 ? Math.min(1, comments / (lines.length * 0.15)) : 0;
223
+ },
224
+ },
225
+ // Error handling genes
226
+ {
227
+ name: 'try-catch-density',
228
+ category: 'error-handling',
229
+ extract: (content, lines) => {
230
+ const tryCatch = (content.match(/try\s*\{/g) || []).length;
231
+ return lines.length > 0 ? Math.min(1, tryCatch / (lines.length * 0.02)) : 0;
232
+ },
233
+ },
234
+ {
235
+ name: 'custom-errors',
236
+ category: 'error-handling',
237
+ extract: (content) => {
238
+ const customErr = (content.match(/class\s+\w+Error\s+extends/g) || []).length;
239
+ return Math.min(1, customErr / 3);
240
+ },
241
+ },
242
+ // Typing genes
243
+ {
244
+ name: 'type-annotation-density',
245
+ category: 'typing',
246
+ extract: (content) => {
247
+ const typeAnnotations = (content.match(/:\s*(?:string|number|boolean|any|unknown|void|never|null|undefined|\w+(?:<[^>]+>)?)\b/g) || []).length;
248
+ const variables = (content.match(/(?:const|let|var|param|return)\s/g) || []).length;
249
+ return variables > 0 ? Math.min(1, typeAnnotations / variables) : 0.5;
250
+ },
251
+ },
252
+ {
253
+ name: 'generic-usage',
254
+ category: 'typing',
255
+ extract: (content) => {
256
+ const generics = (content.match(/<\s*[A-Z]\w*(?:\s*(?:extends|=)[^>]+)?>/g) || []).length;
257
+ return Math.min(1, generics / 10);
258
+ },
259
+ },
260
+ // Async patterns
261
+ {
262
+ name: 'async-await-ratio',
263
+ category: 'async-patterns',
264
+ extract: (content) => {
265
+ const awaits = (content.match(/await\s/g) || []).length;
266
+ const thenChains = (content.match(/\.then\s*\(/g) || []).length;
267
+ const total = awaits + thenChains;
268
+ return total > 0 ? awaits / total : 0.5;
269
+ },
270
+ },
271
+ // Functional vs OOP
272
+ {
273
+ name: 'functional-style',
274
+ category: 'functional',
275
+ extract: (content) => {
276
+ const funcPatterns = (content.match(/\.map\(|\.filter\(|\.reduce\(|\.flatMap\(|\.some\(|\.every\(|\.find\(/g) || []).length;
277
+ const imperativePatterns = (content.match(/for\s*\(|while\s*\(|\.forEach\(/g) || []).length;
278
+ const total = funcPatterns + imperativePatterns;
279
+ return total > 0 ? funcPatterns / total : 0.5;
280
+ },
281
+ },
282
+ {
283
+ name: 'class-usage',
284
+ category: 'oop',
285
+ extract: (content) => {
286
+ const classes = (content.match(/\bclass\s+\w+/g) || []).length;
287
+ const functions = (content.match(/(?:function\s+\w+|const\s+\w+\s*=\s*(?:async\s+)?\()/g) || []).length;
288
+ const total = classes + functions;
289
+ return total > 0 ? classes / total : 0.5;
290
+ },
291
+ },
292
+ ];
293
+ // ── Code DNA Engine ────────────────────────────────────────────────────────
294
+ export class CodeDNA {
295
+ constructor(projectDir) {
296
+ this.profiles = new Map();
297
+ this.projectDir = projectDir;
298
+ }
299
+ // ── Profile Building ────────────────────────────────────────────────
300
+ async buildProfile(name, dir) {
301
+ const targetDir = dir || this.projectDir;
302
+ const profileName = name || path.basename(targetDir);
303
+ const files = this.collectSourceFiles(targetDir);
304
+ const genes = new Map();
305
+ let totalLines = 0;
306
+ // Initialize genes
307
+ for (const extractor of GENE_EXTRACTORS) {
308
+ genes.set(extractor.name, {
309
+ trait: extractor.name,
310
+ value: 0,
311
+ samples: 0,
312
+ category: extractor.category,
313
+ });
314
+ }
315
+ // Extract genes from each file
316
+ for (const file of files) {
317
+ try {
318
+ const content = fs.readFileSync(file, 'utf-8');
319
+ const lines = content.split('\n');
320
+ totalLines += lines.length;
321
+ for (const extractor of GENE_EXTRACTORS) {
322
+ const value = extractor.extract(content, lines);
323
+ const gene = genes.get(extractor.name);
324
+ // Running average
325
+ gene.value = (gene.value * gene.samples + value) / (gene.samples + 1);
326
+ gene.samples++;
327
+ }
328
+ }
329
+ catch {
330
+ // Skip unreadable files
331
+ }
332
+ }
333
+ // Detect dominant language
334
+ const language = this.detectLanguage(files);
335
+ // Calculate fingerprint
336
+ const geneValues = Array.from(genes.values()).map(g => g.value.toFixed(3)).join(':');
337
+ const fingerprint = crypto.createHash('sha256').update(geneValues).digest('hex').slice(0, 16);
338
+ // Calculate self-consistency
339
+ const similarity = this.calculateConsistency(genes);
340
+ const profile = {
341
+ id: crypto.randomUUID(),
342
+ name: profileName,
343
+ createdAt: Date.now(),
344
+ updatedAt: Date.now(),
345
+ genes,
346
+ fingerprint,
347
+ fileCount: files.length,
348
+ totalLines,
349
+ language,
350
+ similarity,
351
+ };
352
+ this.profiles.set(profile.id, profile);
353
+ return profile;
354
+ }
355
+ analyzeFile(filePath, content) {
356
+ const lines = content.split('\n');
357
+ const result = new Map();
358
+ for (const extractor of GENE_EXTRACTORS) {
359
+ result.set(extractor.name, extractor.extract(content, lines));
360
+ }
361
+ return result;
362
+ }
363
+ // ── Comparison ──────────────────────────────────────────────────────
364
+ compare(profileA, profileB) {
365
+ const matchingGenes = [];
366
+ const divergingGenes = [];
367
+ let totalSimilarity = 0;
368
+ let geneCount = 0;
369
+ for (const [name, geneA] of profileA.genes) {
370
+ const geneB = profileB.genes.get(name);
371
+ if (!geneB)
372
+ continue;
373
+ const delta = Math.abs(geneA.value - geneB.value);
374
+ geneCount++;
375
+ if (delta < 0.15) {
376
+ matchingGenes.push(name);
377
+ totalSimilarity += 1 - delta;
378
+ }
379
+ else {
380
+ divergingGenes.push({
381
+ gene: name,
382
+ profileA: geneA.value,
383
+ profileB: geneB.value,
384
+ delta,
385
+ });
386
+ totalSimilarity += 1 - delta;
387
+ }
388
+ }
389
+ const similarity = geneCount > 0 ? totalSimilarity / geneCount : 0;
390
+ divergingGenes.sort((a, b) => b.delta - a.delta);
391
+ let verdict;
392
+ if (similarity >= 0.85)
393
+ verdict = 'same-team';
394
+ else if (similarity >= 0.65)
395
+ verdict = 'similar-style';
396
+ else if (similarity >= 0.4)
397
+ verdict = 'different-style';
398
+ else
399
+ verdict = 'inconsistent';
400
+ return { similarity, matchingGenes, divergingGenes, verdict };
401
+ }
402
+ compareFileToProfile(filePath, content, profileId) {
403
+ const profile = this.profiles.get(profileId);
404
+ if (!profile)
405
+ return null;
406
+ const fileGenes = this.analyzeFile(filePath, content);
407
+ const fileProfile = {
408
+ id: 'temp',
409
+ name: path.basename(filePath),
410
+ createdAt: Date.now(),
411
+ updatedAt: Date.now(),
412
+ genes: new Map(),
413
+ fingerprint: '',
414
+ fileCount: 1,
415
+ totalLines: content.split('\n').length,
416
+ language: path.extname(filePath).slice(1),
417
+ similarity: 1,
418
+ };
419
+ for (const [name, value] of fileGenes) {
420
+ const extractor = GENE_EXTRACTORS.find(e => e.name === name);
421
+ if (extractor) {
422
+ fileProfile.genes.set(name, {
423
+ trait: name,
424
+ value,
425
+ samples: 1,
426
+ category: extractor.category,
427
+ });
428
+ }
429
+ }
430
+ return this.compare(profile, fileProfile);
431
+ }
432
+ // ── Style Consistency ───────────────────────────────────────────────
433
+ async checkConsistency(dir) {
434
+ const targetDir = dir || this.projectDir;
435
+ const files = this.collectSourceFiles(targetDir);
436
+ // First build the overall profile
437
+ const profile = await this.buildProfile('consistency-check', targetDir);
438
+ const fileScores = [];
439
+ const geneViolations = new Map();
440
+ for (const file of files.slice(0, 200)) {
441
+ try {
442
+ const content = fs.readFileSync(file, 'utf-8');
443
+ const fileGenes = this.analyzeFile(file, content);
444
+ const violations = [];
445
+ let scoreSum = 0;
446
+ let scoreCount = 0;
447
+ for (const [name, value] of fileGenes) {
448
+ const profileGene = profile.genes.get(name);
449
+ if (!profileGene || profileGene.samples < 3)
450
+ continue;
451
+ const delta = Math.abs(value - profileGene.value);
452
+ scoreSum += 1 - delta;
453
+ scoreCount++;
454
+ if (delta > 0.3) {
455
+ violations.push(`${name}: expected ~${profileGene.value.toFixed(2)}, got ${value.toFixed(2)}`);
456
+ if (!geneViolations.has(name)) {
457
+ geneViolations.set(name, { expected: profileGene.value, actuals: [], files: [] });
458
+ }
459
+ const gv = geneViolations.get(name);
460
+ gv.actuals.push(value);
461
+ gv.files.push(path.relative(this.projectDir, file));
462
+ }
463
+ }
464
+ const score = scoreCount > 0 ? scoreSum / scoreCount : 1;
465
+ fileScores.push({
466
+ file: path.relative(this.projectDir, file),
467
+ score,
468
+ violations,
469
+ });
470
+ }
471
+ catch {
472
+ // Skip
473
+ }
474
+ }
475
+ const topViolations = Array.from(geneViolations.entries())
476
+ .map(([gene, data]) => ({
477
+ gene,
478
+ expected: data.expected,
479
+ actual: data.actuals.reduce((s, v) => s + v, 0) / data.actuals.length,
480
+ files: data.files.slice(0, 5),
481
+ }))
482
+ .sort((a, b) => b.files.length - a.files.length)
483
+ .slice(0, 10);
484
+ const overall = fileScores.length > 0
485
+ ? fileScores.reduce((s, f) => s + f.score, 0) / fileScores.length
486
+ : 1;
487
+ const recommendations = this.generateRecommendations(topViolations, profile);
488
+ return { overall, fileScores, topViolations, recommendations };
489
+ }
490
+ generateRecommendations(violations, profile) {
491
+ const recs = [];
492
+ for (const v of violations.slice(0, 5)) {
493
+ switch (v.gene) {
494
+ case 'semicolons':
495
+ recs.push(v.expected > 0.7 ? 'Enforce semicolons consistently across all files' : 'Consider removing semicolons to match project style');
496
+ break;
497
+ case 'single-quotes':
498
+ recs.push(v.expected > 0.7 ? 'Use single quotes consistently' : 'Use double quotes consistently');
499
+ break;
500
+ case 'indent-size':
501
+ recs.push(`Standardize indentation to ${Math.round(v.expected * 8)} spaces`);
502
+ break;
503
+ case 'arrow-fn-ratio':
504
+ recs.push(v.expected > 0.7 ? 'Prefer arrow functions over function declarations' : 'Use function declarations for consistency');
505
+ break;
506
+ case 'jsdoc-coverage':
507
+ recs.push('Improve JSDoc coverage to match project standard');
508
+ break;
509
+ case 'try-catch-density':
510
+ recs.push('Add more error handling to match project patterns');
511
+ break;
512
+ case 'type-annotation-density':
513
+ recs.push('Add more type annotations for consistency');
514
+ break;
515
+ default:
516
+ recs.push(`Standardize ${v.gene} across the codebase`);
517
+ }
518
+ }
519
+ return recs;
520
+ }
521
+ // ── Helpers ──────────────────────────────────────────────────────────
522
+ calculateConsistency(genes) {
523
+ // Consistency = how close gene values are to 0 or 1 (strong preference vs mixed)
524
+ let totalClarity = 0;
525
+ let count = 0;
526
+ for (const gene of genes.values()) {
527
+ if (gene.samples < 2)
528
+ continue;
529
+ // Distance from 0.5 (ambiguous) — higher = more consistent
530
+ const clarity = Math.abs(gene.value - 0.5) * 2; // 0-1
531
+ totalClarity += clarity;
532
+ count++;
533
+ }
534
+ return count > 0 ? totalClarity / count : 0.5;
535
+ }
536
+ collectSourceFiles(dir, maxFiles = 300) {
537
+ const files = [];
538
+ const extensions = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.py', '.go', '.rs', '.java', '.kt', '.rb', '.vue', '.svelte']);
539
+ const ignore = new Set(['node_modules', '.git', 'dist', 'build', 'out', '.next', 'coverage', 'vendor']);
540
+ const walk = (d, depth) => {
541
+ if (depth > 6 || files.length >= maxFiles)
542
+ return;
543
+ try {
544
+ const entries = fs.readdirSync(d, { withFileTypes: true });
545
+ for (const entry of entries) {
546
+ if (files.length >= maxFiles)
547
+ break;
548
+ if (entry.isDirectory() && !ignore.has(entry.name) && !entry.name.startsWith('.')) {
549
+ walk(path.join(d, entry.name), depth + 1);
550
+ }
551
+ else if (entry.isFile() && extensions.has(path.extname(entry.name))) {
552
+ files.push(path.join(d, entry.name));
553
+ }
554
+ }
555
+ }
556
+ catch { /* skip */ }
557
+ };
558
+ walk(dir, 0);
559
+ return files;
560
+ }
561
+ detectLanguage(files) {
562
+ const extCount = new Map();
563
+ for (const file of files) {
564
+ const ext = path.extname(file);
565
+ extCount.set(ext, (extCount.get(ext) || 0) + 1);
566
+ }
567
+ let maxExt = '.ts';
568
+ let maxCount = 0;
569
+ for (const [ext, count] of extCount) {
570
+ if (count > maxCount) {
571
+ maxExt = ext;
572
+ maxCount = count;
573
+ }
574
+ }
575
+ const langMap = {
576
+ '.ts': 'typescript', '.tsx': 'typescript', '.js': 'javascript', '.jsx': 'javascript',
577
+ '.py': 'python', '.go': 'go', '.rs': 'rust', '.java': 'java', '.kt': 'kotlin',
578
+ '.rb': 'ruby', '.vue': 'vue', '.svelte': 'svelte',
579
+ };
580
+ return langMap[maxExt] || 'unknown';
581
+ }
582
+ getProfile(id) {
583
+ return this.profiles.get(id);
584
+ }
585
+ getAllProfiles() {
586
+ return Array.from(this.profiles.values());
587
+ }
588
+ stats() {
589
+ const profiles = Array.from(this.profiles.values());
590
+ const totalGenes = profiles.reduce((s, p) => s + p.genes.size, 0);
591
+ const avgConsistency = profiles.length > 0
592
+ ? profiles.reduce((s, p) => s + p.similarity, 0) / profiles.length
593
+ : 0;
594
+ const dominantStyle = {};
595
+ for (const profile of profiles) {
596
+ for (const [name, gene] of profile.genes) {
597
+ if (gene.samples >= 3) {
598
+ dominantStyle[name] = gene.value;
599
+ }
600
+ }
601
+ }
602
+ return {
603
+ profiles: profiles.length,
604
+ totalGenes,
605
+ avgConsistency,
606
+ dominantStyle,
607
+ language: profiles[0]?.language || 'unknown',
608
+ };
609
+ }
610
+ }
611
+ //# sourceMappingURL=code-dna.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-dna.js","sourceRoot":"","sources":["../../src/brain/code-dna.ts"],"names":[],"mappings":"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"}