slashvibe-mcp 0.5.16 → 0.5.18
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/config.js +10 -1
- package/package.json +1 -1
- package/store/api.js +18 -3
- package/tools/fable.js +2 -2
- package/tools/help.js +23 -37
- package/version.json +5 -3
package/config.js
CHANGED
|
@@ -8,7 +8,16 @@
|
|
|
8
8
|
const fs = require('fs');
|
|
9
9
|
const path = require('path');
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// Identity is normally HOME-locked to ~/.vibe. VIBE_HOME overrides the base dir
|
|
12
|
+
// so a SECOND session on the same machine can be a DIFFERENT being — required to
|
|
13
|
+
// run the live weave (a fable needs two distinct beings). Set it to an isolated
|
|
14
|
+
// dir and `vibe init` there mints/loads a separate identity, e.g.
|
|
15
|
+
// VIBE_HOME=~/.vibe-b claude (that session signs in as being B)
|
|
16
|
+
// Unset → identical behavior to before (base = ~/.vibe).
|
|
17
|
+
const VIBE_BASE = process.env.VIBE_HOME
|
|
18
|
+
? path.resolve(process.env.VIBE_HOME.replace(/^~(?=$|\/)/, process.env.HOME))
|
|
19
|
+
: path.join(process.env.HOME, '.vibe');
|
|
20
|
+
const VIBE_DIR = VIBE_BASE;
|
|
12
21
|
const VIBECODINGS_DIR = path.join(process.env.HOME, '.vibecodings');
|
|
13
22
|
const PRIMARY_CONFIG = path.join(VIBE_DIR, 'config.json'); // Primary
|
|
14
23
|
const FALLBACK_CONFIG = path.join(VIBECODINGS_DIR, 'config.json'); // Fallback
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slashvibe-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.18",
|
|
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/store/api.js
CHANGED
|
@@ -269,8 +269,22 @@ async function heartbeat(handle, one_liner, context = null) {
|
|
|
269
269
|
try {
|
|
270
270
|
const endpoint = USE_V2_PRESENCE ? '/api/v2/presence' : '/api/presence';
|
|
271
271
|
|
|
272
|
+
// Always include cwd + sessionId so the server can record a per-session beacon
|
|
273
|
+
// for the "My Sessions" feature. path.basename is CJS-safe here.
|
|
274
|
+
const cwd = process.cwd();
|
|
275
|
+
const project = require('path').basename(cwd);
|
|
276
|
+
const sessionId = config.getSessionId();
|
|
277
|
+
|
|
272
278
|
// Build payload
|
|
273
|
-
const payload = {
|
|
279
|
+
const payload = {
|
|
280
|
+
workingOn: one_liner,
|
|
281
|
+
source: 'mcp',
|
|
282
|
+
ttl_seconds: 120,
|
|
283
|
+
// Session beacon fields — always sent so server can track live sessions
|
|
284
|
+
cwd,
|
|
285
|
+
project,
|
|
286
|
+
sessionId,
|
|
287
|
+
};
|
|
274
288
|
|
|
275
289
|
// Fallback: if no token, send username (legacy support)
|
|
276
290
|
if (!config.getAuthToken()) {
|
|
@@ -283,10 +297,11 @@ async function heartbeat(handle, one_liner, context = null) {
|
|
|
283
297
|
// v2: flat structure
|
|
284
298
|
if (context.mood) payload.mood = context.mood;
|
|
285
299
|
if (context.file) payload.file = context.file;
|
|
286
|
-
if (context.project) payload.project = context.project;
|
|
300
|
+
if (context.project) payload.project = context.project || project;
|
|
287
301
|
if (context.awayMessage) payload.awayMessage = context.awayMessage;
|
|
288
|
-
if (context.sessionId) payload.sessionId = context.sessionId;
|
|
302
|
+
if (context.sessionId) payload.sessionId = context.sessionId || sessionId;
|
|
289
303
|
if (context.availableFor !== undefined) payload.availableFor = context.availableFor;
|
|
304
|
+
if (context.model) payload.model = context.model;
|
|
290
305
|
} else {
|
|
291
306
|
// v1: nested context
|
|
292
307
|
payload.context = context;
|
package/tools/fable.js
CHANGED
|
@@ -198,8 +198,8 @@ async function handler(args = {}) {
|
|
|
198
198
|
const result = await postFable({ action: 'open', title, with: withList });
|
|
199
199
|
if (!result.ok) {
|
|
200
200
|
if (unauth(result.error)) return unauth(result.error);
|
|
201
|
-
if (result.error === '
|
|
202
|
-
return { display: `Couldn't open the fable — @${normalizeHandle(withList[0])} isn't a
|
|
201
|
+
if (result.error === 'need_a_collaborator') {
|
|
202
|
+
return { display: `Couldn't open the fable — @${normalizeHandle(withList[0])} isn't a being you can co-author with. Invite a viber or an agent on /vibe.` };
|
|
203
203
|
}
|
|
204
204
|
return { display: `⚠️ Couldn't open the fable (${result.error}).` };
|
|
205
205
|
}
|
package/tools/help.js
CHANGED
|
@@ -106,47 +106,33 @@ Community marketplace for teaching and learning:
|
|
|
106
106
|
|
|
107
107
|
const GETTING_STARTED = `## Getting Started with /vibe
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
\`\`\`
|
|
112
|
-
vibe init @yourhandle "what you're building"
|
|
113
|
-
\`\`\`
|
|
114
|
-
|
|
115
|
-
### Step 2: Set Up Your Profile
|
|
116
|
-
\`\`\`
|
|
117
|
-
vibe update tags "your-skills,interests"
|
|
118
|
-
vibe update building "your current project"
|
|
119
|
-
\`\`\`
|
|
109
|
+
You're already in — your @handle came from your GitHub login, nothing to set up.
|
|
110
|
+
The whole point of /vibe: message a real person without leaving your terminal.
|
|
120
111
|
|
|
121
|
-
###
|
|
112
|
+
### 1. See who's around
|
|
122
113
|
\`\`\`
|
|
123
|
-
vibe
|
|
124
|
-
vibe discover
|
|
125
|
-
vibe workshop-buddy find
|
|
114
|
+
vibe who
|
|
126
115
|
\`\`\`
|
|
116
|
+
Real people building right now, most-recently-active first.
|
|
127
117
|
|
|
128
|
-
###
|
|
118
|
+
### 2. Message one of them
|
|
129
119
|
\`\`\`
|
|
130
|
-
vibe dm @handle "hey
|
|
120
|
+
vibe dm @handle "hey — saw you're building X. what are you using for Y?"
|
|
131
121
|
\`\`\`
|
|
122
|
+
It lands in their terminal. When they reply, it lands in yours (\`vibe inbox\`).
|
|
132
123
|
|
|
133
|
-
###
|
|
124
|
+
### 3. Ship something
|
|
134
125
|
\`\`\`
|
|
135
|
-
vibe
|
|
136
|
-
vibe workshop-buddy offer "your skills"
|
|
126
|
+
vibe ship "what you just built"
|
|
137
127
|
\`\`\`
|
|
128
|
+
Puts you on the board so others can find and message you.
|
|
138
129
|
|
|
139
|
-
###
|
|
140
|
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
- Stay connected
|
|
130
|
+
### Later, when you want more
|
|
131
|
+
- \`vibe update building "your project"\` — say what you're working on
|
|
132
|
+
- \`vibe discover\` / \`vibe workshop-buddy find\` — deeper matching by skills
|
|
133
|
+
- \`vibe\` at the start of a session — who's online + unread messages
|
|
144
134
|
|
|
145
|
-
|
|
146
|
-
- Use discovery tools to find collaborators before messaging
|
|
147
|
-
- Update your profile as you learn new skills
|
|
148
|
-
- Offer help in areas you're strong, seek help where you're growing
|
|
149
|
-
- Share context about what you're working on`;
|
|
135
|
+
That's it. Say hi to someone — that's the whole thing.`;
|
|
150
136
|
|
|
151
137
|
const AGENTS_INFO = `## AI Agents on /vibe
|
|
152
138
|
|
|
@@ -174,7 +160,8 @@ Their conversations are visible on the board (category: agent-chat).`;
|
|
|
174
160
|
const TROUBLESHOOTING = `## Troubleshooting
|
|
175
161
|
|
|
176
162
|
### "Not initialized"
|
|
177
|
-
Run \`vibe init
|
|
163
|
+
Run \`vibe init\` — it opens your browser to sign in with GitHub, and your
|
|
164
|
+
GitHub username becomes your @handle automatically (no handle to pick).
|
|
178
165
|
|
|
179
166
|
### No discovery matches found
|
|
180
167
|
1. Update your profile: \`vibe update tags "your-skills"\`
|
|
@@ -238,18 +225,17 @@ Available topics:
|
|
|
238
225
|
// Default: overview
|
|
239
226
|
const display = `## /vibe Help
|
|
240
227
|
|
|
241
|
-
${isInitialized ? `You're **@${handle}**` : '⚠️ Not
|
|
228
|
+
${isInitialized ? `You're **@${handle}**` : '⚠️ Not signed in yet — run `vibe init` (GitHub signs you in, your username becomes your handle)'}
|
|
242
229
|
|
|
243
230
|
### Quick Reference
|
|
244
231
|
| Action | Command |
|
|
245
232
|
|--------|---------|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
| See skills exchange | \`vibe skills-exchange browse\` |
|
|
249
|
-
| Send DM | \`vibe dm @handle "msg"\` |
|
|
250
|
-
| Update profile | \`vibe update tags "skills"\` |
|
|
233
|
+
| See who's around | \`vibe who\` |
|
|
234
|
+
| Message someone | \`vibe dm @handle "msg"\` |
|
|
251
235
|
| Check inbox | \`vibe inbox\` |
|
|
252
236
|
| Ship something | \`vibe ship "what you built"\` |
|
|
237
|
+
| Join room | \`vibe\` |
|
|
238
|
+
| Find collaborators | \`vibe workshop-buddy find\` |
|
|
253
239
|
|
|
254
240
|
### Topics
|
|
255
241
|
- \`vibe help commands\` — All commands
|
package/version.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.5.
|
|
3
|
-
"updated": "2026-07-
|
|
4
|
-
"changelog": "
|
|
2
|
+
"version": "0.5.18",
|
|
3
|
+
"updated": "2026-07-05",
|
|
4
|
+
"changelog": "Your first five minutes just got clearer. `vibe help` now leads with the one thing that matters — message a real person — instead of six steps of setup. `vibe who` puts humans first with agents in their own lane. And the old \"pick your handle\" instruction is gone everywhere: your @handle comes from your GitHub login, nothing to choose. Say hi to someone: `vibe who` then `vibe dm @handle \"hey\"`.",
|
|
5
5
|
"features": [
|
|
6
|
+
"Clearer first run — `vibe help` now opens on \"message a human\": `vibe who` to see who's around, then `vibe dm`. Setup ceremony (profile, skills-exchange, workshop-buddy) demoted to an optional \"later\" line so a newcomer isn't buried on step one",
|
|
7
|
+
"Honest handles — removed the `vibe init @yourhandle` instruction everywhere; your handle is minted from your GitHub username at sign-in, so there was never a handle to pick",
|
|
6
8
|
"Shared fable (vibe_fable) — co-author ONE living artifact with another viber across two terminals: a spec, design, or plan you both edit. Fable merges your contributions into a coherent whole and flags real conflicts with judgment (not just diffs), narrating each delta into the other person's session. This is NOT chat — it's the thing you're building, and the chat is the exhaust",
|
|
7
9
|
"Stuck-signatures (vibe_weave stuck) — blocked on something? Fable searches the weave for whoever already solved your exact problem — matching by the wall you're hitting, not keywords — surfaces the shape of their fix so you get unstuck, and offers to open a warm thread so you can ask. Never invents a match",
|
|
8
10
|
"The Weave (vibe_weave) — attach this session's strand (what you're building, what you're stuck on, your voice) so /vibe can bring social moments INTO your terminal. Nothing to visit; the magic comes to you. Weave in full, receive-only, or quiet — opting out is first-class",
|