genesis-ai-cli 7.4.5

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 (227) hide show
  1. package/.env.example +78 -0
  2. package/README.md +282 -0
  3. package/dist/src/active-inference/actions.d.ts +75 -0
  4. package/dist/src/active-inference/actions.js +250 -0
  5. package/dist/src/active-inference/autonomous-loop.d.ts +103 -0
  6. package/dist/src/active-inference/autonomous-loop.js +289 -0
  7. package/dist/src/active-inference/core.d.ts +85 -0
  8. package/dist/src/active-inference/core.js +555 -0
  9. package/dist/src/active-inference/demo-autonomous-loop.d.ts +8 -0
  10. package/dist/src/active-inference/demo-autonomous-loop.js +338 -0
  11. package/dist/src/active-inference/demo-value-integration.d.ts +8 -0
  12. package/dist/src/active-inference/demo-value-integration.js +174 -0
  13. package/dist/src/active-inference/index.d.ts +32 -0
  14. package/dist/src/active-inference/index.js +88 -0
  15. package/dist/src/active-inference/integration.d.ts +114 -0
  16. package/dist/src/active-inference/integration.js +698 -0
  17. package/dist/src/active-inference/memory-integration.d.ts +51 -0
  18. package/dist/src/active-inference/memory-integration.js +232 -0
  19. package/dist/src/active-inference/observations.d.ts +67 -0
  20. package/dist/src/active-inference/observations.js +147 -0
  21. package/dist/src/active-inference/test-active-inference.d.ts +8 -0
  22. package/dist/src/active-inference/test-active-inference.js +320 -0
  23. package/dist/src/active-inference/test-value-integration.d.ts +6 -0
  24. package/dist/src/active-inference/test-value-integration.js +168 -0
  25. package/dist/src/active-inference/types.d.ts +150 -0
  26. package/dist/src/active-inference/types.js +59 -0
  27. package/dist/src/active-inference/value-integration.d.ts +164 -0
  28. package/dist/src/active-inference/value-integration.js +459 -0
  29. package/dist/src/agents/base-agent.d.ts +53 -0
  30. package/dist/src/agents/base-agent.js +178 -0
  31. package/dist/src/agents/builder.d.ts +67 -0
  32. package/dist/src/agents/builder.js +537 -0
  33. package/dist/src/agents/critic.d.ts +35 -0
  34. package/dist/src/agents/critic.js +322 -0
  35. package/dist/src/agents/ethicist.d.ts +54 -0
  36. package/dist/src/agents/ethicist.js +393 -0
  37. package/dist/src/agents/explorer.d.ts +26 -0
  38. package/dist/src/agents/explorer.js +216 -0
  39. package/dist/src/agents/feeling.d.ts +41 -0
  40. package/dist/src/agents/feeling.js +320 -0
  41. package/dist/src/agents/index.d.ts +111 -0
  42. package/dist/src/agents/index.js +222 -0
  43. package/dist/src/agents/memory.d.ts +69 -0
  44. package/dist/src/agents/memory.js +404 -0
  45. package/dist/src/agents/message-bus.d.ts +88 -0
  46. package/dist/src/agents/message-bus.js +267 -0
  47. package/dist/src/agents/narrator.d.ts +90 -0
  48. package/dist/src/agents/narrator.js +473 -0
  49. package/dist/src/agents/planner.d.ts +38 -0
  50. package/dist/src/agents/planner.js +341 -0
  51. package/dist/src/agents/predictor.d.ts +73 -0
  52. package/dist/src/agents/predictor.js +506 -0
  53. package/dist/src/agents/sensor.d.ts +88 -0
  54. package/dist/src/agents/sensor.js +377 -0
  55. package/dist/src/agents/test-agents.d.ts +6 -0
  56. package/dist/src/agents/test-agents.js +73 -0
  57. package/dist/src/agents/types.d.ts +194 -0
  58. package/dist/src/agents/types.js +7 -0
  59. package/dist/src/brain/index.d.ts +185 -0
  60. package/dist/src/brain/index.js +843 -0
  61. package/dist/src/brain/trace.d.ts +91 -0
  62. package/dist/src/brain/trace.js +327 -0
  63. package/dist/src/brain/types.d.ts +165 -0
  64. package/dist/src/brain/types.js +51 -0
  65. package/dist/src/cli/chat.d.ts +237 -0
  66. package/dist/src/cli/chat.js +1959 -0
  67. package/dist/src/cli/dispatcher.d.ts +182 -0
  68. package/dist/src/cli/dispatcher.js +718 -0
  69. package/dist/src/cli/human-loop.d.ts +170 -0
  70. package/dist/src/cli/human-loop.js +543 -0
  71. package/dist/src/cli/index.d.ts +12 -0
  72. package/dist/src/cli/index.js +28 -0
  73. package/dist/src/cli/interactive.d.ts +141 -0
  74. package/dist/src/cli/interactive.js +757 -0
  75. package/dist/src/cli/ui.d.ts +205 -0
  76. package/dist/src/cli/ui.js +632 -0
  77. package/dist/src/consciousness/attention-schema.d.ts +154 -0
  78. package/dist/src/consciousness/attention-schema.js +432 -0
  79. package/dist/src/consciousness/global-workspace.d.ts +149 -0
  80. package/dist/src/consciousness/global-workspace.js +422 -0
  81. package/dist/src/consciousness/index.d.ts +186 -0
  82. package/dist/src/consciousness/index.js +476 -0
  83. package/dist/src/consciousness/phi-calculator.d.ts +119 -0
  84. package/dist/src/consciousness/phi-calculator.js +445 -0
  85. package/dist/src/consciousness/phi-decisions.d.ts +169 -0
  86. package/dist/src/consciousness/phi-decisions.js +383 -0
  87. package/dist/src/consciousness/phi-monitor.d.ts +153 -0
  88. package/dist/src/consciousness/phi-monitor.js +465 -0
  89. package/dist/src/consciousness/types.d.ts +260 -0
  90. package/dist/src/consciousness/types.js +44 -0
  91. package/dist/src/daemon/dream-mode.d.ts +115 -0
  92. package/dist/src/daemon/dream-mode.js +470 -0
  93. package/dist/src/daemon/index.d.ts +162 -0
  94. package/dist/src/daemon/index.js +542 -0
  95. package/dist/src/daemon/maintenance.d.ts +139 -0
  96. package/dist/src/daemon/maintenance.js +549 -0
  97. package/dist/src/daemon/process.d.ts +82 -0
  98. package/dist/src/daemon/process.js +442 -0
  99. package/dist/src/daemon/scheduler.d.ts +90 -0
  100. package/dist/src/daemon/scheduler.js +494 -0
  101. package/dist/src/daemon/types.d.ts +213 -0
  102. package/dist/src/daemon/types.js +50 -0
  103. package/dist/src/epistemic/index.d.ts +74 -0
  104. package/dist/src/epistemic/index.js +225 -0
  105. package/dist/src/grounding/epistemic-stack.d.ts +100 -0
  106. package/dist/src/grounding/epistemic-stack.js +408 -0
  107. package/dist/src/grounding/feedback.d.ts +98 -0
  108. package/dist/src/grounding/feedback.js +276 -0
  109. package/dist/src/grounding/index.d.ts +123 -0
  110. package/dist/src/grounding/index.js +224 -0
  111. package/dist/src/grounding/verifier.d.ts +149 -0
  112. package/dist/src/grounding/verifier.js +484 -0
  113. package/dist/src/healing/detector.d.ts +110 -0
  114. package/dist/src/healing/detector.js +436 -0
  115. package/dist/src/healing/fixer.d.ts +138 -0
  116. package/dist/src/healing/fixer.js +572 -0
  117. package/dist/src/healing/index.d.ts +23 -0
  118. package/dist/src/healing/index.js +43 -0
  119. package/dist/src/hooks/index.d.ts +135 -0
  120. package/dist/src/hooks/index.js +317 -0
  121. package/dist/src/index.d.ts +23 -0
  122. package/dist/src/index.js +1266 -0
  123. package/dist/src/kernel/index.d.ts +155 -0
  124. package/dist/src/kernel/index.js +795 -0
  125. package/dist/src/kernel/invariants.d.ts +153 -0
  126. package/dist/src/kernel/invariants.js +355 -0
  127. package/dist/src/kernel/test-kernel.d.ts +6 -0
  128. package/dist/src/kernel/test-kernel.js +108 -0
  129. package/dist/src/kernel/test-real-mcp.d.ts +10 -0
  130. package/dist/src/kernel/test-real-mcp.js +295 -0
  131. package/dist/src/llm/index.d.ts +146 -0
  132. package/dist/src/llm/index.js +428 -0
  133. package/dist/src/llm/router.d.ts +136 -0
  134. package/dist/src/llm/router.js +510 -0
  135. package/dist/src/mcp/index.d.ts +85 -0
  136. package/dist/src/mcp/index.js +657 -0
  137. package/dist/src/mcp/resilient.d.ts +139 -0
  138. package/dist/src/mcp/resilient.js +417 -0
  139. package/dist/src/memory/cache.d.ts +118 -0
  140. package/dist/src/memory/cache.js +356 -0
  141. package/dist/src/memory/cognitive-workspace.d.ts +231 -0
  142. package/dist/src/memory/cognitive-workspace.js +521 -0
  143. package/dist/src/memory/consolidation.d.ts +99 -0
  144. package/dist/src/memory/consolidation.js +443 -0
  145. package/dist/src/memory/episodic.d.ts +114 -0
  146. package/dist/src/memory/episodic.js +394 -0
  147. package/dist/src/memory/forgetting.d.ts +134 -0
  148. package/dist/src/memory/forgetting.js +324 -0
  149. package/dist/src/memory/index.d.ts +211 -0
  150. package/dist/src/memory/index.js +367 -0
  151. package/dist/src/memory/indexer.d.ts +123 -0
  152. package/dist/src/memory/indexer.js +479 -0
  153. package/dist/src/memory/procedural.d.ts +136 -0
  154. package/dist/src/memory/procedural.js +479 -0
  155. package/dist/src/memory/semantic.d.ts +132 -0
  156. package/dist/src/memory/semantic.js +497 -0
  157. package/dist/src/memory/types.d.ts +193 -0
  158. package/dist/src/memory/types.js +15 -0
  159. package/dist/src/orchestrator.d.ts +65 -0
  160. package/dist/src/orchestrator.js +317 -0
  161. package/dist/src/persistence/index.d.ts +257 -0
  162. package/dist/src/persistence/index.js +763 -0
  163. package/dist/src/pipeline/executor.d.ts +51 -0
  164. package/dist/src/pipeline/executor.js +695 -0
  165. package/dist/src/pipeline/index.d.ts +7 -0
  166. package/dist/src/pipeline/index.js +11 -0
  167. package/dist/src/self-production.d.ts +67 -0
  168. package/dist/src/self-production.js +205 -0
  169. package/dist/src/subagents/executor.d.ts +58 -0
  170. package/dist/src/subagents/executor.js +283 -0
  171. package/dist/src/subagents/index.d.ts +37 -0
  172. package/dist/src/subagents/index.js +53 -0
  173. package/dist/src/subagents/registry.d.ts +23 -0
  174. package/dist/src/subagents/registry.js +167 -0
  175. package/dist/src/subagents/types.d.ts +79 -0
  176. package/dist/src/subagents/types.js +14 -0
  177. package/dist/src/tools/bash.d.ts +139 -0
  178. package/dist/src/tools/bash.js +583 -0
  179. package/dist/src/tools/edit.d.ts +125 -0
  180. package/dist/src/tools/edit.js +424 -0
  181. package/dist/src/tools/git.d.ts +179 -0
  182. package/dist/src/tools/git.js +504 -0
  183. package/dist/src/tools/index.d.ts +21 -0
  184. package/dist/src/tools/index.js +163 -0
  185. package/dist/src/types.d.ts +145 -0
  186. package/dist/src/types.js +7 -0
  187. package/dist/src/world-model/decoder.d.ts +163 -0
  188. package/dist/src/world-model/decoder.js +517 -0
  189. package/dist/src/world-model/digital-twin.d.ts +219 -0
  190. package/dist/src/world-model/digital-twin.js +695 -0
  191. package/dist/src/world-model/encoder.d.ts +141 -0
  192. package/dist/src/world-model/encoder.js +564 -0
  193. package/dist/src/world-model/index.d.ts +221 -0
  194. package/dist/src/world-model/index.js +772 -0
  195. package/dist/src/world-model/predictor.d.ts +161 -0
  196. package/dist/src/world-model/predictor.js +681 -0
  197. package/dist/src/world-model/test-value-jepa.d.ts +8 -0
  198. package/dist/src/world-model/test-value-jepa.js +430 -0
  199. package/dist/src/world-model/types.d.ts +341 -0
  200. package/dist/src/world-model/types.js +69 -0
  201. package/dist/src/world-model/value-jepa.d.ts +247 -0
  202. package/dist/src/world-model/value-jepa.js +622 -0
  203. package/dist/test/brain.test.d.ts +11 -0
  204. package/dist/test/brain.test.js +358 -0
  205. package/dist/test/cli/dispatcher.test.d.ts +4 -0
  206. package/dist/test/cli/dispatcher.test.js +332 -0
  207. package/dist/test/cli/human-loop.test.d.ts +4 -0
  208. package/dist/test/cli/human-loop.test.js +270 -0
  209. package/dist/test/grounding/feedback.test.d.ts +4 -0
  210. package/dist/test/grounding/feedback.test.js +462 -0
  211. package/dist/test/grounding/verifier.test.d.ts +4 -0
  212. package/dist/test/grounding/verifier.test.js +442 -0
  213. package/dist/test/grounding.test.d.ts +6 -0
  214. package/dist/test/grounding.test.js +246 -0
  215. package/dist/test/healing/detector.test.d.ts +4 -0
  216. package/dist/test/healing/detector.test.js +266 -0
  217. package/dist/test/healing/fixer.test.d.ts +4 -0
  218. package/dist/test/healing/fixer.test.js +369 -0
  219. package/dist/test/integration.test.d.ts +5 -0
  220. package/dist/test/integration.test.js +290 -0
  221. package/dist/test/tools/bash.test.d.ts +4 -0
  222. package/dist/test/tools/bash.test.js +348 -0
  223. package/dist/test/tools/edit.test.d.ts +4 -0
  224. package/dist/test/tools/edit.test.js +350 -0
  225. package/dist/test/tools/git.test.d.ts +4 -0
  226. package/dist/test/tools/git.test.js +350 -0
  227. package/package.json +60 -0
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for Brain Module (Phase 10: Neural Integration Layer)
4
+ *
5
+ * Tests the Cognitive Integration Layer:
6
+ * - Command routing (Supervisor pattern)
7
+ * - State management
8
+ * - Module transitions
9
+ * - Metrics tracking
10
+ * - Event system
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const node_test_1 = require("node:test");
17
+ const node_assert_1 = __importDefault(require("node:assert"));
18
+ (0, node_test_1.describe)('Brain Module (Phase 10)', () => {
19
+ (0, node_test_1.describe)('Brain Types', () => {
20
+ (0, node_test_1.test)('exports all required types', async () => {
21
+ const types = await import('../src/brain/types.js');
22
+ // Check type exports exist
23
+ node_assert_1.default.ok(types.DEFAULT_BRAIN_CONFIG, 'DEFAULT_BRAIN_CONFIG should exist');
24
+ node_assert_1.default.strictEqual(typeof types.DEFAULT_BRAIN_CONFIG, 'object');
25
+ });
26
+ (0, node_test_1.test)('DEFAULT_BRAIN_CONFIG has correct structure', async () => {
27
+ const { DEFAULT_BRAIN_CONFIG } = await import('../src/brain/types.js');
28
+ // Memory config
29
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.memory.enabled, 'boolean');
30
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.memory.anticipationEnabled, 'boolean');
31
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.memory.maxContextTokens, 'number');
32
+ // LLM config
33
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.llm.enabled, 'boolean');
34
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.llm.maxRetries, 'number');
35
+ // Grounding config
36
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.grounding.enabled, 'boolean');
37
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.grounding.verifyAllResponses, 'boolean');
38
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.grounding.confidenceThreshold, 'number');
39
+ // Tools config
40
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.tools.enabled, 'boolean');
41
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.tools.maxExecutions, 'number');
42
+ // Healing config
43
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.healing.enabled, 'boolean');
44
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.healing.maxAttempts, 'number');
45
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.healing.autoHeal, 'boolean');
46
+ // Consciousness config
47
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.consciousness.enabled, 'boolean');
48
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.consciousness.phiThreshold, 'number');
49
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.consciousness.broadcastEnabled, 'boolean');
50
+ // Processing limits
51
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.maxCycleTime, 'number');
52
+ node_assert_1.default.strictEqual(typeof DEFAULT_BRAIN_CONFIG.maxModuleTransitions, 'number');
53
+ });
54
+ (0, node_test_1.test)('DEFAULT_BRAIN_CONFIG has sensible defaults', async () => {
55
+ const { DEFAULT_BRAIN_CONFIG } = await import('../src/brain/types.js');
56
+ // Memory should be enabled by default
57
+ node_assert_1.default.strictEqual(DEFAULT_BRAIN_CONFIG.memory.enabled, true);
58
+ // Context tokens should be reasonable (8K default)
59
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.memory.maxContextTokens >= 1000);
60
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.memory.maxContextTokens <= 128000);
61
+ // Grounding confidence threshold should be between 0 and 1
62
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.grounding.confidenceThreshold >= 0);
63
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.grounding.confidenceThreshold <= 1);
64
+ // Max cycle time should be reasonable (not infinite)
65
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.maxCycleTime > 0);
66
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.maxCycleTime <= 600000); // Max 10 minutes
67
+ // Max transitions should prevent infinite loops
68
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.maxModuleTransitions > 0);
69
+ node_assert_1.default.ok(DEFAULT_BRAIN_CONFIG.maxModuleTransitions <= 100);
70
+ });
71
+ });
72
+ (0, node_test_1.describe)('Brain Class', () => {
73
+ (0, node_test_1.test)('creates brain instance', async () => {
74
+ const { createBrain } = await import('../src/brain/index.js');
75
+ const brain = createBrain();
76
+ node_assert_1.default.ok(brain, 'Brain should be created');
77
+ });
78
+ (0, node_test_1.test)('getBrain returns singleton', async () => {
79
+ const { getBrain, resetBrain } = await import('../src/brain/index.js');
80
+ // Reset first to ensure clean state
81
+ resetBrain();
82
+ const brain1 = getBrain();
83
+ const brain2 = getBrain();
84
+ node_assert_1.default.strictEqual(brain1, brain2, 'getBrain should return same instance');
85
+ });
86
+ (0, node_test_1.test)('resetBrain creates new instance', async () => {
87
+ const { getBrain, resetBrain } = await import('../src/brain/index.js');
88
+ const brain1 = getBrain();
89
+ resetBrain();
90
+ const brain2 = getBrain();
91
+ node_assert_1.default.notStrictEqual(brain1, brain2, 'resetBrain should create new instance');
92
+ });
93
+ (0, node_test_1.test)('brain has start/stop methods', async () => {
94
+ const { createBrain } = await import('../src/brain/index.js');
95
+ const brain = createBrain();
96
+ node_assert_1.default.strictEqual(typeof brain.start, 'function');
97
+ node_assert_1.default.strictEqual(typeof brain.stop, 'function');
98
+ });
99
+ (0, node_test_1.test)('brain has isRunning method', async () => {
100
+ const { createBrain } = await import('../src/brain/index.js');
101
+ const brain = createBrain();
102
+ node_assert_1.default.strictEqual(typeof brain.isRunning, 'function');
103
+ // Initially not running
104
+ node_assert_1.default.strictEqual(brain.isRunning(), false);
105
+ // Start and check
106
+ brain.start();
107
+ node_assert_1.default.strictEqual(brain.isRunning(), true);
108
+ // Stop and check
109
+ brain.stop();
110
+ node_assert_1.default.strictEqual(brain.isRunning(), false);
111
+ });
112
+ (0, node_test_1.test)('brain has process method', async () => {
113
+ const { createBrain } = await import('../src/brain/index.js');
114
+ const brain = createBrain();
115
+ node_assert_1.default.strictEqual(typeof brain.process, 'function');
116
+ });
117
+ (0, node_test_1.test)('brain has getMetrics method', async () => {
118
+ const { createBrain } = await import('../src/brain/index.js');
119
+ const brain = createBrain();
120
+ node_assert_1.default.strictEqual(typeof brain.getMetrics, 'function');
121
+ const metrics = brain.getMetrics();
122
+ node_assert_1.default.strictEqual(typeof metrics, 'object');
123
+ });
124
+ });
125
+ (0, node_test_1.describe)('Brain Metrics', () => {
126
+ (0, node_test_1.test)('initial metrics are zeroed', async () => {
127
+ const { createBrain } = await import('../src/brain/index.js');
128
+ const brain = createBrain();
129
+ const metrics = brain.getMetrics();
130
+ node_assert_1.default.strictEqual(metrics.totalCycles, 0);
131
+ node_assert_1.default.strictEqual(metrics.successfulCycles, 0);
132
+ node_assert_1.default.strictEqual(metrics.failedCycles, 0);
133
+ node_assert_1.default.strictEqual(metrics.memoryRecalls, 0);
134
+ node_assert_1.default.strictEqual(metrics.groundingChecks, 0);
135
+ node_assert_1.default.strictEqual(metrics.toolExecutions, 0);
136
+ node_assert_1.default.strictEqual(metrics.healingAttempts, 0);
137
+ node_assert_1.default.strictEqual(metrics.broadcasts, 0);
138
+ });
139
+ (0, node_test_1.test)('metrics track avgPhi', async () => {
140
+ const { createBrain } = await import('../src/brain/index.js');
141
+ const brain = createBrain();
142
+ const metrics = brain.getMetrics();
143
+ node_assert_1.default.strictEqual(typeof metrics.avgPhi, 'number');
144
+ node_assert_1.default.ok(metrics.avgPhi >= 0, 'avgPhi should be >= 0');
145
+ node_assert_1.default.ok(metrics.avgPhi <= 1, 'avgPhi should be <= 1');
146
+ });
147
+ (0, node_test_1.test)('metrics track memoryReuseRate', async () => {
148
+ const { createBrain } = await import('../src/brain/index.js');
149
+ const brain = createBrain();
150
+ const metrics = brain.getMetrics();
151
+ node_assert_1.default.strictEqual(typeof metrics.memoryReuseRate, 'number');
152
+ node_assert_1.default.ok(metrics.memoryReuseRate >= 0, 'memoryReuseRate should be >= 0');
153
+ node_assert_1.default.ok(metrics.memoryReuseRate <= 1, 'memoryReuseRate should be <= 1');
154
+ });
155
+ (0, node_test_1.test)('metrics have moduleTransitions', async () => {
156
+ const { createBrain } = await import('../src/brain/index.js');
157
+ const brain = createBrain();
158
+ const metrics = brain.getMetrics();
159
+ node_assert_1.default.strictEqual(typeof metrics.moduleTransitions, 'object');
160
+ });
161
+ });
162
+ (0, node_test_1.describe)('Brain Events', () => {
163
+ (0, node_test_1.test)('brain has on method for events', async () => {
164
+ const { createBrain } = await import('../src/brain/index.js');
165
+ const brain = createBrain();
166
+ node_assert_1.default.strictEqual(typeof brain.on, 'function');
167
+ });
168
+ (0, node_test_1.test)('on returns unsubscribe function', async () => {
169
+ const { createBrain } = await import('../src/brain/index.js');
170
+ const brain = createBrain();
171
+ const events = [];
172
+ const handler = (event) => {
173
+ events.push(event.type);
174
+ };
175
+ // on() returns an unsubscribe function
176
+ const unsubscribe = brain.on(handler);
177
+ node_assert_1.default.strictEqual(typeof unsubscribe, 'function');
178
+ // Unsubscribe should not throw
179
+ unsubscribe();
180
+ });
181
+ });
182
+ (0, node_test_1.describe)('Brain Configuration', () => {
183
+ (0, node_test_1.test)('can create brain with custom config', async () => {
184
+ const { createBrain } = await import('../src/brain/index.js');
185
+ const brain = createBrain({
186
+ memory: {
187
+ enabled: false,
188
+ anticipationEnabled: false,
189
+ maxContextTokens: 4096,
190
+ },
191
+ llm: {
192
+ enabled: true,
193
+ maxRetries: 1,
194
+ },
195
+ grounding: {
196
+ enabled: false,
197
+ verifyAllResponses: false,
198
+ confidenceThreshold: 0.8,
199
+ },
200
+ tools: {
201
+ enabled: false,
202
+ maxExecutions: 3,
203
+ },
204
+ healing: {
205
+ enabled: false,
206
+ maxAttempts: 1,
207
+ autoHeal: false,
208
+ },
209
+ consciousness: {
210
+ enabled: false,
211
+ phiThreshold: 0.2,
212
+ broadcastEnabled: false,
213
+ },
214
+ maxCycleTime: 30000,
215
+ maxModuleTransitions: 10,
216
+ });
217
+ node_assert_1.default.ok(brain, 'Brain should be created with custom config');
218
+ });
219
+ });
220
+ (0, node_test_1.describe)('Command Routing', () => {
221
+ (0, node_test_1.test)('BrainModule type includes all modules', async () => {
222
+ // This is a type-level test - we just verify the module works
223
+ const { DEFAULT_BRAIN_CONFIG } = await import('../src/brain/types.js');
224
+ // The modules are: memory, llm, grounding, tools, healing, consciousness, kernel, done
225
+ // If this compiles, the types are correct
226
+ const modules = ['memory', 'llm', 'grounding', 'tools', 'healing', 'consciousness', 'kernel', 'done'];
227
+ node_assert_1.default.strictEqual(modules.length, 8, 'Should have 8 modules');
228
+ });
229
+ });
230
+ (0, node_test_1.describe)('Integration', () => {
231
+ (0, node_test_1.test)('brain can be started and stopped multiple times', async () => {
232
+ const { createBrain } = await import('../src/brain/index.js');
233
+ const brain = createBrain();
234
+ // Start
235
+ brain.start();
236
+ node_assert_1.default.strictEqual(brain.isRunning(), true);
237
+ // Stop
238
+ brain.stop();
239
+ node_assert_1.default.strictEqual(brain.isRunning(), false);
240
+ // Start again
241
+ brain.start();
242
+ node_assert_1.default.strictEqual(brain.isRunning(), true);
243
+ // Stop again
244
+ brain.stop();
245
+ node_assert_1.default.strictEqual(brain.isRunning(), false);
246
+ });
247
+ });
248
+ });
249
+ (0, node_test_1.describe)('Brain Types Validation', () => {
250
+ (0, node_test_1.test)('BrainState interface fields', async () => {
251
+ // This tests the structure by creating a mock state
252
+ const mockState = {
253
+ query: 'test query',
254
+ context: {
255
+ immediate: [],
256
+ task: [],
257
+ episodic: [],
258
+ semantic: [],
259
+ formatted: '',
260
+ tokenEstimate: 0,
261
+ reuseRate: 0,
262
+ },
263
+ response: '',
264
+ toolCalls: [],
265
+ toolResults: [],
266
+ phi: 0,
267
+ ignited: false,
268
+ verified: false,
269
+ healingAttempts: 0,
270
+ startTime: Date.now(),
271
+ moduleHistory: [],
272
+ };
273
+ node_assert_1.default.strictEqual(typeof mockState.query, 'string');
274
+ node_assert_1.default.strictEqual(typeof mockState.context, 'object');
275
+ node_assert_1.default.strictEqual(typeof mockState.response, 'string');
276
+ node_assert_1.default.ok(Array.isArray(mockState.toolCalls));
277
+ node_assert_1.default.ok(Array.isArray(mockState.toolResults));
278
+ node_assert_1.default.strictEqual(typeof mockState.phi, 'number');
279
+ node_assert_1.default.strictEqual(typeof mockState.ignited, 'boolean');
280
+ node_assert_1.default.strictEqual(typeof mockState.verified, 'boolean');
281
+ node_assert_1.default.strictEqual(typeof mockState.healingAttempts, 'number');
282
+ node_assert_1.default.strictEqual(typeof mockState.startTime, 'number');
283
+ node_assert_1.default.ok(Array.isArray(mockState.moduleHistory));
284
+ });
285
+ (0, node_test_1.test)('Command interface structure', async () => {
286
+ // Test Command interface structure
287
+ const mockCommand = {
288
+ goto: 'llm',
289
+ update: { response: 'test' },
290
+ reason: 'Test transition',
291
+ };
292
+ node_assert_1.default.strictEqual(typeof mockCommand.goto, 'string');
293
+ node_assert_1.default.strictEqual(typeof mockCommand.update, 'object');
294
+ node_assert_1.default.strictEqual(typeof mockCommand.reason, 'string');
295
+ });
296
+ (0, node_test_1.test)('BrainContext interface structure', async () => {
297
+ const mockContext = {
298
+ immediate: [],
299
+ task: [],
300
+ episodic: [],
301
+ semantic: [],
302
+ formatted: '',
303
+ tokenEstimate: 0,
304
+ reuseRate: 0,
305
+ };
306
+ node_assert_1.default.ok(Array.isArray(mockContext.immediate));
307
+ node_assert_1.default.ok(Array.isArray(mockContext.task));
308
+ node_assert_1.default.ok(Array.isArray(mockContext.episodic));
309
+ node_assert_1.default.ok(Array.isArray(mockContext.semantic));
310
+ node_assert_1.default.strictEqual(typeof mockContext.formatted, 'string');
311
+ node_assert_1.default.strictEqual(typeof mockContext.tokenEstimate, 'number');
312
+ node_assert_1.default.strictEqual(typeof mockContext.reuseRate, 'number');
313
+ });
314
+ });
315
+ (0, node_test_1.describe)('Brain Trace (Phase 10)', () => {
316
+ (0, node_test_1.test)('createBrainTrace creates trace instance', async () => {
317
+ const { createBrain, createBrainTrace } = await import('../src/brain/index.js');
318
+ const brain = createBrain();
319
+ const trace = createBrainTrace(brain);
320
+ node_assert_1.default.ok(trace, 'Trace should be created');
321
+ });
322
+ (0, node_test_1.test)('trace has enable/disable methods', async () => {
323
+ const { createBrain, createBrainTrace } = await import('../src/brain/index.js');
324
+ const brain = createBrain();
325
+ const trace = createBrainTrace(brain);
326
+ node_assert_1.default.strictEqual(typeof trace.enable, 'function');
327
+ node_assert_1.default.strictEqual(typeof trace.disable, 'function');
328
+ node_assert_1.default.strictEqual(typeof trace.isEnabled, 'function');
329
+ node_assert_1.default.strictEqual(typeof trace.toggle, 'function');
330
+ });
331
+ (0, node_test_1.test)('trace starts disabled', async () => {
332
+ const { createBrain, createBrainTrace } = await import('../src/brain/index.js');
333
+ const brain = createBrain();
334
+ const trace = createBrainTrace(brain);
335
+ node_assert_1.default.strictEqual(trace.isEnabled(), false);
336
+ });
337
+ (0, node_test_1.test)('enable() enables trace', async () => {
338
+ const { createBrain, createBrainTrace } = await import('../src/brain/index.js');
339
+ const brain = createBrain();
340
+ const trace = createBrainTrace(brain);
341
+ trace.enable();
342
+ node_assert_1.default.strictEqual(trace.isEnabled(), true);
343
+ trace.disable();
344
+ node_assert_1.default.strictEqual(trace.isEnabled(), false);
345
+ });
346
+ (0, node_test_1.test)('toggle() toggles trace state', async () => {
347
+ const { createBrain, createBrainTrace } = await import('../src/brain/index.js');
348
+ const brain = createBrain();
349
+ const trace = createBrainTrace(brain);
350
+ node_assert_1.default.strictEqual(trace.isEnabled(), false);
351
+ const result1 = trace.toggle();
352
+ node_assert_1.default.strictEqual(result1, true);
353
+ node_assert_1.default.strictEqual(trace.isEnabled(), true);
354
+ const result2 = trace.toggle();
355
+ node_assert_1.default.strictEqual(result2, false);
356
+ node_assert_1.default.strictEqual(trace.isEnabled(), false);
357
+ });
358
+ });
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Tests for Genesis Tool Dispatcher
3
+ */
4
+ export {};