slashvibe-mcp 0.3.17 → 0.3.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/index.js CHANGED
@@ -463,6 +463,26 @@ class VibeMCPServer {
463
463
 
464
464
  // Check for updates (non-blocking)
465
465
  this.checkForUpdates();
466
+
467
+ // Auto-presence: if authenticated, broadcast presence on connect
468
+ this.autoPresence();
469
+ }
470
+
471
+ async autoPresence() {
472
+ try {
473
+ const handle = config.getHandle();
474
+ if (!handle) return; // Not authenticated yet
475
+
476
+ const one_liner = config.getOneLiner() || '';
477
+
478
+ // Start presence heartbeat
479
+ presence.start(handle, one_liner);
480
+
481
+ // Log quietly (only to stderr, not intrusive)
482
+ process.stderr.write(`🟢 Auto-connected as @${handle}\n`);
483
+ } catch (error) {
484
+ // Silent fail - don't block startup
485
+ }
466
486
  }
467
487
 
468
488
  async checkForUpdates() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slashvibe-mcp",
3
- "version": "0.3.17",
3
+ "version": "0.3.19",
4
4
  "mcpName": "io.github.vibecodinginc/vibe",
5
5
  "description": "Social layer for Claude Code - DMs, presence, and connection between AI-assisted developers",
6
6
  "main": "index.js",
package/setup.js CHANGED
@@ -161,6 +161,36 @@ async function getOnlineCount() {
161
161
  }
162
162
  }
163
163
 
164
+ /**
165
+ * Get online users with details for display
166
+ */
167
+ async function getOnlineUsers() {
168
+ try {
169
+ const response = await fetch(`${API_BASE}/api/presence`);
170
+ const data = await response.json();
171
+ const active = data.active || [];
172
+ const away = data.away || [];
173
+
174
+ // Format: { users: [{handle, status, one_liner}], total: number }
175
+ const users = [
176
+ ...active.slice(0, 5).map(u => ({
177
+ handle: u.username || u.handle,
178
+ status: 'active',
179
+ one_liner: u.one_liner || u.status || ''
180
+ })),
181
+ ...away.slice(0, 2).map(u => ({
182
+ handle: u.username || u.handle,
183
+ status: 'away',
184
+ one_liner: u.one_liner || u.status || ''
185
+ }))
186
+ ].slice(0, 5);
187
+
188
+ return { users, total: active.length + away.length };
189
+ } catch (e) {
190
+ return { users: [], total: 0 };
191
+ }
192
+ }
193
+
164
194
  /**
165
195
  * Open URL in browser
166
196
  */
@@ -326,7 +356,13 @@ async function setup() {
326
356
  if (!connected) {
327
357
  printStep(3, 'Testing connection...', 'error');
328
358
  console.log(`${colors.red} → Could not reach slashvibe.dev${colors.reset}`);
329
- console.log(`${colors.yellow} → Check your internet connection and try again${colors.reset}`);
359
+ console.log('');
360
+ console.log(`${colors.bold} Troubleshooting:${colors.reset}`);
361
+ console.log(`${colors.dim} 1. Check your internet connection${colors.reset}`);
362
+ console.log(`${colors.dim} 2. Try: ${colors.cyan}curl -s https://www.slashvibe.dev/api/health${colors.reset}`);
363
+ console.log(`${colors.dim} 3. If that works, try setup again${colors.reset}`);
364
+ console.log('');
365
+ console.log(`${colors.dim} Status page: ${colors.cyan}slashvibe.dev/status${colors.reset}`);
330
366
  process.exit(1);
331
367
  }
332
368
 
@@ -352,14 +388,31 @@ async function setup() {
352
388
  printStep(4, 'Opening browser for GitHub auth...', 'done');
353
389
  console.log(`${colors.dim} → Authenticated as @${authResult.handle}${colors.reset}`);
354
390
 
355
- // Success!
391
+ // Success! Show who's online immediately
392
+ const presence = await getOnlineUsers();
393
+
356
394
  console.log('');
357
395
  console.log(`${colors.green} ✓ Setup complete!${colors.reset}`);
358
396
  console.log('');
359
- console.log(`${colors.bold} What's next:${colors.reset}`);
360
- console.log(`${colors.dim} 1. Restart Claude Code to load /vibe${colors.reset}`);
361
- console.log(`${colors.dim} 2. Say "let's vibe" to see who's online${colors.reset}`);
362
- console.log(`${colors.dim} 3. Check your welcome message from @seth${colors.reset}`);
397
+
398
+ // Show who's vibing right now
399
+ if (presence.users.length > 0) {
400
+ console.log(`${colors.bold} 🟢 ${presence.total} builders vibing now:${colors.reset}`);
401
+ for (const user of presence.users) {
402
+ const statusIcon = user.status === 'active' ? colors.green + '●' : colors.yellow + '○';
403
+ const liner = user.one_liner ? ` — ${user.one_liner.slice(0, 40)}` : '';
404
+ console.log(` ${statusIcon}${colors.reset} @${user.handle}${colors.dim}${liner}${colors.reset}`);
405
+ }
406
+ if (presence.total > 5) {
407
+ console.log(`${colors.dim} ... and ${presence.total - 5} more${colors.reset}`);
408
+ }
409
+ console.log('');
410
+ }
411
+
412
+ console.log(`${colors.bold} Quick start:${colors.reset}`);
413
+ console.log(`${colors.dim} 1. Restart Claude Code${colors.reset}`);
414
+ console.log(`${colors.dim} 2. Type "who's vibing?" to see everyone${colors.reset}`);
415
+ console.log(`${colors.dim} 3. Type "dm @seth hey!" to send a message${colors.reset}`);
363
416
  console.log('');
364
417
  console.log(`${colors.cyan} 🚀 Welcome to /vibe, @${authResult.handle}!${colors.reset}`);
365
418
  console.log('');
@@ -379,11 +432,36 @@ async function setup() {
379
432
 
380
433
  } catch (err) {
381
434
  printStep(4, 'Opening browser for GitHub auth...', 'error');
382
- console.log(`${colors.red} → ${err.message}${colors.reset}`);
435
+
436
+ // Specific error recovery messages
437
+ if (err.message.includes('timed out')) {
438
+ console.log(`${colors.red} → Authentication timed out (2 min limit)${colors.reset}`);
439
+ console.log('');
440
+ console.log(`${colors.yellow} What happened:${colors.reset}`);
441
+ console.log(`${colors.dim} The browser auth wasn't completed in time.${colors.reset}`);
442
+ console.log('');
443
+ console.log(`${colors.bold} Try again:${colors.reset}`);
444
+ console.log(`${colors.cyan} npx slashvibe-mcp setup${colors.reset}`);
445
+ } else if (err.message.includes('port in use')) {
446
+ console.log(`${colors.red} → Auth callback port busy${colors.reset}`);
447
+ console.log('');
448
+ console.log(`${colors.yellow} What happened:${colors.reset}`);
449
+ console.log(`${colors.dim} Another setup or auth process is running.${colors.reset}`);
450
+ console.log('');
451
+ console.log(`${colors.bold} Fix it:${colors.reset}`);
452
+ console.log(`${colors.dim} 1. Wait a minute for it to finish, or${colors.reset}`);
453
+ console.log(`${colors.dim} 2. Kill the process: ${colors.cyan}lsof -ti:9876 | xargs kill${colors.reset}`);
454
+ console.log(`${colors.dim} 3. Try again: ${colors.cyan}npx slashvibe-mcp setup${colors.reset}`);
455
+ } else {
456
+ console.log(`${colors.red} → ${err.message}${colors.reset}`);
457
+ console.log('');
458
+ console.log(`${colors.bold} Try these steps:${colors.reset}`);
459
+ console.log(`${colors.dim} 1. Check internet connection${colors.reset}`);
460
+ console.log(`${colors.dim} 2. Try again: ${colors.cyan}npx slashvibe-mcp setup${colors.reset}`);
461
+ console.log(`${colors.dim} 3. Or in Claude Code, type: ${colors.cyan}add the vibe mcp server${colors.reset}`);
462
+ }
383
463
  console.log('');
384
- console.log(`${colors.yellow} Manual setup:${colors.reset}`);
385
- console.log(`${colors.dim} 1. Run: vibe init${colors.reset}`);
386
- console.log(`${colors.dim} 2. Complete auth in browser${colors.reset}`);
464
+ console.log(`${colors.dim} Need help? slashvibe.dev/help${colors.reset}`);
387
465
  process.exit(1);
388
466
  }
389
467
  }
package/tools/init.js CHANGED
@@ -220,17 +220,17 @@ async function sendWelcomeMessage(handle, one_liner) {
220
220
 
221
221
  const definition = {
222
222
  name: 'vibe_init',
223
- description: 'Set your identity for /vibe. Opens browser for GitHub auth and waits for completion. Returns when auth is done.',
223
+ description: 'Join /vibe social network. Opens browser for GitHub login - NO INPUT NEEDED. Your GitHub username becomes your handle automatically. Just run this and complete the browser auth.',
224
224
  inputSchema: {
225
225
  type: 'object',
226
226
  properties: {
227
227
  handle: {
228
228
  type: 'string',
229
- description: 'Custom handle (optional - defaults to your GitHub username)'
229
+ description: 'RARELY NEEDED - Override your handle (defaults to GitHub username, which is usually what you want)'
230
230
  },
231
231
  one_liner: {
232
232
  type: 'string',
233
- description: 'What are you building? (one line)'
233
+ description: 'OPTIONAL - What are you building? Can set this later.'
234
234
  }
235
235
  },
236
236
  required: []
@@ -701,7 +701,15 @@ To check messages: \`vibe inbox\``
701
701
  return {
702
702
  display: `## Auth already in progress
703
703
 
704
- Another login flow is running. Complete it in your browser or wait a moment and try again.`
704
+ Another login is running. Either:
705
+ 1. **Complete it** in your browser, or
706
+ 2. **Wait 30 seconds** and try again
707
+
708
+ If stuck, kill the auth server:
709
+ \`\`\`
710
+ lsof -ti:9876 | xargs kill
711
+ \`\`\`
712
+ Then run \`vibe init\` again.`
705
713
  };
706
714
  }
707
715
 
@@ -709,16 +717,26 @@ Another login flow is running. Complete it in your browser or wait a moment and
709
717
  return {
710
718
  display: `## Auth timed out
711
719
 
712
- The login flow wasn't completed within 2 minutes. Try again with \`vibe init\``
720
+ The browser login wasn't completed within 2 minutes.
721
+
722
+ **Try again:**
723
+ Just say "add the vibe mcp server" and complete the browser auth faster this time.
724
+
725
+ **Tip:** Keep Claude Code visible so you can see when auth completes.`
713
726
  };
714
727
  }
715
728
 
716
729
  return {
717
730
  display: `## Failed to authenticate
718
731
 
719
- Error: ${err.message}
732
+ **Error:** ${err.message}
733
+
734
+ **Quick fixes:**
735
+ 1. Check your internet connection
736
+ 2. Try again: just say "vibe init"
737
+ 3. Check status: slashvibe.dev/status
720
738
 
721
- Try again or use legacy auth: \`vibe init --auth_method=legacy\``
739
+ **Need help?** DM @seth on Twitter or email seth@slashvibe.dev`
722
740
  };
723
741
  }
724
742
  }