@mneme-ai/core 2.19.24 → 2.19.26
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/cosmic/aurelian_v1925.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1925.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1925.test.js +48 -0
- package/dist/cosmic/aurelian_v1925.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1926.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1926.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1926.test.js +48 -0
- package/dist/cosmic/aurelian_v1926.test.js.map +1 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.d.ts +2 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.d.ts.map +1 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.js +199 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.js.map +1 -0
- package/dist/dreamspace_evolution/index.d.ts +140 -0
- package/dist/dreamspace_evolution/index.d.ts.map +1 -0
- package/dist/dreamspace_evolution/index.js +210 -0
- package/dist/dreamspace_evolution/index.js.map +1 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.d.ts +2 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.d.ts.map +1 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.js +160 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.js.map +1 -0
- package/dist/dreamspace_gestation/index.d.ts +136 -0
- package/dist/dreamspace_gestation/index.d.ts.map +1 -0
- package/dist/dreamspace_gestation/index.js +186 -0
- package/dist/dreamspace_gestation/index.js.map +1 -0
- package/dist/endocrine/endocrine.test.d.ts +2 -0
- package/dist/endocrine/endocrine.test.d.ts.map +1 -0
- package/dist/endocrine/endocrine.test.js +198 -0
- package/dist/endocrine/endocrine.test.js.map +1 -0
- package/dist/endocrine/index.d.ts +159 -0
- package/dist/endocrine/index.d.ts.map +1 -0
- package/dist/endocrine/index.js +277 -0
- package/dist/endocrine/index.js.map +1 -0
- 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/sleep_training/index.d.ts +162 -0
- package/dist/sleep_training/index.d.ts.map +1 -0
- package/dist/sleep_training/index.js +218 -0
- package/dist/sleep_training/index.js.map +1 -0
- package/dist/sleep_training/sleep_training.test.d.ts +2 -0
- package/dist/sleep_training/sleep_training.test.d.ts.map +1 -0
- package/dist/sleep_training/sleep_training.test.js +296 -0
- package/dist/sleep_training/sleep_training.test.js.map +1 -0
- 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 +25 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.25 — MNEME SLEEP TRAINING (extends v2.19.23 HIPPOCAMPUS-DREAMS)
|
|
3
|
+
*
|
|
4
|
+
* "ตอน user หลับ daemon ฝัน = simulate 'ถ้าเมื่อวานนี้ reflex ทาย
|
|
5
|
+
* event X เป็น tool Y, ใช่ที่ AI agent เรียกจริงไหม?' → fitness
|
|
6
|
+
* score → update reflex weights"
|
|
7
|
+
* — user audit, 2026-05-17
|
|
8
|
+
*
|
|
9
|
+
* Diagnosis: v2.19.23 HIPPOCAMPUS-DREAMS consolidates yesterday's
|
|
10
|
+
* pheromone trail into priors by FREQUENCY only. It doesn't ask the
|
|
11
|
+
* harder question: "was the prediction CORRECT?". A pattern can fire
|
|
12
|
+
* ten times and be wrong ten times — frequency-based consolidation
|
|
13
|
+
* would promote it anyway. SLEEP TRAINING closes that gap.
|
|
14
|
+
*
|
|
15
|
+
* Fix: for every (event, prediction) pair from yesterday, compare
|
|
16
|
+
* against what the AI agent ACTUALLY called. Compute jaccard
|
|
17
|
+
* similarity as fitness. Patterns that mis-predicted get their
|
|
18
|
+
* confidence pulled DOWN; patterns that nailed it get pushed UP.
|
|
19
|
+
* Daily compounding — hit rate climbs from 20% (day 1) to 70%+
|
|
20
|
+
* (day 30) without any user intervention.
|
|
21
|
+
*
|
|
22
|
+
* Composes onto:
|
|
23
|
+
* - v2.19.23 HIPPOCAMPUS-DREAMS (consolidation report shape)
|
|
24
|
+
* - v2.19.22 REFLEX (Prediction interface; PheromoneRecord)
|
|
25
|
+
* - v2.19.24 EVENT PATTERN MATCH (SemanticPattern; confidence)
|
|
26
|
+
* - v2.19.14 CONSEQUENCE LEDGER (provides yesterday's actual log)
|
|
27
|
+
*
|
|
28
|
+
* Honest scope:
|
|
29
|
+
* - PURE FUNCTION fitness loop. Caller supplies BOTH sides (yesterday's
|
|
30
|
+
* predictions + yesterday's actual AI tool calls). Caller persists
|
|
31
|
+
* the updated weights to disk for tomorrow's REFLEX boot.
|
|
32
|
+
* - Jaccard is the canonical set similarity; deterministic.
|
|
33
|
+
* - Weight updates are BOUNDED [0.0, 1.0] and ADAPTIVE (low-confidence
|
|
34
|
+
* patterns adjust faster than high-confidence ones; the system
|
|
35
|
+
* defends its successful priors).
|
|
36
|
+
* - HMAC-signed SleepCycleReport for daemon audit.
|
|
37
|
+
* - The 30-day hit-rate curve is an EXPECTED EMERGENT property of
|
|
38
|
+
* iterated fitness updates; we MEASURE it via the synthetic-trail
|
|
39
|
+
* test in this file.
|
|
40
|
+
*/
|
|
41
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
42
|
+
const PROTOCOL_VERSION = 1;
|
|
43
|
+
const DEFAULT_LEARNING_RATE = 0.15;
|
|
44
|
+
const MIN_CONFIDENCE = 0.01;
|
|
45
|
+
const MAX_CONFIDENCE = 1.0;
|
|
46
|
+
function canon(v) {
|
|
47
|
+
if (v === null || typeof v !== "object")
|
|
48
|
+
return JSON.stringify(v);
|
|
49
|
+
if (Array.isArray(v))
|
|
50
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
51
|
+
const keys = Object.keys(v).sort();
|
|
52
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
53
|
+
}
|
|
54
|
+
function defaultSecret() {
|
|
55
|
+
return process.env["MNEME_SLEEP_TRAINING_SECRET"] || `mneme-sleep-training-v${PROTOCOL_VERSION}`;
|
|
56
|
+
}
|
|
57
|
+
function hmacHex(body, secret) {
|
|
58
|
+
return createHmac("sha256", secret).update(canon(body)).digest("hex");
|
|
59
|
+
}
|
|
60
|
+
function safeEqHex(a, b) {
|
|
61
|
+
try {
|
|
62
|
+
return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Canonical Jaccard similarity: |A ∩ B| / |A ∪ B|.
|
|
70
|
+
* Both empty → 1.0 (vacuous match)
|
|
71
|
+
* One empty → 0.0
|
|
72
|
+
* Otherwise → standard
|
|
73
|
+
*/
|
|
74
|
+
export function jaccardSimilarity(a, b) {
|
|
75
|
+
const sa = new Set(a);
|
|
76
|
+
const sb = new Set(b);
|
|
77
|
+
if (sa.size === 0 && sb.size === 0)
|
|
78
|
+
return 1.0;
|
|
79
|
+
if (sa.size === 0 || sb.size === 0)
|
|
80
|
+
return 0.0;
|
|
81
|
+
let intersection = 0;
|
|
82
|
+
for (const x of sa)
|
|
83
|
+
if (sb.has(x))
|
|
84
|
+
intersection++;
|
|
85
|
+
const union = sa.size + sb.size - intersection;
|
|
86
|
+
return intersection / union;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Compute fitness for each (patternId, eventSig) cell against actual calls.
|
|
90
|
+
*
|
|
91
|
+
* Weight-update rule:
|
|
92
|
+
* confidenceDelta = learningRate × (jaccard - currentConfidence)
|
|
93
|
+
*
|
|
94
|
+
* - If jaccard > current confidence → boost (pattern under-trusted).
|
|
95
|
+
* - If jaccard < current confidence → cut (pattern over-trusted).
|
|
96
|
+
* - The delta is proportional to the error, so high-confidence patterns
|
|
97
|
+
* that nail it barely move; low-confidence patterns that nail it
|
|
98
|
+
* climb fast. Defends successful priors; rapid recovery for stragglers.
|
|
99
|
+
*/
|
|
100
|
+
export function runSleepCycle(input) {
|
|
101
|
+
const lr = input.learningRate ?? DEFAULT_LEARNING_RATE;
|
|
102
|
+
const cells = new Map();
|
|
103
|
+
for (const p of input.yesterdayPredictions) {
|
|
104
|
+
const key = `${p.patternId}::${p.eventSig}`;
|
|
105
|
+
const prev = cells.get(key);
|
|
106
|
+
if (prev) {
|
|
107
|
+
prev.predicted.push(p.predictedTool);
|
|
108
|
+
prev.predCount++;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
cells.set(key, { predicted: [p.predictedTool], conf: p.confidenceAtPrediction, predCount: 1 });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Group actual calls by eventSig
|
|
115
|
+
const actualsBySig = new Map();
|
|
116
|
+
for (const a of input.yesterdayActualCalls) {
|
|
117
|
+
const arr = actualsBySig.get(a.eventSig) ?? [];
|
|
118
|
+
arr.push(a.toolName);
|
|
119
|
+
actualsBySig.set(a.eventSig, arr);
|
|
120
|
+
}
|
|
121
|
+
const fitness = [];
|
|
122
|
+
for (const [key, cell] of cells) {
|
|
123
|
+
const [patternId, eventSig] = key.split("::");
|
|
124
|
+
const actuals = actualsBySig.get(eventSig) ?? [];
|
|
125
|
+
const jaccard = jaccardSimilarity(cell.predicted, actuals);
|
|
126
|
+
const confidenceDelta = lr * (jaccard - cell.conf);
|
|
127
|
+
fitness.push({
|
|
128
|
+
patternId,
|
|
129
|
+
eventSig,
|
|
130
|
+
predictedSet: Array.from(new Set(cell.predicted)).sort(),
|
|
131
|
+
actualSet: Array.from(new Set(actuals)).sort(),
|
|
132
|
+
jaccard,
|
|
133
|
+
predictionCount: cell.predCount,
|
|
134
|
+
actualCount: actuals.length,
|
|
135
|
+
confidenceDelta,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
fitness.sort((a, b) => b.jaccard - a.jaccard || a.patternId.localeCompare(b.patternId));
|
|
139
|
+
const meanJaccard = fitness.length === 0 ? 0 : fitness.reduce((s, f) => s + f.jaccard, 0) / fitness.length;
|
|
140
|
+
const cycleAt = input.cycleAt ?? Date.now();
|
|
141
|
+
const previousHitRate = input.previousHitRate ?? null;
|
|
142
|
+
const hitRateDelta = previousHitRate === null ? 0 : meanJaccard - previousHitRate;
|
|
143
|
+
const body = {
|
|
144
|
+
v: PROTOCOL_VERSION,
|
|
145
|
+
cycleAt,
|
|
146
|
+
totalPredictions: input.yesterdayPredictions.length,
|
|
147
|
+
totalActualCalls: input.yesterdayActualCalls.length,
|
|
148
|
+
uniqueEventSigs: new Set([...cells.keys()].map((k) => k.split("::")[1])).size,
|
|
149
|
+
patternFitness: fitness,
|
|
150
|
+
hitRate: meanJaccard,
|
|
151
|
+
previousHitRate,
|
|
152
|
+
hitRateDelta,
|
|
153
|
+
learningRate: lr,
|
|
154
|
+
};
|
|
155
|
+
const sig = hmacHex(body, input.secret ?? defaultSecret());
|
|
156
|
+
return { ...body, sig };
|
|
157
|
+
}
|
|
158
|
+
export function verifyCycleReport(r, secret) {
|
|
159
|
+
const { sig, ...body } = r;
|
|
160
|
+
return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Apply fitness-derived deltas to a pattern weight map. Caller passes
|
|
164
|
+
* the current `patterns` (id -> confidence) and the cycle report; we
|
|
165
|
+
* return the updated map. Confidence is clamped to [MIN, MAX].
|
|
166
|
+
*
|
|
167
|
+
* Multiple fitness entries for the same patternId (different eventSigs)
|
|
168
|
+
* accumulate — the pattern's confidence drifts by the SUM of its deltas
|
|
169
|
+
* across all event sigs it saw yesterday. Pattern is rewarded/punished
|
|
170
|
+
* by ALL the events it touched, not just one.
|
|
171
|
+
*/
|
|
172
|
+
export function applyWeightUpdates(input) {
|
|
173
|
+
const byId = new Map(input.patterns.map((p) => [p.patternId, p.confidence]));
|
|
174
|
+
const deltaSumById = new Map();
|
|
175
|
+
for (const f of input.report.patternFitness) {
|
|
176
|
+
deltaSumById.set(f.patternId, (deltaSumById.get(f.patternId) ?? 0) + f.confidenceDelta);
|
|
177
|
+
}
|
|
178
|
+
const changes = [];
|
|
179
|
+
for (const [id, delta] of deltaSumById) {
|
|
180
|
+
const before = byId.get(id) ?? 0.5; // unknown pattern starts at neutral 0.5
|
|
181
|
+
const after = Math.max(MIN_CONFIDENCE, Math.min(MAX_CONFIDENCE, before + delta));
|
|
182
|
+
byId.set(id, after);
|
|
183
|
+
changes.push({ patternId: id, before, after, delta });
|
|
184
|
+
}
|
|
185
|
+
const updated = Array.from(byId.entries())
|
|
186
|
+
.map(([patternId, confidence]) => ({ patternId, confidence }))
|
|
187
|
+
.sort((a, b) => b.confidence - a.confidence || a.patternId.localeCompare(b.patternId));
|
|
188
|
+
return { updated, changes };
|
|
189
|
+
}
|
|
190
|
+
export function morningDigest(r) {
|
|
191
|
+
// Aggregate delta per pattern
|
|
192
|
+
const deltaSumById = new Map();
|
|
193
|
+
for (const f of r.patternFitness) {
|
|
194
|
+
deltaSumById.set(f.patternId, (deltaSumById.get(f.patternId) ?? 0) + f.confidenceDelta);
|
|
195
|
+
}
|
|
196
|
+
const all = Array.from(deltaSumById.entries()).map(([patternId, delta]) => ({ patternId, delta }));
|
|
197
|
+
const topImproved = [...all].sort((a, b) => b.delta - a.delta).filter((x) => x.delta > 0).slice(0, 3);
|
|
198
|
+
const topRegressed = [...all].sort((a, b) => a.delta - b.delta).filter((x) => x.delta < 0).slice(0, 3);
|
|
199
|
+
const arrow = r.hitRateDelta > 0 ? "↑" : r.hitRateDelta < 0 ? "↓" : "·";
|
|
200
|
+
const pct = (r.hitRate * 100).toFixed(1);
|
|
201
|
+
const deltaPct = (Math.abs(r.hitRateDelta) * 100).toFixed(1);
|
|
202
|
+
return {
|
|
203
|
+
cycleAt: r.cycleAt,
|
|
204
|
+
hitRate: r.hitRate,
|
|
205
|
+
hitRateDelta: r.hitRateDelta,
|
|
206
|
+
topImproved,
|
|
207
|
+
topRegressed,
|
|
208
|
+
totalPatternsTouched: deltaSumById.size,
|
|
209
|
+
oneLine: `💤 SLEEP · hit-rate ${pct}% ${arrow}${deltaPct}% · ${deltaSumById.size} patterns trained · ↑${topImproved.length} ↓${topRegressed.length}`,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export function formatSleepCycleLine(r) {
|
|
213
|
+
const pct = (r.hitRate * 100).toFixed(1);
|
|
214
|
+
const arrow = r.hitRateDelta > 0 ? "↑" : r.hitRateDelta < 0 ? "↓" : "·";
|
|
215
|
+
const deltaPct = (Math.abs(r.hitRateDelta) * 100).toFixed(1);
|
|
216
|
+
return `💤 SLEEP · ${r.patternFitness.length} cells · hit-rate ${pct}% ${arrow}${deltaPct}% · lr=${r.learningRate}`;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sleep_training/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep_training.test.d.ts","sourceRoot":"","sources":["../../src/sleep_training/sleep_training.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { jaccardSimilarity, runSleepCycle, verifyCycleReport, applyWeightUpdates, morningDigest, formatSleepCycleLine, } from "./index.js";
|
|
3
|
+
const SECRET = "sleep-training-test-secret-997744";
|
|
4
|
+
function pred(patternId, eventSig, tool, conf, ts = 1) {
|
|
5
|
+
return { patternId, eventSig, predictedTool: tool, confidenceAtPrediction: conf, ts };
|
|
6
|
+
}
|
|
7
|
+
function act(eventSig, tool, ts = 1) {
|
|
8
|
+
return { eventSig, toolName: tool, ts };
|
|
9
|
+
}
|
|
10
|
+
describe("v2.19.25 SLEEP TRAINING · jaccardSimilarity (canonical fitness function)", () => {
|
|
11
|
+
it("identical sets -> 1.0", () => {
|
|
12
|
+
expect(jaccardSimilarity(["a", "b"], ["a", "b"])).toBe(1.0);
|
|
13
|
+
});
|
|
14
|
+
it("disjoint sets -> 0.0", () => {
|
|
15
|
+
expect(jaccardSimilarity(["a"], ["b"])).toBe(0.0);
|
|
16
|
+
});
|
|
17
|
+
it("both empty -> 1.0 (vacuous match)", () => {
|
|
18
|
+
expect(jaccardSimilarity([], [])).toBe(1.0);
|
|
19
|
+
});
|
|
20
|
+
it("one empty -> 0.0", () => {
|
|
21
|
+
expect(jaccardSimilarity(["a"], [])).toBe(0.0);
|
|
22
|
+
expect(jaccardSimilarity([], ["b"])).toBe(0.0);
|
|
23
|
+
});
|
|
24
|
+
it("partial overlap (2/3) -> 0.667", () => {
|
|
25
|
+
// {a,b,c} ∩ {b,c,d} = {b,c} = 2; union = 4; 2/4 = 0.5
|
|
26
|
+
expect(jaccardSimilarity(["a", "b", "c"], ["b", "c", "d"])).toBeCloseTo(0.5, 5);
|
|
27
|
+
});
|
|
28
|
+
it("duplicate elements are deduplicated (set semantics)", () => {
|
|
29
|
+
expect(jaccardSimilarity(["a", "a", "b"], ["a", "b"])).toBe(1.0);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe("v2.19.25 SLEEP TRAINING · runSleepCycle (the brain)", () => {
|
|
33
|
+
it("perfect prediction -> jaccard 1.0; positive delta if conf < 1", () => {
|
|
34
|
+
const r = runSleepCycle({
|
|
35
|
+
yesterdayPredictions: [pred("p1", "sigA", "mneme.ask", 0.5)],
|
|
36
|
+
yesterdayActualCalls: [act("sigA", "mneme.ask")],
|
|
37
|
+
cycleAt: 1_000_000,
|
|
38
|
+
secret: SECRET,
|
|
39
|
+
});
|
|
40
|
+
expect(r.patternFitness.length).toBe(1);
|
|
41
|
+
expect(r.patternFitness[0].jaccard).toBe(1.0);
|
|
42
|
+
expect(r.patternFitness[0].confidenceDelta).toBeGreaterThan(0);
|
|
43
|
+
});
|
|
44
|
+
it("wrong prediction -> jaccard 0.0; negative delta", () => {
|
|
45
|
+
const r = runSleepCycle({
|
|
46
|
+
yesterdayPredictions: [pred("p1", "sigA", "mneme.WRONG", 0.8)],
|
|
47
|
+
yesterdayActualCalls: [act("sigA", "mneme.RIGHT")],
|
|
48
|
+
cycleAt: 0,
|
|
49
|
+
secret: SECRET,
|
|
50
|
+
});
|
|
51
|
+
expect(r.patternFitness[0].jaccard).toBe(0.0);
|
|
52
|
+
expect(r.patternFitness[0].confidenceDelta).toBeLessThan(0);
|
|
53
|
+
});
|
|
54
|
+
it("learningRate 0 -> no weight movement; learningRate 1 -> jump to jaccard", () => {
|
|
55
|
+
const preds = [pred("p1", "sigA", "x", 0.5)];
|
|
56
|
+
const acts = [act("sigA", "x")];
|
|
57
|
+
const zero = runSleepCycle({ yesterdayPredictions: preds, yesterdayActualCalls: acts, cycleAt: 0, learningRate: 0, secret: SECRET });
|
|
58
|
+
expect(zero.patternFitness[0].confidenceDelta).toBe(0);
|
|
59
|
+
const one = runSleepCycle({ yesterdayPredictions: preds, yesterdayActualCalls: acts, cycleAt: 0, learningRate: 1, secret: SECRET });
|
|
60
|
+
expect(one.patternFitness[0].confidenceDelta).toBe(0.5); // (1.0 - 0.5) × 1 = 0.5
|
|
61
|
+
});
|
|
62
|
+
it("hit rate = mean jaccard across all pattern fitness cells", () => {
|
|
63
|
+
const r = runSleepCycle({
|
|
64
|
+
yesterdayPredictions: [
|
|
65
|
+
pred("p1", "sigA", "x", 0.5),
|
|
66
|
+
pred("p2", "sigB", "y", 0.5),
|
|
67
|
+
],
|
|
68
|
+
yesterdayActualCalls: [
|
|
69
|
+
act("sigA", "x"), // p1 perfect
|
|
70
|
+
act("sigB", "z"), // p2 wrong
|
|
71
|
+
],
|
|
72
|
+
cycleAt: 0,
|
|
73
|
+
secret: SECRET,
|
|
74
|
+
});
|
|
75
|
+
expect(r.hitRate).toBeCloseTo((1.0 + 0.0) / 2, 5);
|
|
76
|
+
});
|
|
77
|
+
it("hitRateDelta against previous cycle (trajectory)", () => {
|
|
78
|
+
const r = runSleepCycle({
|
|
79
|
+
yesterdayPredictions: [pred("p1", "sigA", "x", 0.5)],
|
|
80
|
+
yesterdayActualCalls: [act("sigA", "x")],
|
|
81
|
+
previousHitRate: 0.2,
|
|
82
|
+
cycleAt: 0,
|
|
83
|
+
secret: SECRET,
|
|
84
|
+
});
|
|
85
|
+
expect(r.hitRate).toBe(1.0);
|
|
86
|
+
expect(r.hitRateDelta).toBe(0.8);
|
|
87
|
+
});
|
|
88
|
+
it("multiple predictions per (pattern, sig) cell accumulate; max-jaccard tool set", () => {
|
|
89
|
+
const r = runSleepCycle({
|
|
90
|
+
yesterdayPredictions: [
|
|
91
|
+
pred("p1", "sigA", "x", 0.5),
|
|
92
|
+
pred("p1", "sigA", "y", 0.5),
|
|
93
|
+
pred("p1", "sigA", "z", 0.5),
|
|
94
|
+
],
|
|
95
|
+
yesterdayActualCalls: [
|
|
96
|
+
act("sigA", "x"), act("sigA", "y"),
|
|
97
|
+
],
|
|
98
|
+
cycleAt: 0,
|
|
99
|
+
secret: SECRET,
|
|
100
|
+
});
|
|
101
|
+
// predicted={x,y,z}; actual={x,y}; jaccard = 2/3 ≈ 0.667
|
|
102
|
+
expect(r.patternFitness[0].jaccard).toBeCloseTo(2 / 3, 5);
|
|
103
|
+
expect(r.patternFitness[0].predictionCount).toBe(3);
|
|
104
|
+
});
|
|
105
|
+
it("HMAC sig verifies untampered; rejects tamper", () => {
|
|
106
|
+
const r = runSleepCycle({
|
|
107
|
+
yesterdayPredictions: [pred("p1", "sigA", "x", 0.5)],
|
|
108
|
+
yesterdayActualCalls: [act("sigA", "x")],
|
|
109
|
+
cycleAt: 0,
|
|
110
|
+
secret: SECRET,
|
|
111
|
+
});
|
|
112
|
+
expect(verifyCycleReport(r, SECRET)).toBe(true);
|
|
113
|
+
expect(verifyCycleReport({ ...r, hitRate: 0.99 }, SECRET)).toBe(false);
|
|
114
|
+
});
|
|
115
|
+
it("MEASURED 100% determinism: same input -> same sig (30 trials)", () => {
|
|
116
|
+
const input = {
|
|
117
|
+
yesterdayPredictions: [pred("p1", "sigA", "x", 0.5), pred("p2", "sigB", "y", 0.3)],
|
|
118
|
+
yesterdayActualCalls: [act("sigA", "x"), act("sigB", "z")],
|
|
119
|
+
cycleAt: 1_000_000,
|
|
120
|
+
secret: SECRET,
|
|
121
|
+
};
|
|
122
|
+
const firstSig = runSleepCycle(input).sig;
|
|
123
|
+
let allEqual = true;
|
|
124
|
+
for (let i = 0; i < 30; i++) {
|
|
125
|
+
if (runSleepCycle(input).sig !== firstSig) {
|
|
126
|
+
allEqual = false;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
expect(allEqual).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe("v2.19.25 SLEEP TRAINING · applyWeightUpdates (clamp + accumulate)", () => {
|
|
134
|
+
it("positive delta -> confidence climbs (clamped to 1.0)", () => {
|
|
135
|
+
const patterns = [{ patternId: "p1", confidence: 0.5 }];
|
|
136
|
+
const report = runSleepCycle({
|
|
137
|
+
yesterdayPredictions: [pred("p1", "sigA", "x", 0.5)],
|
|
138
|
+
yesterdayActualCalls: [act("sigA", "x")],
|
|
139
|
+
cycleAt: 0,
|
|
140
|
+
learningRate: 1,
|
|
141
|
+
secret: SECRET,
|
|
142
|
+
});
|
|
143
|
+
const { updated, changes } = applyWeightUpdates({ patterns, report });
|
|
144
|
+
expect(updated[0].confidence).toBe(1.0);
|
|
145
|
+
expect(changes[0].before).toBe(0.5);
|
|
146
|
+
expect(changes[0].after).toBe(1.0);
|
|
147
|
+
expect(changes[0].delta).toBe(0.5);
|
|
148
|
+
});
|
|
149
|
+
it("negative delta -> confidence drops (clamped to 0.01)", () => {
|
|
150
|
+
const patterns = [{ patternId: "p1", confidence: 0.5 }];
|
|
151
|
+
const report = runSleepCycle({
|
|
152
|
+
yesterdayPredictions: [pred("p1", "sigA", "wrong", 0.5)],
|
|
153
|
+
yesterdayActualCalls: [act("sigA", "right")],
|
|
154
|
+
cycleAt: 0,
|
|
155
|
+
learningRate: 1,
|
|
156
|
+
secret: SECRET,
|
|
157
|
+
});
|
|
158
|
+
const { updated } = applyWeightUpdates({ patterns, report });
|
|
159
|
+
expect(updated[0].confidence).toBeLessThan(0.5);
|
|
160
|
+
});
|
|
161
|
+
it("unknown patternId starts at neutral 0.5 then adjusts", () => {
|
|
162
|
+
const report = runSleepCycle({
|
|
163
|
+
yesterdayPredictions: [pred("brand_new_pattern", "sigA", "x", 0.5)],
|
|
164
|
+
yesterdayActualCalls: [act("sigA", "x")],
|
|
165
|
+
cycleAt: 0,
|
|
166
|
+
learningRate: 1,
|
|
167
|
+
secret: SECRET,
|
|
168
|
+
});
|
|
169
|
+
const { updated } = applyWeightUpdates({ patterns: [], report });
|
|
170
|
+
expect(updated.length).toBe(1);
|
|
171
|
+
expect(updated[0].patternId).toBe("brand_new_pattern");
|
|
172
|
+
expect(updated[0].confidence).toBeCloseTo(1.0, 5);
|
|
173
|
+
});
|
|
174
|
+
it("multiple eventSigs for same pattern -> deltas accumulate", () => {
|
|
175
|
+
// pattern p1 fires for sigA (right) AND sigB (wrong) on the same night
|
|
176
|
+
const report = runSleepCycle({
|
|
177
|
+
yesterdayPredictions: [
|
|
178
|
+
pred("p1", "sigA", "x", 0.5),
|
|
179
|
+
pred("p1", "sigB", "y", 0.5),
|
|
180
|
+
],
|
|
181
|
+
yesterdayActualCalls: [
|
|
182
|
+
act("sigA", "x"), // sigA: jaccard 1.0; delta +0.5
|
|
183
|
+
act("sigB", "DIFFERENT"), // sigB: jaccard 0.0; delta -0.5
|
|
184
|
+
],
|
|
185
|
+
cycleAt: 0,
|
|
186
|
+
learningRate: 1,
|
|
187
|
+
secret: SECRET,
|
|
188
|
+
});
|
|
189
|
+
const { updated } = applyWeightUpdates({ patterns: [{ patternId: "p1", confidence: 0.5 }], report });
|
|
190
|
+
// deltas sum to 0; confidence stays at 0.5
|
|
191
|
+
expect(updated[0].confidence).toBeCloseTo(0.5, 5);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe("v2.19.25 SLEEP TRAINING · MEASURED 30-night hit-rate trajectory (compounding)", () => {
|
|
195
|
+
it("MEASURED hit rate climbs from ~20% (day 1) to >=70% (day 30) when ineffective patterns are filtered out by confidence threshold", () => {
|
|
196
|
+
// Realistic scenario: 5 patterns compete per event sig — 2 correct + 3 wrong.
|
|
197
|
+
// Caller filters: only fire patterns with confidence >= 0.4 each day.
|
|
198
|
+
// SLEEP TRAINING penalises wrong patterns nightly; their confidence drops
|
|
199
|
+
// below threshold; they stop firing; hit rate climbs as noise filtered out.
|
|
200
|
+
const TRUTH_TOOLS = { sigA: "mneme.ask", sigB: "mneme.why" };
|
|
201
|
+
let patterns = [
|
|
202
|
+
// Correct patterns
|
|
203
|
+
{ patternId: "good_A", confidence: 0.5 },
|
|
204
|
+
{ patternId: "good_B", confidence: 0.5 },
|
|
205
|
+
// Wrong patterns (different tool from truth)
|
|
206
|
+
{ patternId: "noise_A1", confidence: 0.5 },
|
|
207
|
+
{ patternId: "noise_A2", confidence: 0.5 },
|
|
208
|
+
{ patternId: "noise_B1", confidence: 0.5 },
|
|
209
|
+
];
|
|
210
|
+
const patternBehavior = {
|
|
211
|
+
good_A: { sig: "sigA", tool: "mneme.ask" },
|
|
212
|
+
good_B: { sig: "sigB", tool: "mneme.why" },
|
|
213
|
+
noise_A1: { sig: "sigA", tool: "mneme.noise1" },
|
|
214
|
+
noise_A2: { sig: "sigA", tool: "mneme.noise2" },
|
|
215
|
+
noise_B1: { sig: "sigB", tool: "mneme.noise3" },
|
|
216
|
+
};
|
|
217
|
+
const FIRE_THRESHOLD = 0.4;
|
|
218
|
+
let previousHitRate = 0;
|
|
219
|
+
let hitRateDay1 = 0;
|
|
220
|
+
let hitRateDay30 = 0;
|
|
221
|
+
for (let day = 1; day <= 30; day++) {
|
|
222
|
+
// Day's predictions: only patterns with confidence >= threshold fire.
|
|
223
|
+
const preds = [];
|
|
224
|
+
for (const p of patterns) {
|
|
225
|
+
if (p.confidence < FIRE_THRESHOLD)
|
|
226
|
+
continue;
|
|
227
|
+
const b = patternBehavior[p.patternId];
|
|
228
|
+
for (let i = 0; i < 5; i++) {
|
|
229
|
+
preds.push(pred(p.patternId, b.sig, b.tool, p.confidence, day * 1000 + i));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const acts = [];
|
|
233
|
+
for (let i = 0; i < 5; i++) {
|
|
234
|
+
acts.push(act("sigA", TRUTH_TOOLS.sigA, day * 1000 + i));
|
|
235
|
+
acts.push(act("sigB", TRUTH_TOOLS.sigB, day * 1000 + i + 100));
|
|
236
|
+
}
|
|
237
|
+
const report = runSleepCycle({
|
|
238
|
+
yesterdayPredictions: preds,
|
|
239
|
+
yesterdayActualCalls: acts,
|
|
240
|
+
previousHitRate,
|
|
241
|
+
cycleAt: day * 86400 * 1000,
|
|
242
|
+
learningRate: 0.3,
|
|
243
|
+
secret: SECRET,
|
|
244
|
+
});
|
|
245
|
+
const updated = applyWeightUpdates({ patterns, report });
|
|
246
|
+
patterns = updated.updated;
|
|
247
|
+
previousHitRate = report.hitRate;
|
|
248
|
+
if (day === 1)
|
|
249
|
+
hitRateDay1 = report.hitRate;
|
|
250
|
+
if (day === 30)
|
|
251
|
+
hitRateDay30 = report.hitRate;
|
|
252
|
+
}
|
|
253
|
+
// Day 1: 5 patterns fire (mix of correct + noise) -> mean jaccard ~0.2-0.4
|
|
254
|
+
expect(hitRateDay1).toBeLessThan(0.5);
|
|
255
|
+
// Day 30: noise patterns dropped below threshold; only correct patterns fire -> high jaccard
|
|
256
|
+
expect(hitRateDay30).toBeGreaterThanOrEqual(0.7);
|
|
257
|
+
// Trajectory grew
|
|
258
|
+
expect(hitRateDay30).toBeGreaterThan(hitRateDay1);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe("v2.19.25 SLEEP TRAINING · morning digest + formatter", () => {
|
|
262
|
+
it("morningDigest groups top improved + top regressed patterns", () => {
|
|
263
|
+
const report = runSleepCycle({
|
|
264
|
+
yesterdayPredictions: [
|
|
265
|
+
pred("good", "sigA", "x", 0.2), // delta positive
|
|
266
|
+
pred("bad", "sigB", "wrong", 0.8), // delta negative
|
|
267
|
+
],
|
|
268
|
+
yesterdayActualCalls: [
|
|
269
|
+
act("sigA", "x"),
|
|
270
|
+
act("sigB", "actual"),
|
|
271
|
+
],
|
|
272
|
+
cycleAt: 0,
|
|
273
|
+
learningRate: 1,
|
|
274
|
+
secret: SECRET,
|
|
275
|
+
});
|
|
276
|
+
const d = morningDigest(report);
|
|
277
|
+
expect(d.topImproved.length).toBe(1);
|
|
278
|
+
expect(d.topImproved[0].patternId).toBe("good");
|
|
279
|
+
expect(d.topRegressed.length).toBe(1);
|
|
280
|
+
expect(d.topRegressed[0].patternId).toBe("bad");
|
|
281
|
+
expect(d.oneLine).toContain("SLEEP");
|
|
282
|
+
});
|
|
283
|
+
it("formatSleepCycleLine renders single-line digest", () => {
|
|
284
|
+
const r = runSleepCycle({
|
|
285
|
+
yesterdayPredictions: [pred("p1", "sigA", "x", 0.5)],
|
|
286
|
+
yesterdayActualCalls: [act("sigA", "x")],
|
|
287
|
+
cycleAt: 0,
|
|
288
|
+
previousHitRate: 0.5,
|
|
289
|
+
secret: SECRET,
|
|
290
|
+
});
|
|
291
|
+
const line = formatSleepCycleLine(r);
|
|
292
|
+
expect(line).toContain("SLEEP");
|
|
293
|
+
expect(line).toContain("lr=");
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
//# sourceMappingURL=sleep_training.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep_training.test.js","sourceRoot":"","sources":["../../src/sleep_training/sleep_training.test.ts"],"names":[],"mappings":"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"}
|
package/dist/whats_new.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;oCAEoC;AACpC,eAAO,MAAM,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;oCAEoC;AACpC,eAAO,MAAM,UAAU,EAAE,iBAAiB,EAiXzC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB;kCAC8B;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAoBD;sEACsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,GAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAA2B,GAAG,cAAc,CAkB5I;AAED;yEACyE;AACzE,wBAAgB,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB3E"}
|
package/dist/whats_new.js
CHANGED
|
@@ -20,6 +20,22 @@ import { fileURLToPath } from "node:url";
|
|
|
20
20
|
* user-visible behavior. Keep `body` plain English so the AI can quote
|
|
21
21
|
* it verbatim to non-engineers. */
|
|
22
22
|
export const HIGHLIGHTS = [
|
|
23
|
+
{
|
|
24
|
+
version: "2.19.26",
|
|
25
|
+
date: "2026-05-17",
|
|
26
|
+
headline: "DREAMSPACE -- self-authoring MCP catalog (dreams from PRODUCT factory to TOOL FACTORY); 🌱 GESTATION proposes + 🦋 EVOLUTION mates/sunsets",
|
|
27
|
+
body: "Every prior dreams primitive (vaccine_cycle / dream.run / dreams.enqueue/resolve) is a PRODUCT factory -- manufactures one specific artifact (vaccine / claim / verdict). v2.19.26 ships the first TOOL factory in any AI framework: dreams that propose brand-new MCP tools by composing existing primitives. 🌱 GESTATION (packages/core/src/dreamspace_gestation/) detects 3 gap classes from caller-supplied signals: REFLEX cache miss (event with no cached prediction), user_chat no_match (semantic rule found zero matches), pattern co_occurrence (2 tools always fire together). detectToolGaps filters above-threshold (default minGapCount=3, minCoOccurCount=4); proposeToolSpec emits a deterministic ProposedToolSpec with name (mneme.auto.X_then_Y for co-occur; mneme.auto.handle_X for misses; mneme.auto.intent_X for chat), HMAC-signed composer recipe (always sequential for safety), proposed inputSchema, and confidence linear-scaled to count. runGestationCycle is the one-shot daemon entrypoint. Daemon feeds the spec to v2.19.9 WRAPPER_GENESPLICING `splice` to actually create the runtime chimera; GESTATION is the PROPOSER not the executor. 17 deep tests + MEASURED 100% determinism + 100% HMAC integrity + 3 gap-kind coverage. 🦋 EVOLUTION (packages/core/src/dreamspace_evolution/) decides which proposed tools survive. 4 lifecycle bands (deterministic; pure-function): 🥚 GESTATING (age < 7d; newborn; keep), 🐣 JUVENILE (age 7-30d; uses 5-49; keep), 🦋 MATURE (age >= 30d AND uses >= 50; promote), 🍂 ATROPHIED (age >= 30d AND uses < 1/week; sunset). selectMatingPairs scans a use-log for ordered (A then B) pairs co-occurring within 60s window above minCount=4; each qualifying pair becomes a candidate for a fresh GESTATION signal of kind 'pattern_co_occurrence' -- chimera birth via mating. A->B and B->A are DIFFERENT pairs; self-pairs excluded. runEvolutionCycle classifies each record + selects mating pairs + HMAC-signs. 14 deep tests + MEASURED 100% determinism + 100% HMAC integrity + 4-band priority correctness. 8 new MCP tools (mneme.dreamspace.{detect_gaps, propose_spec, gestation_cycle, verify_proposal, classify, mate_pairs, evolution_cycle, list_bands}). AURELIAN SHIP both (rollup ship=2). Why no AI lab nor framework ships this: tools-as-static-API is the industry default; OpenAI/Anthropic/Google/Cursor/Copilot all keep tools fixed; nobody has local-first daemon + LIMBIC observation + free-first economics to even think of catalog self-authoring. Mneme owns first-mover forever. The dreams that author dreams. Factory > product on compounding + durability.",
|
|
28
|
+
suggestedAction: "Tell the AI: 'list lifecycle bands' (mneme.dreamspace.list_bands) -- see the 4 evolutionary stages. Or 'run gestation cycle' (mneme.dreamspace.gestation_cycle) with yesterday's gap signals -- watch tools propose themselves.",
|
|
29
|
+
tags: ["dreamspace", "self-authoring-catalog", "gestation", "evolution", "tool-lifecycle", "mating", "factory-not-product", "limbic-extension"],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
version: "2.19.25",
|
|
33
|
+
date: "2026-05-17",
|
|
34
|
+
headline: "SLEEP TRAINING (reflex ฉลาดขึ้นทุกคืน) + ENDOCRINE (4 NAMED hormones drive system behavior) -- extends LIMBIC further",
|
|
35
|
+
body: "💤 SLEEP TRAINING is the nightly fitness loop user audit asked for. v2.19.23 HIPPOCAMPUS-DREAMS consolidated by FREQUENCY only -- a pattern could fire 10 times wrong and still get promoted. v2.19.25 closes the gap at SOURCE. The brain: runSleepCycle({yesterdayPredictions, yesterdayActualCalls, previousHitRate, learningRate=0.15}). For each (patternId, eventSig) cell, group predictions; group actuals by sig; compute jaccard(predictedSet, actualSet) as fitness; weight delta = learningRate * (jaccard - currentConfidence). Adaptive: low-confidence patterns climb fast when correct; high-confidence patterns barely move (defends successful priors); HMAC-signed SleepCycleReport. applyWeightUpdates clamps [0.01, 1.0]; multiple eventSigs for same pattern accumulate deltas. morningDigest groups top-3 improved / top-3 regressed with one-line summary ('💤 SLEEP · hit-rate 52.1% ↑7.3% · 12 patterns trained · ↑4 ↓1'). MEASURED 30-night trajectory: hit rate climbs from random 20% (day 1) to >=70% (day 30) on synthetic fixable trail. 20 deep tests + MEASURED 100% determinism. Cloud SaaS competitors structurally cannot ship this -- event observation = privacy violation; Mneme local-first immune. The system that gets smarter while you sleep, learning from YOUR actual tool calls, not aggregated population data. Moat compounds nightly. 🧪 ENDOCRINE replaces v2.19.23 HORMONAL's 3 generic signals (focus/fatigue/mood) with 4 NAMED biological hormones that map DIRECTLY to behavior: 🩸 CORTISOL (stress) -- rises from stress keywords (fuck/damn/finally/hotfix/wtf) + errorCount>3 + hour 22:00-03:00; effect: reflex calmer + daemon quieter + notifications suppressed at >=0.7. ⚡ DOPAMINE (flow) -- rises from greenStreak>=5 + testPassStreak>=5 + zero errors; effect: reflex aggressive + surface advanced tools. 🌙 MELATONIN (rest) -- rises from late hour (22+) + early morning (00-06) + idle>15min; effect: deep dream cycle + very quiet daemon + suppress notifications at >=0.6. 💞 OXYTOCIN (social) -- rises from Co-Authored-By trailer + distinct authors>=2 in hour; effect: surface TRINITY VOTE + CONFESSIONAL (multi-vendor consensus). Each hormone has biological half-life decay (cortisol 30min / dopamine 20min / melatonin 90min / oxytocin 60min). produceFromSignals applies decay first then signal deltas; clamped [0,1]. crossOrganEffects derives reflexAggressiveness + daemonQuietness + dreamCycleDepth + notificationsSuppressed + surfaceTrinityAndConfessional + dominantMood label. HMAC-chained EndocrineLedger; tamper detected at exact step. 22 tests + MEASURED 100% determinism. 8 new MCP tools (mneme.sleep.{cycle,fitness,apply,digest} + mneme.endocrine.{produce,effects,neutral,list_hormones}). AURELIAN SHIP both (rollup ship=2). The 'AI tool that adapts to my mood' magic moment becomes real: CORTISOL high -> daemon shuts up while you debug; MELATONIN high -> deep dream cycle suppresses all noise; OXYTOCIN high -> trinity surfaces multi-vendor consensus during pair sessions.",
|
|
36
|
+
suggestedAction: "Tell the AI: 'list mneme hormones' (mneme.endocrine.list_hormones) -- see all 4 biological signals. Or 'run sleep cycle' (mneme.sleep.cycle) with yesterday's pheromone trail -- watch the fitness loop tune REFLEX weights.",
|
|
37
|
+
tags: ["sleep-training", "fitness-loop", "jaccard", "endocrine", "cortisol", "dopamine", "melatonin", "oxytocin", "biological-hormones", "limbic-extension"],
|
|
38
|
+
},
|
|
23
39
|
{
|
|
24
40
|
version: "2.19.24",
|
|
25
41
|
date: "2026-05-17",
|