#!/usr/bin/env node /** * squad-orchestrator.js - AI 개발 스쿼드(Squad) 오케스트레이터 * * 하나의 컴포넌트/피처 요건을 입력받아 3가지 전문 에이전트 역할군으로 작업을 쪼개고, * 각 에이전트에 줄 지시서와 전체 프로세스를 시뮬레이션/오케스트레이션하는 마스터 러너 파일을 생성합니다. * * 에이전트 스쿼드 구성: * 1. UI/마크업 스페셜리스트 (Markup Specialist): 구조 설계, 렌더링, Tailwind CSS 스타일링 및 기본 상태 바인딩. * 2. 웹 접근성 스페셜리스트 (A11y/UX Specialist): WCAG 2.1 AA 기준 준수, ARIA 레이블링, 키보드 인터랙션 강화. * 3. QA/유닛 테스트 스페셜리스트 (Testing Specialist): Vitest 기반 유닛 테스트 스위트 작성 및 품질 보증. */ const fs = require('fs'); const path = require('path'); const readline = require('readline'); const CWD = process.cwd(); const SQUAD_ROOT = path.join(CWD, 'squad'); // 헬퍼: 디렉토리 자동 생성 function ensureDirectory(dirPath) { if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath, { recursive: true }); } } // 헬퍼: 파일 작성 function writeFile(filePath, content) { const dir = path.dirname(filePath); ensureDirectory(dir); fs.writeFileSync(filePath, content, 'utf8'); } // CLI 인자 파싱 function parseArgs() { const args = process.argv.slice(2); const result = { name: '', spec: '' }; for (let i = 0; i < args.length; i++) { if (args[i] === '--name' || args[i] === '-n') { result.name = args[i + 1] || ''; i++; } else if (args[i] === '--spec' || args[i] === '-s') { result.spec = args[i + 1] || ''; i++; } } return result; } // 지시서 생성 로직 function generateSquadTasks(componentName, specification) { const lowercaseName = componentName.toLowerCase(); const componentPath = `components/${componentName}.vue`; const testPath = `components/${componentName}.spec.ts`; const taskDir = path.join(SQUAD_ROOT, componentName); // 1. Markup Specialist 지시서 const markupTask = `# 🎨 Role 1: UI/마크업 스페셜리스트 지시서 ## 목표 - 요구사항에 맞는 컴포넌트 구조(Vue 3 / SFC)를 생성하고 Tailwind CSS를 이용해 아름답고 완벽한 반응형 UI를 스타일링합니다. - 복잡하지 않은 수준에서 데이터 수신을 위한 Props 정의 및 이벤트를 내보내기 위한 Emits를 설계합니다. ## 개발 대상 파일 - \`${componentPath}\` ## 기술 요건 (framework-rules.md 준수) - \`