pm-orchestrator-enhancement
Version:
PM Orchestrator Enhancement - Multi-agent parallel execution system
199 lines • 7.06 kB
JavaScript
;
/**
* PM Orchestrator Enhancement - Reporter Subagent
*
* 全サブエージェントの結果を統合してユーザー向けレポートを作成します
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Reporter = void 0;
class Reporter {
constructor() {
this.version = '1.0.0';
}
/**
* レポートを作成します
*
* @param subagentResults サブエージェント結果
* @param executionLog 実行ログ
* @returns レポート
*/
async createReport(subagentResults, executionLog) {
const status = this.determineStatus(subagentResults);
const title = this.generateTitle(status, executionLog);
const summary = this.generateSummary(subagentResults);
const details = this.generateDetails(subagentResults, executionLog);
const nextSteps = this.generateNextSteps(status, subagentResults);
const userFriendlyMessage = this.generateUserFriendlyMessage(status, summary, nextSteps);
return {
status,
title,
summary,
details,
nextSteps,
userFriendlyMessage
};
}
/**
* ステータスを決定(プライベート)
*/
determineStatus(subagentResults) {
const hasError = subagentResults.some(result => result.status === 'error' || result.status === 'fail');
const hasWarning = subagentResults.some(result => result.status === 'warning');
if (hasError)
return 'error';
if (hasWarning)
return 'warning';
return 'success';
}
/**
* タイトルを生成(プライベート)
*/
generateTitle(status, _executionLog) {
const statusEmoji = {
success: '✅',
warning: '⚠️',
error: '❌'
};
const emoji = statusEmoji[status] || '';
return `${emoji} Task Execution ${status.toUpperCase()}`;
}
/**
* サマリーを生成(プライベート)
*/
generateSummary(subagentResults) {
const totalSubagents = subagentResults.length;
const successCount = subagentResults.filter(r => r.status === 'success' || r.status === 'pass' || r.status === 'completed').length;
return `Executed ${totalSubagents} subagents: ${successCount} successful, ${totalSubagents - successCount} failed or incomplete.`;
}
/**
* 詳細を生成(プライベート)
*/
generateDetails(subagentResults, executionLog) {
const taskOverview = this.generateTaskOverview(executionLog);
const executedSteps = this.generateExecutedSteps(subagentResults);
const changes = this.generateChanges(subagentResults);
const verification = this.generateVerification(subagentResults);
const warnings = this.generateWarnings(subagentResults);
const errors = this.generateErrors(subagentResults);
return {
taskOverview,
executedSteps,
changes,
verification,
warnings,
errors
};
}
/**
* タスク概要を生成(プライベート)
*/
generateTaskOverview(executionLog) {
return `Task: ${executionLog?.taskName || 'Unknown'}\nDuration: ${executionLog?.duration || 'N/A'}ms`;
}
/**
* 実行ステップを生成(プライベート)
*/
generateExecutedSteps(subagentResults) {
return subagentResults.map(result => `${result.agent?.name || 'Unknown'}: ${result.status || 'Unknown'}`);
}
/**
* 変更内容を生成(プライベート)
*/
generateChanges(subagentResults) {
const changes = [];
subagentResults.forEach(result => {
if (result.filesCreated) {
changes.push(`Created: ${result.filesCreated.length} files`);
}
if (result.filesModified) {
changes.push(`Modified: ${result.filesModified.length} files`);
}
if (result.filesDeleted) {
changes.push(`Deleted: ${result.filesDeleted.length} files`);
}
});
return changes;
}
/**
* 検証内容を生成(プライベート)
*/
generateVerification(subagentResults) {
const verification = [];
subagentResults.forEach(result => {
if (result.lint) {
verification.push(`Lint: ${result.lint.passed ? 'Passed' : 'Failed'}`);
}
if (result.test) {
verification.push(`Test: ${result.test.passed ? 'Passed' : 'Failed'}`);
}
if (result.typecheck) {
verification.push(`Typecheck: ${result.typecheck.passed ? 'Passed' : 'Failed'}`);
}
if (result.build) {
verification.push(`Build: ${result.build.passed ? 'Passed' : 'Failed'}`);
}
});
return verification;
}
/**
* 警告を生成(プライベート)
*/
generateWarnings(subagentResults) {
const warnings = [];
subagentResults.forEach(result => {
if (result.recommendations) {
warnings.push(...result.recommendations);
}
});
return warnings;
}
/**
* エラーを生成(プライベート)
*/
generateErrors(subagentResults) {
const errors = [];
subagentResults.forEach(result => {
if (result.errors) {
errors.push(...result.errors);
}
if (result.violations) {
errors.push(...result.violations.map((v) => v.description || v.message));
}
});
return errors;
}
/**
* 次のステップを生成(プライベート)
*/
generateNextSteps(status, _subagentResults) {
const nextSteps = [];
if (status === 'error') {
nextSteps.push('Fix all errors before proceeding');
nextSteps.push('Review error details in the report');
}
else if (status === 'warning') {
nextSteps.push('Review warnings and address if necessary');
nextSteps.push('Consider running additional checks');
}
else {
nextSteps.push('All checks passed - ready to proceed');
nextSteps.push('Consider creating a pull request');
}
return nextSteps;
}
/**
* ユーザー向けメッセージを生成(プライベート)
*/
generateUserFriendlyMessage(status, summary, nextSteps) {
let message = `## Task Execution Report\n\n`;
message += `**Status:** ${status.toUpperCase()}\n\n`;
message += `**Summary:**\n${summary}\n\n`;
message += `**Next Steps:**\n`;
nextSteps.forEach(step => {
message += `- ${step}\n`;
});
return message;
}
}
exports.Reporter = Reporter;
//# sourceMappingURL=reporter.js.map