@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.
- package/README.md +0 -1
- package/dist/esm/content/index.js +5 -5
- package/dist/esm/content/index.js.map +1 -1
- package/dist/esm/content/link-preview/client.js +20 -9
- package/dist/esm/content/link-preview/client.js.map +1 -1
- package/dist/esm/content/link-preview/content/article.js +84 -83
- package/dist/esm/content/link-preview/content/article.js.map +1 -1
- package/dist/esm/content/link-preview/content/cleaner.js +23 -20
- package/dist/esm/content/link-preview/content/cleaner.js.map +1 -1
- package/dist/esm/content/link-preview/content/constants.js.map +1 -1
- package/dist/esm/content/link-preview/content/fetcher.js +46 -40
- package/dist/esm/content/link-preview/content/fetcher.js.map +1 -1
- package/dist/esm/content/link-preview/content/firecrawl.js +16 -16
- package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
- package/dist/esm/content/link-preview/content/html.js +29 -27
- package/dist/esm/content/link-preview/content/html.js.map +1 -1
- package/dist/esm/content/link-preview/content/index.js +141 -88
- package/dist/esm/content/link-preview/content/index.js.map +1 -1
- package/dist/esm/content/link-preview/content/jsonld.js +12 -12
- package/dist/esm/content/link-preview/content/jsonld.js.map +1 -1
- package/dist/esm/content/link-preview/content/parsers.js +20 -20
- package/dist/esm/content/link-preview/content/parsers.js.map +1 -1
- package/dist/esm/content/link-preview/content/podcast-utils.js +34 -34
- package/dist/esm/content/link-preview/content/podcast-utils.js.map +1 -1
- package/dist/esm/content/link-preview/content/readability.js +16 -15
- package/dist/esm/content/link-preview/content/readability.js.map +1 -1
- package/dist/esm/content/link-preview/content/twitter-utils.js +24 -11
- package/dist/esm/content/link-preview/content/twitter-utils.js.map +1 -1
- package/dist/esm/content/link-preview/content/types.js +1 -1
- package/dist/esm/content/link-preview/content/types.js.map +1 -1
- package/dist/esm/content/link-preview/content/utils.js +17 -17
- package/dist/esm/content/link-preview/content/utils.js.map +1 -1
- package/dist/esm/content/link-preview/content/video.js +19 -19
- package/dist/esm/content/link-preview/content/video.js.map +1 -1
- package/dist/esm/content/link-preview/content/visibility.js +121 -0
- package/dist/esm/content/link-preview/content/visibility.js.map +1 -0
- package/dist/esm/content/link-preview/content/youtube.js +10 -10
- package/dist/esm/content/link-preview/content/youtube.js.map +1 -1
- package/dist/esm/content/link-preview/deps.js +16 -16
- package/dist/esm/content/link-preview/deps.js.map +1 -1
- package/dist/esm/content/link-preview/fetch-with-timeout.js +4 -4
- package/dist/esm/content/link-preview/fetch-with-timeout.js.map +1 -1
- package/dist/esm/content/link-preview/types.js +1 -1
- package/dist/esm/content/link-preview/types.js.map +1 -1
- package/dist/esm/content/transcript/cache.js +22 -22
- package/dist/esm/content/transcript/cache.js.map +1 -1
- package/dist/esm/content/transcript/index.js +34 -24
- package/dist/esm/content/transcript/index.js.map +1 -1
- package/dist/esm/content/transcript/normalize.js +10 -10
- package/dist/esm/content/transcript/normalize.js.map +1 -1
- package/dist/esm/content/transcript/parse.js +31 -31
- package/dist/esm/content/transcript/parse.js.map +1 -1
- package/dist/esm/content/transcript/providers/generic.js +74 -78
- package/dist/esm/content/transcript/providers/generic.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/apple-flow.js +36 -36
- package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/apple.js +5 -5
- package/dist/esm/content/transcript/providers/podcast/apple.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/constants.js +2 -2
- package/dist/esm/content/transcript/providers/podcast/constants.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/itunes.js +44 -42
- package/dist/esm/content/transcript/providers/podcast/itunes.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/json.js +4 -4
- package/dist/esm/content/transcript/providers/podcast/json.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/media.js +58 -49
- package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/results.js +2 -2
- package/dist/esm/content/transcript/providers/podcast/results.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/rss.js +29 -29
- package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/spotify-flow.js +38 -38
- package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/spotify.js +32 -32
- package/dist/esm/content/transcript/providers/podcast/spotify.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast.js +43 -47
- package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
- package/dist/esm/content/transcript/providers/transcription-start.js +59 -31
- package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/api.js +56 -56
- package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/apify.js +7 -7
- package/dist/esm/content/transcript/providers/youtube/apify.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/captions.js +76 -76
- package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +82 -75
- package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube.js +84 -77
- package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
- package/dist/esm/content/transcript/timestamps.js +8 -8
- package/dist/esm/content/transcript/timestamps.js.map +1 -1
- package/dist/esm/content/transcript/transcription-config.js +14 -0
- package/dist/esm/content/transcript/transcription-config.js.map +1 -0
- package/dist/esm/content/transcript/utils.js +35 -35
- package/dist/esm/content/transcript/utils.js.map +1 -1
- package/dist/esm/content/url.js +59 -28
- package/dist/esm/content/url.js.map +1 -1
- package/dist/esm/index.js +4 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/language.js +77 -77
- package/dist/esm/language.js.map +1 -1
- package/dist/esm/openai/base-url.js +35 -0
- package/dist/esm/openai/base-url.js.map +1 -0
- package/dist/esm/processes.js +16 -16
- package/dist/esm/processes.js.map +1 -1
- package/dist/esm/prompts/cli.js +17 -17
- package/dist/esm/prompts/cli.js.map +1 -1
- package/dist/esm/prompts/file.js +54 -54
- package/dist/esm/prompts/file.js.map +1 -1
- package/dist/esm/prompts/format.js +2 -2
- package/dist/esm/prompts/format.js.map +1 -1
- package/dist/esm/prompts/index.js +5 -5
- package/dist/esm/prompts/index.js.map +1 -1
- package/dist/esm/prompts/link-summary.js +65 -65
- package/dist/esm/prompts/link-summary.js.map +1 -1
- package/dist/esm/prompts/summary-lengths.js +10 -10
- package/dist/esm/prompts/summary-lengths.js.map +1 -1
- package/dist/esm/prompts/summary-system.js +9 -9
- package/dist/esm/prompts/summary-system.js.map +1 -1
- package/dist/esm/shared/contracts.js +1 -1
- package/dist/esm/shared/contracts.js.map +1 -1
- package/dist/esm/transcription/onnx-cli.js +69 -69
- package/dist/esm/transcription/onnx-cli.js.map +1 -1
- package/dist/esm/transcription/whisper/constants.js +3 -3
- package/dist/esm/transcription/whisper/constants.js.map +1 -1
- package/dist/esm/transcription/whisper/core.js +148 -59
- package/dist/esm/transcription/whisper/core.js.map +1 -1
- package/dist/esm/transcription/whisper/fal.js +14 -14
- package/dist/esm/transcription/whisper/fal.js.map +1 -1
- package/dist/esm/transcription/whisper/ffmpeg.js +106 -106
- package/dist/esm/transcription/whisper/ffmpeg.js.map +1 -1
- package/dist/esm/transcription/whisper/groq.js +46 -0
- package/dist/esm/transcription/whisper/groq.js.map +1 -0
- package/dist/esm/transcription/whisper/openai.js +19 -13
- package/dist/esm/transcription/whisper/openai.js.map +1 -1
- package/dist/esm/transcription/whisper/utils.js +19 -19
- package/dist/esm/transcription/whisper/utils.js.map +1 -1
- package/dist/esm/transcription/whisper/whisper-cpp.js +64 -64
- package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
- package/dist/esm/transcription/whisper.js +4 -4
- package/dist/esm/transcription/whisper.js.map +1 -1
- package/dist/types/content/cache/types.d.ts +1 -1
- package/dist/types/content/index.d.ts +7 -7
- package/dist/types/content/link-preview/client.d.ts +7 -4
- package/dist/types/content/link-preview/content/cleaner.d.ts +1 -0
- package/dist/types/content/link-preview/content/fetcher.d.ts +2 -2
- package/dist/types/content/link-preview/content/firecrawl.d.ts +7 -7
- package/dist/types/content/link-preview/content/html.d.ts +8 -8
- package/dist/types/content/link-preview/content/index.d.ts +3 -3
- package/dist/types/content/link-preview/content/twitter-utils.d.ts +1 -0
- package/dist/types/content/link-preview/content/types.d.ts +8 -8
- package/dist/types/content/link-preview/content/utils.d.ts +3 -3
- package/dist/types/content/link-preview/content/video.d.ts +1 -1
- package/dist/types/content/link-preview/content/visibility.d.ts +1 -0
- package/dist/types/content/link-preview/deps.d.ts +36 -33
- package/dist/types/content/link-preview/types.d.ts +4 -4
- package/dist/types/content/transcript/cache.d.ts +4 -4
- package/dist/types/content/transcript/index.d.ts +7 -7
- package/dist/types/content/transcript/parse.d.ts +1 -1
- package/dist/types/content/transcript/providers/generic.d.ts +1 -1
- package/dist/types/content/transcript/providers/podcast/apple-flow.d.ts +2 -2
- package/dist/types/content/transcript/providers/podcast/flow-context.d.ts +4 -4
- package/dist/types/content/transcript/providers/podcast/media.d.ts +9 -6
- package/dist/types/content/transcript/providers/podcast/results.d.ts +3 -3
- package/dist/types/content/transcript/providers/podcast/rss.d.ts +1 -1
- package/dist/types/content/transcript/providers/podcast/spotify-flow.d.ts +2 -2
- package/dist/types/content/transcript/providers/podcast/spotify.d.ts +2 -2
- package/dist/types/content/transcript/providers/podcast.d.ts +5 -5
- package/dist/types/content/transcript/providers/transcription-start.d.ts +14 -8
- package/dist/types/content/transcript/providers/youtube/api.d.ts +1 -1
- package/dist/types/content/transcript/providers/youtube/captions.d.ts +1 -1
- package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +11 -8
- package/dist/types/content/transcript/providers/youtube.d.ts +1 -1
- package/dist/types/content/transcript/timestamps.d.ts +1 -1
- package/dist/types/content/transcript/transcription-config.d.ts +15 -0
- package/dist/types/content/transcript/types.d.ts +12 -9
- package/dist/types/content/transcript/utils.d.ts +1 -1
- package/dist/types/content/url.d.ts +5 -3
- package/dist/types/index.d.ts +5 -4
- package/dist/types/language.d.ts +4 -4
- package/dist/types/openai/base-url.d.ts +14 -0
- package/dist/types/processes.d.ts +2 -2
- package/dist/types/prompts/cli.d.ts +3 -3
- package/dist/types/prompts/file.d.ts +2 -2
- package/dist/types/prompts/index.d.ts +6 -6
- package/dist/types/prompts/link-summary.d.ts +3 -3
- package/dist/types/prompts/summary-lengths.d.ts +1 -1
- package/dist/types/transcription/onnx-cli.d.ts +3 -3
- package/dist/types/transcription/whisper/core.d.ts +6 -3
- package/dist/types/transcription/whisper/groq.d.ts +2 -0
- package/dist/types/transcription/whisper/openai.d.ts +6 -1
- package/dist/types/transcription/whisper/types.d.ts +1 -1
- package/dist/types/transcription/whisper/whisper-cpp.d.ts +1 -1
- package/dist/types/transcription/whisper.d.ts +5 -5
- package/package.json +13 -13
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import { resolveTranscriptForLink } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
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 ===
|
|
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 ??
|
|
30
|
-
const mediaTranscriptMode = options?.mediaTranscript ??
|
|
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 ??
|
|
34
|
-
const markdownMode = options?.markdownMode ??
|
|
41
|
+
const markdownRequested = (options?.format ?? "text") === "markdown";
|
|
42
|
+
const markdownMode = options?.markdownMode ?? "auto";
|
|
35
43
|
const fileMtime = options?.fileMtime ?? null;
|
|
36
|
-
const canUseFirecrawl = firecrawlMode !==
|
|
44
|
+
const canUseFirecrawl = firecrawlMode !== "off" && deps.scrapeWithFirecrawl !== null && !isYouTubeUrl(url);
|
|
37
45
|
const spotifyEpisodeId = extractSpotifyEpisodeId(url);
|
|
38
46
|
if (spotifyEpisodeId) {
|
|
39
|
-
if (!
|
|
40
|
-
throw new Error(
|
|
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 ??
|
|
55
|
-
transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes,
|
|
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(
|
|
66
|
+
baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
|
|
59
67
|
maxCharacters,
|
|
60
68
|
title: null,
|
|
61
69
|
description: null,
|
|
62
|
-
siteName:
|
|
70
|
+
siteName: "Spotify",
|
|
63
71
|
transcriptResolution,
|
|
64
72
|
video: null,
|
|
65
73
|
isVideoOnly: false,
|
|
66
74
|
diagnostics: {
|
|
67
|
-
strategy:
|
|
75
|
+
strategy: "html",
|
|
68
76
|
firecrawl: {
|
|
69
77
|
attempted: false,
|
|
70
78
|
used: false,
|
|
71
79
|
cacheMode,
|
|
72
|
-
cacheStatus: cacheMode ===
|
|
73
|
-
notes:
|
|
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:
|
|
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 (!
|
|
88
|
-
throw new Error(
|
|
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 ??
|
|
103
|
-
transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes,
|
|
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(
|
|
114
|
+
baseContent: selectBaseContent("", transcriptResolution.text, transcriptResolution.segments),
|
|
107
115
|
maxCharacters,
|
|
108
116
|
title: null,
|
|
109
117
|
description: null,
|
|
110
|
-
siteName:
|
|
118
|
+
siteName: "Apple Podcasts",
|
|
111
119
|
transcriptResolution,
|
|
112
120
|
video: null,
|
|
113
121
|
isVideoOnly: false,
|
|
114
122
|
diagnostics: {
|
|
115
|
-
strategy:
|
|
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 ===
|
|
121
|
-
notes:
|
|
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:
|
|
180
|
+
notes: "X broadcast uses transcript content",
|
|
128
181
|
},
|
|
129
182
|
transcript: transcriptDiagnostics,
|
|
130
183
|
},
|
|
131
184
|
});
|
|
132
185
|
}
|
|
133
|
-
if (isDirectMediaUrl(url) && mediaTranscriptMode ===
|
|
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 ??
|
|
147
|
-
transcriptDiagnostics.notes = appendNote(transcriptDiagnostics.notes,
|
|
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(
|
|
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:
|
|
209
|
+
video: { kind: "direct", url },
|
|
157
210
|
isVideoOnly: true,
|
|
158
211
|
diagnostics: {
|
|
159
|
-
strategy:
|
|
212
|
+
strategy: "html",
|
|
160
213
|
firecrawl: {
|
|
161
214
|
attempted: false,
|
|
162
215
|
used: false,
|
|
163
216
|
cacheMode,
|
|
164
|
-
cacheStatus: cacheMode ===
|
|
165
|
-
notes:
|
|
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:
|
|
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 ===
|
|
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,
|
|
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:
|
|
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:
|
|
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 =
|
|
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 ===
|
|
302
|
+
const shouldAttemptTranscript = mediaTranscriptMode === "prefer" || (mediaTranscriptMode === "auto" && hasMedia);
|
|
250
303
|
const autoModeNote = !shouldAttemptTranscript
|
|
251
|
-
?
|
|
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(
|
|
257
|
-
const mediaTranscriptModeForTweet = shouldAttemptTranscript ?
|
|
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 ??
|
|
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 ===
|
|
330
|
+
video: mediaUrl && media?.kind === "video"
|
|
278
331
|
? {
|
|
279
|
-
kind:
|
|
332
|
+
kind: "direct",
|
|
280
333
|
url: mediaUrl,
|
|
281
334
|
}
|
|
282
335
|
: null,
|
|
283
336
|
isVideoOnly: false,
|
|
284
337
|
diagnostics: {
|
|
285
|
-
strategy:
|
|
338
|
+
strategy: "bird",
|
|
286
339
|
firecrawl: firecrawlDiagnostics,
|
|
287
340
|
markdown: {
|
|
288
341
|
requested: markdownRequested,
|
|
289
342
|
used: false,
|
|
290
343
|
provider: null,
|
|
291
|
-
notes:
|
|
344
|
+
notes: "Bird tweet fetch provides plain text",
|
|
292
345
|
},
|
|
293
346
|
transcript: transcriptDiagnostics,
|
|
294
347
|
},
|
|
295
348
|
});
|
|
296
349
|
deps.onProgress?.({
|
|
297
|
-
kind:
|
|
350
|
+
kind: "bird-done",
|
|
298
351
|
url,
|
|
299
352
|
ok: true,
|
|
300
|
-
textBytes: Buffer.byteLength(result.content,
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
383
|
+
deps.onProgress?.({ kind: "nitter-done", url: nitterUrl, ok: false, textBytes: null });
|
|
331
384
|
continue;
|
|
332
385
|
}
|
|
333
386
|
deps.onProgress?.({
|
|
334
|
-
kind:
|
|
387
|
+
kind: "nitter-done",
|
|
335
388
|
url: nitterUrl,
|
|
336
389
|
ok: true,
|
|
337
|
-
textBytes: Buffer.byteLength(nitterHtml,
|
|
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:
|
|
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 =
|
|
419
|
+
nitterResult.diagnostics.strategy = "nitter";
|
|
367
420
|
return nitterResult;
|
|
368
421
|
}
|
|
369
|
-
nitterError = new Error(
|
|
422
|
+
nitterError = new Error("Nitter returned blocked or empty content");
|
|
370
423
|
}
|
|
371
|
-
if (firecrawlMode ===
|
|
372
|
-
const firecrawlResult = await attemptFirecrawl(
|
|
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(
|
|
443
|
+
throw htmlError instanceof Error ? htmlError : new Error("Failed to fetch HTML document");
|
|
391
444
|
}
|
|
392
|
-
const firecrawlResult = await attemptFirecrawl(
|
|
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 ===
|
|
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(
|
|
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
|
-
?
|
|
486
|
+
? "Bird not available"
|
|
434
487
|
: birdError
|
|
435
488
|
? `Bird failed: ${birdError instanceof Error ? birdError.message : String(birdError)}`
|
|
436
|
-
:
|
|
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
|
-
:
|
|
441
|
-
:
|
|
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
|
|
2
|
-
import { normalizeCandidate } from
|
|
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 !==
|
|
44
|
+
if (typeof input !== "object")
|
|
45
45
|
return;
|
|
46
46
|
const record = input;
|
|
47
|
-
if (record[
|
|
48
|
-
collectCandidates(record[
|
|
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, [
|
|
53
|
-
const description = firstString(record, [
|
|
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[
|
|
61
|
-
if (typeof raw ===
|
|
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 ===
|
|
65
|
-
return typeof found ===
|
|
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 ===
|
|
72
|
+
if (typeof value === "string" && value.trim())
|
|
73
73
|
return value.trim();
|
|
74
74
|
}
|
|
75
75
|
return null;
|