@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.
- package/dist/autonomic_scheduler/autonomic_scheduler.test.d.ts +2 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.d.ts.map +1 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.js +236 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.js.map +1 -0
- package/dist/autonomic_scheduler/index.d.ts +149 -0
- package/dist/autonomic_scheduler/index.d.ts.map +1 -0
- package/dist/autonomic_scheduler/index.js +249 -0
- package/dist/autonomic_scheduler/index.js.map +1 -0
- package/dist/circadian/circadian.test.d.ts +2 -0
- package/dist/circadian/circadian.test.d.ts.map +1 -0
- package/dist/circadian/circadian.test.js +163 -0
- package/dist/circadian/circadian.test.js.map +1 -0
- package/dist/circadian/index.d.ts +124 -0
- package/dist/circadian/index.d.ts.map +1 -0
- package/dist/circadian/index.js +269 -0
- package/dist/circadian/index.js.map +1 -0
- package/dist/cosmic/aurelian_v1928.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1928.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1928.test.js +47 -0
- package/dist/cosmic/aurelian_v1928.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1929.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1929.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1929.test.js +61 -0
- package/dist/cosmic/aurelian_v1929.test.js.map +1 -0
- package/dist/dreamspace_pair/dreamspace_pair.test.js +4 -3
- package/dist/dreamspace_pair/dreamspace_pair.test.js.map +1 -1
- package/dist/dreamspace_probe/dreamspace_probe.test.js +4 -1
- package/dist/dreamspace_probe/dreamspace_probe.test.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/lineage/welcome.d.ts.map +1 -1
- package/dist/lineage/welcome.js +15 -1
- package/dist/lineage/welcome.js.map +1 -1
- package/dist/synapse_fusion/index.d.ts +124 -0
- package/dist/synapse_fusion/index.d.ts.map +1 -0
- package/dist/synapse_fusion/index.js +0 -0
- package/dist/synapse_fusion/index.js.map +1 -0
- package/dist/synapse_fusion/synapse_fusion.test.d.ts +2 -0
- package/dist/synapse_fusion/synapse_fusion.test.d.ts.map +1 -0
- package/dist/synapse_fusion/synapse_fusion.test.js +215 -0
- package/dist/synapse_fusion/synapse_fusion.test.js.map +1 -0
- package/dist/synapse_genesis/index.d.ts +190 -0
- package/dist/synapse_genesis/index.d.ts.map +1 -0
- package/dist/synapse_genesis/index.js +334 -0
- package/dist/synapse_genesis/index.js.map +1 -0
- package/dist/synapse_genesis/synapse_genesis.test.d.ts +2 -0
- package/dist/synapse_genesis/synapse_genesis.test.d.ts.map +1 -0
- package/dist/synapse_genesis/synapse_genesis.test.js +333 -0
- package/dist/synapse_genesis/synapse_genesis.test.js.map +1 -0
- package/dist/tribunal/tribunal.d.ts.map +1 -1
- package/dist/tribunal/tribunal.js +29 -2
- package/dist/tribunal/tribunal.js.map +1 -1
- package/dist/tribunal/tribunal.test.js +22 -0
- package/dist/tribunal/tribunal.test.js.map +1 -1
- 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 +24 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- 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 @@
|
|
|
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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"}
|