@kernel.chat/kbot 2.13.1 → 2.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,240 @@
1
+ // Simulation Agent — "what if" engine inspired by David Wolpert's
2
+ // mathematical framework for universe simulation. Models codebases
3
+ // and predicts outcomes of changes before executing them.
4
+ import { runAgent } from './agent.js';
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ const IMPORT_RE = /(?:import\s+.*?from\s+['"](.+?)['"]|require\s*\(\s*['"](.+?)['"]\s*\))/g;
8
+ const EXPORT_RE = /export\s+(?:default\s+)?(?:function|class|const|let|var|interface|type|enum)\s+(\w+)/g;
9
+ const SIMULATE_PROMPT = `You are a codebase simulation engine. Predict the outcome of a proposed change.
10
+
11
+ SCENARIO: {description}
12
+ CHANGE TYPE: {changeType}
13
+ TARGET FILES: {targetFiles}
14
+ {constraints}
15
+
16
+ DEPENDENCY GRAPH (files impacted):
17
+ {impactedFiles}
18
+
19
+ FILE CONTENTS:
20
+ {fileContents}
21
+
22
+ Analyze this change and predict:
23
+ 1. What will break?
24
+ 2. What tests will fail?
25
+ 3. What runtime behavior will change?
26
+ 4. What edge cases could cause bugs?
27
+
28
+ Respond in JSON:
29
+ {
30
+ "predictedOutcome": "summary of what happens",
31
+ "riskLevel": "low|medium|high|critical",
32
+ "breakingChanges": [
33
+ {"file": "path", "line": null, "description": "what breaks", "severity": "warning|error", "suggestedFix": "how to fix"}
34
+ ],
35
+ "estimatedEffort": "e.g. 1-2 hours",
36
+ "confidence": 0.0-1.0,
37
+ "recommendations": ["list", "of", "recommendations"]
38
+ }
39
+
40
+ Respond ONLY with the JSON object.`;
41
+ export async function buildDependencyGraph(rootDir) {
42
+ const nodes = new Map();
43
+ const edges = new Map(); // reverse deps: file -> files that import it
44
+ const files = walkDir(rootDir, ['.ts', '.tsx', '.js', '.jsx']);
45
+ for (const filePath of files) {
46
+ try {
47
+ const content = fs.readFileSync(filePath, 'utf-8');
48
+ const relPath = path.relative(rootDir, filePath);
49
+ // Extract exports
50
+ const exports = [];
51
+ let match;
52
+ const exportRe = new RegExp(EXPORT_RE.source, 'g');
53
+ while ((match = exportRe.exec(content)) !== null) {
54
+ if (match[1])
55
+ exports.push(match[1]);
56
+ }
57
+ // Extract imports
58
+ const imports = [];
59
+ const importRe = new RegExp(IMPORT_RE.source, 'g');
60
+ while ((match = importRe.exec(content)) !== null) {
61
+ const importPath = match[1] || match[2];
62
+ if (importPath && !importPath.startsWith('node_modules') && (importPath.startsWith('.') || importPath.startsWith('/'))) {
63
+ const resolved = resolveImport(filePath, importPath, rootDir);
64
+ if (resolved)
65
+ imports.push(resolved);
66
+ }
67
+ }
68
+ nodes.set(relPath, {
69
+ path: relPath,
70
+ exports,
71
+ imports,
72
+ size: content.length,
73
+ });
74
+ // Build reverse edges
75
+ for (const imp of imports) {
76
+ if (!edges.has(imp))
77
+ edges.set(imp, []);
78
+ edges.get(imp).push(relPath);
79
+ }
80
+ }
81
+ catch { /* skip unreadable files */ }
82
+ }
83
+ return { nodes, edges };
84
+ }
85
+ export function findImpactedFiles(graph, changedFiles) {
86
+ const impacted = new Set();
87
+ const queue = [...changedFiles];
88
+ while (queue.length > 0) {
89
+ const file = queue.pop();
90
+ if (impacted.has(file))
91
+ continue;
92
+ impacted.add(file);
93
+ // Find files that depend on this one
94
+ const dependents = graph.edges.get(file) || [];
95
+ for (const dep of dependents) {
96
+ if (!impacted.has(dep))
97
+ queue.push(dep);
98
+ }
99
+ }
100
+ return [...impacted];
101
+ }
102
+ export async function simulateChange(scenario, graph) {
103
+ const rootDir = process.cwd();
104
+ const depGraph = graph || await buildDependencyGraph(rootDir);
105
+ const impacted = findImpactedFiles(depGraph, scenario.targetFiles);
106
+ const impactedSummary = impacted.slice(0, 20).join('\n');
107
+ // Read target + impacted files (limited to prevent token overflow)
108
+ const fileContents = [];
109
+ const filesToRead = [...new Set([...scenario.targetFiles, ...impacted.slice(0, 10)])];
110
+ for (const f of filesToRead) {
111
+ const fullPath = path.resolve(rootDir, f);
112
+ try {
113
+ const content = fs.readFileSync(fullPath, 'utf-8');
114
+ fileContents.push(`### ${f}\n\`\`\`\n${content.slice(0, 2000)}\n\`\`\``);
115
+ }
116
+ catch { /* skip missing files */ }
117
+ }
118
+ const constraintText = scenario.constraints?.length
119
+ ? `CONSTRAINTS:\n${scenario.constraints.map(c => `- ${c}`).join('\n')}`
120
+ : '';
121
+ const prompt = SIMULATE_PROMPT
122
+ .replace('{description}', scenario.description)
123
+ .replace('{changeType}', scenario.changeType)
124
+ .replace('{targetFiles}', scenario.targetFiles.join(', '))
125
+ .replace('{constraints}', constraintText)
126
+ .replace('{impactedFiles}', impactedSummary)
127
+ .replace('{fileContents}', fileContents.join('\n\n'));
128
+ try {
129
+ const result = await runAgent(prompt, {
130
+ agent: 'coder',
131
+ stream: false,
132
+ skipPlanner: true,
133
+ });
134
+ const match = result.content.match(/\{[\s\S]*\}/);
135
+ if (match) {
136
+ const parsed = JSON.parse(match[0]);
137
+ return {
138
+ scenario,
139
+ predictedOutcome: parsed.predictedOutcome || 'Unable to predict',
140
+ riskLevel: parsed.riskLevel || 'medium',
141
+ breakingChanges: parsed.breakingChanges || [],
142
+ estimatedEffort: parsed.estimatedEffort || 'unknown',
143
+ confidence: Math.max(0, Math.min(1, parsed.confidence || 0.5)),
144
+ recommendations: parsed.recommendations || [],
145
+ };
146
+ }
147
+ }
148
+ catch { /* fall through */ }
149
+ return {
150
+ scenario,
151
+ predictedOutcome: 'Simulation could not complete',
152
+ riskLevel: 'high',
153
+ breakingChanges: [],
154
+ estimatedEffort: 'unknown',
155
+ confidence: 0,
156
+ recommendations: ['Manual review recommended'],
157
+ };
158
+ }
159
+ export class Simulator {
160
+ rootDir;
161
+ graph = null;
162
+ constructor(rootDir) {
163
+ this.rootDir = rootDir || process.cwd();
164
+ }
165
+ async init() {
166
+ this.graph = await buildDependencyGraph(this.rootDir);
167
+ }
168
+ async simulate(scenario) {
169
+ if (!this.graph)
170
+ await this.init();
171
+ return simulateChange(scenario, this.graph);
172
+ }
173
+ async compareScenarios(scenarios) {
174
+ if (!this.graph)
175
+ await this.init();
176
+ const results = [];
177
+ for (const scenario of scenarios) {
178
+ results.push(await simulateChange(scenario, this.graph));
179
+ }
180
+ // Rank by lowest risk + highest confidence
181
+ const riskOrder = { low: 0, medium: 1, high: 2, critical: 3 };
182
+ let bestIdx = 0;
183
+ let bestScore = Infinity;
184
+ for (let i = 0; i < results.length; i++) {
185
+ const score = riskOrder[results[i].riskLevel] * 10
186
+ + results[i].breakingChanges.length
187
+ - results[i].confidence * 5;
188
+ if (score < bestScore) {
189
+ bestScore = score;
190
+ bestIdx = i;
191
+ }
192
+ }
193
+ return {
194
+ scenarios: results,
195
+ recommended: bestIdx,
196
+ reasoning: `Scenario ${bestIdx + 1} has the lowest risk (${results[bestIdx].riskLevel}) with ${results[bestIdx].breakingChanges.length} breaking changes and ${(results[bestIdx].confidence * 100).toFixed(0)}% confidence.`,
197
+ };
198
+ }
199
+ getGraph() {
200
+ return this.graph;
201
+ }
202
+ }
203
+ // ── Helpers ────────────────────────────────────────────────────────
204
+ function walkDir(dir, extensions) {
205
+ const results = [];
206
+ const SKIP = new Set(['node_modules', '.git', 'dist', 'build', '.next', 'coverage']);
207
+ try {
208
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
209
+ for (const entry of entries) {
210
+ if (SKIP.has(entry.name))
211
+ continue;
212
+ const full = path.join(dir, entry.name);
213
+ if (entry.isDirectory()) {
214
+ results.push(...walkDir(full, extensions));
215
+ }
216
+ else if (extensions.some(ext => entry.name.endsWith(ext))) {
217
+ results.push(full);
218
+ }
219
+ }
220
+ }
221
+ catch { /* skip unreadable dirs */ }
222
+ return results;
223
+ }
224
+ function resolveImport(from, importPath, rootDir) {
225
+ const dir = path.dirname(from);
226
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.js'];
227
+ for (const ext of extensions) {
228
+ const candidate = path.resolve(dir, importPath + ext);
229
+ if (fs.existsSync(candidate)) {
230
+ return path.relative(rootDir, candidate);
231
+ }
232
+ }
233
+ // Try exact path
234
+ const exact = path.resolve(dir, importPath);
235
+ if (fs.existsSync(exact)) {
236
+ return path.relative(rootDir, exact);
237
+ }
238
+ return null;
239
+ }
240
+ //# sourceMappingURL=simulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation.js","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kernel.chat/kbot",
3
- "version": "2.13.1",
4
- "description": "Local-first AI agent for your terminal. 39 specialists, 167 tools, 19 providers. Self-evolving, learns your patterns, runs offline with Ollama. Open-source Claude Code alternative.",
3
+ "version": "2.14.1",
4
+ "description": "Local-first AI agent for your terminal. 39 specialists, 172 tools, 19 providers. Self-evolving, learns your patterns, runs offline with Ollama. Open-source Claude Code alternative.",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",