linguclaw 0.4.0

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 (168) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/agent-system.d.ts +196 -0
  4. package/dist/agent-system.d.ts.map +1 -0
  5. package/dist/agent-system.js +738 -0
  6. package/dist/agent-system.js.map +1 -0
  7. package/dist/alphabeta.d.ts +54 -0
  8. package/dist/alphabeta.d.ts.map +1 -0
  9. package/dist/alphabeta.js +193 -0
  10. package/dist/alphabeta.js.map +1 -0
  11. package/dist/browser.d.ts +62 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +224 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +565 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/code-parser.d.ts +39 -0
  20. package/dist/code-parser.d.ts.map +1 -0
  21. package/dist/code-parser.js +385 -0
  22. package/dist/code-parser.js.map +1 -0
  23. package/dist/config.d.ts +66 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +232 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/core/engine.d.ts +359 -0
  28. package/dist/core/engine.d.ts.map +1 -0
  29. package/dist/core/engine.js +127 -0
  30. package/dist/core/engine.js.map +1 -0
  31. package/dist/daemon.d.ts +29 -0
  32. package/dist/daemon.d.ts.map +1 -0
  33. package/dist/daemon.js +212 -0
  34. package/dist/daemon.js.map +1 -0
  35. package/dist/email-receiver.d.ts +63 -0
  36. package/dist/email-receiver.d.ts.map +1 -0
  37. package/dist/email-receiver.js +553 -0
  38. package/dist/email-receiver.js.map +1 -0
  39. package/dist/git-integration.d.ts +180 -0
  40. package/dist/git-integration.d.ts.map +1 -0
  41. package/dist/git-integration.js +850 -0
  42. package/dist/git-integration.js.map +1 -0
  43. package/dist/inbox.d.ts +84 -0
  44. package/dist/inbox.d.ts.map +1 -0
  45. package/dist/inbox.js +198 -0
  46. package/dist/inbox.js.map +1 -0
  47. package/dist/index.d.ts +6 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +41 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/languages/cpp.d.ts +51 -0
  52. package/dist/languages/cpp.d.ts.map +1 -0
  53. package/dist/languages/cpp.js +930 -0
  54. package/dist/languages/cpp.js.map +1 -0
  55. package/dist/languages/csharp.d.ts +79 -0
  56. package/dist/languages/csharp.d.ts.map +1 -0
  57. package/dist/languages/csharp.js +1776 -0
  58. package/dist/languages/csharp.js.map +1 -0
  59. package/dist/languages/go.d.ts +50 -0
  60. package/dist/languages/go.d.ts.map +1 -0
  61. package/dist/languages/go.js +882 -0
  62. package/dist/languages/go.js.map +1 -0
  63. package/dist/languages/java.d.ts +47 -0
  64. package/dist/languages/java.d.ts.map +1 -0
  65. package/dist/languages/java.js +649 -0
  66. package/dist/languages/java.js.map +1 -0
  67. package/dist/languages/python.d.ts +47 -0
  68. package/dist/languages/python.d.ts.map +1 -0
  69. package/dist/languages/python.js +655 -0
  70. package/dist/languages/python.js.map +1 -0
  71. package/dist/languages/rust.d.ts +61 -0
  72. package/dist/languages/rust.d.ts.map +1 -0
  73. package/dist/languages/rust.js +1064 -0
  74. package/dist/languages/rust.js.map +1 -0
  75. package/dist/logger.d.ts +20 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +133 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/longterm-memory.d.ts +47 -0
  80. package/dist/longterm-memory.d.ts.map +1 -0
  81. package/dist/longterm-memory.js +300 -0
  82. package/dist/longterm-memory.js.map +1 -0
  83. package/dist/memory.d.ts +42 -0
  84. package/dist/memory.d.ts.map +1 -0
  85. package/dist/memory.js +274 -0
  86. package/dist/memory.js.map +1 -0
  87. package/dist/messaging.d.ts +103 -0
  88. package/dist/messaging.d.ts.map +1 -0
  89. package/dist/messaging.js +645 -0
  90. package/dist/messaging.js.map +1 -0
  91. package/dist/multi-provider.d.ts +69 -0
  92. package/dist/multi-provider.d.ts.map +1 -0
  93. package/dist/multi-provider.js +484 -0
  94. package/dist/multi-provider.js.map +1 -0
  95. package/dist/orchestrator.d.ts +65 -0
  96. package/dist/orchestrator.d.ts.map +1 -0
  97. package/dist/orchestrator.js +441 -0
  98. package/dist/orchestrator.js.map +1 -0
  99. package/dist/plugins.d.ts +52 -0
  100. package/dist/plugins.d.ts.map +1 -0
  101. package/dist/plugins.js +215 -0
  102. package/dist/plugins.js.map +1 -0
  103. package/dist/prism-orchestrator.d.ts +26 -0
  104. package/dist/prism-orchestrator.d.ts.map +1 -0
  105. package/dist/prism-orchestrator.js +191 -0
  106. package/dist/prism-orchestrator.js.map +1 -0
  107. package/dist/prism.d.ts +46 -0
  108. package/dist/prism.d.ts.map +1 -0
  109. package/dist/prism.js +188 -0
  110. package/dist/prism.js.map +1 -0
  111. package/dist/privacy.d.ts +23 -0
  112. package/dist/privacy.d.ts.map +1 -0
  113. package/dist/privacy.js +220 -0
  114. package/dist/privacy.js.map +1 -0
  115. package/dist/proactive.d.ts +30 -0
  116. package/dist/proactive.d.ts.map +1 -0
  117. package/dist/proactive.js +260 -0
  118. package/dist/proactive.js.map +1 -0
  119. package/dist/refactoring-engine.d.ts +100 -0
  120. package/dist/refactoring-engine.d.ts.map +1 -0
  121. package/dist/refactoring-engine.js +717 -0
  122. package/dist/refactoring-engine.js.map +1 -0
  123. package/dist/resilience.d.ts +43 -0
  124. package/dist/resilience.d.ts.map +1 -0
  125. package/dist/resilience.js +200 -0
  126. package/dist/resilience.js.map +1 -0
  127. package/dist/safety.d.ts +40 -0
  128. package/dist/safety.d.ts.map +1 -0
  129. package/dist/safety.js +133 -0
  130. package/dist/safety.js.map +1 -0
  131. package/dist/sandbox.d.ts +33 -0
  132. package/dist/sandbox.d.ts.map +1 -0
  133. package/dist/sandbox.js +173 -0
  134. package/dist/sandbox.js.map +1 -0
  135. package/dist/scheduler.d.ts +72 -0
  136. package/dist/scheduler.d.ts.map +1 -0
  137. package/dist/scheduler.js +374 -0
  138. package/dist/scheduler.js.map +1 -0
  139. package/dist/semantic-memory.d.ts +70 -0
  140. package/dist/semantic-memory.d.ts.map +1 -0
  141. package/dist/semantic-memory.js +430 -0
  142. package/dist/semantic-memory.js.map +1 -0
  143. package/dist/skills.d.ts +97 -0
  144. package/dist/skills.d.ts.map +1 -0
  145. package/dist/skills.js +575 -0
  146. package/dist/skills.js.map +1 -0
  147. package/dist/static/dashboard.html +853 -0
  148. package/dist/static/hub.html +772 -0
  149. package/dist/static/index.html +818 -0
  150. package/dist/static/logo.svg +24 -0
  151. package/dist/static/workflow-editor.html +913 -0
  152. package/dist/tools.d.ts +67 -0
  153. package/dist/tools.d.ts.map +1 -0
  154. package/dist/tools.js +303 -0
  155. package/dist/tools.js.map +1 -0
  156. package/dist/types.d.ts +295 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +90 -0
  159. package/dist/types.js.map +1 -0
  160. package/dist/web.d.ts +76 -0
  161. package/dist/web.d.ts.map +1 -0
  162. package/dist/web.js +2139 -0
  163. package/dist/web.js.map +1 -0
  164. package/dist/workflow-engine.d.ts +114 -0
  165. package/dist/workflow-engine.d.ts.map +1 -0
  166. package/dist/workflow-engine.js +855 -0
  167. package/dist/workflow-engine.js.map +1 -0
  168. package/package.json +77 -0
@@ -0,0 +1,738 @@
1
+ "use strict";
2
+ /**
3
+ * Advanced AI Agent System for LinguClaw
4
+ * Multi-agent collaboration with specialized agents
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AgentOrchestrator = exports.TesterAgent = exports.ReviewerAgent = exports.CoderAgent = exports.ArchitectAgent = void 0;
8
+ const events_1 = require("events");
9
+ const logger_1 = require("./logger");
10
+ const semantic_memory_1 = require("./semantic-memory");
11
+ const logger = (0, logger_1.getLogger)();
12
+ // ============================================
13
+ // SPECIALIZED AGENTS
14
+ // ============================================
15
+ class ArchitectAgent {
16
+ id = 'architect-' + Date.now().toString(36);
17
+ name = 'System Architect';
18
+ type = 'architect';
19
+ status = 'idle';
20
+ capabilities = [
21
+ {
22
+ name: 'system_design',
23
+ description: 'Design system architecture and patterns',
24
+ priority: 1,
25
+ canExecute: (task) => task.type === 'design' || task.type === 'analyze',
26
+ },
27
+ {
28
+ name: 'code_review',
29
+ description: 'Review code for architectural compliance',
30
+ priority: 2,
31
+ canExecute: (task) => task.type === 'review',
32
+ },
33
+ ];
34
+ context;
35
+ memory;
36
+ llmProvider;
37
+ constructor(context, llmProvider) {
38
+ this.context = context;
39
+ this.llmProvider = llmProvider;
40
+ this.memory = {
41
+ shortTerm: [],
42
+ longTerm: new Map(),
43
+ conversations: [],
44
+ learnings: [],
45
+ };
46
+ }
47
+ async execute(task) {
48
+ this.status = 'working';
49
+ const startTime = Date.now();
50
+ try {
51
+ logger.info(`[${this.name}] Executing task: ${task.description}`);
52
+ let output = '';
53
+ const artifacts = [];
54
+ switch (task.type) {
55
+ case 'design':
56
+ output = await this.designSystem(task.context);
57
+ artifacts.push(...this.generateDesignArtifacts(task.context));
58
+ break;
59
+ case 'review':
60
+ output = await this.reviewArchitecture(task.context);
61
+ break;
62
+ case 'analyze':
63
+ output = await this.analyzeSystem(task.context);
64
+ break;
65
+ default:
66
+ throw new Error(`Task type ${task.type} not supported by ${this.name}`);
67
+ }
68
+ this.status = 'idle';
69
+ return {
70
+ taskId: task.id,
71
+ agentId: this.id,
72
+ success: true,
73
+ output,
74
+ artifacts,
75
+ metrics: {
76
+ duration: Date.now() - startTime,
77
+ tokensUsed: 0,
78
+ apiCalls: 0,
79
+ filesModified: artifacts.length,
80
+ linesChanged: 0,
81
+ complexity: 0,
82
+ },
83
+ errors: [],
84
+ warnings: [],
85
+ suggestions: [],
86
+ completedAt: new Date(),
87
+ };
88
+ }
89
+ catch (error) {
90
+ this.status = 'error';
91
+ return {
92
+ taskId: task.id,
93
+ agentId: this.id,
94
+ success: false,
95
+ output: '',
96
+ artifacts: [],
97
+ metrics: {
98
+ duration: Date.now() - startTime,
99
+ tokensUsed: 0,
100
+ apiCalls: 0,
101
+ filesModified: 0,
102
+ linesChanged: 0,
103
+ complexity: 0,
104
+ },
105
+ errors: [error.message],
106
+ warnings: [],
107
+ suggestions: [],
108
+ completedAt: new Date(),
109
+ };
110
+ }
111
+ }
112
+ async collaborate(message) {
113
+ this.memory.conversations.push(message);
114
+ logger.info(`[${this.name}] Received message from ${message.from}: ${message.content.substring(0, 100)}`);
115
+ }
116
+ async designSystem(context) {
117
+ const prompt = `
118
+ Design a system architecture for:
119
+ ${JSON.stringify(context, null, 2)}
120
+
121
+ Consider:
122
+ 1. Scalability
123
+ 2. Maintainability
124
+ 3. Security
125
+ 4. Performance
126
+ 5. Testing
127
+
128
+ Provide:
129
+ - Component diagram
130
+ - Data flow
131
+ - API design
132
+ - Database schema
133
+ - Deployment strategy
134
+ `;
135
+ // Simulated LLM call
136
+ return `System Architecture Design:
137
+
138
+ ## Components
139
+ - Frontend: React with TypeScript
140
+ - Backend: Node.js/Express API
141
+ - Database: PostgreSQL with Redis cache
142
+ - Message Queue: RabbitMQ
143
+ - File Storage: S3
144
+
145
+ ## Data Flow
146
+ 1. Client requests → API Gateway
147
+ 2. Authentication → JWT validation
148
+ 3. Business logic → Service layer
149
+ 4. Data persistence → Database
150
+ 5. Caching → Redis
151
+ 6. Async processing → Queue
152
+
153
+ ## API Design
154
+ RESTful API with versioning (v1, v2)
155
+ GraphQL for complex queries
156
+ WebSocket for real-time features
157
+
158
+ ## Database Schema
159
+ Users table, Projects table, Tasks table
160
+ Relationships: User has many Projects, Project has many Tasks
161
+
162
+ ## Deployment
163
+ Docker containers orchestrated with Kubernetes
164
+ CI/CD pipeline with GitHub Actions
165
+ Monitoring with Prometheus and Grafana`;
166
+ }
167
+ async reviewArchitecture(context) {
168
+ return `Architecture Review:
169
+
170
+ Strengths:
171
+ - Clear separation of concerns
172
+ - Proper use of design patterns
173
+ - Good modularity
174
+
175
+ Recommendations:
176
+ 1. Consider microservices for scalability
177
+ 2. Add circuit breaker pattern for external calls
178
+ 3. Implement event sourcing for audit trail
179
+ 4. Use CQRS for complex read/write operations`;
180
+ }
181
+ async analyzeSystem(context) {
182
+ return `System Analysis:
183
+
184
+ Complexity Metrics:
185
+ - Cyclomatic complexity: Moderate
186
+ - Coupling: Low
187
+ - Cohesion: High
188
+
189
+ Potential Issues:
190
+ 1. Tight coupling in module X
191
+ 2. Missing error handling in module Y
192
+ 3. Performance bottleneck in database queries
193
+
194
+ Improvements:
195
+ 1. Refactor module X using dependency injection
196
+ 2. Add comprehensive error handling
197
+ 3. Implement query optimization and caching`;
198
+ }
199
+ generateDesignArtifacts(context) {
200
+ return [
201
+ {
202
+ type: 'doc',
203
+ path: 'architecture.md',
204
+ content: '# System Architecture\n\n## Overview\n...',
205
+ },
206
+ {
207
+ type: 'config',
208
+ path: 'docker-compose.yml',
209
+ content: 'version: "3.8"\nservices:\n api:\n ...',
210
+ },
211
+ ];
212
+ }
213
+ }
214
+ exports.ArchitectAgent = ArchitectAgent;
215
+ class CoderAgent {
216
+ id = 'coder-' + Date.now().toString(36);
217
+ name = 'Code Implementer';
218
+ type = 'coder';
219
+ status = 'idle';
220
+ capabilities = [
221
+ {
222
+ name: 'implement',
223
+ description: 'Implement features and functionality',
224
+ priority: 1,
225
+ canExecute: (task) => task.type === 'implement',
226
+ },
227
+ {
228
+ name: 'refactor',
229
+ description: 'Refactor existing code',
230
+ priority: 2,
231
+ canExecute: (task) => task.type === 'refactor',
232
+ },
233
+ ];
234
+ context;
235
+ memory;
236
+ llmProvider;
237
+ constructor(context, llmProvider) {
238
+ this.context = context;
239
+ this.llmProvider = llmProvider;
240
+ this.memory = {
241
+ shortTerm: [],
242
+ longTerm: new Map(),
243
+ conversations: [],
244
+ learnings: [],
245
+ };
246
+ }
247
+ async execute(task) {
248
+ this.status = 'working';
249
+ const startTime = Date.now();
250
+ try {
251
+ logger.info(`[${this.name}] Executing task: ${task.description}`);
252
+ let output = '';
253
+ const artifacts = [];
254
+ switch (task.type) {
255
+ case 'implement':
256
+ const impl = await this.implementFeature(task.context);
257
+ output = impl.description;
258
+ artifacts.push(...impl.code);
259
+ break;
260
+ case 'refactor':
261
+ const ref = await this.refactorCode(task.context);
262
+ output = ref.description;
263
+ artifacts.push(...ref.code);
264
+ break;
265
+ default:
266
+ throw new Error(`Task type ${task.type} not supported by ${this.name}`);
267
+ }
268
+ this.status = 'idle';
269
+ return {
270
+ taskId: task.id,
271
+ agentId: this.id,
272
+ success: true,
273
+ output,
274
+ artifacts,
275
+ metrics: {
276
+ duration: Date.now() - startTime,
277
+ tokensUsed: 0,
278
+ apiCalls: 0,
279
+ filesModified: artifacts.length,
280
+ linesChanged: artifacts.reduce((sum, a) => sum + a.content.split('\n').length, 0),
281
+ complexity: 0,
282
+ },
283
+ errors: [],
284
+ warnings: [],
285
+ suggestions: [],
286
+ completedAt: new Date(),
287
+ };
288
+ }
289
+ catch (error) {
290
+ this.status = 'error';
291
+ return {
292
+ taskId: task.id,
293
+ agentId: this.id,
294
+ success: false,
295
+ output: '',
296
+ artifacts: [],
297
+ metrics: {
298
+ duration: Date.now() - startTime,
299
+ tokensUsed: 0,
300
+ apiCalls: 0,
301
+ filesModified: 0,
302
+ linesChanged: 0,
303
+ complexity: 0,
304
+ },
305
+ errors: [error.message],
306
+ warnings: [],
307
+ suggestions: [],
308
+ completedAt: new Date(),
309
+ };
310
+ }
311
+ }
312
+ async collaborate(message) {
313
+ this.memory.conversations.push(message);
314
+ }
315
+ async implementFeature(context) {
316
+ const feature = context.feature || 'New feature';
317
+ const language = context.language || 'typescript';
318
+ return {
319
+ description: `Implemented ${feature} in ${language}`,
320
+ code: [
321
+ {
322
+ type: 'code',
323
+ path: `src/${feature.toLowerCase().replace(/\s+/g, '-')}.ts`,
324
+ content: `export class ${feature.replace(/\s+/g, '')} {
325
+ constructor() {
326
+ // Implementation
327
+ }
328
+
329
+ execute() {
330
+ // Feature logic
331
+ return true;
332
+ }
333
+ }`,
334
+ language,
335
+ },
336
+ {
337
+ type: 'test',
338
+ path: `tests/${feature.toLowerCase().replace(/\s+/g, '-')}.test.ts`,
339
+ content: `import { ${feature.replace(/\s+/g, '')} } from '../src/${feature.toLowerCase().replace(/\s+/g, '-')}';
340
+
341
+ describe('${feature}', () => {
342
+ it('should execute successfully', () => {
343
+ const instance = new ${feature.replace(/\s+/g, '')}();
344
+ expect(instance.execute()).toBe(true);
345
+ });
346
+ });`,
347
+ language,
348
+ },
349
+ ],
350
+ };
351
+ }
352
+ async refactorCode(context) {
353
+ const file = context.file || 'unknown';
354
+ return {
355
+ description: `Refactored ${file} for better maintainability`,
356
+ code: [
357
+ {
358
+ type: 'code',
359
+ path: file,
360
+ content: '// Refactored code\n// - Extracted functions\n// - Improved naming\n// - Added types',
361
+ },
362
+ ],
363
+ };
364
+ }
365
+ }
366
+ exports.CoderAgent = CoderAgent;
367
+ class ReviewerAgent {
368
+ id = 'reviewer-' + Date.now().toString(36);
369
+ name = 'Code Reviewer';
370
+ type = 'reviewer';
371
+ status = 'idle';
372
+ capabilities = [
373
+ {
374
+ name: 'code_review',
375
+ description: 'Review code for quality and best practices',
376
+ priority: 1,
377
+ canExecute: (task) => task.type === 'review',
378
+ },
379
+ ];
380
+ context;
381
+ memory;
382
+ llmProvider;
383
+ constructor(context, llmProvider) {
384
+ this.context = context;
385
+ this.llmProvider = llmProvider;
386
+ this.memory = {
387
+ shortTerm: [],
388
+ longTerm: new Map(),
389
+ conversations: [],
390
+ learnings: [],
391
+ };
392
+ }
393
+ async execute(task) {
394
+ this.status = 'working';
395
+ const startTime = Date.now();
396
+ try {
397
+ const review = await this.reviewCode(task.context);
398
+ this.status = 'idle';
399
+ return {
400
+ taskId: task.id,
401
+ agentId: this.id,
402
+ success: true,
403
+ output: review.summary,
404
+ artifacts: review.comments.map(c => ({
405
+ type: 'doc',
406
+ path: `review-${task.id}.md`,
407
+ content: c,
408
+ })),
409
+ metrics: {
410
+ duration: Date.now() - startTime,
411
+ tokensUsed: 0,
412
+ apiCalls: 0,
413
+ filesModified: 0,
414
+ linesChanged: 0,
415
+ complexity: 0,
416
+ },
417
+ errors: [],
418
+ warnings: review.warnings,
419
+ suggestions: review.suggestions,
420
+ completedAt: new Date(),
421
+ };
422
+ }
423
+ catch (error) {
424
+ this.status = 'error';
425
+ return {
426
+ taskId: task.id,
427
+ agentId: this.id,
428
+ success: false,
429
+ output: '',
430
+ artifacts: [],
431
+ metrics: {
432
+ duration: Date.now() - startTime,
433
+ tokensUsed: 0,
434
+ apiCalls: 0,
435
+ filesModified: 0,
436
+ linesChanged: 0,
437
+ complexity: 0,
438
+ },
439
+ errors: [error.message],
440
+ warnings: [],
441
+ suggestions: [],
442
+ completedAt: new Date(),
443
+ };
444
+ }
445
+ }
446
+ async collaborate(message) {
447
+ this.memory.conversations.push(message);
448
+ }
449
+ async reviewCode(context) {
450
+ return {
451
+ summary: 'Code review completed',
452
+ comments: [
453
+ 'Consider adding more type annotations',
454
+ 'Function is too long, consider splitting',
455
+ 'Missing error handling',
456
+ ],
457
+ warnings: [
458
+ 'Potential null pointer exception',
459
+ 'Hardcoded credentials detected',
460
+ ],
461
+ suggestions: [
462
+ 'Use const instead of let where possible',
463
+ 'Add unit tests for edge cases',
464
+ 'Consider using async/await for better readability',
465
+ ],
466
+ };
467
+ }
468
+ }
469
+ exports.ReviewerAgent = ReviewerAgent;
470
+ class TesterAgent {
471
+ id = 'tester-' + Date.now().toString(36);
472
+ name = 'Test Engineer';
473
+ type = 'tester';
474
+ status = 'idle';
475
+ capabilities = [
476
+ {
477
+ name: 'test',
478
+ description: 'Generate and run tests',
479
+ priority: 1,
480
+ canExecute: (task) => task.type === 'test',
481
+ },
482
+ ];
483
+ context;
484
+ memory;
485
+ llmProvider;
486
+ constructor(context, llmProvider) {
487
+ this.context = context;
488
+ this.llmProvider = llmProvider;
489
+ this.memory = {
490
+ shortTerm: [],
491
+ longTerm: new Map(),
492
+ conversations: [],
493
+ learnings: [],
494
+ };
495
+ }
496
+ async execute(task) {
497
+ this.status = 'working';
498
+ const startTime = Date.now();
499
+ try {
500
+ const tests = await this.generateTests(task.context);
501
+ this.status = 'idle';
502
+ return {
503
+ taskId: task.id,
504
+ agentId: this.id,
505
+ success: true,
506
+ output: `Generated ${tests.length} tests`,
507
+ artifacts: tests,
508
+ metrics: {
509
+ duration: Date.now() - startTime,
510
+ tokensUsed: 0,
511
+ apiCalls: 0,
512
+ filesModified: tests.length,
513
+ linesChanged: tests.reduce((sum, t) => sum + t.content.split('\n').length, 0),
514
+ complexity: 0,
515
+ },
516
+ errors: [],
517
+ warnings: [],
518
+ suggestions: [],
519
+ completedAt: new Date(),
520
+ };
521
+ }
522
+ catch (error) {
523
+ this.status = 'error';
524
+ return {
525
+ taskId: task.id,
526
+ agentId: this.id,
527
+ success: false,
528
+ output: '',
529
+ artifacts: [],
530
+ metrics: {
531
+ duration: Date.now() - startTime,
532
+ tokensUsed: 0,
533
+ apiCalls: 0,
534
+ filesModified: 0,
535
+ linesChanged: 0,
536
+ complexity: 0,
537
+ },
538
+ errors: [error.message],
539
+ warnings: [],
540
+ suggestions: [],
541
+ completedAt: new Date(),
542
+ };
543
+ }
544
+ }
545
+ async collaborate(message) {
546
+ this.memory.conversations.push(message);
547
+ }
548
+ async generateTests(context) {
549
+ const target = context.target || 'unknown';
550
+ return [
551
+ {
552
+ type: 'test',
553
+ path: `tests/${target}.test.ts`,
554
+ content: `describe('${target}', () => {
555
+ it('should handle normal case', () => {});
556
+ it('should handle edge case', () => {});
557
+ it('should handle error case', () => {});
558
+ });`,
559
+ },
560
+ ];
561
+ }
562
+ }
563
+ exports.TesterAgent = TesterAgent;
564
+ // ============================================
565
+ // AGENT ORCHESTRATOR
566
+ // ============================================
567
+ class AgentOrchestrator extends events_1.EventEmitter {
568
+ agents = new Map();
569
+ tasks = new Map();
570
+ results = new Map();
571
+ messageQueue = [];
572
+ semanticMemory;
573
+ projectPath;
574
+ constructor(projectPath, memoryPath) {
575
+ super();
576
+ this.projectPath = projectPath;
577
+ this.semanticMemory = new semantic_memory_1.SemanticMemory(memoryPath);
578
+ }
579
+ async initialize() {
580
+ this.semanticMemory.init();
581
+ logger.info('Agent orchestrator initialized');
582
+ }
583
+ registerAgent(agent) {
584
+ this.agents.set(agent.id, agent);
585
+ this.emit('agent:registered', agent);
586
+ logger.info(`Agent registered: ${agent.name} (${agent.type})`);
587
+ }
588
+ createAgent(type, llmProvider) {
589
+ const context = {
590
+ projectPath: this.projectPath,
591
+ files: [],
592
+ dependencies: [],
593
+ recentCommits: [],
594
+ };
595
+ switch (type) {
596
+ case 'architect':
597
+ return new ArchitectAgent(context, llmProvider);
598
+ case 'coder':
599
+ return new CoderAgent(context, llmProvider);
600
+ case 'reviewer':
601
+ return new ReviewerAgent(context, llmProvider);
602
+ case 'tester':
603
+ return new TesterAgent(context, llmProvider);
604
+ default:
605
+ throw new Error(`Unknown agent type: ${type}`);
606
+ }
607
+ }
608
+ async submitTask(task) {
609
+ const id = 'task-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 6);
610
+ const fullTask = {
611
+ ...task,
612
+ id,
613
+ subtasks: [],
614
+ };
615
+ this.tasks.set(id, fullTask);
616
+ this.emit('task:submitted', fullTask);
617
+ // Find best agent for task
618
+ const agent = this.findBestAgent(fullTask);
619
+ if (agent) {
620
+ fullTask.assignedTo = agent.id;
621
+ // Execute task
622
+ const result = await agent.execute(fullTask);
623
+ this.results.set(id, result);
624
+ this.emit('task:completed', result);
625
+ // Store in semantic memory
626
+ this.semanticMemory.store(id, `Task: ${task.description}\nResult: ${result.output}`, 'task', {
627
+ type: task.type,
628
+ success: result.success,
629
+ agent: agent.name,
630
+ timestamp: new Date().toISOString(),
631
+ });
632
+ }
633
+ else {
634
+ logger.warn(`No suitable agent found for task: ${task.description}`);
635
+ }
636
+ return id;
637
+ }
638
+ findBestAgent(task) {
639
+ let bestAgent;
640
+ let bestScore = -1;
641
+ for (const agent of this.agents.values()) {
642
+ let score = 0;
643
+ // Check capabilities
644
+ for (const cap of agent.capabilities) {
645
+ if (cap.canExecute(task)) {
646
+ score += cap.priority * 10;
647
+ }
648
+ }
649
+ // Check agent type match
650
+ if (this.typeMatchesTask(agent.type, task.type)) {
651
+ score += 5;
652
+ }
653
+ // Check if agent is idle
654
+ if (agent.status === 'idle') {
655
+ score += 3;
656
+ }
657
+ if (score > bestScore) {
658
+ bestScore = score;
659
+ bestAgent = agent;
660
+ }
661
+ }
662
+ return bestAgent;
663
+ }
664
+ typeMatchesTask(agentType, taskType) {
665
+ const mappings = {
666
+ architect: ['design', 'analyze'],
667
+ coder: ['implement', 'refactor'],
668
+ reviewer: ['review'],
669
+ tester: ['test'],
670
+ debugger: ['debug'],
671
+ optimizer: ['optimize'],
672
+ security: ['analyze'],
673
+ documenter: ['document'],
674
+ researcher: ['research'],
675
+ coordinator: [],
676
+ };
677
+ return mappings[agentType]?.includes(taskType) || false;
678
+ }
679
+ async broadcast(message) {
680
+ const fullMessage = {
681
+ ...message,
682
+ id: 'msg-' + Date.now().toString(36),
683
+ timestamp: new Date(),
684
+ };
685
+ this.messageQueue.push(fullMessage);
686
+ for (const agent of this.agents.values()) {
687
+ await agent.collaborate(fullMessage);
688
+ }
689
+ this.emit('message:broadcast', fullMessage);
690
+ }
691
+ getAgentStatus() {
692
+ return Array.from(this.agents.values()).map(a => ({
693
+ id: a.id,
694
+ name: a.name,
695
+ type: a.type,
696
+ status: a.status,
697
+ }));
698
+ }
699
+ getTaskStatus(taskId) {
700
+ return this.results.get(taskId);
701
+ }
702
+ getAllTasks() {
703
+ return Array.from(this.tasks.values());
704
+ }
705
+ async runWorkflow(workflow) {
706
+ logger.info(`Starting workflow: ${workflow.name}`);
707
+ const results = [];
708
+ for (const step of workflow.steps) {
709
+ logger.info(`Executing workflow step: ${step.name}`);
710
+ // Create task from step
711
+ const taskId = await this.submitTask({
712
+ type: step.taskType,
713
+ priority: step.priority,
714
+ description: step.description,
715
+ context: step.context,
716
+ dependencies: step.dependencies,
717
+ estimatedTime: step.estimatedTime,
718
+ });
719
+ const result = this.results.get(taskId);
720
+ if (result) {
721
+ results.push(result);
722
+ if (!result.success && step.required) {
723
+ logger.error(`Required step failed: ${step.name}`);
724
+ break;
725
+ }
726
+ }
727
+ }
728
+ return {
729
+ name: workflow.name,
730
+ success: results.every(r => r.success),
731
+ results,
732
+ completedAt: new Date(),
733
+ };
734
+ }
735
+ }
736
+ exports.AgentOrchestrator = AgentOrchestrator;
737
+ exports.default = AgentOrchestrator;
738
+ //# sourceMappingURL=agent-system.js.map