genesis-ai-cli 7.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.env.example +78 -0
  2. package/README.md +282 -0
  3. package/dist/src/active-inference/actions.d.ts +75 -0
  4. package/dist/src/active-inference/actions.js +250 -0
  5. package/dist/src/active-inference/autonomous-loop.d.ts +103 -0
  6. package/dist/src/active-inference/autonomous-loop.js +289 -0
  7. package/dist/src/active-inference/core.d.ts +85 -0
  8. package/dist/src/active-inference/core.js +555 -0
  9. package/dist/src/active-inference/demo-autonomous-loop.d.ts +8 -0
  10. package/dist/src/active-inference/demo-autonomous-loop.js +338 -0
  11. package/dist/src/active-inference/demo-value-integration.d.ts +8 -0
  12. package/dist/src/active-inference/demo-value-integration.js +174 -0
  13. package/dist/src/active-inference/index.d.ts +32 -0
  14. package/dist/src/active-inference/index.js +88 -0
  15. package/dist/src/active-inference/integration.d.ts +114 -0
  16. package/dist/src/active-inference/integration.js +698 -0
  17. package/dist/src/active-inference/memory-integration.d.ts +51 -0
  18. package/dist/src/active-inference/memory-integration.js +232 -0
  19. package/dist/src/active-inference/observations.d.ts +67 -0
  20. package/dist/src/active-inference/observations.js +147 -0
  21. package/dist/src/active-inference/test-active-inference.d.ts +8 -0
  22. package/dist/src/active-inference/test-active-inference.js +320 -0
  23. package/dist/src/active-inference/test-value-integration.d.ts +6 -0
  24. package/dist/src/active-inference/test-value-integration.js +168 -0
  25. package/dist/src/active-inference/types.d.ts +150 -0
  26. package/dist/src/active-inference/types.js +59 -0
  27. package/dist/src/active-inference/value-integration.d.ts +164 -0
  28. package/dist/src/active-inference/value-integration.js +459 -0
  29. package/dist/src/agents/base-agent.d.ts +53 -0
  30. package/dist/src/agents/base-agent.js +178 -0
  31. package/dist/src/agents/builder.d.ts +67 -0
  32. package/dist/src/agents/builder.js +537 -0
  33. package/dist/src/agents/critic.d.ts +35 -0
  34. package/dist/src/agents/critic.js +322 -0
  35. package/dist/src/agents/ethicist.d.ts +54 -0
  36. package/dist/src/agents/ethicist.js +393 -0
  37. package/dist/src/agents/explorer.d.ts +26 -0
  38. package/dist/src/agents/explorer.js +216 -0
  39. package/dist/src/agents/feeling.d.ts +41 -0
  40. package/dist/src/agents/feeling.js +320 -0
  41. package/dist/src/agents/index.d.ts +111 -0
  42. package/dist/src/agents/index.js +222 -0
  43. package/dist/src/agents/memory.d.ts +69 -0
  44. package/dist/src/agents/memory.js +404 -0
  45. package/dist/src/agents/message-bus.d.ts +88 -0
  46. package/dist/src/agents/message-bus.js +267 -0
  47. package/dist/src/agents/narrator.d.ts +90 -0
  48. package/dist/src/agents/narrator.js +473 -0
  49. package/dist/src/agents/planner.d.ts +38 -0
  50. package/dist/src/agents/planner.js +341 -0
  51. package/dist/src/agents/predictor.d.ts +73 -0
  52. package/dist/src/agents/predictor.js +506 -0
  53. package/dist/src/agents/sensor.d.ts +88 -0
  54. package/dist/src/agents/sensor.js +377 -0
  55. package/dist/src/agents/test-agents.d.ts +6 -0
  56. package/dist/src/agents/test-agents.js +73 -0
  57. package/dist/src/agents/types.d.ts +194 -0
  58. package/dist/src/agents/types.js +7 -0
  59. package/dist/src/brain/index.d.ts +185 -0
  60. package/dist/src/brain/index.js +843 -0
  61. package/dist/src/brain/trace.d.ts +91 -0
  62. package/dist/src/brain/trace.js +327 -0
  63. package/dist/src/brain/types.d.ts +165 -0
  64. package/dist/src/brain/types.js +51 -0
  65. package/dist/src/cli/chat.d.ts +237 -0
  66. package/dist/src/cli/chat.js +1959 -0
  67. package/dist/src/cli/dispatcher.d.ts +182 -0
  68. package/dist/src/cli/dispatcher.js +718 -0
  69. package/dist/src/cli/human-loop.d.ts +170 -0
  70. package/dist/src/cli/human-loop.js +543 -0
  71. package/dist/src/cli/index.d.ts +12 -0
  72. package/dist/src/cli/index.js +28 -0
  73. package/dist/src/cli/interactive.d.ts +141 -0
  74. package/dist/src/cli/interactive.js +757 -0
  75. package/dist/src/cli/ui.d.ts +205 -0
  76. package/dist/src/cli/ui.js +632 -0
  77. package/dist/src/consciousness/attention-schema.d.ts +154 -0
  78. package/dist/src/consciousness/attention-schema.js +432 -0
  79. package/dist/src/consciousness/global-workspace.d.ts +149 -0
  80. package/dist/src/consciousness/global-workspace.js +422 -0
  81. package/dist/src/consciousness/index.d.ts +186 -0
  82. package/dist/src/consciousness/index.js +476 -0
  83. package/dist/src/consciousness/phi-calculator.d.ts +119 -0
  84. package/dist/src/consciousness/phi-calculator.js +445 -0
  85. package/dist/src/consciousness/phi-decisions.d.ts +169 -0
  86. package/dist/src/consciousness/phi-decisions.js +383 -0
  87. package/dist/src/consciousness/phi-monitor.d.ts +153 -0
  88. package/dist/src/consciousness/phi-monitor.js +465 -0
  89. package/dist/src/consciousness/types.d.ts +260 -0
  90. package/dist/src/consciousness/types.js +44 -0
  91. package/dist/src/daemon/dream-mode.d.ts +115 -0
  92. package/dist/src/daemon/dream-mode.js +470 -0
  93. package/dist/src/daemon/index.d.ts +162 -0
  94. package/dist/src/daemon/index.js +542 -0
  95. package/dist/src/daemon/maintenance.d.ts +139 -0
  96. package/dist/src/daemon/maintenance.js +549 -0
  97. package/dist/src/daemon/process.d.ts +82 -0
  98. package/dist/src/daemon/process.js +442 -0
  99. package/dist/src/daemon/scheduler.d.ts +90 -0
  100. package/dist/src/daemon/scheduler.js +494 -0
  101. package/dist/src/daemon/types.d.ts +213 -0
  102. package/dist/src/daemon/types.js +50 -0
  103. package/dist/src/epistemic/index.d.ts +74 -0
  104. package/dist/src/epistemic/index.js +225 -0
  105. package/dist/src/grounding/epistemic-stack.d.ts +100 -0
  106. package/dist/src/grounding/epistemic-stack.js +408 -0
  107. package/dist/src/grounding/feedback.d.ts +98 -0
  108. package/dist/src/grounding/feedback.js +276 -0
  109. package/dist/src/grounding/index.d.ts +123 -0
  110. package/dist/src/grounding/index.js +224 -0
  111. package/dist/src/grounding/verifier.d.ts +149 -0
  112. package/dist/src/grounding/verifier.js +484 -0
  113. package/dist/src/healing/detector.d.ts +110 -0
  114. package/dist/src/healing/detector.js +436 -0
  115. package/dist/src/healing/fixer.d.ts +138 -0
  116. package/dist/src/healing/fixer.js +572 -0
  117. package/dist/src/healing/index.d.ts +23 -0
  118. package/dist/src/healing/index.js +43 -0
  119. package/dist/src/hooks/index.d.ts +135 -0
  120. package/dist/src/hooks/index.js +317 -0
  121. package/dist/src/index.d.ts +23 -0
  122. package/dist/src/index.js +1266 -0
  123. package/dist/src/kernel/index.d.ts +155 -0
  124. package/dist/src/kernel/index.js +795 -0
  125. package/dist/src/kernel/invariants.d.ts +153 -0
  126. package/dist/src/kernel/invariants.js +355 -0
  127. package/dist/src/kernel/test-kernel.d.ts +6 -0
  128. package/dist/src/kernel/test-kernel.js +108 -0
  129. package/dist/src/kernel/test-real-mcp.d.ts +10 -0
  130. package/dist/src/kernel/test-real-mcp.js +295 -0
  131. package/dist/src/llm/index.d.ts +146 -0
  132. package/dist/src/llm/index.js +428 -0
  133. package/dist/src/llm/router.d.ts +136 -0
  134. package/dist/src/llm/router.js +510 -0
  135. package/dist/src/mcp/index.d.ts +85 -0
  136. package/dist/src/mcp/index.js +657 -0
  137. package/dist/src/mcp/resilient.d.ts +139 -0
  138. package/dist/src/mcp/resilient.js +417 -0
  139. package/dist/src/memory/cache.d.ts +118 -0
  140. package/dist/src/memory/cache.js +356 -0
  141. package/dist/src/memory/cognitive-workspace.d.ts +231 -0
  142. package/dist/src/memory/cognitive-workspace.js +521 -0
  143. package/dist/src/memory/consolidation.d.ts +99 -0
  144. package/dist/src/memory/consolidation.js +443 -0
  145. package/dist/src/memory/episodic.d.ts +114 -0
  146. package/dist/src/memory/episodic.js +394 -0
  147. package/dist/src/memory/forgetting.d.ts +134 -0
  148. package/dist/src/memory/forgetting.js +324 -0
  149. package/dist/src/memory/index.d.ts +211 -0
  150. package/dist/src/memory/index.js +367 -0
  151. package/dist/src/memory/indexer.d.ts +123 -0
  152. package/dist/src/memory/indexer.js +479 -0
  153. package/dist/src/memory/procedural.d.ts +136 -0
  154. package/dist/src/memory/procedural.js +479 -0
  155. package/dist/src/memory/semantic.d.ts +132 -0
  156. package/dist/src/memory/semantic.js +497 -0
  157. package/dist/src/memory/types.d.ts +193 -0
  158. package/dist/src/memory/types.js +15 -0
  159. package/dist/src/orchestrator.d.ts +65 -0
  160. package/dist/src/orchestrator.js +317 -0
  161. package/dist/src/persistence/index.d.ts +257 -0
  162. package/dist/src/persistence/index.js +763 -0
  163. package/dist/src/pipeline/executor.d.ts +51 -0
  164. package/dist/src/pipeline/executor.js +695 -0
  165. package/dist/src/pipeline/index.d.ts +7 -0
  166. package/dist/src/pipeline/index.js +11 -0
  167. package/dist/src/self-production.d.ts +67 -0
  168. package/dist/src/self-production.js +205 -0
  169. package/dist/src/subagents/executor.d.ts +58 -0
  170. package/dist/src/subagents/executor.js +283 -0
  171. package/dist/src/subagents/index.d.ts +37 -0
  172. package/dist/src/subagents/index.js +53 -0
  173. package/dist/src/subagents/registry.d.ts +23 -0
  174. package/dist/src/subagents/registry.js +167 -0
  175. package/dist/src/subagents/types.d.ts +79 -0
  176. package/dist/src/subagents/types.js +14 -0
  177. package/dist/src/tools/bash.d.ts +139 -0
  178. package/dist/src/tools/bash.js +583 -0
  179. package/dist/src/tools/edit.d.ts +125 -0
  180. package/dist/src/tools/edit.js +424 -0
  181. package/dist/src/tools/git.d.ts +179 -0
  182. package/dist/src/tools/git.js +504 -0
  183. package/dist/src/tools/index.d.ts +21 -0
  184. package/dist/src/tools/index.js +163 -0
  185. package/dist/src/types.d.ts +145 -0
  186. package/dist/src/types.js +7 -0
  187. package/dist/src/world-model/decoder.d.ts +163 -0
  188. package/dist/src/world-model/decoder.js +517 -0
  189. package/dist/src/world-model/digital-twin.d.ts +219 -0
  190. package/dist/src/world-model/digital-twin.js +695 -0
  191. package/dist/src/world-model/encoder.d.ts +141 -0
  192. package/dist/src/world-model/encoder.js +564 -0
  193. package/dist/src/world-model/index.d.ts +221 -0
  194. package/dist/src/world-model/index.js +772 -0
  195. package/dist/src/world-model/predictor.d.ts +161 -0
  196. package/dist/src/world-model/predictor.js +681 -0
  197. package/dist/src/world-model/test-value-jepa.d.ts +8 -0
  198. package/dist/src/world-model/test-value-jepa.js +430 -0
  199. package/dist/src/world-model/types.d.ts +341 -0
  200. package/dist/src/world-model/types.js +69 -0
  201. package/dist/src/world-model/value-jepa.d.ts +247 -0
  202. package/dist/src/world-model/value-jepa.js +622 -0
  203. package/dist/test/brain.test.d.ts +11 -0
  204. package/dist/test/brain.test.js +358 -0
  205. package/dist/test/cli/dispatcher.test.d.ts +4 -0
  206. package/dist/test/cli/dispatcher.test.js +332 -0
  207. package/dist/test/cli/human-loop.test.d.ts +4 -0
  208. package/dist/test/cli/human-loop.test.js +270 -0
  209. package/dist/test/grounding/feedback.test.d.ts +4 -0
  210. package/dist/test/grounding/feedback.test.js +462 -0
  211. package/dist/test/grounding/verifier.test.d.ts +4 -0
  212. package/dist/test/grounding/verifier.test.js +442 -0
  213. package/dist/test/grounding.test.d.ts +6 -0
  214. package/dist/test/grounding.test.js +246 -0
  215. package/dist/test/healing/detector.test.d.ts +4 -0
  216. package/dist/test/healing/detector.test.js +266 -0
  217. package/dist/test/healing/fixer.test.d.ts +4 -0
  218. package/dist/test/healing/fixer.test.js +369 -0
  219. package/dist/test/integration.test.d.ts +5 -0
  220. package/dist/test/integration.test.js +290 -0
  221. package/dist/test/tools/bash.test.d.ts +4 -0
  222. package/dist/test/tools/bash.test.js +348 -0
  223. package/dist/test/tools/edit.test.d.ts +4 -0
  224. package/dist/test/tools/edit.test.js +350 -0
  225. package/dist/test/tools/git.test.d.ts +4 -0
  226. package/dist/test/tools/git.test.js +350 -0
  227. package/package.json +60 -0
@@ -0,0 +1,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 {};