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,537 @@
1
+ "use strict";
2
+ /**
3
+ * Genesis 4.0 - Builder Agent
4
+ *
5
+ * Generates code, artifacts, and structures.
6
+ * The craftsman: "Let me build that for you"
7
+ *
8
+ * Features:
9
+ * - Code generation from specifications
10
+ * - Iteration based on Critic feedback
11
+ * - Template-based generation
12
+ * - Quality checks before output
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BuilderAgent = void 0;
16
+ exports.createBuilderAgent = createBuilderAgent;
17
+ const base_agent_js_1 = require("./base-agent.js");
18
+ const message_bus_js_1 = require("./message-bus.js");
19
+ // ============================================================================
20
+ // Builder Agent
21
+ // ============================================================================
22
+ class BuilderAgent extends base_agent_js_1.BaseAgent {
23
+ // Build history
24
+ buildHistory = [];
25
+ // Templates library
26
+ templates = new Map();
27
+ // Max iterations for improvement cycles
28
+ maxIterations = 5;
29
+ constructor(bus = message_bus_js_1.messageBus) {
30
+ super({ type: 'builder' }, bus);
31
+ this.initializeTemplates();
32
+ }
33
+ initializeTemplates() {
34
+ // TypeScript function template
35
+ this.templates.set('ts-function', {
36
+ name: 'ts-function',
37
+ type: 'code',
38
+ language: 'typescript',
39
+ template: `/**
40
+ * {{description}}
41
+ * {{params}}
42
+ * @returns {{returnType}}
43
+ */
44
+ export function {{name}}({{parameters}}): {{returnType}} {
45
+ {{body}}
46
+ }`,
47
+ placeholders: ['description', 'params', 'returnType', 'name', 'parameters', 'body'],
48
+ });
49
+ // TypeScript class template
50
+ this.templates.set('ts-class', {
51
+ name: 'ts-class',
52
+ type: 'code',
53
+ language: 'typescript',
54
+ template: `/**
55
+ * {{description}}
56
+ */
57
+ export class {{name}} {{extends}} {{implements}} {
58
+ {{properties}}
59
+
60
+ constructor({{constructorParams}}) {
61
+ {{constructorBody}}
62
+ }
63
+
64
+ {{methods}}
65
+ }`,
66
+ placeholders: ['description', 'name', 'extends', 'implements', 'properties', 'constructorParams', 'constructorBody', 'methods'],
67
+ });
68
+ // Test template
69
+ this.templates.set('ts-test', {
70
+ name: 'ts-test',
71
+ type: 'test',
72
+ language: 'typescript',
73
+ template: `import { describe, it, expect, beforeEach } from 'vitest';
74
+ import { {{imports}} } from '{{importPath}}';
75
+
76
+ describe('{{suiteName}}', () => {
77
+ {{setup}}
78
+
79
+ {{testCases}}
80
+ });`,
81
+ placeholders: ['imports', 'importPath', 'suiteName', 'setup', 'testCases'],
82
+ });
83
+ // JSON config template
84
+ this.templates.set('json-config', {
85
+ name: 'json-config',
86
+ type: 'config',
87
+ language: 'json',
88
+ template: `{
89
+ "name": "{{name}}",
90
+ "version": "{{version}}",
91
+ "description": "{{description}}",
92
+ {{additionalFields}}
93
+ }`,
94
+ placeholders: ['name', 'version', 'description', 'additionalFields'],
95
+ });
96
+ // Markdown documentation template
97
+ this.templates.set('md-doc', {
98
+ name: 'md-doc',
99
+ type: 'documentation',
100
+ language: 'markdown',
101
+ template: `# {{title}}
102
+
103
+ {{overview}}
104
+
105
+ ## Features
106
+
107
+ {{features}}
108
+
109
+ ## Usage
110
+
111
+ {{usage}}
112
+
113
+ ## API
114
+
115
+ {{api}}
116
+
117
+ ## Examples
118
+
119
+ {{examples}}
120
+ `,
121
+ placeholders: ['title', 'overview', 'features', 'usage', 'api', 'examples'],
122
+ });
123
+ }
124
+ // ============================================================================
125
+ // Message Handling
126
+ // ============================================================================
127
+ getMessageTypes() {
128
+ return ['BUILD', 'CRITIQUE', 'QUERY', 'COMMAND'];
129
+ }
130
+ async process(message) {
131
+ switch (message.type) {
132
+ case 'BUILD':
133
+ return this.handleBuildRequest(message);
134
+ case 'CRITIQUE':
135
+ return this.handleCritique(message);
136
+ case 'QUERY':
137
+ return this.handleQuery(message);
138
+ case 'COMMAND':
139
+ return this.handleCommand(message);
140
+ default:
141
+ return null;
142
+ }
143
+ }
144
+ // ============================================================================
145
+ // Build Logic
146
+ // ============================================================================
147
+ async handleBuildRequest(message) {
148
+ const request = message.payload;
149
+ const result = await this.build(request);
150
+ this.log(`Built ${result.artifacts.length} artifact(s) in ${result.iterations} iteration(s)`);
151
+ // Broadcast build result for auto-critique
152
+ await this.broadcast('BUILD_RESULT', {
153
+ artifacts: result.artifacts,
154
+ specification: request.specification,
155
+ });
156
+ return {
157
+ ...this.createResponse(message, 'RESPONSE', result),
158
+ id: '',
159
+ timestamp: new Date(),
160
+ };
161
+ }
162
+ async build(request) {
163
+ let artifacts = this.generate(request);
164
+ let iterations = 1;
165
+ let passedReview = false;
166
+ let finalScore = 0;
167
+ // If iteration requested, loop until pass or max iterations
168
+ if (request.iterateUntilPass) {
169
+ const maxIter = request.maxIterations || this.maxIterations;
170
+ while (iterations < maxIter && !passedReview) {
171
+ // Request critique from Critic agent
172
+ const critique = await this.requestCritique(artifacts);
173
+ finalScore = critique.overallScore;
174
+ passedReview = critique.passesReview;
175
+ if (!passedReview) {
176
+ // Iterate based on suggestions
177
+ artifacts = this.iterate(artifacts, critique);
178
+ iterations++;
179
+ }
180
+ }
181
+ }
182
+ const result = {
183
+ artifacts,
184
+ iterations,
185
+ passedReview,
186
+ finalScore,
187
+ };
188
+ this.buildHistory.push(result);
189
+ return result;
190
+ }
191
+ generate(request) {
192
+ const artifacts = [];
193
+ switch (request.type) {
194
+ case 'code':
195
+ artifacts.push(this.generateCode(request));
196
+ break;
197
+ case 'config':
198
+ artifacts.push(this.generateConfig(request));
199
+ break;
200
+ case 'documentation':
201
+ artifacts.push(this.generateDocumentation(request));
202
+ break;
203
+ case 'test':
204
+ artifacts.push(this.generateTest(request));
205
+ break;
206
+ case 'schema':
207
+ artifacts.push(this.generateSchema(request));
208
+ break;
209
+ }
210
+ return artifacts;
211
+ }
212
+ // ============================================================================
213
+ // Code Generation
214
+ // ============================================================================
215
+ generateCode(request) {
216
+ const spec = request.specification;
217
+ const language = request.language || 'typescript';
218
+ // Parse specification to determine structure
219
+ const structure = this.parseSpecification(spec);
220
+ let content;
221
+ if (structure.type === 'function') {
222
+ content = this.generateFunction(structure, language);
223
+ }
224
+ else if (structure.type === 'class') {
225
+ content = this.generateClass(structure, language);
226
+ }
227
+ else {
228
+ content = this.generateGenericCode(spec, language);
229
+ }
230
+ return {
231
+ type: 'file',
232
+ name: structure.name || 'generated',
233
+ language,
234
+ content,
235
+ metadata: {
236
+ generatedAt: new Date().toISOString(),
237
+ specification: spec.slice(0, 100),
238
+ },
239
+ };
240
+ }
241
+ parseSpecification(spec) {
242
+ const specLower = spec.toLowerCase();
243
+ // Try to detect type
244
+ let type = 'unknown';
245
+ if (specLower.includes('function') || specLower.includes('funzione')) {
246
+ type = 'function';
247
+ }
248
+ else if (specLower.includes('class') || specLower.includes('classe')) {
249
+ type = 'class';
250
+ }
251
+ else if (specLower.includes('module') || specLower.includes('modulo')) {
252
+ type = 'module';
253
+ }
254
+ // Extract name (look for quoted strings or camelCase/PascalCase words)
255
+ const nameMatch = spec.match(/["']([^"']+)["']/) || spec.match(/\b([A-Z][a-zA-Z0-9]+)\b/);
256
+ const name = nameMatch ? nameMatch[1] : 'Generated';
257
+ return {
258
+ type,
259
+ name,
260
+ description: spec,
261
+ };
262
+ }
263
+ generateFunction(structure, language) {
264
+ const template = this.templates.get('ts-function');
265
+ if (!template || language !== 'typescript') {
266
+ return this.generateGenericCode(structure.description, language);
267
+ }
268
+ // Simple placeholder replacement
269
+ let code = template.template;
270
+ code = code.replace('{{description}}', structure.description || 'Generated function');
271
+ code = code.replace('{{params}}', '');
272
+ code = code.replace('{{returnType}}', 'void');
273
+ code = code.replace('{{name}}', this.toCamelCase(structure.name));
274
+ code = code.replace('{{parameters}}', '');
275
+ code = code.replace('{{body}}', '// TODO: Implement');
276
+ return code;
277
+ }
278
+ generateClass(structure, language) {
279
+ const template = this.templates.get('ts-class');
280
+ if (!template || language !== 'typescript') {
281
+ return this.generateGenericCode(structure.description, language);
282
+ }
283
+ let code = template.template;
284
+ code = code.replace('{{description}}', structure.description || 'Generated class');
285
+ code = code.replace('{{name}}', this.toPascalCase(structure.name));
286
+ code = code.replace('{{extends}}', '');
287
+ code = code.replace('{{implements}}', '');
288
+ code = code.replace('{{properties}}', '');
289
+ code = code.replace('{{constructorParams}}', '');
290
+ code = code.replace('{{constructorBody}}', '');
291
+ code = code.replace('{{methods}}', '');
292
+ return code;
293
+ }
294
+ generateGenericCode(spec, language) {
295
+ // Fallback: generate a stub with the specification as comment
296
+ const commentStyle = language === 'python' ? '#' : '//';
297
+ return `${commentStyle} Generated from specification:
298
+ ${commentStyle} ${spec.split('\n').join(`\n${commentStyle} `)}
299
+
300
+ ${commentStyle} TODO: Implement this code
301
+ `;
302
+ }
303
+ // ============================================================================
304
+ // Other Generators
305
+ // ============================================================================
306
+ generateConfig(request) {
307
+ const template = this.templates.get('json-config');
308
+ let content;
309
+ if (template) {
310
+ content = template.template;
311
+ content = content.replace('{{name}}', 'generated-config');
312
+ content = content.replace('{{version}}', '1.0.0');
313
+ content = content.replace('{{description}}', request.specification);
314
+ content = content.replace('{{additionalFields}}', '');
315
+ }
316
+ else {
317
+ content = JSON.stringify({ specification: request.specification }, null, 2);
318
+ }
319
+ return {
320
+ type: 'file',
321
+ name: 'config.json',
322
+ language: 'json',
323
+ content,
324
+ };
325
+ }
326
+ generateDocumentation(request) {
327
+ const template = this.templates.get('md-doc');
328
+ let content;
329
+ if (template) {
330
+ content = template.template;
331
+ content = content.replace('{{title}}', 'Generated Documentation');
332
+ content = content.replace('{{overview}}', request.specification);
333
+ content = content.replace('{{features}}', '- Feature 1\n- Feature 2');
334
+ content = content.replace('{{usage}}', '```\n// Usage example\n```');
335
+ content = content.replace('{{api}}', '## Methods\n\n(API documentation here)');
336
+ content = content.replace('{{examples}}', '```\n// Example\n```');
337
+ }
338
+ else {
339
+ content = `# Documentation\n\n${request.specification}`;
340
+ }
341
+ return {
342
+ type: 'file',
343
+ name: 'README.md',
344
+ language: 'markdown',
345
+ content,
346
+ };
347
+ }
348
+ generateTest(request) {
349
+ const template = this.templates.get('ts-test');
350
+ let content;
351
+ if (template) {
352
+ content = template.template;
353
+ content = content.replace('{{imports}}', 'subject');
354
+ content = content.replace('{{importPath}}', './subject');
355
+ content = content.replace('{{suiteName}}', 'Generated Tests');
356
+ content = content.replace('{{setup}}', '');
357
+ content = content.replace('{{testCases}}', `it('should work', () => {
358
+ // TODO: Implement test
359
+ expect(true).toBe(true);
360
+ });`);
361
+ }
362
+ else {
363
+ content = `// Test for: ${request.specification}`;
364
+ }
365
+ return {
366
+ type: 'file',
367
+ name: 'generated.test.ts',
368
+ language: 'typescript',
369
+ content,
370
+ };
371
+ }
372
+ generateSchema(request) {
373
+ // Generate a JSON Schema from specification
374
+ const schema = {
375
+ $schema: 'http://json-schema.org/draft-07/schema#',
376
+ title: 'Generated Schema',
377
+ description: request.specification,
378
+ type: 'object',
379
+ properties: {},
380
+ required: [],
381
+ };
382
+ return {
383
+ type: 'file',
384
+ name: 'schema.json',
385
+ language: 'json',
386
+ content: JSON.stringify(schema, null, 2),
387
+ };
388
+ }
389
+ // ============================================================================
390
+ // Iteration (based on Critique)
391
+ // ============================================================================
392
+ async requestCritique(artifacts) {
393
+ try {
394
+ const response = await this.bus.request(this.id, 'critic', 'CRITIQUE', {
395
+ target: artifacts[0]?.name || 'artifact',
396
+ content: artifacts.map((a) => a.content).join('\n\n'),
397
+ type: 'code',
398
+ }, this.timeout);
399
+ return response.payload.critique;
400
+ }
401
+ catch (error) {
402
+ // Return a passing critique if Critic is unavailable
403
+ return {
404
+ target: 'artifact',
405
+ problems: [],
406
+ suggestions: [],
407
+ overallScore: 0.8,
408
+ passesReview: true,
409
+ };
410
+ }
411
+ }
412
+ iterate(artifacts, critique) {
413
+ // Apply suggestions to improve artifacts
414
+ return artifacts.map((artifact) => {
415
+ let improved = artifact.content;
416
+ for (const suggestion of critique.suggestions) {
417
+ // Simple improvements
418
+ if (suggestion.description.includes('console.log')) {
419
+ improved = improved.replace(/console\.log\([^)]*\);?\n?/g, '');
420
+ }
421
+ if (suggestion.description.includes('TODO')) {
422
+ // Replace TODOs with placeholder implementations
423
+ improved = improved.replace(/\/\/ TODO:.*\n/g, '// Implemented\n');
424
+ }
425
+ if (suggestion.description.includes('documentation')) {
426
+ // Add basic JSDoc if missing
427
+ if (!improved.includes('/**')) {
428
+ improved = `/**\n * Auto-generated documentation\n */\n${improved}`;
429
+ }
430
+ }
431
+ }
432
+ return {
433
+ ...artifact,
434
+ content: improved,
435
+ metadata: {
436
+ ...artifact.metadata,
437
+ iteration: (artifact.metadata?.iteration || 0) + 1,
438
+ },
439
+ };
440
+ });
441
+ }
442
+ // ============================================================================
443
+ // Critique Handling (from external Critic)
444
+ // ============================================================================
445
+ async handleCritique(message) {
446
+ const { artifact, critique } = message.payload;
447
+ this.log(`Received critique for "${artifact}": score ${critique.overallScore}`);
448
+ // Could trigger re-iteration here
449
+ // For now, just acknowledge
450
+ return {
451
+ ...this.createResponse(message, 'RESPONSE', { acknowledged: true }),
452
+ id: '',
453
+ timestamp: new Date(),
454
+ };
455
+ }
456
+ // ============================================================================
457
+ // Query & Commands
458
+ // ============================================================================
459
+ async handleQuery(message) {
460
+ const { query } = message.payload;
461
+ if (query === 'templates') {
462
+ return {
463
+ ...this.createResponse(message, 'RESPONSE', {
464
+ templates: Array.from(this.templates.keys()),
465
+ }),
466
+ id: '',
467
+ timestamp: new Date(),
468
+ };
469
+ }
470
+ if (query === 'stats') {
471
+ return {
472
+ ...this.createResponse(message, 'RESPONSE', this.getStats()),
473
+ id: '',
474
+ timestamp: new Date(),
475
+ };
476
+ }
477
+ return null;
478
+ }
479
+ async handleCommand(message) {
480
+ const { command, params } = message.payload;
481
+ switch (command) {
482
+ case 'add_template':
483
+ this.templates.set(params.name, params.template);
484
+ return {
485
+ ...this.createResponse(message, 'RESPONSE', { success: true }),
486
+ id: '',
487
+ timestamp: new Date(),
488
+ };
489
+ case 'execute_step':
490
+ // Handle step execution from Planner
491
+ const result = await this.build({
492
+ type: 'code',
493
+ specification: params.step,
494
+ });
495
+ return {
496
+ ...this.createResponse(message, 'RESPONSE', result),
497
+ id: '',
498
+ timestamp: new Date(),
499
+ };
500
+ default:
501
+ return null;
502
+ }
503
+ }
504
+ // ============================================================================
505
+ // Utilities
506
+ // ============================================================================
507
+ toCamelCase(str) {
508
+ return str
509
+ .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())
510
+ .replace(/^[A-Z]/, (chr) => chr.toLowerCase());
511
+ }
512
+ toPascalCase(str) {
513
+ const camel = this.toCamelCase(str);
514
+ return camel.charAt(0).toUpperCase() + camel.slice(1);
515
+ }
516
+ getStats() {
517
+ const builds = this.buildHistory;
518
+ const totalArtifacts = builds.reduce((sum, b) => sum + b.artifacts.length, 0);
519
+ const avgIterations = builds.reduce((sum, b) => sum + b.iterations, 0) / (builds.length || 1);
520
+ const passRate = builds.filter((b) => b.passedReview).length / (builds.length || 1);
521
+ return {
522
+ totalBuilds: builds.length,
523
+ totalArtifacts,
524
+ avgIterations,
525
+ passRate,
526
+ templates: this.templates.size,
527
+ };
528
+ }
529
+ }
530
+ exports.BuilderAgent = BuilderAgent;
531
+ // ============================================================================
532
+ // Register Factory
533
+ // ============================================================================
534
+ (0, base_agent_js_1.registerAgentFactory)('builder', (bus) => new BuilderAgent(bus));
535
+ function createBuilderAgent(bus) {
536
+ return new BuilderAgent(bus);
537
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Genesis 4.0 - Critic Agent
3
+ *
4
+ * Analyzes artifacts for problems, finds weaknesses, suggests improvements.
5
+ * The "criticone" that iterates and improves.
6
+ */
7
+ import { BaseAgent } from './base-agent.js';
8
+ import { MessageBus } from './message-bus.js';
9
+ import { Message, MessageType, Critique, Problem } from './types.js';
10
+ export declare class CriticAgent extends BaseAgent {
11
+ private critiqueHistory;
12
+ private problemPatterns;
13
+ constructor(bus?: MessageBus);
14
+ protected getMessageTypes(): MessageType[];
15
+ process(message: Message): Promise<Message | null>;
16
+ private handleCritiqueRequest;
17
+ critique(content: string, target: string, type?: 'code' | 'text' | 'design' | 'plan'): Promise<Critique>;
18
+ private critiqueCode;
19
+ private critiqueStructure;
20
+ private generateSuggestion;
21
+ private estimateEffort;
22
+ private estimateImpact;
23
+ private calculateScore;
24
+ private handleBuildResult;
25
+ private handleQuery;
26
+ getStats(): {
27
+ totalCritiques: number;
28
+ totalProblems: number;
29
+ avgProblemsPerCritique: number;
30
+ passRate: number;
31
+ avgScore: number;
32
+ };
33
+ addPattern(pattern: RegExp | string, severity: Problem['severity'], category: string): void;
34
+ }
35
+ export declare function createCriticAgent(bus?: MessageBus): CriticAgent;