@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
|
@@ -1,13 +1,48 @@
|
|
|
1
|
+
import { fingerprint as computeFingerprint } from "./fingerprint.js";
|
|
1
2
|
import { uuidv7 } from "./uuid.js";
|
|
3
|
+
const MAX_SNIPPET_CHARS = 200;
|
|
4
|
+
function toSlim(mem) {
|
|
5
|
+
const rawScore = mem.metadata?.score;
|
|
6
|
+
return {
|
|
7
|
+
id: mem.id,
|
|
8
|
+
type: mem.type,
|
|
9
|
+
scope: mem.scope,
|
|
10
|
+
score: typeof rawScore === "number" ? rawScore : mem.relevanceScore,
|
|
11
|
+
snippet: mem.content.slice(0, MAX_SNIPPET_CHARS),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
2
14
|
const TYPE_PRIORITY = {
|
|
3
15
|
error: 0,
|
|
4
16
|
pattern: 1,
|
|
17
|
+
rule: 1,
|
|
18
|
+
solution: 1,
|
|
5
19
|
decision: 2,
|
|
6
20
|
context: 3,
|
|
7
21
|
};
|
|
8
22
|
const SESSION_DEFAULT_TTL_HOURS = 24;
|
|
9
23
|
const RELEVANCE_BUMP = 0.05;
|
|
10
24
|
const RELEVANCE_MAX = 1.0;
|
|
25
|
+
// v0.2.0 origin-aware ranking (K2-023, plan §B6.3 / D2-13).
|
|
26
|
+
// Applied as a multiplier on the base rank (FTS5 BM25 or -relevance_score).
|
|
27
|
+
// Reflectors lessons outrank pattern-miner lessons outrank agent-saved
|
|
28
|
+
// notes, all else equal. No embeddings, no RRF.
|
|
29
|
+
const ORIGIN_BOOST_REFLECTOR = 2;
|
|
30
|
+
const ORIGIN_BOOST_PATTERN = 1.5;
|
|
31
|
+
const ORIGIN_BOOST_CASUAL = 2;
|
|
32
|
+
const ORIGIN_BOOST_AGENT = 1;
|
|
33
|
+
const RECENCY_DECAY_PER_DAY = 0.95; // newer = closer to 1 (less penalty)
|
|
34
|
+
function sqliteUtcToMs(createdAt) {
|
|
35
|
+
// SQLite `datetime('now')` returns 'YYYY-MM-DD HH:MM:SS' in UTC.
|
|
36
|
+
// JS Date can parse ISO 8601 with 'T' and 'Z'.
|
|
37
|
+
const iso = createdAt.includes("T")
|
|
38
|
+
? createdAt
|
|
39
|
+
: `${createdAt.replace(" ", "T")}Z`;
|
|
40
|
+
const ms = Date.parse(iso);
|
|
41
|
+
return Number.isNaN(ms) ? Date.now() : ms;
|
|
42
|
+
}
|
|
43
|
+
// SQLite/better-sqlite3 surface both error code and message variants depending
|
|
44
|
+
// on the underlying driver (node:sqlite vs better-sqlite3). Match loosely.
|
|
45
|
+
const UNIQUE_VIOLATION_RE = /SQLITE_CONSTRAINT_UNIQUE|UNIQUE constraint failed/i;
|
|
11
46
|
function sqliteUtcNowPlusHours(hours) {
|
|
12
47
|
const d = new Date(Date.now() + hours * 3_600_000);
|
|
13
48
|
const pad = (n) => String(n).padStart(2, "0");
|
|
@@ -28,6 +63,15 @@ function mapRow(row, score) {
|
|
|
28
63
|
createdAt: row.created_at,
|
|
29
64
|
updatedAt: row.updated_at,
|
|
30
65
|
expiresAt: row.expires_at,
|
|
66
|
+
projectId: row.project_id ?? null,
|
|
67
|
+
fingerprint: row.fingerprint ?? null,
|
|
68
|
+
origin: row.origin ?? null,
|
|
69
|
+
confidence: typeof row.evidence_count === "number"
|
|
70
|
+
? Math.min(1, 0.5 + 0.1 * (row.evidence_count ?? 0))
|
|
71
|
+
: null,
|
|
72
|
+
evidenceCount: row.evidence_count ?? null,
|
|
73
|
+
lastVerifiedAt: row.last_verified_at ?? null,
|
|
74
|
+
status: row.status ?? "active",
|
|
31
75
|
};
|
|
32
76
|
if (score !== undefined) {
|
|
33
77
|
if (!mem.metadata)
|
|
@@ -53,30 +97,98 @@ function isNotSearchable(mem) {
|
|
|
53
97
|
return (mem.metadata?.not_searchable === true);
|
|
54
98
|
}
|
|
55
99
|
export class MemoryService {
|
|
56
|
-
|
|
57
|
-
constructor(store) {
|
|
100
|
+
metrics;
|
|
101
|
+
constructor(store, metrics) {
|
|
58
102
|
this.store = store;
|
|
103
|
+
this.metrics = metrics ?? null;
|
|
59
104
|
}
|
|
105
|
+
// `store` is declared here (rather than as a constructor parameter property)
|
|
106
|
+
// so that Metrics can be added without changing the parameter order callers
|
|
107
|
+
// have been using since v0.1.0.
|
|
108
|
+
store;
|
|
60
109
|
save(input) {
|
|
61
|
-
const id = uuidv7();
|
|
62
110
|
const scope = input.scope ?? "project";
|
|
63
111
|
const relevanceScore = input.relevanceScore ?? 0.5;
|
|
64
112
|
const metadata = input.metadata ? JSON.stringify(input.metadata) : null;
|
|
113
|
+
const origin = input.origin ?? "agent";
|
|
114
|
+
const projectId = input.projectId ?? null;
|
|
115
|
+
const status = input.status ?? "active";
|
|
116
|
+
// Fingerprint is used for dedup (error memories via migration 003
|
|
117
|
+
// partial unique index) AND for pattern idempotency (K2-021 — pattern
|
|
118
|
+
// memories store an explicit fingerprint so PatternMiner's SELECT-before-
|
|
119
|
+
// INSERT idempotency check can find prior emissions). Callers may pass
|
|
120
|
+
// an explicit fingerprint for any type; we honor it verbatim. For
|
|
121
|
+
// type='error' only, we auto-compute from content when the caller left
|
|
122
|
+
// it absent.
|
|
123
|
+
let fp = null;
|
|
124
|
+
if (input.fingerprint) {
|
|
125
|
+
fp = input.fingerprint;
|
|
126
|
+
}
|
|
127
|
+
else if (input.type === "error") {
|
|
128
|
+
fp = computeFingerprint(input.content, projectId ?? undefined);
|
|
129
|
+
}
|
|
65
130
|
let expiresAt = input.expiresAt ?? null;
|
|
66
131
|
if (scope === "session" && !input.expiresAt) {
|
|
67
132
|
expiresAt = sqliteUtcNowPlusHours(SESSION_DEFAULT_TTL_HOURS);
|
|
68
133
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
134
|
+
const id = uuidv7();
|
|
135
|
+
// v0.3.0 (K3-014) — supersede model: when saving a decision/rule with
|
|
136
|
+
// the same fingerprint as an existing active row, mark the old as
|
|
137
|
+
// superseded and insert the fresh version as active.
|
|
138
|
+
const supersedableTypes = ["decision", "rule"];
|
|
139
|
+
if (fp !== null && supersedableTypes.includes(input.type)) {
|
|
140
|
+
this.store
|
|
141
|
+
.prepare(`UPDATE memories
|
|
142
|
+
SET status = 'superseded', updated_at = datetime('now')
|
|
143
|
+
WHERE fingerprint = ?
|
|
144
|
+
AND type = ?
|
|
145
|
+
AND status = 'active'
|
|
146
|
+
AND (project_id IS ? OR (project_id IS NULL AND ? IS NULL))`)
|
|
147
|
+
.run(fp, input.type, projectId, projectId);
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
this.store
|
|
151
|
+
.prepare(`INSERT INTO memories
|
|
152
|
+
(id, type, content, scope, relevance_score, source_tool, source_session,
|
|
153
|
+
metadata, expires_at, project_id, fingerprint, origin,
|
|
154
|
+
evidence_count, last_verified_at, status)
|
|
155
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
156
|
+
.run(id, input.type, input.content, scope, relevanceScore, input.sourceTool ?? null, input.sourceSession ?? null, metadata, expiresAt, projectId, fp, origin, input.evidenceCount ?? 0, input.lastVerifiedAt ?? null, status);
|
|
157
|
+
return id;
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const msg = err?.message ?? "";
|
|
161
|
+
if (!UNIQUE_VIOLATION_RE.test(msg))
|
|
162
|
+
throw err;
|
|
163
|
+
// Dedup path enabled by migration 003 partial unique index
|
|
164
|
+
// `uq_memories_error_fp`. The index only fires for
|
|
165
|
+
// type='error' AND fingerprint NOT NULL AND origin='reflector', so
|
|
166
|
+
// an agent-saved identical error memory would NOT have collided.
|
|
167
|
+
if (fp === null || origin !== "reflector")
|
|
168
|
+
throw err;
|
|
169
|
+
const existing = this.store
|
|
170
|
+
.prepare(`SELECT id FROM memories
|
|
171
|
+
WHERE project_id IS ?
|
|
172
|
+
AND fingerprint = ?
|
|
173
|
+
AND type = 'error'
|
|
174
|
+
AND origin = 'reflector'
|
|
175
|
+
LIMIT 1`)
|
|
176
|
+
.get(projectId, fp);
|
|
177
|
+
this.metrics?.incr("duplicate_suppressions", 1);
|
|
178
|
+
if (existing)
|
|
179
|
+
return existing.id;
|
|
180
|
+
// Defensive: if the unique fired but the lookup returns nothing
|
|
181
|
+
// (concurrent delete race), fall through and rethrow rather than
|
|
182
|
+
// fabricate an id.
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
75
185
|
}
|
|
76
186
|
getById(id) {
|
|
77
187
|
const row = this.store
|
|
78
188
|
.prepare(`SELECT id, type, content, scope, relevance_score, source_tool, source_session,
|
|
79
|
-
metadata, created_at, updated_at, expires_at
|
|
189
|
+
metadata, created_at, updated_at, expires_at,
|
|
190
|
+
project_id, fingerprint, origin,
|
|
191
|
+
evidence_count, last_verified_at, status
|
|
80
192
|
FROM memories WHERE id = ?`)
|
|
81
193
|
.get(id);
|
|
82
194
|
return row ? mapRow(row) : null;
|
|
@@ -108,6 +220,18 @@ export class MemoryService {
|
|
|
108
220
|
cols.push("expires_at = ?");
|
|
109
221
|
vals.push(fields.expiresAt);
|
|
110
222
|
}
|
|
223
|
+
if (fields.evidenceCount !== undefined) {
|
|
224
|
+
cols.push("evidence_count = ?");
|
|
225
|
+
vals.push(fields.evidenceCount);
|
|
226
|
+
}
|
|
227
|
+
if (fields.lastVerifiedAt !== undefined) {
|
|
228
|
+
cols.push("last_verified_at = ?");
|
|
229
|
+
vals.push(fields.lastVerifiedAt);
|
|
230
|
+
}
|
|
231
|
+
if (fields.status !== undefined) {
|
|
232
|
+
cols.push("status = ?");
|
|
233
|
+
vals.push(fields.status);
|
|
234
|
+
}
|
|
111
235
|
if (cols.length === 0)
|
|
112
236
|
return;
|
|
113
237
|
cols.push("updated_at = datetime('now')");
|
|
@@ -121,20 +245,26 @@ export class MemoryService {
|
|
|
121
245
|
}
|
|
122
246
|
query(input) {
|
|
123
247
|
const match = sanitizeMatch(input.text);
|
|
124
|
-
if (
|
|
125
|
-
return [];
|
|
248
|
+
if (match.length === 0) {
|
|
249
|
+
return input.full === true ? [] : [];
|
|
250
|
+
}
|
|
126
251
|
const scope = input.scope ?? "all";
|
|
127
252
|
const limit = input.limit ?? 10;
|
|
128
253
|
let sql = `
|
|
129
254
|
SELECT m.id, m.type, m.content, m.scope, m.relevance_score,
|
|
130
255
|
m.source_tool, m.source_session, m.metadata,
|
|
131
256
|
m.created_at, m.updated_at, m.expires_at,
|
|
257
|
+
m.project_id, m.fingerprint, m.origin,
|
|
258
|
+
m.evidence_count, m.last_verified_at, m.status,
|
|
132
259
|
bm25(memories_fts) AS score
|
|
133
260
|
FROM memories_fts
|
|
134
261
|
JOIN memories m ON m.rowid = memories_fts.rowid
|
|
135
262
|
WHERE memories_fts MATCH ?
|
|
136
263
|
AND (m.expires_at IS NULL OR m.expires_at > datetime('now'))`;
|
|
137
264
|
const params = [match];
|
|
265
|
+
if (!input.includeSuperseded) {
|
|
266
|
+
sql += "\n AND m.status = 'active'";
|
|
267
|
+
}
|
|
138
268
|
if (input.type) {
|
|
139
269
|
sql += " AND m.type = ?";
|
|
140
270
|
params.push(input.type);
|
|
@@ -146,16 +276,38 @@ export class MemoryService {
|
|
|
146
276
|
sql += " ORDER BY bm25(memories_fts) LIMIT ?";
|
|
147
277
|
params.push(limit);
|
|
148
278
|
const rows = this.store.prepare(sql).all(...params);
|
|
149
|
-
|
|
279
|
+
// v0.3.0 (K3-019) — cross-project opt-in must also gate kevin_query
|
|
280
|
+
// (bug #12 fix): when cross_project_enabled is OFF, imported rows
|
|
281
|
+
// (project_id IS NULL AND origin='imported') are hidden.
|
|
282
|
+
const crossProjectOn = this.isCrossProjectEnabled();
|
|
283
|
+
const memories = rows
|
|
150
284
|
.map((r) => mapRow(r, r.score))
|
|
151
|
-
.filter((m) => !isNotSearchable(m))
|
|
285
|
+
.filter((m) => !isNotSearchable(m))
|
|
286
|
+
.filter((m) => crossProjectOn || m.projectId !== null || m.origin !== "imported");
|
|
287
|
+
return input.full === true ? memories : memories.map(toSlim);
|
|
288
|
+
}
|
|
289
|
+
isCrossProjectEnabled() {
|
|
290
|
+
try {
|
|
291
|
+
const row = this.store
|
|
292
|
+
.prepare("SELECT value FROM kevin_settings WHERE key = 'cross_project_enabled'")
|
|
293
|
+
.get();
|
|
294
|
+
return (row?.value ?? 0) === 1;
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
152
299
|
}
|
|
153
|
-
loadAll(scope) {
|
|
300
|
+
loadAll(scope, includeSuperseded = false) {
|
|
154
301
|
let sql = `
|
|
155
302
|
SELECT id, type, content, scope, relevance_score, source_tool, source_session,
|
|
156
|
-
metadata, created_at, updated_at, expires_at
|
|
303
|
+
metadata, created_at, updated_at, expires_at,
|
|
304
|
+
project_id, fingerprint, origin,
|
|
305
|
+
evidence_count, last_verified_at, status
|
|
157
306
|
FROM memories
|
|
158
307
|
WHERE (expires_at IS NULL OR expires_at > datetime('now'))`;
|
|
308
|
+
if (!includeSuperseded) {
|
|
309
|
+
sql += "\n AND status = 'active'";
|
|
310
|
+
}
|
|
159
311
|
const params = [];
|
|
160
312
|
if (scope !== "all") {
|
|
161
313
|
sql += " AND scope = ?";
|
|
@@ -164,7 +316,7 @@ export class MemoryService {
|
|
|
164
316
|
sql += " ORDER BY relevance_score DESC, created_at DESC";
|
|
165
317
|
return this.store.prepare(sql).all(...params);
|
|
166
318
|
}
|
|
167
|
-
queryRelevant(text, scope) {
|
|
319
|
+
queryRelevant(text, scope, includeSuperseded = false) {
|
|
168
320
|
const tokens = stripUnbalancedQuotes(text.trim())
|
|
169
321
|
.split(/\s+/)
|
|
170
322
|
.filter((t) => t.length > 0)
|
|
@@ -176,11 +328,16 @@ export class MemoryService {
|
|
|
176
328
|
SELECT m.id, m.type, m.content, m.scope, m.relevance_score,
|
|
177
329
|
m.source_tool, m.source_session, m.metadata,
|
|
178
330
|
m.created_at, m.updated_at, m.expires_at,
|
|
331
|
+
m.project_id, m.fingerprint, m.origin,
|
|
332
|
+
m.evidence_count, m.last_verified_at, m.status,
|
|
179
333
|
bm25(memories_fts) AS score
|
|
180
334
|
FROM memories_fts
|
|
181
335
|
JOIN memories m ON m.rowid = memories_fts.rowid
|
|
182
336
|
WHERE memories_fts MATCH ?
|
|
183
337
|
AND (m.expires_at IS NULL OR m.expires_at > datetime('now'))`;
|
|
338
|
+
if (!includeSuperseded) {
|
|
339
|
+
sql += "\n AND m.status = 'active'";
|
|
340
|
+
}
|
|
184
341
|
const params = [match];
|
|
185
342
|
if (scope !== "all") {
|
|
186
343
|
sql += " AND m.scope = ?";
|
|
@@ -196,16 +353,30 @@ export class MemoryService {
|
|
|
196
353
|
const maxTokens = input.maxTokens ?? 2000;
|
|
197
354
|
const charBudget = maxTokens * 4;
|
|
198
355
|
const scope = input.scope ?? "project";
|
|
356
|
+
const includeSuperseded = input.includeSuperseded === true;
|
|
199
357
|
let candidates;
|
|
200
358
|
if (input.query && input.query.trim().length > 0) {
|
|
201
|
-
candidates = this.queryRelevant(input.query, scope);
|
|
359
|
+
candidates = this.queryRelevant(input.query, scope, includeSuperseded);
|
|
202
360
|
}
|
|
203
361
|
else {
|
|
204
|
-
candidates = this.loadAll(scope)
|
|
362
|
+
candidates = this.loadAll(scope, includeSuperseded)
|
|
205
363
|
.map((r) => mapRow(r))
|
|
206
364
|
.filter((m) => !isNotSearchable(m));
|
|
207
365
|
}
|
|
208
|
-
|
|
366
|
+
// v0.3.0 (K3-019) — cross-project opt-in.
|
|
367
|
+
// When cross_project_enabled is OFF (default), exclude imported
|
|
368
|
+
// cross-project rows (project_id IS NULL AND origin='imported').
|
|
369
|
+
// OKF import is the cross-project bridge per plan §B12; imported
|
|
370
|
+
// memories always carry project_id NULL (bug #12 fix — the old
|
|
371
|
+
// filter only excluded imported RULES, leaking imported
|
|
372
|
+
// decisions/patterns into recall).
|
|
373
|
+
if (!this.isCrossProjectEnabled()) {
|
|
374
|
+
candidates = candidates.filter((m) => m.projectId !== null || m.origin !== "imported");
|
|
375
|
+
}
|
|
376
|
+
// v0.2.0 (K2-023) origin-aware rank: BM25 × origin-boost × recency-decay.
|
|
377
|
+
// Tie-breakers preserve the v0.1.x spirit (errors/patterns before
|
|
378
|
+
// context; newer before older when nothing else decides).
|
|
379
|
+
candidates.sort((a, b) => rankCompare(a, b));
|
|
209
380
|
const result = [];
|
|
210
381
|
let used = 0;
|
|
211
382
|
for (const mem of candidates) {
|
|
@@ -224,5 +395,246 @@ export class MemoryService {
|
|
|
224
395
|
}
|
|
225
396
|
return result;
|
|
226
397
|
}
|
|
398
|
+
/**
|
|
399
|
+
* v0.3.0 (K3-004) — Promote an error memory to a causal pattern.
|
|
400
|
+
*
|
|
401
|
+
* Creates a new `pattern` memory with `origin = 'causal'`, derived
|
|
402
|
+
* confidence, and evidence count. The original error memory is NOT
|
|
403
|
+
* deleted — the audit trail is preserved. Returns the new memory id,
|
|
404
|
+
* or null when the source error is not eligible (missing fingerprint,
|
|
405
|
+
* wrong type, or already promoted).
|
|
406
|
+
*/
|
|
407
|
+
promoteToPattern(errorId, evidenceCount) {
|
|
408
|
+
const error = this.getById(errorId);
|
|
409
|
+
if (!error || error.type !== "error" || !error.fingerprint)
|
|
410
|
+
return null;
|
|
411
|
+
const confidence = Math.min(1.0, 0.5 + 0.1 * evidenceCount);
|
|
412
|
+
const now = new Date().toISOString();
|
|
413
|
+
const summary = error.content.split("\n")[0].slice(0, 200);
|
|
414
|
+
const content = `Causal pattern: ${summary}\n\nEvidence: ${evidenceCount} confirmed fix(es)\nConfidence: ${(confidence * 100).toFixed(0)}%\n\nOriginal: ${error.content.slice(0, 1000)}`;
|
|
415
|
+
// v0.3.0 fix (bug #4) — idempotent promotion: the supersede model
|
|
416
|
+
// only covers decision/rule, so the old code inserted a duplicate
|
|
417
|
+
// pattern on every subsequent session.idle with a new fix. When an
|
|
418
|
+
// active causal pattern already exists for this fingerprint, refresh
|
|
419
|
+
// it (content, evidence_count, last_verified_at) instead. The FTS
|
|
420
|
+
// sync trigger (memories_au) keeps searchable content up to date.
|
|
421
|
+
const existing = this.store
|
|
422
|
+
.prepare(`SELECT id FROM memories
|
|
423
|
+
WHERE fingerprint = ? AND type = 'pattern'
|
|
424
|
+
AND origin = 'causal' AND status = 'active'
|
|
425
|
+
ORDER BY created_at DESC LIMIT 1`)
|
|
426
|
+
.get(error.fingerprint);
|
|
427
|
+
if (existing) {
|
|
428
|
+
this.update(existing.id, { content, evidenceCount, lastVerifiedAt: now });
|
|
429
|
+
return existing.id;
|
|
430
|
+
}
|
|
431
|
+
return this.save({
|
|
432
|
+
type: "pattern",
|
|
433
|
+
content,
|
|
434
|
+
scope: "project",
|
|
435
|
+
origin: "causal",
|
|
436
|
+
sourceTool: error.sourceTool ?? undefined,
|
|
437
|
+
sourceSession: error.sourceSession ?? undefined,
|
|
438
|
+
fingerprint: error.fingerprint,
|
|
439
|
+
evidenceCount,
|
|
440
|
+
lastVerifiedAt: now,
|
|
441
|
+
status: "active",
|
|
442
|
+
projectId: error.projectId ?? undefined,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* v0.2.0 (K2-026) — Feedback loop positive half (plan §B6.10 / D2-10).
|
|
447
|
+
*
|
|
448
|
+
* For each reflector-sourced error memory emitted during the given session
|
|
449
|
+
* whose fingerprint did NOT recur as a failing `tool_call` within the same
|
|
450
|
+
* project, bump `relevance_score` by `RELEVANCE_BUMP` (capped at
|
|
451
|
+
* `RELEVANCE_MAX`). Agent-saved memories are NEVER auto-boosted by this
|
|
452
|
+
* loop (anti-gaming guarantee, D2-06).
|
|
453
|
+
*
|
|
454
|
+
* Returns the number of memories that received a positive boost.
|
|
455
|
+
*/
|
|
456
|
+
boostPositiveReflectors(sessionId) {
|
|
457
|
+
if (!sessionId)
|
|
458
|
+
return 0;
|
|
459
|
+
const lessons = this.store
|
|
460
|
+
.prepare(`SELECT id, fingerprint, project_id, metadata
|
|
461
|
+
FROM memories
|
|
462
|
+
WHERE origin = 'reflector'
|
|
463
|
+
AND type = 'error'
|
|
464
|
+
AND source_session = ?
|
|
465
|
+
AND fingerprint IS NOT NULL
|
|
466
|
+
AND status = 'active'`)
|
|
467
|
+
.all(sessionId);
|
|
468
|
+
if (lessons.length === 0)
|
|
469
|
+
return 0;
|
|
470
|
+
// v0.3.0 fix — recurrence is now matched via `error_fingerprint`
|
|
471
|
+
// (set by Reflector.onLinkError) OR the legacy `fingerprint` column
|
|
472
|
+
// (preserved for tests and pre-fix tool_call rows). The original
|
|
473
|
+
// failing call is excluded when its id is recorded in the memory
|
|
474
|
+
// metadata as `origin_call_id` (set by Reflector from `callID`).
|
|
475
|
+
const recurrenceCheck = this.store.prepare(`SELECT COUNT(*) AS c
|
|
476
|
+
FROM tool_calls
|
|
477
|
+
WHERE (error_fingerprint = ? OR fingerprint = ?)
|
|
478
|
+
AND success = 0
|
|
479
|
+
AND (project_id IS ? OR (project_id IS NULL AND ? IS NULL))
|
|
480
|
+
AND (? IS NULL OR id <> ?)`);
|
|
481
|
+
const bumpOne = this.store.prepare("UPDATE memories SET relevance_score = MIN(?, relevance_score + ?) WHERE id = ?");
|
|
482
|
+
let boosted = 0;
|
|
483
|
+
this.store.transaction(() => {
|
|
484
|
+
for (const l of lessons) {
|
|
485
|
+
const originCallId = readOriginCallId(l.metadata);
|
|
486
|
+
const row = recurrenceCheck.get(l.fingerprint, l.fingerprint, l.project_id, l.project_id, originCallId, originCallId);
|
|
487
|
+
const c = row?.c ?? 0;
|
|
488
|
+
if (c === 0) {
|
|
489
|
+
bumpOne.run(RELEVANCE_MAX, RELEVANCE_BUMP, l.id);
|
|
490
|
+
boosted += 1;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
return boosted;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* v0.3.0 (K3-013) — Feedback loop negative half.
|
|
498
|
+
*
|
|
499
|
+
* For each reflector-sourced error memory from this session whose
|
|
500
|
+
* fingerprint DID recur as a failing tool_call (the lesson didn't
|
|
501
|
+
* prevent the error), decrement `relevance_score` by `RELEVANCE_PENALTY`
|
|
502
|
+
* (down to zero) and increment `evidence_count` as a negative signal.
|
|
503
|
+
* Agent-saved memories are NEVER penalized.
|
|
504
|
+
*
|
|
505
|
+
* Returns the number of memories penalized.
|
|
506
|
+
*/
|
|
507
|
+
/**
|
|
508
|
+
* v0.3.0 fix — Mirror of the free function `countSupersedeCandidates`
|
|
509
|
+
* exposed as an instance method so `okf-import` (which holds a
|
|
510
|
+
* `MemoryService` reference but not the underlying `Store`) can count
|
|
511
|
+
* rows that `save()` will mark as superseded.
|
|
512
|
+
*/
|
|
513
|
+
countSupersedeCandidates(type, fingerprint, projectId) {
|
|
514
|
+
return countSupersedeCandidates(this.store, type, fingerprint, projectId);
|
|
515
|
+
}
|
|
516
|
+
penalizeRecurringReflectors(sessionId) {
|
|
517
|
+
if (!sessionId)
|
|
518
|
+
return 0;
|
|
519
|
+
const RELEVANCE_PENALTY = 0.05;
|
|
520
|
+
// v0.3.0 fix — to support cross-session feedback we drop the
|
|
521
|
+
// memory-side `source_session` filter: any reflector error whose
|
|
522
|
+
// fingerprint recurs as a failing tool_call IN THIS session is
|
|
523
|
+
// eligible for penalization (the lesson didn't prevent the error).
|
|
524
|
+
// The recurrence check narrows on `tool_calls.session_id = ?` and
|
|
525
|
+
// excludes the original failing call via `origin_call_id` metadata,
|
|
526
|
+
// matching both new `error_fingerprint` and legacy `fingerprint`.
|
|
527
|
+
const lessons = this.store
|
|
528
|
+
.prepare(`SELECT id, fingerprint, project_id, metadata
|
|
529
|
+
FROM memories
|
|
530
|
+
WHERE origin = 'reflector'
|
|
531
|
+
AND type = 'error'
|
|
532
|
+
AND fingerprint IS NOT NULL
|
|
533
|
+
AND status = 'active'`)
|
|
534
|
+
.all();
|
|
535
|
+
if (lessons.length === 0)
|
|
536
|
+
return 0;
|
|
537
|
+
const recurrenceCheck = this.store.prepare(`SELECT COUNT(*) AS c
|
|
538
|
+
FROM tool_calls
|
|
539
|
+
WHERE session_id = ?
|
|
540
|
+
AND success = 0
|
|
541
|
+
AND (error_fingerprint = ? OR fingerprint = ?)
|
|
542
|
+
AND (project_id IS ? OR (project_id IS NULL AND ? IS NULL))
|
|
543
|
+
AND (? IS NULL OR id <> ?)`);
|
|
544
|
+
const penalizeOne = this.store.prepare(`UPDATE memories
|
|
545
|
+
SET relevance_score = MAX(0, relevance_score - ?),
|
|
546
|
+
evidence_count = evidence_count + 1,
|
|
547
|
+
last_verified_at = datetime('now')
|
|
548
|
+
WHERE id = ?`);
|
|
549
|
+
let penalized = 0;
|
|
550
|
+
this.store.transaction(() => {
|
|
551
|
+
for (const l of lessons) {
|
|
552
|
+
const originCallId = readOriginCallId(l.metadata);
|
|
553
|
+
const row = recurrenceCheck.get(sessionId, l.fingerprint, l.fingerprint, l.project_id, l.project_id, originCallId, originCallId);
|
|
554
|
+
const c = row?.c ?? 0;
|
|
555
|
+
if (c > 0) {
|
|
556
|
+
penalizeOne.run(RELEVANCE_PENALTY, l.id);
|
|
557
|
+
penalized += 1;
|
|
558
|
+
this.metrics?.incr("memories_superseded", 1);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
return penalized;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
function originBoost(mem) {
|
|
566
|
+
switch (mem.origin ?? "agent") {
|
|
567
|
+
case "reflector":
|
|
568
|
+
case "causal":
|
|
569
|
+
return ORIGIN_BOOST_REFLECTOR;
|
|
570
|
+
case "pattern":
|
|
571
|
+
return ORIGIN_BOOST_PATTERN;
|
|
572
|
+
default:
|
|
573
|
+
return ORIGIN_BOOST_AGENT;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* v0.3.0 fix — Extract `origin_call_id` from the memory metadata blob.
|
|
578
|
+
*
|
|
579
|
+
* Reflector stores the failing tool_call id in metadata.origin_call_id
|
|
580
|
+
* (when available) so the feedback loop can exclude the original call
|
|
581
|
+
* from the recurrence count. Returns null when metadata is absent,
|
|
582
|
+
* malformed, or lacks the field.
|
|
583
|
+
*/
|
|
584
|
+
function readOriginCallId(metadata) {
|
|
585
|
+
if (!metadata)
|
|
586
|
+
return null;
|
|
587
|
+
try {
|
|
588
|
+
const parsed = JSON.parse(metadata);
|
|
589
|
+
const id = parsed?.origin_call_id;
|
|
590
|
+
return typeof id === "string" && id.length > 0 ? id : null;
|
|
591
|
+
}
|
|
592
|
+
catch {
|
|
593
|
+
return null;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* v0.3.0 fix — Count active memories that would be superseded by a new
|
|
598
|
+
* row with the given (type, fingerprint, projectId) tuple. Used by
|
|
599
|
+
* `okf-import` to populate `ImportResult.superseded` accurately.
|
|
600
|
+
*
|
|
601
|
+
* Matches the supersede logic in `save()`: only `decision` and `rule`
|
|
602
|
+
* types supersede prior rows with the same fingerprint. Returns 0 for
|
|
603
|
+
* any other type.
|
|
604
|
+
*/
|
|
605
|
+
export function countSupersedeCandidates(store, type, fingerprint, projectId) {
|
|
606
|
+
if (!fingerprint)
|
|
607
|
+
return 0;
|
|
608
|
+
if (type !== "decision" && type !== "rule")
|
|
609
|
+
return 0;
|
|
610
|
+
const row = store
|
|
611
|
+
.prepare(`SELECT COUNT(*) AS c
|
|
612
|
+
FROM memories
|
|
613
|
+
WHERE type IN ('decision', 'rule')
|
|
614
|
+
AND fingerprint = ?
|
|
615
|
+
AND status = 'active'
|
|
616
|
+
AND (project_id IS ? OR (project_id IS NULL AND ? IS NULL))`)
|
|
617
|
+
.get(fingerprint, projectId, projectId);
|
|
618
|
+
return row?.c ?? 0;
|
|
619
|
+
}
|
|
620
|
+
function rankScore(mem) {
|
|
621
|
+
// FTS5 bm25 returns a negative score (more negative = better match).
|
|
622
|
+
// For non-FTS rows (loadAll path), fall back to -relevance_score so
|
|
623
|
+
// higher-relevance memories also come first under the same sign convention.
|
|
624
|
+
const rawScore = mem.metadata?.score;
|
|
625
|
+
const base = typeof rawScore === "number" ? rawScore : -mem.relevanceScore;
|
|
626
|
+
const ageDays = Math.max(0, (Date.now() - sqliteUtcToMs(mem.createdAt)) / 86_400_000);
|
|
627
|
+
const recencyDecay = RECENCY_DECAY_PER_DAY ** ageDays;
|
|
628
|
+
return base * originBoost(mem) * recencyDecay;
|
|
629
|
+
}
|
|
630
|
+
function rankCompare(a, b) {
|
|
631
|
+
const ra = rankScore(a);
|
|
632
|
+
const rb = rankScore(b);
|
|
633
|
+
if (ra !== rb)
|
|
634
|
+
return ra - rb; // ascending: most negative (best) first
|
|
635
|
+
if (TYPE_PRIORITY[a.type] !== TYPE_PRIORITY[b.type]) {
|
|
636
|
+
return TYPE_PRIORITY[a.type] - TYPE_PRIORITY[b.type];
|
|
637
|
+
}
|
|
638
|
+
return sqliteUtcToMs(b.createdAt) - sqliteUtcToMs(a.createdAt); // newer first
|
|
227
639
|
}
|
|
228
640
|
//# sourceMappingURL=MemoryService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryService.js","sourceRoot":"","sources":["../../plugin/MemoryService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MemoryService.js","sourceRoot":"","sources":["../../plugin/MemoryService.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/Migrate.d.ts
CHANGED
|
@@ -4,10 +4,13 @@ export interface MigrateResult {
|
|
|
4
4
|
to: string;
|
|
5
5
|
applied: string[];
|
|
6
6
|
}
|
|
7
|
+
export type PostApplyHook = (store: Store) => void;
|
|
7
8
|
export declare class Migrate {
|
|
8
9
|
private store;
|
|
9
10
|
private migrationsDir;
|
|
10
|
-
|
|
11
|
+
private readonly postApplyHooks;
|
|
12
|
+
constructor(store: Store, migrationsDir: string, postApplyHooks?: Record<string, PostApplyHook>);
|
|
13
|
+
registerPostApply(version: string, hook: PostApplyHook): void;
|
|
11
14
|
run(): Promise<MigrateResult>;
|
|
12
15
|
private listPending;
|
|
13
16
|
}
|