aiag-cli 2.2.2 → 2.3.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.
- package/README.md +72 -37
- package/dist/cli.js +30 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.js +45 -41
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/feature.d.ts +11 -0
- package/dist/commands/feature.d.ts.map +1 -0
- package/dist/commands/feature.js +153 -0
- package/dist/commands/feature.js.map +1 -0
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +29 -78
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/prd.d.ts +12 -0
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/commands/prd.js +179 -0
- package/dist/commands/prd.js.map +1 -0
- package/dist/prompts/coding.d.ts.map +1 -1
- package/dist/prompts/coding.js +12 -0
- package/dist/prompts/coding.js.map +1 -1
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +2 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/initializer.d.ts.map +1 -1
- package/dist/prompts/initializer.js +6 -0
- package/dist/prompts/initializer.js.map +1 -1
- package/dist/prompts/prd.d.ts +28 -0
- package/dist/prompts/prd.d.ts.map +1 -0
- package/dist/prompts/prd.js +105 -0
- package/dist/prompts/prd.js.map +1 -0
- package/dist/skills/index.d.ts +12 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +12 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/installer.d.ts +38 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +153 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/skills/loader.d.ts +34 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +134 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/runner.d.ts +14 -0
- package/dist/skills/runner.d.ts.map +1 -0
- package/dist/skills/runner.js +238 -0
- package/dist/skills/runner.js.map +1 -0
- package/dist/types.d.ts +127 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/prd.d.ts +21 -0
- package/dist/utils/prd.d.ts.map +1 -1
- package/dist/utils/prd.js +69 -0
- package/dist/utils/prd.js.map +1 -1
- package/dist/utils/taskmasterConverter.d.ts +72 -0
- package/dist/utils/taskmasterConverter.d.ts.map +1 -0
- package/dist/utils/taskmasterConverter.js +401 -0
- package/dist/utils/taskmasterConverter.js.map +1 -0
- package/dist/utils/taskmasterParser.d.ts +35 -0
- package/dist/utils/taskmasterParser.d.ts.map +1 -0
- package/dist/utils/taskmasterParser.js +259 -0
- package/dist/utils/taskmasterParser.js.map +1 -0
- package/package.json +1 -1
- package/templates/skills/prd-taskmaster/.taskmaster/docs/prd.md +2571 -0
- package/templates/skills/prd-taskmaster/.taskmaster/scripts/execution-state.py +87 -0
- package/templates/skills/prd-taskmaster/.taskmaster/scripts/learn-accuracy.py +113 -0
- package/templates/skills/prd-taskmaster/.taskmaster/scripts/rollback.sh +71 -0
- package/templates/skills/prd-taskmaster/.taskmaster/scripts/security-audit.py +130 -0
- package/templates/skills/prd-taskmaster/.taskmaster/scripts/track-time.py +133 -0
- package/templates/skills/prd-taskmaster/LICENSE +21 -0
- package/templates/skills/prd-taskmaster/README.md +608 -0
- package/templates/skills/prd-taskmaster/SKILL.md +1258 -0
- package/templates/skills/prd-taskmaster/reference/taskmaster-integration-guide.md +645 -0
- package/templates/skills/prd-taskmaster/reference/validation-checklist.md +394 -0
- package/templates/skills/prd-taskmaster/scripts/setup-taskmaster.sh +112 -0
- package/templates/skills/prd-taskmaster/templates/CLAUDE.md.template +635 -0
- package/templates/skills/prd-taskmaster/templates/taskmaster-prd-comprehensive.md +983 -0
- package/templates/skills/prd-taskmaster/templates/taskmaster-prd-minimal.md +103 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prd-taskmaster PRD 파서
|
|
3
|
+
*
|
|
4
|
+
* prd-taskmaster가 생성하는 구조화된 PRD를 파싱하여
|
|
5
|
+
* TaskmasterRequirement 객체 배열로 변환합니다.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 우선순위 섹션 헤더 패턴
|
|
9
|
+
*/
|
|
10
|
+
const PRIORITY_SECTION_PATTERNS = {
|
|
11
|
+
P0: /### Must Have \(P0\)/i,
|
|
12
|
+
P1: /### Should Have \(P1\)/i,
|
|
13
|
+
P2: /### Nice to Have \(P2\)/i,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 요구사항 블록 시작 패턴
|
|
17
|
+
* #### REQ-001: Title Here
|
|
18
|
+
*/
|
|
19
|
+
const REQUIREMENT_HEADER_PATTERN = /^#### (REQ-\d{3}):\s*(.+)$/m;
|
|
20
|
+
/**
|
|
21
|
+
* Acceptance Criteria 체크리스트 패턴
|
|
22
|
+
* - [ ] Item text
|
|
23
|
+
* - [x] Completed item
|
|
24
|
+
*/
|
|
25
|
+
const CHECKLIST_PATTERN = /^- \[[ x]\]\s*(.+)$/gm;
|
|
26
|
+
/**
|
|
27
|
+
* Task Breakdown 항목 패턴
|
|
28
|
+
* - Task description: Complexity (Xh)
|
|
29
|
+
*/
|
|
30
|
+
const TASK_BREAKDOWN_PATTERN = /^- (.+?):\s*(Small|Medium|Large)\s*\((\d+)h?\)/gm;
|
|
31
|
+
/**
|
|
32
|
+
* Dependencies 패턴
|
|
33
|
+
* **Dependencies:** REQ-001, REQ-002 또는 None
|
|
34
|
+
*/
|
|
35
|
+
const DEPENDENCIES_PATTERN = /\*\*Dependencies:\*\*\s*(.+?)(?:\n|$)/i;
|
|
36
|
+
/**
|
|
37
|
+
* 메타데이터 추출 패턴
|
|
38
|
+
*/
|
|
39
|
+
const METADATA_PATTERNS = {
|
|
40
|
+
projectName: /^#\s+(.+?)(?:\s+PRD|\s+Requirements|\s*$)/im,
|
|
41
|
+
version: /\*\*Version:\*\*\s*(.+?)(?:\n|$)/i,
|
|
42
|
+
techStack: /## Tech Stack[\s\S]*?(?=##|$)/i,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* prd-taskmaster PRD를 파싱합니다
|
|
46
|
+
*
|
|
47
|
+
* @param content PRD 파일 전체 내용
|
|
48
|
+
* @returns 파싱된 PRD 결과
|
|
49
|
+
*/
|
|
50
|
+
export function parseTaskmasterPrd(content) {
|
|
51
|
+
const requirements = [];
|
|
52
|
+
const metadata = extractMetadata(content);
|
|
53
|
+
// 각 우선순위 섹션별로 파싱
|
|
54
|
+
for (const [priority, pattern] of Object.entries(PRIORITY_SECTION_PATTERNS)) {
|
|
55
|
+
const sectionRequirements = parsePrioritySection(content, pattern, priority);
|
|
56
|
+
requirements.push(...sectionRequirements);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
format: 'taskmaster',
|
|
60
|
+
requirements,
|
|
61
|
+
metadata,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 특정 우선순위 섹션에서 요구사항을 파싱합니다
|
|
66
|
+
*/
|
|
67
|
+
function parsePrioritySection(content, sectionPattern, priority) {
|
|
68
|
+
const requirements = [];
|
|
69
|
+
// 섹션 시작 위치 찾기
|
|
70
|
+
const sectionMatch = content.match(sectionPattern);
|
|
71
|
+
if (!sectionMatch) {
|
|
72
|
+
return requirements;
|
|
73
|
+
}
|
|
74
|
+
const sectionStart = sectionMatch.index;
|
|
75
|
+
// 섹션 끝 찾기 (다음 ### 또는 ## 또는 파일 끝)
|
|
76
|
+
const remainingContent = content.slice(sectionStart);
|
|
77
|
+
const nextSectionMatch = remainingContent.match(/\n##(?:#)?\s+/);
|
|
78
|
+
const sectionEnd = nextSectionMatch
|
|
79
|
+
? sectionStart + nextSectionMatch.index
|
|
80
|
+
: content.length;
|
|
81
|
+
const sectionContent = content.slice(sectionStart, sectionEnd);
|
|
82
|
+
// 요구사항 블록들 추출
|
|
83
|
+
const reqBlocks = splitIntoRequirementBlocks(sectionContent);
|
|
84
|
+
for (const block of reqBlocks) {
|
|
85
|
+
const requirement = parseRequirementBlock(block, priority);
|
|
86
|
+
if (requirement) {
|
|
87
|
+
requirements.push(requirement);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return requirements;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 섹션 내용을 개별 요구사항 블록으로 분리합니다
|
|
94
|
+
*/
|
|
95
|
+
function splitIntoRequirementBlocks(sectionContent) {
|
|
96
|
+
const blocks = [];
|
|
97
|
+
// #### REQ-XXX: 패턴으로 분리
|
|
98
|
+
const parts = sectionContent.split(/(?=^#### REQ-\d{3}:)/m);
|
|
99
|
+
for (const part of parts) {
|
|
100
|
+
if (REQUIREMENT_HEADER_PATTERN.test(part)) {
|
|
101
|
+
blocks.push(part.trim());
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return blocks;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 개별 요구사항 블록을 파싱합니다
|
|
108
|
+
*/
|
|
109
|
+
function parseRequirementBlock(block, priority) {
|
|
110
|
+
// 헤더에서 ID와 제목 추출
|
|
111
|
+
const headerMatch = block.match(REQUIREMENT_HEADER_PATTERN);
|
|
112
|
+
if (!headerMatch) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const [, id, title] = headerMatch;
|
|
116
|
+
// Description 추출 (첫 번째 **Description:** 섹션)
|
|
117
|
+
const description = extractSection(block, 'Description');
|
|
118
|
+
// Acceptance Criteria 추출
|
|
119
|
+
const acceptanceCriteria = extractChecklistItems(block);
|
|
120
|
+
// Task Breakdown 추출
|
|
121
|
+
const taskBreakdown = extractTaskBreakdown(block);
|
|
122
|
+
// Dependencies 추출
|
|
123
|
+
const dependencies = extractDependencies(block);
|
|
124
|
+
// Technical Spec 추출 (있는 경우)
|
|
125
|
+
const technicalSpec = extractSection(block, 'Technical Spec');
|
|
126
|
+
return {
|
|
127
|
+
id,
|
|
128
|
+
title: title.trim(),
|
|
129
|
+
priority,
|
|
130
|
+
description: description || '',
|
|
131
|
+
acceptanceCriteria,
|
|
132
|
+
taskBreakdown,
|
|
133
|
+
dependencies,
|
|
134
|
+
technicalSpec: technicalSpec || undefined,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* **SectionName:** 형식의 섹션 내용을 추출합니다
|
|
139
|
+
*/
|
|
140
|
+
function extractSection(block, sectionName) {
|
|
141
|
+
const pattern = new RegExp(`\\*\\*${sectionName}:\\*\\*\\s*([\\s\\S]*?)(?=\\*\\*[A-Z]|$)`, 'i');
|
|
142
|
+
const match = block.match(pattern);
|
|
143
|
+
if (!match) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
// 결과 정리 (불필요한 공백 제거)
|
|
147
|
+
return match[1]
|
|
148
|
+
.trim()
|
|
149
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
150
|
+
.trim();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Acceptance Criteria 체크리스트 항목들을 추출합니다
|
|
154
|
+
*/
|
|
155
|
+
export function extractChecklistItems(block) {
|
|
156
|
+
const items = [];
|
|
157
|
+
// Acceptance Criteria 섹션 찾기
|
|
158
|
+
const acSection = block.match(/\*\*Acceptance Criteria:\*\*([\s\S]*?)(?=\*\*[A-Z]|####|$)/i);
|
|
159
|
+
if (!acSection) {
|
|
160
|
+
return items;
|
|
161
|
+
}
|
|
162
|
+
const sectionContent = acSection[1];
|
|
163
|
+
// 체크리스트 항목 추출
|
|
164
|
+
const matches = sectionContent.matchAll(CHECKLIST_PATTERN);
|
|
165
|
+
for (const match of matches) {
|
|
166
|
+
items.push(match[1].trim());
|
|
167
|
+
}
|
|
168
|
+
return items;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Task Breakdown Hints를 추출합니다
|
|
172
|
+
*/
|
|
173
|
+
export function extractTaskBreakdown(block) {
|
|
174
|
+
const hints = [];
|
|
175
|
+
// Task Breakdown 섹션 찾기
|
|
176
|
+
const tbSection = block.match(/\*\*Task Breakdown.*?:\*\*([\s\S]*?)(?=\*\*[A-Z]|####|$)/i);
|
|
177
|
+
if (!tbSection) {
|
|
178
|
+
return hints;
|
|
179
|
+
}
|
|
180
|
+
const sectionContent = tbSection[1];
|
|
181
|
+
// Task Breakdown 항목 추출
|
|
182
|
+
const matches = sectionContent.matchAll(TASK_BREAKDOWN_PATTERN);
|
|
183
|
+
for (const match of matches) {
|
|
184
|
+
const [, description, complexity, hours] = match;
|
|
185
|
+
hints.push({
|
|
186
|
+
description: description.trim(),
|
|
187
|
+
complexity: complexity,
|
|
188
|
+
estimatedHours: parseInt(hours, 10),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return hints;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Dependencies를 추출합니다
|
|
195
|
+
*/
|
|
196
|
+
function extractDependencies(block) {
|
|
197
|
+
const match = block.match(DEPENDENCIES_PATTERN);
|
|
198
|
+
if (!match) {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
const depsText = match[1].trim();
|
|
202
|
+
// None이면 빈 배열
|
|
203
|
+
if (/^none$/i.test(depsText)) {
|
|
204
|
+
return [];
|
|
205
|
+
}
|
|
206
|
+
// REQ-XXX 형식 추출
|
|
207
|
+
const deps = depsText.match(/REQ-\d{3}/g);
|
|
208
|
+
return deps || [];
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* PRD 메타데이터를 추출합니다
|
|
212
|
+
*/
|
|
213
|
+
function extractMetadata(content) {
|
|
214
|
+
const metadata = {};
|
|
215
|
+
// 프로젝트 이름
|
|
216
|
+
const nameMatch = content.match(METADATA_PATTERNS.projectName);
|
|
217
|
+
if (nameMatch) {
|
|
218
|
+
metadata.projectName = nameMatch[1].trim();
|
|
219
|
+
}
|
|
220
|
+
// 버전
|
|
221
|
+
const versionMatch = content.match(METADATA_PATTERNS.version);
|
|
222
|
+
if (versionMatch) {
|
|
223
|
+
metadata.version = versionMatch[1].trim();
|
|
224
|
+
}
|
|
225
|
+
// Tech Stack (간단한 추출)
|
|
226
|
+
const techMatch = content.match(METADATA_PATTERNS.techStack);
|
|
227
|
+
if (techMatch) {
|
|
228
|
+
const techContent = techMatch[0];
|
|
229
|
+
// 기술 스택 키워드 추출 (간소화)
|
|
230
|
+
const techKeywords = techContent.match(/(?:React|Next\.js|Node\.js|TypeScript|Python|PostgreSQL|MongoDB|Redis|Docker|AWS|GCP|Azure)/gi);
|
|
231
|
+
if (techKeywords) {
|
|
232
|
+
metadata.techStack = [...new Set(techKeywords.map(t => t.toLowerCase()))];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return Object.keys(metadata).length > 0 ? metadata : undefined;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 요구사항 개수를 우선순위별로 집계합니다
|
|
239
|
+
*/
|
|
240
|
+
export function countRequirementsByPriority(requirements) {
|
|
241
|
+
return {
|
|
242
|
+
P0: requirements.filter(r => r.priority === 'P0').length,
|
|
243
|
+
P1: requirements.filter(r => r.priority === 'P1').length,
|
|
244
|
+
P2: requirements.filter(r => r.priority === 'P2').length,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 요구사항 ID 목록을 반환합니다
|
|
249
|
+
*/
|
|
250
|
+
export function getRequirementIds(requirements) {
|
|
251
|
+
return requirements.map(r => r.id);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* 특정 ID의 요구사항을 찾습니다
|
|
255
|
+
*/
|
|
256
|
+
export function findRequirementById(requirements, id) {
|
|
257
|
+
return requirements.find(r => r.id === id);
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=taskmasterParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskmasterParser.js","sourceRoot":"","sources":["../../src/utils/taskmasterParser.ts"],"names":[],"mappings":"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"}
|