@su-record/vibe 2.3.2 → 2.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.
Files changed (118) hide show
  1. package/.claude/settings.json +35 -35
  2. package/.claude/settings.local.json +30 -24
  3. package/.claude/vibe/constitution.md +184 -184
  4. package/.claude/vibe/rules/core/communication-guide.md +104 -104
  5. package/.claude/vibe/rules/core/development-philosophy.md +52 -52
  6. package/.claude/vibe/rules/core/quick-start.md +120 -120
  7. package/.claude/vibe/rules/languages/dart-flutter.md +509 -509
  8. package/.claude/vibe/rules/languages/go.md +396 -396
  9. package/.claude/vibe/rules/languages/java-spring.md +586 -586
  10. package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
  11. package/.claude/vibe/rules/languages/python-django.md +371 -371
  12. package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
  13. package/.claude/vibe/rules/languages/rust.md +425 -425
  14. package/.claude/vibe/rules/languages/swift-ios.md +516 -516
  15. package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
  16. package/.claude/vibe/rules/languages/typescript-node.md +375 -375
  17. package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
  18. package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
  19. package/.claude/vibe/rules/languages/typescript-react.md +525 -525
  20. package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
  21. package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
  22. package/.claude/vibe/rules/quality/checklist.md +276 -276
  23. package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
  24. package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
  25. package/.claude/vibe/rules/standards/code-structure.md +291 -291
  26. package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
  27. package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
  28. package/.claude/vibe/setup.sh +31 -31
  29. package/.claude/vibe/templates/constitution-template.md +184 -184
  30. package/.claude/vibe/templates/contract-backend-template.md +517 -517
  31. package/.claude/vibe/templates/contract-frontend-template.md +594 -594
  32. package/.claude/vibe/templates/feature-template.md +96 -96
  33. package/.claude/vibe/templates/spec-template.md +199 -199
  34. package/CLAUDE.md +345 -345
  35. package/LICENSE +21 -21
  36. package/README.md +817 -744
  37. package/agents/compounder.md +261 -261
  38. package/agents/diagrammer.md +178 -178
  39. package/agents/e2e-tester.md +266 -266
  40. package/agents/explorer.md +48 -48
  41. package/agents/implementer.md +53 -53
  42. package/agents/research/best-practices-agent.md +139 -139
  43. package/agents/research/codebase-patterns-agent.md +147 -147
  44. package/agents/research/framework-docs-agent.md +181 -181
  45. package/agents/research/security-advisory-agent.md +167 -167
  46. package/agents/review/architecture-reviewer.md +107 -107
  47. package/agents/review/complexity-reviewer.md +116 -116
  48. package/agents/review/data-integrity-reviewer.md +88 -88
  49. package/agents/review/git-history-reviewer.md +103 -103
  50. package/agents/review/performance-reviewer.md +86 -86
  51. package/agents/review/python-reviewer.md +152 -152
  52. package/agents/review/rails-reviewer.md +139 -139
  53. package/agents/review/react-reviewer.md +144 -144
  54. package/agents/review/security-reviewer.md +80 -80
  55. package/agents/review/simplicity-reviewer.md +140 -140
  56. package/agents/review/test-coverage-reviewer.md +116 -116
  57. package/agents/review/typescript-reviewer.md +127 -127
  58. package/agents/searcher.md +54 -54
  59. package/agents/simplifier.md +119 -119
  60. package/agents/tester.md +49 -49
  61. package/agents/ui-previewer.md +137 -137
  62. package/commands/vibe.analyze.md +260 -245
  63. package/commands/vibe.reason.md +223 -223
  64. package/commands/vibe.review.md +213 -200
  65. package/commands/vibe.run.md +842 -838
  66. package/commands/vibe.spec.md +405 -419
  67. package/commands/vibe.utils.md +101 -101
  68. package/commands/vibe.verify.md +282 -282
  69. package/dist/cli/index.d.ts.map +1 -1
  70. package/dist/cli/index.js +422 -385
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/lib/MemoryManager.js +92 -92
  73. package/dist/lib/PythonParser.js +108 -108
  74. package/dist/lib/gemini-mcp.js +15 -15
  75. package/dist/lib/gemini-oauth.js +35 -35
  76. package/dist/lib/gpt-mcp.js +17 -17
  77. package/dist/lib/gpt-oauth.js +44 -44
  78. package/dist/orchestrator/agentDiscovery.d.ts +18 -0
  79. package/dist/orchestrator/agentDiscovery.d.ts.map +1 -0
  80. package/dist/orchestrator/agentDiscovery.js +174 -0
  81. package/dist/orchestrator/agentDiscovery.js.map +1 -0
  82. package/dist/orchestrator/backgroundAgent.d.ts +31 -0
  83. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -0
  84. package/dist/orchestrator/backgroundAgent.js +325 -0
  85. package/dist/orchestrator/backgroundAgent.js.map +1 -0
  86. package/dist/orchestrator/index.d.ts +58 -0
  87. package/dist/orchestrator/index.d.ts.map +1 -0
  88. package/dist/orchestrator/index.js +115 -0
  89. package/dist/orchestrator/index.js.map +1 -0
  90. package/dist/orchestrator/orchestrator.d.ts +82 -0
  91. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  92. package/dist/orchestrator/orchestrator.js +257 -0
  93. package/dist/orchestrator/orchestrator.js.map +1 -0
  94. package/dist/orchestrator/parallelResearch.d.ts +19 -0
  95. package/dist/orchestrator/parallelResearch.d.ts.map +1 -0
  96. package/dist/orchestrator/parallelResearch.js +214 -0
  97. package/dist/orchestrator/parallelResearch.js.map +1 -0
  98. package/dist/orchestrator/types.d.ts +109 -0
  99. package/dist/orchestrator/types.d.ts.map +1 -0
  100. package/dist/orchestrator/types.js +5 -0
  101. package/dist/orchestrator/types.js.map +1 -0
  102. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  103. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  104. package/dist/tools/memory/getMemoryGraph.js +12 -12
  105. package/dist/tools/memory/getSessionContext.js +9 -9
  106. package/dist/tools/memory/linkMemories.js +14 -14
  107. package/dist/tools/memory/listMemories.js +4 -4
  108. package/dist/tools/memory/recallMemory.js +4 -4
  109. package/dist/tools/memory/saveMemory.js +4 -4
  110. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  111. package/dist/tools/planning/generatePrd.js +46 -46
  112. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  113. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  114. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  115. package/hooks/hooks.json +121 -121
  116. package/package.json +75 -73
  117. package/skills/git-worktree.md +178 -178
  118. package/skills/priority-todos.md +236 -236
package/dist/cli/index.js CHANGED
@@ -695,37 +695,37 @@ function setupCollaboratorAutoInstall(projectRoot) {
695
695
  fs.mkdirSync(vibeDir, { recursive: true });
696
696
  }
697
697
  if (!fs.existsSync(setupShPath)) {
698
- const setupScript = `#!/bin/bash
699
- # Vibe 협업자 자동 설치 스크립트
700
- # 사용법: ./.claude/vibe/setup.sh
701
-
702
- set -e
703
-
704
- echo "🔧 Vibe 설치 확인 중..."
705
-
706
- # npm/npx 확인
707
- if ! command -v npx &> /dev/null; then
708
- echo "❌ Node.js/npm이 설치되어 있지 않습니다."
709
- echo " https://nodejs.org 에서 설치해주세요."
710
- exit 1
711
- fi
712
-
713
- # vibe 설치 확인 및 업데이트
714
- if command -v vibe &> /dev/null; then
715
- echo "✅ Vibe가 이미 설치되어 있습니다."
716
- vibe update --silent
717
- echo "✅ Vibe 업데이트 완료!"
718
- else
719
- echo "📦 Vibe 설치 중..."
720
- npm install -g @su-record/vibe
721
- vibe update --silent
722
- echo "✅ Vibe 설치 및 설정 완료!"
723
- fi
724
-
725
- echo ""
726
- echo "다음 명령어로 시작하세요:"
727
- echo " /vibe.spec \\"기능명\\" SPEC 작성"
728
- echo " /vibe.run \\"기능명\\" 구현 실행"
698
+ const setupScript = `#!/bin/bash
699
+ # Vibe 협업자 자동 설치 스크립트
700
+ # 사용법: ./.claude/vibe/setup.sh
701
+
702
+ set -e
703
+
704
+ echo "🔧 Vibe 설치 확인 중..."
705
+
706
+ # npm/npx 확인
707
+ if ! command -v npx &> /dev/null; then
708
+ echo "❌ Node.js/npm이 설치되어 있지 않습니다."
709
+ echo " https://nodejs.org 에서 설치해주세요."
710
+ exit 1
711
+ fi
712
+
713
+ # vibe 설치 확인 및 업데이트
714
+ if command -v vibe &> /dev/null; then
715
+ echo "✅ Vibe가 이미 설치되어 있습니다."
716
+ vibe update --silent
717
+ echo "✅ Vibe 업데이트 완료!"
718
+ else
719
+ echo "📦 Vibe 설치 중..."
720
+ npm install -g @su-record/vibe
721
+ vibe update --silent
722
+ echo "✅ Vibe 설치 및 설정 완료!"
723
+ fi
724
+
725
+ echo ""
726
+ echo "다음 명령어로 시작하세요:"
727
+ echo " /vibe.spec \\"기능명\\" SPEC 작성"
728
+ echo " /vibe.run \\"기능명\\" 구현 실행"
729
729
  `;
730
730
  fs.writeFileSync(setupShPath, setupScript);
731
731
  fs.chmodSync(setupShPath, '755');
@@ -733,27 +733,27 @@ echo " /vibe.run \\"기능명\\" 구현 실행"
733
733
  }
734
734
  // 3. README.md에 협업자 안내 추가
735
735
  const readmePath = path.join(projectRoot, 'README.md');
736
- const vibeSetupSection = `
737
- ## Vibe Setup (AI Coding)
738
-
739
- 이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
740
-
741
- ### 협업자 설치
742
-
743
- \`\`\`bash
744
- # 전역 설치 (권장)
745
- npm install -g @su-record/vibe
746
- vibe update
747
-
748
- # 또는 setup 스크립트 실행
749
- ./.claude/vibe/setup.sh
750
- \`\`\`
751
-
752
- ### 사용법
753
-
754
- Claude Code에서 슬래시 커맨드 사용:
755
- - \`/vibe.spec "기능명"\` - SPEC 문서 작성
756
- - \`/vibe.run "기능명"\` - 구현 실행
736
+ const vibeSetupSection = `
737
+ ## Vibe Setup (AI Coding)
738
+
739
+ 이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
740
+
741
+ ### 협업자 설치
742
+
743
+ \`\`\`bash
744
+ # 전역 설치 (권장)
745
+ npm install -g @su-record/vibe
746
+ vibe update
747
+
748
+ # 또는 setup 스크립트 실행
749
+ ./.claude/vibe/setup.sh
750
+ \`\`\`
751
+
752
+ ### 사용법
753
+
754
+ Claude Code에서 슬래시 커맨드 사용:
755
+ - \`/vibe.spec "기능명"\` - SPEC 문서 작성
756
+ - \`/vibe.run "기능명"\` - 구현 실행
757
757
  `;
758
758
  if (fs.existsSync(readmePath)) {
759
759
  const readme = fs.readFileSync(readmePath, 'utf-8');
@@ -789,45 +789,45 @@ const STACK_NAMES = {
789
789
  };
790
790
  // 언어별 CLAUDE.md 규칙
791
791
  const LANGUAGE_RULES = {
792
- typescript: `### TypeScript 규칙
793
- - \`any\` 타입 사용 금지 → \`unknown\` + 타입 가드 사용
794
- - \`as any\` 캐스팅 금지 → 적절한 인터페이스 정의
795
- - \`@ts-ignore\` 금지 → 타입 문제 근본 해결
792
+ typescript: `### TypeScript 규칙
793
+ - \`any\` 타입 사용 금지 → \`unknown\` + 타입 가드 사용
794
+ - \`as any\` 캐스팅 금지 → 적절한 인터페이스 정의
795
+ - \`@ts-ignore\` 금지 → 타입 문제 근본 해결
796
796
  - 모든 함수에 반환 타입 명시`,
797
- python: `### Python 규칙
798
- - 타입 힌트 필수 (함수 매개변수, 반환값)
799
- - \`# type: ignore\` 금지 → 타입 문제 근본 해결
800
- - f-string 사용 권장 (format() 대신)
797
+ python: `### Python 규칙
798
+ - 타입 힌트 필수 (함수 매개변수, 반환값)
799
+ - \`# type: ignore\` 금지 → 타입 문제 근본 해결
800
+ - f-string 사용 권장 (format() 대신)
801
801
  - 리스트 컴프리헨션 적절히 활용`,
802
- go: `### Go 규칙
803
- - 에러 반환 즉시 처리 (if err != nil)
804
- - 명시적 에러 래핑 (fmt.Errorf with %w)
805
- - 인터페이스는 사용처에서 정의
802
+ go: `### Go 규칙
803
+ - 에러 반환 즉시 처리 (if err != nil)
804
+ - 명시적 에러 래핑 (fmt.Errorf with %w)
805
+ - 인터페이스는 사용처에서 정의
806
806
  - 고루틴 누수 방지 (context 활용)`,
807
- rust: `### Rust 규칙
808
- - unwrap()/expect() 프로덕션 코드 금지 → Result/Option 처리
809
- - unsafe 블록 최소화
810
- - 명시적 에러 타입 정의
807
+ rust: `### Rust 규칙
808
+ - unwrap()/expect() 프로덕션 코드 금지 → Result/Option 처리
809
+ - unsafe 블록 최소화
810
+ - 명시적 에러 타입 정의
811
811
  - 소유권/수명 주석 명확히`,
812
- java: `### Java 규칙
813
- - Optional 적극 활용 (null 대신)
814
- - 불변 객체 선호 (final 필드)
815
- - 체크 예외 적절히 처리
812
+ java: `### Java 규칙
813
+ - Optional 적극 활용 (null 대신)
814
+ - 불변 객체 선호 (final 필드)
815
+ - 체크 예외 적절히 처리
816
816
  - 스트림 API 활용`,
817
- kotlin: `### Kotlin 규칙
818
- - nullable 타입 명시 (?)
819
- - !! 연산자 금지 → safe call (?.) 사용
820
- - data class 적극 활용
817
+ kotlin: `### Kotlin 규칙
818
+ - nullable 타입 명시 (?)
819
+ - !! 연산자 금지 → safe call (?.) 사용
820
+ - data class 적극 활용
821
821
  - 확장 함수로 유틸리티 구현`,
822
- dart: `### Dart 규칙
823
- - null safety 준수 (? 및 ! 적절히 사용)
824
- - late 키워드 남용 금지
825
- - const 생성자 활용
822
+ dart: `### Dart 규칙
823
+ - null safety 준수 (? 및 ! 적절히 사용)
824
+ - late 키워드 남용 금지
825
+ - const 생성자 활용
826
826
  - 비동기 코드에 async/await 사용`,
827
- swift: `### Swift 규칙
828
- - 옵셔널 강제 언래핑 금지 → guard let / if let 사용
829
- - 프로토콜 지향 프로그래밍 권장
830
- - 값 타입(struct) 우선 사용
827
+ swift: `### Swift 규칙
828
+ - 옵셔널 강제 언래핑 금지 → guard let / if let 사용
829
+ - 프로토콜 지향 프로그래밍 권장
830
+ - 값 타입(struct) 우선 사용
831
831
  - @escaping 클로저 메모리 관리 주의`
832
832
  };
833
833
  function getLanguageRulesForStacks(stacks) {
@@ -924,6 +924,19 @@ async function init(projectName) {
924
924
  log(' ⚠️ Context7 MCP 수동 등록 필요\n');
925
925
  }
926
926
  }
927
+ // Agent SDK 설치 (오케스트레이터용)
928
+ log(' 🤖 Agent SDK 설치 중 (오케스트레이터용)...\n');
929
+ try {
930
+ const { execSync } = await import('child_process');
931
+ execSync('npm install @anthropic-ai/claude-agent-sdk --save-dev', {
932
+ cwd: projectRoot,
933
+ stdio: 'pipe'
934
+ });
935
+ log(' ✅ Agent SDK 설치 완료\n');
936
+ }
937
+ catch (e) {
938
+ log(' ⚠️ Agent SDK 설치 실패 - 수동 설치: npm i -D @anthropic-ai/claude-agent-sdk\n');
939
+ }
927
940
  // .claude/vibe 폴더 구조 생성
928
941
  ['specs', 'features'].forEach(dir => {
929
942
  ensureDir(path.join(vibeDir, dir));
@@ -1101,41 +1114,41 @@ async function init(projectName) {
1101
1114
  // 협업자 자동 설치 설정
1102
1115
  setupCollaboratorAutoInstall(projectRoot);
1103
1116
  // 완료 메시지
1104
- log(`
1105
- ✅ vibe 초기화 완료!
1106
-
1107
- ${isNewProject ? `프로젝트 위치:
1108
- ${projectRoot}/
1109
-
1110
- ` : ''}생성된 구조:
1111
- CLAUDE.md # 프로젝트 컨텍스트
1112
- .claude/
1113
- ├── commands/ # 슬래시 커맨드 (7개)
1114
- ├── agents/ # 서브에이전트 (simplifier)
1115
- ├── settings.json # Hooks 설정 (저장소 공유)
1116
- └── vibe/
1117
- ├── config.json # 프로젝트 설정
1118
- ├── constitution.md # 프로젝트 원칙
1119
- ├── setup.sh # 협업자 설치 스크립트
1120
- ├── rules/ # 코딩 규칙
1121
- │ ├── core/ # 핵심 원칙
1122
- │ ├── quality/ # 품질 체크리스트
1123
- │ └── languages/ # 언어별 규칙
1124
- ├── specs/ # SPEC 문서들
1125
- └── features/ # BDD Feature 파일들
1126
-
1127
- 내장 도구: ✓ (35+)
1128
- 협업자 자동 설치: ✓
1129
-
1130
- ${formatLLMStatus()}
1131
-
1132
- 사용법:
1133
- /vibe.spec "기능명" SPEC 작성 (대화형)
1134
- /vibe.run "기능명" 구현 실행
1135
- /vibe.verify "기능명" 검증
1136
-
1137
- 다음 단계:
1138
- ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1117
+ log(`
1118
+ ✅ vibe 초기화 완료!
1119
+
1120
+ ${isNewProject ? `프로젝트 위치:
1121
+ ${projectRoot}/
1122
+
1123
+ ` : ''}생성된 구조:
1124
+ CLAUDE.md # 프로젝트 컨텍스트
1125
+ .claude/
1126
+ ├── commands/ # 슬래시 커맨드 (7개)
1127
+ ├── agents/ # 서브에이전트 (simplifier)
1128
+ ├── settings.json # Hooks 설정 (저장소 공유)
1129
+ └── vibe/
1130
+ ├── config.json # 프로젝트 설정
1131
+ ├── constitution.md # 프로젝트 원칙
1132
+ ├── setup.sh # 협업자 설치 스크립트
1133
+ ├── rules/ # 코딩 규칙
1134
+ │ ├── core/ # 핵심 원칙
1135
+ │ ├── quality/ # 품질 체크리스트
1136
+ │ └── languages/ # 언어별 규칙
1137
+ ├── specs/ # SPEC 문서들
1138
+ └── features/ # BDD Feature 파일들
1139
+
1140
+ 내장 도구: ✓ (35+)
1141
+ 협업자 자동 설치: ✓
1142
+
1143
+ ${formatLLMStatus()}
1144
+
1145
+ 사용법:
1146
+ /vibe.spec "기능명" SPEC 작성 (대화형)
1147
+ /vibe.run "기능명" 구현 실행
1148
+ /vibe.verify "기능명" 검증
1149
+
1150
+ 다음 단계:
1151
+ ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1139
1152
  `);
1140
1153
  }
1141
1154
  catch (error) {
@@ -1268,6 +1281,30 @@ async function update() {
1268
1281
  fs.unlinkSync(agentPath);
1269
1282
  }
1270
1283
  });
1284
+ // Agent SDK 설치 확인 (오케스트레이터용)
1285
+ const packageJsonPath = path.join(projectRoot, 'package.json');
1286
+ if (fs.existsSync(packageJsonPath)) {
1287
+ try {
1288
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
1289
+ const hasAgentSdk = pkg.dependencies?.['@anthropic-ai/claude-agent-sdk'] ||
1290
+ pkg.devDependencies?.['@anthropic-ai/claude-agent-sdk'];
1291
+ if (!hasAgentSdk) {
1292
+ log(' 🤖 Agent SDK 설치 중 (오케스트레이터용)...\n');
1293
+ try {
1294
+ const { execSync } = await import('child_process');
1295
+ execSync('npm install @anthropic-ai/claude-agent-sdk --save-dev', {
1296
+ cwd: projectRoot,
1297
+ stdio: 'pipe'
1298
+ });
1299
+ log(' ✅ Agent SDK 설치 완료\n');
1300
+ }
1301
+ catch (e) {
1302
+ log(' ⚠️ Agent SDK 설치 실패 - 수동 설치: npm i -D @anthropic-ai/claude-agent-sdk\n');
1303
+ }
1304
+ }
1305
+ }
1306
+ catch (e) { }
1307
+ }
1271
1308
  // 기술 스택 감지
1272
1309
  const { stacks: detectedStacks, details: stackDetails } = detectTechStacks(projectRoot);
1273
1310
  // config.json 업데이트
@@ -1533,16 +1570,16 @@ async function update() {
1533
1570
  }
1534
1571
  }
1535
1572
  const packageJson = getPackageJson();
1536
- log(`
1537
- ✅ vibe 업데이트 완료! (v${packageJson.version})
1538
-
1539
- 업데이트된 항목:
1540
- - 슬래시 커맨드 (7개)
1541
- - 코딩 규칙 (.claude/vibe/rules/)
1542
- - 서브에이전트 (.claude/agents/)
1543
- - Hooks 설정
1544
-
1545
- ${formatLLMStatus()}
1573
+ log(`
1574
+ ✅ vibe 업데이트 완료! (v${packageJson.version})
1575
+
1576
+ 업데이트된 항목:
1577
+ - 슬래시 커맨드 (7개)
1578
+ - 코딩 규칙 (.claude/vibe/rules/)
1579
+ - 서브에이전트 (.claude/agents/)
1580
+ - Hooks 설정
1581
+
1582
+ ${formatLLMStatus()}
1546
1583
  `);
1547
1584
  }
1548
1585
  catch (error) {
@@ -1613,17 +1650,17 @@ function remove() {
1613
1650
  }
1614
1651
  catch (e) { }
1615
1652
  }
1616
- console.log(`
1617
- ✅ vibe 제거 완료!
1618
-
1619
- 제거된 항목:
1620
- - MCP 서버 (vibe, context7)
1621
- - .claude/vibe/ 폴더
1622
- - 슬래시 커맨드 (7개)
1623
- - 서브에이전트 (5개)
1624
- - Hooks 설정
1625
-
1626
- 다시 설치하려면: vibe init
1653
+ console.log(`
1654
+ ✅ vibe 제거 완료!
1655
+
1656
+ 제거된 항목:
1657
+ - MCP 서버 (vibe, context7)
1658
+ - .claude/vibe/ 폴더
1659
+ - 슬래시 커맨드 (7개)
1660
+ - 서브에이전트 (5개)
1661
+ - Hooks 설정
1662
+
1663
+ 다시 설치하려면: vibe init
1627
1664
  `);
1628
1665
  }
1629
1666
  // ============================================================================
@@ -1631,13 +1668,13 @@ function remove() {
1631
1668
  // ============================================================================
1632
1669
  function setupExternalLLM(llmType, apiKey) {
1633
1670
  if (!apiKey) {
1634
- console.log(`
1635
- ❌ API 키가 필요합니다.
1636
-
1637
- 사용법:
1638
- vibe ${llmType} <api-key>
1639
-
1640
- ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1671
+ console.log(`
1672
+ ❌ API 키가 필요합니다.
1673
+
1674
+ 사용법:
1675
+ vibe ${llmType} <api-key>
1676
+
1677
+ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1641
1678
  `);
1642
1679
  return;
1643
1680
  }
@@ -1670,20 +1707,20 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
1670
1707
  args: ['-y', llmConfig.package],
1671
1708
  env: { [envKey]: apiKey }
1672
1709
  });
1673
- console.log(`
1674
- ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1675
-
1676
- 역할: ${llmConfig.description}
1677
- MCP: ${llmConfig.name}
1678
-
1679
- 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1680
-
1681
- 비활성화: vibe remove ${llmType}
1710
+ console.log(`
1711
+ ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1712
+
1713
+ 역할: ${llmConfig.description}
1714
+ MCP: ${llmConfig.name}
1715
+
1716
+ 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1717
+
1718
+ 비활성화: vibe remove ${llmType}
1682
1719
  `);
1683
1720
  }
1684
1721
  catch (e) {
1685
- console.log(`
1686
- ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1722
+ console.log(`
1723
+ ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1687
1724
  `);
1688
1725
  }
1689
1726
  }
@@ -1710,11 +1747,11 @@ function removeExternalLLM(llmType) {
1710
1747
  // GPT OAuth Commands
1711
1748
  // ============================================================================
1712
1749
  async function gptAuth() {
1713
- console.log(`
1714
- 🔐 GPT Plus/Pro 인증 (OAuth)
1715
-
1716
- ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1717
- 브라우저에서 OpenAI 계정으로 로그인하세요.
1750
+ console.log(`
1751
+ 🔐 GPT Plus/Pro 인증 (OAuth)
1752
+
1753
+ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1754
+ 브라우저에서 OpenAI 계정으로 로그인하세요.
1718
1755
  `);
1719
1756
  try {
1720
1757
  const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
@@ -1730,17 +1767,17 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1730
1767
  expires: tokens.expires,
1731
1768
  accountId: tokens.accountId,
1732
1769
  });
1733
- console.log(`
1734
- ✅ GPT 인증 완료!
1735
-
1736
- 계정: ${tokens.email}
1737
- 계정 ID: ${tokens.accountId || '(자동 감지)'}
1738
-
1739
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1740
- 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1741
-
1742
- 상태 확인: vibe status gpt
1743
- 로그아웃: vibe logout gpt
1770
+ console.log(`
1771
+ ✅ GPT 인증 완료!
1772
+
1773
+ 계정: ${tokens.email}
1774
+ 계정 ID: ${tokens.accountId || '(자동 감지)'}
1775
+
1776
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1777
+ 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1778
+
1779
+ 상태 확인: vibe status gpt
1780
+ 로그아웃: vibe logout gpt
1744
1781
  `);
1745
1782
  // config.json 업데이트
1746
1783
  const projectRoot = process.cwd();
@@ -1767,30 +1804,30 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1767
1804
  const mcpPath = path.join(__dirname, '../lib/gpt-mcp.js');
1768
1805
  unregisterMcp('vibe-gpt');
1769
1806
  registerMcp('vibe-gpt', { command: 'node', args: [mcpPath] });
1770
- console.log(`
1771
- ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1772
-
1773
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1774
- - gpt_chat: GPT에 질문
1775
- - gpt_analyze_architecture: 아키텍처 분석
1776
- - gpt_debug: 디버깅
1777
- - gpt_quick_ask: 빠른 질문
1807
+ console.log(`
1808
+ ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1809
+
1810
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1811
+ - gpt_chat: GPT에 질문
1812
+ - gpt_analyze_architecture: 아키텍처 분석
1813
+ - gpt_debug: 디버깅
1814
+ - gpt_quick_ask: 빠른 질문
1778
1815
  `);
1779
1816
  }
1780
1817
  catch (mcpError) {
1781
- console.log(`
1782
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1818
+ console.log(`
1819
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1783
1820
  `);
1784
1821
  }
1785
1822
  process.exit(0);
1786
1823
  }
1787
1824
  catch (error) {
1788
- console.error(`
1789
- ❌ GPT 인증 실패
1790
-
1791
- 오류: ${error.message}
1792
-
1793
- 다시 시도하려면: vibe gpt --auth
1825
+ console.error(`
1826
+ ❌ GPT 인증 실패
1827
+
1828
+ 오류: ${error.message}
1829
+
1830
+ 다시 시도하려면: vibe gpt --auth
1794
1831
  `);
1795
1832
  process.exit(1);
1796
1833
  }
@@ -1801,31 +1838,31 @@ function gptStatus() {
1801
1838
  const storage = require(gptStoragePath);
1802
1839
  const accounts = storage.getAllAccounts();
1803
1840
  if (accounts.length === 0) {
1804
- console.log(`
1805
- 📊 GPT 인증 상태
1806
-
1807
- 인증된 계정 없음
1808
-
1809
- 로그인: vibe gpt --auth
1841
+ console.log(`
1842
+ 📊 GPT 인증 상태
1843
+
1844
+ 인증된 계정 없음
1845
+
1846
+ 로그인: vibe gpt --auth
1810
1847
  `);
1811
1848
  return;
1812
1849
  }
1813
1850
  const activeAccount = storage.getActiveAccount();
1814
1851
  const isExpired = storage.isTokenExpired(activeAccount);
1815
- console.log(`
1816
- 📊 GPT 인증 상태
1817
-
1818
- 활성 계정: ${activeAccount.email}
1819
- 계정 ID: ${activeAccount.accountId || '(없음)'}
1820
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1821
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1822
-
1823
- 등록된 계정 (${accounts.length}개):
1824
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1825
-
1826
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1827
-
1828
- 로그아웃: vibe logout gpt
1852
+ console.log(`
1853
+ 📊 GPT 인증 상태
1854
+
1855
+ 활성 계정: ${activeAccount.email}
1856
+ 계정 ID: ${activeAccount.accountId || '(없음)'}
1857
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1858
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1859
+
1860
+ 등록된 계정 (${accounts.length}개):
1861
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1862
+
1863
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1864
+
1865
+ 로그아웃: vibe logout gpt
1829
1866
  `);
1830
1867
  }
1831
1868
  catch (error) {
@@ -1842,12 +1879,12 @@ function gptLogout() {
1842
1879
  return;
1843
1880
  }
1844
1881
  storage.clearAccounts();
1845
- console.log(`
1846
- ✅ GPT 로그아웃 완료
1847
-
1848
- ${activeAccount.email} 계정이 제거되었습니다.
1849
-
1850
- 다시 로그인: vibe gpt --auth
1882
+ console.log(`
1883
+ ✅ GPT 로그아웃 완료
1884
+
1885
+ ${activeAccount.email} 계정이 제거되었습니다.
1886
+
1887
+ 다시 로그인: vibe gpt --auth
1851
1888
  `);
1852
1889
  // config.json 업데이트
1853
1890
  const projectRoot = process.cwd();
@@ -1871,39 +1908,39 @@ ${activeAccount.email} 계정이 제거되었습니다.
1871
1908
  }
1872
1909
  }
1873
1910
  function showAuthHelp() {
1874
- console.log(`
1875
- 🔐 vibe auth - LLM 인증
1876
-
1877
- 사용법:
1878
- vibe auth gpt GPT Plus/Pro OAuth 인증
1879
- vibe auth gpt --key <key> GPT API 키로 설정
1880
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1881
- vibe auth gemini --key <key> Gemini API 키로 설정
1882
-
1883
- 예시:
1884
- vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1885
- vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1886
- vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1911
+ console.log(`
1912
+ 🔐 vibe auth - LLM 인증
1913
+
1914
+ 사용법:
1915
+ vibe auth gpt GPT Plus/Pro OAuth 인증
1916
+ vibe auth gpt --key <key> GPT API 키로 설정
1917
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1918
+ vibe auth gemini --key <key> Gemini API 키로 설정
1919
+
1920
+ 예시:
1921
+ vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1922
+ vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1923
+ vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1887
1924
  `);
1888
1925
  }
1889
1926
  function showLogoutHelp() {
1890
- console.log(`
1891
- 🚪 vibe logout - LLM 로그아웃
1892
-
1893
- 사용법:
1894
- vibe logout gpt GPT 로그아웃
1895
- vibe logout gemini Gemini 로그아웃
1927
+ console.log(`
1928
+ 🚪 vibe logout - LLM 로그아웃
1929
+
1930
+ 사용법:
1931
+ vibe logout gpt GPT 로그아웃
1932
+ vibe logout gemini Gemini 로그아웃
1896
1933
  `);
1897
1934
  }
1898
1935
  // ============================================================================
1899
1936
  // Gemini OAuth Commands
1900
1937
  // ============================================================================
1901
1938
  async function geminiAuth() {
1902
- console.log(`
1903
- 🔐 Gemini 구독 인증 (OAuth)
1904
-
1905
- Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1906
- 브라우저에서 Google 계정으로 로그인하세요.
1939
+ console.log(`
1940
+ 🔐 Gemini 구독 인증 (OAuth)
1941
+
1942
+ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1943
+ 브라우저에서 Google 계정으로 로그인하세요.
1907
1944
  `);
1908
1945
  try {
1909
1946
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -1918,20 +1955,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1918
1955
  expires: tokens.expires,
1919
1956
  projectId: tokens.projectId,
1920
1957
  });
1921
- console.log(`
1922
- ✅ Gemini 인증 완료!
1923
-
1924
- 계정: ${tokens.email}
1925
- 프로젝트: ${tokens.projectId || '(자동 감지)'}
1926
-
1927
- 사용 가능한 모델:
1928
- - Gemini 3 Flash (빠른 응답, 탐색/검색)
1929
- - Gemini 3 Pro (높은 정확도)
1930
-
1931
- /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1932
-
1933
- 상태 확인: vibe status gemini
1934
- 로그아웃: vibe logout gemini
1958
+ console.log(`
1959
+ ✅ Gemini 인증 완료!
1960
+
1961
+ 계정: ${tokens.email}
1962
+ 프로젝트: ${tokens.projectId || '(자동 감지)'}
1963
+
1964
+ 사용 가능한 모델:
1965
+ - Gemini 3 Flash (빠른 응답, 탐색/검색)
1966
+ - Gemini 3 Pro (높은 정확도)
1967
+
1968
+ /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1969
+
1970
+ 상태 확인: vibe status gemini
1971
+ 로그아웃: vibe logout gemini
1935
1972
  `);
1936
1973
  // config.json 업데이트
1937
1974
  const projectRoot = process.cwd();
@@ -1958,30 +1995,30 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1958
1995
  const mcpPath = path.join(__dirname, '../lib/gemini-mcp.js');
1959
1996
  unregisterMcp('vibe-gemini');
1960
1997
  registerMcp('vibe-gemini', { command: 'node', args: [mcpPath] });
1961
- console.log(`
1962
- ✅ vibe-gemini MCP 서버 등록 완료! (전역)
1963
-
1964
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1965
- - gemini_chat: Gemini에 질문
1966
- - gemini_analyze_code: 코드 분석
1967
- - gemini_review_ui: UI/UX 리뷰
1968
- - gemini_quick_ask: 빠른 질문
1998
+ console.log(`
1999
+ ✅ vibe-gemini MCP 서버 등록 완료! (전역)
2000
+
2001
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
2002
+ - gemini_chat: Gemini에 질문
2003
+ - gemini_analyze_code: 코드 분석
2004
+ - gemini_review_ui: UI/UX 리뷰
2005
+ - gemini_quick_ask: 빠른 질문
1969
2006
  `);
1970
2007
  }
1971
2008
  catch (mcpError) {
1972
- console.log(`
1973
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
2009
+ console.log(`
2010
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1974
2011
  `);
1975
2012
  }
1976
2013
  process.exit(0);
1977
2014
  }
1978
2015
  catch (error) {
1979
- console.error(`
1980
- ❌ Gemini 인증 실패
1981
-
1982
- 오류: ${error.message}
1983
-
1984
- 다시 시도하려면: vibe gemini --auth
2016
+ console.error(`
2017
+ ❌ Gemini 인증 실패
2018
+
2019
+ 오류: ${error.message}
2020
+
2021
+ 다시 시도하려면: vibe gemini --auth
1985
2022
  `);
1986
2023
  process.exit(1);
1987
2024
  }
@@ -1994,32 +2031,32 @@ function geminiStatus() {
1994
2031
  const { GEMINI_MODELS } = require(geminiApiPath);
1995
2032
  const accounts = storage.getAllAccounts();
1996
2033
  if (accounts.length === 0) {
1997
- console.log(`
1998
- 📊 Gemini 인증 상태
1999
-
2000
- 인증된 계정 없음
2001
-
2002
- 로그인: vibe gemini --auth
2034
+ console.log(`
2035
+ 📊 Gemini 인증 상태
2036
+
2037
+ 인증된 계정 없음
2038
+
2039
+ 로그인: vibe gemini --auth
2003
2040
  `);
2004
2041
  return;
2005
2042
  }
2006
2043
  const activeAccount = storage.getActiveAccount();
2007
2044
  const isExpired = storage.isTokenExpired(activeAccount);
2008
- console.log(`
2009
- 📊 Gemini 인증 상태
2010
-
2011
- 활성 계정: ${activeAccount.email}
2012
- 프로젝트: ${activeAccount.projectId || '(자동)'}
2013
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
2014
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
2015
-
2016
- 등록된 계정 (${accounts.length}개):
2017
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
2018
-
2019
- 사용 가능한 모델:
2020
- ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
2021
-
2022
- 로그아웃: vibe logout gemini
2045
+ console.log(`
2046
+ 📊 Gemini 인증 상태
2047
+
2048
+ 활성 계정: ${activeAccount.email}
2049
+ 프로젝트: ${activeAccount.projectId || '(자동)'}
2050
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
2051
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
2052
+
2053
+ 등록된 계정 (${accounts.length}개):
2054
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
2055
+
2056
+ 사용 가능한 모델:
2057
+ ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
2058
+
2059
+ 로그아웃: vibe logout gemini
2023
2060
  `);
2024
2061
  }
2025
2062
  catch (error) {
@@ -2036,12 +2073,12 @@ function geminiLogout() {
2036
2073
  return;
2037
2074
  }
2038
2075
  storage.clearAccounts();
2039
- console.log(`
2040
- ✅ Gemini 로그아웃 완료
2041
-
2042
- ${activeAccount.email} 계정이 제거되었습니다.
2043
-
2044
- 다시 로그인: vibe gemini --auth
2076
+ console.log(`
2077
+ ✅ Gemini 로그아웃 완료
2078
+
2079
+ ${activeAccount.email} 계정이 제거되었습니다.
2080
+
2081
+ 다시 로그인: vibe gemini --auth
2045
2082
  `);
2046
2083
  // config.json 업데이트
2047
2084
  const projectRoot = process.cwd();
@@ -2069,53 +2106,53 @@ ${activeAccount.email} 계정이 제거되었습니다.
2069
2106
  // Info Commands
2070
2107
  // ============================================================================
2071
2108
  function showHelp() {
2072
- console.log(`
2073
- 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2074
-
2075
- 기본 명령어:
2076
- vibe init [project] 프로젝트 초기화
2077
- vibe update 설정 업데이트
2078
- vibe status 현재 설정 상태
2079
- vibe help 도움말
2080
- vibe version 버전 정보
2081
-
2082
- 외부 LLM 인증:
2083
- vibe auth gpt GPT Plus/Pro OAuth 인증
2084
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2085
- vibe auth gpt --key <key> GPT API 키 설정
2086
- vibe auth gemini --key <key> Gemini API 키 설정
2087
-
2088
- 상태 및 관리:
2089
- vibe status 전체 상태 확인
2090
- vibe status gpt GPT 인증 상태 확인
2091
- vibe status gemini Gemini 인증 상태 확인
2092
- vibe logout gpt GPT 로그아웃
2093
- vibe logout gemini Gemini 로그아웃
2094
- vibe remove gpt GPT 제거
2095
- vibe remove gemini Gemini 제거
2096
- vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2097
-
2098
- Claude Code 슬래시 커맨드:
2099
- /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2100
- /vibe.run "기능명" 구현 실행
2101
- /vibe.verify "기능명" 검증
2102
- /vibe.reason "문제" 체계적 추론
2103
- /vibe.analyze 프로젝트 분석
2104
- /vibe.ui "설명" UI 미리보기
2105
- /vibe.diagram 다이어그램 생성
2106
-
2107
- 모델 오케스트레이션:
2108
- Opus 4.5 오케스트레이터 (메인)
2109
- Sonnet 4 구현
2110
- Haiku 4.5 코드 탐색
2111
- GPT 5.2 아키텍처/디버깅 (선택적)
2112
- Gemini 3 UI/UX 설계 (선택적)
2113
-
2114
- Workflow:
2115
- /vibe.spec → /vibe.run → /vibe.verify
2116
-
2117
- 문서:
2118
- https://github.com/su-record/vibe
2109
+ console.log(`
2110
+ 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2111
+
2112
+ 기본 명령어:
2113
+ vibe init [project] 프로젝트 초기화
2114
+ vibe update 설정 업데이트
2115
+ vibe status 현재 설정 상태
2116
+ vibe help 도움말
2117
+ vibe version 버전 정보
2118
+
2119
+ 외부 LLM 인증:
2120
+ vibe auth gpt GPT Plus/Pro OAuth 인증
2121
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2122
+ vibe auth gpt --key <key> GPT API 키 설정
2123
+ vibe auth gemini --key <key> Gemini API 키 설정
2124
+
2125
+ 상태 및 관리:
2126
+ vibe status 전체 상태 확인
2127
+ vibe status gpt GPT 인증 상태 확인
2128
+ vibe status gemini Gemini 인증 상태 확인
2129
+ vibe logout gpt GPT 로그아웃
2130
+ vibe logout gemini Gemini 로그아웃
2131
+ vibe remove gpt GPT 제거
2132
+ vibe remove gemini Gemini 제거
2133
+ vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2134
+
2135
+ Claude Code 슬래시 커맨드:
2136
+ /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2137
+ /vibe.run "기능명" 구현 실행
2138
+ /vibe.verify "기능명" 검증
2139
+ /vibe.reason "문제" 체계적 추론
2140
+ /vibe.analyze 프로젝트 분석
2141
+ /vibe.ui "설명" UI 미리보기
2142
+ /vibe.diagram 다이어그램 생성
2143
+
2144
+ 모델 오케스트레이션:
2145
+ Opus 4.5 오케스트레이터 (메인)
2146
+ Sonnet 4 구현
2147
+ Haiku 4.5 코드 탐색
2148
+ GPT 5.2 아키텍처/디버깅 (선택적)
2149
+ Gemini 3 UI/UX 설계 (선택적)
2150
+
2151
+ Workflow:
2152
+ /vibe.spec → /vibe.run → /vibe.verify
2153
+
2154
+ 문서:
2155
+ https://github.com/su-record/vibe
2119
2156
  `);
2120
2157
  }
2121
2158
  function showStatus() {
@@ -2133,33 +2170,33 @@ function showStatus() {
2133
2170
  }
2134
2171
  const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
2135
2172
  const geminiStatus = config.models?.gemini?.enabled ? '✅ 활성' : '⬚ 비활성';
2136
- console.log(`
2137
- 📊 Vibe 상태 (v${packageJson.version})
2138
-
2139
- 프로젝트: ${projectRoot}
2140
- 언어: ${config.language || 'ko'}
2141
-
2142
- 모델 오케스트레이션:
2143
- ┌─────────────────────────────────────────┐
2144
- │ Opus 4.5 오케스트레이터 │
2145
- ├─────────────────────────────────────────┤
2146
- │ Sonnet 4 구현 │
2147
- │ Haiku 4.5 코드 탐색 │
2148
- ├─────────────────────────────────────────┤
2149
- │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2150
- │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2151
- └─────────────────────────────────────────┘
2152
-
2153
- MCP 서버:
2154
- vibe-gemini Gemini API
2155
- vibe-gpt GPT API
2156
- context7 라이브러리 문서 검색
2157
-
2158
- 외부 LLM 설정:
2159
- vibe auth gpt GPT 활성화 (OAuth)
2160
- vibe auth gemini Gemini 활성화 (OAuth)
2161
- vibe remove gpt GPT 제거
2162
- vibe remove gemini Gemini 제거
2173
+ console.log(`
2174
+ 📊 Vibe 상태 (v${packageJson.version})
2175
+
2176
+ 프로젝트: ${projectRoot}
2177
+ 언어: ${config.language || 'ko'}
2178
+
2179
+ 모델 오케스트레이션:
2180
+ ┌─────────────────────────────────────────┐
2181
+ │ Opus 4.5 오케스트레이터 │
2182
+ ├─────────────────────────────────────────┤
2183
+ │ Sonnet 4 구현 │
2184
+ │ Haiku 4.5 코드 탐색 │
2185
+ ├─────────────────────────────────────────┤
2186
+ │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2187
+ │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2188
+ └─────────────────────────────────────────┘
2189
+
2190
+ MCP 서버:
2191
+ vibe-gemini Gemini API
2192
+ vibe-gpt GPT API
2193
+ context7 라이브러리 문서 검색
2194
+
2195
+ 외부 LLM 설정:
2196
+ vibe auth gpt GPT 활성화 (OAuth)
2197
+ vibe auth gemini Gemini 활성화 (OAuth)
2198
+ vibe remove gpt GPT 제거
2199
+ vibe remove gemini Gemini 제거
2163
2200
  `);
2164
2201
  }
2165
2202
  function showVersion() {
@@ -2290,20 +2327,20 @@ switch (command) {
2290
2327
  showHelp();
2291
2328
  break;
2292
2329
  default:
2293
- console.log(`
2294
- ❌ 알 수 없는 명령어: ${command}
2295
-
2296
- 사용 가능한 명령어:
2297
- vibe init 프로젝트 초기화
2298
- vibe update 설정 업데이트
2299
- vibe auth LLM 인증 (gpt, gemini)
2300
- vibe status 상태 확인
2301
- vibe logout 로그아웃
2302
- vibe remove 제거
2303
- vibe help 도움말
2304
- vibe version 버전 정보
2305
-
2306
- 사용법: vibe help
2330
+ console.log(`
2331
+ ❌ 알 수 없는 명령어: ${command}
2332
+
2333
+ 사용 가능한 명령어:
2334
+ vibe init 프로젝트 초기화
2335
+ vibe update 설정 업데이트
2336
+ vibe auth LLM 인증 (gpt, gemini)
2337
+ vibe status 상태 확인
2338
+ vibe logout 로그아웃
2339
+ vibe remove 제거
2340
+ vibe help 도움말
2341
+ vibe version 버전 정보
2342
+
2343
+ 사용법: vibe help
2307
2344
  `);
2308
2345
  process.exit(1);
2309
2346
  }