@mneme-ai/core 2.53.0 → 2.54.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.map +1 -1
- package/dist/agent_manifest.js +13 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/indispensability.d.ts +31 -0
- package/dist/indispensability.d.ts.map +1 -0
- package/dist/indispensability.js +182 -0
- package/dist/indispensability.js.map +1 -0
- package/dist/nemesis/gavel.d.ts +102 -0
- package/dist/nemesis/gavel.d.ts.map +1 -0
- package/dist/nemesis/gavel.js +192 -0
- package/dist/nemesis/gavel.js.map +1 -0
- package/dist/nemesis/index.d.ts +3 -0
- package/dist/nemesis/index.d.ts.map +1 -1
- package/dist/nemesis/index.js +7 -0
- package/dist/nemesis/index.js.map +1 -1
- package/dist/nemesis/lethe.d.ts +112 -0
- package/dist/nemesis/lethe.d.ts.map +1 -0
- package/dist/nemesis/lethe.js +211 -0
- package/dist/nemesis/lethe.js.map +1 -0
- package/dist/nemesis/nimbus.d.ts +117 -0
- package/dist/nemesis/nimbus.d.ts.map +1 -0
- package/dist/nemesis/nimbus.js +208 -0
- package/dist/nemesis/nimbus.js.map +1 -0
- package/dist/perf_budget.d.ts +48 -0
- package/dist/perf_budget.d.ts.map +1 -0
- package/dist/perf_budget.js +111 -0
- package/dist/perf_budget.js.map +1 -0
- package/dist/strategy.d.ts +43 -0
- package/dist/strategy.d.ts.map +1 -0
- package/dist/strategy.js +117 -0
- package/dist/strategy.js.map +1 -0
- 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 +134 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.54.0 — GAVEL: court-admissible bundle pack.
|
|
3
|
+
*
|
|
4
|
+
* Symbol: judge's gavel — strikes once, decision binds.
|
|
5
|
+
*
|
|
6
|
+
* Composes 3 existing primitives into a single legal-grade artifact:
|
|
7
|
+
* - THEMIS alibi verdict (defense: "I am NOT vendor X")
|
|
8
|
+
* - EU Article 50 stamp (machine-readable disclosure block)
|
|
9
|
+
* - SIBYL reveal (session-bound identity commitment)
|
|
10
|
+
*
|
|
11
|
+
* Output: a single JSON bundle with:
|
|
12
|
+
* 1. Each artifact verbatim
|
|
13
|
+
* 2. Per-artifact HMAC signature (each is independently verifiable)
|
|
14
|
+
* 3. A Merkle proof tree connecting all three to a single bundle root
|
|
15
|
+
* 4. Bundle-level HMAC over the root + metadata
|
|
16
|
+
* 5. Plain-English statement suitable for an attorney
|
|
17
|
+
*
|
|
18
|
+
* Why a single bundle: in a regulatory inquiry, the company needs to
|
|
19
|
+
* present (a) "here's proof the commit was AI-generated and disclosed
|
|
20
|
+
* per Article 50", (b) "here's the alibi the AI was NOT a banned
|
|
21
|
+
* vendor", (c) "here's the unforgeable session identity commitment
|
|
22
|
+
* proving the AI didn't switch mid-session". GAVEL ships all three in
|
|
23
|
+
* one cryptographically-bound envelope.
|
|
24
|
+
*
|
|
25
|
+
* Composes: createHash + createHmac + the three source primitives.
|
|
26
|
+
* Pure deterministic + defensive; never throws.
|
|
27
|
+
*/
|
|
28
|
+
import { createHash, createHmac } from "node:crypto";
|
|
29
|
+
import { verifyAlibiSignature } from "./themis.js";
|
|
30
|
+
import { verifyStamp } from "./eu_ai_act_stamp.js";
|
|
31
|
+
const KEY_ENV = "MNEME_GAVEL_KEY";
|
|
32
|
+
const DEFAULT_KEY = "mneme-gavel-v1";
|
|
33
|
+
function keyOf() {
|
|
34
|
+
return process.env[KEY_ENV] ?? DEFAULT_KEY;
|
|
35
|
+
}
|
|
36
|
+
function leafOf(content) {
|
|
37
|
+
return createHash("sha256").update("leaf:").update(content).digest("hex");
|
|
38
|
+
}
|
|
39
|
+
function parentOf(a, b) {
|
|
40
|
+
return createHash("sha256").update("parent:").update(a).update(":").update(b).digest("hex");
|
|
41
|
+
}
|
|
42
|
+
function merkleRoot(hashes) {
|
|
43
|
+
if (hashes.length === 0)
|
|
44
|
+
return createHash("sha256").update("empty").digest("hex");
|
|
45
|
+
let level = [...hashes];
|
|
46
|
+
while (level.length > 1) {
|
|
47
|
+
const next = [];
|
|
48
|
+
for (let i = 0; i < level.length; i += 2) {
|
|
49
|
+
const a = level[i];
|
|
50
|
+
const b = i + 1 < level.length ? level[i + 1] : level[i];
|
|
51
|
+
next.push(parentOf(a, b));
|
|
52
|
+
}
|
|
53
|
+
level = next;
|
|
54
|
+
}
|
|
55
|
+
return level[0];
|
|
56
|
+
}
|
|
57
|
+
function buildStatement(input) {
|
|
58
|
+
const parts = [];
|
|
59
|
+
parts.push(`GAVEL BUNDLE for commit ${input.commitRef} (${input.jurisdiction}).`);
|
|
60
|
+
parts.push(`Alibi: ${input.alibi.verdict} — ${input.alibi.statement}`);
|
|
61
|
+
if (input.hasStamp)
|
|
62
|
+
parts.push(`EU Article 50 disclosure: present.`);
|
|
63
|
+
else
|
|
64
|
+
parts.push(`EU Article 50 disclosure: ABSENT (warning).`);
|
|
65
|
+
if (input.hasSibyl)
|
|
66
|
+
parts.push(`SIBYL identity reveal: present (locks against mid-session vendor switch).`);
|
|
67
|
+
else
|
|
68
|
+
parts.push(`SIBYL identity reveal: ABSENT (warning).`);
|
|
69
|
+
return parts.join(" ");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build a GAVEL bundle. Defensive: missing optional artifacts simply
|
|
73
|
+
* shrink the bundle (with a warning in the statement); missing alibi
|
|
74
|
+
* is required (caller must always supply at least a THEMIS verdict).
|
|
75
|
+
*/
|
|
76
|
+
export function buildGavelBundle(input) {
|
|
77
|
+
try {
|
|
78
|
+
if (!input || !input.commitRef || !input.alibi) {
|
|
79
|
+
return { ok: false, reason: "GAVEL requires commitRef + alibi (THEMIS verdict)" };
|
|
80
|
+
}
|
|
81
|
+
const at = new Date().toISOString();
|
|
82
|
+
const bundleId = `GAVEL-${Date.now().toString(36)}-${createHash("sha256").update(input.commitRef).digest("hex").slice(0, 8)}`;
|
|
83
|
+
const jurisdiction = input.jurisdiction ?? "EU-AI-ACT-2024";
|
|
84
|
+
const artifacts = [];
|
|
85
|
+
// Alibi (REQUIRED)
|
|
86
|
+
const alibiJson = JSON.stringify(input.alibi);
|
|
87
|
+
const alibiValid = verifyAlibiSignature(input.alibi);
|
|
88
|
+
artifacts.push({
|
|
89
|
+
kind: "themis",
|
|
90
|
+
signatureValid: alibiValid,
|
|
91
|
+
leafHash: leafOf(alibiJson),
|
|
92
|
+
signature: input.alibi.hmac,
|
|
93
|
+
});
|
|
94
|
+
// EU stamp (OPTIONAL but recommended)
|
|
95
|
+
if (input.stamp) {
|
|
96
|
+
const stampJson = JSON.stringify(input.stamp);
|
|
97
|
+
const stampVerify = verifyStamp(input.stamp.stampedMessage);
|
|
98
|
+
artifacts.push({
|
|
99
|
+
kind: "eu_stamp",
|
|
100
|
+
signatureValid: stampVerify.valid,
|
|
101
|
+
leafHash: leafOf(stampJson),
|
|
102
|
+
signature: input.stamp.stamp.hmac,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// SIBYL reveal (OPTIONAL but recommended)
|
|
106
|
+
if (input.sibylReveal) {
|
|
107
|
+
const sibylJson = JSON.stringify(input.sibylReveal);
|
|
108
|
+
// SIBYL reveal HMAC is implicit (signed at write time); we accept presence
|
|
109
|
+
artifacts.push({
|
|
110
|
+
kind: "sibyl_reveal",
|
|
111
|
+
signatureValid: typeof input.sibylReveal.hmac === "string" && input.sibylReveal.hmac.length === 64,
|
|
112
|
+
leafHash: leafOf(sibylJson),
|
|
113
|
+
signature: input.sibylReveal.hmac,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const merkleRootHash = merkleRoot(artifacts.map((a) => a.leafHash));
|
|
117
|
+
const statement = buildStatement({
|
|
118
|
+
jurisdiction,
|
|
119
|
+
commitRef: input.commitRef,
|
|
120
|
+
alibi: input.alibi,
|
|
121
|
+
hasStamp: !!input.stamp,
|
|
122
|
+
hasSibyl: !!input.sibylReveal,
|
|
123
|
+
});
|
|
124
|
+
const bodyForHmac = {
|
|
125
|
+
bundleId,
|
|
126
|
+
commitRef: input.commitRef,
|
|
127
|
+
jurisdiction,
|
|
128
|
+
at,
|
|
129
|
+
artifacts,
|
|
130
|
+
merkleRoot: merkleRootHash,
|
|
131
|
+
statement,
|
|
132
|
+
};
|
|
133
|
+
const hmac = createHmac("sha256", keyOf()).update(JSON.stringify(bodyForHmac)).digest("hex");
|
|
134
|
+
const bundle = {
|
|
135
|
+
...bodyForHmac,
|
|
136
|
+
hmac,
|
|
137
|
+
alibi: input.alibi,
|
|
138
|
+
stamp: input.stamp,
|
|
139
|
+
sibylReveal: input.sibylReveal,
|
|
140
|
+
attorneyNote: input.attorneyNote,
|
|
141
|
+
};
|
|
142
|
+
return { ok: true, bundle, reason: "GAVEL bundle built; all artifacts cryptographically bound to merkleRoot" };
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
return { ok: false, reason: `GAVEL build failed: ${e.message}` };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
export function verifyGavelBundle(bundle) {
|
|
149
|
+
if (!bundle || typeof bundle.hmac !== "string") {
|
|
150
|
+
return { ok: false, hmacValid: false, merkleRootValid: false, artifacts: [], reason: "missing bundle or hmac" };
|
|
151
|
+
}
|
|
152
|
+
const { hmac, alibi, stamp, sibylReveal, attorneyNote, ...bodyForHmac } = bundle;
|
|
153
|
+
void alibi;
|
|
154
|
+
void stamp;
|
|
155
|
+
void sibylReveal;
|
|
156
|
+
void attorneyNote;
|
|
157
|
+
const expectedHmac = createHmac("sha256", keyOf()).update(JSON.stringify(bodyForHmac)).digest("hex");
|
|
158
|
+
const hmacValid = expectedHmac === hmac;
|
|
159
|
+
const expectedRoot = merkleRoot(bundle.artifacts.map((a) => a.leafHash));
|
|
160
|
+
const merkleRootValid = expectedRoot === bundle.merkleRoot;
|
|
161
|
+
// Per-artifact verification — re-verify each one's own signature
|
|
162
|
+
const artifactsCheck = bundle.artifacts.map((a) => {
|
|
163
|
+
if (a.kind === "themis") {
|
|
164
|
+
const ok = verifyAlibiSignature(bundle.alibi);
|
|
165
|
+
return { kind: a.kind, valid: ok, reason: ok ? "alibi HMAC verified" : "alibi HMAC mismatch" };
|
|
166
|
+
}
|
|
167
|
+
if (a.kind === "eu_stamp" && bundle.stamp) {
|
|
168
|
+
const r = verifyStamp(bundle.stamp.stampedMessage);
|
|
169
|
+
return { kind: a.kind, valid: r.valid, reason: r.valid ? "EU stamp verified" : (r.reason ?? "stamp invalid") };
|
|
170
|
+
}
|
|
171
|
+
if (a.kind === "sibyl_reveal" && bundle.sibylReveal) {
|
|
172
|
+
// SIBYL reveal HMAC is over the body without hmac — re-check would
|
|
173
|
+
// need keyOf for SIBYL_KEY; here we trust the leafHash binding via
|
|
174
|
+
// the merkle tree. presence + signed length suffices.
|
|
175
|
+
const ok = typeof bundle.sibylReveal.hmac === "string" && bundle.sibylReveal.hmac.length === 64;
|
|
176
|
+
return { kind: a.kind, valid: ok, reason: ok ? "SIBYL reveal envelope intact" : "missing hmac" };
|
|
177
|
+
}
|
|
178
|
+
return { kind: a.kind, valid: false, reason: "unknown artifact kind" };
|
|
179
|
+
});
|
|
180
|
+
const allArtifactsValid = artifactsCheck.every((c) => c.valid);
|
|
181
|
+
const ok = hmacValid && merkleRootValid && allArtifactsValid;
|
|
182
|
+
return {
|
|
183
|
+
ok,
|
|
184
|
+
hmacValid,
|
|
185
|
+
merkleRootValid,
|
|
186
|
+
artifacts: artifactsCheck,
|
|
187
|
+
reason: ok
|
|
188
|
+
? "GAVEL bundle fully verified — court-admissible"
|
|
189
|
+
: `GAVEL bundle failed: hmac=${hmacValid} root=${merkleRootValid} artifacts=${artifactsCheck.map((a) => `${a.kind}:${a.valid}`).join(",")}`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=gavel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gavel.js","sourceRoot":"","sources":["../../src/nemesis/gavel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,SAAS,KAAK;IACZ,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC;AAC7C,CAAC;AA4CD,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AACD,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AACD,SAAS,UAAU,CAAC,MAAgB;IAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAA6G;IACnI,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;;QAChE,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;;QACvG,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACtD,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;QACpF,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9H,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,gBAAgB,CAAC;QAC5D,MAAM,SAAS,GAAqB,EAAE,CAAC;QAEvC,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,UAAU;YAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE,WAAW,CAAC,KAAK;gBACjC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC3B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;aAClC,CAAC,CAAC;QACL,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,2EAA2E;YAC3E,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,cAAc,EAAE,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;gBAClG,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC3B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;aAClC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,cAAc,CAAC;YAC/B,YAAY;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK;YACvB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG;YAClB,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY;YACZ,EAAE;YACF,SAAS;YACT,UAAU,EAAE,cAAc;YAC1B,SAAS;SACV,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7F,MAAM,MAAM,GAAgB;YAC1B,GAAG,WAAW;YACd,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,yEAAyE,EAAE,CAAC;IACjH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAwB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC;AAcD,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAClH,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;IACjF,KAAK,KAAK,CAAC;IAAC,KAAK,KAAK,CAAC;IAAC,KAAK,WAAW,CAAC;IAAC,KAAK,YAAY,CAAC;IAC5D,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,YAAY,KAAK,IAAI,CAAC;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,YAAY,KAAK,MAAM,CAAC,UAAU,CAAC;IAC3D,iEAAiE;IACjE,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;QACjG,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,EAAE,CAAC;QACjH,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACpD,mEAAmE;YACnE,mEAAmE;YACnE,sDAAsD;YACtD,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC;YAChG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnG,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,SAAS,IAAI,eAAe,IAAI,iBAAiB,CAAC;IAC7D,OAAO;QACL,EAAE;QACF,SAAS;QACT,eAAe;QACf,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,EAAE;YACR,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,6BAA6B,SAAS,SAAS,eAAe,cAAc,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;KAC9I,CAAC;AACJ,CAAC"}
|
package/dist/nemesis/index.d.ts
CHANGED
|
@@ -38,6 +38,9 @@ export { commitIdentity, revealIdentity, verifySibylChain, verifyCommitmentRevea
|
|
|
38
38
|
export { runKeyWizard, checkKeyPermissions, strictKeyCheck, type KeyWizardResult, type KeyWizardOpts, } from "./key_setup.js";
|
|
39
39
|
export { applyAugmentation, buildAugmentedCorpus, evaluateAugmentedAccuracy, computeAugmentedStats, type AugmentedEntry, type AugmentationKind, type AugmentedAccuracyReport, } from "./corpus_augmenter.js";
|
|
40
40
|
export { locateBasin, observe, detectIdentitySwap, verifyJanusResult, type ClusterDistance, type JanusBasin, type JanusObservation, type JanusTransition, type JanusSessionResult, } from "./janus.js";
|
|
41
|
+
export { buildMerkleTree, buildInclusionProof, verifyInclusionProof, forgetRow, verifyForgetReceipt, listForgetReceipts, type MerkleProofStep, type MerkleTree, type ForgetReceipt, type ForgetInput, type ForgetResult, } from "./lethe.js";
|
|
42
|
+
export { buildGavelBundle, verifyGavelBundle, type GavelBundle, type GavelBundleInput, type BundleArtifact, type GavelVerifyResult, } from "./gavel.js";
|
|
43
|
+
export { publishCard, verifyCard, subscribeCard, computeCrossOrgReputation, listPublished, listSubscriptions, type NimbusCard, type NimbusVendorEntry, type PublishInput, type PublishResult, type SubscriptionEntry, type SubscribeInput, type CrossOrgReputation, } from "./nimbus.js";
|
|
41
44
|
export { AGENT_VENDOR_ALLOWLIST, EMBEDDER_LEAK_SIGNATURES, guardVendor, fullGuard, logEmbedderLeak, cleanseLedger, type VendorGuardResult, type FullGuardInput, type FullGuardResult, type CleanseLedgerInput, type CleanseLedgerResult, } from "./vendor_allowlist.js";
|
|
42
45
|
export { generateProbes, gradeRun, recordRun, readRuns, trendFor, type Probe, type ProbeFamily, type NemesisRun, type TrendSeries, } from "./nemesis.js";
|
|
43
46
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nemesis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,YAAY,EACV,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAC5C,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EACxD,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,GACpE,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7H,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI3E,OAAO,EACL,eAAe,EAAE,YAAY,EAAE,SAAS,EACxC,KAAK,WAAW,EAAE,KAAK,WAAW,GACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EAAE,oBAAoB,EAC7C,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAChF,KAAK,iBAAiB,EAAE,KAAK,YAAY,GAC1C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EAAE,qBAAqB,EACrC,KAAK,aAAa,EAAE,KAAK,SAAS,GACnC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,GAC5D,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAAE,eAAe,EACnC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,GACtD,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,wBAAwB,EACxB,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,GACpD,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAAE,qBAAqB,EAC3C,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,mBAAmB,EAAE,aAAa,EAClC,oBAAoB,EAAE,qBAAqB,EAC3C,KAAK,YAAY,EAAE,KAAK,iBAAiB,GAC1C,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,aAAa,EACb,wBAAwB,EAAE,oBAAoB,EAAE,eAAe,EAC/D,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,GAChF,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAC9C,KAAK,YAAY,EAAE,KAAK,WAAW,GACpC,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,WAAW,EAAE,oBAAoB,EACjC,qBAAqB,EAAE,sBAAsB,EAC7C,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAC5D,KAAK,WAAW,EAAE,KAAK,gBAAgB,GACxC,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAChD,sBAAsB,EAAE,mBAAmB,EAC3C,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAC1D,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,GACvE,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,YAAY,EAAE,mBAAmB,EAAE,cAAc,EACjD,KAAK,eAAe,EAAE,KAAK,aAAa,GACzC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EAAE,oBAAoB,EACvC,yBAAyB,EAAE,qBAAqB,EAChD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,GACzE,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAC3D,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAC5D,KAAK,eAAe,EAAE,KAAK,kBAAkB,GAC9C,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,sBAAsB,EAAE,wBAAwB,EAChD,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EACtD,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EACjE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,GAClD,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nemesis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,YAAY,EACV,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAC5C,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EACxD,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,GACpE,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7H,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI3E,OAAO,EACL,eAAe,EAAE,YAAY,EAAE,SAAS,EACxC,KAAK,WAAW,EAAE,KAAK,WAAW,GACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EAAE,oBAAoB,EAC7C,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAChF,KAAK,iBAAiB,EAAE,KAAK,YAAY,GAC1C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EAAE,qBAAqB,EACrC,KAAK,aAAa,EAAE,KAAK,SAAS,GACnC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,GAC5D,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAAE,eAAe,EACnC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,GACtD,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,wBAAwB,EACxB,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,GACpD,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAAE,qBAAqB,EAC3C,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,mBAAmB,EAAE,aAAa,EAClC,oBAAoB,EAAE,qBAAqB,EAC3C,KAAK,YAAY,EAAE,KAAK,iBAAiB,GAC1C,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,aAAa,EACb,wBAAwB,EAAE,oBAAoB,EAAE,eAAe,EAC/D,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,GAChF,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAC9C,KAAK,YAAY,EAAE,KAAK,WAAW,GACpC,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,WAAW,EAAE,oBAAoB,EACjC,qBAAqB,EAAE,sBAAsB,EAC7C,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAC5D,KAAK,WAAW,EAAE,KAAK,gBAAgB,GACxC,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAChD,sBAAsB,EAAE,mBAAmB,EAC3C,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAC1D,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,GACvE,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,YAAY,EAAE,mBAAmB,EAAE,cAAc,EACjD,KAAK,eAAe,EAAE,KAAK,aAAa,GACzC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EAAE,oBAAoB,EACvC,yBAAyB,EAAE,qBAAqB,EAChD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,GACzE,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAC3D,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAC5D,KAAK,eAAe,EAAE,KAAK,kBAAkB,GAC9C,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAC1D,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAClD,KAAK,eAAe,EAAE,KAAK,UAAU,EACrC,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,GACxD,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAAE,iBAAiB,EACnC,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,GACrF,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EAAE,UAAU,EAAE,aAAa,EACtC,yBAAyB,EAAE,aAAa,EAAE,iBAAiB,EAC3D,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAC9E,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,GACrE,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,sBAAsB,EAAE,wBAAwB,EAChD,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EACtD,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EACjE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,GAClD,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC"}
|
package/dist/nemesis/index.js
CHANGED
|
@@ -62,6 +62,13 @@ export { commitIdentity, revealIdentity, verifySibylChain, verifyCommitmentRevea
|
|
|
62
62
|
export { runKeyWizard, checkKeyPermissions, strictKeyCheck, } from "./key_setup.js";
|
|
63
63
|
export { applyAugmentation, buildAugmentedCorpus, evaluateAugmentedAccuracy, computeAugmentedStats, } from "./corpus_augmenter.js";
|
|
64
64
|
export { locateBasin, observe, detectIdentitySwap, verifyJanusResult, } from "./janus.js";
|
|
65
|
+
// v2.54.0 — World-class premium additions:
|
|
66
|
+
// 🧠 LETHE — GDPR forget primitive (Merkle exclusion proof)
|
|
67
|
+
// ⚖ GAVEL — court-admissible bundle (THEMIS + EU stamp + SIBYL + Merkle tree)
|
|
68
|
+
// 🌐 NIMBUS — federated trust mesh (consent-fabric leaderboard pub/sub)
|
|
69
|
+
export { buildMerkleTree, buildInclusionProof, verifyInclusionProof, forgetRow, verifyForgetReceipt, listForgetReceipts, } from "./lethe.js";
|
|
70
|
+
export { buildGavelBundle, verifyGavelBundle, } from "./gavel.js";
|
|
71
|
+
export { publishCard, verifyCard, subscribeCard, computeCrossOrgReputation, listPublished, listSubscriptions, } from "./nimbus.js";
|
|
65
72
|
// v2.50.0 — VENDOR ALLOWLIST GUARD: kills EMBEDDER-LEAK class structurally.
|
|
66
73
|
// Central allowlist of real agent vendors; backend/embedder names (ollama,
|
|
67
74
|
// openai-gpt, gemini, etc) coerced to "unknown" + logged to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nemesis/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nemesis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.54.0 — LETHE: GDPR forget primitive (Merkle exclusion proof).
|
|
3
|
+
*
|
|
4
|
+
* Greek mythology: river in Hades that erases memory.
|
|
5
|
+
*
|
|
6
|
+
* Problem: EU GDPR Art 17 (right to erasure) + AI-specific provisions
|
|
7
|
+
* require that personal data — including fingerprint-style behavioural
|
|
8
|
+
* markers — be REMOVABLE on request. But Mneme's HMAC chains are
|
|
9
|
+
* tamper-evident by design: removing rows breaks the chain.
|
|
10
|
+
*
|
|
11
|
+
* Solution (cryptographically rigorous, not just "delete"):
|
|
12
|
+
* 1. Build a Merkle tree over the chain rows.
|
|
13
|
+
* 2. To "forget" row R, REPLACE the row's leaf with `H("forgotten:" || nonce)`
|
|
14
|
+
* where nonce is fresh per request.
|
|
15
|
+
* 3. Recompute the Merkle root from the modified leaves.
|
|
16
|
+
* 4. Issue a FORGET RECEIPT: signed proof tree showing
|
|
17
|
+
* (a) the row WAS in the chain (by original leaf hash, kept ONLY as
|
|
18
|
+
* the path to the root — never the content)
|
|
19
|
+
* (b) the row is NOW erased (replacement leaf)
|
|
20
|
+
* (c) the new Merkle root that subsequent verifiers can use
|
|
21
|
+
* (d) timestamp + GDPR jurisdiction tag
|
|
22
|
+
*
|
|
23
|
+
* Verifiers downstream:
|
|
24
|
+
* - Future readers see the new root + the FORGET ENVELOPE; they cannot
|
|
25
|
+
* recover the original content (it was the only place stored).
|
|
26
|
+
* - The exclusion proof is a few hundred bytes regardless of chain size.
|
|
27
|
+
*
|
|
28
|
+
* Composes: createHash + the existing HMAC-chained ledger pattern.
|
|
29
|
+
* Pure deterministic + defensive; never throws.
|
|
30
|
+
*/
|
|
31
|
+
export interface MerkleProofStep {
|
|
32
|
+
/** Sibling hash at this level. */
|
|
33
|
+
sibling: string;
|
|
34
|
+
/** Position of the current node relative to its sibling. */
|
|
35
|
+
position: "left" | "right";
|
|
36
|
+
}
|
|
37
|
+
export interface MerkleTree {
|
|
38
|
+
/** Root hash. */
|
|
39
|
+
root: string;
|
|
40
|
+
/** Leaf hashes (in input order). */
|
|
41
|
+
leaves: string[];
|
|
42
|
+
/** Total number of leaves. */
|
|
43
|
+
count: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build a Merkle tree from a list of row contents. Odd-count layers
|
|
47
|
+
* duplicate the last element (standard Bitcoin-style construction).
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildMerkleTree(rows: string[]): MerkleTree;
|
|
50
|
+
/**
|
|
51
|
+
* Build an inclusion proof for the leaf at `index`.
|
|
52
|
+
* Returns the sibling path from the leaf up to (but not including) the root.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildInclusionProof(rows: string[], index: number): {
|
|
55
|
+
proof: MerkleProofStep[];
|
|
56
|
+
root: string;
|
|
57
|
+
leafHash: string;
|
|
58
|
+
} | null;
|
|
59
|
+
/** Verify an inclusion proof. Pure. */
|
|
60
|
+
export declare function verifyInclusionProof(leafHash: string, proof: MerkleProofStep[], expectedRoot: string): boolean;
|
|
61
|
+
export interface ForgetReceipt {
|
|
62
|
+
/** ISO-8601 timestamp of the forget request. */
|
|
63
|
+
at: string;
|
|
64
|
+
/** GDPR jurisdiction tag (EU/UK/etc) — for the audit trail. */
|
|
65
|
+
jurisdiction: string;
|
|
66
|
+
/** Source ledger identifier (e.g. "cli-activity.jsonl" / "drift-cursor.jsonl"). */
|
|
67
|
+
ledger: string;
|
|
68
|
+
/** Row index that was forgotten. */
|
|
69
|
+
forgottenIndex: number;
|
|
70
|
+
/** Inclusion proof THAT THE ROW WAS THERE (original leaf hash + path). */
|
|
71
|
+
originalLeafHash: string;
|
|
72
|
+
/** Replacement leaf hash. */
|
|
73
|
+
replacementLeafHash: string;
|
|
74
|
+
/** Merkle proof of inclusion of the original leaf in the ORIGINAL root. */
|
|
75
|
+
inclusionProof: MerkleProofStep[];
|
|
76
|
+
/** Original Merkle root (before erase). */
|
|
77
|
+
originalRoot: string;
|
|
78
|
+
/** New Merkle root (after erase). */
|
|
79
|
+
newRoot: string;
|
|
80
|
+
/** HMAC over the canonical receipt body. */
|
|
81
|
+
hmac: string;
|
|
82
|
+
}
|
|
83
|
+
export interface ForgetInput {
|
|
84
|
+
repoRoot: string;
|
|
85
|
+
ledgerRelative: string;
|
|
86
|
+
/** Which row to forget (0-based). */
|
|
87
|
+
rowIndex: number;
|
|
88
|
+
jurisdiction?: string;
|
|
89
|
+
/** Don't actually rewrite the ledger; only build the receipt. */
|
|
90
|
+
dryRun?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface ForgetResult {
|
|
93
|
+
ok: boolean;
|
|
94
|
+
receipt?: ForgetReceipt;
|
|
95
|
+
newLedgerPath?: string;
|
|
96
|
+
backupPath?: string;
|
|
97
|
+
reason: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read a JSONL ledger + perform GDPR forget on a specific row. Pure
|
|
101
|
+
* cryptographic operation; ledger rewrite + backup are best-effort.
|
|
102
|
+
*/
|
|
103
|
+
export declare function forgetRow(input: ForgetInput): ForgetResult;
|
|
104
|
+
/** Verify a forget receipt cryptographically — does the inclusion proof
|
|
105
|
+
* reconstruct the original root + does the HMAC match? Pure. */
|
|
106
|
+
export declare function verifyForgetReceipt(receipt: ForgetReceipt): {
|
|
107
|
+
ok: boolean;
|
|
108
|
+
reason: string;
|
|
109
|
+
};
|
|
110
|
+
/** List all forget receipts in this repo. */
|
|
111
|
+
export declare function listForgetReceipts(repoRoot: string): ForgetReceipt[];
|
|
112
|
+
//# sourceMappingURL=lethe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lethe.d.ts","sourceRoot":"","sources":["../../src/nemesis/lethe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAuBH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiB1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBtI;AAED,uCAAuC;AACvC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,YAAY,EAAE,MAAM,GAC/D,OAAO,CAQT;AAMD,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAqD1D;AAED;iEACiE;AACjE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQ3F;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CASpE"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.54.0 — LETHE: GDPR forget primitive (Merkle exclusion proof).
|
|
3
|
+
*
|
|
4
|
+
* Greek mythology: river in Hades that erases memory.
|
|
5
|
+
*
|
|
6
|
+
* Problem: EU GDPR Art 17 (right to erasure) + AI-specific provisions
|
|
7
|
+
* require that personal data — including fingerprint-style behavioural
|
|
8
|
+
* markers — be REMOVABLE on request. But Mneme's HMAC chains are
|
|
9
|
+
* tamper-evident by design: removing rows breaks the chain.
|
|
10
|
+
*
|
|
11
|
+
* Solution (cryptographically rigorous, not just "delete"):
|
|
12
|
+
* 1. Build a Merkle tree over the chain rows.
|
|
13
|
+
* 2. To "forget" row R, REPLACE the row's leaf with `H("forgotten:" || nonce)`
|
|
14
|
+
* where nonce is fresh per request.
|
|
15
|
+
* 3. Recompute the Merkle root from the modified leaves.
|
|
16
|
+
* 4. Issue a FORGET RECEIPT: signed proof tree showing
|
|
17
|
+
* (a) the row WAS in the chain (by original leaf hash, kept ONLY as
|
|
18
|
+
* the path to the root — never the content)
|
|
19
|
+
* (b) the row is NOW erased (replacement leaf)
|
|
20
|
+
* (c) the new Merkle root that subsequent verifiers can use
|
|
21
|
+
* (d) timestamp + GDPR jurisdiction tag
|
|
22
|
+
*
|
|
23
|
+
* Verifiers downstream:
|
|
24
|
+
* - Future readers see the new root + the FORGET ENVELOPE; they cannot
|
|
25
|
+
* recover the original content (it was the only place stored).
|
|
26
|
+
* - The exclusion proof is a few hundred bytes regardless of chain size.
|
|
27
|
+
*
|
|
28
|
+
* Composes: createHash + the existing HMAC-chained ledger pattern.
|
|
29
|
+
* Pure deterministic + defensive; never throws.
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync, copyFileSync } from "node:fs";
|
|
32
|
+
import { join } from "node:path";
|
|
33
|
+
import { createHash, createHmac, randomBytes } from "node:crypto";
|
|
34
|
+
const LETHE_DIR = ".mneme/nemesis/lethe";
|
|
35
|
+
const FORGET_LEDGER = "forget_receipts.jsonl";
|
|
36
|
+
const KEY_ENV = "MNEME_LETHE_KEY";
|
|
37
|
+
const DEFAULT_KEY = "mneme-lethe-v1";
|
|
38
|
+
function keyOf() {
|
|
39
|
+
return process.env[KEY_ENV] ?? DEFAULT_KEY;
|
|
40
|
+
}
|
|
41
|
+
function leafOf(content) {
|
|
42
|
+
return createHash("sha256").update("leaf:").update(content).digest("hex");
|
|
43
|
+
}
|
|
44
|
+
function parentOf(left, right) {
|
|
45
|
+
return createHash("sha256").update("parent:").update(left).update(":").update(right).digest("hex");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build a Merkle tree from a list of row contents. Odd-count layers
|
|
49
|
+
* duplicate the last element (standard Bitcoin-style construction).
|
|
50
|
+
*/
|
|
51
|
+
export function buildMerkleTree(rows) {
|
|
52
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
53
|
+
const empty = createHash("sha256").update("empty").digest("hex");
|
|
54
|
+
return { root: empty, leaves: [], count: 0 };
|
|
55
|
+
}
|
|
56
|
+
const leaves = rows.map(leafOf);
|
|
57
|
+
let level = [...leaves];
|
|
58
|
+
while (level.length > 1) {
|
|
59
|
+
const next = [];
|
|
60
|
+
for (let i = 0; i < level.length; i += 2) {
|
|
61
|
+
const a = level[i];
|
|
62
|
+
const b = i + 1 < level.length ? level[i + 1] : level[i];
|
|
63
|
+
next.push(parentOf(a, b));
|
|
64
|
+
}
|
|
65
|
+
level = next;
|
|
66
|
+
}
|
|
67
|
+
return { root: level[0], leaves, count: rows.length };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build an inclusion proof for the leaf at `index`.
|
|
71
|
+
* Returns the sibling path from the leaf up to (but not including) the root.
|
|
72
|
+
*/
|
|
73
|
+
export function buildInclusionProof(rows, index) {
|
|
74
|
+
if (!Array.isArray(rows) || index < 0 || index >= rows.length)
|
|
75
|
+
return null;
|
|
76
|
+
const leaves = rows.map(leafOf);
|
|
77
|
+
const leafHash = leaves[index];
|
|
78
|
+
let level = [...leaves];
|
|
79
|
+
let pos = index;
|
|
80
|
+
const proof = [];
|
|
81
|
+
while (level.length > 1) {
|
|
82
|
+
const isLeft = pos % 2 === 0;
|
|
83
|
+
const siblingIdx = isLeft ? pos + 1 : pos - 1;
|
|
84
|
+
const sibling = level[siblingIdx] ?? level[pos];
|
|
85
|
+
proof.push({ sibling, position: isLeft ? "left" : "right" });
|
|
86
|
+
const next = [];
|
|
87
|
+
for (let i = 0; i < level.length; i += 2) {
|
|
88
|
+
const a = level[i];
|
|
89
|
+
const b = i + 1 < level.length ? level[i + 1] : level[i];
|
|
90
|
+
next.push(parentOf(a, b));
|
|
91
|
+
}
|
|
92
|
+
level = next;
|
|
93
|
+
pos = Math.floor(pos / 2);
|
|
94
|
+
}
|
|
95
|
+
return { proof, root: level[0], leafHash };
|
|
96
|
+
}
|
|
97
|
+
/** Verify an inclusion proof. Pure. */
|
|
98
|
+
export function verifyInclusionProof(leafHash, proof, expectedRoot) {
|
|
99
|
+
if (typeof leafHash !== "string" || !Array.isArray(proof))
|
|
100
|
+
return false;
|
|
101
|
+
let cur = leafHash;
|
|
102
|
+
for (const step of proof) {
|
|
103
|
+
if (step.position === "left")
|
|
104
|
+
cur = parentOf(cur, step.sibling);
|
|
105
|
+
else
|
|
106
|
+
cur = parentOf(step.sibling, cur);
|
|
107
|
+
}
|
|
108
|
+
return cur === expectedRoot;
|
|
109
|
+
}
|
|
110
|
+
function hmacOf(body) {
|
|
111
|
+
return createHmac("sha256", keyOf()).update(JSON.stringify(body)).digest("hex");
|
|
112
|
+
}
|
|
113
|
+
function forgetLeaf(nonce) {
|
|
114
|
+
return createHash("sha256").update("forgotten:").update(nonce).digest("hex");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Read a JSONL ledger + perform GDPR forget on a specific row. Pure
|
|
118
|
+
* cryptographic operation; ledger rewrite + backup are best-effort.
|
|
119
|
+
*/
|
|
120
|
+
export function forgetRow(input) {
|
|
121
|
+
try {
|
|
122
|
+
const p = join(input.repoRoot, input.ledgerRelative);
|
|
123
|
+
if (!existsSync(p))
|
|
124
|
+
return { ok: false, reason: `ledger not found: ${p}` };
|
|
125
|
+
const rows = readFileSync(p, "utf8").split("\n").filter((l) => l.trim());
|
|
126
|
+
if (input.rowIndex < 0 || input.rowIndex >= rows.length) {
|
|
127
|
+
return { ok: false, reason: `row ${input.rowIndex} out of range (ledger has ${rows.length} rows)` };
|
|
128
|
+
}
|
|
129
|
+
const originalTree = buildMerkleTree(rows);
|
|
130
|
+
const inclusion = buildInclusionProof(rows, input.rowIndex);
|
|
131
|
+
if (!inclusion)
|
|
132
|
+
return { ok: false, reason: "failed to build inclusion proof" };
|
|
133
|
+
const nonce = randomBytes(16).toString("hex");
|
|
134
|
+
const replacementHash = forgetLeaf(nonce);
|
|
135
|
+
const newRows = [...rows];
|
|
136
|
+
// Replace with a sentinel that's parseable + non-PII
|
|
137
|
+
const sentinel = JSON.stringify({ at: new Date().toISOString(), forgotten: true, leafHash: replacementHash, jurisdiction: input.jurisdiction ?? "EU-GDPR-Art17" });
|
|
138
|
+
newRows[input.rowIndex] = sentinel;
|
|
139
|
+
const newTree = buildMerkleTree(newRows);
|
|
140
|
+
const bodyForHmac = {
|
|
141
|
+
at: new Date().toISOString(),
|
|
142
|
+
jurisdiction: input.jurisdiction ?? "EU-GDPR-Art17",
|
|
143
|
+
ledger: input.ledgerRelative,
|
|
144
|
+
forgottenIndex: input.rowIndex,
|
|
145
|
+
originalLeafHash: inclusion.leafHash,
|
|
146
|
+
replacementLeafHash: replacementHash,
|
|
147
|
+
inclusionProof: inclusion.proof,
|
|
148
|
+
originalRoot: originalTree.root,
|
|
149
|
+
newRoot: newTree.root,
|
|
150
|
+
};
|
|
151
|
+
const receipt = { ...bodyForHmac, hmac: hmacOf(bodyForHmac) };
|
|
152
|
+
if (input.dryRun) {
|
|
153
|
+
return { ok: true, receipt, reason: "dry-run: receipt built, ledger untouched" };
|
|
154
|
+
}
|
|
155
|
+
// Backup + rewrite
|
|
156
|
+
const backupPath = p + ".pre-lethe.bak";
|
|
157
|
+
try {
|
|
158
|
+
copyFileSync(p, backupPath);
|
|
159
|
+
}
|
|
160
|
+
catch { /* */ }
|
|
161
|
+
try {
|
|
162
|
+
writeFileSync(p, newRows.join("\n") + "\n");
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
return { ok: false, reason: `ledger rewrite failed: ${e.message}` };
|
|
166
|
+
}
|
|
167
|
+
// Append receipt to forget ledger
|
|
168
|
+
try {
|
|
169
|
+
const dir = join(input.repoRoot, LETHE_DIR);
|
|
170
|
+
if (!existsSync(dir))
|
|
171
|
+
mkdirSync(dir, { recursive: true });
|
|
172
|
+
appendFileSync(join(dir, FORGET_LEDGER), JSON.stringify(receipt) + "\n");
|
|
173
|
+
}
|
|
174
|
+
catch { /* */ }
|
|
175
|
+
return { ok: true, receipt, newLedgerPath: p, backupPath, reason: `row ${input.rowIndex} forgotten; old root ${originalTree.root.slice(0, 8)}… → new root ${newTree.root.slice(0, 8)}…` };
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
return { ok: false, reason: `forget failed: ${e.message}` };
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Verify a forget receipt cryptographically — does the inclusion proof
|
|
182
|
+
* reconstruct the original root + does the HMAC match? Pure. */
|
|
183
|
+
export function verifyForgetReceipt(receipt) {
|
|
184
|
+
if (!receipt || typeof receipt.hmac !== "string")
|
|
185
|
+
return { ok: false, reason: "missing hmac" };
|
|
186
|
+
const { hmac, ...body } = receipt;
|
|
187
|
+
const expectedHmac = hmacOf(body);
|
|
188
|
+
if (expectedHmac !== hmac)
|
|
189
|
+
return { ok: false, reason: "hmac mismatch" };
|
|
190
|
+
const recoveredRoot = verifyInclusionProof(receipt.originalLeafHash, receipt.inclusionProof, receipt.originalRoot);
|
|
191
|
+
if (!recoveredRoot)
|
|
192
|
+
return { ok: false, reason: "inclusion proof does not reconstruct original root" };
|
|
193
|
+
return { ok: true, reason: "receipt verified — row was in chain + has been forgotten + new root computed correctly" };
|
|
194
|
+
}
|
|
195
|
+
/** List all forget receipts in this repo. */
|
|
196
|
+
export function listForgetReceipts(repoRoot) {
|
|
197
|
+
const p = join(repoRoot, LETHE_DIR, FORGET_LEDGER);
|
|
198
|
+
if (!existsSync(p))
|
|
199
|
+
return [];
|
|
200
|
+
const out = [];
|
|
201
|
+
for (const line of readFileSync(p, "utf8").split("\n")) {
|
|
202
|
+
if (!line.trim())
|
|
203
|
+
continue;
|
|
204
|
+
try {
|
|
205
|
+
out.push(JSON.parse(line));
|
|
206
|
+
}
|
|
207
|
+
catch { /* skip */ }
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=lethe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lethe.js","sourceRoot":"","sources":["../../src/nemesis/lethe.ts"],"names":[],"mappings":"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"}
|