@su-record/vibe 2.5.11 → 2.5.13

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 (341) hide show
  1. package/CLAUDE.md +243 -0
  2. package/LICENSE +21 -21
  3. package/README.md +262 -262
  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/e2e-tester.md +266 -266
  11. package/agents/explorer-low.md +42 -42
  12. package/agents/explorer-medium.md +59 -59
  13. package/agents/explorer.md +48 -48
  14. package/agents/implementer-low.md +43 -43
  15. package/agents/implementer-medium.md +52 -52
  16. package/agents/implementer.md +54 -54
  17. package/agents/refactor-cleaner.md +143 -143
  18. package/agents/research/best-practices-agent.md +189 -189
  19. package/agents/research/codebase-patterns-agent.md +147 -147
  20. package/agents/research/framework-docs-agent.md +178 -178
  21. package/agents/research/security-advisory-agent.md +203 -203
  22. package/agents/review/architecture-reviewer.md +107 -107
  23. package/agents/review/complexity-reviewer.md +116 -116
  24. package/agents/review/data-integrity-reviewer.md +88 -88
  25. package/agents/review/git-history-reviewer.md +103 -103
  26. package/agents/review/performance-reviewer.md +86 -86
  27. package/agents/review/python-reviewer.md +150 -150
  28. package/agents/review/rails-reviewer.md +139 -139
  29. package/agents/review/react-reviewer.md +144 -144
  30. package/agents/review/security-reviewer.md +80 -80
  31. package/agents/review/simplicity-reviewer.md +140 -140
  32. package/agents/review/test-coverage-reviewer.md +116 -116
  33. package/agents/review/typescript-reviewer.md +127 -127
  34. package/agents/searcher.md +54 -54
  35. package/agents/simplifier.md +120 -120
  36. package/agents/tester.md +49 -49
  37. package/agents/ui-previewer.md +129 -129
  38. package/commands/vibe.analyze.md +356 -356
  39. package/commands/vibe.reason.md +329 -329
  40. package/commands/vibe.review.md +326 -326
  41. package/commands/vibe.run.md +1117 -1051
  42. package/commands/vibe.spec.md +1058 -1058
  43. package/commands/vibe.utils.md +353 -296
  44. package/commands/vibe.verify.md +375 -375
  45. package/dist/cli/collaborator.js +52 -52
  46. package/dist/cli/detect.js +32 -32
  47. package/dist/cli/index.js +102 -102
  48. package/dist/cli/llm.js +144 -144
  49. package/dist/cli/mcp.d.ts +49 -0
  50. package/dist/cli/mcp.d.ts.map +1 -0
  51. package/dist/cli/mcp.js +169 -0
  52. package/dist/cli/mcp.js.map +1 -0
  53. package/dist/cli/postinstall.js +180 -2
  54. package/dist/cli/postinstall.js.map +1 -1
  55. package/dist/cli/setup/GlobalInstaller.d.ts +24 -0
  56. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -0
  57. package/dist/cli/setup/GlobalInstaller.js +130 -0
  58. package/dist/cli/setup/GlobalInstaller.js.map +1 -0
  59. package/dist/cli/setup/LanguageDetector.d.ts +16 -0
  60. package/dist/cli/setup/LanguageDetector.d.ts.map +1 -0
  61. package/dist/cli/setup/LanguageDetector.js +49 -0
  62. package/dist/cli/setup/LanguageDetector.js.map +1 -0
  63. package/dist/cli/setup/LegacyMigration.d.ts +25 -0
  64. package/dist/cli/setup/LegacyMigration.d.ts.map +1 -0
  65. package/dist/cli/setup/LegacyMigration.js +162 -0
  66. package/dist/cli/setup/LegacyMigration.js.map +1 -0
  67. package/dist/cli/setup/ProjectSetup.d.ts +30 -0
  68. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -0
  69. package/dist/cli/setup/ProjectSetup.js +238 -0
  70. package/dist/cli/setup/ProjectSetup.js.map +1 -0
  71. package/dist/cli/setup/index.d.ts +14 -0
  72. package/dist/cli/setup/index.d.ts.map +1 -0
  73. package/dist/cli/setup/index.js +18 -0
  74. package/dist/cli/setup/index.js.map +1 -0
  75. package/dist/cli/setup.d.ts +10 -77
  76. package/dist/cli/setup.d.ts.map +1 -1
  77. package/dist/cli/setup.js +15 -592
  78. package/dist/cli/setup.js.map +1 -1
  79. package/dist/lib/DeepInit.d.ts +0 -2
  80. package/dist/lib/DeepInit.d.ts.map +1 -1
  81. package/dist/lib/DeepInit.js +24 -26
  82. package/dist/lib/DeepInit.js.map +1 -1
  83. package/dist/lib/IterationTracker.d.ts +0 -2
  84. package/dist/lib/IterationTracker.d.ts.map +1 -1
  85. package/dist/lib/IterationTracker.js +11 -13
  86. package/dist/lib/IterationTracker.js.map +1 -1
  87. package/dist/lib/ModelRouter.d.ts +0 -2
  88. package/dist/lib/ModelRouter.d.ts.map +1 -1
  89. package/dist/lib/ModelRouter.js +0 -2
  90. package/dist/lib/ModelRouter.js.map +1 -1
  91. package/dist/lib/OrchestrateWorkflow.d.ts +1 -3
  92. package/dist/lib/OrchestrateWorkflow.d.ts.map +1 -1
  93. package/dist/lib/OrchestrateWorkflow.js +1 -3
  94. package/dist/lib/OrchestrateWorkflow.js.map +1 -1
  95. package/dist/lib/PythonParser.js +108 -108
  96. package/dist/lib/SkillFrontmatter.d.ts +0 -2
  97. package/dist/lib/SkillFrontmatter.d.ts.map +1 -1
  98. package/dist/lib/SkillFrontmatter.js +28 -30
  99. package/dist/lib/SkillFrontmatter.js.map +1 -1
  100. package/dist/lib/SkillQualityGate.d.ts +0 -2
  101. package/dist/lib/SkillQualityGate.d.ts.map +1 -1
  102. package/dist/lib/SkillQualityGate.js +9 -11
  103. package/dist/lib/SkillQualityGate.js.map +1 -1
  104. package/dist/lib/SkillRepository.d.ts +117 -0
  105. package/dist/lib/SkillRepository.d.ts.map +1 -0
  106. package/dist/lib/SkillRepository.js +477 -0
  107. package/dist/lib/SkillRepository.js.map +1 -0
  108. package/dist/lib/UltraQA.d.ts +0 -2
  109. package/dist/lib/UltraQA.d.ts.map +1 -1
  110. package/dist/lib/UltraQA.js +77 -79
  111. package/dist/lib/UltraQA.js.map +1 -1
  112. package/dist/lib/gemini-mcp.d.ts +10 -0
  113. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  114. package/dist/lib/gemini-mcp.js +353 -0
  115. package/dist/lib/gemini-mcp.js.map +1 -0
  116. package/dist/lib/gpt-api.js +4 -4
  117. package/dist/lib/gpt-mcp.d.ts +10 -0
  118. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  119. package/dist/lib/gpt-mcp.js +352 -0
  120. package/dist/lib/gpt-mcp.js.map +1 -0
  121. package/dist/lib/llm/auth/ApiKeyManager.d.ts +21 -0
  122. package/dist/lib/llm/auth/ApiKeyManager.d.ts.map +1 -0
  123. package/dist/lib/llm/auth/ApiKeyManager.js +43 -0
  124. package/dist/lib/llm/auth/ApiKeyManager.js.map +1 -0
  125. package/dist/lib/llm/auth/ConfigManager.d.ts +29 -0
  126. package/dist/lib/llm/auth/ConfigManager.d.ts.map +1 -0
  127. package/dist/lib/llm/auth/ConfigManager.js +67 -0
  128. package/dist/lib/llm/auth/ConfigManager.js.map +1 -0
  129. package/dist/lib/llm/auth/index.d.ts +25 -0
  130. package/dist/lib/llm/auth/index.d.ts.map +1 -0
  131. package/dist/lib/llm/auth/index.js +83 -0
  132. package/dist/lib/llm/auth/index.js.map +1 -0
  133. package/dist/lib/llm/index.d.ts +10 -0
  134. package/dist/lib/llm/index.d.ts.map +1 -0
  135. package/dist/lib/llm/index.js +12 -0
  136. package/dist/lib/llm/index.js.map +1 -0
  137. package/dist/lib/llm/types.d.ts +96 -0
  138. package/dist/lib/llm/types.d.ts.map +1 -0
  139. package/dist/lib/llm/types.js +17 -0
  140. package/dist/lib/llm/types.js.map +1 -0
  141. package/dist/lib/llm/utils/index.d.ts +6 -0
  142. package/dist/lib/llm/utils/index.d.ts.map +1 -0
  143. package/dist/lib/llm/utils/index.js +6 -0
  144. package/dist/lib/llm/utils/index.js.map +1 -0
  145. package/dist/lib/llm/utils/retry.d.ts +25 -0
  146. package/dist/lib/llm/utils/retry.d.ts.map +1 -0
  147. package/dist/lib/llm/utils/retry.js +72 -0
  148. package/dist/lib/llm/utils/retry.js.map +1 -0
  149. package/dist/lib/llm/utils/stream.d.ts +13 -0
  150. package/dist/lib/llm/utils/stream.d.ts.map +1 -0
  151. package/dist/lib/llm/utils/stream.js +110 -0
  152. package/dist/lib/llm/utils/stream.js.map +1 -0
  153. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  154. package/dist/lib/memory/MemorySearch.js +20 -20
  155. package/dist/lib/memory/MemoryStorage.js +64 -64
  156. package/dist/orchestrator/AgentExecutor.d.ts +23 -0
  157. package/dist/orchestrator/AgentExecutor.d.ts.map +1 -0
  158. package/dist/orchestrator/AgentExecutor.js +231 -0
  159. package/dist/orchestrator/AgentExecutor.js.map +1 -0
  160. package/dist/orchestrator/AgentManager.d.ts +73 -0
  161. package/dist/orchestrator/AgentManager.d.ts.map +1 -0
  162. package/dist/orchestrator/AgentManager.js +184 -0
  163. package/dist/orchestrator/AgentManager.js.map +1 -0
  164. package/dist/orchestrator/LLMCluster.d.ts +70 -0
  165. package/dist/orchestrator/LLMCluster.d.ts.map +1 -0
  166. package/dist/orchestrator/LLMCluster.js +91 -0
  167. package/dist/orchestrator/LLMCluster.js.map +1 -0
  168. package/dist/orchestrator/MultiLlmResearch.d.ts +27 -0
  169. package/dist/orchestrator/MultiLlmResearch.d.ts.map +1 -0
  170. package/dist/orchestrator/MultiLlmResearch.js +145 -0
  171. package/dist/orchestrator/MultiLlmResearch.js.map +1 -0
  172. package/dist/orchestrator/SessionStore.d.ts +41 -0
  173. package/dist/orchestrator/SessionStore.d.ts.map +1 -0
  174. package/dist/orchestrator/SessionStore.js +117 -0
  175. package/dist/orchestrator/SessionStore.js.map +1 -0
  176. package/dist/orchestrator/SmartRouter.d.ts +68 -0
  177. package/dist/orchestrator/SmartRouter.d.ts.map +1 -0
  178. package/dist/orchestrator/SmartRouter.js +256 -0
  179. package/dist/orchestrator/SmartRouter.js.map +1 -0
  180. package/dist/orchestrator/backgroundAgent.d.ts +10 -28
  181. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  182. package/dist/orchestrator/backgroundAgent.js +11 -346
  183. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  184. package/dist/orchestrator/index.d.ts +3 -0
  185. package/dist/orchestrator/index.d.ts.map +1 -1
  186. package/dist/orchestrator/index.js +4 -0
  187. package/dist/orchestrator/index.js.map +1 -1
  188. package/dist/orchestrator/orchestrator.d.ts +19 -154
  189. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  190. package/dist/orchestrator/orchestrator.js +90 -514
  191. package/dist/orchestrator/orchestrator.js.map +1 -1
  192. package/dist/orchestrator/parallelResearch.d.ts +5 -12
  193. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  194. package/dist/orchestrator/parallelResearch.js +10 -193
  195. package/dist/orchestrator/parallelResearch.js.map +1 -1
  196. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  197. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  198. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  199. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  200. package/dist/tools/analytics/index.d.ts +5 -0
  201. package/dist/tools/analytics/index.d.ts.map +1 -0
  202. package/dist/tools/analytics/index.js +5 -0
  203. package/dist/tools/analytics/index.js.map +1 -0
  204. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  205. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  206. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  207. package/dist/tools/convention/getCodingGuide.js +69 -0
  208. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  209. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  210. package/dist/tools/index.d.ts +2 -0
  211. package/dist/tools/index.d.ts.map +1 -1
  212. package/dist/tools/index.js +2 -0
  213. package/dist/tools/index.js.map +1 -1
  214. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  215. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  216. package/dist/tools/planning/analyzeRequirements.js +171 -0
  217. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  218. package/dist/tools/planning/createUserStories.d.ts +9 -0
  219. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  220. package/dist/tools/planning/createUserStories.js +124 -0
  221. package/dist/tools/planning/createUserStories.js.map +1 -0
  222. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  223. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  224. package/dist/tools/planning/featureRoadmap.js +207 -0
  225. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  226. package/dist/tools/planning/generatePrd.d.ts +11 -0
  227. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  228. package/dist/tools/planning/generatePrd.js +161 -0
  229. package/dist/tools/planning/generatePrd.js.map +1 -0
  230. package/dist/tools/planning/index.d.ts +8 -0
  231. package/dist/tools/planning/index.d.ts.map +1 -0
  232. package/dist/tools/planning/index.js +8 -0
  233. package/dist/tools/planning/index.js.map +1 -0
  234. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  235. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  236. package/dist/tools/prompt/analyzePrompt.js +150 -0
  237. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  238. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  239. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  240. package/dist/tools/prompt/enhancePrompt.js +110 -0
  241. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  242. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  243. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  244. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  245. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  246. package/dist/tools/prompt/index.d.ts +7 -0
  247. package/dist/tools/prompt/index.d.ts.map +1 -0
  248. package/dist/tools/prompt/index.js +7 -0
  249. package/dist/tools/prompt/index.js.map +1 -0
  250. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  251. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  252. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  253. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  254. package/dist/tools/reasoning/index.d.ts +5 -0
  255. package/dist/tools/reasoning/index.d.ts.map +1 -0
  256. package/dist/tools/reasoning/index.js +5 -0
  257. package/dist/tools/reasoning/index.js.map +1 -0
  258. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  259. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  260. package/dist/tools/thinking/analyzeProblem.js +55 -0
  261. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  262. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  263. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  264. package/dist/tools/thinking/breakDownProblem.js +145 -0
  265. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  266. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  267. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  268. package/dist/tools/thinking/createThinkingChain.js +44 -0
  269. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  270. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  271. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  272. package/dist/tools/thinking/formatAsPlan.js +78 -0
  273. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  274. package/dist/tools/thinking/index.d.ts +10 -0
  275. package/dist/tools/thinking/index.d.ts.map +1 -0
  276. package/dist/tools/thinking/index.js +10 -0
  277. package/dist/tools/thinking/index.js.map +1 -0
  278. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  279. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  280. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  281. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  282. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  283. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  284. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  285. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  286. package/hooks/hooks.json +222 -222
  287. package/hooks/scripts/code-check.js +22 -22
  288. package/hooks/scripts/code-review.js +22 -22
  289. package/hooks/scripts/complexity.js +22 -22
  290. package/hooks/scripts/compound.js +23 -23
  291. package/hooks/scripts/context-save.js +33 -33
  292. package/hooks/scripts/generate-brand-assets.js +472 -0
  293. package/hooks/scripts/hud-multiline.js +262 -264
  294. package/hooks/scripts/hud-status.js +291 -293
  295. package/hooks/scripts/keyword-detector.js +214 -216
  296. package/hooks/scripts/llm-orchestrate.js +171 -171
  297. package/hooks/scripts/post-edit.js +97 -97
  298. package/hooks/scripts/post-tool-verify.js +210 -212
  299. package/hooks/scripts/pre-tool-guard.js +125 -127
  300. package/hooks/scripts/recall.js +22 -22
  301. package/hooks/scripts/session-start.js +30 -30
  302. package/hooks/scripts/skill-injector.js +191 -193
  303. package/hooks/scripts/utils.js +97 -97
  304. package/languages/csharp-unity.md +515 -515
  305. package/languages/gdscript-godot.md +470 -470
  306. package/languages/ruby-rails.md +489 -489
  307. package/languages/typescript-angular.md +433 -433
  308. package/languages/typescript-astro.md +416 -416
  309. package/languages/typescript-electron.md +406 -406
  310. package/languages/typescript-nestjs.md +524 -524
  311. package/languages/typescript-svelte.md +407 -407
  312. package/languages/typescript-tauri.md +365 -365
  313. package/package.json +83 -83
  314. package/skills/brand-assets.md +141 -0
  315. package/skills/commerce-patterns.md +361 -0
  316. package/skills/context7-usage.md +102 -102
  317. package/skills/e2e-commerce.md +304 -0
  318. package/skills/frontend-design.md +92 -0
  319. package/skills/git-worktree.md +181 -181
  320. package/skills/parallel-research.md +77 -77
  321. package/skills/priority-todos.md +239 -239
  322. package/skills/seo-checklist.md +244 -0
  323. package/skills/tool-fallback.md +190 -190
  324. package/skills/vibe-capabilities.md +161 -161
  325. package/vibe/constitution.md +227 -227
  326. package/vibe/rules/core/communication-guide.md +98 -98
  327. package/vibe/rules/core/development-philosophy.md +52 -52
  328. package/vibe/rules/core/quick-start.md +102 -102
  329. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  330. package/vibe/rules/quality/checklist.md +276 -276
  331. package/vibe/rules/quality/testing-strategy.md +440 -440
  332. package/vibe/rules/standards/anti-patterns.md +541 -541
  333. package/vibe/rules/standards/code-structure.md +291 -291
  334. package/vibe/rules/standards/complexity-metrics.md +313 -313
  335. package/vibe/rules/standards/naming-conventions.md +198 -198
  336. package/vibe/setup.sh +31 -31
  337. package/vibe/templates/constitution-template.md +252 -252
  338. package/vibe/templates/contract-backend-template.md +526 -526
  339. package/vibe/templates/contract-frontend-template.md +599 -599
  340. package/vibe/templates/feature-template.md +96 -96
  341. 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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"}