@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 @@
1
+ {"version":3,"file":"self-modification-engine.test.js","sourceRoot":"","sources":["../../../src/self-modification/__tests__/self-modification-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,190 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import Database from 'better-sqlite3';
3
+ vi.mock('../../utils/logger.js', () => ({
4
+ getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
+ }));
6
+ import { StrategyForge, runStrategyForgeMigration } from '../strategy-forge.js';
7
+ import { ActionBridgeEngine } from '../../action/action-bridge.js';
8
+ describe('StrategyForge', () => {
9
+ let db;
10
+ beforeEach(() => { db = new Database(':memory:'); });
11
+ afterEach(() => { db.close(); });
12
+ it('creates a strategy from principles', () => {
13
+ const forge = new StrategyForge(db, { brainName: 'test' });
14
+ forge.setKnowledgeDistiller({
15
+ getPrinciples: () => [
16
+ { id: 'p1', statement: 'Buy when RSI < 30', domain: 'trading', confidence: 0.8, source: 'learned' },
17
+ { id: 'p2', statement: 'Sell when RSI > 70', domain: 'trading', confidence: 0.7, source: 'learned' },
18
+ ],
19
+ });
20
+ const strategy = forge.createFromPrinciples('trading');
21
+ expect(strategy).not.toBeNull();
22
+ expect(strategy.type).toBe('trade');
23
+ expect(strategy.rules).toHaveLength(2);
24
+ expect(strategy.status).toBe('draft');
25
+ });
26
+ it('returns null when no distiller', () => {
27
+ const forge = new StrategyForge(db, { brainName: 'test' });
28
+ expect(forge.createFromPrinciples('trading')).toBeNull();
29
+ });
30
+ it('returns null when no principles', () => {
31
+ const forge = new StrategyForge(db, { brainName: 'test' });
32
+ forge.setKnowledgeDistiller({ getPrinciples: () => [] });
33
+ expect(forge.createFromPrinciples('trading')).toBeNull();
34
+ });
35
+ it('creates a strategy from signals', () => {
36
+ const forge = new StrategyForge(db, { brainName: 'test' });
37
+ const strategy = forge.createFromSignals([
38
+ { name: 'RSI', value: 30, direction: 'up' },
39
+ { name: 'MACD', value: 0, direction: 'down' },
40
+ ]);
41
+ expect(strategy).not.toBeNull();
42
+ expect(strategy.rules).toHaveLength(2);
43
+ });
44
+ it('backtests a strategy', () => {
45
+ const forge = new StrategyForge(db, { brainName: 'test' });
46
+ const strategy = forge.createFromSignals([{ name: 'price', value: 100, direction: 'up' }]);
47
+ const result = forge.backtest(strategy.id);
48
+ expect(result.strategyId).toBe(strategy.id);
49
+ expect(result.trades).toBeGreaterThan(0);
50
+ expect(result.sharpeRatio).toBeGreaterThan(0);
51
+ });
52
+ it('activates and pauses a strategy', () => {
53
+ const forge = new StrategyForge(db, { brainName: 'test' });
54
+ const strategy = forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
55
+ forge.activate(strategy.id);
56
+ expect(forge.getActive()).toHaveLength(1);
57
+ forge.pause(strategy.id);
58
+ expect(forge.getActive()).toHaveLength(0);
59
+ });
60
+ it('respects max active strategies', () => {
61
+ const forge = new StrategyForge(db, { brainName: 'test', maxActiveStrategies: 1 });
62
+ const s1 = forge.createFromSignals([{ name: 'A', value: 1, direction: 'up' }]);
63
+ const s2 = forge.createFromSignals([{ name: 'B', value: 2, direction: 'down' }]);
64
+ forge.activate(s1.id);
65
+ expect(() => forge.activate(s2.id)).toThrow('Max active strategies');
66
+ });
67
+ it('executes a strategy step', () => {
68
+ const forge = new StrategyForge(db, { brainName: 'test' });
69
+ const strategy = forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
70
+ forge.activate(strategy.id);
71
+ const result = forge.executeStep(strategy.id);
72
+ expect(result.fired).toBeGreaterThanOrEqual(1);
73
+ expect(result.results.length).toBeGreaterThanOrEqual(1);
74
+ });
75
+ it('cannot execute inactive strategy', () => {
76
+ const forge = new StrategyForge(db, { brainName: 'test' });
77
+ const strategy = forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
78
+ expect(() => forge.executeStep(strategy.id)).toThrow('not active');
79
+ });
80
+ it('evolves strategies by combining best rules', () => {
81
+ const forge = new StrategyForge(db, { brainName: 'test' });
82
+ const s1 = forge.createFromSignals([{ name: 'A', value: 1, direction: 'up' }]);
83
+ const s2 = forge.createFromSignals([{ name: 'B', value: 2, direction: 'down' }]);
84
+ forge.activate(s1.id);
85
+ forge.activate(s2.id);
86
+ const evolved = forge.evolve();
87
+ expect(evolved).not.toBeNull();
88
+ expect(evolved.name).toContain('evolved');
89
+ expect(evolved.rules.length).toBeGreaterThanOrEqual(1);
90
+ });
91
+ it('retires a strategy', () => {
92
+ const forge = new StrategyForge(db, { brainName: 'test' });
93
+ const strategy = forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
94
+ forge.retire(strategy.id, 'underperforming');
95
+ const s = forge.getStrategy(strategy.id);
96
+ expect(s?.status).toBe('retired');
97
+ });
98
+ it('getPerformance returns metrics', () => {
99
+ const forge = new StrategyForge(db, { brainName: 'test' });
100
+ const strategy = forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
101
+ forge.activate(strategy.id);
102
+ forge.executeStep(strategy.id);
103
+ const perf = forge.getPerformance(strategy.id);
104
+ expect(perf).not.toBeNull();
105
+ expect(perf.executions).toBeGreaterThan(0);
106
+ });
107
+ it('getStatus returns overview', () => {
108
+ const forge = new StrategyForge(db, { brainName: 'test' });
109
+ forge.createFromSignals([{ name: 'X', value: 1, direction: 'up' }]);
110
+ const status = forge.getStatus();
111
+ expect(status.total).toBe(1);
112
+ expect(status.active).toBe(0);
113
+ });
114
+ it('migration is idempotent', () => {
115
+ const forge = new StrategyForge(db, { brainName: 'test' });
116
+ forge.createFromSignals([{ name: 'Y', value: 5, direction: 'up' }]);
117
+ runStrategyForgeMigration(db);
118
+ const all = forge.getAll();
119
+ expect(all).toHaveLength(1);
120
+ });
121
+ // ─── Session 96: ActionBridge Integration ──────────────────
122
+ it('executeStep returns proposed count', () => {
123
+ const forge = new StrategyForge(db, { brainName: 'test' });
124
+ const strategy = forge.createFromSignals([{ name: 'BTC', value: 50000, direction: 'up' }]);
125
+ forge.activate(strategy.id);
126
+ const result = forge.executeStep(strategy.id);
127
+ expect(result).toHaveProperty('proposed');
128
+ expect(result.proposed).toBe(0); // No ActionBridge set
129
+ });
130
+ it('executeStep creates proposals when ActionBridge is set', () => {
131
+ const forge = new StrategyForge(db, { brainName: 'test' });
132
+ const actionBridge = new ActionBridgeEngine(db, { brainName: 'test' });
133
+ forge.setActionBridge(actionBridge);
134
+ const strategy = forge.createFromSignals([{ name: 'BTC', value: 50000, direction: 'up' }]);
135
+ forge.activate(strategy.id);
136
+ const result = forge.executeStep(strategy.id);
137
+ expect(result.fired).toBe(1);
138
+ expect(result.proposed).toBe(1);
139
+ const queue = actionBridge.getQueue('pending');
140
+ expect(queue).toHaveLength(1);
141
+ expect(queue[0].type).toBe('execute_trade');
142
+ expect(queue[0].payload.symbol).toBe('BTC');
143
+ expect(queue[0].payload.action).toBe('buy');
144
+ expect(queue[0].payload.strategyId).toBe(strategy.id);
145
+ });
146
+ it('executeStep creates sell proposals for downward signals', () => {
147
+ const forge = new StrategyForge(db, { brainName: 'test' });
148
+ const actionBridge = new ActionBridgeEngine(db, { brainName: 'test' });
149
+ forge.setActionBridge(actionBridge);
150
+ const strategy = forge.createFromSignals([{ name: 'ETH', value: 3000, direction: 'down' }]);
151
+ forge.activate(strategy.id);
152
+ forge.executeStep(strategy.id);
153
+ const queue = actionBridge.getQueue('pending');
154
+ expect(queue).toHaveLength(1);
155
+ expect(queue[0].payload.action).toBe('sell');
156
+ expect(queue[0].payload.symbol).toBe('ETH');
157
+ });
158
+ it('does not propose for non-trade strategies', () => {
159
+ const forge = new StrategyForge(db, { brainName: 'test' });
160
+ const actionBridge = new ActionBridgeEngine(db, { brainName: 'test' });
161
+ forge.setActionBridge(actionBridge);
162
+ // createFromPrinciples with content domain → campaign type
163
+ forge.setKnowledgeDistiller({
164
+ getPrinciples: () => [
165
+ { id: 'p1', statement: 'Post daily updates', domain: 'content', confidence: 0.8, source: 'learned' },
166
+ ],
167
+ });
168
+ const strategy = forge.createFromPrinciples('content');
169
+ forge.activate(strategy.id);
170
+ const result = forge.executeStep(strategy.id);
171
+ expect(result.proposed).toBe(0); // campaign type → no trade proposals
172
+ });
173
+ it('multiple rules create multiple proposals', () => {
174
+ const forge = new StrategyForge(db, { brainName: 'test' });
175
+ const actionBridge = new ActionBridgeEngine(db, { brainName: 'test' });
176
+ forge.setActionBridge(actionBridge);
177
+ const strategy = forge.createFromSignals([
178
+ { name: 'BTC', value: 50000, direction: 'up' },
179
+ { name: 'ETH', value: 3000, direction: 'down' },
180
+ { name: 'SOL', value: 100, direction: 'up' },
181
+ ]);
182
+ forge.activate(strategy.id);
183
+ const result = forge.executeStep(strategy.id);
184
+ expect(result.fired).toBe(3);
185
+ expect(result.proposed).toBe(3);
186
+ const queue = actionBridge.getQueue('pending');
187
+ expect(queue).toHaveLength(3);
188
+ });
189
+ });
190
+ //# sourceMappingURL=strategy-forge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-forge.test.js","sourceRoot":"","sources":["../../../src/strategy/__tests__/strategy-forge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,141 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import Database from 'better-sqlite3';
3
+ vi.mock('../../utils/logger.js', () => ({
4
+ getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
+ }));
6
+ import { StrategyMutator } from '../strategy-mutator.js';
7
+ function makeStrategy(overrides = {}) {
8
+ return {
9
+ id: 1,
10
+ brainName: 'test',
11
+ type: 'trade',
12
+ name: 'Test Strategy',
13
+ description: 'Test',
14
+ rules: [
15
+ { condition: 'BTC > 50000', action: 'buy', confidence: 0.8, source: 'signal' },
16
+ { condition: 'ETH < 2000', action: 'sell', confidence: 0.6, source: 'signal' },
17
+ ],
18
+ performance: { executions: 10, successes: 7, avgReturn: 0.05 },
19
+ status: 'active',
20
+ ...overrides,
21
+ };
22
+ }
23
+ describe('StrategyMutator', () => {
24
+ let db;
25
+ beforeEach(() => { db = new Database(':memory:'); });
26
+ afterEach(() => { db.close(); });
27
+ it('creates with default config', () => {
28
+ const mutator = new StrategyMutator(db);
29
+ expect(mutator.getGeneration()).toBe(0);
30
+ });
31
+ it('mutates a strategy (high mutation rate)', () => {
32
+ const mutator = new StrategyMutator(db, { mutationRate: 1.0 });
33
+ const strategy = makeStrategy();
34
+ const mutated = mutator.mutate(strategy);
35
+ expect(mutated.name).toContain('mutant');
36
+ expect(mutated.status).toBe('draft');
37
+ expect(mutated.parentId).toBe(strategy.id);
38
+ expect(mutated.rules.length).toBe(strategy.rules.length);
39
+ });
40
+ it('mutated rules have jittered confidence', () => {
41
+ const mutator = new StrategyMutator(db, { mutationRate: 1.0, confidenceJitter: 0.5 });
42
+ const strategy = makeStrategy({
43
+ rules: [{ condition: 'X', action: 'buy', confidence: 0.5, source: 'test' }],
44
+ });
45
+ // Run multiple times to check jitter
46
+ const confidences = new Set();
47
+ for (let i = 0; i < 20; i++) {
48
+ const m = mutator.mutate(strategy);
49
+ confidences.add(m.rules[0].confidence);
50
+ }
51
+ // Should have different values (probabilistic, but with 0.5 jitter on 20 runs, extremely unlikely all same)
52
+ expect(confidences.size).toBeGreaterThan(1);
53
+ });
54
+ it('confidence stays in [0, 1] range', () => {
55
+ const mutator = new StrategyMutator(db, { mutationRate: 1.0, confidenceJitter: 2.0 });
56
+ const strategy = makeStrategy({
57
+ rules: [{ condition: 'X', action: 'buy', confidence: 0.99, source: 'test' }],
58
+ });
59
+ for (let i = 0; i < 50; i++) {
60
+ const m = mutator.mutate(strategy);
61
+ expect(m.rules[0].confidence).toBeGreaterThanOrEqual(0);
62
+ expect(m.rules[0].confidence).toBeLessThanOrEqual(1);
63
+ }
64
+ });
65
+ it('crossover combines rules from two parents', () => {
66
+ const mutator = new StrategyMutator(db);
67
+ const parentA = makeStrategy({ id: 1, rules: [
68
+ { condition: 'BTC > 50000', action: 'buy', confidence: 0.9, source: 'a' },
69
+ ] });
70
+ const parentB = makeStrategy({ id: 2, rules: [
71
+ { condition: 'ETH < 2000', action: 'sell', confidence: 0.7, source: 'b' },
72
+ ] });
73
+ const child = mutator.crossover(parentA, parentB);
74
+ expect(child.name).toContain('x');
75
+ expect(child.rules.length).toBeGreaterThanOrEqual(1);
76
+ expect(child.status).toBe('draft');
77
+ expect(child.performance.executions).toBe(0);
78
+ });
79
+ it('crossover deduplicates by condition', () => {
80
+ const mutator = new StrategyMutator(db);
81
+ const parentA = makeStrategy({ rules: [
82
+ { condition: 'BTC > 50000', action: 'buy', confidence: 0.9, source: 'a' },
83
+ { condition: 'BTC > 50000', action: 'buy', confidence: 0.5, source: 'a' },
84
+ ] });
85
+ const parentB = makeStrategy({ rules: [
86
+ { condition: 'BTC > 50000', action: 'buy', confidence: 0.7, source: 'b' },
87
+ ] });
88
+ const child = mutator.crossover(parentA, parentB);
89
+ const btcRules = child.rules.filter(r => r.condition === 'BTC > 50000');
90
+ expect(btcRules.length).toBe(1);
91
+ });
92
+ it('selectSurvivors keeps best and eliminates worst', () => {
93
+ const mutator = new StrategyMutator(db, { maxPopulation: 2 });
94
+ const strategies = [
95
+ makeStrategy({ id: 1, performance: { executions: 10, successes: 9, avgReturn: 0.1 } }),
96
+ makeStrategy({ id: 2, performance: { executions: 10, successes: 5, avgReturn: 0.02 } }),
97
+ makeStrategy({ id: 3, performance: { executions: 10, successes: 2, avgReturn: -0.05 } }),
98
+ ];
99
+ const { survivors, eliminated } = mutator.selectSurvivors(strategies);
100
+ expect(survivors).toHaveLength(2);
101
+ expect(eliminated).toHaveLength(1);
102
+ expect(eliminated[0].id).toBe(3); // worst
103
+ });
104
+ it('selectSurvivors keeps all when under limit', () => {
105
+ const mutator = new StrategyMutator(db, { maxPopulation: 10 });
106
+ const strategies = [makeStrategy(), makeStrategy({ id: 2 })];
107
+ const { survivors, eliminated } = mutator.selectSurvivors(strategies);
108
+ expect(survivors).toHaveLength(2);
109
+ expect(eliminated).toHaveLength(0);
110
+ });
111
+ it('fitnessScore is 0 for no executions', () => {
112
+ const mutator = new StrategyMutator(db);
113
+ const s = makeStrategy({ performance: { executions: 0, successes: 0, avgReturn: 0 } });
114
+ expect(mutator.fitnessScore(s)).toBe(0);
115
+ });
116
+ it('fitnessScore increases with better performance', () => {
117
+ const mutator = new StrategyMutator(db);
118
+ const bad = makeStrategy({ performance: { executions: 10, successes: 2, avgReturn: -0.1 } });
119
+ const good = makeStrategy({ performance: { executions: 10, successes: 9, avgReturn: 0.1 } });
120
+ expect(mutator.fitnessScore(good)).toBeGreaterThan(mutator.fitnessScore(bad));
121
+ });
122
+ it('evolveGeneration increments generation', () => {
123
+ const mutator = new StrategyMutator(db, { maxPopulation: 5 });
124
+ mutator.evolveGeneration([makeStrategy()]);
125
+ expect(mutator.getGeneration()).toBe(1);
126
+ mutator.evolveGeneration([makeStrategy()]);
127
+ expect(mutator.getGeneration()).toBe(2);
128
+ });
129
+ it('evolveGeneration returns result stats', () => {
130
+ const mutator = new StrategyMutator(db, { mutationRate: 1.0, crossoverRate: 1.0, maxPopulation: 5, eliteCount: 1 });
131
+ const strategies = [
132
+ makeStrategy({ id: 1, performance: { executions: 10, successes: 8, avgReturn: 0.1 } }),
133
+ makeStrategy({ id: 2, performance: { executions: 10, successes: 6, avgReturn: 0.05 } }),
134
+ makeStrategy({ id: 3, performance: { executions: 10, successes: 4, avgReturn: 0.01 } }),
135
+ ];
136
+ const result = mutator.evolveGeneration(strategies);
137
+ expect(result.generation).toBe(1);
138
+ expect(result.mutated).toBeGreaterThanOrEqual(0);
139
+ });
140
+ });
141
+ //# sourceMappingURL=strategy-mutator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-mutator.test.js","sourceRoot":"","sources":["../../../src/strategy/__tests__/strategy-mutator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { StrategyForge, runStrategyForgeMigration } from './strategy-forge.js';
2
+ export type { Strategy, StrategyRule, StrategyPerformance, BacktestResult, StrategyForgeConfig, StrategyForgeStatus, } from './strategy-forge.js';
3
+ export { StrategyMutator } from './strategy-mutator.js';
4
+ export type { MutationConfig, MutationResult } from './strategy-mutator.js';
@@ -0,0 +1,3 @@
1
+ export { StrategyForge, runStrategyForgeMigration } from './strategy-forge.js';
2
+ export { StrategyMutator } from './strategy-mutator.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAM/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,114 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface Strategy {
3
+ id: number;
4
+ brainName: string;
5
+ type: 'trade' | 'campaign' | 'research' | 'optimization';
6
+ name: string;
7
+ description: string;
8
+ rules: StrategyRule[];
9
+ performance: StrategyPerformance;
10
+ status: 'draft' | 'backtesting' | 'active' | 'paused' | 'retired';
11
+ parentId?: number;
12
+ createdAt?: string;
13
+ updatedAt?: string;
14
+ }
15
+ export interface StrategyRule {
16
+ condition: string;
17
+ action: string;
18
+ confidence: number;
19
+ source: string;
20
+ }
21
+ export interface StrategyPerformance {
22
+ executions: number;
23
+ successes: number;
24
+ avgReturn: number;
25
+ }
26
+ export interface BacktestResult {
27
+ strategyId: number;
28
+ trades: number;
29
+ wins: number;
30
+ losses: number;
31
+ avgReturn: number;
32
+ sharpeRatio: number;
33
+ maxDrawdown: number;
34
+ }
35
+ export interface StrategyForgeConfig {
36
+ brainName: string;
37
+ maxActiveStrategies?: number;
38
+ minBacktestTrades?: number;
39
+ }
40
+ export interface StrategyForgeStatus {
41
+ active: number;
42
+ total: number;
43
+ avgPerformance: number;
44
+ topStrategy: string | null;
45
+ }
46
+ export declare function runStrategyForgeMigration(db: Database.Database): void;
47
+ export declare class StrategyForge {
48
+ private readonly db;
49
+ private readonly config;
50
+ private readonly log;
51
+ private actionBridge;
52
+ private knowledgeDistiller;
53
+ private readonly stmtInsert;
54
+ private readonly stmtGetById;
55
+ private readonly stmtUpdateStatus;
56
+ private readonly stmtUpdatePerformance;
57
+ private readonly stmtGetActive;
58
+ private readonly stmtGetByType;
59
+ private readonly stmtGetAll;
60
+ private readonly stmtCountByStatus;
61
+ constructor(db: Database.Database, config: StrategyForgeConfig);
62
+ setActionBridge(bridge: import('../action/action-bridge.js').ActionBridgeEngine): void;
63
+ setKnowledgeDistiller(distiller: {
64
+ getPrinciples: (domain?: string, limit?: number) => Array<{
65
+ id: string;
66
+ statement: string;
67
+ domain: string;
68
+ confidence: number;
69
+ source: string;
70
+ }>;
71
+ }): void;
72
+ /** Create a strategy from learned principles */
73
+ createFromPrinciples(domain: string): Strategy | null;
74
+ /** Create a strategy from observed signals */
75
+ createFromSignals(signals: Array<{
76
+ name: string;
77
+ value: number;
78
+ direction: string;
79
+ }>): Strategy | null;
80
+ /** Backtest a strategy (simplified) */
81
+ backtest(strategyId: number, data?: Array<{
82
+ date: string;
83
+ value: number;
84
+ }>): BacktestResult;
85
+ /** Activate a strategy */
86
+ activate(strategyId: number): void;
87
+ /** Pause a strategy */
88
+ pause(strategyId: number): void;
89
+ /** Execute one step of a strategy (check rules, fire actions, create ActionBridge proposals) */
90
+ executeStep(strategyId: number): {
91
+ fired: number;
92
+ proposed: number;
93
+ results: string[];
94
+ };
95
+ /** Evolve best strategies by combining their rules */
96
+ evolve(strategyIds?: number[]): Strategy | null;
97
+ /** Get active strategies */
98
+ getActive(): Strategy[];
99
+ /** Get strategy by ID */
100
+ getStrategy(id: number): Strategy | null;
101
+ /** Get performance report */
102
+ getPerformance(strategyId: number): StrategyPerformance | null;
103
+ /** Retire a strategy */
104
+ retire(strategyId: number, reason?: string): void;
105
+ /** Get all strategies */
106
+ getAll(limit?: number): Strategy[];
107
+ /** Get status overview */
108
+ getStatus(): StrategyForgeStatus;
109
+ private storeStrategy;
110
+ private domainToType;
111
+ private inferAction;
112
+ private isTradeAction;
113
+ private extractSymbol;
114
+ }