@su-record/vibe 0.3.0 → 0.4.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/.claude/agents/simplifier.md +120 -0
- package/.claude/commands/vibe.run.md +133 -113
- package/.claude/commands/vibe.spec.md +143 -218
- package/.claude/commands/vibe.verify.md +7 -0
- package/.claude/settings.local.json +19 -1
- package/CLAUDE.md +41 -0
- package/README.md +181 -443
- package/bin/vibe +167 -152
- package/package.json +3 -6
- package/templates/hooks-template.json +26 -0
- package/.claude/commands/vibe.plan.md +0 -81
- package/.claude/commands/vibe.tasks.md +0 -83
- package/agents/backend-python-expert.md +0 -453
- package/agents/database-postgres-expert.md +0 -538
- package/agents/frontend-flutter-expert.md +0 -487
- package/agents/frontend-react-expert.md +0 -424
- package/agents/quality-reviewer.md +0 -542
- package/agents/reasoning-agent.md +0 -353
- package/agents/specification-agent.md +0 -582
- package/scripts/install-mcp.js +0 -74
- package/scripts/install.sh +0 -70
- package/templates/plan-template.md +0 -237
- package/templates/tasks-template.md +0 -132
- /package/{skills → .agent/rules}/core/communication-guide.md +0 -0
- /package/{skills → .agent/rules}/core/development-philosophy.md +0 -0
- /package/{skills → .agent/rules}/core/quick-start.md +0 -0
- /package/{skills → .agent/rules}/languages/dart-flutter.md +0 -0
- /package/{skills → .agent/rules}/languages/python-fastapi.md +0 -0
- /package/{skills → .agent/rules}/languages/typescript-nextjs.md +0 -0
- /package/{skills → .agent/rules}/languages/typescript-react-native.md +0 -0
- /package/{skills → .agent/rules}/languages/typescript-react.md +0 -0
- /package/{skills → .agent/rules}/quality/bdd-contract-testing.md +0 -0
- /package/{skills → .agent/rules}/quality/checklist.md +0 -0
- /package/{skills → .agent/rules}/quality/testing-strategy.md +0 -0
- /package/{skills → .agent/rules}/standards/anti-patterns.md +0 -0
- /package/{skills → .agent/rules}/standards/code-structure.md +0 -0
- /package/{skills → .agent/rules}/standards/complexity-metrics.md +0 -0
- /package/{skills → .agent/rules}/standards/naming-conventions.md +0 -0
- /package/{skills → .agent/rules}/tools/mcp-hi-ai-guide.md +0 -0
- /package/{skills → .agent/rules}/tools/mcp-workflow.md +0 -0
package/bin/vibe
CHANGED
|
@@ -2,192 +2,211 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* vibe CLI
|
|
5
|
-
*
|
|
5
|
+
* SPEC-driven AI coding framework (Claude Code 전용)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const path = require('path');
|
|
9
9
|
const fs = require('fs');
|
|
10
10
|
|
|
11
|
-
// 명령어 목록 (Claude Code 전용)
|
|
12
|
-
const commands = {
|
|
13
|
-
init: 'Initialize vibe in current project (MCP registration)',
|
|
14
|
-
help: 'Show help message'
|
|
15
|
-
};
|
|
16
|
-
|
|
17
11
|
const args = process.argv.slice(2);
|
|
18
12
|
const command = args[0];
|
|
19
13
|
|
|
20
|
-
//
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
⚠️ Vibe는 Claude Code 전용 프레임워크입니다.
|
|
26
|
-
터미널에서는 초기화만 가능합니다.
|
|
27
|
-
|
|
28
|
-
터미널 명령어:
|
|
29
|
-
vibe init Initialize vibe in current project
|
|
30
|
-
vibe init <project-name> Create new project with vibe
|
|
31
|
-
vibe help Show this message
|
|
32
|
-
|
|
33
|
-
Claude Code 슬래시 커맨드 (프로젝트 내에서 사용):
|
|
34
|
-
/vibe.spec "기능명" SPEC 작성 (대화형 Q&A)
|
|
35
|
-
/vibe.plan "기능명" 기술 계획 작성
|
|
36
|
-
/vibe.tasks "기능명" Task 목록 생성
|
|
37
|
-
/vibe.run "Task 1-1" Task 구현
|
|
38
|
-
/vibe.verify "기능명" 검증
|
|
39
|
-
/vibe.analyze 프로젝트 분석
|
|
40
|
-
/vibe.ui "설명" UI 미리보기
|
|
41
|
-
/vibe.diagram --er 다이어그램 생성
|
|
42
|
-
|
|
43
|
-
Workflow:
|
|
44
|
-
1. 터미널에서 vibe init 실행 (MCP 서버 등록)
|
|
45
|
-
2. Claude Code에서 슬래시 커맨드 사용
|
|
46
|
-
/vibe.spec "푸시 알림 설정"
|
|
47
|
-
/vibe.plan "푸시 알림 설정"
|
|
48
|
-
/vibe.tasks "푸시 알림 설정"
|
|
49
|
-
/vibe.run "Task 1-1"
|
|
50
|
-
/vibe.verify "푸시 알림 설정"
|
|
51
|
-
|
|
52
|
-
설치:
|
|
53
|
-
npm install -g @su-record/vibe
|
|
54
|
-
|
|
55
|
-
문서:
|
|
56
|
-
https://github.com/su-record/vibe/wiki
|
|
57
|
-
`);
|
|
14
|
+
// 유틸리티 함수
|
|
15
|
+
function ensureDir(dir) {
|
|
16
|
+
if (!fs.existsSync(dir)) {
|
|
17
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
18
|
+
}
|
|
58
19
|
}
|
|
59
20
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
21
|
+
function copyDirContents(sourceDir, targetDir) {
|
|
22
|
+
if (fs.existsSync(sourceDir)) {
|
|
23
|
+
fs.readdirSync(sourceDir).forEach(file => {
|
|
24
|
+
fs.copyFileSync(path.join(sourceDir, file), path.join(targetDir, file));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
64
27
|
}
|
|
65
28
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
let projectRoot = process.cwd();
|
|
69
|
-
let isNewProject = false;
|
|
29
|
+
function copyDirRecursive(sourceDir, targetDir) {
|
|
30
|
+
if (!fs.existsSync(sourceDir)) return;
|
|
70
31
|
|
|
71
|
-
|
|
72
|
-
if (projectName) {
|
|
73
|
-
projectRoot = path.join(process.cwd(), projectName);
|
|
32
|
+
ensureDir(targetDir);
|
|
74
33
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
34
|
+
fs.readdirSync(sourceDir).forEach(item => {
|
|
35
|
+
const sourcePath = path.join(sourceDir, item);
|
|
36
|
+
const targetPath = path.join(targetDir, item);
|
|
79
37
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (fs.existsSync(vibeDir)) {
|
|
88
|
-
console.log('❌ .vibe/ 폴더가 이미 존재합니다.');
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
38
|
+
if (fs.statSync(sourcePath).isDirectory()) {
|
|
39
|
+
copyDirRecursive(sourcePath, targetPath);
|
|
40
|
+
} else {
|
|
41
|
+
fs.copyFileSync(sourcePath, targetPath);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
91
45
|
|
|
92
|
-
|
|
93
|
-
|
|
46
|
+
// 프로젝트 초기화
|
|
47
|
+
async function init(projectName) {
|
|
94
48
|
try {
|
|
95
|
-
|
|
49
|
+
let projectRoot = process.cwd();
|
|
50
|
+
let isNewProject = false;
|
|
96
51
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
execSync(`node "${installScriptPath}"`, { stdio: 'inherit' });
|
|
52
|
+
if (projectName) {
|
|
53
|
+
projectRoot = path.join(process.cwd(), projectName);
|
|
100
54
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
55
|
+
if (fs.existsSync(projectRoot)) {
|
|
56
|
+
console.log(`❌ 폴더가 이미 존재합니다: ${projectName}/`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
105
59
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
fs.mkdirSync(path.join(vibeDir, 'plans'));
|
|
111
|
-
fs.mkdirSync(path.join(vibeDir, 'tasks'));
|
|
60
|
+
console.log(`📁 새 프로젝트 생성: ${projectName}/\n`);
|
|
61
|
+
fs.mkdirSync(projectRoot, { recursive: true });
|
|
62
|
+
isNewProject = true;
|
|
63
|
+
}
|
|
112
64
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
65
|
+
const vibeDir = path.join(projectRoot, '.vibe');
|
|
66
|
+
if (fs.existsSync(vibeDir)) {
|
|
67
|
+
console.log('❌ .vibe/ 폴더가 이미 존재합니다.');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
116
70
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
if (!fs.existsSync(commandsDir)) {
|
|
121
|
-
fs.mkdirSync(commandsDir);
|
|
122
|
-
}
|
|
71
|
+
// MCP 서버 등록 (Claude Code)
|
|
72
|
+
const mcpPath = path.join(__dirname, '..', 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
|
|
123
73
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
74
|
+
console.log('🔧 Claude Code MCP 서버 등록 중...\n');
|
|
75
|
+
const { execSync } = require('child_process');
|
|
76
|
+
try {
|
|
77
|
+
execSync(`claude mcp add vibe node "${mcpPath}"`, { stdio: 'pipe' });
|
|
78
|
+
console.log(' ✅ MCP 서버 등록 완료\n');
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (e.message.includes('already exists')) {
|
|
81
|
+
console.log(' ℹ️ MCP 서버 이미 등록됨\n');
|
|
82
|
+
} else {
|
|
83
|
+
console.log(' ⚠️ MCP 수동 등록 필요\n');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
134
86
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
87
|
+
// .vibe 폴더 구조 생성
|
|
88
|
+
const dirs = ['', 'specs', 'features'];
|
|
89
|
+
dirs.forEach(dir => {
|
|
90
|
+
ensureDir(path.join(vibeDir, dir));
|
|
91
|
+
});
|
|
138
92
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
93
|
+
// .claude/commands 복사
|
|
94
|
+
const claudeDir = path.join(projectRoot, '.claude');
|
|
95
|
+
const commandsDir = path.join(claudeDir, 'commands');
|
|
96
|
+
ensureDir(claudeDir);
|
|
97
|
+
ensureDir(commandsDir);
|
|
98
|
+
|
|
99
|
+
const sourceDir = path.join(__dirname, '../.claude/commands');
|
|
100
|
+
copyDirContents(sourceDir, commandsDir);
|
|
101
|
+
console.log(' ✅ 슬래시 커맨드 설치 완료 (7개)\n');
|
|
102
|
+
|
|
103
|
+
// 설정 파일 생성
|
|
104
|
+
const templatePath = path.join(__dirname, '../templates/constitution-template.md');
|
|
105
|
+
const constitutionPath = path.join(vibeDir, 'constitution.md');
|
|
106
|
+
if (fs.existsSync(templatePath)) {
|
|
107
|
+
fs.copyFileSync(templatePath, constitutionPath);
|
|
108
|
+
}
|
|
142
109
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
quality: {
|
|
155
|
-
strict: true,
|
|
156
|
-
autoVerify: true
|
|
110
|
+
const config = {
|
|
111
|
+
language: 'ko',
|
|
112
|
+
quality: { strict: true, autoVerify: true }
|
|
113
|
+
};
|
|
114
|
+
fs.writeFileSync(path.join(vibeDir, 'config.json'), JSON.stringify(config, null, 2));
|
|
115
|
+
|
|
116
|
+
// CLAUDE.md 복사
|
|
117
|
+
const agentsSource = path.join(__dirname, '../CLAUDE.md');
|
|
118
|
+
const agentsDest = path.join(projectRoot, 'CLAUDE.md');
|
|
119
|
+
if (fs.existsSync(agentsSource)) {
|
|
120
|
+
fs.copyFileSync(agentsSource, agentsDest);
|
|
157
121
|
}
|
|
158
|
-
};
|
|
159
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
160
122
|
|
|
161
|
-
|
|
123
|
+
// .agent/rules/ 복사 (코딩 규칙)
|
|
124
|
+
const rulesSource = path.join(__dirname, '../.agent/rules');
|
|
125
|
+
const rulesTarget = path.join(projectRoot, '.agent/rules');
|
|
126
|
+
copyDirRecursive(rulesSource, rulesTarget);
|
|
127
|
+
console.log(' ✅ 코딩 규칙 설치 완료 (.agent/rules/)\n');
|
|
128
|
+
|
|
129
|
+
// .claude/agents/ 복사 (서브에이전트)
|
|
130
|
+
const agentsDir = path.join(claudeDir, 'agents');
|
|
131
|
+
ensureDir(agentsDir);
|
|
132
|
+
const agentsSourceDir = path.join(__dirname, '../.claude/agents');
|
|
133
|
+
copyDirContents(agentsSourceDir, agentsDir);
|
|
134
|
+
console.log(' ✅ 서브에이전트 설치 완료 (.claude/agents/)\n');
|
|
135
|
+
|
|
136
|
+
// 완료 메시지
|
|
137
|
+
console.log(`
|
|
162
138
|
✅ vibe 초기화 완료!
|
|
163
139
|
|
|
164
140
|
${isNewProject ? `프로젝트 위치:
|
|
165
141
|
${projectRoot}/
|
|
166
142
|
|
|
167
143
|
` : ''}생성된 구조:
|
|
168
|
-
.
|
|
144
|
+
CLAUDE.md # 프로젝트 컨텍스트
|
|
145
|
+
.claude/
|
|
146
|
+
├── commands/ # 슬래시 커맨드 (7개)
|
|
147
|
+
└── agents/ # 서브에이전트 (simplifier)
|
|
148
|
+
.agent/rules/ # 코딩 규칙
|
|
149
|
+
├── core/ # 핵심 원칙
|
|
150
|
+
├── quality/ # 품질 체크리스트
|
|
151
|
+
└── standards/ # 코딩 표준
|
|
169
152
|
.vibe/
|
|
170
|
-
├── config.json
|
|
171
|
-
├── constitution.md
|
|
172
|
-
├── specs/
|
|
173
|
-
|
|
174
|
-
├── plans/ # 기술 계획들
|
|
175
|
-
└── tasks/ # 작업 목록들
|
|
153
|
+
├── config.json # 프로젝트 설정
|
|
154
|
+
├── constitution.md # 프로젝트 원칙
|
|
155
|
+
├── specs/ # SPEC 문서들
|
|
156
|
+
└── features/ # BDD Feature 파일들
|
|
176
157
|
|
|
177
|
-
MCP
|
|
178
|
-
✓ vibe MCP 서버 등록 완료 (38개 도구)
|
|
179
|
-
확인: claude mcp list
|
|
158
|
+
MCP 서버 (hi-ai): ✓
|
|
180
159
|
|
|
181
|
-
|
|
182
|
-
|
|
160
|
+
사용법:
|
|
161
|
+
/vibe.spec "기능명" SPEC 작성 (대화형)
|
|
162
|
+
/vibe.run "기능명" 구현 실행
|
|
163
|
+
/vibe.verify "기능명" 검증
|
|
183
164
|
|
|
184
165
|
다음 단계:
|
|
185
|
-
${isNewProject ? `
|
|
186
|
-
|
|
187
|
-
|
|
166
|
+
${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
|
|
167
|
+
`);
|
|
168
|
+
|
|
169
|
+
} catch (error) {
|
|
170
|
+
console.error('❌ 초기화 실패:', error.message);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// 도움말 출력
|
|
176
|
+
function showHelp() {
|
|
177
|
+
console.log(`
|
|
178
|
+
📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
|
|
179
|
+
|
|
180
|
+
Commands:
|
|
181
|
+
vibe init [project] Initialize vibe in current/new project
|
|
182
|
+
vibe help Show this message
|
|
183
|
+
vibe version Show version
|
|
184
|
+
|
|
185
|
+
Claude Code 슬래시 커맨드:
|
|
186
|
+
/vibe.spec "기능명" SPEC 작성 (PTCF 구조)
|
|
187
|
+
/vibe.run "기능명" 구현 실행
|
|
188
|
+
/vibe.verify "기능명" 검증
|
|
189
|
+
/vibe.reason "문제" 체계적 추론
|
|
190
|
+
/vibe.analyze 프로젝트 분석
|
|
191
|
+
/vibe.ui "설명" UI 미리보기
|
|
192
|
+
/vibe.diagram 다이어그램 생성
|
|
193
|
+
|
|
194
|
+
Workflow:
|
|
195
|
+
/vibe.spec → /vibe.run → /vibe.verify
|
|
196
|
+
|
|
197
|
+
설치:
|
|
198
|
+
npm install -g @su-record/vibe
|
|
199
|
+
|
|
200
|
+
문서:
|
|
201
|
+
https://github.com/su-record/vibe
|
|
188
202
|
`);
|
|
189
203
|
}
|
|
190
204
|
|
|
205
|
+
// 버전 정보
|
|
206
|
+
function showVersion() {
|
|
207
|
+
const packageJson = require('../package.json');
|
|
208
|
+
console.log(`vibe v${packageJson.version}`);
|
|
209
|
+
}
|
|
191
210
|
|
|
192
211
|
// 메인 라우터
|
|
193
212
|
switch (command) {
|
|
@@ -212,14 +231,10 @@ switch (command) {
|
|
|
212
231
|
console.log(`
|
|
213
232
|
❌ 알 수 없는 명령어: ${command}
|
|
214
233
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
/vibe.spec "기능명"
|
|
220
|
-
/vibe.plan "기능명"
|
|
221
|
-
/vibe.tasks "기능명"
|
|
222
|
-
/vibe.run "Task 1-1"
|
|
234
|
+
사용 가능한 명령어:
|
|
235
|
+
vibe init 프로젝트 초기화
|
|
236
|
+
vibe help 도움말
|
|
237
|
+
vibe version 버전 정보
|
|
223
238
|
|
|
224
239
|
사용법: vibe help
|
|
225
240
|
`);
|
package/package.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@su-record/vibe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Vibe - Claude Code exclusive SPEC-driven AI coding framework",
|
|
5
|
-
"main": "cli/index.js",
|
|
6
5
|
"bin": {
|
|
7
6
|
"vibe": "./bin/vibe"
|
|
8
7
|
},
|
|
@@ -37,12 +36,10 @@
|
|
|
37
36
|
"devDependencies": {},
|
|
38
37
|
"files": [
|
|
39
38
|
"bin/",
|
|
40
|
-
"cli/",
|
|
41
39
|
".claude/",
|
|
42
|
-
"
|
|
43
|
-
"skills/",
|
|
40
|
+
".agent/",
|
|
44
41
|
"templates/",
|
|
45
|
-
"
|
|
42
|
+
"CLAUDE.md",
|
|
46
43
|
"README.md",
|
|
47
44
|
"LICENSE"
|
|
48
45
|
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://claude.ai/schemas/hooks.json",
|
|
3
|
+
"description": "VIBE 프레임워크 자동 품질 검증 훅",
|
|
4
|
+
"hooks": {
|
|
5
|
+
"PostToolUse": [
|
|
6
|
+
{
|
|
7
|
+
"tools": ["Write", "Edit"],
|
|
8
|
+
"description": "코드 작성/수정 후 품질 검증",
|
|
9
|
+
"command": "echo '📋 품질 검증 중...' && claude --agent simplifier --file $CHANGED_FILE",
|
|
10
|
+
"enabled": true
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"PreCommit": [
|
|
14
|
+
{
|
|
15
|
+
"description": "커밋 전 전체 품질 체크",
|
|
16
|
+
"command": "npm run lint && npm run type-check",
|
|
17
|
+
"enabled": true
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"settings": {
|
|
22
|
+
"autoFix": true,
|
|
23
|
+
"minGrade": "B",
|
|
24
|
+
"reportPath": ".vibe/reports/"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Create PLAN document with Planning Agent
|
|
3
|
-
argument-hint: "feature name"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /vibe.plan
|
|
7
|
-
|
|
8
|
-
PLAN 문서를 작성합니다 (Planning Agent).
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/vibe.plan "기능명"
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Description
|
|
17
|
-
|
|
18
|
-
SPEC 문서를 분석하여 기술 구현 계획(PLAN)을 작성합니다.
|
|
19
|
-
|
|
20
|
-
## Process
|
|
21
|
-
|
|
22
|
-
1. **SPEC 문서 읽기**: `.vibe/specs/{기능명}.md` 분석
|
|
23
|
-
2. **Feature 파일 읽기**: `.vibe/features/{기능명}.feature` 확인 (BDD)
|
|
24
|
-
3. **프로젝트 컨텍스트 파악**:
|
|
25
|
-
- `CLAUDE.md` 읽기 (기술 스택 확인)
|
|
26
|
-
- `package.json` / `pyproject.toml` / `pubspec.yaml` 확인
|
|
27
|
-
4. **PLAN 문서 작성**: 15개 섹션 포함
|
|
28
|
-
- 기술 스택 선정 (기존 스택 재사용 우선)
|
|
29
|
-
- 아키텍처 설계
|
|
30
|
-
- API 설계
|
|
31
|
-
- DB 스키마
|
|
32
|
-
- 외부 서비스 통합
|
|
33
|
-
- 보안 설계
|
|
34
|
-
- 성능 최적화
|
|
35
|
-
- 에러 처리
|
|
36
|
-
- 모니터링 및 로깅
|
|
37
|
-
- **테스트 전략 (BDD/Contract Testing 포함)**
|
|
38
|
-
- BDD 도구 선정 (pytest-bdd, behave, cucumber 등)
|
|
39
|
-
- Contract Testing 도구 (Pact, Spring Cloud Contract 등)
|
|
40
|
-
- Feature 파일과 SPEC 매핑
|
|
41
|
-
- API Contract 스키마 정의
|
|
42
|
-
- 배포 전략
|
|
43
|
-
- 비용 예측
|
|
44
|
-
- 마일스톤 (Phase별)
|
|
45
|
-
- 리스크 및 완화 방안
|
|
46
|
-
- 다음 단계
|
|
47
|
-
5. **품질 검증**: 기술 선택 근거, 비용, 일정 현실성, BDD 테스트 전략 타당성
|
|
48
|
-
|
|
49
|
-
## Agent
|
|
50
|
-
|
|
51
|
-
`~/.vibe/agents/planning-agent.md`
|
|
52
|
-
|
|
53
|
-
## Input
|
|
54
|
-
|
|
55
|
-
- `.vibe/specs/{기능명}.md` (SPEC 문서)
|
|
56
|
-
- `.vibe/features/{기능명}.feature` (BDD Feature 파일)
|
|
57
|
-
- `CLAUDE.md` (프로젝트 기술 스택)
|
|
58
|
-
|
|
59
|
-
## Output
|
|
60
|
-
|
|
61
|
-
- `.vibe/plans/{기능명}.md` - PLAN 문서
|
|
62
|
-
- 예상 공수 (시간/일)
|
|
63
|
-
- 예상 비용 ($)
|
|
64
|
-
- Phase별 마일스톤
|
|
65
|
-
|
|
66
|
-
## Example
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
/vibe.plan "푸시 알림 설정 기능"
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**결과:**
|
|
73
|
-
- 3 Phases (Backend → Frontend → FCM)
|
|
74
|
-
- 24시간 (3일)
|
|
75
|
-
- $0.50/월 추가 비용
|
|
76
|
-
|
|
77
|
-
## Next Step
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
/vibe.tasks "푸시 알림 설정 기능"
|
|
81
|
-
```
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Create TASKS document with Task Agent
|
|
3
|
-
argument-hint: "feature name"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /vibe.tasks
|
|
7
|
-
|
|
8
|
-
TASKS 문서를 작성합니다 (Task Agent).
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/vibe.tasks "기능명"
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Description
|
|
17
|
-
|
|
18
|
-
PLAN 문서를 분석하여 Phase별 구체적인 작업 목록(TASKS)을 생성합니다.
|
|
19
|
-
|
|
20
|
-
## Process
|
|
21
|
-
|
|
22
|
-
1. **PLAN 문서 읽기**: `.vibe/plans/{기능명}.md` 분석
|
|
23
|
-
2. **Feature 파일 읽기**: `.vibe/features/{기능명}.feature` 확인 (BDD Scenarios)
|
|
24
|
-
3. **Phase별 Task 분해**:
|
|
25
|
-
- Phase 1: Backend 개발 (DB, API, Service, Repository, Unit Tests, **Contract Provider**)
|
|
26
|
-
- Phase 2: Frontend 개발 (Model, Service, Provider, UI, Unit Tests, **Contract Consumer**)
|
|
27
|
-
- Phase 3: 통합 및 테스트 (FCM, E2E, **BDD Step Definitions**, **Contract Verification**)
|
|
28
|
-
4. **각 Task마다 정의**:
|
|
29
|
-
- 상태 (⬜ 대기 / 🟡 진행 중 / ✅ 완료)
|
|
30
|
-
- 담당 Agent
|
|
31
|
-
- 예상 시간
|
|
32
|
-
- 우선순위 (HIGH/MEDIUM/LOW)
|
|
33
|
-
- 의존성 (선행 Task)
|
|
34
|
-
- Acceptance Criteria (검증 기준)
|
|
35
|
-
- 참고 파일 경로
|
|
36
|
-
- 검증 명령어
|
|
37
|
-
4. **의존성 그래프 생성**: Task 간 실행 순서 시각화
|
|
38
|
-
5. **체크리스트 생성**: 코드 품질, 테스트, 문서, SPEC 검증
|
|
39
|
-
|
|
40
|
-
## Agent
|
|
41
|
-
|
|
42
|
-
`~/.vibe/agents/task-agent.md`
|
|
43
|
-
|
|
44
|
-
## Input
|
|
45
|
-
|
|
46
|
-
- `.vibe/plans/{기능명}.md` (PLAN 문서)
|
|
47
|
-
- `.vibe/specs/{기능명}.md` (SPEC 문서)
|
|
48
|
-
- `.vibe/features/{기능명}.feature` (BDD Feature 파일)
|
|
49
|
-
|
|
50
|
-
## Output
|
|
51
|
-
|
|
52
|
-
- `.vibe/tasks/{기능명}.md` - TASKS 문서
|
|
53
|
-
- 총 Task 수
|
|
54
|
-
- 의존성 그래프
|
|
55
|
-
- Phase별 체크리스트
|
|
56
|
-
|
|
57
|
-
## Example
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
/vibe.tasks "푸시 알림 설정 기능"
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**결과:**
|
|
64
|
-
- 23개 Task (Phase 1: 9개, Phase 2: 9개, Phase 3: 5개)
|
|
65
|
-
- **Phase 1:** DB, API, Service, Repository, Unit Tests, **Contract Provider 정의**
|
|
66
|
-
- **Phase 2:** Model, Service, Provider, UI, Unit Tests, **Contract Consumer 정의**
|
|
67
|
-
- **Phase 3:** FCM, E2E, **BDD Step Definitions**, **Contract Verification**
|
|
68
|
-
- 의존성 그래프 포함
|
|
69
|
-
- 각 Task별 Acceptance Criteria
|
|
70
|
-
- BDD Scenarios와 매핑된 Contract Test Tasks
|
|
71
|
-
|
|
72
|
-
## Next Step
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
/vibe.run "Task 1-1"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
또는:
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
/vibe.run --phase 1 # Phase 1 전체 실행
|
|
82
|
-
/vibe.run --all # 모든 Task 실행
|
|
83
|
-
```
|