slashvibe-mcp 0.5.21 → 0.5.22

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slashvibe-mcp",
3
- "version": "0.5.21",
3
+ "version": "0.5.22",
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
@@ -439,6 +439,7 @@ async function sendMessage(from, to, body, type = 'dm', payload = null, options
439
439
  body: body || '',
440
440
  payload: payload || undefined,
441
441
  reply_to: options.replyTo || undefined, // Threaded reply support
442
+ origin: options.origin || undefined, // work-object lifecycle state
442
443
  };
443
444
  console.error('[vibe] Sending message via v2 API (Postgres-backed) to:', to, 'body length:', (body || '').length);
444
445
  }
package/tools/dm.js CHANGED
@@ -40,6 +40,10 @@ const definition = {
40
40
  tip_amount_cents: {
41
41
  type: 'number',
42
42
  description: 'Optional: Attach an instant USDC tip (100 = $1, 500 = $5, 1000 = $10)'
43
+ },
44
+ origin: {
45
+ type: 'string',
46
+ description: "How this message came to be. Omit for a normal message you're composing. Pass the value the drafting tool told you to use when sending a draft it produced: 'intro' (vibe_intro), 'stuck_solver' (vibe_weave solve), 'held_half' (a Fable-held reply), 'fable'."
43
47
  }
44
48
  },
45
49
  required: ['handle']
@@ -50,7 +54,7 @@ async function handler(args) {
50
54
  const initCheck = requireInit();
51
55
  if (initCheck) return initCheck;
52
56
 
53
- const { handle, message, artifact_slug, payload, reply_to, tip_amount_cents } = args;
57
+ const { handle, message, artifact_slug, payload, reply_to, tip_amount_cents, origin } = args;
54
58
  const myHandle = config.getHandle();
55
59
  const them = normalizeHandle(handle);
56
60
 
@@ -101,6 +105,9 @@ async function handler(args) {
101
105
 
102
106
  const result = await store.sendMessage(myHandle, them, finalMessage || null, 'dm', finalPayload, {
103
107
  replyTo: reply_to || null,
108
+ // Default to 'composed' (a human wrote it); drafting tools pass their own
109
+ // origin so the network's derived messages are distinguishable in the funnel.
110
+ origin: origin || 'composed',
104
111
  });
105
112
 
106
113
  // Check for errors
package/tools/intro.js CHANGED
@@ -92,7 +92,7 @@ async function handler(args = {}) {
92
92
  }
93
93
 
94
94
  const dm = require('./dm');
95
- const result = await dm.handler({ handle: target, message });
95
+ const result = await dm.handler({ handle: target, message, origin: 'intro' });
96
96
  // dm.handler already returns a display + marks firstDmSent on success.
97
97
  if (result && result.display && /failed/i.test(result.display)) return result;
98
98
 
package/tools/weave.js CHANGED
@@ -189,7 +189,7 @@ async function weaveMoment(myHandle) {
189
189
  `\n> ${inbound}` +
190
190
  `\n\n_Fable can hold your half here — draft the reply in your voice from what you were building, ` +
191
191
  `show it, and send it with one word. Draft it now, then: **send it (y) · edit · let it sit**. ` +
192
- `On yes, deliver with \`vibe_dm @${held.handle}\`._`;
192
+ `On yes, deliver with \`vibe_dm @${held.handle}\` (origin: "held_half")._`;
193
193
  if (held.otherWaiting > 0) {
194
194
  block += `\n_(+${held.otherWaiting} more thread${held.otherWaiting > 1 ? 's' : ''} waiting on you.)_`;
195
195
  }
@@ -218,7 +218,7 @@ async function handler(args = {}) {
218
218
  `🧵 **@${held.handle} replied ${held.inboundAgo} — you haven't answered:**\n` +
219
219
  `> ${truncate(held.inbound, 280)}\n\n` +
220
220
  `Draft @${myHandle}'s reply in their voice from what they were building, show it, then ask: ` +
221
- `**send it (y) · edit · let it sit**. On yes, send with \`vibe_dm @${held.handle}\`.`,
221
+ `**send it (y) · edit · let it sit**. On yes, send with \`vibe_dm @${held.handle}\` (origin: "held_half").`,
222
222
  _heldHalf: held,
223
223
  };
224
224
  }
@@ -278,7 +278,7 @@ async function handler(args = {}) {
278
278
  ` 1. Name the shape of what worked for them (from their text above), so the user gets ` +
279
279
  `unstuck even without talking.\n` +
280
280
  ` 2. Offer a warm thread: "@${'{handle}'} hit this and shipped a fix — want me to open a ` +
281
- `thread so you can ask? (y)". On yes, send with \`vibe_dm @{handle}\` in the user's voice.\n` +
281
+ `thread so you can ask? (y)". On yes, send with \`vibe_dm @{handle}\` (origin: "stuck_solver") in the user's voice.\n` +
282
282
  `If NONE is truly the same problem, say so plainly — never fabricate a match or a fix.`,
283
283
  _solvers: candidates,
284
284
  };