@kernel.chat/kbot 2.13.0 → 2.14.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,251 @@
1
+ // Computational decidability detection — inspired by Gödel's incompleteness
2
+ // theorem and the UBC Okanagan research proving some problems can't be solved
3
+ // algorithmically. Detects when the agent is stuck and should hand off.
4
+ export var LoopPattern;
5
+ (function (LoopPattern) {
6
+ LoopPattern["tool_repetition"] = "tool_repetition";
7
+ LoopPattern["output_oscillation"] = "output_oscillation";
8
+ LoopPattern["cost_spiral"] = "cost_spiral";
9
+ LoopPattern["context_exhaustion"] = "context_exhaustion";
10
+ LoopPattern["semantic_stagnation"] = "semantic_stagnation";
11
+ LoopPattern["circular_reasoning"] = "circular_reasoning";
12
+ })(LoopPattern || (LoopPattern = {}));
13
+ const RECOMMENDATIONS = {
14
+ [LoopPattern.tool_repetition]: 'simplify',
15
+ [LoopPattern.output_oscillation]: 'handoff',
16
+ [LoopPattern.cost_spiral]: 'handoff',
17
+ [LoopPattern.context_exhaustion]: 'decompose',
18
+ [LoopPattern.semantic_stagnation]: 'simplify',
19
+ [LoopPattern.circular_reasoning]: 'handoff',
20
+ };
21
+ const EVIDENCE_MESSAGES = {
22
+ [LoopPattern.tool_repetition]: 'Same tool called repeatedly with similar arguments — try a different approach.',
23
+ [LoopPattern.output_oscillation]: 'Output alternating between two states — going back and forth without progress.',
24
+ [LoopPattern.cost_spiral]: 'Cost is accelerating without convergence — getting expensive without results.',
25
+ [LoopPattern.context_exhaustion]: 'Context window nearly full — too much information for one pass.',
26
+ [LoopPattern.semantic_stagnation]: 'Last several outputs are nearly identical — not making progress.',
27
+ [LoopPattern.circular_reasoning]: 'Tool results being fed back as inputs — reasoning in circles.',
28
+ };
29
+ export function jaccardSimilarity(a, b) {
30
+ const setA = new Set(a.toLowerCase().split(/\s+/).filter(w => w.length > 2));
31
+ const setB = new Set(b.toLowerCase().split(/\s+/).filter(w => w.length > 2));
32
+ if (setA.size === 0 && setB.size === 0)
33
+ return 1;
34
+ if (setA.size === 0 || setB.size === 0)
35
+ return 0;
36
+ let intersection = 0;
37
+ for (const w of setA) {
38
+ if (setB.has(w))
39
+ intersection++;
40
+ }
41
+ const union = new Set([...setA, ...setB]).size;
42
+ return union === 0 ? 0 : intersection / union;
43
+ }
44
+ export function detectOscillation(outputs) {
45
+ if (outputs.length < 4)
46
+ return false;
47
+ const recent = outputs.slice(-6);
48
+ if (recent.length < 4)
49
+ return false;
50
+ // Check A-B-A-B pattern: compare [0] with [2] and [1] with [3]
51
+ for (let i = 0; i <= recent.length - 4; i++) {
52
+ const simAC = jaccardSimilarity(recent[i], recent[i + 2]);
53
+ const simBD = jaccardSimilarity(recent[i + 1], recent[i + 3]);
54
+ const simAB = jaccardSimilarity(recent[i], recent[i + 1]);
55
+ // A≈C and B≈D but A≠B → oscillation
56
+ if (simAC > 0.8 && simBD > 0.8 && simAB < 0.5)
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ export class LoopDetector {
62
+ toolHistory = [];
63
+ outputs = [];
64
+ totalCost = 0;
65
+ costHistory = [];
66
+ totalTokens = 0;
67
+ opts;
68
+ constructor(options) {
69
+ this.opts = {
70
+ maxToolRepeats: options?.maxToolRepeats ?? 5,
71
+ maxCostUsd: options?.maxCostUsd ?? 1.0,
72
+ maxTokens: options?.maxTokens ?? 50000,
73
+ similarityThreshold: options?.similarityThreshold ?? 0.85,
74
+ };
75
+ }
76
+ recordToolCall(toolName, args, result) {
77
+ this.toolHistory.push({ name: toolName, args, result, timestamp: Date.now() });
78
+ }
79
+ recordOutput(output) {
80
+ this.outputs.push(output);
81
+ }
82
+ recordCost(costUsd) {
83
+ this.totalCost += costUsd;
84
+ this.costHistory.push(this.totalCost);
85
+ }
86
+ recordTokens(tokens) {
87
+ this.totalTokens += tokens;
88
+ }
89
+ check() {
90
+ const base = {
91
+ tokensBurned: this.totalTokens,
92
+ costBurned: this.totalCost,
93
+ };
94
+ // 1. Tool repetition
95
+ const repetition = this.checkToolRepetition();
96
+ if (repetition)
97
+ return { ...base, ...repetition };
98
+ // 2. Output oscillation
99
+ if (detectOscillation(this.outputs)) {
100
+ return {
101
+ ...base,
102
+ decidable: false,
103
+ confidence: 0.85,
104
+ pattern: LoopPattern.output_oscillation,
105
+ evidence: EVIDENCE_MESSAGES[LoopPattern.output_oscillation],
106
+ recommendation: RECOMMENDATIONS[LoopPattern.output_oscillation],
107
+ };
108
+ }
109
+ // 3. Cost spiral
110
+ if (this.checkCostSpiral()) {
111
+ return {
112
+ ...base,
113
+ decidable: false,
114
+ confidence: 0.9,
115
+ pattern: LoopPattern.cost_spiral,
116
+ evidence: `${EVIDENCE_MESSAGES[LoopPattern.cost_spiral]} ($${this.totalCost.toFixed(2)} spent)`,
117
+ recommendation: RECOMMENDATIONS[LoopPattern.cost_spiral],
118
+ };
119
+ }
120
+ // 4. Context exhaustion
121
+ if (this.totalTokens > this.opts.maxTokens) {
122
+ return {
123
+ ...base,
124
+ decidable: false,
125
+ confidence: 0.95,
126
+ pattern: LoopPattern.context_exhaustion,
127
+ evidence: `${EVIDENCE_MESSAGES[LoopPattern.context_exhaustion]} (${this.totalTokens} tokens used)`,
128
+ recommendation: RECOMMENDATIONS[LoopPattern.context_exhaustion],
129
+ };
130
+ }
131
+ // 5. Semantic stagnation
132
+ if (this.checkSemanticStagnation()) {
133
+ return {
134
+ ...base,
135
+ decidable: false,
136
+ confidence: 0.8,
137
+ pattern: LoopPattern.semantic_stagnation,
138
+ evidence: EVIDENCE_MESSAGES[LoopPattern.semantic_stagnation],
139
+ recommendation: RECOMMENDATIONS[LoopPattern.semantic_stagnation],
140
+ };
141
+ }
142
+ // 6. Circular reasoning
143
+ if (this.checkCircularReasoning()) {
144
+ return {
145
+ ...base,
146
+ decidable: false,
147
+ confidence: 0.75,
148
+ pattern: LoopPattern.circular_reasoning,
149
+ evidence: EVIDENCE_MESSAGES[LoopPattern.circular_reasoning],
150
+ recommendation: RECOMMENDATIONS[LoopPattern.circular_reasoning],
151
+ };
152
+ }
153
+ // All clear
154
+ return {
155
+ ...base,
156
+ decidable: true,
157
+ confidence: 1.0,
158
+ evidence: 'No loop patterns detected.',
159
+ recommendation: 'continue',
160
+ };
161
+ }
162
+ reset() {
163
+ this.toolHistory = [];
164
+ this.outputs = [];
165
+ this.totalCost = 0;
166
+ this.costHistory = [];
167
+ this.totalTokens = 0;
168
+ }
169
+ checkToolRepetition() {
170
+ if (this.toolHistory.length < this.opts.maxToolRepeats)
171
+ return null;
172
+ // Group recent calls by tool name
173
+ const recent = this.toolHistory.slice(-10);
174
+ const groups = new Map();
175
+ for (const record of recent) {
176
+ if (!groups.has(record.name))
177
+ groups.set(record.name, []);
178
+ groups.get(record.name).push(record);
179
+ }
180
+ for (const [name, calls] of groups) {
181
+ if (calls.length < this.opts.maxToolRepeats)
182
+ continue;
183
+ // Check if args are similar
184
+ let similarCount = 0;
185
+ for (let i = 1; i < calls.length; i++) {
186
+ if (jaccardSimilarity(calls[i].args, calls[0].args) > this.opts.similarityThreshold) {
187
+ similarCount++;
188
+ }
189
+ }
190
+ if (similarCount >= this.opts.maxToolRepeats - 1) {
191
+ return {
192
+ decidable: false,
193
+ confidence: 0.9,
194
+ pattern: LoopPattern.tool_repetition,
195
+ evidence: `${EVIDENCE_MESSAGES[LoopPattern.tool_repetition]} (${name} called ${calls.length}x)`,
196
+ recommendation: RECOMMENDATIONS[LoopPattern.tool_repetition],
197
+ };
198
+ }
199
+ }
200
+ return null;
201
+ }
202
+ checkCostSpiral() {
203
+ if (this.totalCost < this.opts.maxCostUsd)
204
+ return false;
205
+ if (this.costHistory.length < 4)
206
+ return true; // Over budget with few steps = spiral
207
+ // Check if cost rate is accelerating
208
+ const recent = this.costHistory.slice(-4);
209
+ const deltas = [];
210
+ for (let i = 1; i < recent.length; i++) {
211
+ deltas.push(recent[i] - recent[i - 1]);
212
+ }
213
+ // Accelerating if each delta is larger than the previous
214
+ return deltas.length >= 2 && deltas[deltas.length - 1] > deltas[0];
215
+ }
216
+ checkSemanticStagnation() {
217
+ if (this.outputs.length < 3)
218
+ return false;
219
+ const recent = this.outputs.slice(-3);
220
+ for (let i = 1; i < recent.length; i++) {
221
+ if (jaccardSimilarity(recent[i], recent[0]) < 0.9)
222
+ return false;
223
+ }
224
+ return true;
225
+ }
226
+ checkCircularReasoning() {
227
+ if (this.toolHistory.length < 3)
228
+ return false;
229
+ const recent = this.toolHistory.slice(-5);
230
+ for (let i = 1; i < recent.length; i++) {
231
+ const prevResult = recent[i - 1].result;
232
+ const currArgs = recent[i].args;
233
+ // If >40% of words in current args appeared in previous result
234
+ if (prevResult.length > 20 && currArgs.length > 20) {
235
+ const resultWords = new Set(prevResult.toLowerCase().split(/\s+/).filter(w => w.length > 3));
236
+ const argWords = currArgs.toLowerCase().split(/\s+/).filter(w => w.length > 3);
237
+ if (argWords.length === 0)
238
+ continue;
239
+ let overlap = 0;
240
+ for (const w of argWords) {
241
+ if (resultWords.has(w))
242
+ overlap++;
243
+ }
244
+ if (overlap / argWords.length > 0.4)
245
+ return true;
246
+ }
247
+ }
248
+ return false;
249
+ }
250
+ }
251
+ //# sourceMappingURL=godel-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"godel-limits.js","sourceRoot":"","sources":["../src/godel-limits.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,wEAAwE;AAExE,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,kDAAmC,CAAA;IACnC,wDAAyC,CAAA;IACzC,0CAA2B,CAAA;IAC3B,wDAAyC,CAAA;IACzC,0DAA2C,CAAA;IAC3C,wDAAyC,CAAA;AAC3C,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AA0BD,MAAM,eAAe,GAA2E;IAC9F,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,UAAU;IACzC,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,SAAS;IAC3C,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,SAAS;IACpC,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,WAAW;IAC7C,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,UAAU;IAC7C,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,SAAS;CAC5C,CAAA;AAED,MAAM,iBAAiB,GAAgC;IACrD,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,gFAAgF;IAC/G,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,gFAAgF;IAClH,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,+EAA+E;IAC1G,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,iEAAiE;IACnG,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,kEAAkE;IACrG,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,+DAA+D;CAClG,CAAA;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5E,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAEhD,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,YAAY,EAAE,CAAA;IAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAiB;IACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAEnC,+DAA+D;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEzD,oCAAoC;QACpC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG;YAAE,OAAO,IAAI,CAAA;IAC5D,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,OAAO,YAAY;IACf,WAAW,GAAiB,EAAE,CAAA;IAC9B,OAAO,GAAa,EAAE,CAAA;IACtB,SAAS,GAAG,CAAC,CAAA;IACb,WAAW,GAAa,EAAE,CAAA;IAC1B,WAAW,GAAG,CAAC,CAAA;IACf,IAAI,CAAS;IAErB,YAAY,OAA0B;QACpC,IAAI,CAAC,IAAI,GAAG;YACV,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC;YAC5C,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,GAAG;YACtC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;YACtC,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,IAAI;SAC1D,CAAA;IACH,CAAC;IAED,cAAc,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAc;QAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,SAAS,IAAI,OAAO,CAAA;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,WAAW,IAAI,MAAM,CAAA;IAC5B,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAoG;YAC5G,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,UAAU,EAAE,IAAI,CAAC,SAAS;SAC3B,CAAA;QAED,qBAAqB;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC7C,IAAI,UAAU;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAA;QAEjD,wBAAwB;QACxB,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,WAAW,CAAC,kBAAkB;gBACvC,QAAQ,EAAE,iBAAiB,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBAC3D,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC;aAChE,CAAA;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,WAAW,CAAC,WAAW;gBAChC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAC/F,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC;aACzD,CAAA;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3C,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,WAAW,CAAC,kBAAkB;gBACvC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,WAAW,eAAe;gBAClG,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC;aAChE,CAAA;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACnC,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,WAAW,CAAC,mBAAmB;gBACxC,QAAQ,EAAE,iBAAiB,CAAC,WAAW,CAAC,mBAAmB,CAAC;gBAC5D,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,mBAAmB,CAAC;aACjE,CAAA;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAClC,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,WAAW,CAAC,kBAAkB;gBACvC,QAAQ,EAAE,iBAAiB,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBAC3D,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC;aAChE,CAAA;QACH,CAAC;QAED,YAAY;QACZ,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,4BAA4B;YACtC,cAAc,EAAE,UAAU;SAC3B,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;IACtB,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QAEnE,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;QAE9C,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,SAAQ;YAErD,4BAA4B;YAC5B,IAAI,YAAY,GAAG,CAAC,CAAA;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACpF,YAAY,EAAE,CAAA;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO;oBACL,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,WAAW,CAAC,eAAe;oBACpC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,IAAI,WAAW,KAAK,CAAC,MAAM,IAAI;oBAC/F,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC;iBAC7D,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAA;QACvD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA,CAAC,sCAAsC;QAEnF,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;QAED,yDAAyD;QACzD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;IAEO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;gBAAE,OAAO,KAAK,CAAA;QACjE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,sBAAsB;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAE/B,+DAA+D;YAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACnD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;gBAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC9E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBAEnC,IAAI,OAAO,GAAG,CAAC,CAAA;gBACf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;wBAAE,OAAO,EAAE,CAAA;gBAAC,CAAC;gBAC/D,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG;oBAAE,OAAO,IAAI,CAAA;YAClD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
@@ -11,7 +11,7 @@ import { initBridge, chat, executeCommand, getStatus, getAgents, getContext, get
11
11
  import { formatDiagnostics } from './lsp-bridge.js';
12
12
  const AGENT_IDENTITY = {
13
13
  name: 'K:BOT',
14
- version: '2.13.0',
14
+ version: '2.13.1',
15
15
  description: 'Open-source terminal AI agent — 39 specialists, 167 tools, 19 providers, local-first',
16
16
  capabilities: ['chat', 'codeAction', 'diagnostics', 'tools'],
17
17
  };
@@ -0,0 +1,50 @@
1
+ export interface SimulationScenario {
2
+ description: string;
3
+ targetFiles: string[];
4
+ changeType: 'refactor' | 'add_feature' | 'delete' | 'migrate' | 'upgrade';
5
+ constraints?: string[];
6
+ }
7
+ export interface BreakingChange {
8
+ file: string;
9
+ line?: number;
10
+ description: string;
11
+ severity: 'warning' | 'error';
12
+ suggestedFix?: string;
13
+ }
14
+ export interface SimulationResult {
15
+ scenario: SimulationScenario;
16
+ predictedOutcome: string;
17
+ riskLevel: 'low' | 'medium' | 'high' | 'critical';
18
+ breakingChanges: BreakingChange[];
19
+ estimatedEffort: string;
20
+ confidence: number;
21
+ recommendations: string[];
22
+ }
23
+ export interface ComparisonResult {
24
+ scenarios: SimulationResult[];
25
+ recommended: number;
26
+ reasoning: string;
27
+ }
28
+ export interface FileNode {
29
+ path: string;
30
+ exports: string[];
31
+ imports: string[];
32
+ size: number;
33
+ }
34
+ export interface DependencyGraph {
35
+ nodes: Map<string, FileNode>;
36
+ edges: Map<string, string[]>;
37
+ }
38
+ export declare function buildDependencyGraph(rootDir: string): Promise<DependencyGraph>;
39
+ export declare function findImpactedFiles(graph: DependencyGraph, changedFiles: string[]): string[];
40
+ export declare function simulateChange(scenario: SimulationScenario, graph?: DependencyGraph): Promise<SimulationResult>;
41
+ export declare class Simulator {
42
+ private rootDir;
43
+ private graph;
44
+ constructor(rootDir?: string);
45
+ init(): Promise<void>;
46
+ simulate(scenario: SimulationScenario): Promise<SimulationResult>;
47
+ compareScenarios(scenarios: SimulationScenario[]): Promise<ComparisonResult>;
48
+ getGraph(): DependencyGraph | null;
49
+ }
50
+ //# sourceMappingURL=simulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IACzE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;IACjD,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC7B;AAsCD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8CpF;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,EAAE,CAiBV;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,CAAC,EAAE,eAAe,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA8D3B;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAA+B;gBAEhC,OAAO,CAAC,EAAE,MAAM;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKjE,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8BlF,QAAQ,IAAI,eAAe,GAAG,IAAI;CAGnC"}
@@ -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.0",
4
- "description": "K:BOT Open-source terminal AI agent. 39 specialists, 167 tools, 19 providers, local-first.",
3
+ "version": "2.14.0",
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",
@@ -24,20 +24,26 @@
24
24
  "typecheck": "tsc --noEmit"
25
25
  },
26
26
  "keywords": [
27
- "ai",
28
- "cli",
29
- "agent",
30
- "kernel",
31
- "terminal",
27
+ "ai-agent",
28
+ "local-ai",
29
+ "terminal-ai",
30
+ "cli-ai",
31
+ "code-generation",
32
+ "ai-coding-assistant",
33
+ "local-first",
32
34
  "llm",
33
- "mcp",
35
+ "automation",
36
+ "developer-tools",
34
37
  "ollama",
35
- "anthropic",
36
- "openai",
37
- "coding-agent",
38
- "local-first",
38
+ "claude",
39
+ "gpt",
40
+ "ai-terminal",
41
+ "code-review",
42
+ "self-evolving",
39
43
  "multi-model",
40
- "openclaw"
44
+ "mcp",
45
+ "shell-assistant",
46
+ "open-source-ai"
41
47
  ],
42
48
  "author": "kernel.chat group",
43
49
  "license": "MIT",