clodds 1.5.3 → 1.6.1

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 (64) hide show
  1. package/README.md +2 -2
  2. package/dist/agents/index.js +5 -5
  3. package/dist/agents/index.js.map +1 -1
  4. package/dist/cli/commands/index.js +1 -1
  5. package/dist/credentials/index.js +16 -9
  6. package/dist/credentials/index.js.map +1 -1
  7. package/dist/index.js +31 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/skills/bundled/alerts/index.js +4 -1
  10. package/dist/skills/bundled/alerts/index.js.map +1 -1
  11. package/dist/skills/bundled/copy-trading/index.js +14 -5
  12. package/dist/skills/bundled/copy-trading/index.js.map +1 -1
  13. package/dist/skills/bundled/credentials/index.js +2 -2
  14. package/dist/skills/bundled/credentials/index.js.map +1 -1
  15. package/dist/skills/bundled/dca/index.js +2 -2
  16. package/dist/skills/bundled/dca/index.js.map +1 -1
  17. package/dist/skills/bundled/edge/index.js +3 -3
  18. package/dist/skills/bundled/edge/index.js.map +1 -1
  19. package/dist/skills/bundled/history/index.js +3 -2
  20. package/dist/skills/bundled/history/index.js.map +1 -1
  21. package/dist/skills/bundled/markets/index.js +2 -2
  22. package/dist/skills/bundled/markets/index.js.map +1 -1
  23. package/dist/skills/bundled/metaculus/index.js +3 -3
  24. package/dist/skills/bundled/metrics/index.js +2 -2
  25. package/dist/skills/bundled/metrics/index.js.map +1 -1
  26. package/dist/skills/bundled/mev/index.js +1 -1
  27. package/dist/skills/bundled/mev/index.js.map +1 -1
  28. package/dist/skills/bundled/monitoring/index.js +1 -1
  29. package/dist/skills/bundled/monitoring/index.js.map +1 -1
  30. package/dist/skills/bundled/pancakeswap/index.js +1 -1
  31. package/dist/skills/bundled/percolator/index.js +2 -2
  32. package/dist/skills/bundled/percolator/index.js.map +1 -1
  33. package/dist/skills/bundled/pumpfun/SKILL.md +2 -2
  34. package/dist/skills/bundled/pumpfun/index.d.ts +1 -1
  35. package/dist/skills/bundled/pumpfun/index.js +11 -11
  36. package/dist/skills/bundled/pumpfun/index.js.map +1 -1
  37. package/dist/skills/bundled/qmd/index.js +1 -1
  38. package/dist/skills/bundled/qmd/index.js.map +1 -1
  39. package/dist/skills/bundled/remote/index.js +4 -0
  40. package/dist/skills/bundled/remote/index.js.map +1 -1
  41. package/dist/skills/bundled/router/index.js +2 -1
  42. package/dist/skills/bundled/router/index.js.map +1 -1
  43. package/dist/skills/bundled/sizing/index.js +2 -2
  44. package/dist/skills/bundled/sizing/index.js.map +1 -1
  45. package/dist/skills/bundled/streaming/index.js +12 -4
  46. package/dist/skills/bundled/streaming/index.js.map +1 -1
  47. package/dist/skills/bundled/trading-solana/SKILL.md +2 -2
  48. package/dist/skills/bundled/triggers/index.js +3 -1
  49. package/dist/skills/bundled/triggers/index.js.map +1 -1
  50. package/dist/skills/bundled/tts/index.js +2 -2
  51. package/dist/skills/bundled/tts/index.js.map +1 -1
  52. package/dist/skills/bundled/x-research/SKILL.md +97 -0
  53. package/dist/skills/bundled/x-research/index.d.ts +24 -0
  54. package/dist/skills/bundled/x-research/index.js +618 -0
  55. package/dist/skills/bundled/x-research/index.js.map +1 -0
  56. package/dist/skills/executor.d.ts +1 -1
  57. package/dist/skills/executor.js +15 -1
  58. package/dist/skills/executor.js.map +1 -1
  59. package/dist/skills/help.d.ts +1 -1
  60. package/dist/skills/help.js +1 -1
  61. package/dist/solana/pumpapi.d.ts +7 -7
  62. package/dist/solana/pumpapi.js +5 -5
  63. package/dist/solana/pumpapi.js.map +1 -1
  64. package/package.json +2 -2
@@ -0,0 +1,618 @@
1
+ "use strict";
2
+ /**
3
+ * X/Twitter Research Skill
4
+ *
5
+ * Search tweets, follow threads, analyze profiles, and track watchlists
6
+ * via Composio (zero API cost).
7
+ *
8
+ * Commands:
9
+ * /x search <query> [options] Search recent tweets
10
+ * /x thread <tweet_id> Fetch conversation thread
11
+ * /x profile <username> Recent tweets from a user
12
+ * /x tweet <tweet_id> Fetch a single tweet
13
+ * /x watchlist Show/manage watchlist
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const index_js_1 = require("../../../cache/index.js");
17
+ // =============================================================================
18
+ // CACHE
19
+ // =============================================================================
20
+ const tweetCache = (0, index_js_1.createCache)({
21
+ maxSize: 200,
22
+ defaultTtl: 15 * 60 * 1000, // 15 minutes
23
+ name: 'x-research',
24
+ });
25
+ // =============================================================================
26
+ // COMPOSIO API
27
+ // =============================================================================
28
+ const COMPOSIO_BASE = 'https://backend.composio.dev/api';
29
+ const RATE_DELAY_MS = 500;
30
+ function getComposioKey() {
31
+ const key = process.env.COMPOSIO_API_KEY;
32
+ if (!key)
33
+ throw new Error('COMPOSIO_API_KEY not set');
34
+ return key;
35
+ }
36
+ function getConnectionId() {
37
+ const id = process.env.COMPOSIO_CONNECTION_ID;
38
+ if (!id)
39
+ throw new Error('COMPOSIO_CONNECTION_ID not set');
40
+ return id;
41
+ }
42
+ function sleep(ms) {
43
+ return new Promise((r) => setTimeout(r, ms));
44
+ }
45
+ function parseTweets(raw) {
46
+ const data = raw?.data ?? raw;
47
+ const tweets = Array.isArray(data) ? data : data?.data ?? [];
48
+ if (!Array.isArray(tweets) || tweets.length === 0)
49
+ return [];
50
+ const users = {};
51
+ const includes = raw?.includes ?? raw?.data?.includes ?? {};
52
+ for (const u of includes?.users ?? []) {
53
+ users[u.id] = u;
54
+ }
55
+ return tweets.map((t) => {
56
+ const u = users[t.author_id] ?? {};
57
+ const m = t.public_metrics ?? {};
58
+ return {
59
+ id: t.id,
60
+ text: t.text,
61
+ author_id: t.author_id,
62
+ username: u.username ?? '?',
63
+ name: u.name ?? '?',
64
+ created_at: t.created_at,
65
+ conversation_id: t.conversation_id ?? t.id,
66
+ metrics: {
67
+ likes: m.like_count ?? 0,
68
+ retweets: m.retweet_count ?? 0,
69
+ replies: m.reply_count ?? 0,
70
+ quotes: m.quote_count ?? 0,
71
+ impressions: m.impression_count ?? 0,
72
+ bookmarks: m.bookmark_count ?? 0,
73
+ },
74
+ urls: (t.entities?.urls ?? [])
75
+ .map((u) => u.expanded_url)
76
+ .filter(Boolean),
77
+ mentions: (t.entities?.mentions ?? [])
78
+ .map((m) => m.username)
79
+ .filter(Boolean),
80
+ hashtags: (t.entities?.hashtags ?? [])
81
+ .map((h) => h.tag)
82
+ .filter(Boolean),
83
+ tweet_url: `https://x.com/${u.username ?? '?'}/status/${t.id}`,
84
+ };
85
+ });
86
+ }
87
+ async function composioExec(action, params) {
88
+ const key = getComposioKey();
89
+ const connId = getConnectionId();
90
+ const res = await fetch(`${COMPOSIO_BASE}/v2/actions/${action}/execute`, {
91
+ method: 'POST',
92
+ headers: {
93
+ 'x-api-key': key,
94
+ 'Content-Type': 'application/json',
95
+ },
96
+ body: JSON.stringify({
97
+ connectedAccountId: connId,
98
+ input: params,
99
+ }),
100
+ });
101
+ if (!res.ok) {
102
+ const body = await res.text();
103
+ throw new Error(`Composio ${res.status}: ${body.slice(0, 200)}`);
104
+ }
105
+ const result = (await res.json());
106
+ if (result.error) {
107
+ throw new Error(`Composio error: ${result.error}`);
108
+ }
109
+ return result.data ?? result;
110
+ }
111
+ function parseSince(since) {
112
+ const match = since.match(/^(\d+)(m|h|d)$/);
113
+ if (match) {
114
+ const num = parseInt(match[1], 10);
115
+ if (Number.isNaN(num))
116
+ return null;
117
+ const unit = match[2];
118
+ const ms = unit === 'm' ? num * 60_000 :
119
+ unit === 'h' ? num * 3_600_000 :
120
+ num * 86_400_000;
121
+ return new Date(Date.now() - ms).toISOString();
122
+ }
123
+ if (since.includes('T') || since.includes('-')) {
124
+ try {
125
+ return new Date(since).toISOString();
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ async function searchTweets(query, opts = {}) {
134
+ const maxResults = Math.max(Math.min(opts.maxResults ?? 100, 100), 10);
135
+ const pages = opts.pages ?? 1;
136
+ const sort = opts.sortOrder ?? 'relevancy';
137
+ let allTweets = [];
138
+ let nextToken;
139
+ for (let page = 0; page < pages; page++) {
140
+ const params = {
141
+ query,
142
+ max_results: maxResults,
143
+ sort_order: sort,
144
+ tweet__fields: ['created_at', 'public_metrics', 'author_id', 'conversation_id', 'entities'],
145
+ expansions: ['author_id'],
146
+ user__fields: ['username', 'name', 'public_metrics', 'description'],
147
+ };
148
+ if (opts.since) {
149
+ const startTime = parseSince(opts.since);
150
+ if (startTime)
151
+ params.start_time = startTime;
152
+ }
153
+ if (nextToken) {
154
+ params.next_token = nextToken;
155
+ }
156
+ const result = await composioExec('TWITTER_RECENT_SEARCH', params);
157
+ const tweets = parseTweets(result);
158
+ allTweets.push(...tweets);
159
+ nextToken = result?.meta?.next_token ?? result?.data?.meta?.next_token;
160
+ if (!nextToken)
161
+ break;
162
+ if (page < pages - 1)
163
+ await sleep(RATE_DELAY_MS);
164
+ }
165
+ return allTweets;
166
+ }
167
+ async function fetchThread(conversationId, pages) {
168
+ const query = `conversation_id:${conversationId}`;
169
+ return searchTweets(query, { pages: pages ?? 2, sortOrder: 'recency' });
170
+ }
171
+ async function fetchProfile(username, opts = {}) {
172
+ const replyFilter = opts.includeReplies ? '' : ' -is:reply';
173
+ const query = `from:${username} -is:retweet${replyFilter}`;
174
+ const tweets = await searchTweets(query, {
175
+ maxResults: Math.min(opts.count ?? 20, 100),
176
+ sortOrder: 'recency',
177
+ });
178
+ const user = tweets.length > 0
179
+ ? { username: tweets[0].username, name: tweets[0].name }
180
+ : { username, name: username };
181
+ return { user, tweets };
182
+ }
183
+ async function fetchTweet(tweetId) {
184
+ const tweets = await searchTweets(tweetId, { maxResults: 10 });
185
+ return tweets.find((t) => t.id === tweetId) ?? tweets[0] ?? null;
186
+ }
187
+ // =============================================================================
188
+ // SORTING & FILTERING
189
+ // =============================================================================
190
+ function sortBy(tweets, metric = 'likes') {
191
+ return [...tweets].sort((a, b) => b.metrics[metric] - a.metrics[metric]);
192
+ }
193
+ function filterEngagement(tweets, opts) {
194
+ return tweets.filter((t) => {
195
+ if (opts.minLikes && t.metrics.likes < opts.minLikes)
196
+ return false;
197
+ if (opts.minImpressions && t.metrics.impressions < opts.minImpressions)
198
+ return false;
199
+ return true;
200
+ });
201
+ }
202
+ function dedupe(tweets) {
203
+ const seen = new Set();
204
+ return tweets.filter((t) => {
205
+ if (seen.has(t.id))
206
+ return false;
207
+ seen.add(t.id);
208
+ return true;
209
+ });
210
+ }
211
+ // =============================================================================
212
+ // FORMATTING
213
+ // =============================================================================
214
+ function compactNumber(n) {
215
+ if (n >= 1_000_000)
216
+ return `${(n / 1_000_000).toFixed(1)}M`;
217
+ if (n >= 1_000)
218
+ return `${(n / 1_000).toFixed(1)}K`;
219
+ return String(n);
220
+ }
221
+ function timeAgo(dateStr) {
222
+ const diff = Date.now() - new Date(dateStr).getTime();
223
+ if (Number.isNaN(diff))
224
+ return '?';
225
+ const mins = Math.floor(diff / 60_000);
226
+ if (mins < 60)
227
+ return `${mins}m`;
228
+ const hours = Math.floor(mins / 60);
229
+ if (hours < 24)
230
+ return `${hours}h`;
231
+ const days = Math.floor(hours / 24);
232
+ return `${days}d`;
233
+ }
234
+ function formatTweet(t, index) {
235
+ const prefix = index !== undefined ? `${index + 1}. ` : '';
236
+ const engagement = `${compactNumber(t.metrics.likes)}L ${compactNumber(t.metrics.impressions)}I`;
237
+ const time = timeAgo(t.created_at);
238
+ const text = t.text.length > 200 ? t.text.slice(0, 197) + '...' : t.text;
239
+ const cleanText = text.replace(/https:\/\/t\.co\/\S+/g, '').trim();
240
+ let out = `${prefix}@${t.username} (${engagement} | ${time})\n${cleanText}`;
241
+ if (t.urls.length > 0) {
242
+ out += `\n${t.urls[0]}`;
243
+ }
244
+ out += `\n${t.tweet_url}`;
245
+ return out;
246
+ }
247
+ function formatResults(tweets, opts = {}) {
248
+ const limit = opts.limit ?? 15;
249
+ const shown = tweets.slice(0, limit);
250
+ let out = '';
251
+ if (opts.query) {
252
+ out += `"${opts.query}" -- ${tweets.length} results\n\n`;
253
+ }
254
+ out += shown.map((t, i) => formatTweet(t, i)).join('\n\n');
255
+ if (tweets.length > limit) {
256
+ out += `\n\n... +${tweets.length - limit} more`;
257
+ }
258
+ return out;
259
+ }
260
+ function formatTweetMarkdown(t) {
261
+ const engagement = `${t.metrics.likes}L ${t.metrics.impressions}I`;
262
+ const cleanText = t.text.replace(/https:\/\/t\.co\/\S+/g, '').trim();
263
+ const quoted = cleanText.replace(/\n/g, '\n > ');
264
+ let out = `- **@${t.username}** (${engagement}) [Tweet](${t.tweet_url})\n > ${quoted}`;
265
+ if (t.urls.length > 0) {
266
+ out += `\n Links: ${t.urls.map((u) => {
267
+ try {
268
+ return `[${new URL(u).hostname}](${u})`;
269
+ }
270
+ catch {
271
+ return u;
272
+ }
273
+ }).join(', ')}`;
274
+ }
275
+ return out;
276
+ }
277
+ function formatResearchMarkdown(query, tweets, opts = {}) {
278
+ const date = new Date().toISOString().split('T')[0];
279
+ let out = `# X Research: ${query}\n\n`;
280
+ out += `**Date:** ${date}\n`;
281
+ out += `**Tweets found:** ${tweets.length}\n\n`;
282
+ if (opts.themes && opts.themes.length > 0) {
283
+ for (const theme of opts.themes) {
284
+ out += `## ${theme.title}\n\n`;
285
+ const themeTweets = theme.tweetIds
286
+ .map((id) => tweets.find((t) => t.id === id))
287
+ .filter(Boolean);
288
+ out += themeTweets.map(formatTweetMarkdown).join('\n\n');
289
+ out += '\n\n';
290
+ }
291
+ }
292
+ else {
293
+ out += `## Top Results (by engagement)\n\n`;
294
+ out += tweets.slice(0, 30).map(formatTweetMarkdown).join('\n\n');
295
+ out += '\n\n';
296
+ }
297
+ out += `---\n\n## Research Metadata\n`;
298
+ out += `- **Query:** ${query}\n`;
299
+ out += `- **Date:** ${date}\n`;
300
+ out += `- **Tweets scanned:** ${tweets.length}\n`;
301
+ out += `- **Cost:** $0 (Composio)\n`;
302
+ if (opts.queries) {
303
+ out += `- **Search queries:**\n`;
304
+ for (const q of opts.queries) {
305
+ out += ` - \`${q}\`\n`;
306
+ }
307
+ }
308
+ return out;
309
+ }
310
+ function formatProfile(user, tweets) {
311
+ const m = user.public_metrics ?? {};
312
+ let out = `@${user.username} -- ${user.name}\n`;
313
+ if (m.followers_count) {
314
+ out += `${compactNumber(m.followers_count)} followers | ${compactNumber(m.tweet_count ?? 0)} tweets\n`;
315
+ }
316
+ if (user.description) {
317
+ out += `${user.description.slice(0, 150)}\n`;
318
+ }
319
+ out += '\nRecent:\n\n';
320
+ out += tweets
321
+ .slice(0, 10)
322
+ .map((t, i) => formatTweet(t, i))
323
+ .join('\n\n');
324
+ return out;
325
+ }
326
+ // =============================================================================
327
+ // WATCHLIST (in-memory, session-scoped)
328
+ // =============================================================================
329
+ const watchlist = new Map();
330
+ // =============================================================================
331
+ // ARG PARSING HELPERS
332
+ // =============================================================================
333
+ function parseArgs(raw) {
334
+ const tokens = raw.trim().split(/\s+/);
335
+ const positional = [];
336
+ const flags = new Set();
337
+ const opts = new Map();
338
+ let i = 0;
339
+ while (i < tokens.length) {
340
+ const tok = tokens[i];
341
+ if (tok.startsWith('--')) {
342
+ const name = tok.slice(2);
343
+ // Check if next token exists and isn't a flag
344
+ if (i + 1 < tokens.length && !tokens[i + 1].startsWith('--')) {
345
+ opts.set(name, tokens[i + 1]);
346
+ i += 2;
347
+ }
348
+ else {
349
+ flags.add(name);
350
+ i++;
351
+ }
352
+ }
353
+ else {
354
+ positional.push(tok);
355
+ i++;
356
+ }
357
+ }
358
+ return { positional, flags, opts };
359
+ }
360
+ function safeParseInt(val, fallback) {
361
+ if (val === undefined)
362
+ return fallback;
363
+ const n = parseInt(val, 10);
364
+ return Number.isNaN(n) ? fallback : n;
365
+ }
366
+ // =============================================================================
367
+ // COMMAND HANDLERS
368
+ // =============================================================================
369
+ async function handleSearch(argsStr) {
370
+ const { positional, flags, opts } = parseArgs(argsStr);
371
+ const sortOpt = opts.get('sort') ?? 'likes';
372
+ const minLikes = safeParseInt(opts.get('min-likes'), 0);
373
+ const minImpressions = safeParseInt(opts.get('min-impressions'), 0);
374
+ const pages = Math.min(safeParseInt(opts.get('pages'), 1), 5);
375
+ const limit = safeParseInt(opts.get('limit'), 15);
376
+ const since = opts.get('since');
377
+ const noReplies = flags.has('no-replies');
378
+ const noRetweets = flags.has('no-retweets');
379
+ const asJson = flags.has('json');
380
+ const asMarkdown = flags.has('markdown');
381
+ let query = positional.join(' ');
382
+ if (!query)
383
+ return 'Usage: /x search <query> [--sort likes|recent] [--since 1h|1d|7d] [--limit N] [--pages N]';
384
+ if (!query.includes('is:retweet') && !noRetweets) {
385
+ query += ' -is:retweet';
386
+ }
387
+ if (noReplies && !query.includes('is:reply')) {
388
+ query += ' -is:reply';
389
+ }
390
+ // Check cache
391
+ const cacheKey = `search:${query}|sort=${sortOpt}&pages=${pages}&since=${since ?? '7d'}`;
392
+ const cached = tweetCache.get(cacheKey);
393
+ let tweets;
394
+ if (cached) {
395
+ tweets = cached;
396
+ }
397
+ else {
398
+ tweets = await searchTweets(query, {
399
+ pages,
400
+ sortOrder: sortOpt === 'recent' ? 'recency' : 'relevancy',
401
+ since: since ?? undefined,
402
+ });
403
+ tweetCache.set(cacheKey, tweets);
404
+ }
405
+ // Filter
406
+ if (minLikes > 0 || minImpressions > 0) {
407
+ tweets = filterEngagement(tweets, {
408
+ minLikes: minLikes > 0 ? minLikes : undefined,
409
+ minImpressions: minImpressions > 0 ? minImpressions : undefined,
410
+ });
411
+ }
412
+ // Sort
413
+ if (sortOpt !== 'recent') {
414
+ const metric = sortOpt;
415
+ tweets = sortBy(tweets, metric);
416
+ }
417
+ tweets = dedupe(tweets);
418
+ if (tweets.length === 0)
419
+ return `No tweets found for "${positional.join(' ')}".`;
420
+ // Output format
421
+ if (asJson) {
422
+ return JSON.stringify(tweets.slice(0, limit), null, 2);
423
+ }
424
+ if (asMarkdown) {
425
+ return formatResearchMarkdown(positional.join(' '), tweets, { queries: [query] });
426
+ }
427
+ const sinceLabel = since ? ` | since ${since}` : '';
428
+ const footer = `\n\n${tweets.length} tweets | sorted by ${sortOpt} | ${pages} page(s)${sinceLabel}`;
429
+ return formatResults(tweets, { query: positional.join(' '), limit }) + footer;
430
+ }
431
+ async function handleThread(argsStr) {
432
+ const { positional, opts } = parseArgs(argsStr);
433
+ const tweetId = positional[0];
434
+ if (!tweetId)
435
+ return 'Usage: /x thread <tweet_id> [--pages N]';
436
+ const pages = Math.min(safeParseInt(opts.get('pages'), 2), 5);
437
+ const tweets = await fetchThread(tweetId, pages);
438
+ if (tweets.length === 0)
439
+ return 'No tweets found in thread.';
440
+ let out = `Thread (${tweets.length} tweets)\n\n`;
441
+ out += tweets.map((t) => formatTweet(t)).join('\n\n');
442
+ return out;
443
+ }
444
+ async function handleProfile(argsStr) {
445
+ const { positional, flags, opts } = parseArgs(argsStr);
446
+ const username = positional[0]?.replace(/^@/, '');
447
+ if (!username)
448
+ return 'Usage: /x profile <username> [--count N] [--replies]';
449
+ const count = safeParseInt(opts.get('count'), 20);
450
+ const includeReplies = flags.has('replies');
451
+ const asJson = flags.has('json');
452
+ const { user, tweets } = await fetchProfile(username, { count, includeReplies });
453
+ if (asJson) {
454
+ return JSON.stringify({ user, tweets }, null, 2);
455
+ }
456
+ return formatProfile(user, tweets);
457
+ }
458
+ async function handleTweet(argsStr) {
459
+ const { positional, flags } = parseArgs(argsStr);
460
+ const tweetId = positional[0];
461
+ if (!tweetId)
462
+ return 'Usage: /x tweet <tweet_id>';
463
+ const tweet = await fetchTweet(tweetId);
464
+ if (!tweet)
465
+ return 'Tweet not found.';
466
+ if (flags.has('json')) {
467
+ return JSON.stringify(tweet, null, 2);
468
+ }
469
+ return formatTweet(tweet);
470
+ }
471
+ async function handleWatchlist(argsStr) {
472
+ const parts = argsStr.trim().split(/\s+/);
473
+ const sub = parts[0]?.toLowerCase();
474
+ if (sub === 'add') {
475
+ const username = parts[1]?.replace(/^@/, '');
476
+ if (!username)
477
+ return 'Usage: /x watchlist add <username> [note]';
478
+ const key = username.toLowerCase();
479
+ if (watchlist.has(key))
480
+ return `@${username} already on watchlist.`;
481
+ const note = parts.slice(2).join(' ') || undefined;
482
+ watchlist.set(key, { note, addedAt: new Date().toISOString() });
483
+ return `Added @${username} to watchlist.${note ? ` (${note})` : ''}`;
484
+ }
485
+ if (sub === 'remove' || sub === 'rm') {
486
+ const username = parts[1]?.replace(/^@/, '');
487
+ if (!username)
488
+ return 'Usage: /x watchlist remove <username>';
489
+ const key = username.toLowerCase();
490
+ if (watchlist.delete(key)) {
491
+ return `Removed @${username} from watchlist.`;
492
+ }
493
+ return `@${username} not found on watchlist.`;
494
+ }
495
+ if (sub === 'check') {
496
+ if (watchlist.size === 0)
497
+ return 'Watchlist is empty. Add accounts with: /x watchlist add <username>';
498
+ const lines = [`Checking ${watchlist.size} watchlist accounts...\n`];
499
+ for (const [key, entry] of watchlist) {
500
+ try {
501
+ const { user, tweets } = await fetchProfile(key, { count: 5 });
502
+ const label = entry.note ? ` (${entry.note})` : '';
503
+ lines.push(`\n--- @${key}${label} ---`);
504
+ if (tweets.length === 0) {
505
+ lines.push(' No recent tweets.');
506
+ }
507
+ else {
508
+ for (const t of tweets.slice(0, 3)) {
509
+ lines.push(formatTweet(t));
510
+ lines.push('');
511
+ }
512
+ }
513
+ }
514
+ catch (e) {
515
+ lines.push(`Error checking @${key}: ${e.message}`);
516
+ }
517
+ }
518
+ return lines.join('\n');
519
+ }
520
+ // Default: show watchlist
521
+ if (watchlist.size === 0)
522
+ return 'Watchlist is empty. Add accounts with: /x watchlist add <username>';
523
+ const lines = [`Watchlist (${watchlist.size} accounts)\n`];
524
+ for (const [key, entry] of watchlist) {
525
+ const note = entry.note ? ` -- ${entry.note}` : '';
526
+ const added = entry.addedAt.split('T')[0];
527
+ lines.push(` @${key}${note} (added ${added})`);
528
+ }
529
+ return lines.join('\n');
530
+ }
531
+ function handleCache(argsStr) {
532
+ const sub = argsStr.trim().toLowerCase();
533
+ if (sub === 'clear') {
534
+ tweetCache.clear();
535
+ return 'Cache cleared.';
536
+ }
537
+ const stats = tweetCache.stats();
538
+ return `Cache: ${stats.size}/${stats.maxSize} entries | hit rate: ${(stats.hitRate * 100).toFixed(0)}% | hits: ${stats.hits}, misses: ${stats.misses}`;
539
+ }
540
+ // =============================================================================
541
+ // MAIN EXECUTE
542
+ // =============================================================================
543
+ async function execute(args) {
544
+ const parts = args.trim().split(/\s+/);
545
+ const cmd = parts[0]?.toLowerCase() ?? 'help';
546
+ const rest = parts.slice(1).join(' ');
547
+ try {
548
+ switch (cmd) {
549
+ case 'search':
550
+ case 's':
551
+ return await handleSearch(rest);
552
+ case 'thread':
553
+ case 't':
554
+ return await handleThread(rest);
555
+ case 'profile':
556
+ case 'p':
557
+ return await handleProfile(rest);
558
+ case 'tweet':
559
+ return await handleTweet(rest);
560
+ case 'watchlist':
561
+ case 'wl':
562
+ return await handleWatchlist(rest);
563
+ case 'cache':
564
+ return handleCache(rest);
565
+ case 'help':
566
+ default:
567
+ return helpText();
568
+ }
569
+ }
570
+ catch (error) {
571
+ return `Error: ${error instanceof Error ? error.message : String(error)}`;
572
+ }
573
+ }
574
+ function helpText() {
575
+ return `**X/Twitter Research** (via Composio)
576
+
577
+ **Commands:**
578
+ /x search <query> [options] Search recent tweets (last 7 days)
579
+ /x thread <tweet_id> Fetch full conversation thread
580
+ /x profile <username> Recent tweets from a user
581
+ /x tweet <tweet_id> Fetch a single tweet
582
+ /x watchlist Show watchlist
583
+ /x watchlist add <user> [note] Add user to watchlist
584
+ /x watchlist remove <user> Remove user from watchlist
585
+ /x watchlist check Check recent tweets from all watchlist accounts
586
+ /x cache clear Clear search cache
587
+
588
+ **Search options:**
589
+ --sort likes|impressions|retweets|recent (default: likes)
590
+ --since 1h|3h|12h|1d|7d Time filter
591
+ --min-likes N Filter minimum likes
592
+ --min-impressions N Filter minimum impressions
593
+ --pages N Pages to fetch, 1-5 (default: 1)
594
+ --limit N Results to display (default: 15)
595
+ --no-replies Exclude replies
596
+ --no-retweets Exclude retweets
597
+ --json Raw JSON output
598
+ --markdown Markdown research document output
599
+
600
+ **Examples:**
601
+ /x search "claude code"
602
+ /x search "polymarket" --sort recent --since 1d --markdown
603
+ /x profile elonmusk --count 5 --json
604
+ /x watchlist add vikiival "Polymarket whale"`;
605
+ }
606
+ // =============================================================================
607
+ // EXPORT
608
+ // =============================================================================
609
+ exports.default = {
610
+ name: 'x-research',
611
+ description: 'X/Twitter research via Composio — search, threads, profiles, watchlists',
612
+ commands: ['/x', '/x-research', '/twitter'],
613
+ handle: execute,
614
+ requires: {
615
+ env: ['COMPOSIO_API_KEY', 'COMPOSIO_CONNECTION_ID'],
616
+ },
617
+ };
618
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/bundled/x-research/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Skill Executor - Central registry for all 118 bundled CLI skill handlers.
2
+ * Skill Executor - Central registry for all 119 bundled CLI skill handlers.
3
3
  *
4
4
  * ARCHITECTURE:
5
5
  * - Each skill lives in src/skills/bundled/<name>/index.ts