@su-record/vibe 2.2.1 → 2.2.3

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 (82) hide show
  1. package/.claude/settings.json +152 -152
  2. package/.claude/vibe/constitution.md +184 -184
  3. package/.claude/vibe/rules/core/communication-guide.md +104 -104
  4. package/.claude/vibe/rules/core/development-philosophy.md +52 -52
  5. package/.claude/vibe/rules/core/quick-start.md +120 -120
  6. package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
  7. package/.claude/vibe/rules/quality/checklist.md +276 -276
  8. package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
  9. package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
  10. package/.claude/vibe/rules/standards/code-structure.md +291 -291
  11. package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
  12. package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
  13. package/.claude/vibe/setup.sh +31 -31
  14. package/CLAUDE.md +323 -323
  15. package/LICENSE +21 -21
  16. package/README.md +724 -721
  17. package/agents/explorer.md +48 -0
  18. package/agents/implementer.md +53 -0
  19. package/agents/research/best-practices-agent.md +139 -0
  20. package/agents/research/codebase-patterns-agent.md +147 -0
  21. package/agents/research/framework-docs-agent.md +181 -0
  22. package/agents/research/security-advisory-agent.md +167 -0
  23. package/agents/review/architecture-reviewer.md +107 -0
  24. package/agents/review/complexity-reviewer.md +116 -0
  25. package/agents/review/data-integrity-reviewer.md +88 -0
  26. package/agents/review/git-history-reviewer.md +103 -0
  27. package/agents/review/performance-reviewer.md +86 -0
  28. package/agents/review/python-reviewer.md +152 -0
  29. package/agents/review/rails-reviewer.md +139 -0
  30. package/agents/review/react-reviewer.md +144 -0
  31. package/agents/review/security-reviewer.md +80 -0
  32. package/agents/review/simplicity-reviewer.md +140 -0
  33. package/agents/review/test-coverage-reviewer.md +116 -0
  34. package/agents/review/typescript-reviewer.md +127 -0
  35. package/agents/searcher.md +54 -0
  36. package/agents/simplifier.md +119 -0
  37. package/agents/tester.md +49 -0
  38. package/commands/vibe.analyze.md +239 -0
  39. package/commands/vibe.compound.md +261 -0
  40. package/commands/vibe.continue.md +88 -0
  41. package/commands/vibe.diagram.md +178 -0
  42. package/commands/vibe.e2e.md +266 -0
  43. package/commands/vibe.reason.md +306 -0
  44. package/commands/vibe.review.md +324 -0
  45. package/commands/vibe.run.md +836 -0
  46. package/commands/vibe.setup.md +97 -0
  47. package/commands/vibe.spec.md +383 -0
  48. package/commands/vibe.ui.md +137 -0
  49. package/commands/vibe.verify.md +238 -0
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +389 -385
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/lib/MemoryManager.js +92 -92
  54. package/dist/lib/PythonParser.js +108 -108
  55. package/dist/lib/gemini-mcp.js +15 -15
  56. package/dist/lib/gemini-oauth.js +35 -35
  57. package/dist/lib/gpt-mcp.js +17 -17
  58. package/dist/lib/gpt-oauth.js +44 -44
  59. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  60. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  61. package/dist/tools/memory/getMemoryGraph.js +12 -12
  62. package/dist/tools/memory/getSessionContext.js +9 -9
  63. package/dist/tools/memory/linkMemories.js +14 -14
  64. package/dist/tools/memory/listMemories.js +4 -4
  65. package/dist/tools/memory/recallMemory.js +4 -4
  66. package/dist/tools/memory/saveMemory.js +4 -4
  67. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  68. package/dist/tools/planning/generatePrd.js +46 -46
  69. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  70. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  71. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  72. package/package.json +69 -66
  73. package/skills/git-worktree.md +178 -0
  74. package/skills/priority-todos.md +236 -0
  75. package/templates/constitution-template.md +184 -184
  76. package/templates/contract-backend-template.md +517 -517
  77. package/templates/contract-frontend-template.md +594 -594
  78. package/templates/feature-template.md +96 -96
  79. package/templates/hooks-template.json +103 -103
  80. package/templates/spec-template.md +199 -199
  81. package/.claude/vibe/rules/tools/mcp-hi-ai-guide.md +0 -665
  82. package/.claude/vibe/rules/tools/mcp-workflow.md +0 -51
package/dist/cli/index.js CHANGED
@@ -693,37 +693,37 @@ function setupCollaboratorAutoInstall(projectRoot) {
693
693
  fs.mkdirSync(vibeDir, { recursive: true });
694
694
  }
695
695
  if (!fs.existsSync(setupShPath)) {
696
- const setupScript = `#!/bin/bash
697
- # Vibe 협업자 자동 설치 스크립트
698
- # 사용법: ./.claude/vibe/setup.sh
699
-
700
- set -e
701
-
702
- echo "🔧 Vibe 설치 확인 중..."
703
-
704
- # npm/npx 확인
705
- if ! command -v npx &> /dev/null; then
706
- echo "❌ Node.js/npm이 설치되어 있지 않습니다."
707
- echo " https://nodejs.org 에서 설치해주세요."
708
- exit 1
709
- fi
710
-
711
- # vibe 설치 확인 및 업데이트
712
- if command -v vibe &> /dev/null; then
713
- echo "✅ Vibe가 이미 설치되어 있습니다."
714
- vibe update --silent
715
- echo "✅ Vibe 업데이트 완료!"
716
- else
717
- echo "📦 Vibe 설치 중..."
718
- npm install -g @su-record/vibe
719
- vibe update --silent
720
- echo "✅ Vibe 설치 및 설정 완료!"
721
- fi
722
-
723
- echo ""
724
- echo "다음 명령어로 시작하세요:"
725
- echo " /vibe.spec \\"기능명\\" SPEC 작성"
726
- echo " /vibe.run \\"기능명\\" 구현 실행"
696
+ const setupScript = `#!/bin/bash
697
+ # Vibe 협업자 자동 설치 스크립트
698
+ # 사용법: ./.claude/vibe/setup.sh
699
+
700
+ set -e
701
+
702
+ echo "🔧 Vibe 설치 확인 중..."
703
+
704
+ # npm/npx 확인
705
+ if ! command -v npx &> /dev/null; then
706
+ echo "❌ Node.js/npm이 설치되어 있지 않습니다."
707
+ echo " https://nodejs.org 에서 설치해주세요."
708
+ exit 1
709
+ fi
710
+
711
+ # vibe 설치 확인 및 업데이트
712
+ if command -v vibe &> /dev/null; then
713
+ echo "✅ Vibe가 이미 설치되어 있습니다."
714
+ vibe update --silent
715
+ echo "✅ Vibe 업데이트 완료!"
716
+ else
717
+ echo "📦 Vibe 설치 중..."
718
+ npm install -g @su-record/vibe
719
+ vibe update --silent
720
+ echo "✅ Vibe 설치 및 설정 완료!"
721
+ fi
722
+
723
+ echo ""
724
+ echo "다음 명령어로 시작하세요:"
725
+ echo " /vibe.spec \\"기능명\\" SPEC 작성"
726
+ echo " /vibe.run \\"기능명\\" 구현 실행"
727
727
  `;
728
728
  fs.writeFileSync(setupShPath, setupScript);
729
729
  fs.chmodSync(setupShPath, '755');
@@ -731,27 +731,27 @@ echo " /vibe.run \\"기능명\\" 구현 실행"
731
731
  }
732
732
  // 3. README.md에 협업자 안내 추가
733
733
  const readmePath = path.join(projectRoot, 'README.md');
734
- const vibeSetupSection = `
735
- ## Vibe Setup (AI Coding)
736
-
737
- 이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
738
-
739
- ### 협업자 설치
740
-
741
- \`\`\`bash
742
- # 전역 설치 (권장)
743
- npm install -g @su-record/vibe
744
- vibe update
745
-
746
- # 또는 setup 스크립트 실행
747
- ./.claude/vibe/setup.sh
748
- \`\`\`
749
-
750
- ### 사용법
751
-
752
- Claude Code에서 슬래시 커맨드 사용:
753
- - \`/vibe.spec "기능명"\` - SPEC 문서 작성
754
- - \`/vibe.run "기능명"\` - 구현 실행
734
+ const vibeSetupSection = `
735
+ ## Vibe Setup (AI Coding)
736
+
737
+ 이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
738
+
739
+ ### 협업자 설치
740
+
741
+ \`\`\`bash
742
+ # 전역 설치 (권장)
743
+ npm install -g @su-record/vibe
744
+ vibe update
745
+
746
+ # 또는 setup 스크립트 실행
747
+ ./.claude/vibe/setup.sh
748
+ \`\`\`
749
+
750
+ ### 사용법
751
+
752
+ Claude Code에서 슬래시 커맨드 사용:
753
+ - \`/vibe.spec "기능명"\` - SPEC 문서 작성
754
+ - \`/vibe.run "기능명"\` - 구현 실행
755
755
  `;
756
756
  if (fs.existsSync(readmePath)) {
757
757
  const readme = fs.readFileSync(readmePath, 'utf-8');
@@ -786,45 +786,45 @@ const STACK_NAMES = {
786
786
  };
787
787
  // 언어별 CLAUDE.md 규칙
788
788
  const LANGUAGE_RULES = {
789
- typescript: `### TypeScript 규칙
790
- - \`any\` 타입 사용 금지 → \`unknown\` + 타입 가드 사용
791
- - \`as any\` 캐스팅 금지 → 적절한 인터페이스 정의
792
- - \`@ts-ignore\` 금지 → 타입 문제 근본 해결
789
+ typescript: `### TypeScript 규칙
790
+ - \`any\` 타입 사용 금지 → \`unknown\` + 타입 가드 사용
791
+ - \`as any\` 캐스팅 금지 → 적절한 인터페이스 정의
792
+ - \`@ts-ignore\` 금지 → 타입 문제 근본 해결
793
793
  - 모든 함수에 반환 타입 명시`,
794
- python: `### Python 규칙
795
- - 타입 힌트 필수 (함수 매개변수, 반환값)
796
- - \`# type: ignore\` 금지 → 타입 문제 근본 해결
797
- - f-string 사용 권장 (format() 대신)
794
+ python: `### Python 규칙
795
+ - 타입 힌트 필수 (함수 매개변수, 반환값)
796
+ - \`# type: ignore\` 금지 → 타입 문제 근본 해결
797
+ - f-string 사용 권장 (format() 대신)
798
798
  - 리스트 컴프리헨션 적절히 활용`,
799
- go: `### Go 규칙
800
- - 에러 반환 즉시 처리 (if err != nil)
801
- - 명시적 에러 래핑 (fmt.Errorf with %w)
802
- - 인터페이스는 사용처에서 정의
799
+ go: `### Go 규칙
800
+ - 에러 반환 즉시 처리 (if err != nil)
801
+ - 명시적 에러 래핑 (fmt.Errorf with %w)
802
+ - 인터페이스는 사용처에서 정의
803
803
  - 고루틴 누수 방지 (context 활용)`,
804
- rust: `### Rust 규칙
805
- - unwrap()/expect() 프로덕션 코드 금지 → Result/Option 처리
806
- - unsafe 블록 최소화
807
- - 명시적 에러 타입 정의
804
+ rust: `### Rust 규칙
805
+ - unwrap()/expect() 프로덕션 코드 금지 → Result/Option 처리
806
+ - unsafe 블록 최소화
807
+ - 명시적 에러 타입 정의
808
808
  - 소유권/수명 주석 명확히`,
809
- java: `### Java 규칙
810
- - Optional 적극 활용 (null 대신)
811
- - 불변 객체 선호 (final 필드)
812
- - 체크 예외 적절히 처리
809
+ java: `### Java 규칙
810
+ - Optional 적극 활용 (null 대신)
811
+ - 불변 객체 선호 (final 필드)
812
+ - 체크 예외 적절히 처리
813
813
  - 스트림 API 활용`,
814
- kotlin: `### Kotlin 규칙
815
- - nullable 타입 명시 (?)
816
- - !! 연산자 금지 → safe call (?.) 사용
817
- - data class 적극 활용
814
+ kotlin: `### Kotlin 규칙
815
+ - nullable 타입 명시 (?)
816
+ - !! 연산자 금지 → safe call (?.) 사용
817
+ - data class 적극 활용
818
818
  - 확장 함수로 유틸리티 구현`,
819
- dart: `### Dart 규칙
820
- - null safety 준수 (? 및 ! 적절히 사용)
821
- - late 키워드 남용 금지
822
- - const 생성자 활용
819
+ dart: `### Dart 규칙
820
+ - null safety 준수 (? 및 ! 적절히 사용)
821
+ - late 키워드 남용 금지
822
+ - const 생성자 활용
823
823
  - 비동기 코드에 async/await 사용`,
824
- swift: `### Swift 규칙
825
- - 옵셔널 강제 언래핑 금지 → guard let / if let 사용
826
- - 프로토콜 지향 프로그래밍 권장
827
- - 값 타입(struct) 우선 사용
824
+ swift: `### Swift 규칙
825
+ - 옵셔널 강제 언래핑 금지 → guard let / if let 사용
826
+ - 프로토콜 지향 프로그래밍 권장
827
+ - 값 타입(struct) 우선 사용
828
828
  - @escaping 클로저 메모리 관리 주의`
829
829
  };
830
830
  function getLanguageRulesForStacks(stacks) {
@@ -963,7 +963,7 @@ async function init(projectName) {
963
963
  const commandsDir = path.join(claudeDir, 'commands');
964
964
  ensureDir(claudeDir);
965
965
  ensureDir(commandsDir);
966
- const sourceDir = path.join(__dirname, '../../.claude/commands');
966
+ const sourceDir = path.join(__dirname, '../../commands');
967
967
  copyDirContents(sourceDir, commandsDir);
968
968
  log(' ✅ 슬래시 커맨드 설치 완료 (7개)\n');
969
969
  // 기술 스택 감지
@@ -1065,7 +1065,7 @@ async function init(projectName) {
1065
1065
  // .claude/agents/ 복사
1066
1066
  const agentsDir = path.join(claudeDir, 'agents');
1067
1067
  ensureDir(agentsDir);
1068
- const agentsSourceDir = path.join(__dirname, '../../.claude/agents');
1068
+ const agentsSourceDir = path.join(__dirname, '../../agents');
1069
1069
  copyDirContents(agentsSourceDir, agentsDir);
1070
1070
  log(' ✅ 서브에이전트 설치 완료 (.claude/agents/)\n');
1071
1071
  // .claude/settings.json 설정
@@ -1097,41 +1097,41 @@ async function init(projectName) {
1097
1097
  // 협업자 자동 설치 설정
1098
1098
  setupCollaboratorAutoInstall(projectRoot);
1099
1099
  // 완료 메시지
1100
- log(`
1101
- ✅ vibe 초기화 완료!
1102
-
1103
- ${isNewProject ? `프로젝트 위치:
1104
- ${projectRoot}/
1105
-
1106
- ` : ''}생성된 구조:
1107
- CLAUDE.md # 프로젝트 컨텍스트
1108
- .claude/
1109
- ├── commands/ # 슬래시 커맨드 (7개)
1110
- ├── agents/ # 서브에이전트 (simplifier)
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 파일들
1122
-
1123
- 내장 도구: ✓ (35+)
1124
- 협업자 자동 설치: ✓
1125
-
1126
- ${formatLLMStatus()}
1127
-
1128
- 사용법:
1129
- /vibe.spec "기능명" SPEC 작성 (대화형)
1130
- /vibe.run "기능명" 구현 실행
1131
- /vibe.verify "기능명" 검증
1132
-
1133
- 다음 단계:
1134
- ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1100
+ log(`
1101
+ ✅ vibe 초기화 완료!
1102
+
1103
+ ${isNewProject ? `프로젝트 위치:
1104
+ ${projectRoot}/
1105
+
1106
+ ` : ''}생성된 구조:
1107
+ CLAUDE.md # 프로젝트 컨텍스트
1108
+ .claude/
1109
+ ├── commands/ # 슬래시 커맨드 (7개)
1110
+ ├── agents/ # 서브에이전트 (simplifier)
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 파일들
1122
+
1123
+ 내장 도구: ✓ (35+)
1124
+ 협업자 자동 설치: ✓
1125
+
1126
+ ${formatLLMStatus()}
1127
+
1128
+ 사용법:
1129
+ /vibe.spec "기능명" SPEC 작성 (대화형)
1130
+ /vibe.run "기능명" 구현 실행
1131
+ /vibe.verify "기능명" 검증
1132
+
1133
+ 다음 단계:
1134
+ ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1135
1135
  `);
1136
1136
  }
1137
1137
  catch (error) {
@@ -1235,7 +1235,7 @@ async function update() {
1235
1235
  // .claude/commands 업데이트
1236
1236
  const commandsDir = path.join(claudeDir, 'commands');
1237
1237
  ensureDir(commandsDir);
1238
- const sourceDir = path.join(__dirname, '../../.claude/commands');
1238
+ const sourceDir = path.join(__dirname, '../../commands');
1239
1239
  copyDirContents(sourceDir, commandsDir);
1240
1240
  log(' ✅ 슬래시 커맨드 업데이트 완료 (7개)\n');
1241
1241
  // 기술 스택 감지
@@ -1355,7 +1355,7 @@ async function update() {
1355
1355
  // .claude/agents/ 업데이트
1356
1356
  const agentsDir = path.join(claudeDir, 'agents');
1357
1357
  ensureDir(agentsDir);
1358
- const agentsSourceDir = path.join(__dirname, '../../.claude/agents');
1358
+ const agentsSourceDir = path.join(__dirname, '../../agents');
1359
1359
  copyDirContents(agentsSourceDir, agentsDir);
1360
1360
  log(' ✅ 서브에이전트 업데이트 완료 (.claude/agents/)\n');
1361
1361
  // settings.json 업데이트
@@ -1503,16 +1503,16 @@ async function update() {
1503
1503
  }
1504
1504
  }
1505
1505
  const packageJson = getPackageJson();
1506
- log(`
1507
- ✅ vibe 업데이트 완료! (v${packageJson.version})
1508
-
1509
- 업데이트된 항목:
1510
- - 슬래시 커맨드 (7개)
1511
- - 코딩 규칙 (.claude/vibe/rules/)
1512
- - 서브에이전트 (.claude/agents/)
1513
- - Hooks 설정
1514
-
1515
- ${formatLLMStatus()}
1506
+ log(`
1507
+ ✅ vibe 업데이트 완료! (v${packageJson.version})
1508
+
1509
+ 업데이트된 항목:
1510
+ - 슬래시 커맨드 (7개)
1511
+ - 코딩 규칙 (.claude/vibe/rules/)
1512
+ - 서브에이전트 (.claude/agents/)
1513
+ - Hooks 설정
1514
+
1515
+ ${formatLLMStatus()}
1516
1516
  `);
1517
1517
  }
1518
1518
  catch (error) {
@@ -1583,17 +1583,17 @@ function remove() {
1583
1583
  }
1584
1584
  catch (e) { }
1585
1585
  }
1586
- console.log(`
1587
- ✅ vibe 제거 완료!
1588
-
1589
- 제거된 항목:
1590
- - MCP 서버 (vibe, context7)
1591
- - .claude/vibe/ 폴더
1592
- - 슬래시 커맨드 (7개)
1593
- - 서브에이전트 (5개)
1594
- - Hooks 설정
1595
-
1596
- 다시 설치하려면: vibe init
1586
+ console.log(`
1587
+ ✅ vibe 제거 완료!
1588
+
1589
+ 제거된 항목:
1590
+ - MCP 서버 (vibe, context7)
1591
+ - .claude/vibe/ 폴더
1592
+ - 슬래시 커맨드 (7개)
1593
+ - 서브에이전트 (5개)
1594
+ - Hooks 설정
1595
+
1596
+ 다시 설치하려면: vibe init
1597
1597
  `);
1598
1598
  }
1599
1599
  // ============================================================================
@@ -1601,13 +1601,13 @@ function remove() {
1601
1601
  // ============================================================================
1602
1602
  function setupExternalLLM(llmType, apiKey) {
1603
1603
  if (!apiKey) {
1604
- console.log(`
1605
- ❌ API 키가 필요합니다.
1606
-
1607
- 사용법:
1608
- vibe ${llmType} <api-key>
1609
-
1610
- ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1604
+ console.log(`
1605
+ ❌ API 키가 필요합니다.
1606
+
1607
+ 사용법:
1608
+ vibe ${llmType} <api-key>
1609
+
1610
+ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1611
1611
  `);
1612
1612
  return;
1613
1613
  }
@@ -1640,20 +1640,20 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
1640
1640
  args: ['-y', llmConfig.package],
1641
1641
  env: { [envKey]: apiKey }
1642
1642
  });
1643
- console.log(`
1644
- ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1645
-
1646
- 역할: ${llmConfig.description}
1647
- MCP: ${llmConfig.name}
1648
-
1649
- 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1650
-
1651
- 비활성화: vibe remove ${llmType}
1643
+ console.log(`
1644
+ ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1645
+
1646
+ 역할: ${llmConfig.description}
1647
+ MCP: ${llmConfig.name}
1648
+
1649
+ 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1650
+
1651
+ 비활성화: vibe remove ${llmType}
1652
1652
  `);
1653
1653
  }
1654
1654
  catch (e) {
1655
- console.log(`
1656
- ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1655
+ console.log(`
1656
+ ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1657
1657
  `);
1658
1658
  }
1659
1659
  }
@@ -1680,11 +1680,11 @@ function removeExternalLLM(llmType) {
1680
1680
  // GPT OAuth Commands
1681
1681
  // ============================================================================
1682
1682
  async function gptAuth() {
1683
- console.log(`
1684
- 🔐 GPT Plus/Pro 인증 (OAuth)
1685
-
1686
- ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1687
- 브라우저에서 OpenAI 계정으로 로그인하세요.
1683
+ console.log(`
1684
+ 🔐 GPT Plus/Pro 인증 (OAuth)
1685
+
1686
+ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1687
+ 브라우저에서 OpenAI 계정으로 로그인하세요.
1688
1688
  `);
1689
1689
  try {
1690
1690
  const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
@@ -1700,17 +1700,17 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1700
1700
  expires: tokens.expires,
1701
1701
  accountId: tokens.accountId,
1702
1702
  });
1703
- console.log(`
1704
- ✅ GPT 인증 완료!
1705
-
1706
- 계정: ${tokens.email}
1707
- 계정 ID: ${tokens.accountId || '(자동 감지)'}
1708
-
1709
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1710
- 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1711
-
1712
- 상태 확인: vibe status gpt
1713
- 로그아웃: vibe logout gpt
1703
+ console.log(`
1704
+ ✅ GPT 인증 완료!
1705
+
1706
+ 계정: ${tokens.email}
1707
+ 계정 ID: ${tokens.accountId || '(자동 감지)'}
1708
+
1709
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1710
+ 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1711
+
1712
+ 상태 확인: vibe status gpt
1713
+ 로그아웃: vibe logout gpt
1714
1714
  `);
1715
1715
  // config.json 업데이트
1716
1716
  const projectRoot = process.cwd();
@@ -1737,26 +1737,30 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1737
1737
  const mcpPath = path.join(__dirname, '../lib/gpt-mcp.js');
1738
1738
  unregisterMcp('vibe-gpt');
1739
1739
  registerMcp('vibe-gpt', { command: 'node', args: [mcpPath] });
1740
- console.log(`
1741
- ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1742
-
1743
- 이제 모든 프로젝트에서 GPT 도구를 사용할 수 있습니다.
1740
+ console.log(`
1741
+ ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1742
+
1743
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1744
+ - gpt_chat: GPT에 질문
1745
+ - gpt_analyze_architecture: 아키텍처 분석
1746
+ - gpt_debug: 디버깅
1747
+ - gpt_quick_ask: 빠른 질문
1744
1748
  `);
1745
1749
  }
1746
1750
  catch (mcpError) {
1747
- console.log(`
1748
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1751
+ console.log(`
1752
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1749
1753
  `);
1750
1754
  }
1751
1755
  process.exit(0);
1752
1756
  }
1753
1757
  catch (error) {
1754
- console.error(`
1755
- ❌ GPT 인증 실패
1756
-
1757
- 오류: ${error.message}
1758
-
1759
- 다시 시도하려면: vibe gpt --auth
1758
+ console.error(`
1759
+ ❌ GPT 인증 실패
1760
+
1761
+ 오류: ${error.message}
1762
+
1763
+ 다시 시도하려면: vibe gpt --auth
1760
1764
  `);
1761
1765
  process.exit(1);
1762
1766
  }
@@ -1767,31 +1771,31 @@ function gptStatus() {
1767
1771
  const storage = require(gptStoragePath);
1768
1772
  const accounts = storage.getAllAccounts();
1769
1773
  if (accounts.length === 0) {
1770
- console.log(`
1771
- 📊 GPT 인증 상태
1772
-
1773
- 인증된 계정 없음
1774
-
1775
- 로그인: vibe gpt --auth
1774
+ console.log(`
1775
+ 📊 GPT 인증 상태
1776
+
1777
+ 인증된 계정 없음
1778
+
1779
+ 로그인: vibe gpt --auth
1776
1780
  `);
1777
1781
  return;
1778
1782
  }
1779
1783
  const activeAccount = storage.getActiveAccount();
1780
1784
  const isExpired = storage.isTokenExpired(activeAccount);
1781
- console.log(`
1782
- 📊 GPT 인증 상태
1783
-
1784
- 활성 계정: ${activeAccount.email}
1785
- 계정 ID: ${activeAccount.accountId || '(없음)'}
1786
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1787
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1788
-
1789
- 등록된 계정 (${accounts.length}개):
1790
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1791
-
1792
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1793
-
1794
- 로그아웃: vibe logout gpt
1785
+ console.log(`
1786
+ 📊 GPT 인증 상태
1787
+
1788
+ 활성 계정: ${activeAccount.email}
1789
+ 계정 ID: ${activeAccount.accountId || '(없음)'}
1790
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1791
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1792
+
1793
+ 등록된 계정 (${accounts.length}개):
1794
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1795
+
1796
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1797
+
1798
+ 로그아웃: vibe logout gpt
1795
1799
  `);
1796
1800
  }
1797
1801
  catch (error) {
@@ -1808,12 +1812,12 @@ function gptLogout() {
1808
1812
  return;
1809
1813
  }
1810
1814
  storage.clearAccounts();
1811
- console.log(`
1812
- ✅ GPT 로그아웃 완료
1813
-
1814
- ${activeAccount.email} 계정이 제거되었습니다.
1815
-
1816
- 다시 로그인: vibe gpt --auth
1815
+ console.log(`
1816
+ ✅ GPT 로그아웃 완료
1817
+
1818
+ ${activeAccount.email} 계정이 제거되었습니다.
1819
+
1820
+ 다시 로그인: vibe gpt --auth
1817
1821
  `);
1818
1822
  // config.json 업데이트
1819
1823
  const projectRoot = process.cwd();
@@ -1837,39 +1841,39 @@ ${activeAccount.email} 계정이 제거되었습니다.
1837
1841
  }
1838
1842
  }
1839
1843
  function showAuthHelp() {
1840
- console.log(`
1841
- 🔐 vibe auth - LLM 인증
1842
-
1843
- 사용법:
1844
- vibe auth gpt GPT Plus/Pro OAuth 인증
1845
- vibe auth gpt --key <key> GPT API 키로 설정
1846
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1847
- vibe auth gemini --key <key> Gemini API 키로 설정
1848
-
1849
- 예시:
1850
- vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1851
- vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1852
- vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1844
+ console.log(`
1845
+ 🔐 vibe auth - LLM 인증
1846
+
1847
+ 사용법:
1848
+ vibe auth gpt GPT Plus/Pro OAuth 인증
1849
+ vibe auth gpt --key <key> GPT API 키로 설정
1850
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1851
+ vibe auth gemini --key <key> Gemini API 키로 설정
1852
+
1853
+ 예시:
1854
+ vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1855
+ vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1856
+ vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1853
1857
  `);
1854
1858
  }
1855
1859
  function showLogoutHelp() {
1856
- console.log(`
1857
- 🚪 vibe logout - LLM 로그아웃
1858
-
1859
- 사용법:
1860
- vibe logout gpt GPT 로그아웃
1861
- vibe logout gemini Gemini 로그아웃
1860
+ console.log(`
1861
+ 🚪 vibe logout - LLM 로그아웃
1862
+
1863
+ 사용법:
1864
+ vibe logout gpt GPT 로그아웃
1865
+ vibe logout gemini Gemini 로그아웃
1862
1866
  `);
1863
1867
  }
1864
1868
  // ============================================================================
1865
1869
  // Gemini OAuth Commands
1866
1870
  // ============================================================================
1867
1871
  async function geminiAuth() {
1868
- console.log(`
1869
- 🔐 Gemini 구독 인증 (OAuth)
1870
-
1871
- Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1872
- 브라우저에서 Google 계정으로 로그인하세요.
1872
+ console.log(`
1873
+ 🔐 Gemini 구독 인증 (OAuth)
1874
+
1875
+ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1876
+ 브라우저에서 Google 계정으로 로그인하세요.
1873
1877
  `);
1874
1878
  try {
1875
1879
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -1884,20 +1888,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1884
1888
  expires: tokens.expires,
1885
1889
  projectId: tokens.projectId,
1886
1890
  });
1887
- console.log(`
1888
- ✅ Gemini 인증 완료!
1889
-
1890
- 계정: ${tokens.email}
1891
- 프로젝트: ${tokens.projectId || '(자동 감지)'}
1892
-
1893
- 사용 가능한 모델:
1894
- - Gemini 3 Flash (빠른 응답, 탐색/검색)
1895
- - Gemini 3 Pro (높은 정확도)
1896
-
1897
- /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1898
-
1899
- 상태 확인: vibe status gemini
1900
- 로그아웃: vibe logout gemini
1891
+ console.log(`
1892
+ ✅ Gemini 인증 완료!
1893
+
1894
+ 계정: ${tokens.email}
1895
+ 프로젝트: ${tokens.projectId || '(자동 감지)'}
1896
+
1897
+ 사용 가능한 모델:
1898
+ - Gemini 3 Flash (빠른 응답, 탐색/검색)
1899
+ - Gemini 3 Pro (높은 정확도)
1900
+
1901
+ /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1902
+
1903
+ 상태 확인: vibe status gemini
1904
+ 로그아웃: vibe logout gemini
1901
1905
  `);
1902
1906
  // config.json 업데이트
1903
1907
  const projectRoot = process.cwd();
@@ -1924,30 +1928,30 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1924
1928
  const mcpPath = path.join(__dirname, '../lib/gemini-mcp.js');
1925
1929
  unregisterMcp('vibe-gemini');
1926
1930
  registerMcp('vibe-gemini', { command: 'node', args: [mcpPath] });
1927
- console.log(`
1928
- ✅ vibe-gemini MCP 서버 등록 완료! (전역)
1929
-
1930
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1931
- - mcp__vibe-gemini__gemini_chat: Gemini에 질문
1932
- - mcp__vibe-gemini__gemini_analyze_code: 코드 분석
1933
- - mcp__vibe-gemini__gemini_review_ui: UI/UX 리뷰
1934
- - mcp__vibe-gemini__gemini_quick_ask: 빠른 질문
1931
+ console.log(`
1932
+ ✅ vibe-gemini MCP 서버 등록 완료! (전역)
1933
+
1934
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1935
+ - gemini_chat: Gemini에 질문
1936
+ - gemini_analyze_code: 코드 분석
1937
+ - gemini_review_ui: UI/UX 리뷰
1938
+ - gemini_quick_ask: 빠른 질문
1935
1939
  `);
1936
1940
  }
1937
1941
  catch (mcpError) {
1938
- console.log(`
1939
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1942
+ console.log(`
1943
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1940
1944
  `);
1941
1945
  }
1942
1946
  process.exit(0);
1943
1947
  }
1944
1948
  catch (error) {
1945
- console.error(`
1946
- ❌ Gemini 인증 실패
1947
-
1948
- 오류: ${error.message}
1949
-
1950
- 다시 시도하려면: vibe gemini --auth
1949
+ console.error(`
1950
+ ❌ Gemini 인증 실패
1951
+
1952
+ 오류: ${error.message}
1953
+
1954
+ 다시 시도하려면: vibe gemini --auth
1951
1955
  `);
1952
1956
  process.exit(1);
1953
1957
  }
@@ -1960,32 +1964,32 @@ function geminiStatus() {
1960
1964
  const { GEMINI_MODELS } = require(geminiApiPath);
1961
1965
  const accounts = storage.getAllAccounts();
1962
1966
  if (accounts.length === 0) {
1963
- console.log(`
1964
- 📊 Gemini 인증 상태
1965
-
1966
- 인증된 계정 없음
1967
-
1968
- 로그인: vibe gemini --auth
1967
+ console.log(`
1968
+ 📊 Gemini 인증 상태
1969
+
1970
+ 인증된 계정 없음
1971
+
1972
+ 로그인: vibe gemini --auth
1969
1973
  `);
1970
1974
  return;
1971
1975
  }
1972
1976
  const activeAccount = storage.getActiveAccount();
1973
1977
  const isExpired = storage.isTokenExpired(activeAccount);
1974
- console.log(`
1975
- 📊 Gemini 인증 상태
1976
-
1977
- 활성 계정: ${activeAccount.email}
1978
- 프로젝트: ${activeAccount.projectId || '(자동)'}
1979
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1980
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1981
-
1982
- 등록된 계정 (${accounts.length}개):
1983
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1984
-
1985
- 사용 가능한 모델:
1986
- ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
1987
-
1988
- 로그아웃: vibe logout gemini
1978
+ console.log(`
1979
+ 📊 Gemini 인증 상태
1980
+
1981
+ 활성 계정: ${activeAccount.email}
1982
+ 프로젝트: ${activeAccount.projectId || '(자동)'}
1983
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1984
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1985
+
1986
+ 등록된 계정 (${accounts.length}개):
1987
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1988
+
1989
+ 사용 가능한 모델:
1990
+ ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
1991
+
1992
+ 로그아웃: vibe logout gemini
1989
1993
  `);
1990
1994
  }
1991
1995
  catch (error) {
@@ -2002,12 +2006,12 @@ function geminiLogout() {
2002
2006
  return;
2003
2007
  }
2004
2008
  storage.clearAccounts();
2005
- console.log(`
2006
- ✅ Gemini 로그아웃 완료
2007
-
2008
- ${activeAccount.email} 계정이 제거되었습니다.
2009
-
2010
- 다시 로그인: vibe gemini --auth
2009
+ console.log(`
2010
+ ✅ Gemini 로그아웃 완료
2011
+
2012
+ ${activeAccount.email} 계정이 제거되었습니다.
2013
+
2014
+ 다시 로그인: vibe gemini --auth
2011
2015
  `);
2012
2016
  // config.json 업데이트
2013
2017
  const projectRoot = process.cwd();
@@ -2035,53 +2039,53 @@ ${activeAccount.email} 계정이 제거되었습니다.
2035
2039
  // Info Commands
2036
2040
  // ============================================================================
2037
2041
  function showHelp() {
2038
- console.log(`
2039
- 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2040
-
2041
- 기본 명령어:
2042
- vibe init [project] 프로젝트 초기화
2043
- vibe update 설정 업데이트
2044
- vibe status 현재 설정 상태
2045
- vibe help 도움말
2046
- vibe version 버전 정보
2047
-
2048
- 외부 LLM 인증:
2049
- vibe auth gpt GPT Plus/Pro OAuth 인증
2050
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2051
- vibe auth gpt --key <key> GPT API 키 설정
2052
- vibe auth gemini --key <key> Gemini API 키 설정
2053
-
2054
- 상태 및 관리:
2055
- vibe status 전체 상태 확인
2056
- vibe status gpt GPT 인증 상태 확인
2057
- vibe status gemini Gemini 인증 상태 확인
2058
- vibe logout gpt GPT 로그아웃
2059
- vibe logout gemini Gemini 로그아웃
2060
- vibe remove gpt GPT 제거
2061
- vibe remove gemini Gemini 제거
2062
- vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2063
-
2064
- Claude Code 슬래시 커맨드:
2065
- /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2066
- /vibe.run "기능명" 구현 실행
2067
- /vibe.verify "기능명" 검증
2068
- /vibe.reason "문제" 체계적 추론
2069
- /vibe.analyze 프로젝트 분석
2070
- /vibe.ui "설명" UI 미리보기
2071
- /vibe.diagram 다이어그램 생성
2072
-
2073
- 모델 오케스트레이션:
2074
- Opus 4.5 오케스트레이터 (메인)
2075
- Sonnet 4 구현
2076
- Haiku 4.5 코드 탐색
2077
- GPT 5.2 아키텍처/디버깅 (선택적)
2078
- Gemini 3 UI/UX 설계 (선택적)
2079
-
2080
- Workflow:
2081
- /vibe.spec → /vibe.run → /vibe.verify
2082
-
2083
- 문서:
2084
- https://github.com/su-record/vibe
2042
+ console.log(`
2043
+ 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2044
+
2045
+ 기본 명령어:
2046
+ vibe init [project] 프로젝트 초기화
2047
+ vibe update 설정 업데이트
2048
+ vibe status 현재 설정 상태
2049
+ vibe help 도움말
2050
+ vibe version 버전 정보
2051
+
2052
+ 외부 LLM 인증:
2053
+ vibe auth gpt GPT Plus/Pro OAuth 인증
2054
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2055
+ vibe auth gpt --key <key> GPT API 키 설정
2056
+ vibe auth gemini --key <key> Gemini API 키 설정
2057
+
2058
+ 상태 및 관리:
2059
+ vibe status 전체 상태 확인
2060
+ vibe status gpt GPT 인증 상태 확인
2061
+ vibe status gemini Gemini 인증 상태 확인
2062
+ vibe logout gpt GPT 로그아웃
2063
+ vibe logout gemini Gemini 로그아웃
2064
+ vibe remove gpt GPT 제거
2065
+ vibe remove gemini Gemini 제거
2066
+ vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2067
+
2068
+ Claude Code 슬래시 커맨드:
2069
+ /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2070
+ /vibe.run "기능명" 구현 실행
2071
+ /vibe.verify "기능명" 검증
2072
+ /vibe.reason "문제" 체계적 추론
2073
+ /vibe.analyze 프로젝트 분석
2074
+ /vibe.ui "설명" UI 미리보기
2075
+ /vibe.diagram 다이어그램 생성
2076
+
2077
+ 모델 오케스트레이션:
2078
+ Opus 4.5 오케스트레이터 (메인)
2079
+ Sonnet 4 구현
2080
+ Haiku 4.5 코드 탐색
2081
+ GPT 5.2 아키텍처/디버깅 (선택적)
2082
+ Gemini 3 UI/UX 설계 (선택적)
2083
+
2084
+ Workflow:
2085
+ /vibe.spec → /vibe.run → /vibe.verify
2086
+
2087
+ 문서:
2088
+ https://github.com/su-record/vibe
2085
2089
  `);
2086
2090
  }
2087
2091
  function showStatus() {
@@ -2099,33 +2103,33 @@ function showStatus() {
2099
2103
  }
2100
2104
  const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
2101
2105
  const geminiStatus = config.models?.gemini?.enabled ? '✅ 활성' : '⬚ 비활성';
2102
- console.log(`
2103
- 📊 Vibe 상태 (v${packageJson.version})
2104
-
2105
- 프로젝트: ${projectRoot}
2106
- 언어: ${config.language || 'ko'}
2107
-
2108
- 모델 오케스트레이션:
2109
- ┌─────────────────────────────────────────┐
2110
- │ Opus 4.5 오케스트레이터 │
2111
- ├─────────────────────────────────────────┤
2112
- │ Sonnet 4 구현 │
2113
- │ Haiku 4.5 코드 탐색 │
2114
- ├─────────────────────────────────────────┤
2115
- │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2116
- │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2117
- └─────────────────────────────────────────┘
2118
-
2119
- MCP 서버:
2120
- vibe-gemini Gemini API
2121
- vibe-gpt GPT API
2122
- context7 라이브러리 문서 검색
2123
-
2124
- 외부 LLM 설정:
2125
- vibe auth gpt GPT 활성화 (OAuth)
2126
- vibe auth gemini Gemini 활성화 (OAuth)
2127
- vibe remove gpt GPT 제거
2128
- vibe remove gemini Gemini 제거
2106
+ console.log(`
2107
+ 📊 Vibe 상태 (v${packageJson.version})
2108
+
2109
+ 프로젝트: ${projectRoot}
2110
+ 언어: ${config.language || 'ko'}
2111
+
2112
+ 모델 오케스트레이션:
2113
+ ┌─────────────────────────────────────────┐
2114
+ │ Opus 4.5 오케스트레이터 │
2115
+ ├─────────────────────────────────────────┤
2116
+ │ Sonnet 4 구현 │
2117
+ │ Haiku 4.5 코드 탐색 │
2118
+ ├─────────────────────────────────────────┤
2119
+ │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2120
+ │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2121
+ └─────────────────────────────────────────┘
2122
+
2123
+ MCP 서버:
2124
+ vibe-gemini Gemini API
2125
+ vibe-gpt GPT API
2126
+ context7 라이브러리 문서 검색
2127
+
2128
+ 외부 LLM 설정:
2129
+ vibe auth gpt GPT 활성화 (OAuth)
2130
+ vibe auth gemini Gemini 활성화 (OAuth)
2131
+ vibe remove gpt GPT 제거
2132
+ vibe remove gemini Gemini 제거
2129
2133
  `);
2130
2134
  }
2131
2135
  function showVersion() {
@@ -2256,20 +2260,20 @@ switch (command) {
2256
2260
  showHelp();
2257
2261
  break;
2258
2262
  default:
2259
- console.log(`
2260
- ❌ 알 수 없는 명령어: ${command}
2261
-
2262
- 사용 가능한 명령어:
2263
- vibe init 프로젝트 초기화
2264
- vibe update 설정 업데이트
2265
- vibe auth LLM 인증 (gpt, gemini)
2266
- vibe status 상태 확인
2267
- vibe logout 로그아웃
2268
- vibe remove 제거
2269
- vibe help 도움말
2270
- vibe version 버전 정보
2271
-
2272
- 사용법: vibe help
2263
+ console.log(`
2264
+ ❌ 알 수 없는 명령어: ${command}
2265
+
2266
+ 사용 가능한 명령어:
2267
+ vibe init 프로젝트 초기화
2268
+ vibe update 설정 업데이트
2269
+ vibe auth LLM 인증 (gpt, gemini)
2270
+ vibe status 상태 확인
2271
+ vibe logout 로그아웃
2272
+ vibe remove 제거
2273
+ vibe help 도움말
2274
+ vibe version 버전 정보
2275
+
2276
+ 사용법: vibe help
2273
2277
  `);
2274
2278
  process.exit(1);
2275
2279
  }