UNPKG

pm-orchestrator-enhancement

Version:

PM Orchestrator Enhancement - Multi-agent parallel execution system

162 lines 4.64 kB
"use strict"; /** * PM Orchestrator Enhancement - Progress Tracker * * リアルタイム進捗を追跡します * ColorCode統合とテストAPI対応 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ProgressTracker = void 0; const color_code_1 = require("./color-code"); class ProgressTracker { constructor() { this.tasks = new Map(); this.listeners = []; } /** * タスクを開始します(第3引数追加: currentSubagent) */ startTask(taskId, taskName, currentSubagent) { const task = { taskId, taskName, status: 'in_progress', progress: 0, startTime: new Date().toISOString(), currentSubagent }; this.tasks.set(taskId, task); this.notifyListeners(task); } /** * タスクの進捗を更新します */ updateProgress(taskId, progress, currentSubagent) { const task = this.tasks.get(taskId); if (!task) return; task.progress = Math.min(100, Math.max(0, progress)); if (currentSubagent) { task.currentSubagent = currentSubagent; } this.tasks.set(taskId, task); this.notifyListeners(task); } /** * タスクを完了します */ completeTask(taskId) { const task = this.tasks.get(taskId); if (!task) return; task.status = 'completed'; task.progress = 100; task.endTime = new Date().toISOString(); this.tasks.set(taskId, task); this.notifyListeners(task); } /** * タスクを失敗させます */ failTask(taskId) { const task = this.tasks.get(taskId); if (!task) return; task.status = 'failed'; task.endTime = new Date().toISOString(); this.tasks.set(taskId, task); this.notifyListeners(task); } /** * 進捗リスナーを追加します */ addListener(listener) { this.listeners.push(listener); } /** * 進捗リスナーを削除します */ removeListener(listener) { const index = this.listeners.indexOf(listener); if (index > -1) { this.listeners.splice(index, 1); } } /** * 全タスクの進捗を取得します */ getAllProgress() { return Array.from(this.tasks.values()); } /** * タスクの進捗を取得します */ getProgress(taskId) { return this.tasks.get(taskId); } /** * タスクの進捗を取得します(エイリアス) */ getTask(taskId) { return this.getProgress(taskId); } /** * タスクを失敗させます(エイリアス) */ errorTask(taskId) { this.failTask(taskId); } /** * 進捗を表示します(TerminalUI統合) */ displayProgress() { const tasks = Array.from(this.tasks.values()); if (tasks.length === 0) { return 'No tasks in progress.'; } const lines = []; lines.push(''); lines.push('━'.repeat(60)); lines.push('📊 PM Orchestrator 実行状況'); lines.push('━'.repeat(60)); lines.push(''); for (const task of tasks) { const statusIcon = this.getStatusIcon(task.status); const agentName = task.currentSubagent || 'unknown'; const coloredAgent = color_code_1.ColorCode.colorize(agentName, agentName); lines.push(`${statusIcon} ${coloredAgent.padEnd(20)} - ${task.taskName} (${task.progress.toFixed(0)}%)`); } lines.push(''); lines.push('━'.repeat(60)); lines.push(`Summary: ${tasks.length} task(s)`); lines.push('━'.repeat(60)); return lines.join('\n'); } /** * ステータスアイコンを取得 */ getStatusIcon(status) { const iconMap = { 'pending': '⏳', 'in_progress': '🔄', 'completed': '✅', 'failed': '❌' }; return iconMap[status] || '⚪'; } /** * リスナーに通知します(プライベート) */ notifyListeners(progress) { this.listeners.forEach(listener => { try { listener(progress); } catch (error) { console.error('Error in progress listener:', error); } }); } } exports.ProgressTracker = ProgressTracker; //# sourceMappingURL=progress-tracker.js.map