import * as vscode from 'vscode'; import { MissionState } from './engine'; export class WikiFormatter { /** * 최종 에이전트 출력물을 P-Reinforce v3.0 표준 포맷으로 변환합니다. */ public static format(content: string, state: MissionState): string { const now = new Date().toISOString(); const missionId = state.missionId; // 1. Frontmatter 주입 (항상 갱신) const frontmatter = [ '---', `id: ${missionId}`, `date: ${now}`, 'type: knowledge_artifact', 'standard: P-Reinforce v3.0', 'tags: [automated, connect_ai, brain_sync]', '---', '', '' ].join('\n'); // 기존 frontmatter 제거 (있는 경우) let cleanContent = content.replace(/^---[\s\S]*?---\n*/, ''); let formatted = frontmatter + cleanContent; // 2. 지능형 요약 추출 및 보정 if (!formatted.includes('## 📌 Brief Summary')) { const lines = cleanContent.split('\n'); // '📌', '요약', 'Summary'가 포함된 줄을 먼저 찾거나, 20자 이상의 첫 단락을 찾음 let summary = lines.find(l => l.includes('📌') || l.includes('Summary') || l.includes('요약'))?.replace(/^[#\s📌]*/, ''); if (!summary) { summary = lines.find(l => l.trim().length > 30 && !l.startsWith('#')) || '요약 내용을 추출할 수 없습니다.'; } const summarySection = `## 📌 Brief Summary\n${summary.substring(0, 300)}${summary.length > 300 ? '...' : ''}\n\n`; formatted = formatted.replace(/---\n\n/, `---\n\n${summarySection}`); } // 3. 코드 스니펫 섹션 보정 if (!formatted.includes('## 💻 Practical Implementation') && !formatted.includes('## 💻 실전 구현 코드')) { if (formatted.includes('```')) { formatted = formatted.replace(/```/, '\n## 💻 실전 구현 코드\n\n```'); } } // 4. [Astra v4.0] 신뢰성 보고서 (Reliability & Audit Summary) const metrics = state.resilienceMetrics; const totalDuration = Date.now() - state.startTime; const reliabilitySection = [ '', '---', '## 🛡️ Reliability & Audit Summary', `> [!NOTE]`, `> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.`, '', '| Metric | Value | Status |', '| :--- | :--- | :--- |', `| **Conflict Risk** | \`${metrics.maxConflictScore}/100\` | ${metrics.maxConflictScore < 30 ? '✅ Low' : metrics.maxConflictScore < 70 ? '⚠️ Medium' : '🚨 High'} |`, `| **Fallbacks Used** | \`${metrics.fallbacks}\` | ${metrics.fallbacks === 0 ? '✅ None' : '💡 Recovered'} |`, `| **Auto Retries** | \`${metrics.retries}\` | ${metrics.retries < 3 ? '✅ Stable' : '⚠️ Unstable'} |`, `| **Deduplication** | \`${metrics.deduplications}\` | ${metrics.deduplications > 0 ? '🚀 Optimized' : 'Standard'} |`, `| **Processing Time** | \`${(totalDuration / 1000).toFixed(1)}s\` | ✅ Fast |`, '', '### 🔍 Decision Audit Trail', // 재시도(retry) 등 반복적인 로그는 제외하고 핵심 단계 전환만 필터링하여 출력 state.auditTrail .filter(a => !a.message.includes('재시도') && a.from !== a.to) .map(a => `- **[${a.to.toUpperCase()}]** ${a.message} (${a.durationFromPrev}ms)`) .join('\n'), '' ].join('\n'); formatted += reliabilitySection; return formatted; } }