@mneme-ai/core 2.19.83-lite → 2.19.84-lite

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-lite",
3
+ "version": "2.19.84-lite",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme — LITE variant (no bundled WASM embedder, no native deps).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",