UNPKG

claude-flow

Version:

Enterprise-grade AI agent orchestration with WASM-powered ReasoningBank memory and AgentDB vector database (always uses latest agentic-flow)

238 lines (193 loc) • 7.93 kB
#!/usr/bin/env -S deno run --allow-all /** * Test script for advanced coordination features * Demonstrates: * - Resource management and deadlock detection * - Task dependencies and scheduling * - Work stealing and load balancing * - Circuit breakers and fault tolerance */ import { EventBus } from '../src/core/event-bus.ts'; import { ConsoleLogger } from '../src/core/logger.ts'; import { CoordinationManager } from '../src/coordination/manager.ts'; import { Task, SystemEvents } from '../src/utils/types.ts'; import { delay } from '../src/utils/helpers.ts'; async function testCoordinationFeatures() { console.log('šŸ”„ Testing Claude-Flow Coordination Features\n'); const eventBus = new EventBus(); const logger = new ConsoleLogger('coord-test'); const config = { maxRetries: 3, retryDelay: 1000, resourceTimeout: 5000, deadlockDetection: true, priorityLevels: 5, }; const coordinator = new CoordinationManager(config, eventBus, logger); try { await coordinator.initialize(); console.log('āœ… Coordination manager initialized\n'); // Test 1: Resource Management console.log('šŸ“‹ Test 1: Resource Management'); console.log('Testing resource acquisition and release...'); // Agent 1 acquires resource A await coordinator.acquireResource('resource-A', 'agent-1'); console.log('āœ… Agent 1 acquired resource A'); // Agent 2 tries to acquire resource A (should wait) const acquire2Promise = coordinator.acquireResource('resource-A', 'agent-2'); console.log('ā³ Agent 2 waiting for resource A...'); // Release after delay setTimeout(async () => { await coordinator.releaseResource('resource-A', 'agent-1'); console.log('āœ… Agent 1 released resource A'); }, 1000); await acquire2Promise; console.log('āœ… Agent 2 acquired resource A\n'); // Test 2: Task Dependencies console.log('šŸ“‹ Test 2: Task Dependencies'); const parentTask: Task = { id: 'parent-task', type: 'process', description: 'Parent task', priority: 90, dependencies: [], status: 'pending', input: {}, createdAt: new Date(), }; const childTask: Task = { id: 'child-task', type: 'process', description: 'Child task (depends on parent)', priority: 80, dependencies: ['parent-task'], status: 'pending', input: {}, createdAt: new Date(), }; await coordinator.assignTask(parentTask, 'agent-1'); console.log('āœ… Assigned parent task to agent-1'); try { await coordinator.assignTask(childTask, 'agent-2'); } catch (error) { console.log('āœ… Child task correctly blocked by dependency'); } // Complete parent task eventBus.emit(SystemEvents.TASK_COMPLETED, { taskId: 'parent-task', result: { data: 'parent result' }, }); await delay(100); // Now child should be assignable await coordinator.assignTask(childTask, 'agent-2'); console.log('āœ… Child task assigned after parent completion\n'); // Test 3: Deadlock Detection console.log('šŸ“‹ Test 3: Deadlock Detection'); console.log('Creating potential deadlock scenario...'); // Agent 3 holds B, wants A await coordinator.acquireResource('resource-B', 'agent-3'); const agent3WantsA = coordinator.acquireResource('resource-A', 'agent-3') .catch(() => console.log('āœ… Deadlock detected and resolved')); // Agent 2 holds A, wants B (creates cycle) const agent2WantsB = coordinator.acquireResource('resource-B', 'agent-2') .catch(() => console.log('āœ… Agent 2 resource request failed')); // Wait for deadlock detection await delay(2000); // Clean up resources await coordinator.releaseResource('resource-A', 'agent-2'); await coordinator.releaseResource('resource-B', 'agent-3'); console.log('āœ… Resources cleaned up\n'); // Test 4: Advanced Scheduling console.log('šŸ“‹ Test 4: Advanced Scheduling Features'); coordinator.enableAdvancedScheduling(); console.log('āœ… Advanced scheduling enabled'); // Create tasks with different priorities const highPriorityTask: Task = { id: 'high-priority', type: 'urgent', description: 'High priority task', priority: 100, dependencies: [], status: 'pending', input: {}, createdAt: new Date(), }; const lowPriorityTask: Task = { id: 'low-priority', type: 'batch', description: 'Low priority task', priority: 10, dependencies: [], status: 'pending', input: {}, createdAt: new Date(), }; await coordinator.assignTask(lowPriorityTask, 'agent-1'); await coordinator.assignTask(highPriorityTask, 'agent-1'); console.log('āœ… Tasks assigned with priority scheduling\n'); // Test 5: Conflict Resolution console.log('šŸ“‹ Test 5: Conflict Resolution'); // Report a resource conflict await coordinator.reportConflict('resource', 'shared-resource', ['agent-1', 'agent-2']); console.log('āœ… Resource conflict reported and auto-resolved'); // Report a task conflict await coordinator.reportConflict('task', 'disputed-task', ['agent-1', 'agent-2']); console.log('āœ… Task conflict reported and auto-resolved\n'); // Test 6: Health and Metrics console.log('šŸ“‹ Test 6: Health Monitoring and Metrics'); const health = await coordinator.getHealthStatus(); console.log('šŸ„ Health Status:', health.healthy ? 'Healthy' : 'Unhealthy'); const metrics = await coordinator.getCoordinationMetrics(); console.log('šŸ“Š Coordination Metrics:'); console.log(` Tasks assigned: ${metrics.assigned || 0}`); console.log(` Resources managed: ${metrics.resources || 0}`); console.log(` Conflicts resolved: ${metrics.conflicts?.resolved || 0}`); console.log(` Advanced scheduling: ${metrics.advancedScheduling ? 'Enabled' : 'Disabled'}`); // Test 7: Message Routing console.log('\nšŸ“‹ Test 7: Inter-Agent Messaging'); // Set up message handler let messagesReceived = 0; eventBus.on('message:agent-2', (data: any) => { messagesReceived++; console.log(`āœ… Agent 2 received message: ${data.message.content}`); }); // Send messages await coordinator.sendMessage('agent-1', 'agent-2', { type: 'status', content: 'Task completed' }); await coordinator.sendMessage('agent-1', 'agent-2', { type: 'data', content: 'Results available' }); await delay(100); console.log(`āœ… Sent and received ${messagesReceived} messages\n`); // Perform maintenance console.log('šŸ“‹ Performing maintenance...'); await coordinator.performMaintenance(); console.log('āœ… Maintenance completed'); // Shutdown await coordinator.shutdown(); console.log('\nāœ… Coordination manager shut down successfully'); // Summary console.log('\n' + '='.repeat(50)); console.log('āœ… ALL COORDINATION TESTS PASSED!'); console.log('='.repeat(50)); console.log('\nFeatures tested:'); console.log(' āœ“ Resource management with mutual exclusion'); console.log(' āœ“ Task dependencies and scheduling'); console.log(' āœ“ Deadlock detection and prevention'); console.log(' āœ“ Advanced scheduling with priorities'); console.log(' āœ“ Conflict detection and resolution'); console.log(' āœ“ Health monitoring and metrics'); console.log(' āœ“ Inter-agent messaging'); console.log(' āœ“ System maintenance'); } catch (error) { console.error('āŒ Test failed:', error); throw error; } } // Run the test if (import.meta.main) { testCoordinationFeatures().catch(console.error); }