claude-flow
Version:
Enterprise-grade AI agent orchestration with ruv-swarm integration (Alpha Release)
330 lines (264 loc) • 8.83 kB
text/typescript
/**
* MCPToolWrapper Class
*
* Wraps all MCP tools for use within the Hive Mind system,
* providing a unified interface for swarm coordination, neural processing,
* and memory management.
*/
import { EventEmitter } from 'events';
import { exec } from 'child_process';
import { promisify } from 'util';
import { getErrorMessage } from '../../utils/type-guards.js';
const execAsync = promisify(exec);
interface MCPToolResponse {
success: boolean;
data?: any;
error?: string;
}
export class MCPToolWrapper extends EventEmitter {
private toolPrefix = 'mcp__ruv-swarm__';
private isInitialized = false;
constructor() {
super();
}
/**
* Initialize MCP tools
*/
async initialize(): Promise<void> {
try {
// Check if MCP tools are available
await this.checkToolAvailability();
this.isInitialized = true;
this.emit('initialized');
} catch (error) {
this.emit('error', error);
throw error;
}
}
/**
* Check if MCP tools are available
*/
private async checkToolAvailability(): Promise<void> {
try {
const { stdout } = await execAsync('npx ruv-swarm --version');
if (!stdout) {
throw new Error('ruv-swarm MCP tools not found');
}
} catch (error) {
throw new Error('MCP tools not available. Please ensure ruv-swarm is installed.');
}
}
/**
* Execute MCP tool via CLI
*/
private async executeTool(toolName: string, params: any): Promise<MCPToolResponse> {
try {
const command = `npx ruv-swarm mcp-execute ${toolName} '${JSON.stringify(params)}'`;
const { stdout, stderr } = await execAsync(command);
if (stderr) {
return { success: false, error: stderr };
}
const result = JSON.parse(stdout);
return { success: true, data: result };
} catch (error) {
return { success: false, error: getErrorMessage(error) };
}
}
// Swarm coordination tools
async initSwarm(params: {
topology: string;
maxAgents?: number;
strategy?: string;
}): Promise<any> {
return this.executeTool('swarm_init', params);
}
async spawnAgent(params: {
type: string;
name?: string;
swarmId?: string;
capabilities?: string[];
}): Promise<any> {
return this.executeTool('agent_spawn', params);
}
async orchestrateTask(params: {
task: string;
priority?: string;
strategy?: string;
dependencies?: string[];
}): Promise<any> {
return this.executeTool('task_orchestrate', params);
}
async getSwarmStatus(swarmId?: string): Promise<any> {
return this.executeTool('swarm_status', { swarmId });
}
async monitorSwarm(params: { swarmId?: string; interval?: number }): Promise<any> {
return this.executeTool('swarm_monitor', params);
}
// Neural and pattern tools
async analyzePattern(params: {
action: string;
operation?: string;
metadata?: any;
}): Promise<any> {
return this.executeTool('neural_patterns', params);
}
async trainNeural(params: {
pattern_type: string;
training_data: string;
epochs?: number;
}): Promise<any> {
return this.executeTool('neural_train', params);
}
async predict(params: { modelId: string; input: string }): Promise<any> {
return this.executeTool('neural_predict', params);
}
async getNeuralStatus(modelId?: string): Promise<any> {
return this.executeTool('neural_status', { modelId });
}
// Memory management tools
async storeMemory(params: {
action: 'store';
key: string;
value: string;
namespace?: string;
ttl?: number;
}): Promise<any> {
return this.executeTool('memory_usage', params);
}
async retrieveMemory(params: {
action: 'retrieve';
key: string;
namespace?: string;
}): Promise<any> {
const result = await this.executeTool('memory_usage', params);
return result.success ? result.data : null;
}
async searchMemory(params: {
pattern: string;
namespace?: string;
limit?: number;
}): Promise<any> {
return this.executeTool('memory_search', params);
}
async deleteMemory(params: { action: 'delete'; key: string; namespace?: string }): Promise<any> {
return this.executeTool('memory_usage', params);
}
async listMemory(params: { action: 'list'; namespace?: string }): Promise<any> {
return this.executeTool('memory_usage', params);
}
// Performance and monitoring tools
async getPerformanceReport(params?: { format?: string; timeframe?: string }): Promise<any> {
return this.executeTool('performance_report', params || {});
}
async analyzeBottlenecks(params?: { component?: string; metrics?: string[] }): Promise<any> {
return this.executeTool('bottleneck_analyze', params || {});
}
async getTokenUsage(params?: { operation?: string; timeframe?: string }): Promise<any> {
return this.executeTool('token_usage', params || {});
}
// Agent management tools
async listAgents(swarmId?: string): Promise<any> {
return this.executeTool('agent_list', { swarmId });
}
async getAgentMetrics(agentId: string): Promise<any> {
return this.executeTool('agent_metrics', { agentId });
}
// Task management tools
async getTaskStatus(taskId: string): Promise<any> {
return this.executeTool('task_status', { taskId });
}
async getTaskResults(taskId: string): Promise<any> {
return this.executeTool('task_results', { taskId });
}
// Advanced coordination tools
async optimizeTopology(swarmId?: string): Promise<any> {
return this.executeTool('topology_optimize', { swarmId });
}
async loadBalance(params: { swarmId?: string; tasks: any[] }): Promise<any> {
return this.executeTool('load_balance', params);
}
async syncCoordination(swarmId?: string): Promise<any> {
return this.executeTool('coordination_sync', { swarmId });
}
async scaleSwarm(params: { swarmId?: string; targetSize: number }): Promise<any> {
return this.executeTool('swarm_scale', params);
}
// SPARC mode integration
async runSparcMode(params: {
mode: string;
task_description: string;
options?: any;
}): Promise<any> {
return this.executeTool('sparc_mode', params);
}
// Workflow tools
async createWorkflow(params: { name: string; steps: any[]; triggers?: any[] }): Promise<any> {
return this.executeTool('workflow_create', params);
}
async executeWorkflow(params: { workflowId: string; params?: any }): Promise<any> {
return this.executeTool('workflow_execute', params);
}
// GitHub integration tools
async analyzeRepository(params: { repo: string; analysis_type?: string }): Promise<any> {
return this.executeTool('github_repo_analyze', params);
}
async manageGitHubPR(params: { repo: string; action: string; pr_number?: number }): Promise<any> {
return this.executeTool('github_pr_manage', params);
}
// Dynamic Agent Architecture tools
async createDynamicAgent(params: {
agent_type: string;
capabilities?: string[];
resources?: any;
}): Promise<any> {
return this.executeTool('daa_agent_create', params);
}
async matchCapabilities(params: {
task_requirements: string[];
available_agents?: any[];
}): Promise<any> {
return this.executeTool('daa_capability_match', params);
}
// System tools
async runBenchmark(suite?: string): Promise<any> {
return this.executeTool('benchmark_run', { suite });
}
async collectMetrics(components?: string[]): Promise<any> {
return this.executeTool('metrics_collect', { components });
}
async analyzeTrends(params: { metric: string; period?: string }): Promise<any> {
return this.executeTool('trend_analysis', params);
}
async analyzeCost(timeframe?: string): Promise<any> {
return this.executeTool('cost_analysis', { timeframe });
}
async assessQuality(params: { target: string; criteria?: string[] }): Promise<any> {
return this.executeTool('quality_assess', params);
}
async healthCheck(components?: string[]): Promise<any> {
return this.executeTool('health_check', { components });
}
// Batch operations
async batchProcess(params: { items: any[]; operation: string }): Promise<any> {
return this.executeTool('batch_process', params);
}
async parallelExecute(tasks: any[]): Promise<any> {
return this.executeTool('parallel_execute', { tasks });
}
/**
* Generic tool execution for custom tools
*/
async executeMCPTool(toolName: string, params: any): Promise<any> {
return this.executeTool(toolName, params);
}
/**
* Helper to format tool responses
*/
private formatResponse(response: MCPToolResponse): any {
if (response.success) {
return response.data;
} else {
throw new Error(`MCP Tool Error: ${response.error}`);
}
}
}