@su-record/vibe 2.4.4 → 2.4.6

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 (99) hide show
  1. package/.claude/settings.json +48 -48
  2. package/.claude/settings.local.json +24 -24
  3. package/.claude/vibe/constitution.md +184 -184
  4. package/.claude/vibe/rules/core/communication-guide.md +104 -104
  5. package/.claude/vibe/rules/core/development-philosophy.md +52 -52
  6. package/.claude/vibe/rules/core/quick-start.md +120 -120
  7. package/.claude/vibe/rules/languages/dart-flutter.md +509 -509
  8. package/.claude/vibe/rules/languages/go.md +396 -396
  9. package/.claude/vibe/rules/languages/java-spring.md +586 -586
  10. package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
  11. package/.claude/vibe/rules/languages/python-django.md +371 -371
  12. package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
  13. package/.claude/vibe/rules/languages/rust.md +425 -425
  14. package/.claude/vibe/rules/languages/swift-ios.md +516 -516
  15. package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
  16. package/.claude/vibe/rules/languages/typescript-node.md +375 -375
  17. package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
  18. package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
  19. package/.claude/vibe/rules/languages/typescript-react.md +525 -525
  20. package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
  21. package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
  22. package/.claude/vibe/rules/quality/checklist.md +276 -276
  23. package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
  24. package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
  25. package/.claude/vibe/rules/standards/code-structure.md +291 -291
  26. package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
  27. package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
  28. package/.claude/vibe/setup.sh +31 -31
  29. package/.claude/vibe/templates/constitution-template.md +184 -184
  30. package/.claude/vibe/templates/contract-backend-template.md +517 -517
  31. package/.claude/vibe/templates/contract-frontend-template.md +594 -594
  32. package/.claude/vibe/templates/feature-template.md +96 -96
  33. package/.claude/vibe/templates/spec-template.md +199 -199
  34. package/CLAUDE.md +345 -345
  35. package/LICENSE +21 -21
  36. package/README.md +164 -164
  37. package/agents/compounder.md +261 -261
  38. package/agents/diagrammer.md +178 -178
  39. package/agents/e2e-tester.md +266 -266
  40. package/agents/explorer.md +48 -48
  41. package/agents/implementer.md +53 -53
  42. package/agents/research/best-practices-agent.md +139 -139
  43. package/agents/research/codebase-patterns-agent.md +147 -147
  44. package/agents/research/framework-docs-agent.md +181 -181
  45. package/agents/research/security-advisory-agent.md +167 -167
  46. package/agents/review/architecture-reviewer.md +107 -107
  47. package/agents/review/complexity-reviewer.md +116 -116
  48. package/agents/review/data-integrity-reviewer.md +88 -88
  49. package/agents/review/git-history-reviewer.md +103 -103
  50. package/agents/review/performance-reviewer.md +86 -86
  51. package/agents/review/python-reviewer.md +152 -152
  52. package/agents/review/rails-reviewer.md +139 -139
  53. package/agents/review/react-reviewer.md +144 -144
  54. package/agents/review/security-reviewer.md +80 -80
  55. package/agents/review/simplicity-reviewer.md +140 -140
  56. package/agents/review/test-coverage-reviewer.md +116 -116
  57. package/agents/review/typescript-reviewer.md +127 -127
  58. package/agents/searcher.md +54 -54
  59. package/agents/simplifier.md +119 -119
  60. package/agents/tester.md +49 -49
  61. package/agents/ui-previewer.md +137 -137
  62. package/commands/vibe.analyze.md +260 -260
  63. package/commands/vibe.reason.md +223 -223
  64. package/commands/vibe.review.md +213 -213
  65. package/commands/vibe.run.md +935 -842
  66. package/commands/vibe.spec.md +442 -405
  67. package/commands/vibe.utils.md +101 -101
  68. package/commands/vibe.verify.md +282 -282
  69. package/dist/cli/index.js +386 -386
  70. package/dist/lib/MemoryManager.js +92 -92
  71. package/dist/lib/PythonParser.js +108 -108
  72. package/dist/lib/gemini-mcp.js +15 -15
  73. package/dist/lib/gemini-oauth.js +35 -35
  74. package/dist/lib/gpt-mcp.js +17 -17
  75. package/dist/lib/gpt-oauth.js +44 -44
  76. package/dist/orchestrator/orchestrator.js +12 -12
  77. package/dist/orchestrator/parallelResearch.js +24 -24
  78. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  79. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  80. package/dist/tools/memory/getMemoryGraph.js +12 -12
  81. package/dist/tools/memory/getSessionContext.js +9 -9
  82. package/dist/tools/memory/linkMemories.js +14 -14
  83. package/dist/tools/memory/listMemories.js +4 -4
  84. package/dist/tools/memory/recallMemory.js +4 -4
  85. package/dist/tools/memory/saveMemory.js +4 -4
  86. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  87. package/dist/tools/planning/generatePrd.js +46 -46
  88. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  89. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  90. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  91. package/hooks/hooks.json +189 -189
  92. package/package.json +85 -85
  93. package/skills/context7-usage.md +82 -82
  94. package/skills/git-worktree.md +181 -181
  95. package/skills/multi-llm-orchestration.md +97 -97
  96. package/skills/parallel-research.md +77 -77
  97. package/skills/priority-todos.md +239 -239
  98. package/skills/tool-fallback.md +126 -126
  99. package/skills/vibe-capabilities.md +127 -127
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) {
@@ -1122,42 +1122,42 @@ async function init(projectName) {
1122
1122
  // 협업자 자동 설치 설정
1123
1123
  setupCollaboratorAutoInstall(projectRoot);
1124
1124
  // 완료 메시지
1125
- log(`
1126
- ✅ vibe 초기화 완료!
1127
-
1128
- ${isNewProject ? `프로젝트 위치:
1129
- ${projectRoot}/
1130
-
1131
- ` : ''}생성된 구조:
1132
- CLAUDE.md # 프로젝트 컨텍스트
1133
- .claude/
1134
- ├── commands/ # 슬래시 커맨드 (7개)
1135
- ├── agents/ # 서브에이전트
1136
- ├── skills/ # 자동 활성화 스킬 (7개)
1137
- ├── settings.json # Hooks 설정 (저장소 공유)
1138
- └── vibe/
1139
- ├── config.json # 프로젝트 설정
1140
- ├── constitution.md # 프로젝트 원칙
1141
- ├── setup.sh # 협업자 설치 스크립트
1142
- ├── rules/ # 코딩 규칙
1143
- │ ├── core/ # 핵심 원칙
1144
- │ ├── quality/ # 품질 체크리스트
1145
- │ └── languages/ # 언어별 규칙
1146
- ├── specs/ # SPEC 문서들
1147
- └── features/ # BDD Feature 파일들
1148
-
1149
- 내장 도구: ✓ (35+)
1150
- 협업자 자동 설치: ✓
1151
-
1152
- ${formatLLMStatus()}
1153
-
1154
- 사용법:
1155
- /vibe.spec "기능명" SPEC 작성 (대화형)
1156
- /vibe.run "기능명" 구현 실행
1157
- /vibe.verify "기능명" 검증
1158
-
1159
- 다음 단계:
1160
- ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1125
+ log(`
1126
+ ✅ vibe 초기화 완료!
1127
+
1128
+ ${isNewProject ? `프로젝트 위치:
1129
+ ${projectRoot}/
1130
+
1131
+ ` : ''}생성된 구조:
1132
+ CLAUDE.md # 프로젝트 컨텍스트
1133
+ .claude/
1134
+ ├── commands/ # 슬래시 커맨드 (7개)
1135
+ ├── agents/ # 서브에이전트
1136
+ ├── skills/ # 자동 활성화 스킬 (7개)
1137
+ ├── settings.json # Hooks 설정 (저장소 공유)
1138
+ └── vibe/
1139
+ ├── config.json # 프로젝트 설정
1140
+ ├── constitution.md # 프로젝트 원칙
1141
+ ├── setup.sh # 협업자 설치 스크립트
1142
+ ├── rules/ # 코딩 규칙
1143
+ │ ├── core/ # 핵심 원칙
1144
+ │ ├── quality/ # 품질 체크리스트
1145
+ │ └── languages/ # 언어별 규칙
1146
+ ├── specs/ # SPEC 문서들
1147
+ └── features/ # BDD Feature 파일들
1148
+
1149
+ 내장 도구: ✓ (35+)
1150
+ 협업자 자동 설치: ✓
1151
+
1152
+ ${formatLLMStatus()}
1153
+
1154
+ 사용법:
1155
+ /vibe.spec "기능명" SPEC 작성 (대화형)
1156
+ /vibe.run "기능명" 구현 실행
1157
+ /vibe.verify "기능명" 검증
1158
+
1159
+ 다음 단계:
1160
+ ${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
1161
1161
  `);
1162
1162
  }
1163
1163
  catch (error) {
@@ -1587,16 +1587,16 @@ async function update() {
1587
1587
  }
1588
1588
  }
1589
1589
  const packageJson = getPackageJson();
1590
- log(`
1591
- ✅ vibe 업데이트 완료! (v${packageJson.version})
1592
-
1593
- 업데이트된 항목:
1594
- - 슬래시 커맨드 (7개)
1595
- - 코딩 규칙 (.claude/vibe/rules/)
1596
- - 서브에이전트 (.claude/agents/)
1597
- - Hooks 설정
1598
-
1599
- ${formatLLMStatus()}
1590
+ log(`
1591
+ ✅ vibe 업데이트 완료! (v${packageJson.version})
1592
+
1593
+ 업데이트된 항목:
1594
+ - 슬래시 커맨드 (7개)
1595
+ - 코딩 규칙 (.claude/vibe/rules/)
1596
+ - 서브에이전트 (.claude/agents/)
1597
+ - Hooks 설정
1598
+
1599
+ ${formatLLMStatus()}
1600
1600
  `);
1601
1601
  }
1602
1602
  catch (error) {
@@ -1667,17 +1667,17 @@ function remove() {
1667
1667
  }
1668
1668
  catch (e) { }
1669
1669
  }
1670
- console.log(`
1671
- ✅ vibe 제거 완료!
1672
-
1673
- 제거된 항목:
1674
- - MCP 서버 (vibe, context7)
1675
- - .claude/vibe/ 폴더
1676
- - 슬래시 커맨드 (7개)
1677
- - 서브에이전트 (5개)
1678
- - Hooks 설정
1679
-
1680
- 다시 설치하려면: vibe init
1670
+ console.log(`
1671
+ ✅ vibe 제거 완료!
1672
+
1673
+ 제거된 항목:
1674
+ - MCP 서버 (vibe, context7)
1675
+ - .claude/vibe/ 폴더
1676
+ - 슬래시 커맨드 (7개)
1677
+ - 서브에이전트 (5개)
1678
+ - Hooks 설정
1679
+
1680
+ 다시 설치하려면: vibe init
1681
1681
  `);
1682
1682
  }
1683
1683
  // ============================================================================
@@ -1685,13 +1685,13 @@ function remove() {
1685
1685
  // ============================================================================
1686
1686
  function setupExternalLLM(llmType, apiKey) {
1687
1687
  if (!apiKey) {
1688
- console.log(`
1689
- ❌ API 키가 필요합니다.
1690
-
1691
- 사용법:
1692
- vibe ${llmType} <api-key>
1693
-
1694
- ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1688
+ console.log(`
1689
+ ❌ API 키가 필요합니다.
1690
+
1691
+ 사용법:
1692
+ vibe ${llmType} <api-key>
1693
+
1694
+ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
1695
1695
  `);
1696
1696
  return;
1697
1697
  }
@@ -1724,20 +1724,20 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
1724
1724
  args: ['-y', llmConfig.package],
1725
1725
  env: { [envKey]: apiKey }
1726
1726
  });
1727
- console.log(`
1728
- ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1729
-
1730
- 역할: ${llmConfig.description}
1731
- MCP: ${llmConfig.name}
1732
-
1733
- 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1734
-
1735
- 비활성화: vibe remove ${llmType}
1727
+ console.log(`
1728
+ ✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
1729
+
1730
+ 역할: ${llmConfig.description}
1731
+ MCP: ${llmConfig.name}
1732
+
1733
+ 모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
1734
+
1735
+ 비활성화: vibe remove ${llmType}
1736
1736
  `);
1737
1737
  }
1738
1738
  catch (e) {
1739
- console.log(`
1740
- ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1739
+ console.log(`
1740
+ ⚠️ MCP 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1741
1741
  `);
1742
1742
  }
1743
1743
  }
@@ -1764,11 +1764,11 @@ function removeExternalLLM(llmType) {
1764
1764
  // GPT OAuth Commands
1765
1765
  // ============================================================================
1766
1766
  async function gptAuth() {
1767
- console.log(`
1768
- 🔐 GPT Plus/Pro 인증 (OAuth)
1769
-
1770
- ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1771
- 브라우저에서 OpenAI 계정으로 로그인하세요.
1767
+ console.log(`
1768
+ 🔐 GPT Plus/Pro 인증 (OAuth)
1769
+
1770
+ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
1771
+ 브라우저에서 OpenAI 계정으로 로그인하세요.
1772
1772
  `);
1773
1773
  try {
1774
1774
  const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
@@ -1784,17 +1784,17 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1784
1784
  expires: tokens.expires,
1785
1785
  accountId: tokens.accountId,
1786
1786
  });
1787
- console.log(`
1788
- ✅ GPT 인증 완료!
1789
-
1790
- 계정: ${tokens.email}
1791
- 계정 ID: ${tokens.accountId || '(자동 감지)'}
1792
-
1793
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1794
- 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1795
-
1796
- 상태 확인: vibe status gpt
1797
- 로그아웃: vibe logout gpt
1787
+ console.log(`
1788
+ ✅ GPT 인증 완료!
1789
+
1790
+ 계정: ${tokens.email}
1791
+ 계정 ID: ${tokens.accountId || '(자동 감지)'}
1792
+
1793
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1794
+ 구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
1795
+
1796
+ 상태 확인: vibe status gpt
1797
+ 로그아웃: vibe logout gpt
1798
1798
  `);
1799
1799
  // config.json 업데이트
1800
1800
  const projectRoot = process.cwd();
@@ -1821,30 +1821,30 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
1821
1821
  const mcpPath = path.join(__dirname, '../lib/gpt-mcp.js');
1822
1822
  unregisterMcp('vibe-gpt');
1823
1823
  registerMcp('vibe-gpt', { command: 'node', args: [mcpPath] });
1824
- console.log(`
1825
- ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1826
-
1827
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1828
- - gpt_chat: GPT에 질문
1829
- - gpt_analyze_architecture: 아키텍처 분석
1830
- - gpt_debug: 디버깅
1831
- - gpt_quick_ask: 빠른 질문
1824
+ console.log(`
1825
+ ✅ vibe-gpt MCP 서버 등록 완료! (전역)
1826
+
1827
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
1828
+ - gpt_chat: GPT에 질문
1829
+ - gpt_analyze_architecture: 아키텍처 분석
1830
+ - gpt_debug: 디버깅
1831
+ - gpt_quick_ask: 빠른 질문
1832
1832
  `);
1833
1833
  }
1834
1834
  catch (mcpError) {
1835
- console.log(`
1836
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1835
+ console.log(`
1836
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
1837
1837
  `);
1838
1838
  }
1839
1839
  process.exit(0);
1840
1840
  }
1841
1841
  catch (error) {
1842
- console.error(`
1843
- ❌ GPT 인증 실패
1844
-
1845
- 오류: ${error.message}
1846
-
1847
- 다시 시도하려면: vibe gpt --auth
1842
+ console.error(`
1843
+ ❌ GPT 인증 실패
1844
+
1845
+ 오류: ${error.message}
1846
+
1847
+ 다시 시도하려면: vibe gpt --auth
1848
1848
  `);
1849
1849
  process.exit(1);
1850
1850
  }
@@ -1855,31 +1855,31 @@ function gptStatus() {
1855
1855
  const storage = require(gptStoragePath);
1856
1856
  const accounts = storage.getAllAccounts();
1857
1857
  if (accounts.length === 0) {
1858
- console.log(`
1859
- 📊 GPT 인증 상태
1860
-
1861
- 인증된 계정 없음
1862
-
1863
- 로그인: vibe gpt --auth
1858
+ console.log(`
1859
+ 📊 GPT 인증 상태
1860
+
1861
+ 인증된 계정 없음
1862
+
1863
+ 로그인: vibe gpt --auth
1864
1864
  `);
1865
1865
  return;
1866
1866
  }
1867
1867
  const activeAccount = storage.getActiveAccount();
1868
1868
  const isExpired = storage.isTokenExpired(activeAccount);
1869
- console.log(`
1870
- 📊 GPT 인증 상태
1871
-
1872
- 활성 계정: ${activeAccount.email}
1873
- 계정 ID: ${activeAccount.accountId || '(없음)'}
1874
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1875
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1876
-
1877
- 등록된 계정 (${accounts.length}개):
1878
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1879
-
1880
- ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1881
-
1882
- 로그아웃: vibe logout gpt
1869
+ console.log(`
1870
+ 📊 GPT 인증 상태
1871
+
1872
+ 활성 계정: ${activeAccount.email}
1873
+ 계정 ID: ${activeAccount.accountId || '(없음)'}
1874
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
1875
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
1876
+
1877
+ 등록된 계정 (${accounts.length}개):
1878
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
1879
+
1880
+ ⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
1881
+
1882
+ 로그아웃: vibe logout gpt
1883
1883
  `);
1884
1884
  }
1885
1885
  catch (error) {
@@ -1896,12 +1896,12 @@ function gptLogout() {
1896
1896
  return;
1897
1897
  }
1898
1898
  storage.clearAccounts();
1899
- console.log(`
1900
- ✅ GPT 로그아웃 완료
1901
-
1902
- ${activeAccount.email} 계정이 제거되었습니다.
1903
-
1904
- 다시 로그인: vibe gpt --auth
1899
+ console.log(`
1900
+ ✅ GPT 로그아웃 완료
1901
+
1902
+ ${activeAccount.email} 계정이 제거되었습니다.
1903
+
1904
+ 다시 로그인: vibe gpt --auth
1905
1905
  `);
1906
1906
  // config.json 업데이트
1907
1907
  const projectRoot = process.cwd();
@@ -1925,39 +1925,39 @@ ${activeAccount.email} 계정이 제거되었습니다.
1925
1925
  }
1926
1926
  }
1927
1927
  function showAuthHelp() {
1928
- console.log(`
1929
- 🔐 vibe auth - LLM 인증
1930
-
1931
- 사용법:
1932
- vibe auth gpt GPT Plus/Pro OAuth 인증
1933
- vibe auth gpt --key <key> GPT API 키로 설정
1934
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1935
- vibe auth gemini --key <key> Gemini API 키로 설정
1936
-
1937
- 예시:
1938
- vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1939
- vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1940
- vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1928
+ console.log(`
1929
+ 🔐 vibe auth - LLM 인증
1930
+
1931
+ 사용법:
1932
+ vibe auth gpt GPT Plus/Pro OAuth 인증
1933
+ vibe auth gpt --key <key> GPT API 키로 설정
1934
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
1935
+ vibe auth gemini --key <key> Gemini API 키로 설정
1936
+
1937
+ 예시:
1938
+ vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
1939
+ vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
1940
+ vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
1941
1941
  `);
1942
1942
  }
1943
1943
  function showLogoutHelp() {
1944
- console.log(`
1945
- 🚪 vibe logout - LLM 로그아웃
1946
-
1947
- 사용법:
1948
- vibe logout gpt GPT 로그아웃
1949
- vibe logout gemini Gemini 로그아웃
1944
+ console.log(`
1945
+ 🚪 vibe logout - LLM 로그아웃
1946
+
1947
+ 사용법:
1948
+ vibe logout gpt GPT 로그아웃
1949
+ vibe logout gemini Gemini 로그아웃
1950
1950
  `);
1951
1951
  }
1952
1952
  // ============================================================================
1953
1953
  // Gemini OAuth Commands
1954
1954
  // ============================================================================
1955
1955
  async function geminiAuth() {
1956
- console.log(`
1957
- 🔐 Gemini 구독 인증 (OAuth)
1958
-
1959
- Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1960
- 브라우저에서 Google 계정으로 로그인하세요.
1956
+ console.log(`
1957
+ 🔐 Gemini 구독 인증 (OAuth)
1958
+
1959
+ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
1960
+ 브라우저에서 Google 계정으로 로그인하세요.
1961
1961
  `);
1962
1962
  try {
1963
1963
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -1972,20 +1972,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
1972
1972
  expires: tokens.expires,
1973
1973
  projectId: tokens.projectId,
1974
1974
  });
1975
- console.log(`
1976
- ✅ Gemini 인증 완료!
1977
-
1978
- 계정: ${tokens.email}
1979
- 프로젝트: ${tokens.projectId || '(자동 감지)'}
1980
-
1981
- 사용 가능한 모델:
1982
- - Gemini 3 Flash (빠른 응답, 탐색/검색)
1983
- - Gemini 3 Pro (높은 정확도)
1984
-
1985
- /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1986
-
1987
- 상태 확인: vibe status gemini
1988
- 로그아웃: vibe logout gemini
1975
+ console.log(`
1976
+ ✅ Gemini 인증 완료!
1977
+
1978
+ 계정: ${tokens.email}
1979
+ 프로젝트: ${tokens.projectId || '(자동 감지)'}
1980
+
1981
+ 사용 가능한 모델:
1982
+ - Gemini 3 Flash (빠른 응답, 탐색/검색)
1983
+ - Gemini 3 Pro (높은 정확도)
1984
+
1985
+ /vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
1986
+
1987
+ 상태 확인: vibe status gemini
1988
+ 로그아웃: vibe logout gemini
1989
1989
  `);
1990
1990
  // config.json 업데이트
1991
1991
  const projectRoot = process.cwd();
@@ -2012,30 +2012,30 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
2012
2012
  const mcpPath = path.join(__dirname, '../lib/gemini-mcp.js');
2013
2013
  unregisterMcp('vibe-gemini');
2014
2014
  registerMcp('vibe-gemini', { command: 'node', args: [mcpPath] });
2015
- console.log(`
2016
- ✅ vibe-gemini MCP 서버 등록 완료! (전역)
2017
-
2018
- 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
2019
- - gemini_chat: Gemini에 질문
2020
- - gemini_analyze_code: 코드 분석
2021
- - gemini_review_ui: UI/UX 리뷰
2022
- - gemini_quick_ask: 빠른 질문
2015
+ console.log(`
2016
+ ✅ vibe-gemini MCP 서버 등록 완료! (전역)
2017
+
2018
+ 이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
2019
+ - gemini_chat: Gemini에 질문
2020
+ - gemini_analyze_code: 코드 분석
2021
+ - gemini_review_ui: UI/UX 리뷰
2022
+ - gemini_quick_ask: 빠른 질문
2023
2023
  `);
2024
2024
  }
2025
2025
  catch (mcpError) {
2026
- console.log(`
2027
- ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
2026
+ console.log(`
2027
+ ⚠️ MCP 서버 등록 실패. ~/.claude/settings.json에 수동으로 추가하세요.
2028
2028
  `);
2029
2029
  }
2030
2030
  process.exit(0);
2031
2031
  }
2032
2032
  catch (error) {
2033
- console.error(`
2034
- ❌ Gemini 인증 실패
2035
-
2036
- 오류: ${error.message}
2037
-
2038
- 다시 시도하려면: vibe gemini --auth
2033
+ console.error(`
2034
+ ❌ Gemini 인증 실패
2035
+
2036
+ 오류: ${error.message}
2037
+
2038
+ 다시 시도하려면: vibe gemini --auth
2039
2039
  `);
2040
2040
  process.exit(1);
2041
2041
  }
@@ -2048,32 +2048,32 @@ function geminiStatus() {
2048
2048
  const { GEMINI_MODELS } = require(geminiApiPath);
2049
2049
  const accounts = storage.getAllAccounts();
2050
2050
  if (accounts.length === 0) {
2051
- console.log(`
2052
- 📊 Gemini 인증 상태
2053
-
2054
- 인증된 계정 없음
2055
-
2056
- 로그인: vibe gemini --auth
2051
+ console.log(`
2052
+ 📊 Gemini 인증 상태
2053
+
2054
+ 인증된 계정 없음
2055
+
2056
+ 로그인: vibe gemini --auth
2057
2057
  `);
2058
2058
  return;
2059
2059
  }
2060
2060
  const activeAccount = storage.getActiveAccount();
2061
2061
  const isExpired = storage.isTokenExpired(activeAccount);
2062
- console.log(`
2063
- 📊 Gemini 인증 상태
2064
-
2065
- 활성 계정: ${activeAccount.email}
2066
- 프로젝트: ${activeAccount.projectId || '(자동)'}
2067
- 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
2068
- 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
2069
-
2070
- 등록된 계정 (${accounts.length}개):
2071
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
2072
-
2073
- 사용 가능한 모델:
2074
- ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
2075
-
2076
- 로그아웃: vibe logout gemini
2062
+ console.log(`
2063
+ 📊 Gemini 인증 상태
2064
+
2065
+ 활성 계정: ${activeAccount.email}
2066
+ 프로젝트: ${activeAccount.projectId || '(자동)'}
2067
+ 토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
2068
+ 마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
2069
+
2070
+ 등록된 계정 (${accounts.length}개):
2071
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
2072
+
2073
+ 사용 가능한 모델:
2074
+ ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
2075
+
2076
+ 로그아웃: vibe logout gemini
2077
2077
  `);
2078
2078
  }
2079
2079
  catch (error) {
@@ -2090,12 +2090,12 @@ function geminiLogout() {
2090
2090
  return;
2091
2091
  }
2092
2092
  storage.clearAccounts();
2093
- console.log(`
2094
- ✅ Gemini 로그아웃 완료
2095
-
2096
- ${activeAccount.email} 계정이 제거되었습니다.
2097
-
2098
- 다시 로그인: vibe gemini --auth
2093
+ console.log(`
2094
+ ✅ Gemini 로그아웃 완료
2095
+
2096
+ ${activeAccount.email} 계정이 제거되었습니다.
2097
+
2098
+ 다시 로그인: vibe gemini --auth
2099
2099
  `);
2100
2100
  // config.json 업데이트
2101
2101
  const projectRoot = process.cwd();
@@ -2123,53 +2123,53 @@ ${activeAccount.email} 계정이 제거되었습니다.
2123
2123
  // Info Commands
2124
2124
  // ============================================================================
2125
2125
  function showHelp() {
2126
- console.log(`
2127
- 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2128
-
2129
- 기본 명령어:
2130
- vibe init [project] 프로젝트 초기화
2131
- vibe update 설정 업데이트
2132
- vibe status 현재 설정 상태
2133
- vibe help 도움말
2134
- vibe version 버전 정보
2135
-
2136
- 외부 LLM 인증:
2137
- vibe auth gpt GPT Plus/Pro OAuth 인증
2138
- vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2139
- vibe auth gpt --key <key> GPT API 키 설정
2140
- vibe auth gemini --key <key> Gemini API 키 설정
2141
-
2142
- 상태 및 관리:
2143
- vibe status 전체 상태 확인
2144
- vibe status gpt GPT 인증 상태 확인
2145
- vibe status gemini Gemini 인증 상태 확인
2146
- vibe logout gpt GPT 로그아웃
2147
- vibe logout gemini Gemini 로그아웃
2148
- vibe remove gpt GPT 제거
2149
- vibe remove gemini Gemini 제거
2150
- vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2151
-
2152
- Claude Code 슬래시 커맨드:
2153
- /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2154
- /vibe.run "기능명" 구현 실행
2155
- /vibe.verify "기능명" 검증
2156
- /vibe.reason "문제" 체계적 추론
2157
- /vibe.analyze 프로젝트 분석
2158
- /vibe.ui "설명" UI 미리보기
2159
- /vibe.diagram 다이어그램 생성
2160
-
2161
- 모델 오케스트레이션:
2162
- Opus 4.5 오케스트레이터 (메인)
2163
- Sonnet 4 구현
2164
- Haiku 4.5 코드 탐색
2165
- GPT 5.2 아키텍처/디버깅 (선택적)
2166
- Gemini 3 UI/UX 설계 (선택적)
2167
-
2168
- Workflow:
2169
- /vibe.spec → /vibe.run → /vibe.verify
2170
-
2171
- 문서:
2172
- https://github.com/su-record/vibe
2126
+ console.log(`
2127
+ 📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
2128
+
2129
+ 기본 명령어:
2130
+ vibe init [project] 프로젝트 초기화
2131
+ vibe update 설정 업데이트
2132
+ vibe status 현재 설정 상태
2133
+ vibe help 도움말
2134
+ vibe version 버전 정보
2135
+
2136
+ 외부 LLM 인증:
2137
+ vibe auth gpt GPT Plus/Pro OAuth 인증
2138
+ vibe auth gemini Gemini 구독 OAuth 인증 (권장)
2139
+ vibe auth gpt --key <key> GPT API 키 설정
2140
+ vibe auth gemini --key <key> Gemini API 키 설정
2141
+
2142
+ 상태 및 관리:
2143
+ vibe status 전체 상태 확인
2144
+ vibe status gpt GPT 인증 상태 확인
2145
+ vibe status gemini Gemini 인증 상태 확인
2146
+ vibe logout gpt GPT 로그아웃
2147
+ vibe logout gemini Gemini 로그아웃
2148
+ vibe remove gpt GPT 제거
2149
+ vibe remove gemini Gemini 제거
2150
+ vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
2151
+
2152
+ Claude Code 슬래시 커맨드:
2153
+ /vibe.spec "기능명" SPEC 작성 (PTCF 구조)
2154
+ /vibe.run "기능명" 구현 실행
2155
+ /vibe.verify "기능명" 검증
2156
+ /vibe.reason "문제" 체계적 추론
2157
+ /vibe.analyze 프로젝트 분석
2158
+ /vibe.ui "설명" UI 미리보기
2159
+ /vibe.diagram 다이어그램 생성
2160
+
2161
+ 모델 오케스트레이션:
2162
+ Opus 4.5 오케스트레이터 (메인)
2163
+ Sonnet 4 구현
2164
+ Haiku 4.5 코드 탐색
2165
+ GPT 5.2 아키텍처/디버깅 (선택적)
2166
+ Gemini 3 UI/UX 설계 (선택적)
2167
+
2168
+ Workflow:
2169
+ /vibe.spec → /vibe.run → /vibe.verify
2170
+
2171
+ 문서:
2172
+ https://github.com/su-record/vibe
2173
2173
  `);
2174
2174
  }
2175
2175
  function showStatus() {
@@ -2187,33 +2187,33 @@ function showStatus() {
2187
2187
  }
2188
2188
  const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
2189
2189
  const geminiStatus = config.models?.gemini?.enabled ? '✅ 활성' : '⬚ 비활성';
2190
- console.log(`
2191
- 📊 Vibe 상태 (v${packageJson.version})
2192
-
2193
- 프로젝트: ${projectRoot}
2194
- 언어: ${config.language || 'ko'}
2195
-
2196
- 모델 오케스트레이션:
2197
- ┌─────────────────────────────────────────┐
2198
- │ Opus 4.5 오케스트레이터 │
2199
- ├─────────────────────────────────────────┤
2200
- │ Sonnet 4 구현 │
2201
- │ Haiku 4.5 코드 탐색 │
2202
- ├─────────────────────────────────────────┤
2203
- │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2204
- │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2205
- └─────────────────────────────────────────┘
2206
-
2207
- MCP 서버:
2208
- vibe-gemini Gemini API
2209
- vibe-gpt GPT API
2210
- context7 라이브러리 문서 검색
2211
-
2212
- 외부 LLM 설정:
2213
- vibe auth gpt GPT 활성화 (OAuth)
2214
- vibe auth gemini Gemini 활성화 (OAuth)
2215
- vibe remove gpt GPT 제거
2216
- vibe remove gemini Gemini 제거
2190
+ console.log(`
2191
+ 📊 Vibe 상태 (v${packageJson.version})
2192
+
2193
+ 프로젝트: ${projectRoot}
2194
+ 언어: ${config.language || 'ko'}
2195
+
2196
+ 모델 오케스트레이션:
2197
+ ┌─────────────────────────────────────────┐
2198
+ │ Opus 4.5 오케스트레이터 │
2199
+ ├─────────────────────────────────────────┤
2200
+ │ Sonnet 4 구현 │
2201
+ │ Haiku 4.5 코드 탐색 │
2202
+ ├─────────────────────────────────────────┤
2203
+ │ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
2204
+ │ Gemini 3 ${geminiStatus} UI/UX 설계 │
2205
+ └─────────────────────────────────────────┘
2206
+
2207
+ MCP 서버:
2208
+ vibe-gemini Gemini API
2209
+ vibe-gpt GPT API
2210
+ context7 라이브러리 문서 검색
2211
+
2212
+ 외부 LLM 설정:
2213
+ vibe auth gpt GPT 활성화 (OAuth)
2214
+ vibe auth gemini Gemini 활성화 (OAuth)
2215
+ vibe remove gpt GPT 제거
2216
+ vibe remove gemini Gemini 제거
2217
2217
  `);
2218
2218
  }
2219
2219
  function showVersion() {
@@ -2344,20 +2344,20 @@ switch (command) {
2344
2344
  showHelp();
2345
2345
  break;
2346
2346
  default:
2347
- console.log(`
2348
- ❌ 알 수 없는 명령어: ${command}
2349
-
2350
- 사용 가능한 명령어:
2351
- vibe init 프로젝트 초기화
2352
- vibe update 설정 업데이트
2353
- vibe auth LLM 인증 (gpt, gemini)
2354
- vibe status 상태 확인
2355
- vibe logout 로그아웃
2356
- vibe remove 제거
2357
- vibe help 도움말
2358
- vibe version 버전 정보
2359
-
2360
- 사용법: vibe help
2347
+ console.log(`
2348
+ ❌ 알 수 없는 명령어: ${command}
2349
+
2350
+ 사용 가능한 명령어:
2351
+ vibe init 프로젝트 초기화
2352
+ vibe update 설정 업데이트
2353
+ vibe auth LLM 인증 (gpt, gemini)
2354
+ vibe status 상태 확인
2355
+ vibe logout 로그아웃
2356
+ vibe remove 제거
2357
+ vibe help 도움말
2358
+ vibe version 버전 정보
2359
+
2360
+ 사용법: vibe help
2361
2361
  `);
2362
2362
  process.exit(1);
2363
2363
  }