@su-record/vibe 2.0.0 → 2.0.1
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/agents/explorer.md +48 -48
- package/.claude/agents/implementer.md +53 -53
- package/.claude/agents/searcher.md +54 -54
- package/.claude/agents/simplifier.md +119 -119
- package/.claude/agents/tester.md +49 -49
- package/.claude/commands/vibe.analyze.md +239 -239
- package/.claude/commands/vibe.continue.md +88 -88
- package/.claude/commands/vibe.diagram.md +178 -178
- package/.claude/commands/vibe.reason.md +306 -306
- package/.claude/commands/vibe.run.md +760 -760
- package/.claude/commands/vibe.spec.md +339 -339
- package/.claude/commands/vibe.tool.md +153 -153
- package/.claude/commands/vibe.ui.md +137 -137
- package/.claude/commands/vibe.verify.md +238 -238
- package/.claude/settings.json +152 -152
- package/.claude/settings.local.json +4 -57
- package/.vibe/config.json +9 -0
- package/.vibe/constitution.md +184 -184
- package/.vibe/rules/core/communication-guide.md +104 -104
- package/.vibe/rules/core/development-philosophy.md +52 -52
- package/.vibe/rules/core/quick-start.md +120 -120
- package/.vibe/rules/quality/bdd-contract-testing.md +388 -388
- package/.vibe/rules/quality/checklist.md +276 -276
- package/.vibe/rules/quality/testing-strategy.md +437 -437
- package/.vibe/rules/standards/anti-patterns.md +369 -369
- package/.vibe/rules/standards/code-structure.md +291 -291
- package/.vibe/rules/standards/complexity-metrics.md +312 -312
- package/.vibe/rules/standards/naming-conventions.md +198 -198
- package/.vibe/rules/tools/mcp-hi-ai-guide.md +665 -665
- package/.vibe/rules/tools/mcp-workflow.md +51 -51
- package/.vibe/setup.sh +31 -31
- package/CLAUDE.md +122 -122
- package/LICENSE +21 -21
- package/README.md +568 -568
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +391 -406
- package/dist/cli/index.js.map +1 -1
- 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/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/package.json +67 -67
- package/templates/constitution-template.md +184 -184
- package/templates/contract-backend-template.md +517 -517
- package/templates/contract-frontend-template.md +594 -594
- package/templates/feature-template.md +96 -96
- package/templates/hooks-template.json +103 -103
- package/templates/spec-template.md +199 -199
- package/dist/lib/vibe-mcp.d.ts.map +0 -1
- package/dist/lib/vibe-mcp.js.map +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -522,37 +522,37 @@ function setupCollaboratorAutoInstall(projectRoot) {
|
|
|
522
522
|
// 2. .vibe/setup.sh 생성
|
|
523
523
|
const setupShPath = path.join(vibeDir, 'setup.sh');
|
|
524
524
|
if (!fs.existsSync(setupShPath)) {
|
|
525
|
-
const setupScript = `#!/bin/bash
|
|
526
|
-
# Vibe 협업자 자동 설치 스크립트
|
|
527
|
-
# 사용법: ./.vibe/setup.sh
|
|
528
|
-
|
|
529
|
-
set -e
|
|
530
|
-
|
|
531
|
-
echo "🔧 Vibe 설치 확인 중..."
|
|
532
|
-
|
|
533
|
-
# npm/npx 확인
|
|
534
|
-
if ! command -v npx &> /dev/null; then
|
|
535
|
-
echo "❌ Node.js/npm이 설치되어 있지 않습니다."
|
|
536
|
-
echo " https://nodejs.org 에서 설치해주세요."
|
|
537
|
-
exit 1
|
|
538
|
-
fi
|
|
539
|
-
|
|
540
|
-
# vibe 설치 확인 및 업데이트
|
|
541
|
-
if command -v vibe &> /dev/null; then
|
|
542
|
-
echo "✅ Vibe가 이미 설치되어 있습니다."
|
|
543
|
-
vibe update --silent
|
|
544
|
-
echo "✅ Vibe 업데이트 완료!"
|
|
545
|
-
else
|
|
546
|
-
echo "📦 Vibe 설치 중..."
|
|
547
|
-
npm install -g @su-record/vibe
|
|
548
|
-
vibe update --silent
|
|
549
|
-
echo "✅ Vibe 설치 및 설정 완료!"
|
|
550
|
-
fi
|
|
551
|
-
|
|
552
|
-
echo ""
|
|
553
|
-
echo "다음 명령어로 시작하세요:"
|
|
554
|
-
echo " /vibe.spec \\"기능명\\" SPEC 작성"
|
|
555
|
-
echo " /vibe.run \\"기능명\\" 구현 실행"
|
|
525
|
+
const setupScript = `#!/bin/bash
|
|
526
|
+
# Vibe 협업자 자동 설치 스크립트
|
|
527
|
+
# 사용법: ./.vibe/setup.sh
|
|
528
|
+
|
|
529
|
+
set -e
|
|
530
|
+
|
|
531
|
+
echo "🔧 Vibe 설치 확인 중..."
|
|
532
|
+
|
|
533
|
+
# npm/npx 확인
|
|
534
|
+
if ! command -v npx &> /dev/null; then
|
|
535
|
+
echo "❌ Node.js/npm이 설치되어 있지 않습니다."
|
|
536
|
+
echo " https://nodejs.org 에서 설치해주세요."
|
|
537
|
+
exit 1
|
|
538
|
+
fi
|
|
539
|
+
|
|
540
|
+
# vibe 설치 확인 및 업데이트
|
|
541
|
+
if command -v vibe &> /dev/null; then
|
|
542
|
+
echo "✅ Vibe가 이미 설치되어 있습니다."
|
|
543
|
+
vibe update --silent
|
|
544
|
+
echo "✅ Vibe 업데이트 완료!"
|
|
545
|
+
else
|
|
546
|
+
echo "📦 Vibe 설치 중..."
|
|
547
|
+
npm install -g @su-record/vibe
|
|
548
|
+
vibe update --silent
|
|
549
|
+
echo "✅ Vibe 설치 및 설정 완료!"
|
|
550
|
+
fi
|
|
551
|
+
|
|
552
|
+
echo ""
|
|
553
|
+
echo "다음 명령어로 시작하세요:"
|
|
554
|
+
echo " /vibe.spec \\"기능명\\" SPEC 작성"
|
|
555
|
+
echo " /vibe.run \\"기능명\\" 구현 실행"
|
|
556
556
|
`;
|
|
557
557
|
fs.writeFileSync(setupShPath, setupScript);
|
|
558
558
|
fs.chmodSync(setupShPath, '755');
|
|
@@ -560,27 +560,27 @@ echo " /vibe.run \\"기능명\\" 구현 실행"
|
|
|
560
560
|
}
|
|
561
561
|
// 3. README.md에 협업자 안내 추가
|
|
562
562
|
const readmePath = path.join(projectRoot, 'README.md');
|
|
563
|
-
const vibeSetupSection = `
|
|
564
|
-
## Vibe Setup (AI Coding)
|
|
565
|
-
|
|
566
|
-
이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
|
|
567
|
-
|
|
568
|
-
### 협업자 설치
|
|
569
|
-
|
|
570
|
-
\`\`\`bash
|
|
571
|
-
# 전역 설치 (권장)
|
|
572
|
-
npm install -g @su-record/vibe
|
|
573
|
-
vibe update
|
|
574
|
-
|
|
575
|
-
# 또는 setup 스크립트 실행
|
|
576
|
-
./.vibe/setup.sh
|
|
577
|
-
\`\`\`
|
|
578
|
-
|
|
579
|
-
### 사용법
|
|
580
|
-
|
|
581
|
-
Claude Code에서 슬래시 커맨드 사용:
|
|
582
|
-
- \`/vibe.spec "기능명"\` - SPEC 문서 작성
|
|
583
|
-
- \`/vibe.run "기능명"\` - 구현 실행
|
|
563
|
+
const vibeSetupSection = `
|
|
564
|
+
## Vibe Setup (AI Coding)
|
|
565
|
+
|
|
566
|
+
이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
|
|
567
|
+
|
|
568
|
+
### 협업자 설치
|
|
569
|
+
|
|
570
|
+
\`\`\`bash
|
|
571
|
+
# 전역 설치 (권장)
|
|
572
|
+
npm install -g @su-record/vibe
|
|
573
|
+
vibe update
|
|
574
|
+
|
|
575
|
+
# 또는 setup 스크립트 실행
|
|
576
|
+
./.vibe/setup.sh
|
|
577
|
+
\`\`\`
|
|
578
|
+
|
|
579
|
+
### 사용법
|
|
580
|
+
|
|
581
|
+
Claude Code에서 슬래시 커맨드 사용:
|
|
582
|
+
- \`/vibe.spec "기능명"\` - SPEC 문서 작성
|
|
583
|
+
- \`/vibe.run "기능명"\` - 구현 실행
|
|
584
584
|
`;
|
|
585
585
|
if (fs.existsSync(readmePath)) {
|
|
586
586
|
const readme = fs.readFileSync(readmePath, 'utf-8');
|
|
@@ -847,41 +847,41 @@ async function init(projectName) {
|
|
|
847
847
|
// 협업자 자동 설치 설정
|
|
848
848
|
setupCollaboratorAutoInstall(projectRoot);
|
|
849
849
|
// 완료 메시지
|
|
850
|
-
log(`
|
|
851
|
-
✅ vibe 초기화 완료!
|
|
852
|
-
|
|
853
|
-
${isNewProject ? `프로젝트 위치:
|
|
854
|
-
${projectRoot}/
|
|
855
|
-
|
|
856
|
-
` : ''}생성된 구조:
|
|
857
|
-
CLAUDE.md # 프로젝트 컨텍스트
|
|
858
|
-
.claude/
|
|
859
|
-
├── commands/ # 슬래시 커맨드 (7개)
|
|
860
|
-
├── agents/ # 서브에이전트 (simplifier)
|
|
861
|
-
└── settings.json # Hooks 설정 (저장소 공유)
|
|
862
|
-
.vibe/
|
|
863
|
-
├── config.json # 프로젝트 설정
|
|
864
|
-
├── constitution.md # 프로젝트 원칙
|
|
865
|
-
├── setup.sh # 협업자 설치 스크립트
|
|
866
|
-
├── rules/ # 코딩 규칙
|
|
867
|
-
│ ├── core/ # 핵심 원칙
|
|
868
|
-
│ ├── quality/ # 품질 체크리스트
|
|
869
|
-
│ └── languages/ # 언어별 규칙
|
|
870
|
-
├── specs/ # SPEC 문서들
|
|
871
|
-
└── features/ # BDD Feature 파일들
|
|
872
|
-
|
|
873
|
-
내장 도구: ✓ (35+)
|
|
874
|
-
협업자 자동 설치: ✓
|
|
875
|
-
|
|
876
|
-
${formatLLMStatus()}
|
|
877
|
-
|
|
878
|
-
사용법:
|
|
879
|
-
/vibe.spec "기능명" SPEC 작성 (대화형)
|
|
880
|
-
/vibe.run "기능명" 구현 실행
|
|
881
|
-
/vibe.verify "기능명" 검증
|
|
882
|
-
|
|
883
|
-
다음 단계:
|
|
884
|
-
${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
|
|
850
|
+
log(`
|
|
851
|
+
✅ vibe 초기화 완료!
|
|
852
|
+
|
|
853
|
+
${isNewProject ? `프로젝트 위치:
|
|
854
|
+
${projectRoot}/
|
|
855
|
+
|
|
856
|
+
` : ''}생성된 구조:
|
|
857
|
+
CLAUDE.md # 프로젝트 컨텍스트
|
|
858
|
+
.claude/
|
|
859
|
+
├── commands/ # 슬래시 커맨드 (7개)
|
|
860
|
+
├── agents/ # 서브에이전트 (simplifier)
|
|
861
|
+
└── settings.json # Hooks 설정 (저장소 공유)
|
|
862
|
+
.vibe/
|
|
863
|
+
├── config.json # 프로젝트 설정
|
|
864
|
+
├── constitution.md # 프로젝트 원칙
|
|
865
|
+
├── setup.sh # 협업자 설치 스크립트
|
|
866
|
+
├── rules/ # 코딩 규칙
|
|
867
|
+
│ ├── core/ # 핵심 원칙
|
|
868
|
+
│ ├── quality/ # 품질 체크리스트
|
|
869
|
+
│ └── languages/ # 언어별 규칙
|
|
870
|
+
├── specs/ # SPEC 문서들
|
|
871
|
+
└── features/ # BDD Feature 파일들
|
|
872
|
+
|
|
873
|
+
내장 도구: ✓ (35+)
|
|
874
|
+
협업자 자동 설치: ✓
|
|
875
|
+
|
|
876
|
+
${formatLLMStatus()}
|
|
877
|
+
|
|
878
|
+
사용법:
|
|
879
|
+
/vibe.spec "기능명" SPEC 작성 (대화형)
|
|
880
|
+
/vibe.run "기능명" 구현 실행
|
|
881
|
+
/vibe.verify "기능명" 검증
|
|
882
|
+
|
|
883
|
+
다음 단계:
|
|
884
|
+
${isNewProject ? `cd ${projectName}\n ` : ''}/vibe.spec "기능명" 으로 시작하세요!
|
|
885
885
|
`);
|
|
886
886
|
}
|
|
887
887
|
catch (error) {
|
|
@@ -1205,16 +1205,16 @@ async function update() {
|
|
|
1205
1205
|
}
|
|
1206
1206
|
}
|
|
1207
1207
|
const packageJson = getPackageJson();
|
|
1208
|
-
log(`
|
|
1209
|
-
✅ vibe 업데이트 완료! (v${packageJson.version})
|
|
1210
|
-
|
|
1211
|
-
업데이트된 항목:
|
|
1212
|
-
- 슬래시 커맨드 (7개)
|
|
1213
|
-
- 코딩 규칙 (.vibe/rules/)
|
|
1214
|
-
- 서브에이전트 (.claude/agents/)
|
|
1215
|
-
- Hooks 설정
|
|
1216
|
-
|
|
1217
|
-
${formatLLMStatus()}
|
|
1208
|
+
log(`
|
|
1209
|
+
✅ vibe 업데이트 완료! (v${packageJson.version})
|
|
1210
|
+
|
|
1211
|
+
업데이트된 항목:
|
|
1212
|
+
- 슬래시 커맨드 (7개)
|
|
1213
|
+
- 코딩 규칙 (.vibe/rules/)
|
|
1214
|
+
- 서브에이전트 (.claude/agents/)
|
|
1215
|
+
- Hooks 설정
|
|
1216
|
+
|
|
1217
|
+
${formatLLMStatus()}
|
|
1218
1218
|
`);
|
|
1219
1219
|
}
|
|
1220
1220
|
catch (error) {
|
|
@@ -1288,17 +1288,17 @@ function remove() {
|
|
|
1288
1288
|
}
|
|
1289
1289
|
catch (e) { }
|
|
1290
1290
|
}
|
|
1291
|
-
console.log(`
|
|
1292
|
-
✅ vibe 제거 완료!
|
|
1293
|
-
|
|
1294
|
-
제거된 항목:
|
|
1295
|
-
- MCP 서버 (vibe, context7)
|
|
1296
|
-
- .vibe/ 폴더
|
|
1297
|
-
- 슬래시 커맨드 (7개)
|
|
1298
|
-
- 서브에이전트 (5개)
|
|
1299
|
-
- Hooks 설정
|
|
1300
|
-
|
|
1301
|
-
다시 설치하려면: vibe init
|
|
1291
|
+
console.log(`
|
|
1292
|
+
✅ vibe 제거 완료!
|
|
1293
|
+
|
|
1294
|
+
제거된 항목:
|
|
1295
|
+
- MCP 서버 (vibe, context7)
|
|
1296
|
+
- .vibe/ 폴더
|
|
1297
|
+
- 슬래시 커맨드 (7개)
|
|
1298
|
+
- 서브에이전트 (5개)
|
|
1299
|
+
- Hooks 설정
|
|
1300
|
+
|
|
1301
|
+
다시 설치하려면: vibe init
|
|
1302
1302
|
`);
|
|
1303
1303
|
}
|
|
1304
1304
|
// ============================================================================
|
|
@@ -1306,13 +1306,13 @@ function remove() {
|
|
|
1306
1306
|
// ============================================================================
|
|
1307
1307
|
function setupExternalLLM(llmType, apiKey) {
|
|
1308
1308
|
if (!apiKey) {
|
|
1309
|
-
console.log(`
|
|
1310
|
-
❌ API 키가 필요합니다.
|
|
1311
|
-
|
|
1312
|
-
사용법:
|
|
1313
|
-
vibe ${llmType} <api-key>
|
|
1314
|
-
|
|
1315
|
-
${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
|
|
1309
|
+
console.log(`
|
|
1310
|
+
❌ API 키가 필요합니다.
|
|
1311
|
+
|
|
1312
|
+
사용법:
|
|
1313
|
+
vibe ${llmType} <api-key>
|
|
1314
|
+
|
|
1315
|
+
${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
|
|
1316
1316
|
`);
|
|
1317
1317
|
return;
|
|
1318
1318
|
}
|
|
@@ -1344,22 +1344,22 @@ ${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : '
|
|
|
1344
1344
|
}
|
|
1345
1345
|
catch (e) { }
|
|
1346
1346
|
execSync(`claude mcp add ${llmConfig.name} -s user -e ${envKey}=${apiKey} -- npx -y ${llmConfig.package}`, { stdio: 'pipe' });
|
|
1347
|
-
console.log(`
|
|
1348
|
-
✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
|
|
1349
|
-
|
|
1350
|
-
역할: ${llmConfig.description}
|
|
1351
|
-
MCP: ${llmConfig.name}
|
|
1352
|
-
|
|
1353
|
-
모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
|
|
1354
|
-
|
|
1355
|
-
비활성화: vibe ${llmType} --remove
|
|
1347
|
+
console.log(`
|
|
1348
|
+
✅ ${llmType.toUpperCase()} 활성화 완료! (전역)
|
|
1349
|
+
|
|
1350
|
+
역할: ${llmConfig.description}
|
|
1351
|
+
MCP: ${llmConfig.name}
|
|
1352
|
+
|
|
1353
|
+
모든 프로젝트에서 /vibe.run 실행 시 자동으로 활용됩니다.
|
|
1354
|
+
|
|
1355
|
+
비활성화: vibe ${llmType} --remove
|
|
1356
1356
|
`);
|
|
1357
1357
|
}
|
|
1358
1358
|
catch (e) {
|
|
1359
|
-
console.log(`
|
|
1360
|
-
⚠️ MCP 등록 실패. 수동으로 등록하세요:
|
|
1361
|
-
|
|
1362
|
-
claude mcp add ${llmConfig.name} -s user -e ${envKey}=<your-key> -- npx -y ${llmConfig.package}
|
|
1359
|
+
console.log(`
|
|
1360
|
+
⚠️ MCP 등록 실패. 수동으로 등록하세요:
|
|
1361
|
+
|
|
1362
|
+
claude mcp add ${llmConfig.name} -s user -e ${envKey}=<your-key> -- npx -y ${llmConfig.package}
|
|
1363
1363
|
`);
|
|
1364
1364
|
}
|
|
1365
1365
|
}
|
|
@@ -1398,11 +1398,11 @@ function removeExternalLLM(llmType) {
|
|
|
1398
1398
|
// GPT OAuth Commands
|
|
1399
1399
|
// ============================================================================
|
|
1400
1400
|
async function gptAuth() {
|
|
1401
|
-
console.log(`
|
|
1402
|
-
🔐 GPT Plus/Pro 인증 (OAuth)
|
|
1403
|
-
|
|
1404
|
-
ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
|
|
1405
|
-
브라우저에서 OpenAI 계정으로 로그인하세요.
|
|
1401
|
+
console.log(`
|
|
1402
|
+
🔐 GPT Plus/Pro 인증 (OAuth)
|
|
1403
|
+
|
|
1404
|
+
ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
|
|
1405
|
+
브라우저에서 OpenAI 계정으로 로그인하세요.
|
|
1406
1406
|
`);
|
|
1407
1407
|
try {
|
|
1408
1408
|
const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
|
|
@@ -1418,17 +1418,17 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
|
|
|
1418
1418
|
expires: tokens.expires,
|
|
1419
1419
|
accountId: tokens.accountId,
|
|
1420
1420
|
});
|
|
1421
|
-
console.log(`
|
|
1422
|
-
✅ GPT 인증 완료!
|
|
1423
|
-
|
|
1424
|
-
계정: ${tokens.email}
|
|
1425
|
-
계정 ID: ${tokens.accountId || '(자동 감지)'}
|
|
1426
|
-
|
|
1427
|
-
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
1428
|
-
구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
|
|
1429
|
-
|
|
1430
|
-
상태 확인: vibe gpt
|
|
1431
|
-
로그아웃: vibe gpt
|
|
1421
|
+
console.log(`
|
|
1422
|
+
✅ GPT 인증 완료!
|
|
1423
|
+
|
|
1424
|
+
계정: ${tokens.email}
|
|
1425
|
+
계정 ID: ${tokens.accountId || '(자동 감지)'}
|
|
1426
|
+
|
|
1427
|
+
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
1428
|
+
구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
|
|
1429
|
+
|
|
1430
|
+
상태 확인: vibe status gpt
|
|
1431
|
+
로그아웃: vibe logout gpt
|
|
1432
1432
|
`);
|
|
1433
1433
|
// config.json 업데이트
|
|
1434
1434
|
const projectRoot = process.cwd();
|
|
@@ -1453,12 +1453,12 @@ ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니
|
|
|
1453
1453
|
process.exit(0);
|
|
1454
1454
|
}
|
|
1455
1455
|
catch (error) {
|
|
1456
|
-
console.error(`
|
|
1457
|
-
❌ GPT 인증 실패
|
|
1458
|
-
|
|
1459
|
-
오류: ${error.message}
|
|
1460
|
-
|
|
1461
|
-
다시 시도하려면: vibe gpt --auth
|
|
1456
|
+
console.error(`
|
|
1457
|
+
❌ GPT 인증 실패
|
|
1458
|
+
|
|
1459
|
+
오류: ${error.message}
|
|
1460
|
+
|
|
1461
|
+
다시 시도하려면: vibe gpt --auth
|
|
1462
1462
|
`);
|
|
1463
1463
|
process.exit(1);
|
|
1464
1464
|
}
|
|
@@ -1469,31 +1469,31 @@ function gptStatus() {
|
|
|
1469
1469
|
const storage = require(gptStoragePath);
|
|
1470
1470
|
const accounts = storage.getAllAccounts();
|
|
1471
1471
|
if (accounts.length === 0) {
|
|
1472
|
-
console.log(`
|
|
1473
|
-
📊 GPT 인증 상태
|
|
1474
|
-
|
|
1475
|
-
인증된 계정 없음
|
|
1476
|
-
|
|
1477
|
-
로그인: vibe gpt --auth
|
|
1472
|
+
console.log(`
|
|
1473
|
+
📊 GPT 인증 상태
|
|
1474
|
+
|
|
1475
|
+
인증된 계정 없음
|
|
1476
|
+
|
|
1477
|
+
로그인: vibe gpt --auth
|
|
1478
1478
|
`);
|
|
1479
1479
|
return;
|
|
1480
1480
|
}
|
|
1481
1481
|
const activeAccount = storage.getActiveAccount();
|
|
1482
1482
|
const isExpired = storage.isTokenExpired(activeAccount);
|
|
1483
|
-
console.log(`
|
|
1484
|
-
📊 GPT 인증 상태
|
|
1485
|
-
|
|
1486
|
-
활성 계정: ${activeAccount.email}
|
|
1487
|
-
계정 ID: ${activeAccount.accountId || '(없음)'}
|
|
1488
|
-
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
1489
|
-
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
1490
|
-
|
|
1491
|
-
등록된 계정 (${accounts.length}개):
|
|
1492
|
-
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
1493
|
-
|
|
1494
|
-
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
1495
|
-
|
|
1496
|
-
로그아웃: vibe gpt
|
|
1483
|
+
console.log(`
|
|
1484
|
+
📊 GPT 인증 상태
|
|
1485
|
+
|
|
1486
|
+
활성 계정: ${activeAccount.email}
|
|
1487
|
+
계정 ID: ${activeAccount.accountId || '(없음)'}
|
|
1488
|
+
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
1489
|
+
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
1490
|
+
|
|
1491
|
+
등록된 계정 (${accounts.length}개):
|
|
1492
|
+
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
1493
|
+
|
|
1494
|
+
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
1495
|
+
|
|
1496
|
+
로그아웃: vibe logout gpt
|
|
1497
1497
|
`);
|
|
1498
1498
|
}
|
|
1499
1499
|
catch (error) {
|
|
@@ -1510,12 +1510,12 @@ function gptLogout() {
|
|
|
1510
1510
|
return;
|
|
1511
1511
|
}
|
|
1512
1512
|
storage.clearAccounts();
|
|
1513
|
-
console.log(`
|
|
1514
|
-
✅ GPT 로그아웃 완료
|
|
1515
|
-
|
|
1516
|
-
${activeAccount.email} 계정이 제거되었습니다.
|
|
1517
|
-
|
|
1518
|
-
다시 로그인: vibe gpt --auth
|
|
1513
|
+
console.log(`
|
|
1514
|
+
✅ GPT 로그아웃 완료
|
|
1515
|
+
|
|
1516
|
+
${activeAccount.email} 계정이 제거되었습니다.
|
|
1517
|
+
|
|
1518
|
+
다시 로그인: vibe gpt --auth
|
|
1519
1519
|
`);
|
|
1520
1520
|
// config.json 업데이트
|
|
1521
1521
|
const projectRoot = process.cwd();
|
|
@@ -1538,40 +1538,40 @@ ${activeAccount.email} 계정이 제거되었습니다.
|
|
|
1538
1538
|
console.error('로그아웃 실패:', error.message);
|
|
1539
1539
|
}
|
|
1540
1540
|
}
|
|
1541
|
-
function
|
|
1542
|
-
console.log(`
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1541
|
+
function showAuthHelp() {
|
|
1542
|
+
console.log(`
|
|
1543
|
+
🔐 vibe auth - LLM 인증
|
|
1544
|
+
|
|
1545
|
+
사용법:
|
|
1546
|
+
vibe auth gpt GPT Plus/Pro OAuth 인증
|
|
1547
|
+
vibe auth gpt --key <key> GPT API 키로 설정
|
|
1548
|
+
vibe auth gemini Gemini 구독 OAuth 인증 (권장)
|
|
1549
|
+
vibe auth gemini --key <key> Gemini API 키로 설정
|
|
1550
|
+
|
|
1551
|
+
예시:
|
|
1552
|
+
vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
|
|
1553
|
+
vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
|
|
1554
|
+
vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
|
|
1555
|
+
`);
|
|
1556
|
+
}
|
|
1557
|
+
function showLogoutHelp() {
|
|
1558
|
+
console.log(`
|
|
1559
|
+
🚪 vibe logout - LLM 로그아웃
|
|
1560
|
+
|
|
1561
|
+
사용법:
|
|
1562
|
+
vibe logout gpt GPT 로그아웃
|
|
1563
|
+
vibe logout gemini Gemini 로그아웃
|
|
1564
1564
|
`);
|
|
1565
1565
|
}
|
|
1566
1566
|
// ============================================================================
|
|
1567
1567
|
// Gemini OAuth Commands
|
|
1568
1568
|
// ============================================================================
|
|
1569
1569
|
async function geminiAuth() {
|
|
1570
|
-
console.log(`
|
|
1571
|
-
🔐 Gemini 구독 인증 (OAuth)
|
|
1572
|
-
|
|
1573
|
-
Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
|
|
1574
|
-
브라우저에서 Google 계정으로 로그인하세요.
|
|
1570
|
+
console.log(`
|
|
1571
|
+
🔐 Gemini 구독 인증 (OAuth)
|
|
1572
|
+
|
|
1573
|
+
Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
|
|
1574
|
+
브라우저에서 Google 계정으로 로그인하세요.
|
|
1575
1575
|
`);
|
|
1576
1576
|
try {
|
|
1577
1577
|
const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
|
|
@@ -1586,20 +1586,20 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
|
|
|
1586
1586
|
expires: tokens.expires,
|
|
1587
1587
|
projectId: tokens.projectId,
|
|
1588
1588
|
});
|
|
1589
|
-
console.log(`
|
|
1590
|
-
✅ Gemini 인증 완료!
|
|
1591
|
-
|
|
1592
|
-
계정: ${tokens.email}
|
|
1593
|
-
프로젝트: ${tokens.projectId || '(자동 감지)'}
|
|
1594
|
-
|
|
1595
|
-
사용 가능한 모델:
|
|
1596
|
-
- Gemini 3 Flash (빠른 응답, 탐색/검색)
|
|
1597
|
-
- Gemini 3 Pro (높은 정확도)
|
|
1598
|
-
|
|
1599
|
-
/vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
|
|
1600
|
-
|
|
1601
|
-
상태 확인: vibe gemini
|
|
1602
|
-
로그아웃: vibe gemini
|
|
1589
|
+
console.log(`
|
|
1590
|
+
✅ Gemini 인증 완료!
|
|
1591
|
+
|
|
1592
|
+
계정: ${tokens.email}
|
|
1593
|
+
프로젝트: ${tokens.projectId || '(자동 감지)'}
|
|
1594
|
+
|
|
1595
|
+
사용 가능한 모델:
|
|
1596
|
+
- Gemini 3 Flash (빠른 응답, 탐색/검색)
|
|
1597
|
+
- Gemini 3 Pro (높은 정확도)
|
|
1598
|
+
|
|
1599
|
+
/vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
|
|
1600
|
+
|
|
1601
|
+
상태 확인: vibe status gemini
|
|
1602
|
+
로그아웃: vibe logout gemini
|
|
1603
1603
|
`);
|
|
1604
1604
|
// config.json 업데이트
|
|
1605
1605
|
const projectRoot = process.cwd();
|
|
@@ -1629,31 +1629,31 @@ Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니
|
|
|
1629
1629
|
}
|
|
1630
1630
|
catch (e) { }
|
|
1631
1631
|
execSync(`claude mcp add vibe-gemini -s user node "${mcpPath}"`, { stdio: 'inherit' });
|
|
1632
|
-
console.log(`
|
|
1633
|
-
✅ vibe-gemini MCP 서버 등록 완료! (전역)
|
|
1634
|
-
|
|
1635
|
-
이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
|
|
1636
|
-
- mcp__vibe-gemini__gemini_chat: Gemini에 질문
|
|
1637
|
-
- mcp__vibe-gemini__gemini_analyze_code: 코드 분석
|
|
1638
|
-
- mcp__vibe-gemini__gemini_review_ui: UI/UX 리뷰
|
|
1639
|
-
- mcp__vibe-gemini__gemini_quick_ask: 빠른 질문
|
|
1632
|
+
console.log(`
|
|
1633
|
+
✅ vibe-gemini MCP 서버 등록 완료! (전역)
|
|
1634
|
+
|
|
1635
|
+
이제 모든 프로젝트에서 다음 도구를 사용할 수 있습니다:
|
|
1636
|
+
- mcp__vibe-gemini__gemini_chat: Gemini에 질문
|
|
1637
|
+
- mcp__vibe-gemini__gemini_analyze_code: 코드 분석
|
|
1638
|
+
- mcp__vibe-gemini__gemini_review_ui: UI/UX 리뷰
|
|
1639
|
+
- mcp__vibe-gemini__gemini_quick_ask: 빠른 질문
|
|
1640
1640
|
`);
|
|
1641
1641
|
}
|
|
1642
1642
|
catch (mcpError) {
|
|
1643
|
-
console.log(`
|
|
1644
|
-
⚠️ MCP 서버 등록 실패 (수동 등록 필요):
|
|
1645
|
-
claude mcp add vibe-gemini -s user node "${path.join(__dirname, '../lib/gemini-mcp.js')}"
|
|
1643
|
+
console.log(`
|
|
1644
|
+
⚠️ MCP 서버 등록 실패 (수동 등록 필요):
|
|
1645
|
+
claude mcp add vibe-gemini -s user node "${path.join(__dirname, '../lib/gemini-mcp.js')}"
|
|
1646
1646
|
`);
|
|
1647
1647
|
}
|
|
1648
1648
|
process.exit(0);
|
|
1649
1649
|
}
|
|
1650
1650
|
catch (error) {
|
|
1651
|
-
console.error(`
|
|
1652
|
-
❌ Gemini 인증 실패
|
|
1653
|
-
|
|
1654
|
-
오류: ${error.message}
|
|
1655
|
-
|
|
1656
|
-
다시 시도하려면: vibe gemini --auth
|
|
1651
|
+
console.error(`
|
|
1652
|
+
❌ Gemini 인증 실패
|
|
1653
|
+
|
|
1654
|
+
오류: ${error.message}
|
|
1655
|
+
|
|
1656
|
+
다시 시도하려면: vibe gemini --auth
|
|
1657
1657
|
`);
|
|
1658
1658
|
process.exit(1);
|
|
1659
1659
|
}
|
|
@@ -1666,32 +1666,32 @@ function geminiStatus() {
|
|
|
1666
1666
|
const { GEMINI_MODELS } = require(geminiApiPath);
|
|
1667
1667
|
const accounts = storage.getAllAccounts();
|
|
1668
1668
|
if (accounts.length === 0) {
|
|
1669
|
-
console.log(`
|
|
1670
|
-
📊 Gemini 인증 상태
|
|
1671
|
-
|
|
1672
|
-
인증된 계정 없음
|
|
1673
|
-
|
|
1674
|
-
로그인: vibe gemini --auth
|
|
1669
|
+
console.log(`
|
|
1670
|
+
📊 Gemini 인증 상태
|
|
1671
|
+
|
|
1672
|
+
인증된 계정 없음
|
|
1673
|
+
|
|
1674
|
+
로그인: vibe gemini --auth
|
|
1675
1675
|
`);
|
|
1676
1676
|
return;
|
|
1677
1677
|
}
|
|
1678
1678
|
const activeAccount = storage.getActiveAccount();
|
|
1679
1679
|
const isExpired = storage.isTokenExpired(activeAccount);
|
|
1680
|
-
console.log(`
|
|
1681
|
-
📊 Gemini 인증 상태
|
|
1682
|
-
|
|
1683
|
-
활성 계정: ${activeAccount.email}
|
|
1684
|
-
프로젝트: ${activeAccount.projectId || '(자동)'}
|
|
1685
|
-
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
1686
|
-
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
1687
|
-
|
|
1688
|
-
등록된 계정 (${accounts.length}개):
|
|
1689
|
-
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
1690
|
-
|
|
1691
|
-
사용 가능한 모델:
|
|
1692
|
-
${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
|
|
1693
|
-
|
|
1694
|
-
로그아웃: vibe gemini
|
|
1680
|
+
console.log(`
|
|
1681
|
+
📊 Gemini 인증 상태
|
|
1682
|
+
|
|
1683
|
+
활성 계정: ${activeAccount.email}
|
|
1684
|
+
프로젝트: ${activeAccount.projectId || '(자동)'}
|
|
1685
|
+
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
1686
|
+
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
1687
|
+
|
|
1688
|
+
등록된 계정 (${accounts.length}개):
|
|
1689
|
+
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
1690
|
+
|
|
1691
|
+
사용 가능한 모델:
|
|
1692
|
+
${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
|
|
1693
|
+
|
|
1694
|
+
로그아웃: vibe logout gemini
|
|
1695
1695
|
`);
|
|
1696
1696
|
}
|
|
1697
1697
|
catch (error) {
|
|
@@ -1708,12 +1708,12 @@ function geminiLogout() {
|
|
|
1708
1708
|
return;
|
|
1709
1709
|
}
|
|
1710
1710
|
storage.clearAccounts();
|
|
1711
|
-
console.log(`
|
|
1712
|
-
✅ Gemini 로그아웃 완료
|
|
1713
|
-
|
|
1714
|
-
${activeAccount.email} 계정이 제거되었습니다.
|
|
1715
|
-
|
|
1716
|
-
다시 로그인: vibe gemini --auth
|
|
1711
|
+
console.log(`
|
|
1712
|
+
✅ Gemini 로그아웃 완료
|
|
1713
|
+
|
|
1714
|
+
${activeAccount.email} 계정이 제거되었습니다.
|
|
1715
|
+
|
|
1716
|
+
다시 로그인: vibe gemini --auth
|
|
1717
1717
|
`);
|
|
1718
1718
|
// config.json 업데이트
|
|
1719
1719
|
const projectRoot = process.cwd();
|
|
@@ -1736,86 +1736,58 @@ ${activeAccount.email} 계정이 제거되었습니다.
|
|
|
1736
1736
|
console.error('로그아웃 실패:', error.message);
|
|
1737
1737
|
}
|
|
1738
1738
|
}
|
|
1739
|
-
|
|
1740
|
-
console.log(`
|
|
1741
|
-
🤖 Gemini 설정
|
|
1742
|
-
|
|
1743
|
-
Gemini Advanced 구독이 있으면 추가 비용 없이 AI 보조 모델로 활용할 수 있습니다.
|
|
1744
|
-
|
|
1745
|
-
사용 방법:
|
|
1746
|
-
|
|
1747
|
-
1. 구독 인증 (권장):
|
|
1748
|
-
vibe gemini --auth Google 계정으로 로그인 (추가 비용 없음)
|
|
1749
|
-
|
|
1750
|
-
2. API 키 방식:
|
|
1751
|
-
vibe gemini <api-key> API 키로 설정 (사용량 과금)
|
|
1752
|
-
|
|
1753
|
-
관리 명령어:
|
|
1754
|
-
vibe gemini --status 인증 상태 확인
|
|
1755
|
-
vibe gemini --logout 로그아웃
|
|
1756
|
-
vibe gemini --remove API 키 제거
|
|
1757
|
-
|
|
1758
|
-
사용 가능한 모델:
|
|
1759
|
-
- gemini-2.5-flash: 안정적, Thinking 기능 (기본)
|
|
1760
|
-
- gemini-2.5-flash-lite: 경량 버전
|
|
1761
|
-
- gemini-3-flash: 최신 프리뷰, 빠름
|
|
1762
|
-
- gemini-3-pro: 최신 프리뷰, 정확
|
|
1763
|
-
|
|
1764
|
-
활용 방식:
|
|
1765
|
-
/vibe.run 실행 시 자동으로 다음 용도로 활용됩니다:
|
|
1766
|
-
- 코드 탐색/검색 (Gemini 3 Flash)
|
|
1767
|
-
- UI/UX 분석 (Gemini 3 Pro)
|
|
1768
|
-
- 병렬 작업 처리
|
|
1769
|
-
`);
|
|
1770
|
-
}
|
|
1739
|
+
// showGeminiHelp 제거됨 - showAuthHelp로 통합
|
|
1771
1740
|
// ============================================================================
|
|
1772
1741
|
// Info Commands
|
|
1773
1742
|
// ============================================================================
|
|
1774
1743
|
function showHelp() {
|
|
1775
|
-
console.log(`
|
|
1776
|
-
📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
|
|
1777
|
-
|
|
1778
|
-
기본 명령어:
|
|
1779
|
-
vibe init [project] 프로젝트 초기화
|
|
1780
|
-
vibe update 설정 업데이트
|
|
1781
|
-
vibe
|
|
1782
|
-
vibe
|
|
1783
|
-
vibe
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
vibe
|
|
1788
|
-
vibe gpt <
|
|
1789
|
-
vibe
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
vibe
|
|
1793
|
-
vibe
|
|
1794
|
-
vibe gemini
|
|
1795
|
-
vibe
|
|
1796
|
-
vibe gemini
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
/vibe.
|
|
1803
|
-
/vibe.
|
|
1804
|
-
/vibe.
|
|
1805
|
-
/vibe.
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1744
|
+
console.log(`
|
|
1745
|
+
📖 Vibe - SPEC-driven AI coding framework (Claude Code 전용)
|
|
1746
|
+
|
|
1747
|
+
기본 명령어:
|
|
1748
|
+
vibe init [project] 프로젝트 초기화
|
|
1749
|
+
vibe update 설정 업데이트
|
|
1750
|
+
vibe status 현재 설정 상태
|
|
1751
|
+
vibe help 도움말
|
|
1752
|
+
vibe version 버전 정보
|
|
1753
|
+
|
|
1754
|
+
외부 LLM 인증:
|
|
1755
|
+
vibe auth gpt GPT Plus/Pro OAuth 인증
|
|
1756
|
+
vibe auth gemini Gemini 구독 OAuth 인증 (권장)
|
|
1757
|
+
vibe auth gpt --key <key> GPT API 키 설정
|
|
1758
|
+
vibe auth gemini --key <key> Gemini API 키 설정
|
|
1759
|
+
|
|
1760
|
+
상태 및 관리:
|
|
1761
|
+
vibe status 전체 상태 확인
|
|
1762
|
+
vibe status gpt GPT 인증 상태 확인
|
|
1763
|
+
vibe status gemini Gemini 인증 상태 확인
|
|
1764
|
+
vibe logout gpt GPT 로그아웃
|
|
1765
|
+
vibe logout gemini Gemini 로그아웃
|
|
1766
|
+
vibe remove gpt GPT 제거
|
|
1767
|
+
vibe remove gemini Gemini 제거
|
|
1768
|
+
vibe remove vibe 전체 제거 (MCP, 설정, 패키지)
|
|
1769
|
+
|
|
1770
|
+
Claude Code 슬래시 커맨드:
|
|
1771
|
+
/vibe.spec "기능명" SPEC 작성 (PTCF 구조)
|
|
1772
|
+
/vibe.run "기능명" 구현 실행
|
|
1773
|
+
/vibe.verify "기능명" 검증
|
|
1774
|
+
/vibe.reason "문제" 체계적 추론
|
|
1775
|
+
/vibe.analyze 프로젝트 분석
|
|
1776
|
+
/vibe.ui "설명" UI 미리보기
|
|
1777
|
+
/vibe.diagram 다이어그램 생성
|
|
1778
|
+
|
|
1779
|
+
모델 오케스트레이션:
|
|
1780
|
+
Opus 4.5 오케스트레이터 (메인)
|
|
1781
|
+
Sonnet 4 구현
|
|
1782
|
+
Haiku 4.5 코드 탐색
|
|
1783
|
+
GPT 5.2 아키텍처/디버깅 (선택적)
|
|
1784
|
+
Gemini 3 UI/UX 설계 (선택적)
|
|
1785
|
+
|
|
1786
|
+
Workflow:
|
|
1787
|
+
/vibe.spec → /vibe.run → /vibe.verify
|
|
1788
|
+
|
|
1789
|
+
문서:
|
|
1790
|
+
https://github.com/su-record/vibe
|
|
1819
1791
|
`);
|
|
1820
1792
|
}
|
|
1821
1793
|
function showStatus() {
|
|
@@ -1833,32 +1805,33 @@ function showStatus() {
|
|
|
1833
1805
|
}
|
|
1834
1806
|
const gptStatus = config.models?.gpt?.enabled ? '✅ 활성' : '⬚ 비활성';
|
|
1835
1807
|
const geminiStatus = config.models?.gemini?.enabled ? '✅ 활성' : '⬚ 비활성';
|
|
1836
|
-
console.log(`
|
|
1837
|
-
📊 Vibe 상태 (v${packageJson.version})
|
|
1838
|
-
|
|
1839
|
-
프로젝트: ${projectRoot}
|
|
1840
|
-
언어: ${config.language || 'ko'}
|
|
1841
|
-
|
|
1842
|
-
모델 오케스트레이션:
|
|
1843
|
-
┌─────────────────────────────────────────┐
|
|
1844
|
-
│ Opus 4.5 오케스트레이터 │
|
|
1845
|
-
├─────────────────────────────────────────┤
|
|
1846
|
-
│ Sonnet 4 구현 │
|
|
1847
|
-
│ Haiku 4.5 코드 탐색 │
|
|
1848
|
-
├─────────────────────────────────────────┤
|
|
1849
|
-
│ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
|
|
1850
|
-
│ Gemini 3 ${geminiStatus} UI/UX 설계 │
|
|
1851
|
-
└─────────────────────────────────────────┘
|
|
1852
|
-
|
|
1853
|
-
MCP 서버:
|
|
1854
|
-
vibe-gemini Gemini API
|
|
1855
|
-
vibe-gpt GPT API
|
|
1856
|
-
context7 라이브러리 문서 검색
|
|
1857
|
-
|
|
1858
|
-
외부 LLM 설정:
|
|
1859
|
-
vibe gpt
|
|
1860
|
-
vibe gemini
|
|
1861
|
-
vibe
|
|
1808
|
+
console.log(`
|
|
1809
|
+
📊 Vibe 상태 (v${packageJson.version})
|
|
1810
|
+
|
|
1811
|
+
프로젝트: ${projectRoot}
|
|
1812
|
+
언어: ${config.language || 'ko'}
|
|
1813
|
+
|
|
1814
|
+
모델 오케스트레이션:
|
|
1815
|
+
┌─────────────────────────────────────────┐
|
|
1816
|
+
│ Opus 4.5 오케스트레이터 │
|
|
1817
|
+
├─────────────────────────────────────────┤
|
|
1818
|
+
│ Sonnet 4 구현 │
|
|
1819
|
+
│ Haiku 4.5 코드 탐색 │
|
|
1820
|
+
├─────────────────────────────────────────┤
|
|
1821
|
+
│ GPT 5.2 ${gptStatus} 아키텍처/디버깅 │
|
|
1822
|
+
│ Gemini 3 ${geminiStatus} UI/UX 설계 │
|
|
1823
|
+
└─────────────────────────────────────────┘
|
|
1824
|
+
|
|
1825
|
+
MCP 서버:
|
|
1826
|
+
vibe-gemini Gemini API
|
|
1827
|
+
vibe-gpt GPT API
|
|
1828
|
+
context7 라이브러리 문서 검색
|
|
1829
|
+
|
|
1830
|
+
외부 LLM 설정:
|
|
1831
|
+
vibe auth gpt GPT 활성화 (OAuth)
|
|
1832
|
+
vibe auth gemini Gemini 활성화 (OAuth)
|
|
1833
|
+
vibe remove gpt GPT 제거
|
|
1834
|
+
vibe remove gemini Gemini 제거
|
|
1862
1835
|
`);
|
|
1863
1836
|
}
|
|
1864
1837
|
function showVersion() {
|
|
@@ -1921,51 +1894,62 @@ switch (command) {
|
|
|
1921
1894
|
break;
|
|
1922
1895
|
case 'remove':
|
|
1923
1896
|
case 'uninstall':
|
|
1924
|
-
remove
|
|
1897
|
+
// vibe remove gpt / vibe remove gemini
|
|
1898
|
+
if (positionalArgs[1] === 'gpt' || positionalArgs[1] === 'gemini') {
|
|
1899
|
+
removeExternalLLM(positionalArgs[1]);
|
|
1900
|
+
}
|
|
1901
|
+
else {
|
|
1902
|
+
remove();
|
|
1903
|
+
}
|
|
1925
1904
|
break;
|
|
1926
|
-
case '
|
|
1927
|
-
|
|
1928
|
-
|
|
1905
|
+
case 'auth':
|
|
1906
|
+
// vibe auth gpt / vibe auth gemini
|
|
1907
|
+
if (positionalArgs[1] === 'gpt') {
|
|
1908
|
+
const keyIndex = args.indexOf('--key');
|
|
1909
|
+
if (keyIndex !== -1 && args[keyIndex + 1]) {
|
|
1910
|
+
setupExternalLLM('gpt', args[keyIndex + 1]);
|
|
1911
|
+
}
|
|
1912
|
+
else {
|
|
1913
|
+
gptAuth();
|
|
1914
|
+
}
|
|
1929
1915
|
}
|
|
1930
|
-
else if (
|
|
1931
|
-
|
|
1916
|
+
else if (positionalArgs[1] === 'gemini') {
|
|
1917
|
+
const keyIndex = args.indexOf('--key');
|
|
1918
|
+
if (keyIndex !== -1 && args[keyIndex + 1]) {
|
|
1919
|
+
setupExternalLLM('gemini', args[keyIndex + 1]);
|
|
1920
|
+
}
|
|
1921
|
+
else {
|
|
1922
|
+
geminiAuth();
|
|
1923
|
+
}
|
|
1932
1924
|
}
|
|
1933
|
-
else
|
|
1934
|
-
|
|
1925
|
+
else {
|
|
1926
|
+
showAuthHelp();
|
|
1935
1927
|
}
|
|
1936
|
-
|
|
1928
|
+
break;
|
|
1929
|
+
case 'logout':
|
|
1930
|
+
// vibe logout gpt / vibe logout gemini
|
|
1931
|
+
if (positionalArgs[1] === 'gpt') {
|
|
1937
1932
|
gptLogout();
|
|
1938
1933
|
}
|
|
1939
|
-
else if (
|
|
1940
|
-
|
|
1934
|
+
else if (positionalArgs[1] === 'gemini') {
|
|
1935
|
+
geminiLogout();
|
|
1941
1936
|
}
|
|
1942
1937
|
else {
|
|
1943
|
-
|
|
1938
|
+
showLogoutHelp();
|
|
1944
1939
|
}
|
|
1945
1940
|
break;
|
|
1946
|
-
case '
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
else if (args[1] === '--auth') {
|
|
1951
|
-
geminiAuth();
|
|
1941
|
+
case 'status':
|
|
1942
|
+
// vibe status / vibe status gpt / vibe status gemini
|
|
1943
|
+
if (positionalArgs[1] === 'gpt') {
|
|
1944
|
+
gptStatus();
|
|
1952
1945
|
}
|
|
1953
|
-
else if (
|
|
1946
|
+
else if (positionalArgs[1] === 'gemini') {
|
|
1954
1947
|
geminiStatus();
|
|
1955
1948
|
}
|
|
1956
|
-
else if (args[1] === '--logout') {
|
|
1957
|
-
geminiLogout();
|
|
1958
|
-
}
|
|
1959
|
-
else if (args[1]) {
|
|
1960
|
-
setupExternalLLM('gemini', args[1]);
|
|
1961
|
-
}
|
|
1962
1949
|
else {
|
|
1963
|
-
|
|
1950
|
+
showStatus();
|
|
1964
1951
|
}
|
|
1965
1952
|
break;
|
|
1966
|
-
case 'status':
|
|
1967
|
-
showStatus();
|
|
1968
|
-
break;
|
|
1969
1953
|
case 'version':
|
|
1970
1954
|
case '-v':
|
|
1971
1955
|
case '--version':
|
|
@@ -1978,19 +1962,20 @@ switch (command) {
|
|
|
1978
1962
|
showHelp();
|
|
1979
1963
|
break;
|
|
1980
1964
|
default:
|
|
1981
|
-
console.log(`
|
|
1982
|
-
❌ 알 수 없는 명령어: ${command}
|
|
1983
|
-
|
|
1984
|
-
사용 가능한 명령어:
|
|
1985
|
-
vibe init 프로젝트 초기화
|
|
1986
|
-
vibe update 설정 업데이트
|
|
1987
|
-
vibe gpt
|
|
1988
|
-
vibe
|
|
1989
|
-
vibe
|
|
1990
|
-
vibe
|
|
1991
|
-
vibe
|
|
1992
|
-
|
|
1993
|
-
|
|
1965
|
+
console.log(`
|
|
1966
|
+
❌ 알 수 없는 명령어: ${command}
|
|
1967
|
+
|
|
1968
|
+
사용 가능한 명령어:
|
|
1969
|
+
vibe init 프로젝트 초기화
|
|
1970
|
+
vibe update 설정 업데이트
|
|
1971
|
+
vibe auth LLM 인증 (gpt, gemini)
|
|
1972
|
+
vibe status 상태 확인
|
|
1973
|
+
vibe logout 로그아웃
|
|
1974
|
+
vibe remove 제거
|
|
1975
|
+
vibe help 도움말
|
|
1976
|
+
vibe version 버전 정보
|
|
1977
|
+
|
|
1978
|
+
사용법: vibe help
|
|
1994
1979
|
`);
|
|
1995
1980
|
process.exit(1);
|
|
1996
1981
|
}
|