@steipete/summarize 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 (398) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +1 -1
  3. package/README.md +391 -183
  4. package/dist/cli.js +1 -1
  5. package/dist/esm/cache.js +134 -64
  6. package/dist/esm/cache.js.map +1 -1
  7. package/dist/esm/cli-main.js +27 -27
  8. package/dist/esm/cli-main.js.map +1 -1
  9. package/dist/esm/cli.js +2 -2
  10. package/dist/esm/cli.js.map +1 -1
  11. package/dist/esm/config.js +396 -126
  12. package/dist/esm/config.js.map +1 -1
  13. package/dist/esm/content/asset.js +53 -50
  14. package/dist/esm/content/asset.js.map +1 -1
  15. package/dist/esm/content/index.js +1 -1
  16. package/dist/esm/content/index.js.map +1 -1
  17. package/dist/esm/costs.js +1 -1
  18. package/dist/esm/costs.js.map +1 -1
  19. package/dist/esm/daemon/agent.js +548 -0
  20. package/dist/esm/daemon/agent.js.map +1 -0
  21. package/dist/esm/daemon/auto-mode.js +3 -3
  22. package/dist/esm/daemon/auto-mode.js.map +1 -1
  23. package/dist/esm/daemon/chat.js +88 -178
  24. package/dist/esm/daemon/chat.js.map +1 -1
  25. package/dist/esm/daemon/cli-entrypoint.js +72 -0
  26. package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
  27. package/dist/esm/daemon/cli.js +91 -83
  28. package/dist/esm/daemon/cli.js.map +1 -1
  29. package/dist/esm/daemon/config.js +15 -15
  30. package/dist/esm/daemon/config.js.map +1 -1
  31. package/dist/esm/daemon/constants.js +6 -6
  32. package/dist/esm/daemon/constants.js.map +1 -1
  33. package/dist/esm/daemon/env-merge.js.map +1 -1
  34. package/dist/esm/daemon/env-snapshot.js +36 -28
  35. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  36. package/dist/esm/daemon/flow-context.js +86 -32
  37. package/dist/esm/daemon/flow-context.js.map +1 -1
  38. package/dist/esm/daemon/launchd.js +119 -47
  39. package/dist/esm/daemon/launchd.js.map +1 -1
  40. package/dist/esm/daemon/meta.js +5 -5
  41. package/dist/esm/daemon/meta.js.map +1 -1
  42. package/dist/esm/daemon/models.js +54 -31
  43. package/dist/esm/daemon/models.js.map +1 -1
  44. package/dist/esm/daemon/process-registry.js +206 -0
  45. package/dist/esm/daemon/process-registry.js.map +1 -0
  46. package/dist/esm/daemon/schtasks.js +96 -32
  47. package/dist/esm/daemon/schtasks.js.map +1 -1
  48. package/dist/esm/daemon/server.js +832 -158
  49. package/dist/esm/daemon/server.js.map +1 -1
  50. package/dist/esm/daemon/summarize-progress.js +11 -11
  51. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  52. package/dist/esm/daemon/summarize.js +61 -32
  53. package/dist/esm/daemon/summarize.js.map +1 -1
  54. package/dist/esm/daemon/systemd.js +96 -35
  55. package/dist/esm/daemon/systemd.js.map +1 -1
  56. package/dist/esm/firecrawl.js +12 -12
  57. package/dist/esm/firecrawl.js.map +1 -1
  58. package/dist/esm/flags.js +55 -31
  59. package/dist/esm/flags.js.map +1 -1
  60. package/dist/esm/index.js +3 -3
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/language.js +1 -1
  63. package/dist/esm/language.js.map +1 -1
  64. package/dist/esm/llm/cli.js +128 -64
  65. package/dist/esm/llm/cli.js.map +1 -1
  66. package/dist/esm/llm/errors.js +1 -1
  67. package/dist/esm/llm/errors.js.map +1 -1
  68. package/dist/esm/llm/generate-text.js +107 -98
  69. package/dist/esm/llm/generate-text.js.map +1 -1
  70. package/dist/esm/llm/google-models.js +17 -17
  71. package/dist/esm/llm/google-models.js.map +1 -1
  72. package/dist/esm/llm/html-to-markdown.js +3 -3
  73. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  74. package/dist/esm/llm/model-id.js +38 -16
  75. package/dist/esm/llm/model-id.js.map +1 -1
  76. package/dist/esm/llm/prompt.js +5 -5
  77. package/dist/esm/llm/prompt.js.map +1 -1
  78. package/dist/esm/llm/providers/anthropic.js +33 -33
  79. package/dist/esm/llm/providers/anthropic.js.map +1 -1
  80. package/dist/esm/llm/providers/google.js +19 -19
  81. package/dist/esm/llm/providers/google.js.map +1 -1
  82. package/dist/esm/llm/providers/models.js +30 -30
  83. package/dist/esm/llm/providers/models.js.map +1 -1
  84. package/dist/esm/llm/providers/openai.js +36 -35
  85. package/dist/esm/llm/providers/openai.js.map +1 -1
  86. package/dist/esm/llm/providers/shared.js +8 -8
  87. package/dist/esm/llm/providers/shared.js.map +1 -1
  88. package/dist/esm/llm/transcript-to-markdown.js +9 -5
  89. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  90. package/dist/esm/llm/usage.js +18 -18
  91. package/dist/esm/llm/usage.js.map +1 -1
  92. package/dist/esm/logging/daemon.js +21 -21
  93. package/dist/esm/logging/daemon.js.map +1 -1
  94. package/dist/esm/logging/ring-file.js +5 -5
  95. package/dist/esm/logging/ring-file.js.map +1 -1
  96. package/dist/esm/markitdown.js +21 -19
  97. package/dist/esm/markitdown.js.map +1 -1
  98. package/dist/esm/media-cache.js +251 -0
  99. package/dist/esm/media-cache.js.map +1 -0
  100. package/dist/esm/model-auto.js +175 -106
  101. package/dist/esm/model-auto.js.map +1 -1
  102. package/dist/esm/model-spec.js +52 -42
  103. package/dist/esm/model-spec.js.map +1 -1
  104. package/dist/esm/pricing/litellm.js +4 -4
  105. package/dist/esm/pricing/litellm.js.map +1 -1
  106. package/dist/esm/processes.js +2 -0
  107. package/dist/esm/processes.js.map +1 -0
  108. package/dist/esm/prompts/index.js +1 -1
  109. package/dist/esm/prompts/index.js.map +1 -1
  110. package/dist/esm/refresh-free.js +81 -81
  111. package/dist/esm/refresh-free.js.map +1 -1
  112. package/dist/esm/run/attachments.js +47 -44
  113. package/dist/esm/run/attachments.js.map +1 -1
  114. package/dist/esm/run/bird.js +125 -12
  115. package/dist/esm/run/bird.js.map +1 -1
  116. package/dist/esm/run/cache-state.js +7 -7
  117. package/dist/esm/run/cache-state.js.map +1 -1
  118. package/dist/esm/run/cli-fallback-state.js +45 -0
  119. package/dist/esm/run/cli-fallback-state.js.map +1 -0
  120. package/dist/esm/run/cli-preflight.js +40 -22
  121. package/dist/esm/run/cli-preflight.js.map +1 -1
  122. package/dist/esm/run/constants.js +12 -12
  123. package/dist/esm/run/constants.js.map +1 -1
  124. package/dist/esm/run/cookies/twitter.js +47 -47
  125. package/dist/esm/run/cookies/twitter.js.map +1 -1
  126. package/dist/esm/run/env.js +21 -15
  127. package/dist/esm/run/env.js.map +1 -1
  128. package/dist/esm/run/fetch-with-timeout.js +4 -4
  129. package/dist/esm/run/fetch-with-timeout.js.map +1 -1
  130. package/dist/esm/run/finish-line.js +78 -71
  131. package/dist/esm/run/finish-line.js.map +1 -1
  132. package/dist/esm/run/flows/asset/extract.js +70 -0
  133. package/dist/esm/run/flows/asset/extract.js.map +1 -0
  134. package/dist/esm/run/flows/asset/input.js +202 -37
  135. package/dist/esm/run/flows/asset/input.js.map +1 -1
  136. package/dist/esm/run/flows/asset/media-policy.js +3 -0
  137. package/dist/esm/run/flows/asset/media-policy.js.map +1 -0
  138. package/dist/esm/run/flows/asset/media.js +233 -0
  139. package/dist/esm/run/flows/asset/media.js.map +1 -0
  140. package/dist/esm/run/flows/asset/output.js +98 -0
  141. package/dist/esm/run/flows/asset/output.js.map +1 -0
  142. package/dist/esm/run/flows/asset/preprocess.js +79 -44
  143. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  144. package/dist/esm/run/flows/asset/summary.js +306 -89
  145. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  146. package/dist/esm/run/flows/url/extract.js +31 -31
  147. package/dist/esm/run/flows/url/extract.js.map +1 -1
  148. package/dist/esm/run/flows/url/flow.js +388 -82
  149. package/dist/esm/run/flows/url/flow.js.map +1 -1
  150. package/dist/esm/run/flows/url/markdown.js +61 -56
  151. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  152. package/dist/esm/run/flows/url/slides-output.js +487 -0
  153. package/dist/esm/run/flows/url/slides-output.js.map +1 -0
  154. package/dist/esm/run/flows/url/slides-text.js +628 -0
  155. package/dist/esm/run/flows/url/slides-text.js.map +1 -0
  156. package/dist/esm/run/flows/url/summary.js +493 -152
  157. package/dist/esm/run/flows/url/summary.js.map +1 -1
  158. package/dist/esm/run/format.js +10 -10
  159. package/dist/esm/run/format.js.map +1 -1
  160. package/dist/esm/run/help.js +179 -84
  161. package/dist/esm/run/help.js.map +1 -1
  162. package/dist/esm/run/logging.js +20 -12
  163. package/dist/esm/run/logging.js.map +1 -1
  164. package/dist/esm/run/markdown.js +12 -12
  165. package/dist/esm/run/markdown.js.map +1 -1
  166. package/dist/esm/run/media-cache-state.js +33 -0
  167. package/dist/esm/run/media-cache-state.js.map +1 -0
  168. package/dist/esm/run/model-attempts.js.map +1 -1
  169. package/dist/esm/run/openrouter.js +11 -11
  170. package/dist/esm/run/openrouter.js.map +1 -1
  171. package/dist/esm/run/progress.js +19 -1
  172. package/dist/esm/run/progress.js.map +1 -1
  173. package/dist/esm/run/run-config.js +16 -16
  174. package/dist/esm/run/run-config.js.map +1 -1
  175. package/dist/esm/run/run-context.js +2 -2
  176. package/dist/esm/run/run-context.js.map +1 -1
  177. package/dist/esm/run/run-env.js +55 -54
  178. package/dist/esm/run/run-env.js.map +1 -1
  179. package/dist/esm/run/run-input.js +3 -3
  180. package/dist/esm/run/run-input.js.map +1 -1
  181. package/dist/esm/run/run-metrics.js +16 -16
  182. package/dist/esm/run/run-metrics.js.map +1 -1
  183. package/dist/esm/run/run-models.js +28 -23
  184. package/dist/esm/run/run-models.js.map +1 -1
  185. package/dist/esm/run/run-output.js +3 -3
  186. package/dist/esm/run/run-output.js.map +1 -1
  187. package/dist/esm/run/run-settings.js +108 -21
  188. package/dist/esm/run/run-settings.js.map +1 -1
  189. package/dist/esm/run/run-stream.js +4 -4
  190. package/dist/esm/run/run-stream.js.map +1 -1
  191. package/dist/esm/run/runner.js +327 -100
  192. package/dist/esm/run/runner.js.map +1 -1
  193. package/dist/esm/run/slides-cli.js +226 -0
  194. package/dist/esm/run/slides-cli.js.map +1 -0
  195. package/dist/esm/run/slides-render.js +163 -0
  196. package/dist/esm/run/slides-render.js.map +1 -0
  197. package/dist/esm/run/stdin-temp-file.js +77 -0
  198. package/dist/esm/run/stdin-temp-file.js.map +1 -0
  199. package/dist/esm/run/stream-output.js +17 -10
  200. package/dist/esm/run/stream-output.js.map +1 -1
  201. package/dist/esm/run/streaming.js +16 -16
  202. package/dist/esm/run/streaming.js.map +1 -1
  203. package/dist/esm/run/summary-engine.js +89 -57
  204. package/dist/esm/run/summary-engine.js.map +1 -1
  205. package/dist/esm/run/summary-llm.js +3 -3
  206. package/dist/esm/run/summary-llm.js.map +1 -1
  207. package/dist/esm/run/terminal.js +4 -4
  208. package/dist/esm/run/terminal.js.map +1 -1
  209. package/dist/esm/run/tips.js +2 -2
  210. package/dist/esm/run/tips.js.map +1 -1
  211. package/dist/esm/run/transcriber-cli.js +148 -0
  212. package/dist/esm/run/transcriber-cli.js.map +1 -0
  213. package/dist/esm/run.js +1 -1
  214. package/dist/esm/run.js.map +1 -1
  215. package/dist/esm/shared/contracts.js +1 -1
  216. package/dist/esm/shared/contracts.js.map +1 -1
  217. package/dist/esm/shared/sse-events.js +16 -12
  218. package/dist/esm/shared/sse-events.js.map +1 -1
  219. package/dist/esm/shared/streaming-merge.js +3 -3
  220. package/dist/esm/shared/streaming-merge.js.map +1 -1
  221. package/dist/esm/slides/extract.js +1951 -0
  222. package/dist/esm/slides/extract.js.map +1 -0
  223. package/dist/esm/slides/index.js +4 -0
  224. package/dist/esm/slides/index.js.map +1 -0
  225. package/dist/esm/slides/settings.js +73 -0
  226. package/dist/esm/slides/settings.js.map +1 -0
  227. package/dist/esm/slides/store.js +111 -0
  228. package/dist/esm/slides/store.js.map +1 -0
  229. package/dist/esm/slides/types.js +2 -0
  230. package/dist/esm/slides/types.js.map +1 -0
  231. package/dist/esm/tty/format.js +13 -13
  232. package/dist/esm/tty/format.js.map +1 -1
  233. package/dist/esm/tty/osc-progress.js +22 -2
  234. package/dist/esm/tty/osc-progress.js.map +1 -1
  235. package/dist/esm/tty/progress/fetch-html.js +20 -16
  236. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  237. package/dist/esm/tty/progress/transcript.js +127 -68
  238. package/dist/esm/tty/progress/transcript.js.map +1 -1
  239. package/dist/esm/tty/spinner.js +21 -10
  240. package/dist/esm/tty/spinner.js.map +1 -1
  241. package/dist/esm/tty/theme.js +189 -0
  242. package/dist/esm/tty/theme.js.map +1 -0
  243. package/dist/esm/tty/website-progress.js +38 -34
  244. package/dist/esm/tty/website-progress.js.map +1 -1
  245. package/dist/esm/version.js +29 -29
  246. package/dist/esm/version.js.map +1 -1
  247. package/dist/types/cache.d.ts +19 -7
  248. package/dist/types/config.d.ts +71 -6
  249. package/dist/types/content/asset.d.ts +8 -6
  250. package/dist/types/content/index.d.ts +1 -1
  251. package/dist/types/costs.d.ts +3 -3
  252. package/dist/types/daemon/agent.d.ts +25 -0
  253. package/dist/types/daemon/auto-mode.d.ts +3 -3
  254. package/dist/types/daemon/chat.d.ts +10 -18
  255. package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
  256. package/dist/types/daemon/config.d.ts +2 -2
  257. package/dist/types/daemon/env-merge.d.ts +1 -1
  258. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  259. package/dist/types/daemon/flow-context.d.ts +24 -4
  260. package/dist/types/daemon/launchd.d.ts +12 -0
  261. package/dist/types/daemon/models.d.ts +6 -2
  262. package/dist/types/daemon/process-registry.d.ts +73 -0
  263. package/dist/types/daemon/schtasks.d.ts +4 -0
  264. package/dist/types/daemon/server.d.ts +2 -2
  265. package/dist/types/daemon/summarize-progress.d.ts +1 -1
  266. package/dist/types/daemon/summarize.d.ts +38 -7
  267. package/dist/types/daemon/systemd.d.ts +4 -0
  268. package/dist/types/firecrawl.d.ts +1 -1
  269. package/dist/types/flags.d.ts +12 -11
  270. package/dist/types/index.d.ts +4 -4
  271. package/dist/types/language.d.ts +1 -1
  272. package/dist/types/llm/attachments.d.ts +1 -1
  273. package/dist/types/llm/cli.d.ts +3 -3
  274. package/dist/types/llm/generate-text.d.ts +7 -7
  275. package/dist/types/llm/html-to-markdown.d.ts +3 -3
  276. package/dist/types/llm/model-id.d.ts +1 -1
  277. package/dist/types/llm/prompt.d.ts +2 -2
  278. package/dist/types/llm/providers/anthropic.d.ts +3 -3
  279. package/dist/types/llm/providers/google.d.ts +3 -3
  280. package/dist/types/llm/providers/models.d.ts +2 -2
  281. package/dist/types/llm/providers/openai.d.ts +4 -4
  282. package/dist/types/llm/providers/shared.d.ts +2 -2
  283. package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
  284. package/dist/types/llm/usage.d.ts +1 -1
  285. package/dist/types/logging/daemon.d.ts +4 -4
  286. package/dist/types/markitdown.d.ts +1 -1
  287. package/dist/types/media-cache.d.ts +22 -0
  288. package/dist/types/model-auto.d.ts +14 -4
  289. package/dist/types/model-spec.d.ts +10 -10
  290. package/dist/types/pricing/litellm.d.ts +1 -1
  291. package/dist/types/processes.d.ts +1 -0
  292. package/dist/types/prompts/index.d.ts +1 -1
  293. package/dist/types/run/attachments.d.ts +7 -7
  294. package/dist/types/run/bird.d.ts +7 -0
  295. package/dist/types/run/cache-state.d.ts +2 -2
  296. package/dist/types/run/cli-fallback-state.d.ts +6 -0
  297. package/dist/types/run/constants.d.ts +1 -1
  298. package/dist/types/run/cookies/twitter.d.ts +1 -1
  299. package/dist/types/run/env.d.ts +1 -1
  300. package/dist/types/run/finish-line.d.ts +7 -6
  301. package/dist/types/run/flows/asset/extract.d.ts +18 -0
  302. package/dist/types/run/flows/asset/input.d.ts +19 -3
  303. package/dist/types/run/flows/asset/media-policy.d.ts +2 -0
  304. package/dist/types/run/flows/asset/media.d.ts +21 -0
  305. package/dist/types/run/flows/asset/output.d.ts +42 -0
  306. package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
  307. package/dist/types/run/flows/asset/summary.d.ts +24 -16
  308. package/dist/types/run/flows/url/extract.d.ts +3 -2
  309. package/dist/types/run/flows/url/flow.d.ts +1 -1
  310. package/dist/types/run/flows/url/markdown.d.ts +6 -6
  311. package/dist/types/run/flows/url/slides-output.d.ts +66 -0
  312. package/dist/types/run/flows/url/slides-text.d.ts +87 -0
  313. package/dist/types/run/flows/url/summary.d.ts +18 -10
  314. package/dist/types/run/flows/url/types.d.ts +52 -21
  315. package/dist/types/run/format.d.ts +3 -3
  316. package/dist/types/run/help.d.ts +4 -1
  317. package/dist/types/run/logging.d.ts +3 -2
  318. package/dist/types/run/media-cache-state.d.ts +7 -0
  319. package/dist/types/run/model-attempts.d.ts +1 -1
  320. package/dist/types/run/progress.d.ts +2 -1
  321. package/dist/types/run/run-config.d.ts +4 -4
  322. package/dist/types/run/run-context.d.ts +3 -1
  323. package/dist/types/run/run-env.d.ts +3 -1
  324. package/dist/types/run/run-input.d.ts +2 -2
  325. package/dist/types/run/run-metrics.d.ts +3 -3
  326. package/dist/types/run/run-models.d.ts +3 -2
  327. package/dist/types/run/run-output.d.ts +1 -1
  328. package/dist/types/run/run-settings.d.ts +20 -5
  329. package/dist/types/run/run-stream.d.ts +2 -2
  330. package/dist/types/run/runner.d.ts +3 -2
  331. package/dist/types/run/slides-cli.d.ts +9 -0
  332. package/dist/types/run/slides-render.d.ts +30 -0
  333. package/dist/types/run/stdin-temp-file.d.ts +9 -0
  334. package/dist/types/run/stream-output.d.ts +3 -2
  335. package/dist/types/run/streaming.d.ts +4 -4
  336. package/dist/types/run/summary-engine.d.ts +22 -12
  337. package/dist/types/run/summary-llm.d.ts +5 -5
  338. package/dist/types/run/transcriber-cli.d.ts +8 -0
  339. package/dist/types/run/types.d.ts +4 -4
  340. package/dist/types/run.d.ts +1 -1
  341. package/dist/types/shared/contracts.d.ts +2 -2
  342. package/dist/types/shared/sse-events.d.ts +26 -6
  343. package/dist/types/slides/extract.d.ts +43 -0
  344. package/dist/types/slides/index.d.ts +5 -0
  345. package/dist/types/slides/settings.d.ts +20 -0
  346. package/dist/types/slides/store.d.ts +15 -0
  347. package/dist/types/slides/types.d.ts +40 -0
  348. package/dist/types/tty/osc-progress.d.ts +5 -5
  349. package/dist/types/tty/progress/fetch-html.d.ts +5 -3
  350. package/dist/types/tty/progress/transcript.d.ts +5 -3
  351. package/dist/types/tty/spinner.d.ts +3 -1
  352. package/dist/types/tty/theme.d.ts +44 -0
  353. package/dist/types/tty/website-progress.d.ts +5 -3
  354. package/dist/types/version.d.ts +1 -1
  355. package/docs/README.md +1 -1
  356. package/docs/_config.yml +26 -0
  357. package/docs/_layouts/default.html +60 -0
  358. package/docs/agent.md +367 -0
  359. package/docs/assets/site.css +748 -0
  360. package/docs/assets/site.js +72 -0
  361. package/docs/assets/summarize-cli.png +0 -0
  362. package/docs/assets/summarize-extension.png +0 -0
  363. package/docs/assets/youtube-slides.png +0 -0
  364. package/docs/cache.md +29 -3
  365. package/docs/chrome-extension.md +72 -16
  366. package/docs/cli.md +59 -13
  367. package/docs/config.md +109 -12
  368. package/docs/extract-only.md +10 -0
  369. package/docs/index.html +224 -0
  370. package/docs/index.md +25 -0
  371. package/docs/llm.md +18 -5
  372. package/docs/manual-tests.md +2 -0
  373. package/docs/media.md +6 -2
  374. package/docs/model-auto.md +3 -2
  375. package/docs/nvidia-onnx-transcription.md +55 -0
  376. package/docs/openai.md +1 -1
  377. package/docs/releasing.md +3 -0
  378. package/docs/site/404.html +4 -1
  379. package/docs/site/assets/site.css +399 -228
  380. package/docs/site/assets/site.js +46 -46
  381. package/docs/site/assets/summarize-cli.png +0 -0
  382. package/docs/site/assets/summarize-extension.png +0 -0
  383. package/docs/site/docs/chrome-extension.html +101 -0
  384. package/docs/site/docs/config.html +30 -8
  385. package/docs/site/docs/extract-only.html +17 -4
  386. package/docs/site/docs/firecrawl.html +13 -3
  387. package/docs/site/docs/index.html +40 -6
  388. package/docs/site/docs/llm.html +20 -5
  389. package/docs/site/docs/openai.html +19 -5
  390. package/docs/site/docs/website.html +30 -9
  391. package/docs/site/docs/youtube.html +13 -3
  392. package/docs/site/index.html +168 -85
  393. package/docs/slides.md +82 -0
  394. package/docs/smoketest.md +29 -20
  395. package/docs/timestamps.md +124 -0
  396. package/docs/website.md +13 -0
  397. package/docs/youtube.md +20 -0
  398. package/package.json +57 -48
@@ -1,13 +1,85 @@
1
- import fs from 'node:fs/promises';
2
- import { classifyUrl, loadLocalAsset, loadRemoteAsset, } from '../../../content/asset.js';
3
- import { formatBytes } from '../../../tty/format.js';
4
- import { startOscProgress } from '../../../tty/osc-progress.js';
5
- import { startSpinner } from '../../../tty/spinner.js';
6
- import { assertAssetMediaTypeSupported } from '../../attachments.js';
1
+ import { isDirectMediaExtension, isDirectMediaUrl } from "@steipete/summarize-core/content/url";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { classifyUrl, loadLocalAsset, loadRemoteAsset, } from "../../../content/asset.js";
5
+ import { formatBytes } from "../../../tty/format.js";
6
+ import { startOscProgress } from "../../../tty/osc-progress.js";
7
+ import { startSpinner } from "../../../tty/spinner.js";
8
+ import { createThemeRenderer, resolveThemeNameFromSources, resolveTrueColor, } from "../../../tty/theme.js";
9
+ import { assertAssetMediaTypeSupported } from "../../attachments.js";
10
+ /**
11
+ * Check if a media type should route through transcription.
12
+ */
13
+ function isTranscribableMediaType(mediaType) {
14
+ const normalized = mediaType.toLowerCase();
15
+ return normalized.startsWith("audio/") || normalized.startsWith("video/");
16
+ }
17
+ const createProgressTheme = (envForRun, enabled) => {
18
+ const env = envForRun ?? {};
19
+ return createThemeRenderer({
20
+ themeName: resolveThemeNameFromSources({ env: env.SUMMARIZE_THEME }),
21
+ enabled,
22
+ trueColor: resolveTrueColor(env),
23
+ });
24
+ };
25
+ const renderStatus = (theme, label, detail = "…") => `${theme.label(label)}${theme.dim(detail)}`;
26
+ const renderStatusWithMeta = (theme, label, meta, suffix = "…") => `${theme.label(label)} ${meta}${theme.dim(suffix)}`;
27
+ const renderModelSuffix = (theme, modelId) => `${theme.dim(" (model: ")}${theme.accent(modelId)}${theme.dim(")")}`;
28
+ function normalizePathForExtension(value) {
29
+ try {
30
+ return new URL(value).pathname;
31
+ }
32
+ catch {
33
+ return value.split(/[?#]/, 1)[0];
34
+ }
35
+ }
36
+ /**
37
+ * Check if a file extension indicates transcribable media.
38
+ * Used to route large audio/video files directly to the media handler
39
+ * which has a higher size limit (2GB vs 50MB).
40
+ */
41
+ export function isTranscribableExtension(filePath) {
42
+ if (isDirectMediaUrl(filePath))
43
+ return true;
44
+ const ext = path.extname(normalizePathForExtension(filePath));
45
+ return isDirectMediaExtension(ext);
46
+ }
47
+ function formatTranscriptionMeta({ filename, sizeLabel, dim, }) {
48
+ const details = sizeLabel ? `${sizeLabel}` : "";
49
+ return details ? `${filename} ${dim("(")}${details}${dim(")")}` : filename;
50
+ }
51
+ function setTranscribingSpinnerText({ spinner, theme, meta, modelId, }) {
52
+ const modelLabel = modelId ? renderModelSuffix(theme, modelId) : "";
53
+ spinner.setText(renderStatusWithMeta(theme, "Transcribing", `${meta}${modelLabel}`));
54
+ }
55
+ async function runMediaTranscription({ ctx, sourceKind, sourceLabel, filename, sizeLabel, spinner, }) {
56
+ const theme = createProgressTheme(ctx.envForRun, ctx.progressEnabled);
57
+ const dim = (value) => theme.dim(value);
58
+ const meta = formatTranscriptionMeta({ filename, sizeLabel, dim });
59
+ if (ctx.progressEnabled) {
60
+ setTranscribingSpinnerText({ spinner, theme, meta });
61
+ }
62
+ await ctx.summarizeMediaFile?.({
63
+ sourceKind,
64
+ sourceLabel,
65
+ attachment: {
66
+ kind: "file",
67
+ filename,
68
+ mediaType: "audio/mpeg", // Will be detected properly by summarizeMediaFile
69
+ bytes: new Uint8Array(0), // Placeholder - summarizeMediaFile reads from path directly
70
+ },
71
+ onModelChosen: (modelId) => {
72
+ if (!ctx.progressEnabled)
73
+ return;
74
+ setTranscribingSpinnerText({ spinner, theme, meta, modelId });
75
+ },
76
+ });
77
+ }
7
78
  export async function handleFileInput(ctx, inputTarget) {
8
- if (inputTarget.kind !== 'file')
79
+ if (inputTarget.kind !== "file")
9
80
  return false;
10
81
  let sizeLabel = null;
82
+ const theme = createProgressTheme(ctx.envForRun, ctx.progressEnabled);
11
83
  try {
12
84
  const stat = await fs.stat(inputTarget.filePath);
13
85
  if (stat.isFile()) {
@@ -18,16 +90,17 @@ export async function handleFileInput(ctx, inputTarget) {
18
90
  // Ignore size preflight; loadLocalAsset will throw a user-friendly error if needed.
19
91
  }
20
92
  const stopOscProgress = startOscProgress({
21
- label: 'Loading file',
93
+ label: "Loading file",
22
94
  indeterminate: true,
23
95
  env: ctx.env,
24
96
  isTty: ctx.progressEnabled,
25
97
  write: (data) => ctx.stderr.write(data),
26
98
  });
27
99
  const spinner = startSpinner({
28
- text: sizeLabel ? `Loading file (${sizeLabel})…` : 'Loading file',
100
+ text: renderStatus(theme, "Loading file", sizeLabel ? ` (${sizeLabel})…` : ""),
29
101
  enabled: ctx.progressEnabled,
30
102
  stream: ctx.stderr,
103
+ color: theme.palette.spinner,
31
104
  });
32
105
  let stopped = false;
33
106
  const stopProgress = () => {
@@ -37,21 +110,42 @@ export async function handleFileInput(ctx, inputTarget) {
37
110
  spinner.stopAndClear();
38
111
  stopOscProgress();
39
112
  };
40
- const clearProgressLine = () => {
41
- stopProgress();
113
+ const pauseProgressLine = () => {
114
+ spinner.pause();
115
+ return () => spinner.resume();
42
116
  };
43
- ctx.setClearProgressBeforeStdout(clearProgressLine);
117
+ ctx.setClearProgressBeforeStdout(pauseProgressLine);
44
118
  try {
119
+ // Check if file looks like transcribable media by extension.
120
+ // If so, route directly to summarizeMediaFile which has a higher size limit (2GB).
121
+ // This avoids the 50MB limit in loadLocalAsset for audio/video files.
122
+ if (isTranscribableExtension(inputTarget.filePath) && ctx.summarizeMediaFile) {
123
+ const filename = path.basename(inputTarget.filePath);
124
+ await runMediaTranscription({
125
+ ctx,
126
+ sourceKind: "file",
127
+ sourceLabel: inputTarget.filePath,
128
+ filename,
129
+ sizeLabel,
130
+ spinner,
131
+ });
132
+ return true;
133
+ }
45
134
  const loaded = await loadLocalAsset({ filePath: inputTarget.filePath });
46
135
  assertAssetMediaTypeSupported({ attachment: loaded.attachment, sizeLabel });
136
+ const isTranscribable = isTranscribableMediaType(loaded.attachment.mediaType);
137
+ const handler = isTranscribable && ctx.summarizeMediaFile ? ctx.summarizeMediaFile : ctx.summarizeAsset;
138
+ const dim = (value) => theme.dim(value);
47
139
  if (ctx.progressEnabled) {
48
140
  const mt = loaded.attachment.mediaType;
49
141
  const name = loaded.attachment.filename;
50
142
  const details = sizeLabel ? `${mt}, ${sizeLabel}` : mt;
51
- spinner.setText(name ? `Summarizing ${name} (${details})…` : `Summarizing ${details}…`);
143
+ const action = isTranscribable ? "Transcribing" : "Summarizing";
144
+ const meta = name ? `${name} ${dim("(")}${details}${dim(")")}` : details;
145
+ spinner.setText(renderStatusWithMeta(theme, action, meta));
52
146
  }
53
- await ctx.summarizeAsset({
54
- sourceKind: 'file',
147
+ await handler({
148
+ sourceKind: "file",
55
149
  sourceLabel: loaded.sourceLabel,
56
150
  attachment: loaded.attachment,
57
151
  onModelChosen: (modelId) => {
@@ -60,35 +154,91 @@ export async function handleFileInput(ctx, inputTarget) {
60
154
  const mt = loaded.attachment.mediaType;
61
155
  const name = loaded.attachment.filename;
62
156
  const details = sizeLabel ? `${mt}, ${sizeLabel}` : mt;
63
- spinner.setText(name
64
- ? `Summarizing ${name} (${details}, model: ${modelId})…`
65
- : `Summarizing ${details} (model: ${modelId})…`);
157
+ const meta = name ? `${name} ${dim("(")}${details}${dim(")")}` : details;
158
+ const modelLabel = renderModelSuffix(theme, modelId);
159
+ spinner.setText(renderStatusWithMeta(theme, "Summarizing", `${meta}${modelLabel}`));
66
160
  },
67
161
  });
68
162
  return true;
69
163
  }
70
164
  finally {
71
- ctx.clearProgressIfCurrent(clearProgressLine);
165
+ ctx.clearProgressIfCurrent(pauseProgressLine);
72
166
  stopProgress();
73
167
  }
74
168
  }
75
- export async function handleUrlAsset(ctx, url, isYoutubeUrl) {
169
+ export async function withUrlAsset(ctx, url, isYoutubeUrl, handler) {
76
170
  if (!url || isYoutubeUrl)
77
171
  return false;
172
+ // For remote media URLs (by extension), route directly to summarizeMediaFile.
173
+ // This avoids the 50MB limit in loadRemoteAsset - yt-dlp handles streaming download.
174
+ if (isTranscribableExtension(url) && ctx.summarizeMediaFile) {
175
+ const theme = createProgressTheme(ctx.envForRun, ctx.progressEnabled);
176
+ const filename = (() => {
177
+ try {
178
+ return path.basename(new URL(url).pathname) || "media";
179
+ }
180
+ catch {
181
+ return "media";
182
+ }
183
+ })();
184
+ const stopOscProgress = startOscProgress({
185
+ label: "Transcribing media",
186
+ indeterminate: true,
187
+ env: ctx.env,
188
+ isTty: ctx.progressEnabled,
189
+ write: (data) => ctx.stderr.write(data),
190
+ });
191
+ const spinner = startSpinner({
192
+ text: renderStatusWithMeta(theme, "Transcribing", filename),
193
+ enabled: ctx.progressEnabled,
194
+ stream: ctx.stderr,
195
+ color: theme.palette.spinner,
196
+ });
197
+ let stopped = false;
198
+ const stopProgress = () => {
199
+ if (stopped)
200
+ return;
201
+ stopped = true;
202
+ spinner.stopAndClear();
203
+ stopOscProgress();
204
+ };
205
+ const pauseProgressLine = () => {
206
+ spinner.pause();
207
+ return () => spinner.resume();
208
+ };
209
+ ctx.setClearProgressBeforeStdout(pauseProgressLine);
210
+ try {
211
+ await runMediaTranscription({
212
+ ctx,
213
+ sourceKind: "asset-url",
214
+ sourceLabel: url,
215
+ filename,
216
+ sizeLabel: null,
217
+ spinner,
218
+ });
219
+ return true;
220
+ }
221
+ finally {
222
+ ctx.clearProgressIfCurrent(pauseProgressLine);
223
+ stopProgress();
224
+ }
225
+ }
78
226
  const kind = await classifyUrl({ url, fetchImpl: ctx.trackedFetch, timeoutMs: ctx.timeoutMs });
79
- if (kind.kind !== 'asset')
227
+ if (kind.kind !== "asset")
80
228
  return false;
229
+ const theme = createProgressTheme(ctx.envForRun, ctx.progressEnabled);
81
230
  const stopOscProgress = startOscProgress({
82
- label: 'Downloading file',
231
+ label: "Downloading file",
83
232
  indeterminate: true,
84
233
  env: ctx.env,
85
234
  isTty: ctx.progressEnabled,
86
235
  write: (data) => ctx.stderr.write(data),
87
236
  });
88
237
  const spinner = startSpinner({
89
- text: 'Downloading file…',
238
+ text: renderStatus(theme, "Downloading file"),
90
239
  enabled: ctx.progressEnabled,
91
240
  stream: ctx.stderr,
241
+ color: theme.palette.spinner,
92
242
  });
93
243
  let stopped = false;
94
244
  const stopProgress = () => {
@@ -98,14 +248,19 @@ export async function handleUrlAsset(ctx, url, isYoutubeUrl) {
98
248
  spinner.stopAndClear();
99
249
  stopOscProgress();
100
250
  };
101
- const clearProgressLine = () => {
102
- stopProgress();
251
+ const pauseProgressLine = () => {
252
+ spinner.pause();
253
+ return () => spinner.resume();
103
254
  };
104
- ctx.setClearProgressBeforeStdout(clearProgressLine);
255
+ ctx.setClearProgressBeforeStdout(pauseProgressLine);
105
256
  try {
106
257
  const loaded = await (async () => {
107
258
  try {
108
- return await loadRemoteAsset({ url, fetchImpl: ctx.trackedFetch, timeoutMs: ctx.timeoutMs });
259
+ return await loadRemoteAsset({
260
+ url,
261
+ fetchImpl: ctx.trackedFetch,
262
+ timeoutMs: ctx.timeoutMs,
263
+ });
109
264
  }
110
265
  catch (error) {
111
266
  if (error instanceof Error && /HTML/i.test(error.message)) {
@@ -117,23 +272,33 @@ export async function handleUrlAsset(ctx, url, isYoutubeUrl) {
117
272
  if (!loaded)
118
273
  return false;
119
274
  assertAssetMediaTypeSupported({ attachment: loaded.attachment, sizeLabel: null });
120
- if (ctx.progressEnabled)
121
- spinner.setText('Summarizing…');
275
+ await handler({ loaded, spinner, clearProgressLine: pauseProgressLine });
276
+ return true;
277
+ }
278
+ finally {
279
+ ctx.clearProgressIfCurrent(pauseProgressLine);
280
+ stopProgress();
281
+ }
282
+ }
283
+ export async function handleUrlAsset(ctx, url, isYoutubeUrl) {
284
+ // Media URL handling is now in withUrlAsset
285
+ return withUrlAsset(ctx, url, isYoutubeUrl, async ({ loaded, spinner }) => {
286
+ const theme = createProgressTheme(ctx.envForRun, ctx.progressEnabled);
287
+ const dim = (value) => theme.dim(value);
288
+ if (ctx.progressEnabled) {
289
+ spinner.setText(renderStatusWithMeta(theme, "Summarizing", dim("file")));
290
+ }
122
291
  await ctx.summarizeAsset({
123
- sourceKind: 'asset-url',
292
+ sourceKind: "asset-url",
124
293
  sourceLabel: loaded.sourceLabel,
125
294
  attachment: loaded.attachment,
126
295
  onModelChosen: (modelId) => {
127
296
  if (!ctx.progressEnabled)
128
297
  return;
129
- spinner.setText(`Summarizing (model: ${modelId})…`);
298
+ const modelLabel = renderModelSuffix(theme, modelId);
299
+ spinner.setText(renderStatusWithMeta(theme, "Summarizing", `${dim("file")}${modelLabel}`));
130
300
  },
131
301
  });
132
- return true;
133
- }
134
- finally {
135
- ctx.clearProgressIfCurrent(clearProgressLine);
136
- stopProgress();
137
- }
302
+ });
138
303
  }
139
304
  //# sourceMappingURL=input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../src/run/flows/asset/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../src/run/flows/asset/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export const MAX_LOCAL_MEDIA_BYTES = 2 * 1024 * 1024 * 1024;
2
+ export const MAX_LOCAL_MEDIA_LABEL = "2 GB";
3
+ //# sourceMappingURL=media-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-policy.js","sourceRoot":"","sources":["../../../../../src/run/flows/asset/media-policy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Media file transcription handler for local audio/video files.
3
+ * Phase 2: Transcript provider integration
4
+ * Phase 2.2: Local file path handling for transcript caching
5
+ */
6
+ import { statSync } from "node:fs";
7
+ import { isAbsolute, resolve as resolvePath } from "node:path";
8
+ import { pathToFileURL } from "node:url";
9
+ import { createLinkPreviewClient } from "../../../content/index.js";
10
+ import { createFirecrawlScraper } from "../../../firecrawl.js";
11
+ import { readTweetWithBird } from "../../bird.js";
12
+ import { resolveTwitterCookies } from "../../cookies/twitter.js";
13
+ import { hasBirdCli } from "../../env.js";
14
+ import { writeVerbose } from "../../logging.js";
15
+ import { MAX_LOCAL_MEDIA_BYTES, MAX_LOCAL_MEDIA_LABEL } from "./media-policy.js";
16
+ /**
17
+ * Get file modification time for cache invalidation support.
18
+ * Returns null if the path is not a local file or file doesn't exist.
19
+ */
20
+ function getFileModificationTime(filePath) {
21
+ // Only support absolute local file paths
22
+ if (!isAbsolute(filePath)) {
23
+ return null;
24
+ }
25
+ try {
26
+ const stats = statSync(filePath);
27
+ return stats.mtimeMs ?? null;
28
+ }
29
+ catch {
30
+ // File doesn't exist or can't be accessed
31
+ return null;
32
+ }
33
+ }
34
+ /**
35
+ * Handler for local audio/video files.
36
+ *
37
+ * Phase 2 Implementation:
38
+ * 1. Validates transcription provider availability
39
+ * 2. Creates LinkPreviewClient with necessary dependencies
40
+ * 3. Calls client.fetchLinkContent to trigger transcription
41
+ * 4. Converts transcript text to AssetAttachment
42
+ * 5. Calls summarizeAsset with the transcript
43
+ *
44
+ * Phase 2.2 Enhancement:
45
+ * - Captures file modification time for cache invalidation
46
+ * - Passes fileMtime to transcript cache for local file support
47
+ */
48
+ export async function summarizeMediaFile(ctx, args) {
49
+ // Check if basic transcription setup is available
50
+ const groqKey = ctx.env.GROQ_API_KEY;
51
+ const openaiKey = ctx.env.OPENAI_API_KEY;
52
+ const falKey = ctx.env.FAL_KEY;
53
+ // Helper to check if a binary is available on PATH
54
+ const isBinaryAvailable = async (binary) => {
55
+ const { spawn } = await import("node:child_process");
56
+ return new Promise((resolve) => {
57
+ const proc = spawn(binary, ["--help"], {
58
+ stdio: ["ignore", "ignore", "ignore"],
59
+ env: ctx.env,
60
+ });
61
+ proc.on("error", () => resolve(false));
62
+ proc.on("close", (code) => resolve(code === 0));
63
+ });
64
+ };
65
+ // Check for yt-dlp: either via env var or on PATH
66
+ const ytDlpPath = ctx.env.YT_DLP_PATH || ((await isBinaryAvailable("yt-dlp")) ? "yt-dlp" : null);
67
+ // Check for whisper.cpp: either via env var or by checking if whisper-cli is on PATH
68
+ const hasLocalWhisper = ctx.env.SUMMARIZE_WHISPER_CPP_BINARY
69
+ ? true
70
+ : await isBinaryAvailable("whisper-cli");
71
+ const hasAnyTranscriptionProvider = groqKey || openaiKey || falKey || hasLocalWhisper;
72
+ if (!hasAnyTranscriptionProvider) {
73
+ throw new Error(`Media file transcription requires one of the following:
74
+
75
+ 1. Groq Whisper (fast, free tier):
76
+ Set GROQ_API_KEY=gsk_...
77
+
78
+ 2. OpenAI Whisper:
79
+ Set OPENAI_API_KEY=sk-...
80
+
81
+ 3. FAL Whisper:
82
+ Set FAL_KEY=...
83
+
84
+ 4. Local whisper.cpp (recommended, free):
85
+ brew install ggerganov/ggerganov/whisper-cpp
86
+ Ensure whisper-cli is on your PATH (or set SUMMARIZE_WHISPER_CPP_BINARY)
87
+
88
+ See: https://github.com/openai/whisper for setup details`);
89
+ }
90
+ const isHttpUrl = (value) => {
91
+ try {
92
+ const parsed = new URL(value);
93
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
94
+ }
95
+ catch {
96
+ return false;
97
+ }
98
+ };
99
+ // For URLs, skip local file validation - yt-dlp will handle the download
100
+ const isUrl = args.sourceKind === "asset-url" || isHttpUrl(args.sourceLabel);
101
+ let absolutePath;
102
+ let fileMtime = null;
103
+ if (isUrl) {
104
+ // For URLs, use the URL directly - no local path resolution needed
105
+ absolutePath = args.sourceLabel;
106
+ }
107
+ else {
108
+ absolutePath = resolvePath(args.sourceLabel);
109
+ // Get file modification time for cache invalidation (after path resolution)
110
+ fileMtime = getFileModificationTime(absolutePath);
111
+ // Validate file size before attempting transcription
112
+ try {
113
+ const stats = statSync(absolutePath);
114
+ const fileSizeBytes = stats.size;
115
+ const maxSizeBytes = MAX_LOCAL_MEDIA_BYTES;
116
+ if (fileSizeBytes === 0) {
117
+ throw new Error("Media file is empty (0 bytes). Please provide a valid audio/video file.");
118
+ }
119
+ if (fileSizeBytes > maxSizeBytes) {
120
+ const fileSizeMB = Math.round(fileSizeBytes / (1024 * 1024));
121
+ throw new Error(`Media file is too large (${fileSizeMB} MB). Maximum supported size is ${MAX_LOCAL_MEDIA_LABEL}.`);
122
+ }
123
+ }
124
+ catch (error) {
125
+ if (error instanceof Error &&
126
+ (error.message.includes("empty") || error.message.includes("large"))) {
127
+ throw error; // Re-throw our validation errors
128
+ }
129
+ // For other statSync errors (e.g., file not found), let them bubble up
130
+ throw new Error(`Unable to access media file: ${error instanceof Error ? error.message : "Unknown error"}`);
131
+ }
132
+ }
133
+ const cacheMode = ctx.cache.mode;
134
+ // Create Firecrawl scraper if configured
135
+ const firecrawlScraper = ctx.apiStatus.firecrawlConfigured && ctx.env.FIRECRAWL_API_KEY
136
+ ? createFirecrawlScraper({
137
+ apiKey: ctx.env.FIRECRAWL_API_KEY,
138
+ fetchImpl: ctx.trackedFetch,
139
+ })
140
+ : null;
141
+ // Create reader for bird tweets (for completeness, not used for media)
142
+ const readTweetWithBirdClient = hasBirdCli(ctx.env)
143
+ ? ({ url, timeoutMs }) => readTweetWithBird({ url, timeoutMs, env: ctx.env })
144
+ : null;
145
+ // Create link preview client for transcript resolution
146
+ const transcriptCache = cacheMode === "default" ? (ctx.cache.store?.transcriptCache ?? null) : null;
147
+ const client = createLinkPreviewClient({
148
+ env: ctx.envForRun,
149
+ apifyApiToken: ctx.apiStatus.apifyToken,
150
+ ytDlpPath: ytDlpPath,
151
+ transcription: {
152
+ env: ctx.envForRun,
153
+ falApiKey: falKey,
154
+ groqApiKey: groqKey,
155
+ openaiApiKey: openaiKey,
156
+ },
157
+ scrapeWithFirecrawl: firecrawlScraper,
158
+ convertHtmlToMarkdown: null, // Not needed for media
159
+ readTweetWithBird: readTweetWithBirdClient,
160
+ resolveTwitterCookies: async (_args) => {
161
+ const res = await resolveTwitterCookies({ env: ctx.env });
162
+ return {
163
+ cookiesFromBrowser: res.cookies.cookiesFromBrowser,
164
+ source: res.cookies.source,
165
+ warnings: res.warnings,
166
+ };
167
+ },
168
+ fetch: ctx.trackedFetch,
169
+ transcriptCache,
170
+ mediaCache: ctx.mediaCache ?? null,
171
+ onProgress: (_event) => {
172
+ // Could update progress here if needed
173
+ // For now, silent transcription
174
+ },
175
+ });
176
+ try {
177
+ // For URLs, use directly. For local files, convert to file:// URL.
178
+ // yt-dlp can handle both http(s) URLs and file:// URLs.
179
+ const fileUrl = isUrl ? absolutePath : pathToFileURL(absolutePath).href;
180
+ // Fetch the link content (will trigger transcription for media)
181
+ // Using file:// URL ensures the provider chain can handle local files properly
182
+ const extracted = await client.fetchLinkContent(fileUrl, {
183
+ timeoutMs: ctx.timeoutMs,
184
+ cacheMode,
185
+ youtubeTranscript: "auto", // Not used for local files, but set for completeness
186
+ mediaTranscript: "prefer", // Prefer transcription for media files
187
+ transcriptTimestamps: false,
188
+ fileMtime, // Include file modification time for cache invalidation
189
+ });
190
+ // Check if we got a transcript
191
+ if (!extracted.content || extracted.content.trim().length === 0) {
192
+ throw new Error(`Failed to transcribe media file. Check that:
193
+ - Audio/video format is supported (MP3, WAV, M4A, OGG, FLAC, MP4, MOV, WEBM)
194
+ - Transcription provider is configured
195
+ - File is readable
196
+ - Media file is not corrupted`);
197
+ }
198
+ // Create a text-based attachment from the transcript
199
+ const filename = args.sourceLabel.split("/").pop() ?? "media";
200
+ const transcriptAttachment = {
201
+ mediaType: "text/plain",
202
+ filename: `${filename}.transcript.txt`,
203
+ kind: "file",
204
+ bytes: new TextEncoder().encode(extracted.content),
205
+ };
206
+ writeVerbose(ctx.stderr, ctx.verbose, `transcription done media file: ${extracted.diagnostics?.transcript?.provider ?? "unknown"}`, false, ctx.envForRun);
207
+ // If extract mode, output the transcript directly without LLM summarization
208
+ if (ctx.extractMode) {
209
+ ctx.clearProgressForStdout();
210
+ ctx.stdout.write(extracted.content);
211
+ if (!extracted.content.endsWith("\n")) {
212
+ ctx.stdout.write("\n");
213
+ }
214
+ return;
215
+ }
216
+ // Call the standard asset summarization with the transcript
217
+ const { summarizeAsset } = await import("./summary.js");
218
+ await summarizeAsset(ctx, {
219
+ sourceKind: "file",
220
+ sourceLabel: `${args.sourceLabel} (transcript)`,
221
+ attachment: transcriptAttachment,
222
+ onModelChosen: args.onModelChosen,
223
+ });
224
+ }
225
+ catch (error) {
226
+ // Re-throw with better context for transcription errors
227
+ if (error instanceof Error && error.message.includes("transcribe")) {
228
+ throw error;
229
+ }
230
+ throw new Error(`Transcription failed: ${error instanceof Error ? error.message : String(error)}`);
231
+ }
232
+ }
233
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../../../src/run/flows/asset/media.ts"],"names":[],"mappings":"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"}