@steipete/summarize-core 0.10.0 → 0.11.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 (194) hide show
  1. package/README.md +0 -1
  2. package/dist/esm/content/index.js +5 -5
  3. package/dist/esm/content/index.js.map +1 -1
  4. package/dist/esm/content/link-preview/client.js +20 -9
  5. package/dist/esm/content/link-preview/client.js.map +1 -1
  6. package/dist/esm/content/link-preview/content/article.js +84 -83
  7. package/dist/esm/content/link-preview/content/article.js.map +1 -1
  8. package/dist/esm/content/link-preview/content/cleaner.js +23 -20
  9. package/dist/esm/content/link-preview/content/cleaner.js.map +1 -1
  10. package/dist/esm/content/link-preview/content/constants.js.map +1 -1
  11. package/dist/esm/content/link-preview/content/fetcher.js +46 -40
  12. package/dist/esm/content/link-preview/content/fetcher.js.map +1 -1
  13. package/dist/esm/content/link-preview/content/firecrawl.js +16 -16
  14. package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
  15. package/dist/esm/content/link-preview/content/html.js +29 -27
  16. package/dist/esm/content/link-preview/content/html.js.map +1 -1
  17. package/dist/esm/content/link-preview/content/index.js +141 -88
  18. package/dist/esm/content/link-preview/content/index.js.map +1 -1
  19. package/dist/esm/content/link-preview/content/jsonld.js +12 -12
  20. package/dist/esm/content/link-preview/content/jsonld.js.map +1 -1
  21. package/dist/esm/content/link-preview/content/parsers.js +20 -20
  22. package/dist/esm/content/link-preview/content/parsers.js.map +1 -1
  23. package/dist/esm/content/link-preview/content/podcast-utils.js +34 -34
  24. package/dist/esm/content/link-preview/content/podcast-utils.js.map +1 -1
  25. package/dist/esm/content/link-preview/content/readability.js +16 -15
  26. package/dist/esm/content/link-preview/content/readability.js.map +1 -1
  27. package/dist/esm/content/link-preview/content/twitter-utils.js +24 -11
  28. package/dist/esm/content/link-preview/content/twitter-utils.js.map +1 -1
  29. package/dist/esm/content/link-preview/content/types.js +1 -1
  30. package/dist/esm/content/link-preview/content/types.js.map +1 -1
  31. package/dist/esm/content/link-preview/content/utils.js +17 -17
  32. package/dist/esm/content/link-preview/content/utils.js.map +1 -1
  33. package/dist/esm/content/link-preview/content/video.js +19 -19
  34. package/dist/esm/content/link-preview/content/video.js.map +1 -1
  35. package/dist/esm/content/link-preview/content/visibility.js +121 -0
  36. package/dist/esm/content/link-preview/content/visibility.js.map +1 -0
  37. package/dist/esm/content/link-preview/content/youtube.js +10 -10
  38. package/dist/esm/content/link-preview/content/youtube.js.map +1 -1
  39. package/dist/esm/content/link-preview/deps.js +16 -16
  40. package/dist/esm/content/link-preview/deps.js.map +1 -1
  41. package/dist/esm/content/link-preview/fetch-with-timeout.js +4 -4
  42. package/dist/esm/content/link-preview/fetch-with-timeout.js.map +1 -1
  43. package/dist/esm/content/link-preview/types.js +1 -1
  44. package/dist/esm/content/link-preview/types.js.map +1 -1
  45. package/dist/esm/content/transcript/cache.js +22 -22
  46. package/dist/esm/content/transcript/cache.js.map +1 -1
  47. package/dist/esm/content/transcript/index.js +34 -24
  48. package/dist/esm/content/transcript/index.js.map +1 -1
  49. package/dist/esm/content/transcript/normalize.js +10 -10
  50. package/dist/esm/content/transcript/normalize.js.map +1 -1
  51. package/dist/esm/content/transcript/parse.js +31 -31
  52. package/dist/esm/content/transcript/parse.js.map +1 -1
  53. package/dist/esm/content/transcript/providers/generic.js +74 -78
  54. package/dist/esm/content/transcript/providers/generic.js.map +1 -1
  55. package/dist/esm/content/transcript/providers/podcast/apple-flow.js +36 -36
  56. package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
  57. package/dist/esm/content/transcript/providers/podcast/apple.js +5 -5
  58. package/dist/esm/content/transcript/providers/podcast/apple.js.map +1 -1
  59. package/dist/esm/content/transcript/providers/podcast/constants.js +2 -2
  60. package/dist/esm/content/transcript/providers/podcast/constants.js.map +1 -1
  61. package/dist/esm/content/transcript/providers/podcast/itunes.js +44 -42
  62. package/dist/esm/content/transcript/providers/podcast/itunes.js.map +1 -1
  63. package/dist/esm/content/transcript/providers/podcast/json.js +4 -4
  64. package/dist/esm/content/transcript/providers/podcast/json.js.map +1 -1
  65. package/dist/esm/content/transcript/providers/podcast/media.js +58 -49
  66. package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
  67. package/dist/esm/content/transcript/providers/podcast/results.js +2 -2
  68. package/dist/esm/content/transcript/providers/podcast/results.js.map +1 -1
  69. package/dist/esm/content/transcript/providers/podcast/rss.js +29 -29
  70. package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
  71. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js +38 -38
  72. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
  73. package/dist/esm/content/transcript/providers/podcast/spotify.js +32 -32
  74. package/dist/esm/content/transcript/providers/podcast/spotify.js.map +1 -1
  75. package/dist/esm/content/transcript/providers/podcast.js +43 -47
  76. package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
  77. package/dist/esm/content/transcript/providers/transcription-start.js +59 -31
  78. package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -1
  79. package/dist/esm/content/transcript/providers/youtube/api.js +56 -56
  80. package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
  81. package/dist/esm/content/transcript/providers/youtube/apify.js +7 -7
  82. package/dist/esm/content/transcript/providers/youtube/apify.js.map +1 -1
  83. package/dist/esm/content/transcript/providers/youtube/captions.js +76 -76
  84. package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
  85. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +82 -75
  86. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
  87. package/dist/esm/content/transcript/providers/youtube.js +84 -77
  88. package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
  89. package/dist/esm/content/transcript/timestamps.js +8 -8
  90. package/dist/esm/content/transcript/timestamps.js.map +1 -1
  91. package/dist/esm/content/transcript/transcription-config.js +14 -0
  92. package/dist/esm/content/transcript/transcription-config.js.map +1 -0
  93. package/dist/esm/content/transcript/utils.js +35 -35
  94. package/dist/esm/content/transcript/utils.js.map +1 -1
  95. package/dist/esm/content/url.js +59 -28
  96. package/dist/esm/content/url.js.map +1 -1
  97. package/dist/esm/index.js +4 -3
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/language.js +77 -77
  100. package/dist/esm/language.js.map +1 -1
  101. package/dist/esm/openai/base-url.js +35 -0
  102. package/dist/esm/openai/base-url.js.map +1 -0
  103. package/dist/esm/processes.js +16 -16
  104. package/dist/esm/processes.js.map +1 -1
  105. package/dist/esm/prompts/cli.js +17 -17
  106. package/dist/esm/prompts/cli.js.map +1 -1
  107. package/dist/esm/prompts/file.js +54 -54
  108. package/dist/esm/prompts/file.js.map +1 -1
  109. package/dist/esm/prompts/format.js +2 -2
  110. package/dist/esm/prompts/format.js.map +1 -1
  111. package/dist/esm/prompts/index.js +5 -5
  112. package/dist/esm/prompts/index.js.map +1 -1
  113. package/dist/esm/prompts/link-summary.js +65 -65
  114. package/dist/esm/prompts/link-summary.js.map +1 -1
  115. package/dist/esm/prompts/summary-lengths.js +10 -10
  116. package/dist/esm/prompts/summary-lengths.js.map +1 -1
  117. package/dist/esm/prompts/summary-system.js +9 -9
  118. package/dist/esm/prompts/summary-system.js.map +1 -1
  119. package/dist/esm/shared/contracts.js +1 -1
  120. package/dist/esm/shared/contracts.js.map +1 -1
  121. package/dist/esm/transcription/onnx-cli.js +69 -69
  122. package/dist/esm/transcription/onnx-cli.js.map +1 -1
  123. package/dist/esm/transcription/whisper/constants.js +3 -3
  124. package/dist/esm/transcription/whisper/constants.js.map +1 -1
  125. package/dist/esm/transcription/whisper/core.js +148 -59
  126. package/dist/esm/transcription/whisper/core.js.map +1 -1
  127. package/dist/esm/transcription/whisper/fal.js +14 -14
  128. package/dist/esm/transcription/whisper/fal.js.map +1 -1
  129. package/dist/esm/transcription/whisper/ffmpeg.js +106 -106
  130. package/dist/esm/transcription/whisper/ffmpeg.js.map +1 -1
  131. package/dist/esm/transcription/whisper/groq.js +46 -0
  132. package/dist/esm/transcription/whisper/groq.js.map +1 -0
  133. package/dist/esm/transcription/whisper/openai.js +19 -13
  134. package/dist/esm/transcription/whisper/openai.js.map +1 -1
  135. package/dist/esm/transcription/whisper/utils.js +19 -19
  136. package/dist/esm/transcription/whisper/utils.js.map +1 -1
  137. package/dist/esm/transcription/whisper/whisper-cpp.js +64 -64
  138. package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
  139. package/dist/esm/transcription/whisper.js +4 -4
  140. package/dist/esm/transcription/whisper.js.map +1 -1
  141. package/dist/types/content/cache/types.d.ts +1 -1
  142. package/dist/types/content/index.d.ts +7 -7
  143. package/dist/types/content/link-preview/client.d.ts +7 -4
  144. package/dist/types/content/link-preview/content/cleaner.d.ts +1 -0
  145. package/dist/types/content/link-preview/content/fetcher.d.ts +2 -2
  146. package/dist/types/content/link-preview/content/firecrawl.d.ts +7 -7
  147. package/dist/types/content/link-preview/content/html.d.ts +8 -8
  148. package/dist/types/content/link-preview/content/index.d.ts +3 -3
  149. package/dist/types/content/link-preview/content/twitter-utils.d.ts +1 -0
  150. package/dist/types/content/link-preview/content/types.d.ts +8 -8
  151. package/dist/types/content/link-preview/content/utils.d.ts +3 -3
  152. package/dist/types/content/link-preview/content/video.d.ts +1 -1
  153. package/dist/types/content/link-preview/content/visibility.d.ts +1 -0
  154. package/dist/types/content/link-preview/deps.d.ts +36 -33
  155. package/dist/types/content/link-preview/types.d.ts +4 -4
  156. package/dist/types/content/transcript/cache.d.ts +4 -4
  157. package/dist/types/content/transcript/index.d.ts +7 -7
  158. package/dist/types/content/transcript/parse.d.ts +1 -1
  159. package/dist/types/content/transcript/providers/generic.d.ts +1 -1
  160. package/dist/types/content/transcript/providers/podcast/apple-flow.d.ts +2 -2
  161. package/dist/types/content/transcript/providers/podcast/flow-context.d.ts +4 -4
  162. package/dist/types/content/transcript/providers/podcast/media.d.ts +9 -6
  163. package/dist/types/content/transcript/providers/podcast/results.d.ts +3 -3
  164. package/dist/types/content/transcript/providers/podcast/rss.d.ts +1 -1
  165. package/dist/types/content/transcript/providers/podcast/spotify-flow.d.ts +2 -2
  166. package/dist/types/content/transcript/providers/podcast/spotify.d.ts +2 -2
  167. package/dist/types/content/transcript/providers/podcast.d.ts +5 -5
  168. package/dist/types/content/transcript/providers/transcription-start.d.ts +14 -8
  169. package/dist/types/content/transcript/providers/youtube/api.d.ts +1 -1
  170. package/dist/types/content/transcript/providers/youtube/captions.d.ts +1 -1
  171. package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +11 -8
  172. package/dist/types/content/transcript/providers/youtube.d.ts +1 -1
  173. package/dist/types/content/transcript/timestamps.d.ts +1 -1
  174. package/dist/types/content/transcript/transcription-config.d.ts +15 -0
  175. package/dist/types/content/transcript/types.d.ts +12 -9
  176. package/dist/types/content/transcript/utils.d.ts +1 -1
  177. package/dist/types/content/url.d.ts +5 -3
  178. package/dist/types/index.d.ts +5 -4
  179. package/dist/types/language.d.ts +4 -4
  180. package/dist/types/openai/base-url.d.ts +14 -0
  181. package/dist/types/processes.d.ts +2 -2
  182. package/dist/types/prompts/cli.d.ts +3 -3
  183. package/dist/types/prompts/file.d.ts +2 -2
  184. package/dist/types/prompts/index.d.ts +6 -6
  185. package/dist/types/prompts/link-summary.d.ts +3 -3
  186. package/dist/types/prompts/summary-lengths.d.ts +1 -1
  187. package/dist/types/transcription/onnx-cli.d.ts +3 -3
  188. package/dist/types/transcription/whisper/core.d.ts +6 -3
  189. package/dist/types/transcription/whisper/groq.d.ts +2 -0
  190. package/dist/types/transcription/whisper/openai.d.ts +6 -1
  191. package/dist/types/transcription/whisper/types.d.ts +1 -1
  192. package/dist/types/transcription/whisper/whisper-cpp.d.ts +1 -1
  193. package/dist/types/transcription/whisper.d.ts +5 -5
  194. package/package.json +13 -13
@@ -1,21 +1,22 @@
1
- import { resolveTranscriptForLink } from '../../transcript/index.js';
2
- import { isDirectMediaUrl, isYouTubeUrl } from '../../url.js';
3
- import { normalizeForPrompt } from './cleaner.js';
4
- import { MIN_READABILITY_CONTENT_CHARACTERS } from './constants.js';
5
- import { fetchHtmlDocument, fetchWithFirecrawl } from './fetcher.js';
6
- import { buildResultFromFirecrawl, shouldFallbackToFirecrawl } from './firecrawl.js';
7
- import { buildResultFromHtmlDocument } from './html.js';
8
- import { extractApplePodcastIds, extractSpotifyEpisodeId } from './podcast-utils.js';
9
- import { extractReadabilityFromHtml } from './readability.js';
10
- import { isAnubisHtml, isBlockedTwitterContent, isTwitterStatusUrl, toNitterUrls, } from './twitter-utils.js';
11
- import { appendNote, ensureTranscriptDiagnostics, finalizeExtractedLinkContent, resolveCacheMode, resolveFirecrawlMode, resolveMaxCharacters, resolveTimeoutMs, selectBaseContent, } from './utils.js';
1
+ import { resolveTranscriptForLink } from "../../transcript/index.js";
2
+ import { resolveTranscriptionConfig } from "../../transcript/transcription-config.js";
3
+ import { isDirectMediaUrl, isYouTubeUrl } from "../../url.js";
4
+ import { normalizeForPrompt } from "./cleaner.js";
5
+ import { MIN_READABILITY_CONTENT_CHARACTERS } from "./constants.js";
6
+ import { fetchHtmlDocument, fetchWithFirecrawl } from "./fetcher.js";
7
+ import { buildResultFromFirecrawl, shouldFallbackToFirecrawl } from "./firecrawl.js";
8
+ import { buildResultFromHtmlDocument } from "./html.js";
9
+ import { extractApplePodcastIds, extractSpotifyEpisodeId } from "./podcast-utils.js";
10
+ import { extractReadabilityFromHtml } from "./readability.js";
11
+ import { isAnubisHtml, isBlockedTwitterContent, isTwitterBroadcastUrl, isTwitterStatusUrl, toNitterUrls, } from "./twitter-utils.js";
12
+ import { appendNote, ensureTranscriptDiagnostics, finalizeExtractedLinkContent, resolveCacheMode, resolveFirecrawlMode, resolveMaxCharacters, resolveTimeoutMs, selectBaseContent, } from "./utils.js";
12
13
  const MAX_TWITTER_TEXT_FOR_TRANSCRIPT = 500;
13
14
  const buildSkippedTwitterTranscript = (cacheMode, notes) => ({
14
15
  text: null,
15
16
  source: null,
16
17
  diagnostics: {
17
18
  cacheMode,
18
- cacheStatus: cacheMode === 'bypass' ? 'bypassed' : 'unknown',
19
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
19
20
  textProvided: false,
20
21
  provider: null,
21
22
  attemptedProviders: [],
@@ -23,21 +24,28 @@ const buildSkippedTwitterTranscript = (cacheMode, notes) => ({
23
24
  },
24
25
  });
25
26
  export async function fetchLinkContent(url, options, deps) {
27
+ const transcription = resolveTranscriptionConfig({
28
+ env: deps.env,
29
+ transcription: deps.transcription ?? null,
30
+ falApiKey: deps.falApiKey,
31
+ groqApiKey: deps.groqApiKey,
32
+ openaiApiKey: deps.openaiApiKey,
33
+ });
26
34
  const timeoutMs = resolveTimeoutMs(options);
27
35
  const cacheMode = resolveCacheMode(options);
28
36
  const maxCharacters = resolveMaxCharacters(options);
29
- const youtubeTranscriptMode = options?.youtubeTranscript ?? 'auto';
30
- const mediaTranscriptMode = options?.mediaTranscript ?? 'auto';
37
+ const youtubeTranscriptMode = options?.youtubeTranscript ?? "auto";
38
+ const mediaTranscriptMode = options?.mediaTranscript ?? "auto";
31
39
  const transcriptTimestamps = options?.transcriptTimestamps ?? false;
32
40
  const firecrawlMode = resolveFirecrawlMode(options);
33
- const markdownRequested = (options?.format ?? 'text') === 'markdown';
34
- const markdownMode = options?.markdownMode ?? 'auto';
41
+ const markdownRequested = (options?.format ?? "text") === "markdown";
42
+ const markdownMode = options?.markdownMode ?? "auto";
35
43
  const fileMtime = options?.fileMtime ?? null;
36
- const canUseFirecrawl = firecrawlMode !== 'off' && deps.scrapeWithFirecrawl !== null && !isYouTubeUrl(url);
44
+ const canUseFirecrawl = firecrawlMode !== "off" && deps.scrapeWithFirecrawl !== null && !isYouTubeUrl(url);
37
45
  const spotifyEpisodeId = extractSpotifyEpisodeId(url);
38
46
  if (spotifyEpisodeId) {
39
- if (!deps.openaiApiKey && !deps.falApiKey) {
40
- throw new Error('Spotify episode transcription requires OPENAI_API_KEY or FAL_KEY (Whisper); otherwise you may only get a captcha/recaptcha HTML page.');
47
+ if (!transcription.openaiApiKey && !transcription.falApiKey) {
48
+ throw new Error("Spotify episode transcription requires OPENAI_API_KEY or FAL_KEY (Whisper); otherwise you may only get a captcha/recaptcha HTML page.");
41
49
  }
42
50
  const transcriptResolution = await resolveTranscriptForLink(url, null, deps, {
43
51
  youtubeTranscriptMode,
@@ -48,35 +56,35 @@ export async function fetchLinkContent(url, options, deps) {
48
56
  });
49
57
  if (!transcriptResolution.text) {
50
58
  const notes = transcriptResolution.diagnostics?.notes;
51
- const suffix = notes ? ` (${notes})` : '';
59
+ const suffix = notes ? ` (${notes})` : "";
52
60
  throw new Error(`Failed to transcribe Spotify episode${suffix}`);
53
61
  }
54
- const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? 'default');
55
- transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, 'Spotify episode: skipped HTML fetch to avoid captcha pages');
62
+ const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? "default");
63
+ transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, "Spotify episode: skipped HTML fetch to avoid captcha pages");
56
64
  return finalizeExtractedLinkContent({
57
65
  url,
58
- baseContent: selectBaseContent('', transcriptResolution.text, transcriptResolution.segments),
66
+ baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
59
67
  maxCharacters,
60
68
  title: null,
61
69
  description: null,
62
- siteName: 'Spotify',
70
+ siteName: "Spotify",
63
71
  transcriptResolution,
64
72
  video: null,
65
73
  isVideoOnly: false,
66
74
  diagnostics: {
67
- strategy: 'html',
75
+ strategy: "html",
68
76
  firecrawl: {
69
77
  attempted: false,
70
78
  used: false,
71
79
  cacheMode,
72
- cacheStatus: cacheMode === 'bypass' ? 'bypassed' : 'unknown',
73
- notes: 'Spotify short-circuit skipped HTML/Firecrawl',
80
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
81
+ notes: "Spotify short-circuit skipped HTML/Firecrawl",
74
82
  },
75
83
  markdown: {
76
84
  requested: markdownRequested,
77
85
  used: false,
78
86
  provider: null,
79
- notes: 'Spotify short-circuit uses transcript content',
87
+ notes: "Spotify short-circuit uses transcript content",
80
88
  },
81
89
  transcript: transcriptDiagnostics,
82
90
  },
@@ -84,8 +92,8 @@ export async function fetchLinkContent(url, options, deps) {
84
92
  }
85
93
  const appleIds = extractApplePodcastIds(url);
86
94
  if (appleIds) {
87
- if (!deps.openaiApiKey && !deps.falApiKey) {
88
- throw new Error('Apple Podcasts transcription requires OPENAI_API_KEY or FAL_KEY (Whisper); otherwise you may only get a slow/blocked HTML page.');
95
+ if (!transcription.openaiApiKey && !transcription.falApiKey) {
96
+ throw new Error("Apple Podcasts transcription requires OPENAI_API_KEY or FAL_KEY (Whisper); otherwise you may only get a slow/blocked HTML page.");
89
97
  }
90
98
  const transcriptResolution = await resolveTranscriptForLink(url, null, deps, {
91
99
  youtubeTranscriptMode,
@@ -96,41 +104,86 @@ export async function fetchLinkContent(url, options, deps) {
96
104
  });
97
105
  if (!transcriptResolution.text) {
98
106
  const notes = transcriptResolution.diagnostics?.notes;
99
- const suffix = notes ? ` (${notes})` : '';
107
+ const suffix = notes ? ` (${notes})` : "";
100
108
  throw new Error(`Failed to transcribe Apple Podcasts episode${suffix}`);
101
109
  }
102
- const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? 'default');
103
- transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, 'Apple Podcasts: skipped HTML fetch (prefer iTunes lookup / enclosures)');
110
+ const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? "default");
111
+ transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, "Apple Podcasts: skipped HTML fetch (prefer iTunes lookup / enclosures)");
104
112
  return finalizeExtractedLinkContent({
105
113
  url,
106
- baseContent: selectBaseContent('', transcriptResolution.text, transcriptResolution.segments),
114
+ baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
107
115
  maxCharacters,
108
116
  title: null,
109
117
  description: null,
110
- siteName: 'Apple Podcasts',
118
+ siteName: "Apple Podcasts",
111
119
  transcriptResolution,
112
120
  video: null,
113
121
  isVideoOnly: false,
114
122
  diagnostics: {
115
- strategy: 'html',
123
+ strategy: "html",
124
+ firecrawl: {
125
+ attempted: false,
126
+ used: false,
127
+ cacheMode,
128
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
129
+ notes: "Apple Podcasts short-circuit skipped HTML/Firecrawl",
130
+ },
131
+ markdown: {
132
+ requested: markdownRequested,
133
+ used: false,
134
+ provider: null,
135
+ notes: "Apple Podcasts short-circuit uses transcript content",
136
+ },
137
+ transcript: transcriptDiagnostics,
138
+ },
139
+ });
140
+ }
141
+ if (isTwitterBroadcastUrl(url)) {
142
+ const broadcastTranscriptMode = mediaTranscriptMode === "auto" ? "prefer" : mediaTranscriptMode;
143
+ const transcriptResolution = await resolveTranscriptForLink(url, null, deps, {
144
+ youtubeTranscriptMode,
145
+ mediaTranscriptMode: broadcastTranscriptMode,
146
+ transcriptTimestamps,
147
+ cacheMode,
148
+ fileMtime,
149
+ });
150
+ if (!transcriptResolution.text) {
151
+ const notes = transcriptResolution.diagnostics?.notes;
152
+ const suffix = notes ? ` (${notes})` : "";
153
+ throw new Error(`Failed to transcribe X broadcast${suffix}`);
154
+ }
155
+ const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? "default");
156
+ transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, "X broadcast: skipped HTML/Firecrawl");
157
+ return finalizeExtractedLinkContent({
158
+ url,
159
+ baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
160
+ maxCharacters,
161
+ title: null,
162
+ description: null,
163
+ siteName: "X",
164
+ transcriptResolution,
165
+ video: { kind: "direct", url },
166
+ isVideoOnly: true,
167
+ diagnostics: {
168
+ strategy: "html",
116
169
  firecrawl: {
117
170
  attempted: false,
118
171
  used: false,
119
172
  cacheMode,
120
- cacheStatus: cacheMode === 'bypass' ? 'bypassed' : 'unknown',
121
- notes: 'Apple Podcasts short-circuit skipped HTML/Firecrawl',
173
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
174
+ notes: "X broadcast short-circuit skipped HTML/Firecrawl",
122
175
  },
123
176
  markdown: {
124
177
  requested: markdownRequested,
125
178
  used: false,
126
179
  provider: null,
127
- notes: 'Apple Podcasts short-circuit uses transcript content',
180
+ notes: "X broadcast uses transcript content",
128
181
  },
129
182
  transcript: transcriptDiagnostics,
130
183
  },
131
184
  });
132
185
  }
133
- if (isDirectMediaUrl(url) && mediaTranscriptMode === 'prefer') {
186
+ if (isDirectMediaUrl(url) && mediaTranscriptMode === "prefer") {
134
187
  const transcriptResolution = await resolveTranscriptForLink(url, null, deps, {
135
188
  youtubeTranscriptMode,
136
189
  mediaTranscriptMode,
@@ -140,35 +193,35 @@ export async function fetchLinkContent(url, options, deps) {
140
193
  });
141
194
  if (!transcriptResolution.text) {
142
195
  const notes = transcriptResolution.diagnostics?.notes;
143
- const suffix = notes ? ` (${notes})` : '';
196
+ const suffix = notes ? ` (${notes})` : "";
144
197
  throw new Error(`Failed to transcribe media${suffix}`);
145
198
  }
146
- const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? 'default');
147
- transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, 'Direct media URL: skipped HTML/Firecrawl');
199
+ const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? "default");
200
+ transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes, "Direct media URL: skipped HTML/Firecrawl");
148
201
  return finalizeExtractedLinkContent({
149
202
  url,
150
- baseContent: selectBaseContent('', transcriptResolution.text, transcriptResolution.segments),
203
+ baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
151
204
  maxCharacters,
152
205
  title: null,
153
206
  description: null,
154
207
  siteName: null,
155
208
  transcriptResolution,
156
- video: { kind: 'direct', url },
209
+ video: { kind: "direct", url },
157
210
  isVideoOnly: true,
158
211
  diagnostics: {
159
- strategy: 'html',
212
+ strategy: "html",
160
213
  firecrawl: {
161
214
  attempted: false,
162
215
  used: false,
163
216
  cacheMode,
164
- cacheStatus: cacheMode === 'bypass' ? 'bypassed' : 'unknown',
165
- notes: 'Direct media URL skipped HTML/Firecrawl',
217
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
218
+ notes: "Direct media URL skipped HTML/Firecrawl",
166
219
  },
167
220
  markdown: {
168
221
  requested: markdownRequested,
169
222
  used: false,
170
223
  provider: null,
171
- notes: 'Direct media URL uses transcript content',
224
+ notes: "Direct media URL uses transcript content",
172
225
  },
173
226
  transcript: transcriptDiagnostics,
174
227
  },
@@ -180,7 +233,7 @@ export async function fetchLinkContent(url, options, deps) {
180
233
  attempted: false,
181
234
  used: false,
182
235
  cacheMode,
183
- cacheStatus: cacheMode === 'bypass' ? 'bypassed' : 'unknown',
236
+ cacheStatus: cacheMode === "bypass" ? "bypassed" : "unknown",
184
237
  notes: null,
185
238
  };
186
239
  const twitterStatus = isTwitterStatusUrl(url);
@@ -225,36 +278,36 @@ export async function fetchLinkContent(url, options, deps) {
225
278
  if (firecrawlResult) {
226
279
  return firecrawlResult;
227
280
  }
228
- firecrawlDiagnostics.notes = appendNote(firecrawlDiagnostics.notes, 'Firecrawl returned empty content');
281
+ firecrawlDiagnostics.notes = appendNote(firecrawlDiagnostics.notes, "Firecrawl returned empty content");
229
282
  return null;
230
283
  };
231
284
  const attemptBird = async () => {
232
285
  if (!deps.readTweetWithBird || !twitterStatus) {
233
286
  return null;
234
287
  }
235
- deps.onProgress?.({ kind: 'bird-start', url });
288
+ deps.onProgress?.({ kind: "bird-start", url });
236
289
  try {
237
290
  const tweet = await deps.readTweetWithBird({ url, timeoutMs });
238
- const text = tweet?.text?.trim() ?? '';
291
+ const text = tweet?.text?.trim() ?? "";
239
292
  if (text.length === 0) {
240
- deps.onProgress?.({ kind: 'bird-done', url, ok: false, textBytes: null });
293
+ deps.onProgress?.({ kind: "bird-done", url, ok: false, textBytes: null });
241
294
  return null;
242
295
  }
243
296
  const title = tweet?.author?.username ? `@${tweet.author.username}` : null;
244
297
  const description = null;
245
- const siteName = 'X';
298
+ const siteName = "X";
246
299
  const media = tweet?.media ?? null;
247
300
  const mediaUrl = media?.preferredUrl ?? media?.urls?.[0] ?? null;
248
301
  const hasMedia = Boolean(mediaUrl);
249
- const shouldAttemptTranscript = mediaTranscriptMode === 'prefer' || (mediaTranscriptMode === 'auto' && hasMedia);
302
+ const shouldAttemptTranscript = mediaTranscriptMode === "prefer" || (mediaTranscriptMode === "auto" && hasMedia);
250
303
  const autoModeNote = !shouldAttemptTranscript
251
- ? 'Skipped tweet transcript (media transcript mode is auto; enable --video-mode transcript to force audio).'
304
+ ? "Skipped tweet transcript (media transcript mode is auto; enable --video-mode transcript to force audio)."
252
305
  : null;
253
306
  const longFormNote = !hasMedia && text.length >= MAX_TWITTER_TEXT_FOR_TRANSCRIPT
254
307
  ? `Skipped yt-dlp transcript for long-form tweet text (${text.length} chars)`
255
308
  : null;
256
- const skipTranscriptReason = [autoModeNote, longFormNote].filter(Boolean).join(' ') || null;
257
- const mediaTranscriptModeForTweet = shouldAttemptTranscript ? 'prefer' : mediaTranscriptMode;
309
+ const skipTranscriptReason = [autoModeNote, longFormNote].filter(Boolean).join(" ") || null;
310
+ const mediaTranscriptModeForTweet = shouldAttemptTranscript ? "prefer" : mediaTranscriptMode;
258
311
  const transcriptResolution = skipTranscriptReason
259
312
  ? buildSkippedTwitterTranscript(cacheMode, skipTranscriptReason)
260
313
  : await resolveTranscriptForLink(url, null, deps, {
@@ -265,7 +318,7 @@ export async function fetchLinkContent(url, options, deps) {
265
318
  cacheMode,
266
319
  fileMtime,
267
320
  });
268
- const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? 'default');
321
+ const transcriptDiagnostics = ensureTranscriptDiagnostics(transcriptResolution, cacheMode ?? "default");
269
322
  const result = finalizeExtractedLinkContent({
270
323
  url,
271
324
  baseContent: selectBaseContent(text, transcriptResolution.text, transcriptResolution.segments),
@@ -274,36 +327,36 @@ export async function fetchLinkContent(url, options, deps) {
274
327
  description,
275
328
  siteName,
276
329
  transcriptResolution,
277
- video: mediaUrl && media?.kind === 'video'
330
+ video: mediaUrl && media?.kind === "video"
278
331
  ? {
279
- kind: 'direct',
332
+ kind: "direct",
280
333
  url: mediaUrl,
281
334
  }
282
335
  : null,
283
336
  isVideoOnly: false,
284
337
  diagnostics: {
285
- strategy: 'bird',
338
+ strategy: "bird",
286
339
  firecrawl: firecrawlDiagnostics,
287
340
  markdown: {
288
341
  requested: markdownRequested,
289
342
  used: false,
290
343
  provider: null,
291
- notes: 'Bird tweet fetch provides plain text',
344
+ notes: "Bird tweet fetch provides plain text",
292
345
  },
293
346
  transcript: transcriptDiagnostics,
294
347
  },
295
348
  });
296
349
  deps.onProgress?.({
297
- kind: 'bird-done',
350
+ kind: "bird-done",
298
351
  url,
299
352
  ok: true,
300
- textBytes: Buffer.byteLength(result.content, 'utf8'),
353
+ textBytes: Buffer.byteLength(result.content, "utf8"),
301
354
  });
302
355
  return result;
303
356
  }
304
357
  catch (error) {
305
358
  birdError = error;
306
- deps.onProgress?.({ kind: 'bird-done', url, ok: false, textBytes: null });
359
+ deps.onProgress?.({ kind: "bird-done", url, ok: false, textBytes: null });
307
360
  return null;
308
361
  }
309
362
  };
@@ -316,31 +369,31 @@ export async function fetchLinkContent(url, options, deps) {
316
369
  return null;
317
370
  }
318
371
  for (const nitterUrl of nitterUrls) {
319
- deps.onProgress?.({ kind: 'nitter-start', url: nitterUrl });
372
+ deps.onProgress?.({ kind: "nitter-start", url: nitterUrl });
320
373
  try {
321
374
  const nitterResult = await fetchHtmlDocument(deps.fetch, nitterUrl, { timeoutMs });
322
375
  const nitterHtml = nitterResult.html;
323
376
  if (!nitterHtml.trim()) {
324
377
  nitterError = new Error(`Nitter returned empty body from ${new URL(nitterUrl).host}`);
325
- deps.onProgress?.({ kind: 'nitter-done', url: nitterUrl, ok: false, textBytes: null });
378
+ deps.onProgress?.({ kind: "nitter-done", url: nitterUrl, ok: false, textBytes: null });
326
379
  continue;
327
380
  }
328
381
  if (isAnubisHtml(nitterHtml)) {
329
382
  nitterError = new Error(`Nitter returned Anubis challenge from ${new URL(nitterUrl).host}`);
330
- deps.onProgress?.({ kind: 'nitter-done', url: nitterUrl, ok: false, textBytes: null });
383
+ deps.onProgress?.({ kind: "nitter-done", url: nitterUrl, ok: false, textBytes: null });
331
384
  continue;
332
385
  }
333
386
  deps.onProgress?.({
334
- kind: 'nitter-done',
387
+ kind: "nitter-done",
335
388
  url: nitterUrl,
336
389
  ok: true,
337
- textBytes: Buffer.byteLength(nitterHtml, 'utf8'),
390
+ textBytes: Buffer.byteLength(nitterHtml, "utf8"),
338
391
  });
339
392
  return nitterHtml;
340
393
  }
341
394
  catch (error) {
342
395
  nitterError = error;
343
- deps.onProgress?.({ kind: 'nitter-done', url: nitterUrl, ok: false, textBytes: null });
396
+ deps.onProgress?.({ kind: "nitter-done", url: nitterUrl, ok: false, textBytes: null });
344
397
  }
345
398
  }
346
399
  return null;
@@ -363,13 +416,13 @@ export async function fetchLinkContent(url, options, deps) {
363
416
  readabilityCandidate: null,
364
417
  });
365
418
  if (!isBlockedTwitterContent(nitterResult.content)) {
366
- nitterResult.diagnostics.strategy = 'nitter';
419
+ nitterResult.diagnostics.strategy = "nitter";
367
420
  return nitterResult;
368
421
  }
369
- nitterError = new Error('Nitter returned blocked or empty content');
422
+ nitterError = new Error("Nitter returned blocked or empty content");
370
423
  }
371
- if (firecrawlMode === 'always') {
372
- const firecrawlResult = await attemptFirecrawl('Firecrawl forced via options');
424
+ if (firecrawlMode === "always") {
425
+ const firecrawlResult = await attemptFirecrawl("Firecrawl forced via options");
373
426
  if (firecrawlResult) {
374
427
  return firecrawlResult;
375
428
  }
@@ -387,27 +440,27 @@ export async function fetchLinkContent(url, options, deps) {
387
440
  }
388
441
  if (!htmlResult) {
389
442
  if (!canUseFirecrawl) {
390
- throw htmlError instanceof Error ? htmlError : new Error('Failed to fetch HTML document');
443
+ throw htmlError instanceof Error ? htmlError : new Error("Failed to fetch HTML document");
391
444
  }
392
- const firecrawlResult = await attemptFirecrawl('HTML fetch failed; falling back to Firecrawl');
445
+ const firecrawlResult = await attemptFirecrawl("HTML fetch failed; falling back to Firecrawl");
393
446
  if (firecrawlResult) {
394
447
  return firecrawlResult;
395
448
  }
396
449
  const firecrawlError = firecrawlDiagnostics.notes
397
450
  ? `; Firecrawl notes: ${firecrawlDiagnostics.notes}`
398
- : '';
399
- throw new Error(`Failed to fetch HTML document${firecrawlError}${htmlError instanceof Error ? `; HTML error: ${htmlError.message}` : ''}`);
451
+ : "";
452
+ throw new Error(`Failed to fetch HTML document${firecrawlError}${htmlError instanceof Error ? `; HTML error: ${htmlError.message}` : ""}`);
400
453
  }
401
454
  const html = htmlResult.html;
402
455
  const effectiveUrl = htmlResult.finalUrl || url;
403
456
  let readabilityCandidate = null;
404
- if (firecrawlMode === 'auto' && shouldFallbackToFirecrawl(html)) {
457
+ if (firecrawlMode === "auto" && shouldFallbackToFirecrawl(html)) {
405
458
  readabilityCandidate = await extractReadabilityFromHtml(html, effectiveUrl);
406
459
  const readabilityText = readabilityCandidate?.text
407
460
  ? normalizeForPrompt(readabilityCandidate.text)
408
- : '';
461
+ : "";
409
462
  if (readabilityText.length < MIN_READABILITY_CONTENT_CHARACTERS) {
410
- const firecrawlResult = await attemptFirecrawl('HTML content looked blocked/thin; falling back to Firecrawl');
463
+ const firecrawlResult = await attemptFirecrawl("HTML content looked blocked/thin; falling back to Firecrawl");
411
464
  if (firecrawlResult) {
412
465
  return firecrawlResult;
413
466
  }
@@ -430,15 +483,15 @@ export async function fetchLinkContent(url, options, deps) {
430
483
  });
431
484
  if (twitterStatus && isBlockedTwitterContent(htmlExtracted.content)) {
432
485
  const birdNote = !deps.readTweetWithBird
433
- ? 'Bird not available'
486
+ ? "Bird not available"
434
487
  : birdError
435
488
  ? `Bird failed: ${birdError instanceof Error ? birdError.message : String(birdError)}`
436
- : 'Bird returned no text';
489
+ : "Bird returned no text";
437
490
  const nitterNote = nitterUrls.length > 0
438
491
  ? nitterError
439
492
  ? `Nitter failed: ${nitterError instanceof Error ? nitterError.message : String(nitterError)}`
440
- : 'Nitter returned no text'
441
- : 'Nitter not available';
493
+ : "Nitter returned no text"
494
+ : "Nitter not available";
442
495
  throw new Error(`Unable to fetch tweet content from X. ${birdNote}. ${nitterNote}.`);
443
496
  }
444
497
  return htmlExtracted;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/content/link-preview/content/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/content/link-preview/content/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { load } from 'cheerio';
2
- import { normalizeCandidate } from './cleaner.js';
1
+ import { load } from "cheerio";
2
+ import { normalizeCandidate } from "./cleaner.js";
3
3
  export function extractJsonLdContent(html) {
4
4
  try {
5
5
  const $ = load(html);
@@ -41,35 +41,35 @@ function collectCandidates(input, out) {
41
41
  collectCandidates(item, out);
42
42
  return;
43
43
  }
44
- if (typeof input !== 'object')
44
+ if (typeof input !== "object")
45
45
  return;
46
46
  const record = input;
47
- if (record['@graph'] && Array.isArray(record['@graph'])) {
48
- collectCandidates(record['@graph'], out);
47
+ if (record["@graph"] && Array.isArray(record["@graph"])) {
48
+ collectCandidates(record["@graph"], out);
49
49
  }
50
50
  const type = extractType(record);
51
51
  if (type) {
52
- const title = firstString(record, ['name', 'headline', 'title']);
53
- const description = firstString(record, ['description', 'summary']);
52
+ const title = firstString(record, ["name", "headline", "title"]);
53
+ const description = firstString(record, ["description", "summary"]);
54
54
  if (title || description) {
55
55
  out.push({ title: title ?? null, description: description ?? null, type });
56
56
  }
57
57
  }
58
58
  }
59
59
  function extractType(record) {
60
- const raw = record['@type'];
61
- if (typeof raw === 'string')
60
+ const raw = record["@type"];
61
+ if (typeof raw === "string")
62
62
  return raw.toLowerCase();
63
63
  if (Array.isArray(raw)) {
64
- const found = raw.find((entry) => typeof entry === 'string');
65
- return typeof found === 'string' ? found.toLowerCase() : null;
64
+ const found = raw.find((entry) => typeof entry === "string");
65
+ return typeof found === "string" ? found.toLowerCase() : null;
66
66
  }
67
67
  return null;
68
68
  }
69
69
  function firstString(record, keys) {
70
70
  for (const key of keys) {
71
71
  const value = record[key];
72
- if (typeof value === 'string' && value.trim())
72
+ if (typeof value === "string" && value.trim())
73
73
  return value.trim();
74
74
  }
75
75
  return null;