@su-record/vibe 1.0.18 โ†’ 1.0.19

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/bin/vibe CHANGED
@@ -457,8 +457,18 @@ async function init(projectName) {
457
457
  log('๐Ÿ”ง Claude Code MCP ์„œ๋ฒ„ ๋“ฑ๋ก ์ค‘...\n');
458
458
  const { execSync } = require('child_process');
459
459
 
460
- // 1. hi-ai MCP (๊ธฐ์กด)
461
- const mcpPath = path.join(__dirname, '..', 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
460
+ // 1. hi-ai MCP (ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ์„ค์น˜)
461
+ log(' ๐Ÿ“ฆ hi-ai MCP ํŒจํ‚ค์ง€ ์„ค์น˜ ์ค‘...\n');
462
+ try {
463
+ // ํ”„๋กœ์ ํŠธ์— hi-ai ์ง์ ‘ ์„ค์น˜
464
+ execSync('npm install @su-record/hi-ai --save-dev', { stdio: 'pipe', cwd: projectRoot });
465
+ log(' โœ… hi-ai ํŒจํ‚ค์ง€ ์„ค์น˜ ์™„๋ฃŒ\n');
466
+ } catch (e) {
467
+ log(' โš ๏ธ hi-ai ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹คํŒจ (์ˆ˜๋™ ์„ค์น˜: npm install @su-record/hi-ai --save-dev)\n');
468
+ }
469
+
470
+ // ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ๊ฒฝ๋กœ๋กœ MCP ๋“ฑ๋ก
471
+ const mcpPath = path.join(projectRoot, 'node_modules', '@su-record', 'hi-ai', 'dist', 'index.js');
462
472
  try {
463
473
  execSync(`claude mcp add vibe node "${mcpPath}"`, { stdio: 'pipe' });
464
474
  log(' โœ… vibe MCP ๋“ฑ๋ก ์™„๋ฃŒ\n');
@@ -775,6 +785,7 @@ function showHelp() {
775
785
  ๊ธฐ๋ณธ ๋ช…๋ น์–ด:
776
786
  vibe init [project] ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”
777
787
  vibe update ์„ค์ • ์—…๋ฐ์ดํŠธ
788
+ vibe remove vibe ์ œ๊ฑฐ (MCP, ์„ค์ •, ํŒจํ‚ค์ง€)
778
789
  vibe status ํ˜„์žฌ ์„ค์ • ์ƒํƒœ
779
790
  vibe help ๋„์›€๋ง
780
791
  vibe version ๋ฒ„์ „ ์ •๋ณด
@@ -1080,8 +1091,27 @@ async function update() {
1080
1091
  // ํ˜‘์—…์ž ์ž๋™ ์„ค์น˜ ์„ค์ • (update์—์„œ๋„ ์‹คํ–‰)
1081
1092
  setupCollaboratorAutoInstall(projectRoot);
1082
1093
 
1083
- // MCP ์„œ๋ฒ„ ๋“ฑ๋ก ํ™•์ธ (update์—์„œ๋Š” ์Šคํ‚ต - init์—์„œ๋งŒ ๋“ฑ๋ก)
1084
- // update๋Š” ํŒŒ์ผ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ , MCP๋Š” ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •
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');
1098
+ try {
1099
+ const { execSync } = require('child_process');
1100
+ execSync('npm install @su-record/hi-ai --save-dev', { stdio: 'pipe', cwd: projectRoot });
1101
+ log(' โœ… hi-ai ํŒจํ‚ค์ง€ ์„ค์น˜ ์™„๋ฃŒ\n');
1102
+
1103
+ // MCP ๊ฒฝ๋กœ ์—…๋ฐ์ดํŠธ (๋กœ์ปฌ ๊ฒฝ๋กœ๋กœ)
1104
+ try {
1105
+ execSync(`claude mcp remove vibe`, { stdio: 'pipe' });
1106
+ execSync(`claude mcp add vibe node "${localHiAiPath}"`, { stdio: 'pipe' });
1107
+ log(' โœ… vibe MCP ๊ฒฝ๋กœ ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ (๋กœ์ปฌ)\n');
1108
+ } catch (e) {
1109
+ log(' โš ๏ธ MCP ๊ฒฝ๋กœ ์—…๋ฐ์ดํŠธ ์‹คํŒจ (์ˆ˜๋™: claude mcp add vibe node "' + localHiAiPath + '")\n');
1110
+ }
1111
+ } catch (e) {
1112
+ log(' โš ๏ธ hi-ai ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹คํŒจ (์ˆ˜๋™ ์„ค์น˜: npm install @su-record/hi-ai --save-dev)\n');
1113
+ }
1114
+ }
1085
1115
 
1086
1116
  const packageJson = require('../package.json');
1087
1117
  log(`
@@ -1264,6 +1294,106 @@ function showVersion() {
1264
1294
  console.log(`vibe v${packageJson.version}`);
1265
1295
  }
1266
1296
 
1297
+ // vibe ์ œ๊ฑฐ
1298
+ function remove() {
1299
+ const projectRoot = process.cwd();
1300
+ const vibeDir = path.join(projectRoot, '.vibe');
1301
+ const claudeDir = path.join(projectRoot, '.claude');
1302
+
1303
+ if (!fs.existsSync(vibeDir)) {
1304
+ console.log('โŒ vibe ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.');
1305
+ return;
1306
+ }
1307
+
1308
+ console.log('๐Ÿ—‘๏ธ vibe ์ œ๊ฑฐ ์ค‘...\n');
1309
+ const { execSync } = require('child_process');
1310
+
1311
+ // 1. MCP ์„œ๋ฒ„ ์ œ๊ฑฐ
1312
+ try {
1313
+ execSync('claude mcp remove vibe', { stdio: 'pipe' });
1314
+ console.log(' โœ… vibe MCP ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1315
+ } catch (e) {
1316
+ console.log(' โ„น๏ธ vibe MCP ์ด๋ฏธ ์ œ๊ฑฐ๋จ ๋˜๋Š” ์—†์Œ\n');
1317
+ }
1318
+
1319
+ try {
1320
+ execSync('claude mcp remove context7', { stdio: 'pipe' });
1321
+ console.log(' โœ… context7 MCP ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1322
+ } catch (e) {
1323
+ console.log(' โ„น๏ธ context7 MCP ์ด๋ฏธ ์ œ๊ฑฐ๋จ ๋˜๋Š” ์—†์Œ\n');
1324
+ }
1325
+
1326
+ // 2. .vibe ํด๋” ์ œ๊ฑฐ
1327
+ if (fs.existsSync(vibeDir)) {
1328
+ removeDirRecursive(vibeDir);
1329
+ console.log(' โœ… .vibe/ ํด๋” ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1330
+ }
1331
+
1332
+ // 3. .claude/commands ์ œ๊ฑฐ (vibe ๊ด€๋ จ๋งŒ)
1333
+ const commandsDir = path.join(claudeDir, 'commands');
1334
+ if (fs.existsSync(commandsDir)) {
1335
+ const vibeCommands = ['vibe.spec.md', 'vibe.run.md', 'vibe.verify.md', 'vibe.reason.md', 'vibe.analyze.md', 'vibe.ui.md', 'vibe.diagram.md'];
1336
+ vibeCommands.forEach(cmd => {
1337
+ const cmdPath = path.join(commandsDir, cmd);
1338
+ if (fs.existsSync(cmdPath)) {
1339
+ fs.unlinkSync(cmdPath);
1340
+ }
1341
+ });
1342
+ console.log(' โœ… ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1343
+ }
1344
+
1345
+ // 4. .claude/agents ์ œ๊ฑฐ (vibe ๊ด€๋ จ๋งŒ)
1346
+ const agentsDir = path.join(claudeDir, 'agents');
1347
+ if (fs.existsSync(agentsDir)) {
1348
+ const vibeAgents = ['simplifier.md', 'explorer.md', 'implementer.md', 'tester.md', 'searcher.md'];
1349
+ vibeAgents.forEach(agent => {
1350
+ const agentPath = path.join(agentsDir, agent);
1351
+ if (fs.existsSync(agentPath)) {
1352
+ fs.unlinkSync(agentPath);
1353
+ }
1354
+ });
1355
+ console.log(' โœ… ์„œ๋ธŒ์—์ด์ „ํŠธ ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1356
+ }
1357
+
1358
+ // 5. .claude/settings.json์—์„œ hooks ์ œ๊ฑฐ
1359
+ const settingsPath = path.join(claudeDir, 'settings.json');
1360
+ if (fs.existsSync(settingsPath)) {
1361
+ try {
1362
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
1363
+ if (settings.hooks) {
1364
+ delete settings.hooks;
1365
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
1366
+ console.log(' โœ… Hooks ์„ค์ • ์ œ๊ฑฐ ์™„๋ฃŒ\n');
1367
+ }
1368
+ } catch (e) {}
1369
+ }
1370
+
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
+ }
1381
+
1382
+ console.log(`
1383
+ โœ… vibe ์ œ๊ฑฐ ์™„๋ฃŒ!
1384
+
1385
+ ์ œ๊ฑฐ๋œ ํ•ญ๋ชฉ:
1386
+ - MCP ์„œ๋ฒ„ (vibe, context7)
1387
+ - .vibe/ ํด๋”
1388
+ - ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ (7๊ฐœ)
1389
+ - ์„œ๋ธŒ์—์ด์ „ํŠธ (5๊ฐœ)
1390
+ - Hooks ์„ค์ •
1391
+ - hi-ai ํŒจํ‚ค์ง€
1392
+
1393
+ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ ค๋ฉด: vibe init
1394
+ `);
1395
+ }
1396
+
1267
1397
  // ๋ฉ”์ธ ๋ผ์šฐํ„ฐ
1268
1398
  switch (command) {
1269
1399
  case 'init':
@@ -1274,6 +1404,11 @@ switch (command) {
1274
1404
  update();
1275
1405
  break;
1276
1406
 
1407
+ case 'remove':
1408
+ case 'uninstall':
1409
+ remove();
1410
+ break;
1411
+
1277
1412
  case 'gpt':
1278
1413
  if (args[1] === '--remove') {
1279
1414
  removeExternalLLM('gpt');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "1.0.18",
3
+ "version": "1.0.19",
4
4
  "description": "Vibe - Claude Code exclusive SPEC-driven AI coding framework",
5
5
  "bin": {
6
6
  "vibe": "./bin/vibe"
@@ -88,6 +88,17 @@
88
88
  }
89
89
  ]
90
90
  }
91
+ ],
92
+ "UserPromptSubmit": [
93
+ {
94
+ "matcher": "^(hi-ai|ํ•˜์ด์•„์ด|์•ˆ๋…•|์‹œ์ž‘)",
95
+ "hooks": [
96
+ {
97
+ "type": "prompt",
98
+ "prompt": "์‚ฌ์šฉ์ž๊ฐ€ ์„ธ์…˜ ์‹œ์ž‘ ์ธ์‚ฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. mcp__vibe__start_session์„ ํ˜ธ์ถœํ•˜์—ฌ ์ด์ „ ์„ธ์…˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณต์›ํ•˜์„ธ์š”."
99
+ }
100
+ ]
101
+ }
91
102
  ]
92
103
  }
93
104
  }