@su-record/vibe 2.4.6 → 2.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/.claude/settings.local.json +28 -24
  2. package/README.md +32 -15
  3. package/dist/cli/auth.d.ts +13 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +118 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/collaborator.d.ts +8 -0
  8. package/dist/cli/collaborator.d.ts.map +1 -0
  9. package/dist/cli/collaborator.js +136 -0
  10. package/dist/cli/collaborator.js.map +1 -0
  11. package/dist/cli/detect.d.ts +35 -0
  12. package/dist/cli/detect.d.ts.map +1 -0
  13. package/dist/cli/detect.js +376 -0
  14. package/dist/cli/detect.js.map +1 -0
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +201 -2001
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/llm.d.ts +49 -0
  19. package/dist/cli/llm.d.ts.map +1 -0
  20. package/dist/cli/llm.js +464 -0
  21. package/dist/cli/llm.js.map +1 -0
  22. package/dist/cli/mcp.d.ts +49 -0
  23. package/dist/cli/mcp.d.ts.map +1 -0
  24. package/dist/cli/mcp.js +169 -0
  25. package/dist/cli/mcp.js.map +1 -0
  26. package/dist/cli/setup.d.ts +53 -0
  27. package/dist/cli/setup.d.ts.map +1 -0
  28. package/dist/cli/setup.js +455 -0
  29. package/dist/cli/setup.js.map +1 -0
  30. package/dist/cli/types.d.ts +83 -0
  31. package/dist/cli/types.d.ts.map +1 -0
  32. package/dist/cli/types.js +5 -0
  33. package/dist/cli/types.js.map +1 -0
  34. package/dist/cli/utils.d.ts +40 -0
  35. package/dist/cli/utils.d.ts.map +1 -0
  36. package/dist/cli/utils.js +112 -0
  37. package/dist/cli/utils.js.map +1 -0
  38. package/dist/lib/MemoryManager.js +93 -93
  39. package/dist/lib/MemoryManager.js.map +1 -1
  40. package/dist/lib/ProjectCache.d.ts.map +1 -1
  41. package/dist/lib/ProjectCache.js +2 -1
  42. package/dist/lib/ProjectCache.js.map +1 -1
  43. package/dist/lib/PythonParser.js +109 -109
  44. package/dist/lib/PythonParser.js.map +1 -1
  45. package/dist/lib/constants.d.ts +31 -0
  46. package/dist/lib/constants.d.ts.map +1 -0
  47. package/dist/lib/constants.js +36 -0
  48. package/dist/lib/constants.js.map +1 -0
  49. package/dist/lib/gemini-api.d.ts.map +1 -1
  50. package/dist/lib/gemini-api.js +1 -6
  51. package/dist/lib/gemini-api.js.map +1 -1
  52. package/dist/lib/gemini-mcp.js +15 -15
  53. package/dist/lib/gemini-oauth.js +36 -36
  54. package/dist/lib/gemini-oauth.js.map +1 -1
  55. package/dist/lib/gpt-api.d.ts.map +1 -1
  56. package/dist/lib/gpt-api.js +6 -11
  57. package/dist/lib/gpt-api.js.map +1 -1
  58. package/dist/lib/gpt-mcp.js +17 -17
  59. package/dist/lib/gpt-oauth.js +45 -45
  60. package/dist/lib/gpt-oauth.js.map +1 -1
  61. package/dist/lib/utils.d.ts +21 -0
  62. package/dist/lib/utils.d.ts.map +1 -0
  63. package/dist/lib/utils.js +51 -0
  64. package/dist/lib/utils.js.map +1 -0
  65. package/dist/orchestrator/agentDiscovery.d.ts.map +1 -1
  66. package/dist/orchestrator/agentDiscovery.js +3 -2
  67. package/dist/orchestrator/agentDiscovery.js.map +1 -1
  68. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  69. package/dist/orchestrator/backgroundAgent.js +4 -16
  70. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  71. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  72. package/dist/orchestrator/orchestrator.js +17 -15
  73. package/dist/orchestrator/orchestrator.js.map +1 -1
  74. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  75. package/dist/orchestrator/parallelResearch.js +30 -44
  76. package/dist/orchestrator/parallelResearch.js.map +1 -1
  77. package/dist/orchestrator/types.d.ts +3 -2
  78. package/dist/orchestrator/types.d.ts.map +1 -1
  79. package/dist/tools/analytics/getUsageAnalytics.js +13 -13
  80. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -1
  81. package/dist/tools/convention/getCodingGuide.js +2 -2
  82. package/dist/tools/convention/getCodingGuide.js.map +1 -1
  83. package/dist/tools/memory/createMemoryTimeline.js +11 -11
  84. package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
  85. package/dist/tools/memory/getMemoryGraph.js +12 -12
  86. package/dist/tools/memory/getSessionContext.js +10 -10
  87. package/dist/tools/memory/getSessionContext.js.map +1 -1
  88. package/dist/tools/memory/linkMemories.js +14 -14
  89. package/dist/tools/memory/listMemories.js +4 -4
  90. package/dist/tools/memory/recallMemory.js +4 -4
  91. package/dist/tools/memory/restoreSessionContext.js +2 -2
  92. package/dist/tools/memory/restoreSessionContext.js.map +1 -1
  93. package/dist/tools/memory/saveMemory.js +4 -4
  94. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  95. package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
  96. package/dist/tools/memory/startSession.js +3 -3
  97. package/dist/tools/memory/startSession.js.map +1 -1
  98. package/dist/tools/planning/generatePrd.js +46 -46
  99. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  100. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  101. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  102. package/dist/tools/semantic/findReferences.d.ts.map +1 -1
  103. package/dist/tools/semantic/findReferences.js +2 -1
  104. package/dist/tools/semantic/findReferences.js.map +1 -1
  105. package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
  106. package/dist/tools/semantic/findSymbol.js +2 -1
  107. package/dist/tools/semantic/findSymbol.js.map +1 -1
  108. package/hooks/hooks.json +10 -8
  109. package/package.json +4 -2
@@ -0,0 +1,455 @@
1
+ /**
2
+ * init/update 공통 설정 함수
3
+ */
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+ import os from 'os';
7
+ import { fileURLToPath } from 'url';
8
+ import { log, ensureDir, copyDirRecursive, removeDirRecursive } from './utils.js';
9
+ import { registerMcp, unregisterMcp } from './mcp.js';
10
+ import { STACK_NAMES, getLanguageRulesContent } from './detect.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ // ============================================================================
14
+ // MCP 서버 등록
15
+ // ============================================================================
16
+ /**
17
+ * MCP 서버 등록 (context7만 유지, GPT/Gemini는 Hook으로 대체)
18
+ */
19
+ export function registerMcpServers(isUpdate = false) {
20
+ // 레거시 MCP 제거 (vibe, vibe-gemini, vibe-gpt)
21
+ unregisterMcp('vibe');
22
+ unregisterMcp('vibe-gemini');
23
+ unregisterMcp('vibe-gpt');
24
+ if (isUpdate) {
25
+ unregisterMcp('context7');
26
+ }
27
+ // context7 MCP만 등록 (라이브러리 문서 검색용)
28
+ try {
29
+ registerMcp('context7', { command: 'npx', args: ['-y', '@upstash/context7-mcp@latest'] });
30
+ log(isUpdate ? ' ✅ context7 MCP 전역 등록 완료\n' : ' ✅ Context7 MCP 등록 완료 (라이브러리 문서 검색)\n');
31
+ }
32
+ catch (e) {
33
+ const message = e instanceof Error ? e.message : String(e);
34
+ if (message.includes('already exists')) {
35
+ log(' ℹ️ Context7 MCP 이미 등록됨\n');
36
+ }
37
+ else {
38
+ log(' ⚠️ Context7 MCP 수동 등록 필요\n');
39
+ }
40
+ }
41
+ log(' ℹ️ GPT/Gemini는 Hook으로 직접 호출 (MCP 불필요)\n');
42
+ }
43
+ // ============================================================================
44
+ // constitution.md 생성/업데이트
45
+ // ============================================================================
46
+ /**
47
+ * constitution.md 생성 또는 업데이트
48
+ */
49
+ export function updateConstitution(vibeDir, detectedStacks, stackDetails) {
50
+ const templatePath = path.join(__dirname, '../../templates/constitution-template.md');
51
+ const constitutionPath = path.join(vibeDir, 'constitution.md');
52
+ if (!fs.existsSync(templatePath))
53
+ return;
54
+ let constitution = fs.readFileSync(templatePath, 'utf-8');
55
+ const backendStack = detectedStacks.find(s => s.type.includes('python') || s.type.includes('node') ||
56
+ s.type.includes('go') || s.type.includes('java') || s.type.includes('rust'));
57
+ const frontendStack = detectedStacks.find(s => s.type.includes('react') || s.type.includes('vue') ||
58
+ s.type.includes('flutter') || s.type.includes('swift') || s.type.includes('android'));
59
+ if (backendStack && STACK_NAMES[backendStack.type]) {
60
+ const info = STACK_NAMES[backendStack.type];
61
+ constitution = constitution.replace('- Language: {Python 3.11+ / Node.js / etc.}', `- Language: ${info.lang}`);
62
+ constitution = constitution.replace('- Framework: {FastAPI / Express / etc.}', `- Framework: ${info.framework}`);
63
+ }
64
+ if (frontendStack && STACK_NAMES[frontendStack.type]) {
65
+ const info = STACK_NAMES[frontendStack.type];
66
+ constitution = constitution.replace('- Framework: {Flutter / React / etc.}', `- Framework: ${info.framework}`);
67
+ }
68
+ constitution = constitution.replace('- Database: {PostgreSQL / MongoDB / etc.}', stackDetails.databases.length > 0 ? `- Database: ${stackDetails.databases.join(', ')}` : '- Database: (프로젝트에 맞게 설정)');
69
+ constitution = constitution.replace('- State Management: {Provider / Redux / etc.}', stackDetails.stateManagement.length > 0 ? `- State Management: ${stackDetails.stateManagement.join(', ')}` : '- State Management: (프로젝트에 맞게 설정)');
70
+ constitution = constitution.replace('- Hosting: {Cloud Run / Vercel / etc.}', stackDetails.hosting.length > 0 ? `- Hosting: ${stackDetails.hosting.join(', ')}` : '- Hosting: (프로젝트에 맞게 설정)');
71
+ constitution = constitution.replace('- CI/CD: {GitHub Actions / etc.}', stackDetails.cicd.length > 0 ? `- CI/CD: ${stackDetails.cicd.join(', ')}` : '- CI/CD: (프로젝트에 맞게 설정)');
72
+ fs.writeFileSync(constitutionPath, constitution);
73
+ }
74
+ // ============================================================================
75
+ // CLAUDE.md 업데이트
76
+ // ============================================================================
77
+ /**
78
+ * CLAUDE.md 업데이트 (vibe 섹션 추가/교체)
79
+ */
80
+ export function updateClaudeMd(projectRoot, detectedStacks, isUpdate = false) {
81
+ const vibeClaudeMd = path.join(__dirname, '../../CLAUDE.md');
82
+ const projectClaudeMd = path.join(projectRoot, 'CLAUDE.md');
83
+ if (!fs.existsSync(vibeClaudeMd))
84
+ return;
85
+ let vibeContent = fs.readFileSync(vibeClaudeMd, 'utf-8');
86
+ // 감지된 기술 스택에 따라 언어별 규칙 추가
87
+ const languageRules = getLanguageRulesContent(detectedStacks);
88
+ if (languageRules) {
89
+ vibeContent = vibeContent.replace('### 에러 처리 필수', languageRules + '\n\n### 에러 처리 필수');
90
+ }
91
+ if (fs.existsSync(projectClaudeMd)) {
92
+ const existingContent = fs.readFileSync(projectClaudeMd, 'utf-8');
93
+ if (isUpdate) {
94
+ // update: vibe 섹션 찾아서 교체
95
+ const vibeStartMarker = '# VIBE';
96
+ const sectionSeparator = '\n---\n';
97
+ if (existingContent.includes(vibeStartMarker)) {
98
+ const vibeStartIdx = existingContent.indexOf(vibeStartMarker);
99
+ const beforeVibe = existingContent.substring(0, vibeStartIdx).trimEnd();
100
+ const afterVibeStart = existingContent.substring(vibeStartIdx);
101
+ const nextSeparatorIdx = afterVibeStart.indexOf(sectionSeparator);
102
+ let afterVibe = '';
103
+ if (nextSeparatorIdx !== -1) {
104
+ afterVibe = afterVibeStart.substring(nextSeparatorIdx);
105
+ }
106
+ const newContent = beforeVibe + (beforeVibe ? '\n\n---\n\n' : '') + vibeContent + afterVibe;
107
+ fs.writeFileSync(projectClaudeMd, newContent);
108
+ log(' ✅ CLAUDE.md vibe 섹션 업데이트 완료\n');
109
+ }
110
+ else if (!existingContent.includes('/vibe.spec')) {
111
+ const mergedContent = existingContent.trim() + '\n\n---\n\n' + vibeContent;
112
+ fs.writeFileSync(projectClaudeMd, mergedContent);
113
+ log(' ✅ CLAUDE.md에 vibe 섹션 추가\n');
114
+ }
115
+ else {
116
+ log(' ℹ️ CLAUDE.md vibe 섹션 유지\n');
117
+ }
118
+ }
119
+ else {
120
+ // init: 없으면 추가
121
+ if (!existingContent.includes('/vibe.spec')) {
122
+ const mergedContent = existingContent.trim() + '\n\n---\n\n' + vibeContent;
123
+ fs.writeFileSync(projectClaudeMd, mergedContent);
124
+ log(' ✅ CLAUDE.md에 vibe 섹션 추가\n');
125
+ }
126
+ else {
127
+ log(' ℹ️ CLAUDE.md에 vibe 섹션 이미 존재\n');
128
+ }
129
+ }
130
+ }
131
+ else {
132
+ fs.writeFileSync(projectClaudeMd, vibeContent);
133
+ log(' ✅ CLAUDE.md 생성\n');
134
+ }
135
+ }
136
+ // ============================================================================
137
+ // 규칙 복사/업데이트
138
+ // ============================================================================
139
+ /**
140
+ * .claude/vibe/rules/ 복사 또는 업데이트
141
+ */
142
+ export function updateRules(vibeDir, detectedStacks, isUpdate = false) {
143
+ const rulesSource = path.join(__dirname, '../../.claude/vibe/rules');
144
+ const rulesTarget = path.join(vibeDir, 'rules');
145
+ // core, quality, standards, tools 복사
146
+ const coreDirs = ['core', 'quality', 'standards', 'tools'];
147
+ coreDirs.forEach(dir => {
148
+ const src = path.join(rulesSource, dir);
149
+ const dst = path.join(rulesTarget, dir);
150
+ if (fs.existsSync(src)) {
151
+ copyDirRecursive(src, dst);
152
+ }
153
+ });
154
+ // languages 폴더 처리
155
+ const langSource = path.join(rulesSource, 'languages');
156
+ const langTarget = path.join(rulesTarget, 'languages');
157
+ if (isUpdate && fs.existsSync(langTarget)) {
158
+ removeDirRecursive(langTarget);
159
+ }
160
+ ensureDir(langTarget);
161
+ // 감지된 스택 타입에 해당하는 언어 규칙만 복사
162
+ const detectedTypes = new Set(detectedStacks.map(s => s.type));
163
+ if (fs.existsSync(langSource)) {
164
+ const langFiles = fs.readdirSync(langSource);
165
+ langFiles.forEach(file => {
166
+ const langType = file.replace('.md', '');
167
+ if (detectedTypes.has(langType)) {
168
+ fs.copyFileSync(path.join(langSource, file), path.join(langTarget, file));
169
+ }
170
+ });
171
+ }
172
+ log(' ✅ 코딩 규칙 ' + (isUpdate ? '업데이트' : '설치') + ' 완료 (.claude/vibe/rules/)\n');
173
+ }
174
+ // ============================================================================
175
+ // 전역 assets 설치/업데이트
176
+ // ============================================================================
177
+ /**
178
+ * ~/.claude/ 전역 assets 설치 (commands, agents, skills, hooks)
179
+ */
180
+ export function installGlobalAssets(isUpdate = false) {
181
+ const globalClaudeDir = path.join(os.homedir(), '.claude');
182
+ ensureDir(globalClaudeDir);
183
+ // commands
184
+ const globalCommandsDir = path.join(globalClaudeDir, 'commands');
185
+ ensureDir(globalCommandsDir);
186
+ const commandsSource = path.join(__dirname, '../../commands');
187
+ copyDirRecursive(commandsSource, globalCommandsDir);
188
+ log(' ✅ 슬래시 커맨드 ' + (isUpdate ? '업데이트' : '설치') + ' 완료 (~/.claude/commands/)\n');
189
+ // agents
190
+ const globalAgentsDir = path.join(globalClaudeDir, 'agents');
191
+ ensureDir(globalAgentsDir);
192
+ const agentsSource = path.join(__dirname, '../../agents');
193
+ copyDirRecursive(agentsSource, globalAgentsDir);
194
+ log(' ✅ 서브에이전트 ' + (isUpdate ? '업데이트' : '설치') + ' 완료 (~/.claude/agents/)\n');
195
+ // skills
196
+ const globalSkillsDir = path.join(globalClaudeDir, 'skills');
197
+ ensureDir(globalSkillsDir);
198
+ const skillsSource = path.join(__dirname, '../../skills');
199
+ if (fs.existsSync(skillsSource)) {
200
+ copyDirRecursive(skillsSource, globalSkillsDir);
201
+ log(' ✅ 스킬 ' + (isUpdate ? '업데이트' : '설치') + ' 완료 (~/.claude/skills/)\n');
202
+ }
203
+ // hooks
204
+ const globalSettingsPath = path.join(globalClaudeDir, 'settings.json');
205
+ const hooksTemplate = path.join(__dirname, '../../hooks/hooks.json');
206
+ if (fs.existsSync(hooksTemplate)) {
207
+ const vibeHooks = JSON.parse(fs.readFileSync(hooksTemplate, 'utf-8'));
208
+ if (fs.existsSync(globalSettingsPath)) {
209
+ const existingSettings = JSON.parse(fs.readFileSync(globalSettingsPath, 'utf-8'));
210
+ existingSettings.hooks = vibeHooks.hooks;
211
+ fs.writeFileSync(globalSettingsPath, JSON.stringify(existingSettings, null, 2));
212
+ }
213
+ else {
214
+ fs.copyFileSync(hooksTemplate, globalSettingsPath);
215
+ }
216
+ log(' ✅ Hooks 설정 ' + (isUpdate ? '업데이트' : '설치') + ' 완료 (~/.claude/settings.json)\n');
217
+ }
218
+ }
219
+ // ============================================================================
220
+ // 레거시 마이그레이션
221
+ // ============================================================================
222
+ /**
223
+ * .vibe/ → .claude/vibe/ 마이그레이션
224
+ */
225
+ export function migrateLegacyVibe(projectRoot, vibeDir) {
226
+ const legacyVibeDir = path.join(projectRoot, '.vibe');
227
+ if (!fs.existsSync(legacyVibeDir))
228
+ return false;
229
+ log(' 🔄 레거시 .vibe/ 폴더 마이그레이션 중...\n');
230
+ ensureDir(vibeDir);
231
+ try {
232
+ const itemsToMigrate = ['specs', 'features', 'solutions', 'todos', 'memory', 'rules', 'config.json', 'constitution.md'];
233
+ itemsToMigrate.forEach(item => {
234
+ const src = path.join(legacyVibeDir, item);
235
+ const dst = path.join(vibeDir, item);
236
+ if (fs.existsSync(src) && !fs.existsSync(dst)) {
237
+ if (fs.statSync(src).isDirectory()) {
238
+ copyDirRecursive(src, dst);
239
+ }
240
+ else {
241
+ fs.copyFileSync(src, dst);
242
+ }
243
+ }
244
+ });
245
+ removeDirRecursive(legacyVibeDir);
246
+ log(' ✅ .vibe/ → .claude/vibe/ 마이그레이션 완료\n');
247
+ return true;
248
+ }
249
+ catch { /* ignore: optional operation */
250
+ log(' ⚠️ 마이그레이션 실패 - .vibe/ 폴더 수동 삭제 필요\n');
251
+ return false;
252
+ }
253
+ }
254
+ // ============================================================================
255
+ // .gitignore 업데이트
256
+ // ============================================================================
257
+ /**
258
+ * .gitignore 업데이트 (vibe MCP 제외, settings.local.json 제거)
259
+ */
260
+ export function updateGitignore(projectRoot) {
261
+ const gitignorePath = path.join(projectRoot, '.gitignore');
262
+ const mcpIgnore = '.claude/vibe/mcp/';
263
+ let gitignore = '';
264
+ if (fs.existsSync(gitignorePath)) {
265
+ gitignore = fs.readFileSync(gitignorePath, 'utf-8');
266
+ }
267
+ let modified = false;
268
+ // mcp 폴더 제외 추가
269
+ if (!gitignore.includes(mcpIgnore)) {
270
+ gitignore += `\n# vibe MCP\n${mcpIgnore}\n`;
271
+ modified = true;
272
+ }
273
+ // settings.local.json 제거
274
+ if (gitignore.includes('settings.local.json')) {
275
+ gitignore = gitignore.replace(/\.claude\/settings\.local\.json\n?/g, '');
276
+ gitignore = gitignore.replace(/settings\.local\.json\n?/g, '');
277
+ modified = true;
278
+ log(' ✅ .gitignore에서 settings.local.json 제거\n');
279
+ }
280
+ if (modified) {
281
+ fs.writeFileSync(gitignorePath, gitignore);
282
+ }
283
+ }
284
+ // ============================================================================
285
+ // config.json 생성/업데이트
286
+ // ============================================================================
287
+ /**
288
+ * config.json 생성 또는 업데이트
289
+ */
290
+ export function updateConfig(vibeDir, detectedStacks, stackDetails, isUpdate = false) {
291
+ const configPath = path.join(vibeDir, 'config.json');
292
+ if (isUpdate && fs.existsSync(configPath)) {
293
+ try {
294
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
295
+ config.stacks = detectedStacks;
296
+ config.details = stackDetails;
297
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
298
+ }
299
+ catch { /* ignore: optional operation */ }
300
+ }
301
+ else {
302
+ const config = {
303
+ language: 'ko',
304
+ quality: { strict: true, autoVerify: true },
305
+ stacks: detectedStacks,
306
+ details: stackDetails
307
+ };
308
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
309
+ }
310
+ }
311
+ // ============================================================================
312
+ // 레거시 정리
313
+ // ============================================================================
314
+ /**
315
+ * 레거시 파일/폴더 정리
316
+ */
317
+ export function cleanupLegacy(projectRoot, claudeDir) {
318
+ // .agent/rules/ 정리
319
+ const oldRulesDir = path.join(projectRoot, '.agent/rules');
320
+ const oldAgentDir = path.join(projectRoot, '.agent');
321
+ if (fs.existsSync(oldRulesDir)) {
322
+ log(' 🔄 마이그레이션: .agent/rules/ → .claude/vibe/rules/\n');
323
+ removeDirRecursive(oldRulesDir);
324
+ if (fs.existsSync(oldAgentDir) && fs.readdirSync(oldAgentDir).length === 0) {
325
+ fs.rmdirSync(oldAgentDir);
326
+ }
327
+ log(' ✅ 기존 .agent/rules/ 폴더 정리 완료\n');
328
+ }
329
+ // 레거시 커맨드 파일 정리
330
+ const commandsDir = path.join(claudeDir, 'commands');
331
+ if (fs.existsSync(commandsDir)) {
332
+ const legacyCommands = [
333
+ 'vibe.analyze.md', 'vibe.compound.md', 'vibe.continue.md',
334
+ 'vibe.diagram.md', 'vibe.e2e.md', 'vibe.reason.md',
335
+ 'vibe.setup.md', 'vibe.ui.md'
336
+ ];
337
+ legacyCommands.forEach(cmd => {
338
+ const cmdPath = path.join(commandsDir, cmd);
339
+ if (fs.existsSync(cmdPath)) {
340
+ fs.unlinkSync(cmdPath);
341
+ }
342
+ });
343
+ }
344
+ // 레거시 에이전트 파일 정리
345
+ const agentsDir = path.join(claudeDir, 'agents');
346
+ if (fs.existsSync(agentsDir)) {
347
+ const legacyAgents = ['reviewer.md', 'analyzer.md', 'reasoner.md'];
348
+ legacyAgents.forEach(agent => {
349
+ const agentPath = path.join(agentsDir, agent);
350
+ if (fs.existsSync(agentPath)) {
351
+ fs.unlinkSync(agentPath);
352
+ }
353
+ });
354
+ }
355
+ // 프로젝트 로컬 settings.json 제거 (전역으로 이동됨)
356
+ const localSettingsPath = path.join(claudeDir, 'settings.json');
357
+ if (fs.existsSync(localSettingsPath)) {
358
+ log(' 🧹 프로젝트 로컬 settings.json 제거 (전역으로 통합됨)...\n');
359
+ try {
360
+ fs.unlinkSync(localSettingsPath);
361
+ log(' ✅ .claude/settings.json 삭제 완료\n');
362
+ }
363
+ catch { /* ignore: optional operation */
364
+ log(' ⚠️ .claude/settings.json 수동 삭제 필요\n');
365
+ }
366
+ }
367
+ }
368
+ /**
369
+ * 프로젝트 로컬 설정/자산 제거 (전역으로 이동됨)
370
+ */
371
+ export function removeLocalAssets(claudeDir) {
372
+ const localAssets = [
373
+ { path: path.join(claudeDir, 'settings.json'), isDir: false },
374
+ { path: path.join(claudeDir, 'settings.local.json'), isDir: false },
375
+ { path: path.join(claudeDir, 'commands'), isDir: true },
376
+ { path: path.join(claudeDir, 'agents'), isDir: true },
377
+ { path: path.join(claudeDir, 'skills'), isDir: true },
378
+ ];
379
+ localAssets.forEach(asset => {
380
+ if (fs.existsSync(asset.path)) {
381
+ if (asset.isDir) {
382
+ removeDirRecursive(asset.path);
383
+ }
384
+ else {
385
+ fs.unlinkSync(asset.path);
386
+ }
387
+ const name = path.basename(asset.path);
388
+ log(` 🧹 프로젝트 로컬 ${name}${asset.isDir ? '/' : ''} 제거 (전역으로 이동)\n`);
389
+ }
390
+ });
391
+ }
392
+ /**
393
+ * ~/.claude.json 정리 (로컬 MCP 설정 제거)
394
+ */
395
+ export function cleanupClaudeConfig() {
396
+ const claudeConfigPath = path.join(os.homedir(), '.claude.json');
397
+ if (!fs.existsSync(claudeConfigPath))
398
+ return;
399
+ try {
400
+ const claudeConfig = JSON.parse(fs.readFileSync(claudeConfigPath, 'utf-8'));
401
+ let configModified = false;
402
+ if (claudeConfig.projects) {
403
+ for (const [projectPath, projectConfig] of Object.entries(claudeConfig.projects)) {
404
+ if (projectConfig.mcpServers) {
405
+ if (projectConfig.mcpServers.vibe) {
406
+ const vibeArgs = projectConfig.mcpServers.vibe.args || [];
407
+ const isLocalPath = vibeArgs.some((arg) => arg.includes('.vibe/mcp/') || arg.includes('.vibe\\mcp\\'));
408
+ if (isLocalPath) {
409
+ delete projectConfig.mcpServers.vibe;
410
+ configModified = true;
411
+ log(` 🧹 ${projectPath}: 로컬 vibe MCP 제거\n`);
412
+ }
413
+ }
414
+ if (projectConfig.mcpServers['vibe-gemini']) {
415
+ const geminiArgs = projectConfig.mcpServers['vibe-gemini'].args || [];
416
+ const isLocalPath = geminiArgs.some((arg) => arg.includes('.vibe/') || arg.includes('.vibe\\'));
417
+ if (isLocalPath) {
418
+ delete projectConfig.mcpServers['vibe-gemini'];
419
+ configModified = true;
420
+ }
421
+ }
422
+ if (projectConfig.mcpServers.context7) {
423
+ delete projectConfig.mcpServers.context7;
424
+ configModified = true;
425
+ }
426
+ }
427
+ }
428
+ }
429
+ if (configModified) {
430
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(claudeConfig, null, 2));
431
+ log(' ✅ ~/.claude.json 로컬 MCP 설정 정리 완료\n');
432
+ }
433
+ }
434
+ catch (e) {
435
+ const message = e instanceof Error ? e.message : String(e);
436
+ log(' ⚠️ ~/.claude.json 정리 실패: ' + message + '\n');
437
+ }
438
+ }
439
+ /**
440
+ * 레거시 mcp/ 폴더 정리
441
+ */
442
+ export function cleanupLegacyMcp(vibeDir) {
443
+ const oldMcpDir = path.join(vibeDir, 'mcp');
444
+ if (fs.existsSync(oldMcpDir)) {
445
+ log(' 🧹 기존 mcp/ 폴더 정리 중...\n');
446
+ try {
447
+ removeDirRecursive(oldMcpDir);
448
+ log(' ✅ mcp/ 폴더 삭제 완료\n');
449
+ }
450
+ catch { /* ignore: optional operation */
451
+ log(' ⚠️ mcp/ 폴더 수동 삭제 필요\n');
452
+ }
453
+ }
454
+ }
455
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * CLI 타입 정의
3
+ */
4
+ export interface CliOptions {
5
+ silent: boolean;
6
+ }
7
+ export interface LLMAuthStatus {
8
+ type: 'oauth' | 'apikey';
9
+ email?: string;
10
+ valid: boolean;
11
+ }
12
+ export interface LLMStatusMap {
13
+ gpt: LLMAuthStatus | null;
14
+ gemini: LLMAuthStatus | null;
15
+ }
16
+ export interface DetectedStack {
17
+ type: string;
18
+ path: string;
19
+ }
20
+ export type TechStack = DetectedStack;
21
+ export interface StackDetails {
22
+ databases: string[];
23
+ stateManagement: string[];
24
+ hosting: string[];
25
+ cicd: string[];
26
+ }
27
+ export interface DetectionResult {
28
+ stacks: DetectedStack[];
29
+ details: StackDetails;
30
+ }
31
+ export interface ExternalLLMConfig {
32
+ name: string;
33
+ role: string;
34
+ description: string;
35
+ package: string;
36
+ envKey: string;
37
+ }
38
+ export interface VibeConfig {
39
+ language?: string;
40
+ quality?: {
41
+ strict: boolean;
42
+ autoVerify: boolean;
43
+ };
44
+ stacks?: DetectedStack[];
45
+ details?: StackDetails;
46
+ models?: {
47
+ gpt?: {
48
+ enabled: boolean;
49
+ authType?: string;
50
+ email?: string;
51
+ role?: string;
52
+ description?: string;
53
+ apiKey?: string;
54
+ };
55
+ gemini?: {
56
+ enabled: boolean;
57
+ authType?: string;
58
+ email?: string;
59
+ role?: string;
60
+ description?: string;
61
+ apiKey?: string;
62
+ };
63
+ };
64
+ }
65
+ export interface OAuthTokens {
66
+ email: string;
67
+ accessToken: string;
68
+ refreshToken: string;
69
+ idToken?: string;
70
+ expires: number;
71
+ accountId?: string;
72
+ projectId?: string;
73
+ }
74
+ export interface McpServerConfig {
75
+ command: string;
76
+ args: string[];
77
+ env?: Record<string, string>;
78
+ }
79
+ export interface ClaudeSettings {
80
+ mcpServers?: Record<string, McpServerConfig>;
81
+ [key: string]: unknown;
82
+ }
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACpH,MAAM,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACxH,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CLI 타입 정의
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * CLI 유틸리티 함수
3
+ */
4
+ export declare function setSilentMode(silent: boolean): void;
5
+ /**
6
+ * 로그 출력 (silent 모드 지원)
7
+ */
8
+ export declare function log(message: string): void;
9
+ /**
10
+ * 디렉토리 생성 (재귀)
11
+ */
12
+ export declare function ensureDir(dir: string): void;
13
+ /**
14
+ * 디렉토리 내용 복사 (1단계만)
15
+ */
16
+ export declare function copyDirContents(sourceDir: string, targetDir: string): void;
17
+ /**
18
+ * 디렉토리 재귀 복사
19
+ */
20
+ export declare function copyDirRecursive(sourceDir: string, targetDir: string): void;
21
+ /**
22
+ * 디렉토리 재귀 삭제
23
+ */
24
+ export declare function removeDirRecursive(dirPath: string): void;
25
+ /**
26
+ * package.json 읽기
27
+ */
28
+ export declare function getPackageJson(): {
29
+ version: string;
30
+ };
31
+ /**
32
+ * 버전 비교 (semver)
33
+ * @returns 1 if a > b, -1 if a < b, 0 if equal
34
+ */
35
+ export declare function compareVersions(a: string, b: string): number;
36
+ /**
37
+ * __dirname 반환 (ESM 호환)
38
+ */
39
+ export declare function getCliDir(): string;
40
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAe3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAYxD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAOpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}