slashvibe-mcp 0.2.7 → 0.2.9
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/README.md +0 -1
- package/config.js +5 -145
- package/crypto.js +8 -3
- package/index.js +218 -92
- package/notify.js +0 -97
- package/package.json +6 -16
- package/protocol/index.js +1 -88
- package/store/api.js +54 -228
- package/store/profiles.js +12 -160
- package/tools/_actions.js +13 -332
- package/tools/_shared/index.js +0 -64
- package/tools/artifact-create.js +11 -17
- package/tools/artifact-view.js +1 -31
- package/tools/artifacts-buy.js +111 -0
- package/tools/artifacts-price.js +43 -47
- package/tools/connect.js +284 -0
- package/tools/crossword.js +1 -17
- package/tools/discover.js +34 -314
- package/tools/dm.js +74 -61
- package/tools/drawing.js +1 -1
- package/tools/echo.js +0 -16
- package/tools/feed.js +6 -38
- package/tools/game.js +2 -2
- package/tools/gigs-apply.js +99 -0
- package/tools/gigs-browse.js +114 -0
- package/tools/gigs-complete.js +128 -0
- package/tools/gigs-post.js +140 -0
- package/tools/handoff.js +1 -7
- package/tools/help.js +3 -3
- package/tools/idea.js +1 -8
- package/tools/inbox.js +28 -293
- package/tools/init.js +36 -691
- package/tools/live-off.js +109 -0
- package/tools/live-watch.js +176 -0
- package/tools/live.js +128 -0
- package/tools/open.js +5 -42
- package/tools/party-game.js +1 -1
- package/tools/presence-agent.js +0 -7
- package/tools/proof-of-work.js +105 -96
- package/tools/report.js +1 -1
- package/tools/request.js +2 -16
- package/tools/sessions-browse.js +105 -0
- package/tools/settings.js +3 -126
- package/tools/ship.js +3 -9
- package/tools/solo-game.js +1 -1
- package/tools/start.js +88 -288
- package/tools/status.js +6 -53
- package/tools/suggest-tags.js +8 -6
- package/tools/update.js +1 -1
- package/tools/wallet.js +176 -87
- package/tools/whats-happening.js +125 -0
- package/tools/who.js +2 -24
- package/tools/x-mentions.js +1 -1
- package/version.json +3 -12
- package/analytics.js +0 -107
- package/auth-store.js +0 -148
- package/auto-update.js +0 -125
- package/bridges/bridge-monitor.js +0 -388
- package/bridges/discord-bot.js +0 -431
- package/bridges/farcaster.js +0 -299
- package/bridges/telegram.js +0 -261
- package/bridges/webhook-health.js +0 -420
- package/bridges/webhook-server.js +0 -437
- package/bridges/whatsapp.js +0 -441
- package/bridges/x-webhook.js +0 -423
- package/games/arcade.js +0 -406
- package/games/chess.js +0 -451
- package/games/colorguess.js +0 -343
- package/games/crossword-words.js +0 -171
- package/games/crossword.js +0 -461
- package/games/drawing.js +0 -347
- package/games/gameroulette.js +0 -300
- package/games/gamerouter.js +0 -336
- package/games/gamestatus.js +0 -337
- package/games/guessnumber.js +0 -209
- package/games/hangman.js +0 -279
- package/games/memory.js +0 -338
- package/games/multiplayer-tictactoe.js +0 -389
- package/games/pixelart.js +0 -399
- package/games/quickduel.js +0 -354
- package/games/riddle.js +0 -371
- package/games/rockpaperscissors.js +0 -291
- package/games/snake.js +0 -406
- package/games/storybuilder.js +0 -343
- package/games/tictactoe.js +0 -345
- package/games/twentyquestions.js +0 -286
- package/games/twotruths.js +0 -207
- package/games/werewolf.js +0 -508
- package/games/wordassociation.js +0 -247
- package/games/wordchain.js +0 -135
- package/intelligence/index.js +0 -45
- package/intelligence/infer.js +0 -316
- package/intelligence/interests.js +0 -369
- package/intelligence/patterns.js +0 -651
- package/intelligence/proactive.js +0 -358
- package/intelligence/serendipity.js +0 -306
- package/memory.js +0 -166
- package/notification-emitter.js +0 -77
- package/tools/_discovery-enhanced.js +0 -290
- package/tools/_discovery.js +0 -439
- package/tools/_proactive-discovery.js +0 -301
- package/tools/_work-context.js +0 -338
- package/tools/_work-context.manual-test.js +0 -199
- package/tools/_work-context.test.js +0 -260
- package/tools/admin-inbox.js +0 -218
- package/tools/agent-treasury.js +0 -288
- package/tools/analytics.js +0 -191
- package/tools/approve.js +0 -197
- package/tools/arcade.js +0 -173
- package/tools/ask-expert.js +0 -160
- package/tools/auto-suggest-connections.js +0 -304
- package/tools/become-expert.js +0 -150
- package/tools/bootstrap-skills.js +0 -231
- package/tools/bridge-dashboard.js +0 -342
- package/tools/bridge-health.js +0 -400
- package/tools/bridge-live.js +0 -384
- package/tools/bridges.js +0 -383
- package/tools/broadcast.js +0 -286
- package/tools/chat.js +0 -202
- package/tools/collaborative-drawing.js +0 -286
- package/tools/colorguess.js +0 -281
- package/tools/discover-insights.js +0 -379
- package/tools/discover-momentum.js +0 -256
- package/tools/discovery-analytics.js +0 -345
- package/tools/discovery-auto-suggest.js +0 -275
- package/tools/discovery-bootstrap.js +0 -267
- package/tools/discovery-daily.js +0 -375
- package/tools/discovery-dashboard.js +0 -385
- package/tools/discovery-digest.js +0 -314
- package/tools/discovery-hub.js +0 -357
- package/tools/discovery-insights.js +0 -384
- package/tools/discovery-momentum.js +0 -281
- package/tools/discovery-monitor.js +0 -319
- package/tools/discovery-proactive.js +0 -300
- package/tools/draw.js +0 -317
- package/tools/earnings.js +0 -126
- package/tools/farcaster.js +0 -307
- package/tools/follow.js +0 -224
- package/tools/forget.js +0 -119
- package/tools/friends.js +0 -192
- package/tools/games-catalog.js +0 -376
- package/tools/games.js +0 -313
- package/tools/genesis.js +0 -233
- package/tools/gig-browse.js +0 -206
- package/tools/gig-complete.js +0 -139
- package/tools/guessnumber.js +0 -194
- package/tools/hangman.js +0 -129
- package/tools/l2-bridge.js +0 -272
- package/tools/l2-status.js +0 -217
- package/tools/l2.js +0 -206
- package/tools/migrate.js +0 -156
- package/tools/mint.js +0 -377
- package/tools/multiplayer-tictactoe.js +0 -303
- package/tools/notifications.js +0 -415
- package/tools/observe.js +0 -200
- package/tools/onboarding.js +0 -147
- package/tools/plan.js +0 -225
- package/tools/pulse.js +0 -218
- package/tools/recall.js +0 -147
- package/tools/remember.js +0 -86
- package/tools/reputation.js +0 -175
- package/tools/riddle.js +0 -240
- package/tools/run-bootstrap.js +0 -69
- package/tools/schedule.js +0 -367
- package/tools/session.js +0 -420
- package/tools/session_price.js +0 -128
- package/tools/shipback.js +0 -326
- package/tools/skills-analytics.js +0 -349
- package/tools/skills-bootstrap.js +0 -301
- package/tools/skills-dashboard.js +0 -268
- package/tools/skills.js +0 -380
- package/tools/smart-intro.js +0 -353
- package/tools/social-processor.js +0 -445
- package/tools/storybuilder.js +0 -331
- package/tools/stuck.js +0 -297
- package/tools/subscribe.js +0 -148
- package/tools/subscriptions.js +0 -134
- package/tools/tag-suggestions.js +0 -257
- package/tools/telegram-bot.js +0 -183
- package/tools/telegram-setup.js +0 -214
- package/tools/tip.js +0 -120
- package/tools/token.js +0 -103
- package/tools/twentyquestions.js +0 -143
- package/tools/watch.js +0 -157
- package/tools/webhook-test.js +0 -388
- package/tools/withdraw.js +0 -145
- package/tools/work-summary.js +0 -96
- package/tools/workshop.js +0 -327
package/README.md
CHANGED
|
@@ -60,7 +60,6 @@ The MCP server connects to `slashvibe.dev` for:
|
|
|
60
60
|
|
|
61
61
|
## Related
|
|
62
62
|
|
|
63
|
-
- [GitHub](https://github.com/VibeCodingInc/vibe-mcp) - Source code
|
|
64
63
|
- [slashvibe.dev](https://slashvibe.dev) - Web presence
|
|
65
64
|
- [Spirit Protocol](https://spiritprotocol.io) - Parent ecosystem
|
|
66
65
|
- [AIRC](https://airc.chat) - Agent identity protocol
|
package/config.js
CHANGED
|
@@ -66,15 +66,7 @@ function save(config) {
|
|
|
66
66
|
publicKey: config.publicKey || existing.publicKey || null,
|
|
67
67
|
privateKey: config.privateKey || existing.privateKey || null,
|
|
68
68
|
// Guided mode (AskUserQuestion menus)
|
|
69
|
-
guided_mode: config.guided_mode !== undefined ? config.guided_mode : existing.guided_mode
|
|
70
|
-
// Notification level
|
|
71
|
-
notifications: config.notifications || existing.notifications || null,
|
|
72
|
-
// GitHub Activity settings
|
|
73
|
-
github_activity_enabled: config.github_activity_enabled !== undefined ? config.github_activity_enabled : existing.github_activity_enabled,
|
|
74
|
-
github_activity_privacy: config.github_activity_privacy || existing.github_activity_privacy || null,
|
|
75
|
-
// Privy OAuth token (persisted across MCP process restarts)
|
|
76
|
-
privyToken: config.privyToken || existing.privyToken || null,
|
|
77
|
-
authMethod: config.authMethod || existing.authMethod || null
|
|
69
|
+
guided_mode: config.guided_mode !== undefined ? config.guided_mode : existing.guided_mode
|
|
78
70
|
};
|
|
79
71
|
fs.writeFileSync(PRIMARY_CONFIG, JSON.stringify(data, null, 2));
|
|
80
72
|
}
|
|
@@ -211,80 +203,11 @@ function setAuthToken(token, sessionId = null) {
|
|
|
211
203
|
}
|
|
212
204
|
|
|
213
205
|
function getAuthToken() {
|
|
214
|
-
// First check session data
|
|
215
206
|
const data = getSessionData();
|
|
216
207
|
if (data?.token) return data.token;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return cfg?.privyToken || null;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Save Privy JWT token (used after browser OAuth flow)
|
|
225
|
-
* @param {string} token - Privy access token
|
|
226
|
-
*/
|
|
227
|
-
function savePrivyToken(token) {
|
|
228
|
-
// Save to session data
|
|
229
|
-
const data = getSessionData() || {};
|
|
230
|
-
saveSessionData({
|
|
231
|
-
...data,
|
|
232
|
-
sessionId: data.sessionId || generateSessionId(),
|
|
233
|
-
token,
|
|
234
|
-
authMethod: 'privy' // Track that this is a Privy token
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
// Also save to shared config for persistence across MCP restarts
|
|
238
|
-
const cfg = load();
|
|
239
|
-
cfg.privyToken = token;
|
|
240
|
-
cfg.authMethod = 'privy';
|
|
241
|
-
save(cfg);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Check if user has Privy auth (vs legacy keypair)
|
|
246
|
-
* Accepts both 'privy' and 'browser' as valid auth methods
|
|
247
|
-
*/
|
|
248
|
-
function hasPrivyAuth() {
|
|
249
|
-
const validAuthMethods = ['privy', 'browser'];
|
|
250
|
-
|
|
251
|
-
const data = getSessionData();
|
|
252
|
-
if (validAuthMethods.includes(data?.authMethod) && data?.token) return true;
|
|
253
|
-
|
|
254
|
-
const cfg = load();
|
|
255
|
-
return validAuthMethods.includes(cfg?.authMethod) && cfg?.privyToken;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Remove keypair after migration to Privy
|
|
260
|
-
* Clears private key from config (security improvement)
|
|
261
|
-
*/
|
|
262
|
-
function removeKeypair() {
|
|
263
|
-
const cfg = load();
|
|
264
|
-
delete cfg.publicKey;
|
|
265
|
-
delete cfg.privateKey;
|
|
266
|
-
save(cfg);
|
|
267
|
-
|
|
268
|
-
// Also clear from session
|
|
269
|
-
const data = getSessionData();
|
|
270
|
-
if (data) {
|
|
271
|
-
delete data.publicKey;
|
|
272
|
-
delete data.privateKey;
|
|
273
|
-
saveSessionData(data);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Get auth URL for browser-based GitHub OAuth
|
|
279
|
-
* @param {string|null} handle - Custom handle (optional - defaults to GitHub username)
|
|
280
|
-
*/
|
|
281
|
-
function getAuthUrl(handle = null) {
|
|
282
|
-
const apiUrl = getApiUrl();
|
|
283
|
-
if (handle) {
|
|
284
|
-
return `${apiUrl}/api/auth/github?handle=${encodeURIComponent(handle)}`;
|
|
285
|
-
}
|
|
286
|
-
// No handle = use GitHub username as handle
|
|
287
|
-
return `${apiUrl}/api/auth/github`;
|
|
208
|
+
// Fall back to privyToken in config (for persistence across sessions)
|
|
209
|
+
const config = load();
|
|
210
|
+
return config?.privyToken || null;
|
|
288
211
|
}
|
|
289
212
|
|
|
290
213
|
function clearSession() {
|
|
@@ -328,61 +251,11 @@ function setNotifications(level) {
|
|
|
328
251
|
save(config);
|
|
329
252
|
}
|
|
330
253
|
|
|
331
|
-
// GitHub Activity settings
|
|
332
|
-
// Shows shipping status based on GitHub commit activity
|
|
333
|
-
// Default: false (opt-in for privacy)
|
|
334
|
-
function getGithubActivityEnabled() {
|
|
335
|
-
const config = load();
|
|
336
|
-
return config.github_activity_enabled === true;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
function setGithubActivityEnabled(enabled) {
|
|
340
|
-
const config = load();
|
|
341
|
-
config.github_activity_enabled = enabled;
|
|
342
|
-
save(config);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// GitHub Activity privacy level
|
|
346
|
-
// Levels: "full" | "status_only" | "off"
|
|
347
|
-
// - full: Show repos, commit counts, tech stack (default when enabled)
|
|
348
|
-
// - status_only: Just show shipping badge (🔥/⚡), no details
|
|
349
|
-
// - off: Disabled completely
|
|
350
|
-
function getGithubActivityPrivacy() {
|
|
351
|
-
const config = load();
|
|
352
|
-
return config.github_activity_privacy || 'full';
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
function setGithubActivityPrivacy(level) {
|
|
356
|
-
const validLevels = ['full', 'status_only', 'off'];
|
|
357
|
-
if (!validLevels.includes(level)) {
|
|
358
|
-
throw new Error(`Invalid privacy level. Use: ${validLevels.join(', ')}`);
|
|
359
|
-
}
|
|
360
|
-
const config = load();
|
|
361
|
-
config.github_activity_privacy = level;
|
|
362
|
-
save(config);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
254
|
// API URL — central endpoint for all API calls
|
|
366
255
|
function getApiUrl() {
|
|
367
256
|
return process.env.VIBE_API_URL || 'https://www.slashvibe.dev';
|
|
368
257
|
}
|
|
369
258
|
|
|
370
|
-
// ─────────────────────────────────────────────────────────────
|
|
371
|
-
// Generic key-value store for ephemeral session state
|
|
372
|
-
// Used by presence-agent, mute, and other tools for runtime state
|
|
373
|
-
// NOT persisted to disk — resets when MCP server restarts
|
|
374
|
-
// ─────────────────────────────────────────────────────────────
|
|
375
|
-
const sessionState = {};
|
|
376
|
-
|
|
377
|
-
function get(key, defaultValue = null) {
|
|
378
|
-
return sessionState[key] !== undefined ? sessionState[key] : defaultValue;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
function set(key, value) {
|
|
382
|
-
sessionState[key] = value;
|
|
383
|
-
return value;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
259
|
module.exports = {
|
|
387
260
|
VIBE_DIR,
|
|
388
261
|
CONFIG_FILE,
|
|
@@ -406,18 +279,5 @@ module.exports = {
|
|
|
406
279
|
setGuidedMode,
|
|
407
280
|
getNotifications,
|
|
408
281
|
setNotifications,
|
|
409
|
-
|
|
410
|
-
getGithubActivityEnabled,
|
|
411
|
-
setGithubActivityEnabled,
|
|
412
|
-
getGithubActivityPrivacy,
|
|
413
|
-
setGithubActivityPrivacy,
|
|
414
|
-
getApiUrl,
|
|
415
|
-
// Privy OAuth helpers
|
|
416
|
-
savePrivyToken,
|
|
417
|
-
hasPrivyAuth,
|
|
418
|
-
removeKeypair,
|
|
419
|
-
getAuthUrl,
|
|
420
|
-
// Generic key-value for ephemeral session state
|
|
421
|
-
get,
|
|
422
|
-
set
|
|
282
|
+
getApiUrl
|
|
423
283
|
};
|
package/crypto.js
CHANGED
|
@@ -143,9 +143,10 @@ function generateMessageId() {
|
|
|
143
143
|
* @param {string} [params.body] Message body
|
|
144
144
|
* @param {object} [params.payload] Message payload
|
|
145
145
|
* @param {string} privateKeyBase64 Sender's private key
|
|
146
|
+
* @param {string} publicKeyBase64 Sender's public key (required for verification)
|
|
146
147
|
* @returns {object} Complete signed message
|
|
147
148
|
*/
|
|
148
|
-
function createSignedMessage({ from, to, body, payload }, privateKeyBase64) {
|
|
149
|
+
function createSignedMessage({ from, to, body, payload }, privateKeyBase64, publicKeyBase64) {
|
|
149
150
|
const message = {
|
|
150
151
|
v: '0.1',
|
|
151
152
|
id: generateMessageId(),
|
|
@@ -158,8 +159,9 @@ function createSignedMessage({ from, to, body, payload }, privateKeyBase64) {
|
|
|
158
159
|
if (body) message.body = body;
|
|
159
160
|
if (payload) message.payload = payload;
|
|
160
161
|
|
|
161
|
-
// Sign
|
|
162
|
+
// Sign and include public key for verification
|
|
162
163
|
message.signature = sign(message, privateKeyBase64);
|
|
164
|
+
message.publicKey = publicKeyBase64;
|
|
163
165
|
|
|
164
166
|
return message;
|
|
165
167
|
}
|
|
@@ -171,9 +173,10 @@ function createSignedMessage({ from, to, body, payload }, privateKeyBase64) {
|
|
|
171
173
|
* @param {string} status Status (online/idle/busy/offline)
|
|
172
174
|
* @param {string} [context] Activity context
|
|
173
175
|
* @param {string} privateKeyBase64 User's private key
|
|
176
|
+
* @param {string} publicKeyBase64 User's public key (required for verification)
|
|
174
177
|
* @returns {object} Signed heartbeat
|
|
175
178
|
*/
|
|
176
|
-
function createSignedHeartbeat(handle, status, context, privateKeyBase64) {
|
|
179
|
+
function createSignedHeartbeat(handle, status, context, privateKeyBase64, publicKeyBase64) {
|
|
177
180
|
const heartbeat = {
|
|
178
181
|
handle,
|
|
179
182
|
status,
|
|
@@ -183,7 +186,9 @@ function createSignedHeartbeat(handle, status, context, privateKeyBase64) {
|
|
|
183
186
|
|
|
184
187
|
if (context) heartbeat.context = context;
|
|
185
188
|
|
|
189
|
+
// Sign and include public key for verification
|
|
186
190
|
heartbeat.signature = sign(heartbeat, privateKeyBase64);
|
|
191
|
+
heartbeat.publicKey = publicKeyBase64;
|
|
187
192
|
|
|
188
193
|
return heartbeat;
|
|
189
194
|
}
|