@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.
- package/.claude/settings.json +48 -48
- package/.claude/settings.local.json +24 -24
- package/.claude/vibe/constitution.md +184 -184
- package/.claude/vibe/rules/core/communication-guide.md +104 -104
- package/.claude/vibe/rules/core/development-philosophy.md +52 -52
- package/.claude/vibe/rules/core/quick-start.md +120 -120
- package/.claude/vibe/rules/languages/dart-flutter.md +509 -509
- package/.claude/vibe/rules/languages/go.md +396 -396
- package/.claude/vibe/rules/languages/java-spring.md +586 -586
- package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
- package/.claude/vibe/rules/languages/python-django.md +371 -371
- package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
- package/.claude/vibe/rules/languages/rust.md +425 -425
- package/.claude/vibe/rules/languages/swift-ios.md +516 -516
- package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
- package/.claude/vibe/rules/languages/typescript-node.md +375 -375
- package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
- package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
- package/.claude/vibe/rules/languages/typescript-react.md +525 -525
- package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
- package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
- package/.claude/vibe/rules/quality/checklist.md +276 -276
- package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
- package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
- package/.claude/vibe/rules/standards/code-structure.md +291 -291
- package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
- package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
- package/.claude/vibe/setup.sh +31 -31
- package/.claude/vibe/templates/constitution-template.md +184 -184
- package/.claude/vibe/templates/contract-backend-template.md +517 -517
- package/.claude/vibe/templates/contract-frontend-template.md +594 -594
- package/.claude/vibe/templates/feature-template.md +96 -96
- package/.claude/vibe/templates/spec-template.md +199 -199
- package/CLAUDE.md +345 -345
- package/LICENSE +21 -21
- package/README.md +164 -164
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer.md +48 -48
- package/agents/implementer.md +53 -53
- package/agents/research/best-practices-agent.md +139 -139
- package/agents/research/codebase-patterns-agent.md +147 -147
- package/agents/research/framework-docs-agent.md +181 -181
- package/agents/research/security-advisory-agent.md +167 -167
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +152 -152
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +119 -119
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +137 -137
- package/commands/vibe.analyze.md +260 -260
- package/commands/vibe.reason.md +223 -223
- package/commands/vibe.review.md +213 -213
- package/commands/vibe.run.md +935 -842
- package/commands/vibe.spec.md +442 -405
- package/commands/vibe.utils.md +101 -101
- package/commands/vibe.verify.md +282 -282
- package/dist/cli/index.js +386 -386
- package/dist/lib/MemoryManager.js +92 -92
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/gemini-mcp.js +15 -15
- package/dist/lib/gemini-oauth.js +35 -35
- package/dist/lib/gpt-mcp.js +17 -17
- package/dist/lib/gpt-oauth.js +44 -44
- package/dist/orchestrator/orchestrator.js +12 -12
- package/dist/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/analytics/getUsageAnalytics.js +12 -12
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
- package/dist/tools/planning/generatePrd.js +46 -46
- package/dist/tools/prompt/enhancePromptGemini.js +160 -160
- package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/hooks/hooks.json +189 -189
- package/package.json +85 -85
- package/skills/context7-usage.md +82 -82
- package/skills/git-worktree.md +181 -181
- package/skills/multi-llm-orchestration.md +97 -97
- package/skills/parallel-research.md +77 -77
- package/skills/priority-todos.md +239 -239
- package/skills/tool-fallback.md +126 -126
- 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
|
}
|