@jmtrin/opencode-kevin 0.4.0 → 0.5.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 +87 -11
- package/dist/migrations/006_v05_glassbox.sql +118 -0
- package/dist/plugin/Archiver.d.ts +42 -0
- package/dist/plugin/Archiver.js +98 -0
- package/dist/plugin/Archiver.js.map +1 -0
- package/dist/plugin/ContextInjector.d.ts +72 -0
- package/dist/plugin/ContextInjector.js +177 -44
- package/dist/plugin/ContextInjector.js.map +1 -1
- package/dist/plugin/Feedback.d.ts +67 -0
- package/dist/plugin/Feedback.js +137 -0
- package/dist/plugin/Feedback.js.map +1 -0
- package/dist/plugin/InjectionLedger.d.ts +9 -2
- package/dist/plugin/InjectionLedger.js +63 -9
- package/dist/plugin/InjectionLedger.js.map +1 -1
- package/dist/plugin/MemoryService.d.ts +19 -0
- package/dist/plugin/MemoryService.js +119 -15
- package/dist/plugin/MemoryService.js.map +1 -1
- package/dist/plugin/Migrate.js +21 -0
- package/dist/plugin/Migrate.js.map +1 -1
- package/dist/plugin/QualityGate.d.ts +39 -0
- package/dist/plugin/QualityGate.js +38 -8
- package/dist/plugin/QualityGate.js.map +1 -1
- package/dist/plugin/Retrospective.js +12 -0
- package/dist/plugin/Retrospective.js.map +1 -1
- package/dist/plugin/confidence.d.ts +3 -1
- package/dist/plugin/confidence.js +14 -2
- package/dist/plugin/confidence.js.map +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/index.js +152 -0
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/kevin_audit.d.ts +49 -0
- package/dist/plugin/kevin_audit.js +141 -0
- package/dist/plugin/kevin_audit.js.map +1 -0
- package/dist/plugin/kevin_why.js +23 -2
- package/dist/plugin/kevin_why.js.map +1 -1
- package/dist/plugin/metrics.d.ts +21 -1
- package/dist/plugin/metrics.js +47 -2
- package/dist/plugin/metrics.js.map +1 -1
- package/dist/plugin/replay-types.d.ts +327 -0
- package/dist/plugin/replay-types.js +65 -0
- package/dist/plugin/replay-types.js.map +1 -0
- package/dist/plugin/replay.d.ts +36 -0
- package/dist/plugin/replay.js +193 -0
- package/dist/plugin/replay.js.map +1 -0
- package/migrations/006_v05_glassbox.sql +118 -0
- package/package.json +3 -2
|
@@ -1,11 +1,30 @@
|
|
|
1
|
-
import { QualityGate } from "./QualityGate.js";
|
|
1
|
+
import { QualityGate, } from "./QualityGate.js";
|
|
2
2
|
import { formatMemories, formatMemorySnippets } from "./memory-format.js";
|
|
3
3
|
import { estimateTokens } from "./metrics.js";
|
|
4
4
|
import { STOP_WORDS } from "./query-tokenizer.js";
|
|
5
5
|
export const QUALITY_GATE_SETTING = "quality_gate_enabled";
|
|
6
6
|
export const SNIPPET_INJECTION_SETTING = "lesson_snippet_injection";
|
|
7
|
-
|
|
7
|
+
// v0.4.0 default pre-prompt budget. v0.5.0 (K5-017 / plan §8.11, D5-11):
|
|
8
|
+
// kept as the compile-time fallback, but the EFFECTIVE cap is read at call
|
|
9
|
+
// time from the `pre_prompt_budget_tokens` setting (default "900"). The
|
|
10
|
+
// confound fix in K5-005 will very likely show that a large share of
|
|
11
|
+
// injections are `inconclusive` — charging a 1500-token toll per prompt for
|
|
12
|
+
// an unproven benefit is indefensible, so the number is now a setting that
|
|
13
|
+
// measurement can drive instead of a constant.
|
|
14
|
+
const SYSTEM_TRANSFORM_TOKENS = 900;
|
|
8
15
|
const COMPACTING_TOKENS = 2000;
|
|
16
|
+
// v0.5.0 (K5-007 / plan §8.10, D5-04) — every rejection reason maps 1:1 to
|
|
17
|
+
// an `injections_blocked_*` counter (principle 16: a rejection you did not
|
|
18
|
+
// count did not happen). Single lookup + null-check at the call site; the
|
|
19
|
+
// `ok` reason admits and must never increment anything.
|
|
20
|
+
const BLOCKED_METRIC = {
|
|
21
|
+
ok: null,
|
|
22
|
+
seen_this_session: "injections_blocked_seen",
|
|
23
|
+
ignored: "injections_blocked_ignored",
|
|
24
|
+
not_active: "injections_blocked_stale",
|
|
25
|
+
recurrence: "injections_blocked_recurrence",
|
|
26
|
+
weak: "injections_blocked_weak",
|
|
27
|
+
};
|
|
9
28
|
function isWordChar(ch) {
|
|
10
29
|
return /[a-z0-9áéíóúüñ]/i.test(ch);
|
|
11
30
|
}
|
|
@@ -142,19 +161,47 @@ Consider adding this convention to AGENTS.md:
|
|
|
142
161
|
* `QualityGate.canInject` (session seen-set + recurrence + strength),
|
|
143
162
|
* and each admitted memory is recorded in the `InjectionLedger`
|
|
144
163
|
* (plan §5.2 — one row per injected memory).
|
|
164
|
+
*
|
|
165
|
+
* v0.5.0 (K5-014 / plan §8.10) — the pipeline is decomposed into
|
|
166
|
+
* `fetchSlice` (ranked retrieval + budget overflow) + `evaluate`
|
|
167
|
+
* (pure gate verdicts) + this orchestrator, so the read-only `plan()`
|
|
168
|
+
* can mirror it without any side effect (D5-08).
|
|
145
169
|
*/
|
|
146
|
-
inject(query, tag, cap, metricKey, sessionId
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
170
|
+
inject(query, tag, cap, metricKey, sessionId,
|
|
171
|
+
// v0.5.0 (K5-007 / plan §8.10, D5-08) — dry-run mode (kevin_trace)
|
|
172
|
+
// must never move a counter, not even the injections_blocked_* ones.
|
|
173
|
+
dryRun = false) {
|
|
174
|
+
const memories = this.fetchSlice(query, cap, tag);
|
|
175
|
+
if (memories.length === 0)
|
|
176
|
+
return "";
|
|
177
|
+
const admitted = this.admit(memories, sessionId, dryRun);
|
|
178
|
+
if (admitted.length === 0)
|
|
179
|
+
return "";
|
|
180
|
+
const block = this.format(admitted, tag);
|
|
181
|
+
this.recordInjections(admitted, sessionId, tag, block);
|
|
182
|
+
this.metrics?.incr(metricKey, estimateTokens(block));
|
|
183
|
+
return block;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* v0.5.0 (K5-014 / plan §8.10) — the ranked-retrieval stage shared by
|
|
187
|
+
* `inject` and `plan`. With `dry = true` it is a strict read:
|
|
188
|
+
*
|
|
189
|
+
* - the probe fetch never bumps (BUG-016), like the live path;
|
|
190
|
+
* - the overflow retry ALSO fetches with `bump: false` (the live path
|
|
191
|
+
* lets the retry fetch bump once — that is the only difference);
|
|
192
|
+
* - the no-retry bump is skipped.
|
|
193
|
+
*
|
|
194
|
+
* This is what lets `plan()` predict the EXACT slice the live path
|
|
195
|
+
* would inject without mutating a single relevance score.
|
|
196
|
+
*/
|
|
197
|
+
fetchSlice(query, cap, tag, dry = false) {
|
|
151
198
|
let memories = this.memoryService.getRelevant({
|
|
152
199
|
query,
|
|
153
200
|
maxTokens: cap,
|
|
154
201
|
bump: false,
|
|
155
202
|
});
|
|
156
203
|
if (memories.length === 0)
|
|
157
|
-
return
|
|
204
|
+
return [];
|
|
158
205
|
const firstBlock = this.format(memories, tag);
|
|
159
206
|
const aggregateTokens = estimateTokens(firstBlock);
|
|
160
207
|
const firstRowProtect = memories[0]
|
|
@@ -168,55 +215,88 @@ Consider adding this convention to AGENTS.md:
|
|
|
168
215
|
memories = this.memoryService.getRelevant({
|
|
169
216
|
query,
|
|
170
217
|
maxTokens: lowerCap,
|
|
218
|
+
bump: dry ? false : undefined,
|
|
171
219
|
});
|
|
172
|
-
if (memories.length === 0)
|
|
173
|
-
return "";
|
|
174
220
|
}
|
|
175
|
-
else {
|
|
221
|
+
else if (!dry) {
|
|
176
222
|
// No retry: the probe slice IS the injected slice — bump it
|
|
177
223
|
// exactly once here.
|
|
178
224
|
this.memoryService.bumpRelevance(memories.map((m) => m.id));
|
|
179
225
|
}
|
|
180
|
-
|
|
181
|
-
if (admitted.length === 0)
|
|
182
|
-
return "";
|
|
183
|
-
const block = this.format(admitted, tag);
|
|
184
|
-
this.recordInjections(admitted, sessionId, tag, block);
|
|
185
|
-
this.metrics?.incr(metricKey, estimateTokens(block));
|
|
186
|
-
return block;
|
|
226
|
+
return memories;
|
|
187
227
|
}
|
|
188
228
|
/**
|
|
189
|
-
* v0.
|
|
190
|
-
*
|
|
191
|
-
* seen-set
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* class had only re-derived from `metadata.dispatch`:
|
|
196
|
-
* - dispatched code → strong + actionable (rescued errorType);
|
|
197
|
-
* - generic fallback suggestion + no code → weak, NOT actionable
|
|
198
|
-
* (the generic-suggestion ban is now enforced even for legacy
|
|
199
|
-
* lessons without dispatch metadata, as long as the `Suggestion:`
|
|
200
|
-
* text is available);
|
|
201
|
-
* - specific suggestion without code → strong + actionable;
|
|
202
|
-
* - no `Suggestion:` text at all (agent-saved note) → strong +
|
|
203
|
-
* actionable — the agent explicitly asked to remember it;
|
|
204
|
-
* - causal patterns (type='pattern') → always strong + actionable:
|
|
205
|
-
* they are the FIXED form of a fingerprint (K4-025).
|
|
229
|
+
* v0.5.0 (K5-014 / plan §8.10, D5-08) — PUBLIC read-only prediction of
|
|
230
|
+
* what `inject` WOULD do for a query: same retrieval, same gate, zero
|
|
231
|
+
* side effects. Never moves a counter, never writes the seen-set, never
|
|
232
|
+
* bumps relevance, never records ledger rows. `kevin_trace` (K5-015)
|
|
233
|
+
* surfaces this to the agent; tests freeze the clock + settings around
|
|
234
|
+
* it.
|
|
206
235
|
*/
|
|
207
|
-
|
|
236
|
+
plan(query, options = {}) {
|
|
237
|
+
const tag = options.tag ?? "context";
|
|
238
|
+
const cap = options.cap ??
|
|
239
|
+
(tag === "memory" ? COMPACTING_TOKENS : this.prePromptCap());
|
|
240
|
+
const sessionId = options.sessionId ?? "";
|
|
241
|
+
const memories = this.fetchSlice(query, cap, tag, true);
|
|
242
|
+
const { verdicts } = this.evaluate(memories, sessionId);
|
|
243
|
+
const admitted = [];
|
|
244
|
+
const blocked = [];
|
|
245
|
+
const admittedMemories = [];
|
|
246
|
+
for (const v of verdicts) {
|
|
247
|
+
const base = {
|
|
248
|
+
id: v.memory.id,
|
|
249
|
+
type: v.memory.type,
|
|
250
|
+
tokens: estimateTokens(v.memory.content),
|
|
251
|
+
};
|
|
252
|
+
if (v.allowed) {
|
|
253
|
+
admitted.push({ ...base, decision: "admitted" });
|
|
254
|
+
admittedMemories.push(v.memory);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
blocked.push({
|
|
258
|
+
...base,
|
|
259
|
+
decision: "blocked",
|
|
260
|
+
reason: v.reason,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const wouldInject = admitted.length > 0;
|
|
265
|
+
const totalTokens = wouldInject
|
|
266
|
+
? estimateTokens(this.format(admittedMemories, tag))
|
|
267
|
+
: 0;
|
|
268
|
+
return {
|
|
269
|
+
query,
|
|
270
|
+
tag,
|
|
271
|
+
cap,
|
|
272
|
+
would_inject: wouldInject,
|
|
273
|
+
total_tokens: totalTokens,
|
|
274
|
+
admitted,
|
|
275
|
+
blocked,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* v0.5.0 (K5-014 / plan §8.10) — PURE gate evaluation shared by `admit`
|
|
280
|
+
* (live path) and `plan` (read-only path): returns the verdict for every
|
|
281
|
+
* candidate plus the seen-set as it WOULD look afterwards. Never writes
|
|
282
|
+
* state — the caller decides whether to persist.
|
|
283
|
+
*/
|
|
284
|
+
evaluate(memories, sessionId) {
|
|
208
285
|
const qualityGateEnabled = this.memoryService.getSetting(QUALITY_GATE_SETTING, "1") === "1";
|
|
209
|
-
const seen = this.seenBySession.get(sessionId) ??
|
|
286
|
+
const seen = new Set(this.seenBySession.get(sessionId) ?? []);
|
|
210
287
|
const recurrences = this.ledger?.postInjectionRecurrencesFor(sessionId) ??
|
|
211
288
|
new Map();
|
|
212
|
-
const
|
|
289
|
+
const verdicts = [];
|
|
213
290
|
for (const m of memories) {
|
|
214
291
|
const q = this.lessonQuality(m);
|
|
215
|
-
|
|
292
|
+
const verdict = QualityGate.canInjectVerdict({
|
|
216
293
|
id: m.id,
|
|
217
294
|
status: m.status ?? undefined,
|
|
218
295
|
strength: q.strength,
|
|
219
296
|
isActionable: q.isActionable,
|
|
297
|
+
// v0.5.0 (K5-009) — the `ignored` flag is now a first-class
|
|
298
|
+
// Memory field via mapRow (D5-07).
|
|
299
|
+
ignored: m.ignored === true,
|
|
220
300
|
}, {
|
|
221
301
|
seenThisSession: seen,
|
|
222
302
|
// v0.4.0 (K4-025) — plan §5.1 rule 4: a causal pattern
|
|
@@ -230,12 +310,65 @@ Consider adding this convention to AGENTS.md:
|
|
|
230
310
|
: m.fingerprint
|
|
231
311
|
? (recurrences.get(m.fingerprint) ?? 0)
|
|
232
312
|
: 0,
|
|
233
|
-
}, qualityGateEnabled)
|
|
234
|
-
|
|
235
|
-
|
|
313
|
+
}, qualityGateEnabled);
|
|
314
|
+
verdicts.push({ ...verdict, memory: m });
|
|
315
|
+
}
|
|
316
|
+
return { verdicts, seen };
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* v0.5.0 (K5-017 / plan §8.11, D5-11) — the effective pre-prompt cap,
|
|
320
|
+
* read at call time from `pre_prompt_budget_tokens` (seeded "900" by
|
|
321
|
+
* migration 006). Clamped to [100, 4000]; a non-numeric value falls
|
|
322
|
+
* back to 900. `kevin_trace` reports the value used via `plan().cap`.
|
|
323
|
+
*/
|
|
324
|
+
prePromptCap() {
|
|
325
|
+
const raw = this.memoryService.getSetting("pre_prompt_budget_tokens", "900");
|
|
326
|
+
const n = Number(raw);
|
|
327
|
+
if (!Number.isFinite(n))
|
|
328
|
+
return 900;
|
|
329
|
+
return Math.min(4000, Math.max(100, Math.round(n)));
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* v0.4.0 (K4-017) — QualityGate admission: filters the ranked slice to
|
|
333
|
+
* memories that may be injected this session, updating the session
|
|
334
|
+
* seen-set.
|
|
335
|
+
*
|
|
336
|
+
* v0.5.0 (K5-007 / plan §5.2, D5-04) — uses `canInjectVerdict` and
|
|
337
|
+
* increments the matching `injections_blocked_*` counter for every
|
|
338
|
+
* rejection, so gate policy becomes measurable. When `dryRun === true`
|
|
339
|
+
* the counters stay untouched (D5-08) — and so does the seen-set
|
|
340
|
+
* (a dry run is a strict read, K5-014).
|
|
341
|
+
*
|
|
342
|
+
* BUG-005 — strength/actionability now go through the REAL
|
|
343
|
+
* `QualityGate.evaluate` semantics (plan §5.1 rules 1-2), which this
|
|
344
|
+
* class had only re-derived from `metadata.dispatch`:
|
|
345
|
+
* - dispatched code → strong + actionable (rescued errorType);
|
|
346
|
+
* - generic fallback suggestion + no code → weak, NOT actionable
|
|
347
|
+
* (the generic-suggestion ban is now enforced even for legacy
|
|
348
|
+
* lessons without dispatch metadata, as long as the `Suggestion:`
|
|
349
|
+
* text is available);
|
|
350
|
+
* - specific suggestion without code → strong + actionable;
|
|
351
|
+
* - no `Suggestion:` text at all (agent-saved note) → strong +
|
|
352
|
+
* actionable — the agent explicitly asked to remember it;
|
|
353
|
+
* - causal patterns (type='pattern') → always strong + actionable:
|
|
354
|
+
* they are the FIXED form of a fingerprint (K4-025).
|
|
355
|
+
*/
|
|
356
|
+
admit(memories, sessionId, dryRun = false) {
|
|
357
|
+
const { verdicts, seen } = this.evaluate(memories, sessionId);
|
|
358
|
+
const admitted = [];
|
|
359
|
+
for (const v of verdicts) {
|
|
360
|
+
if (v.allowed) {
|
|
361
|
+
admitted.push(v.memory);
|
|
362
|
+
seen.add(v.memory.id);
|
|
363
|
+
}
|
|
364
|
+
else if (!dryRun) {
|
|
365
|
+
const key = BLOCKED_METRIC[v.reason];
|
|
366
|
+
if (key)
|
|
367
|
+
this.metrics?.incr(key, 1);
|
|
236
368
|
}
|
|
237
369
|
}
|
|
238
|
-
|
|
370
|
+
if (!dryRun)
|
|
371
|
+
this.seenBySession.set(sessionId, seen);
|
|
239
372
|
return admitted;
|
|
240
373
|
}
|
|
241
374
|
/**
|
|
@@ -339,7 +472,7 @@ Consider adding this convention to AGENTS.md:
|
|
|
339
472
|
const query = this.deriveQuery(input.messages);
|
|
340
473
|
if (!query)
|
|
341
474
|
return;
|
|
342
|
-
const block = this.inject(query, "context",
|
|
475
|
+
const block = this.inject(query, "context", this.prePromptCap(), "tokens_injected_pre_prompt", input.sessionID ?? "");
|
|
343
476
|
if (block)
|
|
344
477
|
output.system.push(block);
|
|
345
478
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextInjector.js","sourceRoot":"","sources":["../../plugin/ContextInjector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContextInjector.js","sourceRoot":"","sources":["../../plugin/ContextInjector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Store } from "./Store.js";
|
|
2
|
+
import type { Metrics } from "./metrics.js";
|
|
3
|
+
/**
|
|
4
|
+
* v0.5.0 Feedback (K5-009 / plan §5.3, D5-02).
|
|
5
|
+
*
|
|
6
|
+
* The human-judgement half of the glassbox: the agent can report whether a
|
|
7
|
+
* memory was useful, wrong, outdated, or should be ignored. Verdicts are
|
|
8
|
+
* stored in `memory_feedback` (migration 006_v05_glassbox.sql) and folded
|
|
9
|
+
* into the memory's `feedback_positive` / `feedback_negative` counters —
|
|
10
|
+
* kept SEPARATE from `evidence_count` / `recurrence_count` by design: human
|
|
11
|
+
* judgement is evidence about the memory, causal counters are evidence
|
|
12
|
+
* about the world (the confidence-poisoning defect closed in v0.4.0).
|
|
13
|
+
*
|
|
14
|
+
* D5-07 — the `ignore` verdict is a hard lifecycle action, not a soft
|
|
15
|
+
* signal: the memory is stamped `ignored = 1`, which excludes it from
|
|
16
|
+
* retrieval (K5-008) and from the quality gate (K5-007).
|
|
17
|
+
*
|
|
18
|
+
* Schema:
|
|
19
|
+
* memory_feedback(id PK, memory_id, verdict, session_id, note, created_at)
|
|
20
|
+
* memories(feedback_positive, feedback_negative, ignored)
|
|
21
|
+
*/
|
|
22
|
+
export type FeedbackVerdict = "useful" | "wrong" | "outdated" | "ignore";
|
|
23
|
+
export interface FeedbackRecordInput {
|
|
24
|
+
memoryId: string;
|
|
25
|
+
verdict: FeedbackVerdict;
|
|
26
|
+
sessionId?: string | null;
|
|
27
|
+
note?: string | null;
|
|
28
|
+
}
|
|
29
|
+
export interface FeedbackRow {
|
|
30
|
+
id: string;
|
|
31
|
+
memoryId: string;
|
|
32
|
+
verdict: FeedbackVerdict;
|
|
33
|
+
sessionId: string | null;
|
|
34
|
+
note: string | null;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
}
|
|
37
|
+
export interface FeedbackCounts {
|
|
38
|
+
positive: number;
|
|
39
|
+
negative: number;
|
|
40
|
+
}
|
|
41
|
+
export declare class Feedback {
|
|
42
|
+
private readonly store;
|
|
43
|
+
private readonly metrics;
|
|
44
|
+
private readonly now;
|
|
45
|
+
constructor(store: Store, metrics?: Metrics | null, now?: () => Date);
|
|
46
|
+
/**
|
|
47
|
+
* Records one human verdict and folds it into the memory's counters.
|
|
48
|
+
* Counters are RECOMPUTED from the table (never incremented) so rows
|
|
49
|
+
* deleted in tests or by hand cannot drift them.
|
|
50
|
+
*
|
|
51
|
+
* The `ignore` verdict also stamps `memories.ignored = 1` (D5-07).
|
|
52
|
+
* Returns the feedback row id.
|
|
53
|
+
*/
|
|
54
|
+
record(input: FeedbackRecordInput): string;
|
|
55
|
+
/** Human-judgement counters for one memory (from the row, not the table). */
|
|
56
|
+
countsFor(memoryId: string): FeedbackCounts;
|
|
57
|
+
/**
|
|
58
|
+
* Raw verdict history, newest first. Used by `kevin_feedback` (K5-011)
|
|
59
|
+
* and by the audit tool (K5-016).
|
|
60
|
+
*/
|
|
61
|
+
list(memoryId?: string, limit?: number): FeedbackRow[];
|
|
62
|
+
/**
|
|
63
|
+
* Recompute a memory's positive/negative counters straight from the
|
|
64
|
+
* verdict table. Kept private — `record` is the only mutation path.
|
|
65
|
+
*/
|
|
66
|
+
private recomputeCounters;
|
|
67
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { uuidv7 } from "./uuid.js";
|
|
2
|
+
const POSITIVE_VERDICTS = ["useful"];
|
|
3
|
+
const NEGATIVE_VERDICTS = [
|
|
4
|
+
"wrong",
|
|
5
|
+
"outdated",
|
|
6
|
+
"ignore",
|
|
7
|
+
];
|
|
8
|
+
// v0.5.0 — pre-006 DBs lack `memory_feedback`; record() fails loudly with a
|
|
9
|
+
// descriptive error instead of a bare "no such table" (the tool layer turns
|
|
10
|
+
// it into a graceful message).
|
|
11
|
+
const feedbackTableCache = new WeakMap();
|
|
12
|
+
function hasFeedbackTable(store) {
|
|
13
|
+
const cached = feedbackTableCache.get(store);
|
|
14
|
+
if (cached !== undefined)
|
|
15
|
+
return cached;
|
|
16
|
+
try {
|
|
17
|
+
store.prepare("SELECT COUNT(*) FROM memory_feedback").get();
|
|
18
|
+
feedbackTableCache.set(store, true);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
feedbackTableCache.set(store, false);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class Feedback {
|
|
27
|
+
store;
|
|
28
|
+
metrics;
|
|
29
|
+
now;
|
|
30
|
+
constructor(store, metrics, now = () => new Date()) {
|
|
31
|
+
this.store = store;
|
|
32
|
+
this.metrics = metrics ?? null;
|
|
33
|
+
this.now = now;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Records one human verdict and folds it into the memory's counters.
|
|
37
|
+
* Counters are RECOMPUTED from the table (never incremented) so rows
|
|
38
|
+
* deleted in tests or by hand cannot drift them.
|
|
39
|
+
*
|
|
40
|
+
* The `ignore` verdict also stamps `memories.ignored = 1` (D5-07).
|
|
41
|
+
* Returns the feedback row id.
|
|
42
|
+
*/
|
|
43
|
+
record(input) {
|
|
44
|
+
if (!hasFeedbackTable(this.store)) {
|
|
45
|
+
throw new Error("kevin_feedback requires migration 006_v05_glassbox.sql (missing table memory_feedback)");
|
|
46
|
+
}
|
|
47
|
+
const id = uuidv7();
|
|
48
|
+
this.store
|
|
49
|
+
.prepare(`INSERT INTO memory_feedback
|
|
50
|
+
(id, memory_id, verdict, session_id, note)
|
|
51
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
52
|
+
.run(id, input.memoryId, input.verdict, input.sessionId ?? null, input.note ?? null);
|
|
53
|
+
this.recomputeCounters(input.memoryId);
|
|
54
|
+
if (input.verdict === "ignore") {
|
|
55
|
+
this.store
|
|
56
|
+
.prepare("UPDATE memories SET ignored = 1 WHERE id = ?")
|
|
57
|
+
.run(input.memoryId);
|
|
58
|
+
}
|
|
59
|
+
// v0.5.0 (K5-023 / plan §5.3, D5-06) — lifecycle action of a
|
|
60
|
+
// negative verdict. `wrong` is an opinion and deserves a second
|
|
61
|
+
// opinion: it demotes only at feedback_negative >= 2. `outdated`
|
|
62
|
+
// is a self-verifying claim about the world and acts at once.
|
|
63
|
+
// `useful` confirms the memory and refreshes its verification.
|
|
64
|
+
if (input.verdict === "outdated") {
|
|
65
|
+
this.store
|
|
66
|
+
.prepare("UPDATE memories SET status = 'stale' WHERE id = ?")
|
|
67
|
+
.run(input.memoryId);
|
|
68
|
+
}
|
|
69
|
+
else if (input.verdict === "wrong") {
|
|
70
|
+
const counts = this.countsFor(input.memoryId);
|
|
71
|
+
if (counts.negative >= 2) {
|
|
72
|
+
this.store
|
|
73
|
+
.prepare("UPDATE memories SET status = 'stale' WHERE id = ?")
|
|
74
|
+
.run(input.memoryId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (input.verdict === "useful") {
|
|
78
|
+
this.store
|
|
79
|
+
.prepare("UPDATE memories SET last_verified_at = datetime('now') WHERE id = ?")
|
|
80
|
+
.run(input.memoryId);
|
|
81
|
+
}
|
|
82
|
+
if (POSITIVE_VERDICTS.includes(input.verdict)) {
|
|
83
|
+
this.metrics?.incr("feedback_positive_total", 1);
|
|
84
|
+
}
|
|
85
|
+
else if (NEGATIVE_VERDICTS.includes(input.verdict)) {
|
|
86
|
+
this.metrics?.incr("feedback_negative_total", 1);
|
|
87
|
+
}
|
|
88
|
+
return id;
|
|
89
|
+
}
|
|
90
|
+
/** Human-judgement counters for one memory (from the row, not the table). */
|
|
91
|
+
countsFor(memoryId) {
|
|
92
|
+
const row = this.store
|
|
93
|
+
.prepare("SELECT feedback_positive, feedback_negative FROM memories WHERE id = ?")
|
|
94
|
+
.get(memoryId);
|
|
95
|
+
if (!row)
|
|
96
|
+
return { positive: 0, negative: 0 };
|
|
97
|
+
return { positive: row.feedback_positive, negative: row.feedback_negative };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Raw verdict history, newest first. Used by `kevin_feedback` (K5-011)
|
|
101
|
+
* and by the audit tool (K5-016).
|
|
102
|
+
*/
|
|
103
|
+
list(memoryId, limit = 50) {
|
|
104
|
+
const rows = this.store
|
|
105
|
+
.prepare(`SELECT id, memory_id, verdict, session_id, note, created_at
|
|
106
|
+
FROM memory_feedback
|
|
107
|
+
${memoryId ? "WHERE memory_id = ?" : ""}
|
|
108
|
+
ORDER BY created_at DESC, rowid DESC
|
|
109
|
+
LIMIT ?`)
|
|
110
|
+
.all(...(memoryId ? [memoryId, limit] : [limit]));
|
|
111
|
+
return rows.map((r) => ({
|
|
112
|
+
id: r.id,
|
|
113
|
+
memoryId: r.memory_id,
|
|
114
|
+
verdict: r.verdict,
|
|
115
|
+
sessionId: r.session_id,
|
|
116
|
+
note: r.note,
|
|
117
|
+
createdAt: r.created_at,
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Recompute a memory's positive/negative counters straight from the
|
|
122
|
+
* verdict table. Kept private — `record` is the only mutation path.
|
|
123
|
+
*/
|
|
124
|
+
recomputeCounters(memoryId) {
|
|
125
|
+
this.store
|
|
126
|
+
.prepare(`UPDATE memories SET
|
|
127
|
+
feedback_positive = (
|
|
128
|
+
SELECT COUNT(*) FROM memory_feedback
|
|
129
|
+
WHERE memory_id = ? AND verdict = 'useful'),
|
|
130
|
+
feedback_negative = (
|
|
131
|
+
SELECT COUNT(*) FROM memory_feedback
|
|
132
|
+
WHERE memory_id = ? AND verdict IN ('wrong','outdated','ignore'))
|
|
133
|
+
WHERE id = ?`)
|
|
134
|
+
.run(memoryId, memoryId, memoryId);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=Feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Feedback.js","sourceRoot":"","sources":["../../plugin/Feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ import type { Metrics } from "./metrics.js";
|
|
|
22
22
|
* (ContextInjector.recordInjections) skips them.
|
|
23
23
|
*/
|
|
24
24
|
export type InjectionHook = "pre_prompt" | "compacting";
|
|
25
|
-
export type InjectionOutcome = "unmeasured" | "effective" | "ineffective";
|
|
25
|
+
export type InjectionOutcome = "unmeasured" | "effective" | "ineffective" | "inconclusive";
|
|
26
26
|
export interface InjectionRecordInput {
|
|
27
27
|
memoryId: string;
|
|
28
28
|
fingerprint: string;
|
|
@@ -60,7 +60,9 @@ export declare class InjectionLedger {
|
|
|
60
60
|
*
|
|
61
61
|
* An ineffective injection also bumps the target memory's
|
|
62
62
|
* `recurrence_count` (negative evidence, plan §5.3) and stamps
|
|
63
|
-
* `last_injected_at
|
|
63
|
+
* `last_injected_at` (monotonically — an older row can never
|
|
64
|
+
* regress a newer injection's timestamp; the column means "most
|
|
65
|
+
* recent injection").
|
|
64
66
|
*/
|
|
65
67
|
settle(sessionId: string): void;
|
|
66
68
|
/**
|
|
@@ -81,5 +83,10 @@ export declare class InjectionLedger {
|
|
|
81
83
|
unsettledForSession(sessionId: string): number;
|
|
82
84
|
/** Latest ledger rows for a session, newest first (used by tests/tools). */
|
|
83
85
|
rowsForSession(sessionId: string): InjectionRow[];
|
|
86
|
+
/**
|
|
87
|
+
* v0.5.0 (K5-005 / plan §8.4) — one grouped rollup over the whole
|
|
88
|
+
* ledger, zero-filled for every outcome. Consumed by `kevin_audit`.
|
|
89
|
+
*/
|
|
90
|
+
outcomeCounts(): Record<InjectionOutcome, number>;
|
|
84
91
|
}
|
|
85
92
|
export {};
|