imperium-crawl 2.0.0 → 2.1.0

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 (51) hide show
  1. package/README.md +17 -10
  2. package/dist/constants.d.ts +1 -1
  3. package/dist/constants.js +1 -1
  4. package/dist/recipes/index.d.ts.map +1 -1
  5. package/dist/recipes/index.js +6 -0
  6. package/dist/recipes/index.js.map +1 -1
  7. package/dist/recipes/influencer-competitor-spy.json +14 -0
  8. package/dist/recipes/influencer-hashtag-scout.json +14 -0
  9. package/dist/recipes/influencer-niche-discovery.json +14 -0
  10. package/dist/skills/manager.d.ts +11 -2
  11. package/dist/skills/manager.d.ts.map +1 -1
  12. package/dist/skills/manager.js.map +1 -1
  13. package/dist/social/ai-fallback.d.ts +22 -0
  14. package/dist/social/ai-fallback.d.ts.map +1 -0
  15. package/dist/social/ai-fallback.js +137 -0
  16. package/dist/social/ai-fallback.js.map +1 -0
  17. package/dist/social/parsers.d.ts +28 -0
  18. package/dist/social/parsers.d.ts.map +1 -0
  19. package/dist/social/parsers.js +146 -0
  20. package/dist/social/parsers.js.map +1 -0
  21. package/dist/social/types.d.ts +55 -0
  22. package/dist/social/types.d.ts.map +1 -0
  23. package/dist/social/types.js +5 -0
  24. package/dist/social/types.js.map +1 -0
  25. package/dist/social/whisper.d.ts +29 -0
  26. package/dist/social/whisper.d.ts.map +1 -0
  27. package/dist/social/whisper.js +88 -0
  28. package/dist/social/whisper.js.map +1 -0
  29. package/dist/tools/index.d.ts.map +1 -1
  30. package/dist/tools/index.js +5 -0
  31. package/dist/tools/index.js.map +1 -1
  32. package/dist/tools/manifest.d.ts.map +1 -1
  33. package/dist/tools/manifest.js +9 -0
  34. package/dist/tools/manifest.js.map +1 -1
  35. package/dist/tools/reddit.d.ts +36 -0
  36. package/dist/tools/reddit.d.ts.map +1 -0
  37. package/dist/tools/reddit.js +190 -0
  38. package/dist/tools/reddit.js.map +1 -0
  39. package/dist/tools/run-skill.d.ts +18 -0
  40. package/dist/tools/run-skill.d.ts.map +1 -1
  41. package/dist/tools/run-skill.js +681 -0
  42. package/dist/tools/run-skill.js.map +1 -1
  43. package/dist/tools/tiktok.d.ts +30 -0
  44. package/dist/tools/tiktok.d.ts.map +1 -0
  45. package/dist/tools/tiktok.js +246 -0
  46. package/dist/tools/tiktok.js.map +1 -0
  47. package/dist/tools/youtube.d.ts +33 -0
  48. package/dist/tools/youtube.d.ts.map +1 -0
  49. package/dist/tools/youtube.js +489 -0
  50. package/dist/tools/youtube.js.map +1 -0
  51. package/package.json +1 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared types for social media tools (YouTube, Reddit).
3
+ */
4
+ export interface SocialVideo {
5
+ id: string;
6
+ title: string;
7
+ url: string;
8
+ thumbnail?: string;
9
+ duration?: string;
10
+ views?: number;
11
+ likes?: number;
12
+ author: string;
13
+ author_url?: string;
14
+ published?: string;
15
+ description?: string;
16
+ }
17
+ export interface SocialPost {
18
+ id: string;
19
+ title: string;
20
+ url: string;
21
+ author: string;
22
+ score?: number;
23
+ comments_count?: number;
24
+ published?: string;
25
+ subreddit?: string;
26
+ text?: string;
27
+ thumbnail?: string;
28
+ is_video?: boolean;
29
+ flair?: string;
30
+ }
31
+ export interface SocialComment {
32
+ id: string;
33
+ author: string;
34
+ text: string;
35
+ score?: number;
36
+ published?: string;
37
+ replies_count?: number;
38
+ }
39
+ export interface SocialProfile {
40
+ name: string;
41
+ url: string;
42
+ description?: string;
43
+ subscribers?: number;
44
+ avatar?: string;
45
+ verified?: boolean;
46
+ video_count?: number;
47
+ created?: string;
48
+ }
49
+ export interface SocialSearchResult<T> {
50
+ query?: string;
51
+ platform: "youtube" | "reddit";
52
+ results: T[];
53
+ total?: number;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/social/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for social media tools (YouTube, Reddit).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/social/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenAI Whisper integration for audio transcription.
3
+ * Used as fallback when YouTube captions are unavailable.
4
+ *
5
+ * Requires LLM_API_KEY with LLM_PROVIDER=openai (or any OpenAI-compatible key).
6
+ */
7
+ export interface WhisperResult {
8
+ text: string;
9
+ segments?: Array<{
10
+ start: number;
11
+ end: number;
12
+ text: string;
13
+ }>;
14
+ language?: string;
15
+ duration?: number;
16
+ }
17
+ /**
18
+ * Check if Whisper transcription is available (OpenAI API key configured).
19
+ */
20
+ export declare function hasWhisperConfigured(): boolean;
21
+ /**
22
+ * Transcribe audio data using OpenAI Whisper API.
23
+ * Returns timestamped segments.
24
+ */
25
+ export declare function transcribeAudio(audioData: Buffer | Uint8Array, options?: {
26
+ language?: string;
27
+ filename?: string;
28
+ }): Promise<WhisperResult>;
29
+ //# sourceMappingURL=whisper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.d.ts","sourceRoot":"","sources":["../../src/social/whisper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAgBD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,aAAa,CAAC,CA6ExB"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * OpenAI Whisper integration for audio transcription.
3
+ * Used as fallback when YouTube captions are unavailable.
4
+ *
5
+ * Requires LLM_API_KEY with LLM_PROVIDER=openai (or any OpenAI-compatible key).
6
+ */
7
+ import { getLLMConfig } from "../llm/index.js";
8
+ const WHISPER_API_URL = "https://api.openai.com/v1/audio/transcriptions";
9
+ const WHISPER_MODEL = "whisper-1";
10
+ const MAX_AUDIO_SIZE = 25 * 1024 * 1024; // 25MB Whisper limit
11
+ /**
12
+ * Check if Whisper transcription is available (OpenAI API key configured).
13
+ */
14
+ export function hasWhisperConfigured() {
15
+ const config = getLLMConfig();
16
+ if (!config)
17
+ return false;
18
+ // Whisper only works with OpenAI API keys
19
+ // But users might have LLM_PROVIDER=anthropic with a separate OPENAI_API_KEY
20
+ return config.provider === "openai" || !!process.env.OPENAI_API_KEY?.trim();
21
+ }
22
+ /**
23
+ * Get the OpenAI API key for Whisper.
24
+ * Prefers OPENAI_API_KEY env var, falls back to LLM_API_KEY if provider is openai.
25
+ */
26
+ function getWhisperApiKey() {
27
+ const explicit = process.env.OPENAI_API_KEY?.trim();
28
+ if (explicit)
29
+ return explicit;
30
+ const config = getLLMConfig();
31
+ if (config && config.provider === "openai")
32
+ return config.apiKey;
33
+ return null;
34
+ }
35
+ /**
36
+ * Transcribe audio data using OpenAI Whisper API.
37
+ * Returns timestamped segments.
38
+ */
39
+ export async function transcribeAudio(audioData, options) {
40
+ const apiKey = getWhisperApiKey();
41
+ if (!apiKey) {
42
+ throw new Error("OpenAI API key required for Whisper transcription. Set OPENAI_API_KEY or LLM_API_KEY with LLM_PROVIDER=openai.");
43
+ }
44
+ if (audioData.length > MAX_AUDIO_SIZE) {
45
+ throw new Error(`Audio file too large (${Math.round(audioData.length / 1024 / 1024)}MB). Whisper limit is 25MB. Try a shorter video.`);
46
+ }
47
+ const filename = options?.filename || "audio.webm";
48
+ // Build multipart form data manually (no FormData in Node < 18 without polyfill)
49
+ const boundary = `----WhisperBoundary${Date.now()}`;
50
+ const parts = [];
51
+ // Add model field
52
+ parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\n${WHISPER_MODEL}\r\n`));
53
+ // Add response_format for segments
54
+ parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="response_format"\r\n\r\nverbose_json\r\n`));
55
+ // Add language if specified
56
+ if (options?.language) {
57
+ parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="language"\r\n\r\n${options.language}\r\n`));
58
+ }
59
+ // Add audio file
60
+ parts.push(Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="${filename}"\r\nContent-Type: audio/webm\r\n\r\n`));
61
+ parts.push(Buffer.from(audioData));
62
+ parts.push(Buffer.from(`\r\n--${boundary}--\r\n`));
63
+ const body = Buffer.concat(parts);
64
+ const res = await fetch(WHISPER_API_URL, {
65
+ method: "POST",
66
+ headers: {
67
+ Authorization: `Bearer ${apiKey}`,
68
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
69
+ },
70
+ body,
71
+ });
72
+ if (!res.ok) {
73
+ const errorText = await res.text().catch(() => res.statusText);
74
+ throw new Error(`Whisper API error ${res.status}: ${errorText}`);
75
+ }
76
+ const data = await res.json();
77
+ return {
78
+ text: data.text,
79
+ segments: data.segments?.map((s) => ({
80
+ start: Math.round(s.start * 100) / 100,
81
+ end: Math.round(s.end * 100) / 100,
82
+ text: s.text.trim(),
83
+ })),
84
+ language: data.language,
85
+ duration: data.duration,
86
+ };
87
+ }
88
+ //# sourceMappingURL=whisper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.js","sourceRoot":"","sources":["../../src/social/whisper.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAElB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACzH;AAED,eAAO,MAAM,QAAQ,EAAE,cAAc,EA+BpC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4BxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAElB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACzH;AAED,eAAO,MAAM,QAAQ,EAAE,cAAc,EAkCpC,CAAC"}
@@ -21,6 +21,8 @@ import * as batchScrape from "./batch-scrape.js";
21
21
  import * as listJobs from "./list-jobs.js";
22
22
  import * as jobStatus from "./job-status.js";
23
23
  import * as deleteJob from "./delete-job.js";
24
+ import * as youtube from "./youtube.js";
25
+ import * as reddit from "./reddit.js";
24
26
  export const allTools = [
25
27
  // Scraping tools (no API key needed)
26
28
  scrape,
@@ -52,5 +54,8 @@ export const allTools = [
52
54
  listJobs,
53
55
  jobStatus,
54
56
  deleteJob,
57
+ // Social media tools (no API key needed)
58
+ youtube,
59
+ reddit,
55
60
  ];
56
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAU7C,MAAM,CAAC,MAAM,QAAQ,GAAqB;IACxC,qCAAqC;IACrC,MAAwB;IACxB,KAAuB;IACvB,GAAqB;IACrB,OAAyB;IACzB,WAA6B;IAC7B,UAA4B;IAC5B,sCAAsC;IACtC,MAAwB;IACxB,UAA4B;IAC5B,WAA6B;IAC7B,WAA6B;IAC7B,eAAe;IACf,WAA6B;IAC7B,QAA0B;IAC1B,UAA4B;IAC5B,sDAAsD;IACtD,YAA8B;IAC9B,QAA0B;IAC1B,gBAAkC;IAClC,oCAAoC;IACpC,SAA2B;IAC3B,kDAAkD;IAClD,QAA0B;IAC1B,QAA0B;IAC1B,mBAAmB;IACnB,WAA6B;IAC7B,QAA0B;IAC1B,SAA2B;IAC3B,SAA2B;CAC5B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAUtC,MAAM,CAAC,MAAM,QAAQ,GAAqB;IACxC,qCAAqC;IACrC,MAAwB;IACxB,KAAuB;IACvB,GAAqB;IACrB,OAAyB;IACzB,WAA6B;IAC7B,UAA4B;IAC5B,sCAAsC;IACtC,MAAwB;IACxB,UAA4B;IAC5B,WAA6B;IAC7B,WAA6B;IAC7B,eAAe;IACf,WAA6B;IAC7B,QAA0B;IAC1B,UAA4B;IAC5B,sDAAsD;IACtD,YAA8B;IAC9B,QAA0B;IAC1B,gBAAkC;IAClC,oCAAoC;IACpC,SAA2B;IAC3B,kDAAkD;IAClD,QAA0B;IAC1B,QAA0B;IAC1B,mBAAmB;IACnB,WAA6B;IAC7B,QAA0B;IAC1B,SAA2B;IAC3B,SAA2B;IAC3B,yCAAyC;IACzC,OAAyB;IACzB,MAAwB;CACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,EA+GxC,CAAC"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,EA0HxC,CAAC"}
@@ -106,5 +106,14 @@ export const TOOL_MANIFEST = [
106
106
  cmd: "delete-job",
107
107
  description: "Delete a batch scrape job and its stored results by job_id.",
108
108
  },
109
+ // Social media
110
+ {
111
+ cmd: "youtube",
112
+ description: "Search YouTube videos, get video details, comments, transcripts, and channel info. No API key needed.",
113
+ },
114
+ {
115
+ cmd: "reddit",
116
+ description: "Search Reddit, browse subreddits, get posts and comments. No API key needed.",
117
+ },
109
118
  ];
110
119
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,WAAW;IACX;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,sKAAsK;KACzK;IACD;QACE,GAAG,EAAE,OAAO;QACZ,WAAW,EACT,qKAAqK;KACxK;IACD;QACE,GAAG,EAAE,KAAK;QACV,WAAW,EACT,8GAA8G;KACjH;IACD;QACE,GAAG,EAAE,SAAS;QACd,WAAW,EACT,6JAA6J;KAChK;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EACT,+HAA+H;KAClI;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,iFAAiF;KACpF;IACD,SAAS;IACT;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,qFAAqF;KACxF;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD,SAAS;IACT;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,4IAA4I;KAC/I;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,yDAAyD;KACvE;IACD,gBAAgB;IAChB;QACE,GAAG,EAAE,eAAe;QACpB,WAAW,EACT,mKAAmK;KACtK;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,+GAA+G;KAClH;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EACT,4GAA4G;KAC/G;IACD,KAAK;IACL;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,oJAAoJ;KACvJ;IACD,cAAc;IACd;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EACT,6IAA6I;KAChJ;IACD,QAAQ;IACR;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,qGAAqG;KACxG;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,4DAA4D;KAC/D;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,wEAAwE;KACtF;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,6DAA6D;KAC3E;CACF,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,WAAW;IACX;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,sKAAsK;KACzK;IACD;QACE,GAAG,EAAE,OAAO;QACZ,WAAW,EACT,qKAAqK;KACxK;IACD;QACE,GAAG,EAAE,KAAK;QACV,WAAW,EACT,8GAA8G;KACjH;IACD;QACE,GAAG,EAAE,SAAS;QACd,WAAW,EACT,6JAA6J;KAChK;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EACT,+HAA+H;KAClI;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,iFAAiF;KACpF;IACD,SAAS;IACT;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,qFAAqF;KACxF;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD,SAAS;IACT;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,4IAA4I;KAC/I;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,yDAAyD;KACvE;IACD,gBAAgB;IAChB;QACE,GAAG,EAAE,eAAe;QACpB,WAAW,EACT,mKAAmK;KACtK;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,+GAA+G;KAClH;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EACT,4GAA4G;KAC/G;IACD,KAAK;IACL;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,oJAAoJ;KACvJ;IACD,cAAc;IACd;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EACT,6IAA6I;KAChJ;IACD,QAAQ;IACR;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,qGAAqG;KACxG;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,4DAA4D;KAC/D;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,wEAAwE;KACtF;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,6DAA6D;KAC3E;IACD,eAAe;IACf;QACE,GAAG,EAAE,SAAS;QACd,WAAW,EACT,uGAAuG;KAC1G;IACD;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,8EAA8E;KACjF;CACF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ export declare const name = "reddit";
3
+ export declare const description = "Search Reddit, browse subreddits, get posts and comments. No API key needed.";
4
+ export declare const schema: z.ZodObject<{
5
+ action: z.ZodEnum<["search", "posts", "comments", "subreddit"]>;
6
+ query: z.ZodOptional<z.ZodString>;
7
+ subreddit: z.ZodOptional<z.ZodString>;
8
+ post_url: z.ZodOptional<z.ZodString>;
9
+ sort: z.ZodDefault<z.ZodEnum<["hot", "new", "top", "rising"]>>;
10
+ time: z.ZodDefault<z.ZodEnum<["hour", "day", "week", "month", "year", "all"]>>;
11
+ limit: z.ZodDefault<z.ZodNumber>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ action: "search" | "posts" | "subreddit" | "comments";
14
+ time: "hour" | "day" | "week" | "month" | "year" | "all";
15
+ sort: "hot" | "new" | "top" | "rising";
16
+ limit: number;
17
+ query?: string | undefined;
18
+ subreddit?: string | undefined;
19
+ post_url?: string | undefined;
20
+ }, {
21
+ action: "search" | "posts" | "subreddit" | "comments";
22
+ time?: "hour" | "day" | "week" | "month" | "year" | "all" | undefined;
23
+ sort?: "hot" | "new" | "top" | "rising" | undefined;
24
+ query?: string | undefined;
25
+ subreddit?: string | undefined;
26
+ limit?: number | undefined;
27
+ post_url?: string | undefined;
28
+ }>;
29
+ export type RedditInput = z.infer<typeof schema>;
30
+ export declare function execute(input: RedditInput): Promise<{
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ }>;
36
+ //# sourceMappingURL=reddit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reddit.d.ts","sourceRoot":"","sources":["../../src/tools/reddit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,IAAI,WAAW,CAAC;AAE7B,eAAO,MAAM,WAAW,iFACwD,CAAC;AAIjF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;EAQjB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAqIjD,wBAAsB,OAAO,CAAC,KAAK,EAAE,WAAW;;;;;GA4C/C"}
@@ -0,0 +1,190 @@
1
+ import { z } from "zod";
2
+ import { smartFetch } from "../stealth/index.js";
3
+ import { MAX_QUERY_LENGTH, MAX_ITEMS } from "../constants.js";
4
+ import { sanitizeText } from "../social/parsers.js";
5
+ import { socialAiFallback } from "../social/ai-fallback.js";
6
+ export const name = "reddit";
7
+ export const description = "Search Reddit, browse subreddits, get posts and comments. No API key needed.";
8
+ const ActionEnum = z.enum(["search", "posts", "comments", "subreddit"]);
9
+ export const schema = z.object({
10
+ action: ActionEnum.describe("Action to perform"),
11
+ query: z.string().max(MAX_QUERY_LENGTH).optional().describe("Search query (for action: search)"),
12
+ subreddit: z.string().max(200).optional().describe("Subreddit name without r/ (for action: posts, subreddit)"),
13
+ post_url: z.string().max(8192).optional().describe("Full Reddit post URL (for action: comments)"),
14
+ sort: z.enum(["hot", "new", "top", "rising"]).default("hot").describe("Sort order"),
15
+ time: z.enum(["hour", "day", "week", "month", "year", "all"]).default("week").describe("Time filter (for sort: top)"),
16
+ limit: z.number().min(1).max(MAX_ITEMS).default(25).describe("Max results to return"),
17
+ });
18
+ // ── Reddit JSON API Helpers ──
19
+ const REDDIT_BASE = "https://www.reddit.com";
20
+ const OLD_REDDIT = "https://old.reddit.com"; // Server-rendered, better for AI fallback
21
+ async function redditJson(path) {
22
+ // Reddit public JSON: append .json to any URL
23
+ const separator = path.includes("?") ? "&" : "?";
24
+ const url = `${REDDIT_BASE}${path}${separator}raw_json=1`;
25
+ const result = await smartFetch(url, { maxLevel: 2 });
26
+ // Reddit returns JSON directly
27
+ try {
28
+ return JSON.parse(result.html);
29
+ }
30
+ catch {
31
+ throw new Error(`Failed to parse Reddit JSON from ${path}`);
32
+ }
33
+ }
34
+ function mapPost(post) {
35
+ const d = post?.data || post;
36
+ return {
37
+ id: d.id || d.name || "",
38
+ title: d.title || "",
39
+ url: d.permalink ? `${REDDIT_BASE}${d.permalink}` : "",
40
+ author: d.author || "[deleted]",
41
+ score: d.score ?? 0,
42
+ comments_count: d.num_comments ?? 0,
43
+ published: d.created_utc ? new Date(d.created_utc * 1000).toISOString() : undefined,
44
+ subreddit: d.subreddit || undefined,
45
+ text: d.selftext ? d.selftext.substring(0, 2000) : undefined,
46
+ thumbnail: d.thumbnail && d.thumbnail !== "self" && d.thumbnail !== "default" ? d.thumbnail : undefined,
47
+ is_video: d.is_video || false,
48
+ flair: d.link_flair_text || undefined,
49
+ };
50
+ }
51
+ function mapComment(comment, depth = 0) {
52
+ const d = comment?.data || comment;
53
+ return {
54
+ id: d.id || d.name || "",
55
+ author: d.author || "[deleted]",
56
+ text: sanitizeText(d.body_html || "") || d.body || "",
57
+ score: d.score ?? 0,
58
+ published: d.created_utc ? new Date(d.created_utc * 1000).toISOString() : undefined,
59
+ replies_count: d.replies?.data?.children?.length ?? 0,
60
+ };
61
+ }
62
+ // ── Actions ──
63
+ async function searchReddit(query, sort, time, limit) {
64
+ const encoded = encodeURIComponent(query);
65
+ try {
66
+ const data = await redditJson(`/search.json?q=${encoded}&sort=${sort}&t=${time}&limit=${limit}`);
67
+ const children = data?.data?.children || [];
68
+ const posts = children.map(mapPost).slice(0, limit);
69
+ return { query, platform: "reddit", results: posts, total: data?.data?.dist };
70
+ }
71
+ catch {
72
+ const fb = await socialAiFallback({ action: "reddit:search", url: `${OLD_REDDIT}/search?q=${encoded}&sort=${sort}&t=${time}` });
73
+ if (fb?.data?.results)
74
+ return { query, platform: "reddit", results: fb.data.results.slice(0, limit) };
75
+ throw new Error("Reddit search failed and AI fallback unavailable");
76
+ }
77
+ }
78
+ async function getPosts(subreddit, sort, time, limit) {
79
+ try {
80
+ const path = `/r/${subreddit}/${sort}.json?t=${time}&limit=${limit}`;
81
+ const data = await redditJson(path);
82
+ const children = data?.data?.children || [];
83
+ const posts = children.map(mapPost).slice(0, limit);
84
+ return { platform: "reddit", results: posts, total: data?.data?.dist };
85
+ }
86
+ catch {
87
+ const fb = await socialAiFallback({ action: "reddit:posts", url: `${OLD_REDDIT}/r/${subreddit}/${sort}?t=${time}` });
88
+ if (fb?.data?.results)
89
+ return { platform: "reddit", results: fb.data.results.slice(0, limit) };
90
+ throw new Error("Reddit posts fetch failed and AI fallback unavailable");
91
+ }
92
+ }
93
+ async function getComments(postUrl, limit) {
94
+ // Extract path from URL
95
+ let path;
96
+ try {
97
+ const url = new URL(postUrl.startsWith("http") ? postUrl : `https://reddit.com${postUrl}`);
98
+ path = url.pathname;
99
+ }
100
+ catch {
101
+ path = postUrl;
102
+ }
103
+ if (!path.endsWith("/"))
104
+ path += "/";
105
+ try {
106
+ const data = await redditJson(`${path}.json?limit=${limit}`);
107
+ const listings = Array.isArray(data) ? data : [data];
108
+ const postData = listings[0]?.data?.children?.[0];
109
+ const post = postData ? mapPost(postData) : { id: "", title: "", url: postUrl, author: "" };
110
+ const commentChildren = listings[1]?.data?.children || [];
111
+ const comments = commentChildren
112
+ .filter((c) => c.kind === "t1")
113
+ .map((c) => mapComment(c))
114
+ .slice(0, limit);
115
+ return { post, comments };
116
+ }
117
+ catch {
118
+ const fullUrl = `${OLD_REDDIT}${path}`;
119
+ const fb = await socialAiFallback({ action: "reddit:comments", url: fullUrl });
120
+ if (fb?.data)
121
+ return fb.data;
122
+ throw new Error("Reddit comments fetch failed and AI fallback unavailable");
123
+ }
124
+ }
125
+ async function getSubredditInfo(subreddit) {
126
+ try {
127
+ const data = await redditJson(`/r/${subreddit}/about.json`);
128
+ const d = data?.data;
129
+ if (!d)
130
+ return null;
131
+ return {
132
+ name: d.display_name || subreddit,
133
+ url: `${REDDIT_BASE}/r/${d.display_name || subreddit}`,
134
+ description: (d.public_description || d.description || "").substring(0, 1000),
135
+ subscribers: d.subscribers ?? undefined,
136
+ avatar: d.icon_img || d.community_icon?.split("?")?.[0] || undefined,
137
+ created: d.created_utc ? new Date(d.created_utc * 1000).toISOString() : undefined,
138
+ };
139
+ }
140
+ catch {
141
+ const fb = await socialAiFallback({ action: "reddit:subreddit", url: `${OLD_REDDIT}/r/${subreddit}` });
142
+ return fb?.data ?? null;
143
+ }
144
+ }
145
+ // ── Execute ──
146
+ export async function execute(input) {
147
+ try {
148
+ let result;
149
+ switch (input.action) {
150
+ case "search": {
151
+ if (!input.query) {
152
+ return { content: [{ type: "text", text: JSON.stringify({ error: "query is required for search action" }) }] };
153
+ }
154
+ result = await searchReddit(input.query, input.sort, input.time, input.limit);
155
+ break;
156
+ }
157
+ case "posts": {
158
+ if (!input.subreddit) {
159
+ return { content: [{ type: "text", text: JSON.stringify({ error: "subreddit is required for posts action" }) }] };
160
+ }
161
+ result = await getPosts(input.subreddit, input.sort, input.time, input.limit);
162
+ break;
163
+ }
164
+ case "comments": {
165
+ if (!input.post_url) {
166
+ return { content: [{ type: "text", text: JSON.stringify({ error: "post_url is required for comments action" }) }] };
167
+ }
168
+ result = await getComments(input.post_url, input.limit);
169
+ break;
170
+ }
171
+ case "subreddit": {
172
+ if (!input.subreddit) {
173
+ return { content: [{ type: "text", text: JSON.stringify({ error: "subreddit is required for subreddit action" }) }] };
174
+ }
175
+ const info = await getSubredditInfo(input.subreddit);
176
+ result = info || { error: "Could not fetch subreddit info" };
177
+ break;
178
+ }
179
+ }
180
+ return {
181
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
182
+ };
183
+ }
184
+ catch (err) {
185
+ return {
186
+ content: [{ type: "text", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
187
+ };
188
+ }
189
+ }
190
+ //# sourceMappingURL=reddit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reddit.js","sourceRoot":"","sources":["../../src/tools/reddit.ts"],"names":[],"mappings":"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"}
@@ -9,22 +9,40 @@ export declare const schema: z.ZodObject<{
9
9
  chrome_profile: z.ZodOptional<z.ZodString>;
10
10
  duration_seconds: z.ZodOptional<z.ZodNumber>;
11
11
  max_messages: z.ZodOptional<z.ZodNumber>;
12
+ niche: z.ZodOptional<z.ZodString>;
13
+ location: z.ZodOptional<z.ZodString>;
14
+ hashtags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
15
+ competitor: z.ZodOptional<z.ZodString>;
16
+ output_format: z.ZodOptional<z.ZodEnum<["json", "markdown", "csv"]>>;
17
+ threshold: z.ZodOptional<z.ZodNumber>;
12
18
  }, "strip", z.ZodTypeAny, {
13
19
  name: string;
14
20
  max_items: number;
15
21
  url?: string | undefined;
16
22
  proxy?: string | undefined;
17
23
  chrome_profile?: string | undefined;
24
+ output_format?: "json" | "csv" | "markdown" | undefined;
18
25
  duration_seconds?: number | undefined;
19
26
  max_messages?: number | undefined;
27
+ niche?: string | undefined;
28
+ location?: string | undefined;
29
+ hashtags?: string[] | undefined;
30
+ competitor?: string | undefined;
31
+ threshold?: number | undefined;
20
32
  }, {
21
33
  name: string;
22
34
  url?: string | undefined;
23
35
  proxy?: string | undefined;
24
36
  chrome_profile?: string | undefined;
37
+ output_format?: "json" | "csv" | "markdown" | undefined;
25
38
  max_items?: number | undefined;
26
39
  duration_seconds?: number | undefined;
27
40
  max_messages?: number | undefined;
41
+ niche?: string | undefined;
42
+ location?: string | undefined;
43
+ hashtags?: string[] | undefined;
44
+ competitor?: string | undefined;
45
+ threshold?: number | undefined;
28
46
  }>;
29
47
  export type RunSkillInput = z.infer<typeof schema>;
30
48
  export declare function execute(input: RunSkillInput): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"run-skill.d.ts","sourceRoot":"","sources":["../../src/tools/run-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,eAAO,MAAM,WAAW,wMAC+K,CAAC;AAExM,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;EAQjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AA0WnD,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa;;;;;GA+BjD"}
1
+ {"version":3,"file":"run-skill.d.ts","sourceRoot":"","sources":["../../src/tools/run-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,eAAO,MAAM,WAAW,wMAC+K,CAAC;AAExM,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAejB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAgmCnD,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa;;;;;GAiCjD"}