claude-flow-novice 2.0.3 → 2.0.4
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/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -0,0 +1,1095 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Swarm Orchestration Engine
|
|
3
|
+
*
|
|
4
|
+
* This is the core orchestration engine that manages swarm lifecycle,
|
|
5
|
+
* agent coordination, task distribution, and result aggregation.
|
|
6
|
+
* It integrates with existing MCP tools and provides production-ready
|
|
7
|
+
* swarm collaboration capabilities.
|
|
8
|
+
*/ function _define_property(obj, key, value) {
|
|
9
|
+
if (key in obj) {
|
|
10
|
+
Object.defineProperty(obj, key, {
|
|
11
|
+
value: value,
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true
|
|
15
|
+
});
|
|
16
|
+
} else {
|
|
17
|
+
obj[key] = value;
|
|
18
|
+
}
|
|
19
|
+
return obj;
|
|
20
|
+
}
|
|
21
|
+
import { EventEmitter } from "node:events";
|
|
22
|
+
import { performance } from "node:perf_hooks";
|
|
23
|
+
import { Logger } from "../core/logger.js";
|
|
24
|
+
import { generateId } from "../utils/helpers.js";
|
|
25
|
+
import { SwarmCoordinator } from "../coordination/swarm-coordinator.js";
|
|
26
|
+
import { AdvancedTaskScheduler } from "../coordination/advanced-scheduler.js";
|
|
27
|
+
import { SwarmMonitor } from "../coordination/swarm-monitor.js";
|
|
28
|
+
import { MemoryManager } from "../memory/manager.js";
|
|
29
|
+
import TaskExecutor from "./executor.js";
|
|
30
|
+
export class AdvancedSwarmOrchestrator extends EventEmitter {
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the orchestrator and all subsystems
|
|
33
|
+
*/ async initialize() {
|
|
34
|
+
if (this.isRunning) {
|
|
35
|
+
this.logger.warn('Orchestrator already running');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.logger.info('Initializing advanced swarm orchestrator...');
|
|
39
|
+
try {
|
|
40
|
+
// Initialize subsystems
|
|
41
|
+
await this.coordinator.start();
|
|
42
|
+
await this.memoryManager.initialize();
|
|
43
|
+
// Start background processes
|
|
44
|
+
this.startHealthChecks();
|
|
45
|
+
this.startMetricsCollection();
|
|
46
|
+
this.isRunning = true;
|
|
47
|
+
this.logger.info('Advanced swarm orchestrator initialized successfully');
|
|
48
|
+
this.emit('orchestrator:initialized');
|
|
49
|
+
} catch (error) {
|
|
50
|
+
this.logger.error('Failed to initialize orchestrator', error);
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Shutdown the orchestrator gracefully
|
|
56
|
+
*/ async shutdown() {
|
|
57
|
+
if (!this.isRunning) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.logger.info('Shutting down advanced swarm orchestrator...');
|
|
61
|
+
try {
|
|
62
|
+
// Stop background processes
|
|
63
|
+
if (this.healthCheckInterval) {
|
|
64
|
+
clearInterval(this.healthCheckInterval);
|
|
65
|
+
}
|
|
66
|
+
if (this.metricsCollectionInterval) {
|
|
67
|
+
clearInterval(this.metricsCollectionInterval);
|
|
68
|
+
}
|
|
69
|
+
// Shutdown active swarms gracefully
|
|
70
|
+
const shutdownPromises = Array.from(this.activeSwarms.keys()).map((swarmId)=>this.stopSwarm(swarmId, 'Orchestrator shutdown'));
|
|
71
|
+
await Promise.allSettled(shutdownPromises);
|
|
72
|
+
// Shutdown subsystems
|
|
73
|
+
await this.coordinator.stop();
|
|
74
|
+
this.isRunning = false;
|
|
75
|
+
this.logger.info('Advanced swarm orchestrator shut down successfully');
|
|
76
|
+
this.emit('orchestrator:shutdown');
|
|
77
|
+
} catch (error) {
|
|
78
|
+
this.logger.error('Error during orchestrator shutdown', error);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create and initialize a new swarm for a given objective
|
|
84
|
+
*/ async createSwarm(objective, strategy = 'auto', options = {}) {
|
|
85
|
+
const swarmId = generateId('swarm');
|
|
86
|
+
const swarmObjective = {
|
|
87
|
+
id: swarmId,
|
|
88
|
+
name: `Swarm-${swarmId}`,
|
|
89
|
+
description: objective,
|
|
90
|
+
strategy,
|
|
91
|
+
mode: this.config.mode,
|
|
92
|
+
requirements: {
|
|
93
|
+
minAgents: 1,
|
|
94
|
+
maxAgents: this.config.maxAgents,
|
|
95
|
+
agentTypes: this.getRequiredAgentTypes(strategy),
|
|
96
|
+
estimatedDuration: 3600000,
|
|
97
|
+
maxDuration: 7200000,
|
|
98
|
+
qualityThreshold: this.config.qualityThreshold,
|
|
99
|
+
reviewCoverage: 0.8,
|
|
100
|
+
testCoverage: 0.7,
|
|
101
|
+
reliabilityTarget: this.config.reliabilityTarget
|
|
102
|
+
},
|
|
103
|
+
constraints: {
|
|
104
|
+
maxCost: 1000,
|
|
105
|
+
resourceLimits: this.config.resourceLimits,
|
|
106
|
+
minQuality: this.config.qualityThreshold,
|
|
107
|
+
requiredApprovals: [],
|
|
108
|
+
allowedFailures: 2,
|
|
109
|
+
recoveryTime: 300000,
|
|
110
|
+
milestones: []
|
|
111
|
+
},
|
|
112
|
+
tasks: [],
|
|
113
|
+
dependencies: [],
|
|
114
|
+
status: 'planning',
|
|
115
|
+
progress: this.initializeProgress(),
|
|
116
|
+
createdAt: new Date(),
|
|
117
|
+
results: undefined,
|
|
118
|
+
metrics: this.initializeMetrics()
|
|
119
|
+
};
|
|
120
|
+
// Create execution context
|
|
121
|
+
const context = {
|
|
122
|
+
swarmId: {
|
|
123
|
+
id: swarmId,
|
|
124
|
+
timestamp: Date.now(),
|
|
125
|
+
namespace: 'swarm'
|
|
126
|
+
},
|
|
127
|
+
objective: swarmObjective,
|
|
128
|
+
agents: new Map(),
|
|
129
|
+
tasks: new Map(),
|
|
130
|
+
scheduler: new AdvancedTaskScheduler({
|
|
131
|
+
maxConcurrency: this.config.maxConcurrentTasks,
|
|
132
|
+
enablePrioritization: true,
|
|
133
|
+
enableLoadBalancing: this.config.loadBalancing,
|
|
134
|
+
enableWorkStealing: true,
|
|
135
|
+
schedulingAlgorithm: 'adaptive'
|
|
136
|
+
}),
|
|
137
|
+
monitor: new SwarmMonitor({
|
|
138
|
+
updateInterval: 1000,
|
|
139
|
+
enableAlerts: true,
|
|
140
|
+
enableHistory: true,
|
|
141
|
+
metricsRetention: 86400000
|
|
142
|
+
}),
|
|
143
|
+
memoryManager: this.memoryManager,
|
|
144
|
+
taskExecutor: new TaskExecutor({
|
|
145
|
+
timeoutMs: this.config.taskTimeoutMinutes * 60 * 1000,
|
|
146
|
+
retryAttempts: this.config.maxRetries,
|
|
147
|
+
enableMetrics: true,
|
|
148
|
+
captureOutput: true,
|
|
149
|
+
streamOutput: this.config.realTimeMonitoring
|
|
150
|
+
}),
|
|
151
|
+
startTime: new Date(),
|
|
152
|
+
metrics: this.initializeMetrics()
|
|
153
|
+
};
|
|
154
|
+
// Initialize subsystems
|
|
155
|
+
await context.scheduler.initialize();
|
|
156
|
+
await context.monitor.start();
|
|
157
|
+
await context.taskExecutor.initialize();
|
|
158
|
+
// Store context
|
|
159
|
+
this.activeSwarms.set(swarmId, context);
|
|
160
|
+
// Store in memory
|
|
161
|
+
await this.memoryManager.store({
|
|
162
|
+
id: `swarm:${swarmId}`,
|
|
163
|
+
agentId: 'orchestrator',
|
|
164
|
+
type: 'swarm-definition',
|
|
165
|
+
content: JSON.stringify(swarmObjective),
|
|
166
|
+
namespace: 'swarm-orchestrator',
|
|
167
|
+
timestamp: new Date(),
|
|
168
|
+
metadata: {
|
|
169
|
+
type: 'swarm-definition',
|
|
170
|
+
strategy,
|
|
171
|
+
status: 'created',
|
|
172
|
+
agentCount: 0,
|
|
173
|
+
taskCount: 0
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
this.logger.info('Swarm created successfully', {
|
|
177
|
+
swarmId,
|
|
178
|
+
objective,
|
|
179
|
+
strategy,
|
|
180
|
+
maxAgents: swarmObjective.requirements.maxAgents
|
|
181
|
+
});
|
|
182
|
+
this.emit('swarm:created', {
|
|
183
|
+
swarmId,
|
|
184
|
+
objective: swarmObjective
|
|
185
|
+
});
|
|
186
|
+
return swarmId;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Start executing a swarm with automatic task decomposition and agent spawning
|
|
190
|
+
*/ async startSwarm(swarmId) {
|
|
191
|
+
const context = this.activeSwarms.get(swarmId);
|
|
192
|
+
if (!context) {
|
|
193
|
+
throw new Error(`Swarm not found: ${swarmId}`);
|
|
194
|
+
}
|
|
195
|
+
if (context.objective.status !== 'planning') {
|
|
196
|
+
throw new Error(`Swarm ${swarmId} is not in planning state`);
|
|
197
|
+
}
|
|
198
|
+
this.logger.info('Starting swarm execution', {
|
|
199
|
+
swarmId
|
|
200
|
+
});
|
|
201
|
+
try {
|
|
202
|
+
// Update status
|
|
203
|
+
context.objective.status = 'initializing';
|
|
204
|
+
context.objective.startedAt = new Date();
|
|
205
|
+
// Decompose objective into tasks
|
|
206
|
+
const tasks = await this.decomposeObjective(context.objective);
|
|
207
|
+
context.objective.tasks = tasks;
|
|
208
|
+
// Store tasks in context
|
|
209
|
+
tasks.forEach((task)=>{
|
|
210
|
+
context.tasks.set(task.id.id, task);
|
|
211
|
+
});
|
|
212
|
+
// Spawn required agents
|
|
213
|
+
const agents = await this.spawnRequiredAgents(context);
|
|
214
|
+
agents.forEach((agent)=>{
|
|
215
|
+
context.agents.set(agent.id, agent);
|
|
216
|
+
});
|
|
217
|
+
// Start task execution
|
|
218
|
+
context.objective.status = 'executing';
|
|
219
|
+
await this.scheduleAndExecuteTasks(context);
|
|
220
|
+
this.logger.info('Swarm started successfully', {
|
|
221
|
+
swarmId,
|
|
222
|
+
taskCount: tasks.length,
|
|
223
|
+
agentCount: agents.length
|
|
224
|
+
});
|
|
225
|
+
this.emit('swarm:started', {
|
|
226
|
+
swarmId,
|
|
227
|
+
context
|
|
228
|
+
});
|
|
229
|
+
} catch (error) {
|
|
230
|
+
context.objective.status = 'failed';
|
|
231
|
+
this.logger.error('Failed to start swarm', {
|
|
232
|
+
swarmId,
|
|
233
|
+
error
|
|
234
|
+
});
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Stop a running swarm gracefully
|
|
240
|
+
*/ async stopSwarm(swarmId, reason = 'Manual stop') {
|
|
241
|
+
const context = this.activeSwarms.get(swarmId);
|
|
242
|
+
if (!context) {
|
|
243
|
+
throw new Error(`Swarm not found: ${swarmId}`);
|
|
244
|
+
}
|
|
245
|
+
this.logger.info('Stopping swarm', {
|
|
246
|
+
swarmId,
|
|
247
|
+
reason
|
|
248
|
+
});
|
|
249
|
+
try {
|
|
250
|
+
// Update status
|
|
251
|
+
context.objective.status = 'cancelled';
|
|
252
|
+
context.endTime = new Date();
|
|
253
|
+
// Stop task executor
|
|
254
|
+
await context.taskExecutor.shutdown();
|
|
255
|
+
// Stop scheduler
|
|
256
|
+
await context.scheduler.shutdown();
|
|
257
|
+
// Stop monitor
|
|
258
|
+
context.monitor.stop();
|
|
259
|
+
// Clean up agents
|
|
260
|
+
for (const agent of context.agents.values()){
|
|
261
|
+
try {
|
|
262
|
+
await this.terminateAgent(agent.id, reason);
|
|
263
|
+
} catch (error) {
|
|
264
|
+
this.logger.warn('Error terminating agent during swarm stop', {
|
|
265
|
+
agentId: agent.id,
|
|
266
|
+
error
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Store final results
|
|
271
|
+
await this.storeFinalResults(context);
|
|
272
|
+
this.logger.info('Swarm stopped successfully', {
|
|
273
|
+
swarmId,
|
|
274
|
+
reason
|
|
275
|
+
});
|
|
276
|
+
this.emit('swarm:stopped', {
|
|
277
|
+
swarmId,
|
|
278
|
+
reason,
|
|
279
|
+
context
|
|
280
|
+
});
|
|
281
|
+
} catch (error) {
|
|
282
|
+
this.logger.error('Error stopping swarm', {
|
|
283
|
+
swarmId,
|
|
284
|
+
error
|
|
285
|
+
});
|
|
286
|
+
throw error;
|
|
287
|
+
} finally{
|
|
288
|
+
// Remove from active swarms
|
|
289
|
+
this.activeSwarms.delete(swarmId);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get comprehensive status of a swarm
|
|
294
|
+
*/ getSwarmStatus(swarmId) {
|
|
295
|
+
return this.activeSwarms.get(swarmId) || null;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get status of all active swarms
|
|
299
|
+
*/ getAllSwarmStatuses() {
|
|
300
|
+
return Array.from(this.activeSwarms.values());
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get comprehensive orchestrator metrics
|
|
304
|
+
*/ getOrchestratorMetrics() {
|
|
305
|
+
const swarmMetrics = {};
|
|
306
|
+
for (const [swarmId, context] of this.activeSwarms){
|
|
307
|
+
swarmMetrics[swarmId] = context.metrics;
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
global: this.globalMetrics,
|
|
311
|
+
swarms: swarmMetrics,
|
|
312
|
+
system: {
|
|
313
|
+
activeSwarms: this.activeSwarms.size,
|
|
314
|
+
totalAgents: Array.from(this.activeSwarms.values()).reduce((sum, ctx)=>sum + ctx.agents.size, 0),
|
|
315
|
+
totalTasks: Array.from(this.activeSwarms.values()).reduce((sum, ctx)=>sum + ctx.tasks.size, 0),
|
|
316
|
+
uptime: this.isRunning ? Date.now() - performance.timeOrigin : 0,
|
|
317
|
+
memoryUsage: process.memoryUsage().heapUsed,
|
|
318
|
+
cpuUsage: process.cpuUsage().user
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Perform comprehensive health check
|
|
324
|
+
*/ async performHealthCheck() {
|
|
325
|
+
const issues = [];
|
|
326
|
+
const startTime = performance.now();
|
|
327
|
+
try {
|
|
328
|
+
// Check orchestrator health
|
|
329
|
+
if (!this.isRunning) {
|
|
330
|
+
issues.push('Orchestrator is not running');
|
|
331
|
+
}
|
|
332
|
+
// Check coordinator health
|
|
333
|
+
if (!this.coordinator) {
|
|
334
|
+
issues.push('Coordinator is not initialized');
|
|
335
|
+
}
|
|
336
|
+
// Check memory manager health
|
|
337
|
+
try {
|
|
338
|
+
await this.memoryManager.store({
|
|
339
|
+
id: 'health-check',
|
|
340
|
+
agentId: 'orchestrator',
|
|
341
|
+
type: 'health-check',
|
|
342
|
+
content: 'Health check test',
|
|
343
|
+
namespace: 'health',
|
|
344
|
+
timestamp: new Date(),
|
|
345
|
+
metadata: {
|
|
346
|
+
test: true
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
} catch (error) {
|
|
350
|
+
issues.push('Memory manager health check failed');
|
|
351
|
+
}
|
|
352
|
+
// Check swarm health
|
|
353
|
+
for (const [swarmId, context] of this.activeSwarms){
|
|
354
|
+
if (context.objective.status === 'failed') {
|
|
355
|
+
issues.push(`Swarm ${swarmId} is in failed state`);
|
|
356
|
+
}
|
|
357
|
+
// Check for stalled swarms
|
|
358
|
+
const swarmAge = Date.now() - context.startTime.getTime();
|
|
359
|
+
if (swarmAge > 3600000 && context.objective.status === 'executing') {
|
|
360
|
+
// 1 hour
|
|
361
|
+
issues.push(`Swarm ${swarmId} appears to be stalled`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const healthy = issues.length === 0;
|
|
365
|
+
const duration = performance.now() - startTime;
|
|
366
|
+
return {
|
|
367
|
+
healthy,
|
|
368
|
+
issues,
|
|
369
|
+
metrics: {
|
|
370
|
+
checkDuration: duration,
|
|
371
|
+
activeSwarms: this.activeSwarms.size,
|
|
372
|
+
memoryUsage: process.memoryUsage(),
|
|
373
|
+
cpuUsage: process.cpuUsage()
|
|
374
|
+
},
|
|
375
|
+
timestamp: new Date()
|
|
376
|
+
};
|
|
377
|
+
} catch (error) {
|
|
378
|
+
issues.push(`Health check failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
379
|
+
return {
|
|
380
|
+
healthy: false,
|
|
381
|
+
issues,
|
|
382
|
+
metrics: {},
|
|
383
|
+
timestamp: new Date()
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Private methods
|
|
388
|
+
async decomposeObjective(objective) {
|
|
389
|
+
const tasks = [];
|
|
390
|
+
const baseTaskId = generateId('task');
|
|
391
|
+
switch(objective.strategy){
|
|
392
|
+
case 'research':
|
|
393
|
+
tasks.push(this.createTaskDefinition(`${baseTaskId}-1`, 'research', 'Conduct comprehensive research', 'high', []), this.createTaskDefinition(`${baseTaskId}-2`, 'analysis', 'Analyze research findings', 'high', [
|
|
394
|
+
`${baseTaskId}-1`
|
|
395
|
+
]), this.createTaskDefinition(`${baseTaskId}-3`, 'synthesis', 'Synthesize insights and recommendations', 'high', [
|
|
396
|
+
`${baseTaskId}-2`
|
|
397
|
+
]), this.createTaskDefinition(`${baseTaskId}-4`, 'documentation', 'Create research documentation', 'medium', [
|
|
398
|
+
`${baseTaskId}-3`
|
|
399
|
+
]));
|
|
400
|
+
break;
|
|
401
|
+
case 'development':
|
|
402
|
+
tasks.push(this.createTaskDefinition(`${baseTaskId}-1`, 'system-design', 'Design system architecture', 'high', []), this.createTaskDefinition(`${baseTaskId}-2`, 'code-generation', 'Generate core implementation', 'high', [
|
|
403
|
+
`${baseTaskId}-1`
|
|
404
|
+
]), this.createTaskDefinition(`${baseTaskId}-3`, 'unit-testing', 'Create comprehensive tests', 'high', [
|
|
405
|
+
`${baseTaskId}-2`
|
|
406
|
+
]), this.createTaskDefinition(`${baseTaskId}-4`, 'integration-testing', 'Perform integration testing', 'high', [
|
|
407
|
+
`${baseTaskId}-3`
|
|
408
|
+
]), this.createTaskDefinition(`${baseTaskId}-5`, 'code-review', 'Conduct code review', 'medium', [
|
|
409
|
+
`${baseTaskId}-4`
|
|
410
|
+
]), this.createTaskDefinition(`${baseTaskId}-6`, 'documentation', 'Create technical documentation', 'medium', [
|
|
411
|
+
`${baseTaskId}-5`
|
|
412
|
+
]));
|
|
413
|
+
break;
|
|
414
|
+
case 'analysis':
|
|
415
|
+
tasks.push(this.createTaskDefinition(`${baseTaskId}-1`, 'data-collection', 'Collect and prepare data', 'high', []), this.createTaskDefinition(`${baseTaskId}-2`, 'data-analysis', 'Perform statistical analysis', 'high', [
|
|
416
|
+
`${baseTaskId}-1`
|
|
417
|
+
]), this.createTaskDefinition(`${baseTaskId}-3`, 'visualization', 'Create data visualizations', 'medium', [
|
|
418
|
+
`${baseTaskId}-2`
|
|
419
|
+
]), this.createTaskDefinition(`${baseTaskId}-4`, 'reporting', 'Generate analysis report', 'high', [
|
|
420
|
+
`${baseTaskId}-2`,
|
|
421
|
+
`${baseTaskId}-3`
|
|
422
|
+
]));
|
|
423
|
+
break;
|
|
424
|
+
default:
|
|
425
|
+
// Use AI-driven decomposition based on objective description
|
|
426
|
+
tasks.push(this.createTaskDefinition(`${baseTaskId}-1`, 'exploration', 'Explore and understand requirements', 'high', []), this.createTaskDefinition(`${baseTaskId}-2`, 'planning', 'Create detailed execution plan', 'high', [
|
|
427
|
+
`${baseTaskId}-1`
|
|
428
|
+
]), this.createTaskDefinition(`${baseTaskId}-3`, 'execution', 'Execute main tasks', 'high', [
|
|
429
|
+
`${baseTaskId}-2`
|
|
430
|
+
]), this.createTaskDefinition(`${baseTaskId}-4`, 'validation', 'Validate and test results', 'high', [
|
|
431
|
+
`${baseTaskId}-3`
|
|
432
|
+
]), this.createTaskDefinition(`${baseTaskId}-5`, 'completion', 'Finalize and document outcomes', 'medium', [
|
|
433
|
+
`${baseTaskId}-4`
|
|
434
|
+
]));
|
|
435
|
+
}
|
|
436
|
+
// Store tasks in memory
|
|
437
|
+
for (const task of tasks){
|
|
438
|
+
await this.memoryManager.store({
|
|
439
|
+
id: `task:${task.id.id}`,
|
|
440
|
+
agentId: 'orchestrator',
|
|
441
|
+
type: 'task-definition',
|
|
442
|
+
content: JSON.stringify(task),
|
|
443
|
+
namespace: `swarm:${objective.id}`,
|
|
444
|
+
timestamp: new Date(),
|
|
445
|
+
metadata: {
|
|
446
|
+
type: 'task-definition',
|
|
447
|
+
taskType: task.type,
|
|
448
|
+
priority: task.priority,
|
|
449
|
+
status: task.status
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
return tasks;
|
|
454
|
+
}
|
|
455
|
+
createTaskDefinition(id, type, description, priority, dependencies) {
|
|
456
|
+
return {
|
|
457
|
+
id: {
|
|
458
|
+
id,
|
|
459
|
+
swarmId: '',
|
|
460
|
+
sequence: 0,
|
|
461
|
+
priority: this.getPriorityNumber(priority)
|
|
462
|
+
},
|
|
463
|
+
type: type,
|
|
464
|
+
name: `Task: ${type}`,
|
|
465
|
+
description,
|
|
466
|
+
requirements: {
|
|
467
|
+
capabilities: [
|
|
468
|
+
type
|
|
469
|
+
],
|
|
470
|
+
tools: [
|
|
471
|
+
'bash',
|
|
472
|
+
'read',
|
|
473
|
+
'write',
|
|
474
|
+
'edit'
|
|
475
|
+
],
|
|
476
|
+
permissions: [
|
|
477
|
+
'read',
|
|
478
|
+
'write',
|
|
479
|
+
'execute'
|
|
480
|
+
],
|
|
481
|
+
estimatedDuration: 1800000,
|
|
482
|
+
maxDuration: 3600000,
|
|
483
|
+
memoryRequired: 512 * 1024 * 1024
|
|
484
|
+
},
|
|
485
|
+
constraints: {
|
|
486
|
+
dependencies: dependencies.map((depId)=>({
|
|
487
|
+
id: depId,
|
|
488
|
+
swarmId: '',
|
|
489
|
+
sequence: 0,
|
|
490
|
+
priority: 0
|
|
491
|
+
})),
|
|
492
|
+
dependents: [],
|
|
493
|
+
conflicts: [],
|
|
494
|
+
maxRetries: 3,
|
|
495
|
+
timeoutAfter: 3600000
|
|
496
|
+
},
|
|
497
|
+
priority: priority,
|
|
498
|
+
input: {},
|
|
499
|
+
instructions: `Execute ${type} task: ${description}`,
|
|
500
|
+
context: {},
|
|
501
|
+
status: 'created',
|
|
502
|
+
createdAt: new Date(),
|
|
503
|
+
updatedAt: new Date(),
|
|
504
|
+
attempts: [],
|
|
505
|
+
statusHistory: []
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
async spawnRequiredAgents(context) {
|
|
509
|
+
const agents = [];
|
|
510
|
+
const requiredTypes = context.objective.requirements.agentTypes;
|
|
511
|
+
for (const agentType of requiredTypes){
|
|
512
|
+
const agentId = generateId('agent');
|
|
513
|
+
const agent = {
|
|
514
|
+
id: agentId,
|
|
515
|
+
name: `${agentType}-${agentId}`,
|
|
516
|
+
type: agentType,
|
|
517
|
+
status: 'idle',
|
|
518
|
+
capabilities: this.getAgentCapabilities(agentType),
|
|
519
|
+
metrics: {
|
|
520
|
+
tasksCompleted: 0,
|
|
521
|
+
tasksFailed: 0,
|
|
522
|
+
totalDuration: 0,
|
|
523
|
+
lastActivity: new Date()
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
// Register with coordinator
|
|
527
|
+
await this.coordinator.registerAgent(agent.name, agent.type, agent.capabilities);
|
|
528
|
+
agents.push(agent);
|
|
529
|
+
this.logger.info('Agent spawned', {
|
|
530
|
+
swarmId: context.swarmId.id,
|
|
531
|
+
agentId,
|
|
532
|
+
type: agentType,
|
|
533
|
+
capabilities: agent.capabilities
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
return agents;
|
|
537
|
+
}
|
|
538
|
+
async scheduleAndExecuteTasks(context) {
|
|
539
|
+
// Schedule all tasks
|
|
540
|
+
for (const task of context.tasks.values()){
|
|
541
|
+
await context.scheduler.scheduleTask(task);
|
|
542
|
+
}
|
|
543
|
+
// Start execution monitoring
|
|
544
|
+
this.monitorSwarmExecution(context);
|
|
545
|
+
}
|
|
546
|
+
monitorSwarmExecution(context) {
|
|
547
|
+
const monitorInterval = setInterval(async ()=>{
|
|
548
|
+
try {
|
|
549
|
+
// Update progress
|
|
550
|
+
this.updateSwarmProgress(context);
|
|
551
|
+
// Check for completion
|
|
552
|
+
if (this.isSwarmComplete(context)) {
|
|
553
|
+
clearInterval(monitorInterval);
|
|
554
|
+
await this.completeSwarm(context);
|
|
555
|
+
}
|
|
556
|
+
// Check for failure conditions
|
|
557
|
+
if (this.shouldFailSwarm(context)) {
|
|
558
|
+
clearInterval(monitorInterval);
|
|
559
|
+
await this.failSwarm(context, 'Too many failures or timeout');
|
|
560
|
+
}
|
|
561
|
+
} catch (error) {
|
|
562
|
+
this.logger.error('Error monitoring swarm execution', {
|
|
563
|
+
swarmId: context.swarmId.id,
|
|
564
|
+
error
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
}, 5000); // Check every 5 seconds
|
|
568
|
+
}
|
|
569
|
+
updateSwarmProgress(context) {
|
|
570
|
+
const tasks = Array.from(context.tasks.values());
|
|
571
|
+
const totalTasks = tasks.length;
|
|
572
|
+
const completedTasks = tasks.filter((t)=>t.status === 'completed').length;
|
|
573
|
+
const failedTasks = tasks.filter((t)=>t.status === 'failed').length;
|
|
574
|
+
const runningTasks = tasks.filter((t)=>t.status === 'running').length;
|
|
575
|
+
context.objective.progress = {
|
|
576
|
+
totalTasks,
|
|
577
|
+
completedTasks,
|
|
578
|
+
failedTasks,
|
|
579
|
+
runningTasks,
|
|
580
|
+
percentComplete: totalTasks > 0 ? completedTasks / totalTasks * 100 : 0,
|
|
581
|
+
estimatedCompletion: this.estimateCompletion(context),
|
|
582
|
+
timeRemaining: this.calculateTimeRemaining(context),
|
|
583
|
+
averageQuality: this.calculateAverageQuality(context),
|
|
584
|
+
passedReviews: 0,
|
|
585
|
+
passedTests: 0,
|
|
586
|
+
resourceUtilization: {},
|
|
587
|
+
costSpent: 0,
|
|
588
|
+
activeAgents: Array.from(context.agents.values()).filter((a)=>a.status === 'busy').length,
|
|
589
|
+
idleAgents: Array.from(context.agents.values()).filter((a)=>a.status === 'idle').length,
|
|
590
|
+
busyAgents: Array.from(context.agents.values()).filter((a)=>a.status === 'busy').length
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
isSwarmComplete(context) {
|
|
594
|
+
const tasks = Array.from(context.tasks.values());
|
|
595
|
+
return tasks.every((task)=>task.status === 'completed' || task.status === 'failed');
|
|
596
|
+
}
|
|
597
|
+
shouldFailSwarm(context) {
|
|
598
|
+
const tasks = Array.from(context.tasks.values());
|
|
599
|
+
const failedTasks = tasks.filter((t)=>t.status === 'failed').length;
|
|
600
|
+
const totalTasks = tasks.length;
|
|
601
|
+
// Fail if too many tasks failed
|
|
602
|
+
if (failedTasks > context.objective.constraints.allowedFailures) {
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
// Fail if deadline exceeded
|
|
606
|
+
if (context.objective.constraints.deadline && new Date() > context.objective.constraints.deadline) {
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
return false;
|
|
610
|
+
}
|
|
611
|
+
async completeSwarm(context) {
|
|
612
|
+
context.objective.status = 'completed';
|
|
613
|
+
context.objective.completedAt = new Date();
|
|
614
|
+
context.endTime = new Date();
|
|
615
|
+
// Collect results
|
|
616
|
+
const results = await this.collectSwarmResults(context);
|
|
617
|
+
context.objective.results = results;
|
|
618
|
+
this.logger.info('Swarm completed successfully', {
|
|
619
|
+
swarmId: context.swarmId.id,
|
|
620
|
+
duration: context.endTime.getTime() - context.startTime.getTime(),
|
|
621
|
+
totalTasks: context.tasks.size,
|
|
622
|
+
completedTasks: results.objectivesMet.length
|
|
623
|
+
});
|
|
624
|
+
this.emit('swarm:completed', {
|
|
625
|
+
swarmId: context.swarmId.id,
|
|
626
|
+
context,
|
|
627
|
+
results
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
async failSwarm(context, reason) {
|
|
631
|
+
context.objective.status = 'failed';
|
|
632
|
+
context.endTime = new Date();
|
|
633
|
+
this.logger.error('Swarm failed', {
|
|
634
|
+
swarmId: context.swarmId.id,
|
|
635
|
+
reason,
|
|
636
|
+
duration: context.endTime.getTime() - context.startTime.getTime()
|
|
637
|
+
});
|
|
638
|
+
this.emit('swarm:failed', {
|
|
639
|
+
swarmId: context.swarmId.id,
|
|
640
|
+
context,
|
|
641
|
+
reason
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
async collectSwarmResults(context) {
|
|
645
|
+
const tasks = Array.from(context.tasks.values());
|
|
646
|
+
const completedTasks = tasks.filter((t)=>t.status === 'completed');
|
|
647
|
+
const failedTasks = tasks.filter((t)=>t.status === 'failed');
|
|
648
|
+
return {
|
|
649
|
+
outputs: {},
|
|
650
|
+
artifacts: {},
|
|
651
|
+
reports: {},
|
|
652
|
+
overallQuality: this.calculateAverageQuality(context),
|
|
653
|
+
qualityByTask: {},
|
|
654
|
+
totalExecutionTime: context.endTime.getTime() - context.startTime.getTime(),
|
|
655
|
+
resourcesUsed: {},
|
|
656
|
+
efficiency: completedTasks.length / tasks.length,
|
|
657
|
+
objectivesMet: completedTasks.map((t)=>t.id),
|
|
658
|
+
objectivesFailed: failedTasks.map((t)=>t.id),
|
|
659
|
+
improvements: [],
|
|
660
|
+
nextActions: []
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
async storeFinalResults(context) {
|
|
664
|
+
await this.memoryManager.store({
|
|
665
|
+
id: `results:${context.swarmId.id}`,
|
|
666
|
+
agentId: 'orchestrator',
|
|
667
|
+
type: 'swarm-results',
|
|
668
|
+
content: JSON.stringify(context.objective.results),
|
|
669
|
+
namespace: `swarm:${context.swarmId.id}`,
|
|
670
|
+
timestamp: new Date(),
|
|
671
|
+
metadata: {
|
|
672
|
+
type: 'swarm-results',
|
|
673
|
+
status: context.objective.status,
|
|
674
|
+
duration: context.endTime ? context.endTime.getTime() - context.startTime.getTime() : 0,
|
|
675
|
+
taskCount: context.tasks.size,
|
|
676
|
+
agentCount: context.agents.size
|
|
677
|
+
}
|
|
678
|
+
});
|
|
679
|
+
}
|
|
680
|
+
async terminateAgent(agentId, reason) {
|
|
681
|
+
// Implementation would terminate actual agent processes
|
|
682
|
+
this.logger.info('Agent terminated', {
|
|
683
|
+
agentId,
|
|
684
|
+
reason
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
getRequiredAgentTypes(strategy) {
|
|
688
|
+
switch(strategy){
|
|
689
|
+
case 'research':
|
|
690
|
+
return [
|
|
691
|
+
'researcher',
|
|
692
|
+
'analyst',
|
|
693
|
+
'documenter'
|
|
694
|
+
];
|
|
695
|
+
case 'development':
|
|
696
|
+
return [
|
|
697
|
+
'architect',
|
|
698
|
+
'coder',
|
|
699
|
+
'tester',
|
|
700
|
+
'reviewer'
|
|
701
|
+
];
|
|
702
|
+
case 'analysis':
|
|
703
|
+
return [
|
|
704
|
+
'analyst',
|
|
705
|
+
'researcher',
|
|
706
|
+
'documenter'
|
|
707
|
+
];
|
|
708
|
+
default:
|
|
709
|
+
return [
|
|
710
|
+
'coordinator',
|
|
711
|
+
'researcher',
|
|
712
|
+
'coder',
|
|
713
|
+
'analyst'
|
|
714
|
+
];
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
getAgentCapabilities(agentType) {
|
|
718
|
+
const capabilityMap = {
|
|
719
|
+
coordinator: [
|
|
720
|
+
'coordination',
|
|
721
|
+
'planning',
|
|
722
|
+
'monitoring'
|
|
723
|
+
],
|
|
724
|
+
researcher: [
|
|
725
|
+
'research',
|
|
726
|
+
'data-gathering',
|
|
727
|
+
'web-search'
|
|
728
|
+
],
|
|
729
|
+
coder: [
|
|
730
|
+
'code-generation',
|
|
731
|
+
'debugging',
|
|
732
|
+
'testing'
|
|
733
|
+
],
|
|
734
|
+
analyst: [
|
|
735
|
+
'data-analysis',
|
|
736
|
+
'visualization',
|
|
737
|
+
'reporting'
|
|
738
|
+
],
|
|
739
|
+
architect: [
|
|
740
|
+
'system-design',
|
|
741
|
+
'architecture-review',
|
|
742
|
+
'documentation'
|
|
743
|
+
],
|
|
744
|
+
tester: [
|
|
745
|
+
'testing',
|
|
746
|
+
'quality-assurance',
|
|
747
|
+
'automation'
|
|
748
|
+
],
|
|
749
|
+
reviewer: [
|
|
750
|
+
'code-review',
|
|
751
|
+
'quality-review',
|
|
752
|
+
'validation'
|
|
753
|
+
],
|
|
754
|
+
optimizer: [
|
|
755
|
+
'performance-optimization',
|
|
756
|
+
'resource-optimization'
|
|
757
|
+
],
|
|
758
|
+
documenter: [
|
|
759
|
+
'documentation',
|
|
760
|
+
'reporting',
|
|
761
|
+
'knowledge-management'
|
|
762
|
+
],
|
|
763
|
+
monitor: [
|
|
764
|
+
'monitoring',
|
|
765
|
+
'alerting',
|
|
766
|
+
'diagnostics'
|
|
767
|
+
],
|
|
768
|
+
specialist: [
|
|
769
|
+
'domain-expertise',
|
|
770
|
+
'specialized-tasks'
|
|
771
|
+
]
|
|
772
|
+
};
|
|
773
|
+
return capabilityMap[agentType] || [
|
|
774
|
+
'general'
|
|
775
|
+
];
|
|
776
|
+
}
|
|
777
|
+
estimateCompletion(context) {
|
|
778
|
+
// Simple estimation based on current progress
|
|
779
|
+
const progress = context.objective.progress.percentComplete;
|
|
780
|
+
const elapsed = Date.now() - context.startTime.getTime();
|
|
781
|
+
const totalEstimated = progress > 0 ? elapsed / progress * 100 : elapsed * 2;
|
|
782
|
+
return new Date(context.startTime.getTime() + totalEstimated);
|
|
783
|
+
}
|
|
784
|
+
calculateTimeRemaining(context) {
|
|
785
|
+
return Math.max(0, this.estimateCompletion(context).getTime() - Date.now());
|
|
786
|
+
}
|
|
787
|
+
calculateAverageQuality(context) {
|
|
788
|
+
// Placeholder implementation
|
|
789
|
+
return 0.85;
|
|
790
|
+
}
|
|
791
|
+
getPriorityNumber(priority) {
|
|
792
|
+
switch(priority){
|
|
793
|
+
case 'high':
|
|
794
|
+
return 1;
|
|
795
|
+
case 'medium':
|
|
796
|
+
return 2;
|
|
797
|
+
case 'low':
|
|
798
|
+
return 3;
|
|
799
|
+
default:
|
|
800
|
+
return 2;
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
startHealthChecks() {
|
|
804
|
+
this.healthCheckInterval = setInterval(async ()=>{
|
|
805
|
+
try {
|
|
806
|
+
const health = await this.performHealthCheck();
|
|
807
|
+
if (!health.healthy) {
|
|
808
|
+
this.logger.warn('Health check failed', {
|
|
809
|
+
issues: health.issues
|
|
810
|
+
});
|
|
811
|
+
this.emit('health:warning', health);
|
|
812
|
+
}
|
|
813
|
+
} catch (error) {
|
|
814
|
+
this.logger.error('Health check error', error);
|
|
815
|
+
}
|
|
816
|
+
}, 60000); // Every minute
|
|
817
|
+
}
|
|
818
|
+
startMetricsCollection() {
|
|
819
|
+
this.metricsCollectionInterval = setInterval(()=>{
|
|
820
|
+
try {
|
|
821
|
+
this.updateGlobalMetrics();
|
|
822
|
+
} catch (error) {
|
|
823
|
+
this.logger.error('Metrics collection error', error);
|
|
824
|
+
}
|
|
825
|
+
}, 10000); // Every 10 seconds
|
|
826
|
+
}
|
|
827
|
+
updateGlobalMetrics() {
|
|
828
|
+
const swarms = Array.from(this.activeSwarms.values());
|
|
829
|
+
this.globalMetrics = {
|
|
830
|
+
throughput: this.calculateGlobalThroughput(swarms),
|
|
831
|
+
latency: this.calculateGlobalLatency(swarms),
|
|
832
|
+
efficiency: this.calculateGlobalEfficiency(swarms),
|
|
833
|
+
reliability: this.calculateGlobalReliability(swarms),
|
|
834
|
+
averageQuality: this.calculateGlobalQuality(swarms),
|
|
835
|
+
defectRate: this.calculateGlobalDefectRate(swarms),
|
|
836
|
+
reworkRate: this.calculateGlobalReworkRate(swarms),
|
|
837
|
+
resourceUtilization: this.calculateGlobalResourceUtilization(swarms),
|
|
838
|
+
costEfficiency: this.calculateGlobalCostEfficiency(swarms),
|
|
839
|
+
agentUtilization: this.calculateGlobalAgentUtilization(swarms),
|
|
840
|
+
agentSatisfaction: 0.8,
|
|
841
|
+
collaborationEffectiveness: 0.85,
|
|
842
|
+
scheduleVariance: this.calculateGlobalScheduleVariance(swarms),
|
|
843
|
+
deadlineAdherence: this.calculateGlobalDeadlineAdherence(swarms)
|
|
844
|
+
};
|
|
845
|
+
}
|
|
846
|
+
calculateGlobalThroughput(swarms) {
|
|
847
|
+
return swarms.reduce((sum, ctx)=>sum + ctx.objective.progress.completedTasks, 0);
|
|
848
|
+
}
|
|
849
|
+
calculateGlobalLatency(swarms) {
|
|
850
|
+
// Average task completion time
|
|
851
|
+
return 1200000; // 20 minutes placeholder
|
|
852
|
+
}
|
|
853
|
+
calculateGlobalEfficiency(swarms) {
|
|
854
|
+
const totalTasks = swarms.reduce((sum, ctx)=>sum + ctx.objective.progress.totalTasks, 0);
|
|
855
|
+
const completedTasks = swarms.reduce((sum, ctx)=>sum + ctx.objective.progress.completedTasks, 0);
|
|
856
|
+
return totalTasks > 0 ? completedTasks / totalTasks : 0;
|
|
857
|
+
}
|
|
858
|
+
calculateGlobalReliability(swarms) {
|
|
859
|
+
const totalSwarms = swarms.length;
|
|
860
|
+
const successfulSwarms = swarms.filter((ctx)=>ctx.objective.status === 'completed').length;
|
|
861
|
+
return totalSwarms > 0 ? successfulSwarms / totalSwarms : 1;
|
|
862
|
+
}
|
|
863
|
+
calculateGlobalQuality(swarms) {
|
|
864
|
+
return swarms.reduce((sum, ctx)=>sum + ctx.objective.progress.averageQuality, 0) / Math.max(swarms.length, 1);
|
|
865
|
+
}
|
|
866
|
+
calculateGlobalDefectRate(swarms) {
|
|
867
|
+
return 0.05; // Placeholder
|
|
868
|
+
}
|
|
869
|
+
calculateGlobalReworkRate(swarms) {
|
|
870
|
+
return 0.1; // Placeholder
|
|
871
|
+
}
|
|
872
|
+
calculateGlobalResourceUtilization(swarms) {
|
|
873
|
+
return {
|
|
874
|
+
cpu: 0.6,
|
|
875
|
+
memory: 0.7,
|
|
876
|
+
disk: 0.3,
|
|
877
|
+
network: 0.2
|
|
878
|
+
};
|
|
879
|
+
}
|
|
880
|
+
calculateGlobalCostEfficiency(swarms) {
|
|
881
|
+
return 0.8; // Placeholder
|
|
882
|
+
}
|
|
883
|
+
calculateGlobalAgentUtilization(swarms) {
|
|
884
|
+
const totalAgents = swarms.reduce((sum, ctx)=>sum + ctx.agents.size, 0);
|
|
885
|
+
const busyAgents = swarms.reduce((sum, ctx)=>sum + ctx.objective.progress.busyAgents, 0);
|
|
886
|
+
return totalAgents > 0 ? busyAgents / totalAgents : 0;
|
|
887
|
+
}
|
|
888
|
+
calculateGlobalScheduleVariance(swarms) {
|
|
889
|
+
return 0.1; // Placeholder
|
|
890
|
+
}
|
|
891
|
+
calculateGlobalDeadlineAdherence(swarms) {
|
|
892
|
+
return 0.9; // Placeholder
|
|
893
|
+
}
|
|
894
|
+
initializeProgress() {
|
|
895
|
+
return {
|
|
896
|
+
totalTasks: 0,
|
|
897
|
+
completedTasks: 0,
|
|
898
|
+
failedTasks: 0,
|
|
899
|
+
runningTasks: 0,
|
|
900
|
+
estimatedCompletion: new Date(),
|
|
901
|
+
timeRemaining: 0,
|
|
902
|
+
percentComplete: 0,
|
|
903
|
+
averageQuality: 0,
|
|
904
|
+
passedReviews: 0,
|
|
905
|
+
passedTests: 0,
|
|
906
|
+
resourceUtilization: {},
|
|
907
|
+
costSpent: 0,
|
|
908
|
+
activeAgents: 0,
|
|
909
|
+
idleAgents: 0,
|
|
910
|
+
busyAgents: 0
|
|
911
|
+
};
|
|
912
|
+
}
|
|
913
|
+
initializeMetrics() {
|
|
914
|
+
return {
|
|
915
|
+
throughput: 0,
|
|
916
|
+
latency: 0,
|
|
917
|
+
efficiency: 0,
|
|
918
|
+
reliability: 1,
|
|
919
|
+
averageQuality: 0,
|
|
920
|
+
defectRate: 0,
|
|
921
|
+
reworkRate: 0,
|
|
922
|
+
resourceUtilization: {},
|
|
923
|
+
costEfficiency: 1,
|
|
924
|
+
agentUtilization: 0,
|
|
925
|
+
agentSatisfaction: 0,
|
|
926
|
+
collaborationEffectiveness: 0,
|
|
927
|
+
scheduleVariance: 0,
|
|
928
|
+
deadlineAdherence: 1
|
|
929
|
+
};
|
|
930
|
+
}
|
|
931
|
+
createDefaultConfig(config) {
|
|
932
|
+
return {
|
|
933
|
+
name: 'Advanced Swarm',
|
|
934
|
+
description: 'Advanced swarm orchestration system',
|
|
935
|
+
version: '1.0.0',
|
|
936
|
+
mode: 'hybrid',
|
|
937
|
+
strategy: 'auto',
|
|
938
|
+
coordinationStrategy: {
|
|
939
|
+
name: 'adaptive',
|
|
940
|
+
description: 'Adaptive coordination strategy',
|
|
941
|
+
agentSelection: 'capability-based',
|
|
942
|
+
taskScheduling: 'priority',
|
|
943
|
+
loadBalancing: 'work-stealing',
|
|
944
|
+
faultTolerance: 'retry',
|
|
945
|
+
communication: 'event-driven'
|
|
946
|
+
},
|
|
947
|
+
maxAgents: 10,
|
|
948
|
+
maxTasks: 100,
|
|
949
|
+
maxDuration: 7200000,
|
|
950
|
+
taskTimeoutMinutes: 30,
|
|
951
|
+
resourceLimits: {
|
|
952
|
+
memory: 2048,
|
|
953
|
+
cpu: 4,
|
|
954
|
+
disk: 10240,
|
|
955
|
+
network: 1000
|
|
956
|
+
},
|
|
957
|
+
qualityThreshold: 0.8,
|
|
958
|
+
reviewRequired: true,
|
|
959
|
+
testingRequired: true,
|
|
960
|
+
monitoring: {
|
|
961
|
+
metricsEnabled: true,
|
|
962
|
+
loggingEnabled: true,
|
|
963
|
+
tracingEnabled: true,
|
|
964
|
+
metricsInterval: 10000,
|
|
965
|
+
heartbeatInterval: 5000,
|
|
966
|
+
healthCheckInterval: 60000,
|
|
967
|
+
retentionPeriod: 86400000,
|
|
968
|
+
maxLogSize: 100 * 1024 * 1024,
|
|
969
|
+
maxMetricPoints: 10000,
|
|
970
|
+
alertingEnabled: true,
|
|
971
|
+
alertThresholds: {},
|
|
972
|
+
exportEnabled: false,
|
|
973
|
+
exportFormat: 'json',
|
|
974
|
+
exportDestination: ''
|
|
975
|
+
},
|
|
976
|
+
memory: {
|
|
977
|
+
namespace: 'swarm',
|
|
978
|
+
partitions: [],
|
|
979
|
+
permissions: {
|
|
980
|
+
read: 'swarm',
|
|
981
|
+
write: 'swarm',
|
|
982
|
+
delete: 'system',
|
|
983
|
+
share: 'team'
|
|
984
|
+
},
|
|
985
|
+
persistent: true,
|
|
986
|
+
backupEnabled: true,
|
|
987
|
+
distributed: false,
|
|
988
|
+
consistency: 'strong',
|
|
989
|
+
cacheEnabled: true,
|
|
990
|
+
compressionEnabled: false
|
|
991
|
+
},
|
|
992
|
+
security: {
|
|
993
|
+
authenticationRequired: false,
|
|
994
|
+
authorizationRequired: false,
|
|
995
|
+
encryptionEnabled: false,
|
|
996
|
+
defaultPermissions: [
|
|
997
|
+
'read',
|
|
998
|
+
'write'
|
|
999
|
+
],
|
|
1000
|
+
adminRoles: [
|
|
1001
|
+
'admin'
|
|
1002
|
+
],
|
|
1003
|
+
auditEnabled: true,
|
|
1004
|
+
auditLevel: 'info',
|
|
1005
|
+
inputValidation: true,
|
|
1006
|
+
outputSanitization: true
|
|
1007
|
+
},
|
|
1008
|
+
performance: {
|
|
1009
|
+
maxConcurrency: 10,
|
|
1010
|
+
defaultTimeout: 300000,
|
|
1011
|
+
cacheEnabled: true,
|
|
1012
|
+
cacheSize: 1000,
|
|
1013
|
+
cacheTtl: 3600,
|
|
1014
|
+
optimizationEnabled: true,
|
|
1015
|
+
adaptiveScheduling: true,
|
|
1016
|
+
predictiveLoading: false,
|
|
1017
|
+
resourcePooling: true,
|
|
1018
|
+
connectionPooling: true,
|
|
1019
|
+
memoryPooling: false
|
|
1020
|
+
},
|
|
1021
|
+
maxRetries: 3,
|
|
1022
|
+
autoScaling: true,
|
|
1023
|
+
loadBalancing: true,
|
|
1024
|
+
faultTolerance: true,
|
|
1025
|
+
realTimeMonitoring: true,
|
|
1026
|
+
maxThroughput: 100,
|
|
1027
|
+
latencyTarget: 1000,
|
|
1028
|
+
reliabilityTarget: 0.95,
|
|
1029
|
+
mcpIntegration: true,
|
|
1030
|
+
hiveIntegration: false,
|
|
1031
|
+
claudeCodeIntegration: true,
|
|
1032
|
+
neuralProcessing: false,
|
|
1033
|
+
learningEnabled: false,
|
|
1034
|
+
adaptiveScheduling: true,
|
|
1035
|
+
...config
|
|
1036
|
+
};
|
|
1037
|
+
}
|
|
1038
|
+
setupEventHandlers() {
|
|
1039
|
+
// Swarm lifecycle events
|
|
1040
|
+
this.on('swarm:created', (data)=>{
|
|
1041
|
+
this.logger.info('Swarm lifecycle event: created', data);
|
|
1042
|
+
});
|
|
1043
|
+
this.on('swarm:started', (data)=>{
|
|
1044
|
+
this.logger.info('Swarm lifecycle event: started', data);
|
|
1045
|
+
});
|
|
1046
|
+
this.on('swarm:completed', (data)=>{
|
|
1047
|
+
this.logger.info('Swarm lifecycle event: completed', data);
|
|
1048
|
+
});
|
|
1049
|
+
this.on('swarm:failed', (data)=>{
|
|
1050
|
+
this.logger.error('Swarm lifecycle event: failed', data);
|
|
1051
|
+
});
|
|
1052
|
+
// Health monitoring events
|
|
1053
|
+
this.on('health:warning', (data)=>{
|
|
1054
|
+
this.logger.warn('Health warning detected', data);
|
|
1055
|
+
});
|
|
1056
|
+
// Coordinator events
|
|
1057
|
+
this.coordinator.on('objective:completed', (objective)=>{
|
|
1058
|
+
this.logger.info('Coordinator objective completed', {
|
|
1059
|
+
objectiveId: objective.id
|
|
1060
|
+
});
|
|
1061
|
+
});
|
|
1062
|
+
this.coordinator.on('task:completed', (data)=>{
|
|
1063
|
+
this.logger.info('Coordinator task completed', data);
|
|
1064
|
+
});
|
|
1065
|
+
this.coordinator.on('agent:registered', (agent)=>{
|
|
1066
|
+
this.logger.info('Coordinator agent registered', {
|
|
1067
|
+
agentId: agent.id
|
|
1068
|
+
});
|
|
1069
|
+
});
|
|
1070
|
+
}
|
|
1071
|
+
constructor(config = {}){
|
|
1072
|
+
super(), _define_property(this, "logger", void 0), _define_property(this, "config", void 0), _define_property(this, "activeSwarms", new Map()), _define_property(this, "globalMetrics", void 0), _define_property(this, "coordinator", void 0), _define_property(this, "memoryManager", void 0), _define_property(this, "isRunning", false), _define_property(this, "healthCheckInterval", void 0), _define_property(this, "metricsCollectionInterval", void 0);
|
|
1073
|
+
this.logger = new Logger('AdvancedSwarmOrchestrator');
|
|
1074
|
+
this.config = this.createDefaultConfig(config);
|
|
1075
|
+
// Initialize components
|
|
1076
|
+
this.coordinator = new SwarmCoordinator({
|
|
1077
|
+
maxAgents: this.config.maxAgents,
|
|
1078
|
+
maxConcurrentTasks: this.config.maxConcurrentTasks,
|
|
1079
|
+
taskTimeout: this.config.taskTimeoutMinutes * 60 * 1000,
|
|
1080
|
+
enableMonitoring: this.config.realTimeMonitoring,
|
|
1081
|
+
coordinationStrategy: this.config.coordinationStrategy.name
|
|
1082
|
+
});
|
|
1083
|
+
this.memoryManager = new MemoryManager({
|
|
1084
|
+
backend: 'sqlite',
|
|
1085
|
+
namespace: 'swarm-orchestrator',
|
|
1086
|
+
cacheSizeMB: 100,
|
|
1087
|
+
syncOnExit: true,
|
|
1088
|
+
maxEntries: 50000,
|
|
1089
|
+
ttlMinutes: 1440
|
|
1090
|
+
}, this.coordinator, this.logger);
|
|
1091
|
+
this.globalMetrics = this.initializeMetrics();
|
|
1092
|
+
this.setupEventHandlers();
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
export default AdvancedSwarmOrchestrator;
|