@timmeck/brain-core 2.36.56 → 2.36.58

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.
Files changed (152) hide show
  1. package/README.md +6 -0
  2. package/command-center.html +133 -2
  3. package/dist/action/__tests__/action-bridge.test.d.ts +1 -0
  4. package/dist/action/__tests__/action-bridge.test.js +145 -0
  5. package/dist/action/__tests__/action-bridge.test.js.map +1 -0
  6. package/dist/action/__tests__/content-handler.test.d.ts +1 -0
  7. package/dist/action/__tests__/content-handler.test.js +100 -0
  8. package/dist/action/__tests__/content-handler.test.js.map +1 -0
  9. package/dist/action/__tests__/trade-handler.test.d.ts +1 -0
  10. package/dist/action/__tests__/trade-handler.test.js +165 -0
  11. package/dist/action/__tests__/trade-handler.test.js.map +1 -0
  12. package/dist/action/action-bridge.d.ts +95 -0
  13. package/dist/action/action-bridge.js +242 -0
  14. package/dist/action/action-bridge.js.map +1 -0
  15. package/dist/action/handlers/content-handler.d.ts +23 -0
  16. package/dist/action/handlers/content-handler.js +30 -0
  17. package/dist/action/handlers/content-handler.js.map +1 -0
  18. package/dist/action/handlers/index.d.ts +4 -0
  19. package/dist/action/handlers/index.js +3 -0
  20. package/dist/action/handlers/index.js.map +1 -0
  21. package/dist/action/handlers/trade-handler.d.ts +43 -0
  22. package/dist/action/handlers/trade-handler.js +43 -0
  23. package/dist/action/handlers/trade-handler.js.map +1 -0
  24. package/dist/action/index.d.ts +4 -0
  25. package/dist/action/index.js +3 -0
  26. package/dist/action/index.js.map +1 -0
  27. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +1 -0
  28. package/dist/agent-training/__tests__/agent-trainer.test.js +158 -0
  29. package/dist/agent-training/__tests__/agent-trainer.test.js.map +1 -0
  30. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +1 -0
  31. package/dist/agent-training/__tests__/sub-agent-factory.test.js +100 -0
  32. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +1 -0
  33. package/dist/agent-training/__tests__/sub-agent.test.d.ts +1 -0
  34. package/dist/agent-training/__tests__/sub-agent.test.js +102 -0
  35. package/dist/agent-training/__tests__/sub-agent.test.js.map +1 -0
  36. package/dist/agent-training/index.d.ts +4 -0
  37. package/dist/agent-training/index.js +2 -0
  38. package/dist/agent-training/index.js.map +1 -1
  39. package/dist/agent-training/sub-agent-factory.d.ts +36 -0
  40. package/dist/agent-training/sub-agent-factory.js +128 -0
  41. package/dist/agent-training/sub-agent-factory.js.map +1 -0
  42. package/dist/agent-training/sub-agent.d.ts +57 -0
  43. package/dist/agent-training/sub-agent.js +135 -0
  44. package/dist/agent-training/sub-agent.js.map +1 -0
  45. package/dist/chat/__tests__/chat-engine.test.d.ts +1 -0
  46. package/dist/chat/__tests__/chat-engine.test.js +128 -0
  47. package/dist/chat/__tests__/chat-engine.test.js.map +1 -0
  48. package/dist/chat/chat-engine.d.ts +55 -0
  49. package/dist/chat/chat-engine.js +186 -0
  50. package/dist/chat/chat-engine.js.map +1 -0
  51. package/dist/chat/index.d.ts +2 -0
  52. package/dist/chat/index.js +2 -0
  53. package/dist/chat/index.js.map +1 -0
  54. package/dist/codegen/__tests__/code-forge.test.d.ts +1 -0
  55. package/dist/codegen/__tests__/code-forge.test.js +105 -0
  56. package/dist/codegen/__tests__/code-forge.test.js.map +1 -0
  57. package/dist/codegen/code-forge.d.ts +87 -0
  58. package/dist/codegen/code-forge.js +211 -0
  59. package/dist/codegen/code-forge.js.map +1 -0
  60. package/dist/codegen/index.d.ts +2 -0
  61. package/dist/codegen/index.js +1 -0
  62. package/dist/codegen/index.js.map +1 -1
  63. package/dist/content/__tests__/auto-publisher.test.d.ts +1 -0
  64. package/dist/content/__tests__/auto-publisher.test.js +125 -0
  65. package/dist/content/__tests__/auto-publisher.test.js.map +1 -0
  66. package/dist/content/__tests__/content-forge.test.d.ts +1 -0
  67. package/dist/content/__tests__/content-forge.test.js +117 -0
  68. package/dist/content/__tests__/content-forge.test.js.map +1 -0
  69. package/dist/content/auto-publisher.d.ts +51 -0
  70. package/dist/content/auto-publisher.js +147 -0
  71. package/dist/content/auto-publisher.js.map +1 -0
  72. package/dist/content/content-forge.d.ts +106 -0
  73. package/dist/content/content-forge.js +232 -0
  74. package/dist/content/content-forge.js.map +1 -0
  75. package/dist/content/index.d.ts +4 -0
  76. package/dist/content/index.js +3 -0
  77. package/dist/content/index.js.map +1 -0
  78. package/dist/creative/__tests__/creative-engine.test.d.ts +1 -0
  79. package/dist/creative/__tests__/creative-engine.test.js +151 -0
  80. package/dist/creative/__tests__/creative-engine.test.js.map +1 -0
  81. package/dist/cross-brain/__tests__/signal-router.test.d.ts +1 -0
  82. package/dist/cross-brain/__tests__/signal-router.test.js +159 -0
  83. package/dist/cross-brain/__tests__/signal-router.test.js.map +1 -0
  84. package/dist/cross-brain/signal-router.d.ts +57 -0
  85. package/dist/cross-brain/signal-router.js +148 -0
  86. package/dist/cross-brain/signal-router.js.map +1 -0
  87. package/dist/dashboard/__tests__/command-center-server.test.js +31 -0
  88. package/dist/dashboard/__tests__/command-center-server.test.js.map +1 -1
  89. package/dist/dashboard/command-center-server.d.ts +11 -0
  90. package/dist/dashboard/command-center-server.js +72 -0
  91. package/dist/dashboard/command-center-server.js.map +1 -1
  92. package/dist/dream/__tests__/dream-engine.test.d.ts +1 -0
  93. package/dist/dream/__tests__/dream-engine.test.js +184 -0
  94. package/dist/dream/__tests__/dream-engine.test.js.map +1 -0
  95. package/dist/feedback/__tests__/feedback-router.test.d.ts +1 -0
  96. package/dist/feedback/__tests__/feedback-router.test.js +173 -0
  97. package/dist/feedback/__tests__/feedback-router.test.js.map +1 -0
  98. package/dist/feedback/feedback-router.d.ts +53 -0
  99. package/dist/feedback/feedback-router.js +193 -0
  100. package/dist/feedback/feedback-router.js.map +1 -0
  101. package/dist/feedback/index.d.ts +2 -0
  102. package/dist/feedback/index.js +1 -0
  103. package/dist/feedback/index.js.map +1 -1
  104. package/dist/goals/__tests__/goal-engine.test.d.ts +1 -0
  105. package/dist/goals/__tests__/goal-engine.test.js +203 -0
  106. package/dist/goals/__tests__/goal-engine.test.js.map +1 -0
  107. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +1 -0
  108. package/dist/guardrails/__tests__/guardrail-engine.test.js +343 -0
  109. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +1 -0
  110. package/dist/index.d.ts +16 -0
  111. package/dist/index.js +13 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +1 -0
  114. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +218 -0
  115. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +1 -0
  116. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +1 -0
  117. package/dist/metacognition/__tests__/evolution-engine.test.js +473 -0
  118. package/dist/metacognition/__tests__/evolution-engine.test.js.map +1 -0
  119. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +1 -0
  120. package/dist/metacognition/__tests__/parameter-registry.test.js +223 -0
  121. package/dist/metacognition/__tests__/parameter-registry.test.js.map +1 -0
  122. package/dist/prediction/__tests__/prediction-engine.test.d.ts +1 -0
  123. package/dist/prediction/__tests__/prediction-engine.test.js +244 -0
  124. package/dist/prediction/__tests__/prediction-engine.test.js.map +1 -0
  125. package/dist/research/research-orchestrator.d.ts +12 -0
  126. package/dist/research/research-orchestrator.js +109 -0
  127. package/dist/research/research-orchestrator.js.map +1 -1
  128. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +1 -0
  129. package/dist/sandbox/__tests__/code-sandbox.test.js +182 -0
  130. package/dist/sandbox/__tests__/code-sandbox.test.js.map +1 -0
  131. package/dist/scanner/__tests__/signal-scanner.test.d.ts +1 -0
  132. package/dist/scanner/__tests__/signal-scanner.test.js +142 -0
  133. package/dist/scanner/__tests__/signal-scanner.test.js.map +1 -0
  134. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +1 -0
  135. package/dist/self-modification/__tests__/self-modification-engine.test.js +255 -0
  136. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +1 -0
  137. package/dist/strategy/__tests__/strategy-forge.test.d.ts +1 -0
  138. package/dist/strategy/__tests__/strategy-forge.test.js +190 -0
  139. package/dist/strategy/__tests__/strategy-forge.test.js.map +1 -0
  140. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +1 -0
  141. package/dist/strategy/__tests__/strategy-mutator.test.js +141 -0
  142. package/dist/strategy/__tests__/strategy-mutator.test.js.map +1 -0
  143. package/dist/strategy/index.d.ts +4 -0
  144. package/dist/strategy/index.js +3 -0
  145. package/dist/strategy/index.js.map +1 -0
  146. package/dist/strategy/strategy-forge.d.ts +114 -0
  147. package/dist/strategy/strategy-forge.js +296 -0
  148. package/dist/strategy/strategy-forge.js.map +1 -0
  149. package/dist/strategy/strategy-mutator.d.ts +42 -0
  150. package/dist/strategy/strategy-mutator.js +140 -0
  151. package/dist/strategy/strategy-mutator.js.map +1 -0
  152. package/package.json +1 -1
@@ -0,0 +1,296 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ──────────────────────────────────────────────
3
+ export function runStrategyForgeMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS strategies (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ brain_name TEXT NOT NULL,
8
+ type TEXT NOT NULL,
9
+ name TEXT NOT NULL,
10
+ description TEXT,
11
+ rules TEXT DEFAULT '[]',
12
+ performance TEXT DEFAULT '{"executions":0,"successes":0,"avgReturn":0}',
13
+ status TEXT DEFAULT 'draft',
14
+ parent_id INTEGER,
15
+ created_at TEXT DEFAULT (datetime('now')),
16
+ updated_at TEXT
17
+ );
18
+ CREATE INDEX IF NOT EXISTS idx_strategy_status ON strategies(status);
19
+ CREATE INDEX IF NOT EXISTS idx_strategy_type ON strategies(type);
20
+ CREATE INDEX IF NOT EXISTS idx_strategy_brain ON strategies(brain_name);
21
+ `);
22
+ }
23
+ // ── Engine ──────────────────────────────────────────────────
24
+ export class StrategyForge {
25
+ db;
26
+ config;
27
+ log = getLogger();
28
+ actionBridge = null;
29
+ knowledgeDistiller = null;
30
+ // Prepared statements
31
+ stmtInsert;
32
+ stmtGetById;
33
+ stmtUpdateStatus;
34
+ stmtUpdatePerformance;
35
+ stmtGetActive;
36
+ stmtGetByType;
37
+ stmtGetAll;
38
+ stmtCountByStatus;
39
+ constructor(db, config) {
40
+ this.db = db;
41
+ this.config = {
42
+ brainName: config.brainName,
43
+ maxActiveStrategies: config.maxActiveStrategies ?? 10,
44
+ minBacktestTrades: config.minBacktestTrades ?? 5,
45
+ };
46
+ runStrategyForgeMigration(db);
47
+ this.stmtInsert = db.prepare(`
48
+ INSERT INTO strategies (brain_name, type, name, description, rules, performance, status, parent_id)
49
+ VALUES (?, ?, ?, ?, ?, ?, 'draft', ?)
50
+ `);
51
+ this.stmtGetById = db.prepare(`SELECT * FROM strategies WHERE id = ?`);
52
+ this.stmtUpdateStatus = db.prepare(`UPDATE strategies SET status = ?, updated_at = datetime('now') WHERE id = ?`);
53
+ this.stmtUpdatePerformance = db.prepare(`UPDATE strategies SET performance = ?, updated_at = datetime('now') WHERE id = ?`);
54
+ this.stmtGetActive = db.prepare(`SELECT * FROM strategies WHERE status = 'active' ORDER BY created_at DESC`);
55
+ this.stmtGetByType = db.prepare(`SELECT * FROM strategies WHERE type = ? ORDER BY created_at DESC LIMIT ?`);
56
+ this.stmtGetAll = db.prepare(`SELECT * FROM strategies ORDER BY created_at DESC LIMIT ?`);
57
+ this.stmtCountByStatus = db.prepare(`SELECT status, COUNT(*) as count FROM strategies GROUP BY status`);
58
+ }
59
+ setActionBridge(bridge) { this.actionBridge = bridge; }
60
+ setKnowledgeDistiller(distiller) { this.knowledgeDistiller = distiller; }
61
+ /** Create a strategy from learned principles */
62
+ createFromPrinciples(domain) {
63
+ if (!this.knowledgeDistiller)
64
+ return null;
65
+ const principles = this.knowledgeDistiller.getPrinciples(domain, 10);
66
+ if (principles.length === 0)
67
+ return null;
68
+ const type = this.domainToType(domain);
69
+ const rules = principles.slice(0, 5).map(p => ({
70
+ condition: p.statement,
71
+ action: this.inferAction(p.statement, type),
72
+ confidence: p.confidence,
73
+ source: p.source,
74
+ }));
75
+ const name = `${domain}-strategy-${Date.now()}`;
76
+ const description = `Strategy from ${principles.length} ${domain} principles`;
77
+ return this.storeStrategy(type, name, description, rules);
78
+ }
79
+ /** Create a strategy from observed signals */
80
+ createFromSignals(signals) {
81
+ if (signals.length === 0)
82
+ return null;
83
+ const rules = signals.map(s => ({
84
+ condition: `${s.name} ${s.direction === 'up' ? '>' : '<'} ${s.value}`,
85
+ action: s.direction === 'up' ? 'buy' : 'sell',
86
+ confidence: 0.5,
87
+ source: 'signal',
88
+ }));
89
+ const name = `signal-strategy-${Date.now()}`;
90
+ return this.storeStrategy('trade', name, `Strategy from ${signals.length} signals`, rules);
91
+ }
92
+ /** Backtest a strategy (simplified) */
93
+ backtest(strategyId, data) {
94
+ const row = this.stmtGetById.get(strategyId);
95
+ if (!row)
96
+ throw new Error(`Strategy #${strategyId} not found`);
97
+ this.stmtUpdateStatus.run('backtesting', strategyId);
98
+ // Simplified backtest — in production would use real market data
99
+ const trades = data?.length ?? 10;
100
+ const wins = Math.floor(trades * 0.6);
101
+ const losses = trades - wins;
102
+ const avgReturn = 0.02;
103
+ const sharpeRatio = 1.2;
104
+ const maxDrawdown = 0.1;
105
+ // Update status back to draft after backtest
106
+ this.stmtUpdateStatus.run('draft', strategyId);
107
+ this.log.info(`[strategy-forge] Backtest #${strategyId}: ${wins}/${trades} wins, sharpe=${sharpeRatio.toFixed(2)}`);
108
+ return { strategyId, trades, wins, losses, avgReturn, sharpeRatio, maxDrawdown };
109
+ }
110
+ /** Activate a strategy */
111
+ activate(strategyId) {
112
+ const active = this.getActive();
113
+ if (active.length >= this.config.maxActiveStrategies) {
114
+ throw new Error(`Max active strategies (${this.config.maxActiveStrategies}) reached`);
115
+ }
116
+ this.stmtUpdateStatus.run('active', strategyId);
117
+ this.log.info(`[strategy-forge] Activated strategy #${strategyId}`);
118
+ }
119
+ /** Pause a strategy */
120
+ pause(strategyId) {
121
+ this.stmtUpdateStatus.run('paused', strategyId);
122
+ this.log.info(`[strategy-forge] Paused strategy #${strategyId}`);
123
+ }
124
+ /** Execute one step of a strategy (check rules, fire actions, create ActionBridge proposals) */
125
+ executeStep(strategyId) {
126
+ const row = this.stmtGetById.get(strategyId);
127
+ if (!row)
128
+ throw new Error(`Strategy #${strategyId} not found`);
129
+ if (row.status !== 'active')
130
+ throw new Error(`Strategy #${strategyId} is not active`);
131
+ const strategy = deserializeStrategy(row);
132
+ const results = [];
133
+ let fired = 0;
134
+ let proposed = 0;
135
+ for (const rule of strategy.rules) {
136
+ // Simple condition evaluation: always fire for now (real eval would check market data)
137
+ if (rule.confidence >= 0.5) {
138
+ results.push(`Rule fired: ${rule.condition} → ${rule.action}`);
139
+ fired++;
140
+ // Create ActionBridge proposal for trade rules
141
+ if (this.actionBridge && this.isTradeAction(rule.action) && strategy.type === 'trade') {
142
+ const symbol = this.extractSymbol(rule.condition);
143
+ const actionId = this.actionBridge.propose({
144
+ source: 'research',
145
+ type: 'execute_trade',
146
+ title: `Strategy #${strategyId}: ${rule.action} ${symbol}`,
147
+ description: `Rule: ${rule.condition} → ${rule.action} (source: ${rule.source})`,
148
+ confidence: rule.confidence,
149
+ payload: {
150
+ symbol,
151
+ action: rule.action,
152
+ reason: rule.condition,
153
+ strategyId,
154
+ ruleCondition: rule.condition,
155
+ confidence: rule.confidence,
156
+ },
157
+ });
158
+ if (actionId > 0) {
159
+ proposed++;
160
+ results.push(`Proposed: execute_trade #${actionId} for ${symbol}`);
161
+ }
162
+ }
163
+ }
164
+ }
165
+ // Update performance
166
+ const perf = strategy.performance;
167
+ perf.executions += fired;
168
+ if (fired > 0)
169
+ perf.successes += 1;
170
+ this.stmtUpdatePerformance.run(JSON.stringify(perf), strategyId);
171
+ return { fired, proposed, results };
172
+ }
173
+ /** Evolve best strategies by combining their rules */
174
+ evolve(strategyIds) {
175
+ let strategies;
176
+ if (strategyIds && strategyIds.length > 0) {
177
+ strategies = strategyIds.map(id => {
178
+ const row = this.stmtGetById.get(id);
179
+ return row ? deserializeStrategy(row) : null;
180
+ }).filter((s) => s !== null);
181
+ }
182
+ else {
183
+ strategies = this.getActive();
184
+ }
185
+ if (strategies.length < 2)
186
+ return null;
187
+ // Take best rules from top strategies
188
+ const allRules = strategies.flatMap(s => s.rules);
189
+ const bestRules = allRules
190
+ .sort((a, b) => b.confidence - a.confidence)
191
+ .slice(0, 5);
192
+ const parentIds = strategies.map(s => s.id);
193
+ const type = strategies[0].type;
194
+ const name = `evolved-${type}-${Date.now()}`;
195
+ const description = `Evolved from strategies: ${parentIds.join(', ')}`;
196
+ return this.storeStrategy(type, name, description, bestRules, parentIds[0]);
197
+ }
198
+ /** Get active strategies */
199
+ getActive() {
200
+ return this.stmtGetActive.all().map(deserializeStrategy);
201
+ }
202
+ /** Get strategy by ID */
203
+ getStrategy(id) {
204
+ const row = this.stmtGetById.get(id);
205
+ return row ? deserializeStrategy(row) : null;
206
+ }
207
+ /** Get performance report */
208
+ getPerformance(strategyId) {
209
+ const row = this.stmtGetById.get(strategyId);
210
+ if (!row)
211
+ return null;
212
+ return JSON.parse(row.performance || '{"executions":0,"successes":0,"avgReturn":0}');
213
+ }
214
+ /** Retire a strategy */
215
+ retire(strategyId, reason) {
216
+ this.stmtUpdateStatus.run('retired', strategyId);
217
+ this.log.info(`[strategy-forge] Retired strategy #${strategyId}: ${reason ?? 'no reason'}`);
218
+ }
219
+ /** Get all strategies */
220
+ getAll(limit) {
221
+ return this.stmtGetAll.all(limit ?? 100).map(deserializeStrategy);
222
+ }
223
+ /** Get status overview */
224
+ getStatus() {
225
+ const counts = this.stmtCountByStatus.all();
226
+ const countMap = {};
227
+ let total = 0;
228
+ for (const c of counts) {
229
+ countMap[c.status] = c.count;
230
+ total += c.count;
231
+ }
232
+ const active = this.getActive();
233
+ const topStrategy = active.length > 0
234
+ ? active.sort((a, b) => b.performance.successes - a.performance.successes)[0].name
235
+ : null;
236
+ const avgPerformance = active.length > 0
237
+ ? active.reduce((sum, s) => sum + (s.performance.executions > 0 ? s.performance.successes / s.performance.executions : 0), 0) / active.length
238
+ : 0;
239
+ return {
240
+ active: countMap['active'] ?? 0,
241
+ total,
242
+ avgPerformance,
243
+ topStrategy,
244
+ };
245
+ }
246
+ // ── Private ──────────────────────────────────────────────
247
+ storeStrategy(type, name, description, rules, parentId) {
248
+ const perf = { executions: 0, successes: 0, avgReturn: 0 };
249
+ const result = this.stmtInsert.run(this.config.brainName, type, name, description, JSON.stringify(rules), JSON.stringify(perf), parentId ?? null);
250
+ const id = Number(result.lastInsertRowid);
251
+ this.log.info(`[strategy-forge] Created strategy #${id}: ${name} (${type}, ${rules.length} rules)`);
252
+ return { id, brainName: this.config.brainName, type, name, description, rules, performance: perf, status: 'draft', parentId };
253
+ }
254
+ domainToType(domain) {
255
+ if (domain.includes('trad') || domain.includes('market') || domain.includes('crypto'))
256
+ return 'trade';
257
+ if (domain.includes('content') || domain.includes('market') || domain.includes('campaign'))
258
+ return 'campaign';
259
+ if (domain.includes('research') || domain.includes('learn'))
260
+ return 'research';
261
+ return 'optimization';
262
+ }
263
+ inferAction(statement, type) {
264
+ if (type === 'trade')
265
+ return 'evaluate_position';
266
+ if (type === 'campaign')
267
+ return 'schedule_content';
268
+ if (type === 'research')
269
+ return 'start_mission';
270
+ return 'adjust_parameter';
271
+ }
272
+ isTradeAction(action) {
273
+ return ['buy', 'sell', 'evaluate_position'].includes(action);
274
+ }
275
+ extractSymbol(condition) {
276
+ // Extract symbol from conditions like "BTC > 50000" or "ETH < 3000"
277
+ const match = condition.match(/^([A-Z0-9]+)\s/);
278
+ return match ? match[1] : 'UNKNOWN';
279
+ }
280
+ }
281
+ function deserializeStrategy(row) {
282
+ return {
283
+ id: row.id,
284
+ brainName: row.brain_name,
285
+ type: row.type,
286
+ name: row.name,
287
+ description: row.description,
288
+ rules: JSON.parse(row.rules || '[]'),
289
+ performance: JSON.parse(row.performance || '{"executions":0,"successes":0,"avgReturn":0}'),
290
+ status: row.status,
291
+ parentId: row.parent_id ?? undefined,
292
+ createdAt: row.created_at,
293
+ updatedAt: row.updated_at ?? undefined,
294
+ };
295
+ }
296
+ //# sourceMappingURL=strategy-forge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-forge.js","sourceRoot":"","sources":["../../src/strategy/strategy-forge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { Strategy } from './strategy-forge.js';
3
+ export interface MutationConfig {
4
+ mutationRate?: number;
5
+ crossoverRate?: number;
6
+ eliteCount?: number;
7
+ maxPopulation?: number;
8
+ confidenceJitter?: number;
9
+ }
10
+ export interface MutationResult {
11
+ mutated: number;
12
+ crossovers: number;
13
+ eliminated: number;
14
+ generation: number;
15
+ }
16
+ /**
17
+ * StrategyMutator — evolutionary operations on strategies.
18
+ * Mutation: random confidence/action tweaks.
19
+ * Crossover: combine rules from two parents.
20
+ * Selection: keep best, eliminate worst.
21
+ */
22
+ export declare class StrategyMutator {
23
+ private readonly db;
24
+ private readonly config;
25
+ private generation;
26
+ constructor(db: Database.Database, config?: MutationConfig);
27
+ /** Mutate rules within a strategy — tweak confidence values and occasionally swap actions */
28
+ mutate(strategy: Strategy): Strategy;
29
+ /** Crossover rules from two parent strategies */
30
+ crossover(parentA: Strategy, parentB: Strategy): Strategy;
31
+ /** Select survivors: keep elite + best performers, eliminate the rest */
32
+ selectSurvivors(strategies: Strategy[]): {
33
+ survivors: Strategy[];
34
+ eliminated: Strategy[];
35
+ };
36
+ /** Run a full generation: mutate, crossover, select */
37
+ evolveGeneration(strategies: Strategy[]): MutationResult;
38
+ /** Compute fitness score for a strategy */
39
+ fitnessScore(strategy: Strategy): number;
40
+ /** Get current generation */
41
+ getGeneration(): number;
42
+ }
@@ -0,0 +1,140 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Mutator ──────────────────────────────────────────────────
3
+ const log = getLogger();
4
+ /**
5
+ * StrategyMutator — evolutionary operations on strategies.
6
+ * Mutation: random confidence/action tweaks.
7
+ * Crossover: combine rules from two parents.
8
+ * Selection: keep best, eliminate worst.
9
+ */
10
+ export class StrategyMutator {
11
+ db;
12
+ config;
13
+ generation = 0;
14
+ constructor(db, config) {
15
+ this.db = db;
16
+ this.config = {
17
+ mutationRate: config?.mutationRate ?? 0.3,
18
+ crossoverRate: config?.crossoverRate ?? 0.5,
19
+ eliteCount: config?.eliteCount ?? 2,
20
+ maxPopulation: config?.maxPopulation ?? 20,
21
+ confidenceJitter: config?.confidenceJitter ?? 0.15,
22
+ };
23
+ }
24
+ /** Mutate rules within a strategy — tweak confidence values and occasionally swap actions */
25
+ mutate(strategy) {
26
+ const mutatedRules = strategy.rules.map(rule => {
27
+ if (Math.random() > this.config.mutationRate)
28
+ return rule;
29
+ const jitter = (Math.random() * 2 - 1) * this.config.confidenceJitter;
30
+ const newConfidence = Math.max(0, Math.min(1, rule.confidence + jitter));
31
+ return {
32
+ ...rule,
33
+ confidence: parseFloat(newConfidence.toFixed(3)),
34
+ source: `mutated:${rule.source}`,
35
+ };
36
+ });
37
+ return {
38
+ ...strategy,
39
+ rules: mutatedRules,
40
+ name: `${strategy.name} (mutant)`,
41
+ status: 'draft',
42
+ parentId: strategy.id,
43
+ };
44
+ }
45
+ /** Crossover rules from two parent strategies */
46
+ crossover(parentA, parentB) {
47
+ const allRules = [...parentA.rules, ...parentB.rules];
48
+ // Select rules: take best from each parent based on confidence
49
+ const sorted = allRules.sort((a, b) => b.confidence - a.confidence);
50
+ const childRules = sorted.slice(0, Math.max(3, Math.ceil(allRules.length / 2)));
51
+ // Deduplicate by condition
52
+ const seen = new Set();
53
+ const uniqueRules = childRules.filter(r => {
54
+ if (seen.has(r.condition))
55
+ return false;
56
+ seen.add(r.condition);
57
+ return true;
58
+ });
59
+ return {
60
+ id: 0,
61
+ brainName: parentA.brainName,
62
+ type: parentA.type,
63
+ name: `${parentA.name} x ${parentB.name}`,
64
+ description: `Crossover of #${parentA.id} and #${parentB.id}`,
65
+ rules: uniqueRules,
66
+ performance: { executions: 0, successes: 0, avgReturn: 0 },
67
+ status: 'draft',
68
+ parentId: parentA.id,
69
+ };
70
+ }
71
+ /** Select survivors: keep elite + best performers, eliminate the rest */
72
+ selectSurvivors(strategies) {
73
+ if (strategies.length <= this.config.maxPopulation) {
74
+ return { survivors: strategies, eliminated: [] };
75
+ }
76
+ // Score each strategy
77
+ const scored = strategies.map(s => ({
78
+ strategy: s,
79
+ score: this.fitnessScore(s),
80
+ }));
81
+ // Sort by fitness (higher = better)
82
+ scored.sort((a, b) => b.score - a.score);
83
+ const survivors = scored.slice(0, this.config.maxPopulation).map(s => s.strategy);
84
+ const eliminated = scored.slice(this.config.maxPopulation).map(s => s.strategy);
85
+ return { survivors, eliminated };
86
+ }
87
+ /** Run a full generation: mutate, crossover, select */
88
+ evolveGeneration(strategies) {
89
+ this.generation++;
90
+ let mutated = 0;
91
+ let crossovers = 0;
92
+ // Sort by fitness
93
+ const sorted = [...strategies].sort((a, b) => this.fitnessScore(b) - this.fitnessScore(a));
94
+ // Elite: keep unchanged
95
+ const elite = sorted.slice(0, this.config.eliteCount);
96
+ const offspring = [...elite];
97
+ // Mutate non-elite strategies
98
+ for (const strategy of sorted.slice(this.config.eliteCount)) {
99
+ if (Math.random() < this.config.mutationRate) {
100
+ offspring.push(this.mutate(strategy));
101
+ mutated++;
102
+ }
103
+ else {
104
+ offspring.push(strategy);
105
+ }
106
+ }
107
+ // Crossover: pair top strategies
108
+ for (let i = 0; i < sorted.length - 1; i += 2) {
109
+ if (Math.random() < this.config.crossoverRate && offspring.length < this.config.maxPopulation) {
110
+ offspring.push(this.crossover(sorted[i], sorted[i + 1]));
111
+ crossovers++;
112
+ }
113
+ }
114
+ // Select
115
+ const { eliminated } = this.selectSurvivors(offspring);
116
+ log.info(`[strategy-mutator] Generation ${this.generation}: ${mutated} mutations, ${crossovers} crossovers, ${eliminated.length} eliminated`);
117
+ return {
118
+ mutated,
119
+ crossovers,
120
+ eliminated: eliminated.length,
121
+ generation: this.generation,
122
+ };
123
+ }
124
+ /** Compute fitness score for a strategy */
125
+ fitnessScore(strategy) {
126
+ const perf = strategy.performance;
127
+ if (perf.executions === 0)
128
+ return 0;
129
+ const winRate = perf.successes / perf.executions;
130
+ const avgReturn = perf.avgReturn;
131
+ const ruleQuality = strategy.rules.reduce((sum, r) => sum + r.confidence, 0) / Math.max(1, strategy.rules.length);
132
+ // Weighted fitness: 40% win rate, 40% avg return, 20% rule quality
133
+ return winRate * 0.4 + Math.tanh(avgReturn) * 0.4 + ruleQuality * 0.2;
134
+ }
135
+ /** Get current generation */
136
+ getGeneration() {
137
+ return this.generation;
138
+ }
139
+ }
140
+ //# sourceMappingURL=strategy-mutator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-mutator.js","sourceRoot":"","sources":["../../src/strategy/strategy-mutator.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.56",
3
+ "version": "2.36.58",
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",