slashvibe-mcp 0.5.19 → 0.5.21

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 (3) hide show
  1. package/index.js +15 -0
  2. package/package.json +1 -1
  3. package/store/api.js +6 -2
package/index.js CHANGED
@@ -210,6 +210,21 @@ async function getPresenceFooter() {
210
210
  }
211
211
  footer += parts.join(' · ');
212
212
 
213
+ // Live rooms: name WHERE people are live so the terminal can offer the
214
+ // "graduate into the room" jump, not just a count. The join URL is gated on
215
+ // VIBE_ROOM_URL_BASE (unset by default) until the conferencing lane confirms
216
+ // the real room-URL format — we show the room name always, the link only
217
+ // when it will actually resolve. See ROOM-PRESENCE-BRIDGE.md.
218
+ const liveRooms = others.filter(u => u.isLive && u.broadcastRoom);
219
+ if (liveRooms.length > 0) {
220
+ const base = process.env.VIBE_ROOM_URL_BASE; // e.g. https://vibeconferencing.com/
221
+ footer += '\n';
222
+ footer += liveRooms.slice(0, 3).map(u => {
223
+ const where = `🔴 @${u.handle} live in the ${u.broadcastRoom}`;
224
+ return base ? `${where} → ${base.replace(/\/$/, '')}/${u.broadcastRoom}` : where;
225
+ }).join('\n');
226
+ }
227
+
213
228
  // Line 2: Activity hints (if anyone is online)
214
229
  if (others.length > 0) {
215
230
  footer += '\n';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slashvibe-mcp",
3
- "version": "0.5.19",
3
+ "version": "0.5.21",
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
@@ -341,8 +341,11 @@ async function getActiveUsers() {
341
341
  const endpoint = USE_V2_PRESENCE ? '/api/v2/presence' : '/api/presence';
342
342
  const result = await request('GET', endpoint);
343
343
 
344
- // Combine active and away users
345
- const users = [...(result.active || []), ...(result.away || [])];
344
+ // Combine active + away, plus any AGENTS currently live in a room (e.g.
345
+ // @coltrane hosting the cantina). Agents live in their own array; without
346
+ // this a live agent host never reached the footer's live-room line.
347
+ const liveAgents = (result.agents || []).filter(a => a.isLive && a.broadcastRoom);
348
+ const users = [...(result.active || []), ...(result.away || []), ...liveAgents];
346
349
 
347
350
  // Map to normalized format (v2 uses 'handle', v1 uses 'username')
348
351
  const mappedUsers = users.map(u => ({
@@ -367,6 +370,7 @@ async function getActiveUsers() {
367
370
  awayAt: u.awayAt || u.context?.awayAt || null,
368
371
  // v2 additions
369
372
  isLive: u.isLive || false,
373
+ broadcastRoom: u.broadcastRoom || u.r || null, // room slug when live
370
374
  isAgent: u.isAgent || false,
371
375
  // Presence texture (server-enriched): most-recent ship
372
376
  lastShip: u.lastShip || null