@steipete/summarize-core 0.9.0 → 0.11.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 (197) 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 +23 -8
  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 +18 -17
  14. package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
  15. package/dist/esm/content/link-preview/content/html.js +31 -28
  16. package/dist/esm/content/link-preview/content/html.js.map +1 -1
  17. package/dist/esm/content/link-preview/content/index.js +173 -90
  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 +30 -22
  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 +47 -22
  46. package/dist/esm/content/transcript/cache.js.map +1 -1
  47. package/dist/esm/content/transcript/index.js +71 -25
  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 +125 -13
  52. package/dist/esm/content/transcript/parse.js.map +1 -1
  53. package/dist/esm/content/transcript/providers/generic.js +112 -81
  54. package/dist/esm/content/transcript/providers/generic.js.map +1 -1
  55. package/dist/esm/content/transcript/providers/podcast/apple-flow.js +38 -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 +66 -56
  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 +42 -28
  70. package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
  71. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js +39 -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 +52 -43
  76. package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
  77. package/dist/esm/content/transcript/providers/transcription-start.js +78 -0
  78. package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -0
  79. package/dist/esm/content/transcript/providers/youtube/api.js +74 -57
  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 +112 -74
  84. package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
  85. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +161 -101
  86. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
  87. package/dist/esm/content/transcript/providers/youtube.js +97 -80
  88. package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
  89. package/dist/esm/content/transcript/timestamps.js +79 -0
  90. package/dist/esm/content/transcript/timestamps.js.map +1 -0
  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 +121 -0
  104. package/dist/esm/processes.js.map +1 -0
  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 +56 -40
  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 -4
  112. package/dist/esm/prompts/index.js.map +1 -1
  113. package/dist/esm/prompts/link-summary.js +96 -46
  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 +13 -0
  118. package/dist/esm/prompts/summary-system.js.map +1 -0
  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 +319 -0
  122. package/dist/esm/transcription/onnx-cli.js.map +1 -0
  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 +209 -52
  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 +134 -82
  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 +68 -58
  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 +25 -1
  142. package/dist/types/content/index.d.ts +7 -7
  143. package/dist/types/content/link-preview/client.d.ts +9 -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 +8 -7
  147. package/dist/types/content/link-preview/content/html.d.ts +9 -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 +13 -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 +44 -28
  155. package/dist/types/content/link-preview/types.d.ts +10 -4
  156. package/dist/types/content/transcript/cache.d.ts +9 -6
  157. package/dist/types/content/transcript/index.d.ts +9 -6
  158. package/dist/types/content/transcript/parse.d.ts +7 -0
  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 +10 -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 +2 -0
  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 +32 -0
  169. package/dist/types/content/transcript/providers/youtube/api.d.ts +7 -2
  170. package/dist/types/content/transcript/providers/youtube/captions.d.ts +6 -1
  171. package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +13 -6
  172. package/dist/types/content/transcript/providers/youtube.d.ts +1 -1
  173. package/dist/types/content/transcript/timestamps.d.ts +5 -0
  174. package/dist/types/content/transcript/transcription-config.d.ts +15 -0
  175. package/dist/types/content/transcript/types.d.ts +15 -7
  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 +50 -0
  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 -5
  185. package/dist/types/prompts/link-summary.d.ts +9 -4
  186. package/dist/types/prompts/summary-lengths.d.ts +1 -1
  187. package/dist/types/prompts/summary-system.d.ts +1 -0
  188. package/dist/types/transcription/onnx-cli.d.ts +25 -0
  189. package/dist/types/transcription/whisper/core.d.ts +10 -3
  190. package/dist/types/transcription/whisper/ffmpeg.d.ts +5 -0
  191. package/dist/types/transcription/whisper/groq.d.ts +2 -0
  192. package/dist/types/transcription/whisper/openai.d.ts +6 -1
  193. package/dist/types/transcription/whisper/types.d.ts +1 -1
  194. package/dist/types/transcription/whisper/whisper-cpp.d.ts +1 -1
  195. package/dist/types/transcription/whisper.d.ts +5 -5
  196. package/package.json +24 -18
  197. package/LICENSE +0 -21
@@ -1,79 +1,116 @@
1
- import { spawn } from 'node:child_process';
2
- import { randomUUID } from 'node:crypto';
3
- import { promises as fs } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { isWhisperCppReady, probeMediaDurationSecondsWithFfprobe, transcribeMediaFileWithWhisper, } from '../../../../transcription/whisper.js';
7
- import { ProgressKind } from '../../../link-preview/deps.js';
1
+ import { randomUUID } from "node:crypto";
2
+ import { promises as fs } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { spawnTracked } from "../../../../processes.js";
6
+ import { probeMediaDurationSecondsWithFfprobe, transcribeMediaFileWithWhisper, } from "../../../../transcription/whisper.js";
7
+ import { ProgressKind } from "../../../link-preview/deps.js";
8
+ import { resolveTranscriptionConfig, } from "../../transcription-config.js";
9
+ import { resolveTranscriptionStartInfo } from "../transcription-start.js";
8
10
  const YT_DLP_TIMEOUT_MS = 300_000;
9
11
  const MAX_STDERR_BYTES = 8192;
10
- export const fetchTranscriptWithYtDlp = async ({ ytDlpPath, openaiApiKey, falApiKey, url, onProgress, service = 'youtube', extraArgs, }) => {
12
+ const DEFAULT_AUDIO_FORMAT = "bestaudio[vcodec=none]/best[height<=360]/best[height<=480]/best[height<=720]/best";
13
+ export const fetchTranscriptWithYtDlp = async ({ ytDlpPath, transcription, env, groqApiKey, openaiApiKey, falApiKey, url, onProgress, service = "youtube", mediaKind = null, mediaCache = null, extraArgs, }) => {
11
14
  const notes = [];
15
+ const effectiveTranscription = resolveTranscriptionConfig({
16
+ env,
17
+ transcription,
18
+ groqApiKey,
19
+ openaiApiKey,
20
+ falApiKey,
21
+ });
12
22
  if (!ytDlpPath) {
13
23
  return {
14
24
  text: null,
15
25
  provider: null,
16
- error: new Error('yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)'),
26
+ error: new Error("yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)"),
17
27
  notes,
18
28
  };
19
29
  }
20
- const hasLocalWhisper = await isWhisperCppReady();
21
- if (!openaiApiKey && !falApiKey && !hasLocalWhisper) {
30
+ const effectiveEnv = effectiveTranscription.env ?? process.env;
31
+ const startInfo = await resolveTranscriptionStartInfo({
32
+ transcription: effectiveTranscription,
33
+ });
34
+ if (!startInfo.availability.hasAnyProvider) {
22
35
  return {
23
36
  text: null,
24
37
  provider: null,
25
- error: new Error('No transcription providers available (install whisper-cpp or set OPENAI_API_KEY or FAL_KEY)'),
38
+ error: new Error("No transcription providers available (install whisper-cpp or set GROQ_API_KEY, OPENAI_API_KEY, or FAL_KEY)"),
26
39
  notes,
27
40
  };
28
41
  }
29
- const progress = typeof onProgress === 'function' ? onProgress : null;
30
- const providerHint = hasLocalWhisper
31
- ? 'cpp'
32
- : openaiApiKey && falApiKey
33
- ? 'openai->fal'
34
- : openaiApiKey
35
- ? 'openai'
36
- : falApiKey
37
- ? 'fal'
38
- : 'unknown';
39
- const modelId = hasLocalWhisper
40
- ? 'whisper.cpp'
41
- : openaiApiKey && falApiKey
42
- ? 'whisper-1->fal-ai/wizper'
43
- : openaiApiKey
44
- ? 'whisper-1'
45
- : falApiKey
46
- ? 'fal-ai/wizper'
47
- : null;
42
+ const progress = typeof onProgress === "function" ? onProgress : null;
43
+ const providerHint = startInfo.providerHint;
44
+ const modelId = startInfo.modelId;
45
+ const cachedMedia = mediaCache ? await mediaCache.get({ url }) : null;
48
46
  const outputFile = join(tmpdir(), `summarize-${randomUUID()}.mp3`);
47
+ let filePath = cachedMedia?.filePath ?? outputFile;
48
+ let shouldCleanup = !cachedMedia?.filePath;
49
49
  try {
50
- progress?.({
51
- kind: ProgressKind.TranscriptMediaDownloadStart,
52
- url,
53
- service,
54
- mediaUrl: url,
55
- totalBytes: null,
56
- });
57
- await downloadAudio(ytDlpPath, url, outputFile, extraArgs, progress
58
- ? (downloadedBytes, totalBytes) => {
59
- progress({
60
- kind: ProgressKind.TranscriptMediaDownloadProgress,
50
+ if (cachedMedia?.filePath) {
51
+ progress?.({
52
+ kind: ProgressKind.TranscriptMediaDownloadStart,
53
+ url,
54
+ service,
55
+ mediaUrl: url,
56
+ mediaKind,
57
+ totalBytes: cachedMedia.sizeBytes ?? null,
58
+ });
59
+ progress?.({
60
+ kind: ProgressKind.TranscriptMediaDownloadDone,
61
+ url,
62
+ service,
63
+ downloadedBytes: cachedMedia.sizeBytes ?? 0,
64
+ totalBytes: cachedMedia.sizeBytes ?? null,
65
+ mediaKind,
66
+ });
67
+ notes.push("media cache hit");
68
+ }
69
+ else {
70
+ progress?.({
71
+ kind: ProgressKind.TranscriptMediaDownloadStart,
72
+ url,
73
+ service,
74
+ mediaUrl: url,
75
+ mediaKind,
76
+ totalBytes: null,
77
+ });
78
+ await downloadAudio(ytDlpPath, url, outputFile, extraArgs, progress
79
+ ? (downloadedBytes, totalBytes) => {
80
+ progress({
81
+ kind: ProgressKind.TranscriptMediaDownloadProgress,
82
+ url,
83
+ service,
84
+ downloadedBytes,
85
+ totalBytes,
86
+ mediaKind,
87
+ });
88
+ }
89
+ : null);
90
+ const stat = await fs.stat(outputFile);
91
+ progress?.({
92
+ kind: ProgressKind.TranscriptMediaDownloadDone,
93
+ url,
94
+ service,
95
+ downloadedBytes: stat.size,
96
+ totalBytes: null,
97
+ mediaKind,
98
+ });
99
+ if (mediaCache) {
100
+ const stored = await mediaCache.put({
61
101
  url,
62
- service,
63
- downloadedBytes,
64
- totalBytes,
102
+ filePath: outputFile,
103
+ mediaType: "audio/mpeg",
104
+ filename: "audio.mp3",
65
105
  });
106
+ if (stored?.filePath) {
107
+ filePath = stored.filePath;
108
+ shouldCleanup = false;
109
+ notes.push("media cached");
110
+ }
66
111
  }
67
- : null);
68
- const stat = await fs.stat(outputFile);
69
- progress?.({
70
- kind: ProgressKind.TranscriptMediaDownloadDone,
71
- url,
72
- service,
73
- downloadedBytes: stat.size,
74
- totalBytes: null,
75
- });
76
- const probedDurationSeconds = await probeMediaDurationSecondsWithFfprobe(outputFile);
112
+ }
113
+ const probedDurationSeconds = await probeMediaDurationSecondsWithFfprobe(filePath);
77
114
  progress?.({
78
115
  kind: ProgressKind.TranscriptWhisperStart,
79
116
  url,
@@ -84,12 +121,14 @@ export const fetchTranscriptWithYtDlp = async ({ ytDlpPath, openaiApiKey, falApi
84
121
  parts: null,
85
122
  });
86
123
  const result = await transcribeMediaFileWithWhisper({
87
- filePath: outputFile,
88
- mediaType: 'audio/mpeg',
89
- filename: 'audio.mp3',
90
- openaiApiKey,
91
- falApiKey,
124
+ filePath,
125
+ mediaType: "audio/mpeg",
126
+ filename: "audio.mp3",
127
+ groqApiKey: effectiveTranscription.groqApiKey,
128
+ openaiApiKey: effectiveTranscription.openaiApiKey,
129
+ falApiKey: effectiveTranscription.falApiKey,
92
130
  totalDurationSeconds: probedDurationSeconds,
131
+ env: effectiveEnv,
93
132
  onProgress: (event) => {
94
133
  progress?.({
95
134
  kind: ProgressKind.TranscriptWhisperProgress,
@@ -110,36 +149,42 @@ export const fetchTranscriptWithYtDlp = async ({ ytDlpPath, openaiApiKey, falApi
110
149
  return {
111
150
  text: null,
112
151
  provider: null,
113
- error: wrapError('yt-dlp failed to download audio', error),
152
+ error: wrapError("yt-dlp failed to download audio", error),
114
153
  notes,
115
154
  };
116
155
  }
117
156
  finally {
118
- await fs.unlink(outputFile).catch(() => { });
157
+ if (shouldCleanup) {
158
+ await fs.unlink(filePath).catch(() => { });
159
+ }
119
160
  }
120
161
  };
121
162
  export const fetchDurationSecondsWithYtDlp = async ({ ytDlpPath, url, }) => {
122
163
  if (!ytDlpPath)
123
164
  return null;
124
165
  return new Promise((resolve) => {
125
- const args = ['--skip-download', '--dump-json', '--no-playlist', '--no-warnings', url];
126
- const proc = spawn(ytDlpPath, args, { stdio: ['ignore', 'pipe', 'pipe'] });
127
- let stdout = '';
128
- let stderr = '';
166
+ const args = ["--skip-download", "--dump-json", "--no-playlist", "--no-warnings", url];
167
+ const { proc } = spawnTracked(ytDlpPath, args, {
168
+ stdio: ["ignore", "pipe", "pipe"],
169
+ label: "yt-dlp",
170
+ kind: "yt-dlp",
171
+ });
172
+ let stdout = "";
173
+ let stderr = "";
129
174
  const timeout = setTimeout(() => {
130
- proc.kill('SIGKILL');
175
+ proc.kill("SIGKILL");
131
176
  resolve(null);
132
177
  }, 30_000);
133
- proc.stdout.on('data', (chunk) => {
178
+ proc.stdout?.on("data", (chunk) => {
134
179
  stdout += chunk.toString();
135
180
  });
136
- proc.stderr.on('data', (chunk) => {
181
+ proc.stderr?.on("data", (chunk) => {
137
182
  stderr += chunk.toString();
138
183
  if (stderr.length > MAX_STDERR_BYTES) {
139
184
  stderr = stderr.slice(-MAX_STDERR_BYTES);
140
185
  }
141
186
  });
142
- proc.on('close', (code) => {
187
+ proc.on("close", (code) => {
143
188
  clearTimeout(timeout);
144
189
  if (code !== 0) {
145
190
  resolve(null);
@@ -148,21 +193,21 @@ export const fetchDurationSecondsWithYtDlp = async ({ ytDlpPath, url, }) => {
148
193
  const jsonLine = stdout
149
194
  .split(/\r?\n/)
150
195
  .map((line) => line.trim())
151
- .find((line) => line.startsWith('{'));
196
+ .find((line) => line.startsWith("{"));
152
197
  if (!jsonLine) {
153
198
  resolve(null);
154
199
  return;
155
200
  }
156
201
  try {
157
202
  const parsed = JSON.parse(jsonLine);
158
- const duration = typeof parsed.duration === 'number' ? parsed.duration : Number.NaN;
203
+ const duration = typeof parsed.duration === "number" ? parsed.duration : Number.NaN;
159
204
  resolve(Number.isFinite(duration) && duration > 0 ? duration : null);
160
205
  }
161
206
  catch {
162
207
  resolve(null);
163
208
  }
164
209
  });
165
- proc.on('error', () => {
210
+ proc.on("error", () => {
166
211
  clearTimeout(timeout);
167
212
  resolve(null);
168
213
  });
@@ -170,30 +215,41 @@ export const fetchDurationSecondsWithYtDlp = async ({ ytDlpPath, url, }) => {
170
215
  };
171
216
  async function downloadAudio(ytDlpPath, url, outputFile, extraArgs, onProgress) {
172
217
  return new Promise((resolve, reject) => {
173
- const progressTemplate = 'progress:%(progress.downloaded_bytes)s|%(progress.total_bytes)s|%(progress.total_bytes_estimate)s';
218
+ const progressTemplate = "progress:%(progress.downloaded_bytes)s|%(progress.total_bytes)s|%(progress.total_bytes_estimate)s";
219
+ // Add --enable-file-urls flag for local file:// URLs
220
+ const isFileUrl = url.startsWith("file://");
174
221
  const args = [
175
- '-x',
176
- '--audio-format',
177
- 'mp3',
178
- '--no-playlist',
179
- '--retries',
180
- '3',
181
- '--no-warnings',
182
- ...(onProgress ? ['--progress', '--newline', '--progress-template', progressTemplate] : []),
222
+ "-f",
223
+ DEFAULT_AUDIO_FORMAT,
224
+ "-x",
225
+ "--audio-format",
226
+ "mp3",
227
+ "--concurrent-fragments",
228
+ "4",
229
+ "--no-playlist",
230
+ "--retries",
231
+ "3",
232
+ "--no-warnings",
233
+ ...(isFileUrl ? ["--enable-file-urls"] : []),
234
+ ...(onProgress ? ["--progress", "--newline", "--progress-template", progressTemplate] : []),
183
235
  ...(extraArgs?.length ? extraArgs : []),
184
- '-o',
236
+ "-o",
185
237
  outputFile,
186
238
  url,
187
239
  ];
188
- const proc = spawn(ytDlpPath, args, { stdio: ['ignore', 'pipe', 'pipe'] });
189
- let stderr = '';
190
- let progressBuffer = '';
240
+ const { proc, handle } = spawnTracked(ytDlpPath, args, {
241
+ stdio: ["ignore", "pipe", "pipe"],
242
+ label: "yt-dlp",
243
+ kind: "yt-dlp",
244
+ });
245
+ let stderr = "";
246
+ let progressBuffer = "";
191
247
  let lastTotalBytes = null;
192
248
  const reportProgress = (downloadedBytes, totalBytes) => {
193
249
  if (!onProgress)
194
250
  return;
195
251
  let normalizedTotal = totalBytes;
196
- if (typeof normalizedTotal === 'number' && Number.isFinite(normalizedTotal)) {
252
+ if (typeof normalizedTotal === "number" && Number.isFinite(normalizedTotal)) {
197
253
  if (normalizedTotal > 0) {
198
254
  if (lastTotalBytes === null || normalizedTotal > lastTotalBytes) {
199
255
  lastTotalBytes = normalizedTotal;
@@ -207,26 +263,30 @@ async function downloadAudio(ytDlpPath, url, outputFile, extraArgs, onProgress)
207
263
  normalizedTotal = lastTotalBytes;
208
264
  }
209
265
  onProgress(downloadedBytes, normalizedTotal);
266
+ if (normalizedTotal && normalizedTotal > 0) {
267
+ const pct = Math.max(0, Math.min(100, Math.round((downloadedBytes / normalizedTotal) * 100)));
268
+ handle?.setProgress(pct, "download");
269
+ }
210
270
  };
211
271
  const handleProgressChunk = (chunk) => {
212
272
  if (!onProgress)
213
273
  return;
214
274
  progressBuffer += chunk;
215
275
  const lines = progressBuffer.split(/\r?\n/);
216
- progressBuffer = lines.pop() ?? '';
276
+ progressBuffer = lines.pop() ?? "";
217
277
  for (const line of lines) {
218
278
  emitProgressFromLine(line, reportProgress);
219
279
  }
220
280
  };
221
281
  if (proc.stdout) {
222
- proc.stdout.setEncoding('utf8');
223
- proc.stdout.on('data', (chunk) => {
282
+ proc.stdout.setEncoding("utf8");
283
+ proc.stdout.on("data", (chunk) => {
224
284
  handleProgressChunk(chunk);
225
285
  });
226
286
  }
227
287
  if (proc.stderr) {
228
- proc.stderr.setEncoding('utf8');
229
- proc.stderr.on('data', (chunk) => {
288
+ proc.stderr.setEncoding("utf8");
289
+ proc.stderr.on("data", (chunk) => {
230
290
  if (stderr.length < MAX_STDERR_BYTES) {
231
291
  const remaining = MAX_STDERR_BYTES - stderr.length;
232
292
  stderr += chunk.slice(0, remaining);
@@ -235,10 +295,10 @@ async function downloadAudio(ytDlpPath, url, outputFile, extraArgs, onProgress)
235
295
  });
236
296
  }
237
297
  const timeout = setTimeout(() => {
238
- proc.kill('SIGTERM');
239
- reject(new Error('yt-dlp download timeout'));
298
+ proc.kill("SIGTERM");
299
+ reject(new Error("yt-dlp download timeout"));
240
300
  }, YT_DLP_TIMEOUT_MS);
241
- proc.on('close', (code, signal) => {
301
+ proc.on("close", (code, signal) => {
242
302
  if (onProgress && progressBuffer.trim().length > 0) {
243
303
  emitProgressFromLine(progressBuffer, reportProgress);
244
304
  }
@@ -248,14 +308,14 @@ async function downloadAudio(ytDlpPath, url, outputFile, extraArgs, onProgress)
248
308
  return;
249
309
  }
250
310
  const detail = stderr.trim();
251
- const suffix = detail ? `: ${detail}` : '';
311
+ const suffix = detail ? `: ${detail}` : "";
252
312
  if (code === null) {
253
- reject(new Error(`yt-dlp terminated (${signal ?? 'unknown'})${suffix}`));
313
+ reject(new Error(`yt-dlp terminated (${signal ?? "unknown"})${suffix}`));
254
314
  return;
255
315
  }
256
316
  reject(new Error(`yt-dlp exited with code ${code}${suffix}`));
257
317
  });
258
- proc.on('error', (error) => {
318
+ proc.on("error", (error) => {
259
319
  clearTimeout(timeout);
260
320
  reject(error);
261
321
  });
@@ -263,10 +323,10 @@ async function downloadAudio(ytDlpPath, url, outputFile, extraArgs, onProgress)
263
323
  }
264
324
  function emitProgressFromLine(line, onProgress) {
265
325
  const trimmed = line.trim();
266
- if (!trimmed.startsWith('progress:'))
326
+ if (!trimmed.startsWith("progress:"))
267
327
  return;
268
- const payload = trimmed.slice('progress:'.length);
269
- const [downloadedRaw, totalRaw, estimateRaw] = payload.split('|');
328
+ const payload = trimmed.slice("progress:".length);
329
+ const [downloadedRaw, totalRaw, estimateRaw] = payload.split("|");
270
330
  const downloaded = Number.parseFloat(downloadedRaw);
271
331
  if (!Number.isFinite(downloaded) || downloaded < 0)
272
332
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"yt-dlp.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/youtube/yt-dlp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yt-dlp.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/youtube/yt-dlp.ts"],"names":[],"mappings":"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"}