@mneme-ai/core 2.19.27 → 2.19.29

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 (63) hide show
  1. package/dist/autonomic_scheduler/autonomic_scheduler.test.d.ts +2 -0
  2. package/dist/autonomic_scheduler/autonomic_scheduler.test.d.ts.map +1 -0
  3. package/dist/autonomic_scheduler/autonomic_scheduler.test.js +236 -0
  4. package/dist/autonomic_scheduler/autonomic_scheduler.test.js.map +1 -0
  5. package/dist/autonomic_scheduler/index.d.ts +149 -0
  6. package/dist/autonomic_scheduler/index.d.ts.map +1 -0
  7. package/dist/autonomic_scheduler/index.js +249 -0
  8. package/dist/autonomic_scheduler/index.js.map +1 -0
  9. package/dist/circadian/circadian.test.d.ts +2 -0
  10. package/dist/circadian/circadian.test.d.ts.map +1 -0
  11. package/dist/circadian/circadian.test.js +163 -0
  12. package/dist/circadian/circadian.test.js.map +1 -0
  13. package/dist/circadian/index.d.ts +124 -0
  14. package/dist/circadian/index.d.ts.map +1 -0
  15. package/dist/circadian/index.js +269 -0
  16. package/dist/circadian/index.js.map +1 -0
  17. package/dist/cosmic/aurelian_v1928.test.d.ts +2 -0
  18. package/dist/cosmic/aurelian_v1928.test.d.ts.map +1 -0
  19. package/dist/cosmic/aurelian_v1928.test.js +47 -0
  20. package/dist/cosmic/aurelian_v1928.test.js.map +1 -0
  21. package/dist/cosmic/aurelian_v1929.test.d.ts +2 -0
  22. package/dist/cosmic/aurelian_v1929.test.d.ts.map +1 -0
  23. package/dist/cosmic/aurelian_v1929.test.js +61 -0
  24. package/dist/cosmic/aurelian_v1929.test.js.map +1 -0
  25. package/dist/dreamspace_pair/dreamspace_pair.test.js +4 -3
  26. package/dist/dreamspace_pair/dreamspace_pair.test.js.map +1 -1
  27. package/dist/dreamspace_probe/dreamspace_probe.test.js +4 -1
  28. package/dist/dreamspace_probe/dreamspace_probe.test.js.map +1 -1
  29. package/dist/index.d.ts +4 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +6 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/lineage/welcome.d.ts.map +1 -1
  34. package/dist/lineage/welcome.js +15 -1
  35. package/dist/lineage/welcome.js.map +1 -1
  36. package/dist/synapse_fusion/index.d.ts +124 -0
  37. package/dist/synapse_fusion/index.d.ts.map +1 -0
  38. package/dist/synapse_fusion/index.js +0 -0
  39. package/dist/synapse_fusion/index.js.map +1 -0
  40. package/dist/synapse_fusion/synapse_fusion.test.d.ts +2 -0
  41. package/dist/synapse_fusion/synapse_fusion.test.d.ts.map +1 -0
  42. package/dist/synapse_fusion/synapse_fusion.test.js +215 -0
  43. package/dist/synapse_fusion/synapse_fusion.test.js.map +1 -0
  44. package/dist/synapse_genesis/index.d.ts +190 -0
  45. package/dist/synapse_genesis/index.d.ts.map +1 -0
  46. package/dist/synapse_genesis/index.js +334 -0
  47. package/dist/synapse_genesis/index.js.map +1 -0
  48. package/dist/synapse_genesis/synapse_genesis.test.d.ts +2 -0
  49. package/dist/synapse_genesis/synapse_genesis.test.d.ts.map +1 -0
  50. package/dist/synapse_genesis/synapse_genesis.test.js +333 -0
  51. package/dist/synapse_genesis/synapse_genesis.test.js.map +1 -0
  52. package/dist/tribunal/tribunal.d.ts.map +1 -1
  53. package/dist/tribunal/tribunal.js +29 -2
  54. package/dist/tribunal/tribunal.js.map +1 -1
  55. package/dist/tribunal/tribunal.test.js +22 -0
  56. package/dist/tribunal/tribunal.test.js.map +1 -1
  57. package/dist/whats_new.d.ts.map +1 -1
  58. package/dist/whats_new.js +16 -0
  59. package/dist/whats_new.js.map +1 -1
  60. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  61. package/dist/wrapper_genesis/index.js +24 -0
  62. package/dist/wrapper_genesis/index.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,124 @@
1
+ /**
2
+ * v2.19.29 — MNEME SYNAPSE FUSION (Phase C of SYNAPSE GENESIS)
3
+ *
4
+ * "pathway A → B + B → C ที่ cooccur > 80% และ temporalGap < 500ms
5
+ * → merge เป็น super-synapse A → BC parallel. เร่ง 2 calls → 1 fused
6
+ * call → latency ลด 50%."
7
+ * — user mandate, 2026-05-17
8
+ *
9
+ * Diagnosis: v2.19.29 Phase A (HEBBIAN) learns individual (event → tool)
10
+ * synapses. Reality: tools rarely fire alone. Real workflows are
11
+ * sequences (truth.forensic → bug_prophet → apoptosis.detect). Without
12
+ * FUSION, each fires sequentially even when they could run in parallel.
13
+ *
14
+ * FUSION scans recent observation history for ADJACENT pairs (A then B
15
+ * within `temporalGapMs` of each other, cooccurring above
16
+ * `cooccurrenceThreshold` proportion) and proposes FUSED SYNAPSES —
17
+ * chimera entries that fire A + B in parallel when the trigger event
18
+ * recurs.
19
+ *
20
+ * The math is intentionally simple (pure-function, deterministic):
21
+ *
22
+ * for each ordered (A, B) pair in log:
23
+ * observations[A→B] = count of A-then-B within temporalGapMs
24
+ * observations[A→ *] = count of A's total occurrences
25
+ * cooccurrence[A→B] = observations[A→B] / observations[A→*]
26
+ * if cooccurrence > threshold AND observations[A→B] >= minCount:
27
+ * propose FusedSynapse { trigger: A, parallel: [A.tool, B.tool] }
28
+ *
29
+ * Composes onto:
30
+ * - v2.19.29 Phase A SYNAPSE GENESIS (consumes SensedEvent / ToolCall types)
31
+ * - v2.19.26 DREAMSPACE GESTATION (fused synapses become candidate chimeras)
32
+ * - v2.19.9 WRAPPER_GENESPLICING (caller can splice the fusion into a real chimera)
33
+ * - v2.19.28 AUTONOMIC SCHEDULER (fired fusion = single parallel tick)
34
+ *
35
+ * Honest scope:
36
+ * - PURE FUNCTION detector + fusion. Never throws.
37
+ * - HMAC-signed FusionReport for cross-device sync.
38
+ * - 24/7 safe: empty log → empty report; malformed entries dropped silently.
39
+ * - Defensive against: NaN ts, duplicate-same-instant pairs, self-pairs (A→A).
40
+ */
41
+ declare const PROTOCOL_VERSION: 1;
42
+ export interface ObservedToolCall {
43
+ toolName: string;
44
+ ts: number;
45
+ }
46
+ export interface AdjacentPair {
47
+ toolA: string;
48
+ toolB: string;
49
+ cooccurrenceCount: number;
50
+ totalACount: number;
51
+ cooccurrenceRatio: number;
52
+ meanGapMs: number;
53
+ }
54
+ export interface FusedSynapse {
55
+ v: typeof PROTOCOL_VERSION;
56
+ /** Deterministic id: hash of (toolA, toolB). */
57
+ id: string;
58
+ toolA: string;
59
+ toolB: string;
60
+ /** Tools that fire IN PARALLEL when the trigger event recurs. */
61
+ parallel: string[];
62
+ cooccurrenceRatio: number;
63
+ observationCount: number;
64
+ meanGapMs: number;
65
+ /** Estimated speed-up vs sequential (latency_seq - latency_parallel) / latency_seq. */
66
+ estimatedSpeedup: number;
67
+ }
68
+ export interface FusionReport {
69
+ v: typeof PROTOCOL_VERSION;
70
+ totalObservations: number;
71
+ candidatesConsidered: number;
72
+ fusedSynapses: FusedSynapse[];
73
+ builtAt: number;
74
+ thresholdsUsed: {
75
+ temporalGapMs: number;
76
+ cooccurrenceThreshold: number;
77
+ minCount: number;
78
+ };
79
+ sig: string;
80
+ }
81
+ /**
82
+ * Scan an observation log for ADJACENT ordered pairs (A then B within
83
+ * temporalGapMs). Returns all pairs with cooccurrence ratio above the
84
+ * threshold. Pure function; defensive against malformed entries.
85
+ */
86
+ export declare function detectAdjacentPairs(input: {
87
+ log: ObservedToolCall[];
88
+ temporalGapMs?: number;
89
+ cooccurrenceThreshold?: number;
90
+ minCount?: number;
91
+ }): AdjacentPair[];
92
+ /**
93
+ * Build a single FusedSynapse from an AdjacentPair. Deterministic id +
94
+ * estimated speedup (parallel ≈ max(latencyA, latencyB) instead of
95
+ * sum; speedup ≈ 1 - max/sum). For ~equal latencies, speedup → 50%.
96
+ */
97
+ export declare function fuseSynapses(input: {
98
+ pair: AdjacentPair;
99
+ estimatedLatencyA?: number;
100
+ estimatedLatencyB?: number;
101
+ }): FusedSynapse;
102
+ /**
103
+ * Full cycle: scan log → detect pairs → fuse each → HMAC-sign report.
104
+ * One call per FUSION cycle in the daemon (typically during SLEEP_REM phase).
105
+ */
106
+ export declare function runFusionCycle(input: {
107
+ log: ObservedToolCall[];
108
+ temporalGapMs?: number;
109
+ cooccurrenceThreshold?: number;
110
+ minCount?: number;
111
+ estimatedLatencyMs?: number;
112
+ builtAt?: number;
113
+ secret?: string;
114
+ }): FusionReport;
115
+ export declare function verifyFusionReport(r: FusionReport, secret?: string): boolean;
116
+ export declare function formatFusedLine(f: FusedSynapse): string;
117
+ export declare function formatFusionReportLine(r: FusionReport): string;
118
+ export declare const FUSION_TUNABLES: Readonly<{
119
+ DEFAULT_TEMPORAL_GAP_MS: 500;
120
+ DEFAULT_COOCCURRENCE_THRESHOLD: 0.8;
121
+ DEFAULT_MIN_COUNT: 3;
122
+ }>;
123
+ export {};
124
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/synapse_fusion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAKpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;CACb;AA0BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,YAAY,EAAE,CAmDjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,YAAY,CAiBf;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,YAAY,CA0Bf;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAIvD;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAE9D;AAED,eAAO,MAAM,eAAe;;;;EAI1B,CAAC"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/synapse_fusion/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=synapse_fusion.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synapse_fusion.test.d.ts","sourceRoot":"","sources":["../../src/synapse_fusion/synapse_fusion.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,215 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { detectAdjacentPairs, fuseSynapses, runFusionCycle, verifyFusionReport, formatFusedLine, formatFusionReportLine, FUSION_TUNABLES, } from "./index.js";
3
+ const SECRET = "fusion-test-secret-997744";
4
+ function log(...entries) {
5
+ return entries;
6
+ }
7
+ describe("v2.19.29 SYNAPSE FUSION · detectAdjacentPairs", () => {
8
+ it("zero log → empty result (defensive)", () => {
9
+ expect(detectAdjacentPairs({ log: [] })).toEqual([]);
10
+ });
11
+ it("single entry → empty (no pair possible)", () => {
12
+ expect(detectAdjacentPairs({ log: [{ toolName: "a", ts: 1 }] })).toEqual([]);
13
+ });
14
+ it("MEASURED canonical scenario: 4 (A,B) within 500ms + 5 total A → ratio 0.8", () => {
15
+ const obs = [];
16
+ for (let i = 0; i < 5; i++) {
17
+ obs.push({ toolName: "A", ts: i * 1000 });
18
+ if (i < 4)
19
+ obs.push({ toolName: "B", ts: i * 1000 + 100 }); // within 500ms gap
20
+ }
21
+ const pairs = detectAdjacentPairs({ log: obs, minCount: 1 });
22
+ const ab = pairs.find((p) => p.toolA === "A" && p.toolB === "B");
23
+ expect(ab).toBeDefined();
24
+ expect(ab.cooccurrenceRatio).toBeCloseTo(4 / 5, 5);
25
+ });
26
+ it("pairs outside temporalGapMs window are NOT counted", () => {
27
+ const obs = [];
28
+ for (let i = 0; i < 5; i++) {
29
+ obs.push({ toolName: "A", ts: i * 1000 });
30
+ obs.push({ toolName: "B", ts: i * 1000 + 600 }); // beyond 500ms gap
31
+ }
32
+ const pairs = detectAdjacentPairs({ log: obs, temporalGapMs: 500, minCount: 1 });
33
+ expect(pairs.find((p) => p.toolA === "A" && p.toolB === "B")).toBeUndefined();
34
+ });
35
+ it("self-pairs (A→A) excluded", () => {
36
+ const obs = [];
37
+ for (let i = 0; i < 10; i++)
38
+ obs.push({ toolName: "A", ts: i * 100 });
39
+ const pairs = detectAdjacentPairs({ log: obs, minCount: 1 });
40
+ expect(pairs.find((p) => p.toolA === p.toolB)).toBeUndefined();
41
+ });
42
+ it("A→B and B→A are DIFFERENT pairs (ordered direction matters)", () => {
43
+ // 4 iterations of A → B → A — A appears 8 times; B appears 4 times.
44
+ // A→B happens 4 times (4/8 ratio = 0.5); B→A happens 4 times (4/4 ratio = 1.0).
45
+ // With cooccurrenceThreshold lowered to 0.3, BOTH must surface as distinct pairs.
46
+ const obs = [];
47
+ for (let i = 0; i < 4; i++) {
48
+ obs.push({ toolName: "A", ts: i * 1000 });
49
+ obs.push({ toolName: "B", ts: i * 1000 + 100 });
50
+ obs.push({ toolName: "A", ts: i * 1000 + 200 });
51
+ }
52
+ const pairs = detectAdjacentPairs({ log: obs, minCount: 1, cooccurrenceThreshold: 0.3 });
53
+ const ab = pairs.find((p) => p.toolA === "A" && p.toolB === "B");
54
+ const ba = pairs.find((p) => p.toolA === "B" && p.toolB === "A");
55
+ expect(ab).toBeDefined();
56
+ expect(ba).toBeDefined();
57
+ expect(ab.cooccurrenceRatio).not.toBe(ba.cooccurrenceRatio); // distinct directions
58
+ });
59
+ it("cooccurrenceThreshold filters low-confidence pairs", () => {
60
+ const obs = [];
61
+ for (let i = 0; i < 10; i++) {
62
+ obs.push({ toolName: "A", ts: i * 1000 });
63
+ if (i < 3)
64
+ obs.push({ toolName: "B", ts: i * 1000 + 100 }); // 3/10 = 0.3 ratio
65
+ }
66
+ const strict = detectAdjacentPairs({ log: obs, cooccurrenceThreshold: 0.8, minCount: 1 });
67
+ expect(strict.find((p) => p.toolA === "A" && p.toolB === "B")).toBeUndefined();
68
+ const loose = detectAdjacentPairs({ log: obs, cooccurrenceThreshold: 0.1, minCount: 1 });
69
+ expect(loose.find((p) => p.toolA === "A" && p.toolB === "B")).toBeDefined();
70
+ });
71
+ it("minCount filters infrequent pairs (anti-noise)", () => {
72
+ const obs = [
73
+ { toolName: "A", ts: 0 }, { toolName: "B", ts: 100 },
74
+ { toolName: "A", ts: 1000 }, { toolName: "B", ts: 1100 },
75
+ ];
76
+ const strict = detectAdjacentPairs({ log: obs, minCount: 5, cooccurrenceThreshold: 0 });
77
+ expect(strict.length).toBe(0);
78
+ const loose = detectAdjacentPairs({ log: obs, minCount: 1, cooccurrenceThreshold: 0 });
79
+ expect(loose.length).toBeGreaterThan(0);
80
+ });
81
+ it("meanGapMs reflects actual temporal gaps", () => {
82
+ const obs = [];
83
+ for (let i = 0; i < 4; i++) {
84
+ obs.push({ toolName: "A", ts: i * 1000 });
85
+ obs.push({ toolName: "B", ts: i * 1000 + 100 });
86
+ }
87
+ const pairs = detectAdjacentPairs({ log: obs, minCount: 1 });
88
+ const ab = pairs.find((p) => p.toolA === "A" && p.toolB === "B");
89
+ expect(ab.meanGapMs).toBeCloseTo(100, 0);
90
+ });
91
+ it("DEFENSIVE: NaN ts entries dropped silently", () => {
92
+ const obs = [
93
+ { toolName: "A", ts: 0 }, { toolName: "B", ts: 100 },
94
+ { toolName: "BAD", ts: NaN },
95
+ { toolName: "A", ts: 1000 }, { toolName: "B", ts: 1100 },
96
+ ];
97
+ const pairs = detectAdjacentPairs({ log: obs, minCount: 1 });
98
+ expect(pairs.find((p) => p.toolA === "BAD")).toBeUndefined();
99
+ expect(pairs.find((p) => p.toolA === "A" && p.toolB === "B")).toBeDefined();
100
+ });
101
+ it("DEFENSIVE: empty toolName entries dropped silently", () => {
102
+ const obs = [
103
+ { toolName: "", ts: 0 },
104
+ { toolName: "B", ts: 100 },
105
+ ];
106
+ expect(detectAdjacentPairs({ log: obs, minCount: 1 })).toEqual([]);
107
+ });
108
+ });
109
+ describe("v2.19.29 SYNAPSE FUSION · fuseSynapses", () => {
110
+ it("equal latencies → ~50% speedup", () => {
111
+ const f = fuseSynapses({
112
+ pair: { toolA: "A", toolB: "B", cooccurrenceCount: 5, totalACount: 5, cooccurrenceRatio: 1, meanGapMs: 100 },
113
+ estimatedLatencyA: 100,
114
+ estimatedLatencyB: 100,
115
+ });
116
+ expect(f.estimatedSpeedup).toBeCloseTo(0.5, 2);
117
+ expect(f.parallel).toEqual(["A", "B"]);
118
+ });
119
+ it("very different latencies → speedup approaches min(A,B)/sum", () => {
120
+ const f = fuseSynapses({
121
+ pair: { toolA: "fast", toolB: "slow", cooccurrenceCount: 5, totalACount: 5, cooccurrenceRatio: 1, meanGapMs: 100 },
122
+ estimatedLatencyA: 10,
123
+ estimatedLatencyB: 1000,
124
+ });
125
+ // seq=1010, par=1000, speedup = 10/1010 ≈ 0.01
126
+ expect(f.estimatedSpeedup).toBeCloseTo(10 / 1010, 3);
127
+ });
128
+ it("deterministic id from (toolA, toolB)", () => {
129
+ const f1 = fuseSynapses({ pair: { toolA: "x", toolB: "y", cooccurrenceCount: 1, totalACount: 1, cooccurrenceRatio: 1, meanGapMs: 0 } });
130
+ const f2 = fuseSynapses({ pair: { toolA: "x", toolB: "y", cooccurrenceCount: 99, totalACount: 100, cooccurrenceRatio: 0.99, meanGapMs: 50 } });
131
+ expect(f1.id).toBe(f2.id);
132
+ });
133
+ });
134
+ describe("v2.19.29 SYNAPSE FUSION · runFusionCycle (full loop)", () => {
135
+ it("empty log → zero fused synapses", () => {
136
+ const r = runFusionCycle({ log: [], builtAt: 0, secret: SECRET });
137
+ expect(r.fusedSynapses).toEqual([]);
138
+ expect(r.totalObservations).toBe(0);
139
+ });
140
+ it("HMAC sig verifies; rejects tamper", () => {
141
+ const obs = [];
142
+ for (let i = 0; i < 4; i++) {
143
+ obs.push({ toolName: "A", ts: i * 1000 });
144
+ obs.push({ toolName: "B", ts: i * 1000 + 100 });
145
+ }
146
+ const r = runFusionCycle({ log: obs, minCount: 1, builtAt: 0, secret: SECRET });
147
+ expect(verifyFusionReport(r, SECRET)).toBe(true);
148
+ expect(verifyFusionReport({ ...r, totalObservations: 999 }, SECRET)).toBe(false);
149
+ });
150
+ it("MEASURED 100% determinism: same log → same sig (30 trials)", () => {
151
+ const obs = [];
152
+ for (let i = 0; i < 5; i++) {
153
+ obs.push({ toolName: "A", ts: i * 1000 });
154
+ obs.push({ toolName: "B", ts: i * 1000 + 100 });
155
+ }
156
+ const first = runFusionCycle({ log: obs, minCount: 1, builtAt: 1_000_000, secret: SECRET }).sig;
157
+ let allEqual = true;
158
+ for (let i = 0; i < 30; i++) {
159
+ if (runFusionCycle({ log: obs, minCount: 1, builtAt: 1_000_000, secret: SECRET }).sig !== first) {
160
+ allEqual = false;
161
+ break;
162
+ }
163
+ }
164
+ expect(allEqual).toBe(true);
165
+ });
166
+ it("real-world scenario: truth.forensic → bug_prophet → apoptosis.detect chain", () => {
167
+ const obs = [];
168
+ // Simulate 5 commits each triggering the 3-tool chain
169
+ for (let i = 0; i < 5; i++) {
170
+ const base = i * 10_000;
171
+ obs.push({ toolName: "mneme.truth.forensic", ts: base });
172
+ obs.push({ toolName: "mneme.bug_prophet.prophesy", ts: base + 50 });
173
+ obs.push({ toolName: "mneme.apoptosis.detect", ts: base + 200 });
174
+ }
175
+ const r = runFusionCycle({ log: obs, minCount: 1, builtAt: 0, secret: SECRET });
176
+ // We expect 2 ordered pairs to fuse: forensic→prophesy, prophesy→detect
177
+ const fp = r.fusedSynapses.find((f) => f.toolA === "mneme.truth.forensic" && f.toolB === "mneme.bug_prophet.prophesy");
178
+ const pa = r.fusedSynapses.find((f) => f.toolA === "mneme.bug_prophet.prophesy" && f.toolB === "mneme.apoptosis.detect");
179
+ expect(fp).toBeDefined();
180
+ expect(pa).toBeDefined();
181
+ expect(fp.cooccurrenceRatio).toBe(1.0);
182
+ expect(pa.cooccurrenceRatio).toBe(1.0);
183
+ });
184
+ });
185
+ describe("v2.19.29 SYNAPSE FUSION · formatters + tunables", () => {
186
+ it("formatFusedLine + formatFusionReportLine produce one-line digests", () => {
187
+ const pair = { toolA: "A", toolB: "B", cooccurrenceCount: 5, totalACount: 5, cooccurrenceRatio: 1, meanGapMs: 100 };
188
+ const f = fuseSynapses({ pair });
189
+ expect(formatFusedLine(f)).toContain("FUSED");
190
+ const r = runFusionCycle({ log: [], builtAt: 0, secret: SECRET });
191
+ expect(formatFusionReportLine(r)).toContain("FUSION");
192
+ });
193
+ it("FUSION_TUNABLES exposed for AI introspection (frozen)", () => {
194
+ expect(Object.isFrozen(FUSION_TUNABLES)).toBe(true);
195
+ expect(FUSION_TUNABLES.DEFAULT_TEMPORAL_GAP_MS).toBe(500);
196
+ expect(FUSION_TUNABLES.DEFAULT_COOCCURRENCE_THRESHOLD).toBe(0.8);
197
+ });
198
+ });
199
+ describe("v2.19.29 SYNAPSE FUSION · 24/7 invariants", () => {
200
+ it("MEASURED never crashes on 500 random observations", () => {
201
+ const obs = [];
202
+ for (let i = 0; i < 500; i++) {
203
+ obs.push({ toolName: `tool_${i % 7}`, ts: i * 100 });
204
+ }
205
+ let crashed = false;
206
+ try {
207
+ runFusionCycle({ log: obs, minCount: 2, builtAt: 0, secret: SECRET });
208
+ }
209
+ catch {
210
+ crashed = true;
211
+ }
212
+ expect(crashed).toBe(false);
213
+ });
214
+ });
215
+ //# sourceMappingURL=synapse_fusion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synapse_fusion.test.js","sourceRoot":"","sources":["../../src/synapse_fusion/synapse_fusion.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * v2.19.29 — MNEME SYNAPSE GENESIS · HEBBIAN ENGINE (Phase A of SYNAPSE GENESIS)
3
+ *
4
+ * "autonomic ไม่ใช่ 'scheduler เขียนให้ครอบทุก case' — เป็น 'scheduler
5
+ * ที่ เรียน จากทุก case + โต ตลอดเวลา'. Static = limited by author.
6
+ * Genesis = unlimited by definition."
7
+ * — user mandate, 2026-05-17
8
+ *
9
+ * Diagnosis: v2.19.28 AUTONOMIC SCHEDULER ticks 5 organs on hand-coded
10
+ * intervals (breath every 60s, sleep every 30min idle, etc). That is
11
+ * STATIC — every case must be authored in advance. v2.19.29 ships the
12
+ * GENESIS layer: a Hebbian synapse table that grows itself from every
13
+ * observed (event, tool, satisfaction) triple.
14
+ *
15
+ * Hebbian rule (neurons that fire together wire together):
16
+ * weight[s] += satisfaction === "positive" ? 1.0 : -0.5
17
+ * weight[s] *= 0.999 (slow Ebbinghaus decay per tick)
18
+ * if weight[s] > FIRE_THRESHOLD AND !permanent[s]:
19
+ * permanent[s] = true // pathway BORN — autonomic from now on
20
+ *
21
+ * Cold-start safe: first observation establishes a synapse at weight 1.0.
22
+ * Hot-loop safe: every operation is pure-function + HMAC-signed + bounded
23
+ * in O(synapses) time + clamped to [-MAX_WEIGHT, MAX_WEIGHT].
24
+ *
25
+ * Composes onto:
26
+ * - v2.19.28 AUTONOMIC SCHEDULER (synapse fires REPLACE static schedules
27
+ * as the catalog matures; scheduler asks "what should fire now?"
28
+ * and synapse table answers based on learned patterns)
29
+ * - v2.19.22 REFLEX (pheromone trail is the OBSERVATION source)
30
+ * - v2.19.25 SLEEP TRAINING (jaccard fitness loop feeds satisfaction)
31
+ * - v2.19.26 DREAMSPACE (novel events become DREAMSPACE proposals)
32
+ *
33
+ * Honest scope (every claim verifiable at runtime):
34
+ * - PURE FUNCTION reinforceSynapse + decideFire + queryPathways.
35
+ * - HMAC-chained SynapseStore so tampered weights refuse to fire.
36
+ * - Defensive at every boundary: NaN guards, weight clamps, empty-store
37
+ * handling, malformed-event handling. Never throws on bad input.
38
+ * - 24/7 always-active by construction: even with zero observations,
39
+ * decideFire returns "no_synapse_yet" gracefully (never crashes).
40
+ */
41
+ declare const PROTOCOL_VERSION: 1;
42
+ export type Satisfaction = "positive" | "negative" | "neutral";
43
+ export interface SensedEvent {
44
+ /** Stable event signature (caller computes; e.g., hash of git+file+phase). */
45
+ pattern: string;
46
+ /** Optional structured context for audit. */
47
+ context?: Record<string, unknown>;
48
+ ts: number;
49
+ }
50
+ export interface ToolCall {
51
+ toolName: string;
52
+ args?: Record<string, unknown>;
53
+ ts: number;
54
+ }
55
+ export interface SynapseWeight {
56
+ /** Composite key: `${eventPattern}::${toolName}`. */
57
+ key: string;
58
+ eventPattern: string;
59
+ toolName: string;
60
+ /** Current synaptic weight after decay + reinforcement. */
61
+ weight: number;
62
+ /** Total observations contributing to this weight (positive + negative). */
63
+ observationCount: number;
64
+ /** Most recent observation ts (for decay computation). */
65
+ lastObservedAtMs: number;
66
+ /** Weight at which synapse became permanent (0 if not permanent). */
67
+ permanentSinceWeight: number;
68
+ /** True once weight crosses FIRE_THRESHOLD — never reverts even if weight decays. */
69
+ permanent: boolean;
70
+ }
71
+ export interface SynapseStore {
72
+ v: typeof PROTOCOL_VERSION;
73
+ /** Linear list keyed by composite key — easy to serialise. */
74
+ weights: SynapseWeight[];
75
+ /** Last tick time used for global decay; null on fresh store. */
76
+ lastDecayedAtMs: number | null;
77
+ /** HMAC of (sorted weights + lastDecayedAtMs); tampered stores refuse to fire. */
78
+ sig: string;
79
+ }
80
+ /** Stable composite key for synapse lookup; collision-free over distinct (pattern, tool). */
81
+ export declare function synapseKey(eventPattern: string, toolName: string): string;
82
+ export declare function emptySynapseStore(secret?: string): SynapseStore;
83
+ export declare function verifyStore(store: SynapseStore, secret?: string): boolean;
84
+ export interface ReinforceInput {
85
+ store: SynapseStore;
86
+ event: SensedEvent;
87
+ toolCall: ToolCall;
88
+ satisfaction: Satisfaction;
89
+ nowMs?: number;
90
+ secret?: string;
91
+ }
92
+ export interface ReinforceOutput {
93
+ store: SynapseStore;
94
+ synapseKey: string;
95
+ /** True if this observation created a new synapse (cold-start path). */
96
+ born: boolean;
97
+ /** True if this observation crossed FIRE_THRESHOLD for the first time. */
98
+ becamePermanent: boolean;
99
+ /** Updated weight after reinforcement + decay. */
100
+ newWeight: number;
101
+ }
102
+ /**
103
+ * The Hebbian rule made executable. Defensive at every boundary:
104
+ * - malformed event/tool (empty strings) → no-op (returns store unchanged)
105
+ * - NaN weight → clamped to 0 before update
106
+ * - weight > MAX_WEIGHT → clamped (no runaway)
107
+ * - permanent flag never reverts even if weight decays back below threshold
108
+ */
109
+ export declare function reinforceSynapse(input: ReinforceInput): ReinforceOutput;
110
+ export type FireDecisionReason = "permanent_pathway" | "above_threshold_growing" | "below_threshold_juvenile" | "no_synapse_yet" | "tampered_store" | "pruned_dead";
111
+ export interface FireDecision {
112
+ v: typeof PROTOCOL_VERSION;
113
+ shouldFire: boolean;
114
+ reason: FireDecisionReason;
115
+ weight: number;
116
+ permanent: boolean;
117
+ details: string;
118
+ }
119
+ /**
120
+ * Pure decision: given the synapse store + event pattern + tool name,
121
+ * should this synapse fire RIGHT NOW? Never throws. Tampered store returns
122
+ * `shouldFire: false` with reason `tampered_store` (fail-safe).
123
+ *
124
+ * Priority:
125
+ * 1. tampered store → no fire
126
+ * 2. no synapse for this (pattern, tool) → no fire (will become DREAMSPACE candidate)
127
+ * 3. pruned (|weight| < PRUNE_THRESHOLD) → no fire
128
+ * 4. permanent → fire
129
+ * 5. weight >= FIRE_THRESHOLD AND not yet permanent → fire (will mark permanent on next reinforce)
130
+ * 6. else → juvenile; no fire yet
131
+ */
132
+ export declare function decideFire(input: {
133
+ store: SynapseStore;
134
+ eventPattern: string;
135
+ toolName: string;
136
+ secret?: string;
137
+ }): FireDecision;
138
+ export interface PathwayPrediction {
139
+ toolName: string;
140
+ weight: number;
141
+ permanent: boolean;
142
+ observationCount: number;
143
+ /** Confidence proxy: weight / (max weight in result set). */
144
+ relativeConfidence: number;
145
+ }
146
+ /**
147
+ * Returns all known synapses keyed by (eventPattern, *) sorted by weight desc.
148
+ * REFLEX / SCHEDULER call this to discover "what should I pre-execute for this event?"
149
+ *
150
+ * Defensive: empty store + unknown pattern → empty array. Never throws.
151
+ */
152
+ export declare function queryPathways(input: {
153
+ store: SynapseStore;
154
+ eventPattern: string;
155
+ topN?: number;
156
+ includeNegative?: boolean;
157
+ }): PathwayPrediction[];
158
+ export interface PruneOutput {
159
+ store: SynapseStore;
160
+ prunedCount: number;
161
+ remainingCount: number;
162
+ }
163
+ /** Remove synapses with |weight| < PRUNE_THRESHOLD. Permanent synapses NEVER pruned. */
164
+ export declare function pruneStore(input: {
165
+ store: SynapseStore;
166
+ secret?: string;
167
+ }): PruneOutput;
168
+ export interface SynapseStats {
169
+ totalSynapses: number;
170
+ permanentSynapses: number;
171
+ juvenileSynapses: number;
172
+ prunableSynapses: number;
173
+ totalObservations: number;
174
+ averageWeight: number;
175
+ maxWeight: number;
176
+ oldestLastObservedMs: number | null;
177
+ }
178
+ export declare function computeStats(store: SynapseStore): SynapseStats;
179
+ export declare function formatStatsLine(s: SynapseStats): string;
180
+ export declare function formatFireLine(d: FireDecision): string;
181
+ export declare const SYNAPSE_TUNABLES: Readonly<{
182
+ POSITIVE_REINFORCEMENT: 1;
183
+ NEGATIVE_REINFORCEMENT: -0.5;
184
+ DECAY_PER_TICK: 0.999;
185
+ FIRE_THRESHOLD: 5;
186
+ MAX_WEIGHT: 100;
187
+ PRUNE_THRESHOLD: 0.01;
188
+ }>;
189
+ export {};
190
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/synapse_genesis/index.ts"],"names":[],"mappings":"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"}