aiag-cli 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,413 @@
1
+ /**
2
+ * CLAUDE.md 생성 유틸리티
3
+ * PRD와 프로젝트 구조를 분석하여 Claude Code 작업 지침 문서를 생성
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ /**
8
+ * CLAUDE.md 파일을 생성합니다
9
+ * @param context CLAUDE.md 컨텍스트
10
+ * @param baseDir 프로젝트 루트 디렉토리
11
+ * @param options 옵션
12
+ * @returns 생성 결과 (created: 새로 생성, skipped: 건너뜀, backed_up: 백업 후 생성)
13
+ */
14
+ export function generateClaudeMd(context, baseDir, options = {}) {
15
+ const claudeMdPath = path.join(baseDir, 'CLAUDE.md');
16
+ const template = createClaudeMdTemplate(context);
17
+ // 파일이 이미 존재하는 경우
18
+ if (fs.existsSync(claudeMdPath)) {
19
+ // force 옵션이 없으면 건너뜀
20
+ if (!options.force) {
21
+ return { status: 'skipped' };
22
+ }
23
+ // force 옵션이 있으면 백업 후 덮어쓰기
24
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
25
+ const backupPath = path.join(baseDir, `CLAUDE.md.backup-${timestamp}`);
26
+ fs.copyFileSync(claudeMdPath, backupPath);
27
+ fs.writeFileSync(claudeMdPath, template);
28
+ return { status: 'backed_up', backupPath };
29
+ }
30
+ // 파일이 없으면 새로 생성
31
+ fs.writeFileSync(claudeMdPath, template);
32
+ return { status: 'created' };
33
+ }
34
+ /**
35
+ * CLAUDE.md 템플릿 생성
36
+ */
37
+ function createClaudeMdTemplate(context) {
38
+ const today = new Date().toISOString().split('T')[0];
39
+ return `# ${context.projectName} - Claude Code 작업 지침
40
+
41
+ > 이 파일은 \`aiag init\`에 의해 PRD로부터 자동 생성되었습니다.
42
+ > 프로젝트 진행 중 필요에 따라 수동으로 업데이트할 수 있습니다.
43
+
44
+ ## 프로젝트 개요
45
+
46
+ ### 핵심 목표
47
+ ${context.projectGoal}
48
+
49
+ ### 주요 기능
50
+ ${context.keyFeatures.map((f, i) => `${i + 1}. ${f}`).join('\n')}
51
+
52
+ ---
53
+
54
+ ## 기술 스택
55
+
56
+ ### 언어 & 프레임워크
57
+ ${context.techStack.language ? `- 언어: ${context.techStack.language}` : ''}
58
+ ${context.techStack.framework ? `- 프레임워크: ${context.techStack.framework}` : ''}
59
+ ${context.techStack.buildTool ? `- 빌드 도구: ${context.techStack.buildTool}` : ''}
60
+ ${context.techStack.testTool ? `- 테스트: ${context.techStack.testTool}` : ''}
61
+ ${context.techStack.packageManager ? `- 패키지 매니저: ${context.techStack.packageManager}` : ''}
62
+
63
+ ---
64
+
65
+ ## 아키텍처
66
+
67
+ ### 프로젝트 구조
68
+ \`\`\`
69
+ ${context.architecture.structure}
70
+ \`\`\`
71
+
72
+ ### 핵심 설계 패턴
73
+ ${context.architecture.patterns.length > 0 ? context.architecture.patterns.map(p => `- ${p}`).join('\n') : '- (프로젝트 진행 중 추가 예정)'}
74
+
75
+ ---
76
+
77
+ ## 도메인 지식
78
+
79
+ ### 비즈니스 용어
80
+ ${Object.keys(context.domainKnowledge.terms).length > 0
81
+ ? Object.entries(context.domainKnowledge.terms).map(([key, value]) => `- **${key}**: ${value}`).join('\n')
82
+ : '- (프로젝트 진행 중 추가 예정)'}
83
+
84
+ ### 비즈니스 규칙
85
+ ${context.domainKnowledge.rules.length > 0 ? context.domainKnowledge.rules.map(r => `- ${r}`).join('\n') : '- (프로젝트 진행 중 추가 예정)'}
86
+
87
+ ---
88
+
89
+ ## 개발 환경
90
+
91
+ ### 개발 서버 실행
92
+ \`\`\`bash
93
+ ${context.buildCommands?.dev || 'npm run dev # 또는 적절한 명령어'}
94
+ \`\`\`
95
+
96
+ ### 빌드
97
+ \`\`\`bash
98
+ ${context.buildCommands?.build || 'npm run build # 또는 적절한 명령어'}
99
+ \`\`\`
100
+
101
+ ### 테스트
102
+ \`\`\`bash
103
+ ${context.buildCommands?.test || 'npm test # 또는 적절한 명령어'}
104
+ \`\`\`
105
+
106
+ ---
107
+
108
+ ## 테스트 전략
109
+
110
+ ${context.testStrategy || `### 테스트 구조
111
+ \`\`\`
112
+ tests/
113
+ ├── unit/ # 단위 테스트
114
+ ├── integration/ # 통합 테스트
115
+ └── e2e/ # E2E 테스트
116
+ \`\`\`
117
+
118
+ ### 커버리지 목표
119
+ - 단위 테스트: 80% 이상
120
+ - 주요 비즈니스 로직: 100%`}
121
+
122
+ ---
123
+
124
+ ## 제약사항 & 주의사항
125
+
126
+ ${context.constraints.length > 0 ? context.constraints.map(c => `- ${c}`).join('\n') : '- (프로젝트 진행 중 추가 예정)'}
127
+
128
+ ---
129
+
130
+ ## AIAG 워크플로우
131
+
132
+ ### 세션 시작 시
133
+ 1. \`cat .aiag/progress.md\` - 이전 작업 확인
134
+ 2. \`aiag status\` - 현재 진행 상황 확인
135
+ 3. \`aiag next\` - 다음 작업 선택
136
+
137
+ ### 기능 구현 시
138
+ 1. **ONE Feature Rule** 준수: 한 번에 하나의 기능만 작업
139
+ 2. 테스트 작성 후 구현 (TDD 권장)
140
+ 3. 완료 전 테스트 통과 필수
141
+ 4. Clean State 유지: 코드를 깨진 상태로 두지 않음
142
+
143
+ ### 커밋 컨벤션
144
+ \`\`\`
145
+ feat(FEATURE-ID): 기능 설명
146
+ fix(FEATURE-ID): 버그 수정
147
+ test(FEATURE-ID): 테스트 추가
148
+ docs(FEATURE-ID): 문서 업데이트
149
+ refactor(FEATURE-ID): 리팩토링
150
+ \`\`\`
151
+
152
+ ### 세션 종료 시
153
+ 1. 모든 변경사항 커밋
154
+ 2. \`progress.md\` 업데이트
155
+ 3. \`feature_list.json\`의 \`passes\` 필드 업데이트
156
+ 4. Clean State 확인 (컴파일/테스트 통과)
157
+
158
+ ---
159
+
160
+ ## 코딩 컨벤션
161
+
162
+ ### 파일 명명 규칙
163
+ - 컴포넌트: PascalCase (예: UserProfile.tsx)
164
+ - 유틸리티: camelCase (예: formatDate.ts)
165
+ - 상수: UPPER_SNAKE_CASE (예: API_BASE_URL.ts)
166
+
167
+ ### 코드 스타일
168
+ - 들여쓰기: 2 spaces
169
+ - 따옴표: 작은따옴표 (')
170
+ - 세미콜론: 사용
171
+ - 화살표 함수 선호
172
+
173
+ ---
174
+
175
+ ## 참고 문서
176
+
177
+ - PRD: [PRD.md](./PRD.md)
178
+ - Feature List: [.aiag/feature_list.json](./.aiag/feature_list.json)
179
+ - Progress: [.aiag/progress.md](./.aiag/progress.md)
180
+ - Session Context: [.aiag/session_context.md](./.aiag/session_context.md)
181
+
182
+ ---
183
+
184
+ *Last Updated: ${today}*
185
+ *Generated by: aiag init*
186
+ `;
187
+ }
188
+ /**
189
+ * PRD와 프로젝트 구조를 분석하여 CLAUDE.md 컨텍스트 생성
190
+ */
191
+ export function extractClaudeMdContext(prdContent, baseDir) {
192
+ const projectName = path.basename(baseDir);
193
+ // package.json 분석
194
+ const techStack = analyzeTechStack(baseDir);
195
+ // 프로젝트 구조 분석
196
+ const architecture = analyzeProjectStructure(baseDir);
197
+ // PRD에서 기본 정보 추출 (간단한 파싱)
198
+ const prdInfo = parsePrdContent(prdContent);
199
+ return {
200
+ projectName,
201
+ projectGoal: prdInfo.goal || '(PRD에서 목표를 추출하세요)',
202
+ keyFeatures: prdInfo.features || ['(PRD에서 주요 기능을 추출하세요)'],
203
+ techStack,
204
+ architecture,
205
+ domainKnowledge: {
206
+ terms: {},
207
+ rules: prdInfo.rules || [],
208
+ },
209
+ constraints: prdInfo.constraints || [],
210
+ testStrategy: undefined,
211
+ buildCommands: detectBuildCommands(baseDir),
212
+ };
213
+ }
214
+ /**
215
+ * package.json에서 기술 스택 분석
216
+ */
217
+ function analyzeTechStack(baseDir) {
218
+ const packageJsonPath = path.join(baseDir, 'package.json');
219
+ if (!fs.existsSync(packageJsonPath)) {
220
+ return {};
221
+ }
222
+ try {
223
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
224
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
225
+ return {
226
+ language: detectLanguage(deps, baseDir),
227
+ framework: detectFramework(deps),
228
+ buildTool: detectBuildTool(deps),
229
+ testTool: detectTestTool(deps),
230
+ packageManager: detectPackageManager(baseDir),
231
+ };
232
+ }
233
+ catch {
234
+ return {};
235
+ }
236
+ }
237
+ function detectLanguage(deps, baseDir) {
238
+ if (deps.typescript || fs.existsSync(path.join(baseDir, 'tsconfig.json'))) {
239
+ return 'TypeScript';
240
+ }
241
+ return 'JavaScript';
242
+ }
243
+ function detectFramework(deps) {
244
+ if (deps.react)
245
+ return 'React';
246
+ if (deps.vue)
247
+ return 'Vue';
248
+ if (deps.svelte)
249
+ return 'Svelte';
250
+ if (deps.express)
251
+ return 'Express';
252
+ if (deps['@nestjs/core'])
253
+ return 'NestJS';
254
+ if (deps.next)
255
+ return 'Next.js';
256
+ if (deps.nuxt)
257
+ return 'Nuxt.js';
258
+ return undefined;
259
+ }
260
+ function detectBuildTool(deps) {
261
+ if (deps.vite)
262
+ return 'Vite';
263
+ if (deps.webpack)
264
+ return 'Webpack';
265
+ if (deps.rollup)
266
+ return 'Rollup';
267
+ if (deps.esbuild)
268
+ return 'esbuild';
269
+ if (deps.parcel)
270
+ return 'Parcel';
271
+ return undefined;
272
+ }
273
+ function detectTestTool(deps) {
274
+ if (deps.jest)
275
+ return 'Jest';
276
+ if (deps.vitest)
277
+ return 'Vitest';
278
+ if (deps.mocha)
279
+ return 'Mocha';
280
+ if (deps['@playwright/test'])
281
+ return 'Playwright';
282
+ if (deps.cypress)
283
+ return 'Cypress';
284
+ return undefined;
285
+ }
286
+ function detectPackageManager(baseDir) {
287
+ if (fs.existsSync(path.join(baseDir, 'bun.lockb')))
288
+ return 'bun';
289
+ if (fs.existsSync(path.join(baseDir, 'pnpm-lock.yaml')))
290
+ return 'pnpm';
291
+ if (fs.existsSync(path.join(baseDir, 'yarn.lock')))
292
+ return 'yarn';
293
+ if (fs.existsSync(path.join(baseDir, 'package-lock.json')))
294
+ return 'npm';
295
+ return undefined;
296
+ }
297
+ /**
298
+ * 프로젝트 구조 분석
299
+ */
300
+ function analyzeProjectStructure(baseDir) {
301
+ const srcPath = path.join(baseDir, 'src');
302
+ let structure = '';
303
+ if (fs.existsSync(srcPath)) {
304
+ structure = analyzeDirectory(srcPath, 'src', 0, 2);
305
+ }
306
+ else {
307
+ structure = '(프로젝트 구조가 아직 생성되지 않았습니다)';
308
+ }
309
+ return {
310
+ structure,
311
+ patterns: [], // Initializer Agent가 채울 예정
312
+ };
313
+ }
314
+ function analyzeDirectory(dirPath, displayName, depth, maxDepth) {
315
+ if (depth >= maxDepth)
316
+ return '';
317
+ const indent = ' '.repeat(depth);
318
+ let result = `${indent}${displayName}/\n`;
319
+ try {
320
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
321
+ const dirs = entries.filter(e => e.isDirectory() && !e.name.startsWith('.')).slice(0, 10);
322
+ for (const dir of dirs) {
323
+ const subPath = path.join(dirPath, dir.name);
324
+ result += analyzeDirectory(subPath, dir.name, depth + 1, maxDepth);
325
+ }
326
+ }
327
+ catch {
328
+ // 권한 문제 등으로 읽기 실패 시 무시
329
+ }
330
+ return result;
331
+ }
332
+ /**
333
+ * 빌드 명령어 감지
334
+ */
335
+ function detectBuildCommands(baseDir) {
336
+ const packageJsonPath = path.join(baseDir, 'package.json');
337
+ if (!fs.existsSync(packageJsonPath)) {
338
+ return undefined;
339
+ }
340
+ try {
341
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
342
+ const scripts = pkg.scripts || {};
343
+ return {
344
+ dev: scripts.dev || scripts.start || scripts.serve,
345
+ build: scripts.build,
346
+ test: scripts.test,
347
+ };
348
+ }
349
+ catch {
350
+ return undefined;
351
+ }
352
+ }
353
+ /**
354
+ * PRD 내용 간단 파싱 (헤더 기반)
355
+ */
356
+ function parsePrdContent(prdContent) {
357
+ // 간단한 파싱 로직 (추후 개선 가능)
358
+ const lines = prdContent.split('\n');
359
+ let goal;
360
+ const features = [];
361
+ const rules = [];
362
+ const constraints = [];
363
+ let currentSection = '';
364
+ for (const line of lines) {
365
+ const trimmed = line.trim();
366
+ // 섹션 감지
367
+ if (trimmed.startsWith('#')) {
368
+ const lower = trimmed.toLowerCase();
369
+ if (lower.includes('목표') || lower.includes('goal')) {
370
+ currentSection = 'goal';
371
+ }
372
+ else if (lower.includes('기능') || lower.includes('feature')) {
373
+ currentSection = 'features';
374
+ }
375
+ else if (lower.includes('규칙') || lower.includes('rule')) {
376
+ currentSection = 'rules';
377
+ }
378
+ else if (lower.includes('제약') || lower.includes('constraint')) {
379
+ currentSection = 'constraints';
380
+ }
381
+ else {
382
+ currentSection = '';
383
+ }
384
+ continue;
385
+ }
386
+ // 내용 수집
387
+ if (trimmed.startsWith('-') || trimmed.startsWith('*') || /^\d+\./.test(trimmed)) {
388
+ const content = trimmed.replace(/^[-*\d.]\s*/, '').trim();
389
+ if (content) {
390
+ if (currentSection === 'features') {
391
+ features.push(content);
392
+ }
393
+ else if (currentSection === 'rules') {
394
+ rules.push(content);
395
+ }
396
+ else if (currentSection === 'constraints') {
397
+ constraints.push(content);
398
+ }
399
+ }
400
+ }
401
+ else if (currentSection === 'goal' && trimmed && !trimmed.startsWith('#')) {
402
+ if (!goal)
403
+ goal = trimmed;
404
+ }
405
+ }
406
+ return {
407
+ goal,
408
+ features: features.length > 0 ? features : undefined,
409
+ rules: rules.length > 0 ? rules : undefined,
410
+ constraints: constraints.length > 0 ? constraints : undefined,
411
+ };
412
+ }
413
+ //# sourceMappingURL=claudeMd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeMd.js","sourceRoot":"","sources":["../../src/utils/claudeMd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Initializer Agent 실행 유틸리티
3
+ * PRD를 분석하여 feature_list.json과 CLAUDE.md를 생성
4
+ */
5
+ export interface InitializerResult {
6
+ success: boolean;
7
+ featuresGenerated?: number;
8
+ categories?: string[];
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Initializer Agent를 실행하여 PRD로부터 feature_list.json 생성
13
+ */
14
+ export declare function runInitializerAgent(prdPath: string, baseDir: string): Promise<InitializerResult>;
15
+ /**
16
+ * feature_list.json에서 카테고리별 기능 수 계산
17
+ */
18
+ export declare function countFeaturesByCategory(baseDir: string, category: string): number;
19
+ /**
20
+ * Claude Code CLI를 사용한 자동 실행 (옵션)
21
+ * 환경에 Claude Code가 설치되어 있어야 함
22
+ */
23
+ export declare function executeInitializerWithClaudeCode(promptPath: string, baseDir: string): Promise<void>;
24
+ //# sourceMappingURL=initializerAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializerAgent.d.ts","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAqD5B;AAgHD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjF;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CACpD,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Initializer Agent 실행 유틸리티
3
+ * PRD를 분석하여 feature_list.json과 CLAUDE.md를 생성
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { execSync } from 'child_process';
8
+ import { printInfo, colors, messages } from './output.js';
9
+ import { readFeatureList } from './featureList.js';
10
+ /**
11
+ * Initializer Agent를 실행하여 PRD로부터 feature_list.json 생성
12
+ */
13
+ export async function runInitializerAgent(prdPath, baseDir) {
14
+ try {
15
+ printInfo(messages.init.runningInitializer);
16
+ console.log('');
17
+ // 템플릿 읽기
18
+ const templatePath = path.join(baseDir, '.aiag', 'templates', 'initializer.md');
19
+ if (!fs.existsSync(templatePath)) {
20
+ return {
21
+ success: false,
22
+ error: 'initializer.md 템플릿을 찾을 수 없습니다.',
23
+ };
24
+ }
25
+ const template = fs.readFileSync(templatePath, 'utf-8');
26
+ // PRD 읽기
27
+ const prdContent = fs.readFileSync(prdPath, 'utf-8');
28
+ // 프롬프트 생성
29
+ const prompt = generateInitializerPrompt(template, prdContent, prdPath, baseDir);
30
+ // 진행 상황 출력
31
+ printInfo(`📄 ${messages.init.progress.readingPrd}`);
32
+ printInfo(`🧠 ${messages.init.progress.analyzing}`);
33
+ printInfo(`🔨 ${messages.init.progress.decomposing}`);
34
+ console.log('');
35
+ // Initializer Agent 실행
36
+ // 현재는 프롬프트를 파일로 저장하여 사용자가 수동으로 실행할 수 있도록 함
37
+ // 추후 Claude Code CLI나 API 통합 예정
38
+ const promptFilePath = await saveInitializerPrompt(prompt, baseDir);
39
+ printInfo(`💡 Initializer Agent 프롬프트가 생성되었습니다:`);
40
+ console.log(` ${colors.cyan(promptFilePath)}`);
41
+ console.log('');
42
+ console.log(colors.dim('수동 실행 방법:'));
43
+ console.log(` ${colors.cyan('claude code')} 를 실행하여 위 프롬프트의 내용을 입력하세요.`);
44
+ console.log('');
45
+ console.log(colors.dim('또는 자동 실행 (Claude Code CLI 필요):'));
46
+ console.log(` ${colors.cyan(`claude code --print "$(cat ${promptFilePath})"`)}`);
47
+ console.log('');
48
+ // feature_list.json이 생성되었는지 확인 (수동 실행 후)
49
+ const result = checkInitializerResult(baseDir);
50
+ return result;
51
+ }
52
+ catch (error) {
53
+ return {
54
+ success: false,
55
+ error: String(error),
56
+ };
57
+ }
58
+ }
59
+ /**
60
+ * Initializer Agent 프롬프트 생성
61
+ */
62
+ function generateInitializerPrompt(template, prdContent, prdPath, baseDir) {
63
+ const relativePrdPath = path.relative(baseDir, prdPath);
64
+ return `
65
+ ${template}
66
+
67
+ ---
68
+
69
+ ## 작업 지시
70
+
71
+ 다음 PRD를 분석하여 \`.aiag/feature_list.json\`을 생성하고, 프로젝트 루트에 \`CLAUDE.md\`를 생성하세요.
72
+
73
+ ### PRD 위치
74
+ \`${relativePrdPath}\`
75
+
76
+ ### PRD 내용
77
+
78
+ \`\`\`markdown
79
+ ${prdContent}
80
+ \`\`\`
81
+
82
+ ### 생성할 파일
83
+
84
+ #### 1. .aiag/feature_list.json
85
+ - 30-100개의 테스트 가능한 기능으로 분해
86
+ - 각 기능은 30분-2시간 내 구현 가능한 크기
87
+ - 명확한 acceptanceCriteria 포함
88
+ - 실행 가능한 testCommand 포함
89
+ - 모든 passes는 false로 설정
90
+ - priority는 의존성을 고려하여 설정 (critical > high > medium > low)
91
+
92
+ #### 2. CLAUDE.md
93
+ 프로젝트 루트에 다음 내용을 포함한 문서 생성:
94
+ - 프로젝트 개요 (PRD에서 추출한 핵심 목표)
95
+ - 주요 기능 (3-5개 요약)
96
+ - 기술 스택 (package.json 분석 + PRD 명시사항)
97
+ - 아키텍처 (프로젝트 구조 및 설계 패턴)
98
+ - 도메인 지식 (비즈니스 용어 및 규칙)
99
+ - 제약사항 (성능, 브라우저, 접근성 등)
100
+ - AIAG 워크플로우
101
+ - 코딩 컨벤션
102
+
103
+ ### 주의사항
104
+ 1. feature_list.json의 모든 기능은 \`"passes": false\`로 설정
105
+ 2. 각 기능은 독립적으로 테스트 가능해야 함
106
+ 3. testCommand는 실제로 실행 가능한 명령어여야 함
107
+ 4. CLAUDE.md는 Claude Code가 세션 시작 시 읽을 수 있도록 명확하게 작성
108
+
109
+ ### 현재 디렉토리
110
+ \`${baseDir}\`
111
+
112
+ 작업을 시작하세요.
113
+ `.trim();
114
+ }
115
+ /**
116
+ * 프롬프트를 파일로 저장
117
+ */
118
+ async function saveInitializerPrompt(prompt, baseDir) {
119
+ const promptPath = path.join(baseDir, '.aiag', '.initializer_prompt.md');
120
+ fs.writeFileSync(promptPath, prompt);
121
+ return promptPath;
122
+ }
123
+ /**
124
+ * Initializer Agent 실행 결과 확인
125
+ */
126
+ function checkInitializerResult(baseDir) {
127
+ const featureListPath = path.join(baseDir, '.aiag', 'feature_list.json');
128
+ if (!fs.existsSync(featureListPath)) {
129
+ return {
130
+ success: false,
131
+ error: 'feature_list.json이 아직 생성되지 않았습니다. Initializer Agent를 실행하세요.',
132
+ };
133
+ }
134
+ try {
135
+ const featureList = readFeatureList(baseDir);
136
+ if (!featureList) {
137
+ return {
138
+ success: false,
139
+ error: 'feature_list.json을 읽을 수 없습니다.',
140
+ };
141
+ }
142
+ const features = featureList.features || [];
143
+ const categories = [...new Set(features.map((f) => f.category))];
144
+ return {
145
+ success: true,
146
+ featuresGenerated: features.length,
147
+ categories,
148
+ };
149
+ }
150
+ catch (error) {
151
+ return {
152
+ success: false,
153
+ error: `feature_list.json 파싱 오류: ${error}`,
154
+ };
155
+ }
156
+ }
157
+ /**
158
+ * feature_list.json에서 카테고리별 기능 수 계산
159
+ */
160
+ export function countFeaturesByCategory(baseDir, category) {
161
+ const featureList = readFeatureList(baseDir);
162
+ if (!featureList)
163
+ return 0;
164
+ const features = featureList.features || [];
165
+ return features.filter((f) => f.category === category).length;
166
+ }
167
+ /**
168
+ * Claude Code CLI를 사용한 자동 실행 (옵션)
169
+ * 환경에 Claude Code가 설치되어 있어야 함
170
+ */
171
+ export async function executeInitializerWithClaudeCode(promptPath, baseDir) {
172
+ try {
173
+ execSync(`claude code --print "$(cat ${promptPath})"`, {
174
+ cwd: baseDir,
175
+ stdio: 'inherit',
176
+ });
177
+ }
178
+ catch (error) {
179
+ throw new Error(`Claude Code 실행 실패: ${error}`);
180
+ }
181
+ }
182
+ //# sourceMappingURL=initializerAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializerAgent.js","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"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"}