@theihtisham/agent-shadow-brain 1.2.0 → 3.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 (117) hide show
  1. package/README.md +837 -73
  2. package/dist/adapters/aider.d.ts +11 -0
  3. package/dist/adapters/aider.d.ts.map +1 -0
  4. package/dist/adapters/aider.js +149 -0
  5. package/dist/adapters/aider.js.map +1 -0
  6. package/dist/adapters/index.d.ts +3 -1
  7. package/dist/adapters/index.d.ts.map +1 -1
  8. package/dist/adapters/index.js +5 -3
  9. package/dist/adapters/index.js.map +1 -1
  10. package/dist/adapters/roo-code.d.ts +14 -0
  11. package/dist/adapters/roo-code.d.ts.map +1 -0
  12. package/dist/adapters/roo-code.js +186 -0
  13. package/dist/adapters/roo-code.js.map +1 -0
  14. package/dist/brain/accessibility-checker.d.ts +10 -0
  15. package/dist/brain/accessibility-checker.d.ts.map +1 -0
  16. package/dist/brain/accessibility-checker.js +379 -0
  17. package/dist/brain/accessibility-checker.js.map +1 -0
  18. package/dist/brain/adr-engine.d.ts +58 -0
  19. package/dist/brain/adr-engine.d.ts.map +1 -0
  20. package/dist/brain/adr-engine.js +400 -0
  21. package/dist/brain/adr-engine.js.map +1 -0
  22. package/dist/brain/api-contract-analyzer.d.ts +19 -0
  23. package/dist/brain/api-contract-analyzer.d.ts.map +1 -0
  24. package/dist/brain/api-contract-analyzer.js +251 -0
  25. package/dist/brain/api-contract-analyzer.js.map +1 -0
  26. package/dist/brain/ast-analyzer.d.ts +23 -0
  27. package/dist/brain/ast-analyzer.d.ts.map +1 -0
  28. package/dist/brain/ast-analyzer.js +462 -0
  29. package/dist/brain/ast-analyzer.js.map +1 -0
  30. package/dist/brain/code-age-analyzer.d.ts +11 -0
  31. package/dist/brain/code-age-analyzer.d.ts.map +1 -0
  32. package/dist/brain/code-age-analyzer.js +152 -0
  33. package/dist/brain/code-age-analyzer.js.map +1 -0
  34. package/dist/brain/code-similarity.d.ts +43 -0
  35. package/dist/brain/code-similarity.d.ts.map +1 -0
  36. package/dist/brain/code-similarity.js +227 -0
  37. package/dist/brain/code-similarity.js.map +1 -0
  38. package/dist/brain/config-drift-detector.d.ts +13 -0
  39. package/dist/brain/config-drift-detector.d.ts.map +1 -0
  40. package/dist/brain/config-drift-detector.js +198 -0
  41. package/dist/brain/config-drift-detector.js.map +1 -0
  42. package/dist/brain/context-completion.d.ts +39 -0
  43. package/dist/brain/context-completion.d.ts.map +1 -0
  44. package/dist/brain/context-completion.js +851 -0
  45. package/dist/brain/context-completion.js.map +1 -0
  46. package/dist/brain/dead-code-eliminator.d.ts +16 -0
  47. package/dist/brain/dead-code-eliminator.d.ts.map +1 -0
  48. package/dist/brain/dead-code-eliminator.js +359 -0
  49. package/dist/brain/dead-code-eliminator.js.map +1 -0
  50. package/dist/brain/dependency-graph.d.ts +35 -0
  51. package/dist/brain/dependency-graph.d.ts.map +1 -0
  52. package/dist/brain/dependency-graph.js +310 -0
  53. package/dist/brain/dependency-graph.js.map +1 -0
  54. package/dist/brain/env-analyzer.d.ts +13 -0
  55. package/dist/brain/env-analyzer.d.ts.map +1 -0
  56. package/dist/brain/env-analyzer.js +277 -0
  57. package/dist/brain/env-analyzer.js.map +1 -0
  58. package/dist/brain/i18n-detector.d.ts +12 -0
  59. package/dist/brain/i18n-detector.d.ts.map +1 -0
  60. package/dist/brain/i18n-detector.js +242 -0
  61. package/dist/brain/i18n-detector.js.map +1 -0
  62. package/dist/brain/learning-engine.d.ts +54 -0
  63. package/dist/brain/learning-engine.d.ts.map +1 -0
  64. package/dist/brain/learning-engine.js +855 -0
  65. package/dist/brain/learning-engine.js.map +1 -0
  66. package/dist/brain/license-compliance.d.ts +13 -0
  67. package/dist/brain/license-compliance.d.ts.map +1 -0
  68. package/dist/brain/license-compliance.js +213 -0
  69. package/dist/brain/license-compliance.js.map +1 -0
  70. package/dist/brain/llm-client.d.ts.map +1 -1
  71. package/dist/brain/llm-client.js +3 -0
  72. package/dist/brain/llm-client.js.map +1 -1
  73. package/dist/brain/mcp-server.d.ts +30 -0
  74. package/dist/brain/mcp-server.d.ts.map +1 -0
  75. package/dist/brain/mcp-server.js +408 -0
  76. package/dist/brain/mcp-server.js.map +1 -0
  77. package/dist/brain/multi-project.d.ts +13 -0
  78. package/dist/brain/multi-project.d.ts.map +1 -0
  79. package/dist/brain/multi-project.js +163 -0
  80. package/dist/brain/multi-project.js.map +1 -0
  81. package/dist/brain/mutation-advisor.d.ts +11 -0
  82. package/dist/brain/mutation-advisor.d.ts.map +1 -0
  83. package/dist/brain/mutation-advisor.js +154 -0
  84. package/dist/brain/mutation-advisor.js.map +1 -0
  85. package/dist/brain/neural-mesh.d.ts +69 -0
  86. package/dist/brain/neural-mesh.d.ts.map +1 -0
  87. package/dist/brain/neural-mesh.js +677 -0
  88. package/dist/brain/neural-mesh.js.map +1 -0
  89. package/dist/brain/orchestrator.d.ts +159 -2
  90. package/dist/brain/orchestrator.d.ts.map +1 -1
  91. package/dist/brain/orchestrator.js +478 -0
  92. package/dist/brain/orchestrator.js.map +1 -1
  93. package/dist/brain/perf-profiler.d.ts +14 -0
  94. package/dist/brain/perf-profiler.d.ts.map +1 -0
  95. package/dist/brain/perf-profiler.js +289 -0
  96. package/dist/brain/perf-profiler.js.map +1 -0
  97. package/dist/brain/semantic-analyzer.d.ts +46 -0
  98. package/dist/brain/semantic-analyzer.d.ts.map +1 -0
  99. package/dist/brain/semantic-analyzer.js +496 -0
  100. package/dist/brain/semantic-analyzer.js.map +1 -0
  101. package/dist/brain/team-mode.d.ts +27 -0
  102. package/dist/brain/team-mode.d.ts.map +1 -0
  103. package/dist/brain/team-mode.js +262 -0
  104. package/dist/brain/team-mode.js.map +1 -0
  105. package/dist/brain/type-safety.d.ts +13 -0
  106. package/dist/brain/type-safety.d.ts.map +1 -0
  107. package/dist/brain/type-safety.js +217 -0
  108. package/dist/brain/type-safety.js.map +1 -0
  109. package/dist/cli.js +998 -3
  110. package/dist/cli.js.map +1 -1
  111. package/dist/index.d.ts +25 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +29 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/types.d.ts +379 -2
  116. package/dist/types.d.ts.map +1 -1
  117. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-detector.d.ts","sourceRoot":"","sources":["../../src/brain/i18n-detector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoDtD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,cAAc,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAerE,OAAO,CAAC,iBAAiB;IAgBzB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE;IAoH5D,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,YAAY;CAqBrB"}
@@ -0,0 +1,242 @@
1
+ // src/brain/i18n-detector.ts — Internationalization (i18n) readiness checker
2
+ // v3.0.0 — Detects hardcoded strings, date/number format issues, missing RTL support
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
+ '__tests__', '__test__', 'test', 'tests', 'spec',
8
+ ]);
9
+ const CODE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte']);
10
+ // Common English words that suggest hardcoded UI text
11
+ const UI_PATTERNS = [
12
+ // String literals in JSX/HTML attributes that look like user-facing text
13
+ /placeholder\s*=\s*["']([A-Z][^"']{3,})["']/g,
14
+ /title\s*=\s*["']([A-Z][^"']{3,})["']/g,
15
+ /label\s*=\s*["']([A-Z][^"']{3,})["']/g,
16
+ /aria-label\s*=\s*["']([A-Z][^"']{3,})["']/g,
17
+ /alt\s*=\s*["']([A-Z][^"']{3,})["']/g,
18
+ // Button text in JSX
19
+ />\s*([A-Z][a-z]+(\s+[A-Z]?[a-z]+){1,5})\s*</g,
20
+ // Error messages as string literals
21
+ /throw\s+new\s+\w+Error\s*\(\s*["']([A-Z][^"']{10,})["']/g,
22
+ // Alert/confirm messages
23
+ /\balert\s*\(\s*["']([A-Z][^"']{5,})["']/g,
24
+ /\bconfirm\s*\(\s*["']([A-Z][^"']{5,})["']/g,
25
+ // console.log with descriptive text (might be user-facing in some contexts)
26
+ /toast\s*\(\s*["']([A-Z][^"']{5,})["']/g,
27
+ /notification\s*\.\s*(success|error|warning|info)\s*\(\s*["']([A-Z][^"']{5,})["']/g,
28
+ ];
29
+ // Date format patterns that aren't i18n-aware
30
+ const DATE_PATTERNS = [
31
+ { regex: /\bnew\s+Date\(\s*\)\.to(Locale)?DateString\s*\(\s*\)/g, type: 'date-format' },
32
+ { regex: /\btoLocaleDateString\s*\(\s*["']en["']/g, type: 'date-format' },
33
+ { regex: /\bgetMonth\(\)\s*\+\s*1/g, type: 'date-format' },
34
+ { regex: /\bgetFullYear\(\)\s*-\s*\d{2}/g, type: 'date-format' },
35
+ ];
36
+ // Number format patterns
37
+ const NUMBER_PATTERNS = [
38
+ { regex: /\btoFixed\s*\(\s*\d+\s*\)/g, type: 'number-format' },
39
+ { regex: /\b\.toLocaleString\s*\(\s*\)/g, type: 'number-format' },
40
+ ];
41
+ // String concatenation with variables (likely needs interpolation)
42
+ const CONCAT_PATTERNS = [
43
+ /["'][A-Za-z\s]+\s*["']\s*\+\s*\w+/g,
44
+ /\w+\s*\+\s*["']\s+[A-Za-z\s]+["']/g,
45
+ /`[^`]*\$\{[^}]+\}[^`]*[A-Za-z]{3,}[^`]*`/g, // template literals with text
46
+ ];
47
+ export class I18nDetector {
48
+ constructor(projectDir) {
49
+ this.projectDir = projectDir;
50
+ }
51
+ async analyzeProject(maxFiles = 150) {
52
+ const files = this.collectFiles(this.projectDir, maxFiles);
53
+ const allIssues = [];
54
+ // Check if i18n library is already present
55
+ const hasI18n = this.detectI18nLibrary();
56
+ for (const filePath of files) {
57
+ const issues = this.analyzeFile(filePath, hasI18n);
58
+ allIssues.push(...issues);
59
+ }
60
+ return allIssues.map(issue => this.issueToInsight(issue, hasI18n));
61
+ }
62
+ detectI18nLibrary() {
63
+ const pkgPath = path.join(this.projectDir, 'package.json');
64
+ try {
65
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
66
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
67
+ return !!(allDeps['i18next'] || allDeps['react-i18next'] || allDeps['vue-i18n'] ||
68
+ allDeps['@angular/localize'] || allDeps['svelte-i18n'] || allDeps['next-intl'] ||
69
+ allDeps['next-i18next'] || allDeps['react-intl'] || allDeps['formatjs'] ||
70
+ allDeps['lingui'] || allDeps['@lingui/core']);
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ analyzeFile(filePath, hasI18n) {
77
+ let content;
78
+ try {
79
+ content = fs.readFileSync(filePath, 'utf-8');
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ const issues = [];
85
+ const lines = content.split('\n');
86
+ const relPath = path.relative(this.projectDir, filePath);
87
+ // Skip test files
88
+ if (relPath.includes('.test.') || relPath.includes('.spec.') || relPath.includes('__tests__')) {
89
+ return issues;
90
+ }
91
+ // Detect hardcoded UI strings
92
+ for (let i = 0; i < lines.length; i++) {
93
+ const line = lines[i];
94
+ const lineNum = i + 1;
95
+ // Check for UI text patterns
96
+ for (const pattern of UI_PATTERNS) {
97
+ pattern.lastIndex = 0;
98
+ const match = pattern.exec(line);
99
+ if (match) {
100
+ const text = match[1] || match[0];
101
+ // Skip if it looks like code, not text
102
+ if (this.isCodeNotText(text))
103
+ continue;
104
+ issues.push({
105
+ type: 'hardcoded-string',
106
+ file: relPath,
107
+ line: lineNum,
108
+ content: text.slice(0, 100),
109
+ suggestion: hasI18n
110
+ ? `Replace with i18n translation key: t('key')`
111
+ : `Extract to a translations file or use an i18n library`,
112
+ severity: 'medium',
113
+ });
114
+ }
115
+ }
116
+ // Check for string concatenation
117
+ for (const concatPattern of CONCAT_PATTERNS) {
118
+ concatPattern.lastIndex = 0;
119
+ if (concatPattern.test(line)) {
120
+ // Avoid duplicates
121
+ const existing = issues.find(iss => iss.line === lineNum && iss.type === 'concatenation');
122
+ if (!existing) {
123
+ issues.push({
124
+ type: 'concatenation',
125
+ file: relPath,
126
+ line: lineNum,
127
+ content: line.trim().slice(0, 100),
128
+ suggestion: 'Use ICU message format or interpolation for proper i18n: `{variable}` instead of string concatenation',
129
+ severity: 'high',
130
+ });
131
+ }
132
+ }
133
+ }
134
+ }
135
+ // Check date format issues
136
+ for (const { regex, type } of DATE_PATTERNS) {
137
+ regex.lastIndex = 0;
138
+ let match;
139
+ while ((match = regex.exec(content)) !== null) {
140
+ const line = content.substring(0, match.index).split('\n').length;
141
+ issues.push({
142
+ type,
143
+ file: relPath,
144
+ line,
145
+ content: match[0],
146
+ suggestion: 'Use Intl.DateTimeFormat with explicit locale or i18n library date formatting',
147
+ severity: 'low',
148
+ });
149
+ }
150
+ }
151
+ // Check number format issues
152
+ for (const { regex, type } of NUMBER_PATTERNS) {
153
+ regex.lastIndex = 0;
154
+ let match;
155
+ while ((match = regex.exec(content)) !== null) {
156
+ const line = content.substring(0, match.index).split('\n').length;
157
+ issues.push({
158
+ type,
159
+ file: relPath,
160
+ line,
161
+ content: match[0],
162
+ suggestion: 'Use Intl.NumberFormat with locale for proper number formatting (decimals, separators, currency)',
163
+ severity: 'low',
164
+ });
165
+ }
166
+ }
167
+ // Check for pluralization issues (hardcoded "s" for plural)
168
+ const pluralRegex = /\+\s*["']s["']\s*|\?\s*["']s["']\s*:\s*["']["']/g;
169
+ let pluralMatch;
170
+ while ((pluralMatch = pluralRegex.exec(content)) !== null) {
171
+ const line = content.substring(0, pluralMatch.index).split('\n').length;
172
+ issues.push({
173
+ type: 'pluralization',
174
+ file: relPath,
175
+ line,
176
+ content: pluralMatch[0],
177
+ suggestion: 'Use ICU plural format: `{count, plural, one {item} other {items}}` for proper pluralization across languages',
178
+ severity: 'medium',
179
+ });
180
+ }
181
+ return issues;
182
+ }
183
+ isCodeNotText(text) {
184
+ // Skip if it looks like code identifiers
185
+ if (/^[a-z_]+(\.[a-z_]+)*$/.test(text))
186
+ return true;
187
+ if (/^\d+$/.test(text))
188
+ return true;
189
+ if (/^(true|false|null|undefined|void|async|await|return|const|let|var)$/.test(text))
190
+ return true;
191
+ return false;
192
+ }
193
+ issueToInsight(issue, hasI18n) {
194
+ return {
195
+ type: 'i18n',
196
+ priority: issue.severity === 'high' ? 'high' : issue.severity === 'medium' ? 'medium' : 'low',
197
+ title: `[i18n] ${issue.type}: ${issue.content.slice(0, 60)}`,
198
+ content: `i18n issue in ${issue.file}:${issue.line}\n` +
199
+ ` Type: ${issue.type}\n` +
200
+ ` Content: ${issue.content}\n` +
201
+ ` Severity: ${issue.severity}\n` +
202
+ ` Fix: ${issue.suggestion}\n` +
203
+ (hasI18n ? '' : ' Note: No i18n library detected. Consider adding i18next, react-intl, or next-intl.'),
204
+ files: [issue.file],
205
+ timestamp: new Date(),
206
+ confidence: 0.85,
207
+ metadata: { i18nType: issue.type, hasI18nLibrary: hasI18n },
208
+ };
209
+ }
210
+ collectFiles(dir, maxFiles) {
211
+ const results = [];
212
+ const walk = (currentDir, depth) => {
213
+ if (results.length >= maxFiles || depth > 10)
214
+ return;
215
+ let entries;
216
+ try {
217
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
218
+ }
219
+ catch {
220
+ return;
221
+ }
222
+ for (const entry of entries) {
223
+ if (results.length >= maxFiles)
224
+ return;
225
+ if (entry.name.startsWith('.'))
226
+ continue;
227
+ const fullPath = path.join(currentDir, entry.name);
228
+ if (entry.isDirectory()) {
229
+ if (IGNORE_DIRS.has(entry.name))
230
+ continue;
231
+ walk(fullPath, depth + 1);
232
+ }
233
+ else if (entry.isFile() && CODE_EXTENSIONS.has(path.extname(entry.name))) {
234
+ results.push(fullPath);
235
+ }
236
+ }
237
+ };
238
+ walk(dir, 0);
239
+ return results;
240
+ }
241
+ }
242
+ //# sourceMappingURL=i18n-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-detector.js","sourceRoot":"","sources":["../../src/brain/i18n-detector.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,qFAAqF;AAGrF,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ;IACtF,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CACjD,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnF,sDAAsD;AACtD,MAAM,WAAW,GAAG;IAClB,yEAAyE;IACzE,6CAA6C;IAC7C,uCAAuC;IACvC,uCAAuC;IACvC,4CAA4C;IAC5C,qCAAqC;IACrC,qBAAqB;IACrB,8CAA8C;IAC9C,oCAAoC;IACpC,0DAA0D;IAC1D,yBAAyB;IACzB,0CAA0C;IAC1C,4CAA4C;IAC5C,4EAA4E;IAC5E,wCAAwC;IACxC,mFAAmF;CACpF,CAAC;AAEF,8CAA8C;AAC9C,MAAM,aAAa,GAAG;IACpB,EAAE,KAAK,EAAE,uDAAuD,EAAE,IAAI,EAAE,aAAsB,EAAE;IAChG,EAAE,KAAK,EAAE,yCAAyC,EAAE,IAAI,EAAE,aAAsB,EAAE;IAClF,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,aAAsB,EAAE;IACnE,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,aAAsB,EAAE;CAC1E,CAAC;AAEF,yBAAyB;AACzB,MAAM,eAAe,GAAG;IACtB,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,eAAwB,EAAE;IACvE,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,eAAwB,EAAE;CAC3E,CAAC;AAEF,mEAAmE;AACnE,MAAM,eAAe,GAAG;IACtB,oCAAoC;IACpC,oCAAoC;IACpC,2CAA2C,EAAE,8BAA8B;CAC5E,CAAC;AAEF,MAAM,OAAO,YAAY;IAGvB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB,GAAG;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAgB,EAAE,CAAC;QAElC,2CAA2C;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,iBAAiB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YAChE,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;gBACrE,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;gBAC9E,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;gBACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAC7C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,OAAgB;QAC5C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEzD,kBAAkB;QAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9F,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,6BAA6B;YAC7B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;oBAClC,uCAAuC;oBACvC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAEvC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC3B,UAAU,EAAE,OAAO;4BACjB,CAAC,CAAC,6CAA6C;4BAC/C,CAAC,CAAC,uDAAuD;wBAC3D,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,iCAAiC;YACjC,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE,CAAC;gBAC5C,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;gBAC5B,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,mBAAmB;oBACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;oBAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,eAAe;4BACrB,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;4BAClC,UAAU,EAAE,uGAAuG;4BACnH,QAAQ,EAAE,MAAM;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;YAC5C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpB,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,IAAI;oBACJ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,UAAU,EAAE,8EAA8E;oBAC1F,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC;YAC9C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpB,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,IAAI;oBACJ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,UAAU,EAAE,iGAAiG;oBAC7G,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,MAAM,WAAW,GAAG,kDAAkD,CAAC;QACvE,IAAI,WAAmC,CAAC;QACxC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,OAAO;gBACb,IAAI;gBACJ,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;gBACvB,UAAU,EAAE,8GAA8G;gBAC1H,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,yCAAyC;QACzC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,qEAAqE,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClG,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,cAAc,CAAC,KAAgB,EAAE,OAAgB;QACvD,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YAC7F,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAC5D,OAAO,EACL,iBAAiB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI;gBAC7C,WAAW,KAAK,CAAC,IAAI,IAAI;gBACzB,cAAc,KAAK,CAAC,OAAO,IAAI;gBAC/B,eAAe,KAAK,CAAC,QAAQ,IAAI;gBACjC,UAAU,KAAK,CAAC,UAAU,IAAI;gBAC9B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sFAAsF,CAAC;YACzG,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE;SAC5D,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,GAAW,EAAE,QAAgB;QAChD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,UAAkB,EAAE,KAAa,EAAQ,EAAE;YACvD,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,IAAI,KAAK,GAAG,EAAE;gBAAE,OAAO;YACrD,IAAI,OAAoB,CAAC;YACzB,IAAI,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO;YAAC,CAAC;YACxF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;oBAAE,OAAO;gBACvC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAC1C,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC3E,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACb,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ import type { BrainInsight, FileChange, ProjectContext, LearnedLesson, ProjectKnowledge } from '../types.js';
2
+ import type { LLMClient } from './llm-client.js';
3
+ export declare class LearningEngine {
4
+ private store;
5
+ private storePath;
6
+ private saveTimer;
7
+ private projectDir;
8
+ private llmClient;
9
+ constructor(projectDir: string, llmClient?: LLMClient);
10
+ load(): Promise<void>;
11
+ save(): Promise<void>;
12
+ private scheduleSave;
13
+ learnFromInsights(insights: BrainInsight[], changes: FileChange[]): void;
14
+ learnFromFeedback(insightId: string, accepted: boolean): void;
15
+ learnProjectPatterns(context: ProjectContext, files: string[]): Promise<void>;
16
+ getRelevantLessons(changes: FileChange[]): LearnedLesson[];
17
+ getProjectKnowledge(projectDir: string): ProjectKnowledge | null;
18
+ getIntelligenceBoost(changes: FileChange[], context: ProjectContext): Promise<BrainInsight[]>;
19
+ getStats(): {
20
+ totalLessons: number;
21
+ totalPatterns: number;
22
+ avgConfidence: number;
23
+ projectCount: number;
24
+ };
25
+ /**
26
+ * learnFromProject — Scan the project for patterns and extract lessons.
27
+ * Called by the orchestrator during a learning cycle.
28
+ */
29
+ learnFromProject(): Promise<void>;
30
+ /**
31
+ * getLessons — Return all learned lessons in the format the orchestrator expects.
32
+ */
33
+ getLessons(): Promise<Array<{
34
+ category: string;
35
+ pattern: string;
36
+ lesson: string;
37
+ confidence: number;
38
+ }>>;
39
+ /**
40
+ * recordInsight — Record a BrainInsight as a learned lesson.
41
+ * Called by the orchestrator when critical/high-priority insights are generated.
42
+ */
43
+ recordInsight(insight: BrainInsight): Promise<void>;
44
+ cleanup(): void;
45
+ private dirExists;
46
+ private collectSourceFiles;
47
+ private createLessonFromContent;
48
+ private enrichLessonsWithLLM;
49
+ private extractPattern;
50
+ private extractCodePattern;
51
+ private contentFollowsConvention;
52
+ private generateLLMInsights;
53
+ }
54
+ //# sourceMappingURL=learning-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/brain/learning-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAmB;gBAExB,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAkB/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,OAAO,CAAC,YAAY;IAcpB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAgFxE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAwBvD,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DnF,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE;IAuC1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI1D,oBAAoB,CACxB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IA0E1B,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAexG;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAW7G;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzD,OAAO,IAAI,IAAI;YAqBD,SAAS;YAST,kBAAkB;IA+ChC,OAAO,CAAC,uBAAuB;YAiGjB,oBAAoB;IAiFlC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,wBAAwB;YAYlB,mBAAmB;CAyFlC"}