@timmeck/brain-core 2.36.108 → 2.36.109

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,44 @@
1
+ /**
2
+ * Strategy Executor — Minimal Closed Loop
3
+ *
4
+ * Every cycle: pick 1 eligible strategy → execute it → log outcome.
5
+ * No manager classes. No abstraction layers. One loop.
6
+ *
7
+ * A strategy is "executable" if it has:
8
+ * - precondition: observable metric condition (threshold/co-occurrence)
9
+ * - action: parameter mutation or config change
10
+ * - evaluation: measured after N cycles
11
+ */
12
+ import type Database from 'better-sqlite3';
13
+ export declare function runStrategyExecutorMigration(db: Database.Database): void;
14
+ interface ExecutionResult {
15
+ strategyId: string;
16
+ action: string;
17
+ preconditionMet: boolean;
18
+ executed: boolean;
19
+ details: string;
20
+ }
21
+ export declare class StrategyExecutor {
22
+ private db;
23
+ constructor(db: Database.Database);
24
+ /**
25
+ * Seed executable strategies from existing confirmed hypotheses.
26
+ * Turns "X co-occurs with Y" into "when X spikes, adjust parameter Z".
27
+ */
28
+ private seedExecutableStrategies;
29
+ private upsertExecutable;
30
+ /**
31
+ * Run one execution cycle. Pick the best eligible strategy. Execute it. Log it.
32
+ * Call this every cycle — it handles cooldown internally.
33
+ */
34
+ execute(currentCycle: number): ExecutionResult | null;
35
+ private checkPrecondition;
36
+ private executeAction;
37
+ private recordExecution;
38
+ /**
39
+ * Evaluate past executions — did the action help?
40
+ * Check if metrics improved after eval_after_cycles.
41
+ */
42
+ evaluate(currentCycle: number): void;
43
+ }
44
+ export {};
@@ -0,0 +1,297 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ const log = getLogger();
3
+ // ── Migration ────────────────────────────────────────
4
+ export function runStrategyExecutorMigration(db) {
5
+ // Add action_type + action_config to strategies if missing
6
+ const cols = db.prepare('PRAGMA table_info(knowledge_strategies)').all();
7
+ const colNames = new Set(cols.map(c => c.name));
8
+ if (!colNames.has('action_type')) {
9
+ try {
10
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN action_type TEXT");
11
+ }
12
+ catch { /* */ }
13
+ }
14
+ if (!colNames.has('action_config')) {
15
+ try {
16
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN action_config TEXT");
17
+ }
18
+ catch { /* */ }
19
+ }
20
+ if (!colNames.has('precondition_type')) {
21
+ try {
22
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN precondition_type TEXT");
23
+ }
24
+ catch { /* */ }
25
+ }
26
+ if (!colNames.has('precondition_config')) {
27
+ try {
28
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN precondition_config TEXT");
29
+ }
30
+ catch { /* */ }
31
+ }
32
+ if (!colNames.has('eval_after_cycles')) {
33
+ try {
34
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN eval_after_cycles INTEGER DEFAULT 5");
35
+ }
36
+ catch { /* */ }
37
+ }
38
+ if (!colNames.has('last_executed_cycle')) {
39
+ try {
40
+ db.exec("ALTER TABLE knowledge_strategies ADD COLUMN last_executed_cycle INTEGER DEFAULT 0");
41
+ }
42
+ catch { /* */ }
43
+ }
44
+ }
45
+ // ── Engine ───────────────────────────────────────────
46
+ export class StrategyExecutor {
47
+ db;
48
+ constructor(db) {
49
+ this.db = db;
50
+ runStrategyExecutorMigration(db);
51
+ this.seedExecutableStrategies();
52
+ }
53
+ /**
54
+ * Seed executable strategies from existing confirmed hypotheses.
55
+ * Turns "X co-occurs with Y" into "when X spikes, adjust parameter Z".
56
+ */
57
+ seedExecutableStrategies() {
58
+ // Only seed if no strategies have action_type yet
59
+ const withAction = this.db.prepare("SELECT count(*) as c FROM knowledge_strategies WHERE action_type IS NOT NULL").get();
60
+ if (withAction.c > 0)
61
+ return;
62
+ // Strategy 1: When anomaly_count spikes → reduce curiosity exploration (focus on known)
63
+ this.upsertExecutable('strat-exec-focus-on-anomaly', {
64
+ domain: 'adaptive',
65
+ description: 'When anomaly_count > 5, reduce exploration to focus on known patterns',
66
+ precondition_type: 'observation_threshold',
67
+ precondition_config: JSON.stringify({ observation_type: 'anomaly_count', operator: '>', threshold: 5 }),
68
+ action_type: 'parameter_adjust',
69
+ action_config: JSON.stringify({ engine: 'curiosity', name: 'exploration_constant', delta: -0.1, min: 0.5 }),
70
+ eval_after_cycles: 5,
71
+ });
72
+ // Strategy 2: When insight_count is low → increase exploration
73
+ this.upsertExecutable('strat-exec-boost-exploration', {
74
+ domain: 'adaptive',
75
+ description: 'When insight_count < 2, increase exploration to find new patterns',
76
+ precondition_type: 'observation_threshold',
77
+ precondition_config: JSON.stringify({ observation_type: 'insight_count', operator: '<', threshold: 2 }),
78
+ action_type: 'parameter_adjust',
79
+ action_config: JSON.stringify({ engine: 'curiosity', name: 'exploration_constant', delta: 0.1, max: 3.0 }),
80
+ eval_after_cycles: 5,
81
+ });
82
+ // Strategy 3: When many anomalies with high severity → increase auto-responder capacity
83
+ this.upsertExecutable('strat-exec-scale-responder', {
84
+ domain: 'adaptive',
85
+ description: 'When anomaly severity is high, allow more auto-responses per cycle',
86
+ precondition_type: 'observation_threshold',
87
+ precondition_config: JSON.stringify({ observation_type: 'anomaly_count', operator: '>', threshold: 8 }),
88
+ action_type: 'parameter_adjust',
89
+ action_config: JSON.stringify({ engine: 'auto_responder', name: 'max_responses_per_cycle', delta: 1, max: 10 }),
90
+ eval_after_cycles: 10,
91
+ });
92
+ // Strategy 4: When correlation_count is high → slow down dream consolidation (don't overwrite)
93
+ this.upsertExecutable('strat-exec-protect-correlations', {
94
+ domain: 'adaptive',
95
+ description: 'When finding many correlations, reduce dream pruning to preserve new connections',
96
+ precondition_type: 'observation_threshold',
97
+ precondition_config: JSON.stringify({ observation_type: 'correlation_count', operator: '>', threshold: 3 }),
98
+ action_type: 'parameter_adjust',
99
+ action_config: JSON.stringify({ engine: 'dream', name: 'prune_threshold', delta: -0.01, min: 0.01 }),
100
+ eval_after_cycles: 5,
101
+ });
102
+ // Strategy 5: Low testability creative → tighten gap threshold (be more selective about what to explore)
103
+ this.upsertExecutable('strat-exec-tighten-gaps', {
104
+ domain: 'adaptive',
105
+ description: 'When creative testability is low, raise gap threshold to focus exploration on stronger signals',
106
+ precondition_type: 'generator_diagnostic',
107
+ precondition_config: JSON.stringify({ generator_id: 'creative_engine', metric: 'testability_rate', operator: '<', threshold: 0.1 }),
108
+ action_type: 'parameter_adjust',
109
+ action_config: JSON.stringify({ engine: 'curiosity', name: 'gap_threshold', delta: 0.05, max: 0.9 }),
110
+ eval_after_cycles: 10,
111
+ });
112
+ log.info(`[strategy-executor] Seeded 5 executable strategies`);
113
+ }
114
+ upsertExecutable(id, config) {
115
+ const existing = this.db.prepare('SELECT id FROM knowledge_strategies WHERE id = ?').get(id);
116
+ if (existing) {
117
+ this.db.prepare(`UPDATE knowledge_strategies SET
118
+ action_type = ?, action_config = ?, precondition_type = ?, precondition_config = ?,
119
+ eval_after_cycles = ?, status = 'active'
120
+ WHERE id = ?`).run(config.action_type, config.action_config, config.precondition_type, config.precondition_config, config.eval_after_cycles, id);
121
+ }
122
+ else {
123
+ this.db.prepare(`INSERT INTO knowledge_strategies
124
+ (id, domain, description, conditions, effectiveness, evidence_count, action_type, action_config,
125
+ precondition_type, precondition_config, eval_after_cycles, status)
126
+ VALUES (?, ?, ?, '[]', 0.5, 0, ?, ?, ?, ?, ?, 'active')`).run(id, config.domain, config.description, config.action_type, config.action_config, config.precondition_type, config.precondition_config, config.eval_after_cycles);
127
+ }
128
+ }
129
+ /**
130
+ * Run one execution cycle. Pick the best eligible strategy. Execute it. Log it.
131
+ * Call this every cycle — it handles cooldown internally.
132
+ */
133
+ execute(currentCycle) {
134
+ // Get all executable strategies (have action_type, are active)
135
+ const candidates = this.db.prepare(`
136
+ SELECT * FROM knowledge_strategies
137
+ WHERE action_type IS NOT NULL
138
+ AND status = 'active'
139
+ AND (last_executed_cycle IS NULL OR last_executed_cycle < ?)
140
+ ORDER BY effectiveness DESC, use_count ASC
141
+ `).all(currentCycle - 2); // cooldown: 2 cycles minimum
142
+ if (candidates.length === 0)
143
+ return null;
144
+ // Try each candidate until one's precondition is met
145
+ for (const strat of candidates) {
146
+ const preconditionMet = this.checkPrecondition(strat);
147
+ if (!preconditionMet)
148
+ continue;
149
+ // Execute!
150
+ const details = this.executeAction(strat, currentCycle);
151
+ if (details === null)
152
+ continue;
153
+ // Record execution
154
+ this.recordExecution(strat.id, currentCycle, details);
155
+ const result = {
156
+ strategyId: strat.id,
157
+ action: strat.action_type,
158
+ preconditionMet: true,
159
+ executed: true,
160
+ details,
161
+ };
162
+ log.info(`[strategy-executor] Executed ${strat.id}: ${details}`);
163
+ return result;
164
+ }
165
+ return null; // No preconditions met
166
+ }
167
+ checkPrecondition(strat) {
168
+ if (!strat.precondition_type || !strat.precondition_config)
169
+ return false;
170
+ try {
171
+ const config = JSON.parse(strat.precondition_config);
172
+ if (strat.precondition_type === 'observation_threshold') {
173
+ // Check latest observation value
174
+ const obs = this.db.prepare('SELECT value FROM observations WHERE type = ? ORDER BY created_at DESC LIMIT 1').get(config.observation_type);
175
+ if (!obs)
176
+ return false;
177
+ switch (config.operator) {
178
+ case '>': return obs.value > config.threshold;
179
+ case '<': return obs.value < config.threshold;
180
+ case '>=': return obs.value >= config.threshold;
181
+ case '<=': return obs.value <= config.threshold;
182
+ default: return false;
183
+ }
184
+ }
185
+ if (strat.precondition_type === 'generator_diagnostic') {
186
+ const diag = this.db.prepare('SELECT * FROM generator_diagnostics WHERE generator_id = ?').get(config.generator_id);
187
+ if (!diag)
188
+ return false;
189
+ const value = diag[config.metric] ?? 0;
190
+ switch (config.operator) {
191
+ case '>': return value > config.threshold;
192
+ case '<': return value < config.threshold;
193
+ default: return false;
194
+ }
195
+ }
196
+ }
197
+ catch {
198
+ return false;
199
+ }
200
+ return false;
201
+ }
202
+ executeAction(strat, _cycle) {
203
+ if (!strat.action_type || !strat.action_config)
204
+ return null;
205
+ try {
206
+ const config = JSON.parse(strat.action_config);
207
+ if (strat.action_type === 'parameter_adjust') {
208
+ // Read current value
209
+ const current = this.db.prepare('SELECT value FROM parameter_registry WHERE engine = ? AND name = ?').get(config.engine, config.name);
210
+ if (!current)
211
+ return null;
212
+ // Apply delta with bounds
213
+ let newValue = current.value + config.delta;
214
+ if (config.min !== undefined)
215
+ newValue = Math.max(config.min, newValue);
216
+ if (config.max !== undefined)
217
+ newValue = Math.min(config.max, newValue);
218
+ // Don't mutate if no change
219
+ if (Math.abs(newValue - current.value) < 0.0001)
220
+ return null;
221
+ // Mutate!
222
+ this.db.prepare("UPDATE parameter_registry SET value = ?, updated_at = datetime('now') WHERE engine = ? AND name = ?").run(newValue, config.engine, config.name);
223
+ return `${config.engine}.${config.name}: ${current.value} → ${newValue} (Δ${config.delta > 0 ? '+' : ''}${config.delta})`;
224
+ }
225
+ }
226
+ catch (err) {
227
+ log.warn(`[strategy-executor] Action failed for ${strat.id}: ${err.message}`);
228
+ return null;
229
+ }
230
+ return null;
231
+ }
232
+ recordExecution(strategyId, cycle, details) {
233
+ // Update strategy counters
234
+ this.db.prepare(`
235
+ UPDATE knowledge_strategies SET
236
+ use_count = use_count + 1,
237
+ last_used_at = datetime('now'),
238
+ last_executed_cycle = ?,
239
+ updated_at = datetime('now')
240
+ WHERE id = ?
241
+ `).run(cycle, strategyId);
242
+ // Write to strategy_executions log
243
+ const id = `exec-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
244
+ this.db.prepare(`
245
+ INSERT INTO strategy_executions (id, strategy_id, domain, context_type, executed_at, outcome, notes)
246
+ VALUES (?, ?, 'adaptive', 'auto', datetime('now'), 'pending', ?)
247
+ `).run(id, strategyId, details);
248
+ }
249
+ /**
250
+ * Evaluate past executions — did the action help?
251
+ * Check if metrics improved after eval_after_cycles.
252
+ */
253
+ evaluate(currentCycle) {
254
+ const pending = this.db.prepare(`
255
+ SELECT se.id, se.strategy_id, se.notes, se.executed_at,
256
+ ks.eval_after_cycles, ks.last_executed_cycle, ks.action_config
257
+ FROM strategy_executions se
258
+ JOIN knowledge_strategies ks ON se.strategy_id = ks.id
259
+ WHERE se.outcome = 'pending'
260
+ `).all();
261
+ for (const p of pending) {
262
+ const executedCycle = p.last_executed_cycle || 0;
263
+ const evalAfter = p.eval_after_cycles || 5;
264
+ if (currentCycle < executedCycle + evalAfter)
265
+ continue;
266
+ // Evaluate: did the metric we tried to influence improve?
267
+ let outcome = 'neutral';
268
+ try {
269
+ const config = JSON.parse(p.action_config);
270
+ if (config.engine && config.name) {
271
+ const currentVal = this.db.prepare('SELECT value FROM parameter_registry WHERE engine = ? AND name = ?').get(config.engine, config.name);
272
+ // Simple heuristic: if system is still running well, count as success
273
+ // More sophisticated: compare metrics before/after
274
+ const recentCycles = this.db.prepare("SELECT AVG(insights_found) as avg_insights FROM cycle_outcomes WHERE created_at > datetime('now', '-1 hour')").get();
275
+ if (recentCycles && recentCycles.avg_insights >= 0.5) {
276
+ outcome = 'success';
277
+ }
278
+ else if (recentCycles && recentCycles.avg_insights < 0.1) {
279
+ outcome = 'failure';
280
+ }
281
+ log.info(`[strategy-executor] Evaluated ${p.strategy_id}: ${outcome} (avg insights: ${recentCycles?.avg_insights?.toFixed(2)})`);
282
+ }
283
+ }
284
+ catch { /* */ }
285
+ // Update execution outcome
286
+ this.db.prepare("UPDATE strategy_executions SET outcome = ? WHERE id = ?").run(outcome, p.id);
287
+ // Update strategy success/failure counts
288
+ if (outcome === 'success') {
289
+ this.db.prepare("UPDATE knowledge_strategies SET success_count = success_count + 1, effectiveness = MIN(1.0, effectiveness + 0.05) WHERE id = ?").run(p.strategy_id);
290
+ }
291
+ else if (outcome === 'failure') {
292
+ this.db.prepare("UPDATE knowledge_strategies SET failure_count = failure_count + 1, effectiveness = MAX(0.0, effectiveness - 0.1) WHERE id = ?").run(p.strategy_id);
293
+ }
294
+ }
295
+ }
296
+ }
297
+ //# sourceMappingURL=strategy-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-executor.js","sourceRoot":"","sources":["../../src/self-model/strategy-executor.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.36.108",
3
+ "version": "2.36.109",
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",