@timmeck/brain-core 2.31.1 → 2.32.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.
@@ -0,0 +1,588 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { getLogger } from '../utils/logger.js';
5
+ // ── Path Guards ──────────────────────────────────────────
6
+ const PATH_WHITELIST = /^packages\/[^/]+\/src\/.+\.ts$/;
7
+ const PATH_BLACKLIST = [
8
+ 'node_modules/',
9
+ 'dist/',
10
+ '.test.ts',
11
+ '.spec.ts',
12
+ 'package.json',
13
+ 'tsconfig.json',
14
+ 'migrations/',
15
+ '.d.ts',
16
+ ];
17
+ function isPathAllowed(filePath) {
18
+ const normalized = filePath.replace(/\\/g, '/');
19
+ if (!PATH_WHITELIST.test(normalized))
20
+ return false;
21
+ return !PATH_BLACKLIST.some(b => normalized.includes(b));
22
+ }
23
+ // ── Migration ────────────────────────────────────────────
24
+ export function runSelfModificationMigration(db) {
25
+ db.exec(`
26
+ CREATE TABLE IF NOT EXISTS self_modifications (
27
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
28
+ title TEXT NOT NULL,
29
+ problem_description TEXT NOT NULL,
30
+ source_engine TEXT NOT NULL DEFAULT 'orchestrator',
31
+ target_files TEXT NOT NULL DEFAULT '[]',
32
+ generated_diff TEXT,
33
+ test_result TEXT NOT NULL DEFAULT 'pending',
34
+ test_output TEXT,
35
+ status TEXT NOT NULL DEFAULT 'proposed',
36
+ applied_at TEXT,
37
+ rollback_data TEXT,
38
+ tokens_used INTEGER DEFAULT 0,
39
+ model_used TEXT DEFAULT '',
40
+ generation_time_ms INTEGER DEFAULT 0,
41
+ created_at TEXT DEFAULT (datetime('now'))
42
+ );
43
+ CREATE INDEX IF NOT EXISTS idx_selfmod_status ON self_modifications(status);
44
+ `);
45
+ }
46
+ // ── SelfModificationEngine ───────────────────────────────
47
+ export class SelfModificationEngine {
48
+ db;
49
+ config;
50
+ log = getLogger();
51
+ contextBuilder = null;
52
+ selfScanner = null;
53
+ ts = null;
54
+ // Rate limiting
55
+ recentGenerations = [];
56
+ // Prepared statements
57
+ stmtInsert;
58
+ stmtUpdate;
59
+ stmtGet;
60
+ stmtGetPending;
61
+ stmtGetHistory;
62
+ stmtCountByStatus;
63
+ stmtCountTotal;
64
+ stmtLastModification;
65
+ stmtGetByStatus;
66
+ constructor(db, config) {
67
+ this.db = db;
68
+ this.config = {
69
+ brainName: config.brainName,
70
+ apiKey: config.apiKey ?? process.env.ANTHROPIC_API_KEY ?? '',
71
+ model: config.model ?? 'claude-sonnet-4-20250514',
72
+ maxTokens: config.maxTokens ?? 4096,
73
+ maxPerHour: config.maxPerHour ?? 3,
74
+ maxChangedLines: config.maxChangedLines ?? 200,
75
+ projectRoot: config.projectRoot ?? '',
76
+ };
77
+ runSelfModificationMigration(db);
78
+ // Crash recovery: if any modification is stuck in 'testing', restore rollback
79
+ this.recoverFromCrash();
80
+ this.stmtInsert = db.prepare(`
81
+ INSERT INTO self_modifications (title, problem_description, source_engine, target_files, status)
82
+ VALUES (?, ?, ?, ?, 'proposed')
83
+ `);
84
+ this.stmtUpdate = db.prepare(`
85
+ UPDATE self_modifications
86
+ SET generated_diff = ?, test_result = ?, test_output = ?, status = ?,
87
+ applied_at = ?, rollback_data = ?, tokens_used = ?, model_used = ?, generation_time_ms = ?
88
+ WHERE id = ?
89
+ `);
90
+ this.stmtGet = db.prepare('SELECT * FROM self_modifications WHERE id = ?');
91
+ this.stmtGetPending = db.prepare("SELECT * FROM self_modifications WHERE status IN ('ready', 'proposed') ORDER BY id DESC");
92
+ this.stmtGetHistory = db.prepare('SELECT * FROM self_modifications ORDER BY id DESC LIMIT ?');
93
+ this.stmtCountByStatus = db.prepare('SELECT status, COUNT(*) as count FROM self_modifications GROUP BY status');
94
+ this.stmtCountTotal = db.prepare('SELECT COUNT(*) as count FROM self_modifications');
95
+ this.stmtLastModification = db.prepare('SELECT created_at FROM self_modifications ORDER BY id DESC LIMIT 1');
96
+ this.stmtGetByStatus = db.prepare('SELECT * FROM self_modifications WHERE status = ? ORDER BY id DESC LIMIT ?');
97
+ }
98
+ setContextBuilder(cb) { this.contextBuilder = cb; }
99
+ setSelfScanner(scanner) { this.selfScanner = scanner; }
100
+ setThoughtStream(ts) { this.ts = ts; }
101
+ /** Propose a new self-modification. */
102
+ proposeModification(title, problem, targetFiles, sourceEngine = 'orchestrator') {
103
+ // Validate paths
104
+ for (const f of targetFiles) {
105
+ if (!isPathAllowed(f)) {
106
+ throw new Error(`Path not allowed: ${f} — only packages/*/src/**/*.ts is allowed`);
107
+ }
108
+ }
109
+ const result = this.stmtInsert.run(title, problem, sourceEngine, JSON.stringify(targetFiles));
110
+ const id = result.lastInsertRowid;
111
+ this.log.info(`[self-mod] Proposed modification #${id}: ${title}`);
112
+ this.ts?.emit('self-modification', 'analyzing', `Proposed: ${title}`, 'notable');
113
+ return this.getModification(id);
114
+ }
115
+ /** Generate code changes via Claude API. */
116
+ async generateCode(modificationId) {
117
+ const mod = this.getModification(modificationId);
118
+ if (!mod)
119
+ throw new Error(`Modification #${modificationId} not found`);
120
+ if (mod.status !== 'proposed')
121
+ throw new Error(`Modification #${modificationId} is not in 'proposed' state (current: ${mod.status})`);
122
+ // Rate limit
123
+ if (!this.checkRateLimit()) {
124
+ throw new Error(`Rate limit exceeded: max ${this.config.maxPerHour} generations per hour`);
125
+ }
126
+ if (!this.config.apiKey) {
127
+ throw new Error('ANTHROPIC_API_KEY not set');
128
+ }
129
+ // Update status
130
+ this.updateModification(modificationId, { status: 'generating' });
131
+ this.ts?.emit('self-modification', 'analyzing', `Generating code for: ${mod.title}`, 'notable');
132
+ const startTime = Date.now();
133
+ try {
134
+ // Build system prompt
135
+ let systemPrompt = '';
136
+ if (this.contextBuilder) {
137
+ const ctx = this.contextBuilder.build({
138
+ task: mod.problem_description,
139
+ trigger: 'improvement_suggestion',
140
+ language: 'typescript',
141
+ });
142
+ systemPrompt = ctx.systemPrompt;
143
+ }
144
+ // Add architecture summary from SelfScanner
145
+ if (this.selfScanner) {
146
+ const archSummary = this.selfScanner.getArchitectureSummary();
147
+ if (archSummary) {
148
+ systemPrompt += '\n\n## Eigene Codebase (Architektur-Übersicht)\n' + archSummary;
149
+ }
150
+ }
151
+ // Add target file contents
152
+ const fileContents = [];
153
+ for (const targetFile of mod.target_files) {
154
+ let content = null;
155
+ if (this.selfScanner) {
156
+ content = this.selfScanner.getFileContent(targetFile);
157
+ }
158
+ if (!content && this.config.projectRoot) {
159
+ const fullPath = path.resolve(this.config.projectRoot, targetFile);
160
+ try {
161
+ content = fs.readFileSync(fullPath, 'utf-8');
162
+ }
163
+ catch { /* file not found */ }
164
+ }
165
+ if (content) {
166
+ const truncated = content.length > 8000 ? content.substring(0, 8000) + '\n// ... (truncated)' : content;
167
+ fileContents.push(`### FILE: ${targetFile}\n\`\`\`typescript\n${truncated}\n\`\`\``);
168
+ }
169
+ }
170
+ if (fileContents.length > 0) {
171
+ systemPrompt += '\n\n## Aktueller Quellcode der Zieldateien\n' + fileContents.join('\n\n');
172
+ }
173
+ // User message
174
+ const userMessage = [
175
+ `## Aufgabe: ${mod.title}`,
176
+ '',
177
+ mod.problem_description,
178
+ '',
179
+ '## Anweisungen',
180
+ '- Ändere NUR die angegebenen Dateien',
181
+ '- Halte Änderungen minimal und fokussiert',
182
+ `- Maximal ${this.config.maxChangedLines} geänderte Zeilen`,
183
+ '- Behalte alle bestehenden Imports und Exports bei',
184
+ '- Nutze TypeScript ESM mit .js Extensions',
185
+ '',
186
+ '## Output-Format',
187
+ 'Gib für jede geänderte Datei den VOLLSTÄNDIGEN neuen Dateiinhalt aus:',
188
+ '',
189
+ '### FILE: <relativer-pfad>',
190
+ '```typescript',
191
+ '<vollständiger neuer dateiinhalt>',
192
+ '```',
193
+ '',
194
+ 'Gib NICHT nur Diffs, sondern den kompletten neuen Inhalt jeder Datei.',
195
+ ].join('\n');
196
+ // Claude API call (raw fetch, same pattern as CodeGenerator)
197
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
198
+ method: 'POST',
199
+ headers: {
200
+ 'Content-Type': 'application/json',
201
+ 'x-api-key': this.config.apiKey,
202
+ 'anthropic-version': '2023-06-01',
203
+ },
204
+ body: JSON.stringify({
205
+ model: this.config.model,
206
+ max_tokens: this.config.maxTokens,
207
+ system: systemPrompt,
208
+ messages: [{ role: 'user', content: userMessage }],
209
+ }),
210
+ });
211
+ if (!response.ok) {
212
+ const errText = await response.text();
213
+ throw new Error(`Claude API error ${response.status}: ${errText}`);
214
+ }
215
+ const result = await response.json();
216
+ const text = result.content.filter(c => c.type === 'text').map(c => c.text ?? '').join('\n');
217
+ const tokensUsed = (result.usage?.input_tokens ?? 0) + (result.usage?.output_tokens ?? 0);
218
+ const generationTimeMs = Date.now() - startTime;
219
+ // Parse response: extract file blocks
220
+ const diffs = this.parseGeneratedFiles(text, mod.target_files);
221
+ // Validate line count
222
+ let totalChangedLines = 0;
223
+ for (const diff of diffs) {
224
+ const oldLines = diff.oldContent.split('\n').length;
225
+ const newLines = diff.newContent.split('\n').length;
226
+ totalChangedLines += Math.abs(newLines - oldLines) + Math.min(oldLines, newLines);
227
+ }
228
+ if (totalChangedLines > this.config.maxChangedLines) {
229
+ this.updateModification(modificationId, {
230
+ status: 'failed',
231
+ generated_diff: JSON.stringify(diffs),
232
+ test_result: 'failed',
233
+ test_output: `Too many changed lines: ${totalChangedLines} > ${this.config.maxChangedLines}`,
234
+ tokens_used: tokensUsed,
235
+ model_used: this.config.model,
236
+ generation_time_ms: generationTimeMs,
237
+ });
238
+ throw new Error(`Generated too many changed lines: ${totalChangedLines}`);
239
+ }
240
+ this.updateModification(modificationId, {
241
+ generated_diff: JSON.stringify(diffs),
242
+ tokens_used: tokensUsed,
243
+ model_used: this.config.model,
244
+ generation_time_ms: generationTimeMs,
245
+ status: 'proposed', // back to proposed, needs testing
246
+ });
247
+ this.recentGenerations.push(Date.now());
248
+ this.log.info(`[self-mod] Generated code for #${modificationId} (${tokensUsed} tokens, ${generationTimeMs}ms, ${diffs.length} files)`);
249
+ this.ts?.emit('self-modification', 'discovering', `Code generated for: ${mod.title}`, 'notable');
250
+ return this.getModification(modificationId);
251
+ }
252
+ catch (err) {
253
+ const errMsg = err.message;
254
+ this.updateModification(modificationId, {
255
+ status: 'failed',
256
+ test_result: 'failed',
257
+ test_output: `Generation failed: ${errMsg}`,
258
+ generation_time_ms: Date.now() - startTime,
259
+ });
260
+ this.log.error(`[self-mod] Generation failed for #${modificationId}: ${errMsg}`);
261
+ throw err;
262
+ }
263
+ }
264
+ /** Test a modification by writing files, building, running tests, then restoring. */
265
+ testModification(modificationId) {
266
+ const mod = this.getModification(modificationId);
267
+ if (!mod)
268
+ throw new Error(`Modification #${modificationId} not found`);
269
+ if (!mod.generated_diff || mod.generated_diff.length === 0) {
270
+ throw new Error(`Modification #${modificationId} has no generated code`);
271
+ }
272
+ if (!this.config.projectRoot) {
273
+ throw new Error('projectRoot not configured');
274
+ }
275
+ this.updateModification(modificationId, { status: 'testing' });
276
+ this.ts?.emit('self-modification', 'analyzing', `Testing: ${mod.title}`, 'notable');
277
+ const rollbackData = [];
278
+ try {
279
+ // 1. Save originals + write new files
280
+ for (const diff of mod.generated_diff) {
281
+ const fullPath = path.resolve(this.config.projectRoot, diff.filePath);
282
+ let originalContent = '';
283
+ try {
284
+ originalContent = fs.readFileSync(fullPath, 'utf-8');
285
+ }
286
+ catch { /* new file */ }
287
+ rollbackData.push({ filePath: diff.filePath, oldContent: originalContent, newContent: diff.newContent });
288
+ fs.writeFileSync(fullPath, diff.newContent, 'utf-8');
289
+ }
290
+ // Store rollback data
291
+ this.updateModification(modificationId, { rollback_data: JSON.stringify(rollbackData) });
292
+ // 2. Build
293
+ let testOutput = '';
294
+ try {
295
+ const buildOutput = execSync('npm run build', {
296
+ cwd: this.config.projectRoot,
297
+ timeout: 60_000,
298
+ encoding: 'utf-8',
299
+ stdio: ['pipe', 'pipe', 'pipe'],
300
+ });
301
+ testOutput += `=== BUILD ===\n${buildOutput}\n`;
302
+ }
303
+ catch (err) {
304
+ const buildErr = err;
305
+ testOutput += `=== BUILD FAILED ===\n${buildErr.stderr ?? buildErr.stdout ?? 'Unknown build error'}\n`;
306
+ this.restoreFiles(rollbackData);
307
+ this.updateModification(modificationId, {
308
+ status: 'failed',
309
+ test_result: 'failed',
310
+ test_output: testOutput,
311
+ });
312
+ this.log.warn(`[self-mod] Build failed for #${modificationId}`);
313
+ return this.getModification(modificationId);
314
+ }
315
+ // 3. Test
316
+ try {
317
+ const testResult = execSync('npm test', {
318
+ cwd: this.config.projectRoot,
319
+ timeout: 120_000,
320
+ encoding: 'utf-8',
321
+ stdio: ['pipe', 'pipe', 'pipe'],
322
+ });
323
+ testOutput += `=== TESTS ===\n${testResult}\n`;
324
+ }
325
+ catch (err) {
326
+ const testErr = err;
327
+ testOutput += `=== TESTS FAILED ===\n${testErr.stderr ?? testErr.stdout ?? 'Unknown test error'}\n`;
328
+ this.restoreFiles(rollbackData);
329
+ this.updateModification(modificationId, {
330
+ status: 'failed',
331
+ test_result: 'failed',
332
+ test_output: testOutput,
333
+ });
334
+ this.log.warn(`[self-mod] Tests failed for #${modificationId}`);
335
+ return this.getModification(modificationId);
336
+ }
337
+ // 4. Restore files (test passed, but don't apply yet — wait for approval)
338
+ this.restoreFiles(rollbackData);
339
+ this.updateModification(modificationId, {
340
+ status: 'ready',
341
+ test_result: 'passed',
342
+ test_output: testOutput,
343
+ });
344
+ this.log.info(`[self-mod] Tests passed for #${modificationId} — ready for approval`);
345
+ this.ts?.emit('self-modification', 'discovering', `Self-modification ready for review: ${mod.title}`, 'breakthrough');
346
+ return this.getModification(modificationId);
347
+ }
348
+ catch (err) {
349
+ // Ensure files are restored on any unexpected error
350
+ if (rollbackData.length > 0)
351
+ this.restoreFiles(rollbackData);
352
+ this.updateModification(modificationId, {
353
+ status: 'failed',
354
+ test_result: 'failed',
355
+ test_output: `Unexpected error: ${err.message}`,
356
+ });
357
+ throw err;
358
+ }
359
+ }
360
+ /** Apply an approved modification — write files and build. */
361
+ applyModification(modificationId) {
362
+ const mod = this.getModification(modificationId);
363
+ if (!mod)
364
+ throw new Error(`Modification #${modificationId} not found`);
365
+ if (mod.status !== 'approved' && mod.status !== 'ready') {
366
+ throw new Error(`Modification #${modificationId} is not approved or ready (current: ${mod.status})`);
367
+ }
368
+ if (!mod.generated_diff || mod.generated_diff.length === 0) {
369
+ throw new Error(`Modification #${modificationId} has no generated code`);
370
+ }
371
+ if (!this.config.projectRoot)
372
+ throw new Error('projectRoot not configured');
373
+ // Save rollback data
374
+ const rollbackData = [];
375
+ for (const diff of mod.generated_diff) {
376
+ const fullPath = path.resolve(this.config.projectRoot, diff.filePath);
377
+ let originalContent = '';
378
+ try {
379
+ originalContent = fs.readFileSync(fullPath, 'utf-8');
380
+ }
381
+ catch { /* new file */ }
382
+ rollbackData.push({ filePath: diff.filePath, oldContent: originalContent, newContent: diff.newContent });
383
+ }
384
+ // Write files
385
+ for (const diff of mod.generated_diff) {
386
+ const fullPath = path.resolve(this.config.projectRoot, diff.filePath);
387
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
388
+ fs.writeFileSync(fullPath, diff.newContent, 'utf-8');
389
+ }
390
+ // Build
391
+ try {
392
+ execSync('npm run build', {
393
+ cwd: this.config.projectRoot,
394
+ timeout: 60_000,
395
+ encoding: 'utf-8',
396
+ stdio: ['pipe', 'pipe', 'pipe'],
397
+ });
398
+ }
399
+ catch (err) {
400
+ // Build failed after apply — restore
401
+ this.restoreFiles(rollbackData);
402
+ this.updateModification(modificationId, {
403
+ status: 'failed',
404
+ test_output: `Apply build failed: ${err.message}`,
405
+ });
406
+ throw new Error(`Build failed after applying: ${err.message}`);
407
+ }
408
+ this.updateModification(modificationId, {
409
+ status: 'applied',
410
+ applied_at: new Date().toISOString(),
411
+ rollback_data: JSON.stringify(rollbackData),
412
+ });
413
+ this.log.info(`[self-mod] Applied modification #${modificationId}: ${mod.title}`);
414
+ this.ts?.emit('self-modification', 'discovering', `Applied: ${mod.title}`, 'breakthrough');
415
+ return this.getModification(modificationId);
416
+ }
417
+ /** Rollback an applied modification. */
418
+ rollbackModification(modificationId) {
419
+ const mod = this.getModification(modificationId);
420
+ if (!mod)
421
+ throw new Error(`Modification #${modificationId} not found`);
422
+ if (mod.status !== 'applied')
423
+ throw new Error(`Modification #${modificationId} is not applied`);
424
+ if (!mod.rollback_data || mod.rollback_data.length === 0) {
425
+ throw new Error(`No rollback data for #${modificationId}`);
426
+ }
427
+ this.restoreFiles(mod.rollback_data);
428
+ // Build after restore
429
+ if (this.config.projectRoot) {
430
+ try {
431
+ execSync('npm run build', {
432
+ cwd: this.config.projectRoot,
433
+ timeout: 60_000,
434
+ encoding: 'utf-8',
435
+ stdio: ['pipe', 'pipe', 'pipe'],
436
+ });
437
+ }
438
+ catch { /* best effort */ }
439
+ }
440
+ this.updateModification(modificationId, { status: 'rolled_back' });
441
+ this.log.info(`[self-mod] Rolled back modification #${modificationId}`);
442
+ this.ts?.emit('self-modification', 'reflecting', `Rolled back: ${mod.title}`, 'notable');
443
+ return this.getModification(modificationId);
444
+ }
445
+ /** Approve a modification (calls applyModification). */
446
+ approveModification(modificationId) {
447
+ const mod = this.getModification(modificationId);
448
+ if (!mod)
449
+ throw new Error(`Modification #${modificationId} not found`);
450
+ if (mod.status !== 'ready')
451
+ throw new Error(`Modification #${modificationId} is not ready (current: ${mod.status})`);
452
+ this.updateModification(modificationId, { status: 'approved' });
453
+ return this.applyModification(modificationId);
454
+ }
455
+ /** Reject a modification. */
456
+ rejectModification(modificationId, notes) {
457
+ const mod = this.getModification(modificationId);
458
+ if (!mod)
459
+ throw new Error(`Modification #${modificationId} not found`);
460
+ this.updateModification(modificationId, {
461
+ status: 'rejected',
462
+ test_output: notes ? `Rejected: ${notes}` : mod.test_output,
463
+ });
464
+ this.log.info(`[self-mod] Rejected modification #${modificationId}${notes ? ': ' + notes : ''}`);
465
+ return this.getModification(modificationId);
466
+ }
467
+ /** Get all pending modifications (ready or proposed). */
468
+ getPending() {
469
+ return this.stmtGetPending.all().map(deserialize);
470
+ }
471
+ /** Get modification history. */
472
+ getHistory(limit = 20) {
473
+ return this.stmtGetHistory.all(limit).map(deserialize);
474
+ }
475
+ /** Get a single modification by ID. */
476
+ getModification(id) {
477
+ const row = this.stmtGet.get(id);
478
+ return row ? deserialize(row) : null;
479
+ }
480
+ /** Get status counts. */
481
+ getStatus() {
482
+ const byStatus = {};
483
+ for (const row of this.stmtCountByStatus.all()) {
484
+ byStatus[row.status] = row.count;
485
+ }
486
+ const last = this.stmtLastModification.get();
487
+ return {
488
+ brainName: this.config.brainName,
489
+ totalModifications: this.stmtCountTotal.get().count,
490
+ byStatus,
491
+ lastModification: last?.created_at ?? null,
492
+ projectRoot: this.config.projectRoot || null,
493
+ };
494
+ }
495
+ // ── Private Helpers ────────────────────────────────────
496
+ updateModification(id, fields) {
497
+ const current = this.stmtGet.get(id);
498
+ if (!current)
499
+ return;
500
+ this.stmtUpdate.run(fields.generated_diff ?? current.generated_diff, fields.test_result ?? current.test_result, fields.test_output !== undefined ? fields.test_output : current.test_output, fields.status ?? current.status, fields.applied_at !== undefined ? fields.applied_at : current.applied_at, fields.rollback_data ?? current.rollback_data, fields.tokens_used ?? current.tokens_used, fields.model_used ?? current.model_used, fields.generation_time_ms ?? current.generation_time_ms, id);
501
+ }
502
+ checkRateLimit() {
503
+ const oneHourAgo = Date.now() - 3600_000;
504
+ this.recentGenerations = this.recentGenerations.filter(t => t > oneHourAgo);
505
+ return this.recentGenerations.length < this.config.maxPerHour;
506
+ }
507
+ parseGeneratedFiles(text, _targetFiles) {
508
+ const diffs = [];
509
+ // Pattern: ### FILE: <path>\n```typescript\n<content>\n```
510
+ const fileBlockRegex = /###\s*FILE:\s*(.+?)\n```(?:typescript|ts)?\n([\s\S]*?)```/g;
511
+ let match;
512
+ while ((match = fileBlockRegex.exec(text)) !== null) {
513
+ const filePath = match[1].trim();
514
+ const newContent = match[2];
515
+ // Only accept target files or files matching the whitelist
516
+ const normalizedPath = filePath.replace(/\\/g, '/');
517
+ if (!isPathAllowed(normalizedPath))
518
+ continue;
519
+ // Get old content
520
+ let oldContent = '';
521
+ if (this.selfScanner) {
522
+ oldContent = this.selfScanner.getFileContent(normalizedPath) ?? '';
523
+ }
524
+ if (!oldContent && this.config.projectRoot) {
525
+ const fullPath = path.resolve(this.config.projectRoot, normalizedPath);
526
+ try {
527
+ oldContent = fs.readFileSync(fullPath, 'utf-8');
528
+ }
529
+ catch { /* new file */ }
530
+ }
531
+ diffs.push({ filePath: normalizedPath, oldContent, newContent });
532
+ }
533
+ return diffs;
534
+ }
535
+ restoreFiles(rollbackData) {
536
+ if (!this.config.projectRoot)
537
+ return;
538
+ for (const diff of rollbackData) {
539
+ const fullPath = path.resolve(this.config.projectRoot, diff.filePath);
540
+ try {
541
+ if (diff.oldContent) {
542
+ fs.writeFileSync(fullPath, diff.oldContent, 'utf-8');
543
+ }
544
+ else {
545
+ // File didn't exist before — remove it
546
+ fs.unlinkSync(fullPath);
547
+ }
548
+ }
549
+ catch (err) {
550
+ this.log.error(`[self-mod] Failed to restore ${diff.filePath}: ${err.message}`);
551
+ }
552
+ }
553
+ }
554
+ recoverFromCrash() {
555
+ try {
556
+ const stuck = this.db.prepare("SELECT * FROM self_modifications WHERE status = 'testing'").all();
557
+ for (const row of stuck) {
558
+ if (row.rollback_data) {
559
+ const rollbackData = JSON.parse(row.rollback_data);
560
+ this.restoreFiles(rollbackData);
561
+ this.log.warn(`[self-mod] Crash recovery: restored files for modification #${row.id}`);
562
+ }
563
+ this.db.prepare("UPDATE self_modifications SET status = 'failed', test_output = 'Recovered from crash' WHERE id = ?").run(row.id);
564
+ }
565
+ }
566
+ catch { /* table might not exist yet */ }
567
+ }
568
+ }
569
+ function deserialize(row) {
570
+ return {
571
+ id: row.id,
572
+ title: row.title,
573
+ problem_description: row.problem_description,
574
+ source_engine: row.source_engine,
575
+ target_files: JSON.parse(row.target_files),
576
+ generated_diff: row.generated_diff ? JSON.parse(row.generated_diff) : null,
577
+ test_result: row.test_result,
578
+ test_output: row.test_output,
579
+ status: row.status,
580
+ applied_at: row.applied_at,
581
+ rollback_data: row.rollback_data ? JSON.parse(row.rollback_data) : null,
582
+ tokens_used: row.tokens_used,
583
+ model_used: row.model_used,
584
+ generation_time_ms: row.generation_time_ms,
585
+ created_at: row.created_at,
586
+ };
587
+ }
588
+ //# sourceMappingURL=self-modification-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-modification-engine.js","sourceRoot":"","sources":["../../src/self-modification/self-modification-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { SelfScanner, runSelfScannerMigration } from './self-scanner.js';
2
+ export type { SelfScannerConfig, SourceFile, CodeEntity, EntityType, EntityFilter, ModuleMapEntry, SelfScanResult, SelfScannerStatus, } from './self-scanner.js';
@@ -0,0 +1,2 @@
1
+ export { SelfScanner, runSelfScannerMigration } from './self-scanner.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/self-scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}