slashvibe-mcp 0.3.21 → 0.3.23

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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +280 -47
  3. package/auto-update.js +10 -15
  4. package/config.js +36 -31
  5. package/crypto.js +1 -6
  6. package/debug.js +12 -0
  7. package/discord.js +19 -19
  8. package/eslint.config.js +54 -0
  9. package/index.js +217 -207
  10. package/intelligence/index.js +2 -9
  11. package/intelligence/infer.js +10 -16
  12. package/intelligence/patterns.js +23 -18
  13. package/intelligence/proactive.js +16 -15
  14. package/intelligence/serendipity.js +57 -20
  15. package/memory.js +13 -8
  16. package/migrate-v2.js +72 -0
  17. package/notification-emitter.js +2 -2
  18. package/notify.js +39 -14
  19. package/package.json +28 -29
  20. package/post-install.js +141 -0
  21. package/presence.js +2 -2
  22. package/prompts.js +5 -9
  23. package/protocol/index.js +123 -87
  24. package/protocol/telegram-commands.js +36 -37
  25. package/store/api.js +358 -529
  26. package/store/local.js +9 -10
  27. package/store/profiles.js +48 -192
  28. package/store/reservations.js +2 -9
  29. package/store/skills.js +69 -71
  30. package/store/sqlite.js +355 -0
  31. package/test-skills-bootstrap.js +20 -0
  32. package/test-v2-integration.js +385 -0
  33. package/tools/_actions.js +48 -387
  34. package/tools/_connection-queue.js +45 -56
  35. package/tools/_discovery-enhanced.js +52 -57
  36. package/tools/_discovery.js +87 -185
  37. package/tools/{l2-status.js → _experimental/l2-status.js} +68 -70
  38. package/tools/{shipback.js → _experimental/shipback.js} +4 -3
  39. package/tools/_proactive-discovery.js +60 -73
  40. package/tools/_shared/index.js +41 -64
  41. package/tools/admin-inbox.js +10 -15
  42. package/tools/agents.js +1 -1
  43. package/tools/artifact-create.js +13 -23
  44. package/tools/artifact-view.js +4 -4
  45. package/tools/{_deprecated/back.js → back.js} +1 -1
  46. package/tools/bye.js +3 -5
  47. package/tools/consent.js +2 -2
  48. package/tools/context.js +9 -10
  49. package/tools/crossword.js +3 -2
  50. package/tools/discover.js +94 -356
  51. package/tools/dm.js +27 -86
  52. package/tools/doctor.js +12 -41
  53. package/tools/drawing.js +34 -20
  54. package/tools/echo.js +11 -11
  55. package/tools/feed.js +30 -58
  56. package/tools/follow.js +64 -187
  57. package/tools/{_deprecated/forget.js → forget.js} +4 -7
  58. package/tools/game.js +144 -48
  59. package/tools/handoff.js +6 -8
  60. package/tools/help.js +3 -3
  61. package/tools/idea.js +15 -27
  62. package/tools/inbox.js +121 -293
  63. package/tools/init.js +54 -151
  64. package/tools/invite.js +8 -21
  65. package/tools/migrate.js +27 -24
  66. package/tools/multiplayer-game.js +50 -40
  67. package/tools/{_deprecated/mute.js → mute.js} +4 -3
  68. package/tools/notifications.js +58 -48
  69. package/tools/observe.js +12 -15
  70. package/tools/onboarding.js +8 -11
  71. package/tools/open.js +13 -144
  72. package/tools/party-game.js +23 -12
  73. package/tools/patterns.js +2 -1
  74. package/tools/ping.js +5 -7
  75. package/tools/react.js +28 -30
  76. package/tools/{_deprecated/recall.js → recall.js} +5 -10
  77. package/tools/release.js +4 -2
  78. package/tools/{_deprecated/remember.js → remember.js} +4 -6
  79. package/tools/report.js +2 -2
  80. package/tools/request.js +6 -26
  81. package/tools/reserve.js +1 -1
  82. package/tools/session-fork.js +97 -0
  83. package/tools/session-save.js +109 -0
  84. package/tools/settings.js +30 -99
  85. package/tools/ship.js +74 -56
  86. package/tools/{_deprecated/skills-exchange.js → skills-exchange.js} +38 -39
  87. package/tools/social-inbox.js +22 -28
  88. package/tools/social-post.js +24 -27
  89. package/tools/solo-game.js +54 -46
  90. package/tools/start.js +14 -148
  91. package/tools/status.js +21 -68
  92. package/tools/submit.js +4 -2
  93. package/tools/suggest-tags.js +36 -33
  94. package/tools/summarize.js +19 -16
  95. package/tools/tag-suggestions.js +72 -73
  96. package/tools/test.js +1 -1
  97. package/tools/{_deprecated/tictactoe.js → tictactoe.js} +26 -26
  98. package/tools/token.js +4 -4
  99. package/tools/update.js +1 -2
  100. package/tools/watch.js +132 -112
  101. package/tools/who.js +20 -40
  102. package/tools/{_deprecated/wordassociation.js → wordassociation.js} +23 -20
  103. package/tools/workshop-buddy.js +52 -53
  104. package/tools/x-mentions.js +0 -1
  105. package/tools/x-reply.js +0 -1
  106. package/twitter.js +14 -20
  107. package/version.json +8 -10
  108. package/webhook-runner.js +132 -0
  109. package/auth-store.js +0 -148
  110. package/bridges/bridge-monitor.js +0 -388
  111. package/bridges/discord-bot.js +0 -431
  112. package/bridges/farcaster.js +0 -299
  113. package/bridges/telegram.js +0 -261
  114. package/bridges/webhook-health.js +0 -420
  115. package/bridges/webhook-server.js +0 -437
  116. package/bridges/whatsapp.js +0 -441
  117. package/bridges/x-webhook.js +0 -423
  118. package/games/arcade.js +0 -406
  119. package/games/chess.js +0 -451
  120. package/games/colorguess.js +0 -343
  121. package/games/crossword-words.js +0 -171
  122. package/games/crossword.js +0 -461
  123. package/games/drawing.js +0 -347
  124. package/games/gameroulette.js +0 -300
  125. package/games/gamerouter.js +0 -336
  126. package/games/gamestatus.js +0 -337
  127. package/games/guessnumber.js +0 -209
  128. package/games/hangman.js +0 -279
  129. package/games/memory.js +0 -338
  130. package/games/multiplayer-tictactoe.js +0 -389
  131. package/games/pixelart.js +0 -399
  132. package/games/quickduel.js +0 -354
  133. package/games/riddle.js +0 -371
  134. package/games/rockpaperscissors.js +0 -291
  135. package/games/snake.js +0 -406
  136. package/games/storybuilder.js +0 -343
  137. package/games/tictactoe.js +0 -345
  138. package/games/twentyquestions.js +0 -286
  139. package/games/twotruths.js +0 -207
  140. package/games/werewolf.js +0 -508
  141. package/games/wordassociation.js +0 -247
  142. package/games/wordchain.js +0 -135
  143. package/intelligence/interests.js +0 -369
  144. package/setup.js +0 -480
  145. package/smart-inbox.js +0 -276
  146. package/tools/_deprecated/auto-suggest-connections.js +0 -304
  147. package/tools/_deprecated/bootstrap-skills.js +0 -231
  148. package/tools/_deprecated/bridge-dashboard.js +0 -342
  149. package/tools/_deprecated/bridge-health.js +0 -400
  150. package/tools/_deprecated/bridge-live.js +0 -384
  151. package/tools/_deprecated/bridges.js +0 -383
  152. package/tools/_deprecated/colorguess.js +0 -281
  153. package/tools/_deprecated/discover-insights.js +0 -379
  154. package/tools/_deprecated/discover-momentum.js +0 -256
  155. package/tools/_deprecated/discovery-analytics.js +0 -345
  156. package/tools/_deprecated/discovery-auto-suggest.js +0 -275
  157. package/tools/_deprecated/discovery-bootstrap.js +0 -267
  158. package/tools/_deprecated/discovery-daily.js +0 -375
  159. package/tools/_deprecated/discovery-dashboard.js +0 -385
  160. package/tools/_deprecated/discovery-digest.js +0 -314
  161. package/tools/_deprecated/discovery-hub.js +0 -357
  162. package/tools/_deprecated/discovery-insights.js +0 -384
  163. package/tools/_deprecated/discovery-momentum.js +0 -281
  164. package/tools/_deprecated/discovery-monitor.js +0 -319
  165. package/tools/_deprecated/discovery-proactive.js +0 -300
  166. package/tools/_deprecated/draw.js +0 -317
  167. package/tools/_deprecated/farcaster.js +0 -307
  168. package/tools/_deprecated/games-catalog.js +0 -376
  169. package/tools/_deprecated/games.js +0 -313
  170. package/tools/_deprecated/guessnumber.js +0 -194
  171. package/tools/_deprecated/hangman.js +0 -129
  172. package/tools/_deprecated/multiplayer-tictactoe.js +0 -303
  173. package/tools/_deprecated/riddle.js +0 -240
  174. package/tools/_deprecated/run-bootstrap.js +0 -69
  175. package/tools/_deprecated/skills-analytics.js +0 -349
  176. package/tools/_deprecated/skills-bootstrap.js +0 -301
  177. package/tools/_deprecated/skills-dashboard.js +0 -268
  178. package/tools/_deprecated/skills.js +0 -380
  179. package/tools/_deprecated/smart-intro.js +0 -353
  180. package/tools/_deprecated/storybuilder.js +0 -331
  181. package/tools/_deprecated/telegram-bot.js +0 -183
  182. package/tools/_deprecated/telegram-setup.js +0 -214
  183. package/tools/_deprecated/twentyquestions.js +0 -143
  184. package/tools/_shared.js +0 -234
  185. package/tools/_work-context.js +0 -338
  186. package/tools/_work-context.manual-test.js +0 -199
  187. package/tools/_work-context.test.js +0 -260
  188. package/tools/activity.js +0 -220
  189. package/tools/agent-treasury.js +0 -288
  190. package/tools/analytics.js +0 -191
  191. package/tools/approve.js +0 -197
  192. package/tools/arcade.js +0 -173
  193. package/tools/artifacts-price.js +0 -107
  194. package/tools/ask-expert.js +0 -160
  195. package/tools/available.js +0 -120
  196. package/tools/become-expert.js +0 -150
  197. package/tools/broadcast.js +0 -325
  198. package/tools/chat.js +0 -202
  199. package/tools/collaborative-drawing.js +0 -286
  200. package/tools/connection-status.js +0 -178
  201. package/tools/earnings.js +0 -126
  202. package/tools/friends.js +0 -207
  203. package/tools/genesis.js +0 -233
  204. package/tools/gig-browse.js +0 -206
  205. package/tools/gig-complete.js +0 -144
  206. package/tools/health.js +0 -87
  207. package/tools/leaderboard.js +0 -117
  208. package/tools/lib/git-apply.js +0 -206
  209. package/tools/lib/git-bundle.js +0 -407
  210. package/tools/mint.js +0 -377
  211. package/tools/plan.js +0 -225
  212. package/tools/profile.js +0 -219
  213. package/tools/proof-of-work.js +0 -144
  214. package/tools/pulse.js +0 -218
  215. package/tools/reply.js +0 -166
  216. package/tools/reputation.js +0 -175
  217. package/tools/schedule.js +0 -367
  218. package/tools/search-messages.js +0 -123
  219. package/tools/session.js +0 -467
  220. package/tools/session_price.js +0 -128
  221. package/tools/smart-check.js +0 -201
  222. package/tools/social-processor.js +0 -445
  223. package/tools/streak.js +0 -147
  224. package/tools/stuck.js +0 -297
  225. package/tools/subscribe.js +0 -148
  226. package/tools/subscriptions.js +0 -134
  227. package/tools/tip.js +0 -193
  228. package/tools/wallet.js +0 -269
  229. package/tools/webhook-test.js +0 -388
  230. package/tools/withdraw.js +0 -145
  231. package/tools/work-summary.js +0 -96
  232. package/tools/workshop.js +0 -327
  233. /package/tools/{l2-bridge.js → _experimental/l2-bridge.js} +0 -0
  234. /package/tools/{l2.js → _experimental/l2.js} +0 -0
  235. /package/tools/{_deprecated/away.js → away.js} +0 -0
@@ -1,380 +0,0 @@
1
- /**
2
- * vibe skills — Skills Exchange Marketplace
3
- *
4
- * A marketplace where workshop members can:
5
- * - Offer skills they have (coding, design, marketing, etc.)
6
- * - Request skills they need for their projects
7
- * - Get matched with complementary skill partners
8
- * - Build connections through skill trading
9
- *
10
- * Commands:
11
- * - skills offer <skill> — Offer a skill you have
12
- * - skills request <skill> — Request a skill you need
13
- * - skills matches — See who you can help and who can help you
14
- * - skills browse — Browse all available skills by category
15
- * - skills search <query> — Search for specific skills
16
- * - skills mine — See your offers and requests
17
- * - skills stats — Marketplace statistics
18
- */
19
-
20
- const config = require('../config');
21
- const skillsStore = require('../store/skills');
22
- const userProfiles = require('../store/profiles');
23
- const { formatTimeAgo, requireInit } = require('./_shared');
24
-
25
- const definition = {
26
- name: 'vibe_skills',
27
- description: 'Skills Exchange marketplace - offer skills, request help, find collaborators.',
28
- inputSchema: {
29
- type: 'object',
30
- properties: {
31
- command: {
32
- type: 'string',
33
- enum: ['offer', 'request', 'matches', 'browse', 'search', 'mine', 'stats', 'help'],
34
- description: 'Skills command to run'
35
- },
36
- skill: {
37
- type: 'string',
38
- description: 'Skill name (for offer/request/search commands)'
39
- },
40
- level: {
41
- type: 'string',
42
- enum: ['beginner', 'intermediate', 'expert'],
43
- description: 'Your skill level (for offer command)'
44
- },
45
- urgency: {
46
- type: 'string',
47
- enum: ['low', 'medium', 'high'],
48
- description: 'How urgently you need this skill (for request command)'
49
- },
50
- description: {
51
- type: 'string',
52
- description: 'Additional details about your offer/request'
53
- }
54
- }
55
- }
56
- };
57
-
58
- async function handler(args) {
59
- const initCheck = requireInit();
60
- if (initCheck) return initCheck;
61
-
62
- const myHandle = config.getHandle();
63
- const command = args.command || 'help';
64
-
65
- let display = '';
66
-
67
- try {
68
- switch (command) {
69
- case 'offer': {
70
- if (!args.skill) {
71
- return { error: 'Please specify a skill: skills offer "frontend development"' };
72
- }
73
-
74
- const details = {
75
- level: args.level || 'intermediate',
76
- description: args.description,
77
- format: ['chat', 'call'] // Default formats
78
- };
79
-
80
- const offer = await skillsStore.addSkillOffer(myHandle, args.skill, details);
81
-
82
- display = `## Skill Offer Added! 🎯
83
-
84
- **Offering:** ${offer.skill}
85
- **Level:** ${offer.level}
86
- **Category:** ${offer.category}
87
-
88
- ${offer.description ? `**Details:** ${offer.description}\n` : ''}
89
- Your offer is now live in the marketplace!
90
-
91
- **Next steps:**
92
- - \`skills matches\` to see who needs your help
93
- - \`skills mine\` to manage your offers/requests
94
- - Add more offers: \`skills offer "design" --level expert\``;
95
- break;
96
- }
97
-
98
- case 'request': {
99
- if (!args.skill) {
100
- return { error: 'Please specify a skill: skills request "ui/ux design"' };
101
- }
102
-
103
- const details = {
104
- urgency: args.urgency || 'medium',
105
- description: args.description,
106
- format: ['chat', 'call'] // Default formats
107
- };
108
-
109
- const request = await skillsStore.addSkillRequest(myHandle, args.skill, details);
110
-
111
- display = `## Skill Request Added! 🙋‍♂️
112
-
113
- **Requesting:** ${request.skill}
114
- **Urgency:** ${request.urgency}
115
- **Category:** ${request.category}
116
-
117
- ${request.description ? `**Context:** ${request.description}\n` : ''}
118
- Your request is now live in the marketplace!
119
-
120
- **Next steps:**
121
- - \`skills matches\` to see who can help you
122
- - \`skills browse\` to see all available skills
123
- - \`message @handle\` to reach out to skill providers`;
124
- break;
125
- }
126
-
127
- case 'matches': {
128
- const matches = await skillsStore.findSkillMatches(myHandle);
129
-
130
- if (matches.forMyRequests.length === 0 && matches.forMyOffers.length === 0) {
131
- display = `## No Matches Yet 🤔
132
-
133
- You don't have active offers or requests to match.
134
-
135
- **Get started:**
136
- - \`skills offer "your-skill"\` to offer help
137
- - \`skills request "needed-skill"\` to ask for help
138
- - \`skills browse\` to see what's available
139
-
140
- The more specific you are, the better the matches!`;
141
- } else {
142
- display = `## Your Skill Matches 🎯\n\n`;
143
-
144
- if (matches.forMyRequests.length > 0) {
145
- display += `### People Who Can Help You\n\n`;
146
- for (const match of matches.forMyRequests.slice(0, 5)) {
147
- display += `**@${match.theirItem.handle}** offers **${match.theirItem.skill}**\n`;
148
- display += `_${match.theirItem.level} level, ${match.theirItem.availability} availability_\n`;
149
- if (match.theirItem.description) {
150
- display += `${match.theirItem.description}\n`;
151
- }
152
- display += `👉 \`message @${match.theirItem.handle}\` to connect\n\n`;
153
- }
154
- }
155
-
156
- if (matches.forMyOffers.length > 0) {
157
- display += `### People You Can Help\n\n`;
158
- for (const match of matches.forMyOffers.slice(0, 5)) {
159
- display += `**@${match.theirItem.handle}** needs **${match.theirItem.skill}**\n`;
160
- display += `_${match.theirItem.urgency} urgency_\n`;
161
- if (match.theirItem.context) {
162
- display += `Context: ${match.theirItem.context}\n`;
163
- }
164
- display += `👉 \`message @${match.theirItem.handle}\` to offer help\n\n`;
165
- }
166
- }
167
-
168
- display += `**Perfect time to connect! 🤝**`;
169
- }
170
- break;
171
- }
172
-
173
- case 'browse': {
174
- const categories = await skillsStore.getSkillsByCategory();
175
-
176
- if (Object.keys(categories).length === 0) {
177
- display = `## Skills Marketplace Empty 🏪
178
-
179
- No skills offered or requested yet.
180
-
181
- **Be the first:**
182
- - \`skills offer "your-best-skill"\`
183
- - \`skills request "skill-you-need"\`
184
-
185
- **Popular skills to offer:**
186
- Frontend, Backend, Design, Marketing, Writing, AI/ML`;
187
- } else {
188
- display = `## Skills Marketplace 🏪\n\n`;
189
-
190
- for (const [category, items] of Object.entries(categories)) {
191
- if (items.offers.length === 0 && items.requests.length === 0) continue;
192
-
193
- display += `### ${category}\n\n`;
194
-
195
- if (items.offers.length > 0) {
196
- display += `**Available (${items.offers.length}):** `;
197
- display += items.offers.slice(0, 5).map(o => `${o.skill}(@${o.handle})`).join(', ');
198
- if (items.offers.length > 5) display += ` +${items.offers.length - 5} more`;
199
- display += '\n';
200
- }
201
-
202
- if (items.requests.length > 0) {
203
- display += `**Needed (${items.requests.length}):** `;
204
- display += items.requests.slice(0, 5).map(r => `${r.skill}(@${r.handle})`).join(', ');
205
- if (items.requests.length > 5) display += ` +${items.requests.length - 5} more`;
206
- display += '\n';
207
- }
208
-
209
- display += '\n';
210
- }
211
-
212
- display += `**Commands:**\n`;
213
- display += `- \`skills search "frontend"\` for specific skills\n`;
214
- display += `- \`skills matches\` for personalized matches\n`;
215
- display += `- \`message @handle\` to connect with someone`;
216
- }
217
- break;
218
- }
219
-
220
- case 'search': {
221
- if (!args.skill) {
222
- return { error: 'Please provide a search term: skills search "react"' };
223
- }
224
-
225
- const [offers, requests] = await Promise.all([
226
- skillsStore.getSkillOffers(args.skill),
227
- skillsStore.getSkillRequests(args.skill)
228
- ]);
229
-
230
- if (offers.length === 0 && requests.length === 0) {
231
- display = `## No Results for "${args.skill}" 🔍
232
-
233
- **Try searching for:**
234
- - Technologies: "react", "python", "figma"
235
- - Domains: "marketing", "ai", "mobile"
236
- - General: "design", "writing", "strategy"
237
-
238
- Or browse all categories: \`skills browse\``;
239
- } else {
240
- display = `## Skills: "${args.skill}" 🔍\n\n`;
241
-
242
- if (offers.length > 0) {
243
- display += `### People Offering (${offers.length})\n\n`;
244
- for (const offer of offers.slice(0, 8)) {
245
- display += `**@${offer.handle}** — ${offer.skill} _(${offer.level})_\n`;
246
- if (offer.description) {
247
- display += `${offer.description}\n`;
248
- }
249
- display += `👉 \`message @${offer.handle}\`\n\n`;
250
- }
251
- }
252
-
253
- if (requests.length > 0) {
254
- display += `### People Requesting (${requests.length})\n\n`;
255
- for (const request of requests.slice(0, 8)) {
256
- display += `**@${request.handle}** needs ${request.skill} _(${request.urgency} urgency)_\n`;
257
- if (request.context) {
258
- display += `Context: ${request.context}\n`;
259
- }
260
- display += `👉 \`message @${request.handle}\`\n\n`;
261
- }
262
- }
263
- }
264
- break;
265
- }
266
-
267
- case 'mine': {
268
- const [myOffers, myRequests] = await Promise.all([
269
- skillsStore.getUserOffers(myHandle),
270
- skillsStore.getUserRequests(myHandle)
271
- ]);
272
-
273
- if (myOffers.length === 0 && myRequests.length === 0) {
274
- display = `## Your Skills Profile 👤
275
-
276
- You haven't offered or requested any skills yet.
277
-
278
- **Get started:**
279
- - \`skills offer "your-best-skill" --level expert\`
280
- - \`skills request "skill-you-need" --urgency medium\`
281
-
282
- **Examples:**
283
- - \`skills offer "react development" --level intermediate\`
284
- - \`skills request "ui design" --urgency high\``;
285
- } else {
286
- display = `## Your Skills Profile 👤\n\n`;
287
-
288
- if (myOffers.length > 0) {
289
- display += `### Your Offers (${myOffers.length})\n\n`;
290
- for (const offer of myOffers) {
291
- display += `**${offer.skill}** _(${offer.level} level)_\n`;
292
- if (offer.description) {
293
- display += `${offer.description}\n`;
294
- }
295
- display += `_Added ${formatTimeAgo(offer.timestamp)}_\n\n`;
296
- }
297
- }
298
-
299
- if (myRequests.length > 0) {
300
- display += `### Your Requests (${myRequests.length})\n\n`;
301
- for (const request of myRequests) {
302
- display += `**${request.skill}** _(${request.urgency} urgency)_\n`;
303
- if (request.context) {
304
- display += `Context: ${request.context}\n`;
305
- }
306
- display += `_Added ${formatTimeAgo(request.timestamp)}_\n\n`;
307
- }
308
- }
309
-
310
- display += `**Next steps:**\n`;
311
- display += `- \`skills matches\` to see connections\n`;
312
- display += `- Add more: \`skills offer "another-skill"\``;
313
- }
314
- break;
315
- }
316
-
317
- case 'stats': {
318
- const stats = await skillsStore.getExchangeStats();
319
-
320
- display = `## Skills Marketplace Stats 📊
321
-
322
- **Activity:**
323
- - ${stats.activeOffers} skills offered by workshop members
324
- - ${stats.activeRequests} skills requested
325
- - ${stats.totalExchanges} successful connections made
326
-
327
- **Most Popular Skills:**
328
- ${stats.topSkills.slice(0, 8).map(s => `- ${s.skill} (${s.count})`).join('\n')}
329
-
330
- **Categories:**
331
- ${Object.keys(skillsStore.SKILL_CATEGORIES).map(cat =>
332
- `- ${cat}: ${skillsStore.SKILL_CATEGORIES[cat].length} skills`
333
- ).join('\n')}
334
-
335
- **Get involved:**
336
- - \`skills browse\` to explore opportunities
337
- - \`skills offer "your-skill"\` to help others`;
338
- break;
339
- }
340
-
341
- default:
342
- display = `## Skills Exchange Marketplace 🏪
343
-
344
- **Trade skills, build connections, ship faster!**
345
-
346
- ### Core Commands
347
- **\`skills offer <skill>\`** — Offer a skill you have
348
- **\`skills request <skill>\`** — Request help with something
349
- **\`skills matches\`** — See who you can help & who can help you
350
-
351
- ### Discovery Commands
352
- **\`skills browse\`** — Browse all skills by category
353
- **\`skills search <query>\`** — Find specific skills or people
354
- **\`skills mine\`** — View your offers and requests
355
- **\`skills stats\`** — Marketplace overview
356
-
357
- ### Examples
358
- \`skills offer "react development" --level expert\`
359
- \`skills request "ui design" --urgency high\`
360
- \`skills search "marketing"\`
361
-
362
- ### Skill Categories
363
- ${Object.entries(skillsStore.SKILL_CATEGORIES).map(([cat, skills]) =>
364
- `**${cat}:** ${skills.join(', ')}`
365
- ).join('\n')}
366
-
367
- **Start trading skills today!** 🤝`;
368
- }
369
- } catch (error) {
370
- display = `## Skills Exchange Error
371
-
372
- ${error.message}
373
-
374
- Try: \`skills\` for available commands`;
375
- }
376
-
377
- return { display };
378
- }
379
-
380
- module.exports = { definition, handler };