@kernel.chat/kbot 2.11.0 → 2.13.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 (56) 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/changelog.d.ts +21 -0
  10. package/dist/changelog.d.ts.map +1 -0
  11. package/dist/changelog.js +204 -0
  12. package/dist/changelog.js.map +1 -0
  13. package/dist/cli.js +110 -114
  14. package/dist/cli.js.map +1 -1
  15. package/dist/completions.d.ts +2 -0
  16. package/dist/completions.d.ts.map +1 -0
  17. package/dist/completions.js +526 -0
  18. package/dist/completions.js.map +1 -0
  19. package/dist/doctor.d.ts +15 -0
  20. package/dist/doctor.d.ts.map +1 -0
  21. package/dist/doctor.js +381 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/evolution.d.ts +112 -0
  24. package/dist/evolution.d.ts.map +1 -0
  25. package/dist/evolution.js +642 -0
  26. package/dist/evolution.js.map +1 -0
  27. package/dist/evolution.test.d.ts +2 -0
  28. package/dist/evolution.test.d.ts.map +1 -0
  29. package/dist/evolution.test.js +160 -0
  30. package/dist/evolution.test.js.map +1 -0
  31. package/dist/ide/acp-server.js +2 -2
  32. package/dist/quality-diversity.d.ts +106 -0
  33. package/dist/quality-diversity.d.ts.map +1 -0
  34. package/dist/quality-diversity.js +296 -0
  35. package/dist/quality-diversity.js.map +1 -0
  36. package/dist/tools/comfyui-plugin.d.ts +2 -0
  37. package/dist/tools/comfyui-plugin.d.ts.map +1 -0
  38. package/dist/tools/comfyui-plugin.js +523 -0
  39. package/dist/tools/comfyui-plugin.js.map +1 -0
  40. package/dist/tools/creative.test.d.ts +2 -0
  41. package/dist/tools/creative.test.d.ts.map +1 -0
  42. package/dist/tools/creative.test.js +281 -0
  43. package/dist/tools/creative.test.js.map +1 -0
  44. package/dist/tools/index.d.ts.map +1 -1
  45. package/dist/tools/index.js +5 -1
  46. package/dist/tools/index.js.map +1 -1
  47. package/dist/tools/magenta-plugin.d.ts +2 -0
  48. package/dist/tools/magenta-plugin.d.ts.map +1 -0
  49. package/dist/tools/magenta-plugin.js +405 -0
  50. package/dist/tools/magenta-plugin.js.map +1 -0
  51. package/dist/tutorial.d.ts +3 -0
  52. package/dist/tutorial.d.ts.map +1 -0
  53. package/dist/tutorial.js +195 -0
  54. package/dist/tutorial.js.map +1 -0
  55. package/dist/ui.js +1 -1
  56. package/package.json +2 -2
package/dist/doctor.js ADDED
@@ -0,0 +1,381 @@
1
+ // K:BOT Doctor — Comprehensive diagnostic tool
2
+ // Checks the user's kbot setup: Node.js, npm, API keys, providers,
3
+ // local runtimes, git, disk usage, learning data, shell.
4
+ //
5
+ // Never displays API keys or secrets.
6
+ // All checks are non-blocking — errors are caught and reported.
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { existsSync, readdirSync, statSync } from 'node:fs';
10
+ import { execSync } from 'node:child_process';
11
+ import chalk from 'chalk';
12
+ import { loadConfig, isByokEnabled, getByokProvider, isLocalProvider, PROVIDERS, isOllamaRunning, KBOT_DIR, } from './auth.js';
13
+ import { getExtendedStats } from './learning.js';
14
+ // ── Version constant (kept in sync with cli.ts) ──
15
+ const INSTALLED_VERSION = '2.12.0';
16
+ // ── Helpers ──
17
+ /** Run a shell command and return stdout, or null on failure */
18
+ function execQuiet(cmd, timeoutMs = 5000) {
19
+ try {
20
+ return execSync(cmd, { encoding: 'utf-8', timeout: timeoutMs, stdio: 'pipe' }).trim();
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /** Calculate total size of a directory in bytes (non-recursive if too deep) */
27
+ function dirSize(dirPath) {
28
+ let total = 0;
29
+ try {
30
+ const entries = readdirSync(dirPath, { withFileTypes: true });
31
+ for (const entry of entries) {
32
+ const full = join(dirPath, entry.name);
33
+ try {
34
+ if (entry.isFile()) {
35
+ total += statSync(full).size;
36
+ }
37
+ else if (entry.isDirectory()) {
38
+ total += dirSize(full);
39
+ }
40
+ }
41
+ catch {
42
+ // Skip inaccessible entries
43
+ }
44
+ }
45
+ }
46
+ catch {
47
+ // Directory doesn't exist or can't be read
48
+ }
49
+ return total;
50
+ }
51
+ /** Format bytes into a human-readable string */
52
+ function formatBytes(bytes) {
53
+ if (bytes < 1024)
54
+ return `${bytes} B`;
55
+ if (bytes < 1024 * 1024)
56
+ return `${(bytes / 1024).toFixed(1)} KB`;
57
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
58
+ }
59
+ /** Parse a semver-like string into comparable parts */
60
+ function parseSemver(v) {
61
+ const clean = v.replace(/^v/, '');
62
+ const parts = clean.split('.').map(Number);
63
+ return [parts[0] || 0, parts[1] || 0, parts[2] || 0];
64
+ }
65
+ /** Compare two semver strings: -1 = a < b, 0 = equal, 1 = a > b */
66
+ function compareSemver(a, b) {
67
+ const [a0, a1, a2] = parseSemver(a);
68
+ const [b0, b1, b2] = parseSemver(b);
69
+ if (a0 !== b0)
70
+ return a0 < b0 ? -1 : 1;
71
+ if (a1 !== b1)
72
+ return a1 < b1 ? -1 : 1;
73
+ if (a2 !== b2)
74
+ return a2 < b2 ? -1 : 1;
75
+ return 0;
76
+ }
77
+ // ── Individual checks ──
78
+ function checkNodeVersion() {
79
+ const version = process.version; // e.g. "v20.11.0"
80
+ const [major] = parseSemver(version);
81
+ if (major >= 20) {
82
+ return { name: 'Node.js', status: 'pass', message: `${version}` };
83
+ }
84
+ return { name: 'Node.js', status: 'fail', message: `${version} — requires >= 20. Upgrade at nodejs.org` };
85
+ }
86
+ function checkNpmVersion() {
87
+ const version = execQuiet('npm --version');
88
+ if (version) {
89
+ return { name: 'npm', status: 'pass', message: `v${version}` };
90
+ }
91
+ return { name: 'npm', status: 'warn', message: 'not found' };
92
+ }
93
+ function checkKbotVersion() {
94
+ const installed = INSTALLED_VERSION;
95
+ const latest = execQuiet('npm view @kernel.chat/kbot version', 8000);
96
+ if (!latest) {
97
+ return { name: 'kbot version', status: 'pass', message: `v${installed} (could not check latest)` };
98
+ }
99
+ const cmp = compareSemver(installed, latest);
100
+ if (cmp >= 0) {
101
+ return { name: 'kbot version', status: 'pass', message: `v${installed} (latest)` };
102
+ }
103
+ return {
104
+ name: 'kbot version',
105
+ status: 'warn',
106
+ message: `v${installed} — update available: v${latest} (run: kbot update)`,
107
+ };
108
+ }
109
+ function checkApiKey() {
110
+ const config = loadConfig();
111
+ if (!config) {
112
+ return { name: 'API key', status: 'fail', message: 'no config found — run: kbot auth' };
113
+ }
114
+ if (!config.byok_enabled) {
115
+ // Check if any env var provides a key
116
+ if (isByokEnabled()) {
117
+ const provider = getByokProvider();
118
+ const providerName = PROVIDERS[provider]?.name || provider;
119
+ return { name: 'API key', status: 'pass', message: `configured via environment variable (${providerName})` };
120
+ }
121
+ return { name: 'API key', status: 'fail', message: 'not configured — run: kbot auth' };
122
+ }
123
+ const provider = config.byok_provider || 'anthropic';
124
+ const providerName = PROVIDERS[provider]?.name || provider;
125
+ const hasKey = !!config.byok_key;
126
+ if (isLocalProvider(provider)) {
127
+ return { name: 'API key', status: 'pass', message: `${providerName} (local — no key required)` };
128
+ }
129
+ if (hasKey) {
130
+ return { name: 'API key', status: 'pass', message: `configured (${providerName})` };
131
+ }
132
+ return { name: 'API key', status: 'fail', message: `provider set to ${providerName} but no key found — run: kbot auth` };
133
+ }
134
+ async function checkProviderReachable() {
135
+ const config = loadConfig();
136
+ const byokActive = isByokEnabled();
137
+ if (!byokActive && !config?.byok_enabled) {
138
+ return { name: 'Provider reachable', status: 'warn', message: 'no provider configured — skipped' };
139
+ }
140
+ const provider = config?.byok_provider || getByokProvider();
141
+ const providerConfig = PROVIDERS[provider];
142
+ if (!providerConfig) {
143
+ return { name: 'Provider reachable', status: 'fail', message: `unknown provider: ${provider}` };
144
+ }
145
+ // For local providers, check their health endpoints
146
+ if (isLocalProvider(provider)) {
147
+ try {
148
+ const url = provider === 'openclaw'
149
+ ? providerConfig.apiUrl.replace('/v1/chat/completions', '/health')
150
+ : providerConfig.apiUrl.replace('/v1/chat/completions', '/v1/models');
151
+ // Ollama uses a different base path
152
+ const checkUrl = provider === 'ollama'
153
+ ? providerConfig.apiUrl.replace('/v1/chat/completions', '/api/tags')
154
+ : url;
155
+ const res = await fetch(checkUrl, { signal: AbortSignal.timeout(3000) });
156
+ if (res.ok) {
157
+ return { name: 'Provider reachable', status: 'pass', message: `${providerConfig.name} is responding` };
158
+ }
159
+ return { name: 'Provider reachable', status: 'fail', message: `${providerConfig.name} returned ${res.status}` };
160
+ }
161
+ catch {
162
+ return { name: 'Provider reachable', status: 'fail', message: `${providerConfig.name} not responding` };
163
+ }
164
+ }
165
+ // For cloud providers, do a lightweight HEAD/GET to the API base
166
+ try {
167
+ // Strip the specific endpoint to get the base domain
168
+ const url = new URL(providerConfig.apiUrl);
169
+ const baseUrl = `${url.protocol}//${url.host}`;
170
+ const res = await fetch(baseUrl, {
171
+ method: 'HEAD',
172
+ signal: AbortSignal.timeout(5000),
173
+ });
174
+ // Any response (even 401/404) means the host is reachable
175
+ return { name: 'Provider reachable', status: 'pass', message: `${providerConfig.name} host is reachable` };
176
+ }
177
+ catch {
178
+ return { name: 'Provider reachable', status: 'warn', message: `${providerConfig.name} host unreachable — check your network` };
179
+ }
180
+ }
181
+ async function checkLocalRuntimes() {
182
+ const runtimes = [];
183
+ // Ollama (default port 11434)
184
+ const ollamaUp = await isOllamaRunning();
185
+ if (ollamaUp)
186
+ runtimes.push('Ollama');
187
+ // LM Studio (default port 1234)
188
+ try {
189
+ const lmHost = process.env.LMSTUDIO_HOST || 'http://localhost:1234';
190
+ const res = await fetch(`${lmHost}/v1/models`, { signal: AbortSignal.timeout(2000) });
191
+ if (res.ok)
192
+ runtimes.push('LM Studio');
193
+ }
194
+ catch { /* not running */ }
195
+ // Jan (default port 1337)
196
+ try {
197
+ const janHost = process.env.JAN_HOST || 'http://localhost:1337';
198
+ const res = await fetch(`${janHost}/v1/models`, { signal: AbortSignal.timeout(2000) });
199
+ if (res.ok)
200
+ runtimes.push('Jan');
201
+ }
202
+ catch { /* not running */ }
203
+ // OpenClaw (default port 18789)
204
+ try {
205
+ const openclawHost = process.env.OPENCLAW_HOST || 'http://127.0.0.1:18789';
206
+ const res = await fetch(`${openclawHost}/health`, { signal: AbortSignal.timeout(2000) });
207
+ if (res.ok)
208
+ runtimes.push('OpenClaw');
209
+ }
210
+ catch { /* not running */ }
211
+ if (runtimes.length > 0) {
212
+ return { name: 'Local runtimes', status: 'pass', message: runtimes.join(', ') };
213
+ }
214
+ return { name: 'Local runtimes', status: 'warn', message: 'none detected (Ollama, LM Studio, Jan, OpenClaw)' };
215
+ }
216
+ function checkGit() {
217
+ const version = execQuiet('git --version');
218
+ if (version) {
219
+ return { name: 'Git', status: 'pass', message: version };
220
+ }
221
+ return { name: 'Git', status: 'fail', message: 'not found — install git for version control tools' };
222
+ }
223
+ function checkDiskUsage() {
224
+ if (!existsSync(KBOT_DIR)) {
225
+ return { name: 'Disk usage', status: 'pass', message: '~/.kbot/ does not exist yet' };
226
+ }
227
+ const size = dirSize(KBOT_DIR);
228
+ const formatted = formatBytes(size);
229
+ if (size > 100 * 1024 * 1024) {
230
+ return { name: 'Disk usage', status: 'warn', message: `~/.kbot/ is ${formatted} — consider running: kbot compact` };
231
+ }
232
+ return { name: 'Disk usage', status: 'pass', message: `~/.kbot/ is ${formatted}` };
233
+ }
234
+ function checkLearningData() {
235
+ try {
236
+ const stats = getExtendedStats();
237
+ const parts = [];
238
+ if (stats.patternsCount > 0)
239
+ parts.push(`${stats.patternsCount} patterns`);
240
+ if (stats.solutionsCount > 0)
241
+ parts.push(`${stats.solutionsCount} solutions`);
242
+ if (stats.knowledgeCount > 0)
243
+ parts.push(`${stats.knowledgeCount} knowledge entries`);
244
+ if (stats.correctionsCount > 0)
245
+ parts.push(`${stats.correctionsCount} corrections`);
246
+ if (stats.projectsCount > 0)
247
+ parts.push(`${stats.projectsCount} projects`);
248
+ if (parts.length === 0) {
249
+ return { name: 'Learning data', status: 'warn', message: 'no data yet — kbot learns as you use it' };
250
+ }
251
+ return { name: 'Learning data', status: 'pass', message: parts.join(', ') };
252
+ }
253
+ catch {
254
+ return { name: 'Learning data', status: 'warn', message: 'could not read learning data' };
255
+ }
256
+ }
257
+ function checkShell() {
258
+ const shell = process.env.SHELL || '';
259
+ const shellName = shell.split('/').pop() || 'unknown';
260
+ if (!shell) {
261
+ return { name: 'Shell', status: 'warn', message: 'SHELL env var not set' };
262
+ }
263
+ // Check if kbot completions are installed
264
+ let completionsInstalled = false;
265
+ const home = homedir();
266
+ try {
267
+ if (shellName === 'zsh') {
268
+ // Check common zsh completion paths
269
+ const zshCompPaths = [
270
+ join(home, '.zsh/completions/_kbot'),
271
+ join(home, '.zfunc/_kbot'),
272
+ '/usr/local/share/zsh/site-functions/_kbot',
273
+ '/opt/homebrew/share/zsh/site-functions/_kbot',
274
+ ];
275
+ completionsInstalled = zshCompPaths.some(p => existsSync(p));
276
+ }
277
+ else if (shellName === 'bash') {
278
+ const bashCompPaths = [
279
+ join(home, '.bash_completion.d/kbot'),
280
+ '/etc/bash_completion.d/kbot',
281
+ '/usr/local/etc/bash_completion.d/kbot',
282
+ ];
283
+ completionsInstalled = bashCompPaths.some(p => existsSync(p));
284
+ }
285
+ else if (shellName === 'fish') {
286
+ const fishCompPaths = [
287
+ join(home, '.config/fish/completions/kbot.fish'),
288
+ '/usr/share/fish/vendor_completions.d/kbot.fish',
289
+ ];
290
+ completionsInstalled = fishCompPaths.some(p => existsSync(p));
291
+ }
292
+ }
293
+ catch {
294
+ // Ignore filesystem errors
295
+ }
296
+ const completionStatus = completionsInstalled ? ', completions installed' : '';
297
+ return { name: 'Shell', status: 'pass', message: `${shellName}${completionStatus}` };
298
+ }
299
+ // ── Main runner ──
300
+ export async function runDoctor() {
301
+ const checks = [];
302
+ // Synchronous checks
303
+ checks.push(checkNodeVersion());
304
+ checks.push(checkNpmVersion());
305
+ checks.push(checkKbotVersion());
306
+ checks.push(checkApiKey());
307
+ // Async checks — run in parallel for speed
308
+ const [providerResult, runtimesResult] = await Promise.all([
309
+ checkProviderReachable().catch(() => ({
310
+ name: 'Provider reachable', status: 'warn', message: 'check failed unexpectedly',
311
+ })),
312
+ checkLocalRuntimes().catch(() => ({
313
+ name: 'Local runtimes', status: 'warn', message: 'check failed unexpectedly',
314
+ })),
315
+ ]);
316
+ checks.push(providerResult);
317
+ checks.push(runtimesResult);
318
+ // More synchronous checks
319
+ checks.push(checkGit());
320
+ checks.push(checkDiskUsage());
321
+ checks.push(checkLearningData());
322
+ checks.push(checkShell());
323
+ // Determine overall status
324
+ let overall = 'pass';
325
+ for (const check of checks) {
326
+ if (check.status === 'fail') {
327
+ overall = 'fail';
328
+ break;
329
+ }
330
+ if (check.status === 'warn') {
331
+ overall = 'warn';
332
+ }
333
+ }
334
+ return {
335
+ checks,
336
+ timestamp: new Date().toISOString(),
337
+ overall,
338
+ };
339
+ }
340
+ // ── Formatter ──
341
+ // Color palette matching ui.ts
342
+ const useColor = !process.env.NO_COLOR && process.stdout.isTTY !== false;
343
+ const GREEN = useColor ? chalk.hex('#4ADE80') : chalk;
344
+ const RED = useColor ? chalk.hex('#F87171') : chalk;
345
+ const YELLOW = useColor ? chalk.hex('#FBBF24') : chalk;
346
+ const DIM = useColor ? chalk.dim : ((s) => s);
347
+ const ACCENT = useColor ? chalk.hex('#A78BFA') : chalk;
348
+ const STATUS_ICON = {
349
+ pass: GREEN('✓'),
350
+ warn: YELLOW('!'),
351
+ fail: RED('✗'),
352
+ };
353
+ export function formatDoctorReport(report) {
354
+ const lines = [];
355
+ lines.push('');
356
+ lines.push(` ${ACCENT('K:BOT Doctor')}`);
357
+ lines.push(` ${DIM('─'.repeat(50))}`);
358
+ lines.push('');
359
+ for (const check of report.checks) {
360
+ const icon = STATUS_ICON[check.status];
361
+ const nameCol = check.name.padEnd(20);
362
+ lines.push(` ${icon} ${nameCol}${check.message}`);
363
+ }
364
+ lines.push('');
365
+ lines.push(` ${DIM('─'.repeat(50))}`);
366
+ // Summary
367
+ if (report.overall === 'pass') {
368
+ lines.push(` ${GREEN('All checks passed.')} Ready to go!`);
369
+ }
370
+ else if (report.overall === 'warn') {
371
+ const warnCount = report.checks.filter(c => c.status === 'warn').length;
372
+ lines.push(` ${YELLOW(`${warnCount} warning${warnCount > 1 ? 's' : ''}.`)} kbot will work, but check the items above.`);
373
+ }
374
+ else {
375
+ const failCount = report.checks.filter(c => c.status === 'fail').length;
376
+ lines.push(` ${RED(`${failCount} issue${failCount > 1 ? 's' : ''} found.`)} Fix the items marked ${RED('✗')} above.`);
377
+ }
378
+ lines.push('');
379
+ return lines.join('\n');
380
+ }
381
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ export interface Weakness {
2
+ /** Which subsystem is weak (e.g. 'streaming', 'tool-execution', 'routing') */
3
+ area: string;
4
+ /** What's wrong — human-readable */
5
+ description: string;
6
+ /** Severity: how much this hurts overall quality */
7
+ severity: 'low' | 'medium' | 'high';
8
+ /** Evidence — metric name, sample count, etc. */
9
+ evidence: string;
10
+ /** Suggested file to improve */
11
+ targetFile?: string;
12
+ }
13
+ export interface Proposal {
14
+ /** File path relative to packages/kbot/ */
15
+ file: string;
16
+ /** Description of the change */
17
+ description: string;
18
+ /** The weakness this addresses */
19
+ weakness: Weakness;
20
+ /** Full proposed file content (or diff instructions) */
21
+ patch: string;
22
+ /** Original file content for rollback reference */
23
+ original: string;
24
+ }
25
+ export interface EvolutionResult {
26
+ /** Whether the change was applied or rolled back */
27
+ status: 'applied' | 'rolled-back' | 'skipped';
28
+ /** Why this status */
29
+ reason: string;
30
+ /** Weakness that was targeted */
31
+ weakness: Weakness;
32
+ /** Score improvement (positive = better) */
33
+ delta: number;
34
+ /** Timestamp */
35
+ timestamp: string;
36
+ }
37
+ export interface EvolutionCycle {
38
+ /** Unique ID for this cycle */
39
+ id: string;
40
+ /** When the cycle started */
41
+ startedAt: string;
42
+ /** When the cycle ended */
43
+ endedAt?: string;
44
+ /** Weaknesses found */
45
+ weaknesses: Weakness[];
46
+ /** Proposals generated */
47
+ proposals: Proposal[];
48
+ /** Results of applying proposals */
49
+ results: EvolutionResult[];
50
+ /** Overall cycle status */
51
+ status: 'running' | 'completed' | 'failed' | 'aborted';
52
+ /** Error message if failed */
53
+ error?: string;
54
+ }
55
+ /**
56
+ * Analyze kbot's performance data to find areas for improvement.
57
+ * Uses the confidence engine's skill profile + learning stats.
58
+ */
59
+ export declare function diagnose(): Weakness[];
60
+ /**
61
+ * Ask the LLM to propose a code improvement for a weakness.
62
+ * Reuses the auth/provider pattern from self-eval.ts.
63
+ */
64
+ export declare function proposeImprovement(weakness: Weakness): Promise<Proposal | null>;
65
+ /**
66
+ * Apply a proposal temporarily and run validation (tsc + vitest).
67
+ * Returns true if the change passes, false otherwise.
68
+ */
69
+ export declare function validate(proposal: Proposal): {
70
+ passes: boolean;
71
+ errors: string;
72
+ };
73
+ export interface Metrics {
74
+ /** Lines of code in the file */
75
+ loc: number;
76
+ /** Cyclomatic complexity estimate (branches + loops) */
77
+ complexity: number;
78
+ /** Number of TODO/FIXME/HACK markers */
79
+ todoCount: number;
80
+ /** Number of exported functions */
81
+ exportCount: number;
82
+ }
83
+ export declare function scoreMetrics(source: string): Metrics;
84
+ /**
85
+ * Compute a delta score between before/after metrics.
86
+ * Positive = improvement, negative = regression.
87
+ */
88
+ export declare function computeDelta(before: Metrics, after: Metrics): number;
89
+ /**
90
+ * Run one evolution cycle:
91
+ * 1. Check for clean working tree
92
+ * 2. Diagnose weaknesses
93
+ * 3. For each weakness (max 3): propose → validate → score → apply/rollback
94
+ * 4. Log everything
95
+ */
96
+ export declare function runEvolutionCycle(): Promise<EvolutionCycle>;
97
+ /** Get the full evolution log */
98
+ export declare function getEvolutionLog(): EvolutionCycle[];
99
+ /** Get a summary of evolution activity */
100
+ export declare function getEvolutionStats(): {
101
+ totalCycles: number;
102
+ totalApplied: number;
103
+ totalRolledBack: number;
104
+ totalSkipped: number;
105
+ avgDelta: number;
106
+ lastCycle: string | null;
107
+ };
108
+ /** Format evolution status for terminal display */
109
+ export declare function formatEvolutionStatus(): string;
110
+ /** Format diagnosis output for terminal display */
111
+ export declare function formatDiagnosis(weaknesses: Weakness[]): string;
112
+ //# sourceMappingURL=evolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolution.d.ts","sourceRoot":"","sources":["../src/evolution.ts"],"names":[],"mappings":"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"}