@su-record/vibe 2.3.0 → 2.3.2

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 (98) hide show
  1. package/.claude/settings.json +35 -35
  2. package/.claude/settings.local.json +24 -25
  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 -323
  35. package/LICENSE +21 -21
  36. package/README.md +744 -724
  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 +245 -180
  63. package/commands/vibe.reason.md +223 -183
  64. package/commands/vibe.review.md +200 -136
  65. package/commands/vibe.run.md +838 -836
  66. package/commands/vibe.spec.md +419 -383
  67. package/commands/vibe.utils.md +101 -101
  68. package/commands/vibe.verify.md +282 -241
  69. package/dist/cli/index.js +385 -385
  70. package/dist/lib/MemoryManager.d.ts.map +1 -1
  71. package/dist/lib/MemoryManager.js +119 -114
  72. package/dist/lib/MemoryManager.js.map +1 -1
  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/tools/analytics/getUsageAnalytics.js +12 -12
  79. package/dist/tools/index.d.ts +50 -0
  80. package/dist/tools/index.d.ts.map +1 -0
  81. package/dist/tools/index.js +61 -0
  82. package/dist/tools/index.js.map +1 -0
  83. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  84. package/dist/tools/memory/getMemoryGraph.js +12 -12
  85. package/dist/tools/memory/getSessionContext.js +9 -9
  86. package/dist/tools/memory/linkMemories.js +14 -14
  87. package/dist/tools/memory/listMemories.js +4 -4
  88. package/dist/tools/memory/recallMemory.js +4 -4
  89. package/dist/tools/memory/saveMemory.js +4 -4
  90. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  91. package/dist/tools/planning/generatePrd.js +46 -46
  92. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  93. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  94. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  95. package/hooks/hooks.json +121 -103
  96. package/package.json +73 -69
  97. package/skills/git-worktree.md +178 -178
  98. 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) {
@@ -1101,41 +1101,41 @@ async function init(projectName) {
1101
1101
  // 협업자 자동 설치 설정
1102
1102
  setupCollaboratorAutoInstall(projectRoot);
1103
1103
  // 완료 메시지
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 "기능명" 으로 시작하세요!
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 "기능명" 으로 시작하세요!
1139
1139
  `);
1140
1140
  }
1141
1141
  catch (error) {
@@ -1533,16 +1533,16 @@ async function update() {
1533
1533
  }
1534
1534
  }
1535
1535
  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()}
1536
+ log(`
1537
+ ✅ vibe 업데이트 완료! (v${packageJson.version})
1538
+
1539
+ 업데이트된 항목:
1540
+ - 슬래시 커맨드 (7개)
1541
+ - 코딩 규칙 (.claude/vibe/rules/)
1542
+ - 서브에이전트 (.claude/agents/)
1543
+ - Hooks 설정
1544
+
1545
+ ${formatLLMStatus()}
1546
1546
  `);
1547
1547
  }
1548
1548
  catch (error) {
@@ -1613,17 +1613,17 @@ function remove() {
1613
1613
  }
1614
1614
  catch (e) { }
1615
1615
  }
1616
- console.log(`
1617
- ✅ vibe 제거 완료!
1618
-
1619
- 제거된 항목:
1620
- - MCP 서버 (vibe, context7)
1621
- - .claude/vibe/ 폴더
1622
- - 슬래시 커맨드 (7개)
1623
- - 서브에이전트 (5개)
1624
- - Hooks 설정
1625
-
1626
- 다시 설치하려면: vibe init
1616
+ console.log(`
1617
+ ✅ vibe 제거 완료!
1618
+
1619
+ 제거된 항목:
1620
+ - MCP 서버 (vibe, context7)
1621
+ - .claude/vibe/ 폴더
1622
+ - 슬래시 커맨드 (7개)
1623
+ - 서브에이전트 (5개)
1624
+ - Hooks 설정
1625
+
1626
+ 다시 설치하려면: vibe init
1627
1627
  `);
1628
1628
  }
1629
1629
  // ============================================================================
@@ -1631,13 +1631,13 @@ function remove() {
1631
1631
  // ============================================================================
1632
1632
  function setupExternalLLM(llmType, apiKey) {
1633
1633
  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'}
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'}
1641
1641
  `);
1642
1642
  return;
1643
1643
  }
@@ -1670,20 +1670,20 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
1670
1670
  args: ['-y', llmConfig.package],
1671
1671
  env: { [envKey]: apiKey }
1672
1672
  });
1673
- console.log(`
1674
- ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1675
-
1676
- 역할: ${llmConfig.description}
1677
- MCP: ${llmConfig.name}
1678
-
1679
- 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1680
-
1681
- 비활성화: vibe remove ${llmType}
1673
+ console.log(`
1674
+ ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1675
+
1676
+ 역할: ${llmConfig.description}
1677
+ MCP: ${llmConfig.name}
1678
+
1679
+ 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1680
+
1681
+ 비활성화: vibe remove ${llmType}
1682
1682
  `);
1683
1683
  }
1684
1684
  catch (e) {
1685
- console.log(`
1686
- ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1685
+ console.log(`
1686
+ ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1687
1687
  `);
1688
1688
  }
1689
1689
  }
@@ -1710,11 +1710,11 @@ function removeExternalLLM(llmType) {
1710
1710
  // GPT OAuth Commands
1711
1711
  // ============================================================================
1712
1712
  async function gptAuth() {
1713
- console.log(`
1714
- 🔐 GPT Plus/Pro 인증 (OAuth)
1715
-
1716
- ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1717
- 브라우저에서 OpenAI 계정으로 로그인하세요.
1713
+ console.log(`
1714
+ 🔐 GPT Plus/Pro 인증 (OAuth)
1715
+
1716
+ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1717
+ 브라우저에서 OpenAI 계정으로 로그인하세요.
1718
1718
  `);
1719
1719
  try {
1720
1720
  const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
@@ -1730,17 +1730,17 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1730
1730
  expires: tokens.expires,
1731
1731
  accountId: tokens.accountId,
1732
1732
  });
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
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
1744
1744
  `);
1745
1745
  // config.json 업데이트
1746
1746
  const projectRoot = process.cwd();
@@ -1767,30 +1767,30 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1767
1767
  const mcpPath = path.join(__dirname, '../lib/gpt-mcp.js');
1768
1768
  unregisterMcp('vibe-gpt');
1769
1769
  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: 빠른 질문
1770
+ console.log(`
1771
+ ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1772
+
1773
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1774
+ - gpt_chat: GPT에 질문
1775
+ - gpt_analyze_architecture: 아키텍처 분석
1776
+ - gpt_debug: 디버깅
1777
+ - gpt_quick_ask: 빠른 질문
1778
1778
  `);
1779
1779
  }
1780
1780
  catch (mcpError) {
1781
- console.log(`
1782
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1781
+ console.log(`
1782
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1783
1783
  `);
1784
1784
  }
1785
1785
  process.exit(0);
1786
1786
  }
1787
1787
  catch (error) {
1788
- console.error(`
1789
- ❌ GPT 인증 실패
1790
-
1791
- 오류: ${error.message}
1792
-
1793
- 다시 시도하려면: vibe gpt --auth
1788
+ console.error(`
1789
+ ❌ GPT 인증 실패
1790
+
1791
+ 오류: ${error.message}
1792
+
1793
+ 다시 시도하려면: vibe gpt --auth
1794
1794
  `);
1795
1795
  process.exit(1);
1796
1796
  }
@@ -1801,31 +1801,31 @@ function gptStatus() {
1801
1801
  const storage = require(gptStoragePath);
1802
1802
  const accounts = storage.getAllAccounts();
1803
1803
  if (accounts.length === 0) {
1804
- console.log(`
1805
- 📊 GPT 인증 상태
1806
-
1807
- 인증된 계정 없음
1808
-
1809
- 로그인: vibe gpt --auth
1804
+ console.log(`
1805
+ 📊 GPT 인증 상태
1806
+
1807
+ 인증된 계정 없음
1808
+
1809
+ 로그인: vibe gpt --auth
1810
1810
  `);
1811
1811
  return;
1812
1812
  }
1813
1813
  const activeAccount = storage.getActiveAccount();
1814
1814
  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
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
1829
1829
  `);
1830
1830
  }
1831
1831
  catch (error) {
@@ -1842,12 +1842,12 @@ function gptLogout() {
1842
1842
  return;
1843
1843
  }
1844
1844
  storage.clearAccounts();
1845
- console.log(`
1846
- ✅ GPT 로그아웃 완료
1847
-
1848
- ${activeAccount.email} 계정이 제거되었습니다.
1849
-
1850
- 다시 로그인: vibe gpt --auth
1845
+ console.log(`
1846
+ ✅ GPT 로그아웃 완료
1847
+
1848
+ ${activeAccount.email} 계정이 제거되었습니다.
1849
+
1850
+ 다시 로그인: vibe gpt --auth
1851
1851
  `);
1852
1852
  // config.json 업데이트
1853
1853
  const projectRoot = process.cwd();
@@ -1871,39 +1871,39 @@ ${activeAccount.email} 계정이 제거되었습니다.
1871
1871
  }
1872
1872
  }
1873
1873
  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 키로 설정 (사용량 과금)
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 키로 설정 (사용량 과금)
1887
1887
  `);
1888
1888
  }
1889
1889
  function showLogoutHelp() {
1890
- console.log(`
1891
- 🚪 vibe logout - LLM 로그아웃
1892
-
1893
- 사용법:
1894
- vibe logout gpt GPT 로그아웃
1895
- vibe logout gemini Gemini 로그아웃
1890
+ console.log(`
1891
+ 🚪 vibe logout - LLM 로그아웃
1892
+
1893
+ 사용법:
1894
+ vibe logout gpt GPT 로그아웃
1895
+ vibe logout gemini Gemini 로그아웃
1896
1896
  `);
1897
1897
  }
1898
1898
  // ============================================================================
1899
1899
  // Gemini OAuth Commands
1900
1900
  // ============================================================================
1901
1901
  async function geminiAuth() {
1902
- console.log(`
1903
- 🔐 Gemini 구독 인증 (OAuth)
1904
-
1905
- Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1906
- 브라우저에서 Google 계정으로 로그인하세요.
1902
+ console.log(`
1903
+ 🔐 Gemini 구독 인증 (OAuth)
1904
+
1905
+ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1906
+ 브라우저에서 Google 계정으로 로그인하세요.
1907
1907
  `);
1908
1908
  try {
1909
1909
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -1918,20 +1918,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1918
1918
  expires: tokens.expires,
1919
1919
  projectId: tokens.projectId,
1920
1920
  });
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
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
1935
1935
  `);
1936
1936
  // config.json 업데이트
1937
1937
  const projectRoot = process.cwd();
@@ -1958,30 +1958,30 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1958
1958
  const mcpPath = path.join(__dirname, '../lib/gemini-mcp.js');
1959
1959
  unregisterMcp('vibe-gemini');
1960
1960
  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: 빠른 질문
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: 빠른 질문
1969
1969
  `);
1970
1970
  }
1971
1971
  catch (mcpError) {
1972
- console.log(`
1973
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1972
+ console.log(`
1973
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1974
1974
  `);
1975
1975
  }
1976
1976
  process.exit(0);
1977
1977
  }
1978
1978
  catch (error) {
1979
- console.error(`
1980
- ❌ Gemini 인증 실패
1981
-
1982
- 오류: ${error.message}
1983
-
1984
- 다시 시도하려면: vibe gemini --auth
1979
+ console.error(`
1980
+ ❌ Gemini 인증 실패
1981
+
1982
+ 오류: ${error.message}
1983
+
1984
+ 다시 시도하려면: vibe gemini --auth
1985
1985
  `);
1986
1986
  process.exit(1);
1987
1987
  }
@@ -1994,32 +1994,32 @@ function geminiStatus() {
1994
1994
  const { GEMINI_MODELS } = require(geminiApiPath);
1995
1995
  const accounts = storage.getAllAccounts();
1996
1996
  if (accounts.length === 0) {
1997
- console.log(`
1998
- 📊 Gemini 인증 상태
1999
-
2000
- 인증된 계정 없음
2001
-
2002
- 로그인: vibe gemini --auth
1997
+ console.log(`
1998
+ 📊 Gemini 인증 상태
1999
+
2000
+ 인증된 계정 없음
2001
+
2002
+ 로그인: vibe gemini --auth
2003
2003
  `);
2004
2004
  return;
2005
2005
  }
2006
2006
  const activeAccount = storage.getActiveAccount();
2007
2007
  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
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
2023
2023
  `);
2024
2024
  }
2025
2025
  catch (error) {
@@ -2036,12 +2036,12 @@ function geminiLogout() {
2036
2036
  return;
2037
2037
  }
2038
2038
  storage.clearAccounts();
2039
- console.log(`
2040
- ✅ Gemini 로그아웃 완료
2041
-
2042
- ${activeAccount.email} 계정이 제거되었습니다.
2043
-
2044
- 다시 로그인: vibe gemini --auth
2039
+ console.log(`
2040
+ ✅ Gemini 로그아웃 완료
2041
+
2042
+ ${activeAccount.email} 계정이 제거되었습니다.
2043
+
2044
+ 다시 로그인: vibe gemini --auth
2045
2045
  `);
2046
2046
  // config.json 업데이트
2047
2047
  const projectRoot = process.cwd();
@@ -2069,53 +2069,53 @@ ${activeAccount.email} 계정이 제거되었습니다.
2069
2069
  // Info Commands
2070
2070
  // ============================================================================
2071
2071
  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
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
2119
2119
  `);
2120
2120
  }
2121
2121
  function showStatus() {
@@ -2133,33 +2133,33 @@ function showStatus() {
2133
2133
  }
2134
2134
  const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
2135
2135
  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 제거
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 제거
2163
2163
  `);
2164
2164
  }
2165
2165
  function showVersion() {
@@ -2290,20 +2290,20 @@ switch (command) {
2290
2290
  showHelp();
2291
2291
  break;
2292
2292
  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
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
2307
2307
  `);
2308
2308
  process.exit(1);
2309
2309
  }