@su-record/vibe 2.6.27 → 2.6.28

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 (246) hide show
  1. package/CLAUDE.md +202 -202
  2. package/LICENSE +21 -21
  3. package/README.md +267 -267
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +266 -266
  13. package/agents/explorer-low.md +42 -42
  14. package/agents/explorer-medium.md +59 -59
  15. package/agents/explorer.md +48 -48
  16. package/agents/implementer-low.md +43 -43
  17. package/agents/implementer-medium.md +52 -52
  18. package/agents/implementer.md +54 -54
  19. package/agents/planning/requirements-analyst.md +84 -84
  20. package/agents/planning/ux-advisor.md +83 -83
  21. package/agents/qa/acceptance-tester.md +86 -86
  22. package/agents/qa/edge-case-finder.md +93 -93
  23. package/agents/refactor-cleaner.md +143 -143
  24. package/agents/research/best-practices-agent.md +199 -199
  25. package/agents/research/codebase-patterns-agent.md +157 -157
  26. package/agents/research/framework-docs-agent.md +188 -188
  27. package/agents/research/security-advisory-agent.md +213 -213
  28. package/agents/review/architecture-reviewer.md +107 -107
  29. package/agents/review/complexity-reviewer.md +116 -116
  30. package/agents/review/data-integrity-reviewer.md +88 -88
  31. package/agents/review/git-history-reviewer.md +103 -103
  32. package/agents/review/performance-reviewer.md +86 -86
  33. package/agents/review/python-reviewer.md +150 -150
  34. package/agents/review/rails-reviewer.md +139 -139
  35. package/agents/review/react-reviewer.md +144 -144
  36. package/agents/review/security-reviewer.md +80 -80
  37. package/agents/review/simplicity-reviewer.md +140 -140
  38. package/agents/review/test-coverage-reviewer.md +116 -116
  39. package/agents/review/typescript-reviewer.md +127 -127
  40. package/agents/searcher.md +54 -54
  41. package/agents/simplifier.md +120 -120
  42. package/agents/tester.md +49 -49
  43. package/agents/ui-previewer.md +268 -268
  44. package/commands/vibe.analyze.md +356 -356
  45. package/commands/vibe.reason.md +329 -329
  46. package/commands/vibe.review.md +423 -423
  47. package/commands/vibe.run.md +1313 -1313
  48. package/commands/vibe.spec.md +1054 -1054
  49. package/commands/vibe.spec.review.md +412 -412
  50. package/commands/vibe.trace.md +161 -161
  51. package/commands/vibe.utils.md +376 -376
  52. package/commands/vibe.verify.md +375 -375
  53. package/dist/cli/collaborator.js +52 -52
  54. package/dist/cli/detect.js +32 -32
  55. package/dist/cli/hud.js +20 -20
  56. package/dist/cli/index.js +112 -112
  57. package/dist/cli/llm.js +144 -144
  58. package/dist/cli/mcp.d.ts +49 -0
  59. package/dist/cli/mcp.d.ts.map +1 -0
  60. package/dist/cli/mcp.js +169 -0
  61. package/dist/cli/mcp.js.map +1 -0
  62. package/dist/cli/postinstall.d.ts.map +1 -1
  63. package/dist/cli/postinstall.js +886 -858
  64. package/dist/cli/postinstall.js.map +1 -1
  65. package/dist/cli/setup/GlobalInstaller.d.ts +6 -0
  66. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  67. package/dist/cli/setup/GlobalInstaller.js +26 -0
  68. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  69. package/dist/lib/DeepInit.js +24 -24
  70. package/dist/lib/IterationTracker.js +11 -11
  71. package/dist/lib/PythonParser.js +108 -108
  72. package/dist/lib/ReviewRace.js +96 -96
  73. package/dist/lib/SkillFrontmatter.js +28 -28
  74. package/dist/lib/SkillQualityGate.js +9 -9
  75. package/dist/lib/SkillRepository.js +159 -159
  76. package/dist/lib/UltraQA.js +77 -77
  77. package/dist/lib/gemini-api.js +5 -5
  78. package/dist/lib/gemini-mcp.d.ts +10 -0
  79. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  80. package/dist/lib/gemini-mcp.js +353 -0
  81. package/dist/lib/gemini-mcp.js.map +1 -0
  82. package/dist/lib/gpt-api.js +4 -4
  83. package/dist/lib/gpt-mcp.d.ts +10 -0
  84. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  85. package/dist/lib/gpt-mcp.js +352 -0
  86. package/dist/lib/gpt-mcp.js.map +1 -0
  87. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  88. package/dist/lib/memory/MemorySearch.js +43 -43
  89. package/dist/lib/memory/MemoryStorage.js +130 -130
  90. package/dist/lib/memory/ObservationStore.js +28 -28
  91. package/dist/lib/memory/SessionRAGRetriever.js +7 -7
  92. package/dist/lib/memory/SessionRAGStore.js +216 -216
  93. package/dist/lib/memory/SessionSummarizer.js +9 -9
  94. package/dist/orchestrator/AgentManager.js +12 -12
  95. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  96. package/dist/orchestrator/SmartRouter.js +11 -11
  97. package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
  98. package/dist/orchestrator/parallelResearch.js +24 -24
  99. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  100. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  101. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  102. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  103. package/dist/tools/analytics/index.d.ts +5 -0
  104. package/dist/tools/analytics/index.d.ts.map +1 -0
  105. package/dist/tools/analytics/index.js +5 -0
  106. package/dist/tools/analytics/index.js.map +1 -0
  107. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  108. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  109. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  110. package/dist/tools/convention/getCodingGuide.js +69 -0
  111. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  112. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  113. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  114. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  115. package/dist/tools/planning/analyzeRequirements.js +171 -0
  116. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  117. package/dist/tools/planning/createUserStories.d.ts +9 -0
  118. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  119. package/dist/tools/planning/createUserStories.js +124 -0
  120. package/dist/tools/planning/createUserStories.js.map +1 -0
  121. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  122. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  123. package/dist/tools/planning/featureRoadmap.js +207 -0
  124. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  125. package/dist/tools/planning/generatePrd.d.ts +11 -0
  126. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  127. package/dist/tools/planning/generatePrd.js +161 -0
  128. package/dist/tools/planning/generatePrd.js.map +1 -0
  129. package/dist/tools/planning/index.d.ts +8 -0
  130. package/dist/tools/planning/index.d.ts.map +1 -0
  131. package/dist/tools/planning/index.js +8 -0
  132. package/dist/tools/planning/index.js.map +1 -0
  133. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  134. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  135. package/dist/tools/prompt/analyzePrompt.js +150 -0
  136. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  137. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  138. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  139. package/dist/tools/prompt/enhancePrompt.js +110 -0
  140. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  141. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  142. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  143. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  144. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  145. package/dist/tools/prompt/index.d.ts +7 -0
  146. package/dist/tools/prompt/index.d.ts.map +1 -0
  147. package/dist/tools/prompt/index.js +7 -0
  148. package/dist/tools/prompt/index.js.map +1 -0
  149. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  150. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  151. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  152. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  153. package/dist/tools/reasoning/index.d.ts +5 -0
  154. package/dist/tools/reasoning/index.d.ts.map +1 -0
  155. package/dist/tools/reasoning/index.js +5 -0
  156. package/dist/tools/reasoning/index.js.map +1 -0
  157. package/dist/tools/spec/prdParser.test.js +171 -171
  158. package/dist/tools/spec/specGenerator.js +169 -169
  159. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  160. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  161. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  162. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  163. package/dist/tools/thinking/analyzeProblem.js +55 -0
  164. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  165. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  166. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  167. package/dist/tools/thinking/breakDownProblem.js +145 -0
  168. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  169. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  170. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  171. package/dist/tools/thinking/createThinkingChain.js +44 -0
  172. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  173. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  174. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  175. package/dist/tools/thinking/formatAsPlan.js +78 -0
  176. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  177. package/dist/tools/thinking/index.d.ts +10 -0
  178. package/dist/tools/thinking/index.d.ts.map +1 -0
  179. package/dist/tools/thinking/index.js +10 -0
  180. package/dist/tools/thinking/index.js.map +1 -0
  181. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  182. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  183. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  184. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  185. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  186. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  187. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  188. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  189. package/hooks/hooks.json +115 -115
  190. package/hooks/scripts/code-check.js +70 -70
  191. package/hooks/scripts/code-review.js +22 -22
  192. package/hooks/scripts/complexity.js +22 -22
  193. package/hooks/scripts/compound.js +23 -23
  194. package/hooks/scripts/context-save.js +53 -53
  195. package/hooks/scripts/gemini-ui-gen.js +281 -281
  196. package/hooks/scripts/generate-brand-assets.js +474 -474
  197. package/hooks/scripts/hud-multiline.js +262 -262
  198. package/hooks/scripts/hud-status.js +291 -291
  199. package/hooks/scripts/keyword-detector.js +214 -214
  200. package/hooks/scripts/llm-orchestrate.js +171 -171
  201. package/hooks/scripts/post-edit.js +97 -97
  202. package/hooks/scripts/post-tool-verify.js +210 -210
  203. package/hooks/scripts/pre-tool-guard.js +125 -125
  204. package/hooks/scripts/prompt-dispatcher.js +161 -161
  205. package/hooks/scripts/recall.js +22 -22
  206. package/hooks/scripts/session-start.js +30 -30
  207. package/hooks/scripts/skill-injector.js +191 -191
  208. package/hooks/scripts/utils.js +97 -97
  209. package/languages/csharp-unity.md +515 -515
  210. package/languages/gdscript-godot.md +470 -470
  211. package/languages/ruby-rails.md +489 -489
  212. package/languages/typescript-angular.md +433 -433
  213. package/languages/typescript-astro.md +416 -416
  214. package/languages/typescript-electron.md +406 -406
  215. package/languages/typescript-nestjs.md +524 -524
  216. package/languages/typescript-svelte.md +407 -407
  217. package/languages/typescript-tauri.md +365 -365
  218. package/package.json +84 -84
  219. package/skills/brand-assets.md +141 -141
  220. package/skills/commerce-patterns.md +361 -361
  221. package/skills/context7-usage.md +102 -102
  222. package/skills/e2e-commerce.md +304 -304
  223. package/skills/frontend-design.md +92 -92
  224. package/skills/git-worktree.md +181 -181
  225. package/skills/parallel-research.md +77 -77
  226. package/skills/priority-todos.md +239 -239
  227. package/skills/seo-checklist.md +244 -244
  228. package/skills/tool-fallback.md +190 -190
  229. package/skills/vibe-capabilities.md +161 -161
  230. package/vibe/constitution.md +227 -227
  231. package/vibe/rules/core/communication-guide.md +98 -98
  232. package/vibe/rules/core/development-philosophy.md +52 -52
  233. package/vibe/rules/core/quick-start.md +102 -102
  234. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  235. package/vibe/rules/quality/checklist.md +276 -276
  236. package/vibe/rules/quality/testing-strategy.md +440 -440
  237. package/vibe/rules/standards/anti-patterns.md +541 -541
  238. package/vibe/rules/standards/code-structure.md +291 -291
  239. package/vibe/rules/standards/complexity-metrics.md +313 -313
  240. package/vibe/rules/standards/naming-conventions.md +198 -198
  241. package/vibe/setup.sh +31 -31
  242. package/vibe/templates/constitution-template.md +252 -252
  243. package/vibe/templates/contract-backend-template.md +526 -526
  244. package/vibe/templates/contract-frontend-template.md +599 -599
  245. package/vibe/templates/feature-template.md +96 -96
  246. package/vibe/templates/spec-template.md +221 -221
package/dist/cli/llm.js CHANGED
@@ -41,13 +41,13 @@ function getGlobalConfigDir() {
41
41
  */
42
42
  export function setupExternalLLM(llmType, apiKey) {
43
43
  if (!apiKey) {
44
- console.log(`
45
- ❌ API key required.
46
-
47
- Usage:
48
- vibe ${llmType} key <api-key>
49
-
50
- ${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : 'Google API key: https://aistudio.google.com/apikey'}
44
+ console.log(`
45
+ ❌ API key required.
46
+
47
+ Usage:
48
+ vibe ${llmType} key <api-key>
49
+
50
+ ${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : 'Google API key: https://aistudio.google.com/apikey'}
51
51
  `);
52
52
  return;
53
53
  }
@@ -83,17 +83,17 @@ ${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : '
83
83
  }
84
84
  catch { /* ignore: optional operation */ }
85
85
  }
86
- console.log(`
87
- ✅ ${llmType.toUpperCase()} API key configured!
88
-
89
- Role: ${llmConfig.description}
90
- Stored: ${authFile}
91
-
92
- ${llmType.toUpperCase()} is called directly via Hooks:
93
- - Auto-called with "${llmType}. query" prefix
94
- - Direct use: import('@su-record/vibe/lib/${llmType}')
95
-
96
- Disable: vibe ${llmType} remove
86
+ console.log(`
87
+ ✅ ${llmType.toUpperCase()} API key configured!
88
+
89
+ Role: ${llmConfig.description}
90
+ Stored: ${authFile}
91
+
92
+ ${llmType.toUpperCase()} is called directly via Hooks:
93
+ - Auto-called with "${llmType}. query" prefix
94
+ - Direct use: import('@su-record/vibe/lib/${llmType}')
95
+
96
+ Disable: vibe ${llmType} remove
97
97
  `);
98
98
  }
99
99
  /**
@@ -142,11 +142,11 @@ export function removeExternalLLM(llmType) {
142
142
  * GPT OAuth 인증
143
143
  */
144
144
  export async function gptAuth() {
145
- console.log(`
146
- 🔐 GPT Plus/Pro Authentication (OAuth)
147
-
148
- With ChatGPT Plus or Pro subscription, you can use the Codex API.
149
- Login with your OpenAI account in browser.
145
+ console.log(`
146
+ 🔐 GPT Plus/Pro Authentication (OAuth)
147
+
148
+ With ChatGPT Plus or Pro subscription, you can use the Codex API.
149
+ Login with your OpenAI account in browser.
150
150
  `);
151
151
  try {
152
152
  const gptOAuthPath = path.join(__dirname, '../lib/gpt-oauth.js');
@@ -162,16 +162,16 @@ Login with your OpenAI account in browser.
162
162
  expires: tokens.expires,
163
163
  accountId: tokens.accountId,
164
164
  });
165
- console.log(`
166
- ✅ GPT authenticated!
167
-
168
- Account: ${tokens.email}
169
- Account ID: ${tokens.accountId || '(auto-detected)'}
170
-
171
- ⚠️ Note: ChatGPT Plus/Pro subscription required for API calls.
172
-
173
- Status: vibe gpt status
174
- Logout: vibe gpt logout
165
+ console.log(`
166
+ ✅ GPT authenticated!
167
+
168
+ Account: ${tokens.email}
169
+ Account ID: ${tokens.accountId || '(auto-detected)'}
170
+
171
+ ⚠️ Note: ChatGPT Plus/Pro subscription required for API calls.
172
+
173
+ Status: vibe gpt status
174
+ Logout: vibe gpt logout
175
175
  `);
176
176
  // config.json 업데이트
177
177
  const projectRoot = process.cwd();
@@ -193,10 +193,10 @@ Logout: vibe gpt logout
193
193
  }
194
194
  catch { /* ignore: optional operation */ }
195
195
  }
196
- console.log(`
197
- GPT is called via Hooks:
198
- - Auto-called with "gpt. query" prefix
199
- - Direct use: import('@su-record/vibe/lib/gpt')
196
+ console.log(`
197
+ GPT is called via Hooks:
198
+ - Auto-called with "gpt. query" prefix
199
+ - Direct use: import('@su-record/vibe/lib/gpt')
200
200
  `);
201
201
  // Windows libuv 핸들 충돌 방지: 서버 완전 종료 대기
202
202
  await new Promise(resolve => setTimeout(resolve, 200));
@@ -204,12 +204,12 @@ GPT is called via Hooks:
204
204
  }
205
205
  catch (error) {
206
206
  const message = error instanceof Error ? error.message : String(error);
207
- console.error(`
208
- ❌ GPT authentication failed
209
-
210
- Error: ${message}
211
-
212
- Retry: vibe gpt auth
207
+ console.error(`
208
+ ❌ GPT authentication failed
209
+
210
+ Error: ${message}
211
+
212
+ Retry: vibe gpt auth
213
213
  `);
214
214
  process.exit(1);
215
215
  }
@@ -223,31 +223,31 @@ export function gptStatus() {
223
223
  const storage = require(gptStoragePath);
224
224
  const accounts = storage.getAllAccounts();
225
225
  if (accounts.length === 0) {
226
- console.log(`
227
- 📊 GPT Status
228
-
229
- No authenticated account
230
-
231
- Login: vibe gpt auth
226
+ console.log(`
227
+ 📊 GPT Status
228
+
229
+ No authenticated account
230
+
231
+ Login: vibe gpt auth
232
232
  `);
233
233
  return;
234
234
  }
235
235
  const activeAccount = storage.getActiveAccount();
236
236
  const isExpired = storage.isTokenExpired(activeAccount);
237
- console.log(`
238
- 📊 GPT Status
239
-
240
- Active: ${activeAccount.email}
241
- Account ID: ${activeAccount.accountId || '(none)'}
242
- Token: ${isExpired ? '⚠️ Expired (auto-refresh)' : '✅ Valid'}
243
- Last used: ${new Date(activeAccount.lastUsed).toLocaleString()}
244
-
245
- Accounts (${accounts.length}):
246
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
247
-
248
- ⚠️ Note: ChatGPT Plus/Pro subscription required.
249
-
250
- Logout: vibe gpt logout
237
+ console.log(`
238
+ 📊 GPT Status
239
+
240
+ Active: ${activeAccount.email}
241
+ Account ID: ${activeAccount.accountId || '(none)'}
242
+ Token: ${isExpired ? '⚠️ Expired (auto-refresh)' : '✅ Valid'}
243
+ Last used: ${new Date(activeAccount.lastUsed).toLocaleString()}
244
+
245
+ Accounts (${accounts.length}):
246
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
247
+
248
+ ⚠️ Note: ChatGPT Plus/Pro subscription required.
249
+
250
+ Logout: vibe gpt logout
251
251
  `);
252
252
  }
253
253
  catch (error) {
@@ -268,12 +268,12 @@ export function gptLogout() {
268
268
  return;
269
269
  }
270
270
  storage.clearAccounts();
271
- console.log(`
272
- ✅ GPT logged out
273
-
274
- Account ${activeAccount.email} removed.
275
-
276
- Login again: vibe gpt auth
271
+ console.log(`
272
+ ✅ GPT logged out
273
+
274
+ Account ${activeAccount.email} removed.
275
+
276
+ Login again: vibe gpt auth
277
277
  `);
278
278
  // config.json 업데이트
279
279
  const projectRoot = process.cwd();
@@ -304,11 +304,11 @@ Login again: vibe gpt auth
304
304
  * Gemini OAuth 인증
305
305
  */
306
306
  export async function geminiAuth() {
307
- console.log(`
308
- 🔐 Gemini Authentication (OAuth)
309
-
310
- With Gemini Advanced subscription, you can use it at no additional cost.
311
- Login with your Google account in browser.
307
+ console.log(`
308
+ 🔐 Gemini Authentication (OAuth)
309
+
310
+ With Gemini Advanced subscription, you can use it at no additional cost.
311
+ Login with your Google account in browser.
312
312
  `);
313
313
  try {
314
314
  const geminiOAuthPath = path.join(__dirname, '../lib/gemini-oauth.js');
@@ -323,18 +323,18 @@ Login with your Google account in browser.
323
323
  expires: tokens.expires,
324
324
  projectId: tokens.projectId,
325
325
  });
326
- console.log(`
327
- ✅ Gemini authenticated!
328
-
329
- Account: ${tokens.email}
330
- Project: ${tokens.projectId || '(auto-detected)'}
331
-
332
- Available models:
333
- - Gemini 3 Flash (fast, exploration/search)
334
- - Gemini 3 Pro (high accuracy)
335
-
336
- Status: vibe gemini status
337
- Logout: vibe gemini logout
326
+ console.log(`
327
+ ✅ Gemini authenticated!
328
+
329
+ Account: ${tokens.email}
330
+ Project: ${tokens.projectId || '(auto-detected)'}
331
+
332
+ Available models:
333
+ - Gemini 3 Flash (fast, exploration/search)
334
+ - Gemini 3 Pro (high accuracy)
335
+
336
+ Status: vibe gemini status
337
+ Logout: vibe gemini logout
338
338
  `);
339
339
  // config.json 업데이트
340
340
  const projectRoot = process.cwd();
@@ -356,10 +356,10 @@ Logout: vibe gemini logout
356
356
  }
357
357
  catch { /* ignore: optional operation */ }
358
358
  }
359
- console.log(`
360
- Gemini is called via Hooks:
361
- - Auto-called with "gemini. query" prefix
362
- - Direct use: import('@su-record/vibe/lib/gemini')
359
+ console.log(`
360
+ Gemini is called via Hooks:
361
+ - Auto-called with "gemini. query" prefix
362
+ - Direct use: import('@su-record/vibe/lib/gemini')
363
363
  `);
364
364
  // Windows libuv 핸들 충돌 방지: 서버 완전 종료 대기
365
365
  await new Promise(resolve => setTimeout(resolve, 200));
@@ -367,12 +367,12 @@ Gemini is called via Hooks:
367
367
  }
368
368
  catch (error) {
369
369
  const message = error instanceof Error ? error.message : String(error);
370
- console.error(`
371
- ❌ Gemini authentication failed
372
-
373
- Error: ${message}
374
-
375
- Retry: vibe gemini auth
370
+ console.error(`
371
+ ❌ Gemini authentication failed
372
+
373
+ Error: ${message}
374
+
375
+ Retry: vibe gemini auth
376
376
  `);
377
377
  process.exit(1);
378
378
  }
@@ -388,32 +388,32 @@ export function geminiStatus() {
388
388
  const { GEMINI_MODELS } = require(geminiApiPath);
389
389
  const accounts = storage.getAllAccounts();
390
390
  if (accounts.length === 0) {
391
- console.log(`
392
- 📊 Gemini Status
393
-
394
- No authenticated account
395
-
396
- Login: vibe gemini auth
391
+ console.log(`
392
+ 📊 Gemini Status
393
+
394
+ No authenticated account
395
+
396
+ Login: vibe gemini auth
397
397
  `);
398
398
  return;
399
399
  }
400
400
  const activeAccount = storage.getActiveAccount();
401
401
  const isExpired = storage.isTokenExpired(activeAccount);
402
- console.log(`
403
- 📊 Gemini Status
404
-
405
- Active: ${activeAccount.email}
406
- Project: ${activeAccount.projectId || '(auto)'}
407
- Token: ${isExpired ? '⚠️ Expired (auto-refresh)' : '✅ Valid'}
408
- Last used: ${new Date(activeAccount.lastUsed).toLocaleString()}
409
-
410
- Accounts (${accounts.length}):
411
- ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
412
-
413
- Available models:
414
- ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
415
-
416
- Logout: vibe gemini logout
402
+ console.log(`
403
+ 📊 Gemini Status
404
+
405
+ Active: ${activeAccount.email}
406
+ Project: ${activeAccount.projectId || '(auto)'}
407
+ Token: ${isExpired ? '⚠️ Expired (auto-refresh)' : '✅ Valid'}
408
+ Last used: ${new Date(activeAccount.lastUsed).toLocaleString()}
409
+
410
+ Accounts (${accounts.length}):
411
+ ${accounts.map((acc, i) => ` ${i === storage.loadAccounts()?.activeIndex ? '→' : ' '} ${acc.email}`).join('\n')}
412
+
413
+ Available models:
414
+ ${Object.entries(GEMINI_MODELS).map(([id, info]) => ` - ${id}: ${info.description}`).join('\n')}
415
+
416
+ Logout: vibe gemini logout
417
417
  `);
418
418
  }
419
419
  catch (error) {
@@ -434,12 +434,12 @@ export function geminiLogout() {
434
434
  return;
435
435
  }
436
436
  storage.clearAccounts();
437
- console.log(`
438
- ✅ Gemini logged out
439
-
440
- Account ${activeAccount.email} removed.
441
-
442
- Login again: vibe gemini auth
437
+ console.log(`
438
+ ✅ Gemini logged out
439
+
440
+ Account ${activeAccount.email} removed.
441
+
442
+ Login again: vibe gemini auth
443
443
  `);
444
444
  // config.json 업데이트
445
445
  const projectRoot = process.cwd();
@@ -470,33 +470,33 @@ Login again: vibe gemini auth
470
470
  * Auth help (legacy - now shows new format)
471
471
  */
472
472
  export function showAuthHelp() {
473
- console.log(`
474
- 🔐 LLM Authentication
475
-
476
- GPT Commands:
477
- vibe gpt auth OAuth (Plus/Pro subscription)
478
- vibe gpt key <KEY> API key
479
-
480
- Gemini Commands:
481
- vibe gemini auth OAuth (free with Advanced)
482
- vibe gemini key <KEY> API key
483
-
484
- Examples:
485
- vibe gpt auth OpenAI login
486
- vibe gemini auth Google login
487
- vibe gpt key sk-xxx API key setup
473
+ console.log(`
474
+ 🔐 LLM Authentication
475
+
476
+ GPT Commands:
477
+ vibe gpt auth OAuth (Plus/Pro subscription)
478
+ vibe gpt key <KEY> API key
479
+
480
+ Gemini Commands:
481
+ vibe gemini auth OAuth (free with Advanced)
482
+ vibe gemini key <KEY> API key
483
+
484
+ Examples:
485
+ vibe gpt auth OpenAI login
486
+ vibe gemini auth Google login
487
+ vibe gpt key sk-xxx API key setup
488
488
  `);
489
489
  }
490
490
  /**
491
491
  * Logout help (legacy - now shows new format)
492
492
  */
493
493
  export function showLogoutHelp() {
494
- console.log(`
495
- 🚪 LLM Logout
496
-
497
- Usage:
498
- vibe gpt logout GPT logout
499
- vibe gemini logout Gemini logout
494
+ console.log(`
495
+ 🚪 LLM Logout
496
+
497
+ Usage:
498
+ vibe gpt logout GPT logout
499
+ vibe gemini logout Gemini logout
500
500
  `);
501
501
  }
502
502
  //# sourceMappingURL=llm.js.map
@@ -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"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * MCP 서버 관리 함수
3
+ */
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+ import os from 'os';
7
+ import { execSync } from 'child_process';
8
+ // Claude CLI 경로 캐시
9
+ let _claudePath = null;
10
+ /**
11
+ * Claude CLI 경로 찾기 (Windows/macOS/Linux 지원)
12
+ */
13
+ export function getClaudePath() {
14
+ // 1. PATH에서 'claude' 찾기
15
+ try {
16
+ execSync('claude --version', { stdio: 'pipe' });
17
+ return 'claude';
18
+ }
19
+ catch { /* ignore: optional operation */
20
+ // PATH에 없으면 플랫폼별 기본 경로 확인
21
+ }
22
+ // 2. 플랫폼별 네이티브 설치 경로 확인
23
+ if (process.platform === 'win32') {
24
+ const possiblePaths = [
25
+ path.join(os.homedir(), '.local', 'bin', 'claude.exe'),
26
+ path.join(process.env.APPDATA || '', 'npm', 'claude.cmd'),
27
+ path.join(os.homedir(), 'AppData', 'Local', 'Programs', '@anthropic', 'claude-code', 'claude.exe'),
28
+ path.join(os.homedir(), 'AppData', 'Local', 'AnthropicClaude', 'claude.exe'),
29
+ path.join(os.homedir(), '.claude', 'local', 'claude.exe'),
30
+ 'C:\\Program Files\\Anthropic\\Claude\\claude.exe',
31
+ 'C:\\Program Files (x86)\\Anthropic\\Claude\\claude.exe',
32
+ ];
33
+ for (const p of possiblePaths) {
34
+ if (p && fs.existsSync(p)) {
35
+ return `"${p}"`;
36
+ }
37
+ }
38
+ }
39
+ else {
40
+ const possiblePaths = [
41
+ path.join(os.homedir(), '.local', 'bin', 'claude'),
42
+ '/usr/local/bin/claude',
43
+ '/usr/bin/claude',
44
+ '/opt/homebrew/bin/claude',
45
+ ];
46
+ for (const p of possiblePaths) {
47
+ if (fs.existsSync(p)) {
48
+ return p;
49
+ }
50
+ }
51
+ }
52
+ return 'claude';
53
+ }
54
+ /**
55
+ * Claude CLI 명령어 반환 (캐시됨)
56
+ */
57
+ export function claudeCmd() {
58
+ if (_claudePath === null) {
59
+ _claudePath = getClaudePath();
60
+ }
61
+ return _claudePath;
62
+ }
63
+ /**
64
+ * Claude CLI가 사용 가능한지 확인
65
+ */
66
+ export function isClaudeCliAvailable() {
67
+ const cmd = claudeCmd();
68
+ try {
69
+ execSync(`${cmd} --version`, { stdio: 'pipe' });
70
+ return true;
71
+ }
72
+ catch { /* ignore: optional operation */
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Claude 설정 파일 경로
78
+ */
79
+ export function getClaudeSettingsPath() {
80
+ return path.join(os.homedir(), '.claude', 'settings.json');
81
+ }
82
+ /**
83
+ * Claude 설정 파일 읽기
84
+ */
85
+ export function readClaudeSettings() {
86
+ const settingsPath = getClaudeSettingsPath();
87
+ if (fs.existsSync(settingsPath)) {
88
+ try {
89
+ return JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
90
+ }
91
+ catch { /* ignore: optional operation */
92
+ return {};
93
+ }
94
+ }
95
+ return {};
96
+ }
97
+ /**
98
+ * Claude 설정 파일 쓰기
99
+ */
100
+ export function writeClaudeSettings(settings) {
101
+ const settingsPath = getClaudeSettingsPath();
102
+ const dir = path.dirname(settingsPath);
103
+ if (!fs.existsSync(dir)) {
104
+ fs.mkdirSync(dir, { recursive: true });
105
+ }
106
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
107
+ }
108
+ /**
109
+ * MCP 서버 추가 (설정 파일 직접 수정)
110
+ */
111
+ export function addMcpServer(name, config) {
112
+ const settings = readClaudeSettings();
113
+ if (!settings.mcpServers) {
114
+ settings.mcpServers = {};
115
+ }
116
+ settings.mcpServers[name] = config;
117
+ writeClaudeSettings(settings);
118
+ }
119
+ /**
120
+ * MCP 서버 제거
121
+ */
122
+ export function removeMcpServer(name) {
123
+ const settings = readClaudeSettings();
124
+ if (settings.mcpServers && settings.mcpServers[name]) {
125
+ delete settings.mcpServers[name];
126
+ writeClaudeSettings(settings);
127
+ }
128
+ }
129
+ /**
130
+ * MCP 서버 등록 (CLI 우선, 실패시 직접 수정)
131
+ */
132
+ export function registerMcp(name, config) {
133
+ const cmd = claudeCmd();
134
+ // CLI로 먼저 시도
135
+ try {
136
+ const argsStr = config.args.map(a => `"${a}"`).join(' ');
137
+ execSync(`${cmd} mcp add ${name} ${config.command} ${argsStr}`, {
138
+ stdio: 'pipe'
139
+ });
140
+ return;
141
+ }
142
+ catch { /* ignore: optional operation */
143
+ // CLI 실패시 직접 설정 파일 수정
144
+ }
145
+ // 설정 파일 직접 수정
146
+ addMcpServer(name, config);
147
+ }
148
+ /**
149
+ * MCP 서버 등록 해제
150
+ */
151
+ export function unregisterMcp(name) {
152
+ const cmd = claudeCmd();
153
+ try {
154
+ execSync(`${cmd} mcp remove ${name}`, { stdio: 'pipe' });
155
+ }
156
+ catch { /* ignore: optional operation */
157
+ // 실패해도 무시
158
+ }
159
+ // 설정 파일에서도 제거
160
+ removeMcpServer(name);
161
+ }
162
+ /**
163
+ * MCP 서버가 등록되어 있는지 확인
164
+ */
165
+ export function isMcpRegistered(name) {
166
+ const settings = readClaudeSettings();
167
+ return !!settings.mcpServers?.[name];
168
+ }
169
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":";AACA;;;GAGG;AAUH;;GAEG;AACH,iBAAS,gBAAgB,IAAI,MAAM,CAKlC;AAiND,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAqQF,iBAAS,mBAAmB,CAC1B,cAAc,EAAE,MAAM,EACtB,cAAc,GAAE,MAAM,EAAO,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAiIN;AAED;;GAEG;AACH,iBAAS,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CA0BhF;AAED;;;GAGG;AACH,iBAAS,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAqxB3D;AAyID,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,CAAC"}
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":";AACA;;;GAGG;AAUH;;GAEG;AACH,iBAAS,gBAAgB,IAAI,MAAM,CAKlC;AA8OD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAqQF,iBAAS,mBAAmB,CAC1B,cAAc,EAAE,MAAM,EACtB,cAAc,GAAE,MAAM,EAAO,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAiIN;AAED;;GAEG;AACH,iBAAS,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CA0BhF;AAED;;;GAGG;AACH,iBAAS,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAqxB3D;AA2ID,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,CAAC"}