@timmeck/brain-core 2.36.62 → 2.36.63

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 (253) hide show
  1. package/dist/guardrails/guardrail-engine.d.ts +2 -0
  2. package/dist/guardrails/guardrail-engine.js +17 -9
  3. package/dist/guardrails/guardrail-engine.js.map +1 -1
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/utils/memory-watchdog.d.ts +33 -0
  8. package/dist/utils/memory-watchdog.js +88 -0
  9. package/dist/utils/memory-watchdog.js.map +1 -0
  10. package/package.json +1 -1
  11. package/dist/action/__tests__/action-bridge.test.d.ts +0 -1
  12. package/dist/action/__tests__/action-bridge.test.js +0 -175
  13. package/dist/action/__tests__/action-bridge.test.js.map +0 -1
  14. package/dist/action/__tests__/adjust-parameter-handler.test.d.ts +0 -1
  15. package/dist/action/__tests__/adjust-parameter-handler.test.js +0 -138
  16. package/dist/action/__tests__/adjust-parameter-handler.test.js.map +0 -1
  17. package/dist/action/__tests__/content-handler.test.d.ts +0 -1
  18. package/dist/action/__tests__/content-handler.test.js +0 -100
  19. package/dist/action/__tests__/content-handler.test.js.map +0 -1
  20. package/dist/action/__tests__/creative-seed-handler.test.d.ts +0 -1
  21. package/dist/action/__tests__/creative-seed-handler.test.js +0 -96
  22. package/dist/action/__tests__/creative-seed-handler.test.js.map +0 -1
  23. package/dist/action/__tests__/trade-handler.test.d.ts +0 -1
  24. package/dist/action/__tests__/trade-handler.test.js +0 -165
  25. package/dist/action/__tests__/trade-handler.test.js.map +0 -1
  26. package/dist/active-learning/__tests__/active-learning.test.d.ts +0 -1
  27. package/dist/active-learning/__tests__/active-learning.test.js +0 -132
  28. package/dist/active-learning/__tests__/active-learning.test.js.map +0 -1
  29. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +0 -1
  30. package/dist/agent-training/__tests__/agent-trainer.test.js +0 -158
  31. package/dist/agent-training/__tests__/agent-trainer.test.js.map +0 -1
  32. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +0 -1
  33. package/dist/agent-training/__tests__/sub-agent-factory.test.js +0 -100
  34. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +0 -1
  35. package/dist/agent-training/__tests__/sub-agent.test.d.ts +0 -1
  36. package/dist/agent-training/__tests__/sub-agent.test.js +0 -102
  37. package/dist/agent-training/__tests__/sub-agent.test.js.map +0 -1
  38. package/dist/chat/__tests__/chat-engine.test.d.ts +0 -1
  39. package/dist/chat/__tests__/chat-engine.test.js +0 -209
  40. package/dist/chat/__tests__/chat-engine.test.js.map +0 -1
  41. package/dist/checkpoint/__tests__/checkpoint-manager.test.d.ts +0 -1
  42. package/dist/checkpoint/__tests__/checkpoint-manager.test.js +0 -160
  43. package/dist/checkpoint/__tests__/checkpoint-manager.test.js.map +0 -1
  44. package/dist/code-health/__tests__/code-health.test.d.ts +0 -1
  45. package/dist/code-health/__tests__/code-health.test.js +0 -123
  46. package/dist/code-health/__tests__/code-health.test.js.map +0 -1
  47. package/dist/codegen/__tests__/code-forge.test.d.ts +0 -1
  48. package/dist/codegen/__tests__/code-forge.test.js +0 -105
  49. package/dist/codegen/__tests__/code-forge.test.js.map +0 -1
  50. package/dist/config/__tests__/loader.test.d.ts +0 -1
  51. package/dist/config/__tests__/loader.test.js +0 -86
  52. package/dist/config/__tests__/loader.test.js.map +0 -1
  53. package/dist/consciousness/__tests__/thought-stream.test.d.ts +0 -1
  54. package/dist/consciousness/__tests__/thought-stream.test.js +0 -62
  55. package/dist/consciousness/__tests__/thought-stream.test.js.map +0 -1
  56. package/dist/consensus/__tests__/consensus.test.d.ts +0 -1
  57. package/dist/consensus/__tests__/consensus.test.js +0 -159
  58. package/dist/consensus/__tests__/consensus.test.js.map +0 -1
  59. package/dist/content/__tests__/auto-publisher.test.d.ts +0 -1
  60. package/dist/content/__tests__/auto-publisher.test.js +0 -125
  61. package/dist/content/__tests__/auto-publisher.test.js.map +0 -1
  62. package/dist/content/__tests__/content-forge.test.d.ts +0 -1
  63. package/dist/content/__tests__/content-forge.test.js +0 -117
  64. package/dist/content/__tests__/content-forge.test.js.map +0 -1
  65. package/dist/creative/__tests__/creative-engine.test.d.ts +0 -1
  66. package/dist/creative/__tests__/creative-engine.test.js +0 -229
  67. package/dist/creative/__tests__/creative-engine.test.js.map +0 -1
  68. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +0 -1
  69. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +0 -240
  70. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +0 -1
  71. package/dist/cross-brain/__tests__/client.test.d.ts +0 -1
  72. package/dist/cross-brain/__tests__/client.test.js +0 -31
  73. package/dist/cross-brain/__tests__/client.test.js.map +0 -1
  74. package/dist/cross-brain/__tests__/notifications.test.d.ts +0 -1
  75. package/dist/cross-brain/__tests__/notifications.test.js +0 -52
  76. package/dist/cross-brain/__tests__/notifications.test.js.map +0 -1
  77. package/dist/cross-brain/__tests__/signal-router.test.d.ts +0 -1
  78. package/dist/cross-brain/__tests__/signal-router.test.js +0 -218
  79. package/dist/cross-brain/__tests__/signal-router.test.js.map +0 -1
  80. package/dist/cross-brain/__tests__/subscription.test.d.ts +0 -1
  81. package/dist/cross-brain/__tests__/subscription.test.js +0 -75
  82. package/dist/cross-brain/__tests__/subscription.test.js.map +0 -1
  83. package/dist/dashboard/__tests__/command-center-server.test.d.ts +0 -1
  84. package/dist/dashboard/__tests__/command-center-server.test.js +0 -522
  85. package/dist/dashboard/__tests__/command-center-server.test.js.map +0 -1
  86. package/dist/dashboard/__tests__/server.test.d.ts +0 -1
  87. package/dist/dashboard/__tests__/server.test.js +0 -105
  88. package/dist/dashboard/__tests__/server.test.js.map +0 -1
  89. package/dist/db/__tests__/connection.test.d.ts +0 -1
  90. package/dist/db/__tests__/connection.test.js +0 -135
  91. package/dist/db/__tests__/connection.test.js.map +0 -1
  92. package/dist/dream/__tests__/dream-engine.test.d.ts +0 -1
  93. package/dist/dream/__tests__/dream-engine.test.js +0 -184
  94. package/dist/dream/__tests__/dream-engine.test.js.map +0 -1
  95. package/dist/embeddings/__tests__/engine.test.d.ts +0 -1
  96. package/dist/embeddings/__tests__/engine.test.js +0 -82
  97. package/dist/embeddings/__tests__/engine.test.js.map +0 -1
  98. package/dist/feedback/__tests__/feedback-engine.test.d.ts +0 -1
  99. package/dist/feedback/__tests__/feedback-engine.test.js +0 -156
  100. package/dist/feedback/__tests__/feedback-engine.test.js.map +0 -1
  101. package/dist/feedback/__tests__/feedback-router.test.d.ts +0 -1
  102. package/dist/feedback/__tests__/feedback-router.test.js +0 -173
  103. package/dist/feedback/__tests__/feedback-router.test.js.map +0 -1
  104. package/dist/goals/__tests__/goal-engine.test.d.ts +0 -1
  105. package/dist/goals/__tests__/goal-engine.test.js +0 -203
  106. package/dist/goals/__tests__/goal-engine.test.js.map +0 -1
  107. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +0 -1
  108. package/dist/guardrails/__tests__/guardrail-engine.test.js +0 -343
  109. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +0 -1
  110. package/dist/ipc/__tests__/integration.test.d.ts +0 -1
  111. package/dist/ipc/__tests__/integration.test.js +0 -352
  112. package/dist/ipc/__tests__/integration.test.js.map +0 -1
  113. package/dist/ipc/__tests__/protocol.test.d.ts +0 -1
  114. package/dist/ipc/__tests__/protocol.test.js +0 -69
  115. package/dist/ipc/__tests__/protocol.test.js.map +0 -1
  116. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.d.ts +0 -1
  117. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js +0 -114
  118. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js.map +0 -1
  119. package/dist/knowledge-graph/__tests__/knowledge-graph.test.d.ts +0 -1
  120. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js +0 -215
  121. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js.map +0 -1
  122. package/dist/learning/__tests__/base-engine.test.d.ts +0 -1
  123. package/dist/learning/__tests__/base-engine.test.js +0 -49
  124. package/dist/learning/__tests__/base-engine.test.js.map +0 -1
  125. package/dist/llm/__tests__/anthropic-provider.test.d.ts +0 -1
  126. package/dist/llm/__tests__/anthropic-provider.test.js +0 -121
  127. package/dist/llm/__tests__/anthropic-provider.test.js.map +0 -1
  128. package/dist/llm/__tests__/llm-service.test.d.ts +0 -1
  129. package/dist/llm/__tests__/llm-service.test.js +0 -507
  130. package/dist/llm/__tests__/llm-service.test.js.map +0 -1
  131. package/dist/llm/__tests__/ollama-embedding.test.d.ts +0 -1
  132. package/dist/llm/__tests__/ollama-embedding.test.js +0 -128
  133. package/dist/llm/__tests__/ollama-embedding.test.js.map +0 -1
  134. package/dist/llm/__tests__/ollama-provider.test.d.ts +0 -1
  135. package/dist/llm/__tests__/ollama-provider.test.js +0 -213
  136. package/dist/llm/__tests__/ollama-provider.test.js.map +0 -1
  137. package/dist/llm/__tests__/provider.test.d.ts +0 -1
  138. package/dist/llm/__tests__/provider.test.js +0 -126
  139. package/dist/llm/__tests__/provider.test.js.map +0 -1
  140. package/dist/math/__tests__/time-decay.test.d.ts +0 -1
  141. package/dist/math/__tests__/time-decay.test.js +0 -37
  142. package/dist/math/__tests__/time-decay.test.js.map +0 -1
  143. package/dist/math/__tests__/wilson-score.test.d.ts +0 -1
  144. package/dist/math/__tests__/wilson-score.test.js +0 -43
  145. package/dist/math/__tests__/wilson-score.test.js.map +0 -1
  146. package/dist/memory/__tests__/base-memory-engine.test.d.ts +0 -1
  147. package/dist/memory/__tests__/base-memory-engine.test.js +0 -233
  148. package/dist/memory/__tests__/base-memory-engine.test.js.map +0 -1
  149. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +0 -1
  150. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +0 -218
  151. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +0 -1
  152. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +0 -1
  153. package/dist/metacognition/__tests__/evolution-engine.test.js +0 -473
  154. package/dist/metacognition/__tests__/evolution-engine.test.js.map +0 -1
  155. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +0 -1
  156. package/dist/metacognition/__tests__/parameter-registry.test.js +0 -223
  157. package/dist/metacognition/__tests__/parameter-registry.test.js.map +0 -1
  158. package/dist/missions/__tests__/mission-engine.test.d.ts +0 -1
  159. package/dist/missions/__tests__/mission-engine.test.js +0 -67
  160. package/dist/missions/__tests__/mission-engine.test.js.map +0 -1
  161. package/dist/notifications/__tests__/notification-service.test.d.ts +0 -1
  162. package/dist/notifications/__tests__/notification-service.test.js +0 -176
  163. package/dist/notifications/__tests__/notification-service.test.js.map +0 -1
  164. package/dist/plugin/__tests__/plugin-registry.test.d.ts +0 -1
  165. package/dist/plugin/__tests__/plugin-registry.test.js +0 -166
  166. package/dist/plugin/__tests__/plugin-registry.test.js.map +0 -1
  167. package/dist/prediction/__tests__/prediction-engine.test.d.ts +0 -1
  168. package/dist/prediction/__tests__/prediction-engine.test.js +0 -252
  169. package/dist/prediction/__tests__/prediction-engine.test.js.map +0 -1
  170. package/dist/proactive/__tests__/proactive-engine.test.d.ts +0 -1
  171. package/dist/proactive/__tests__/proactive-engine.test.js +0 -183
  172. package/dist/proactive/__tests__/proactive-engine.test.js.map +0 -1
  173. package/dist/rag/__tests__/rag-engine.test.d.ts +0 -1
  174. package/dist/rag/__tests__/rag-engine.test.js +0 -235
  175. package/dist/rag/__tests__/rag-engine.test.js.map +0 -1
  176. package/dist/research/__tests__/autonomy-features.test.d.ts +0 -1
  177. package/dist/research/__tests__/autonomy-features.test.js +0 -155
  178. package/dist/research/__tests__/autonomy-features.test.js.map +0 -1
  179. package/dist/research/__tests__/base-engine.test.d.ts +0 -1
  180. package/dist/research/__tests__/base-engine.test.js +0 -56
  181. package/dist/research/__tests__/base-engine.test.js.map +0 -1
  182. package/dist/research/__tests__/semantic-compressor.test.d.ts +0 -1
  183. package/dist/research/__tests__/semantic-compressor.test.js +0 -153
  184. package/dist/research/__tests__/semantic-compressor.test.js.map +0 -1
  185. package/dist/research/adapters/__tests__/playwright-adapter.test.d.ts +0 -1
  186. package/dist/research/adapters/__tests__/playwright-adapter.test.js +0 -64
  187. package/dist/research/adapters/__tests__/playwright-adapter.test.js.map +0 -1
  188. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +0 -1
  189. package/dist/research/adapters/__tests__/web-adapters.test.js +0 -106
  190. package/dist/research/adapters/__tests__/web-adapters.test.js.map +0 -1
  191. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +0 -1
  192. package/dist/sandbox/__tests__/code-sandbox.test.js +0 -182
  193. package/dist/sandbox/__tests__/code-sandbox.test.js.map +0 -1
  194. package/dist/scanner/__tests__/signal-scanner.test.d.ts +0 -1
  195. package/dist/scanner/__tests__/signal-scanner.test.js +0 -142
  196. package/dist/scanner/__tests__/signal-scanner.test.js.map +0 -1
  197. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +0 -1
  198. package/dist/self-modification/__tests__/self-modification-engine.test.js +0 -313
  199. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +0 -1
  200. package/dist/strategy/__tests__/strategy-forge.test.d.ts +0 -1
  201. package/dist/strategy/__tests__/strategy-forge.test.js +0 -190
  202. package/dist/strategy/__tests__/strategy-forge.test.js.map +0 -1
  203. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +0 -1
  204. package/dist/strategy/__tests__/strategy-mutator.test.js +0 -141
  205. package/dist/strategy/__tests__/strategy-mutator.test.js.map +0 -1
  206. package/dist/synapses/__tests__/activation.test.d.ts +0 -1
  207. package/dist/synapses/__tests__/activation.test.js +0 -87
  208. package/dist/synapses/__tests__/activation.test.js.map +0 -1
  209. package/dist/synapses/__tests__/decay.test.d.ts +0 -1
  210. package/dist/synapses/__tests__/decay.test.js +0 -73
  211. package/dist/synapses/__tests__/decay.test.js.map +0 -1
  212. package/dist/synapses/__tests__/hebbian.test.d.ts +0 -1
  213. package/dist/synapses/__tests__/hebbian.test.js +0 -95
  214. package/dist/synapses/__tests__/hebbian.test.js.map +0 -1
  215. package/dist/synapses/__tests__/pathfinder.test.d.ts +0 -1
  216. package/dist/synapses/__tests__/pathfinder.test.js +0 -74
  217. package/dist/synapses/__tests__/pathfinder.test.js.map +0 -1
  218. package/dist/synapses/__tests__/synapse-manager.test.d.ts +0 -1
  219. package/dist/synapses/__tests__/synapse-manager.test.js +0 -94
  220. package/dist/synapses/__tests__/synapse-manager.test.js.map +0 -1
  221. package/dist/teaching/__tests__/teaching.test.d.ts +0 -1
  222. package/dist/teaching/__tests__/teaching.test.js +0 -252
  223. package/dist/teaching/__tests__/teaching.test.js.map +0 -1
  224. package/dist/techradar/__tests__/techradar-engine.test.d.ts +0 -1
  225. package/dist/techradar/__tests__/techradar-engine.test.js +0 -246
  226. package/dist/techradar/__tests__/techradar-engine.test.js.map +0 -1
  227. package/dist/tool-learning/__tests__/tool-learning.test.d.ts +0 -1
  228. package/dist/tool-learning/__tests__/tool-learning.test.js +0 -187
  229. package/dist/tool-learning/__tests__/tool-learning.test.js.map +0 -1
  230. package/dist/user-model/__tests__/user-model.test.d.ts +0 -1
  231. package/dist/user-model/__tests__/user-model.test.js +0 -142
  232. package/dist/user-model/__tests__/user-model.test.js.map +0 -1
  233. package/dist/utils/__tests__/batch-queue.test.d.ts +0 -1
  234. package/dist/utils/__tests__/batch-queue.test.js +0 -85
  235. package/dist/utils/__tests__/batch-queue.test.js.map +0 -1
  236. package/dist/utils/__tests__/events.test.d.ts +0 -1
  237. package/dist/utils/__tests__/events.test.js +0 -38
  238. package/dist/utils/__tests__/events.test.js.map +0 -1
  239. package/dist/utils/__tests__/hash.test.d.ts +0 -1
  240. package/dist/utils/__tests__/hash.test.js +0 -25
  241. package/dist/utils/__tests__/hash.test.js.map +0 -1
  242. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  243. package/dist/utils/__tests__/logger.test.js +0 -55
  244. package/dist/utils/__tests__/logger.test.js.map +0 -1
  245. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  246. package/dist/utils/__tests__/paths.test.js +0 -50
  247. package/dist/utils/__tests__/paths.test.js.map +0 -1
  248. package/dist/utils/__tests__/retry.test.d.ts +0 -1
  249. package/dist/utils/__tests__/retry.test.js +0 -91
  250. package/dist/utils/__tests__/retry.test.js.map +0 -1
  251. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +0 -1
  252. package/dist/watchdog/__tests__/watchdog-service.test.js +0 -113
  253. package/dist/watchdog/__tests__/watchdog-service.test.js.map +0 -1
@@ -1,473 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({
5
- info: vi.fn(),
6
- warn: vi.fn(),
7
- error: vi.fn(),
8
- debug: vi.fn(),
9
- }),
10
- }));
11
- import { ParameterRegistry } from '../parameter-registry.js';
12
- import { EvolutionEngine, runEvolutionMigration, } from '../evolution-engine.js';
13
- /* ------------------------------------------------------------------ */
14
- /* Helpers */
15
- /* ------------------------------------------------------------------ */
16
- function makeConfig(overrides = {}) {
17
- return {
18
- brainName: 'test-brain',
19
- populationSize: 5,
20
- mutationRate: 0.15,
21
- eliteCount: 1,
22
- tournamentSize: 2,
23
- generationEvery: 10,
24
- ...overrides,
25
- };
26
- }
27
- function registerTestParameters(registry) {
28
- registry.registerAll([
29
- { engine: 'scoring', name: 'threshold', value: 0.5, min: 0, max: 1, description: 'Score threshold' },
30
- { engine: 'scoring', name: 'weight', value: 0.8, min: 0, max: 2, description: 'Score weight' },
31
- { engine: 'learning', name: 'rate', value: 0.01, min: 0.001, max: 0.1, description: 'Learning rate' },
32
- ]);
33
- }
34
- function makeMockDataSources(overrides = {}) {
35
- return {
36
- getReportCards: () => [
37
- { engine: 'scoring', combined_score: 0.7 },
38
- { engine: 'learning', combined_score: 0.6 },
39
- ],
40
- getGoalProgress: () => 0.5,
41
- getPredictionAccuracy: () => 0.4,
42
- getPrincipleCount: () => 20,
43
- getHypothesisCount: () => 30,
44
- ...overrides,
45
- };
46
- }
47
- function makeIndividual(overrides = {}) {
48
- return {
49
- id: 1,
50
- generation: 0,
51
- genome: { 'scoring:threshold': 0.5, 'scoring:weight': 0.8, 'learning:rate': 0.01 },
52
- fitness: 0.5,
53
- rank: 1,
54
- isActive: false,
55
- parentAId: null,
56
- parentBId: null,
57
- mutationCount: 0,
58
- ...overrides,
59
- };
60
- }
61
- /* ------------------------------------------------------------------ */
62
- /* Tests */
63
- /* ------------------------------------------------------------------ */
64
- describe('EvolutionEngine', () => {
65
- let db;
66
- let registry;
67
- let engine;
68
- beforeEach(() => {
69
- db = new Database(':memory:');
70
- registry = new ParameterRegistry(db);
71
- registerTestParameters(registry);
72
- engine = new EvolutionEngine(db, registry, makeConfig());
73
- });
74
- afterEach(() => {
75
- db.close();
76
- });
77
- /* ---------- creation ---------- */
78
- it('creates evolution tables on construction', () => {
79
- const tables = db
80
- .prepare("SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name")
81
- .all();
82
- const names = tables.map((t) => t.name);
83
- expect(names).toContain('evolution_generations');
84
- expect(names).toContain('evolution_individuals');
85
- expect(names).toContain('evolution_lineage');
86
- });
87
- it('runEvolutionMigration() is idempotent', () => {
88
- expect(() => runEvolutionMigration(db)).not.toThrow();
89
- expect(() => runEvolutionMigration(db)).not.toThrow();
90
- });
91
- it('restores currentGeneration from DB on construction', () => {
92
- // Insert a generation record to simulate prior history
93
- db.prepare(`
94
- INSERT INTO evolution_generations (generation, best_fitness, avg_fitness, worst_fitness, population_size, diversity)
95
- VALUES (7, 0.9, 0.5, 0.1, 5, 0.3)
96
- `).run();
97
- const engine2 = new EvolutionEngine(db, registry, makeConfig());
98
- const status = engine2.getStatus();
99
- expect(status.currentGeneration).toBe(7);
100
- });
101
- /* ---------- getStatus (initial) ---------- */
102
- it('getStatus() returns correct initial state', () => {
103
- const status = engine.getStatus();
104
- expect(status.currentGeneration).toBe(0);
105
- expect(status.populationSize).toBe(5);
106
- expect(status.bestFitness).toBe(0);
107
- expect(status.avgFitness).toBe(0);
108
- expect(status.totalIndividuals).toBe(0);
109
- expect(status.isInitialized).toBe(false);
110
- expect(status.champion).toBeNull();
111
- expect(status.config).toEqual({
112
- populationSize: 5,
113
- mutationRate: 0.15,
114
- eliteCount: 1,
115
- tournamentSize: 2,
116
- generationEvery: 10,
117
- });
118
- });
119
- /* ---------- initializePopulation ---------- */
120
- it('initializePopulation() creates the configured number of individuals', () => {
121
- engine.initializePopulation();
122
- const status = engine.getStatus();
123
- expect(status.totalIndividuals).toBe(5);
124
- expect(status.isInitialized).toBe(true);
125
- const pop = engine.getPopulation(0);
126
- expect(pop.length).toBe(5);
127
- // All individuals should have genomes with 3 keys
128
- for (const ind of pop) {
129
- expect(Object.keys(ind.genome)).toHaveLength(3);
130
- expect(ind.generation).toBe(0);
131
- }
132
- });
133
- it('initializePopulation() is idempotent — second call does nothing', () => {
134
- engine.initializePopulation();
135
- engine.initializePopulation();
136
- const status = engine.getStatus();
137
- expect(status.totalIndividuals).toBe(5);
138
- });
139
- it('initializePopulation() does nothing when registry has no parameters', () => {
140
- const emptyDb = new Database(':memory:');
141
- const emptyRegistry = new ParameterRegistry(emptyDb);
142
- const emptyEngine = new EvolutionEngine(emptyDb, emptyRegistry, makeConfig());
143
- emptyEngine.initializePopulation();
144
- const status = emptyEngine.getStatus();
145
- expect(status.totalIndividuals).toBe(0);
146
- expect(status.isInitialized).toBe(false);
147
- emptyDb.close();
148
- });
149
- /* ---------- evaluateFitness ---------- */
150
- it('evaluateFitness() returns 0 when no data sources are set', () => {
151
- const individual = makeIndividual();
152
- const fitness = engine.evaluateFitness(individual);
153
- expect(fitness).toBe(0);
154
- });
155
- it('evaluateFitness() computes a weighted fitness score from data sources', () => {
156
- engine.setDataSources(makeMockDataSources());
157
- engine.initializePopulation();
158
- const individual = makeIndividual();
159
- const fitness = engine.evaluateFitness(individual);
160
- // fitness should be between 0 and 1
161
- expect(fitness).toBeGreaterThanOrEqual(0);
162
- expect(fitness).toBeLessThanOrEqual(1);
163
- // With our mock data: metaCog=0.65, goal=0.5, pred=0.4, knowledge=0.5, novelty varies
164
- // 0.65*0.4 + 0.5*0.2 + 0.4*0.2 + 0.5*0.1 + novelty*0.1
165
- // = 0.26 + 0.10 + 0.08 + 0.05 + novelty*0.1
166
- // Should be roughly 0.49 + novelty*0.1
167
- expect(fitness).toBeGreaterThan(0.3);
168
- });
169
- it('evaluateFitness() handles data source errors gracefully', () => {
170
- engine.setDataSources({
171
- getReportCards: () => { throw new Error('DB error'); },
172
- getGoalProgress: () => { throw new Error('DB error'); },
173
- getPredictionAccuracy: () => { throw new Error('DB error'); },
174
- getPrincipleCount: () => { throw new Error('DB error'); },
175
- getHypothesisCount: () => { throw new Error('DB error'); },
176
- });
177
- engine.initializePopulation();
178
- const individual = makeIndividual();
179
- // Should not throw — all errors are caught internally
180
- const fitness = engine.evaluateFitness(individual);
181
- expect(fitness).toBeGreaterThanOrEqual(0);
182
- expect(fitness).toBeLessThanOrEqual(1);
183
- });
184
- /* ---------- tournamentSelect ---------- */
185
- it('tournamentSelect() returns the fittest contestant', () => {
186
- const population = [
187
- makeIndividual({ id: 1, fitness: 0.1 }),
188
- makeIndividual({ id: 2, fitness: 0.9 }),
189
- makeIndividual({ id: 3, fitness: 0.5 }),
190
- makeIndividual({ id: 4, fitness: 0.3 }),
191
- makeIndividual({ id: 5, fitness: 0.7 }),
192
- ];
193
- // Run many selections — the result should always be one of the population
194
- const selections = new Set();
195
- for (let i = 0; i < 50; i++) {
196
- const selected = engine.tournamentSelect(population, 3);
197
- expect(selected.fitness).toBeGreaterThanOrEqual(0);
198
- expect(selected.fitness).toBeLessThanOrEqual(1);
199
- selections.add(selected.id);
200
- }
201
- // Over 50 tries, tournament selection should have selected multiple individuals
202
- expect(selections.size).toBeGreaterThanOrEqual(1);
203
- });
204
- it('tournamentSelect() works with tournament size larger than population', () => {
205
- const population = [
206
- makeIndividual({ id: 1, fitness: 0.2 }),
207
- makeIndividual({ id: 2, fitness: 0.8 }),
208
- ];
209
- // Tournament size 10 > population size 2 — should clamp via Math.min
210
- const selected = engine.tournamentSelect(population, 10);
211
- expect(selected).toBeDefined();
212
- // Selection picks with replacement, so result is one of the two individuals
213
- expect([0.2, 0.8]).toContain(selected.fitness);
214
- });
215
- /* ---------- crossover ---------- */
216
- it('crossover() produces a child with genes from both parents', () => {
217
- const parentA = makeIndividual({
218
- genome: { 'scoring:threshold': 0.1, 'scoring:weight': 0.2, 'learning:rate': 0.03 },
219
- });
220
- const parentB = makeIndividual({
221
- genome: { 'scoring:threshold': 0.9, 'scoring:weight': 1.8, 'learning:rate': 0.09 },
222
- });
223
- // Run crossover many times to check both parents can contribute
224
- const seenFromA = new Set();
225
- const seenFromB = new Set();
226
- for (let i = 0; i < 100; i++) {
227
- const { child, crossoverPoints } = engine.crossover(parentA, parentB);
228
- // Child should have all 3 keys
229
- expect(Object.keys(child)).toHaveLength(3);
230
- for (const key of Object.keys(child)) {
231
- if (child[key] === parentA.genome[key])
232
- seenFromA.add(key);
233
- if (child[key] === parentB.genome[key])
234
- seenFromB.add(key);
235
- }
236
- // crossoverPoints should only contain keys taken from parentB
237
- for (const point of crossoverPoints) {
238
- expect(child[point]).toBe(parentB.genome[point]);
239
- }
240
- }
241
- // Over 100 iterations, both parents should contribute at least one gene
242
- expect(seenFromA.size).toBeGreaterThan(0);
243
- expect(seenFromB.size).toBeGreaterThan(0);
244
- });
245
- it('crossover() handles disjoint genome keys (union of both)', () => {
246
- const parentA = makeIndividual({
247
- genome: { 'scoring:threshold': 0.5, 'unique:paramA': 0.3 },
248
- });
249
- const parentB = makeIndividual({
250
- genome: { 'scoring:threshold': 0.7, 'unique:paramB': 0.6 },
251
- });
252
- const { child } = engine.crossover(parentA, parentB);
253
- // Child should have the union of all keys
254
- const keys = Object.keys(child);
255
- expect(keys).toContain('scoring:threshold');
256
- expect(keys).toContain('unique:paramA');
257
- expect(keys).toContain('unique:paramB');
258
- });
259
- /* ---------- mutateGenome ---------- */
260
- it('mutateGenome() with rate=0 produces no mutations', () => {
261
- const genome = { 'scoring:threshold': 0.5, 'scoring:weight': 0.8, 'learning:rate': 0.01 };
262
- const { genome: mutated, mutations } = engine.mutateGenome(genome, 0);
263
- expect(mutations).toBe(0);
264
- expect(mutated['scoring:threshold']).toBe(0.5);
265
- expect(mutated['scoring:weight']).toBe(0.8);
266
- expect(mutated['learning:rate']).toBe(0.01);
267
- });
268
- it('mutateGenome() with rate=1 mutates all genes (within bounds)', () => {
269
- const genome = { 'scoring:threshold': 0.5, 'scoring:weight': 0.8, 'learning:rate': 0.01 };
270
- // Run multiple times — with rate=1, all 3 genes should be mutated each time
271
- let totalMutations = 0;
272
- for (let i = 0; i < 20; i++) {
273
- const { genome: mutated, mutations } = engine.mutateGenome(genome, 1.0);
274
- totalMutations += mutations;
275
- // Values must stay within registered bounds
276
- expect(mutated['scoring:threshold']).toBeGreaterThanOrEqual(0);
277
- expect(mutated['scoring:threshold']).toBeLessThanOrEqual(1);
278
- expect(mutated['scoring:weight']).toBeGreaterThanOrEqual(0);
279
- expect(mutated['scoring:weight']).toBeLessThanOrEqual(2);
280
- expect(mutated['learning:rate']).toBeGreaterThanOrEqual(0.001);
281
- expect(mutated['learning:rate']).toBeLessThanOrEqual(0.1);
282
- }
283
- // With rate=1.0, every call should mutate all 3 genes → 60 total
284
- expect(totalMutations).toBe(60);
285
- });
286
- it('mutateGenome() does not mutate the original genome object', () => {
287
- const genome = { 'scoring:threshold': 0.5, 'scoring:weight': 0.8 };
288
- engine.mutateGenome(genome, 1.0);
289
- // Original should be untouched
290
- expect(genome['scoring:threshold']).toBe(0.5);
291
- expect(genome['scoring:weight']).toBe(0.8);
292
- });
293
- /* ---------- runGeneration ---------- */
294
- it('runGeneration() produces a new generation with correct stats', () => {
295
- engine.setDataSources(makeMockDataSources());
296
- engine.initializePopulation();
297
- const gen = engine.runGeneration();
298
- expect(gen.generation).toBe(1);
299
- expect(gen.populationSize).toBe(5);
300
- expect(gen.bestFitness).toBeGreaterThanOrEqual(0);
301
- expect(gen.avgFitness).toBeGreaterThanOrEqual(0);
302
- expect(gen.worstFitness).toBeGreaterThanOrEqual(0);
303
- expect(gen.bestFitness).toBeGreaterThanOrEqual(gen.avgFitness);
304
- expect(gen.avgFitness).toBeGreaterThanOrEqual(gen.worstFitness);
305
- expect(gen.diversity).toBeGreaterThanOrEqual(0);
306
- // Population for generation 1 should exist
307
- const pop = engine.getPopulation(1);
308
- expect(pop.length).toBe(5);
309
- // Status should reflect the new generation
310
- const status = engine.getStatus();
311
- expect(status.currentGeneration).toBe(1);
312
- expect(status.isInitialized).toBe(true);
313
- });
314
- it('runGeneration() applies best genome to parameter registry', () => {
315
- engine.setDataSources(makeMockDataSources());
316
- engine.initializePopulation();
317
- const origThreshold = registry.get('scoring', 'threshold');
318
- const origWeight = registry.get('scoring', 'weight');
319
- const origRate = registry.get('learning', 'rate');
320
- engine.runGeneration();
321
- // At least one parameter should be potentially different
322
- // (elites could keep original, but mutations change others)
323
- const newThreshold = registry.get('scoring', 'threshold');
324
- const newWeight = registry.get('scoring', 'weight');
325
- const newRate = registry.get('learning', 'rate');
326
- // Values must remain within bounds regardless
327
- expect(newThreshold).toBeGreaterThanOrEqual(0);
328
- expect(newThreshold).toBeLessThanOrEqual(1);
329
- expect(newWeight).toBeGreaterThanOrEqual(0);
330
- expect(newWeight).toBeLessThanOrEqual(2);
331
- expect(newRate).toBeGreaterThanOrEqual(0.001);
332
- expect(newRate).toBeLessThanOrEqual(0.1);
333
- });
334
- it('runGeneration() records lineage for offspring', () => {
335
- engine.setDataSources(makeMockDataSources());
336
- engine.initializePopulation();
337
- engine.runGeneration();
338
- // Check that lineage records exist
339
- const lineageRows = db.prepare('SELECT COUNT(*) AS cnt FROM evolution_lineage').get();
340
- expect(lineageRows.cnt).toBeGreaterThan(0);
341
- });
342
- it('runGeneration() can run multiple generations consecutively', () => {
343
- engine.setDataSources(makeMockDataSources());
344
- engine.initializePopulation();
345
- engine.runGeneration();
346
- engine.runGeneration();
347
- const gen3 = engine.runGeneration();
348
- expect(gen3.generation).toBe(3);
349
- const status = engine.getStatus();
350
- expect(status.currentGeneration).toBe(3);
351
- // Total individuals should be gen0 (5) + gen1 (5) + gen2 (5) + gen3 (5)
352
- expect(status.totalIndividuals).toBe(20);
353
- });
354
- /* ---------- getHistory ---------- */
355
- it('getHistory() returns generation records in descending order', () => {
356
- engine.setDataSources(makeMockDataSources());
357
- engine.initializePopulation();
358
- engine.runGeneration();
359
- engine.runGeneration();
360
- engine.runGeneration();
361
- const history = engine.getHistory();
362
- expect(history.length).toBe(3);
363
- // Descending order by generation number
364
- expect(history[0].generation).toBe(3);
365
- expect(history[1].generation).toBe(2);
366
- expect(history[2].generation).toBe(1);
367
- for (const gen of history) {
368
- expect(gen.populationSize).toBe(5);
369
- expect(gen.bestFitness).toBeGreaterThanOrEqual(0);
370
- expect(gen.diversity).toBeGreaterThanOrEqual(0);
371
- }
372
- });
373
- it('getHistory() returns empty array when no generations have run', () => {
374
- const history = engine.getHistory();
375
- expect(history).toEqual([]);
376
- });
377
- it('getHistory() respects the limit parameter', () => {
378
- engine.setDataSources(makeMockDataSources());
379
- engine.initializePopulation();
380
- engine.runGeneration();
381
- engine.runGeneration();
382
- engine.runGeneration();
383
- const limited = engine.getHistory(2);
384
- expect(limited.length).toBe(2);
385
- expect(limited[0].generation).toBe(3);
386
- expect(limited[1].generation).toBe(2);
387
- });
388
- /* ---------- getBestIndividual ---------- */
389
- it('getBestIndividual() returns null when no individuals exist', () => {
390
- const best = engine.getBestIndividual();
391
- expect(best).toBeNull();
392
- });
393
- it('getBestIndividual() returns the highest-fitness individual', () => {
394
- engine.setDataSources(makeMockDataSources());
395
- engine.initializePopulation();
396
- engine.runGeneration();
397
- const best = engine.getBestIndividual();
398
- expect(best).not.toBeNull();
399
- expect(best.id).toBeDefined();
400
- expect(best.genome).toBeDefined();
401
- expect(Object.keys(best.genome).length).toBeGreaterThan(0);
402
- expect(best.fitness).toBeGreaterThanOrEqual(0);
403
- // Verify it is truly the highest-fitness individual
404
- const allRows = db.prepare('SELECT fitness FROM evolution_individuals ORDER BY fitness DESC').all();
405
- expect(best.fitness).toBe(allRows[0].fitness);
406
- });
407
- /* ---------- getPopulation ---------- */
408
- it('getPopulation() returns individuals for the specified generation', () => {
409
- engine.initializePopulation();
410
- const pop0 = engine.getPopulation(0);
411
- expect(pop0.length).toBe(5);
412
- for (const ind of pop0) {
413
- expect(ind.generation).toBe(0);
414
- expect(ind.genome).toBeDefined();
415
- expect(typeof ind.fitness).toBe('number');
416
- expect(typeof ind.isActive).toBe('boolean');
417
- }
418
- });
419
- it('getPopulation() defaults to current generation', () => {
420
- engine.setDataSources(makeMockDataSources());
421
- engine.initializePopulation();
422
- engine.runGeneration();
423
- const pop = engine.getPopulation();
424
- expect(pop.length).toBe(5);
425
- for (const ind of pop) {
426
- expect(ind.generation).toBe(1);
427
- }
428
- });
429
- it('getPopulation() returns empty array for non-existent generation', () => {
430
- const pop = engine.getPopulation(999);
431
- expect(pop).toEqual([]);
432
- });
433
- /* ---------- getLineage ---------- */
434
- it('getLineage() returns parent records for a child individual', () => {
435
- engine.setDataSources(makeMockDataSources());
436
- engine.initializePopulation();
437
- engine.runGeneration();
438
- // Find an individual with parents (non-elite offspring from gen 1)
439
- const offspring = db.prepare('SELECT id FROM evolution_individuals WHERE generation = 1 AND parent_b_id IS NOT NULL LIMIT 1').get();
440
- if (offspring) {
441
- const lineage = engine.getLineage(offspring.id);
442
- expect(lineage.length).toBeGreaterThanOrEqual(1);
443
- for (const entry of lineage) {
444
- expect(entry.childId).toBe(offspring.id);
445
- expect(entry.parentId).toBeGreaterThan(0);
446
- expect(typeof entry.crossoverPoint).toBe('string');
447
- }
448
- }
449
- });
450
- /* ---------- activate ---------- */
451
- it('activate() applies genome values to the parameter registry', () => {
452
- const genome = {
453
- 'scoring:threshold': 0.75,
454
- 'scoring:weight': 1.5,
455
- 'learning:rate': 0.05,
456
- };
457
- engine.activate(genome);
458
- expect(registry.get('scoring', 'threshold')).toBe(0.75);
459
- expect(registry.get('scoring', 'weight')).toBe(1.5);
460
- expect(registry.get('learning', 'rate')).toBe(0.05);
461
- });
462
- /* ---------- config defaults ---------- */
463
- it('uses default config values when not specified', () => {
464
- const minimalEngine = new EvolutionEngine(db, registry, { brainName: 'minimal' });
465
- const status = minimalEngine.getStatus();
466
- expect(status.config.populationSize).toBe(15);
467
- expect(status.config.mutationRate).toBe(0.15);
468
- expect(status.config.eliteCount).toBe(2);
469
- expect(status.config.tournamentSize).toBe(3);
470
- expect(status.config.generationEvery).toBe(20);
471
- });
472
- });
473
- //# sourceMappingURL=evolution-engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evolution-engine.test.js","sourceRoot":"","sources":["../../../src/metacognition/__tests__/evolution-engine.test.ts"],"names":[],"mappings":"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"}