aiag-cli 1.6.3 → 1.7.1

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.
Files changed (45) hide show
  1. package/README.md +50 -2
  2. package/dist/cli.js +2 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auto.d.ts +1 -2
  5. package/dist/commands/auto.d.ts.map +1 -1
  6. package/dist/commands/auto.js +28 -173
  7. package/dist/commands/auto.js.map +1 -1
  8. package/dist/commands/init.d.ts +1 -0
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +246 -170
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/next.d.ts.map +1 -1
  13. package/dist/commands/next.js +36 -3
  14. package/dist/commands/next.js.map +1 -1
  15. package/dist/commands/session.d.ts.map +1 -1
  16. package/dist/commands/session.js +11 -1
  17. package/dist/commands/session.js.map +1 -1
  18. package/dist/commands/work.d.ts.map +1 -1
  19. package/dist/commands/work.js +46 -40
  20. package/dist/commands/work.js.map +1 -1
  21. package/dist/utils/claudeMd.d.ts +49 -0
  22. package/dist/utils/claudeMd.d.ts.map +1 -0
  23. package/dist/utils/claudeMd.js +413 -0
  24. package/dist/utils/claudeMd.js.map +1 -0
  25. package/dist/utils/initializerAgent.d.ts +24 -0
  26. package/dist/utils/initializerAgent.d.ts.map +1 -0
  27. package/dist/utils/initializerAgent.js +182 -0
  28. package/dist/utils/initializerAgent.js.map +1 -0
  29. package/dist/utils/messages.d.ts +184 -0
  30. package/dist/utils/messages.d.ts.map +1 -0
  31. package/dist/utils/messages.js +232 -0
  32. package/dist/utils/messages.js.map +1 -0
  33. package/dist/utils/output.d.ts +22 -0
  34. package/dist/utils/output.d.ts.map +1 -1
  35. package/dist/utils/output.js +38 -0
  36. package/dist/utils/output.js.map +1 -1
  37. package/dist/utils/prd.d.ts +39 -0
  38. package/dist/utils/prd.d.ts.map +1 -0
  39. package/dist/utils/prd.js +77 -0
  40. package/dist/utils/prd.js.map +1 -0
  41. package/dist/utils/sessionContext.d.ts +33 -0
  42. package/dist/utils/sessionContext.d.ts.map +1 -0
  43. package/dist/utils/sessionContext.js +132 -0
  44. package/dist/utils/sessionContext.js.map +1 -0
  45. package/package.json +1 -1
@@ -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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"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * 한국어 메시지 관리 시스템
3
+ * 모든 CLI 출력 메시지를 중앙에서 관리
4
+ */
5
+ export declare const messages: {
6
+ common: {
7
+ success: string;
8
+ error: string;
9
+ warning: string;
10
+ loading: string;
11
+ notInitialized: string;
12
+ runInitFirst: string;
13
+ };
14
+ init: {
15
+ header: string;
16
+ alreadyInitialized: string;
17
+ useForce: string;
18
+ noPrdFound: string;
19
+ prdGuidance: {
20
+ title: string;
21
+ createFirst: string;
22
+ files: string[];
23
+ whatToInclude: string;
24
+ includes: string[];
25
+ orSkip: string;
26
+ skipCommand: string;
27
+ };
28
+ foundPrd: string;
29
+ runningInitializer: string;
30
+ progress: {
31
+ creatingStructure: string;
32
+ readingPrd: string;
33
+ analyzing: string;
34
+ decomposing: string;
35
+ generatingClaudeMd: string;
36
+ validating: string;
37
+ };
38
+ complete: {
39
+ success: string;
40
+ filesCreated: string;
41
+ featureListDesc: string;
42
+ progressDesc: string;
43
+ claudeMdDesc: string;
44
+ nextSteps: string;
45
+ steps: string[];
46
+ };
47
+ files: {
48
+ featureList: string;
49
+ progress: string;
50
+ initSh: string;
51
+ sessionContext: string;
52
+ templates: string;
53
+ vscode: string;
54
+ claudeMd: string;
55
+ };
56
+ };
57
+ status: {
58
+ header: string;
59
+ notInitialized: string;
60
+ progress: string;
61
+ byCategory: string;
62
+ byPriority: string;
63
+ recentActivity: string;
64
+ noFeatures: string;
65
+ completedFeatures: string;
66
+ remainingFeatures: string;
67
+ lastUpdate: string;
68
+ };
69
+ next: {
70
+ header: string;
71
+ notInitialized: string;
72
+ noFeaturesAvailable: string;
73
+ allComplete: string;
74
+ recommended: string;
75
+ startWith: string;
76
+ category: string;
77
+ priority: string;
78
+ description: string;
79
+ acceptanceCriteria: string;
80
+ };
81
+ work: {
82
+ header: string;
83
+ notInitialized: string;
84
+ notFound: string;
85
+ alreadyComplete: string;
86
+ starting: string;
87
+ sessionUpdated: string;
88
+ promptReady: string;
89
+ feature: string;
90
+ status: string;
91
+ testCommand: string;
92
+ };
93
+ auto: {
94
+ header: string;
95
+ notInitialized: string;
96
+ noFeatures: string;
97
+ starting: string;
98
+ loopMode: string;
99
+ resumeMode: string;
100
+ processing: string;
101
+ completed: string;
102
+ skipped: string;
103
+ currentFeature: string;
104
+ progress: string;
105
+ };
106
+ test: {
107
+ header: string;
108
+ notInitialized: string;
109
+ notFound: string;
110
+ noTestCommand: string;
111
+ running: string;
112
+ passed: string;
113
+ failed: string;
114
+ allPassed: string;
115
+ summary: string;
116
+ total: string;
117
+ passed_count: string;
118
+ failed_count: string;
119
+ };
120
+ complete: {
121
+ header: string;
122
+ notInitialized: string;
123
+ notFound: string;
124
+ alreadyComplete: string;
125
+ testRequired: string;
126
+ skipTest: string;
127
+ marked: string;
128
+ runningTest: string;
129
+ testPassed: string;
130
+ updated: string;
131
+ };
132
+ commit: {
133
+ header: string;
134
+ notInitialized: string;
135
+ noChanges: string;
136
+ analyzing: string;
137
+ generatingMessage: string;
138
+ committed: string;
139
+ };
140
+ session: {
141
+ start: {
142
+ header: string;
143
+ notInitialized: string;
144
+ started: string;
145
+ checking: string;
146
+ ready: string;
147
+ };
148
+ end: {
149
+ header: string;
150
+ notInitialized: string;
151
+ ended: string;
152
+ summary: string;
153
+ featuresCompleted: string;
154
+ nextSession: string;
155
+ };
156
+ };
157
+ validate: {
158
+ header: string;
159
+ notInitialized: string;
160
+ valid: string;
161
+ invalid: string;
162
+ errors: string;
163
+ warnings: string;
164
+ checking: string;
165
+ issuesFound: string;
166
+ };
167
+ errors: {
168
+ fileNotFound: string;
169
+ invalidJson: string;
170
+ commandFailed: string;
171
+ unknownError: string;
172
+ };
173
+ };
174
+ /**
175
+ * 메시지 템플릿에 매개변수를 치환
176
+ * @example formatMessage("기능 {count}개 생성됨", { count: 47 })
177
+ */
178
+ export declare function formatMessage(template: string, params: Record<string, string | number>): string;
179
+ /**
180
+ * 중첩된 객체에서 키 경로로 메시지 가져오기
181
+ * @example getMessage("init.header") → "AIAG 프로젝트 초기화"
182
+ */
183
+ export declare function getMessage(keyPath: string): string;
184
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuNpB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACtC,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAalD"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * 한국어 메시지 관리 시스템
3
+ * 모든 CLI 출력 메시지를 중앙에서 관리
4
+ */
5
+ export const messages = {
6
+ // 공통 메시지
7
+ common: {
8
+ success: '성공',
9
+ error: '오류',
10
+ warning: '경고',
11
+ loading: '처리 중...',
12
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
13
+ runInitFirst: '"aiag init"를 먼저 실행하세요.',
14
+ },
15
+ // Init 명령 메시지
16
+ init: {
17
+ header: 'AIAG 프로젝트 초기화',
18
+ alreadyInitialized: 'AIAG가 이미 초기화되어 있습니다.',
19
+ useForce: '--force 옵션을 사용하여 재초기화할 수 있습니다.',
20
+ // PRD 관련
21
+ noPrdFound: 'PRD를 찾을 수 없습니다',
22
+ prdGuidance: {
23
+ title: 'AIAG는 Product Requirements Document(PRD)와 함께 사용할 때 최상의 결과를 제공합니다.',
24
+ createFirst: '먼저 다음 파일 중 하나를 생성하세요:',
25
+ files: [
26
+ 'PRD.md (권장)',
27
+ 'REQUIREMENTS.md',
28
+ 'docs/prd.md'
29
+ ],
30
+ whatToInclude: 'PRD에 포함할 내용:',
31
+ includes: [
32
+ '프로젝트 개요 및 목표',
33
+ '핵심 기능 및 요구사항',
34
+ '기술적 제약사항',
35
+ '성공 기준'
36
+ ],
37
+ orSkip: '또는 다음 명령으로 최소 초기화만 수행:',
38
+ skipCommand: 'aiag init --minimal'
39
+ },
40
+ foundPrd: 'PRD를 찾았습니다',
41
+ runningInitializer: 'Initializer Agent 실행 중...',
42
+ // 진행 상태
43
+ progress: {
44
+ creatingStructure: '.aiag/ 디렉토리 구조 생성 중...',
45
+ readingPrd: 'PRD 읽는 중...',
46
+ analyzing: '요구사항 분석 중...',
47
+ decomposing: '기능으로 분해 중...',
48
+ generatingClaudeMd: 'CLAUDE.md 생성 중...',
49
+ validating: 'Feature list 유효성 검사 중...',
50
+ },
51
+ // 완료 메시지
52
+ complete: {
53
+ success: 'AIAG 초기화 완료!',
54
+ filesCreated: '생성된 파일:',
55
+ featureListDesc: '작업 목록 (무엇을 할지)',
56
+ progressDesc: '진행 기록 (무엇을 했는지)',
57
+ claudeMdDesc: 'Claude 작업 지침 (어떻게 할지)',
58
+ nextSteps: '다음 단계:',
59
+ steps: [
60
+ 'CLAUDE.md 검토 및 필요시 수정',
61
+ '.aiag/feature_list.json 검토',
62
+ "'aiag status' 실행하여 기능 분포 확인",
63
+ "'aiag next' 실행하여 첫 번째 기능 시작",
64
+ "(선택) 커밋: git add .aiag CLAUDE.md && git commit -m \"feat: AIAG 초기화\""
65
+ ]
66
+ },
67
+ // 파일 생성 로그
68
+ files: {
69
+ featureList: '.aiag/feature_list.json',
70
+ progress: '.aiag/progress.md',
71
+ initSh: '.aiag/init.sh',
72
+ sessionContext: '.aiag/session_context.md',
73
+ templates: '.aiag/templates/',
74
+ vscode: '.vscode/settings.json',
75
+ claudeMd: 'CLAUDE.md'
76
+ }
77
+ },
78
+ // Status 명령 메시지
79
+ status: {
80
+ header: '프로젝트 진행 상황',
81
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
82
+ progress: '전체 진행률',
83
+ byCategory: '카테고리별 진행률',
84
+ byPriority: '우선순위별 진행률',
85
+ recentActivity: '최근 활동',
86
+ noFeatures: '기능이 정의되지 않았습니다.',
87
+ completedFeatures: '완료된 기능',
88
+ remainingFeatures: '남은 기능',
89
+ lastUpdate: '마지막 업데이트',
90
+ },
91
+ // Next 명령 메시지
92
+ next: {
93
+ header: '다음 작업 추천',
94
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
95
+ noFeaturesAvailable: '작업 가능한 기능이 없습니다.',
96
+ allComplete: '🎉 모든 기능이 완료되었습니다!',
97
+ recommended: '추천 기능:',
98
+ startWith: '다음 명령으로 시작하세요:',
99
+ category: '카테고리',
100
+ priority: '우선순위',
101
+ description: '설명',
102
+ acceptanceCriteria: '완료 조건',
103
+ },
104
+ // Work 명령 메시지
105
+ work: {
106
+ header: '기능 작업 시작',
107
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
108
+ notFound: '기능을 찾을 수 없습니다: {id}',
109
+ alreadyComplete: '이 기능은 이미 완료되었습니다: {id}',
110
+ starting: '작업 시작 중: {id}',
111
+ sessionUpdated: '세션 컨텍스트가 업데이트되었습니다.',
112
+ promptReady: '작업 프롬프트가 준비되었습니다.',
113
+ feature: '기능',
114
+ status: '상태',
115
+ testCommand: '테스트 명령',
116
+ },
117
+ // Auto 명령 메시지
118
+ auto: {
119
+ header: 'AI Agent 자동 실행 모드',
120
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
121
+ noFeatures: '작업할 기능이 없습니다.',
122
+ starting: 'AI Agent 실행 중... (최대 {count}개 기능)',
123
+ loopMode: '🔄 무한 루프 모드 활성화 (Ctrl+C로 중단)',
124
+ resumeMode: '▶️ 이어서 시작 모드 활성화',
125
+ processing: '처리 중',
126
+ completed: '완료',
127
+ skipped: '건너뜀',
128
+ currentFeature: '현재 작업',
129
+ progress: '진행률',
130
+ },
131
+ // Test 명령 메시지
132
+ test: {
133
+ header: '기능 테스트 실행',
134
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
135
+ notFound: '기능을 찾을 수 없습니다: {id}',
136
+ noTestCommand: '테스트 명령이 정의되지 않았습니다.',
137
+ running: '테스트 실행 중...',
138
+ passed: '✅ 테스트 통과',
139
+ failed: '❌ 테스트 실패',
140
+ allPassed: '모든 테스트 통과!',
141
+ summary: '테스트 요약',
142
+ total: '전체',
143
+ passed_count: '통과',
144
+ failed_count: '실패',
145
+ },
146
+ // Complete 명령 메시지
147
+ complete: {
148
+ header: '기능 완료 처리',
149
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
150
+ notFound: '기능을 찾을 수 없습니다: {id}',
151
+ alreadyComplete: '이미 완료된 기능입니다.',
152
+ testRequired: '완료 처리 전에 테스트를 통과해야 합니다.',
153
+ skipTest: '--skip-test 옵션으로 테스트를 건너뛸 수 있습니다.',
154
+ marked: '기능이 완료 처리되었습니다: {id}',
155
+ runningTest: '테스트 실행 중...',
156
+ testPassed: '테스트 통과!',
157
+ updated: 'feature_list.json 업데이트됨',
158
+ },
159
+ // Commit 명령 메시지
160
+ commit: {
161
+ header: 'Git 커밋',
162
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
163
+ noChanges: '커밋할 변경사항이 없습니다.',
164
+ analyzing: '변경사항 분석 중...',
165
+ generatingMessage: '커밋 메시지 생성 중...',
166
+ committed: '커밋 완료',
167
+ },
168
+ // Session 명령 메시지
169
+ session: {
170
+ start: {
171
+ header: '세션 시작',
172
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
173
+ started: '새 세션이 시작되었습니다.',
174
+ checking: '환경 확인 중...',
175
+ ready: '개발 환경 준비 완료',
176
+ },
177
+ end: {
178
+ header: '세션 종료',
179
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
180
+ ended: '세션이 종료되었습니다.',
181
+ summary: '세션 요약',
182
+ featuresCompleted: '완료된 기능',
183
+ nextSession: '다음 세션 시 권장사항',
184
+ }
185
+ },
186
+ // Validate 명령 메시지
187
+ validate: {
188
+ header: 'Feature List 유효성 검사',
189
+ notInitialized: 'AIAG가 초기화되지 않았습니다.',
190
+ valid: '✅ Feature list가 유효합니다.',
191
+ invalid: '❌ Feature list에 문제가 있습니다.',
192
+ errors: '오류',
193
+ warnings: '경고',
194
+ checking: '유효성 검사 중...',
195
+ issuesFound: '개의 문제 발견',
196
+ },
197
+ // 에러 메시지
198
+ errors: {
199
+ fileNotFound: '파일을 찾을 수 없습니다: {path}',
200
+ invalidJson: 'JSON 파싱 오류: {path}',
201
+ commandFailed: '명령 실행 실패: {command}',
202
+ unknownError: '알 수 없는 오류가 발생했습니다.',
203
+ }
204
+ };
205
+ /**
206
+ * 메시지 템플릿에 매개변수를 치환
207
+ * @example formatMessage("기능 {count}개 생성됨", { count: 47 })
208
+ */
209
+ export function formatMessage(template, params) {
210
+ return template.replace(/\{(\w+)\}/g, (_, key) => {
211
+ const value = params[key];
212
+ return value !== undefined ? String(value) : `{${key}}`;
213
+ });
214
+ }
215
+ /**
216
+ * 중첩된 객체에서 키 경로로 메시지 가져오기
217
+ * @example getMessage("init.header") → "AIAG 프로젝트 초기화"
218
+ */
219
+ export function getMessage(keyPath) {
220
+ const keys = keyPath.split('.');
221
+ let result = messages;
222
+ for (const key of keys) {
223
+ if (result && typeof result === 'object' && key in result) {
224
+ result = result[key];
225
+ }
226
+ else {
227
+ return keyPath; // 키를 찾지 못하면 원래 키 반환
228
+ }
229
+ }
230
+ return typeof result === 'string' ? result : keyPath;
231
+ }
232
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
+ import { messages, formatMessage, getMessage } from './messages.js';
1
2
  /**
2
3
  * Output utilities for CLI
3
4
  */
5
+ export { messages, formatMessage, getMessage };
4
6
  export declare const colors: {
5
7
  success: import("chalk").ChalkInstance;
6
8
  error: import("chalk").ChalkInstance;
@@ -69,4 +71,24 @@ export declare function printInfo(message: string): void;
69
71
  * Print a key-value pair
70
72
  */
71
73
  export declare function printKeyValue(key: string, value: string | number): void;
74
+ /**
75
+ * Print a message using key path
76
+ * @example printMessageByKey('init.header') → "AIAG 프로젝트 초기화"
77
+ */
78
+ export declare function printMessageByKey(keyPath: string, params?: Record<string, string | number>): void;
79
+ /**
80
+ * Print a list of items with bullets
81
+ */
82
+ export declare function printList(items: string[], options?: {
83
+ indent?: number;
84
+ bullet?: string;
85
+ }): void;
86
+ /**
87
+ * Print a divider line
88
+ */
89
+ export declare function printDivider(char?: string, length?: number): void;
90
+ /**
91
+ * Print empty lines
92
+ */
93
+ export declare function printEmptyLine(count?: number): void;
72
94
  //# sourceMappingURL=output.d.ts.map