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,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Genesis 4.0 - Planner Agent
|
|
4
|
+
*
|
|
5
|
+
* Decomposes goals into steps, creates plans, manages dependencies.
|
|
6
|
+
* The organizer: "First A, then B, then C"
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PlannerAgent = void 0;
|
|
10
|
+
exports.createPlannerAgent = createPlannerAgent;
|
|
11
|
+
const base_agent_js_1 = require("./base-agent.js");
|
|
12
|
+
const message_bus_js_1 = require("./message-bus.js");
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Planner Agent
|
|
16
|
+
// ============================================================================
|
|
17
|
+
class PlannerAgent extends base_agent_js_1.BaseAgent {
|
|
18
|
+
// Active plans
|
|
19
|
+
plans = new Map();
|
|
20
|
+
// Plan templates
|
|
21
|
+
templates = new Map();
|
|
22
|
+
constructor(bus = message_bus_js_1.messageBus) {
|
|
23
|
+
super({ type: 'planner' }, bus);
|
|
24
|
+
this.initializeTemplates();
|
|
25
|
+
}
|
|
26
|
+
initializeTemplates() {
|
|
27
|
+
// Research template
|
|
28
|
+
this.templates.set('research', {
|
|
29
|
+
steps: [
|
|
30
|
+
{ id: 'search', description: 'Search for information', agent: 'explorer', dependencies: [], status: 'pending' },
|
|
31
|
+
{ id: 'evaluate', description: 'Evaluate findings', agent: 'feeling', dependencies: ['search'], status: 'pending' },
|
|
32
|
+
{ id: 'critique', description: 'Critique findings', agent: 'critic', dependencies: ['search'], status: 'pending' },
|
|
33
|
+
{ id: 'store', description: 'Store important findings', agent: 'memory', dependencies: ['evaluate', 'critique'], status: 'pending' },
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
// Build template
|
|
37
|
+
this.templates.set('build', {
|
|
38
|
+
steps: [
|
|
39
|
+
{ id: 'plan', description: 'Create build plan', agent: 'planner', dependencies: [], status: 'pending' },
|
|
40
|
+
{ id: 'ethics', description: 'Check ethical implications', agent: 'ethicist', dependencies: ['plan'], status: 'pending' },
|
|
41
|
+
{ id: 'build', description: 'Build artifact', agent: 'builder', dependencies: ['ethics'], status: 'pending' },
|
|
42
|
+
{ id: 'review', description: 'Review artifact', agent: 'critic', dependencies: ['build'], status: 'pending' },
|
|
43
|
+
{ id: 'store', description: 'Store artifact', agent: 'memory', dependencies: ['review'], status: 'pending' },
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
// Full pipeline template
|
|
47
|
+
this.templates.set('pipeline', {
|
|
48
|
+
steps: [
|
|
49
|
+
{ id: 'research', description: 'Research topic', agent: 'explorer', dependencies: [], status: 'pending' },
|
|
50
|
+
{ id: 'evaluate', description: 'Evaluate importance', agent: 'feeling', dependencies: ['research'], status: 'pending' },
|
|
51
|
+
{ id: 'design', description: 'Design solution', agent: 'planner', dependencies: ['research', 'evaluate'], status: 'pending' },
|
|
52
|
+
{ id: 'ethics', description: 'Ethics check', agent: 'ethicist', dependencies: ['design'], status: 'pending' },
|
|
53
|
+
{ id: 'build', description: 'Build solution', agent: 'builder', dependencies: ['ethics'], status: 'pending' },
|
|
54
|
+
{ id: 'critique', description: 'Critique solution', agent: 'critic', dependencies: ['build'], status: 'pending' },
|
|
55
|
+
{ id: 'iterate', description: 'Iterate if needed', agent: 'builder', dependencies: ['critique'], status: 'pending' },
|
|
56
|
+
{ id: 'store', description: 'Store result', agent: 'memory', dependencies: ['iterate'], status: 'pending' },
|
|
57
|
+
{ id: 'narrate', description: 'Narrate story', agent: 'narrator', dependencies: ['store'], status: 'pending' },
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Message Handling
|
|
63
|
+
// ============================================================================
|
|
64
|
+
getMessageTypes() {
|
|
65
|
+
return ['PLAN', 'QUERY', 'COMMAND'];
|
|
66
|
+
}
|
|
67
|
+
async process(message) {
|
|
68
|
+
switch (message.type) {
|
|
69
|
+
case 'PLAN':
|
|
70
|
+
return this.handlePlanRequest(message);
|
|
71
|
+
case 'QUERY':
|
|
72
|
+
return this.handleQuery(message);
|
|
73
|
+
case 'COMMAND':
|
|
74
|
+
return this.handleCommand(message);
|
|
75
|
+
default:
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Planning Logic
|
|
81
|
+
// ============================================================================
|
|
82
|
+
async handlePlanRequest(message) {
|
|
83
|
+
const { goal, template, constraints } = message.payload;
|
|
84
|
+
const plan = this.createPlan(goal, template, constraints);
|
|
85
|
+
this.plans.set(plan.id, plan);
|
|
86
|
+
this.log(`Created plan "${plan.id.slice(0, 8)}" for goal: "${goal}" (${plan.steps.length} steps)`);
|
|
87
|
+
return {
|
|
88
|
+
...this.createResponse(message, 'RESPONSE', { plan }),
|
|
89
|
+
id: '',
|
|
90
|
+
timestamp: new Date(),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
createPlan(goal, templateName, constraints) {
|
|
94
|
+
const plan = {
|
|
95
|
+
id: (0, crypto_1.randomUUID)(),
|
|
96
|
+
goal,
|
|
97
|
+
steps: [],
|
|
98
|
+
status: 'pending',
|
|
99
|
+
createdAt: new Date(),
|
|
100
|
+
};
|
|
101
|
+
// Use template if specified
|
|
102
|
+
if (templateName && this.templates.has(templateName)) {
|
|
103
|
+
const template = this.templates.get(templateName);
|
|
104
|
+
plan.steps = JSON.parse(JSON.stringify(template.steps || []));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Generate plan from goal
|
|
108
|
+
plan.steps = this.generateStepsFromGoal(goal);
|
|
109
|
+
}
|
|
110
|
+
// Apply constraints
|
|
111
|
+
if (constraints) {
|
|
112
|
+
this.applyConstraints(plan, constraints);
|
|
113
|
+
}
|
|
114
|
+
// Calculate estimated duration
|
|
115
|
+
plan.estimatedDuration = this.estimateDuration(plan);
|
|
116
|
+
return plan;
|
|
117
|
+
}
|
|
118
|
+
generateStepsFromGoal(goal) {
|
|
119
|
+
const goalLower = goal.toLowerCase();
|
|
120
|
+
const steps = [];
|
|
121
|
+
// Analyze goal to determine steps
|
|
122
|
+
if (goalLower.includes('research') || goalLower.includes('find') || goalLower.includes('search')) {
|
|
123
|
+
steps.push(this.createStep('search', 'Search for information', 'explorer', []));
|
|
124
|
+
steps.push(this.createStep('evaluate', 'Evaluate findings', 'feeling', ['search']));
|
|
125
|
+
steps.push(this.createStep('store', 'Store findings', 'memory', ['evaluate']));
|
|
126
|
+
}
|
|
127
|
+
if (goalLower.includes('build') || goalLower.includes('create') || goalLower.includes('implement')) {
|
|
128
|
+
const lastStep = steps.length > 0 ? steps[steps.length - 1].id : null;
|
|
129
|
+
const deps = lastStep ? [lastStep] : [];
|
|
130
|
+
steps.push(this.createStep('ethics', 'Check ethics', 'ethicist', deps));
|
|
131
|
+
steps.push(this.createStep('build', 'Build artifact', 'builder', ['ethics']));
|
|
132
|
+
steps.push(this.createStep('review', 'Review artifact', 'critic', ['build']));
|
|
133
|
+
}
|
|
134
|
+
if (goalLower.includes('analyze') || goalLower.includes('critique') || goalLower.includes('review')) {
|
|
135
|
+
const lastStep = steps.length > 0 ? steps[steps.length - 1].id : null;
|
|
136
|
+
const deps = lastStep ? [lastStep] : [];
|
|
137
|
+
steps.push(this.createStep('analyze', 'Analyze target', 'critic', deps));
|
|
138
|
+
steps.push(this.createStep('evaluate', 'Evaluate importance', 'feeling', ['analyze']));
|
|
139
|
+
}
|
|
140
|
+
// Default: at least explore and store
|
|
141
|
+
if (steps.length === 0) {
|
|
142
|
+
steps.push(this.createStep('explore', 'Explore goal', 'explorer', []));
|
|
143
|
+
steps.push(this.createStep('evaluate', 'Evaluate', 'feeling', ['explore']));
|
|
144
|
+
steps.push(this.createStep('store', 'Store results', 'memory', ['evaluate']));
|
|
145
|
+
}
|
|
146
|
+
return steps;
|
|
147
|
+
}
|
|
148
|
+
createStep(id, description, agent, dependencies) {
|
|
149
|
+
return {
|
|
150
|
+
id: `${id}-${(0, crypto_1.randomUUID)().slice(0, 4)}`,
|
|
151
|
+
description,
|
|
152
|
+
agent,
|
|
153
|
+
dependencies,
|
|
154
|
+
status: 'pending',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
applyConstraints(plan, constraints) {
|
|
158
|
+
for (const constraint of constraints) {
|
|
159
|
+
const constraintLower = constraint.toLowerCase();
|
|
160
|
+
// Skip certain agents
|
|
161
|
+
if (constraintLower.includes('no ethics')) {
|
|
162
|
+
plan.steps = plan.steps.filter((s) => s.agent !== 'ethicist');
|
|
163
|
+
}
|
|
164
|
+
// Require certain agents
|
|
165
|
+
if (constraintLower.includes('must review')) {
|
|
166
|
+
if (!plan.steps.some((s) => s.agent === 'critic')) {
|
|
167
|
+
const lastStep = plan.steps[plan.steps.length - 1];
|
|
168
|
+
plan.steps.push(this.createStep('review', 'Review', 'critic', [lastStep.id]));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Revalidate dependencies after modifications
|
|
173
|
+
this.validateDependencies(plan);
|
|
174
|
+
}
|
|
175
|
+
validateDependencies(plan) {
|
|
176
|
+
const stepIds = new Set(plan.steps.map((s) => s.id));
|
|
177
|
+
for (const step of plan.steps) {
|
|
178
|
+
// Remove invalid dependencies
|
|
179
|
+
step.dependencies = step.dependencies.filter((d) => stepIds.has(d));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
estimateDuration(plan) {
|
|
183
|
+
// Simple estimation: 1 minute per step (would be more sophisticated in production)
|
|
184
|
+
return plan.steps.length * 60 * 1000;
|
|
185
|
+
}
|
|
186
|
+
// ============================================================================
|
|
187
|
+
// Plan Execution
|
|
188
|
+
// ============================================================================
|
|
189
|
+
async executePlan(planId) {
|
|
190
|
+
const plan = this.plans.get(planId);
|
|
191
|
+
if (!plan) {
|
|
192
|
+
throw new Error(`Plan not found: ${planId}`);
|
|
193
|
+
}
|
|
194
|
+
plan.status = 'in_progress';
|
|
195
|
+
// Execute steps in dependency order
|
|
196
|
+
const executed = new Set();
|
|
197
|
+
while (executed.size < plan.steps.length) {
|
|
198
|
+
// Find steps that can be executed
|
|
199
|
+
const ready = plan.steps.filter((step) => {
|
|
200
|
+
if (step.status !== 'pending')
|
|
201
|
+
return false;
|
|
202
|
+
return step.dependencies.every((d) => executed.has(d));
|
|
203
|
+
});
|
|
204
|
+
if (ready.length === 0) {
|
|
205
|
+
// No ready steps but not all executed = deadlock or failure
|
|
206
|
+
plan.status = 'failed';
|
|
207
|
+
this.log(`Plan ${planId.slice(0, 8)} failed: no executable steps`);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
// Execute ready steps (can be parallel)
|
|
211
|
+
for (const step of ready) {
|
|
212
|
+
step.status = 'in_progress';
|
|
213
|
+
try {
|
|
214
|
+
// Send task to appropriate agent
|
|
215
|
+
const result = await this.bus.request(this.id, step.agent, 'COMMAND', {
|
|
216
|
+
command: 'execute_step',
|
|
217
|
+
step: step.description,
|
|
218
|
+
planId,
|
|
219
|
+
stepId: step.id,
|
|
220
|
+
}, this.timeout);
|
|
221
|
+
step.result = result.payload;
|
|
222
|
+
step.status = 'completed';
|
|
223
|
+
executed.add(step.id);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
step.status = 'failed';
|
|
227
|
+
this.log(`Step ${step.id} failed: ${error}`);
|
|
228
|
+
// Could implement retry logic here
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
plan.status = 'completed';
|
|
233
|
+
this.log(`Plan ${planId.slice(0, 8)} completed`);
|
|
234
|
+
// Broadcast completion
|
|
235
|
+
await this.broadcast('PLAN', {
|
|
236
|
+
event: 'plan_completed',
|
|
237
|
+
planId,
|
|
238
|
+
goal: plan.goal,
|
|
239
|
+
steps: plan.steps.length,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// ============================================================================
|
|
243
|
+
// Query
|
|
244
|
+
// ============================================================================
|
|
245
|
+
async handleQuery(message) {
|
|
246
|
+
const { query, planId } = message.payload;
|
|
247
|
+
if (query === 'plan' && planId) {
|
|
248
|
+
const plan = this.plans.get(planId);
|
|
249
|
+
return {
|
|
250
|
+
...this.createResponse(message, 'RESPONSE', { plan }),
|
|
251
|
+
id: '',
|
|
252
|
+
timestamp: new Date(),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (query === 'templates') {
|
|
256
|
+
return {
|
|
257
|
+
...this.createResponse(message, 'RESPONSE', {
|
|
258
|
+
templates: Array.from(this.templates.keys()),
|
|
259
|
+
}),
|
|
260
|
+
id: '',
|
|
261
|
+
timestamp: new Date(),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (query === 'active') {
|
|
265
|
+
const active = Array.from(this.plans.values()).filter((p) => p.status === 'pending' || p.status === 'in_progress');
|
|
266
|
+
return {
|
|
267
|
+
...this.createResponse(message, 'RESPONSE', { plans: active }),
|
|
268
|
+
id: '',
|
|
269
|
+
timestamp: new Date(),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (query === 'stats') {
|
|
273
|
+
return {
|
|
274
|
+
...this.createResponse(message, 'RESPONSE', this.getStats()),
|
|
275
|
+
id: '',
|
|
276
|
+
timestamp: new Date(),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
// ============================================================================
|
|
282
|
+
// Commands
|
|
283
|
+
// ============================================================================
|
|
284
|
+
async handleCommand(message) {
|
|
285
|
+
const { command, params } = message.payload;
|
|
286
|
+
switch (command) {
|
|
287
|
+
case 'execute':
|
|
288
|
+
await this.executePlan(params.planId);
|
|
289
|
+
return {
|
|
290
|
+
...this.createResponse(message, 'RESPONSE', { success: true }),
|
|
291
|
+
id: '',
|
|
292
|
+
timestamp: new Date(),
|
|
293
|
+
};
|
|
294
|
+
case 'cancel':
|
|
295
|
+
const plan = this.plans.get(params.planId);
|
|
296
|
+
if (plan) {
|
|
297
|
+
plan.status = 'failed';
|
|
298
|
+
plan.steps.forEach((s) => {
|
|
299
|
+
if (s.status === 'pending' || s.status === 'in_progress') {
|
|
300
|
+
s.status = 'skipped';
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
...this.createResponse(message, 'RESPONSE', { success: true }),
|
|
306
|
+
id: '',
|
|
307
|
+
timestamp: new Date(),
|
|
308
|
+
};
|
|
309
|
+
default:
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
getStats() {
|
|
314
|
+
const plans = Array.from(this.plans.values());
|
|
315
|
+
return {
|
|
316
|
+
totalPlans: plans.length,
|
|
317
|
+
completed: plans.filter((p) => p.status === 'completed').length,
|
|
318
|
+
failed: plans.filter((p) => p.status === 'failed').length,
|
|
319
|
+
inProgress: plans.filter((p) => p.status === 'in_progress').length,
|
|
320
|
+
pending: plans.filter((p) => p.status === 'pending').length,
|
|
321
|
+
templates: this.templates.size,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// ============================================================================
|
|
325
|
+
// Public Methods
|
|
326
|
+
// ============================================================================
|
|
327
|
+
getPlan(planId) {
|
|
328
|
+
return this.plans.get(planId);
|
|
329
|
+
}
|
|
330
|
+
addTemplate(name, template) {
|
|
331
|
+
this.templates.set(name, template);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.PlannerAgent = PlannerAgent;
|
|
335
|
+
// ============================================================================
|
|
336
|
+
// Register Factory
|
|
337
|
+
// ============================================================================
|
|
338
|
+
(0, base_agent_js_1.registerAgentFactory)('planner', (bus) => new PlannerAgent(bus));
|
|
339
|
+
function createPlannerAgent(bus) {
|
|
340
|
+
return new PlannerAgent(bus);
|
|
341
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Genesis 4.0 - Predictor Agent
|
|
3
|
+
*
|
|
4
|
+
* Forecasts outcomes based on patterns, history, and models.
|
|
5
|
+
* The oracle: "Based on patterns, I predict..."
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Pattern-based prediction
|
|
9
|
+
* - Confidence estimation
|
|
10
|
+
* - Historical pattern matching
|
|
11
|
+
* - Monte Carlo simulation (simple)
|
|
12
|
+
* - Learning from outcomes
|
|
13
|
+
*/
|
|
14
|
+
import { BaseAgent } from './base-agent.js';
|
|
15
|
+
import { MessageBus } from './message-bus.js';
|
|
16
|
+
import { Message, MessageType } from './types.js';
|
|
17
|
+
interface Prediction {
|
|
18
|
+
id: string;
|
|
19
|
+
query: string;
|
|
20
|
+
outcomes: PredictedOutcome[];
|
|
21
|
+
confidence: number;
|
|
22
|
+
reasoning: string;
|
|
23
|
+
timestamp: Date;
|
|
24
|
+
horizon: string;
|
|
25
|
+
verified?: boolean;
|
|
26
|
+
actualOutcome?: string;
|
|
27
|
+
}
|
|
28
|
+
interface PredictedOutcome {
|
|
29
|
+
description: string;
|
|
30
|
+
probability: number;
|
|
31
|
+
impact: 'positive' | 'negative' | 'neutral';
|
|
32
|
+
timeframe?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class PredictorAgent extends BaseAgent {
|
|
35
|
+
private patterns;
|
|
36
|
+
private predictions;
|
|
37
|
+
private history;
|
|
38
|
+
private baselines;
|
|
39
|
+
constructor(bus?: MessageBus);
|
|
40
|
+
private initializePatterns;
|
|
41
|
+
protected getMessageTypes(): MessageType[];
|
|
42
|
+
process(message: Message): Promise<Message | null>;
|
|
43
|
+
private handlePredictRequest;
|
|
44
|
+
predict(query: string, options?: {
|
|
45
|
+
context?: Record<string, any>;
|
|
46
|
+
conditions?: string[];
|
|
47
|
+
horizon?: string;
|
|
48
|
+
}): Prediction;
|
|
49
|
+
private findMatchingPatterns;
|
|
50
|
+
private findHistoricalMatches;
|
|
51
|
+
private calculateOutcomes;
|
|
52
|
+
private humanizeOutcome;
|
|
53
|
+
private determineImpact;
|
|
54
|
+
private estimateTimeframe;
|
|
55
|
+
private calculateConfidence;
|
|
56
|
+
private generateReasoning;
|
|
57
|
+
private handleFeedback;
|
|
58
|
+
private learn;
|
|
59
|
+
private handleQuery;
|
|
60
|
+
private handleCommand;
|
|
61
|
+
getStats(): {
|
|
62
|
+
totalPredictions: number;
|
|
63
|
+
verifiedPredictions: number;
|
|
64
|
+
accuracy: number;
|
|
65
|
+
patterns: number;
|
|
66
|
+
historySize: number;
|
|
67
|
+
avgConfidence: number;
|
|
68
|
+
};
|
|
69
|
+
private calculateAccuracy;
|
|
70
|
+
private calculateAvgConfidence;
|
|
71
|
+
}
|
|
72
|
+
export declare function createPredictorAgent(bus?: MessageBus): PredictorAgent;
|
|
73
|
+
export {};
|