@jmtrin/opencode-kevin 0.1.5 → 0.3.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.
- package/README.md +108 -33
- package/dist/migrations/003_v02_signal.sql +58 -0
- package/dist/migrations/004_v03_knowledge.sql +138 -0
- package/dist/plugin/CausalChain.d.ts +11 -0
- package/dist/plugin/CausalChain.js +109 -0
- package/dist/plugin/CausalChain.js.map +1 -0
- package/dist/plugin/ContextInjector.d.ts +25 -1
- package/dist/plugin/ContextInjector.js +72 -15
- package/dist/plugin/ContextInjector.js.map +1 -1
- package/dist/plugin/MemoryService.d.ts +110 -3
- package/dist/plugin/MemoryService.js +432 -20
- package/dist/plugin/MemoryService.js.map +1 -1
- package/dist/plugin/Migrate.d.ts +4 -1
- package/dist/plugin/Migrate.js +40 -1
- package/dist/plugin/Migrate.js.map +1 -1
- package/dist/plugin/PatternMiner.d.ts +49 -0
- package/dist/plugin/PatternMiner.js +133 -0
- package/dist/plugin/PatternMiner.js.map +1 -0
- package/dist/plugin/Reflector.d.ts +45 -2
- package/dist/plugin/Reflector.js +134 -12
- package/dist/plugin/Reflector.js.map +1 -1
- package/dist/plugin/Retrospective.d.ts +4 -1
- package/dist/plugin/Retrospective.js +72 -5
- package/dist/plugin/Retrospective.js.map +1 -1
- package/dist/plugin/Store.d.ts +15 -0
- package/dist/plugin/Store.js +15 -0
- package/dist/plugin/Store.js.map +1 -1
- package/dist/plugin/ToolCallObserver.d.ts +4 -1
- package/dist/plugin/ToolCallObserver.js +39 -7
- package/dist/plugin/ToolCallObserver.js.map +1 -1
- package/dist/plugin/fingerprint.d.ts +27 -0
- package/dist/plugin/fingerprint.js +74 -0
- package/dist/plugin/fingerprint.js.map +1 -0
- package/dist/plugin/index.js +213 -15
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/kevin_why.d.ts +19 -0
- package/dist/plugin/kevin_why.js +92 -0
- package/dist/plugin/kevin_why.js.map +1 -0
- package/dist/plugin/memory-format.d.ts +2 -0
- package/dist/plugin/memory-format.js +6 -3
- package/dist/plugin/memory-format.js.map +1 -1
- package/dist/plugin/metrics.d.ts +60 -0
- package/dist/plugin/metrics.js +162 -0
- package/dist/plugin/metrics.js.map +1 -0
- package/dist/plugin/okf-export.d.ts +3 -0
- package/dist/plugin/okf-export.js +86 -0
- package/dist/plugin/okf-export.js.map +1 -0
- package/dist/plugin/okf-import.d.ts +73 -0
- package/dist/plugin/okf-import.js +239 -0
- package/dist/plugin/okf-import.js.map +1 -0
- package/dist/plugin/redact.d.ts +1 -0
- package/dist/plugin/redact.js +7 -0
- package/dist/plugin/redact.js.map +1 -1
- package/migrations/003_v02_signal.sql +58 -0
- package/migrations/004_v03_knowledge.sql +138 -0
- package/package.json +48 -48
package/dist/plugin/index.js
CHANGED
|
@@ -3,14 +3,20 @@ import { homedir } from "node:os";
|
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { tool } from "@opencode-ai/plugin";
|
|
6
|
+
import { CausalChain } from "./CausalChain.js";
|
|
6
7
|
import { ContextInjector } from "./ContextInjector.js";
|
|
7
|
-
import { MemoryService } from "./MemoryService.js";
|
|
8
|
+
import { MemoryService, } from "./MemoryService.js";
|
|
8
9
|
import { Migrate } from "./Migrate.js";
|
|
10
|
+
import { PatternMiner } from "./PatternMiner.js";
|
|
9
11
|
import { ERROR_LINE_RE, Reflector, STRONG_ERROR_RE } from "./Reflector.js";
|
|
10
12
|
import { Retrospective } from "./Retrospective.js";
|
|
11
13
|
import { Store } from "./Store.js";
|
|
12
14
|
import { ToolCallObserver } from "./ToolCallObserver.js";
|
|
15
|
+
import { kevinWhy } from "./kevin_why.js";
|
|
13
16
|
import { formatMemories } from "./memory-format.js";
|
|
17
|
+
import { Metrics, estimateTokens } from "./metrics.js";
|
|
18
|
+
import { exportMarkdown, exportOkf } from "./okf-export.js";
|
|
19
|
+
import { importOkf } from "./okf-import.js";
|
|
14
20
|
const SYSTEM_TRANSFORM_TOKENS = 1500;
|
|
15
21
|
const COMPACTING_TOKENS = 2000;
|
|
16
22
|
function resolveMigrationsDir() {
|
|
@@ -28,15 +34,31 @@ export const KevinPlugin = async (input, options) => {
|
|
|
28
34
|
const store = new Store({ path: dbPath });
|
|
29
35
|
const migrationsDir = opts.migrationsDir ?? resolveMigrationsDir();
|
|
30
36
|
await new Migrate(store, migrationsDir).run();
|
|
31
|
-
const
|
|
32
|
-
const
|
|
37
|
+
const metrics = new Metrics(store);
|
|
38
|
+
const memoryService = new MemoryService(store, metrics);
|
|
39
|
+
const observer = new ToolCallObserver(store, metrics);
|
|
40
|
+
// v0.3.0 fix — Prepared UPDATE used by Reflector.onLinkError to stamp
|
|
41
|
+
// tool_calls.error_fingerprint with the stderr-based fingerprint the
|
|
42
|
+
// matching error memory uses. Closes the feedback-loop fingerprint
|
|
43
|
+
// mismatch (plan §B6.10 / bug #2): without this, the recurrence
|
|
44
|
+
// queries in boostPositiveReflectors / penalizeRecurringReflectors
|
|
45
|
+
// never match because tool_calls.fingerprint is keyed on
|
|
46
|
+
// `${tool}|${args}|${success}` (set by ToolCallObserver) while error
|
|
47
|
+
// memories use a hash of stderr/stdout (set by Reflector). The
|
|
48
|
+
// callback is a no-op for legacy rows without an id column.
|
|
49
|
+
const linkErrorStmt = store.prepare("UPDATE tool_calls SET error_fingerprint = ? WHERE id = ?");
|
|
33
50
|
const reflector = new Reflector(memoryService, {
|
|
34
51
|
throttleMs: opts.throttleMs,
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
onLinkError: (callID, fp) => {
|
|
53
|
+
linkErrorStmt.run(fp, callID);
|
|
54
|
+
},
|
|
55
|
+
}, metrics);
|
|
56
|
+
const injector = new ContextInjector(memoryService, metrics);
|
|
37
57
|
const retrospective = new Retrospective(store, memoryService, {
|
|
38
58
|
dir: opts.retrospectivesDir,
|
|
39
|
-
});
|
|
59
|
+
}, metrics);
|
|
60
|
+
const patternMiner = new PatternMiner(store, memoryService, metrics);
|
|
61
|
+
const causalChain = new CausalChain(store, memoryService, metrics);
|
|
40
62
|
let currentSessionId = null;
|
|
41
63
|
let lastUserQuery = null;
|
|
42
64
|
const pending = new Set();
|
|
@@ -82,6 +104,7 @@ export const KevinPlugin = async (input, options) => {
|
|
|
82
104
|
exitCode: undefined,
|
|
83
105
|
errorType,
|
|
84
106
|
sessionId: sessionID,
|
|
107
|
+
callID,
|
|
85
108
|
}));
|
|
86
109
|
}
|
|
87
110
|
return {
|
|
@@ -89,7 +112,14 @@ export const KevinPlugin = async (input, options) => {
|
|
|
89
112
|
kevin_save: tool({
|
|
90
113
|
description: "Guarda una memoria en el conocimiento persistente de Kevin (error, pattern, decision o context).",
|
|
91
114
|
args: {
|
|
92
|
-
type: tool.schema.enum([
|
|
115
|
+
type: tool.schema.enum([
|
|
116
|
+
"error",
|
|
117
|
+
"pattern",
|
|
118
|
+
"decision",
|
|
119
|
+
"context",
|
|
120
|
+
"rule",
|
|
121
|
+
"solution",
|
|
122
|
+
]),
|
|
93
123
|
content: tool.schema.string().min(1),
|
|
94
124
|
scope: tool.schema.enum(["project", "session"]).default("project"),
|
|
95
125
|
metadata: tool.schema
|
|
@@ -113,28 +143,102 @@ export const KevinPlugin = async (input, options) => {
|
|
|
113
143
|
},
|
|
114
144
|
}),
|
|
115
145
|
kevin_query: tool({
|
|
116
|
-
description: "Busca memorias por texto (FTS5). Retorna JSON con [{id,type,content,scope}].",
|
|
146
|
+
description: "Busca memorias por texto (FTS5). Retorna JSON con [{id,type,scope,score,snippet}] (slim, v0.2.0). Con full=true retorna [{id,type,content,scope,...}] (legacy v0.1.x).",
|
|
117
147
|
args: {
|
|
118
148
|
query: tool.schema.string().min(1),
|
|
119
149
|
type: tool.schema
|
|
120
|
-
.enum([
|
|
150
|
+
.enum([
|
|
151
|
+
"error",
|
|
152
|
+
"pattern",
|
|
153
|
+
"decision",
|
|
154
|
+
"context",
|
|
155
|
+
"rule",
|
|
156
|
+
"solution",
|
|
157
|
+
])
|
|
121
158
|
.optional(),
|
|
122
159
|
limit: tool.schema.number().int().positive().default(10),
|
|
160
|
+
full: tool.schema
|
|
161
|
+
.boolean()
|
|
162
|
+
.optional()
|
|
163
|
+
.describe("Cuando true, retorna el contenido completo (v0.1.x). Default false (slim)."),
|
|
164
|
+
evidence: tool.schema
|
|
165
|
+
.boolean()
|
|
166
|
+
.optional()
|
|
167
|
+
.describe("Cuando true, incluye confidence, evidence_count y last_verified_at en el payload slim (v0.3.0)."),
|
|
123
168
|
},
|
|
124
169
|
async execute(args) {
|
|
125
170
|
const memories = memoryService.query({
|
|
126
171
|
text: args.query,
|
|
127
172
|
type: args.type,
|
|
128
173
|
limit: args.limit,
|
|
174
|
+
full: args.full === true,
|
|
129
175
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
output: JSON.stringify(memories.map((m) => ({
|
|
176
|
+
const rows = args.full === true
|
|
177
|
+
? memories.map((m) => ({
|
|
133
178
|
id: m.id,
|
|
134
179
|
type: m.type,
|
|
135
180
|
content: m.content,
|
|
136
181
|
scope: m.scope,
|
|
137
|
-
}))
|
|
182
|
+
}))
|
|
183
|
+
: memories.map((m, i) => {
|
|
184
|
+
const base = {
|
|
185
|
+
id: m.id,
|
|
186
|
+
type: m.type,
|
|
187
|
+
scope: m.scope,
|
|
188
|
+
score: m.score,
|
|
189
|
+
snippet: m.snippet,
|
|
190
|
+
};
|
|
191
|
+
if (args.evidence === true) {
|
|
192
|
+
const full = memories[i];
|
|
193
|
+
return {
|
|
194
|
+
...base,
|
|
195
|
+
confidence: full.confidence ?? null,
|
|
196
|
+
evidence_count: full.evidenceCount ?? null,
|
|
197
|
+
last_verified_at: full.lastVerifiedAt ?? null,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return base;
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
title: "Resultados query",
|
|
204
|
+
output: JSON.stringify(rows),
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
}),
|
|
208
|
+
kevin_get: tool({
|
|
209
|
+
description: "Recupera una memoria completa por su id (v0.2.0 — progressive disclosure). Util cuando kevin_query retorna un snippet slim y necesitas el contenido completo.",
|
|
210
|
+
args: {
|
|
211
|
+
id: tool.schema.string().min(1),
|
|
212
|
+
},
|
|
213
|
+
async execute(args) {
|
|
214
|
+
const mem = memoryService.getById(args.id);
|
|
215
|
+
if (mem === null) {
|
|
216
|
+
return {
|
|
217
|
+
title: "No encontrada",
|
|
218
|
+
output: JSON.stringify({
|
|
219
|
+
error: "not_found",
|
|
220
|
+
id: args.id,
|
|
221
|
+
}),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
title: "Memoria encontrada",
|
|
226
|
+
output: JSON.stringify({
|
|
227
|
+
id: mem.id,
|
|
228
|
+
type: mem.type,
|
|
229
|
+
content: mem.content,
|
|
230
|
+
scope: mem.scope,
|
|
231
|
+
relevanceScore: mem.relevanceScore,
|
|
232
|
+
sourceTool: mem.sourceTool ?? null,
|
|
233
|
+
sourceSession: mem.sourceSession ?? null,
|
|
234
|
+
createdAt: mem.createdAt,
|
|
235
|
+
updatedAt: mem.updatedAt,
|
|
236
|
+
expiresAt: mem.expiresAt ?? null,
|
|
237
|
+
projectId: mem.projectId ?? null,
|
|
238
|
+
fingerprint: mem.fingerprint ?? null,
|
|
239
|
+
origin: mem.origin ?? null,
|
|
240
|
+
metadata: mem.metadata ?? null,
|
|
241
|
+
}),
|
|
138
242
|
};
|
|
139
243
|
},
|
|
140
244
|
}),
|
|
@@ -178,12 +282,31 @@ export const KevinPlugin = async (input, options) => {
|
|
|
178
282
|
const retroCount = store
|
|
179
283
|
.prepare("SELECT COUNT(*) as c FROM retrospectives")
|
|
180
284
|
.get();
|
|
285
|
+
// v0.2.0 (K2-014): origin breakdown + metrics snapshot.
|
|
286
|
+
const originRows = store
|
|
287
|
+
.prepare(`SELECT origin, COUNT(*) as c
|
|
288
|
+
FROM memories
|
|
289
|
+
GROUP BY origin`)
|
|
290
|
+
.all();
|
|
291
|
+
const byOrigin = {};
|
|
292
|
+
for (const r of originRows) {
|
|
293
|
+
byOrigin[r.origin ?? "agent"] = r.c;
|
|
294
|
+
}
|
|
295
|
+
const memoriesReflector = byOrigin.reflector ?? 0;
|
|
296
|
+
const memoriesAgent = byOrigin.agent ?? 0;
|
|
297
|
+
const memoriesPattern = byOrigin.pattern ?? 0;
|
|
298
|
+
const memoriesCausal = byOrigin.causal ?? 0;
|
|
181
299
|
return {
|
|
182
300
|
title: "Estado de Kevin",
|
|
183
301
|
output: JSON.stringify({
|
|
184
302
|
memories: memoryCount.c,
|
|
303
|
+
memories_reflector: memoriesReflector,
|
|
304
|
+
memories_agent: memoriesAgent,
|
|
305
|
+
memories_pattern: memoriesPattern,
|
|
306
|
+
memories_causal: memoriesCausal,
|
|
185
307
|
tool_calls: toolCallCount.c,
|
|
186
308
|
retrospectives: retroCount.c,
|
|
309
|
+
metrics: metrics.snapshot(),
|
|
187
310
|
}),
|
|
188
311
|
};
|
|
189
312
|
},
|
|
@@ -217,6 +340,58 @@ export const KevinPlugin = async (input, options) => {
|
|
|
217
340
|
};
|
|
218
341
|
},
|
|
219
342
|
}),
|
|
343
|
+
kevin_why: tool({
|
|
344
|
+
description: "Explica por que Kevin recuerda un hecho (v0.3.0). Retorna summary, confidence, trace de eventos y related_rules.",
|
|
345
|
+
args: {
|
|
346
|
+
query: tool.schema.string().min(1),
|
|
347
|
+
},
|
|
348
|
+
async execute(args) {
|
|
349
|
+
const result = kevinWhy(store, args.query);
|
|
350
|
+
if (!result) {
|
|
351
|
+
return {
|
|
352
|
+
title: "Sin explicacion",
|
|
353
|
+
output: JSON.stringify({
|
|
354
|
+
message: `No causal patterns found for "${args.query}".`,
|
|
355
|
+
}),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
title: "Explicacion causal",
|
|
360
|
+
output: JSON.stringify(result),
|
|
361
|
+
};
|
|
362
|
+
},
|
|
363
|
+
}),
|
|
364
|
+
kevin_export: tool({
|
|
365
|
+
description: "Exporta memorias curadas (decision, rule, pattern) como markdown o formato OKF. v0.3.0.",
|
|
366
|
+
args: {
|
|
367
|
+
format: tool.schema
|
|
368
|
+
.enum(["okf", "markdown"])
|
|
369
|
+
.default("okf")
|
|
370
|
+
.describe("okf | markdown"),
|
|
371
|
+
},
|
|
372
|
+
async execute(args) {
|
|
373
|
+
const output = args.format === "markdown"
|
|
374
|
+
? exportMarkdown(store)
|
|
375
|
+
: exportOkf(store);
|
|
376
|
+
return {
|
|
377
|
+
title: "Export completado",
|
|
378
|
+
output,
|
|
379
|
+
};
|
|
380
|
+
},
|
|
381
|
+
}),
|
|
382
|
+
kevin_import: tool({
|
|
383
|
+
description: "Importa un bundle markdown de conocimiento (v0.3.0). Cada entrada se guarda como context con origin='imported'.",
|
|
384
|
+
args: {
|
|
385
|
+
bundle: tool.schema.string().min(1),
|
|
386
|
+
},
|
|
387
|
+
async execute(args) {
|
|
388
|
+
const result = importOkf(args.bundle, memoryService);
|
|
389
|
+
return {
|
|
390
|
+
title: "Import completado",
|
|
391
|
+
output: JSON.stringify(result),
|
|
392
|
+
};
|
|
393
|
+
},
|
|
394
|
+
}),
|
|
220
395
|
},
|
|
221
396
|
"tool.execute.before": async (hookInput, output) => {
|
|
222
397
|
rememberToolCall(hookInput.callID, hookInput.tool, output.args);
|
|
@@ -263,8 +438,12 @@ export const KevinPlugin = async (input, options) => {
|
|
|
263
438
|
exitCode,
|
|
264
439
|
errorType,
|
|
265
440
|
sessionId: hookInput.sessionID,
|
|
441
|
+
callID: hookInput.callID,
|
|
266
442
|
}));
|
|
267
443
|
}
|
|
444
|
+
else {
|
|
445
|
+
causalChain.onSuccess(hookInput.tool, hookInput.args, null, hookInput.sessionID);
|
|
446
|
+
}
|
|
268
447
|
},
|
|
269
448
|
"chat.message": async (_hookInput, output) => {
|
|
270
449
|
const text = output.parts
|
|
@@ -280,27 +459,37 @@ export const KevinPlugin = async (input, options) => {
|
|
|
280
459
|
"experimental.chat.system.transform": async (_hookInput, output) => {
|
|
281
460
|
if (!lastUserQuery)
|
|
282
461
|
return;
|
|
462
|
+
const suggestion = injector.generateSuggestion();
|
|
463
|
+
if (suggestion)
|
|
464
|
+
output.system.push(suggestion);
|
|
283
465
|
const memories = memoryService.getRelevant({
|
|
284
466
|
query: lastUserQuery,
|
|
285
467
|
maxTokens: SYSTEM_TRANSFORM_TOKENS,
|
|
286
468
|
scope: "project",
|
|
287
469
|
});
|
|
288
470
|
const block = formatMemories(memories, "context");
|
|
289
|
-
if (block)
|
|
471
|
+
if (block) {
|
|
290
472
|
output.system.push(block);
|
|
473
|
+
metrics.incr("tokens_injected_pre_prompt", estimateTokens(block));
|
|
474
|
+
}
|
|
291
475
|
},
|
|
292
476
|
"experimental.session.compacting": async (_hookInput, output) => {
|
|
293
477
|
const query = lastUserQuery;
|
|
294
478
|
if (!query)
|
|
295
479
|
return;
|
|
480
|
+
const suggestion = injector.generateSuggestion();
|
|
481
|
+
if (suggestion)
|
|
482
|
+
output.context.push(suggestion);
|
|
296
483
|
const memories = memoryService.getRelevant({
|
|
297
484
|
query,
|
|
298
485
|
maxTokens: COMPACTING_TOKENS,
|
|
299
486
|
scope: "project",
|
|
300
487
|
});
|
|
301
488
|
const block = formatMemories(memories, "memory");
|
|
302
|
-
if (block)
|
|
489
|
+
if (block) {
|
|
303
490
|
output.context.push(block);
|
|
491
|
+
metrics.incr("tokens_injected_compacting", estimateTokens(block));
|
|
492
|
+
}
|
|
304
493
|
},
|
|
305
494
|
event: async ({ event }) => {
|
|
306
495
|
const type = event.type;
|
|
@@ -315,7 +504,15 @@ export const KevinPlugin = async (input, options) => {
|
|
|
315
504
|
if (sid) {
|
|
316
505
|
toolCache.clear();
|
|
317
506
|
fireAndForget(retrospective.generate(sid));
|
|
507
|
+
memoryService.boostPositiveReflectors(sid);
|
|
508
|
+
const recurred = memoryService.penalizeRecurringReflectors(sid);
|
|
509
|
+
injector.setRecurrences(recurred);
|
|
510
|
+
patternMiner.mine();
|
|
511
|
+
fireAndForget(Promise.resolve().then(() => {
|
|
512
|
+
causalChain.onSessionIdle(sid);
|
|
513
|
+
}));
|
|
318
514
|
}
|
|
515
|
+
metrics.flush();
|
|
319
516
|
}
|
|
320
517
|
else if (type === "session.next.tool.failed") {
|
|
321
518
|
const callID = props.callID;
|
|
@@ -333,6 +530,7 @@ export const KevinPlugin = async (input, options) => {
|
|
|
333
530
|
},
|
|
334
531
|
dispose: async () => {
|
|
335
532
|
await Promise.allSettled([...pending]);
|
|
533
|
+
metrics.close();
|
|
336
534
|
store.close();
|
|
337
535
|
},
|
|
338
536
|
};
|
package/dist/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../plugin/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../plugin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Store } from "./Store.js";
|
|
2
|
+
export interface WhyInput {
|
|
3
|
+
query: string;
|
|
4
|
+
}
|
|
5
|
+
export interface WhyTraceEvent {
|
|
6
|
+
event: "failure" | "fix";
|
|
7
|
+
fingerprint: string;
|
|
8
|
+
session: string;
|
|
9
|
+
ts: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WhyResult {
|
|
12
|
+
summary: string;
|
|
13
|
+
confidence: number;
|
|
14
|
+
evidence_count: number;
|
|
15
|
+
last_verified: string | null;
|
|
16
|
+
trace: WhyTraceEvent[];
|
|
17
|
+
related_rules: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function kevinWhy(store: Store, query: string): WhyResult | null;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { TS_CODE_RULES } from "./Reflector.js";
|
|
2
|
+
export function kevinWhy(store, query) {
|
|
3
|
+
// v0.3.0 fix (bug #7) — the old code wrapped the WHOLE query in a
|
|
4
|
+
// single quoted phrase, so it only matched the exact full-string
|
|
5
|
+
// sequence. Tokenize like MemoryService.queryRelevant: quote each
|
|
6
|
+
// word (escaping inner quotes) and AND them together, so partial or
|
|
7
|
+
// multi-word queries still hit the FTS index.
|
|
8
|
+
const tokens = query
|
|
9
|
+
.trim()
|
|
10
|
+
.split(/\s+/)
|
|
11
|
+
.filter((t) => t.length > 0)
|
|
12
|
+
.map((t) => `"${t.replace(/"/g, '""')}"`);
|
|
13
|
+
if (tokens.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
const match = tokens.join(" AND ");
|
|
16
|
+
const patternRows = store
|
|
17
|
+
.prepare(`SELECT m.id, m.content, m.fingerprint, m.evidence_count,
|
|
18
|
+
m.last_verified_at, m.created_at
|
|
19
|
+
FROM memories_fts
|
|
20
|
+
JOIN memories m ON m.rowid = memories_fts.rowid
|
|
21
|
+
WHERE memories_fts MATCH ?
|
|
22
|
+
AND m.type = 'pattern'
|
|
23
|
+
AND m.origin IN ('causal', 'pattern')
|
|
24
|
+
AND m.status = 'active'
|
|
25
|
+
ORDER BY m.evidence_count DESC, m.created_at DESC
|
|
26
|
+
LIMIT 1`)
|
|
27
|
+
.all(match);
|
|
28
|
+
if (patternRows.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
const pattern = patternRows[0];
|
|
31
|
+
const fp = pattern.fingerprint;
|
|
32
|
+
const confidence = Math.min(1.0, 0.5 + 0.1 * (pattern.evidence_count ?? 0));
|
|
33
|
+
const traceRows = store
|
|
34
|
+
.prepare(`SELECT tc.session_id, tc.ts, tc.success,
|
|
35
|
+
m.id as memory_id, m.type as memory_type, m.created_at as memory_created_at
|
|
36
|
+
FROM tool_calls tc
|
|
37
|
+
LEFT JOIN memories m ON m.fingerprint = tc.fix_for_fingerprint
|
|
38
|
+
AND m.type = 'error' AND m.origin = 'reflector'
|
|
39
|
+
WHERE (tc.fix_for_fingerprint = ? OR tc.fingerprint LIKE ?)
|
|
40
|
+
AND tc.session_id IN (
|
|
41
|
+
SELECT DISTINCT source_session FROM memories
|
|
42
|
+
WHERE fingerprint = ? AND type = 'error'
|
|
43
|
+
)
|
|
44
|
+
ORDER BY tc.ts ASC
|
|
45
|
+
LIMIT 20`)
|
|
46
|
+
.all(fp, `%${fp.slice(0, 8)}%`, fp);
|
|
47
|
+
const trace = [];
|
|
48
|
+
const errorSessions = store
|
|
49
|
+
.prepare(`SELECT DISTINCT source_session, fingerprint, created_at
|
|
50
|
+
FROM memories
|
|
51
|
+
WHERE fingerprint = ? AND type = 'error' AND origin = 'reflector'
|
|
52
|
+
ORDER BY created_at ASC`)
|
|
53
|
+
.all(fp);
|
|
54
|
+
for (const err of errorSessions) {
|
|
55
|
+
trace.push({
|
|
56
|
+
event: "failure",
|
|
57
|
+
fingerprint: err.fingerprint,
|
|
58
|
+
session: err.source_session ?? "unknown",
|
|
59
|
+
ts: err.created_at,
|
|
60
|
+
});
|
|
61
|
+
const fixRow = store
|
|
62
|
+
.prepare(`SELECT session_id, ts FROM tool_calls
|
|
63
|
+
WHERE fix_for_fingerprint = ?
|
|
64
|
+
AND session_id = ?
|
|
65
|
+
ORDER BY ts ASC LIMIT 1`)
|
|
66
|
+
.get(fp, err.source_session);
|
|
67
|
+
if (fixRow) {
|
|
68
|
+
trace.push({
|
|
69
|
+
event: "fix",
|
|
70
|
+
fingerprint: fp,
|
|
71
|
+
session: fixRow.session_id,
|
|
72
|
+
ts: fixRow.ts,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const relatedRules = [];
|
|
77
|
+
const tsCodeMatch = query.match(/TS(\d{4,5})/);
|
|
78
|
+
if (tsCodeMatch) {
|
|
79
|
+
const hint = TS_CODE_RULES[tsCodeMatch[1]] ?? `review TS${tsCodeMatch[1]}`;
|
|
80
|
+
relatedRules.push(hint);
|
|
81
|
+
}
|
|
82
|
+
const summary = `When tool fails with ${query}: ${confidence >= 0.7 ? "consistently" : "often"} resolved by fixing ${relatedRules.length > 0 ? relatedRules.join(", ") : "the underlying issue"}.`;
|
|
83
|
+
return {
|
|
84
|
+
summary,
|
|
85
|
+
confidence,
|
|
86
|
+
evidence_count: pattern.evidence_count ?? 0,
|
|
87
|
+
last_verified: pattern.last_verified_at ?? null,
|
|
88
|
+
trace,
|
|
89
|
+
related_rules: relatedRules,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=kevin_why.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kevin_why.js","sourceRoot":"","sources":["../../plugin/kevin_why.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAuB/C,MAAM,UAAU,QAAQ,CAAC,KAAY,EAAE,KAAa;IACnD,kEAAkE;IAClE,iEAAiE;IACjE,kEAAkE;IAClE,oEAAoE;IACpE,8CAA8C;IAC9C,MAAM,MAAM,GAAG,KAAK;SAClB,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,KAAK;SACvB,OAAO,CACP;;;;;;;;;YASS,CACT;SACA,GAAG,CAAC,KAAK,CAOR,CAAC;IAEJ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,SAAS,GAAG,KAAK;SACrB,OAAO,CACP;;;;;;;;;;;aAWU,CACV;SACA,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAOhC,CAAC;IAEJ,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,MAAM,aAAa,GAAG,KAAK;SACzB,OAAO,CACP;;;4BAGyB,CACzB;SACA,GAAG,CAAC,EAAE,CAIL,CAAC;IAEJ,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;YACxC,EAAE,EAAE,GAAG,CAAC,UAAU;SAClB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,KAAK;aAClB,OAAO,CACP;;;6BAGyB,CACzB;aACA,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAEhB,CAAC;QAEb,IAAI,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,MAAM,CAAC,UAAU;gBAC1B,EAAE,EAAE,MAAM,CAAC,EAAE;aACb,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,uBAAuB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAsB,GAAG,CAAC;IAEnM,OAAO;QACN,OAAO;QACP,UAAU;QACV,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;QAC3C,aAAa,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;QAC/C,KAAK;QACL,aAAa,EAAE,YAAY;KAC3B,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface MemoryBlockItem {
|
|
2
|
+
id?: string;
|
|
2
3
|
type: string;
|
|
3
4
|
content: string;
|
|
5
|
+
protect?: boolean;
|
|
4
6
|
}
|
|
5
7
|
export declare function escapeInjectedText(text: string): string;
|
|
6
8
|
export declare function formatMemories(memories: MemoryBlockItem[], tag: "context" | "memory"): string;
|
|
@@ -4,12 +4,15 @@ export function escapeInjectedText(text) {
|
|
|
4
4
|
.replace(/</g, "<")
|
|
5
5
|
.replace(/>/g, ">");
|
|
6
6
|
}
|
|
7
|
+
function formatRow(m) {
|
|
8
|
+
const idLine = m.id ? `id: ${escapeInjectedText(m.id)}\n` : "";
|
|
9
|
+
const body = `${idLine}[${escapeInjectedText(String(m.type))}] ${escapeInjectedText(m.content)}`;
|
|
10
|
+
return m.protect === false ? body : `<protect>\n${body}\n</protect>`;
|
|
11
|
+
}
|
|
7
12
|
export function formatMemories(memories, tag) {
|
|
8
13
|
if (memories.length === 0)
|
|
9
14
|
return "";
|
|
10
|
-
const body = memories
|
|
11
|
-
.map((m) => `[${escapeInjectedText(String(m.type))}] ${escapeInjectedText(m.content)}`)
|
|
12
|
-
.join("\n");
|
|
15
|
+
const body = memories.map(formatRow).join("\n");
|
|
13
16
|
return tag === "context"
|
|
14
17
|
? `<kevin-context>Lecciones relevantes:\n${body}\n</kevin-context>`
|
|
15
18
|
: `<kevin-memory>\n${body}\n</kevin-memory>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-format.js","sourceRoot":"","sources":["../../plugin/memory-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-format.js","sourceRoot":"","sources":["../../plugin/memory-format.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,CAAkB;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,kBAAkB,CAClF,CAAC,CAAC,OAAO,CACT,EAAE,CAAC;IACJ,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,QAA2B,EAC3B,GAAyB;IAEzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,KAAK,SAAS;QACvB,CAAC,CAAC,yCAAyC,IAAI,oBAAoB;QACnE,CAAC,CAAC,mBAAmB,IAAI,mBAAmB,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Store } from "./Store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Seeded metric keys defined by migration 003_v02_signal.sql.
|
|
4
|
+
* The order here MUST match the migration's INSERT OR IGNORE block, since
|
|
5
|
+
* snapshot() relies on those keys being present in the cache even when the
|
|
6
|
+
* underlying table is empty (e.g., before 003 is applied, on a fresh
|
|
7
|
+
* :memory: test DB, or after a manual wipe).
|
|
8
|
+
*/
|
|
9
|
+
export declare const METRIC_KEYS: readonly ["tokens_injected_pre_prompt", "tokens_injected_compacting", "reflections_throttled", "duplicate_suppressions", "tool_calls_deduped", "patterns_mined", "patterns_causal", "causal_links", "memories_superseded"];
|
|
10
|
+
export type MetricKey = (typeof METRIC_KEYS)[number];
|
|
11
|
+
/**
|
|
12
|
+
* Cheap token estimate used when bumping the `tokens_injected_*` counters.
|
|
13
|
+
* Per plan §B6.2: heuristic = block.length / 4, floored to 1 so empty strings
|
|
14
|
+
* don't contribute zero tokens (avoids losing signal on whitespace-only
|
|
15
|
+
* blocks).
|
|
16
|
+
*/
|
|
17
|
+
export declare function estimateTokens(text: string): number;
|
|
18
|
+
/**
|
|
19
|
+
* In-memory mirror of the `kevin_metrics` table with debounced writes.
|
|
20
|
+
*
|
|
21
|
+
* The cache is seeded from `kevin_metrics` on construction (or zeros if the
|
|
22
|
+
* table is missing — graceful degradation for unit tests and pre-003 DBs).
|
|
23
|
+
* `incr()` updates the cache and schedules a debounced `flush()` (1 s by
|
|
24
|
+
* default). `flush()` writes every dirty key in a single transaction and
|
|
25
|
+
* clears the timer, so the call site can also force a flush on `session.idle`
|
|
26
|
+
* and on plugin dispose.
|
|
27
|
+
*/
|
|
28
|
+
export declare class Metrics {
|
|
29
|
+
private readonly store;
|
|
30
|
+
private readonly cache;
|
|
31
|
+
private readonly dirty;
|
|
32
|
+
private flushTimer;
|
|
33
|
+
private readonly flushMs;
|
|
34
|
+
private closed;
|
|
35
|
+
constructor(store: Store, flushMs?: number);
|
|
36
|
+
private loadFromDb;
|
|
37
|
+
incr(key: MetricKey, by?: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Returns a snapshot of the cache. The returned object always contains all
|
|
40
|
+
* METRIC_KEYS, even if the DB has no rows yet. Does NOT flush.
|
|
41
|
+
*/
|
|
42
|
+
snapshot(): Record<MetricKey, number>;
|
|
43
|
+
/**
|
|
44
|
+
* Returns the cached value for a single key. Does NOT flush.
|
|
45
|
+
*/
|
|
46
|
+
get(key: MetricKey): number;
|
|
47
|
+
/** True iff a debounced flush is scheduled. Useful for tests. */
|
|
48
|
+
isFlushScheduled(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Writes every dirty key to `kevin_metrics` in one transaction. Clears
|
|
51
|
+
* the debounce timer. Safe to call repeatedly; no-op when nothing is
|
|
52
|
+
* dirty or when the object is closed. Missing rows are inserted, present
|
|
53
|
+
* rows are updated. The table is created lazily on first flush so this
|
|
54
|
+
* works against pre-003 DBs too.
|
|
55
|
+
*/
|
|
56
|
+
flush(): void;
|
|
57
|
+
close(): void;
|
|
58
|
+
private scheduleFlush;
|
|
59
|
+
private clearTimer;
|
|
60
|
+
}
|