slashvibe-mcp 0.5.1 → 0.5.3

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/auto-update.js CHANGED
@@ -6,10 +6,25 @@
6
6
  const { exec } = require('child_process');
7
7
  const { promisify } = require('util');
8
8
  const fs = require('fs').promises;
9
+ const fsSync = require('fs');
9
10
  const path = require('path');
10
11
 
11
12
  const execAsync = promisify(exec);
12
13
 
14
+ /**
15
+ * How was this copy of /vibe installed?
16
+ * - 'git' → a dev checkout / git-based install (the repo has a .git dir one level up)
17
+ * - 'npm' → installed via `npx` or a global `npm i -g` (the common case; no .git)
18
+ * The published npm package ships only the mcp-server/ directory, so the absence of
19
+ * a .git at the package root reliably means an npx/global install.
20
+ */
21
+ function detectInstallType() {
22
+ try {
23
+ if (fsSync.existsSync(path.join(__dirname, '..', '.git'))) return 'git';
24
+ } catch {}
25
+ return 'npm';
26
+ }
27
+
13
28
  async function checkForUpdates() {
14
29
  try {
15
30
  // Read local version
@@ -112,11 +127,23 @@ function formatUpdateNotification(update) {
112
127
  message += `\n`;
113
128
  }
114
129
 
115
- message += `Update now:\n`;
116
- message += ` vibe update\n`;
117
- message += `\n`;
118
- message += `Or manually:\n`;
119
- message += ` cd ~/.vibe/vibe-repo && git pull origin main\n`;
130
+ // Install-type-aware guidance. The npx/global path is the one that bites people:
131
+ // `npx slashvibe-mcp` silently prefers an existing GLOBAL install over fetching
132
+ // the latest, so a stale global keeps running old (sometimes broken) code. The fix
133
+ // is to remove the global so npx resolves fresh — NOT a git pull.
134
+ if (detectInstallType() === 'git') {
135
+ message += `Update now:\n`;
136
+ message += ` vibe update\n`;
137
+ message += `\n`;
138
+ message += `Or manually:\n`;
139
+ message += ` cd ~/.vibe/vibe-repo && git pull origin main\n`;
140
+ } else {
141
+ message += `You're on an npx/global install. To get the latest:\n\n`;
142
+ message += ` npm rm -g slashvibe-mcp # clear any stale global that shadows npx\n`;
143
+ message += ` # then restart Claude Code (npx will fetch the latest automatically)\n\n`;
144
+ message += `Heads up: \`npx slashvibe-mcp\` reuses an existing global if present,\n`;
145
+ message += `so removing the global is what actually pulls the new version.\n`;
146
+ }
120
147
  message += `${'='.repeat(60)}\n`;
121
148
 
122
149
  return message;
@@ -126,5 +153,6 @@ module.exports = {
126
153
  checkForUpdates,
127
154
  performUpdate,
128
155
  compareVersions,
129
- formatUpdateNotification
156
+ formatUpdateNotification,
157
+ detectInstallType
130
158
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slashvibe-mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "mcpName": "io.github.vibecodinginc/vibe",
5
5
  "description": "Social layer for Claude Code - DMs, presence, Matrix multiplayer rooms, and connection between AI-assisted developers",
6
6
  "main": "index.js",
package/tools/init.js CHANGED
@@ -678,13 +678,26 @@ To check messages: \`vibe inbox\``
678
678
  // Build welcome section - show inline if we have the message
679
679
  let welcomeSection = '';
680
680
  if (welcomeResult?.messageText) {
681
- welcomeSection = `\n\n---\n**📨 Welcome message from @seth:**\n\n> ${welcomeResult.messageText.split('\n').join('\n> ')}\n\n_Reply with **"vibe dm @seth [message]"** to say hi!_`;
681
+ welcomeSection = `\n\n---\n**📨 Welcome from @seth:**\n\n> ${welcomeResult.messageText.split('\n').join('\n> ')}`;
682
682
  } else {
683
- welcomeSection = '\n\n---\n**📨 @seth sent you a welcome message!**\n\nSay **"vibe inbox"** to read it and get started.';
683
+ welcomeSection = '\n\n---\n**📨 @seth sent you a welcome message** — say **"vibe inbox"** to read it.';
684
684
  }
685
685
 
686
+ // Always close on a concrete next move toward the aha: your first DM
687
+ // landing in someone else's terminal. Only commands that exist (who /
688
+ // @handle / ship). Avoid pointing the reply at a specific founder handle
689
+ // here — it can misroute; reading the inbox is the safe path to reply.
690
+ const whoNudge = onlineCount > 1
691
+ ? `**"vibe who"** — see the ${onlineCount} builders online right now`
692
+ : `**"vibe who"** — see who's building right now`;
693
+ const nextSteps = `\n\n---\n**Your first 60 seconds**\n`
694
+ + `1. ${whoNudge}\n`
695
+ + `2. **"vibe @someone hey"** — your first DM lands right in their terminal\n`
696
+ + `3. **"vibe ship <what you're building>"** — put yourself on the board\n\n`
697
+ + `_Stuck? Say **"vibe help"**._`;
698
+
686
699
  return {
687
- display: authBanner + friendsSection + welcomeSection,
700
+ display: authBanner + friendsSection + welcomeSection + nextSteps,
688
701
  onboarding: {
689
702
  isNewUser: true,
690
703
  handle: result.handle,
package/tools/update.js CHANGED
@@ -44,14 +44,16 @@ async function handler(args) {
44
44
  const isGitInstall = fs.existsSync(gitDir);
45
45
 
46
46
  if (!isGitInstall) {
47
- // Old-style install (curl downloads)
48
- display += `⚠️ **Manual update required**\n\n`;
49
- display += `Your install doesn't support automatic updates.\n\n`;
50
- display += `To update, re-run the installer:\n`;
47
+ // npx / global install (the common case). npx prefers a stale global over
48
+ // fetching latest, so removing the global is what actually pulls the update.
49
+ display += `You're on an **npx/global install**.\n\n`;
50
+ display += `To get the latest:\n`;
51
51
  display += `\`\`\`\n`;
52
- display += `curl -fsSL https://raw.githubusercontent.com/VibeCodingInc/vibe-mcp/main/install.sh | bash\n`;
53
- display += `\`\`\`\n\n`;
54
- display += `This will migrate you to the git-based installer for future updates.\n\n`;
52
+ display += `npm rm -g slashvibe-mcp\n`;
53
+ display += `\`\`\`\n`;
54
+ display += `Then **restart Claude Code** npx will fetch the latest automatically.\n\n`;
55
+ display += `> Heads up: \`npx slashvibe-mcp\` reuses an existing global if one is\n`;
56
+ display += `> installed, so clearing the global is what pulls the new version.\n\n`;
55
57
  display += `---\n`;
56
58
  display += `⚠️ **After updating: restart Claude Code**`;
57
59
  return { display };
package/version.json CHANGED
@@ -1,14 +1,11 @@
1
1
  {
2
- "version": "0.5.1",
3
- "updated": "2026-06-27",
4
- "changelog": "Clearer first-session sign-in message: sending a DM before auth now says 'not signed in, run vibe init' instead of a misleading 'auth expired'",
2
+ "version": "0.5.3",
3
+ "updated": "2026-06-29",
4
+ "changelog": "Stronger first 60 seconds. After sign-in, /vibe now closes on a concrete next-steps guide see who's online, send your first DM, ship to the board — instead of trailing off. Welcome DM quality improved.",
5
5
  "features": [
6
- "First-contact DM 401 distinguishes never-signed-in from expired session",
7
- "Matrix multiplayer rooms",
8
- "Matrix tools promoted: vibe_matrix_rooms, vibe_matrix_read, vibe_matrix_send",
9
- "Configurable bot port via MATRIX_BOT_PORT env var",
10
- "PostToolUse hook polls Matrix bot for ambient message injection",
11
- "Multi-agent collaboration: Claude + Codex + any model in shared rooms"
6
+ "Post-init 'Your first 60 seconds' guide: vibe who → vibe @someone → vibe ship",
7
+ "Removed a reply CTA that could misroute; reading your inbox is the safe reply path",
8
+ "Welcome DM now generated with a current, higher-quality model"
12
9
  ],
13
10
  "deprecated": [
14
11
  "vibe_pair — use Matrix room invites",