@mneme-ai/core 2.19.9 → 2.19.11
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/cosmic/aurelian_v1910.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1910.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1910.test.js +46 -0
- package/dist/cosmic/aurelian_v1910.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1911.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1911.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1911.test.js +34 -0
- package/dist/cosmic/aurelian_v1911.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/mortal_wrappers/index.d.ts +182 -0
- package/dist/mortal_wrappers/index.d.ts.map +1 -0
- package/dist/mortal_wrappers/index.js +360 -0
- package/dist/mortal_wrappers/index.js.map +1 -0
- package/dist/mortal_wrappers/mortal_wrappers.test.d.ts +2 -0
- package/dist/mortal_wrappers/mortal_wrappers.test.d.ts.map +1 -0
- package/dist/mortal_wrappers/mortal_wrappers.test.js +372 -0
- package/dist/mortal_wrappers/mortal_wrappers.test.js.map +1 -0
- package/dist/proof_carrying/index.d.ts +100 -0
- package/dist/proof_carrying/index.d.ts.map +1 -0
- package/dist/proof_carrying/index.js +184 -0
- package/dist/proof_carrying/index.js.map +1 -0
- package/dist/proof_carrying/proof_carrying.test.d.ts +2 -0
- package/dist/proof_carrying/proof_carrying.test.d.ts.map +1 -0
- package/dist/proof_carrying/proof_carrying.test.js +179 -0
- package/dist/proof_carrying/proof_carrying.test.js.map +1 -0
- package/dist/reverse_wrapper/index.d.ts +137 -0
- package/dist/reverse_wrapper/index.d.ts.map +1 -0
- package/dist/reverse_wrapper/index.js +245 -0
- package/dist/reverse_wrapper/index.js.map +1 -0
- package/dist/reverse_wrapper/reverse_wrapper.test.d.ts +2 -0
- package/dist/reverse_wrapper/reverse_wrapper.test.d.ts.map +1 -0
- package/dist/reverse_wrapper/reverse_wrapper.test.js +199 -0
- package/dist/reverse_wrapper/reverse_wrapper.test.js.map +1 -0
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +14 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { birthMortalWrapper, mutateSignature, tickReincarnation, resolveMortalCall, recordCalibration, calibrationScore, globalStats, verifyMortalWrapper, emptyState, formatWrapperLine, } from "./index.js";
|
|
3
|
+
const SECRET = "test-mortal-secret-9991122";
|
|
4
|
+
const ARGS = ["topic", "limit", "outputFormat"];
|
|
5
|
+
function newBorn(opts = { now: 1_000_000 }) {
|
|
6
|
+
return birthMortalWrapper({
|
|
7
|
+
baseToolName: opts.base ?? "mneme.arena.judge",
|
|
8
|
+
baseArgs: ARGS,
|
|
9
|
+
ttlMs: opts.ttl ?? 1000,
|
|
10
|
+
deprecationGravityMs: opts.gravity ?? 500,
|
|
11
|
+
nowMs: opts.now,
|
|
12
|
+
secret: SECRET,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
describe("v2.19.11 MORTAL WRAPPERS · birth", () => {
|
|
16
|
+
it("births a generation-1 wrapper with alive=true, hmac-signed, alias suffixed gen1", () => {
|
|
17
|
+
const w = newBorn({ now: 1_000_000 });
|
|
18
|
+
expect(w.generation).toBe(1);
|
|
19
|
+
expect(w.parentGeneration).toBeNull();
|
|
20
|
+
expect(w.alive).toBe(true);
|
|
21
|
+
expect(w.deprecatedUntil).toBeNull();
|
|
22
|
+
expect(w.signature.alias).toBe("mneme.mortal.arena.judge.gen1");
|
|
23
|
+
expect(Object.keys(w.signature.argRenameMap).sort()).toEqual(ARGS.slice().sort());
|
|
24
|
+
expect(w.signature.argOrder).toEqual(ARGS);
|
|
25
|
+
expect(w.expiresAt).toBe(w.birthAt + w.ttlMs);
|
|
26
|
+
const v = verifyMortalWrapper(w, SECRET);
|
|
27
|
+
expect(v.ok).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
it("rejects forged hmac", () => {
|
|
30
|
+
const w = newBorn();
|
|
31
|
+
const forged = { ...w, hmac: "deadbeef".repeat(8) };
|
|
32
|
+
expect(verifyMortalWrapper(forged, SECRET).ok).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it("birthing two wrappers for the same base at different times produces different IDs", () => {
|
|
35
|
+
const a = newBorn({ now: 1_000_000 });
|
|
36
|
+
const b = newBorn({ now: 1_000_001 });
|
|
37
|
+
expect(a.id).not.toBe(b.id);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("v2.19.11 MORTAL WRAPPERS · mutateSignature", () => {
|
|
41
|
+
it("rename_optional_field renames an arg and updates argOrder", () => {
|
|
42
|
+
const w = newBorn();
|
|
43
|
+
const out = mutateSignature({
|
|
44
|
+
base: w.signature,
|
|
45
|
+
baseToolName: w.baseToolName,
|
|
46
|
+
baseArgs: ARGS,
|
|
47
|
+
nextGen: 2,
|
|
48
|
+
kind: "rename_optional_field",
|
|
49
|
+
rng: () => 0.0, // pick first lexicographic
|
|
50
|
+
});
|
|
51
|
+
expect(out.alias).toBe("mneme.mortal.arena.judge.gen2");
|
|
52
|
+
// One key is renamed with _g2 suffix
|
|
53
|
+
const renamed = Object.keys(out.argRenameMap).filter((k) => k.endsWith("_g2"));
|
|
54
|
+
expect(renamed.length).toBe(1);
|
|
55
|
+
// The renamed key still maps to a canonical base arg
|
|
56
|
+
expect(ARGS).toContain(out.argRenameMap[renamed[0]]);
|
|
57
|
+
// argOrder reflects the rename (no canonical version remains for that slot)
|
|
58
|
+
expect(out.argOrder).toContain(renamed[0]);
|
|
59
|
+
});
|
|
60
|
+
it("add_optional_param appends a drift_gN_xxx param", () => {
|
|
61
|
+
const w = newBorn();
|
|
62
|
+
const out = mutateSignature({
|
|
63
|
+
base: w.signature,
|
|
64
|
+
baseToolName: w.baseToolName,
|
|
65
|
+
baseArgs: ARGS,
|
|
66
|
+
nextGen: 3,
|
|
67
|
+
kind: "add_optional_param",
|
|
68
|
+
rng: () => 0.5,
|
|
69
|
+
});
|
|
70
|
+
expect(out.addedOptionalParams.length).toBe(1);
|
|
71
|
+
const fresh = out.addedOptionalParams[0];
|
|
72
|
+
expect(fresh.startsWith("_drift_g3_")).toBe(true);
|
|
73
|
+
expect(out.argOrder).toContain(fresh);
|
|
74
|
+
});
|
|
75
|
+
it("swap_arg_order reorders two positions", () => {
|
|
76
|
+
const w = newBorn();
|
|
77
|
+
const out = mutateSignature({
|
|
78
|
+
base: w.signature,
|
|
79
|
+
baseToolName: w.baseToolName,
|
|
80
|
+
baseArgs: ARGS,
|
|
81
|
+
nextGen: 4,
|
|
82
|
+
kind: "swap_arg_order",
|
|
83
|
+
rng: (() => { let i = 0; return () => [0.0, 0.99][i++]; })(),
|
|
84
|
+
});
|
|
85
|
+
// First and last swapped (rng → 0 and ~end)
|
|
86
|
+
expect(out.argOrder).not.toEqual(ARGS);
|
|
87
|
+
// But the same SET of args is preserved
|
|
88
|
+
expect([...out.argOrder].sort()).toEqual([...ARGS].sort());
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("v2.19.11 MORTAL WRAPPERS · tickReincarnation", () => {
|
|
92
|
+
function stateWith(wrappers) {
|
|
93
|
+
return { v: 1, wrappers, calibration: [] };
|
|
94
|
+
}
|
|
95
|
+
it("does nothing when no wrappers have expired", () => {
|
|
96
|
+
const w = newBorn({ now: 1_000_000, ttl: 10_000 });
|
|
97
|
+
const out = tickReincarnation({
|
|
98
|
+
state: stateWith([w]),
|
|
99
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
100
|
+
nowMs: 1_000_001, // far before expiry
|
|
101
|
+
rngSeed: 42,
|
|
102
|
+
secret: SECRET,
|
|
103
|
+
});
|
|
104
|
+
expect(out.expired.length).toBe(0);
|
|
105
|
+
expect(out.reincarnated.length).toBe(0);
|
|
106
|
+
expect(out.state.wrappers.length).toBe(1);
|
|
107
|
+
expect(out.state.wrappers[0].alive).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
it("expires and reincarnates exactly one wrapper at expiry boundary", () => {
|
|
110
|
+
const w = newBorn({ now: 1_000_000, ttl: 1000, gravity: 500 });
|
|
111
|
+
const out = tickReincarnation({
|
|
112
|
+
state: stateWith([w]),
|
|
113
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
114
|
+
nowMs: 1_001_000, // at expiry
|
|
115
|
+
rngSeed: 7,
|
|
116
|
+
secret: SECRET,
|
|
117
|
+
});
|
|
118
|
+
expect(out.expired.length).toBe(1);
|
|
119
|
+
expect(out.reincarnated.length).toBe(1);
|
|
120
|
+
// Parent is now deprecated, child is gen2 with parentGeneration=1
|
|
121
|
+
const parent = out.state.wrappers.find((x) => x.id === w.id);
|
|
122
|
+
expect(parent.alive).toBe(false);
|
|
123
|
+
expect(parent.deprecatedUntil).toBe(1_001_000 + 500);
|
|
124
|
+
const child = out.reincarnated[0];
|
|
125
|
+
expect(child.generation).toBe(2);
|
|
126
|
+
expect(child.parentGeneration).toBe(1);
|
|
127
|
+
expect(child.alive).toBe(true);
|
|
128
|
+
expect(child.mutationsApplied.length).toBe(1);
|
|
129
|
+
// Parent's new HMAC is valid (re-signed on deprecation)
|
|
130
|
+
expect(verifyMortalWrapper(parent, SECRET).ok).toBe(true);
|
|
131
|
+
expect(verifyMortalWrapper(child, SECRET).ok).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
it("budget caps mutations per tick to MAX_TICK_BATCH=3 (even if 5 are due)", () => {
|
|
134
|
+
const bases = ["mneme.a.x", "mneme.b.y", "mneme.c.z", "mneme.d.w", "mneme.e.v"];
|
|
135
|
+
const wrappers = bases.map((b) => newBorn({ now: 1_000_000, ttl: 1000, gravity: 500, base: b }));
|
|
136
|
+
const out = tickReincarnation({
|
|
137
|
+
state: stateWith(wrappers),
|
|
138
|
+
baseToolArgs: Object.fromEntries(bases.map((b) => [b, ARGS])),
|
|
139
|
+
nowMs: 1_001_000,
|
|
140
|
+
budget: 10, // user asks for many but cap is 3
|
|
141
|
+
rngSeed: 1,
|
|
142
|
+
secret: SECRET,
|
|
143
|
+
});
|
|
144
|
+
expect(out.reincarnated.length).toBe(3);
|
|
145
|
+
expect(out.expired.length).toBe(3);
|
|
146
|
+
});
|
|
147
|
+
it("drops deprecated wrappers after their gravity window elapses", () => {
|
|
148
|
+
const w = newBorn({ now: 1_000_000, ttl: 1000, gravity: 500 });
|
|
149
|
+
const t1 = tickReincarnation({
|
|
150
|
+
state: stateWith([w]),
|
|
151
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
152
|
+
nowMs: 1_001_000,
|
|
153
|
+
rngSeed: 1,
|
|
154
|
+
secret: SECRET,
|
|
155
|
+
});
|
|
156
|
+
// Parent expires at 1_001_500. Tick again after that.
|
|
157
|
+
const t2 = tickReincarnation({
|
|
158
|
+
state: t1.state,
|
|
159
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
160
|
+
nowMs: 1_001_600,
|
|
161
|
+
rngSeed: 2,
|
|
162
|
+
secret: SECRET,
|
|
163
|
+
});
|
|
164
|
+
// Parent (gen1) should be gone; only the child (gen2) remains alive.
|
|
165
|
+
const aliveLineage = t2.state.wrappers.filter((x) => x.baseToolName === w.baseToolName);
|
|
166
|
+
expect(aliveLineage.length).toBe(1);
|
|
167
|
+
expect(aliveLineage[0].generation).toBe(2);
|
|
168
|
+
});
|
|
169
|
+
it("respects MAX_GENERATIONS_PER_BASE loop guard", () => {
|
|
170
|
+
// Manually craft a gen=100 wrapper that is about to expire.
|
|
171
|
+
const expired = birthMortalWrapper({
|
|
172
|
+
baseToolName: "mneme.cap.test",
|
|
173
|
+
baseArgs: ARGS,
|
|
174
|
+
ttlMs: 1000,
|
|
175
|
+
nowMs: 1_000_000,
|
|
176
|
+
secret: SECRET,
|
|
177
|
+
});
|
|
178
|
+
// Build a gen-100 sibling that already exists in the lineage.
|
|
179
|
+
const gen100 = { ...expired, generation: 100, id: "mw-fake100", alive: true, expiresAt: 999 };
|
|
180
|
+
const state = { v: 1, wrappers: [gen100], calibration: [] };
|
|
181
|
+
const out = tickReincarnation({
|
|
182
|
+
state,
|
|
183
|
+
baseToolArgs: { "mneme.cap.test": ARGS },
|
|
184
|
+
nowMs: 2000,
|
|
185
|
+
rngSeed: 1,
|
|
186
|
+
secret: SECRET,
|
|
187
|
+
});
|
|
188
|
+
expect(out.reincarnated.length).toBe(0);
|
|
189
|
+
expect(out.skippedAtMaxGen).toContain("mneme.cap.test");
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe("v2.19.11 MORTAL WRAPPERS · resolveMortalCall", () => {
|
|
193
|
+
it("resolves a live alias and translates renamed keys back to base args", () => {
|
|
194
|
+
const w = newBorn({ now: 1_000_000 });
|
|
195
|
+
const state = tickReincarnation({
|
|
196
|
+
state: { v: 1, wrappers: [w], calibration: [] },
|
|
197
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
198
|
+
nowMs: w.expiresAt, // force reincarnation
|
|
199
|
+
rngSeed: 11,
|
|
200
|
+
secret: SECRET,
|
|
201
|
+
}).state;
|
|
202
|
+
const child = state.wrappers.find((x) => x.alive);
|
|
203
|
+
// Call the child with its current schema — should translate cleanly.
|
|
204
|
+
const childArgs = {};
|
|
205
|
+
for (const [mortalKey, baseKey] of Object.entries(child.signature.argRenameMap)) {
|
|
206
|
+
childArgs[mortalKey] = `value-of-${baseKey}`;
|
|
207
|
+
}
|
|
208
|
+
const r = resolveMortalCall({
|
|
209
|
+
alias: child.signature.alias,
|
|
210
|
+
args: childArgs,
|
|
211
|
+
state,
|
|
212
|
+
nowMs: child.birthAt + 1,
|
|
213
|
+
});
|
|
214
|
+
expect(r.ok).toBe(true);
|
|
215
|
+
expect(r.baseToolName).toBe(w.baseToolName);
|
|
216
|
+
expect(r.deprecated).toBe(false);
|
|
217
|
+
expect(Object.keys(r.baseArgs).sort()).toEqual(ARGS.slice().sort());
|
|
218
|
+
});
|
|
219
|
+
it("flags a deprecated parent alias as deprecated=true (still callable during gravity)", () => {
|
|
220
|
+
const w = newBorn({ now: 1_000_000, ttl: 1000, gravity: 500 });
|
|
221
|
+
const state = tickReincarnation({
|
|
222
|
+
state: { v: 1, wrappers: [w], calibration: [] },
|
|
223
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
224
|
+
nowMs: 1_001_000,
|
|
225
|
+
rngSeed: 11,
|
|
226
|
+
secret: SECRET,
|
|
227
|
+
}).state;
|
|
228
|
+
const args = Object.fromEntries(ARGS.map((a) => [a, `v-${a}`]));
|
|
229
|
+
const r = resolveMortalCall({
|
|
230
|
+
alias: "mneme.mortal.arena.judge.gen1",
|
|
231
|
+
args,
|
|
232
|
+
state,
|
|
233
|
+
nowMs: 1_001_100, // inside gravity
|
|
234
|
+
});
|
|
235
|
+
expect(r.ok).toBe(true);
|
|
236
|
+
expect(r.deprecated).toBe(true);
|
|
237
|
+
});
|
|
238
|
+
it("refuses a fully-expired alias past gravity and offers a live sibling hint", () => {
|
|
239
|
+
const w = newBorn({ now: 1_000_000, ttl: 1000, gravity: 500 });
|
|
240
|
+
const state = tickReincarnation({
|
|
241
|
+
state: { v: 1, wrappers: [w], calibration: [] },
|
|
242
|
+
baseToolArgs: { [w.baseToolName]: ARGS },
|
|
243
|
+
nowMs: 1_001_000,
|
|
244
|
+
rngSeed: 11,
|
|
245
|
+
secret: SECRET,
|
|
246
|
+
}).state;
|
|
247
|
+
const r = resolveMortalCall({
|
|
248
|
+
alias: "mneme.mortal.arena.judge.gen1",
|
|
249
|
+
args: { topic: "x" },
|
|
250
|
+
state,
|
|
251
|
+
nowMs: 1_002_000, // way past gravity
|
|
252
|
+
});
|
|
253
|
+
expect(r.ok).toBe(false);
|
|
254
|
+
expect(r.hint).toBeDefined();
|
|
255
|
+
expect(r.hint).toContain("mneme.mortal.arena.judge.gen2");
|
|
256
|
+
});
|
|
257
|
+
it("flags AI-agent overfit by failing on unknown keys with a helpful hint", () => {
|
|
258
|
+
const w = newBorn({ now: 1_000_000 });
|
|
259
|
+
const state = { v: 1, wrappers: [w], calibration: [] };
|
|
260
|
+
const r = resolveMortalCall({
|
|
261
|
+
alias: w.signature.alias,
|
|
262
|
+
args: { topic: "x", THIS_IS_STALE_FROM_GEN_MINUS_ONE: 42 },
|
|
263
|
+
state,
|
|
264
|
+
});
|
|
265
|
+
expect(r.ok).toBe(false);
|
|
266
|
+
expect(r.reason).toContain("schema drifted");
|
|
267
|
+
expect(r.hint).toContain("topic");
|
|
268
|
+
});
|
|
269
|
+
it("silently drops drift-bonus params (they're calibration tripwires, not errors)", () => {
|
|
270
|
+
const w = newBorn({ now: 1_000_000 });
|
|
271
|
+
// Manually inject an addedOptionalParam via mutation
|
|
272
|
+
const drifted = mutateSignature({
|
|
273
|
+
base: w.signature,
|
|
274
|
+
baseToolName: w.baseToolName,
|
|
275
|
+
baseArgs: ARGS,
|
|
276
|
+
nextGen: 2,
|
|
277
|
+
kind: "add_optional_param",
|
|
278
|
+
rng: () => 0.3,
|
|
279
|
+
});
|
|
280
|
+
const driftedWrapper = { ...w, signature: drifted };
|
|
281
|
+
const state = { v: 1, wrappers: [driftedWrapper], calibration: [] };
|
|
282
|
+
const fresh = drifted.addedOptionalParams[0];
|
|
283
|
+
const r = resolveMortalCall({
|
|
284
|
+
alias: drifted.alias,
|
|
285
|
+
args: { topic: "x", limit: 5, outputFormat: "json", [fresh]: "ignored" },
|
|
286
|
+
state,
|
|
287
|
+
});
|
|
288
|
+
expect(r.ok).toBe(true);
|
|
289
|
+
expect(r.baseArgs).not.toHaveProperty(fresh);
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
describe("v2.19.11 MORTAL WRAPPERS · calibration telemetry", () => {
|
|
293
|
+
it("calibration score climbs as the caller succeeds; verdict bands report adaptiveness", () => {
|
|
294
|
+
let state = emptyState();
|
|
295
|
+
for (let i = 0; i < 19; i++)
|
|
296
|
+
state = recordCalibration({ state, callerKey: "ai-fast-learner", alias: "x", ok: true });
|
|
297
|
+
state = recordCalibration({ state, callerKey: "ai-fast-learner", alias: "x", ok: false });
|
|
298
|
+
const s = calibrationScore({ state, callerKey: "ai-fast-learner" });
|
|
299
|
+
expect(s.totalCalls).toBe(20);
|
|
300
|
+
expect(s.successfulCalls).toBe(19);
|
|
301
|
+
expect(s.adaptivenessScore).toBeCloseTo(0.95, 5);
|
|
302
|
+
expect(s.verdict).toBe("world_class");
|
|
303
|
+
});
|
|
304
|
+
it("an AI that keeps failing earns the over_fit verdict", () => {
|
|
305
|
+
let state = emptyState();
|
|
306
|
+
for (let i = 0; i < 10; i++)
|
|
307
|
+
state = recordCalibration({ state, callerKey: "ai-overfitter", alias: "y", ok: false });
|
|
308
|
+
for (let i = 0; i < 2; i++)
|
|
309
|
+
state = recordCalibration({ state, callerKey: "ai-overfitter", alias: "y", ok: true });
|
|
310
|
+
const s = calibrationScore({ state, callerKey: "ai-overfitter" });
|
|
311
|
+
expect(s.verdict).toBe("over_fit");
|
|
312
|
+
});
|
|
313
|
+
it("low sample size returns the cautious 'drifting' verdict (not enough signal)", () => {
|
|
314
|
+
let state = emptyState();
|
|
315
|
+
for (let i = 0; i < 3; i++)
|
|
316
|
+
state = recordCalibration({ state, callerKey: "ai-newbie", alias: "z", ok: true });
|
|
317
|
+
const s = calibrationScore({ state, callerKey: "ai-newbie" });
|
|
318
|
+
expect(s.verdict).toBe("drifting");
|
|
319
|
+
});
|
|
320
|
+
it("zero calls returns 0 with drifting verdict", () => {
|
|
321
|
+
const state = emptyState();
|
|
322
|
+
const s = calibrationScore({ state, callerKey: "never-called" });
|
|
323
|
+
expect(s.totalCalls).toBe(0);
|
|
324
|
+
expect(s.adaptivenessScore).toBe(0);
|
|
325
|
+
expect(s.verdict).toBe("drifting");
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe("v2.19.11 MORTAL WRAPPERS · globalStats", () => {
|
|
329
|
+
it("aggregates alive / deprecated / mutation histogram correctly across many generations", () => {
|
|
330
|
+
// 3 lineages, each reincarnated 4 times (gen5 lives, gen1-4 deprecated)
|
|
331
|
+
let state = emptyState();
|
|
332
|
+
let now = 1_000_000;
|
|
333
|
+
for (const base of ["mneme.x.a", "mneme.y.b", "mneme.z.c"]) {
|
|
334
|
+
state = { ...state, wrappers: [...state.wrappers, birthMortalWrapper({ baseToolName: base, baseArgs: ARGS, ttlMs: 1000, deprecationGravityMs: 10_000_000, nowMs: now, secret: SECRET })] };
|
|
335
|
+
}
|
|
336
|
+
for (let i = 0; i < 4; i++) {
|
|
337
|
+
const t = tickReincarnation({
|
|
338
|
+
state,
|
|
339
|
+
baseToolArgs: { "mneme.x.a": ARGS, "mneme.y.b": ARGS, "mneme.z.c": ARGS },
|
|
340
|
+
nowMs: now + 1000 + i * 1000,
|
|
341
|
+
budget: 3,
|
|
342
|
+
rngSeed: 100 + i,
|
|
343
|
+
secret: SECRET,
|
|
344
|
+
});
|
|
345
|
+
state = t.state;
|
|
346
|
+
}
|
|
347
|
+
const s = globalStats(state);
|
|
348
|
+
// 3 lineages × 5 generations = 15 wrappers; 3 alive (latest gen of each), 12 deprecated
|
|
349
|
+
expect(s.uniqueBaseTools).toBe(3);
|
|
350
|
+
expect(s.alive).toBe(3);
|
|
351
|
+
expect(s.deprecated).toBe(12);
|
|
352
|
+
expect(s.totalGenerationsAcrossLineages).toBe(15);
|
|
353
|
+
// Each lineage carries 4 cumulative mutations on gen5 (plus 3+2+1+0 on lower gens). Just sanity-check non-zero.
|
|
354
|
+
expect(s.totalMutationsApplied).toBeGreaterThan(0);
|
|
355
|
+
const histSum = Object.values(s.mutationKindHistogram).reduce((a, b) => a + b, 0);
|
|
356
|
+
expect(histSum).toBe(s.totalMutationsApplied);
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
describe("v2.19.11 MORTAL WRAPPERS · formatters + edge cases", () => {
|
|
360
|
+
it("formatter shows 🌱 for alive and 💀 for deprecated", () => {
|
|
361
|
+
const w = newBorn();
|
|
362
|
+
expect(formatWrapperLine(w)).toContain("🌱");
|
|
363
|
+
const dead = { ...w, alive: false };
|
|
364
|
+
expect(formatWrapperLine(dead)).toContain("💀");
|
|
365
|
+
});
|
|
366
|
+
it("resolve on unknown alias returns helpful error message", () => {
|
|
367
|
+
const r = resolveMortalCall({ alias: "mneme.mortal.does.not.exist.gen1", args: {}, state: emptyState() });
|
|
368
|
+
expect(r.ok).toBe(false);
|
|
369
|
+
expect(r.reason).toContain("unknown");
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
//# sourceMappingURL=mortal_wrappers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mortal_wrappers.test.js","sourceRoot":"","sources":["../../src/mortal_wrappers/mortal_wrappers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.10 — MNEME PROOF-CARRYING WRAPPER (zero-trust tool chain)
|
|
3
|
+
*
|
|
4
|
+
* "Every tool output carries a cryptographic certificate attesting:
|
|
5
|
+
* • which tool produced it
|
|
6
|
+
* • what input produced it (sha256 of canonical input)
|
|
7
|
+
* • when it was produced (ISO ts)
|
|
8
|
+
* • who the caller was (AI-agent fingerprint key)
|
|
9
|
+
* • what proof this output depends on (chain parent ID)
|
|
10
|
+
* A downstream tool with `requiresParentProof: true` REFUSES to run
|
|
11
|
+
* unless the supplied input.parentProof verifies. Prompt-injection
|
|
12
|
+
* that fakes a tool output → fails sig → rejected. Ad-hoc tool
|
|
13
|
+
* chains AI agents try to assemble → fail because chain is broken.
|
|
14
|
+
* Regulators get a cryptographic chain-of-custody for every call.
|
|
15
|
+
*
|
|
16
|
+
* First MCP primitive in the field with cryptographic identity
|
|
17
|
+
* BETWEEN tools."
|
|
18
|
+
*
|
|
19
|
+
* Honest scope:
|
|
20
|
+
* - HMAC-signed (single secret per Mneme instance); not yet asymmetric
|
|
21
|
+
* PKI. Future v2.20 may add Ed25519 keypairs per AI agent.
|
|
22
|
+
* - `parentProof` is single-parent; for fan-in chains use the latest
|
|
23
|
+
* parent + record siblings in the proof's metadata.
|
|
24
|
+
* - Loop detection: chain depth cap (default 32) + chainParent
|
|
25
|
+
* duplicate detection.
|
|
26
|
+
*
|
|
27
|
+
* Composes onto every existing MCP tool (opt-in). Pure additive layer.
|
|
28
|
+
*/
|
|
29
|
+
declare const PROTOCOL_VERSION: 1;
|
|
30
|
+
export interface ProofMetadata {
|
|
31
|
+
v: typeof PROTOCOL_VERSION;
|
|
32
|
+
proofId: string;
|
|
33
|
+
toolName: string;
|
|
34
|
+
inputSha256: string;
|
|
35
|
+
outputSha256: string;
|
|
36
|
+
callerKey: string;
|
|
37
|
+
chainParent: string | null;
|
|
38
|
+
chainDepth: number;
|
|
39
|
+
ts: string;
|
|
40
|
+
hmac: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ProofedOutput<T = unknown> {
|
|
43
|
+
data: T;
|
|
44
|
+
proof: ProofMetadata;
|
|
45
|
+
}
|
|
46
|
+
export interface AttachProofInput<T> {
|
|
47
|
+
toolName: string;
|
|
48
|
+
input: unknown;
|
|
49
|
+
output: T;
|
|
50
|
+
callerKey: string;
|
|
51
|
+
parentProof?: ProofMetadata | null;
|
|
52
|
+
ts?: string;
|
|
53
|
+
secret?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function attachProof<T>(input: AttachProofInput<T>): ProofedOutput<T>;
|
|
56
|
+
export interface VerifyResult {
|
|
57
|
+
ok: boolean;
|
|
58
|
+
reason?: string;
|
|
59
|
+
}
|
|
60
|
+
/** Verify ONE proof in isolation against the data it carries. */
|
|
61
|
+
export declare function verifyProof(proofed: ProofedOutput, secret?: string): VerifyResult;
|
|
62
|
+
/**
|
|
63
|
+
* Verify a chain of proofs. Caller passes the proofs in order
|
|
64
|
+
* (rootmost → most recent). Returns ok=true iff:
|
|
65
|
+
* - each proof verifies in isolation
|
|
66
|
+
* - each proof's chainParent equals the previous proof's proofId
|
|
67
|
+
* - no two proofs share the same proofId (loop detection)
|
|
68
|
+
* - chainDepth is strictly increasing
|
|
69
|
+
*/
|
|
70
|
+
export declare function verifyChain(proofedList: ProofedOutput[], secret?: string): {
|
|
71
|
+
ok: boolean;
|
|
72
|
+
brokenAt?: number;
|
|
73
|
+
reason?: string;
|
|
74
|
+
dagDepth: number;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Gate decorator: an MCP tool that requires its caller to supply a
|
|
78
|
+
* verifiable parentProof. Returns a wrapped handler that throws if the
|
|
79
|
+
* input is missing parentProof OR the proof doesn't verify.
|
|
80
|
+
*
|
|
81
|
+
* The wrapper then RUNS the inner handler and attaches a fresh proof
|
|
82
|
+
* with chainParent pointing at the supplied parentProof.
|
|
83
|
+
*/
|
|
84
|
+
export declare function requireParentProof<TArgs extends {
|
|
85
|
+
parentProof?: ProofMetadata;
|
|
86
|
+
}, TOut>(opts: {
|
|
87
|
+
toolName: string;
|
|
88
|
+
callerKey: string;
|
|
89
|
+
inner: (args: TArgs) => Promise<TOut> | TOut;
|
|
90
|
+
secret?: string;
|
|
91
|
+
}): (args: TArgs) => Promise<ProofedOutput<TOut>>;
|
|
92
|
+
/** Build a fingerprint key for an AI agent: stable per (vendor + session-id + repo). */
|
|
93
|
+
export declare function fingerprintCaller(input: {
|
|
94
|
+
vendor: string;
|
|
95
|
+
sessionId?: string;
|
|
96
|
+
repoPath?: string;
|
|
97
|
+
}): string;
|
|
98
|
+
export declare function formatProofLine(p: ProofMetadata): string;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof_carrying/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAGpC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,aAAa,CAAC;CACtB;AA0BD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAyB3E;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAejF;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAC1E,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CA2BA;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS;IAAE,WAAW,CAAC,EAAE,aAAa,CAAA;CAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAuBhD;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAI1G;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAGxD"}
|