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.
- package/.env.example +78 -0
- package/README.md +282 -0
- package/dist/src/active-inference/actions.d.ts +75 -0
- package/dist/src/active-inference/actions.js +250 -0
- package/dist/src/active-inference/autonomous-loop.d.ts +103 -0
- package/dist/src/active-inference/autonomous-loop.js +289 -0
- package/dist/src/active-inference/core.d.ts +85 -0
- package/dist/src/active-inference/core.js +555 -0
- package/dist/src/active-inference/demo-autonomous-loop.d.ts +8 -0
- package/dist/src/active-inference/demo-autonomous-loop.js +338 -0
- package/dist/src/active-inference/demo-value-integration.d.ts +8 -0
- package/dist/src/active-inference/demo-value-integration.js +174 -0
- package/dist/src/active-inference/index.d.ts +32 -0
- package/dist/src/active-inference/index.js +88 -0
- package/dist/src/active-inference/integration.d.ts +114 -0
- package/dist/src/active-inference/integration.js +698 -0
- package/dist/src/active-inference/memory-integration.d.ts +51 -0
- package/dist/src/active-inference/memory-integration.js +232 -0
- package/dist/src/active-inference/observations.d.ts +67 -0
- package/dist/src/active-inference/observations.js +147 -0
- package/dist/src/active-inference/test-active-inference.d.ts +8 -0
- package/dist/src/active-inference/test-active-inference.js +320 -0
- package/dist/src/active-inference/test-value-integration.d.ts +6 -0
- package/dist/src/active-inference/test-value-integration.js +168 -0
- package/dist/src/active-inference/types.d.ts +150 -0
- package/dist/src/active-inference/types.js +59 -0
- package/dist/src/active-inference/value-integration.d.ts +164 -0
- package/dist/src/active-inference/value-integration.js +459 -0
- package/dist/src/agents/base-agent.d.ts +53 -0
- package/dist/src/agents/base-agent.js +178 -0
- package/dist/src/agents/builder.d.ts +67 -0
- package/dist/src/agents/builder.js +537 -0
- package/dist/src/agents/critic.d.ts +35 -0
- package/dist/src/agents/critic.js +322 -0
- package/dist/src/agents/ethicist.d.ts +54 -0
- package/dist/src/agents/ethicist.js +393 -0
- package/dist/src/agents/explorer.d.ts +26 -0
- package/dist/src/agents/explorer.js +216 -0
- package/dist/src/agents/feeling.d.ts +41 -0
- package/dist/src/agents/feeling.js +320 -0
- package/dist/src/agents/index.d.ts +111 -0
- package/dist/src/agents/index.js +222 -0
- package/dist/src/agents/memory.d.ts +69 -0
- package/dist/src/agents/memory.js +404 -0
- package/dist/src/agents/message-bus.d.ts +88 -0
- package/dist/src/agents/message-bus.js +267 -0
- package/dist/src/agents/narrator.d.ts +90 -0
- package/dist/src/agents/narrator.js +473 -0
- package/dist/src/agents/planner.d.ts +38 -0
- package/dist/src/agents/planner.js +341 -0
- package/dist/src/agents/predictor.d.ts +73 -0
- package/dist/src/agents/predictor.js +506 -0
- package/dist/src/agents/sensor.d.ts +88 -0
- package/dist/src/agents/sensor.js +377 -0
- package/dist/src/agents/test-agents.d.ts +6 -0
- package/dist/src/agents/test-agents.js +73 -0
- package/dist/src/agents/types.d.ts +194 -0
- package/dist/src/agents/types.js +7 -0
- package/dist/src/brain/index.d.ts +185 -0
- package/dist/src/brain/index.js +843 -0
- package/dist/src/brain/trace.d.ts +91 -0
- package/dist/src/brain/trace.js +327 -0
- package/dist/src/brain/types.d.ts +165 -0
- package/dist/src/brain/types.js +51 -0
- package/dist/src/cli/chat.d.ts +237 -0
- package/dist/src/cli/chat.js +1959 -0
- package/dist/src/cli/dispatcher.d.ts +182 -0
- package/dist/src/cli/dispatcher.js +718 -0
- package/dist/src/cli/human-loop.d.ts +170 -0
- package/dist/src/cli/human-loop.js +543 -0
- package/dist/src/cli/index.d.ts +12 -0
- package/dist/src/cli/index.js +28 -0
- package/dist/src/cli/interactive.d.ts +141 -0
- package/dist/src/cli/interactive.js +757 -0
- package/dist/src/cli/ui.d.ts +205 -0
- package/dist/src/cli/ui.js +632 -0
- package/dist/src/consciousness/attention-schema.d.ts +154 -0
- package/dist/src/consciousness/attention-schema.js +432 -0
- package/dist/src/consciousness/global-workspace.d.ts +149 -0
- package/dist/src/consciousness/global-workspace.js +422 -0
- package/dist/src/consciousness/index.d.ts +186 -0
- package/dist/src/consciousness/index.js +476 -0
- package/dist/src/consciousness/phi-calculator.d.ts +119 -0
- package/dist/src/consciousness/phi-calculator.js +445 -0
- package/dist/src/consciousness/phi-decisions.d.ts +169 -0
- package/dist/src/consciousness/phi-decisions.js +383 -0
- package/dist/src/consciousness/phi-monitor.d.ts +153 -0
- package/dist/src/consciousness/phi-monitor.js +465 -0
- package/dist/src/consciousness/types.d.ts +260 -0
- package/dist/src/consciousness/types.js +44 -0
- package/dist/src/daemon/dream-mode.d.ts +115 -0
- package/dist/src/daemon/dream-mode.js +470 -0
- package/dist/src/daemon/index.d.ts +162 -0
- package/dist/src/daemon/index.js +542 -0
- package/dist/src/daemon/maintenance.d.ts +139 -0
- package/dist/src/daemon/maintenance.js +549 -0
- package/dist/src/daemon/process.d.ts +82 -0
- package/dist/src/daemon/process.js +442 -0
- package/dist/src/daemon/scheduler.d.ts +90 -0
- package/dist/src/daemon/scheduler.js +494 -0
- package/dist/src/daemon/types.d.ts +213 -0
- package/dist/src/daemon/types.js +50 -0
- package/dist/src/epistemic/index.d.ts +74 -0
- package/dist/src/epistemic/index.js +225 -0
- package/dist/src/grounding/epistemic-stack.d.ts +100 -0
- package/dist/src/grounding/epistemic-stack.js +408 -0
- package/dist/src/grounding/feedback.d.ts +98 -0
- package/dist/src/grounding/feedback.js +276 -0
- package/dist/src/grounding/index.d.ts +123 -0
- package/dist/src/grounding/index.js +224 -0
- package/dist/src/grounding/verifier.d.ts +149 -0
- package/dist/src/grounding/verifier.js +484 -0
- package/dist/src/healing/detector.d.ts +110 -0
- package/dist/src/healing/detector.js +436 -0
- package/dist/src/healing/fixer.d.ts +138 -0
- package/dist/src/healing/fixer.js +572 -0
- package/dist/src/healing/index.d.ts +23 -0
- package/dist/src/healing/index.js +43 -0
- package/dist/src/hooks/index.d.ts +135 -0
- package/dist/src/hooks/index.js +317 -0
- package/dist/src/index.d.ts +23 -0
- package/dist/src/index.js +1266 -0
- package/dist/src/kernel/index.d.ts +155 -0
- package/dist/src/kernel/index.js +795 -0
- package/dist/src/kernel/invariants.d.ts +153 -0
- package/dist/src/kernel/invariants.js +355 -0
- package/dist/src/kernel/test-kernel.d.ts +6 -0
- package/dist/src/kernel/test-kernel.js +108 -0
- package/dist/src/kernel/test-real-mcp.d.ts +10 -0
- package/dist/src/kernel/test-real-mcp.js +295 -0
- package/dist/src/llm/index.d.ts +146 -0
- package/dist/src/llm/index.js +428 -0
- package/dist/src/llm/router.d.ts +136 -0
- package/dist/src/llm/router.js +510 -0
- package/dist/src/mcp/index.d.ts +85 -0
- package/dist/src/mcp/index.js +657 -0
- package/dist/src/mcp/resilient.d.ts +139 -0
- package/dist/src/mcp/resilient.js +417 -0
- package/dist/src/memory/cache.d.ts +118 -0
- package/dist/src/memory/cache.js +356 -0
- package/dist/src/memory/cognitive-workspace.d.ts +231 -0
- package/dist/src/memory/cognitive-workspace.js +521 -0
- package/dist/src/memory/consolidation.d.ts +99 -0
- package/dist/src/memory/consolidation.js +443 -0
- package/dist/src/memory/episodic.d.ts +114 -0
- package/dist/src/memory/episodic.js +394 -0
- package/dist/src/memory/forgetting.d.ts +134 -0
- package/dist/src/memory/forgetting.js +324 -0
- package/dist/src/memory/index.d.ts +211 -0
- package/dist/src/memory/index.js +367 -0
- package/dist/src/memory/indexer.d.ts +123 -0
- package/dist/src/memory/indexer.js +479 -0
- package/dist/src/memory/procedural.d.ts +136 -0
- package/dist/src/memory/procedural.js +479 -0
- package/dist/src/memory/semantic.d.ts +132 -0
- package/dist/src/memory/semantic.js +497 -0
- package/dist/src/memory/types.d.ts +193 -0
- package/dist/src/memory/types.js +15 -0
- package/dist/src/orchestrator.d.ts +65 -0
- package/dist/src/orchestrator.js +317 -0
- package/dist/src/persistence/index.d.ts +257 -0
- package/dist/src/persistence/index.js +763 -0
- package/dist/src/pipeline/executor.d.ts +51 -0
- package/dist/src/pipeline/executor.js +695 -0
- package/dist/src/pipeline/index.d.ts +7 -0
- package/dist/src/pipeline/index.js +11 -0
- package/dist/src/self-production.d.ts +67 -0
- package/dist/src/self-production.js +205 -0
- package/dist/src/subagents/executor.d.ts +58 -0
- package/dist/src/subagents/executor.js +283 -0
- package/dist/src/subagents/index.d.ts +37 -0
- package/dist/src/subagents/index.js +53 -0
- package/dist/src/subagents/registry.d.ts +23 -0
- package/dist/src/subagents/registry.js +167 -0
- package/dist/src/subagents/types.d.ts +79 -0
- package/dist/src/subagents/types.js +14 -0
- package/dist/src/tools/bash.d.ts +139 -0
- package/dist/src/tools/bash.js +583 -0
- package/dist/src/tools/edit.d.ts +125 -0
- package/dist/src/tools/edit.js +424 -0
- package/dist/src/tools/git.d.ts +179 -0
- package/dist/src/tools/git.js +504 -0
- package/dist/src/tools/index.d.ts +21 -0
- package/dist/src/tools/index.js +163 -0
- package/dist/src/types.d.ts +145 -0
- package/dist/src/types.js +7 -0
- package/dist/src/world-model/decoder.d.ts +163 -0
- package/dist/src/world-model/decoder.js +517 -0
- package/dist/src/world-model/digital-twin.d.ts +219 -0
- package/dist/src/world-model/digital-twin.js +695 -0
- package/dist/src/world-model/encoder.d.ts +141 -0
- package/dist/src/world-model/encoder.js +564 -0
- package/dist/src/world-model/index.d.ts +221 -0
- package/dist/src/world-model/index.js +772 -0
- package/dist/src/world-model/predictor.d.ts +161 -0
- package/dist/src/world-model/predictor.js +681 -0
- package/dist/src/world-model/test-value-jepa.d.ts +8 -0
- package/dist/src/world-model/test-value-jepa.js +430 -0
- package/dist/src/world-model/types.d.ts +341 -0
- package/dist/src/world-model/types.js +69 -0
- package/dist/src/world-model/value-jepa.d.ts +247 -0
- package/dist/src/world-model/value-jepa.js +622 -0
- package/dist/test/brain.test.d.ts +11 -0
- package/dist/test/brain.test.js +358 -0
- package/dist/test/cli/dispatcher.test.d.ts +4 -0
- package/dist/test/cli/dispatcher.test.js +332 -0
- package/dist/test/cli/human-loop.test.d.ts +4 -0
- package/dist/test/cli/human-loop.test.js +270 -0
- package/dist/test/grounding/feedback.test.d.ts +4 -0
- package/dist/test/grounding/feedback.test.js +462 -0
- package/dist/test/grounding/verifier.test.d.ts +4 -0
- package/dist/test/grounding/verifier.test.js +442 -0
- package/dist/test/grounding.test.d.ts +6 -0
- package/dist/test/grounding.test.js +246 -0
- package/dist/test/healing/detector.test.d.ts +4 -0
- package/dist/test/healing/detector.test.js +266 -0
- package/dist/test/healing/fixer.test.d.ts +4 -0
- package/dist/test/healing/fixer.test.js +369 -0
- package/dist/test/integration.test.d.ts +5 -0
- package/dist/test/integration.test.js +290 -0
- package/dist/test/tools/bash.test.d.ts +4 -0
- package/dist/test/tools/bash.test.js +348 -0
- package/dist/test/tools/edit.test.d.ts +4 -0
- package/dist/test/tools/edit.test.js +350 -0
- package/dist/test/tools/git.test.d.ts +4 -0
- package/dist/test/tools/git.test.js +350 -0
- 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
|
+
});
|