@timmeck/brain 3.13.0 → 3.14.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.
@@ -0,0 +1,387 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { readdirSync, readFileSync, statSync, existsSync } from 'node:fs';
3
+ import { resolve, join, relative } from 'node:path';
4
+ import { getLogger } from '../utils/logger.js';
5
+ const FIX_PATTERNS = /\b(fix|bug|error|crash|resolve[ds]?|patch|hotfix)\b/i;
6
+ const LOG_PATTERNS = ['*.log', '*.err', 'npm-debug.log*', 'crash-*.txt'];
7
+ const LOG_EXCLUDE_DIRS = new Set([
8
+ 'node_modules', '.git', 'dist', 'build', '.next', '__pycache__',
9
+ 'vendor', 'coverage', '.cache', '.turbo', 'target', 'out', 'venv',
10
+ ]);
11
+ const MAX_LOG_SIZE = 1024 * 1024; // 1MB
12
+ const BUILD_SYSTEMS = [
13
+ { name: 'npm', command: 'npm run build', detect: 'package.json' },
14
+ { name: 'cargo', command: 'cargo build 2>&1', detect: 'Cargo.toml' },
15
+ { name: 'make', command: 'make 2>&1', detect: 'Makefile' },
16
+ { name: 'gradle', command: './gradlew build 2>&1', detect: 'build.gradle' },
17
+ { name: 'maven', command: 'mvn compile 2>&1', detect: 'pom.xml' },
18
+ { name: 'go', command: 'go build ./... 2>&1', detect: 'go.mod' },
19
+ ];
20
+ export class ProjectScanner {
21
+ errorService;
22
+ solutionService;
23
+ gitService;
24
+ logger = getLogger();
25
+ lastScanResult = null;
26
+ constructor(errorService, solutionService, gitService) {
27
+ this.errorService = errorService;
28
+ this.solutionService = solutionService;
29
+ this.gitService = gitService;
30
+ }
31
+ getLastResult() {
32
+ return this.lastScanResult;
33
+ }
34
+ scan(directory, project, options = {}) {
35
+ const start = Date.now();
36
+ const dir = resolve(directory);
37
+ const totals = { errors: 0, solutions: 0, duplicates: 0 };
38
+ let git = null;
39
+ let logs = null;
40
+ let build = null;
41
+ if (!options.skipGit) {
42
+ try {
43
+ git = this.scanGitHistory(dir, project, options.gitDepth ?? 200);
44
+ totals.errors += git.errorsCreated;
45
+ totals.solutions += git.solutionsCreated;
46
+ totals.duplicates += git.duplicates;
47
+ }
48
+ catch (err) {
49
+ this.logger.warn(`Git scan failed: ${err.message}`);
50
+ }
51
+ }
52
+ if (!options.skipLogs) {
53
+ try {
54
+ logs = this.scanLogFiles(dir, project);
55
+ totals.errors += logs.errorsCreated;
56
+ totals.duplicates += logs.duplicates;
57
+ }
58
+ catch (err) {
59
+ this.logger.warn(`Log scan failed: ${err.message}`);
60
+ }
61
+ }
62
+ if (!options.skipBuild) {
63
+ try {
64
+ build = this.scanBuildOutput(dir, project);
65
+ totals.errors += build.errorsCreated;
66
+ }
67
+ catch (err) {
68
+ this.logger.warn(`Build scan failed: ${err.message}`);
69
+ }
70
+ }
71
+ const result = {
72
+ project,
73
+ directory: dir,
74
+ duration: Date.now() - start,
75
+ git,
76
+ logs,
77
+ build,
78
+ totals,
79
+ };
80
+ this.lastScanResult = result;
81
+ this.logger.info(`Project scan complete: ${totals.errors} errors, ${totals.solutions} solutions, ${totals.duplicates} duplicates (${result.duration}ms)`);
82
+ return result;
83
+ }
84
+ scanGitHistory(dir, project, depth = 200) {
85
+ const result = {
86
+ commitsScanned: 0,
87
+ fixCommits: 0,
88
+ errorsCreated: 0,
89
+ solutionsCreated: 0,
90
+ duplicates: 0,
91
+ };
92
+ // Get commit log
93
+ let logOutput;
94
+ try {
95
+ logOutput = execSync(`git log --oneline -${depth}`, {
96
+ cwd: dir,
97
+ timeout: 10000,
98
+ encoding: 'utf8',
99
+ }).trim();
100
+ }
101
+ catch {
102
+ this.logger.warn('Not a git repository or git not available');
103
+ return result;
104
+ }
105
+ if (!logOutput)
106
+ return result;
107
+ const commits = logOutput.split('\n').filter(Boolean);
108
+ result.commitsScanned = commits.length;
109
+ // Filter for fix commits
110
+ const fixCommits = commits.filter(line => FIX_PATTERNS.test(line));
111
+ result.fixCommits = fixCommits.length;
112
+ for (const line of fixCommits) {
113
+ const spaceIdx = line.indexOf(' ');
114
+ if (spaceIdx === -1)
115
+ continue;
116
+ const hash = line.slice(0, spaceIdx);
117
+ const message = line.slice(spaceIdx + 1);
118
+ // Get the diff for this commit
119
+ let diff;
120
+ try {
121
+ diff = execSync(`git show --stat --no-color ${hash}`, {
122
+ cwd: dir,
123
+ timeout: 5000,
124
+ encoding: 'utf8',
125
+ maxBuffer: 512 * 1024,
126
+ }).trim();
127
+ }
128
+ catch {
129
+ continue;
130
+ }
131
+ // Extract error info from commit message
132
+ const errorOutput = this.extractErrorFromCommit(message, diff);
133
+ if (!errorOutput)
134
+ continue;
135
+ // Report error
136
+ const errorResult = this.errorService.report({
137
+ project,
138
+ errorOutput,
139
+ taskContext: `git-import: ${hash.slice(0, 8)}`,
140
+ command: `git show ${hash.slice(0, 8)}`,
141
+ });
142
+ if (errorResult.isNew) {
143
+ result.errorsCreated++;
144
+ // Create solution from the fix commit
145
+ const solutionDesc = this.extractSolutionFromCommit(message, diff);
146
+ if (solutionDesc) {
147
+ this.solutionService.report({
148
+ errorId: errorResult.errorId,
149
+ description: solutionDesc,
150
+ codeChange: this.extractDiffSummary(diff),
151
+ source: 'git-import',
152
+ });
153
+ result.solutionsCreated++;
154
+ }
155
+ // Link error to commit
156
+ try {
157
+ this.gitService.linkErrorToCommit(errorResult.errorId, 0, hash, 'fixed_by');
158
+ }
159
+ catch {
160
+ // project_id 0 may fail — best effort
161
+ }
162
+ }
163
+ else {
164
+ result.duplicates++;
165
+ }
166
+ }
167
+ this.logger.info(`Git scan: ${result.commitsScanned} commits, ${result.fixCommits} fixes → ${result.errorsCreated} errors, ${result.solutionsCreated} solutions`);
168
+ return result;
169
+ }
170
+ scanLogFiles(dir, project) {
171
+ const result = {
172
+ filesScanned: 0,
173
+ errorsCreated: 0,
174
+ duplicates: 0,
175
+ };
176
+ const logFiles = this.findLogFiles(dir);
177
+ result.filesScanned = logFiles.length;
178
+ for (const filePath of logFiles) {
179
+ let content;
180
+ try {
181
+ content = readFileSync(filePath, 'utf-8');
182
+ }
183
+ catch {
184
+ continue;
185
+ }
186
+ // Split into error chunks (groups of lines with stack traces)
187
+ const errorChunks = this.extractErrorChunks(content);
188
+ const rel = relative(dir, filePath);
189
+ for (const chunk of errorChunks) {
190
+ const errorResult = this.errorService.report({
191
+ project,
192
+ errorOutput: chunk,
193
+ filePath: rel,
194
+ taskContext: `log-import: ${rel}`,
195
+ });
196
+ if (errorResult.isNew) {
197
+ result.errorsCreated++;
198
+ }
199
+ else {
200
+ result.duplicates++;
201
+ }
202
+ }
203
+ }
204
+ this.logger.info(`Log scan: ${result.filesScanned} files → ${result.errorsCreated} errors`);
205
+ return result;
206
+ }
207
+ scanBuildOutput(dir, project) {
208
+ const buildSystem = this.detectBuildSystem(dir);
209
+ if (!buildSystem) {
210
+ return { buildSystem: 'unknown', command: '', exitCode: -1, errorsCreated: 0 };
211
+ }
212
+ const result = {
213
+ buildSystem: buildSystem.name,
214
+ command: buildSystem.command,
215
+ exitCode: 0,
216
+ errorsCreated: 0,
217
+ };
218
+ let output;
219
+ try {
220
+ output = execSync(buildSystem.command, {
221
+ cwd: dir,
222
+ timeout: 60000,
223
+ encoding: 'utf8',
224
+ maxBuffer: 2 * 1024 * 1024,
225
+ stdio: ['pipe', 'pipe', 'pipe'],
226
+ });
227
+ // Build succeeded — no errors to report
228
+ return result;
229
+ }
230
+ catch (err) {
231
+ const execErr = err;
232
+ result.exitCode = execErr.status ?? 1;
233
+ output = (execErr.stderr ?? '') + '\n' + (execErr.stdout ?? '');
234
+ }
235
+ if (!output.trim())
236
+ return result;
237
+ // Parse build output for errors
238
+ const errorChunks = this.extractErrorChunks(output);
239
+ for (const chunk of errorChunks) {
240
+ const errorResult = this.errorService.report({
241
+ project,
242
+ errorOutput: chunk,
243
+ taskContext: `build-import: ${buildSystem.command}`,
244
+ command: buildSystem.command,
245
+ });
246
+ if (errorResult.isNew) {
247
+ result.errorsCreated++;
248
+ }
249
+ }
250
+ this.logger.info(`Build scan (${buildSystem.name}): exit ${result.exitCode} → ${result.errorsCreated} errors`);
251
+ return result;
252
+ }
253
+ // ─── Private Helpers ───────────────────────────────────────
254
+ extractErrorFromCommit(message, diff) {
255
+ // Try to extract meaningful error description from fix commit
256
+ const msg = message.toLowerCase();
257
+ // Common patterns: "fix: TypeError in foo", "fix(auth): null check missing"
258
+ const fixMatch = message.match(/^(?:fix|bug|hotfix|patch)(?:\([^)]+\))?:\s*(.+)/i);
259
+ if (fixMatch) {
260
+ return fixMatch[1].trim();
261
+ }
262
+ // "Fixed crash when ...", "Resolve error in ..."
263
+ const verbMatch = message.match(/(?:fix(?:ed|es)?|resolv(?:ed|es)?|patch(?:ed)?|crash)\s+(.+)/i);
264
+ if (verbMatch) {
265
+ return verbMatch[1].trim();
266
+ }
267
+ // If message mentions an error type directly
268
+ const errorTypeMatch = message.match(/(TypeError|ReferenceError|SyntaxError|RangeError|Error|Exception|ENOENT|ECONNREFUSED|segfault|panic|SIGKILL|OOM|null pointer)[:\s]+(.+)/i);
269
+ if (errorTypeMatch) {
270
+ return `${errorTypeMatch[1]}: ${errorTypeMatch[2]}`.trim();
271
+ }
272
+ // Fallback: use the whole message if it's clearly about a fix
273
+ if (FIX_PATTERNS.test(msg)) {
274
+ return message.trim();
275
+ }
276
+ return null;
277
+ }
278
+ extractSolutionFromCommit(message, diff) {
279
+ // The commit message itself describes the solution
280
+ const fixMatch = message.match(/^(?:fix|bug|hotfix|patch)(?:\([^)]+\))?:\s*(.+)/i);
281
+ if (fixMatch)
282
+ return `Fix: ${fixMatch[1].trim()}`;
283
+ return `Fix applied in commit: ${message.trim()}`;
284
+ }
285
+ extractDiffSummary(diff) {
286
+ // Get just the stat lines, not the full diff
287
+ const lines = diff.split('\n');
288
+ const statLines = lines.filter(l => l.match(/^\s*\S+\s*\|\s*\d+/) || l.match(/^\d+ files? changed/));
289
+ if (statLines.length > 0) {
290
+ return statLines.join('\n');
291
+ }
292
+ // Truncate if needed
293
+ return diff.length > 2000 ? diff.slice(0, 2000) + '\n... (truncated)' : diff;
294
+ }
295
+ findLogFiles(dir) {
296
+ const files = [];
297
+ const walk = (current, depth) => {
298
+ if (depth > 5)
299
+ return; // max recursion depth
300
+ let entries;
301
+ try {
302
+ entries = readdirSync(current, { withFileTypes: true });
303
+ }
304
+ catch {
305
+ return;
306
+ }
307
+ for (const entry of entries) {
308
+ const fullPath = join(current, entry.name);
309
+ if (entry.isDirectory()) {
310
+ if (!LOG_EXCLUDE_DIRS.has(entry.name)) {
311
+ walk(fullPath, depth + 1);
312
+ }
313
+ continue;
314
+ }
315
+ if (!entry.isFile())
316
+ continue;
317
+ // Check log patterns
318
+ const name = entry.name;
319
+ const isLog = name.endsWith('.log') ||
320
+ name.endsWith('.err') ||
321
+ name.startsWith('npm-debug.log') ||
322
+ name.match(/^crash-.*\.txt$/);
323
+ if (!isLog)
324
+ continue;
325
+ try {
326
+ const stat = statSync(fullPath);
327
+ if (stat.size > MAX_LOG_SIZE)
328
+ continue;
329
+ files.push(fullPath);
330
+ }
331
+ catch {
332
+ // skip unreadable
333
+ }
334
+ }
335
+ };
336
+ walk(dir, 0);
337
+ return files;
338
+ }
339
+ extractErrorChunks(content) {
340
+ const chunks = [];
341
+ const lines = content.split('\n');
342
+ let currentChunk = [];
343
+ let inError = false;
344
+ for (const line of lines) {
345
+ const isErrorLine = /\b(Error|Exception|FATAL|CRITICAL|panic|Traceback|segfault)\b/i.test(line) ||
346
+ /^\s+at\s+/.test(line) ||
347
+ /^\s+File\s+"/.test(line) ||
348
+ /^\s+\.{3}\s+\d+\s+more/.test(line);
349
+ if (isErrorLine) {
350
+ if (!inError) {
351
+ inError = true;
352
+ currentChunk = [];
353
+ }
354
+ currentChunk.push(line);
355
+ }
356
+ else if (inError) {
357
+ // Allow 1 non-error line in a stack trace (blank lines between frames)
358
+ if (line.trim() === '' && currentChunk.length < 50) {
359
+ currentChunk.push(line);
360
+ }
361
+ else {
362
+ // End of error chunk
363
+ if (currentChunk.length >= 1) {
364
+ chunks.push(currentChunk.join('\n').trim());
365
+ }
366
+ currentChunk = [];
367
+ inError = false;
368
+ }
369
+ }
370
+ }
371
+ // Don't forget last chunk
372
+ if (currentChunk.length >= 1) {
373
+ chunks.push(currentChunk.join('\n').trim());
374
+ }
375
+ // Deduplicate identical chunks
376
+ return [...new Set(chunks)];
377
+ }
378
+ detectBuildSystem(dir) {
379
+ for (const bs of BUILD_SYSTEMS) {
380
+ if (existsSync(join(dir, bs.detect))) {
381
+ return bs;
382
+ }
383
+ }
384
+ return null;
385
+ }
386
+ }
387
+ //# sourceMappingURL=project-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scanner.js","sourceRoot":"","sources":["../../src/services/project-scanner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain",
3
- "version": "3.13.0",
3
+ "version": "3.14.1",
4
4
  "description": "Adaptive error memory and code intelligence system with Hebbian synapse network, hybrid search, and REST API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",