@mneme-ai/core 2.29.1 → 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.
Files changed (94) hide show
  1. package/dist/agent_manifest.d.ts +1 -1
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +23 -0
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/conclave/aletheia_weights.d.ts.map +1 -1
  6. package/dist/conclave/aletheia_weights.js +16 -4
  7. package/dist/conclave/aletheia_weights.js.map +1 -1
  8. package/dist/diaspora/http_bridge.d.ts.map +1 -1
  9. package/dist/hgp/hgp.test.d.ts +2 -0
  10. package/dist/hgp/hgp.test.d.ts.map +1 -0
  11. package/dist/hgp/hgp.test.js +198 -0
  12. package/dist/hgp/hgp.test.js.map +1 -0
  13. package/dist/hgp/hgp_id.d.ts +18 -0
  14. package/dist/hgp/hgp_id.d.ts.map +1 -0
  15. package/dist/hgp/hgp_id.js +41 -0
  16. package/dist/hgp/hgp_id.js.map +1 -0
  17. package/dist/hgp/index.d.ts +12 -0
  18. package/dist/hgp/index.d.ts.map +1 -0
  19. package/dist/hgp/index.js +10 -0
  20. package/dist/hgp/index.js.map +1 -0
  21. package/dist/hgp/registry.d.ts +64 -0
  22. package/dist/hgp/registry.d.ts.map +1 -0
  23. package/dist/hgp/registry.js +221 -0
  24. package/dist/hgp/registry.js.map +1 -0
  25. package/dist/hgp/severity.d.ts +19 -0
  26. package/dist/hgp/severity.d.ts.map +1 -0
  27. package/dist/hgp/severity.js +46 -0
  28. package/dist/hgp/severity.js.map +1 -0
  29. package/dist/hgp/types.d.ts +60 -0
  30. package/dist/hgp/types.d.ts.map +1 -0
  31. package/dist/hgp/types.js +11 -0
  32. package/dist/hgp/types.js.map +1 -0
  33. package/dist/honest_mirror/anonymizer.d.ts +29 -0
  34. package/dist/honest_mirror/anonymizer.d.ts.map +1 -0
  35. package/dist/honest_mirror/anonymizer.js +77 -0
  36. package/dist/honest_mirror/anonymizer.js.map +1 -0
  37. package/dist/honest_mirror/calibration.d.ts +37 -0
  38. package/dist/honest_mirror/calibration.d.ts.map +1 -0
  39. package/dist/honest_mirror/calibration.js +106 -0
  40. package/dist/honest_mirror/calibration.js.map +1 -0
  41. package/dist/honest_mirror/engine.d.ts +66 -0
  42. package/dist/honest_mirror/engine.d.ts.map +1 -0
  43. package/dist/honest_mirror/engine.js +227 -0
  44. package/dist/honest_mirror/engine.js.map +1 -0
  45. package/dist/honest_mirror/honest_mirror.test.d.ts +2 -0
  46. package/dist/honest_mirror/honest_mirror.test.d.ts.map +1 -0
  47. package/dist/honest_mirror/honest_mirror.test.js +109 -0
  48. package/dist/honest_mirror/honest_mirror.test.js.map +1 -0
  49. package/dist/honest_mirror/index.d.ts +11 -0
  50. package/dist/honest_mirror/index.d.ts.map +1 -0
  51. package/dist/honest_mirror/index.js +9 -0
  52. package/dist/honest_mirror/index.js.map +1 -0
  53. package/dist/honest_mirror/sources/git_commit_source.d.ts +30 -0
  54. package/dist/honest_mirror/sources/git_commit_source.d.ts.map +1 -0
  55. package/dist/honest_mirror/sources/git_commit_source.js +106 -0
  56. package/dist/honest_mirror/sources/git_commit_source.js.map +1 -0
  57. package/dist/honest_mirror/types.d.ts +126 -0
  58. package/dist/honest_mirror/types.d.ts.map +1 -0
  59. package/dist/honest_mirror/types.js +31 -0
  60. package/dist/honest_mirror/types.js.map +1 -0
  61. package/dist/index.d.ts +3 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +22 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/rewind/engine.d.ts +65 -0
  66. package/dist/rewind/engine.d.ts.map +1 -0
  67. package/dist/rewind/engine.js +473 -0
  68. package/dist/rewind/engine.js.map +1 -0
  69. package/dist/rewind/index.d.ts +13 -0
  70. package/dist/rewind/index.d.ts.map +1 -0
  71. package/dist/rewind/index.js +11 -0
  72. package/dist/rewind/index.js.map +1 -0
  73. package/dist/rewind/intent_class.d.ts +35 -0
  74. package/dist/rewind/intent_class.d.ts.map +1 -0
  75. package/dist/rewind/intent_class.js +141 -0
  76. package/dist/rewind/intent_class.js.map +1 -0
  77. package/dist/rewind/rewind.test.d.ts +2 -0
  78. package/dist/rewind/rewind.test.d.ts.map +1 -0
  79. package/dist/rewind/rewind.test.js +176 -0
  80. package/dist/rewind/rewind.test.js.map +1 -0
  81. package/dist/rewind/types.d.ts +140 -0
  82. package/dist/rewind/types.d.ts.map +1 -0
  83. package/dist/rewind/types.js +11 -0
  84. package/dist/rewind/types.js.map +1 -0
  85. package/dist/squadron/acgv_vaccine.d.ts.map +1 -1
  86. package/dist/squadron/acgv_vaccine.js +15 -0
  87. package/dist/squadron/acgv_vaccine.js.map +1 -1
  88. package/dist/truth_gate/claims.d.ts.map +1 -1
  89. package/dist/truth_gate/claims.js +37 -0
  90. package/dist/truth_gate/claims.js.map +1 -1
  91. package/dist/truth_gate/probes.d.ts.map +1 -1
  92. package/dist/truth_gate/probes.js +107 -1
  93. package/dist/truth_gate/probes.js.map +1 -1
  94. 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"}