slashvibe-mcp 0.2.2 ā 0.2.4
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 +1 -0
- package/analytics.js +107 -0
- package/config.js +174 -3
- package/index.js +163 -34
- package/intelligence/index.js +45 -0
- package/intelligence/infer.js +316 -0
- package/intelligence/interests.js +369 -0
- package/intelligence/patterns.js +651 -0
- package/intelligence/proactive.js +358 -0
- package/intelligence/serendipity.js +306 -0
- package/notification-emitter.js +77 -0
- package/notify.js +141 -18
- package/package.json +14 -6
- package/presence.js +5 -1
- package/protocol/index.js +88 -1
- package/protocol/telegram-commands.js +199 -0
- package/store/api.js +469 -29
- package/store/index.js +7 -7
- package/store/local.js +67 -11
- package/store/profiles.js +435 -0
- package/store/reservations.js +321 -0
- package/store/skills.js +378 -0
- package/tools/_actions.js +491 -22
- package/tools/_connection-queue.js +257 -0
- package/tools/_discovery-enhanced.js +290 -0
- package/tools/_discovery.js +439 -0
- package/tools/_proactive-discovery.js +301 -0
- package/tools/_shared/index.js +64 -0
- package/tools/_work-context.js +338 -0
- package/tools/_work-context.manual-test.js +199 -0
- package/tools/_work-context.test.js +260 -0
- package/tools/admin-inbox.js +218 -0
- package/tools/agent-treasury.js +288 -0
- package/tools/agents.js +122 -0
- package/tools/analytics.js +191 -0
- package/tools/approve.js +197 -0
- package/tools/arcade.js +173 -0
- package/tools/artifact-create.js +247 -0
- package/tools/artifact-view.js +174 -0
- package/tools/artifacts-price.js +107 -0
- package/tools/ask-expert.js +160 -0
- package/tools/auto-suggest-connections.js +304 -0
- package/tools/away.js +68 -0
- package/tools/back.js +51 -0
- package/tools/become-expert.js +150 -0
- package/tools/bootstrap-skills.js +231 -0
- package/tools/bridge-dashboard.js +342 -0
- package/tools/bridge-health.js +400 -0
- package/tools/bridge-live.js +384 -0
- package/tools/bridges.js +383 -0
- package/tools/broadcast.js +286 -0
- package/tools/bye.js +4 -0
- package/tools/chat.js +202 -0
- package/tools/collaborative-drawing.js +286 -0
- package/tools/colorguess.js +281 -0
- package/tools/crossword.js +369 -0
- package/tools/discover-insights.js +379 -0
- package/tools/discover-momentum.js +256 -0
- package/tools/discover.js +675 -0
- package/tools/discovery-analytics.js +345 -0
- package/tools/discovery-auto-suggest.js +275 -0
- package/tools/discovery-bootstrap.js +267 -0
- package/tools/discovery-daily.js +375 -0
- package/tools/discovery-dashboard.js +385 -0
- package/tools/discovery-digest.js +314 -0
- package/tools/discovery-hub.js +357 -0
- package/tools/discovery-insights.js +384 -0
- package/tools/discovery-momentum.js +281 -0
- package/tools/discovery-monitor.js +319 -0
- package/tools/discovery-proactive.js +300 -0
- package/tools/dm.js +84 -14
- package/tools/draw.js +317 -0
- package/tools/drawing.js +310 -0
- package/tools/earnings.js +126 -0
- package/tools/echo.js +16 -0
- package/tools/farcaster.js +307 -0
- package/tools/feed.js +215 -0
- package/tools/follow.js +224 -0
- package/tools/friends.js +192 -0
- package/tools/game.js +218 -110
- package/tools/games-catalog.js +376 -0
- package/tools/games.js +313 -0
- package/tools/genesis.js +233 -0
- package/tools/gig-browse.js +206 -0
- package/tools/gig-complete.js +139 -0
- package/tools/guessnumber.js +194 -0
- package/tools/hangman.js +129 -0
- package/tools/help.js +269 -0
- package/tools/idea.js +217 -0
- package/tools/inbox.js +291 -25
- package/tools/init.js +657 -33
- package/tools/insights.js +123 -0
- package/tools/invite.js +142 -21
- package/tools/l2-bridge.js +272 -0
- package/tools/l2-status.js +217 -0
- package/tools/l2.js +206 -0
- package/tools/migrate.js +156 -0
- package/tools/mint.js +377 -0
- package/tools/multiplayer-game.js +275 -0
- package/tools/multiplayer-tictactoe.js +303 -0
- package/tools/mute.js +97 -0
- package/tools/notifications.js +415 -0
- package/tools/observe.js +200 -0
- package/tools/onboarding.js +147 -0
- package/tools/open.js +52 -3
- package/tools/party-game.js +314 -0
- package/tools/plan.js +225 -0
- package/tools/presence-agent.js +167 -0
- package/tools/profile.js +219 -0
- package/tools/proof-of-work.js +139 -0
- package/tools/pulse.js +218 -0
- package/tools/react.js +4 -0
- package/tools/release.js +83 -0
- package/tools/report.js +109 -0
- package/tools/reputation.js +175 -0
- package/tools/request.js +231 -0
- package/tools/reservations.js +116 -0
- package/tools/reserve.js +111 -0
- package/tools/riddle.js +240 -0
- package/tools/run-bootstrap.js +69 -0
- package/tools/schedule.js +367 -0
- package/tools/session.js +420 -0
- package/tools/session_price.js +128 -0
- package/tools/settings.js +200 -0
- package/tools/ship.js +188 -0
- package/tools/shipback.js +326 -0
- package/tools/skills-analytics.js +349 -0
- package/tools/skills-bootstrap.js +301 -0
- package/tools/skills-dashboard.js +268 -0
- package/tools/skills-exchange.js +342 -0
- package/tools/skills.js +380 -0
- package/tools/smart-intro.js +353 -0
- package/tools/social-inbox.js +326 -69
- package/tools/social-post.js +251 -66
- package/tools/social-processor.js +445 -0
- package/tools/solo-game.js +390 -0
- package/tools/start.js +296 -81
- package/tools/status.js +53 -6
- package/tools/storybuilder.js +331 -0
- package/tools/stuck.js +297 -0
- package/tools/subscribe.js +148 -0
- package/tools/subscriptions.js +134 -0
- package/tools/suggest-tags.js +184 -0
- package/tools/tag-suggestions.js +257 -0
- package/tools/telegram-bot.js +183 -0
- package/tools/telegram-setup.js +214 -0
- package/tools/tictactoe.js +155 -0
- package/tools/tip.js +120 -0
- package/tools/token.js +103 -0
- package/tools/twentyquestions.js +143 -0
- package/tools/update.js +1 -1
- package/tools/wallet.js +127 -0
- package/tools/watch.js +157 -0
- package/tools/webhook-test.js +388 -0
- package/tools/who.js +118 -25
- package/tools/withdraw.js +145 -0
- package/tools/wordassociation.js +247 -0
- package/tools/work-summary.js +96 -0
- package/tools/workshop-buddy.js +394 -0
- package/tools/workshop.js +327 -0
- package/version.json +12 -3
- package/tools/board.js +0 -130
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /vibe Social Events Processor
|
|
3
|
+
*
|
|
4
|
+
* Processes social media events from all platforms (X, Telegram, Discord)
|
|
5
|
+
* and executes actions based on content analysis.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const config = require('../config');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Social action patterns and responses
|
|
12
|
+
*/
|
|
13
|
+
const SOCIAL_PATTERNS = {
|
|
14
|
+
// /vibe commands
|
|
15
|
+
commands: {
|
|
16
|
+
'join vibe': 'invite_to_vibe',
|
|
17
|
+
'what is vibe': 'explain_vibe',
|
|
18
|
+
'how to join': 'send_invite_link',
|
|
19
|
+
'vibe invite': 'send_invite_link',
|
|
20
|
+
'ship update': 'ask_for_ship_details'
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
// Intent detection
|
|
24
|
+
intents: {
|
|
25
|
+
building: ['building', 'coding', 'developing', 'working on', 'shipping'],
|
|
26
|
+
learning: ['learning', 'studying', 'tutorial', 'how to', 'need help'],
|
|
27
|
+
collaboration: ['collaborate', 'pair program', 'work together', 'team up'],
|
|
28
|
+
feedback: ['feedback', 'review', 'thoughts on', 'what do you think'],
|
|
29
|
+
sharing: ['check this out', 'built this', 'shipped', 'just made']
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// Auto-response triggers
|
|
33
|
+
triggers: {
|
|
34
|
+
mention_with_question: /(@\w+.*\?)|(\?.*@\w+)/,
|
|
35
|
+
product_hunt_launch: /(product hunt)|(launching on ph)|(ph launch)/i,
|
|
36
|
+
github_share: /github\.com\/[\w-]+\/[\w-]+/,
|
|
37
|
+
demo_share: /(demo)|(live demo)|(check out).*https?/i
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Process incoming social event
|
|
43
|
+
*/
|
|
44
|
+
async function processSocialEvent(event) {
|
|
45
|
+
const { platform, type, from, content, metadata } = event;
|
|
46
|
+
|
|
47
|
+
console.log(`[Social] Processing ${type} from @${from.handle} on ${platform}`);
|
|
48
|
+
|
|
49
|
+
const actions = [];
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
// 1. Command detection
|
|
53
|
+
const command = detectCommand(content);
|
|
54
|
+
if (command) {
|
|
55
|
+
actions.push({
|
|
56
|
+
type: 'command',
|
|
57
|
+
action: SOCIAL_PATTERNS.commands[command],
|
|
58
|
+
priority: 'high'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 2. Intent analysis
|
|
63
|
+
const intent = analyzeIntent(content);
|
|
64
|
+
if (intent) {
|
|
65
|
+
actions.push({
|
|
66
|
+
type: 'intent',
|
|
67
|
+
intent,
|
|
68
|
+
priority: 'medium'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 3. Auto-response triggers
|
|
73
|
+
const trigger = checkTriggers(content);
|
|
74
|
+
if (trigger) {
|
|
75
|
+
actions.push({
|
|
76
|
+
type: 'trigger',
|
|
77
|
+
trigger,
|
|
78
|
+
priority: 'low'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 4. Platform-specific processing
|
|
83
|
+
const platformActions = await processPlatformSpecific(platform, type, event);
|
|
84
|
+
actions.push(...platformActions);
|
|
85
|
+
|
|
86
|
+
// 5. Execute actions
|
|
87
|
+
const results = [];
|
|
88
|
+
for (const action of actions) {
|
|
89
|
+
const result = await executeAction(action, event);
|
|
90
|
+
if (result) results.push(result);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
processed: true,
|
|
95
|
+
actions_taken: results.length,
|
|
96
|
+
actions: results
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error('[Social] Processing error:', error);
|
|
101
|
+
return {
|
|
102
|
+
processed: false,
|
|
103
|
+
error: error.message
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Detect /vibe commands in text
|
|
110
|
+
*/
|
|
111
|
+
function detectCommand(text) {
|
|
112
|
+
const lowerText = text.toLowerCase();
|
|
113
|
+
|
|
114
|
+
for (const [phrase, action] of Object.entries(SOCIAL_PATTERNS.commands)) {
|
|
115
|
+
if (lowerText.includes(phrase)) {
|
|
116
|
+
return phrase;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Analyze user intent from message content
|
|
125
|
+
*/
|
|
126
|
+
function analyzeIntent(text) {
|
|
127
|
+
const lowerText = text.toLowerCase();
|
|
128
|
+
|
|
129
|
+
for (const [intent, keywords] of Object.entries(SOCIAL_PATTERNS.intents)) {
|
|
130
|
+
for (const keyword of keywords) {
|
|
131
|
+
if (lowerText.includes(keyword)) {
|
|
132
|
+
return intent;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Check for auto-response triggers
|
|
142
|
+
*/
|
|
143
|
+
function checkTriggers(text) {
|
|
144
|
+
for (const [trigger, pattern] of Object.entries(SOCIAL_PATTERNS.triggers)) {
|
|
145
|
+
if (pattern.test(text)) {
|
|
146
|
+
return trigger;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Platform-specific event processing
|
|
155
|
+
*/
|
|
156
|
+
async function processPlatformSpecific(platform, type, event) {
|
|
157
|
+
const actions = [];
|
|
158
|
+
|
|
159
|
+
switch (platform) {
|
|
160
|
+
case 'x':
|
|
161
|
+
if (type === 'mention') {
|
|
162
|
+
actions.push({ type: 'notify_team', platform: 'x', priority: 'medium' });
|
|
163
|
+
|
|
164
|
+
// If mention contains @vibebuilders or #vibe, flag for team attention
|
|
165
|
+
if (event.content.includes('@vibebuilders') || event.content.includes('#vibe')) {
|
|
166
|
+
actions.push({ type: 'team_alert', priority: 'high' });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (type === 'dm') {
|
|
171
|
+
// Auto-reply to DMs with basic info
|
|
172
|
+
actions.push({ type: 'auto_reply', template: 'dm_welcome', priority: 'high' });
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
|
|
176
|
+
case 'telegram':
|
|
177
|
+
if (type === 'message' && event.metadata?.isGroup) {
|
|
178
|
+
// Group message - log but don't auto-respond
|
|
179
|
+
actions.push({ type: 'log_group_activity', priority: 'low' });
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
|
|
183
|
+
case 'discord':
|
|
184
|
+
if (type === 'slash_command') {
|
|
185
|
+
// Discord commands are handled by the webhook directly
|
|
186
|
+
actions.push({ type: 'log_command_usage', priority: 'low' });
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return actions;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Execute a social action
|
|
196
|
+
*/
|
|
197
|
+
async function executeAction(action, originalEvent) {
|
|
198
|
+
const { type, priority } = action;
|
|
199
|
+
|
|
200
|
+
try {
|
|
201
|
+
switch (type) {
|
|
202
|
+
case 'command':
|
|
203
|
+
return await handleCommand(action.action, originalEvent);
|
|
204
|
+
|
|
205
|
+
case 'intent':
|
|
206
|
+
return await handleIntent(action.intent, originalEvent);
|
|
207
|
+
|
|
208
|
+
case 'auto_reply':
|
|
209
|
+
return await sendAutoReply(action.template, originalEvent);
|
|
210
|
+
|
|
211
|
+
case 'notify_team':
|
|
212
|
+
return await notifyTeam(originalEvent);
|
|
213
|
+
|
|
214
|
+
case 'team_alert':
|
|
215
|
+
return await sendTeamAlert(originalEvent);
|
|
216
|
+
|
|
217
|
+
default:
|
|
218
|
+
console.log(`[Social] Action ${type} logged`);
|
|
219
|
+
return { action: type, status: 'logged' };
|
|
220
|
+
}
|
|
221
|
+
} catch (error) {
|
|
222
|
+
console.error(`[Social] Action ${type} failed:`, error);
|
|
223
|
+
return { action: type, status: 'failed', error: error.message };
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Handle /vibe commands
|
|
229
|
+
*/
|
|
230
|
+
async function handleCommand(command, event) {
|
|
231
|
+
const { platform, from } = event;
|
|
232
|
+
|
|
233
|
+
switch (command) {
|
|
234
|
+
case 'invite_to_vibe':
|
|
235
|
+
return await sendVibeInvite(platform, from);
|
|
236
|
+
|
|
237
|
+
case 'explain_vibe':
|
|
238
|
+
return await sendVibeExplanation(platform, from);
|
|
239
|
+
|
|
240
|
+
case 'send_invite_link':
|
|
241
|
+
return await sendInviteLink(platform, from);
|
|
242
|
+
|
|
243
|
+
case 'ask_for_ship_details':
|
|
244
|
+
return await askShipDetails(platform, from);
|
|
245
|
+
|
|
246
|
+
default:
|
|
247
|
+
return { command, status: 'unknown' };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Handle user intents
|
|
253
|
+
*/
|
|
254
|
+
async function handleIntent(intent, event) {
|
|
255
|
+
const suggestions = {
|
|
256
|
+
building: "That's awesome! Consider sharing your progress in /vibe for feedback and collaboration.",
|
|
257
|
+
learning: "Learning is great! Check out /vibe's workshop resources and connect with other learners.",
|
|
258
|
+
collaboration: "Perfect mindset! /vibe is all about collaborative building. Join us!",
|
|
259
|
+
feedback: "Feedback is valuable! /vibe has active builders who love reviewing each other's work.",
|
|
260
|
+
sharing: "Love the sharing spirit! /vibe is a great place to showcase what you build."
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
return {
|
|
264
|
+
intent,
|
|
265
|
+
suggestion: suggestions[intent] || "Thanks for sharing!",
|
|
266
|
+
status: 'processed'
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Send auto-reply based on template
|
|
272
|
+
*/
|
|
273
|
+
async function sendAutoReply(template, event) {
|
|
274
|
+
const templates = {
|
|
275
|
+
dm_welcome: `Hi! Thanks for reaching out. /vibe is a collaborative workshop where builders ship cool projects together.
|
|
276
|
+
|
|
277
|
+
š Join us: https://slashvibe.dev
|
|
278
|
+
š® Try features: Chess, Streaks, Matching
|
|
279
|
+
š¬ Connect: @vibebuilders
|
|
280
|
+
|
|
281
|
+
What are you building?`
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const message = templates[template];
|
|
285
|
+
if (!message) return null;
|
|
286
|
+
|
|
287
|
+
// In a full implementation, this would send the reply via the platform API
|
|
288
|
+
console.log(`[Social] Auto-reply to @${event.from.handle}: ${message.slice(0, 50)}...`);
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
type: 'auto_reply',
|
|
292
|
+
template,
|
|
293
|
+
recipient: event.from.handle,
|
|
294
|
+
status: 'sent'
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Send /vibe invite
|
|
300
|
+
*/
|
|
301
|
+
async function sendVibeInvite(platform, user) {
|
|
302
|
+
const invite = {
|
|
303
|
+
message: `š You're invited to /vibe!\n\nA collaborative workshop where builders ship together.\n\nš Join: https://slashvibe.dev\n\nSee you in the workshop! š`,
|
|
304
|
+
platform,
|
|
305
|
+
user: user.handle
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
console.log(`[Social] Sent /vibe invite to @${user.handle} on ${platform}`);
|
|
309
|
+
|
|
310
|
+
return {
|
|
311
|
+
type: 'invite',
|
|
312
|
+
recipient: user.handle,
|
|
313
|
+
platform,
|
|
314
|
+
status: 'sent'
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Send /vibe explanation
|
|
320
|
+
*/
|
|
321
|
+
async function sendVibeExplanation(platform, user) {
|
|
322
|
+
const explanation = `⨠/vibe is a collaborative workshop where builders ship cool projects together!
|
|
323
|
+
|
|
324
|
+
šÆ What we do:
|
|
325
|
+
⢠Build games (Chess, Drawing, Icebreakers)
|
|
326
|
+
⢠Track progress (Streaks, Achievements)
|
|
327
|
+
⢠Connect builders (Matching, Skills Exchange)
|
|
328
|
+
⢠Ship fast (Real-time collaboration)
|
|
329
|
+
|
|
330
|
+
š Join the workshop: https://slashvibe.dev`;
|
|
331
|
+
|
|
332
|
+
console.log(`[Social] Sent /vibe explanation to @${user.handle} on ${platform}`);
|
|
333
|
+
|
|
334
|
+
return {
|
|
335
|
+
type: 'explanation',
|
|
336
|
+
recipient: user.handle,
|
|
337
|
+
platform,
|
|
338
|
+
status: 'sent'
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Send invite link
|
|
344
|
+
*/
|
|
345
|
+
async function sendInviteLink(platform, user) {
|
|
346
|
+
return {
|
|
347
|
+
type: 'invite_link',
|
|
348
|
+
link: 'https://slashvibe.dev',
|
|
349
|
+
recipient: user.handle,
|
|
350
|
+
platform,
|
|
351
|
+
status: 'sent'
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Ask for ship details
|
|
357
|
+
*/
|
|
358
|
+
async function askShipDetails(platform, user) {
|
|
359
|
+
const response = `š Awesome that you're shipping!
|
|
360
|
+
|
|
361
|
+
What did you build? Tell us about:
|
|
362
|
+
⢠What it does
|
|
363
|
+
⢠Tech stack used
|
|
364
|
+
⢠Any challenges you solved
|
|
365
|
+
|
|
366
|
+
We love celebrating builders in /vibe! š`;
|
|
367
|
+
|
|
368
|
+
return {
|
|
369
|
+
type: 'ship_inquiry',
|
|
370
|
+
message: response,
|
|
371
|
+
recipient: user.handle,
|
|
372
|
+
platform,
|
|
373
|
+
status: 'sent'
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Notify team about social activity
|
|
379
|
+
*/
|
|
380
|
+
async function notifyTeam(event) {
|
|
381
|
+
const notification = {
|
|
382
|
+
type: 'team_notification',
|
|
383
|
+
event_type: event.type,
|
|
384
|
+
platform: event.platform,
|
|
385
|
+
from: event.from.handle,
|
|
386
|
+
content: event.content.slice(0, 100),
|
|
387
|
+
timestamp: new Date().toISOString()
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
console.log('[Social] Team notification:', notification);
|
|
391
|
+
|
|
392
|
+
// In a full implementation, this would send to team channels
|
|
393
|
+
return {
|
|
394
|
+
type: 'team_notification',
|
|
395
|
+
status: 'sent'
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Send high-priority team alert
|
|
401
|
+
*/
|
|
402
|
+
async function sendTeamAlert(event) {
|
|
403
|
+
const alert = {
|
|
404
|
+
type: 'team_alert',
|
|
405
|
+
priority: 'high',
|
|
406
|
+
event_type: event.type,
|
|
407
|
+
platform: event.platform,
|
|
408
|
+
from: event.from.handle,
|
|
409
|
+
content: event.content,
|
|
410
|
+
timestamp: new Date().toISOString(),
|
|
411
|
+
requires_response: true
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
console.log('[Social] HIGH PRIORITY TEAM ALERT:', alert);
|
|
415
|
+
|
|
416
|
+
// In a full implementation, this would ping the team immediately
|
|
417
|
+
return {
|
|
418
|
+
type: 'team_alert',
|
|
419
|
+
priority: 'high',
|
|
420
|
+
status: 'sent'
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Get social activity summary
|
|
426
|
+
*/
|
|
427
|
+
async function getSocialSummary() {
|
|
428
|
+
// This would fetch from KV store in a full implementation
|
|
429
|
+
return {
|
|
430
|
+
platforms_active: ['x', 'telegram', 'discord'],
|
|
431
|
+
events_today: 0, // Would be calculated from KV
|
|
432
|
+
auto_responses_sent: 0,
|
|
433
|
+
team_notifications: 0,
|
|
434
|
+
top_intents: ['building', 'learning', 'collaboration']
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
module.exports = {
|
|
439
|
+
processSocialEvent,
|
|
440
|
+
detectCommand,
|
|
441
|
+
analyzeIntent,
|
|
442
|
+
checkTriggers,
|
|
443
|
+
getSocialSummary,
|
|
444
|
+
SOCIAL_PATTERNS
|
|
445
|
+
};
|