@mneme-ai/core 2.19.23 → 2.19.25
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_v1923.test.js +2 -1
- package/dist/cosmic/aurelian_v1923.test.js.map +1 -1
- package/dist/cosmic/aurelian_v1924.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1924.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1924.test.js +48 -0
- package/dist/cosmic/aurelian_v1924.test.js.map +1 -0
- 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/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/event_pattern_match/event_pattern_match.test.d.ts +2 -0
- package/dist/event_pattern_match/event_pattern_match.test.d.ts.map +1 -0
- package/dist/event_pattern_match/event_pattern_match.test.js +175 -0
- package/dist/event_pattern_match/event_pattern_match.test.js.map +1 -0
- package/dist/event_pattern_match/index.d.ts +99 -0
- package/dist/event_pattern_match/index.d.ts.map +1 -0
- package/dist/event_pattern_match/index.js +318 -0
- package/dist/event_pattern_match/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/tool_tier/index.d.ts +101 -0
- package/dist/tool_tier/index.d.ts.map +1 -0
- package/dist/tool_tier/index.js +228 -0
- package/dist/tool_tier/index.js.map +1 -0
- package/dist/tool_tier/tool_tier.test.d.ts +2 -0
- package/dist/tool_tier/tool_tier.test.d.ts.map +1 -0
- package/dist/tool_tier/tool_tier.test.js +133 -0
- package/dist/tool_tier/tool_tier.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 +23 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
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
|
+
declare const PROTOCOL_VERSION: 1;
|
|
42
|
+
export interface YesterdayPrediction {
|
|
43
|
+
/** Event signature (from v2.19.22 REFLEX eventCacheKey). */
|
|
44
|
+
eventSig: string;
|
|
45
|
+
/** Pattern id that produced this prediction (from v2.19.24 BUILTIN_PATTERNS). */
|
|
46
|
+
patternId: string;
|
|
47
|
+
/** The tool the pattern predicted would be called next. */
|
|
48
|
+
predictedTool: string;
|
|
49
|
+
/** The pattern's confidence at the time of prediction. */
|
|
50
|
+
confidenceAtPrediction: number;
|
|
51
|
+
ts: number;
|
|
52
|
+
}
|
|
53
|
+
export interface YesterdayActualCall {
|
|
54
|
+
/** Event signature this call was triggered by (same as YesterdayPrediction). */
|
|
55
|
+
eventSig: string;
|
|
56
|
+
/** The tool the AI agent actually called. */
|
|
57
|
+
toolName: string;
|
|
58
|
+
ts: number;
|
|
59
|
+
}
|
|
60
|
+
export interface PatternFitness {
|
|
61
|
+
patternId: string;
|
|
62
|
+
eventSig: string;
|
|
63
|
+
predictedSet: string[];
|
|
64
|
+
actualSet: string[];
|
|
65
|
+
/** Jaccard similarity 0..1; 1 = perfect match. */
|
|
66
|
+
jaccard: number;
|
|
67
|
+
/** Number of predictions made. */
|
|
68
|
+
predictionCount: number;
|
|
69
|
+
/** Number of actual calls observed. */
|
|
70
|
+
actualCount: number;
|
|
71
|
+
/** Delta to apply to the pattern's confidence (positive or negative). */
|
|
72
|
+
confidenceDelta: number;
|
|
73
|
+
}
|
|
74
|
+
export interface SleepCycleReport {
|
|
75
|
+
v: typeof PROTOCOL_VERSION;
|
|
76
|
+
cycleAt: number;
|
|
77
|
+
totalPredictions: number;
|
|
78
|
+
totalActualCalls: number;
|
|
79
|
+
uniqueEventSigs: number;
|
|
80
|
+
patternFitness: PatternFitness[];
|
|
81
|
+
/** Aggregate hit rate (mean jaccard across all patterns). */
|
|
82
|
+
hitRate: number;
|
|
83
|
+
/** Previous cycle's hit rate (for trajectory; caller passes from last report). */
|
|
84
|
+
previousHitRate: number | null;
|
|
85
|
+
/** Delta in hit rate from previous cycle. */
|
|
86
|
+
hitRateDelta: number;
|
|
87
|
+
learningRate: number;
|
|
88
|
+
sig: string;
|
|
89
|
+
}
|
|
90
|
+
export interface PatternWeight {
|
|
91
|
+
patternId: string;
|
|
92
|
+
confidence: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Canonical Jaccard similarity: |A ∩ B| / |A ∪ B|.
|
|
96
|
+
* Both empty → 1.0 (vacuous match)
|
|
97
|
+
* One empty → 0.0
|
|
98
|
+
* Otherwise → standard
|
|
99
|
+
*/
|
|
100
|
+
export declare function jaccardSimilarity(a: string[], b: string[]): number;
|
|
101
|
+
/**
|
|
102
|
+
* Compute fitness for each (patternId, eventSig) cell against actual calls.
|
|
103
|
+
*
|
|
104
|
+
* Weight-update rule:
|
|
105
|
+
* confidenceDelta = learningRate × (jaccard - currentConfidence)
|
|
106
|
+
*
|
|
107
|
+
* - If jaccard > current confidence → boost (pattern under-trusted).
|
|
108
|
+
* - If jaccard < current confidence → cut (pattern over-trusted).
|
|
109
|
+
* - The delta is proportional to the error, so high-confidence patterns
|
|
110
|
+
* that nail it barely move; low-confidence patterns that nail it
|
|
111
|
+
* climb fast. Defends successful priors; rapid recovery for stragglers.
|
|
112
|
+
*/
|
|
113
|
+
export declare function runSleepCycle(input: {
|
|
114
|
+
yesterdayPredictions: YesterdayPrediction[];
|
|
115
|
+
yesterdayActualCalls: YesterdayActualCall[];
|
|
116
|
+
previousHitRate?: number;
|
|
117
|
+
cycleAt?: number;
|
|
118
|
+
learningRate?: number;
|
|
119
|
+
secret?: string;
|
|
120
|
+
}): SleepCycleReport;
|
|
121
|
+
export declare function verifyCycleReport(r: SleepCycleReport, secret?: string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Apply fitness-derived deltas to a pattern weight map. Caller passes
|
|
124
|
+
* the current `patterns` (id -> confidence) and the cycle report; we
|
|
125
|
+
* return the updated map. Confidence is clamped to [MIN, MAX].
|
|
126
|
+
*
|
|
127
|
+
* Multiple fitness entries for the same patternId (different eventSigs)
|
|
128
|
+
* accumulate — the pattern's confidence drifts by the SUM of its deltas
|
|
129
|
+
* across all event sigs it saw yesterday. Pattern is rewarded/punished
|
|
130
|
+
* by ALL the events it touched, not just one.
|
|
131
|
+
*/
|
|
132
|
+
export declare function applyWeightUpdates(input: {
|
|
133
|
+
patterns: PatternWeight[];
|
|
134
|
+
report: SleepCycleReport;
|
|
135
|
+
}): {
|
|
136
|
+
updated: PatternWeight[];
|
|
137
|
+
changes: Array<{
|
|
138
|
+
patternId: string;
|
|
139
|
+
before: number;
|
|
140
|
+
after: number;
|
|
141
|
+
delta: number;
|
|
142
|
+
}>;
|
|
143
|
+
};
|
|
144
|
+
export interface MorningDigest {
|
|
145
|
+
cycleAt: number;
|
|
146
|
+
hitRate: number;
|
|
147
|
+
hitRateDelta: number;
|
|
148
|
+
topImproved: Array<{
|
|
149
|
+
patternId: string;
|
|
150
|
+
delta: number;
|
|
151
|
+
}>;
|
|
152
|
+
topRegressed: Array<{
|
|
153
|
+
patternId: string;
|
|
154
|
+
delta: number;
|
|
155
|
+
}>;
|
|
156
|
+
totalPatternsTouched: number;
|
|
157
|
+
oneLine: string;
|
|
158
|
+
}
|
|
159
|
+
export declare function morningDigest(r: SleepCycleReport): MorningDigest;
|
|
160
|
+
export declare function formatSleepCycleLine(r: SleepCycleReport): string;
|
|
161
|
+
export {};
|
|
162
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sleep_training/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":""}
|