@jmtrin/opencode-kevin 0.5.0 → 0.7.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 +268 -122
- package/dist/migrations/001_initial.sql +91 -91
- package/dist/migrations/003_v02_signal.sql +57 -57
- package/dist/migrations/004_v03_knowledge.sql +138 -138
- package/dist/migrations/005_v04_signal.sql +57 -57
- package/dist/migrations/006_v05_glassbox.sql +118 -118
- package/dist/migrations/007_v06_pull.sql +145 -0
- package/dist/migrations/008_v07_truth.sql +124 -0
- package/dist/plugin/Archiver.js +4 -3
- package/dist/plugin/Archiver.js.map +1 -1
- package/dist/plugin/ArtifactWriter.d.ts +50 -0
- package/dist/plugin/ArtifactWriter.js +240 -0
- package/dist/plugin/ArtifactWriter.js.map +1 -0
- package/dist/plugin/ConflictDetector.d.ts +35 -0
- package/dist/plugin/ConflictDetector.js +283 -0
- package/dist/plugin/ConflictDetector.js.map +1 -0
- package/dist/plugin/ContextInjector.d.ts +15 -0
- package/dist/plugin/ContextInjector.js +46 -11
- package/dist/plugin/ContextInjector.js.map +1 -1
- package/dist/plugin/ConventionMiner.d.ts +35 -0
- package/dist/plugin/ConventionMiner.js +243 -0
- package/dist/plugin/ConventionMiner.js.map +1 -0
- package/dist/plugin/Curator.d.ts +96 -0
- package/dist/plugin/Curator.js +283 -0
- package/dist/plugin/Curator.js.map +1 -0
- package/dist/plugin/Feedback.js +4 -3
- package/dist/plugin/Feedback.js.map +1 -1
- package/dist/plugin/Materializer.d.ts +59 -0
- package/dist/plugin/Materializer.js +237 -0
- package/dist/plugin/Materializer.js.map +1 -0
- package/dist/plugin/MemoryService.d.ts +37 -0
- package/dist/plugin/MemoryService.js +241 -20
- package/dist/plugin/MemoryService.js.map +1 -1
- package/dist/plugin/Migrate.js +51 -2
- package/dist/plugin/Migrate.js.map +1 -1
- package/dist/plugin/QualityGate.d.ts +15 -1
- package/dist/plugin/QualityGate.js +12 -0
- package/dist/plugin/QualityGate.js.map +1 -1
- package/dist/plugin/Reflector.js +13 -0
- package/dist/plugin/Reflector.js.map +1 -1
- package/dist/plugin/RepoTruth.d.ts +80 -0
- package/dist/plugin/RepoTruth.js +600 -0
- package/dist/plugin/RepoTruth.js.map +1 -0
- package/dist/plugin/Retrospective.d.ts +1 -0
- package/dist/plugin/Retrospective.js +20 -1
- package/dist/plugin/Retrospective.js.map +1 -1
- package/dist/plugin/capabilities.d.ts +15 -0
- package/dist/plugin/capabilities.js +42 -0
- package/dist/plugin/capabilities.js.map +1 -0
- package/dist/plugin/diff.d.ts +8 -0
- package/dist/plugin/diff.js +183 -0
- package/dist/plugin/diff.js.map +1 -0
- package/dist/plugin/index.d.ts +8 -1
- package/dist/plugin/index.js +354 -2
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/inferability.d.ts +32 -0
- package/dist/plugin/inferability.js +89 -0
- package/dist/plugin/inferability.js.map +1 -0
- package/dist/plugin/kevin_approve.d.ts +34 -0
- package/dist/plugin/kevin_approve.js +50 -0
- package/dist/plugin/kevin_approve.js.map +1 -0
- package/dist/plugin/kevin_audit.d.ts +87 -1
- package/dist/plugin/kevin_audit.js +190 -3
- package/dist/plugin/kevin_audit.js.map +1 -1
- package/dist/plugin/kevin_conflicts.d.ts +9 -0
- package/dist/plugin/kevin_conflicts.js +51 -0
- package/dist/plugin/kevin_conflicts.js.map +1 -0
- package/dist/plugin/kevin_facts.d.ts +42 -0
- package/dist/plugin/kevin_facts.js +37 -0
- package/dist/plugin/kevin_facts.js.map +1 -0
- package/dist/plugin/kevin_propose.d.ts +23 -0
- package/dist/plugin/kevin_propose.js +15 -0
- package/dist/plugin/kevin_propose.js.map +1 -0
- package/dist/plugin/kevin_publish.d.ts +38 -0
- package/dist/plugin/kevin_publish.js +19 -0
- package/dist/plugin/kevin_publish.js.map +1 -0
- package/dist/plugin/metrics.d.ts +12 -1
- package/dist/plugin/metrics.js +49 -0
- package/dist/plugin/metrics.js.map +1 -1
- package/dist/plugin/replay-types.d.ts +8 -8
- package/dist/plugin/replay.js +10 -0
- package/dist/plugin/replay.js.map +1 -1
- package/migrations/001_initial.sql +91 -91
- package/migrations/003_v02_signal.sql +57 -57
- package/migrations/004_v03_knowledge.sql +138 -138
- package/migrations/005_v04_signal.sql +57 -57
- package/migrations/006_v05_glassbox.sql +118 -118
- package/migrations/007_v06_pull.sql +145 -0
- package/migrations/008_v07_truth.sql +124 -0
- package/package.json +3 -2
|
@@ -40,6 +40,12 @@ export interface InjectionContext {
|
|
|
40
40
|
/** Failing tool_calls count for this fingerprint in the current session
|
|
41
41
|
* (0 = never recurred after injection). */
|
|
42
42
|
recurrenceCount: number;
|
|
43
|
+
/** v0.6.0 (K6-022 / plan §5.8) — the `injection_confidence_floor`
|
|
44
|
+
* setting, read once per plan/inject call by the ContextInjector.
|
|
45
|
+
* When present, a memory whose `confidence` is below it is rejected by
|
|
46
|
+
* the zero branch (before the seen-set). Undefined disables the branch:
|
|
47
|
+
* memories without a computed confidence are never dropped by it. */
|
|
48
|
+
confidenceFloor?: number;
|
|
43
49
|
}
|
|
44
50
|
/**
|
|
45
51
|
* v0.5.0 (K5-006 / plan §5.2, D5-04) — the reason a memory was rejected
|
|
@@ -47,7 +53,7 @@ export interface InjectionContext {
|
|
|
47
53
|
* `injections_blocked_*` counter; a silent boolean is an unmeasurable
|
|
48
54
|
* policy (principle 16).
|
|
49
55
|
*/
|
|
50
|
-
export type GateReason = "ok" | "seen_this_session" | "ignored" | "not_active" | "recurrence" | "weak";
|
|
56
|
+
export type GateReason = "ok" | "low_confidence" | "seen_this_session" | "ignored" | "not_active" | "recurrence" | "weak";
|
|
51
57
|
export interface GateVerdict {
|
|
52
58
|
readonly allowed: boolean;
|
|
53
59
|
readonly reason: GateReason;
|
|
@@ -88,6 +94,9 @@ export declare const QualityGate: {
|
|
|
88
94
|
* Branch order preserves the v0.4.0 sequence with `ignored` inserted
|
|
89
95
|
* second:
|
|
90
96
|
*
|
|
97
|
+
* 0. `confidence < ctx.confidenceFloor` → `low_confidence` (v0.6.0,
|
|
98
|
+
* K6-022 — runs FIRST: it is the cheapest check, and a memory below
|
|
99
|
+
* the floor should not consume a seen-set slot it will never use)
|
|
91
100
|
* 1. seen this session → `seen_this_session`
|
|
92
101
|
* 2. `memory.ignored === true` → `ignored`
|
|
93
102
|
* 3. status !== 'active' → `not_active`
|
|
@@ -99,6 +108,10 @@ export declare const QualityGate: {
|
|
|
99
108
|
* `ignored` is a human verdict (D5-07) and is enforced even in debug
|
|
100
109
|
* mode: the flag excludes a memory from retrieval entirely, so the gate
|
|
101
110
|
* is only ever asked about it defensively.
|
|
111
|
+
*
|
|
112
|
+
* The floor comparison is `>=`-admissive: a memory exactly AT the floor
|
|
113
|
+
* passes the branch (asserted in K6-022). A floor of '0' admits
|
|
114
|
+
* everything the other five branches allow.
|
|
102
115
|
*/
|
|
103
116
|
canInjectVerdict(memory: {
|
|
104
117
|
id: string;
|
|
@@ -106,5 +119,6 @@ export declare const QualityGate: {
|
|
|
106
119
|
strength?: "strong" | "weak";
|
|
107
120
|
isActionable?: boolean;
|
|
108
121
|
ignored?: boolean;
|
|
122
|
+
confidence?: number;
|
|
109
123
|
}, ctx: InjectionContext, qualityGateEnabled?: boolean): GateVerdict;
|
|
110
124
|
};
|
|
@@ -70,6 +70,9 @@ export const QualityGate = {
|
|
|
70
70
|
* Branch order preserves the v0.4.0 sequence with `ignored` inserted
|
|
71
71
|
* second:
|
|
72
72
|
*
|
|
73
|
+
* 0. `confidence < ctx.confidenceFloor` → `low_confidence` (v0.6.0,
|
|
74
|
+
* K6-022 — runs FIRST: it is the cheapest check, and a memory below
|
|
75
|
+
* the floor should not consume a seen-set slot it will never use)
|
|
73
76
|
* 1. seen this session → `seen_this_session`
|
|
74
77
|
* 2. `memory.ignored === true` → `ignored`
|
|
75
78
|
* 3. status !== 'active' → `not_active`
|
|
@@ -81,8 +84,17 @@ export const QualityGate = {
|
|
|
81
84
|
* `ignored` is a human verdict (D5-07) and is enforced even in debug
|
|
82
85
|
* mode: the flag excludes a memory from retrieval entirely, so the gate
|
|
83
86
|
* is only ever asked about it defensively.
|
|
87
|
+
*
|
|
88
|
+
* The floor comparison is `>=`-admissive: a memory exactly AT the floor
|
|
89
|
+
* passes the branch (asserted in K6-022). A floor of '0' admits
|
|
90
|
+
* everything the other five branches allow.
|
|
84
91
|
*/
|
|
85
92
|
canInjectVerdict(memory, ctx, qualityGateEnabled = true) {
|
|
93
|
+
if (memory.confidence !== undefined &&
|
|
94
|
+
ctx.confidenceFloor !== undefined &&
|
|
95
|
+
memory.confidence < ctx.confidenceFloor) {
|
|
96
|
+
return { allowed: false, reason: "low_confidence" };
|
|
97
|
+
}
|
|
86
98
|
if (ctx.seenThisSession.has(memory.id)) {
|
|
87
99
|
return { allowed: false, reason: "seen_this_session" };
|
|
88
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QualityGate.js","sourceRoot":"","sources":["../../plugin/QualityGate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AAEH;qEACqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAC9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAC1B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"QualityGate.js","sourceRoot":"","sources":["../../plugin/QualityGate.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/Reflector.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fingerprint as computeFingerprint } from "./fingerprint.js";
|
|
2
|
+
import { classify } from "./inferability.js";
|
|
2
3
|
import { redactPaths as redactPathsText } from "./redact.js";
|
|
3
4
|
const DEFAULT_THROTTLE_MS = 60_000;
|
|
4
5
|
const MAX_CONTENT_CHARS = 4096;
|
|
@@ -128,6 +129,18 @@ export class Reflector {
|
|
|
128
129
|
return null;
|
|
129
130
|
}
|
|
130
131
|
this.lastReflectionByFp.set(fp, now);
|
|
132
|
+
const configurableMemoryService = this.memoryService;
|
|
133
|
+
const lessonMode = configurableMemoryService.getSetting?.("error_lesson_mode", "all") ??
|
|
134
|
+
"all";
|
|
135
|
+
const verdict = classify({
|
|
136
|
+
type: "error",
|
|
137
|
+
content: lesson,
|
|
138
|
+
metadata: { dispatch: { code: dispatched.code, hint: dispatched.hint } },
|
|
139
|
+
});
|
|
140
|
+
if (lessonMode === "triage_only" && verdict === "inferable") {
|
|
141
|
+
this.metrics?.incr("error_lessons_suppressed", 1);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
131
144
|
// v0.3.0 (K3-018): optional LLM enrichment opt-in. Runs only when
|
|
132
145
|
// the throttle check passed (bug #5).
|
|
133
146
|
let enrichedLesson = lesson;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reflector.js","sourceRoot":"","sources":["../../plugin/Reflector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Reflector.js","sourceRoot":"","sources":["../../plugin/Reflector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { Memory } from "./MemoryService.js";
|
|
2
|
+
import type { Store } from "./Store.js";
|
|
3
|
+
import type { Metrics } from "./metrics.js";
|
|
4
|
+
declare const MAX_FACTS_PER_PROJECT = 500;
|
|
5
|
+
export interface RepoFact {
|
|
6
|
+
/** "package.json" | "tsconfig.json" */
|
|
7
|
+
readonly file: string;
|
|
8
|
+
/** "scripts.test", "dependencies.zod", "compilerOptions.strict" */
|
|
9
|
+
readonly keyPath: string;
|
|
10
|
+
/** always stringified */
|
|
11
|
+
readonly value: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RepoFactRow extends RepoFact {
|
|
14
|
+
id: string;
|
|
15
|
+
projectId: string;
|
|
16
|
+
fingerprint: string;
|
|
17
|
+
sourceMtime: string | null;
|
|
18
|
+
scannedAt: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class RepoTruth {
|
|
21
|
+
private readonly store;
|
|
22
|
+
private readonly projectId;
|
|
23
|
+
private readonly projectRoot;
|
|
24
|
+
private readonly metrics;
|
|
25
|
+
private hasTable;
|
|
26
|
+
private readonly lastMtimes;
|
|
27
|
+
private readonly lastFacts;
|
|
28
|
+
private lastScanAt;
|
|
29
|
+
private readonly prevDeps;
|
|
30
|
+
constructor(store: Store, projectId: string, projectRoot: string, metrics?: Metrics | null);
|
|
31
|
+
private ensureTables;
|
|
32
|
+
/**
|
|
33
|
+
* v0.7.0 (K7-005/006 / plan §5.1-5.2, D7-13) — refresh the repository
|
|
34
|
+
* truth. The steady state of an idle session is two `stat` calls: a file
|
|
35
|
+
* whose `source_mtime` is unchanged is NOT re-parsed (no JSON.parse, no
|
|
36
|
+
* readFileSync). A changed file replaces that file's facts for THIS
|
|
37
|
+
* project only; a file no longer present has its facts removed for this
|
|
38
|
+
* project only. The project-wide 500-fact cap is applied to the combined,
|
|
39
|
+
* deterministically-ordered fact set and the truncation is recorded, never
|
|
40
|
+
* silent. Returns the project's stored fact view after the scan (including
|
|
41
|
+
* a `_truncated` row when the cap was hit), so repeated scans of unchanged
|
|
42
|
+
* files return identical results.
|
|
43
|
+
*/
|
|
44
|
+
scan(_now?: Date): RepoFact[];
|
|
45
|
+
private hasStoredFileFacts;
|
|
46
|
+
private currentScanFacts;
|
|
47
|
+
private storedFileFacts;
|
|
48
|
+
private getStoredMtime;
|
|
49
|
+
private persistAll;
|
|
50
|
+
private storedFactCount;
|
|
51
|
+
private storedTruncation;
|
|
52
|
+
/**
|
|
53
|
+
* v0.7.0 (K7-006 / plan §5.2) — extract a file's facts WITHOUT writing
|
|
54
|
+
* anything. Used by scan to keep a single source of truth for extraction.
|
|
55
|
+
*/
|
|
56
|
+
private extractFile;
|
|
57
|
+
private fileMtimes;
|
|
58
|
+
/**
|
|
59
|
+
* v0.7.0 (K7-006 / plan §5.2, D7-02) — the project-scoped stored facts.
|
|
60
|
+
* Every read filters on `project_id`, so a second project's facts never
|
|
61
|
+
* leak into this project's view.
|
|
62
|
+
*/
|
|
63
|
+
facts(): RepoFact[];
|
|
64
|
+
/** v0.7.0 (K7-009) — human-readable fact rows for `kevin_facts`. */
|
|
65
|
+
storeFacts(): RepoFactRow[];
|
|
66
|
+
/** Timestamp of the latest scan in this process or persisted facts. */
|
|
67
|
+
scannedAt(): string | null;
|
|
68
|
+
/**
|
|
69
|
+
* v0.7.0 (K7-007 / plan §5.1, D7-05) — exact-match contradiction detection:
|
|
70
|
+
* the three and only three checks. Each returns a human-readable reason;
|
|
71
|
+
* empty when consistent. Pure read — writes nothing (K7-008 and K7-014 own
|
|
72
|
+
* the penalty and conflict-row writes).
|
|
73
|
+
*/
|
|
74
|
+
contradictions(memory: Memory): string[];
|
|
75
|
+
private checkMissingScripts;
|
|
76
|
+
private checkMissingDependencies;
|
|
77
|
+
private checkChangedCompilerOptions;
|
|
78
|
+
private currentDepPackages;
|
|
79
|
+
}
|
|
80
|
+
export { MAX_FACTS_PER_PROJECT };
|