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,542 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Genesis 6.0 - Daemon Module
|
|
4
|
+
*
|
|
5
|
+
* Unified daemon for background task scheduling, self-maintenance, and dream mode.
|
|
6
|
+
*
|
|
7
|
+
* This module provides:
|
|
8
|
+
* - Scheduler: Background task execution with priorities and retries
|
|
9
|
+
* - Maintenance: Self-repair and health monitoring
|
|
10
|
+
* - Dream Mode: Offline memory consolidation and creative synthesis
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createDaemon } from './daemon/index.js';
|
|
15
|
+
* import { createMemorySystem } from './memory/index.js';
|
|
16
|
+
*
|
|
17
|
+
* const memory = createMemorySystem();
|
|
18
|
+
* const daemon = createDaemon({ memory });
|
|
19
|
+
*
|
|
20
|
+
* // Start the daemon
|
|
21
|
+
* daemon.start();
|
|
22
|
+
*
|
|
23
|
+
* // Schedule a custom task
|
|
24
|
+
* daemon.schedule({
|
|
25
|
+
* name: 'my-task',
|
|
26
|
+
* schedule: { type: 'interval', intervalMs: 60000 },
|
|
27
|
+
* handler: async (ctx) => {
|
|
28
|
+
* ctx.logger.info('Running my task');
|
|
29
|
+
* return { success: true, duration: 100 };
|
|
30
|
+
* },
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Trigger a dream session
|
|
34
|
+
* await daemon.dream();
|
|
35
|
+
*
|
|
36
|
+
* // Check status
|
|
37
|
+
* console.log(daemon.status());
|
|
38
|
+
*
|
|
39
|
+
* // Stop the daemon
|
|
40
|
+
* daemon.stop();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
44
|
+
if (k2 === undefined) k2 = k;
|
|
45
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
46
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
47
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
48
|
+
}
|
|
49
|
+
Object.defineProperty(o, k2, desc);
|
|
50
|
+
}) : (function(o, m, k, k2) {
|
|
51
|
+
if (k2 === undefined) k2 = k;
|
|
52
|
+
o[k2] = m[k];
|
|
53
|
+
}));
|
|
54
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
55
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
56
|
+
};
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
exports.Daemon = exports.createDreamService = exports.DreamService = exports.createMaintenanceService = exports.MaintenanceService = exports.createScheduler = exports.Scheduler = void 0;
|
|
59
|
+
exports.createDaemon = createDaemon;
|
|
60
|
+
exports.getDaemon = getDaemon;
|
|
61
|
+
exports.resetDaemon = resetDaemon;
|
|
62
|
+
// Re-export types
|
|
63
|
+
__exportStar(require("./types.js"), exports);
|
|
64
|
+
// Re-export components
|
|
65
|
+
var scheduler_js_1 = require("./scheduler.js");
|
|
66
|
+
Object.defineProperty(exports, "Scheduler", { enumerable: true, get: function () { return scheduler_js_1.Scheduler; } });
|
|
67
|
+
Object.defineProperty(exports, "createScheduler", { enumerable: true, get: function () { return scheduler_js_1.createScheduler; } });
|
|
68
|
+
var maintenance_js_1 = require("./maintenance.js");
|
|
69
|
+
Object.defineProperty(exports, "MaintenanceService", { enumerable: true, get: function () { return maintenance_js_1.MaintenanceService; } });
|
|
70
|
+
Object.defineProperty(exports, "createMaintenanceService", { enumerable: true, get: function () { return maintenance_js_1.createMaintenanceService; } });
|
|
71
|
+
var dream_mode_js_1 = require("./dream-mode.js");
|
|
72
|
+
Object.defineProperty(exports, "DreamService", { enumerable: true, get: function () { return dream_mode_js_1.DreamService; } });
|
|
73
|
+
Object.defineProperty(exports, "createDreamService", { enumerable: true, get: function () { return dream_mode_js_1.createDreamService; } });
|
|
74
|
+
const types_js_1 = require("./types.js");
|
|
75
|
+
const scheduler_js_2 = require("./scheduler.js");
|
|
76
|
+
const maintenance_js_2 = require("./maintenance.js");
|
|
77
|
+
const dream_mode_js_2 = require("./dream-mode.js");
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Daemon Class
|
|
80
|
+
// ============================================================================
|
|
81
|
+
class Daemon {
|
|
82
|
+
config;
|
|
83
|
+
state = 'stopped';
|
|
84
|
+
startedAt = null;
|
|
85
|
+
errors = [];
|
|
86
|
+
eventHandlers = new Set();
|
|
87
|
+
heartbeatTimer = null;
|
|
88
|
+
// Components
|
|
89
|
+
scheduler;
|
|
90
|
+
maintenance;
|
|
91
|
+
dreamService;
|
|
92
|
+
// Dependencies
|
|
93
|
+
deps;
|
|
94
|
+
constructor(deps = {}, config = {}) {
|
|
95
|
+
this.config = { ...types_js_1.DEFAULT_DAEMON_CONFIG, ...config };
|
|
96
|
+
this.deps = deps;
|
|
97
|
+
// Create components
|
|
98
|
+
this.scheduler = (0, scheduler_js_2.createScheduler)(this.config.scheduler);
|
|
99
|
+
this.maintenance = (0, maintenance_js_2.createMaintenanceService)(this.config.maintenance, this.buildMaintenanceContext());
|
|
100
|
+
this.dreamService = (0, dream_mode_js_2.createDreamService)(this.config.dream, this.buildDreamContext());
|
|
101
|
+
// Wire up events
|
|
102
|
+
this.setupEventForwarding();
|
|
103
|
+
// Setup default tasks
|
|
104
|
+
this.setupDefaultTasks();
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// Lifecycle
|
|
108
|
+
// ============================================================================
|
|
109
|
+
start() {
|
|
110
|
+
if (this.state !== 'stopped') {
|
|
111
|
+
throw new Error(`Cannot start daemon in state: ${this.state}`);
|
|
112
|
+
}
|
|
113
|
+
this.state = 'starting';
|
|
114
|
+
this.startedAt = new Date();
|
|
115
|
+
this.log('Daemon starting...');
|
|
116
|
+
// Start heartbeat
|
|
117
|
+
this.heartbeatTimer = setInterval(() => this.heartbeat(), this.config.heartbeatIntervalMs);
|
|
118
|
+
// Start components
|
|
119
|
+
if (this.config.scheduler.enabled) {
|
|
120
|
+
this.scheduler.start();
|
|
121
|
+
}
|
|
122
|
+
if (this.config.maintenance.enabled) {
|
|
123
|
+
this.maintenance.start();
|
|
124
|
+
}
|
|
125
|
+
if (this.config.dream.autoTrigger) {
|
|
126
|
+
this.dreamService.startAutoTrigger();
|
|
127
|
+
}
|
|
128
|
+
this.state = 'running';
|
|
129
|
+
this.emit({ type: 'daemon_started', timestamp: new Date(), data: null });
|
|
130
|
+
this.log('Daemon started');
|
|
131
|
+
}
|
|
132
|
+
stop() {
|
|
133
|
+
if (this.state === 'stopped' || this.state === 'stopping') {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.state = 'stopping';
|
|
137
|
+
this.log('Daemon stopping...');
|
|
138
|
+
// Stop heartbeat
|
|
139
|
+
if (this.heartbeatTimer) {
|
|
140
|
+
clearInterval(this.heartbeatTimer);
|
|
141
|
+
this.heartbeatTimer = null;
|
|
142
|
+
}
|
|
143
|
+
// Stop components
|
|
144
|
+
this.scheduler.stop();
|
|
145
|
+
this.maintenance.stop();
|
|
146
|
+
this.dreamService.stopAutoTrigger();
|
|
147
|
+
// Interrupt dream if running
|
|
148
|
+
if (this.dreamService.isDreaming()) {
|
|
149
|
+
this.dreamService.interruptDream('Daemon stopping');
|
|
150
|
+
}
|
|
151
|
+
this.state = 'stopped';
|
|
152
|
+
this.emit({ type: 'daemon_stopped', timestamp: new Date(), data: null });
|
|
153
|
+
this.log('Daemon stopped');
|
|
154
|
+
}
|
|
155
|
+
restart() {
|
|
156
|
+
this.stop();
|
|
157
|
+
this.start();
|
|
158
|
+
}
|
|
159
|
+
getState() {
|
|
160
|
+
return this.state;
|
|
161
|
+
}
|
|
162
|
+
isRunning() {
|
|
163
|
+
return this.state === 'running' || this.state === 'dreaming' || this.state === 'maintaining';
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// Task Scheduling
|
|
167
|
+
// ============================================================================
|
|
168
|
+
schedule(options) {
|
|
169
|
+
return this.scheduler.schedule(options);
|
|
170
|
+
}
|
|
171
|
+
cancelTask(taskId) {
|
|
172
|
+
return this.scheduler.cancel(taskId);
|
|
173
|
+
}
|
|
174
|
+
triggerTask(taskId) {
|
|
175
|
+
return this.scheduler.trigger(taskId);
|
|
176
|
+
}
|
|
177
|
+
getTasks() {
|
|
178
|
+
return this.scheduler.getAll();
|
|
179
|
+
}
|
|
180
|
+
// ============================================================================
|
|
181
|
+
// Maintenance
|
|
182
|
+
// ============================================================================
|
|
183
|
+
async runMaintenance() {
|
|
184
|
+
const previousState = this.state;
|
|
185
|
+
this.state = 'maintaining';
|
|
186
|
+
try {
|
|
187
|
+
const report = await this.maintenance.runCycle();
|
|
188
|
+
return report;
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
this.state = previousState;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
getMaintenanceIssues() {
|
|
195
|
+
return this.maintenance.getOpenIssues();
|
|
196
|
+
}
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Dream Mode
|
|
199
|
+
// ============================================================================
|
|
200
|
+
async dream(options = {}) {
|
|
201
|
+
if (this.dreamService.isDreaming()) {
|
|
202
|
+
throw new Error('Already dreaming');
|
|
203
|
+
}
|
|
204
|
+
const previousState = this.state;
|
|
205
|
+
this.state = 'dreaming';
|
|
206
|
+
try {
|
|
207
|
+
await this.dreamService.startDream(options);
|
|
208
|
+
const results = await this.dreamService.waitForWake();
|
|
209
|
+
return results;
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
this.state = previousState;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
interruptDream(reason) {
|
|
216
|
+
return this.dreamService.interruptDream(reason);
|
|
217
|
+
}
|
|
218
|
+
isDreaming() {
|
|
219
|
+
return this.dreamService.isDreaming();
|
|
220
|
+
}
|
|
221
|
+
getDreamMetrics() {
|
|
222
|
+
return this.dreamService.getMetrics();
|
|
223
|
+
}
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// Activity Tracking
|
|
226
|
+
// ============================================================================
|
|
227
|
+
recordActivity() {
|
|
228
|
+
this.dreamService.recordActivity();
|
|
229
|
+
}
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// Status
|
|
232
|
+
// ============================================================================
|
|
233
|
+
status() {
|
|
234
|
+
const now = new Date();
|
|
235
|
+
const uptime = this.startedAt
|
|
236
|
+
? now.getTime() - this.startedAt.getTime()
|
|
237
|
+
: 0;
|
|
238
|
+
const schedulerStats = this.scheduler.stats();
|
|
239
|
+
return {
|
|
240
|
+
state: this.state,
|
|
241
|
+
uptime,
|
|
242
|
+
startedAt: this.startedAt,
|
|
243
|
+
lastHeartbeat: now,
|
|
244
|
+
activeTasks: schedulerStats.running,
|
|
245
|
+
completedTasks: schedulerStats.completed,
|
|
246
|
+
failedTasks: schedulerStats.failed,
|
|
247
|
+
dreamCycles: this.dreamService.getMetrics().dreamCycles,
|
|
248
|
+
maintenanceCycles: this.maintenance.stats().cyclesRun,
|
|
249
|
+
errors: this.errors.slice(-10), // Last 10 errors
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// ============================================================================
|
|
253
|
+
// Events
|
|
254
|
+
// ============================================================================
|
|
255
|
+
on(handler) {
|
|
256
|
+
this.eventHandlers.add(handler);
|
|
257
|
+
return () => this.eventHandlers.delete(handler);
|
|
258
|
+
}
|
|
259
|
+
emit(event) {
|
|
260
|
+
for (const handler of this.eventHandlers) {
|
|
261
|
+
try {
|
|
262
|
+
handler(event);
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
console.error('Daemon event handler error:', err);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// ============================================================================
|
|
270
|
+
// Internal
|
|
271
|
+
// ============================================================================
|
|
272
|
+
heartbeat() {
|
|
273
|
+
// Check for too many errors
|
|
274
|
+
if (this.errors.length >= this.config.maxErrors) {
|
|
275
|
+
const recentErrors = this.errors.filter((e) => Date.now() - e.timestamp.getTime() < 60000);
|
|
276
|
+
if (recentErrors.length >= this.config.maxErrors) {
|
|
277
|
+
this.log('Too many errors, entering error state', 'error');
|
|
278
|
+
this.state = 'error';
|
|
279
|
+
this.emit({
|
|
280
|
+
type: 'daemon_error',
|
|
281
|
+
timestamp: new Date(),
|
|
282
|
+
data: { message: 'Too many errors' },
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
setupEventForwarding() {
|
|
288
|
+
// Forward scheduler events
|
|
289
|
+
this.scheduler.on((event) => {
|
|
290
|
+
const eventType = `task_${event.type.replace('task_', '')}`;
|
|
291
|
+
if (['task_scheduled', 'task_started', 'task_completed', 'task_failed', 'task_cancelled'].includes(eventType)) {
|
|
292
|
+
this.emit({
|
|
293
|
+
type: eventType,
|
|
294
|
+
timestamp: new Date(),
|
|
295
|
+
data: event.task,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
// Forward maintenance events
|
|
300
|
+
this.maintenance.on((event) => {
|
|
301
|
+
if (event.type === 'cycle_started') {
|
|
302
|
+
this.emit({
|
|
303
|
+
type: 'maintenance_started',
|
|
304
|
+
timestamp: new Date(),
|
|
305
|
+
data: null,
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
else if (event.type === 'cycle_completed') {
|
|
309
|
+
this.emit({
|
|
310
|
+
type: 'maintenance_completed',
|
|
311
|
+
timestamp: new Date(),
|
|
312
|
+
data: event.data,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
else if (event.type === 'issue_detected') {
|
|
316
|
+
this.emit({
|
|
317
|
+
type: 'maintenance_issue',
|
|
318
|
+
timestamp: new Date(),
|
|
319
|
+
data: event.data,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
// Forward dream events
|
|
324
|
+
this.dreamService.on((event) => {
|
|
325
|
+
if (event.type === 'dream_started') {
|
|
326
|
+
this.emit({
|
|
327
|
+
type: 'dream_started',
|
|
328
|
+
timestamp: new Date(),
|
|
329
|
+
data: event.session,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
else if (event.type === 'phase_changed') {
|
|
333
|
+
this.emit({
|
|
334
|
+
type: 'dream_phase_changed',
|
|
335
|
+
timestamp: new Date(),
|
|
336
|
+
data: event.data,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
else if (event.type === 'dream_completed') {
|
|
340
|
+
this.emit({
|
|
341
|
+
type: 'dream_completed',
|
|
342
|
+
timestamp: new Date(),
|
|
343
|
+
data: event.session?.results,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
else if (event.type === 'dream_interrupted') {
|
|
347
|
+
this.emit({
|
|
348
|
+
type: 'dream_interrupted',
|
|
349
|
+
timestamp: new Date(),
|
|
350
|
+
data: { reason: event.session?.interruptReason },
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
setupDefaultTasks() {
|
|
356
|
+
// Health check task
|
|
357
|
+
this.scheduler.schedule({
|
|
358
|
+
name: 'health-check',
|
|
359
|
+
description: 'Periodic agent health check',
|
|
360
|
+
schedule: { type: 'interval', intervalMs: this.config.maintenance.healthCheckIntervalMs },
|
|
361
|
+
priority: 'normal',
|
|
362
|
+
handler: async (ctx) => {
|
|
363
|
+
ctx.logger.debug('Running health check');
|
|
364
|
+
const issues = await this.maintenance.checkHealth();
|
|
365
|
+
return {
|
|
366
|
+
success: true,
|
|
367
|
+
duration: 0,
|
|
368
|
+
output: { issues: issues.length },
|
|
369
|
+
};
|
|
370
|
+
},
|
|
371
|
+
tags: ['system', 'health'],
|
|
372
|
+
});
|
|
373
|
+
// Memory cleanup task
|
|
374
|
+
if (this.deps.memory) {
|
|
375
|
+
this.scheduler.schedule({
|
|
376
|
+
name: 'memory-cleanup',
|
|
377
|
+
description: 'Periodic memory forgetting and cleanup',
|
|
378
|
+
schedule: { type: 'interval', intervalMs: this.config.maintenance.memoryCleanupIntervalMs },
|
|
379
|
+
priority: 'low',
|
|
380
|
+
handler: async (ctx) => {
|
|
381
|
+
ctx.logger.debug('Running memory cleanup');
|
|
382
|
+
const result = await this.maintenance.cleanupMemory();
|
|
383
|
+
return {
|
|
384
|
+
success: true,
|
|
385
|
+
duration: 0,
|
|
386
|
+
output: result,
|
|
387
|
+
};
|
|
388
|
+
},
|
|
389
|
+
tags: ['system', 'memory'],
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
buildMaintenanceContext() {
|
|
394
|
+
return {
|
|
395
|
+
checkAgentHealth: this.deps.kernel?.checkAgentHealth,
|
|
396
|
+
getMemoryStats: this.deps.memory
|
|
397
|
+
? () => {
|
|
398
|
+
const stats = this.deps.memory.getStats();
|
|
399
|
+
return {
|
|
400
|
+
total: stats.total,
|
|
401
|
+
byType: {
|
|
402
|
+
episodic: stats.episodic.total,
|
|
403
|
+
semantic: stats.semantic.total,
|
|
404
|
+
procedural: stats.procedural.total,
|
|
405
|
+
},
|
|
406
|
+
avgRetention: 0.5, // Would need to calculate from memories
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
: undefined,
|
|
410
|
+
runMemoryForgetting: this.deps.memory
|
|
411
|
+
? () => this.deps.memory.episodic.runForgetting()
|
|
412
|
+
: undefined,
|
|
413
|
+
runMemoryConsolidation: this.deps.memory
|
|
414
|
+
? async () => {
|
|
415
|
+
const result = await this.deps.memory.consolidation.sleep();
|
|
416
|
+
return { consolidated: result.consolidated };
|
|
417
|
+
}
|
|
418
|
+
: undefined,
|
|
419
|
+
checkInvariants: this.deps.kernel?.checkInvariants,
|
|
420
|
+
repairInvariant: this.deps.kernel?.repairInvariant,
|
|
421
|
+
getState: this.deps.kernel?.getState,
|
|
422
|
+
resetState: this.deps.kernel?.resetState,
|
|
423
|
+
log: (message, level) => this.log(message, level),
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
buildDreamContext() {
|
|
427
|
+
return {
|
|
428
|
+
getEpisodicMemories: this.deps.memory
|
|
429
|
+
? () => this.deps.memory.episodic.getAll()
|
|
430
|
+
: undefined,
|
|
431
|
+
getSemanticMemories: this.deps.memory
|
|
432
|
+
? () => this.deps.memory.semantic.getAll()
|
|
433
|
+
: undefined,
|
|
434
|
+
getProceduralMemories: this.deps.memory
|
|
435
|
+
? () => this.deps.memory.procedural.getAll()
|
|
436
|
+
: undefined,
|
|
437
|
+
consolidateMemory: this.deps.memory
|
|
438
|
+
? async (episodeId) => {
|
|
439
|
+
// This would need proper implementation
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
: undefined,
|
|
443
|
+
extractPattern: this.deps.memory
|
|
444
|
+
? async (episodeIds) => {
|
|
445
|
+
// This would need proper implementation
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
: undefined,
|
|
449
|
+
forgetMemory: this.deps.memory
|
|
450
|
+
? (memoryId) => {
|
|
451
|
+
// This would need proper implementation
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
: undefined,
|
|
455
|
+
getState: this.deps.kernel?.getState,
|
|
456
|
+
rechargeEnergy: this.deps.kernel?.rechargeEnergy,
|
|
457
|
+
checkInvariants: this.deps.kernel
|
|
458
|
+
? async () => {
|
|
459
|
+
const results = await this.deps.kernel.checkInvariants();
|
|
460
|
+
return results.every((r) => r.satisfied);
|
|
461
|
+
}
|
|
462
|
+
: undefined,
|
|
463
|
+
repairState: this.deps.kernel
|
|
464
|
+
? async () => {
|
|
465
|
+
// Count repairs
|
|
466
|
+
return 0;
|
|
467
|
+
}
|
|
468
|
+
: undefined,
|
|
469
|
+
log: (message, level) => this.log(message, level),
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
log(message, level = 'info') {
|
|
473
|
+
if (this.deps.log) {
|
|
474
|
+
this.deps.log(message, level);
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
const prefix = '[Daemon]';
|
|
478
|
+
const shouldLog = level === 'error' ||
|
|
479
|
+
level === 'warn' ||
|
|
480
|
+
(level === 'info' && this.config.logLevel !== 'error' && this.config.logLevel !== 'warn') ||
|
|
481
|
+
(level === 'debug' && this.config.logLevel === 'debug');
|
|
482
|
+
if (shouldLog) {
|
|
483
|
+
switch (level) {
|
|
484
|
+
case 'debug':
|
|
485
|
+
console.log(`${prefix} DEBUG: ${message}`);
|
|
486
|
+
break;
|
|
487
|
+
case 'info':
|
|
488
|
+
console.log(`${prefix} ${message}`);
|
|
489
|
+
break;
|
|
490
|
+
case 'warn':
|
|
491
|
+
console.warn(`${prefix} ${message}`);
|
|
492
|
+
break;
|
|
493
|
+
case 'error':
|
|
494
|
+
console.error(`${prefix} ${message}`);
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
recordError(code, message, source) {
|
|
501
|
+
const error = {
|
|
502
|
+
timestamp: new Date(),
|
|
503
|
+
code,
|
|
504
|
+
message,
|
|
505
|
+
source,
|
|
506
|
+
recovered: false,
|
|
507
|
+
};
|
|
508
|
+
this.errors.push(error);
|
|
509
|
+
// Keep only last 100 errors
|
|
510
|
+
if (this.errors.length > 100) {
|
|
511
|
+
this.errors = this.errors.slice(-100);
|
|
512
|
+
}
|
|
513
|
+
this.emit({
|
|
514
|
+
type: 'daemon_error',
|
|
515
|
+
timestamp: new Date(),
|
|
516
|
+
data: error,
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
exports.Daemon = Daemon;
|
|
521
|
+
// ============================================================================
|
|
522
|
+
// Factory
|
|
523
|
+
// ============================================================================
|
|
524
|
+
function createDaemon(deps, config) {
|
|
525
|
+
return new Daemon(deps, config);
|
|
526
|
+
}
|
|
527
|
+
// ============================================================================
|
|
528
|
+
// Singleton Instance (optional)
|
|
529
|
+
// ============================================================================
|
|
530
|
+
let daemonInstance = null;
|
|
531
|
+
function getDaemon(deps, config) {
|
|
532
|
+
if (!daemonInstance) {
|
|
533
|
+
daemonInstance = createDaemon(deps, config);
|
|
534
|
+
}
|
|
535
|
+
return daemonInstance;
|
|
536
|
+
}
|
|
537
|
+
function resetDaemon() {
|
|
538
|
+
if (daemonInstance) {
|
|
539
|
+
daemonInstance.stop();
|
|
540
|
+
daemonInstance = null;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Genesis 6.0 - Maintenance Service
|
|
3
|
+
*
|
|
4
|
+
* Self-repair and health maintenance for the Genesis system.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Health monitoring (agent responsiveness)
|
|
8
|
+
* - Memory cleanup (weak memories, cache)
|
|
9
|
+
* - State repair (invariant violations)
|
|
10
|
+
* - Resource management
|
|
11
|
+
* - Automatic recovery
|
|
12
|
+
*
|
|
13
|
+
* Based on:
|
|
14
|
+
* - Kubernetes liveness/readiness probes
|
|
15
|
+
* - Self-healing systems patterns
|
|
16
|
+
* - Autonomic computing (IBM, 2001)
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { createMaintenanceService } from './daemon/maintenance.js';
|
|
21
|
+
*
|
|
22
|
+
* const maintenance = createMaintenanceService({
|
|
23
|
+
* autoRepair: true,
|
|
24
|
+
* intervalMs: 300000, // 5 minutes
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Run maintenance cycle
|
|
28
|
+
* const report = await maintenance.runCycle();
|
|
29
|
+
*
|
|
30
|
+
* // Check specific component
|
|
31
|
+
* const issues = await maintenance.checkHealth();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { MaintenanceConfig, MaintenanceTask, MaintenanceAction, MaintenanceReport, MaintenanceIssue } from './types.js';
|
|
35
|
+
export interface HealthCheckResult {
|
|
36
|
+
component: string;
|
|
37
|
+
healthy: boolean;
|
|
38
|
+
latency?: number;
|
|
39
|
+
details?: string;
|
|
40
|
+
lastCheck: Date;
|
|
41
|
+
}
|
|
42
|
+
export interface SystemHealth {
|
|
43
|
+
overall: 'healthy' | 'degraded' | 'unhealthy';
|
|
44
|
+
components: HealthCheckResult[];
|
|
45
|
+
timestamp: Date;
|
|
46
|
+
}
|
|
47
|
+
export interface MaintenanceContext {
|
|
48
|
+
checkAgentHealth?: () => Promise<Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
healthy: boolean;
|
|
51
|
+
latency?: number;
|
|
52
|
+
}>>;
|
|
53
|
+
getMemoryStats?: () => {
|
|
54
|
+
total: number;
|
|
55
|
+
byType: {
|
|
56
|
+
episodic: number;
|
|
57
|
+
semantic: number;
|
|
58
|
+
procedural: number;
|
|
59
|
+
};
|
|
60
|
+
avgRetention: number;
|
|
61
|
+
};
|
|
62
|
+
runMemoryForgetting?: () => {
|
|
63
|
+
forgotten: number;
|
|
64
|
+
};
|
|
65
|
+
runMemoryConsolidation?: () => Promise<{
|
|
66
|
+
consolidated: number;
|
|
67
|
+
}>;
|
|
68
|
+
checkInvariants?: () => Promise<Array<{
|
|
69
|
+
id: string;
|
|
70
|
+
satisfied: boolean;
|
|
71
|
+
message?: string;
|
|
72
|
+
}>>;
|
|
73
|
+
repairInvariant?: (id: string) => Promise<boolean>;
|
|
74
|
+
getState?: () => {
|
|
75
|
+
state: string;
|
|
76
|
+
energy: number;
|
|
77
|
+
};
|
|
78
|
+
resetState?: () => void;
|
|
79
|
+
log?: (message: string, level?: 'debug' | 'info' | 'warn' | 'error') => void;
|
|
80
|
+
}
|
|
81
|
+
export type MaintenanceEventType = 'cycle_started' | 'cycle_completed' | 'issue_detected' | 'issue_resolved' | 'action_started' | 'action_completed' | 'action_failed';
|
|
82
|
+
export type MaintenanceEventHandler = (event: {
|
|
83
|
+
type: MaintenanceEventType;
|
|
84
|
+
data?: unknown;
|
|
85
|
+
}) => void;
|
|
86
|
+
export declare class MaintenanceService {
|
|
87
|
+
private config;
|
|
88
|
+
private context;
|
|
89
|
+
private tasks;
|
|
90
|
+
private issues;
|
|
91
|
+
private cycleTimer;
|
|
92
|
+
private running;
|
|
93
|
+
private eventHandlers;
|
|
94
|
+
private cyclesRun;
|
|
95
|
+
private issuesDetected;
|
|
96
|
+
private issuesResolved;
|
|
97
|
+
private lastCycleAt;
|
|
98
|
+
constructor(config?: Partial<MaintenanceConfig>, context?: MaintenanceContext);
|
|
99
|
+
start(): void;
|
|
100
|
+
stop(): void;
|
|
101
|
+
isRunning(): boolean;
|
|
102
|
+
setContext(context: Partial<MaintenanceContext>): void;
|
|
103
|
+
runCycle(): Promise<MaintenanceReport>;
|
|
104
|
+
checkHealth(): Promise<MaintenanceIssue[]>;
|
|
105
|
+
checkMemory(): Promise<MaintenanceIssue[]>;
|
|
106
|
+
checkInvariants(): Promise<MaintenanceIssue[]>;
|
|
107
|
+
checkResources(): Promise<MaintenanceIssue[]>;
|
|
108
|
+
autoRepair(issues: MaintenanceIssue[]): Promise<MaintenanceTask[]>;
|
|
109
|
+
private getRepairAction;
|
|
110
|
+
private createTask;
|
|
111
|
+
private getActionPriority;
|
|
112
|
+
private executeRepair;
|
|
113
|
+
runAction(action: MaintenanceAction, target?: string): Promise<MaintenanceTask>;
|
|
114
|
+
cleanupMemory(): Promise<{
|
|
115
|
+
forgotten: number;
|
|
116
|
+
consolidated: number;
|
|
117
|
+
}>;
|
|
118
|
+
getIssues(options?: {
|
|
119
|
+
severity?: 'critical' | 'warning' | 'info';
|
|
120
|
+
resolved?: boolean;
|
|
121
|
+
limit?: number;
|
|
122
|
+
}): MaintenanceIssue[];
|
|
123
|
+
getOpenIssues(): MaintenanceIssue[];
|
|
124
|
+
getTasks(): MaintenanceTask[];
|
|
125
|
+
stats(): {
|
|
126
|
+
cyclesRun: number;
|
|
127
|
+
issuesDetected: number;
|
|
128
|
+
issuesResolved: number;
|
|
129
|
+
openIssues: number;
|
|
130
|
+
lastCycleAt: Date | null;
|
|
131
|
+
tasksTotal: number;
|
|
132
|
+
tasksSucceeded: number;
|
|
133
|
+
tasksFailed: number;
|
|
134
|
+
};
|
|
135
|
+
on(handler: MaintenanceEventHandler): () => void;
|
|
136
|
+
private emit;
|
|
137
|
+
private log;
|
|
138
|
+
}
|
|
139
|
+
export declare function createMaintenanceService(config?: Partial<MaintenanceConfig>, context?: MaintenanceContext): MaintenanceService;
|