@su-record/vibe 2.2.4 → 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.
Files changed (38) hide show
  1. package/.claude/settings.json +0 -117
  2. package/.claude/settings.local.json +2 -1
  3. package/.claude/vibe/rules/languages/dart-flutter.md +509 -0
  4. package/.claude/vibe/rules/languages/go.md +396 -0
  5. package/.claude/vibe/rules/languages/java-spring.md +586 -0
  6. package/.claude/vibe/rules/languages/kotlin-android.md +491 -0
  7. package/.claude/vibe/rules/languages/python-django.md +371 -0
  8. package/.claude/vibe/rules/languages/python-fastapi.md +386 -0
  9. package/.claude/vibe/rules/languages/rust.md +425 -0
  10. package/.claude/vibe/rules/languages/swift-ios.md +516 -0
  11. package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -0
  12. package/.claude/vibe/rules/languages/typescript-node.md +375 -0
  13. package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -0
  14. package/.claude/vibe/rules/languages/typescript-react-native.md +446 -0
  15. package/.claude/vibe/rules/languages/typescript-react.md +525 -0
  16. package/.claude/vibe/rules/languages/typescript-vue.md +353 -0
  17. package/README.md +96 -96
  18. package/commands/vibe.analyze.md +14 -73
  19. package/commands/vibe.reason.md +49 -172
  20. package/commands/vibe.review.md +72 -260
  21. package/commands/vibe.utils.md +101 -0
  22. package/commands/vibe.verify.md +4 -1
  23. package/dist/cli/index.d.ts.map +1 -1
  24. package/dist/cli/index.js +44 -14
  25. package/dist/cli/index.js.map +1 -1
  26. package/{templates/hooks-template.json → hooks/hooks.json} +6 -6
  27. package/package.json +2 -2
  28. package/commands/vibe.continue.md +0 -88
  29. package/commands/vibe.setup.md +0 -97
  30. /package/{templates → .claude/vibe/templates}/constitution-template.md +0 -0
  31. /package/{templates → .claude/vibe/templates}/contract-backend-template.md +0 -0
  32. /package/{templates → .claude/vibe/templates}/contract-frontend-template.md +0 -0
  33. /package/{templates → .claude/vibe/templates}/feature-template.md +0 -0
  34. /package/{templates → .claude/vibe/templates}/spec-template.md +0 -0
  35. /package/{commands/vibe.compound.md → agents/compounder.md} +0 -0
  36. /package/{commands/vibe.diagram.md → agents/diagrammer.md} +0 -0
  37. /package/{commands/vibe.e2e.md → agents/e2e-tester.md} +0 -0
  38. /package/{commands/vibe.ui.md → agents/ui-previewer.md} +0 -0
@@ -10,214 +10,87 @@ argument-hint: "PR number, branch name, or file path"
10
10
  ## Usage
11
11
 
12
12
  ```
13
- /vibe.review # Review current branch
14
- /vibe.review PR#123 # Review specific PR
15
- /vibe.review feature/login # Review specific branch
16
- /vibe.review src/api/ # Review specific path
13
+ /vibe.review # Review current branch
14
+ /vibe.review PR#123 # Review specific PR
15
+ /vibe.review feature/login # Review specific branch
16
+ /vibe.review src/api/ # Review specific path
17
17
  ```
18
18
 
19
- ## Core Principle
19
+ ## Priority System
20
20
 
21
- ```
22
- ┌─────────────────────────────────────────────────────────────────┐
23
- │ All experts review simultaneously = Fast & Thorough │
24
- │ │
25
- │ 🔴 P1 (Critical): Blocks merge - MUST fix │
26
- │ 🟡 P2 (Important): Should fix - Before merge │
27
- │ 🔵 P3 (Nice-to-have): Enhancement - When time permits │
28
- └─────────────────────────────────────────────────────────────────┘
29
- ```
21
+ | Priority | Criteria | Action |
22
+ |----------|----------|--------|
23
+ | P1 | Security vulnerabilities, data loss, crashes | Block merge, fix immediately |
24
+ | P2 | Performance issues, architecture violations, missing tests | Fix before merge |
25
+ | P3 | Style, refactoring suggestions, documentation | Add to backlog |
30
26
 
31
27
  ## Process
32
28
 
33
- ### Phase 1: Tech Stack Detection & Target Analysis
34
-
35
- **Detect project tech stack FIRST before launching reviewers:**
29
+ ### Phase 1: Tech Stack Detection
36
30
 
37
- ```
38
- 📋 Tech Stack Detection
39
- ├── Read package.json → TypeScript, React, Node.js
40
- ├── Read pyproject.toml → Python, FastAPI, Django
41
- ├── Read Gemfile → Ruby, Rails
42
- ├── Read pubspec.yaml → Flutter, Dart
43
- ├── Read go.mod → Go
44
- ├── Read CLAUDE.md → Explicit tech stack declaration
45
- └── Analyze file extensions in changed files
46
- ```
31
+ Detect project tech stack FIRST before launching reviewers:
47
32
 
48
- **Detection Logic:**
49
- ```javascript
50
- // Stack detection from project files
51
- const stack = {
52
- typescript: hasFile("package.json") && (hasDep("typescript") || hasFile("tsconfig.json")),
53
- react: hasDep("react") || hasDep("next"),
54
- python: hasFile("pyproject.toml") || hasFile("requirements.txt"),
55
- rails: hasFile("Gemfile") && hasDep("rails"),
56
- go: hasFile("go.mod"),
57
- flutter: hasFile("pubspec.yaml")
58
- };
59
33
  ```
60
-
61
- **Changed Files Analysis:**
62
- ```
63
- git diff --name-only HEAD~1
64
- ├── src/components/*.tsx → React reviewer needed
65
- ├── app/api/*.py → Python reviewer needed
66
- ├── app/models/*.rb → Rails reviewer needed
67
- └── No .ts files → Skip TypeScript reviewer
34
+ Read package.json -> TypeScript, React, Node.js
35
+ Read pyproject.toml -> Python, FastAPI, Django
36
+ Read Gemfile -> Ruby, Rails
37
+ Read pubspec.yaml -> Flutter, Dart
38
+ Read go.mod -> Go
39
+ Read CLAUDE.md -> Explicit tech stack declaration
68
40
  ```
69
41
 
70
42
  ### Phase 2: Parallel Agent Review (STACK-AWARE)
71
43
 
72
44
  **Launch ONLY relevant agents based on detected stack!**
73
45
 
74
- ```
75
- ┌─────────────────────────────────────────────────────────────────┐
76
- │ 🚀 PARALLEL AGENT LAUNCH (Stack-Aware Selection) │
77
- ├─────────────────────────────────────────────────────────────────┤
78
- │ │
79
- │ ✅ ALWAYS RUN (Core Reviewers) │
80
- │ ├── security-reviewer # OWASP Top 10, vulnerabilities │
81
- │ ├── data-integrity-reviewer # Data validation, constraints │
82
- │ ├── performance-reviewer # N+1 queries, memory leaks │
83
- │ ├── architecture-reviewer # Layer violations, cycles │
84
- │ ├── complexity-reviewer # Cyclomatic complexity, length │
85
- │ ├── simplicity-reviewer # Over-abstraction, dead code │
86
- │ ├── git-history-reviewer # Churn files, risk patterns │
87
- │ └── test-coverage-reviewer # Missing tests, edge cases │
88
- │ │
89
- │ 🔍 CONDITIONAL (Based on Detected Stack) │
90
- │ ├── python-reviewer # IF: .py files in diff │
91
- │ ├── typescript-reviewer # IF: .ts/.tsx files OR tsconfig │
92
- │ ├── rails-reviewer # IF: Gemfile has rails │
93
- │ └── react-reviewer # IF: package.json has react │
94
- │ │
95
- └─────────────────────────────────────────────────────────────────┘
96
- ```
97
-
98
- **Stack-Aware Agent Invocation:**
99
- ```javascript
100
- // Core reviewers (ALWAYS)
101
- const coreAgents = [
102
- "security-reviewer",
103
- "data-integrity-reviewer",
104
- "performance-reviewer",
105
- "architecture-reviewer",
106
- "complexity-reviewer",
107
- "simplicity-reviewer",
108
- "git-history-reviewer",
109
- "test-coverage-reviewer"
110
- ];
111
-
112
- // Language reviewers (CONDITIONAL)
113
- const languageAgents = [];
114
- if (stack.python || changedFiles.some(f => f.endsWith('.py'))) {
115
- languageAgents.push("python-reviewer");
116
- }
117
- if (stack.typescript || changedFiles.some(f => f.match(/\.tsx?$/))) {
118
- languageAgents.push("typescript-reviewer");
119
- }
120
- if (stack.react) {
121
- languageAgents.push("react-reviewer");
122
- }
123
- if (stack.rails) {
124
- languageAgents.push("rails-reviewer");
125
- }
126
-
127
- // Launch ALL selected agents in parallel
128
- const allAgents = [...coreAgents, ...languageAgents];
129
- ```
46
+ **ALWAYS RUN (Core Reviewers):**
47
+ - security-reviewer: OWASP Top 10, vulnerabilities
48
+ - data-integrity-reviewer: Data validation, constraints
49
+ - performance-reviewer: N+1 queries, memory leaks
50
+ - architecture-reviewer: Layer violations, cycles
51
+ - complexity-reviewer: Cyclomatic complexity, length
52
+ - simplicity-reviewer: Over-abstraction, dead code
53
+ - git-history-reviewer: Churn files, risk patterns
54
+ - test-coverage-reviewer: Missing tests, edge cases
130
55
 
131
- **Example Output:**
132
- ```
133
- 📦 Detected Stack: TypeScript + React + Node.js
134
- 📄 Changed Files: 12 (.tsx: 8, .ts: 3, .json: 1)
135
-
136
- 🚀 Launching 10 agents (8 core + 2 language-specific):
137
- ✅ security-reviewer
138
- ✅ data-integrity-reviewer
139
- ✅ performance-reviewer
140
- ✅ architecture-reviewer
141
- ✅ complexity-reviewer
142
- ✅ simplicity-reviewer
143
- ✅ git-history-reviewer
144
- ✅ test-coverage-reviewer
145
- ✅ typescript-reviewer ← Detected: tsconfig.json
146
- ✅ react-reviewer ← Detected: react in package.json
147
- ⏭️ python-reviewer ← Skipped: No Python files
148
- ⏭️ rails-reviewer ← Skipped: No Gemfile
149
- ```
56
+ **CONDITIONAL (Based on Detected Stack):**
57
+ - python-reviewer: IF .py files in diff
58
+ - typescript-reviewer: IF .ts/.tsx files OR tsconfig
59
+ - rails-reviewer: IF Gemfile has rails
60
+ - react-reviewer: IF package.json has react
150
61
 
151
- ### Phase 3: Ultra-Thinking Deep Analysis
62
+ ### Phase 3: Deep Analysis
152
63
 
153
- Deep analysis after agent results:
64
+ After agent results:
154
65
 
155
- ```markdown
156
- ## Deep Analysis Dimensions
66
+ 1. **System Context**: Component interactions, data flow, external dependencies
67
+ 2. **Stakeholder Perspectives**: Developers, Ops, Security, Business
68
+ 3. **Edge Cases**: Race conditions, resource exhaustion, network failures
69
+ 4. **Multiple Angles**: Technical excellence, business value, risk management
157
70
 
158
- 1. **System Context**
159
- - Component interactions
160
- - Data flow
161
- - External dependencies
162
-
163
- 2. **Stakeholder Perspectives**
164
- - Developers: Maintainability
165
- - Ops: Deployment risk
166
- - Security: Vulnerabilities
167
- - Business: Impact
168
-
169
- 3. **Edge Cases & Failure Scenarios**
170
- - Race conditions
171
- - Resource exhaustion
172
- - Network failures
173
- - Malicious input
71
+ ### Phase 4: Findings Synthesis
174
72
 
175
- 4. **Multiple Angles**
176
- - Technical excellence
177
- - Business value
178
- - Risk management
179
- - Team dynamics
180
73
  ```
74
+ REVIEW FINDINGS
181
75
 
182
- ### Phase 4: Findings Synthesis
76
+ P1 CRITICAL (Blocks Merge) - N issues
77
+ 1. [SECURITY] SQL Injection in user query
78
+ Location: src/api/users.py:42
79
+ Fix: Use parameterized queries
183
80
 
184
- ```
185
- ┌─────────────────────────────────────────────────────────────────┐
186
- │ 📊 REVIEW FINDINGS │
187
- ├─────────────────────────────────────────────────────────────────┤
188
- │ │
189
- │ 🔴 P1 CRITICAL (Blocks Merge) - 2 issues │
190
- │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
191
- │ 1. [SECURITY] SQL Injection in user query │
192
- │ 📍 src/api/users.py:42 │
193
- │ 💡 Use parameterized queries │
194
- │ │
195
- │ 2. [DATA] Missing transaction rollback │
196
- │ 📍 src/services/payment.py:128 │
197
- │ 💡 Wrap in try/except with rollback │
198
- │ │
199
- │ 🟡 P2 IMPORTANT (Should Fix) - 5 issues │
200
- │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
201
- │ 3. [PERF] N+1 query in user list │
202
- │ 4. [ARCH] Circular dependency detected │
203
- │ 5. [TEST] Missing edge case tests │
204
- │ ... │
205
- │ │
206
- │ 🔵 P3 NICE-TO-HAVE (Enhancement) - 3 issues │
207
- │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
208
- │ 8. [STYLE] Consider extracting helper function │
209
- │ ... │
210
- │ │
211
- └─────────────────────────────────────────────────────────────────┘
81
+ P2 IMPORTANT (Should Fix) - N issues
82
+ 2. [PERF] N+1 query in user list
83
+ 3. [ARCH] Circular dependency detected
84
+
85
+ P3 NICE-TO-HAVE (Enhancement) - N issues
86
+ 4. [STYLE] Consider extracting helper function
212
87
  ```
213
88
 
214
89
  ### Phase 5: Todo File Creation
215
90
 
216
91
  Save findings to `.claude/vibe/todos/`:
217
92
 
218
- ```markdown
219
- ## File Naming Convention
220
-
93
+ ```
221
94
  {priority}-{category}-{short-desc}.md
222
95
 
223
96
  Examples:
@@ -226,98 +99,37 @@ Examples:
226
99
  - P3-style-extract-helper.md
227
100
  ```
228
101
 
229
- **Todo File Format:**
230
- ```markdown
231
- # [P1] SQL Injection Vulnerability
232
-
233
- ## Summary
234
- User input directly concatenated in SQL query
235
-
236
- ## Location
237
- - File: src/api/users.py
238
- - Line: 42
239
- - Function: get_user_by_email()
102
+ ## Output
240
103
 
241
- ## Current Code
242
- ```python
243
- query = f"SELECT * FROM users WHERE email = '{email}'"
244
104
  ```
105
+ CODE REVIEW SUMMARY
106
+ PR #123: Add user authentication
245
107
 
246
- ## Suggested Fix
247
- ```python
248
- query = "SELECT * FROM users WHERE email = %s"
249
- cursor.execute(query, (email,))
250
- ```
108
+ Reviewers: 13 agents | Duration: 45s
251
109
 
252
- ## References
253
- - OWASP SQL Injection: https://owasp.org/...
254
- - Project DB Guide: docs/database.md
110
+ Score: 72/100 (Needs Work)
255
111
 
256
- ## Status
257
- - [ ] Fix implemented
258
- - [ ] Tests added
259
- - [ ] Review approved
260
- ```
112
+ Issues Found:
113
+ - P1 Critical: 2 (BLOCKS MERGE)
114
+ - P2 Important: 5
115
+ - P3 Nice-to-have: 3
261
116
 
262
- ### Phase 6: Optional E2E Testing
117
+ By Category:
118
+ - Security: 2
119
+ - Performance: 3
120
+ - Architecture: 1
121
+ - Testing: 2
122
+ - Style: 2
263
123
 
264
- ```
265
- Suggest E2E tests based on project type:
266
- ├── Web: /vibe.e2e (Playwright)
267
- ├── iOS: Xcode Test
268
- ├── Android: Espresso
269
- └── API: Contract Test
270
- ```
124
+ Todos created: .claude/vibe/todos/ (10 files)
271
125
 
272
- ## Output
126
+ MERGE BLOCKED - Fix P1 issues first
273
127
 
128
+ Next Steps:
129
+ 1. Fix P1-security-sql-injection.md
130
+ 2. Fix P1-data-transaction-rollback.md
131
+ 3. Re-run: /vibe.review
274
132
  ```
275
- ┌─────────────────────────────────────────────────────────────────┐
276
- │ 📊 CODE REVIEW SUMMARY │
277
- │ PR #123: Add user authentication │
278
- ├─────────────────────────────────────────────────────────────────┤
279
- │ │
280
- │ Reviewers: 13 agents | Duration: 45s │
281
- │ │
282
- │ 📈 Score: 72/100 (Needs Work) │
283
- │ │
284
- │ Issues Found: │
285
- │ ├── 🔴 P1 Critical: 2 (BLOCKS MERGE) │
286
- │ ├── 🟡 P2 Important: 5 │
287
- │ └── 🔵 P3 Nice-to-have: 3 │
288
- │ │
289
- │ By Category: │
290
- │ ├── Security: 2 │
291
- │ ├── Performance: 3 │
292
- │ ├── Architecture: 1 │
293
- │ ├── Testing: 2 │
294
- │ └── Style: 2 │
295
- │ │
296
- │ 📁 Todos created: .claude/vibe/todos/ (10 files) │
297
- │ │
298
- │ ❌ MERGE BLOCKED - Fix P1 issues first │
299
- │ │
300
- │ Next Steps: │
301
- │ 1. Fix P1-security-sql-injection.md │
302
- │ 2. Fix P1-data-transaction-rollback.md │
303
- │ 3. Re-run: /vibe.review │
304
- │ │
305
- └─────────────────────────────────────────────────────────────────┘
306
- ```
307
-
308
- ## Priority Guidelines
309
-
310
- | Priority | Criteria | Action |
311
- |----------|----------|--------|
312
- | 🔴 P1 | Security vulnerabilities, data loss, crashes | Block merge, fix immediately |
313
- | 🟡 P2 | Performance issues, architecture violations, missing tests | Fix before merge |
314
- | 🔵 P3 | Style, refactoring suggestions, documentation | Add to backlog |
315
-
316
- ## Related Commands
317
-
318
- - `/vibe.e2e` - Run E2E tests
319
- - `/vibe.compound` - Document solutions
320
- - `/vibe.verify` - SPEC-based verification
321
133
 
322
134
  ---
323
135
 
@@ -0,0 +1,101 @@
1
+ ---
2
+ description: Utility tools (UI preview, diagram, E2E test, etc.)
3
+ argument-hint: "--ui, --diagram, --e2e, or other options"
4
+ ---
5
+
6
+ # /vibe.utils
7
+
8
+ Collection of utility tools. Use with options.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /vibe.utils --ui "설명" # UI ASCII preview
14
+ /vibe.utils --diagram # Architecture diagram
15
+ /vibe.utils --diagram --er # ERD diagram
16
+ /vibe.utils --diagram --flow # Flowchart
17
+ /vibe.utils --e2e "scenario" # E2E browser test (Playwright)
18
+ /vibe.utils --e2e --visual # Visual regression test
19
+ /vibe.utils --e2e --record # Video recording
20
+ /vibe.utils --compound # Document solution (usually auto-triggered)
21
+ ```
22
+
23
+ ---
24
+
25
+ ## --ui (UI Preview)
26
+
27
+ Read and follow `agents/ui-previewer.md` for ASCII UI preview generation.
28
+
29
+ Generate ASCII-based UI preview from description.
30
+
31
+ **Example:**
32
+ ```
33
+ /vibe.utils --ui "로그인 폼 - 이메일, 비밀번호 입력 + 로그인 버튼"
34
+ ```
35
+
36
+ ---
37
+
38
+ ## --diagram (Diagram Generation)
39
+
40
+ Read and follow `agents/diagrammer.md` for diagram generation.
41
+
42
+ Generate Mermaid diagrams for architecture visualization.
43
+
44
+ **Options:**
45
+ - `--diagram`: Architecture overview
46
+ - `--diagram --er`: Entity-Relationship Diagram
47
+ - `--diagram --flow`: Flowchart
48
+ - `--diagram --seq`: Sequence Diagram
49
+
50
+ **Example:**
51
+ ```
52
+ /vibe.utils --diagram --er
53
+ ```
54
+
55
+ ---
56
+
57
+ ## --e2e (E2E Testing)
58
+
59
+ Read and follow `agents/e2e-tester.md` for Playwright-based E2E testing.
60
+
61
+ **Options:**
62
+ - `--e2e "scenario"`: Run specific scenario
63
+ - `--e2e --visual`: Visual regression testing
64
+ - `--e2e --record`: Video recording
65
+
66
+ **Features:**
67
+ - Screenshot capture and comparison
68
+ - Console error collection
69
+ - Accessibility (a11y) testing
70
+ - Bug reproduction automation
71
+
72
+ **Example:**
73
+ ```
74
+ /vibe.utils --e2e "login flow"
75
+ /vibe.utils --e2e --visual --record
76
+ ```
77
+
78
+ ---
79
+
80
+ ## --compound (Solution Documentation)
81
+
82
+ Read and follow `agents/compounder.md` for solution documentation.
83
+
84
+ Document solved problems for knowledge accumulation.
85
+
86
+ **Usually auto-triggered by hooks when:**
87
+ - "버그 해결됨", "bug fixed", "PR merged" detected
88
+
89
+ **Output location:** `.claude/vibe/solutions/`
90
+
91
+ ```
92
+ .claude/vibe/solutions/
93
+ ├── security/ # Security solutions
94
+ ├── performance/ # Performance optimizations
95
+ ├── database/ # Database related
96
+ └── integration/ # External integrations
97
+ ```
98
+
99
+ ---
100
+
101
+ ARGUMENTS: $ARGUMENTS
@@ -12,7 +12,10 @@ argument-hint: "feature name"
12
12
  ## Usage
13
13
 
14
14
  ```
15
- /vibe.verify "feature-name"
15
+ /vibe.verify "feature-name" # SPEC 기반 검증
16
+ /vibe.verify --e2e "feature-name" # E2E 브라우저 테스트 (agents/e2e-tester.md)
17
+ /vibe.verify --e2e --visual # 시각적 회귀 테스트
18
+ /vibe.verify --e2e --record # 비디오 녹화
16
19
  ```
17
20
 
18
21
  ## 핵심 원칙
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AA61EH,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AA+3EH,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/cli/index.js CHANGED
@@ -398,9 +398,11 @@ function detectTechStacks(projectRoot) {
398
398
  detected.push({ type: 'typescript-react-native', path: prefix });
399
399
  else if (deps['react'])
400
400
  detected.push({ type: 'typescript-react', path: prefix });
401
+ else if (deps['nuxt'] || deps['nuxt3'])
402
+ detected.push({ type: 'typescript-nuxt', path: prefix });
401
403
  else if (deps['vue'])
402
404
  detected.push({ type: 'typescript-vue', path: prefix });
403
- else if (deps['express'] || deps['fastify'] || deps['koa'])
405
+ else if (deps['express'] || deps['fastify'] || deps['koa'] || deps['nest'] || deps['@nestjs/core'])
404
406
  detected.push({ type: 'typescript-node', path: prefix });
405
407
  else if (pkg.name)
406
408
  detected.push({ type: 'typescript-node', path: prefix });
@@ -776,6 +778,7 @@ const STACK_NAMES = {
776
778
  'typescript-nextjs': { lang: 'TypeScript', framework: 'Next.js' },
777
779
  'typescript-react': { lang: 'TypeScript', framework: 'React' },
778
780
  'typescript-vue': { lang: 'TypeScript', framework: 'Vue.js' },
781
+ 'typescript-nuxt': { lang: 'TypeScript', framework: 'Nuxt 3' },
779
782
  'typescript-react-native': { lang: 'TypeScript', framework: 'React Native' },
780
783
  'dart-flutter': { lang: 'Dart', framework: 'Flutter' },
781
784
  'go': { lang: 'Go', framework: '-' },
@@ -965,7 +968,7 @@ async function init(projectName) {
965
968
  ensureDir(commandsDir);
966
969
  const sourceDir = path.join(__dirname, '../../commands');
967
970
  copyDirRecursive(sourceDir, commandsDir);
968
- log(' ✅ 슬래시 커맨드 설치 완료 (12개)\n');
971
+ log(' ✅ 슬래시 커맨드 설치 완료 (7개)\n');
969
972
  // 기술 스택 감지
970
973
  const { stacks: detectedStacks, details: stackDetails } = detectTechStacks(projectRoot);
971
974
  if (detectedStacks.length > 0) {
@@ -1051,12 +1054,13 @@ async function init(projectName) {
1051
1054
  const langSource = path.join(rulesSource, 'languages');
1052
1055
  const langTarget = path.join(rulesTarget, 'languages');
1053
1056
  ensureDir(langTarget);
1054
- const detectedTypes = detectedStacks.map(s => s.type);
1057
+ // 감지된 스택 타입을 그대로 파일명으로 매칭 (typescript-nextjs -> typescript-nextjs.md)
1058
+ const detectedTypes = new Set(detectedStacks.map(s => s.type));
1055
1059
  if (fs.existsSync(langSource)) {
1056
1060
  const langFiles = fs.readdirSync(langSource);
1057
1061
  langFiles.forEach(file => {
1058
1062
  const langType = file.replace('.md', '');
1059
- if (detectedTypes.includes(langType)) {
1063
+ if (detectedTypes.has(langType)) {
1060
1064
  fs.copyFileSync(path.join(langSource, file), path.join(langTarget, file));
1061
1065
  }
1062
1066
  });
@@ -1070,7 +1074,7 @@ async function init(projectName) {
1070
1074
  log(' ✅ 서브에이전트 설치 완료 (.claude/agents/)\n');
1071
1075
  // .claude/settings.json 설정
1072
1076
  const settingsPath = path.join(claudeDir, 'settings.json');
1073
- const hooksTemplate = path.join(__dirname, '../../templates/hooks-template.json');
1077
+ const hooksTemplate = path.join(__dirname, '../../hooks/hooks.json');
1074
1078
  if (fs.existsSync(hooksTemplate)) {
1075
1079
  const vibeHooks = JSON.parse(fs.readFileSync(hooksTemplate, 'utf-8'));
1076
1080
  if (fs.existsSync(settingsPath)) {
@@ -1106,7 +1110,7 @@ ${isNewProject ? `프로젝트 위치:
1106
1110
  ` : ''}생성된 구조:
1107
1111
  CLAUDE.md # 프로젝트 컨텍스트
1108
1112
  .claude/
1109
- ├── commands/ # 슬래시 커맨드 (12개)
1113
+ ├── commands/ # 슬래시 커맨드 (7개)
1110
1114
  ├── agents/ # 서브에이전트 (simplifier)
1111
1115
  ├── settings.json # Hooks 설정 (저장소 공유)
1112
1116
  └── vibe/
@@ -1235,9 +1239,35 @@ async function update() {
1235
1239
  // .claude/commands 업데이트
1236
1240
  const commandsDir = path.join(claudeDir, 'commands');
1237
1241
  ensureDir(commandsDir);
1242
+ // 레거시 커맨드 파일 정리 (v2.2.7 이전 버전에서 제거된 커맨드들)
1243
+ const legacyCommands = [
1244
+ 'vibe.analyze.md', // agents/analyzer.md로 통합 후 다시 commands로 복원
1245
+ 'vibe.compound.md', // hooks 자동 트리거로 변경
1246
+ 'vibe.continue.md', // SessionStart hook으로 변경
1247
+ 'vibe.diagram.md', // vibe.utils --diagram으로 변경
1248
+ 'vibe.e2e.md', // vibe.utils --e2e로 변경
1249
+ 'vibe.reason.md', // agents/reasoner.md로 통합 후 다시 commands로 복원
1250
+ 'vibe.setup.md', // 제거됨
1251
+ 'vibe.ui.md', // vibe.utils --ui로 변경
1252
+ ];
1253
+ legacyCommands.forEach(cmd => {
1254
+ const cmdPath = path.join(commandsDir, cmd);
1255
+ if (fs.existsSync(cmdPath)) {
1256
+ fs.unlinkSync(cmdPath);
1257
+ }
1258
+ });
1238
1259
  const sourceDir = path.join(__dirname, '../../commands');
1239
1260
  copyDirRecursive(sourceDir, commandsDir);
1240
- log(' ✅ 슬래시 커맨드 업데이트 완료 (12개)\n');
1261
+ log(' ✅ 슬래시 커맨드 업데이트 완료 (7개)\n');
1262
+ // 레거시 에이전트 파일 정리 (commands에 통합된 에이전트들)
1263
+ const agentsDir = path.join(claudeDir, 'agents');
1264
+ const legacyAgents = ['reviewer.md', 'analyzer.md', 'reasoner.md'];
1265
+ legacyAgents.forEach(agent => {
1266
+ const agentPath = path.join(agentsDir, agent);
1267
+ if (fs.existsSync(agentPath)) {
1268
+ fs.unlinkSync(agentPath);
1269
+ }
1270
+ });
1241
1271
  // 기술 스택 감지
1242
1272
  const { stacks: detectedStacks, details: stackDetails } = detectTechStacks(projectRoot);
1243
1273
  // config.json 업데이트
@@ -1338,29 +1368,29 @@ async function update() {
1338
1368
  removeDirRecursive(langTarget);
1339
1369
  }
1340
1370
  ensureDir(langTarget);
1341
- const detectedTypes = detectedStacks.map(s => s.type);
1371
+ // 감지된 스택 타입을 그대로 파일명으로 매칭 (typescript-nextjs -> typescript-nextjs.md)
1372
+ const detectedTypes = new Set(detectedStacks.map(s => s.type));
1342
1373
  if (fs.existsSync(langSource)) {
1343
1374
  const langFiles = fs.readdirSync(langSource);
1344
1375
  langFiles.forEach(file => {
1345
1376
  const langType = file.replace('.md', '');
1346
- if (detectedTypes.includes(langType)) {
1377
+ if (detectedTypes.has(langType)) {
1347
1378
  fs.copyFileSync(path.join(langSource, file), path.join(langTarget, file));
1348
1379
  }
1349
1380
  });
1350
1381
  }
1351
1382
  if (detectedStacks.length > 0) {
1352
- log(` 🔍 감지된 기술 스택: ${detectedTypes.join(', ')}\n`);
1383
+ log(` 🔍 감지된 기술 스택: ${Array.from(detectedTypes).join(', ')}\n`);
1353
1384
  }
1354
1385
  log(' ✅ 코딩 규칙 업데이트 완료 (.claude/vibe/rules/)\n');
1355
1386
  // .claude/agents/ 업데이트
1356
- const agentsDir = path.join(claudeDir, 'agents');
1357
1387
  ensureDir(agentsDir);
1358
1388
  const agentsSourceDir = path.join(__dirname, '../../agents');
1359
1389
  copyDirRecursive(agentsSourceDir, agentsDir);
1360
1390
  log(' ✅ 서브에이전트 업데이트 완료 (.claude/agents/)\n');
1361
1391
  // settings.json 업데이트
1362
1392
  const settingsPath = path.join(claudeDir, 'settings.json');
1363
- const hooksTemplate = path.join(__dirname, '../../templates/hooks-template.json');
1393
+ const hooksTemplate = path.join(__dirname, '../../hooks/hooks.json');
1364
1394
  if (fs.existsSync(hooksTemplate)) {
1365
1395
  const vibeHooks = JSON.parse(fs.readFileSync(hooksTemplate, 'utf-8'));
1366
1396
  if (fs.existsSync(settingsPath)) {
@@ -1507,7 +1537,7 @@ async function update() {
1507
1537
  ✅ vibe 업데이트 완료! (v${packageJson.version})
1508
1538
 
1509
1539
  업데이트된 항목:
1510
- - 슬래시 커맨드 (12개)
1540
+ - 슬래시 커맨드 (7개)
1511
1541
  - 코딩 규칙 (.claude/vibe/rules/)
1512
1542
  - 서브에이전트 (.claude/agents/)
1513
1543
  - Hooks 설정
@@ -1589,7 +1619,7 @@ function remove() {
1589
1619
  제거된 항목:
1590
1620
  - MCP 서버 (vibe, context7)
1591
1621
  - .claude/vibe/ 폴더
1592
- - 슬래시 커맨드 (12개)
1622
+ - 슬래시 커맨드 (7개)
1593
1623
  - 서브에이전트 (5개)
1594
1624
  - Hooks 설정
1595
1625