@su-record/vibe 1.1.1 → 1.1.2

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 (2) hide show
  1. package/bin/vibe +81 -31
  2. package/package.json +1 -1
package/bin/vibe CHANGED
@@ -453,22 +453,38 @@ async function init(projectName) {
453
453
  return;
454
454
  }
455
455
 
456
+ // .vibe 폴더 먼저 생성
457
+ ensureDir(vibeDir);
458
+
456
459
  // MCP 서버 등록 (Claude Code)
457
460
  log('🔧 Claude Code MCP 서버 등록 중...\n');
458
461
  const { execSync } = require('child_process');
459
462
 
460
- // 1. hi-ai MCP (프로젝트 로컬 설치)
461
- log(' 📦 hi-ai MCP 패키지 설치 중...\n');
463
+ // 1. hi-ai MCP (.vibe/mcp 폴더 설치)
464
+ const vibeMcpDir = path.join(vibeDir, 'mcp');
465
+ ensureDir(vibeMcpDir);
466
+
467
+ // .vibe/mcp/package.json 생성
468
+ const mcpPackageJson = {
469
+ name: 'vibe-mcp',
470
+ version: '1.0.0',
471
+ private: true,
472
+ dependencies: {
473
+ '@su-record/hi-ai': 'latest'
474
+ }
475
+ };
476
+ fs.writeFileSync(path.join(vibeMcpDir, 'package.json'), JSON.stringify(mcpPackageJson, null, 2));
477
+
478
+ log(' 📦 hi-ai MCP 패키지 설치 중 (.vibe/mcp/)...\n');
462
479
  try {
463
- // 프로젝트에 hi-ai 직접 설치
464
- execSync('npm install @su-record/hi-ai --save-dev', { stdio: 'pipe', cwd: projectRoot });
480
+ execSync('npm install', { stdio: 'pipe', cwd: vibeMcpDir });
465
481
  log(' ✅ hi-ai 패키지 설치 완료\n');
466
482
  } catch (e) {
467
- log(' ⚠️ hi-ai 패키지 설치 실패 (수동 설치: npm install @su-record/hi-ai --save-dev)\n');
483
+ log(' ⚠️ hi-ai 패키지 설치 실패\n');
468
484
  }
469
485
 
470
- // 프로젝트 로컬 경로로 MCP 등록
471
- const mcpPath = path.join(projectRoot, 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
486
+ // .vibe/mcp 경로로 MCP 등록
487
+ const mcpPath = path.join(vibeMcpDir, 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
472
488
  try {
473
489
  execSync(`claude mcp add vibe node "${mcpPath}"`, { stdio: 'pipe' });
474
490
  log(' ✅ vibe MCP 등록 완료\n');
@@ -492,12 +508,25 @@ async function init(projectName) {
492
508
  }
493
509
  }
494
510
 
495
- // .vibe 폴더 구조 생성
496
- const dirs = ['', 'specs', 'features'];
511
+ // .vibe 폴더 구조 생성 (mcp는 이미 생성됨)
512
+ const dirs = ['specs', 'features'];
497
513
  dirs.forEach(dir => {
498
514
  ensureDir(path.join(vibeDir, dir));
499
515
  });
500
516
 
517
+ // .vibe/mcp/node_modules를 gitignore에 추가
518
+ const mcpGitignorePath = path.join(projectRoot, '.gitignore');
519
+ const mcpIgnore = '.vibe/mcp/node_modules';
520
+ if (fs.existsSync(mcpGitignorePath)) {
521
+ let mcpGitignore = fs.readFileSync(mcpGitignorePath, 'utf-8');
522
+ if (!mcpGitignore.includes(mcpIgnore)) {
523
+ mcpGitignore += `\n# vibe MCP\n${mcpIgnore}\n`;
524
+ fs.writeFileSync(mcpGitignorePath, mcpGitignore);
525
+ }
526
+ } else {
527
+ fs.writeFileSync(mcpGitignorePath, `# vibe MCP\n${mcpIgnore}\n`);
528
+ }
529
+
501
530
  // .claude/commands 복사
502
531
  const claudeDir = path.join(projectRoot, '.claude');
503
532
  const commandsDir = path.join(claudeDir, 'commands');
@@ -1091,25 +1120,55 @@ async function update() {
1091
1120
  // 협업자 자동 설치 설정 (update에서도 실행)
1092
1121
  setupCollaboratorAutoInstall(projectRoot);
1093
1122
 
1094
- // MCP 서버: hi-ai 로컬 설치 확인 및 경로 업데이트
1095
- const localHiAiPath = path.join(projectRoot, 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
1096
- if (!fs.existsSync(localHiAiPath)) {
1097
- log(' 📦 hi-ai MCP 패키지 로컬 설치 중...\n');
1123
+ // MCP 서버: .vibe/mcp 폴더에 hi-ai 설치 확인 및 경로 업데이트
1124
+ const vibeMcpDir = path.join(vibeDir, 'mcp');
1125
+ const vibeMcpHiAiPath = path.join(vibeMcpDir, 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
1126
+
1127
+ if (!fs.existsSync(vibeMcpHiAiPath)) {
1128
+ log(' 📦 hi-ai MCP 패키지 설치 중 (.vibe/mcp/)...\n');
1098
1129
  try {
1099
1130
  const { execSync } = require('child_process');
1100
- execSync('npm install @su-record/hi-ai --save-dev', { stdio: 'pipe', cwd: projectRoot });
1131
+ ensureDir(vibeMcpDir);
1132
+
1133
+ // .vibe/mcp/package.json 생성
1134
+ const mcpPackageJson = {
1135
+ name: 'vibe-mcp',
1136
+ version: '1.0.0',
1137
+ private: true,
1138
+ dependencies: {
1139
+ '@su-record/hi-ai': 'latest'
1140
+ }
1141
+ };
1142
+ fs.writeFileSync(path.join(vibeMcpDir, 'package.json'), JSON.stringify(mcpPackageJson, null, 2));
1143
+
1144
+ execSync('npm install', { stdio: 'pipe', cwd: vibeMcpDir });
1101
1145
  log(' ✅ hi-ai 패키지 설치 완료\n');
1102
1146
 
1103
- // MCP 경로 업데이트 (로컬 경로로)
1147
+ // MCP 경로 업데이트
1104
1148
  try {
1105
1149
  execSync(`claude mcp remove vibe`, { stdio: 'pipe' });
1106
- execSync(`claude mcp add vibe node "${localHiAiPath}"`, { stdio: 'pipe' });
1107
- log(' ✅ vibe MCP 경로 업데이트 완료 (로컬)\n');
1150
+ } catch (e) {}
1151
+ try {
1152
+ execSync(`claude mcp add vibe node "${vibeMcpHiAiPath}"`, { stdio: 'pipe' });
1153
+ log(' ✅ vibe MCP 경로 업데이트 완료\n');
1108
1154
  } catch (e) {
1109
- log(' ⚠️ MCP 경로 업데이트 실패 (수동: claude mcp add vibe node "' + localHiAiPath + '")\n');
1155
+ if (!e.message.includes('already exists')) {
1156
+ log(' ⚠️ MCP 경로 업데이트 실패\n');
1157
+ }
1158
+ }
1159
+
1160
+ // .gitignore에 추가
1161
+ const gitignorePath2 = path.join(projectRoot, '.gitignore');
1162
+ const mcpIgnore = '.vibe/mcp/node_modules';
1163
+ if (fs.existsSync(gitignorePath2)) {
1164
+ let gitignore = fs.readFileSync(gitignorePath2, 'utf-8');
1165
+ if (!gitignore.includes(mcpIgnore)) {
1166
+ gitignore += `\n# vibe MCP\n${mcpIgnore}\n`;
1167
+ fs.writeFileSync(gitignorePath2, gitignore);
1168
+ }
1110
1169
  }
1111
1170
  } catch (e) {
1112
- log(' ⚠️ hi-ai 패키지 설치 실패 (수동 설치: npm install @su-record/hi-ai --save-dev)\n');
1171
+ log(' ⚠️ hi-ai 패키지 설치 실패\n');
1113
1172
  }
1114
1173
  }
1115
1174
 
@@ -1368,27 +1427,18 @@ function remove() {
1368
1427
  } catch (e) {}
1369
1428
  }
1370
1429
 
1371
- // 6. hi-ai 패키지 제거 (선택적)
1372
- const hiAiPath = path.join(projectRoot, 'node_modules', '@su-record', 'hi-ai');
1373
- if (fs.existsSync(hiAiPath)) {
1374
- try {
1375
- execSync('npm uninstall @su-record/hi-ai', { stdio: 'pipe', cwd: projectRoot });
1376
- console.log(' ✅ hi-ai 패키지 제거 완료\n');
1377
- } catch (e) {
1378
- console.log(' ⚠️ hi-ai 패키지 제거 실패 (수동: npm uninstall @su-record/hi-ai)\n');
1379
- }
1380
- }
1430
+ // 6. hi-ai 패키지는 .vibe/mcp/에 설치되어 있으므로
1431
+ // .vibe/ 폴더 제거 시 함께 삭제됨 (별도 작업 불필요)
1381
1432
 
1382
1433
  console.log(`
1383
1434
  ✅ vibe 제거 완료!
1384
1435
 
1385
1436
  제거된 항목:
1386
1437
  - MCP 서버 (vibe, context7)
1387
- - .vibe/ 폴더
1438
+ - .vibe/ 폴더 (hi-ai MCP 포함)
1388
1439
  - 슬래시 커맨드 (7개)
1389
1440
  - 서브에이전트 (5개)
1390
1441
  - Hooks 설정
1391
- - hi-ai 패키지
1392
1442
 
1393
1443
  다시 설치하려면: vibe init
1394
1444
  `);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Vibe - Claude Code exclusive SPEC-driven AI coding framework",
5
5
  "bin": {
6
6
  "vibe": "./bin/vibe"