@su-record/vibe 2.5.21 → 2.6.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 (81) hide show
  1. package/CLAUDE.md +154 -2
  2. package/README.md +132 -2
  3. package/commands/vibe.run.md +69 -44
  4. package/commands/vibe.spec.md +83 -0
  5. package/commands/vibe.trace.md +161 -0
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +5 -3
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/lib/IterationTracker.d.ts +3 -1
  10. package/dist/lib/IterationTracker.d.ts.map +1 -1
  11. package/dist/lib/IterationTracker.js +2 -1
  12. package/dist/lib/IterationTracker.js.map +1 -1
  13. package/dist/lib/constants.d.ts +14 -0
  14. package/dist/lib/constants.d.ts.map +1 -1
  15. package/dist/lib/constants.js +26 -0
  16. package/dist/lib/constants.js.map +1 -1
  17. package/dist/orchestrator/BackgroundManager.d.ts +109 -0
  18. package/dist/orchestrator/BackgroundManager.d.ts.map +1 -0
  19. package/dist/orchestrator/BackgroundManager.js +456 -0
  20. package/dist/orchestrator/BackgroundManager.js.map +1 -0
  21. package/dist/orchestrator/BackgroundManager.test.d.ts +6 -0
  22. package/dist/orchestrator/BackgroundManager.test.d.ts.map +1 -0
  23. package/dist/orchestrator/BackgroundManager.test.js +162 -0
  24. package/dist/orchestrator/BackgroundManager.test.js.map +1 -0
  25. package/dist/orchestrator/PhasePipeline.d.ts +106 -0
  26. package/dist/orchestrator/PhasePipeline.d.ts.map +1 -0
  27. package/dist/orchestrator/PhasePipeline.js +279 -0
  28. package/dist/orchestrator/PhasePipeline.js.map +1 -0
  29. package/dist/orchestrator/backgroundAgent.d.ts +2 -0
  30. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  31. package/dist/orchestrator/backgroundAgent.js +2 -0
  32. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  33. package/dist/orchestrator/index.d.ts +4 -1
  34. package/dist/orchestrator/index.d.ts.map +1 -1
  35. package/dist/orchestrator/index.js +5 -1
  36. package/dist/orchestrator/index.js.map +1 -1
  37. package/dist/tools/index.d.ts +4 -0
  38. package/dist/tools/index.d.ts.map +1 -1
  39. package/dist/tools/index.js +14 -0
  40. package/dist/tools/index.js.map +1 -1
  41. package/dist/tools/interaction/askUser.d.ts +115 -0
  42. package/dist/tools/interaction/askUser.d.ts.map +1 -0
  43. package/dist/tools/interaction/askUser.js +504 -0
  44. package/dist/tools/interaction/askUser.js.map +1 -0
  45. package/dist/tools/interaction/index.d.ts +8 -0
  46. package/dist/tools/interaction/index.d.ts.map +1 -0
  47. package/dist/tools/interaction/index.js +17 -0
  48. package/dist/tools/interaction/index.js.map +1 -0
  49. package/dist/tools/spec/index.d.ts +14 -0
  50. package/dist/tools/spec/index.d.ts.map +1 -0
  51. package/dist/tools/spec/index.js +15 -0
  52. package/dist/tools/spec/index.js.map +1 -0
  53. package/dist/tools/spec/prdParser.d.ts +43 -0
  54. package/dist/tools/spec/prdParser.d.ts.map +1 -0
  55. package/dist/tools/spec/prdParser.js +291 -0
  56. package/dist/tools/spec/prdParser.js.map +1 -0
  57. package/dist/tools/spec/prdParser.test.d.ts +6 -0
  58. package/dist/tools/spec/prdParser.test.d.ts.map +1 -0
  59. package/dist/tools/spec/prdParser.test.js +332 -0
  60. package/dist/tools/spec/prdParser.test.js.map +1 -0
  61. package/dist/tools/spec/requirementId.d.ts +65 -0
  62. package/dist/tools/spec/requirementId.d.ts.map +1 -0
  63. package/dist/tools/spec/requirementId.js +161 -0
  64. package/dist/tools/spec/requirementId.js.map +1 -0
  65. package/dist/tools/spec/specGenerator.d.ts +39 -0
  66. package/dist/tools/spec/specGenerator.d.ts.map +1 -0
  67. package/dist/tools/spec/specGenerator.js +426 -0
  68. package/dist/tools/spec/specGenerator.js.map +1 -0
  69. package/dist/tools/spec/specVersioning.d.ts +77 -0
  70. package/dist/tools/spec/specVersioning.d.ts.map +1 -0
  71. package/dist/tools/spec/specVersioning.js +237 -0
  72. package/dist/tools/spec/specVersioning.js.map +1 -0
  73. package/dist/tools/spec/traceabilityMatrix.d.ts +55 -0
  74. package/dist/tools/spec/traceabilityMatrix.d.ts.map +1 -0
  75. package/dist/tools/spec/traceabilityMatrix.js +396 -0
  76. package/dist/tools/spec/traceabilityMatrix.js.map +1 -0
  77. package/dist/tools/spec/traceabilityMatrix.test.d.ts +6 -0
  78. package/dist/tools/spec/traceabilityMatrix.test.d.ts.map +1 -0
  79. package/dist/tools/spec/traceabilityMatrix.test.js +340 -0
  80. package/dist/tools/spec/traceabilityMatrix.test.js.map +1 -0
  81. package/package.json +2 -1
@@ -0,0 +1,237 @@
1
+ /**
2
+ * SPEC Versioning - SPEC 버전 관리 및 Changelog 자동 생성
3
+ * v2.6.0: Git 연동 버전 관리
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { execSync } from 'child_process';
8
+ // ============================================
9
+ // Version Management
10
+ // ============================================
11
+ /**
12
+ * SPEC 버전 범프
13
+ */
14
+ export function bumpSpecVersion(specPath, bumpType, changes) {
15
+ const content = fs.readFileSync(specPath, 'utf-8');
16
+ const currentVersion = extractVersion(content) || '0.0.0';
17
+ const newVersion = incrementVersion(currentVersion, bumpType);
18
+ // 프론트매터 업데이트
19
+ const updatedContent = updateFrontmatterVersion(content, newVersion);
20
+ fs.writeFileSync(specPath, updatedContent);
21
+ const version = {
22
+ version: newVersion,
23
+ date: new Date().toISOString().split('T')[0],
24
+ changes,
25
+ };
26
+ return version;
27
+ }
28
+ /**
29
+ * 버전 추출
30
+ */
31
+ export function extractVersion(content) {
32
+ const match = content.match(/version:\s*['"]?(\d+\.\d+\.\d+)['"]?/);
33
+ return match ? match[1] : null;
34
+ }
35
+ /**
36
+ * 버전 증가
37
+ */
38
+ export function incrementVersion(version, bumpType) {
39
+ const parts = version.split('.').map(Number);
40
+ switch (bumpType) {
41
+ case 'major':
42
+ return `${parts[0] + 1}.0.0`;
43
+ case 'minor':
44
+ return `${parts[0]}.${parts[1] + 1}.0`;
45
+ case 'patch':
46
+ return `${parts[0]}.${parts[1]}.${parts[2] + 1}`;
47
+ }
48
+ }
49
+ /**
50
+ * 프론트매터 버전 업데이트
51
+ */
52
+ function updateFrontmatterVersion(content, newVersion) {
53
+ const now = new Date().toISOString();
54
+ // version 필드 업데이트 또는 추가
55
+ if (content.match(/version:/)) {
56
+ content = content.replace(/version:\s*['"]?\d+\.\d+\.\d+['"]?/, `version: ${newVersion}`);
57
+ }
58
+ else {
59
+ // 프론트매터에 version 추가
60
+ content = content.replace(/^(---\n)/, `$1version: ${newVersion}\n`);
61
+ }
62
+ // lastUpdated 업데이트
63
+ if (content.match(/lastUpdated:/)) {
64
+ content = content.replace(/lastUpdated:\s*[^\n]+/, `lastUpdated: ${now}`);
65
+ }
66
+ return content;
67
+ }
68
+ // ============================================
69
+ // Changelog Generation
70
+ // ============================================
71
+ /**
72
+ * Changelog 생성
73
+ */
74
+ export function generateChangelog(history) {
75
+ let changelog = `# Changelog: ${history.featureName}\n\n`;
76
+ changelog += `Current Version: ${history.currentVersion}\n\n`;
77
+ for (const version of history.versions.slice().reverse()) {
78
+ changelog += `## [${version.version}] - ${version.date}\n\n`;
79
+ if (version.gitTag) {
80
+ changelog += `Git Tag: ${version.gitTag}\n\n`;
81
+ }
82
+ // 타입별 그룹화
83
+ const grouped = groupChangesByType(version.changes);
84
+ for (const [type, entries] of Object.entries(grouped)) {
85
+ changelog += `### ${capitalizeFirst(type)}\n\n`;
86
+ for (const entry of entries) {
87
+ const prefix = entry.requirementId ? `[${entry.requirementId}] ` : '';
88
+ const section = entry.section ? ` (${entry.section})` : '';
89
+ changelog += `- ${prefix}${entry.description}${section}\n`;
90
+ }
91
+ changelog += '\n';
92
+ }
93
+ }
94
+ return changelog;
95
+ }
96
+ /**
97
+ * 변경사항을 타입별로 그룹화
98
+ */
99
+ function groupChangesByType(changes) {
100
+ const grouped = {};
101
+ for (const change of changes) {
102
+ if (!grouped[change.type]) {
103
+ grouped[change.type] = [];
104
+ }
105
+ grouped[change.type].push(change);
106
+ }
107
+ return grouped;
108
+ }
109
+ // ============================================
110
+ // Git Integration
111
+ // ============================================
112
+ /**
113
+ * Git 태그 생성
114
+ */
115
+ export function createGitTag(featureName, version, message) {
116
+ const tag = `spec/${featureName}/v${version}`;
117
+ const tagMessage = message || `SPEC ${featureName} version ${version}`;
118
+ try {
119
+ execSync(`git tag -a "${tag}" -m "${tagMessage}"`, { encoding: 'utf-8' });
120
+ return { success: true, tag };
121
+ }
122
+ catch (error) {
123
+ return {
124
+ success: false,
125
+ tag,
126
+ error: error instanceof Error ? error.message : String(error),
127
+ };
128
+ }
129
+ }
130
+ /**
131
+ * SPEC 변경사항 감지 (Git diff 기반)
132
+ */
133
+ export function detectSpecChanges(specPath, baseRef = 'HEAD~1') {
134
+ const changes = [];
135
+ try {
136
+ const diff = execSync(`git diff ${baseRef} -- "${specPath}"`, { encoding: 'utf-8' });
137
+ // 추가된 라인 분석
138
+ const addedLines = diff.match(/^\+[^+].*/gm) || [];
139
+ for (const line of addedLines) {
140
+ const cleanLine = line.slice(1).trim();
141
+ if (cleanLine.match(/^- \[ \]/) || cleanLine.match(/^1\. \[ \]/)) {
142
+ changes.push({
143
+ type: 'added',
144
+ description: cleanLine.replace(/^[-\d.]+\s*\[ \]\s*/, ''),
145
+ section: 'Task',
146
+ });
147
+ }
148
+ }
149
+ // 삭제된 라인 분석
150
+ const removedLines = diff.match(/^-[^-].*/gm) || [];
151
+ for (const line of removedLines) {
152
+ const cleanLine = line.slice(1).trim();
153
+ if (cleanLine.match(/^- \[ \]/) || cleanLine.match(/^1\. \[ \]/)) {
154
+ changes.push({
155
+ type: 'removed',
156
+ description: cleanLine.replace(/^[-\d.]+\s*\[ \]\s*/, ''),
157
+ section: 'Task',
158
+ });
159
+ }
160
+ }
161
+ }
162
+ catch {
163
+ // Git diff 실패 (파일이 새로 생성됨 등)
164
+ changes.push({
165
+ type: 'added',
166
+ description: 'Initial SPEC creation',
167
+ });
168
+ }
169
+ return changes;
170
+ }
171
+ /**
172
+ * 최신 SPEC 커밋 조회
173
+ */
174
+ export function getLatestSpecCommit(specPath) {
175
+ try {
176
+ const commit = execSync(`git log -1 --format=%H -- "${specPath}"`, { encoding: 'utf-8' });
177
+ return commit.trim() || null;
178
+ }
179
+ catch {
180
+ return null;
181
+ }
182
+ }
183
+ /**
184
+ * SPEC 버전 히스토리 로드
185
+ */
186
+ export function loadVersionHistory(specDir, featureName) {
187
+ const historyPath = path.join(specDir, `${featureName}.versions.json`);
188
+ try {
189
+ const content = fs.readFileSync(historyPath, 'utf-8');
190
+ return JSON.parse(content);
191
+ }
192
+ catch {
193
+ return {
194
+ featureName,
195
+ currentVersion: '0.0.0',
196
+ versions: [],
197
+ };
198
+ }
199
+ }
200
+ /**
201
+ * SPEC 버전 히스토리 저장
202
+ */
203
+ export function saveVersionHistory(specDir, history) {
204
+ const historyPath = path.join(specDir, `${history.featureName}.versions.json`);
205
+ fs.writeFileSync(historyPath, JSON.stringify(history, null, 2));
206
+ }
207
+ /**
208
+ * Baseline 태깅 (릴리즈 준비 완료 표시)
209
+ */
210
+ export function createBaseline(featureName, specPath) {
211
+ const content = fs.readFileSync(specPath, 'utf-8');
212
+ const version = extractVersion(content) || '1.0.0';
213
+ const timestamp = new Date().toISOString().replace(/[:-]/g, '').split('.')[0];
214
+ const baselineName = `baseline/${featureName}-v${version}-${timestamp}`;
215
+ try {
216
+ // Baseline 커밋
217
+ execSync(`git add "${specPath}"`, { encoding: 'utf-8' });
218
+ execSync(`git commit -m "SPEC baseline: ${featureName} v${version}"`, { encoding: 'utf-8' });
219
+ // Baseline 태그
220
+ execSync(`git tag "${baselineName}" -m "Baseline for ${featureName} v${version}"`, { encoding: 'utf-8' });
221
+ return { success: true, baselineName };
222
+ }
223
+ catch (error) {
224
+ return {
225
+ success: false,
226
+ baselineName,
227
+ error: error instanceof Error ? error.message : String(error),
228
+ };
229
+ }
230
+ }
231
+ // ============================================
232
+ // Helpers
233
+ // ============================================
234
+ function capitalizeFirst(str) {
235
+ return str.charAt(0).toUpperCase() + str.slice(1);
236
+ }
237
+ //# sourceMappingURL=specVersioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specVersioning.js","sourceRoot":"","sources":["../../../src/tools/spec/specVersioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Traceability Matrix - 요구사항 추적 매트릭스 자동 생성
3
+ * v2.6.0: RTM (Requirements Traceability Matrix) 자동화
4
+ *
5
+ * 매핑: REQ → SPEC → Feature → Test
6
+ */
7
+ /** 추적 항목 */
8
+ export interface TraceItem {
9
+ requirementId: string;
10
+ requirementDesc: string;
11
+ specSection?: string;
12
+ specFile?: string;
13
+ featureScenario?: string;
14
+ featureFile?: string;
15
+ testFile?: string;
16
+ testName?: string;
17
+ coverage: 'full' | 'partial' | 'none';
18
+ }
19
+ /** 추적 매트릭스 */
20
+ export interface TraceabilityMatrix {
21
+ featureName: string;
22
+ items: TraceItem[];
23
+ summary: TraceSummary;
24
+ generatedAt: string;
25
+ }
26
+ /** 추적 요약 */
27
+ export interface TraceSummary {
28
+ totalRequirements: number;
29
+ specCovered: number;
30
+ featureCovered: number;
31
+ testCovered: number;
32
+ coveragePercent: number;
33
+ uncoveredRequirements: string[];
34
+ partialRequirements: string[];
35
+ }
36
+ /** 매트릭스 생성 옵션 */
37
+ export interface TraceMatrixOptions {
38
+ specPath?: string;
39
+ featurePath?: string;
40
+ testPath?: string;
41
+ projectPath?: string;
42
+ }
43
+ /**
44
+ * 추적 매트릭스 생성 (메인 함수)
45
+ */
46
+ export declare function generateTraceabilityMatrix(featureName: string, options?: TraceMatrixOptions): TraceabilityMatrix;
47
+ /**
48
+ * 매트릭스를 Markdown 테이블로 출력
49
+ */
50
+ export declare function formatMatrixAsMarkdown(matrix: TraceabilityMatrix): string;
51
+ /**
52
+ * 매트릭스를 HTML로 출력
53
+ */
54
+ export declare function formatMatrixAsHtml(matrix: TraceabilityMatrix): string;
55
+ //# sourceMappingURL=traceabilityMatrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceabilityMatrix.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/traceabilityMatrix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,YAAY;AACZ,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;CACvC;AAED,cAAc;AACd,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,YAAY;AACZ,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,iBAAiB;AACjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,kBAAuB,GAC/B,kBAAkB,CA+DpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAsDzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA0ErE"}