@su-record/vibe 2.4.6 → 2.4.8
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.local.json +28 -24
- package/README.md +32 -15
- package/dist/cli/auth.d.ts +13 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +118 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/collaborator.d.ts +8 -0
- package/dist/cli/collaborator.d.ts.map +1 -0
- package/dist/cli/collaborator.js +136 -0
- package/dist/cli/collaborator.js.map +1 -0
- package/dist/cli/detect.d.ts +35 -0
- package/dist/cli/detect.d.ts.map +1 -0
- package/dist/cli/detect.js +376 -0
- package/dist/cli/detect.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +221 -2001
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm.d.ts +49 -0
- package/dist/cli/llm.d.ts.map +1 -0
- package/dist/cli/llm.js +464 -0
- package/dist/cli/llm.js.map +1 -0
- package/dist/cli/mcp.d.ts +49 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +169 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/setup.d.ts +53 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +455 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/types.d.ts +83 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/utils.d.ts +40 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +112 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/lib/MemoryManager.js +93 -93
- package/dist/lib/MemoryManager.js.map +1 -1
- package/dist/lib/ProjectCache.d.ts.map +1 -1
- package/dist/lib/ProjectCache.js +2 -1
- package/dist/lib/ProjectCache.js.map +1 -1
- package/dist/lib/PythonParser.js +109 -109
- package/dist/lib/PythonParser.js.map +1 -1
- package/dist/lib/constants.d.ts +31 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +36 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/gemini-api.d.ts.map +1 -1
- package/dist/lib/gemini-api.js +1 -6
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gemini-mcp.js +15 -15
- package/dist/lib/gemini-oauth.js +36 -36
- package/dist/lib/gemini-oauth.js.map +1 -1
- package/dist/lib/gpt-api.d.ts.map +1 -1
- package/dist/lib/gpt-api.js +6 -11
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/lib/gpt-mcp.js +17 -17
- package/dist/lib/gpt-oauth.js +45 -45
- package/dist/lib/gpt-oauth.js.map +1 -1
- package/dist/lib/utils.d.ts +21 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +51 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/orchestrator/agentDiscovery.d.ts.map +1 -1
- package/dist/orchestrator/agentDiscovery.js +3 -2
- package/dist/orchestrator/agentDiscovery.js.map +1 -1
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
- package/dist/orchestrator/backgroundAgent.js +4 -16
- package/dist/orchestrator/backgroundAgent.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +17 -15
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/orchestrator/parallelResearch.js +30 -44
- package/dist/orchestrator/parallelResearch.js.map +1 -1
- package/dist/orchestrator/types.d.ts +3 -2
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/tools/analytics/getUsageAnalytics.js +13 -13
- package/dist/tools/analytics/getUsageAnalytics.js.map +1 -1
- package/dist/tools/convention/getCodingGuide.js +2 -2
- package/dist/tools/convention/getCodingGuide.js.map +1 -1
- package/dist/tools/memory/createMemoryTimeline.js +11 -11
- package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +10 -10
- package/dist/tools/memory/getSessionContext.js.map +1 -1
- 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/restoreSessionContext.js +2 -2
- package/dist/tools/memory/restoreSessionContext.js.map +1 -1
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
- package/dist/tools/memory/startSession.js +3 -3
- package/dist/tools/memory/startSession.js.map +1 -1
- 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/dist/tools/semantic/findReferences.d.ts.map +1 -1
- package/dist/tools/semantic/findReferences.js +2 -1
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
- package/dist/tools/semantic/findSymbol.js +2 -1
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/hooks/hooks.json +10 -8
- package/package.json +4 -2
package/dist/cli/llm.js
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 외부 LLM 관련 함수 (GPT, Gemini)
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { createRequire } from 'module';
|
|
8
|
+
import { unregisterMcp } from './mcp.js';
|
|
9
|
+
const require = createRequire(import.meta.url);
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = path.dirname(__filename);
|
|
12
|
+
/**
|
|
13
|
+
* 외부 LLM 설정
|
|
14
|
+
*/
|
|
15
|
+
export const EXTERNAL_LLMS = {
|
|
16
|
+
gpt: {
|
|
17
|
+
name: 'vibe-gpt',
|
|
18
|
+
role: 'architecture',
|
|
19
|
+
description: '아키텍처/디버깅 (GPT 5.2)',
|
|
20
|
+
package: '@anthropics/openai-mcp',
|
|
21
|
+
envKey: 'OPENAI_API_KEY'
|
|
22
|
+
},
|
|
23
|
+
gemini: {
|
|
24
|
+
name: 'vibe-gemini',
|
|
25
|
+
role: 'ui-ux',
|
|
26
|
+
description: 'UI/UX 설계 (Gemini 3)',
|
|
27
|
+
package: '@anthropics/gemini-mcp',
|
|
28
|
+
envKey: 'GOOGLE_API_KEY'
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* 외부 LLM API 키로 설정
|
|
33
|
+
*/
|
|
34
|
+
export function setupExternalLLM(llmType, apiKey) {
|
|
35
|
+
if (!apiKey) {
|
|
36
|
+
console.log(`
|
|
37
|
+
❌ API 키가 필요합니다.
|
|
38
|
+
|
|
39
|
+
사용법:
|
|
40
|
+
vibe ${llmType} <api-key>
|
|
41
|
+
|
|
42
|
+
${llmType === 'gpt' ? 'OpenAI API 키: https://platform.openai.com/api-keys' : 'Google API 키: https://aistudio.google.com/apikey'}
|
|
43
|
+
`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const projectRoot = process.cwd();
|
|
47
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
48
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
49
|
+
if (!fs.existsSync(vibeDir)) {
|
|
50
|
+
console.log('❌ vibe 프로젝트가 아닙니다. 먼저 vibe init을 실행하세요.');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let config = {};
|
|
54
|
+
if (fs.existsSync(configPath)) {
|
|
55
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
56
|
+
}
|
|
57
|
+
if (!config.models) {
|
|
58
|
+
config.models = {};
|
|
59
|
+
}
|
|
60
|
+
const llmConfig = EXTERNAL_LLMS[llmType];
|
|
61
|
+
config.models[llmType] = {
|
|
62
|
+
enabled: true,
|
|
63
|
+
role: llmConfig.role,
|
|
64
|
+
description: llmConfig.description
|
|
65
|
+
};
|
|
66
|
+
// API 키를 config에 저장 (암호화 없이 - 로컬 전용)
|
|
67
|
+
config.models[llmType].apiKey = apiKey;
|
|
68
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
69
|
+
console.log(`
|
|
70
|
+
✅ ${llmType.toUpperCase()} API 키 설정 완료!
|
|
71
|
+
|
|
72
|
+
역할: ${llmConfig.description}
|
|
73
|
+
|
|
74
|
+
${llmType.toUpperCase()}는 Hook으로 직접 호출됩니다:
|
|
75
|
+
- "${llmType}한테 물어봐" 키워드로 자동 호출
|
|
76
|
+
- import('@su-record/vibe/lib/${llmType}') 로 직접 사용 가능
|
|
77
|
+
|
|
78
|
+
비활성화: vibe remove ${llmType}
|
|
79
|
+
`);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 외부 LLM 제거
|
|
83
|
+
*/
|
|
84
|
+
export function removeExternalLLM(llmType) {
|
|
85
|
+
const projectRoot = process.cwd();
|
|
86
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
87
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
88
|
+
if (!fs.existsSync(vibeDir)) {
|
|
89
|
+
console.log('❌ vibe 프로젝트가 아닙니다.');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (fs.existsSync(configPath)) {
|
|
93
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
94
|
+
if (config.models?.[llmType]) {
|
|
95
|
+
config.models[llmType].enabled = false;
|
|
96
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const llmConfig = EXTERNAL_LLMS[llmType];
|
|
100
|
+
unregisterMcp(llmConfig.name);
|
|
101
|
+
console.log(`✅ ${llmType.toUpperCase()} 비활성화 완료`);
|
|
102
|
+
}
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// GPT OAuth Commands
|
|
105
|
+
// ============================================================================
|
|
106
|
+
/**
|
|
107
|
+
* GPT OAuth 인증
|
|
108
|
+
*/
|
|
109
|
+
export async function gptAuth() {
|
|
110
|
+
console.log(`
|
|
111
|
+
🔐 GPT Plus/Pro 인증 (OAuth)
|
|
112
|
+
|
|
113
|
+
ChatGPT Plus 또는 Pro 구독이 있으면 Codex API를 사용할 수 있습니다.
|
|
114
|
+
브라우저에서 OpenAI 계정으로 로그인하세요.
|
|
115
|
+
`);
|
|
116
|
+
try {
|
|
117
|
+
const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
|
|
118
|
+
const gptStoragePath = path.join(__dirname, '../lib/gpt-storage.js');
|
|
119
|
+
const { startOAuthFlow } = require(gptOAuthPath);
|
|
120
|
+
const storage = require(gptStoragePath);
|
|
121
|
+
const tokens = await startOAuthFlow();
|
|
122
|
+
storage.addAccount({
|
|
123
|
+
email: tokens.email,
|
|
124
|
+
accessToken: tokens.accessToken,
|
|
125
|
+
refreshToken: tokens.refreshToken,
|
|
126
|
+
idToken: tokens.idToken,
|
|
127
|
+
expires: tokens.expires,
|
|
128
|
+
accountId: tokens.accountId,
|
|
129
|
+
});
|
|
130
|
+
console.log(`
|
|
131
|
+
✅ GPT 인증 완료!
|
|
132
|
+
|
|
133
|
+
계정: ${tokens.email}
|
|
134
|
+
계정 ID: ${tokens.accountId || '(자동 감지)'}
|
|
135
|
+
|
|
136
|
+
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
137
|
+
구독이 없으면 인증은 성공하지만 API 호출 시 오류가 발생합니다.
|
|
138
|
+
|
|
139
|
+
상태 확인: vibe status gpt
|
|
140
|
+
로그아웃: vibe logout gpt
|
|
141
|
+
`);
|
|
142
|
+
// config.json 업데이트
|
|
143
|
+
const projectRoot = process.cwd();
|
|
144
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
145
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
146
|
+
if (fs.existsSync(configPath)) {
|
|
147
|
+
try {
|
|
148
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
149
|
+
if (!config.models)
|
|
150
|
+
config.models = {};
|
|
151
|
+
config.models.gpt = {
|
|
152
|
+
enabled: true,
|
|
153
|
+
authType: 'oauth',
|
|
154
|
+
email: tokens.email,
|
|
155
|
+
role: 'architecture',
|
|
156
|
+
description: 'GPT (ChatGPT Plus/Pro)',
|
|
157
|
+
};
|
|
158
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
159
|
+
}
|
|
160
|
+
catch { /* ignore: optional operation */ }
|
|
161
|
+
}
|
|
162
|
+
console.log(`
|
|
163
|
+
GPT는 Hook으로 직접 호출됩니다:
|
|
164
|
+
- "gpt한테 물어봐" 키워드로 자동 호출
|
|
165
|
+
- import('@su-record/vibe/lib/gpt') 로 직접 사용 가능
|
|
166
|
+
`);
|
|
167
|
+
process.exit(0);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
171
|
+
console.error(`
|
|
172
|
+
❌ GPT 인증 실패
|
|
173
|
+
|
|
174
|
+
오류: ${message}
|
|
175
|
+
|
|
176
|
+
다시 시도하려면: vibe gpt --auth
|
|
177
|
+
`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* GPT 상태 확인
|
|
183
|
+
*/
|
|
184
|
+
export function gptStatus() {
|
|
185
|
+
try {
|
|
186
|
+
const gptStoragePath = path.join(__dirname, '../lib/gpt-storage.js');
|
|
187
|
+
const storage = require(gptStoragePath);
|
|
188
|
+
const accounts = storage.getAllAccounts();
|
|
189
|
+
if (accounts.length === 0) {
|
|
190
|
+
console.log(`
|
|
191
|
+
📊 GPT 인증 상태
|
|
192
|
+
|
|
193
|
+
인증된 계정 없음
|
|
194
|
+
|
|
195
|
+
로그인: vibe gpt --auth
|
|
196
|
+
`);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const activeAccount = storage.getActiveAccount();
|
|
200
|
+
const isExpired = storage.isTokenExpired(activeAccount);
|
|
201
|
+
console.log(`
|
|
202
|
+
📊 GPT 인증 상태
|
|
203
|
+
|
|
204
|
+
활성 계정: ${activeAccount.email}
|
|
205
|
+
계정 ID: ${activeAccount.accountId || '(없음)'}
|
|
206
|
+
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
207
|
+
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
208
|
+
|
|
209
|
+
등록된 계정 (${accounts.length}개):
|
|
210
|
+
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
211
|
+
|
|
212
|
+
⚠️ 참고: ChatGPT Plus/Pro 구독이 있어야 API 호출이 가능합니다.
|
|
213
|
+
|
|
214
|
+
로그아웃: vibe logout gpt
|
|
215
|
+
`);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
219
|
+
console.error('상태 확인 실패:', message);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* GPT 로그아웃
|
|
224
|
+
*/
|
|
225
|
+
export function gptLogout() {
|
|
226
|
+
try {
|
|
227
|
+
const gptStoragePath = path.join(__dirname, '../lib/gpt-storage.js');
|
|
228
|
+
const storage = require(gptStoragePath);
|
|
229
|
+
const activeAccount = storage.getActiveAccount();
|
|
230
|
+
if (!activeAccount) {
|
|
231
|
+
console.log('로그인된 계정이 없습니다.');
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
storage.clearAccounts();
|
|
235
|
+
console.log(`
|
|
236
|
+
✅ GPT 로그아웃 완료
|
|
237
|
+
|
|
238
|
+
${activeAccount.email} 계정이 제거되었습니다.
|
|
239
|
+
|
|
240
|
+
다시 로그인: vibe gpt --auth
|
|
241
|
+
`);
|
|
242
|
+
// config.json 업데이트
|
|
243
|
+
const projectRoot = process.cwd();
|
|
244
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
245
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
246
|
+
if (fs.existsSync(configPath)) {
|
|
247
|
+
try {
|
|
248
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
249
|
+
if (config.models?.gpt) {
|
|
250
|
+
config.models.gpt.enabled = false;
|
|
251
|
+
config.models.gpt.authType = undefined;
|
|
252
|
+
config.models.gpt.email = undefined;
|
|
253
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch { /* ignore: optional operation */ }
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
261
|
+
console.error('로그아웃 실패:', message);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// Gemini OAuth Commands
|
|
266
|
+
// ============================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Gemini OAuth 인증
|
|
269
|
+
*/
|
|
270
|
+
export async function geminiAuth() {
|
|
271
|
+
console.log(`
|
|
272
|
+
🔐 Gemini 구독 인증 (OAuth)
|
|
273
|
+
|
|
274
|
+
Gemini Advanced 구독이 있으면 추가 비용 없이 사용할 수 있습니다.
|
|
275
|
+
브라우저에서 Google 계정으로 로그인하세요.
|
|
276
|
+
`);
|
|
277
|
+
try {
|
|
278
|
+
const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
|
|
279
|
+
const geminiStoragePath = path.join(__dirname, '../lib/gemini-storage.js');
|
|
280
|
+
const { startOAuthFlow } = require(geminiOAuthPath);
|
|
281
|
+
const storage = require(geminiStoragePath);
|
|
282
|
+
const tokens = await startOAuthFlow();
|
|
283
|
+
storage.addAccount({
|
|
284
|
+
email: tokens.email,
|
|
285
|
+
accessToken: tokens.accessToken,
|
|
286
|
+
refreshToken: tokens.refreshToken,
|
|
287
|
+
expires: tokens.expires,
|
|
288
|
+
projectId: tokens.projectId,
|
|
289
|
+
});
|
|
290
|
+
console.log(`
|
|
291
|
+
✅ Gemini 인증 완료!
|
|
292
|
+
|
|
293
|
+
계정: ${tokens.email}
|
|
294
|
+
프로젝트: ${tokens.projectId || '(자동 감지)'}
|
|
295
|
+
|
|
296
|
+
사용 가능한 모델:
|
|
297
|
+
- Gemini 3 Flash (빠른 응답, 탐색/검색)
|
|
298
|
+
- Gemini 3 Pro (높은 정확도)
|
|
299
|
+
|
|
300
|
+
/vibe.run 실행 시 자동으로 Gemini가 보조 모델로 활용됩니다.
|
|
301
|
+
|
|
302
|
+
상태 확인: vibe status gemini
|
|
303
|
+
로그아웃: vibe logout gemini
|
|
304
|
+
`);
|
|
305
|
+
// config.json 업데이트
|
|
306
|
+
const projectRoot = process.cwd();
|
|
307
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
308
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
309
|
+
if (fs.existsSync(configPath)) {
|
|
310
|
+
try {
|
|
311
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
312
|
+
if (!config.models)
|
|
313
|
+
config.models = {};
|
|
314
|
+
config.models.gemini = {
|
|
315
|
+
enabled: true,
|
|
316
|
+
authType: 'oauth',
|
|
317
|
+
email: tokens.email,
|
|
318
|
+
role: 'exploration',
|
|
319
|
+
description: 'Gemini 3 Flash/Pro (탐색, UI/UX)',
|
|
320
|
+
};
|
|
321
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
322
|
+
}
|
|
323
|
+
catch { /* ignore: optional operation */ }
|
|
324
|
+
}
|
|
325
|
+
console.log(`
|
|
326
|
+
Gemini는 Hook으로 직접 호출됩니다:
|
|
327
|
+
- "gemini한테 물어봐" 키워드로 자동 호출
|
|
328
|
+
- import('@su-record/vibe/lib/gemini') 로 직접 사용 가능
|
|
329
|
+
`);
|
|
330
|
+
process.exit(0);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
334
|
+
console.error(`
|
|
335
|
+
❌ Gemini 인증 실패
|
|
336
|
+
|
|
337
|
+
오류: ${message}
|
|
338
|
+
|
|
339
|
+
다시 시도하려면: vibe gemini --auth
|
|
340
|
+
`);
|
|
341
|
+
process.exit(1);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Gemini 상태 확인
|
|
346
|
+
*/
|
|
347
|
+
export function geminiStatus() {
|
|
348
|
+
try {
|
|
349
|
+
const geminiStoragePath = path.join(__dirname, '../lib/gemini-storage.js');
|
|
350
|
+
const geminiApiPath = path.join(__dirname, '../lib/gemini-api.js');
|
|
351
|
+
const storage = require(geminiStoragePath);
|
|
352
|
+
const { GEMINI_MODELS } = require(geminiApiPath);
|
|
353
|
+
const accounts = storage.getAllAccounts();
|
|
354
|
+
if (accounts.length === 0) {
|
|
355
|
+
console.log(`
|
|
356
|
+
📊 Gemini 인증 상태
|
|
357
|
+
|
|
358
|
+
인증된 계정 없음
|
|
359
|
+
|
|
360
|
+
로그인: vibe gemini --auth
|
|
361
|
+
`);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const activeAccount = storage.getActiveAccount();
|
|
365
|
+
const isExpired = storage.isTokenExpired(activeAccount);
|
|
366
|
+
console.log(`
|
|
367
|
+
📊 Gemini 인증 상태
|
|
368
|
+
|
|
369
|
+
활성 계정: ${activeAccount.email}
|
|
370
|
+
프로젝트: ${activeAccount.projectId || '(자동)'}
|
|
371
|
+
토큰 상태: ${isExpired ? '⚠️ 만료됨 (자동 갱신됨)' : '✅ 유효'}
|
|
372
|
+
마지막 사용: ${new Date(activeAccount.lastUsed).toLocaleString()}
|
|
373
|
+
|
|
374
|
+
등록된 계정 (${accounts.length}개):
|
|
375
|
+
${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
|
|
376
|
+
|
|
377
|
+
사용 가능한 모델:
|
|
378
|
+
${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
|
|
379
|
+
|
|
380
|
+
로그아웃: vibe logout gemini
|
|
381
|
+
`);
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
385
|
+
console.error('상태 확인 실패:', message);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Gemini 로그아웃
|
|
390
|
+
*/
|
|
391
|
+
export function geminiLogout() {
|
|
392
|
+
try {
|
|
393
|
+
const geminiStoragePath = path.join(__dirname, '../lib/gemini-storage.js');
|
|
394
|
+
const storage = require(geminiStoragePath);
|
|
395
|
+
const activeAccount = storage.getActiveAccount();
|
|
396
|
+
if (!activeAccount) {
|
|
397
|
+
console.log('로그인된 계정이 없습니다.');
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
storage.clearAccounts();
|
|
401
|
+
console.log(`
|
|
402
|
+
✅ Gemini 로그아웃 완료
|
|
403
|
+
|
|
404
|
+
${activeAccount.email} 계정이 제거되었습니다.
|
|
405
|
+
|
|
406
|
+
다시 로그인: vibe gemini --auth
|
|
407
|
+
`);
|
|
408
|
+
// config.json 업데이트
|
|
409
|
+
const projectRoot = process.cwd();
|
|
410
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
411
|
+
const configPath = path.join(vibeDir, 'config.json');
|
|
412
|
+
if (fs.existsSync(configPath)) {
|
|
413
|
+
try {
|
|
414
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
415
|
+
if (config.models?.gemini) {
|
|
416
|
+
config.models.gemini.enabled = false;
|
|
417
|
+
config.models.gemini.authType = undefined;
|
|
418
|
+
config.models.gemini.email = undefined;
|
|
419
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch { /* ignore: optional operation */ }
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
427
|
+
console.error('로그아웃 실패:', message);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// ============================================================================
|
|
431
|
+
// Help Functions
|
|
432
|
+
// ============================================================================
|
|
433
|
+
/**
|
|
434
|
+
* 인증 도움말
|
|
435
|
+
*/
|
|
436
|
+
export function showAuthHelp() {
|
|
437
|
+
console.log(`
|
|
438
|
+
🔐 vibe auth - LLM 인증
|
|
439
|
+
|
|
440
|
+
사용법:
|
|
441
|
+
vibe auth gpt GPT Plus/Pro OAuth 인증
|
|
442
|
+
vibe auth gpt --key <key> GPT API 키로 설정
|
|
443
|
+
vibe auth gemini Gemini 구독 OAuth 인증 (권장)
|
|
444
|
+
vibe auth gemini --key <key> Gemini API 키로 설정
|
|
445
|
+
|
|
446
|
+
예시:
|
|
447
|
+
vibe auth gpt OpenAI 로그인 (Plus/Pro 구독 필요)
|
|
448
|
+
vibe auth gemini Google 로그인 (Gemini Advanced 구독 시 무료)
|
|
449
|
+
vibe auth gpt --key sk-xxx API 키로 설정 (사용량 과금)
|
|
450
|
+
`);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* 로그아웃 도움말
|
|
454
|
+
*/
|
|
455
|
+
export function showLogoutHelp() {
|
|
456
|
+
console.log(`
|
|
457
|
+
🚪 vibe logout - LLM 로그아웃
|
|
458
|
+
|
|
459
|
+
사용법:
|
|
460
|
+
vibe logout gpt GPT 로그아웃
|
|
461
|
+
vibe logout gemini Gemini 로그아웃
|
|
462
|
+
`);
|
|
463
|
+
}
|
|
464
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/cli/llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP 서버 관리 함수
|
|
3
|
+
*/
|
|
4
|
+
import { McpServerConfig, ClaudeSettings } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Claude CLI 경로 찾기 (Windows/macOS/Linux 지원)
|
|
7
|
+
*/
|
|
8
|
+
export declare function getClaudePath(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Claude CLI 명령어 반환 (캐시됨)
|
|
11
|
+
*/
|
|
12
|
+
export declare function claudeCmd(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Claude CLI가 사용 가능한지 확인
|
|
15
|
+
*/
|
|
16
|
+
export declare function isClaudeCliAvailable(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Claude 설정 파일 경로
|
|
19
|
+
*/
|
|
20
|
+
export declare function getClaudeSettingsPath(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Claude 설정 파일 읽기
|
|
23
|
+
*/
|
|
24
|
+
export declare function readClaudeSettings(): ClaudeSettings;
|
|
25
|
+
/**
|
|
26
|
+
* Claude 설정 파일 쓰기
|
|
27
|
+
*/
|
|
28
|
+
export declare function writeClaudeSettings(settings: ClaudeSettings): void;
|
|
29
|
+
/**
|
|
30
|
+
* MCP 서버 추가 (설정 파일 직접 수정)
|
|
31
|
+
*/
|
|
32
|
+
export declare function addMcpServer(name: string, config: McpServerConfig): void;
|
|
33
|
+
/**
|
|
34
|
+
* MCP 서버 제거
|
|
35
|
+
*/
|
|
36
|
+
export declare function removeMcpServer(name: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* MCP 서버 등록 (CLI 우선, 실패시 직접 수정)
|
|
39
|
+
*/
|
|
40
|
+
export declare function registerMcp(name: string, config: McpServerConfig): void;
|
|
41
|
+
/**
|
|
42
|
+
* MCP 서버 등록 해제
|
|
43
|
+
*/
|
|
44
|
+
export declare function unregisterMcp(name: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* MCP 서버가 등록되어 있는지 확인
|
|
47
|
+
*/
|
|
48
|
+
export declare function isMcpRegistered(name: string): boolean;
|
|
49
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK7D;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA0CtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CAUnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAOxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAgBvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD"}
|