@mneme-ai/core 2.30.0 → 2.31.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/dist/agent_manifest.d.ts +1 -1
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +13 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/hgp/hgp.test.d.ts +2 -0
- package/dist/hgp/hgp.test.d.ts.map +1 -0
- package/dist/hgp/hgp.test.js +198 -0
- package/dist/hgp/hgp.test.js.map +1 -0
- package/dist/hgp/hgp_id.d.ts +18 -0
- package/dist/hgp/hgp_id.d.ts.map +1 -0
- package/dist/hgp/hgp_id.js +41 -0
- package/dist/hgp/hgp_id.js.map +1 -0
- package/dist/hgp/index.d.ts +12 -0
- package/dist/hgp/index.d.ts.map +1 -0
- package/dist/hgp/index.js +10 -0
- package/dist/hgp/index.js.map +1 -0
- package/dist/hgp/registry.d.ts +64 -0
- package/dist/hgp/registry.d.ts.map +1 -0
- package/dist/hgp/registry.js +221 -0
- package/dist/hgp/registry.js.map +1 -0
- package/dist/hgp/severity.d.ts +19 -0
- package/dist/hgp/severity.d.ts.map +1 -0
- package/dist/hgp/severity.js +46 -0
- package/dist/hgp/severity.js.map +1 -0
- package/dist/hgp/types.d.ts +60 -0
- package/dist/hgp/types.d.ts.map +1 -0
- package/dist/hgp/types.js +11 -0
- package/dist/hgp/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/rewind/engine.d.ts +65 -0
- package/dist/rewind/engine.d.ts.map +1 -0
- package/dist/rewind/engine.js +473 -0
- package/dist/rewind/engine.js.map +1 -0
- package/dist/rewind/index.d.ts +13 -0
- package/dist/rewind/index.d.ts.map +1 -0
- package/dist/rewind/index.js +11 -0
- package/dist/rewind/index.js.map +1 -0
- package/dist/rewind/intent_class.d.ts +35 -0
- package/dist/rewind/intent_class.d.ts.map +1 -0
- package/dist/rewind/intent_class.js +141 -0
- package/dist/rewind/intent_class.js.map +1 -0
- package/dist/rewind/rewind.test.d.ts +2 -0
- package/dist/rewind/rewind.test.d.ts.map +1 -0
- package/dist/rewind/rewind.test.js +176 -0
- package/dist/rewind/rewind.test.js.map +1 -0
- package/dist/rewind/types.d.ts +140 -0
- package/dist/rewind/types.d.ts.map +1 -0
- package/dist/rewind/types.js +11 -0
- package/dist/rewind/types.js.map +1 -0
- package/dist/squadron/acgv_vaccine.d.ts.map +1 -1
- package/dist/squadron/acgv_vaccine.js +15 -0
- package/dist/squadron/acgv_vaccine.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +28 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +73 -1
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.31.0 — REWIND engine.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. Read commits in `range` (default HEAD~100..HEAD) — git only.
|
|
6
|
+
* 2. Build intent fingerprint per commit (category × surface ×
|
|
7
|
+
* sizeBucket × topic-simhash).
|
|
8
|
+
* 3. Either freshly seal a Capsule OR reuse `reuseCapsuleId` so the
|
|
9
|
+
* SAME prompts get fired at every vendor release (time-capsule).
|
|
10
|
+
* 4. For each (vendor, commit): blind-replay → score reply vs
|
|
11
|
+
* accepted diff → bucket by intent class.
|
|
12
|
+
* 5. Compare to prior card for same vendor (different vendorVersion)
|
|
13
|
+
* → emit RegressionVerdict.
|
|
14
|
+
* 6. HMAC-chain the VendorRegressionCard + persist + write feedback
|
|
15
|
+
* to .mneme/aletheia/honest_mirror_weights.json (composes with
|
|
16
|
+
* HONEST MIRROR's CONCLAVE feedback loop — REWIND just blends in).
|
|
17
|
+
*/
|
|
18
|
+
import { spawnSync } from "node:child_process";
|
|
19
|
+
import { createHash, createHmac } from "node:crypto";
|
|
20
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, appendFileSync, } from "node:fs";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { buildFingerprint, correctnessScore } from "./intent_class.js";
|
|
23
|
+
import { scrub } from "../honest_mirror/anonymizer.js";
|
|
24
|
+
const HMAC_KEY = process.env["MNEME_REWIND_KEY"] ?? "mneme-rewind-v1";
|
|
25
|
+
const CHAIN_SEED = "0".repeat(64);
|
|
26
|
+
function canon(v) {
|
|
27
|
+
if (v === null || typeof v !== "object")
|
|
28
|
+
return JSON.stringify(v);
|
|
29
|
+
if (Array.isArray(v))
|
|
30
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
31
|
+
const keys = Object.keys(v).sort();
|
|
32
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
33
|
+
}
|
|
34
|
+
function sha(s) { return createHash("sha256").update(s).digest("hex"); }
|
|
35
|
+
function hmacOf(prev, payload) {
|
|
36
|
+
return createHmac("sha256", HMAC_KEY).update(prev + "|" + payload).digest("hex");
|
|
37
|
+
}
|
|
38
|
+
let lastChainLink = CHAIN_SEED;
|
|
39
|
+
export function __resetRewindChainForTest() { lastChainLink = CHAIN_SEED; }
|
|
40
|
+
// ── Git helpers (lightweight; no dependency on the runtime git module) ─
|
|
41
|
+
function git(cwd, args) {
|
|
42
|
+
const r = spawnSync("git", args, { cwd, encoding: "utf8", timeout: 20_000, maxBuffer: 8 * 1024 * 1024 });
|
|
43
|
+
if (r.status !== 0)
|
|
44
|
+
return "";
|
|
45
|
+
return r.stdout ?? "";
|
|
46
|
+
}
|
|
47
|
+
export function gitAvailable(cwd) {
|
|
48
|
+
const r = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], { cwd, encoding: "utf8", timeout: 5_000 });
|
|
49
|
+
return r.status === 0 && (r.stdout ?? "").trim() === "true";
|
|
50
|
+
}
|
|
51
|
+
function listCommitsInRange(cwd, range) {
|
|
52
|
+
const FS = "\x1f";
|
|
53
|
+
const RS = "\x1e";
|
|
54
|
+
const fmt = `%H${FS}%aI${FS}%s${FS}%b${RS}`;
|
|
55
|
+
const raw = git(cwd, ["log", range, `--pretty=format:${fmt}`]);
|
|
56
|
+
if (!raw)
|
|
57
|
+
return [];
|
|
58
|
+
const out = [];
|
|
59
|
+
for (const row of raw.split(RS)) {
|
|
60
|
+
const r = row.trim();
|
|
61
|
+
if (!r)
|
|
62
|
+
continue;
|
|
63
|
+
const parts = r.split(FS);
|
|
64
|
+
if (parts.length < 3)
|
|
65
|
+
continue;
|
|
66
|
+
out.push({ sha: parts[0], at: parts[1], subject: parts[2], body: parts[3] ?? "" });
|
|
67
|
+
}
|
|
68
|
+
return out
|
|
69
|
+
.filter((c) => !/^(chore\(release\)|Merge |Revert )/i.test(c.subject))
|
|
70
|
+
.filter((c) => c.subject.length >= 12);
|
|
71
|
+
}
|
|
72
|
+
function getDiffMeta(cwd, sha) {
|
|
73
|
+
const numstat = git(cwd, ["show", "--no-color", "--pretty=", "--numstat", sha]);
|
|
74
|
+
let lines = 0;
|
|
75
|
+
const files = [];
|
|
76
|
+
for (const ln of numstat.split("\n")) {
|
|
77
|
+
const parts = ln.trim().split(/\s+/);
|
|
78
|
+
if (parts.length >= 3) {
|
|
79
|
+
const added = parseInt(parts[0], 10);
|
|
80
|
+
const removed = parseInt(parts[1], 10);
|
|
81
|
+
if (!Number.isNaN(added))
|
|
82
|
+
lines += added;
|
|
83
|
+
if (!Number.isNaN(removed))
|
|
84
|
+
lines += removed;
|
|
85
|
+
files.push(parts.slice(2).join(" "));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const diff = git(cwd, ["show", "--no-color", "--stat", "--patch", sha]).slice(0, 8000);
|
|
89
|
+
return { files, lines, diff };
|
|
90
|
+
}
|
|
91
|
+
// ── Capsule sealing ─────────────────────────────────────────────────────
|
|
92
|
+
export function sealCapsule(cwd, range, count, seed) {
|
|
93
|
+
const all = listCommitsInRange(cwd, range);
|
|
94
|
+
if (all.length === 0) {
|
|
95
|
+
const empty = {
|
|
96
|
+
id: "empty-" + sha(`${range}|${seed}`).slice(0, 12),
|
|
97
|
+
spec: { name: "MNEME-REWIND-CAPSULE", version: "1.0" },
|
|
98
|
+
sealedAt: new Date().toISOString(),
|
|
99
|
+
range, commitCount: 0,
|
|
100
|
+
intentDistribution: {},
|
|
101
|
+
commits: [],
|
|
102
|
+
hmac: "",
|
|
103
|
+
bodyDigest: "",
|
|
104
|
+
};
|
|
105
|
+
const body = { ...empty, hmac: undefined, bodyDigest: undefined };
|
|
106
|
+
const digest = sha(canon(body));
|
|
107
|
+
empty.bodyDigest = digest;
|
|
108
|
+
empty.hmac = createHmac("sha256", HMAC_KEY).update(digest).digest("hex");
|
|
109
|
+
return empty;
|
|
110
|
+
}
|
|
111
|
+
const take = count <= 0 ? all.length : Math.min(count, all.length);
|
|
112
|
+
// Deterministic sample by seed: rotate + step.
|
|
113
|
+
const step = Math.max(1, Math.floor(all.length / take));
|
|
114
|
+
const start = seed % all.length;
|
|
115
|
+
const picked = [];
|
|
116
|
+
for (let i = 0; i < take; i++) {
|
|
117
|
+
const idx = (start + i * step) % all.length;
|
|
118
|
+
picked.push(all[idx]);
|
|
119
|
+
}
|
|
120
|
+
const commits = [];
|
|
121
|
+
const intentDistribution = {};
|
|
122
|
+
for (const c of picked) {
|
|
123
|
+
const meta = getDiffMeta(cwd, c.sha);
|
|
124
|
+
const fp = buildFingerprint(c.subject, meta.files, meta.lines);
|
|
125
|
+
const scrubbedSubject = scrub(c.subject).text;
|
|
126
|
+
const scrubbedBody = scrub(c.body).text;
|
|
127
|
+
const scrubbedDiff = scrub(meta.diff).text;
|
|
128
|
+
commits.push({
|
|
129
|
+
sha: c.sha.slice(0, 7),
|
|
130
|
+
at: c.at,
|
|
131
|
+
subject: scrubbedSubject,
|
|
132
|
+
body: scrubbedBody,
|
|
133
|
+
acceptedDiff: scrubbedDiff,
|
|
134
|
+
files: meta.files.slice(0, 32),
|
|
135
|
+
fingerprint: fp,
|
|
136
|
+
});
|
|
137
|
+
intentDistribution[fp.intentClass] = (intentDistribution[fp.intentClass] ?? 0) + 1;
|
|
138
|
+
}
|
|
139
|
+
const stableId = sha(picked.map((c) => c.sha).join(",")).slice(0, 12);
|
|
140
|
+
const cap = {
|
|
141
|
+
id: `cap-${stableId}`,
|
|
142
|
+
spec: { name: "MNEME-REWIND-CAPSULE", version: "1.0" },
|
|
143
|
+
sealedAt: new Date().toISOString(),
|
|
144
|
+
range,
|
|
145
|
+
commitCount: commits.length,
|
|
146
|
+
intentDistribution,
|
|
147
|
+
commits,
|
|
148
|
+
hmac: "",
|
|
149
|
+
bodyDigest: "",
|
|
150
|
+
};
|
|
151
|
+
const body = { ...cap, hmac: undefined, bodyDigest: undefined };
|
|
152
|
+
cap.bodyDigest = sha(canon(body));
|
|
153
|
+
cap.hmac = createHmac("sha256", HMAC_KEY).update(cap.bodyDigest).digest("hex");
|
|
154
|
+
return cap;
|
|
155
|
+
}
|
|
156
|
+
export function verifyCapsule(cap) {
|
|
157
|
+
const { hmac, bodyDigest, ...body } = cap;
|
|
158
|
+
const recomputed = sha(canon({ ...body, hmac: undefined, bodyDigest: undefined }));
|
|
159
|
+
if (recomputed !== bodyDigest)
|
|
160
|
+
return { ok: false, reason: "bodyDigest mismatch" };
|
|
161
|
+
const expected = createHmac("sha256", HMAC_KEY).update(recomputed).digest("hex");
|
|
162
|
+
if (expected !== hmac)
|
|
163
|
+
return { ok: false, reason: "hmac mismatch" };
|
|
164
|
+
return { ok: true };
|
|
165
|
+
}
|
|
166
|
+
// ── Persistence ─────────────────────────────────────────────────────────
|
|
167
|
+
function dirOf(repoRoot, sub) {
|
|
168
|
+
const d = join(repoRoot, ".mneme", "rewind", sub);
|
|
169
|
+
if (!existsSync(d))
|
|
170
|
+
mkdirSync(d, { recursive: true });
|
|
171
|
+
return d;
|
|
172
|
+
}
|
|
173
|
+
export function storeCapsule(repoRoot, cap) {
|
|
174
|
+
const d = dirOf(repoRoot, "capsules");
|
|
175
|
+
const p = join(d, `${cap.id}.json`);
|
|
176
|
+
writeFileSync(p, JSON.stringify(cap, null, 2));
|
|
177
|
+
return p;
|
|
178
|
+
}
|
|
179
|
+
export function loadCapsule(repoRoot, capsuleId) {
|
|
180
|
+
const p = join(repoRoot, ".mneme", "rewind", "capsules", `${capsuleId}.json`);
|
|
181
|
+
if (!existsSync(p))
|
|
182
|
+
return null;
|
|
183
|
+
try {
|
|
184
|
+
return JSON.parse(readFileSync(p, "utf8"));
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export function listCapsules(repoRoot) {
|
|
191
|
+
const d = join(repoRoot, ".mneme", "rewind", "capsules");
|
|
192
|
+
if (!existsSync(d))
|
|
193
|
+
return [];
|
|
194
|
+
return readdirSync(d).filter((n) => n.endsWith(".json")).map((n) => n.replace(/\.json$/, ""));
|
|
195
|
+
}
|
|
196
|
+
export function storeCard(repoRoot, card) {
|
|
197
|
+
const d = dirOf(repoRoot, "cards");
|
|
198
|
+
const stamp = card.runAt.replace(/[:.]/g, "-");
|
|
199
|
+
const safeVendor = card.vendor.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
200
|
+
const safeVersion = card.vendorVersion.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
201
|
+
const p = join(d, `${String(card.seq).padStart(10, "0")}-${safeVendor}-${safeVersion}-${stamp}.json`);
|
|
202
|
+
writeFileSync(p, JSON.stringify(card, null, 2));
|
|
203
|
+
const ledger = join(dirOf(repoRoot, ""), "cards.jsonl");
|
|
204
|
+
const skim = {
|
|
205
|
+
seq: card.seq, runAt: card.runAt, capsuleId: card.capsuleId,
|
|
206
|
+
vendor: card.vendor, vendorVersion: card.vendorVersion,
|
|
207
|
+
correctness: card.meanCorrectness, confidence: card.meanConfidence,
|
|
208
|
+
delta: card.meanCalibrationDelta, regression: card.regression.status,
|
|
209
|
+
weight: card.suggestedAletheiaWeight, headline: card.headline,
|
|
210
|
+
hmac: card.hmac, bodyDigest: card.bodyDigest, file: p,
|
|
211
|
+
};
|
|
212
|
+
appendFileSync(ledger, JSON.stringify(skim) + "\n");
|
|
213
|
+
// Compose with HONEST MIRROR's CONCLAVE feedback loop: REWIND writes
|
|
214
|
+
// into the SAME honest_mirror_weights.json file with source="rewind"
|
|
215
|
+
// so CONCLAVE Aletheia weights pick up the regression signal without
|
|
216
|
+
// any new wiring.
|
|
217
|
+
try {
|
|
218
|
+
const feedbackDir = join(repoRoot, ".mneme", "aletheia");
|
|
219
|
+
if (!existsSync(feedbackDir))
|
|
220
|
+
mkdirSync(feedbackDir, { recursive: true });
|
|
221
|
+
const feedbackPath = join(feedbackDir, "honest_mirror_weights.json");
|
|
222
|
+
const merged = {};
|
|
223
|
+
if (existsSync(feedbackPath)) {
|
|
224
|
+
try {
|
|
225
|
+
Object.assign(merged, JSON.parse(readFileSync(feedbackPath, "utf8")));
|
|
226
|
+
}
|
|
227
|
+
catch { /* corrupt → start fresh */ }
|
|
228
|
+
}
|
|
229
|
+
merged[card.vendor] = {
|
|
230
|
+
trust: card.suggestedAletheiaWeight,
|
|
231
|
+
source: "rewind",
|
|
232
|
+
at: card.runAt,
|
|
233
|
+
};
|
|
234
|
+
writeFileSync(feedbackPath, JSON.stringify(merged, null, 2));
|
|
235
|
+
}
|
|
236
|
+
catch { /* best-effort */ }
|
|
237
|
+
return { path: p, ledger };
|
|
238
|
+
}
|
|
239
|
+
export function listCards(repoRoot, limit = 50) {
|
|
240
|
+
const p = join(repoRoot, ".mneme", "rewind", "cards.jsonl");
|
|
241
|
+
if (!existsSync(p))
|
|
242
|
+
return [];
|
|
243
|
+
const lines = readFileSync(p, "utf8").split("\n").filter(Boolean);
|
|
244
|
+
const out = [];
|
|
245
|
+
for (const l of lines.slice(-limit)) {
|
|
246
|
+
try {
|
|
247
|
+
out.push(JSON.parse(l));
|
|
248
|
+
}
|
|
249
|
+
catch { /* skip */ }
|
|
250
|
+
}
|
|
251
|
+
return out;
|
|
252
|
+
}
|
|
253
|
+
export function priorCardForVendor(repoRoot, vendor, excludeVersion) {
|
|
254
|
+
const all = listCards(repoRoot, 500);
|
|
255
|
+
for (let i = all.length - 1; i >= 0; i--) {
|
|
256
|
+
const e = all[i];
|
|
257
|
+
if (e.vendor === vendor && e.vendorVersion !== excludeVersion)
|
|
258
|
+
return e;
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
export function readCard(repoRoot, file) {
|
|
263
|
+
if (!existsSync(file))
|
|
264
|
+
return null;
|
|
265
|
+
try {
|
|
266
|
+
return JSON.parse(readFileSync(file, "utf8"));
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// ── Card verify (HMAC chain) ────────────────────────────────────────────
|
|
273
|
+
export function verifyCard(card, prev = CHAIN_SEED) {
|
|
274
|
+
const { hmac, seq: _s, bodyDigest, ...body } = card;
|
|
275
|
+
void _s;
|
|
276
|
+
const recomputed = sha(canon(body));
|
|
277
|
+
if (recomputed !== bodyDigest)
|
|
278
|
+
return { ok: false, reason: "bodyDigest mismatch" };
|
|
279
|
+
const expected = hmacOf(prev, recomputed);
|
|
280
|
+
if (expected !== hmac)
|
|
281
|
+
return { ok: false, reason: "hmac mismatch" };
|
|
282
|
+
return { ok: true };
|
|
283
|
+
}
|
|
284
|
+
// ── runRewind: the orchestrator ─────────────────────────────────────────
|
|
285
|
+
export async function runRewind(repoRoot, opts, replay, embed) {
|
|
286
|
+
const range = opts.range ?? "HEAD~100..HEAD";
|
|
287
|
+
const count = opts.count ?? 20;
|
|
288
|
+
const seed = opts.seed ?? Date.now();
|
|
289
|
+
let capsule = opts.reuseCapsuleId ? loadCapsule(repoRoot, opts.reuseCapsuleId) : null;
|
|
290
|
+
if (!capsule) {
|
|
291
|
+
capsule = sealCapsule(repoRoot, range, count, seed);
|
|
292
|
+
storeCapsule(repoRoot, capsule);
|
|
293
|
+
}
|
|
294
|
+
const cards = [];
|
|
295
|
+
for (const vendor of opts.vendors) {
|
|
296
|
+
const t0 = Date.now();
|
|
297
|
+
let vendorVersion = "unknown";
|
|
298
|
+
const perCommit = [];
|
|
299
|
+
for (const c of capsule.commits) {
|
|
300
|
+
const r = await replay({
|
|
301
|
+
vendor,
|
|
302
|
+
prompt: c.subject + (c.body ? "\n\n" + c.body : ""),
|
|
303
|
+
artifactTimestamp: c.at,
|
|
304
|
+
}).catch((e) => ({
|
|
305
|
+
vendor, vendorVersion: "error", answer: "",
|
|
306
|
+
confidence: 0, dtMs: 0, error: e.message,
|
|
307
|
+
}));
|
|
308
|
+
if (r.error)
|
|
309
|
+
continue;
|
|
310
|
+
if (r.vendorVersion && r.vendorVersion !== "unknown")
|
|
311
|
+
vendorVersion = r.vendorVersion;
|
|
312
|
+
const score = await correctnessScore(r.answer, c.acceptedDiff, embed);
|
|
313
|
+
perCommit.push({
|
|
314
|
+
intentClass: c.fingerprint.intentClass,
|
|
315
|
+
correctness: score,
|
|
316
|
+
confidence: r.confidence,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
// Aggregate per intent class
|
|
320
|
+
const byClass = new Map();
|
|
321
|
+
for (const e of perCommit) {
|
|
322
|
+
const cur = byClass.get(e.intentClass) ?? { sumC: 0, sumConf: 0, n: 0 };
|
|
323
|
+
cur.sumC += e.correctness;
|
|
324
|
+
cur.sumConf += e.confidence;
|
|
325
|
+
cur.n += 1;
|
|
326
|
+
byClass.set(e.intentClass, cur);
|
|
327
|
+
}
|
|
328
|
+
const perIntentClass = [];
|
|
329
|
+
for (const [k, v] of byClass.entries()) {
|
|
330
|
+
perIntentClass.push({
|
|
331
|
+
intentClass: k, n: v.n,
|
|
332
|
+
meanCorrectness: round3(v.sumC / v.n),
|
|
333
|
+
meanConfidence: round3(v.sumConf / v.n),
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
perIntentClass.sort((a, b) => b.n - a.n);
|
|
337
|
+
const meanCorrectness = perCommit.length === 0 ? 0
|
|
338
|
+
: perCommit.reduce((s, e) => s + e.correctness, 0) / perCommit.length;
|
|
339
|
+
const meanConfidence = perCommit.length === 0 ? 0
|
|
340
|
+
: perCommit.reduce((s, e) => s + e.confidence, 0) / perCommit.length;
|
|
341
|
+
const meanCalibrationDelta = meanConfidence - meanCorrectness;
|
|
342
|
+
// Regression detection: prior card for same vendor, different version
|
|
343
|
+
const prior = priorCardForVendor(repoRoot, vendor, vendorVersion);
|
|
344
|
+
let regression;
|
|
345
|
+
if (!prior) {
|
|
346
|
+
regression = { status: "new", deltaCorrectness: 0 };
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
const deltaC = meanCorrectness - prior.correctness;
|
|
350
|
+
let status;
|
|
351
|
+
if (Math.abs(deltaC) < 0.05)
|
|
352
|
+
status = "stable";
|
|
353
|
+
else if (deltaC > 0)
|
|
354
|
+
status = "improvement";
|
|
355
|
+
else
|
|
356
|
+
status = "regression";
|
|
357
|
+
// Worst + best intent class — compare per-class scores against
|
|
358
|
+
// prior card's per-class scores when we can read them.
|
|
359
|
+
let worst;
|
|
360
|
+
let best;
|
|
361
|
+
const priorCard = readCard(repoRoot, prior.file);
|
|
362
|
+
if (priorCard) {
|
|
363
|
+
const priorByClass = new Map(priorCard.perIntentClass.map((p) => [p.intentClass, p.meanCorrectness]));
|
|
364
|
+
for (const cur of perIntentClass) {
|
|
365
|
+
const p = priorByClass.get(cur.intentClass);
|
|
366
|
+
if (p === undefined)
|
|
367
|
+
continue;
|
|
368
|
+
const d = cur.meanCorrectness - p;
|
|
369
|
+
if (!worst || d < worst.deltaCorrectness)
|
|
370
|
+
worst = { intentClass: cur.intentClass, deltaCorrectness: round3(d) };
|
|
371
|
+
if (!best || d > best.deltaCorrectness)
|
|
372
|
+
best = { intentClass: cur.intentClass, deltaCorrectness: round3(d) };
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
regression = {
|
|
376
|
+
status,
|
|
377
|
+
deltaCorrectness: round3(deltaC),
|
|
378
|
+
worstIntentClass: worst,
|
|
379
|
+
bestIntentClass: best,
|
|
380
|
+
comparedToSeq: prior.seq,
|
|
381
|
+
comparedToVersion: prior.vendorVersion,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
const suggestedAletheiaWeight = computeWeight(meanCorrectness, meanCalibrationDelta);
|
|
385
|
+
let headline;
|
|
386
|
+
if (regression.status === "regression") {
|
|
387
|
+
headline = `🔴 REWIND — ${vendor}@${vendorVersion} regressed by ${(Math.abs(regression.deltaCorrectness) * 100).toFixed(0)}% vs ${regression.comparedToVersion ?? "prior"}`;
|
|
388
|
+
}
|
|
389
|
+
else if (regression.status === "improvement") {
|
|
390
|
+
headline = `🟢 REWIND — ${vendor}@${vendorVersion} improved ${(regression.deltaCorrectness * 100).toFixed(0)}% vs ${regression.comparedToVersion ?? "prior"}`;
|
|
391
|
+
}
|
|
392
|
+
else if (regression.status === "stable") {
|
|
393
|
+
headline = `🟡 REWIND — ${vendor}@${vendorVersion} stable (Δ${(regression.deltaCorrectness * 100).toFixed(0)}%) vs ${regression.comparedToVersion ?? "prior"}`;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
headline = `🆕 REWIND — first capsule run for ${vendor}@${vendorVersion} (correctness ${Math.round(meanCorrectness * 100)}%)`;
|
|
397
|
+
}
|
|
398
|
+
const runAt = new Date().toISOString();
|
|
399
|
+
const totalMs = Date.now() - t0;
|
|
400
|
+
const body = {
|
|
401
|
+
spec: { name: "MNEME-REWIND-CARD", version: "1.0" },
|
|
402
|
+
capsuleId: capsule.id,
|
|
403
|
+
vendor, vendorVersion, runAt, totalMs,
|
|
404
|
+
meanCorrectness: round3(meanCorrectness),
|
|
405
|
+
meanConfidence: round3(meanConfidence),
|
|
406
|
+
meanCalibrationDelta: round3(meanCalibrationDelta),
|
|
407
|
+
perIntentClass, regression,
|
|
408
|
+
headline,
|
|
409
|
+
suggestedAletheiaWeight,
|
|
410
|
+
};
|
|
411
|
+
const bodyDigest = sha(canon(body));
|
|
412
|
+
lastChainLink = hmacOf(lastChainLink, bodyDigest);
|
|
413
|
+
const card = {
|
|
414
|
+
...body,
|
|
415
|
+
hmac: lastChainLink,
|
|
416
|
+
seq: parseInt(lastChainLink.slice(0, 8), 16),
|
|
417
|
+
bodyDigest,
|
|
418
|
+
};
|
|
419
|
+
storeCard(repoRoot, card);
|
|
420
|
+
cards.push(card);
|
|
421
|
+
}
|
|
422
|
+
return { capsule, cards };
|
|
423
|
+
}
|
|
424
|
+
function round3(n) { return Number(n.toFixed(3)); }
|
|
425
|
+
function computeWeight(meanCorrectness, meanCalibrationDelta) {
|
|
426
|
+
const raw = 0.5 + 0.5 * meanCorrectness - 0.3 * Math.max(0, meanCalibrationDelta);
|
|
427
|
+
return Math.max(0.1, Math.min(0.95, Number(raw.toFixed(3))));
|
|
428
|
+
}
|
|
429
|
+
// ── Markdown card (the shareable artifact) ──────────────────────────────
|
|
430
|
+
export function renderMarkdownCard(card) {
|
|
431
|
+
const lines = [];
|
|
432
|
+
lines.push(`# 🪄 REWIND — Vendor Regression Card`);
|
|
433
|
+
lines.push(``);
|
|
434
|
+
lines.push(`**Vendor:** ${card.vendor}@${card.vendorVersion}`);
|
|
435
|
+
lines.push(`**Capsule:** ${card.capsuleId}`);
|
|
436
|
+
lines.push(`**Run at:** ${card.runAt}`);
|
|
437
|
+
lines.push(``);
|
|
438
|
+
lines.push(card.headline);
|
|
439
|
+
lines.push(``);
|
|
440
|
+
lines.push(`| metric | value |`);
|
|
441
|
+
lines.push(`|---|---|`);
|
|
442
|
+
lines.push(`| mean correctness | ${(card.meanCorrectness * 100).toFixed(1)}% |`);
|
|
443
|
+
lines.push(`| mean confidence | ${(card.meanConfidence * 100).toFixed(1)}% |`);
|
|
444
|
+
lines.push(`| calibration Δ | ${(card.meanCalibrationDelta * 100).toFixed(1)}% |`);
|
|
445
|
+
lines.push(`| regression | ${card.regression.status} (Δ${(card.regression.deltaCorrectness * 100).toFixed(1)}%) |`);
|
|
446
|
+
if (card.regression.comparedToVersion) {
|
|
447
|
+
lines.push(`| compared to | ${card.regression.comparedToVersion} (seq ${card.regression.comparedToSeq}) |`);
|
|
448
|
+
}
|
|
449
|
+
lines.push(`| suggested Aletheia weight | ${card.suggestedAletheiaWeight} |`);
|
|
450
|
+
lines.push(``);
|
|
451
|
+
if (card.perIntentClass.length > 0) {
|
|
452
|
+
lines.push(`## per-intent-class`);
|
|
453
|
+
lines.push(``);
|
|
454
|
+
lines.push(`| intentClass | n | correctness | confidence |`);
|
|
455
|
+
lines.push(`|---|---|---|---|`);
|
|
456
|
+
for (const c of card.perIntentClass.slice(0, 20)) {
|
|
457
|
+
lines.push(`| ${c.intentClass} | ${c.n} | ${(c.meanCorrectness * 100).toFixed(0)}% | ${(c.meanConfidence * 100).toFixed(0)}% |`);
|
|
458
|
+
}
|
|
459
|
+
lines.push(``);
|
|
460
|
+
}
|
|
461
|
+
if (card.regression.worstIntentClass) {
|
|
462
|
+
lines.push(`**Worst-hit intent class:** ${card.regression.worstIntentClass.intentClass} (Δ${(card.regression.worstIntentClass.deltaCorrectness * 100).toFixed(1)}%)`);
|
|
463
|
+
}
|
|
464
|
+
if (card.regression.bestIntentClass) {
|
|
465
|
+
lines.push(`**Best-improved intent class:** ${card.regression.bestIntentClass.intentClass} (Δ${(card.regression.bestIntentClass.deltaCorrectness * 100).toFixed(1)}%)`);
|
|
466
|
+
}
|
|
467
|
+
lines.push(``);
|
|
468
|
+
lines.push(`---`);
|
|
469
|
+
lines.push(`HMAC: \`${card.hmac.slice(0, 16)}…\` · seq ${card.seq} · spec ${card.spec.name}/${card.spec.version}`);
|
|
470
|
+
lines.push(`Verify offline: \`mneme rewind verify --file <path>\``);
|
|
471
|
+
return lines.join("\n");
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/rewind/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.31.0 — REWIND public surface.
|
|
3
|
+
*
|
|
4
|
+
* Time-Capsule Regression Replay: pin a set of past git commits as a
|
|
5
|
+
* Capsule, fire the SAME capsule at every vendor release, emit a
|
|
6
|
+
* Vendor Regression Card. Composes with HONEST MIRROR (per-vendor
|
|
7
|
+
* weight feedback) + CONCLAVE (Aletheia trust input).
|
|
8
|
+
*/
|
|
9
|
+
export type { IntentFingerprint, CapsuleCommit, Capsule, VendorCallResult, RewindReplayFn, IntentClassScore, RegressionVerdict, VendorRegressionCard, RewindOptions, } from "./types.js";
|
|
10
|
+
export { buildFingerprint, classifyCategory, classifySurface, classifySize, correctnessScore, } from "./intent_class.js";
|
|
11
|
+
export { sealCapsule, verifyCapsule, storeCapsule, loadCapsule, listCapsules, runRewind, storeCard, listCards, priorCardForVendor, readCard, verifyCard, renderMarkdownCard, gitAvailable, __resetRewindChainForTest, } from "./engine.js";
|
|
12
|
+
export type { CardLedgerEntry } from "./engine.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rewind/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAC3D,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EACnD,oBAAoB,EAAE,aAAa,GACpC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EACjE,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EACnE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAC7D,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,yBAAyB,GACxE,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.31.0 — REWIND public surface.
|
|
3
|
+
*
|
|
4
|
+
* Time-Capsule Regression Replay: pin a set of past git commits as a
|
|
5
|
+
* Capsule, fire the SAME capsule at every vendor release, emit a
|
|
6
|
+
* Vendor Regression Card. Composes with HONEST MIRROR (per-vendor
|
|
7
|
+
* weight feedback) + CONCLAVE (Aletheia trust input).
|
|
8
|
+
*/
|
|
9
|
+
export { buildFingerprint, classifyCategory, classifySurface, classifySize, correctnessScore, } from "./intent_class.js";
|
|
10
|
+
export { sealCapsule, verifyCapsule, storeCapsule, loadCapsule, listCapsules, runRewind, storeCard, listCards, priorCardForVendor, readCard, verifyCard, renderMarkdownCard, gitAvailable, __resetRewindChainForTest, } from "./engine.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rewind/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EACL,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EACjE,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EACnE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAC7D,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,yBAAyB,GACxE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.31.0 — REWIND intent-class fingerprint.
|
|
3
|
+
*
|
|
4
|
+
* The wild fusion idea: cluster past commits by (category × surface ×
|
|
5
|
+
* sizeBucket × topic-simhash). Vendor regression isn't binary "got
|
|
6
|
+
* worse overall" — it's per-intent-class. A new vendor release may
|
|
7
|
+
* crush feat-on-core-Medium tasks while regressing on fix-on-tests-
|
|
8
|
+
* Large. The card surfaces both per-class so the user gets actionable
|
|
9
|
+
* forensics, not just a single dropped number.
|
|
10
|
+
*
|
|
11
|
+
* Intent class is deterministic — same commits → same class. That's
|
|
12
|
+
* the "time-capsule" property: pin once, fire at every vendor release,
|
|
13
|
+
* compare apples-to-apples.
|
|
14
|
+
*/
|
|
15
|
+
import type { IntentFingerprint } from "./types.js";
|
|
16
|
+
export declare function classifyCategory(subject: string): string;
|
|
17
|
+
export declare function classifySurface(files: string[]): string;
|
|
18
|
+
export declare function classifySize(diffLines: number): "S" | "M" | "L" | "XL";
|
|
19
|
+
/**
|
|
20
|
+
* Build an intent fingerprint. Same (category, surface, sizeBucket,
|
|
21
|
+
* topic-simhash) → same intentClass key.
|
|
22
|
+
*
|
|
23
|
+
* topic-simhash uses subject + top file path (lower-cased) so commits
|
|
24
|
+
* that touch the SAME area for the SAME reason cluster together even
|
|
25
|
+
* if the message wording varies.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildFingerprint(subject: string, files: string[], diffLines: number): IntentFingerprint;
|
|
28
|
+
/**
|
|
29
|
+
* Score a vendor reply against an accepted diff using a deterministic
|
|
30
|
+
* token-Jaccard fallback (3-char tokens) — same scoring as HONEST
|
|
31
|
+
* MIRROR for cross-primitive consistency. The caller may supply an
|
|
32
|
+
* embedder for higher-fidelity cosine similarity; absence is fine.
|
|
33
|
+
*/
|
|
34
|
+
export declare function correctnessScore(reply: string, acceptedDiff: string, embed?: (texts: string[]) => Promise<Float32Array[]>): Promise<number>;
|
|
35
|
+
//# sourceMappingURL=intent_class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent_class.d.ts","sourceRoot":"","sources":["../../src/rewind/intent_class.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAiBpD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAevD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAKtE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAYvG;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,GACnD,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|