pm-orchestrator-enhancement
Version:
PM Orchestrator Enhancement - Multi-agent parallel execution system
139 lines (124 loc) • 4.29 kB
JavaScript
/**
* Installation Verification Script
*
* npm install 後に自動実行され、パッケージの動作を検証します。
*
* 検証項目:
* 1. 全てのエクスポートがimport可能か
* 2. 主要クラスがインスタンス化可能か
* 3. CLIが実行可能か
* 4. 依存関係が正しいか
*/
const path = require('path');
const fs = require('fs');
// カラー出力
const colors = {
reset: '\x1b[0m',
green: '\x1b[32m',
red: '\x1b[31m',
yellow: '\x1b[33m',
cyan: '\x1b[36m'
};
function log(status, message) {
const statusColors = {
PASS: colors.green,
FAIL: colors.red,
WARN: colors.yellow,
INFO: colors.cyan
};
console.log(`${statusColors[status] || ''}[${status}]${colors.reset} ${message}`);
}
async function verifyInstallation() {
console.log('\n=== PM Orchestrator Installation Verification ===\n');
let passed = 0;
let failed = 0;
// 1. モジュールimportテスト
try {
const pkg = require('pm-orchestrator-enhancement');
const expectedExports = [
'PMOrchestrator', 'ExecutionLogger', 'ProgressTracker',
'RuleChecker', 'CodeAnalyzer', 'Designer', 'Implementer',
'Tester', 'QA', 'CICDEngineer', 'Reporter'
];
const missing = expectedExports.filter(name => !pkg[name]);
if (missing.length === 0) {
log('PASS', 'All expected exports available');
passed++;
} else {
log('FAIL', `Missing exports: ${missing.join(', ')}`);
failed++;
}
} catch (e) {
log('FAIL', `Module import failed: ${e.message}`);
failed++;
// モジュールがimportできなければ以降のテストは不可能
process.exit(1);
}
// 2. PMOrchestrator インスタンス化テスト
try {
const { PMOrchestrator } = require('pm-orchestrator-enhancement');
const tmpDir = path.join(require('os').tmpdir(), 'pm-orchestrator-verify');
const orchestrator = new PMOrchestrator(tmpDir);
log('PASS', 'PMOrchestrator instantiation');
passed++;
} catch (e) {
log('FAIL', `PMOrchestrator instantiation: ${e.message}`);
failed++;
}
// 3. ExecutionLogger テスト
try {
const { ExecutionLogger } = require('pm-orchestrator-enhancement');
const tmpDir = path.join(require('os').tmpdir(), 'pm-orchestrator-verify');
const logger = new ExecutionLogger(tmpDir);
log('PASS', 'ExecutionLogger instantiation');
passed++;
} catch (e) {
log('FAIL', `ExecutionLogger instantiation: ${e.message}`);
failed++;
}
// 4. ProgressTracker ライフサイクルテスト
try {
const { ProgressTracker } = require('pm-orchestrator-enhancement');
const tracker = new ProgressTracker();
tracker.startTask('verify-test', 'Verification Test');
tracker.updateProgress('verify-test', 50, 'verifier');
tracker.completeTask('verify-test');
log('PASS', 'ProgressTracker lifecycle');
passed++;
} catch (e) {
log('FAIL', `ProgressTracker lifecycle: ${e.message}`);
failed++;
}
// 5. サブエージェント インスタンス化テスト
const subagents = ['RuleChecker', 'CodeAnalyzer', 'Designer', 'Implementer', 'Tester', 'QA', 'Reporter'];
for (const name of subagents) {
try {
const pkg = require('pm-orchestrator-enhancement');
new pkg[name]();
log('PASS', `${name} instantiation`);
passed++;
} catch (e) {
log('FAIL', `${name} instantiation: ${e.message}`);
failed++;
}
}
// 結果サマリー
console.log('\n=== Verification Summary ===');
console.log(`${colors.green}Passed: ${passed}${colors.reset}`);
console.log(`${colors.red}Failed: ${failed}${colors.reset}`);
if (failed > 0) {
console.log(`\n${colors.red}Installation verification failed.${colors.reset}`);
console.log('Please report this issue: https://github.com/pm-orchestrator/pm-orchestrator-enhancement/issues');
process.exit(1);
} else {
console.log(`\n${colors.green}Installation verified successfully!${colors.reset}`);
}
}
// postinstall として実行される場合はスキップ可能にする
if (process.env.PM_ORCHESTRATOR_SKIP_VERIFY !== 'true') {
verifyInstallation().catch(e => {
log('FAIL', `Unexpected error: ${e.message}`);
process.exit(1);
});
}