UNPKG

@oliverpople/agency-x

Version:

🚀 **Transform feature requests into production-ready code in seconds**

74 lines (61 loc) • 2.44 kB
import { createContext, getContext, loadContext, logToContext } from '../utils/contextStore'; import { orchestratorLogger as logger } from '../utils/logger'; import { narrator, setVoiceEnabled } from '../utils/voice'; import { AgentOrchestrator } from '../utils/agentOrchestrator'; import { AGENT_DEFINITIONS, getAgentsByPhase, getCriticalAgents } from '../configs/agentConfigs'; interface OrchestratorOptions { feature: string; voice?: boolean; resume?: string; maxConcurrent?: number; onStop?: (log: string[]) => void; onProgress?: (status: { completed: number; failed: number; running: number }) => void; } export const runOrchestrator = async (options: OrchestratorOptions) => { const { feature, voice = false, resume, maxConcurrent = 5, onStop, onProgress } = options; setVoiceEnabled(voice); let orchestrator: AgentOrchestrator | null = null; const isVerbose = process.env.DEBUG === 'true'; try { if (resume) { await loadContext(resume); if (isVerbose) logger.info(`Resuming orchestration for specId: ${resume}`); } else { createContext(feature); if (isVerbose) logger.info(`Starting orchestration for feature: "${feature}"`); } // Only show orchestration plan in verbose mode if (isVerbose) { const phases = getAgentsByPhase(); const criticalAgents = getCriticalAgents(); logger.info(`Orchestration Plan:`); phases.forEach((agents, phase) => { const criticalInPhase = agents.filter(agent => criticalAgents.includes(agent)); logger.info(` Phase ${phase}: ${agents.join(', ')} ${criticalInPhase.length > 0 ? `(Critical: ${criticalInPhase.join(', ')})` : ''}`); }); } // Create and configure orchestrator orchestrator = new AgentOrchestrator(maxConcurrent, onProgress); // Add all agent definitions AGENT_DEFINITIONS.forEach(definition => { orchestrator!.addAgent(definition); }); // Run orchestration await orchestrator.runAll(); const context = getContext(); if (isVerbose) logger.success(`Orchestration completed successfully!`); if (onStop) { onStop(context.log); } return context; } catch (error) { if (isVerbose) logger.error(`Orchestration failed: ${error}`); logToContext(`ERROR: ${error}`); throw error; } finally { // Cleanup orchestrator if (orchestrator) { orchestrator.cleanup(); } } };