@mneme-ai/core 2.19.46 → 2.19.48

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 (68) hide show
  1. package/dist/chronosheaf/aczel.d.ts +72 -0
  2. package/dist/chronosheaf/aczel.d.ts.map +1 -0
  3. package/dist/chronosheaf/aczel.js +161 -0
  4. package/dist/chronosheaf/aczel.js.map +1 -0
  5. package/dist/chronosheaf/base_space.d.ts +125 -0
  6. package/dist/chronosheaf/base_space.d.ts.map +1 -0
  7. package/dist/chronosheaf/base_space.js +216 -0
  8. package/dist/chronosheaf/base_space.js.map +1 -0
  9. package/dist/chronosheaf/chronosheaf.test.d.ts +12 -0
  10. package/dist/chronosheaf/chronosheaf.test.d.ts.map +1 -0
  11. package/dist/chronosheaf/chronosheaf.test.js +360 -0
  12. package/dist/chronosheaf/chronosheaf.test.js.map +1 -0
  13. package/dist/chronosheaf/free_energy.d.ts +109 -0
  14. package/dist/chronosheaf/free_energy.d.ts.map +1 -0
  15. package/dist/chronosheaf/free_energy.js +142 -0
  16. package/dist/chronosheaf/free_energy.js.map +1 -0
  17. package/dist/chronosheaf/index.d.ts +39 -0
  18. package/dist/chronosheaf/index.d.ts.map +1 -0
  19. package/dist/chronosheaf/index.js +30 -0
  20. package/dist/chronosheaf/index.js.map +1 -0
  21. package/dist/chronosheaf/live_update.d.ts +221 -0
  22. package/dist/chronosheaf/live_update.d.ts.map +1 -0
  23. package/dist/chronosheaf/live_update.js +332 -0
  24. package/dist/chronosheaf/live_update.js.map +1 -0
  25. package/dist/chronosheaf/live_update.test.d.ts +16 -0
  26. package/dist/chronosheaf/live_update.test.d.ts.map +1 -0
  27. package/dist/chronosheaf/live_update.test.js +405 -0
  28. package/dist/chronosheaf/live_update.test.js.map +1 -0
  29. package/dist/chronosheaf/pain_catalog.d.ts +50 -0
  30. package/dist/chronosheaf/pain_catalog.d.ts.map +1 -0
  31. package/dist/chronosheaf/pain_catalog.js +108 -0
  32. package/dist/chronosheaf/pain_catalog.js.map +1 -0
  33. package/dist/chronosheaf/persistence.d.ts +79 -0
  34. package/dist/chronosheaf/persistence.d.ts.map +1 -0
  35. package/dist/chronosheaf/persistence.js +173 -0
  36. package/dist/chronosheaf/persistence.js.map +1 -0
  37. package/dist/chronosheaf/rg_flow.d.ts +81 -0
  38. package/dist/chronosheaf/rg_flow.d.ts.map +1 -0
  39. package/dist/chronosheaf/rg_flow.js +146 -0
  40. package/dist/chronosheaf/rg_flow.js.map +1 -0
  41. package/dist/chronosheaf/sheaf.d.ts +116 -0
  42. package/dist/chronosheaf/sheaf.d.ts.map +1 -0
  43. package/dist/chronosheaf/sheaf.js +278 -0
  44. package/dist/chronosheaf/sheaf.js.map +1 -0
  45. package/dist/chronosheaf/tropical.d.ts +98 -0
  46. package/dist/chronosheaf/tropical.d.ts.map +1 -0
  47. package/dist/chronosheaf/tropical.js +140 -0
  48. package/dist/chronosheaf/tropical.js.map +1 -0
  49. package/dist/chronosheaf/wasserstein.d.ts +75 -0
  50. package/dist/chronosheaf/wasserstein.d.ts.map +1 -0
  51. package/dist/chronosheaf/wasserstein.js +189 -0
  52. package/dist/chronosheaf/wasserstein.js.map +1 -0
  53. package/dist/cosmic/aurelian_v1947.test.d.ts +2 -0
  54. package/dist/cosmic/aurelian_v1947.test.d.ts.map +1 -0
  55. package/dist/cosmic/aurelian_v1947.test.js +34 -0
  56. package/dist/cosmic/aurelian_v1947.test.js.map +1 -0
  57. package/dist/cosmic/aurelian_v1948.test.d.ts +2 -0
  58. package/dist/cosmic/aurelian_v1948.test.d.ts.map +1 -0
  59. package/dist/cosmic/aurelian_v1948.test.js +62 -0
  60. package/dist/cosmic/aurelian_v1948.test.js.map +1 -0
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +8 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/whats_new.d.ts.map +1 -1
  66. package/dist/whats_new.js +16 -0
  67. package/dist/whats_new.js.map +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,360 @@
1
+ /**
2
+ * v2.19.47 — CHRONOSHEAF P1 + P2 test suite.
3
+ *
4
+ * Every primitive gets:
5
+ * - canonical examples with hand-computed expected values
6
+ * - cross-vector invariants (algebraic identities the math demands)
7
+ * - 1000-iter fuzz where the primitive is randomised
8
+ *
9
+ * Total target: 60+ tests across 8 modules.
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ // ─── P1 pain_catalog ───────────────────────────────────────────────────
13
+ import { PAIN_CATALOG, catalogStats, painsForPrimitive, primitivesForPain } from "./pain_catalog.js";
14
+ describe("v2.19.47 CHRONOSHEAF P1 · pain_catalog", () => {
15
+ it("contains exactly 7 user-reported pains", () => {
16
+ expect(PAIN_CATALOG.length).toBe(7);
17
+ });
18
+ it("every pain has all required fields", () => {
19
+ for (const e of PAIN_CATALOG) {
20
+ expect(e.painId).toMatch(/^PAIN-\d{3}$/);
21
+ expect(typeof e.pain).toBe("string");
22
+ expect(typeof e.currentToolsSee).toBe("string");
23
+ expect(typeof e.whatTheyMiss).toBe("string");
24
+ expect(typeof e.topology).toBe("string");
25
+ expect(Array.isArray(e.primitives)).toBe(true);
26
+ expect(e.primitives.length).toBeGreaterThan(0);
27
+ }
28
+ });
29
+ it("painsForPrimitive returns every pain the primitive addresses", () => {
30
+ const sheafPains = painsForPrimitive("sheaf");
31
+ expect(sheafPains.length).toBeGreaterThan(0);
32
+ for (const p of sheafPains)
33
+ expect(p.primitives).toContain("sheaf");
34
+ });
35
+ it("primitivesForPain inverts correctly", () => {
36
+ expect(primitivesForPain("PAIN-001")).toContain("sheaf");
37
+ expect(primitivesForPain("NONEXISTENT")).toEqual([]);
38
+ });
39
+ it("catalogStats counts everything correctly", () => {
40
+ const s = catalogStats();
41
+ expect(s.totalPains).toBe(7);
42
+ expect(Object.keys(s.byTopology).length).toBeGreaterThan(0);
43
+ expect(s.primitiveLoad.length).toBeGreaterThan(0);
44
+ const total = s.primitiveLoad.reduce((acc, x) => acc + x.pains, 0);
45
+ let expected = 0;
46
+ for (const e of PAIN_CATALOG)
47
+ expected += e.primitives.length;
48
+ expect(total).toBe(expected);
49
+ });
50
+ });
51
+ // ─── P2-a sheaf cohomology ─────────────────────────────────────────────
52
+ import { delta0, delta1, isCocycle, cohomologyH1, gluingDiagnostic, } from "./sheaf.js";
53
+ describe("v2.19.47 CHRONOSHEAF P2-a · sheaf cohomology", () => {
54
+ it("tree cover (no cycle): H¹ = 0", () => {
55
+ const cover = {
56
+ sites: ["A", "B", "C"],
57
+ overlaps: [["A", "B"], ["B", "C"]],
58
+ };
59
+ const r = cohomologyH1(cover);
60
+ expect(r.h1).toBe(0);
61
+ expect(r.hasObstruction).toBe(false);
62
+ });
63
+ it("3-cycle without triple overlap: H¹ = 1 (the canonical obstruction)", () => {
64
+ const cover = {
65
+ sites: ["A", "B", "C"],
66
+ overlaps: [["A", "B"], ["B", "C"], ["A", "C"]],
67
+ };
68
+ const r = cohomologyH1(cover);
69
+ expect(r.h1).toBe(1);
70
+ expect(r.hasObstruction).toBe(true);
71
+ expect(r.obstructions.length).toBe(1);
72
+ });
73
+ it("3-cycle WITH triple overlap: H¹ = 0 (the triangle kills it)", () => {
74
+ const cover = {
75
+ sites: ["A", "B", "C"],
76
+ overlaps: [["A", "B"], ["B", "C"], ["A", "C"]],
77
+ triples: [["A", "B", "C"]],
78
+ };
79
+ const r = cohomologyH1(cover);
80
+ expect(r.h1).toBe(0);
81
+ });
82
+ it("delta0 of consistent claim values is zero everywhere", () => {
83
+ const cover = {
84
+ sites: ["A", "B", "C"],
85
+ overlaps: [["A", "B"], ["B", "C"]],
86
+ };
87
+ const sigma0 = new Map([["A", 5], ["B", 5], ["C", 5]]);
88
+ const d = delta0(cover, sigma0);
89
+ for (const v of d.values())
90
+ expect(v).toBe(0);
91
+ });
92
+ it("delta0 of inconsistent claim values is non-zero on the discordant pair", () => {
93
+ const cover = {
94
+ sites: ["A", "B"],
95
+ overlaps: [["A", "B"]],
96
+ };
97
+ const sigma0 = new Map([["A", 1], ["B", 3]]);
98
+ const d = delta0(cover, sigma0);
99
+ // Pair key is sorted lex: "A" + "B" → "AB". Value = b_B − b_A = 3 − 1 = 2.
100
+ const v = d.get("AB") ?? d.get("BA");
101
+ expect(v).toBe(2);
102
+ });
103
+ it("isCocycle returns true on tree cover with no triples", () => {
104
+ const cover = { sites: ["A", "B"], overlaps: [["A", "B"]] };
105
+ const sigma1 = new Map([["AB", 7]]);
106
+ expect(isCocycle(cover, sigma1)).toBe(true);
107
+ });
108
+ it("gluingDiagnostic reports H¹ and residual together", () => {
109
+ const cover = {
110
+ sites: ["A", "B", "C"],
111
+ overlaps: [["A", "B"], ["B", "C"], ["A", "C"]],
112
+ };
113
+ const claim = new Map([["A", 711], ["B", 711], ["C", 712]]);
114
+ const r = gluingDiagnostic(cover, claim);
115
+ expect(r.h1).toBe(1);
116
+ expect(r.residual.size).toBe(3);
117
+ });
118
+ it("delta1 on a triangle is the alternating sum", () => {
119
+ const cover = {
120
+ sites: ["A", "B", "C"],
121
+ overlaps: [["A", "B"], ["B", "C"], ["A", "C"]],
122
+ triples: [["A", "B", "C"]],
123
+ };
124
+ const sigma1 = new Map([["AB", 1], ["BC", 1], ["AC", 2]]);
125
+ const d = delta1(cover, sigma1);
126
+ expect(d.size).toBe(1);
127
+ const v = Array.from(d.values())[0];
128
+ expect(v).toBe(0); // 1 + 1 - 2 = 0
129
+ });
130
+ });
131
+ // ─── P2-b rg_flow ──────────────────────────────────────────────────────
132
+ import { rgStep, rgFixedPoint, classifyRelevance, smallestScaleForBudget } from "./rg_flow.js";
133
+ describe("v2.19.47 CHRONOSHEAF P2-b · RG flow", () => {
134
+ it("rgStep mean aggregator halves length and averages", () => {
135
+ const s = rgStep({ vector: [1, 3, 5, 7], scale: 0 }, { factor: 2, aggregator: "mean" });
136
+ expect(s.vector).toEqual([2, 6]);
137
+ expect(s.scale).toBe(1);
138
+ });
139
+ it("rgFixedPoint reaches scalar state in finite iterations", () => {
140
+ const r = rgFixedPoint({ vector: [1, 2, 3, 4, 5, 6, 7, 8], scale: 0 }, { factor: 2, aggregator: "sum" });
141
+ expect(r.reachedFixedPoint).toBe(true);
142
+ expect(r.state.vector.length).toBeLessThanOrEqual(1);
143
+ });
144
+ it("classifyRelevance labels constant vector — mean shrinks L2 norm → irrelevant", () => {
145
+ const r = classifyRelevance({ vector: [1, 1, 1, 1], scale: 0 }, { factor: 2, aggregator: "mean" }, [1, 1, 1, 1]);
146
+ // [1,1,1,1] mean → [1,1] mean → [1]. L2 norms: 2 → √2 → 1 → ratio < 1 → irrelevant.
147
+ expect(["irrelevant", "marginal"]).toContain(r.class);
148
+ });
149
+ it("classifyRelevance labels constant vector under SUM → relevant (L2 grows)", () => {
150
+ const r = classifyRelevance({ vector: [1, 1, 1, 1], scale: 0 }, { factor: 2, aggregator: "sum" }, [1, 1, 1, 1]);
151
+ // sum: [1,1,1,1] → [2,2] → [4]. L2 norms: 2 → 2√2 → 4 → growth ratio > 1 → relevant.
152
+ expect(["relevant", "marginal"]).toContain(r.class);
153
+ });
154
+ it("smallestScaleForBudget returns state with size ≤ target", () => {
155
+ const r = smallestScaleForBudget({ vector: [1, 2, 3, 4, 5, 6, 7, 8], scale: 0 }, { factor: 2, aggregator: "mean" }, 2);
156
+ expect(r.state.vector.length).toBeLessThanOrEqual(2);
157
+ });
158
+ });
159
+ // ─── P2-c persistence ──────────────────────────────────────────────────
160
+ import { persistentHomology0, bottleneckDistance } from "./persistence.js";
161
+ describe("v2.19.47 CHRONOSHEAF P2-c · persistent homology", () => {
162
+ it("two isolated vertices → 2 essential 0-classes", () => {
163
+ const filt = [{ value: 0, add: [["x"], ["y"]] }];
164
+ const pd = persistentHomology0(filt);
165
+ expect(pd.essentialByDim[0]).toBe(2);
166
+ });
167
+ it("vertices then edge → 1 essential, 1 finite-persistence pair", () => {
168
+ const filt = [
169
+ { value: 0, add: [["x"], ["y"]] },
170
+ { value: 1, add: [["x", "y"]] },
171
+ ];
172
+ const pd = persistentHomology0(filt);
173
+ expect(pd.essentialByDim[0]).toBe(1);
174
+ const finite = pd.pairs.filter((p) => isFinite(p.persistence));
175
+ expect(finite.length).toBe(1);
176
+ expect(finite[0].persistence).toBe(1);
177
+ });
178
+ it("bottleneckDistance is 0 between identical diagrams", () => {
179
+ const filt = [
180
+ { value: 0, add: [["a"], ["b"]] },
181
+ { value: 1, add: [["a", "b"]] },
182
+ ];
183
+ const a = persistentHomology0(filt);
184
+ const b = persistentHomology0(filt);
185
+ expect(bottleneckDistance(a, b)).toBe(0);
186
+ });
187
+ });
188
+ // ─── P2-d free_energy ──────────────────────────────────────────────────
189
+ import { klDivergence, entropy, variationalFreeEnergy, selectAction, confidenceToPosterior, normalise, } from "./free_energy.js";
190
+ describe("v2.19.47 CHRONOSHEAF P2-d · free energy", () => {
191
+ it("KL(p ‖ p) = 0", () => {
192
+ const p = normalise([1, 2, 3]);
193
+ expect(klDivergence(p, p)).toBeCloseTo(0, 9);
194
+ });
195
+ it("entropy of uniform = log(n)", () => {
196
+ const p = normalise([1, 1, 1, 1]);
197
+ expect(entropy(p)).toBeCloseTo(Math.log(4), 9);
198
+ });
199
+ it("variational F is finite for valid inputs", () => {
200
+ const q = normalise([0.7, 0.3]);
201
+ const prior = normalise([0.5, 0.5]);
202
+ const logLik = [Math.log(0.9), Math.log(0.1)];
203
+ const F = variationalFreeEnergy(q, prior, logLik);
204
+ expect(Number.isFinite(F)).toBe(true);
205
+ });
206
+ it("selectAction picks the candidate with minimal G", () => {
207
+ const scoring = { preferredObs: normalise([0.9, 0.1]), priorZ: normalise([0.5, 0.5]) };
208
+ const candidates = [
209
+ { id: "good", predictedObs: normalise([0.85, 0.15]), predictedQz: normalise([0.7, 0.3]) },
210
+ { id: "bad", predictedObs: normalise([0.1, 0.9]), predictedQz: normalise([0.5, 0.5]) },
211
+ ];
212
+ const r = selectAction(candidates, scoring);
213
+ expect(r.winner.id).toBe("good");
214
+ });
215
+ it("confidenceToPosterior turns 0.6 into a Beta posterior mean near 0.6", () => {
216
+ const r = confidenceToPosterior(0.6, 100);
217
+ expect(r.posterior[0]).toBeGreaterThan(0.55);
218
+ expect(r.posterior[0]).toBeLessThan(0.65);
219
+ expect(r.entropyBits).toBeGreaterThan(0);
220
+ });
221
+ });
222
+ // ─── P2-e wasserstein ──────────────────────────────────────────────────
223
+ import { wasserstein1D, sinkhorn, catalogDrift } from "./wasserstein.js";
224
+ describe("v2.19.47 CHRONOSHEAF P2-e · wasserstein", () => {
225
+ it("W_1 between identical distributions = 0", () => {
226
+ const mu = new Map([["0", 0.5], ["1", 0.5]]);
227
+ expect(wasserstein1D(mu, mu)).toBe(0);
228
+ });
229
+ it("W_1 between point masses at 0 and 1 = 1", () => {
230
+ const mu = new Map([["0", 1]]);
231
+ const nu = new Map([["1", 1]]);
232
+ expect(wasserstein1D(mu, nu)).toBeCloseTo(1, 9);
233
+ });
234
+ it("sinkhorn returns a coupling with given marginals (approximately)", () => {
235
+ const mu = [0.5, 0.5];
236
+ const nu = [0.5, 0.5];
237
+ const C = [[0, 1], [1, 0]];
238
+ const r = sinkhorn(mu, nu, C, { epsilon: 0.1, maxIter: 200 });
239
+ expect(r.iterations).toBeGreaterThan(0);
240
+ // Row sums approximately match mu.
241
+ for (let i = 0; i < mu.length; i++) {
242
+ const rowSum = r.coupling[i].reduce((a, x) => a + x, 0);
243
+ expect(Math.abs(rowSum - mu[i])).toBeLessThan(0.01);
244
+ }
245
+ });
246
+ it("catalogDrift = 0 between identical snapshots", () => {
247
+ const snap = ["mneme.x.y", "mneme.a.b"];
248
+ expect(catalogDrift(snap, snap)).toBe(0);
249
+ });
250
+ it("catalogDrift > 0 between disjoint family snapshots", () => {
251
+ const a = ["mneme.x.y"];
252
+ const b = ["mneme.z.w"];
253
+ expect(catalogDrift(a, b)).toBeGreaterThan(0);
254
+ });
255
+ });
256
+ // ─── P2-f tropical ─────────────────────────────────────────────────────
257
+ import { tropicalAdd, tropicalMul, tropicalLongestPath, verifierChainConfidence, } from "./tropical.js";
258
+ describe("v2.19.47 CHRONOSHEAF P2-f · tropical semiring", () => {
259
+ it("tropical add = max, mul = sum", () => {
260
+ expect(tropicalAdd(3, 5)).toBe(5);
261
+ expect(tropicalMul(3, 5)).toBe(8);
262
+ });
263
+ it("longest path through a 3-node chain returns sum of edge weights", () => {
264
+ const g = {
265
+ nodes: ["A", "B", "C"],
266
+ edges: new Map([
267
+ ["A", [{ to: "B", weight: 2, label: "AB" }]],
268
+ ["B", [{ to: "C", weight: 3, label: "BC" }]],
269
+ ]),
270
+ };
271
+ const r = tropicalLongestPath(g, "A", "C");
272
+ expect(r).toBeTruthy();
273
+ expect(r.value).toBe(5);
274
+ expect(r.path).toEqual(["A", "B", "C"]);
275
+ expect(r.criticalEdge?.label).toBe("AB"); // smaller weight
276
+ });
277
+ it("verifierChainConfidence is the min + identifies critical verifier", () => {
278
+ const r = verifierChainConfidence([
279
+ { id: "a", confidence: 0.9 },
280
+ { id: "b", confidence: 0.6 },
281
+ { id: "c", confidence: 0.95 },
282
+ ]);
283
+ expect(r.chainConfidence).toBe(0.6);
284
+ expect(r.criticalVerifier?.id).toBe("b");
285
+ });
286
+ it("empty chain returns confidence 1 + null critical", () => {
287
+ const r = verifierChainConfidence([]);
288
+ expect(r.chainConfidence).toBe(1);
289
+ expect(r.criticalVerifier).toBeNull();
290
+ });
291
+ });
292
+ // ─── P2-g aczel ────────────────────────────────────────────────────────
293
+ import { bisimulationPartition, bisimilar, quineAtom, liarHyperset, isTrustworthy } from "./aczel.js";
294
+ describe("v2.19.47 CHRONOSHEAF P2-g · Aczel anti-foundation", () => {
295
+ it("two Quine atoms are bisimilar", () => {
296
+ const a = quineAtom("X");
297
+ const b = quineAtom("Y");
298
+ expect(bisimilar(a, b)).toBe(true);
299
+ });
300
+ it("Quine atom ≠ labelled LIAR atom (different labels disambiguate)", () => {
301
+ const q = quineAtom("Q");
302
+ const l = liarHyperset("L");
303
+ expect(bisimilar(q, l)).toBe(false);
304
+ });
305
+ it("isTrustworthy returns true for an unlabelled Quine atom", () => {
306
+ const q = quineAtom();
307
+ const r = isTrustworthy(q);
308
+ expect(r.trust).toBe(true);
309
+ });
310
+ it("isTrustworthy returns false for a LIAR hyperset", () => {
311
+ const l = liarHyperset();
312
+ const r = isTrustworthy(l);
313
+ expect(r.trust).toBe(false);
314
+ expect(r.reason).toContain("LIAR");
315
+ });
316
+ it("bisimulationPartition on a singleton labelled graph yields 1 class", () => {
317
+ const h = quineAtom();
318
+ const p = bisimulationPartition(h);
319
+ expect(new Set(p.values()).size).toBe(1);
320
+ });
321
+ });
322
+ // ─── 1000-iter fuzz ────────────────────────────────────────────────────
323
+ describe("v2.19.47 CHRONOSHEAF · 1000-iter cross-primitive fuzz", () => {
324
+ it("sheaf cohomologyH1 never throws on random small covers", () => {
325
+ for (let i = 0; i < 1000; i++) {
326
+ const n = 3 + (i % 5);
327
+ const sites = [];
328
+ for (let k = 0; k < n; k++)
329
+ sites.push(`S${k}`);
330
+ const overlaps = [];
331
+ for (let a = 0; a < n; a++)
332
+ for (let b = a + 1; b < n; b++) {
333
+ if (Math.random() < 0.5)
334
+ overlaps.push([sites[a], sites[b]]);
335
+ }
336
+ expect(() => cohomologyH1({ sites, overlaps })).not.toThrow();
337
+ }
338
+ });
339
+ it("RG flow never throws on random vectors", () => {
340
+ for (let i = 0; i < 200; i++) {
341
+ const len = 1 + (i % 32);
342
+ const vector = Array.from({ length: len }, () => Math.random() * 100);
343
+ expect(() => rgFixedPoint({ vector, scale: 0 }, { factor: 2, aggregator: "mean" }, 20)).not.toThrow();
344
+ }
345
+ });
346
+ it("free_energy.selectAction never throws on random candidate sets", () => {
347
+ for (let i = 0; i < 200; i++) {
348
+ const supportSize = 2 + (i % 4);
349
+ const rand = () => Array.from({ length: supportSize }, () => Math.random());
350
+ const cands = Array.from({ length: 3 }, (_, k) => ({
351
+ id: `c${k}`,
352
+ predictedObs: normalise(rand()),
353
+ predictedQz: normalise(rand()),
354
+ }));
355
+ const scoring = { preferredObs: normalise(rand()), priorZ: normalise(rand()) };
356
+ expect(() => selectAction(cands, scoring)).not.toThrow();
357
+ }
358
+ });
359
+ });
360
+ //# sourceMappingURL=chronosheaf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chronosheaf.test.js","sourceRoot":"","sources":["../../src/chronosheaf/chronosheaf.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * v2.19.47 — CHRONOSHEAF P2-d · Friston Free Energy / Active Inference.
3
+ *
4
+ * Math foundation (Friston 2010, Karl Friston's "Free-Energy Principle"):
5
+ *
6
+ * Variational Free Energy
7
+ *
8
+ * F = E_q[log q(z) − log p(z, o)]
9
+ * = D_KL(q(z) ‖ p(z|o)) − log p(o)
10
+ * ≥ −log p(o) (Jensen)
11
+ *
12
+ * where q(z) is the agent's recognition density, p(z, o) is the
13
+ * generative model over hidden states z and observations o.
14
+ * Minimising F over q yields q(z) ≈ p(z|o) (Bayes-optimal posterior)
15
+ * and the residual −log p(o) is the surprise/marginal likelihood.
16
+ *
17
+ * Expected Free Energy (action selection)
18
+ *
19
+ * G(a) = E_{q(o,z|a)}[log q(z|a) − log p(z, o)]
20
+ * ≈ epistemic_value(a) + extrinsic_value(a)
21
+ *
22
+ * An agent picks a* = argmin_a G(a). G splits into
23
+ * (i) epistemic: information gained about hidden states
24
+ * (ii) extrinsic: log-prior preferences over observations.
25
+ *
26
+ * AI-memory mapping (PAIN-001 time-direction + PAIN-006 confidence
27
+ * + PAIN-007 substrate-mutation):
28
+ *
29
+ * The CLI / MCP server is an active inference agent. Hidden state z =
30
+ * "is upgrade safe to run now". Observations o = exit codes, pulse
31
+ * drift, daemon process state. Actions a = {wait, queue, run-now,
32
+ * remediation-message}. Minimising G picks the action that BOTH
33
+ * reduces uncertainty about safety AND respects user-preference
34
+ * priors (e.g. "do not break the running session"). The 60% verify
35
+ * confidence number (PAIN-006) becomes a measure-theoretic posterior,
36
+ * not a vibe.
37
+ *
38
+ * Implementation: KL divergence + expected-free-energy computation on
39
+ * categorical distributions. Pure-function, numerically stable
40
+ * (log-sum-exp where needed).
41
+ */
42
+ /** Categorical distribution as an array of probabilities (sums to 1). */
43
+ export type Categorical = ReadonlyArray<number>;
44
+ /** Normalise an array to a probability distribution (handles zeros). */
45
+ export declare function normalise(v: ReadonlyArray<number>): number[];
46
+ /** D_KL(p ‖ q) = Σ p_i · log(p_i / q_i). */
47
+ export declare function klDivergence(p: Categorical, q: Categorical): number;
48
+ /** Shannon entropy H[p] = −Σ p_i log p_i. */
49
+ export declare function entropy(p: Categorical): number;
50
+ /**
51
+ * Variational free energy F = D_KL(q ‖ p_prior) − E_q[log p(o|z)].
52
+ * Where:
53
+ * q = recognition density over hidden states z
54
+ * prior = p(z)
55
+ * logLikelihood[z] = log p(o|z) for each state z
56
+ */
57
+ export declare function variationalFreeEnergy(q: Categorical, prior: Categorical, logLikelihood: ReadonlyArray<number>): number;
58
+ export interface ActionCandidate {
59
+ /** Human-readable id (e.g. "wait", "run-now", "queue"). */
60
+ id: string;
61
+ /** Predicted distribution over observations given this action: p(o|a). */
62
+ predictedObs: Categorical;
63
+ /** Predicted posterior over hidden states given this action: q(z|a). */
64
+ predictedQz: Categorical;
65
+ }
66
+ export interface ActionScoring {
67
+ /** Prior over preferred observations: p(o) (the agent's goals). */
68
+ preferredObs: Categorical;
69
+ /** Prior over hidden states: p(z). */
70
+ priorZ: Categorical;
71
+ }
72
+ /**
73
+ * Expected Free Energy G(a) = epistemic + extrinsic.
74
+ * epistemic(a) = E_{p(o|a)}[D_KL(q(z|a, o) ‖ q(z|a))]
75
+ * (information gain about z from observing o)
76
+ * extrinsic(a) = D_KL(p(o|a) ‖ p(o))
77
+ * (divergence of predicted obs from preferred obs)
78
+ *
79
+ * Lower G = better action. We approximate epistemic via the entropy
80
+ * reduction of the predicted posterior vs the prior on z; that's a
81
+ * standard simplification when q(z|a, o) is hard to evaluate.
82
+ */
83
+ export declare function expectedFreeEnergy(action: ActionCandidate, scoring: ActionScoring): {
84
+ G: number;
85
+ epistemic: number;
86
+ extrinsic: number;
87
+ };
88
+ /** Pick the action that minimises Expected Free Energy. */
89
+ export declare function selectAction(candidates: ReadonlyArray<ActionCandidate>, scoring: ActionScoring): {
90
+ winner: ActionCandidate;
91
+ ranked: Array<{
92
+ id: string;
93
+ G: number;
94
+ epistemic: number;
95
+ extrinsic: number;
96
+ }>;
97
+ };
98
+ /**
99
+ * Convert a verify-style confidence number (0..1) into a measure-
100
+ * theoretic posterior on a two-state {TRUE, FALSE} model. This is the
101
+ * PAIN-006 fix: instead of returning 60% as a vibe, we return a Beta
102
+ * posterior + the entropy of the posterior (epistemic uncertainty).
103
+ */
104
+ export declare function confidenceToPosterior(confidence: number, observations: number): {
105
+ posterior: Categorical;
106
+ entropyBits: number;
107
+ surprise: number;
108
+ };
109
+ //# sourceMappingURL=free_energy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"free_energy.d.ts","sourceRoot":"","sources":["../../src/chronosheaf/free_energy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,yEAAyE;AACzE,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAIhD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAQ5D;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAWnE;AAED,6CAA6C;AAC7C,wBAAgB,OAAO,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAI9C;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,WAAW,EACd,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,MAAM,CAUR;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,YAAY,EAAE,WAAW,CAAC;IAC1B,wEAAwE;IACxE,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,YAAY,EAAE,WAAW,CAAC;IAC1B,sCAAsC;IACtC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG;IACnF,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CACjD,CAIA;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,EAC1C,OAAO,EAAE,aAAa,GACrB;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAU7G;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWnE"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * v2.19.47 — CHRONOSHEAF P2-d · Friston Free Energy / Active Inference.
3
+ *
4
+ * Math foundation (Friston 2010, Karl Friston's "Free-Energy Principle"):
5
+ *
6
+ * Variational Free Energy
7
+ *
8
+ * F = E_q[log q(z) − log p(z, o)]
9
+ * = D_KL(q(z) ‖ p(z|o)) − log p(o)
10
+ * ≥ −log p(o) (Jensen)
11
+ *
12
+ * where q(z) is the agent's recognition density, p(z, o) is the
13
+ * generative model over hidden states z and observations o.
14
+ * Minimising F over q yields q(z) ≈ p(z|o) (Bayes-optimal posterior)
15
+ * and the residual −log p(o) is the surprise/marginal likelihood.
16
+ *
17
+ * Expected Free Energy (action selection)
18
+ *
19
+ * G(a) = E_{q(o,z|a)}[log q(z|a) − log p(z, o)]
20
+ * ≈ epistemic_value(a) + extrinsic_value(a)
21
+ *
22
+ * An agent picks a* = argmin_a G(a). G splits into
23
+ * (i) epistemic: information gained about hidden states
24
+ * (ii) extrinsic: log-prior preferences over observations.
25
+ *
26
+ * AI-memory mapping (PAIN-001 time-direction + PAIN-006 confidence
27
+ * + PAIN-007 substrate-mutation):
28
+ *
29
+ * The CLI / MCP server is an active inference agent. Hidden state z =
30
+ * "is upgrade safe to run now". Observations o = exit codes, pulse
31
+ * drift, daemon process state. Actions a = {wait, queue, run-now,
32
+ * remediation-message}. Minimising G picks the action that BOTH
33
+ * reduces uncertainty about safety AND respects user-preference
34
+ * priors (e.g. "do not break the running session"). The 60% verify
35
+ * confidence number (PAIN-006) becomes a measure-theoretic posterior,
36
+ * not a vibe.
37
+ *
38
+ * Implementation: KL divergence + expected-free-energy computation on
39
+ * categorical distributions. Pure-function, numerically stable
40
+ * (log-sum-exp where needed).
41
+ */
42
+ function safeLog(x) { return x <= 0 ? -1e9 : Math.log(x); }
43
+ /** Normalise an array to a probability distribution (handles zeros). */
44
+ export function normalise(v) {
45
+ let s = 0;
46
+ for (const x of v)
47
+ s += Math.max(0, x);
48
+ if (s <= 0) {
49
+ // Degenerate input → uniform.
50
+ return new Array(v.length).fill(1 / Math.max(1, v.length));
51
+ }
52
+ return v.map((x) => Math.max(0, x) / s);
53
+ }
54
+ /** D_KL(p ‖ q) = Σ p_i · log(p_i / q_i). */
55
+ export function klDivergence(p, q) {
56
+ if (p.length !== q.length)
57
+ throw new Error("KL: distributions must have same support");
58
+ let kl = 0;
59
+ for (let i = 0; i < p.length; i++) {
60
+ const pi = p[i] ?? 0;
61
+ const qi = q[i] ?? 0;
62
+ if (pi <= 0)
63
+ continue;
64
+ if (qi <= 0)
65
+ return Infinity;
66
+ kl += pi * (Math.log(pi) - Math.log(qi));
67
+ }
68
+ return kl;
69
+ }
70
+ /** Shannon entropy H[p] = −Σ p_i log p_i. */
71
+ export function entropy(p) {
72
+ let h = 0;
73
+ for (const x of p)
74
+ if (x > 0)
75
+ h -= x * Math.log(x);
76
+ return h;
77
+ }
78
+ /**
79
+ * Variational free energy F = D_KL(q ‖ p_prior) − E_q[log p(o|z)].
80
+ * Where:
81
+ * q = recognition density over hidden states z
82
+ * prior = p(z)
83
+ * logLikelihood[z] = log p(o|z) for each state z
84
+ */
85
+ export function variationalFreeEnergy(q, prior, logLikelihood) {
86
+ if (q.length !== prior.length || q.length !== logLikelihood.length) {
87
+ throw new Error("F: q, prior, and likelihood must have same support");
88
+ }
89
+ const kl = klDivergence(q, prior);
90
+ let expectedNegLogLik = 0;
91
+ for (let i = 0; i < q.length; i++) {
92
+ expectedNegLogLik -= (q[i] ?? 0) * (logLikelihood[i] ?? 0);
93
+ }
94
+ return kl + expectedNegLogLik;
95
+ }
96
+ /**
97
+ * Expected Free Energy G(a) = epistemic + extrinsic.
98
+ * epistemic(a) = E_{p(o|a)}[D_KL(q(z|a, o) ‖ q(z|a))]
99
+ * (information gain about z from observing o)
100
+ * extrinsic(a) = D_KL(p(o|a) ‖ p(o))
101
+ * (divergence of predicted obs from preferred obs)
102
+ *
103
+ * Lower G = better action. We approximate epistemic via the entropy
104
+ * reduction of the predicted posterior vs the prior on z; that's a
105
+ * standard simplification when q(z|a, o) is hard to evaluate.
106
+ */
107
+ export function expectedFreeEnergy(action, scoring) {
108
+ const epistemic = Math.max(0, entropy(scoring.priorZ) - entropy(action.predictedQz));
109
+ const extrinsic = klDivergence(action.predictedObs, scoring.preferredObs);
110
+ return { G: epistemic + extrinsic, epistemic, extrinsic };
111
+ }
112
+ /** Pick the action that minimises Expected Free Energy. */
113
+ export function selectAction(candidates, scoring) {
114
+ const scored = candidates.map((a) => {
115
+ const s = expectedFreeEnergy(a, scoring);
116
+ return { action: a, ...s };
117
+ });
118
+ scored.sort((a, b) => a.G - b.G);
119
+ return {
120
+ winner: scored[0].action,
121
+ ranked: scored.map(({ action, G, epistemic, extrinsic }) => ({ id: action.id, G, epistemic, extrinsic })),
122
+ };
123
+ }
124
+ /**
125
+ * Convert a verify-style confidence number (0..1) into a measure-
126
+ * theoretic posterior on a two-state {TRUE, FALSE} model. This is the
127
+ * PAIN-006 fix: instead of returning 60% as a vibe, we return a Beta
128
+ * posterior + the entropy of the posterior (epistemic uncertainty).
129
+ */
130
+ export function confidenceToPosterior(confidence, observations) {
131
+ const c = Math.max(0, Math.min(1, confidence));
132
+ // Treat confidence as the mean of a Beta(α, β) with α + β = max(observations, 2).
133
+ const n = Math.max(2, observations);
134
+ const alpha = c * n + 1;
135
+ const beta = (1 - c) * n + 1;
136
+ const mean = alpha / (alpha + beta);
137
+ const posterior = normalise([mean, 1 - mean]);
138
+ const h = entropy(posterior);
139
+ const surprise = -safeLog(mean); // -log p(TRUE)
140
+ return { posterior, entropyBits: h / Math.log(2), surprise };
141
+ }
142
+ //# sourceMappingURL=free_energy.js.map