UNPKG

pm-orchestrator-enhancement

Version:

PM Orchestrator Enhancement - Multi-agent parallel execution system

108 lines (87 loc) 3.38 kB
/** * PM Orchestrator Enhancement - Error Handling Example * * エラーハンドリングの例: リトライとロールバック */ import { ErrorHandler } from '../src/error/error-handler'; import { RetryStrategy } from '../src/error/retry-strategy'; import { RollbackStrategy } from '../src/error/rollback-strategy'; import { ErrorType } from '../src/types'; async function main() { console.log('Error Handling Example\n'); console.log('='.repeat(60) + '\n'); // 初期化 const errorHandler = new ErrorHandler(); const retryStrategy = new RetryStrategy(3, 1000); const rollbackStrategy = new RollbackStrategy('/tmp/pm-orchestrator-backup'); // 例1: リトライ可能なエラー console.log('Example 1: Retryable Error\n'); let attempt = 0; const unstableOperation = async () => { attempt++; console.log(`Attempt ${attempt}...`); if (attempt < 3) { throw new Error('TIMEOUT: Connection timed out'); } return 'Success!'; }; try { const result = await retryStrategy.execute(unstableOperation); console.log('Result:', result); } catch (error) { const errorType = errorHandler.classifyError(error as Error); console.log('Error Type:', errorType); console.log('Retryable:', errorHandler.isRetryable(errorType)); } console.log('\n' + '='.repeat(60) + '\n'); // 例2: ロールバックが必要なエラー console.log('Example 2: Rollback Required\n'); const files = [ { path: '/tmp/test1.txt', content: 'Original content 1' }, { path: '/tmp/test2.txt', content: 'Original content 2' } ]; try { // バックアップ作成 console.log('Creating backups...'); for (const file of files) { await rollbackStrategy.backup(file.path); } console.log('Backups created'); // 何か変更を試みる(失敗する可能性がある) console.log('\nMaking changes...'); // ... 変更処理 ... console.log('Changes applied'); // エラーが発生したと仮定 throw new Error('TEST_FAILURE: Some tests failed'); } catch (error) { const errorType = errorHandler.classifyError(error as Error); console.log('\nError occurred:', (error as Error).message); console.log('Error Type:', errorType); if (errorHandler.needsRollback(errorType)) { console.log('Rolling back changes...'); await rollbackStrategy.rollback('/tmp/test1.txt'); await rollbackStrategy.rollback('/tmp/test2.txt'); console.log('Rollback complete'); } } console.log('\n' + '='.repeat(60) + '\n'); // 例3: エラー分類 console.log('Example 3: Error Classification\n'); const testErrors = [ new Error('TIMEOUT: Request timed out'), new Error('LINT_ERROR: Missing semicolon'), new Error('TEST_FAILURE: Expected true but got false'), new Error('RULE_VIOLATION: Direct commit to main branch'), new Error('Something went wrong') ]; testErrors.forEach(error => { const errorType = errorHandler.classifyError(error); console.log(`Error: "${error.message}"`); console.log(` Type: ${errorType}`); console.log(` Retryable: ${errorHandler.isRetryable(errorType)}`); console.log(` Auto-fixable: ${errorHandler.isAutoFixable(errorType)}`); console.log(` Needs Rollback: ${errorHandler.needsRollback(errorType)}`); console.log(''); }); } main();