@timmeck/brain-core 2.3.0 → 2.4.0

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.
@@ -0,0 +1,275 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ───────────────────────────────────────────
3
+ export function runMetaLearningMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS meta_learning_snapshots (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ cycle INTEGER NOT NULL,
8
+ params TEXT NOT NULL,
9
+ metrics TEXT NOT NULL,
10
+ score REAL NOT NULL,
11
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
12
+ );
13
+
14
+ CREATE TABLE IF NOT EXISTS meta_learning_optimizations (
15
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
16
+ param_name TEXT NOT NULL,
17
+ old_value REAL NOT NULL,
18
+ new_value REAL NOT NULL,
19
+ reason TEXT NOT NULL,
20
+ improvement REAL,
21
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
22
+ );
23
+
24
+ CREATE INDEX IF NOT EXISTS idx_meta_snapshots_score ON meta_learning_snapshots(score);
25
+ CREATE INDEX IF NOT EXISTS idx_meta_snapshots_cycle ON meta_learning_snapshots(cycle);
26
+ `);
27
+ }
28
+ // ── Engine ───────────────────────────────────────────────
29
+ /**
30
+ * Meta-Learning Engine: observes learning cycle outcomes over time
31
+ * and auto-tunes hyperparameters using gradient-free optimization.
32
+ *
33
+ * Research approach: Bayesian-inspired parameter search.
34
+ * - After each learning cycle, record a snapshot (params + metrics + effectiveness score)
35
+ * - Periodically analyze: which parameter configurations produced the best scores?
36
+ * - Use perturbation: try small changes to parameters, measure improvement, keep what works
37
+ * - Implements "explore vs exploit": 80% exploit best known, 20% explore new configurations
38
+ */
39
+ export class MetaLearningEngine {
40
+ db;
41
+ params;
42
+ logger = getLogger();
43
+ cycleCount = 0;
44
+ analyzeInterval; // analyze every N cycles
45
+ explorationRate; // % of cycles spent exploring (0-1)
46
+ constructor(db, params, config) {
47
+ this.db = db;
48
+ this.params = params;
49
+ runMetaLearningMigration(db);
50
+ this.analyzeInterval = config?.analyzeInterval ?? 5;
51
+ this.explorationRate = config?.explorationRate ?? 0.2;
52
+ }
53
+ /**
54
+ * Record a learning cycle's outcome. Called after each learning cycle.
55
+ * @param metrics - the raw metrics from the cycle (e.g. newPatterns, updatedRules, prunedRules)
56
+ * @param score - a composite effectiveness score (higher = better)
57
+ */
58
+ recordSnapshot(metrics, score) {
59
+ this.cycleCount++;
60
+ const currentParams = {};
61
+ for (const p of this.params) {
62
+ currentParams[p.name] = p.value;
63
+ }
64
+ this.db.prepare(`
65
+ INSERT INTO meta_learning_snapshots (cycle, params, metrics, score)
66
+ VALUES (?, ?, ?, ?)
67
+ `).run(this.cycleCount, JSON.stringify(currentParams), JSON.stringify(metrics), score);
68
+ const snapshot = {
69
+ cycle: this.cycleCount,
70
+ params: currentParams,
71
+ metrics,
72
+ score,
73
+ };
74
+ this.logger.debug(`Meta-learning snapshot #${this.cycleCount}: score=${score.toFixed(3)}`);
75
+ return snapshot;
76
+ }
77
+ /**
78
+ * Analyze snapshots and recommend parameter changes.
79
+ * Uses a simplified approach inspired by Bayesian optimization:
80
+ * - Group snapshots by parameter ranges
81
+ * - Find which ranges produced the best average scores
82
+ * - Recommend moving towards those ranges
83
+ */
84
+ analyze() {
85
+ const snapshots = this.getSnapshots(50); // last 50 cycles
86
+ if (snapshots.length < 5)
87
+ return []; // need minimum data
88
+ const recommendations = [];
89
+ for (const param of this.params) {
90
+ const rec = this.analyzeParameter(param, snapshots);
91
+ if (rec)
92
+ recommendations.push(rec);
93
+ }
94
+ return recommendations;
95
+ }
96
+ /**
97
+ * Apply recommendations: perturb parameters towards better configurations.
98
+ * Returns the parameters that were changed.
99
+ */
100
+ optimize() {
101
+ const recommendations = this.analyze();
102
+ const applied = [];
103
+ for (const rec of recommendations) {
104
+ if (rec.confidence < 0.3)
105
+ continue; // skip low-confidence recommendations
106
+ if (Math.abs(rec.expectedImprovement) < 0.01)
107
+ continue; // skip negligible improvements
108
+ const param = this.params.find(p => p.name === rec.name);
109
+ if (!param)
110
+ continue;
111
+ // Explore vs exploit: sometimes try random perturbations
112
+ const exploring = Math.random() < this.explorationRate;
113
+ let newValue;
114
+ if (exploring) {
115
+ // Random perturbation within bounds
116
+ const range = param.max - param.min;
117
+ newValue = param.value + (Math.random() - 0.5) * range * 0.2;
118
+ }
119
+ else {
120
+ // Move towards recommended value
121
+ newValue = rec.recommendedValue;
122
+ }
123
+ // Clamp to bounds
124
+ newValue = Math.max(param.min, Math.min(param.max, newValue));
125
+ // Record optimization
126
+ this.db.prepare(`
127
+ INSERT INTO meta_learning_optimizations (param_name, old_value, new_value, reason, improvement)
128
+ VALUES (?, ?, ?, ?, ?)
129
+ `).run(param.name, param.value, newValue, exploring ? 'exploration' : 'exploitation', rec.expectedImprovement);
130
+ this.logger.info(`Meta-learning: ${param.name} ${param.value.toFixed(4)} → ${newValue.toFixed(4)} (${exploring ? 'explore' : 'exploit'}, expected +${(rec.expectedImprovement * 100).toFixed(1)}%)`);
131
+ param.value = newValue;
132
+ rec.recommendedValue = newValue;
133
+ applied.push(rec);
134
+ }
135
+ return applied;
136
+ }
137
+ /**
138
+ * Run analysis + optimization if it's time. Call this after every learning cycle.
139
+ */
140
+ step(metrics, score) {
141
+ const snapshot = this.recordSnapshot(metrics, score);
142
+ let optimized = [];
143
+ if (this.cycleCount > 0 && this.cycleCount % this.analyzeInterval === 0) {
144
+ optimized = this.optimize();
145
+ }
146
+ return { snapshot, optimized };
147
+ }
148
+ /** Get current parameter values. */
149
+ getParams() {
150
+ const result = {};
151
+ for (const p of this.params) {
152
+ result[p.name] = p.value;
153
+ }
154
+ return result;
155
+ }
156
+ /** Update a parameter value externally (e.g. user override). */
157
+ setParam(name, value) {
158
+ const param = this.params.find(p => p.name === name);
159
+ if (!param)
160
+ return false;
161
+ param.value = Math.max(param.min, Math.min(param.max, value));
162
+ return true;
163
+ }
164
+ /** Get learning effectiveness status. */
165
+ getStatus() {
166
+ const snapshots = this.getSnapshots(100);
167
+ const optimizations = this.db.prepare('SELECT COUNT(*) as count FROM meta_learning_optimizations').get();
168
+ const scores = snapshots.map(s => s.score);
169
+ const currentScore = scores.length > 0 ? scores[0] : 0;
170
+ const bestScore = scores.length > 0 ? Math.max(...scores) : 0;
171
+ const worstScore = scores.length > 0 ? Math.min(...scores) : 0;
172
+ // Trend detection: compare average of last 5 vs previous 5
173
+ let trend = 'stable';
174
+ if (scores.length >= 10) {
175
+ const recent = scores.slice(0, 5).reduce((a, b) => a + b, 0) / 5;
176
+ const previous = scores.slice(5, 10).reduce((a, b) => a + b, 0) / 5;
177
+ const delta = recent - previous;
178
+ if (delta > 0.05)
179
+ trend = 'improving';
180
+ else if (delta < -0.05)
181
+ trend = 'declining';
182
+ }
183
+ return {
184
+ totalSnapshots: snapshots.length,
185
+ totalOptimizations: optimizations.count,
186
+ bestScore,
187
+ worstScore,
188
+ currentScore,
189
+ trend,
190
+ recommendations: this.analyze(),
191
+ };
192
+ }
193
+ /** Get optimization history. */
194
+ getHistory(limit = 20) {
195
+ return this.db.prepare('SELECT * FROM meta_learning_optimizations ORDER BY created_at DESC LIMIT ?').all(limit);
196
+ }
197
+ // ── Private ─────────────────────────────────────────
198
+ getSnapshots(limit) {
199
+ const rows = this.db.prepare('SELECT * FROM meta_learning_snapshots ORDER BY cycle DESC LIMIT ?').all(limit);
200
+ return rows.map(r => ({
201
+ id: r.id,
202
+ cycle: r.cycle,
203
+ params: JSON.parse(r.params),
204
+ metrics: JSON.parse(r.metrics),
205
+ score: r.score,
206
+ created_at: r.created_at,
207
+ }));
208
+ }
209
+ /**
210
+ * Analyze a single parameter's effect on learning effectiveness.
211
+ *
212
+ * Algorithm:
213
+ * 1. Divide the parameter's range into bins
214
+ * 2. For each bin, calculate the average score of snapshots in that bin
215
+ * 3. Find the bin with the highest average score
216
+ * 4. Recommend moving towards the center of that bin
217
+ */
218
+ analyzeParameter(param, snapshots) {
219
+ const numBins = 5;
220
+ const range = param.max - param.min;
221
+ if (range <= 0)
222
+ return null;
223
+ const binSize = range / numBins;
224
+ // Accumulate scores per bin
225
+ const bins = Array.from({ length: numBins }, () => ({ sum: 0, count: 0 }));
226
+ for (const snap of snapshots) {
227
+ const val = snap.params[param.name];
228
+ if (val === undefined)
229
+ continue;
230
+ const binIdx = Math.min(numBins - 1, Math.floor((val - param.min) / binSize));
231
+ bins[binIdx].sum += snap.score;
232
+ bins[binIdx].count++;
233
+ }
234
+ // Find best bin (minimum 2 samples)
235
+ let bestBin = -1;
236
+ let bestAvg = -Infinity;
237
+ let totalSamples = 0;
238
+ for (let i = 0; i < numBins; i++) {
239
+ if (bins[i].count < 2)
240
+ continue;
241
+ const avg = bins[i].sum / bins[i].count;
242
+ totalSamples += bins[i].count;
243
+ if (avg > bestAvg) {
244
+ bestAvg = avg;
245
+ bestBin = i;
246
+ }
247
+ }
248
+ if (bestBin === -1)
249
+ return null; // not enough data
250
+ // Calculate recommended value (center of best bin)
251
+ const recommended = param.min + (bestBin + 0.5) * binSize;
252
+ // Skip if current value is already in or near the best bin
253
+ const currentBin = Math.min(numBins - 1, Math.floor((param.value - param.min) / binSize));
254
+ if (currentBin === bestBin)
255
+ return null;
256
+ // Estimate improvement
257
+ const currentBinAvg = bins[currentBin].count > 0
258
+ ? bins[currentBin].sum / bins[currentBin].count
259
+ : 0;
260
+ const expectedImprovement = currentBinAvg > 0
261
+ ? (bestAvg - currentBinAvg) / currentBinAvg
262
+ : 0;
263
+ // Confidence: based on sample count in best bin
264
+ const confidence = Math.min(1, bins[bestBin].count / 10);
265
+ return {
266
+ name: param.name,
267
+ currentValue: param.value,
268
+ recommendedValue: recommended,
269
+ expectedImprovement,
270
+ confidence,
271
+ evidence: totalSamples,
272
+ };
273
+ }
274
+ }
275
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/meta-learning/engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain-core",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "Shared core infrastructure for the Brain ecosystem — IPC, MCP, CLI, DB connection, and utilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -43,7 +43,10 @@
43
43
  "./embeddings/engine": "./dist/embeddings/engine.js",
44
44
  "./webhooks/service": "./dist/webhooks/service.js",
45
45
  "./export/service": "./dist/export/service.js",
46
- "./backup/service": "./dist/backup/service.js"
46
+ "./backup/service": "./dist/backup/service.js",
47
+ "./meta-learning/engine": "./dist/meta-learning/engine.js",
48
+ "./causal/engine": "./dist/causal/engine.js",
49
+ "./hypothesis/engine": "./dist/hypothesis/engine.js"
47
50
  },
48
51
  "scripts": {
49
52
  "build": "tsc",
@@ -0,0 +1 @@
1
+ {"root":["./src/index.ts","./src/api/middleware.ts","./src/api/server.ts","./src/backup/service.ts","./src/causal/engine.ts","./src/cli/colors.ts","./src/config/loader.ts","./src/config/__tests__/loader.test.ts","./src/cross-brain/client.ts","./src/cross-brain/correlator.ts","./src/cross-brain/notifications.ts","./src/cross-brain/subscription.ts","./src/cross-brain/__tests__/client.test.ts","./src/cross-brain/__tests__/notifications.test.ts","./src/cross-brain/__tests__/subscription.test.ts","./src/dashboard/hub-server.ts","./src/dashboard/server.ts","./src/dashboard/__tests__/server.test.ts","./src/db/connection.ts","./src/db/__tests__/connection.test.ts","./src/ecosystem/service.ts","./src/embeddings/engine.ts","./src/embeddings/__tests__/engine.test.ts","./src/export/service.ts","./src/hypothesis/engine.ts","./src/ipc/client.ts","./src/ipc/errors.ts","./src/ipc/protocol.ts","./src/ipc/server.ts","./src/ipc/validation.ts","./src/ipc/__tests__/integration.test.ts","./src/ipc/__tests__/protocol.test.ts","./src/learning/base-engine.ts","./src/learning/__tests__/base-engine.test.ts","./src/math/time-decay.ts","./src/math/wilson-score.ts","./src/math/__tests__/time-decay.test.ts","./src/math/__tests__/wilson-score.test.ts","./src/mcp/http-server.ts","./src/mcp/server.ts","./src/memory/base-memory-engine.ts","./src/memory/types.ts","./src/memory/__tests__/base-memory-engine.test.ts","./src/meta-learning/engine.ts","./src/research/base-engine.ts","./src/research/__tests__/base-engine.test.ts","./src/synapses/activation.ts","./src/synapses/decay.ts","./src/synapses/hebbian.ts","./src/synapses/pathfinder.ts","./src/synapses/synapse-manager.ts","./src/synapses/types.ts","./src/synapses/__tests__/activation.test.ts","./src/synapses/__tests__/decay.test.ts","./src/synapses/__tests__/hebbian.test.ts","./src/synapses/__tests__/pathfinder.test.ts","./src/synapses/__tests__/synapse-manager.test.ts","./src/types/ipc.types.ts","./src/utils/events.ts","./src/utils/hash.ts","./src/utils/logger.ts","./src/utils/paths.ts","./src/utils/__tests__/events.test.ts","./src/utils/__tests__/hash.test.ts","./src/utils/__tests__/logger.test.ts","./src/utils/__tests__/paths.test.ts","./src/webhooks/service.ts"],"version":"5.9.3"}