@kernel.chat/kbot 2.11.0 → 2.12.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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +11 -0
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agents/agents.test.d.ts +2 -0
  6. package/dist/agents/agents.test.d.ts.map +1 -0
  7. package/dist/agents/agents.test.js +127 -0
  8. package/dist/agents/agents.test.js.map +1 -0
  9. package/dist/cli.js +68 -1
  10. package/dist/cli.js.map +1 -1
  11. package/dist/evolution.d.ts +112 -0
  12. package/dist/evolution.d.ts.map +1 -0
  13. package/dist/evolution.js +642 -0
  14. package/dist/evolution.js.map +1 -0
  15. package/dist/evolution.test.d.ts +2 -0
  16. package/dist/evolution.test.d.ts.map +1 -0
  17. package/dist/evolution.test.js +160 -0
  18. package/dist/evolution.test.js.map +1 -0
  19. package/dist/ide/acp-server.js +2 -2
  20. package/dist/quality-diversity.d.ts +106 -0
  21. package/dist/quality-diversity.d.ts.map +1 -0
  22. package/dist/quality-diversity.js +296 -0
  23. package/dist/quality-diversity.js.map +1 -0
  24. package/dist/tools/comfyui-plugin.d.ts +2 -0
  25. package/dist/tools/comfyui-plugin.d.ts.map +1 -0
  26. package/dist/tools/comfyui-plugin.js +523 -0
  27. package/dist/tools/comfyui-plugin.js.map +1 -0
  28. package/dist/tools/creative.test.d.ts +2 -0
  29. package/dist/tools/creative.test.d.ts.map +1 -0
  30. package/dist/tools/creative.test.js +281 -0
  31. package/dist/tools/creative.test.js.map +1 -0
  32. package/dist/tools/index.d.ts.map +1 -1
  33. package/dist/tools/index.js +5 -1
  34. package/dist/tools/index.js.map +1 -1
  35. package/dist/tools/magenta-plugin.d.ts +2 -0
  36. package/dist/tools/magenta-plugin.d.ts.map +1 -0
  37. package/dist/tools/magenta-plugin.js +405 -0
  38. package/dist/tools/magenta-plugin.js.map +1 -0
  39. package/dist/ui.js +1 -1
  40. package/package.json +2 -2
@@ -0,0 +1,642 @@
1
+ // K:BOT Self-Evolution Loop — Automated Source Code Improvement
2
+ //
3
+ // CONCEPT: kbot identifies its own weaknesses, proposes code changes,
4
+ // validates them (typecheck + tests), scores the improvement, and
5
+ // applies or rolls back. The first self-evolving open-source CLI agent.
6
+ //
7
+ // SAFETY:
8
+ // - Only modifies files in packages/kbot/src/ (never node_modules, configs, etc.)
9
+ // - Never modifies evolution.ts, cli.ts, or test files (prevents recursive traps)
10
+ // - Uses git stash for instant rollback on any failure
11
+ // - Requires clean working tree before starting
12
+ // - Never auto-publishes or pushes
13
+ // - Max 3 changes per cycle (bounded blast radius)
14
+ // - All changes logged to ~/.kbot/evolution-log.json
15
+ //
16
+ // FLOW: diagnose → propose → validate → score → apply/rollback → log
17
+ import { homedir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
20
+ import { execSync } from 'node:child_process';
21
+ // ── File paths ──
22
+ const KBOT_DIR = join(homedir(), '.kbot');
23
+ const LOG_FILE = join(KBOT_DIR, 'evolution-log.json');
24
+ // Files that must NEVER be modified by the evolution loop
25
+ const PROTECTED_FILES = [
26
+ 'src/evolution.ts',
27
+ 'src/cli.ts',
28
+ 'src/auth.ts', // never touch auth — security-critical
29
+ 'vitest.config.ts',
30
+ 'package.json',
31
+ 'tsconfig.json',
32
+ ];
33
+ const PROTECTED_PATTERNS = [
34
+ /\.test\.(ts|tsx)$/, // never modify tests
35
+ /\.spec\.(ts|tsx)$/,
36
+ /^node_modules\//,
37
+ /^dist\//,
38
+ ];
39
+ // ── Helpers ──
40
+ function ensureDir() {
41
+ if (!existsSync(KBOT_DIR))
42
+ mkdirSync(KBOT_DIR, { recursive: true });
43
+ }
44
+ function loadLog() {
45
+ ensureDir();
46
+ if (!existsSync(LOG_FILE))
47
+ return [];
48
+ try {
49
+ return JSON.parse(readFileSync(LOG_FILE, 'utf-8'));
50
+ }
51
+ catch {
52
+ return [];
53
+ }
54
+ }
55
+ function saveLog(log) {
56
+ ensureDir();
57
+ // Keep only last 50 cycles
58
+ const trimmed = log.slice(-50);
59
+ writeFileSync(LOG_FILE, JSON.stringify(trimmed, null, 2), 'utf-8');
60
+ }
61
+ function isProtectedFile(relPath) {
62
+ if (PROTECTED_FILES.includes(relPath))
63
+ return true;
64
+ return PROTECTED_PATTERNS.some(p => p.test(relPath));
65
+ }
66
+ /** Find the kbot package root */
67
+ function findKbotRoot() {
68
+ // Try relative to this file first
69
+ const candidates = [
70
+ join(process.cwd(), 'packages/kbot'),
71
+ join(import.meta.dirname || process.cwd(), '..'),
72
+ ];
73
+ for (const c of candidates) {
74
+ if (existsSync(join(c, 'package.json'))) {
75
+ try {
76
+ const pkg = JSON.parse(readFileSync(join(c, 'package.json'), 'utf-8'));
77
+ if (pkg.name === '@kernel.chat/kbot')
78
+ return c;
79
+ }
80
+ catch { /* continue */ }
81
+ }
82
+ }
83
+ throw new Error('Cannot find kbot package root. Run from the project directory.');
84
+ }
85
+ // ══════════════════════════════════════════════════════════════════
86
+ // 1. DIAGNOSE — Find weaknesses from skill profile + learning data
87
+ // ══════════════════════════════════════════════════════════════════
88
+ /**
89
+ * Analyze kbot's performance data to find areas for improvement.
90
+ * Uses the confidence engine's skill profile + learning stats.
91
+ */
92
+ export function diagnose() {
93
+ const weaknesses = [];
94
+ // Pull skill profile data
95
+ try {
96
+ // Dynamic import would be async — use require-style for sync diagnosis
97
+ const skillFile = join(KBOT_DIR, 'skill-profile.json');
98
+ const confFile = join(KBOT_DIR, 'confidence.json');
99
+ const statsFile = join(KBOT_DIR, 'memory', 'stats.json');
100
+ // Check skill weaknesses
101
+ if (existsSync(skillFile)) {
102
+ const skills = JSON.parse(readFileSync(skillFile, 'utf-8')).skills || {};
103
+ for (const [domain, data] of Object.entries(skills)) {
104
+ if (data.sampleSize < 3)
105
+ continue;
106
+ const rate = data.successCount / data.sampleSize;
107
+ if (rate < 0.5) {
108
+ weaknesses.push({
109
+ area: domain,
110
+ description: `Low success rate in ${domain} tasks (${Math.round(rate * 100)}%)`,
111
+ severity: rate < 0.3 ? 'high' : 'medium',
112
+ evidence: `${data.successCount}/${data.sampleSize} successes`,
113
+ });
114
+ }
115
+ }
116
+ }
117
+ // Check calibration — are we systematically overconfident?
118
+ if (existsSync(confFile)) {
119
+ const cal = JSON.parse(readFileSync(confFile, 'utf-8'));
120
+ if (cal.avgError > 0.25 && (cal.entries?.length || 0) >= 5) {
121
+ weaknesses.push({
122
+ area: 'confidence-calibration',
123
+ description: `Confidence predictions are poorly calibrated (avg error: ${(cal.avgError * 100).toFixed(0)}%)`,
124
+ severity: cal.avgError > 0.4 ? 'high' : 'medium',
125
+ evidence: `${cal.entries.length} calibration entries, avg error ${cal.avgError.toFixed(3)}`,
126
+ targetFile: 'src/confidence.ts',
127
+ });
128
+ }
129
+ }
130
+ // Check learning stats — look for patterns with low success
131
+ if (existsSync(statsFile)) {
132
+ const stats = JSON.parse(readFileSync(statsFile, 'utf-8'));
133
+ if (stats.totalMessages > 50 && stats.toolErrorRate > 0.15) {
134
+ weaknesses.push({
135
+ area: 'tool-execution',
136
+ description: `High tool error rate (${(stats.toolErrorRate * 100).toFixed(0)}%)`,
137
+ severity: stats.toolErrorRate > 0.3 ? 'high' : 'medium',
138
+ evidence: `${stats.totalMessages} messages, ${(stats.toolErrorRate * 100).toFixed(0)}% tool errors`,
139
+ });
140
+ }
141
+ }
142
+ // Check for common code quality signals
143
+ const kbotRoot = findKbotRoot();
144
+ const srcDir = join(kbotRoot, 'src');
145
+ // Look for TODO/FIXME/HACK comments as improvement signals
146
+ try {
147
+ const result = execSync(`grep -rn "TODO\\|FIXME\\|HACK\\|XXX" "${srcDir}" --include="*.ts" | head -20`, { encoding: 'utf-8', timeout: 5000 }).trim();
148
+ if (result) {
149
+ const todoCount = result.split('\n').filter(l => l.trim()).length;
150
+ if (todoCount >= 3) {
151
+ weaknesses.push({
152
+ area: 'code-quality',
153
+ description: `${todoCount} TODO/FIXME/HACK markers in source code`,
154
+ severity: todoCount > 10 ? 'medium' : 'low',
155
+ evidence: `Found ${todoCount} markers via grep`,
156
+ });
157
+ }
158
+ }
159
+ }
160
+ catch { /* grep not critical */ }
161
+ }
162
+ catch (err) {
163
+ // Diagnosis failure is not fatal — return what we have
164
+ if (process.env.KBOT_DEBUG) {
165
+ console.error('[evolution] diagnose error:', err.message);
166
+ }
167
+ }
168
+ // Sort by severity (high first)
169
+ const severityOrder = { high: 0, medium: 1, low: 2 };
170
+ weaknesses.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
171
+ return weaknesses;
172
+ }
173
+ // ══════════════════════════════════════════════════════════════════
174
+ // 2. PROPOSE — Use LLM to generate code improvements
175
+ // ══════════════════════════════════════════════════════════════════
176
+ /**
177
+ * Ask the LLM to propose a code improvement for a weakness.
178
+ * Reuses the auth/provider pattern from self-eval.ts.
179
+ */
180
+ export async function proposeImprovement(weakness) {
181
+ // Determine which file to improve
182
+ const kbotRoot = findKbotRoot();
183
+ const targetFile = weakness.targetFile || guessTargetFile(weakness.area);
184
+ if (!targetFile)
185
+ return null;
186
+ if (isProtectedFile(targetFile))
187
+ return null;
188
+ const absPath = join(kbotRoot, targetFile);
189
+ if (!existsSync(absPath))
190
+ return null;
191
+ const original = readFileSync(absPath, 'utf-8');
192
+ // Truncate very large files to keep prompt costs reasonable
193
+ const maxSourceChars = 8000;
194
+ const source = original.length > maxSourceChars
195
+ ? original.slice(0, maxSourceChars) + '\n// ... (truncated)'
196
+ : original;
197
+ const prompt = buildProposalPrompt(weakness, targetFile, source);
198
+ try {
199
+ const { getByokKey, getByokProvider, getProvider, getProviderModel } = await import('./auth.js');
200
+ const apiKey = getByokKey();
201
+ if (!apiKey)
202
+ return null;
203
+ const byokProvider = getByokProvider();
204
+ const provider = getProvider(byokProvider);
205
+ const model = getProviderModel(byokProvider, 'default');
206
+ const headers = { 'Content-Type': 'application/json' };
207
+ if (provider.authHeader === 'x-api-key') {
208
+ headers['x-api-key'] = apiKey;
209
+ headers['anthropic-version'] = '2023-06-01';
210
+ }
211
+ else if (apiKey && apiKey !== 'local') {
212
+ headers['Authorization'] = `Bearer ${apiKey}`;
213
+ }
214
+ let body;
215
+ let url;
216
+ if (provider.apiStyle === 'anthropic') {
217
+ url = provider.apiUrl;
218
+ body = JSON.stringify({
219
+ model,
220
+ max_tokens: 4096,
221
+ messages: [{ role: 'user', content: prompt }],
222
+ });
223
+ }
224
+ else if (provider.apiStyle === 'google') {
225
+ url = `${provider.apiUrl}/${model}:generateContent?key=${apiKey}`;
226
+ body = JSON.stringify({
227
+ contents: [{ parts: [{ text: prompt }] }],
228
+ generationConfig: { maxOutputTokens: 4096 },
229
+ });
230
+ }
231
+ else {
232
+ url = provider.apiUrl;
233
+ body = JSON.stringify({
234
+ model,
235
+ max_tokens: 4096,
236
+ messages: [{ role: 'user', content: prompt }],
237
+ });
238
+ }
239
+ const res = await fetch(url, {
240
+ method: 'POST',
241
+ headers,
242
+ body,
243
+ signal: AbortSignal.timeout(60_000),
244
+ });
245
+ if (!res.ok)
246
+ return null;
247
+ const data = await res.json();
248
+ let text = '';
249
+ if (provider.apiStyle === 'anthropic') {
250
+ const blocks = data.content || [];
251
+ text = blocks.filter(b => b.type === 'text').map(b => b.text || '').join('');
252
+ }
253
+ else if (provider.apiStyle === 'google') {
254
+ const candidates = data.candidates || [];
255
+ text = candidates[0]?.content?.parts?.map(p => p.text).join('') || '';
256
+ }
257
+ else {
258
+ const choices = data.choices || [];
259
+ text = choices[0]?.message?.content || '';
260
+ }
261
+ // Parse the response — expect a code block with the improved file
262
+ const patch = extractCodeBlock(text);
263
+ if (!patch)
264
+ return null;
265
+ // Basic sanity: patch should be at least 50% the size of original
266
+ if (patch.length < original.length * 0.5)
267
+ return null;
268
+ return {
269
+ file: targetFile,
270
+ description: extractDescription(text),
271
+ weakness,
272
+ patch,
273
+ original,
274
+ };
275
+ }
276
+ catch {
277
+ return null;
278
+ }
279
+ }
280
+ function buildProposalPrompt(weakness, file, source) {
281
+ return `You are improving the source code of K:BOT, an open-source terminal AI agent.
282
+
283
+ WEAKNESS DETECTED:
284
+ - Area: ${weakness.area}
285
+ - Issue: ${weakness.description}
286
+ - Severity: ${weakness.severity}
287
+ - Evidence: ${weakness.evidence}
288
+
289
+ FILE TO IMPROVE: ${file}
290
+
291
+ CURRENT SOURCE:
292
+ \`\`\`typescript
293
+ ${source}
294
+ \`\`\`
295
+
296
+ RULES:
297
+ 1. Make the MINIMAL change needed to address the weakness
298
+ 2. Keep all existing exports and function signatures
299
+ 3. Do NOT change import paths
300
+ 4. Do NOT add new dependencies
301
+ 5. Preserve the coding style (2-space indent, single quotes, no semicolons at line ends where absent)
302
+ 6. The change must pass \`npx tsc --noEmit\` and \`npx vitest run\`
303
+
304
+ Respond with:
305
+ 1. A one-line description of your change
306
+ 2. The COMPLETE improved file in a single typescript code block
307
+
308
+ DESCRIPTION: <your one-line description>
309
+
310
+ \`\`\`typescript
311
+ <complete improved file>
312
+ \`\`\``;
313
+ }
314
+ function extractCodeBlock(text) {
315
+ const match = text.match(/```(?:typescript|ts)?\n([\s\S]*?)```/);
316
+ return match ? match[1].trim() : null;
317
+ }
318
+ function extractDescription(text) {
319
+ const match = text.match(/DESCRIPTION:\s*(.+)/i);
320
+ return match ? match[1].trim() : 'Code improvement';
321
+ }
322
+ function guessTargetFile(area) {
323
+ const areaMap = {
324
+ 'typescript': 'src/agent.ts',
325
+ 'javascript': 'src/agent.ts',
326
+ 'streaming': 'src/streaming.ts',
327
+ 'tool-execution': 'src/agent.ts',
328
+ 'routing': 'src/learned-router.ts',
329
+ 'confidence-calibration': 'src/confidence.ts',
330
+ 'learning': 'src/learning.ts',
331
+ 'memory': 'src/memory.ts',
332
+ 'planning': 'src/planner.ts',
333
+ 'context': 'src/context-manager.ts',
334
+ 'code-quality': 'src/agent.ts',
335
+ 'testing': 'src/agent.ts',
336
+ 'search': 'src/tools/search.ts',
337
+ 'git': 'src/tools/git.ts',
338
+ 'devops': 'src/tools/bash.ts',
339
+ };
340
+ return areaMap[area] || null;
341
+ }
342
+ // ══════════════════════════════════════════════════════════════════
343
+ // 3. VALIDATE — Typecheck + test the proposed change
344
+ // ══════════════════════════════════════════════════════════════════
345
+ /**
346
+ * Apply a proposal temporarily and run validation (tsc + vitest).
347
+ * Returns true if the change passes, false otherwise.
348
+ */
349
+ export function validate(proposal) {
350
+ const kbotRoot = findKbotRoot();
351
+ const absPath = join(kbotRoot, proposal.file);
352
+ // Write the patched file
353
+ writeFileSync(absPath, proposal.patch, 'utf-8');
354
+ try {
355
+ // Type check
356
+ execSync('npx tsc --noEmit', {
357
+ cwd: kbotRoot,
358
+ encoding: 'utf-8',
359
+ timeout: 60_000,
360
+ stdio: 'pipe',
361
+ });
362
+ }
363
+ catch (err) {
364
+ // Rollback
365
+ writeFileSync(absPath, proposal.original, 'utf-8');
366
+ const stderr = err.stderr || '';
367
+ return { passes: false, errors: `Typecheck failed:\n${stderr.slice(0, 500)}` };
368
+ }
369
+ try {
370
+ // Run tests
371
+ execSync('npx vitest run --reporter=verbose 2>&1', {
372
+ cwd: kbotRoot,
373
+ encoding: 'utf-8',
374
+ timeout: 120_000,
375
+ stdio: 'pipe',
376
+ });
377
+ }
378
+ catch (err) {
379
+ // Rollback
380
+ writeFileSync(absPath, proposal.original, 'utf-8');
381
+ const stderr = err.stderr || err.stdout || '';
382
+ return { passes: false, errors: `Tests failed:\n${stderr.slice(0, 500)}` };
383
+ }
384
+ return { passes: true, errors: '' };
385
+ }
386
+ export function scoreMetrics(source) {
387
+ const lines = source.split('\n');
388
+ const loc = lines.filter(l => l.trim() && !l.trim().startsWith('//')).length;
389
+ // Simple complexity: count if/else/for/while/switch/catch/? (ternary)
390
+ const complexity = (source.match(/\b(if|else|for|while|switch|catch|case)\b|\?.*:/g) || []).length;
391
+ const todoCount = (source.match(/\b(TODO|FIXME|HACK|XXX)\b/g) || []).length;
392
+ const exportCount = (source.match(/\bexport\s+(function|const|class|interface|type|enum)\b/g) || []).length;
393
+ return { loc, complexity, todoCount, exportCount };
394
+ }
395
+ /**
396
+ * Compute a delta score between before/after metrics.
397
+ * Positive = improvement, negative = regression.
398
+ */
399
+ export function computeDelta(before, after) {
400
+ let delta = 0;
401
+ // Fewer TODOs is better
402
+ delta += (before.todoCount - after.todoCount) * 0.2;
403
+ // Lower complexity (if significant) is better
404
+ if (before.complexity > 0) {
405
+ const complexityReduction = (before.complexity - after.complexity) / before.complexity;
406
+ delta += complexityReduction * 0.3;
407
+ }
408
+ // Breaking exports is bad — any lost export is a -1.0 penalty
409
+ if (after.exportCount < before.exportCount) {
410
+ delta -= (before.exportCount - after.exportCount) * 1.0;
411
+ }
412
+ // LOC change: slight preference for smaller (but not drastic reduction)
413
+ if (before.loc > 0) {
414
+ const locChange = (before.loc - after.loc) / before.loc;
415
+ if (locChange > 0 && locChange < 0.3) {
416
+ delta += locChange * 0.1; // slight reward for trimming
417
+ }
418
+ else if (locChange > 0.3) {
419
+ delta -= 0.5; // suspicious: lost too much code
420
+ }
421
+ }
422
+ return Math.round(delta * 1000) / 1000;
423
+ }
424
+ // ══════════════════════════════════════════════════════════════════
425
+ // 5. RUN EVOLUTION CYCLE — Full orchestrator
426
+ // ══════════════════════════════════════════════════════════════════
427
+ /**
428
+ * Run one evolution cycle:
429
+ * 1. Check for clean working tree
430
+ * 2. Diagnose weaknesses
431
+ * 3. For each weakness (max 3): propose → validate → score → apply/rollback
432
+ * 4. Log everything
433
+ */
434
+ export async function runEvolutionCycle() {
435
+ const cycleId = `evo-${Date.now()}`;
436
+ const cycle = {
437
+ id: cycleId,
438
+ startedAt: new Date().toISOString(),
439
+ weaknesses: [],
440
+ proposals: [],
441
+ results: [],
442
+ status: 'running',
443
+ };
444
+ try {
445
+ const kbotRoot = findKbotRoot();
446
+ // Safety: check for clean working tree
447
+ try {
448
+ const gitStatus = execSync('git status --porcelain', {
449
+ cwd: kbotRoot,
450
+ encoding: 'utf-8',
451
+ timeout: 5000,
452
+ }).trim();
453
+ if (gitStatus) {
454
+ // Stash changes for safety
455
+ execSync('git stash push -m "kbot-evolution-safety-stash"', {
456
+ cwd: kbotRoot,
457
+ encoding: 'utf-8',
458
+ timeout: 10000,
459
+ });
460
+ }
461
+ }
462
+ catch {
463
+ // Not a git repo or git not available — proceed without safety net
464
+ }
465
+ // Step 1: Diagnose
466
+ const weaknesses = diagnose();
467
+ cycle.weaknesses = weaknesses;
468
+ if (weaknesses.length === 0) {
469
+ cycle.status = 'completed';
470
+ cycle.endedAt = new Date().toISOString();
471
+ cycle.results.push({
472
+ status: 'skipped',
473
+ reason: 'No weaknesses detected — kbot is performing well',
474
+ weakness: { area: 'none', description: 'No issues found', severity: 'low', evidence: 'clean diagnosis' },
475
+ delta: 0,
476
+ timestamp: new Date().toISOString(),
477
+ });
478
+ appendToLog(cycle);
479
+ return cycle;
480
+ }
481
+ // Step 2: Process top 3 weaknesses
482
+ const targetWeaknesses = weaknesses.slice(0, 3);
483
+ for (const weakness of targetWeaknesses) {
484
+ // Propose
485
+ const proposal = await proposeImprovement(weakness);
486
+ if (!proposal) {
487
+ cycle.results.push({
488
+ status: 'skipped',
489
+ reason: 'Could not generate a valid proposal',
490
+ weakness,
491
+ delta: 0,
492
+ timestamp: new Date().toISOString(),
493
+ });
494
+ continue;
495
+ }
496
+ cycle.proposals.push(proposal);
497
+ // Score before
498
+ const beforeMetrics = scoreMetrics(proposal.original);
499
+ // Validate (writes file, runs tsc + vitest)
500
+ const validation = validate(proposal);
501
+ if (!validation.passes) {
502
+ // validate() already rolled back the file
503
+ cycle.results.push({
504
+ status: 'rolled-back',
505
+ reason: validation.errors,
506
+ weakness,
507
+ delta: 0,
508
+ timestamp: new Date().toISOString(),
509
+ });
510
+ continue;
511
+ }
512
+ // Score after (file is still patched from validate())
513
+ const afterMetrics = scoreMetrics(proposal.patch);
514
+ const delta = computeDelta(beforeMetrics, afterMetrics);
515
+ if (delta < -0.1) {
516
+ // Negative delta — rollback even though it passes
517
+ const absPath = join(kbotRoot, proposal.file);
518
+ writeFileSync(absPath, proposal.original, 'utf-8');
519
+ cycle.results.push({
520
+ status: 'rolled-back',
521
+ reason: `Negative quality delta (${delta.toFixed(3)}) — change makes code worse`,
522
+ weakness,
523
+ delta,
524
+ timestamp: new Date().toISOString(),
525
+ });
526
+ continue;
527
+ }
528
+ // Apply! File is already written by validate()
529
+ cycle.results.push({
530
+ status: 'applied',
531
+ reason: `${proposal.description} (delta: +${delta.toFixed(3)})`,
532
+ weakness,
533
+ delta,
534
+ timestamp: new Date().toISOString(),
535
+ });
536
+ }
537
+ cycle.status = 'completed';
538
+ }
539
+ catch (err) {
540
+ cycle.status = 'failed';
541
+ cycle.error = err instanceof Error ? err.message : String(err);
542
+ }
543
+ cycle.endedAt = new Date().toISOString();
544
+ appendToLog(cycle);
545
+ return cycle;
546
+ }
547
+ function appendToLog(cycle) {
548
+ const log = loadLog();
549
+ log.push(cycle);
550
+ saveLog(log);
551
+ }
552
+ // ══════════════════════════════════════════════════════════════════
553
+ // 6. STATUS + REPORTING
554
+ // ══════════════════════════════════════════════════════════════════
555
+ /** Get the full evolution log */
556
+ export function getEvolutionLog() {
557
+ return loadLog();
558
+ }
559
+ /** Get a summary of evolution activity */
560
+ export function getEvolutionStats() {
561
+ const log = loadLog();
562
+ let totalApplied = 0;
563
+ let totalRolledBack = 0;
564
+ let totalSkipped = 0;
565
+ let totalDelta = 0;
566
+ let deltaCount = 0;
567
+ for (const cycle of log) {
568
+ for (const result of cycle.results) {
569
+ if (result.status === 'applied') {
570
+ totalApplied++;
571
+ totalDelta += result.delta;
572
+ deltaCount++;
573
+ }
574
+ else if (result.status === 'rolled-back') {
575
+ totalRolledBack++;
576
+ }
577
+ else {
578
+ totalSkipped++;
579
+ }
580
+ }
581
+ }
582
+ return {
583
+ totalCycles: log.length,
584
+ totalApplied,
585
+ totalRolledBack,
586
+ totalSkipped,
587
+ avgDelta: deltaCount > 0 ? Math.round((totalDelta / deltaCount) * 1000) / 1000 : 0,
588
+ lastCycle: log.length > 0 ? log[log.length - 1].endedAt || log[log.length - 1].startedAt : null,
589
+ };
590
+ }
591
+ /** Format evolution status for terminal display */
592
+ export function formatEvolutionStatus() {
593
+ const stats = getEvolutionStats();
594
+ const lines = [];
595
+ lines.push('=== K:BOT Evolution Engine ===');
596
+ lines.push('');
597
+ lines.push(`Cycles run: ${stats.totalCycles}`);
598
+ lines.push(`Applied: ${stats.totalApplied}`);
599
+ lines.push(`Rolled back: ${stats.totalRolledBack}`);
600
+ lines.push(`Skipped: ${stats.totalSkipped}`);
601
+ lines.push(`Avg improvement: ${stats.avgDelta >= 0 ? '+' : ''}${stats.avgDelta.toFixed(3)}`);
602
+ if (stats.lastCycle) {
603
+ const ago = Date.now() - new Date(stats.lastCycle).getTime();
604
+ const hours = Math.round(ago / 3600000);
605
+ lines.push(`Last cycle: ${hours < 24 ? `${hours}h ago` : `${Math.round(hours / 24)}d ago`}`);
606
+ }
607
+ else {
608
+ lines.push('Last cycle: never');
609
+ }
610
+ // Show recent results
611
+ const log = loadLog();
612
+ if (log.length > 0) {
613
+ const recent = log[log.length - 1];
614
+ lines.push('');
615
+ lines.push(`Latest cycle (${recent.id}):`);
616
+ lines.push(` Status: ${recent.status}`);
617
+ lines.push(` Weaknesses: ${recent.weaknesses.length}`);
618
+ for (const r of recent.results) {
619
+ const icon = r.status === 'applied' ? '✓' : r.status === 'rolled-back' ? '✗' : '○';
620
+ lines.push(` ${icon} ${r.weakness.area}: ${r.reason.slice(0, 80)}`);
621
+ }
622
+ }
623
+ return lines.join('\n');
624
+ }
625
+ /** Format diagnosis output for terminal display */
626
+ export function formatDiagnosis(weaknesses) {
627
+ if (weaknesses.length === 0) {
628
+ return 'No weaknesses detected. K:BOT is performing well.';
629
+ }
630
+ const lines = [`Found ${weaknesses.length} weakness${weaknesses.length > 1 ? 'es' : ''}:`, ''];
631
+ for (const w of weaknesses) {
632
+ const icon = w.severity === 'high' ? '▲' : w.severity === 'medium' ? '●' : '○';
633
+ lines.push(` ${icon} [${w.severity}] ${w.area}`);
634
+ lines.push(` ${w.description}`);
635
+ lines.push(` Evidence: ${w.evidence}`);
636
+ if (w.targetFile)
637
+ lines.push(` Target: ${w.targetFile}`);
638
+ lines.push('');
639
+ }
640
+ return lines.join('\n');
641
+ }
642
+ //# sourceMappingURL=evolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolution.js","sourceRoot":"","sources":["../src/evolution.ts"],"names":[],"mappings":"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"}