@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.
Files changed (109) hide show
  1. package/.claude/settings.local.json +28 -24
  2. package/README.md +32 -15
  3. package/dist/cli/auth.d.ts +13 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +118 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/collaborator.d.ts +8 -0
  8. package/dist/cli/collaborator.d.ts.map +1 -0
  9. package/dist/cli/collaborator.js +136 -0
  10. package/dist/cli/collaborator.js.map +1 -0
  11. package/dist/cli/detect.d.ts +35 -0
  12. package/dist/cli/detect.d.ts.map +1 -0
  13. package/dist/cli/detect.js +376 -0
  14. package/dist/cli/detect.js.map +1 -0
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +221 -2001
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/llm.d.ts +49 -0
  19. package/dist/cli/llm.d.ts.map +1 -0
  20. package/dist/cli/llm.js +464 -0
  21. package/dist/cli/llm.js.map +1 -0
  22. package/dist/cli/mcp.d.ts +49 -0
  23. package/dist/cli/mcp.d.ts.map +1 -0
  24. package/dist/cli/mcp.js +169 -0
  25. package/dist/cli/mcp.js.map +1 -0
  26. package/dist/cli/setup.d.ts +53 -0
  27. package/dist/cli/setup.d.ts.map +1 -0
  28. package/dist/cli/setup.js +455 -0
  29. package/dist/cli/setup.js.map +1 -0
  30. package/dist/cli/types.d.ts +83 -0
  31. package/dist/cli/types.d.ts.map +1 -0
  32. package/dist/cli/types.js +5 -0
  33. package/dist/cli/types.js.map +1 -0
  34. package/dist/cli/utils.d.ts +40 -0
  35. package/dist/cli/utils.d.ts.map +1 -0
  36. package/dist/cli/utils.js +112 -0
  37. package/dist/cli/utils.js.map +1 -0
  38. package/dist/lib/MemoryManager.js +93 -93
  39. package/dist/lib/MemoryManager.js.map +1 -1
  40. package/dist/lib/ProjectCache.d.ts.map +1 -1
  41. package/dist/lib/ProjectCache.js +2 -1
  42. package/dist/lib/ProjectCache.js.map +1 -1
  43. package/dist/lib/PythonParser.js +109 -109
  44. package/dist/lib/PythonParser.js.map +1 -1
  45. package/dist/lib/constants.d.ts +31 -0
  46. package/dist/lib/constants.d.ts.map +1 -0
  47. package/dist/lib/constants.js +36 -0
  48. package/dist/lib/constants.js.map +1 -0
  49. package/dist/lib/gemini-api.d.ts.map +1 -1
  50. package/dist/lib/gemini-api.js +1 -6
  51. package/dist/lib/gemini-api.js.map +1 -1
  52. package/dist/lib/gemini-mcp.js +15 -15
  53. package/dist/lib/gemini-oauth.js +36 -36
  54. package/dist/lib/gemini-oauth.js.map +1 -1
  55. package/dist/lib/gpt-api.d.ts.map +1 -1
  56. package/dist/lib/gpt-api.js +6 -11
  57. package/dist/lib/gpt-api.js.map +1 -1
  58. package/dist/lib/gpt-mcp.js +17 -17
  59. package/dist/lib/gpt-oauth.js +45 -45
  60. package/dist/lib/gpt-oauth.js.map +1 -1
  61. package/dist/lib/utils.d.ts +21 -0
  62. package/dist/lib/utils.d.ts.map +1 -0
  63. package/dist/lib/utils.js +51 -0
  64. package/dist/lib/utils.js.map +1 -0
  65. package/dist/orchestrator/agentDiscovery.d.ts.map +1 -1
  66. package/dist/orchestrator/agentDiscovery.js +3 -2
  67. package/dist/orchestrator/agentDiscovery.js.map +1 -1
  68. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  69. package/dist/orchestrator/backgroundAgent.js +4 -16
  70. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  71. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  72. package/dist/orchestrator/orchestrator.js +17 -15
  73. package/dist/orchestrator/orchestrator.js.map +1 -1
  74. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  75. package/dist/orchestrator/parallelResearch.js +30 -44
  76. package/dist/orchestrator/parallelResearch.js.map +1 -1
  77. package/dist/orchestrator/types.d.ts +3 -2
  78. package/dist/orchestrator/types.d.ts.map +1 -1
  79. package/dist/tools/analytics/getUsageAnalytics.js +13 -13
  80. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -1
  81. package/dist/tools/convention/getCodingGuide.js +2 -2
  82. package/dist/tools/convention/getCodingGuide.js.map +1 -1
  83. package/dist/tools/memory/createMemoryTimeline.js +11 -11
  84. package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
  85. package/dist/tools/memory/getMemoryGraph.js +12 -12
  86. package/dist/tools/memory/getSessionContext.js +10 -10
  87. package/dist/tools/memory/getSessionContext.js.map +1 -1
  88. package/dist/tools/memory/linkMemories.js +14 -14
  89. package/dist/tools/memory/listMemories.js +4 -4
  90. package/dist/tools/memory/recallMemory.js +4 -4
  91. package/dist/tools/memory/restoreSessionContext.js +2 -2
  92. package/dist/tools/memory/restoreSessionContext.js.map +1 -1
  93. package/dist/tools/memory/saveMemory.js +4 -4
  94. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  95. package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
  96. package/dist/tools/memory/startSession.js +3 -3
  97. package/dist/tools/memory/startSession.js.map +1 -1
  98. package/dist/tools/planning/generatePrd.js +46 -46
  99. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  100. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  101. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  102. package/dist/tools/semantic/findReferences.d.ts.map +1 -1
  103. package/dist/tools/semantic/findReferences.js +2 -1
  104. package/dist/tools/semantic/findReferences.js.map +1 -1
  105. package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
  106. package/dist/tools/semantic/findSymbol.js +2 -1
  107. package/dist/tools/semantic/findSymbol.js.map +1 -1
  108. package/hooks/hooks.json +10 -8
  109. package/package.json +4 -2
@@ -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"}