@mneme-ai/core 2.19.83 → 2.19.84

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.
@@ -0,0 +1,177 @@
1
+ /**
2
+ * v2.19.84 — World AI Pulse deep tests.
3
+ *
4
+ * Pins the load-bearing invariants:
5
+ * - record/read round-trip
6
+ * - HMAC chain holds across N events; detects tampering
7
+ * - aggregate window slicing + per-vendor + per-region buckets
8
+ * - synthetic stream is realistic-shaped + seedable / deterministic
9
+ * - private fields stay private (NEVER stores sentence text)
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { mkdtempSync, readFileSync, writeFileSync, rmSync } from "node:fs";
13
+ import { tmpdir } from "node:os";
14
+ import { join } from "node:path";
15
+ import { recordPulseEvent, readPulseEvents, aggregatePulse, verifyPulseChain, synthesizePulseEvents, } from "./index.js";
16
+ function makeRepo() {
17
+ return mkdtempSync(join(tmpdir(), "mneme-pulse-"));
18
+ }
19
+ describe("world_pulse · record + read", () => {
20
+ it("round-trips an event with HMAC chain hash", () => {
21
+ const r = makeRepo();
22
+ try {
23
+ const e = recordPulseEvent(r, { vendor: "claude-ai", color: "green", regionTimezone: "Asia/Bangkok" });
24
+ expect(e.chainHash).toMatch(/^[A-Za-z0-9_-]{22}$/);
25
+ const back = readPulseEvents(r);
26
+ expect(back.length).toBe(1);
27
+ expect(back[0].vendor).toBe("claude-ai");
28
+ expect(back[0].color).toBe("green");
29
+ expect(back[0].regionTimezone).toBe("Asia/Bangkok");
30
+ }
31
+ finally {
32
+ rmSync(r, { recursive: true, force: true });
33
+ }
34
+ });
35
+ it("normalises bad input WITHOUT throwing (fire-and-forget contract)", () => {
36
+ const r = makeRepo();
37
+ try {
38
+ // Vendor not a string → "unknown". Color invalid → grey. Confidence > 1 → clamped.
39
+ const e = recordPulseEvent(r, { vendor: 12345, color: "purple", confidence: 9.9 });
40
+ expect(e.vendor).toBe("unknown");
41
+ expect(e.color).toBe("grey");
42
+ expect(e.confidence).toBe(1);
43
+ }
44
+ finally {
45
+ rmSync(r, { recursive: true, force: true });
46
+ }
47
+ });
48
+ it("limit + sinceTs filters work", () => {
49
+ const r = makeRepo();
50
+ try {
51
+ const t0 = Date.now() - 10_000;
52
+ recordPulseEvent(r, { vendor: "a", color: "green", ts: t0 });
53
+ recordPulseEvent(r, { vendor: "b", color: "red", ts: t0 + 2000 });
54
+ recordPulseEvent(r, { vendor: "c", color: "yellow", ts: t0 + 4000 });
55
+ const recent = readPulseEvents(r, { sinceTs: t0 + 3000 });
56
+ expect(recent.length).toBe(1);
57
+ expect(recent[0].vendor).toBe("c");
58
+ const lim = readPulseEvents(r, { limit: 2 });
59
+ expect(lim.length).toBe(2); // newest first → c then b
60
+ expect(lim[0].vendor).toBe("c");
61
+ }
62
+ finally {
63
+ rmSync(r, { recursive: true, force: true });
64
+ }
65
+ });
66
+ });
67
+ describe("world_pulse · HMAC chain integrity", () => {
68
+ it("verifyPulseChain reports intact on a clean chain", () => {
69
+ const r = makeRepo();
70
+ try {
71
+ for (let i = 0; i < 5; i++)
72
+ recordPulseEvent(r, { vendor: `v${i}`, color: "green" });
73
+ const v = verifyPulseChain(r);
74
+ expect(v.intact).toBe(true);
75
+ expect(v.firstBrokenIndex).toBe(-1);
76
+ expect(v.checked).toBe(5);
77
+ }
78
+ finally {
79
+ rmSync(r, { recursive: true, force: true });
80
+ }
81
+ });
82
+ it("verifyPulseChain detects tampering (mutated chainHash)", () => {
83
+ const r = makeRepo();
84
+ try {
85
+ recordPulseEvent(r, { vendor: "a", color: "green" });
86
+ recordPulseEvent(r, { vendor: "b", color: "red" });
87
+ recordPulseEvent(r, { vendor: "c", color: "yellow" });
88
+ // Tamper: rewrite line 2's chainHash to something fake.
89
+ const path = join(r, ".mneme", "pulse.jsonl");
90
+ const lines = readFileSync(path, "utf8").trim().split("\n");
91
+ const evil = { ...JSON.parse(lines[1]), chainHash: "XXXXXXXXXXXXXXXXXXXXXX" };
92
+ lines[1] = JSON.stringify(evil);
93
+ writeFileSync(path, lines.join("\n") + "\n", "utf8");
94
+ const v = verifyPulseChain(r);
95
+ expect(v.intact).toBe(false);
96
+ expect(v.firstBrokenIndex).toBeGreaterThanOrEqual(0);
97
+ }
98
+ finally {
99
+ rmSync(r, { recursive: true, force: true });
100
+ }
101
+ });
102
+ });
103
+ describe("world_pulse · aggregate", () => {
104
+ it("windows correctly + bucketises by color / vendor / region", () => {
105
+ const r = makeRepo();
106
+ try {
107
+ const now = Date.now();
108
+ recordPulseEvent(r, { vendor: "claude-ai", color: "green", ts: now - 10_000, regionTimezone: "Asia/Bangkok" });
109
+ recordPulseEvent(r, { vendor: "claude-ai", color: "red", ts: now - 5_000, regionTimezone: "Asia/Bangkok" });
110
+ recordPulseEvent(r, { vendor: "chatgpt", color: "yellow", ts: now - 1_000, regionTimezone: "Europe/London" });
111
+ // Outside the 1-hour window
112
+ recordPulseEvent(r, { vendor: "gemini", color: "green", ts: now - 4 * 3600_000, regionTimezone: "Asia/Tokyo" });
113
+ const events = readPulseEvents(r);
114
+ const agg = aggregatePulse(events, { windowHours: 1 });
115
+ expect(agg.total).toBe(3);
116
+ expect(agg.byColor.green).toBe(1);
117
+ expect(agg.byColor.red).toBe(1);
118
+ expect(agg.byColor.yellow).toBe(1);
119
+ expect(agg.byVendor["claude-ai"].total).toBe(2);
120
+ expect(agg.byVendor["chatgpt"].total).toBe(1);
121
+ expect(agg.byVendor["gemini"]).toBeUndefined();
122
+ expect(agg.byRegion["Asia/Bangkok"]).toBe(2);
123
+ expect(agg.byRegion["Europe/London"]).toBe(1);
124
+ }
125
+ finally {
126
+ rmSync(r, { recursive: true, force: true });
127
+ }
128
+ });
129
+ });
130
+ describe("world_pulse · synthesizePulseEvents", () => {
131
+ it("emits the requested count + realistic shape", () => {
132
+ const stream = synthesizePulseEvents({ count: 100, spanMinutes: 60, seed: 1 });
133
+ expect(stream.length).toBe(100);
134
+ const colors = new Set(stream.map((e) => e.color));
135
+ expect(colors.has("green")).toBe(true);
136
+ // With 100 events + realistic weights we should see at least one red.
137
+ expect(stream.some((e) => e.color === "red")).toBe(true);
138
+ // All events fall inside the requested span (or close to "now").
139
+ const now = Date.now();
140
+ for (const e of stream) {
141
+ expect(now - e.ts).toBeGreaterThanOrEqual(0);
142
+ expect(now - e.ts).toBeLessThan(70 * 60_000);
143
+ }
144
+ // All vendors are the known 6.
145
+ const allowedVendors = new Set(["claude-ai", "chatgpt", "gemini", "copilot", "deepseek", "qwen"]);
146
+ for (const e of stream)
147
+ expect(allowedVendors.has(e.vendor)).toBe(true);
148
+ });
149
+ it("deterministic when seed is fixed", () => {
150
+ const a = synthesizePulseEvents({ count: 30, seed: 7 });
151
+ const b = synthesizePulseEvents({ count: 30, seed: 7 });
152
+ expect(a.map((e) => `${e.ts}|${e.vendor}|${e.color}`).join(","))
153
+ .toBe(b.map((e) => `${e.ts}|${e.vendor}|${e.color}`).join(","));
154
+ });
155
+ });
156
+ describe("world_pulse · privacy invariant", () => {
157
+ it("the PulseEvent shape has NO sentence-text field — privacy by design", () => {
158
+ const r = makeRepo();
159
+ try {
160
+ // Defensive: even if a caller tries to smuggle a `sentence` field
161
+ // through Partial<PulseEvent>, the recorder strips it.
162
+ const evil = { vendor: "x", color: "green", regionTimezone: "Asia/Bangkok", sentence: "secret claim text" };
163
+ const e = recordPulseEvent(r, evil);
164
+ const raw = readFileSync(join(r, ".mneme", "pulse.jsonl"), "utf8");
165
+ expect(raw).not.toContain("secret claim text");
166
+ expect(raw).not.toContain("sentence");
167
+ // Verify the recorded object only contains the documented fields.
168
+ const allowed = new Set(["ts", "vendor", "color", "regionTimezone", "topicHash", "chainHash", "confidence"]);
169
+ for (const key of Object.keys(e))
170
+ expect(allowed.has(key)).toBe(true);
171
+ }
172
+ finally {
173
+ rmSync(r, { recursive: true, force: true });
174
+ }
175
+ });
176
+ });
177
+ //# sourceMappingURL=world_pulse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world_pulse.test.js","sourceRoot":"","sources":["../../src/world_pulse/world_pulse.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "2.19.83",
3
+ "version": "2.19.84",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",