@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.
- package/CLAUDE.md +243 -0
- package/LICENSE +21 -21
- package/README.md +262 -262
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +189 -189
- package/agents/research/codebase-patterns-agent.md +147 -147
- package/agents/research/framework-docs-agent.md +178 -178
- package/agents/research/security-advisory-agent.md +203 -203
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +129 -129
- package/commands/vibe.analyze.md +356 -356
- package/commands/vibe.reason.md +329 -329
- package/commands/vibe.review.md +326 -326
- package/commands/vibe.run.md +1117 -1051
- package/commands/vibe.spec.md +1058 -1058
- package/commands/vibe.utils.md +353 -296
- package/commands/vibe.verify.md +375 -375
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +102 -102
- package/dist/cli/llm.js +144 -144
- package/dist/cli/mcp.d.ts +49 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +169 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/postinstall.js +180 -2
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/setup/GlobalInstaller.d.ts +24 -0
- package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -0
- package/dist/cli/setup/GlobalInstaller.js +130 -0
- package/dist/cli/setup/GlobalInstaller.js.map +1 -0
- package/dist/cli/setup/LanguageDetector.d.ts +16 -0
- package/dist/cli/setup/LanguageDetector.d.ts.map +1 -0
- package/dist/cli/setup/LanguageDetector.js +49 -0
- package/dist/cli/setup/LanguageDetector.js.map +1 -0
- package/dist/cli/setup/LegacyMigration.d.ts +25 -0
- package/dist/cli/setup/LegacyMigration.d.ts.map +1 -0
- package/dist/cli/setup/LegacyMigration.js +162 -0
- package/dist/cli/setup/LegacyMigration.js.map +1 -0
- package/dist/cli/setup/ProjectSetup.d.ts +30 -0
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -0
- package/dist/cli/setup/ProjectSetup.js +238 -0
- package/dist/cli/setup/ProjectSetup.js.map +1 -0
- package/dist/cli/setup/index.d.ts +14 -0
- package/dist/cli/setup/index.d.ts.map +1 -0
- package/dist/cli/setup/index.js +18 -0
- package/dist/cli/setup/index.js.map +1 -0
- package/dist/cli/setup.d.ts +10 -77
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +15 -592
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/DeepInit.d.ts +0 -2
- package/dist/lib/DeepInit.d.ts.map +1 -1
- package/dist/lib/DeepInit.js +24 -26
- package/dist/lib/DeepInit.js.map +1 -1
- package/dist/lib/IterationTracker.d.ts +0 -2
- package/dist/lib/IterationTracker.d.ts.map +1 -1
- package/dist/lib/IterationTracker.js +11 -13
- package/dist/lib/IterationTracker.js.map +1 -1
- package/dist/lib/ModelRouter.d.ts +0 -2
- package/dist/lib/ModelRouter.d.ts.map +1 -1
- package/dist/lib/ModelRouter.js +0 -2
- package/dist/lib/ModelRouter.js.map +1 -1
- package/dist/lib/OrchestrateWorkflow.d.ts +1 -3
- package/dist/lib/OrchestrateWorkflow.d.ts.map +1 -1
- package/dist/lib/OrchestrateWorkflow.js +1 -3
- package/dist/lib/OrchestrateWorkflow.js.map +1 -1
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/SkillFrontmatter.d.ts +0 -2
- package/dist/lib/SkillFrontmatter.d.ts.map +1 -1
- package/dist/lib/SkillFrontmatter.js +28 -30
- package/dist/lib/SkillFrontmatter.js.map +1 -1
- package/dist/lib/SkillQualityGate.d.ts +0 -2
- package/dist/lib/SkillQualityGate.d.ts.map +1 -1
- package/dist/lib/SkillQualityGate.js +9 -11
- package/dist/lib/SkillQualityGate.js.map +1 -1
- package/dist/lib/SkillRepository.d.ts +117 -0
- package/dist/lib/SkillRepository.d.ts.map +1 -0
- package/dist/lib/SkillRepository.js +477 -0
- package/dist/lib/SkillRepository.js.map +1 -0
- package/dist/lib/UltraQA.d.ts +0 -2
- package/dist/lib/UltraQA.d.ts.map +1 -1
- package/dist/lib/UltraQA.js +77 -79
- package/dist/lib/UltraQA.js.map +1 -1
- package/dist/lib/gemini-mcp.d.ts +10 -0
- package/dist/lib/gemini-mcp.d.ts.map +1 -0
- package/dist/lib/gemini-mcp.js +353 -0
- package/dist/lib/gemini-mcp.js.map +1 -0
- package/dist/lib/gpt-api.js +4 -4
- package/dist/lib/gpt-mcp.d.ts +10 -0
- package/dist/lib/gpt-mcp.d.ts.map +1 -0
- package/dist/lib/gpt-mcp.js +352 -0
- package/dist/lib/gpt-mcp.js.map +1 -0
- package/dist/lib/llm/auth/ApiKeyManager.d.ts +21 -0
- package/dist/lib/llm/auth/ApiKeyManager.d.ts.map +1 -0
- package/dist/lib/llm/auth/ApiKeyManager.js +43 -0
- package/dist/lib/llm/auth/ApiKeyManager.js.map +1 -0
- package/dist/lib/llm/auth/ConfigManager.d.ts +29 -0
- package/dist/lib/llm/auth/ConfigManager.d.ts.map +1 -0
- package/dist/lib/llm/auth/ConfigManager.js +67 -0
- package/dist/lib/llm/auth/ConfigManager.js.map +1 -0
- package/dist/lib/llm/auth/index.d.ts +25 -0
- package/dist/lib/llm/auth/index.d.ts.map +1 -0
- package/dist/lib/llm/auth/index.js +83 -0
- package/dist/lib/llm/auth/index.js.map +1 -0
- package/dist/lib/llm/index.d.ts +10 -0
- package/dist/lib/llm/index.d.ts.map +1 -0
- package/dist/lib/llm/index.js +12 -0
- package/dist/lib/llm/index.js.map +1 -0
- package/dist/lib/llm/types.d.ts +96 -0
- package/dist/lib/llm/types.d.ts.map +1 -0
- package/dist/lib/llm/types.js +17 -0
- package/dist/lib/llm/types.js.map +1 -0
- package/dist/lib/llm/utils/index.d.ts +6 -0
- package/dist/lib/llm/utils/index.d.ts.map +1 -0
- package/dist/lib/llm/utils/index.js +6 -0
- package/dist/lib/llm/utils/index.js.map +1 -0
- package/dist/lib/llm/utils/retry.d.ts +25 -0
- package/dist/lib/llm/utils/retry.d.ts.map +1 -0
- package/dist/lib/llm/utils/retry.js +72 -0
- package/dist/lib/llm/utils/retry.js.map +1 -0
- package/dist/lib/llm/utils/stream.d.ts +13 -0
- package/dist/lib/llm/utils/stream.d.ts.map +1 -0
- package/dist/lib/llm/utils/stream.js +110 -0
- package/dist/lib/llm/utils/stream.js.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/lib/memory/MemorySearch.js +20 -20
- package/dist/lib/memory/MemoryStorage.js +64 -64
- package/dist/orchestrator/AgentExecutor.d.ts +23 -0
- package/dist/orchestrator/AgentExecutor.d.ts.map +1 -0
- package/dist/orchestrator/AgentExecutor.js +231 -0
- package/dist/orchestrator/AgentExecutor.js.map +1 -0
- package/dist/orchestrator/AgentManager.d.ts +73 -0
- package/dist/orchestrator/AgentManager.d.ts.map +1 -0
- package/dist/orchestrator/AgentManager.js +184 -0
- package/dist/orchestrator/AgentManager.js.map +1 -0
- package/dist/orchestrator/LLMCluster.d.ts +70 -0
- package/dist/orchestrator/LLMCluster.d.ts.map +1 -0
- package/dist/orchestrator/LLMCluster.js +91 -0
- package/dist/orchestrator/LLMCluster.js.map +1 -0
- package/dist/orchestrator/MultiLlmResearch.d.ts +27 -0
- package/dist/orchestrator/MultiLlmResearch.d.ts.map +1 -0
- package/dist/orchestrator/MultiLlmResearch.js +145 -0
- package/dist/orchestrator/MultiLlmResearch.js.map +1 -0
- package/dist/orchestrator/SessionStore.d.ts +41 -0
- package/dist/orchestrator/SessionStore.d.ts.map +1 -0
- package/dist/orchestrator/SessionStore.js +117 -0
- package/dist/orchestrator/SessionStore.js.map +1 -0
- package/dist/orchestrator/SmartRouter.d.ts +68 -0
- package/dist/orchestrator/SmartRouter.d.ts.map +1 -0
- package/dist/orchestrator/SmartRouter.js +256 -0
- package/dist/orchestrator/SmartRouter.js.map +1 -0
- package/dist/orchestrator/backgroundAgent.d.ts +10 -28
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
- package/dist/orchestrator/backgroundAgent.js +11 -346
- package/dist/orchestrator/backgroundAgent.js.map +1 -1
- package/dist/orchestrator/index.d.ts +3 -0
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +4 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +19 -154
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +90 -514
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/parallelResearch.d.ts +5 -12
- package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/orchestrator/parallelResearch.js +10 -193
- package/dist/orchestrator/parallelResearch.js.map +1 -1
- package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
- package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
- package/dist/tools/analytics/getUsageAnalytics.js +246 -0
- package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
- package/dist/tools/analytics/index.d.ts +5 -0
- package/dist/tools/analytics/index.d.ts.map +1 -0
- package/dist/tools/analytics/index.js +5 -0
- package/dist/tools/analytics/index.js.map +1 -0
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/getCodingGuide.d.ts +7 -0
- package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
- package/dist/tools/convention/getCodingGuide.js +69 -0
- package/dist/tools/convention/getCodingGuide.js.map +1 -0
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
- package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
- package/dist/tools/planning/analyzeRequirements.js +171 -0
- package/dist/tools/planning/analyzeRequirements.js.map +1 -0
- package/dist/tools/planning/createUserStories.d.ts +9 -0
- package/dist/tools/planning/createUserStories.d.ts.map +1 -0
- package/dist/tools/planning/createUserStories.js +124 -0
- package/dist/tools/planning/createUserStories.js.map +1 -0
- package/dist/tools/planning/featureRoadmap.d.ts +10 -0
- package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
- package/dist/tools/planning/featureRoadmap.js +207 -0
- package/dist/tools/planning/featureRoadmap.js.map +1 -0
- package/dist/tools/planning/generatePrd.d.ts +11 -0
- package/dist/tools/planning/generatePrd.d.ts.map +1 -0
- package/dist/tools/planning/generatePrd.js +161 -0
- package/dist/tools/planning/generatePrd.js.map +1 -0
- package/dist/tools/planning/index.d.ts +8 -0
- package/dist/tools/planning/index.d.ts.map +1 -0
- package/dist/tools/planning/index.js +8 -0
- package/dist/tools/planning/index.js.map +1 -0
- package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
- package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/analyzePrompt.js +150 -0
- package/dist/tools/prompt/analyzePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
- package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePrompt.js +110 -0
- package/dist/tools/prompt/enhancePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.js +332 -0
- package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
- package/dist/tools/prompt/index.d.ts +7 -0
- package/dist/tools/prompt/index.d.ts.map +1 -0
- package/dist/tools/prompt/index.js +7 -0
- package/dist/tools/prompt/index.js.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
- package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
- package/dist/tools/reasoning/index.d.ts +5 -0
- package/dist/tools/reasoning/index.d.ts.map +1 -0
- package/dist/tools/reasoning/index.js +5 -0
- package/dist/tools/reasoning/index.js.map +1 -0
- package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
- package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
- package/dist/tools/thinking/analyzeProblem.js +55 -0
- package/dist/tools/thinking/analyzeProblem.js.map +1 -0
- package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
- package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
- package/dist/tools/thinking/breakDownProblem.js +145 -0
- package/dist/tools/thinking/breakDownProblem.js.map +1 -0
- package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
- package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
- package/dist/tools/thinking/createThinkingChain.js +44 -0
- package/dist/tools/thinking/createThinkingChain.js.map +1 -0
- package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
- package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
- package/dist/tools/thinking/formatAsPlan.js +78 -0
- package/dist/tools/thinking/formatAsPlan.js.map +1 -0
- package/dist/tools/thinking/index.d.ts +10 -0
- package/dist/tools/thinking/index.d.ts.map +1 -0
- package/dist/tools/thinking/index.js +10 -0
- package/dist/tools/thinking/index.js.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
- package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.js +80 -0
- package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
- package/hooks/hooks.json +222 -222
- package/hooks/scripts/code-check.js +22 -22
- package/hooks/scripts/code-review.js +22 -22
- package/hooks/scripts/complexity.js +22 -22
- package/hooks/scripts/compound.js +23 -23
- package/hooks/scripts/context-save.js +33 -33
- package/hooks/scripts/generate-brand-assets.js +472 -0
- package/hooks/scripts/hud-multiline.js +262 -264
- package/hooks/scripts/hud-status.js +291 -293
- package/hooks/scripts/keyword-detector.js +214 -216
- package/hooks/scripts/llm-orchestrate.js +171 -171
- package/hooks/scripts/post-edit.js +97 -97
- package/hooks/scripts/post-tool-verify.js +210 -212
- package/hooks/scripts/pre-tool-guard.js +125 -127
- package/hooks/scripts/recall.js +22 -22
- package/hooks/scripts/session-start.js +30 -30
- package/hooks/scripts/skill-injector.js +191 -193
- package/hooks/scripts/utils.js +97 -97
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +83 -83
- package/skills/brand-assets.md +141 -0
- package/skills/commerce-patterns.md +361 -0
- package/skills/context7-usage.md +102 -102
- package/skills/e2e-commerce.md +304 -0
- package/skills/frontend-design.md +92 -0
- package/skills/git-worktree.md +181 -181
- package/skills/parallel-research.md +77 -77
- package/skills/priority-todos.md +239 -239
- package/skills/seo-checklist.md +244 -0
- package/skills/tool-fallback.md +190 -190
- package/skills/vibe-capabilities.md +161 -161
- package/vibe/constitution.md +227 -227
- package/vibe/rules/core/communication-guide.md +98 -98
- package/vibe/rules/core/development-philosophy.md +52 -52
- package/vibe/rules/core/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- 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"}
|
package/dist/cli/mcp.js
ADDED
|
@@ -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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"}
|