@su-record/vibe 2.2.2 → 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 (81) 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.js +389 -389
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/lib/MemoryManager.js +92 -92
  53. package/dist/lib/PythonParser.js +108 -108
  54. package/dist/lib/gemini-mcp.js +15 -15
  55. package/dist/lib/gemini-oauth.js +35 -35
  56. package/dist/lib/gpt-mcp.js +17 -17
  57. package/dist/lib/gpt-oauth.js +44 -44
  58. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  59. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  60. package/dist/tools/memory/getMemoryGraph.js +12 -12
  61. package/dist/tools/memory/getSessionContext.js +9 -9
  62. package/dist/tools/memory/linkMemories.js +14 -14
  63. package/dist/tools/memory/listMemories.js +4 -4
  64. package/dist/tools/memory/recallMemory.js +4 -4
  65. package/dist/tools/memory/saveMemory.js +4 -4
  66. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  67. package/dist/tools/planning/generatePrd.js +46 -46
  68. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  69. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  70. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  71. package/package.json +69 -66
  72. package/skills/git-worktree.md +178 -0
  73. package/skills/priority-todos.md +236 -0
  74. package/templates/constitution-template.md +184 -184
  75. package/templates/contract-backend-template.md +517 -517
  76. package/templates/contract-frontend-template.md +594 -594
  77. package/templates/feature-template.md +96 -96
  78. package/templates/hooks-template.json +103 -103
  79. package/templates/spec-template.md +199 -199
  80. package/.claude/vibe/rules/tools/mcp-hi-ai-guide.md +0 -665
  81. 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,30 +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
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1744
- - gpt_chat: GPT에 질문
1745
- - gpt_analyze_architecture: 아키텍처 분석
1746
- - gpt_debug: 디버깅
1747
- - gpt_quick_ask: 빠른 질문
1740
+ console.log(`
1741
+ ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1742
+
1743
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1744
+ - gpt_chat: GPT에 질문
1745
+ - gpt_analyze_architecture: 아키텍처 분석
1746
+ - gpt_debug: 디버깅
1747
+ - gpt_quick_ask: 빠른 질문
1748
1748
  `);
1749
1749
  }
1750
1750
  catch (mcpError) {
1751
- console.log(`
1752
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1751
+ console.log(`
1752
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1753
1753
  `);
1754
1754
  }
1755
1755
  process.exit(0);
1756
1756
  }
1757
1757
  catch (error) {
1758
- console.error(`
1759
- ❌ GPT 인증 실패
1760
-
1761
- 오류: ${error.message}
1762
-
1763
- 다시 시도하려면: vibe gpt --auth
1758
+ console.error(`
1759
+ ❌ GPT 인증 실패
1760
+
1761
+ 오류: ${error.message}
1762
+
1763
+ 다시 시도하려면: vibe gpt --auth
1764
1764
  `);
1765
1765
  process.exit(1);
1766
1766
  }
@@ -1771,31 +1771,31 @@ function gptStatus() {
1771
1771
  const storage = require(gptStoragePath);
1772
1772
  const accounts = storage.getAllAccounts();
1773
1773
  if (accounts.length === 0) {
1774
- console.log(`
1775
- 📊 GPT 인증 상태
1776
-
1777
- 인증된 계정 없음
1778
-
1779
- 로그인: vibe gpt --auth
1774
+ console.log(`
1775
+ 📊 GPT 인증 상태
1776
+
1777
+ 인증된 계정 없음
1778
+
1779
+ 로그인: vibe gpt --auth
1780
1780
  `);
1781
1781
  return;
1782
1782
  }
1783
1783
  const activeAccount = storage.getActiveAccount();
1784
1784
  const isExpired = storage.isTokenExpired(activeAccount);
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
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
1799
1799
  `);
1800
1800
  }
1801
1801
  catch (error) {
@@ -1812,12 +1812,12 @@ function gptLogout() {
1812
1812
  return;
1813
1813
  }
1814
1814
  storage.clearAccounts();
1815
- console.log(`
1816
- ✅ GPT 로그아웃 완료
1817
-
1818
- ${activeAccount.email} 계정이 제거되었습니다.
1819
-
1820
- 다시 로그인: vibe gpt --auth
1815
+ console.log(`
1816
+ ✅ GPT 로그아웃 완료
1817
+
1818
+ ${activeAccount.email} 계정이 제거되었습니다.
1819
+
1820
+ 다시 로그인: vibe gpt --auth
1821
1821
  `);
1822
1822
  // config.json 업데이트
1823
1823
  const projectRoot = process.cwd();
@@ -1841,39 +1841,39 @@ ${activeAccount.email} 계정이 제거되었습니다.
1841
1841
  }
1842
1842
  }
1843
1843
  function showAuthHelp() {
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 키로 설정 (사용량 과금)
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 키로 설정 (사용량 과금)
1857
1857
  `);
1858
1858
  }
1859
1859
  function showLogoutHelp() {
1860
- console.log(`
1861
- 🚪 vibe logout - LLM 로그아웃
1862
-
1863
- 사용법:
1864
- vibe logout gpt GPT 로그아웃
1865
- vibe logout gemini Gemini 로그아웃
1860
+ console.log(`
1861
+ 🚪 vibe logout - LLM 로그아웃
1862
+
1863
+ 사용법:
1864
+ vibe logout gpt GPT 로그아웃
1865
+ vibe logout gemini Gemini 로그아웃
1866
1866
  `);
1867
1867
  }
1868
1868
  // ============================================================================
1869
1869
  // Gemini OAuth Commands
1870
1870
  // ============================================================================
1871
1871
  async function geminiAuth() {
1872
- console.log(`
1873
- 🔐 Gemini 구독 인증 (OAuth)
1874
-
1875
- Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1876
- 브라우저에서 Google 계정으로 로그인하세요.
1872
+ console.log(`
1873
+ 🔐 Gemini 구독 인증 (OAuth)
1874
+
1875
+ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1876
+ 브라우저에서 Google 계정으로 로그인하세요.
1877
1877
  `);
1878
1878
  try {
1879
1879
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -1888,20 +1888,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1888
1888
  expires: tokens.expires,
1889
1889
  projectId: tokens.projectId,
1890
1890
  });
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
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
1905
1905
  `);
1906
1906
  // config.json 업데이트
1907
1907
  const projectRoot = process.cwd();
@@ -1928,30 +1928,30 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1928
1928
  const mcpPath = path.join(__dirname, '../lib/gemini-mcp.js');
1929
1929
  unregisterMcp('vibe-gemini');
1930
1930
  registerMcp('vibe-gemini', { command: 'node', args: [mcpPath] });
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: 빠른 질문
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: 빠른 질문
1939
1939
  `);
1940
1940
  }
1941
1941
  catch (mcpError) {
1942
- console.log(`
1943
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1942
+ console.log(`
1943
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1944
1944
  `);
1945
1945
  }
1946
1946
  process.exit(0);
1947
1947
  }
1948
1948
  catch (error) {
1949
- console.error(`
1950
- ❌ Gemini 인증 실패
1951
-
1952
- 오류: ${error.message}
1953
-
1954
- 다시 시도하려면: vibe gemini --auth
1949
+ console.error(`
1950
+ ❌ Gemini 인증 실패
1951
+
1952
+ 오류: ${error.message}
1953
+
1954
+ 다시 시도하려면: vibe gemini --auth
1955
1955
  `);
1956
1956
  process.exit(1);
1957
1957
  }
@@ -1964,32 +1964,32 @@ function geminiStatus() {
1964
1964
  const { GEMINI_MODELS } = require(geminiApiPath);
1965
1965
  const accounts = storage.getAllAccounts();
1966
1966
  if (accounts.length === 0) {
1967
- console.log(`
1968
- 📊 Gemini 인증 상태
1969
-
1970
- 인증된 계정 없음
1971
-
1972
- 로그인: vibe gemini --auth
1967
+ console.log(`
1968
+ 📊 Gemini 인증 상태
1969
+
1970
+ 인증된 계정 없음
1971
+
1972
+ 로그인: vibe gemini --auth
1973
1973
  `);
1974
1974
  return;
1975
1975
  }
1976
1976
  const activeAccount = storage.getActiveAccount();
1977
1977
  const isExpired = storage.isTokenExpired(activeAccount);
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
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
1993
1993
  `);
1994
1994
  }
1995
1995
  catch (error) {
@@ -2006,12 +2006,12 @@ function geminiLogout() {
2006
2006
  return;
2007
2007
  }
2008
2008
  storage.clearAccounts();
2009
- console.log(`
2010
- ✅ Gemini 로그아웃 완료
2011
-
2012
- ${activeAccount.email} 계정이 제거되었습니다.
2013
-
2014
- 다시 로그인: vibe gemini --auth
2009
+ console.log(`
2010
+ ✅ Gemini 로그아웃 완료
2011
+
2012
+ ${activeAccount.email} 계정이 제거되었습니다.
2013
+
2014
+ 다시 로그인: vibe gemini --auth
2015
2015
  `);
2016
2016
  // config.json 업데이트
2017
2017
  const projectRoot = process.cwd();
@@ -2039,53 +2039,53 @@ ${activeAccount.email} 계정이 제거되었습니다.
2039
2039
  // Info Commands
2040
2040
  // ============================================================================
2041
2041
  function showHelp() {
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
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
2089
2089
  `);
2090
2090
  }
2091
2091
  function showStatus() {
@@ -2103,33 +2103,33 @@ function showStatus() {
2103
2103
  }
2104
2104
  const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
2105
2105
  const geminiStatus = config.models?.gemini?.enabled ? '✅ 활성' : '⬚ 비활성';
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 제거
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 제거
2133
2133
  `);
2134
2134
  }
2135
2135
  function showVersion() {
@@ -2260,20 +2260,20 @@ switch (command) {
2260
2260
  showHelp();
2261
2261
  break;
2262
2262
  default:
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
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
2277
2277
  `);
2278
2278
  process.exit(1);
2279
2279
  }