@su-record/vibe 2.0.11 → 2.2.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 (60) hide show
  1. package/.claude/settings.json +1 -1
  2. package/.claude/settings.local.json +5 -1
  3. package/{.vibe → .claude/vibe}/rules/quality/bdd-contract-testing.md +1 -1
  4. package/{.vibe → .claude/vibe}/setup.sh +1 -1
  5. package/CLAUDE.md +16 -6
  6. package/README.md +33 -15
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +100 -56
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/tools/reasoning/applyReasoningFramework.js +1 -1
  11. package/package.json +1 -2
  12. package/templates/feature-template.md +1 -1
  13. package/.claude/agents/explorer.md +0 -48
  14. package/.claude/agents/implementer.md +0 -53
  15. package/.claude/agents/research/best-practices-agent.md +0 -139
  16. package/.claude/agents/research/codebase-patterns-agent.md +0 -147
  17. package/.claude/agents/research/framework-docs-agent.md +0 -181
  18. package/.claude/agents/research/security-advisory-agent.md +0 -167
  19. package/.claude/agents/review/architecture-reviewer.md +0 -107
  20. package/.claude/agents/review/complexity-reviewer.md +0 -116
  21. package/.claude/agents/review/data-integrity-reviewer.md +0 -88
  22. package/.claude/agents/review/git-history-reviewer.md +0 -103
  23. package/.claude/agents/review/performance-reviewer.md +0 -86
  24. package/.claude/agents/review/python-reviewer.md +0 -152
  25. package/.claude/agents/review/rails-reviewer.md +0 -139
  26. package/.claude/agents/review/react-reviewer.md +0 -144
  27. package/.claude/agents/review/security-reviewer.md +0 -80
  28. package/.claude/agents/review/simplicity-reviewer.md +0 -140
  29. package/.claude/agents/review/test-coverage-reviewer.md +0 -116
  30. package/.claude/agents/review/typescript-reviewer.md +0 -127
  31. package/.claude/agents/searcher.md +0 -54
  32. package/.claude/agents/simplifier.md +0 -119
  33. package/.claude/agents/tester.md +0 -49
  34. package/.claude/commands/vibe.analyze.md +0 -239
  35. package/.claude/commands/vibe.compound.md +0 -261
  36. package/.claude/commands/vibe.continue.md +0 -88
  37. package/.claude/commands/vibe.diagram.md +0 -178
  38. package/.claude/commands/vibe.e2e.md +0 -266
  39. package/.claude/commands/vibe.reason.md +0 -306
  40. package/.claude/commands/vibe.review.md +0 -324
  41. package/.claude/commands/vibe.run.md +0 -760
  42. package/.claude/commands/vibe.spec.md +0 -383
  43. package/.claude/commands/vibe.tool.md +0 -153
  44. package/.claude/commands/vibe.ui.md +0 -137
  45. package/.claude/commands/vibe.verify.md +0 -238
  46. package/.claude/skills/git-worktree.md +0 -178
  47. package/.claude/skills/priority-todos.md +0 -236
  48. /package/{.vibe → .claude/vibe}/config.json +0 -0
  49. /package/{.vibe → .claude/vibe}/constitution.md +0 -0
  50. /package/{.vibe → .claude/vibe}/rules/core/communication-guide.md +0 -0
  51. /package/{.vibe → .claude/vibe}/rules/core/development-philosophy.md +0 -0
  52. /package/{.vibe → .claude/vibe}/rules/core/quick-start.md +0 -0
  53. /package/{.vibe → .claude/vibe}/rules/quality/checklist.md +0 -0
  54. /package/{.vibe → .claude/vibe}/rules/quality/testing-strategy.md +0 -0
  55. /package/{.vibe → .claude/vibe}/rules/standards/anti-patterns.md +0 -0
  56. /package/{.vibe → .claude/vibe}/rules/standards/code-structure.md +0 -0
  57. /package/{.vibe → .claude/vibe}/rules/standards/complexity-metrics.md +0 -0
  58. /package/{.vibe → .claude/vibe}/rules/standards/naming-conventions.md +0 -0
  59. /package/{.vibe → .claude/vibe}/rules/tools/mcp-hi-ai-guide.md +0 -0
  60. /package/{.vibe → .claude/vibe}/rules/tools/mcp-workflow.md +0 -0
@@ -10,7 +10,7 @@
10
10
  "Bash(git push:*)",
11
11
  "Bash(npm pack)",
12
12
  "Bash(npm install:*)",
13
- "Read(//private/tmp/test-vibe-bdd/.vibe/**)",
13
+ "Read(//private/tmp/test-vibe-bdd/.claude/vibe/**)",
14
14
  "Read(//private/tmp/test-vibe-bdd/.claude/commands/**)",
15
15
  "Bash(npm view:*)",
16
16
  "Bash(gh release create:*)",
@@ -14,7 +14,11 @@
14
14
  "Bash(claude mcp list:*)",
15
15
  "Bash(C:Usersendba.localbinclaude.exe --version)",
16
16
  "Bash(\"C:\\\\Users\\\\endba\\\\.local\\\\bin\\\\claude.exe\" --version)",
17
- "Bash(npm cache clean:*)"
17
+ "Bash(npm cache clean:*)",
18
+ "Bash(git status:*)",
19
+ "Bash(gh pr create --repo anthropics/claude-plugins-official --title \"feat: add vibe plugin - SPEC-driven AI coding framework\" --body \"$\\(cat <<''EOF''\n## Plugin: vibe\n\nSPEC-driven AI coding framework for Claude Code with parallel agents, BDD verification, and quality assurance.\n\n### Features\n\n- **12 Slash Commands**: `/vibe.spec`, `/vibe.run`, `/vibe.verify`, `/vibe.review`, `/vibe.reason`, `/vibe.diagram`, and more\n- **16 Specialist Agents**: Security, performance, architecture reviewers + language-specific reviewers \\(Python, TypeScript, React, Rails\\)\n- **ULTRAWORK Pipeline**: Parallel execution with ~50% speed improvement through background agents and phase pipelining\n- **BDD Verification**: Behavior-driven development testing against SPEC requirements\n- **Context7 Integration**: Built-in support for up-to-date documentation lookup\n\n### Workflow\n\n```\n/vibe.spec \"feature\" → /vibe.run \"feature\" → /vibe.verify \"feature\"\n```\n\n### Repository\n\nhttps://github.com/su-record/vibe\n\n### License\n\nMIT\nEOF\n\\)\")",
20
+ "Bash(git rev-parse:*)",
21
+ "Bash(claude plugin:*)"
18
22
  ]
19
23
  }
20
24
  }
@@ -216,7 +216,7 @@ def test_login_contract():
216
216
 
217
217
  ```bash
218
218
  vibe feature "user login"
219
- # → .vibe/features/user-login.feature 생성
219
+ # → .claude/vibe/features/user-login.feature 생성
220
220
  ```
221
221
 
222
222
  ### Contract 테스트 생성
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Vibe 협업자 자동 설치 스크립트
3
- # 사용법: ./.vibe/setup.sh
3
+ # 사용법: ./.claude/vibe/setup.sh
4
4
 
5
5
  set -e
6
6
 
package/CLAUDE.md CHANGED
@@ -4,7 +4,7 @@ SPEC 주도 AI 코딩 프레임워크 (Claude Code 전용)
4
4
 
5
5
  ## 코드 품질 기준 (필수)
6
6
 
7
- 모든 코드 작성 시 아래 기준을 준수합니다. 상세 규칙은 `.vibe/rules/` 참조.
7
+ 모든 코드 작성 시 아래 기준을 준수합니다. 상세 규칙은 `.claude/vibe/rules/` 참조.
8
8
 
9
9
  ### 핵심 원칙
10
10
  - **요청 범위만 수정** - 관련 없는 코드 건드리지 않음
@@ -47,11 +47,21 @@ SPEC 주도 AI 코딩 프레임워크 (Claude Code 전용)
47
47
 
48
48
  **활성화 기능:**
49
49
  - 병렬 서브에이전트 탐색 (3+ 동시)
50
+ - **백그라운드 에이전트** - 구현 중 다음 Phase 준비
51
+ - **Phase 파이프라이닝** - Phase 간 대기 시간 제거
50
52
  - Boulder Loop (모든 Phase 완료까지 자동 진행)
51
53
  - 에러 자동 재시도 (최대 3회)
52
54
  - 컨텍스트 70%+ 시 자동 압축/저장
53
55
  - Phase 간 확인 없이 연속 실행
54
56
 
57
+ **속도 비교:**
58
+
59
+ | Mode | Phase당 | 5 Phase |
60
+ |------|---------|---------|
61
+ | Sequential | ~2분 | ~10분 |
62
+ | Parallel Exploration | ~1.5분 | ~7.5분 |
63
+ | **ULTRAWORK Pipeline** | **~1분** | **~5분** |
64
+
55
65
  ## Commands
56
66
 
57
67
  | 명령어 | 설명 |
@@ -97,7 +107,7 @@ SPEC 주도 AI 코딩 프레임워크 (Claude Code 전용)
97
107
  해결한 문제를 자동 문서화:
98
108
 
99
109
  ```
100
- .vibe/solutions/
110
+ .claude/vibe/solutions/
101
111
  ├── security/ # 보안 해결책
102
112
  ├── performance/ # 성능 최적화
103
113
  ├── database/ # DB 관련
@@ -203,7 +213,7 @@ git worktree remove ../review-123
203
213
 
204
214
  ### Priority Todos
205
215
  ```
206
- .vibe/todos/
216
+ .claude/vibe/todos/
207
217
  ├── P1-security-sql-injection.md # 🔴 머지 차단
208
218
  ├── P2-perf-n1-query.md # 🟡 수정 권장
209
219
  └── P3-style-extract-helper.md # 🔵 백로그
@@ -265,12 +275,12 @@ vibe는 자체 메모리 시스템으로 세션 간 컨텍스트를 유지합니
265
275
 
266
276
  **반드시 포함:**
267
277
  - `.claude/` 폴더 전체 (commands, agents, skills, settings.json)
268
- - `.vibe/rules/`, `.vibe/specs/`, `.vibe/features/`, `.vibe/solutions/`, `.vibe/todos/`
278
+ - `.claude/vibe/rules/`, `.claude/vibe/specs/`, `.claude/vibe/features/`, `.claude/vibe/solutions/`, `.claude/vibe/todos/`
269
279
  - `CLAUDE.md`
270
280
 
271
281
  **제외:**
272
282
  - `.claude/settings.local.json` (개인 설정, 자동 제외)
273
- - `.vibe/mcp/` (node_modules, 자동 제외)
283
+ - `.claude/vibe/mcp/` (node_modules, 자동 제외)
274
284
 
275
285
  ## Getting Started
276
286
 
@@ -307,7 +317,7 @@ vibe init
307
317
  │ └── Playwright E2E 테스트 │
308
318
  │ │
309
319
  │ 6. /vibe.compound │
310
- │ └── 해결책 문서화 → .vibe/solutions/ │
320
+ │ └── 해결책 문서화 → .claude/vibe/solutions/ │
311
321
  │ │
312
322
  └─────────────────────────────────────────────────────────────────┘
313
323
  ```
package/README.md CHANGED
@@ -24,11 +24,16 @@ SPEC 문서 하나로 AI가 바로 구현하고, **시나리오별 자동 검증
24
24
  - **자동 컨텍스트 관리**: 80%+ 시 자동 저장, 세션 자동 복원
25
25
  - **36개 내장 도구**: 코드 분석, 품질 검증, 세션 메모리 (MCP 오버헤드 제거)
26
26
 
27
- ### v2.1.0 신규 기능
27
+ ### v2.2.0 신규 기능
28
+
29
+ - **⚡ ULTRAWORK Pipeline**: 구현 중 백그라운드 에이전트로 다음 Phase 준비
30
+ - **🔄 Phase 파이프라이닝**: Phase 간 대기 시간 제거 (~50% 속도 향상)
31
+
32
+ ### v2.1.0 기능
28
33
 
29
34
  - **🔍 병렬 코드 리뷰**: 13+ 전문 에이전트가 동시 리뷰 (P1/P2/P3 우선순위)
30
35
  - **🎭 E2E 테스트**: Playwright 기반 브라우저 자동화 (시각적 회귀, 비디오 녹화)
31
- - **📚 지식 복리**: 해결책 자동 문서화 → `.vibe/solutions/`
36
+ - **📚 지식 복리**: 해결책 자동 문서화 → `.claude/vibe/solutions/`
32
37
  - **🔬 병렬 리서치**: 요구사항 확정 후 4개 에이전트 동시 조사
33
38
 
34
39
  ---
@@ -37,25 +42,38 @@ SPEC 문서 하나로 AI가 바로 구현하고, **시나리오별 자동 검증
37
42
 
38
43
  ```bash
39
44
  npm install -g @su-record/vibe
45
+ vibe init
46
+ ```
47
+
48
+ **생성되는 구조:**
49
+
50
+ ```text
51
+ .claude/
52
+ ├── commands/ # 슬래시 커맨드 (7개)
53
+ ├── agents/ # 서브에이전트
54
+ ├── settings.json # Hooks 설정
55
+ └── vibe/
56
+ ├── rules/ # 코딩 규칙
57
+ ├── specs/ # SPEC 문서
58
+ ├── features/ # BDD Feature 파일
59
+ └── config.json # 프로젝트 설정
40
60
  ```
41
61
 
42
62
  ---
43
63
 
44
64
  ## Quick Start
45
65
 
46
- ### 1. 프로젝트 초기화 (터미널)
47
-
48
66
  ```bash
49
67
  # 기존 프로젝트에서
50
68
  vibe init
51
- # → 내장 도구 활성화 + MCP 서버 등록 (vibe-gemini, vibe-gpt, context7)
69
+ # → 커맨드/에이전트 설치 + MCP 서버 등록 (context7, vibe-gemini, vibe-gpt)
52
70
 
53
71
  # 새 프로젝트 생성
54
72
  vibe init my-project
55
73
  cd my-project
56
74
  ```
57
75
 
58
- ### 2. 슬래시 커맨드 사용 (Claude Code)
76
+ ### 슬래시 커맨드 사용 (Claude Code)
59
77
 
60
78
  ```
61
79
  /vibe.spec "로그인 기능" # SPEC 작성 (대화형)
@@ -73,7 +91,7 @@ cd my-project
73
91
  │ /vibe.spec "기능명" │
74
92
  │ ↓ 대화형 요구사항 수집 │
75
93
  │ ↓ 요구사항 확정 후 4개 병렬 리서치 (v2.1.0) │
76
- │ ↓ .vibe/specs/{기능명}.md + .feature │
94
+ │ ↓ .claude/vibe/specs/{기능명}.md + .feature │
77
95
  ├─────────────────────────────────────────────────────┤
78
96
  │ /vibe.run "기능명" ultrawork │
79
97
  │ ↓ 시나리오별 구현 + 즉시 검증 (SDD) │
@@ -89,7 +107,7 @@ cd my-project
89
107
  │ ↓ Playwright E2E 테스트 │
90
108
  ├─────────────────────────────────────────────────────┤
91
109
  │ /vibe.compound ← NEW (v2.1.0) │
92
- │ ↓ 해결책 문서화 → .vibe/solutions/ │
110
+ │ ↓ 해결책 문서화 → .claude/vibe/solutions/ │
93
111
  └─────────────────────────────────────────────────────┘
94
112
  ```
95
113
 
@@ -305,7 +323,7 @@ Playwright 기반 브라우저 자동화 테스트:
305
323
  해결한 문제를 자동 문서화하여 지식 축적:
306
324
 
307
325
  ```
308
- .vibe/solutions/
326
+ .claude/vibe/solutions/
309
327
  ├── security/ # 보안 해결책
310
328
  ├── performance/ # 성능 최적화
311
329
  ├── database/ # DB 관련
@@ -371,7 +389,7 @@ project/
371
389
  │ ├── skills/ # 스킬 (2개) ← NEW
372
390
  │ ├── settings.json # Hooks 설정
373
391
  │ └── settings.local.json # 개인 설정 ← git 제외 (자동)
374
- └── .vibe/
392
+ └── .claude/vibe/
375
393
  ├── config.json # 프로젝트 설정 ← git 공유
376
394
  ├── constitution.md # 프로젝트 원칙 ← git 공유
377
395
  ├── rules/ # 코딩 규칙 ← git 공유
@@ -389,7 +407,7 @@ project/
389
407
  ## Feature 파일 (BDD 시나리오)
390
408
 
391
409
  ```gherkin
392
- # .vibe/features/login.feature
410
+ # .claude/vibe/features/login.feature
393
411
 
394
412
  Feature: 로그인
395
413
 
@@ -454,7 +472,7 @@ Then: {예상 결과}
454
472
 
455
473
  ---
456
474
 
457
- ## Coding Rules (.vibe/rules/)
475
+ ## Coding Rules (.claude/vibe/rules/)
458
476
 
459
477
  ### 언어별 규칙 자동 적용
460
478
 
@@ -651,8 +669,8 @@ User: 1
651
669
  [대화 계속...]
652
670
 
653
671
  ✅ SPEC 문서 작성 완료!
654
- 📄 .vibe/specs/brick-game.md
655
- 📄 .vibe/features/brick-game.feature
672
+ 📄 .claude/vibe/specs/brick-game.md
673
+ 📄 .claude/vibe/features/brick-game.feature
656
674
 
657
675
  다음 단계: /vibe.run "벽돌게임"
658
676
  ```
@@ -693,7 +711,7 @@ npm install -g @su-record/vibe
693
711
  vibe update
694
712
 
695
713
  # 또는 setup 스크립트 실행
696
- ./.vibe/setup.sh
714
+ ./.claude/vibe/setup.sh
697
715
  ```
698
716
 
699
717
  ### 사용법
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AA4yEH,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;AAy1EH,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
@@ -300,7 +300,7 @@ function getLLMAuthStatus() {
300
300
  // GPT API 키 확인 (프로젝트 config)
301
301
  if (!status.gpt) {
302
302
  try {
303
- const configPath = path.join(process.cwd(), '.vibe', 'config.json');
303
+ const configPath = path.join(process.cwd(), '.claude', 'vibe', 'config.json');
304
304
  if (fs.existsSync(configPath)) {
305
305
  const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
306
306
  if (config.models?.gpt?.enabled) {
@@ -334,7 +334,7 @@ function getLLMAuthStatus() {
334
334
  // Gemini API 키 확인 (프로젝트 config)
335
335
  if (!status.gemini) {
336
336
  try {
337
- const configPath = path.join(process.cwd(), '.vibe', 'config.json');
337
+ const configPath = path.join(process.cwd(), '.claude', 'vibe', 'config.json');
338
338
  if (fs.existsSync(configPath)) {
339
339
  const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
340
340
  if (config.models?.gemini?.enabled) {
@@ -641,7 +641,7 @@ function detectTechStacks(projectRoot) {
641
641
  // ============================================================================
642
642
  function setupCollaboratorAutoInstall(projectRoot) {
643
643
  const packageJsonPath = path.join(projectRoot, 'package.json');
644
- const vibeDir = path.join(projectRoot, '.vibe');
644
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
645
645
  const vibeVersion = getPackageJson().version;
646
646
  // 1. Node.js 프로젝트: package.json 정리
647
647
  if (fs.existsSync(packageJsonPath)) {
@@ -687,12 +687,15 @@ function setupCollaboratorAutoInstall(projectRoot) {
687
687
  log(' ⚠️ package.json 수정 실패: ' + e.message + '\n');
688
688
  }
689
689
  }
690
- // 2. .vibe/setup.sh 생성
690
+ // 2. .claude/vibe/setup.sh 생성
691
691
  const setupShPath = path.join(vibeDir, 'setup.sh');
692
+ if (!fs.existsSync(vibeDir)) {
693
+ fs.mkdirSync(vibeDir, { recursive: true });
694
+ }
692
695
  if (!fs.existsSync(setupShPath)) {
693
696
  const setupScript = `#!/bin/bash
694
697
  # Vibe 협업자 자동 설치 스크립트
695
- # 사용법: ./.vibe/setup.sh
698
+ # 사용법: ./.claude/vibe/setup.sh
696
699
 
697
700
  set -e
698
701
 
@@ -724,7 +727,7 @@ echo " /vibe.run \\"기능명\\" 구현 실행"
724
727
  `;
725
728
  fs.writeFileSync(setupShPath, setupScript);
726
729
  fs.chmodSync(setupShPath, '755');
727
- log(' ✅ 협업자 설치 스크립트 생성 (.vibe/setup.sh)\n');
730
+ log(' ✅ 협업자 설치 스크립트 생성 (.claude/vibe/setup.sh)\n');
728
731
  }
729
732
  // 3. README.md에 협업자 안내 추가
730
733
  const readmePath = path.join(projectRoot, 'README.md');
@@ -741,7 +744,7 @@ npm install -g @su-record/vibe
741
744
  vibe update
742
745
 
743
746
  # 또는 setup 스크립트 실행
744
- ./.vibe/setup.sh
747
+ ./.claude/vibe/setup.sh
745
748
  \`\`\`
746
749
 
747
750
  ### 사용법
@@ -869,9 +872,9 @@ async function init(projectName) {
869
872
  fs.mkdirSync(projectRoot, { recursive: true });
870
873
  isNewProject = true;
871
874
  }
872
- const vibeDir = path.join(projectRoot, '.vibe');
875
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
873
876
  if (fs.existsSync(vibeDir)) {
874
- log('❌ .vibe/ 폴더가 이미 존재합니다.');
877
+ log('❌ .claude/vibe/ 폴더가 이미 존재합니다.');
875
878
  return;
876
879
  }
877
880
  ensureDir(vibeDir);
@@ -918,25 +921,33 @@ async function init(projectName) {
918
921
  log(' ⚠️ Context7 MCP 수동 등록 필요\n');
919
922
  }
920
923
  }
921
- // .vibe 폴더 구조 생성
924
+ // .claude/vibe 폴더 구조 생성
922
925
  ['specs', 'features'].forEach(dir => {
923
926
  ensureDir(path.join(vibeDir, dir));
924
927
  });
925
- // 기존 .vibe/mcp/ 폴더 정리
926
- const oldMcpDir = path.join(vibeDir, 'mcp');
927
- if (fs.existsSync(oldMcpDir)) {
928
- log(' 🧹 기존 .vibe/mcp/ 폴더 정리 중...\n');
928
+ // 기존 .vibe/ 폴더 마이그레이션 (레거시)
929
+ const legacyVibeDir = path.join(projectRoot, '.vibe');
930
+ if (fs.existsSync(legacyVibeDir)) {
931
+ log(' 🔄 레거시 .vibe/ 폴더 마이그레이션 중...\n');
929
932
  try {
930
- removeDirRecursive(oldMcpDir);
931
- log(' .vibe/mcp/ 폴더 삭제 완료\n');
933
+ // specs, features 등 데이터 폴더 이동
934
+ ['specs', 'features', 'solutions', 'todos', 'memory'].forEach(dir => {
935
+ const legacySrc = path.join(legacyVibeDir, dir);
936
+ const newDest = path.join(vibeDir, dir);
937
+ if (fs.existsSync(legacySrc) && !fs.existsSync(newDest)) {
938
+ copyDirRecursive(legacySrc, newDest);
939
+ }
940
+ });
941
+ removeDirRecursive(legacyVibeDir);
942
+ log(' ✅ .vibe/ → .claude/vibe/ 마이그레이션 완료\n');
932
943
  }
933
944
  catch (e) {
934
- log(' ⚠️ .vibe/mcp/ 폴더 수동 삭제 필요\n');
945
+ log(' ⚠️ 마이그레이션 실패 - .vibe/ 폴더 수동 삭제 필요\n');
935
946
  }
936
947
  }
937
948
  // .gitignore 업데이트
938
949
  const gitignorePath = path.join(projectRoot, '.gitignore');
939
- const mcpIgnore = '.vibe/mcp/';
950
+ const mcpIgnore = '.claude/vibe/mcp/';
940
951
  if (fs.existsSync(gitignorePath)) {
941
952
  let gitignore = fs.readFileSync(gitignorePath, 'utf-8');
942
953
  if (!gitignore.includes(mcpIgnore)) {
@@ -1026,8 +1037,8 @@ async function init(projectName) {
1026
1037
  fs.writeFileSync(projectClaudeMd, vibeContent);
1027
1038
  log(' ✅ CLAUDE.md 생성\n');
1028
1039
  }
1029
- // .vibe/rules/ 복사
1030
- const rulesSource = path.join(__dirname, '../../.vibe/rules');
1040
+ // .claude/vibe/rules/ 복사
1041
+ const rulesSource = path.join(__dirname, '../../.claude/vibe/rules');
1031
1042
  const rulesTarget = path.join(vibeDir, 'rules');
1032
1043
  const coreDirs = ['core', 'quality', 'standards', 'tools'];
1033
1044
  coreDirs.forEach(dir => {
@@ -1050,7 +1061,7 @@ async function init(projectName) {
1050
1061
  }
1051
1062
  });
1052
1063
  }
1053
- log(' ✅ 코딩 규칙 설치 완료 (.vibe/rules/)\n');
1064
+ log(' ✅ 코딩 규칙 설치 완료 (.claude/vibe/rules/)\n');
1054
1065
  // .claude/agents/ 복사
1055
1066
  const agentsDir = path.join(claudeDir, 'agents');
1056
1067
  ensureDir(agentsDir);
@@ -1097,17 +1108,17 @@ ${isNewProject ? `프로젝트 위치:
1097
1108
  .claude/
1098
1109
  ├── commands/ # 슬래시 커맨드 (7개)
1099
1110
  ├── agents/ # 서브에이전트 (simplifier)
1100
- └── settings.json # Hooks 설정 (저장소 공유)
1101
- .vibe/
1102
- ├── config.json # 프로젝트 설정
1103
- ├── constitution.md # 프로젝트 원칙
1104
- ├── setup.sh # 협업자 설치 스크립트
1105
- ├── rules/ # 코딩 규칙
1106
- │ ├── core/ # 핵심 원칙
1107
- │ ├── quality/ # 품질 체크리스트
1108
- │ └── languages/ # 언어별 규칙
1109
- ├── specs/ # SPEC 문서들
1110
- └── features/ # BDD Feature 파일들
1111
+ ├── settings.json # Hooks 설정 (저장소 공유)
1112
+ └── vibe/
1113
+ ├── config.json # 프로젝트 설정
1114
+ ├── constitution.md # 프로젝트 원칙
1115
+ ├── setup.sh # 협업자 설치 스크립트
1116
+ ├── rules/ # 코딩 규칙
1117
+ │ ├── core/ # 핵심 원칙
1118
+ │ ├── quality/ # 품질 체크리스트
1119
+ │ └── languages/ # 언어별 규칙
1120
+ ├── specs/ # SPEC 문서들
1121
+ └── features/ # BDD Feature 파일들
1111
1122
 
1112
1123
  내장 도구: ✓ (35+)
1113
1124
  협업자 자동 설치: ✓
@@ -1164,18 +1175,45 @@ async function checkAndUpgradeVibe() {
1164
1175
  async function update() {
1165
1176
  try {
1166
1177
  const projectRoot = process.cwd();
1167
- const vibeDir = path.join(projectRoot, '.vibe');
1178
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1168
1179
  const claudeDir = path.join(projectRoot, '.claude');
1180
+ const legacyVibeDir = path.join(projectRoot, '.vibe');
1169
1181
  // CI/프로덕션 환경에서는 스킵
1170
1182
  if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') {
1171
1183
  return;
1172
1184
  }
1173
- if (!fs.existsSync(vibeDir)) {
1185
+ // 레거시 .vibe/ 폴더가 있으면 마이그레이션
1186
+ if (fs.existsSync(legacyVibeDir) && !fs.existsSync(vibeDir)) {
1187
+ log('🔄 .vibe/ → .claude/vibe/ 마이그레이션 중...\n');
1188
+ ensureDir(vibeDir);
1189
+ ['specs', 'features', 'solutions', 'todos', 'memory', 'rules', 'config.json', 'constitution.md'].forEach(item => {
1190
+ const src = path.join(legacyVibeDir, item);
1191
+ const dst = path.join(vibeDir, item);
1192
+ if (fs.existsSync(src) && !fs.existsSync(dst)) {
1193
+ if (fs.statSync(src).isDirectory()) {
1194
+ copyDirRecursive(src, dst);
1195
+ }
1196
+ else {
1197
+ fs.copyFileSync(src, dst);
1198
+ }
1199
+ }
1200
+ });
1201
+ try {
1202
+ removeDirRecursive(legacyVibeDir);
1203
+ log(' ✅ 마이그레이션 완료\n');
1204
+ }
1205
+ catch (e) {
1206
+ log(' ⚠️ .vibe/ 폴더 수동 삭제 필요\n');
1207
+ }
1208
+ }
1209
+ if (!fs.existsSync(vibeDir) && !fs.existsSync(legacyVibeDir)) {
1174
1210
  if (!options.silent) {
1175
1211
  console.log('❌ vibe 프로젝트가 아닙니다. 먼저 vibe init을 실행하세요.');
1176
1212
  }
1177
1213
  return;
1178
1214
  }
1215
+ // vibeDir이 없으면 생성
1216
+ ensureDir(vibeDir);
1179
1217
  log('🔄 vibe 업데이트 중...\n');
1180
1218
  // 최신 버전 확인
1181
1219
  if (!options.silent) {
@@ -1183,11 +1221,11 @@ async function update() {
1183
1221
  if (wasUpgraded)
1184
1222
  return;
1185
1223
  }
1186
- // 마이그레이션: .agent/rules/ → .vibe/rules/
1224
+ // 마이그레이션: .agent/rules/ → .claude/vibe/rules/
1187
1225
  const oldRulesDir = path.join(projectRoot, '.agent/rules');
1188
1226
  const oldAgentDir = path.join(projectRoot, '.agent');
1189
1227
  if (fs.existsSync(oldRulesDir)) {
1190
- log(' 🔄 마이그레이션: .agent/rules/ → .vibe/rules/\n');
1228
+ log(' 🔄 마이그레이션: .agent/rules/ → .claude/vibe/rules/\n');
1191
1229
  removeDirRecursive(oldRulesDir);
1192
1230
  if (fs.existsSync(oldAgentDir) && fs.readdirSync(oldAgentDir).length === 0) {
1193
1231
  fs.rmdirSync(oldAgentDir);
@@ -1283,8 +1321,8 @@ async function update() {
1283
1321
  log(' ✅ CLAUDE.md 생성\n');
1284
1322
  }
1285
1323
  }
1286
- // .vibe/rules/ 업데이트
1287
- const rulesSource = path.join(__dirname, '../../.vibe/rules');
1324
+ // .claude/vibe/rules/ 업데이트
1325
+ const rulesSource = path.join(__dirname, '../../.claude/vibe/rules');
1288
1326
  const rulesTarget = path.join(vibeDir, 'rules');
1289
1327
  const coreDirs = ['core', 'quality', 'standards', 'tools'];
1290
1328
  coreDirs.forEach(dir => {
@@ -1313,7 +1351,7 @@ async function update() {
1313
1351
  if (detectedStacks.length > 0) {
1314
1352
  log(` 🔍 감지된 기술 스택: ${detectedTypes.join(', ')}\n`);
1315
1353
  }
1316
- log(' ✅ 코딩 규칙 업데이트 완료 (.vibe/rules/)\n');
1354
+ log(' ✅ 코딩 규칙 업데이트 완료 (.claude/vibe/rules/)\n');
1317
1355
  // .claude/agents/ 업데이트
1318
1356
  const agentsDir = path.join(claudeDir, 'agents');
1319
1357
  ensureDir(agentsDir);
@@ -1452,16 +1490,16 @@ async function update() {
1452
1490
  catch (e) {
1453
1491
  log(' ⚠️ MCP 등록 실패\n');
1454
1492
  }
1455
- // 기존 .vibe/mcp/ 폴더 정리
1493
+ // 기존 mcp/ 폴더 정리 (레거시)
1456
1494
  const oldMcpDir = path.join(vibeDir, 'mcp');
1457
1495
  if (fs.existsSync(oldMcpDir)) {
1458
- log(' 🧹 기존 .vibe/mcp/ 폴더 정리 중...\n');
1496
+ log(' 🧹 기존 mcp/ 폴더 정리 중...\n');
1459
1497
  try {
1460
1498
  removeDirRecursive(oldMcpDir);
1461
- log(' ✅ .vibe/mcp/ 폴더 삭제 완료\n');
1499
+ log(' ✅ mcp/ 폴더 삭제 완료\n');
1462
1500
  }
1463
1501
  catch (e) {
1464
- log(' ⚠️ .vibe/mcp/ 폴더 수동 삭제 필요\n');
1502
+ log(' ⚠️ mcp/ 폴더 수동 삭제 필요\n');
1465
1503
  }
1466
1504
  }
1467
1505
  const packageJson = getPackageJson();
@@ -1470,7 +1508,7 @@ async function update() {
1470
1508
 
1471
1509
  업데이트된 항목:
1472
1510
  - 슬래시 커맨드 (7개)
1473
- - 코딩 규칙 (.vibe/rules/)
1511
+ - 코딩 규칙 (.claude/vibe/rules/)
1474
1512
  - 서브에이전트 (.claude/agents/)
1475
1513
  - Hooks 설정
1476
1514
 
@@ -1484,9 +1522,10 @@ ${formatLLMStatus()}
1484
1522
  }
1485
1523
  function remove() {
1486
1524
  const projectRoot = process.cwd();
1487
- const vibeDir = path.join(projectRoot, '.vibe');
1525
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1526
+ const legacyVibeDir = path.join(projectRoot, '.vibe');
1488
1527
  const claudeDir = path.join(projectRoot, '.claude');
1489
- if (!fs.existsSync(vibeDir)) {
1528
+ if (!fs.existsSync(vibeDir) && !fs.existsSync(legacyVibeDir)) {
1490
1529
  console.log('❌ vibe 프로젝트가 아닙니다.');
1491
1530
  return;
1492
1531
  }
@@ -1497,10 +1536,15 @@ function remove() {
1497
1536
  unregisterMcp('vibe-gpt');
1498
1537
  unregisterMcp('context7');
1499
1538
  console.log(' ✅ MCP 서버 제거 완료\n');
1500
- // .vibe 폴더 제거
1539
+ // .claude/vibe 폴더 제거
1501
1540
  if (fs.existsSync(vibeDir)) {
1502
1541
  removeDirRecursive(vibeDir);
1503
- console.log(' ✅ .vibe/ 폴더 제거 완료\n');
1542
+ console.log(' ✅ .claude/vibe/ 폴더 제거 완료\n');
1543
+ }
1544
+ // 레거시 .vibe 폴더도 제거
1545
+ if (fs.existsSync(legacyVibeDir)) {
1546
+ removeDirRecursive(legacyVibeDir);
1547
+ console.log(' ✅ .vibe/ 폴더 제거 완료 (레거시)\n');
1504
1548
  }
1505
1549
  // .claude/commands 제거
1506
1550
  const commandsDir = path.join(claudeDir, 'commands');
@@ -1544,7 +1588,7 @@ function remove() {
1544
1588
 
1545
1589
  제거된 항목:
1546
1590
  - MCP 서버 (vibe, context7)
1547
- - .vibe/ 폴더
1591
+ - .claude/vibe/ 폴더
1548
1592
  - 슬래시 커맨드 (7개)
1549
1593
  - 서브에이전트 (5개)
1550
1594
  - Hooks 설정
@@ -1568,7 +1612,7 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
1568
1612
  return;
1569
1613
  }
1570
1614
  const projectRoot = process.cwd();
1571
- const vibeDir = path.join(projectRoot, '.vibe');
1615
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1572
1616
  const configPath = path.join(vibeDir, 'config.json');
1573
1617
  if (!fs.existsSync(vibeDir)) {
1574
1618
  console.log('❌ vibe 프로젝트가 아닙니다. 먼저 vibe init을 실행하세요.');
@@ -1615,7 +1659,7 @@ MCP: ${llmConfig.name}
1615
1659
  }
1616
1660
  function removeExternalLLM(llmType) {
1617
1661
  const projectRoot = process.cwd();
1618
- const vibeDir = path.join(projectRoot, '.vibe');
1662
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1619
1663
  const configPath = path.join(vibeDir, 'config.json');
1620
1664
  if (!fs.existsSync(vibeDir)) {
1621
1665
  console.log('❌ vibe 프로젝트가 아닙니다.');
@@ -1670,7 +1714,7 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1670
1714
  `);
1671
1715
  // config.json 업데이트
1672
1716
  const projectRoot = process.cwd();
1673
- const vibeDir = path.join(projectRoot, '.vibe');
1717
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1674
1718
  const configPath = path.join(vibeDir, 'config.json');
1675
1719
  if (fs.existsSync(configPath)) {
1676
1720
  try {
@@ -1773,7 +1817,7 @@ ${activeAccount.email} 계정이 제거되었습니다.
1773
1817
  `);
1774
1818
  // config.json 업데이트
1775
1819
  const projectRoot = process.cwd();
1776
- const vibeDir = path.join(projectRoot, '.vibe');
1820
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1777
1821
  const configPath = path.join(vibeDir, 'config.json');
1778
1822
  if (fs.existsSync(configPath)) {
1779
1823
  try {
@@ -1857,7 +1901,7 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1857
1901
  `);
1858
1902
  // config.json 업데이트
1859
1903
  const projectRoot = process.cwd();
1860
- const vibeDir = path.join(projectRoot, '.vibe');
1904
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1861
1905
  const configPath = path.join(vibeDir, 'config.json');
1862
1906
  if (fs.existsSync(configPath)) {
1863
1907
  try {
@@ -1967,7 +2011,7 @@ ${activeAccount.email} 계정이 제거되었습니다.
1967
2011
  `);
1968
2012
  // config.json 업데이트
1969
2013
  const projectRoot = process.cwd();
1970
- const vibeDir = path.join(projectRoot, '.vibe');
2014
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
1971
2015
  const configPath = path.join(vibeDir, 'config.json');
1972
2016
  if (fs.existsSync(configPath)) {
1973
2017
  try {
@@ -2042,7 +2086,7 @@ Workflow:
2042
2086
  }
2043
2087
  function showStatus() {
2044
2088
  const projectRoot = process.cwd();
2045
- const vibeDir = path.join(projectRoot, '.vibe');
2089
+ const vibeDir = path.join(projectRoot, '.claude', 'vibe');
2046
2090
  const configPath = path.join(vibeDir, 'config.json');
2047
2091
  if (!fs.existsSync(vibeDir)) {
2048
2092
  console.log('❌ vibe 프로젝트가 아닙니다. 먼저 vibe init을 실행하세요.');