@steipete/summarize 0.11.1 → 0.13.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 (427) hide show
  1. package/CHANGELOG.md +73 -1
  2. package/README.md +102 -32
  3. package/dist/cli.js +1 -1
  4. package/dist/esm/cache-keys.js +83 -0
  5. package/dist/esm/cache-keys.js.map +1 -0
  6. package/dist/esm/cache-slides-cleanup.js +47 -0
  7. package/dist/esm/cache-slides-cleanup.js.map +1 -0
  8. package/dist/esm/cache.js +15 -92
  9. package/dist/esm/cache.js.map +1 -1
  10. package/dist/esm/config/env.js +49 -0
  11. package/dist/esm/config/env.js.map +1 -0
  12. package/dist/esm/config/model.js +193 -0
  13. package/dist/esm/config/model.js.map +1 -0
  14. package/dist/esm/config/parse-helpers.js +55 -0
  15. package/dist/esm/config/parse-helpers.js.map +1 -0
  16. package/dist/esm/config/read.js +83 -0
  17. package/dist/esm/config/read.js.map +1 -0
  18. package/dist/esm/config/sections.js +472 -0
  19. package/dist/esm/config/sections.js.map +1 -0
  20. package/dist/esm/config/types.js +2 -0
  21. package/dist/esm/config/types.js.map +1 -0
  22. package/dist/esm/config.js +24 -807
  23. package/dist/esm/config.js.map +1 -1
  24. package/dist/esm/content/asset.js +2 -2
  25. package/dist/esm/content/asset.js.map +1 -1
  26. package/dist/esm/costs.js.map +1 -1
  27. package/dist/esm/daemon/agent-model.js +283 -0
  28. package/dist/esm/daemon/agent-model.js.map +1 -0
  29. package/dist/esm/daemon/agent-request.js +87 -0
  30. package/dist/esm/daemon/agent-request.js.map +1 -0
  31. package/dist/esm/daemon/agent.js +42 -243
  32. package/dist/esm/daemon/agent.js.map +1 -1
  33. package/dist/esm/daemon/chat.js +118 -9
  34. package/dist/esm/daemon/chat.js.map +1 -1
  35. package/dist/esm/daemon/cli.js +121 -9
  36. package/dist/esm/daemon/cli.js.map +1 -1
  37. package/dist/esm/daemon/config.js +65 -9
  38. package/dist/esm/daemon/config.js.map +1 -1
  39. package/dist/esm/daemon/env-snapshot.js +6 -0
  40. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  41. package/dist/esm/daemon/flow-context.js +84 -74
  42. package/dist/esm/daemon/flow-context.js.map +1 -1
  43. package/dist/esm/daemon/models.js +26 -0
  44. package/dist/esm/daemon/models.js.map +1 -1
  45. package/dist/esm/daemon/process-registry.js.map +1 -1
  46. package/dist/esm/daemon/schtasks.js +101 -5
  47. package/dist/esm/daemon/schtasks.js.map +1 -1
  48. package/dist/esm/daemon/server-admin-routes.js +134 -0
  49. package/dist/esm/daemon/server-admin-routes.js.map +1 -0
  50. package/dist/esm/daemon/server-agent-route.js +104 -0
  51. package/dist/esm/daemon/server-agent-route.js.map +1 -0
  52. package/dist/esm/daemon/server-http.js +89 -0
  53. package/dist/esm/daemon/server-http.js.map +1 -0
  54. package/dist/esm/daemon/server-session-routes.js +209 -0
  55. package/dist/esm/daemon/server-session-routes.js.map +1 -0
  56. package/dist/esm/daemon/server-session.js +118 -0
  57. package/dist/esm/daemon/server-session.js.map +1 -0
  58. package/dist/esm/daemon/server-sse.js +28 -0
  59. package/dist/esm/daemon/server-sse.js.map +1 -0
  60. package/dist/esm/daemon/server-summarize-execution.js +357 -0
  61. package/dist/esm/daemon/server-summarize-execution.js.map +1 -0
  62. package/dist/esm/daemon/server-summarize-request.js +119 -0
  63. package/dist/esm/daemon/server-summarize-request.js.map +1 -0
  64. package/dist/esm/daemon/server.js +79 -1121
  65. package/dist/esm/daemon/server.js.map +1 -1
  66. package/dist/esm/daemon/summarize-progress.js +1 -1
  67. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  68. package/dist/esm/daemon/summarize.js.map +1 -1
  69. package/dist/esm/daemon/windows-container.js +21 -0
  70. package/dist/esm/daemon/windows-container.js.map +1 -0
  71. package/dist/esm/llm/cli-exec.js +75 -0
  72. package/dist/esm/llm/cli-exec.js.map +1 -0
  73. package/dist/esm/llm/cli-provider-output.js +415 -0
  74. package/dist/esm/llm/cli-provider-output.js.map +1 -0
  75. package/dist/esm/llm/cli.js +97 -218
  76. package/dist/esm/llm/cli.js.map +1 -1
  77. package/dist/esm/llm/generate-text-document.js +109 -0
  78. package/dist/esm/llm/generate-text-document.js.map +1 -0
  79. package/dist/esm/llm/generate-text-shared.js +121 -0
  80. package/dist/esm/llm/generate-text-shared.js.map +1 -0
  81. package/dist/esm/llm/generate-text-stream.js +291 -0
  82. package/dist/esm/llm/generate-text-stream.js.map +1 -0
  83. package/dist/esm/llm/generate-text.js +172 -480
  84. package/dist/esm/llm/generate-text.js.map +1 -1
  85. package/dist/esm/llm/github-models.js +45 -0
  86. package/dist/esm/llm/github-models.js.map +1 -0
  87. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  88. package/dist/esm/llm/model-id.js +37 -20
  89. package/dist/esm/llm/model-id.js.map +1 -1
  90. package/dist/esm/llm/provider-capabilities.js +2 -0
  91. package/dist/esm/llm/provider-capabilities.js.map +1 -0
  92. package/dist/esm/llm/provider-profile.js +184 -0
  93. package/dist/esm/llm/provider-profile.js.map +1 -0
  94. package/dist/esm/llm/providers/google.js +42 -5
  95. package/dist/esm/llm/providers/google.js.map +1 -1
  96. package/dist/esm/llm/providers/models.js +19 -1
  97. package/dist/esm/llm/providers/models.js.map +1 -1
  98. package/dist/esm/llm/providers/openai.js +243 -5
  99. package/dist/esm/llm/providers/openai.js.map +1 -1
  100. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  101. package/dist/esm/media-cache.js +3 -0
  102. package/dist/esm/media-cache.js.map +1 -1
  103. package/dist/esm/model-auto-cli.js +91 -0
  104. package/dist/esm/model-auto-cli.js.map +1 -0
  105. package/dist/esm/model-auto-rules.js +86 -0
  106. package/dist/esm/model-auto-rules.js.map +1 -0
  107. package/dist/esm/model-auto.js +10 -245
  108. package/dist/esm/model-auto.js.map +1 -1
  109. package/dist/esm/model-spec.js +62 -19
  110. package/dist/esm/model-spec.js.map +1 -1
  111. package/dist/esm/refresh-free.js +1 -1
  112. package/dist/esm/refresh-free.js.map +1 -1
  113. package/dist/esm/run/attachments.js +1 -1
  114. package/dist/esm/run/attachments.js.map +1 -1
  115. package/dist/esm/run/bird/exec.js +23 -0
  116. package/dist/esm/run/bird/exec.js.map +1 -0
  117. package/dist/esm/run/bird/media.js +171 -0
  118. package/dist/esm/run/bird/media.js.map +1 -0
  119. package/dist/esm/run/bird/parse.js +82 -0
  120. package/dist/esm/run/bird/parse.js.map +1 -0
  121. package/dist/esm/run/bird/types.js +2 -0
  122. package/dist/esm/run/bird/types.js.map +1 -0
  123. package/dist/esm/run/bird.js +86 -144
  124. package/dist/esm/run/bird.js.map +1 -1
  125. package/dist/esm/run/cache-state.js.map +1 -1
  126. package/dist/esm/run/cli-fallback-state.js +6 -1
  127. package/dist/esm/run/cli-fallback-state.js.map +1 -1
  128. package/dist/esm/run/constants.js +2 -1
  129. package/dist/esm/run/constants.js.map +1 -1
  130. package/dist/esm/run/env.js +24 -3
  131. package/dist/esm/run/env.js.map +1 -1
  132. package/dist/esm/run/finish-line-labels.js +76 -0
  133. package/dist/esm/run/finish-line-labels.js.map +1 -0
  134. package/dist/esm/run/finish-line-lengths.js +96 -0
  135. package/dist/esm/run/finish-line-lengths.js.map +1 -0
  136. package/dist/esm/run/finish-line.js +3 -169
  137. package/dist/esm/run/finish-line.js.map +1 -1
  138. package/dist/esm/run/flows/asset/extract.js.map +1 -1
  139. package/dist/esm/run/flows/asset/input.js +1 -1
  140. package/dist/esm/run/flows/asset/input.js.map +1 -1
  141. package/dist/esm/run/flows/asset/media.js +19 -10
  142. package/dist/esm/run/flows/asset/media.js.map +1 -1
  143. package/dist/esm/run/flows/asset/output.js.map +1 -1
  144. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  145. package/dist/esm/run/flows/asset/summary-attempts.js +117 -0
  146. package/dist/esm/run/flows/asset/summary-attempts.js.map +1 -0
  147. package/dist/esm/run/flows/asset/summary.js +30 -107
  148. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  149. package/dist/esm/run/flows/url/extract.js +7 -4
  150. package/dist/esm/run/flows/url/extract.js.map +1 -1
  151. package/dist/esm/run/flows/url/extraction-session.js +174 -0
  152. package/dist/esm/run/flows/url/extraction-session.js.map +1 -0
  153. package/dist/esm/run/flows/url/fetch-options.js +32 -0
  154. package/dist/esm/run/flows/url/fetch-options.js.map +1 -0
  155. package/dist/esm/run/flows/url/flow-progress.js +123 -0
  156. package/dist/esm/run/flows/url/flow-progress.js.map +1 -0
  157. package/dist/esm/run/flows/url/flow.js +70 -462
  158. package/dist/esm/run/flows/url/flow.js.map +1 -1
  159. package/dist/esm/run/flows/url/markdown.js +38 -3
  160. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  161. package/dist/esm/run/flows/url/progress-status-state.js +28 -0
  162. package/dist/esm/run/flows/url/progress-status-state.js.map +1 -0
  163. package/dist/esm/run/flows/url/progress-status.js +51 -0
  164. package/dist/esm/run/flows/url/progress-status.js.map +1 -0
  165. package/dist/esm/run/flows/url/slides-output-render.js +78 -0
  166. package/dist/esm/run/flows/url/slides-output-render.js.map +1 -0
  167. package/dist/esm/run/flows/url/slides-output-state.js +86 -0
  168. package/dist/esm/run/flows/url/slides-output-state.js.map +1 -0
  169. package/dist/esm/run/flows/url/slides-output-stream.js +271 -0
  170. package/dist/esm/run/flows/url/slides-output-stream.js.map +1 -0
  171. package/dist/esm/run/flows/url/slides-output.js +29 -422
  172. package/dist/esm/run/flows/url/slides-output.js.map +1 -1
  173. package/dist/esm/run/flows/url/slides-session.js +159 -0
  174. package/dist/esm/run/flows/url/slides-session.js.map +1 -0
  175. package/dist/esm/run/flows/url/slides-text-markdown.js +431 -0
  176. package/dist/esm/run/flows/url/slides-text-markdown.js.map +1 -0
  177. package/dist/esm/run/flows/url/slides-text-transcript.js +199 -0
  178. package/dist/esm/run/flows/url/slides-text-transcript.js.map +1 -0
  179. package/dist/esm/run/flows/url/slides-text-types.js +2 -0
  180. package/dist/esm/run/flows/url/slides-text-types.js.map +1 -0
  181. package/dist/esm/run/flows/url/slides-text.js +2 -627
  182. package/dist/esm/run/flows/url/slides-text.js.map +1 -1
  183. package/dist/esm/run/flows/url/summary-finish.js +40 -0
  184. package/dist/esm/run/flows/url/summary-finish.js.map +1 -0
  185. package/dist/esm/run/flows/url/summary-json.js +32 -0
  186. package/dist/esm/run/flows/url/summary-json.js.map +1 -0
  187. package/dist/esm/run/flows/url/summary-prompt.js +147 -0
  188. package/dist/esm/run/flows/url/summary-prompt.js.map +1 -0
  189. package/dist/esm/run/flows/url/summary-resolution.js +327 -0
  190. package/dist/esm/run/flows/url/summary-resolution.js.map +1 -0
  191. package/dist/esm/run/flows/url/summary-timestamps.js +136 -0
  192. package/dist/esm/run/flows/url/summary-timestamps.js.map +1 -0
  193. package/dist/esm/run/flows/url/summary.js +139 -667
  194. package/dist/esm/run/flows/url/summary.js.map +1 -1
  195. package/dist/esm/run/flows/url/types.js +31 -1
  196. package/dist/esm/run/flows/url/types.js.map +1 -1
  197. package/dist/esm/run/flows/url/video-only.js +68 -0
  198. package/dist/esm/run/flows/url/video-only.js.map +1 -0
  199. package/dist/esm/run/help.js +15 -5
  200. package/dist/esm/run/help.js.map +1 -1
  201. package/dist/esm/run/markdown-transforms.js +89 -0
  202. package/dist/esm/run/markdown-transforms.js.map +1 -0
  203. package/dist/esm/run/markdown.js +1 -96
  204. package/dist/esm/run/markdown.js.map +1 -1
  205. package/dist/esm/run/run-config.js +1 -1
  206. package/dist/esm/run/run-config.js.map +1 -1
  207. package/dist/esm/run/run-env.js +28 -7
  208. package/dist/esm/run/run-env.js.map +1 -1
  209. package/dist/esm/run/run-models.js +35 -5
  210. package/dist/esm/run/run-models.js.map +1 -1
  211. package/dist/esm/run/run-settings-parse.js +77 -0
  212. package/dist/esm/run/run-settings-parse.js.map +1 -0
  213. package/dist/esm/run/run-settings.js +7 -72
  214. package/dist/esm/run/run-settings.js.map +1 -1
  215. package/dist/esm/run/runner-contexts.js +122 -0
  216. package/dist/esm/run/runner-contexts.js.map +1 -0
  217. package/dist/esm/run/runner-execution.js +82 -0
  218. package/dist/esm/run/runner-execution.js.map +1 -0
  219. package/dist/esm/run/runner-flags.js +97 -0
  220. package/dist/esm/run/runner-flags.js.map +1 -0
  221. package/dist/esm/run/runner-plan.js +369 -0
  222. package/dist/esm/run/runner-plan.js.map +1 -0
  223. package/dist/esm/run/runner-setup.js +109 -0
  224. package/dist/esm/run/runner-setup.js.map +1 -0
  225. package/dist/esm/run/runner-slides.js +49 -0
  226. package/dist/esm/run/runner-slides.js.map +1 -0
  227. package/dist/esm/run/runner.js +53 -692
  228. package/dist/esm/run/runner.js.map +1 -1
  229. package/dist/esm/run/slides-cli.js +3 -2
  230. package/dist/esm/run/slides-cli.js.map +1 -1
  231. package/dist/esm/run/slides-render.js +5 -2
  232. package/dist/esm/run/slides-render.js.map +1 -1
  233. package/dist/esm/run/stdin-temp-file.js +1 -1
  234. package/dist/esm/run/stdin-temp-file.js.map +1 -1
  235. package/dist/esm/run/streaming.js +2 -0
  236. package/dist/esm/run/streaming.js.map +1 -1
  237. package/dist/esm/run/summary-engine.js +50 -10
  238. package/dist/esm/run/summary-engine.js.map +1 -1
  239. package/dist/esm/run/summary-llm.js +2 -1
  240. package/dist/esm/run/summary-llm.js.map +1 -1
  241. package/dist/esm/run/terminal.js +4 -1
  242. package/dist/esm/run/terminal.js.map +1 -1
  243. package/dist/esm/run/transcriber-cli.js +1 -1
  244. package/dist/esm/run/transcriber-cli.js.map +1 -1
  245. package/dist/esm/shared/slides-text.js +2 -0
  246. package/dist/esm/shared/slides-text.js.map +1 -0
  247. package/dist/esm/slides/download.js +242 -0
  248. package/dist/esm/slides/download.js.map +1 -0
  249. package/dist/esm/slides/extract-finalize.js +98 -0
  250. package/dist/esm/slides/extract-finalize.js.map +1 -0
  251. package/dist/esm/slides/extract.js +105 -1685
  252. package/dist/esm/slides/extract.js.map +1 -1
  253. package/dist/esm/slides/frame-extraction.js +372 -0
  254. package/dist/esm/slides/frame-extraction.js.map +1 -0
  255. package/dist/esm/slides/index.js +2 -1
  256. package/dist/esm/slides/index.js.map +1 -1
  257. package/dist/esm/slides/ingest.js +194 -0
  258. package/dist/esm/slides/ingest.js.map +1 -0
  259. package/dist/esm/slides/ocr.js +91 -0
  260. package/dist/esm/slides/ocr.js.map +1 -0
  261. package/dist/esm/slides/process.js +218 -0
  262. package/dist/esm/slides/process.js.map +1 -0
  263. package/dist/esm/slides/scene-detection.js +387 -0
  264. package/dist/esm/slides/scene-detection.js.map +1 -0
  265. package/dist/esm/slides/source-id.js +42 -0
  266. package/dist/esm/slides/source-id.js.map +1 -0
  267. package/dist/esm/slides/source.js +80 -0
  268. package/dist/esm/slides/source.js.map +1 -0
  269. package/dist/esm/tty/progress/fetch-html.js +6 -0
  270. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  271. package/dist/esm/tty/progress/transcript-state.js +202 -0
  272. package/dist/esm/tty/progress/transcript-state.js.map +1 -0
  273. package/dist/esm/tty/progress/transcript.js +43 -194
  274. package/dist/esm/tty/progress/transcript.js.map +1 -1
  275. package/dist/esm/tty/spinner.js +17 -3
  276. package/dist/esm/tty/spinner.js.map +1 -1
  277. package/dist/esm/tty/website-progress.js +16 -3
  278. package/dist/esm/tty/website-progress.js.map +1 -1
  279. package/dist/esm/version.js +1 -1
  280. package/dist/types/cache-keys.d.ts +44 -0
  281. package/dist/types/cache-slides-cleanup.d.ts +1 -0
  282. package/dist/types/cache.d.ts +2 -10
  283. package/dist/types/config/env.d.ts +6 -0
  284. package/dist/types/config/model.d.ts +3 -0
  285. package/dist/types/config/parse-helpers.d.ts +7 -0
  286. package/dist/types/config/read.d.ts +2 -0
  287. package/dist/types/config/sections.d.ts +34 -0
  288. package/dist/types/config/types.d.ts +238 -0
  289. package/dist/types/config.d.ts +3 -209
  290. package/dist/types/costs.d.ts +1 -1
  291. package/dist/types/daemon/agent-model.d.ts +40 -0
  292. package/dist/types/daemon/agent-request.d.ts +14 -0
  293. package/dist/types/daemon/chat.d.ts +3 -1
  294. package/dist/types/daemon/config.d.ts +13 -2
  295. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  296. package/dist/types/daemon/flow-context.d.ts +2 -2
  297. package/dist/types/daemon/models.d.ts +3 -0
  298. package/dist/types/daemon/schtasks.d.ts +2 -1
  299. package/dist/types/daemon/server-admin-routes.d.ts +22 -0
  300. package/dist/types/daemon/server-agent-route.d.ts +9 -0
  301. package/dist/types/daemon/server-http.d.ts +10 -0
  302. package/dist/types/daemon/server-session-routes.d.ts +11 -0
  303. package/dist/types/daemon/server-session.d.ts +52 -0
  304. package/dist/types/daemon/server-sse.d.ts +12 -0
  305. package/dist/types/daemon/server-summarize-execution.d.ts +70 -0
  306. package/dist/types/daemon/server-summarize-request.d.ts +36 -0
  307. package/dist/types/daemon/server.d.ts +4 -4
  308. package/dist/types/daemon/summarize.d.ts +1 -1
  309. package/dist/types/daemon/windows-container.d.ts +1 -0
  310. package/dist/types/llm/cli-exec.d.ts +13 -0
  311. package/dist/types/llm/cli-provider-output.d.ts +25 -0
  312. package/dist/types/llm/generate-text-document.d.ts +35 -0
  313. package/dist/types/llm/generate-text-shared.d.ts +32 -0
  314. package/dist/types/llm/generate-text-stream.d.ts +27 -0
  315. package/dist/types/llm/generate-text.d.ts +7 -26
  316. package/dist/types/llm/github-models.d.ts +5 -0
  317. package/dist/types/llm/html-to-markdown.d.ts +2 -1
  318. package/dist/types/llm/model-id.d.ts +1 -1
  319. package/dist/types/llm/provider-capabilities.d.ts +2 -0
  320. package/dist/types/llm/provider-profile.d.ts +31 -0
  321. package/dist/types/llm/providers/google.d.ts +6 -0
  322. package/dist/types/llm/providers/models.d.ts +5 -0
  323. package/dist/types/llm/providers/openai.d.ts +9 -5
  324. package/dist/types/llm/providers/types.d.ts +1 -0
  325. package/dist/types/llm/transcript-to-markdown.d.ts +2 -1
  326. package/dist/types/model-auto-cli.d.ts +15 -0
  327. package/dist/types/model-auto-rules.d.ts +7 -0
  328. package/dist/types/model-auto.d.ts +5 -7
  329. package/dist/types/model-spec.d.ts +4 -3
  330. package/dist/types/run/attachments.d.ts +3 -2
  331. package/dist/types/run/bird/exec.d.ts +1 -0
  332. package/dist/types/run/bird/media.d.ts +3 -0
  333. package/dist/types/run/bird/parse.d.ts +3 -0
  334. package/dist/types/run/bird/types.d.ts +18 -0
  335. package/dist/types/run/bird.d.ts +12 -17
  336. package/dist/types/run/cache-state.d.ts +1 -1
  337. package/dist/types/run/constants.d.ts +2 -1
  338. package/dist/types/run/env.d.ts +6 -0
  339. package/dist/types/run/finish-line-labels.d.ts +29 -0
  340. package/dist/types/run/finish-line-lengths.d.ts +23 -0
  341. package/dist/types/run/finish-line.d.ts +2 -52
  342. package/dist/types/run/flows/asset/extract.d.ts +1 -1
  343. package/dist/types/run/flows/asset/input.d.ts +1 -1
  344. package/dist/types/run/flows/asset/preprocess.d.ts +1 -1
  345. package/dist/types/run/flows/asset/summary-attempts.d.ts +24 -0
  346. package/dist/types/run/flows/asset/summary.d.ts +16 -2
  347. package/dist/types/run/flows/url/extraction-session.d.ts +22 -0
  348. package/dist/types/run/flows/url/fetch-options.d.ts +29 -0
  349. package/dist/types/run/flows/url/flow-progress.d.ts +43 -0
  350. package/dist/types/run/flows/url/markdown.d.ts +2 -2
  351. package/dist/types/run/flows/url/progress-status-state.d.ts +17 -0
  352. package/dist/types/run/flows/url/progress-status.d.ts +17 -0
  353. package/dist/types/run/flows/url/slides-output-render.d.ts +43 -0
  354. package/dist/types/run/flows/url/slides-output-state.d.ts +21 -0
  355. package/dist/types/run/flows/url/slides-output-stream.d.ts +18 -0
  356. package/dist/types/run/flows/url/slides-output.d.ts +2 -17
  357. package/dist/types/run/flows/url/slides-session.d.ts +26 -0
  358. package/dist/types/run/flows/url/slides-text-markdown.d.ts +46 -0
  359. package/dist/types/run/flows/url/slides-text-transcript.d.ts +36 -0
  360. package/dist/types/run/flows/url/slides-text-types.d.ts +8 -0
  361. package/dist/types/run/flows/url/slides-text.d.ts +3 -87
  362. package/dist/types/run/flows/url/summary-finish.d.ts +16 -0
  363. package/dist/types/run/flows/url/summary-json.d.ts +51 -0
  364. package/dist/types/run/flows/url/summary-prompt.d.ts +22 -0
  365. package/dist/types/run/flows/url/summary-resolution.d.ts +31 -0
  366. package/dist/types/run/flows/url/summary-timestamps.d.ts +11 -0
  367. package/dist/types/run/flows/url/types.d.ts +20 -0
  368. package/dist/types/run/flows/url/video-only.d.ts +27 -0
  369. package/dist/types/run/markdown-transforms.d.ts +3 -0
  370. package/dist/types/run/run-context.d.ts +4 -0
  371. package/dist/types/run/run-env.d.ts +4 -0
  372. package/dist/types/run/run-settings-parse.d.ts +5 -0
  373. package/dist/types/run/run-settings.d.ts +2 -1
  374. package/dist/types/run/runner-contexts.d.ts +37 -0
  375. package/dist/types/run/runner-execution.d.ts +58 -0
  376. package/dist/types/run/runner-flags.d.ts +41 -0
  377. package/dist/types/run/runner-plan.d.ts +19 -0
  378. package/dist/types/run/runner-setup.d.ts +21 -0
  379. package/dist/types/run/runner-slides.d.ts +9 -0
  380. package/dist/types/run/streaming.d.ts +2 -1
  381. package/dist/types/run/summary-engine.d.ts +8 -4
  382. package/dist/types/run/summary-llm.d.ts +5 -3
  383. package/dist/types/run/terminal.d.ts +2 -0
  384. package/dist/types/run/types.d.ts +3 -2
  385. package/dist/types/shared/slides-text.d.ts +1 -0
  386. package/dist/types/slides/download.d.ts +29 -0
  387. package/dist/types/slides/extract-finalize.d.ts +57 -0
  388. package/dist/types/slides/extract.d.ts +2 -13
  389. package/dist/types/slides/frame-extraction.d.ts +38 -0
  390. package/dist/types/slides/index.d.ts +2 -1
  391. package/dist/types/slides/ingest.d.ts +47 -0
  392. package/dist/types/slides/ocr.d.ts +5 -0
  393. package/dist/types/slides/process.d.ts +22 -0
  394. package/dist/types/slides/scene-detection.d.ts +75 -0
  395. package/dist/types/slides/source-id.d.ts +2 -0
  396. package/dist/types/slides/source.d.ts +8 -0
  397. package/dist/types/tty/progress/fetch-html.d.ts +1 -0
  398. package/dist/types/tty/progress/transcript-state.d.ts +27 -0
  399. package/dist/types/tty/progress/transcript.d.ts +1 -0
  400. package/dist/types/tty/spinner.d.ts +1 -0
  401. package/dist/types/version.d.ts +1 -1
  402. package/docs/README.md +1 -1
  403. package/docs/_config.yml +1 -0
  404. package/docs/agent.md +3 -2
  405. package/docs/assets/site.css +145 -2
  406. package/docs/cache.md +2 -1
  407. package/docs/chrome-extension.md +19 -5
  408. package/docs/cli.md +26 -8
  409. package/docs/config.md +30 -9
  410. package/docs/extract-only.md +2 -2
  411. package/docs/firecrawl.md +2 -1
  412. package/docs/index.html +5 -0
  413. package/docs/llm.md +34 -5
  414. package/docs/manual-tests.md +3 -0
  415. package/docs/media.md +9 -1
  416. package/docs/model-auto.md +2 -2
  417. package/docs/model-provider-resolution.md +57 -0
  418. package/docs/releasing.md +9 -12
  419. package/docs/site/docs/chrome-extension.html +1 -1
  420. package/docs/site/index.html +5 -0
  421. package/docs/slides-rendering-flow.md +46 -0
  422. package/docs/slides.md +5 -5
  423. package/docs/smoketest.md +1 -1
  424. package/docs/transcript-provider-flow.md +73 -0
  425. package/docs/website.md +3 -1
  426. package/docs/youtube.md +4 -2
  427. package/package.json +17 -16
@@ -1,7 +1,7 @@
1
1
  import type { CliProvider } from "../config.js";
2
2
  import type { FirecrawlMode, LengthArg, MarkdownMode, PreprocessMode, VideoMode, YoutubeMode } from "../flags.js";
3
3
  import type { OutputLanguage } from "../language.js";
4
- import type { SummaryLengthTarget } from "../prompts/index.js";
4
+ import { type SummaryLengthTarget } from "../prompts/index.js";
5
5
  export type ResolvedRunSettings = {
6
6
  lengthArg: LengthArg;
7
7
  firecrawlMode: FirecrawlMode;
@@ -50,6 +50,7 @@ export declare function resolveSummaryLength(raw: unknown, fallback?: string): {
50
50
  lengthArg: LengthArg;
51
51
  summaryLength: SummaryLengthTarget;
52
52
  };
53
+ export declare function buildPromptLengthInstruction(lengthArg: LengthArg): string;
53
54
  export declare function resolveOutputLanguageSetting({ raw, fallback, }: {
54
55
  raw: unknown;
55
56
  fallback: OutputLanguage;
@@ -0,0 +1,37 @@
1
+ import type { CacheState } from "../cache.js";
2
+ import type { MediaCache } from "../content/index.js";
3
+ import { type SummarizeAssetArgs } from "./flows/asset/summary.js";
4
+ import { type UrlFlowContext } from "./flows/url/types.js";
5
+ type SummarizeMediaFile = typeof import("./flows/asset/media.js").summarizeMediaFile;
6
+ export declare function createRunnerFlowContexts(options: {
7
+ summarizeMediaFileImpl: SummarizeMediaFile;
8
+ cacheState: CacheState;
9
+ mediaCache: MediaCache | null;
10
+ io: UrlFlowContext["io"];
11
+ flags: UrlFlowContext["flags"];
12
+ model: UrlFlowContext["model"];
13
+ setTranscriptionCost: UrlFlowContext["hooks"]["setTranscriptionCost"];
14
+ writeViaFooter: UrlFlowContext["hooks"]["writeViaFooter"];
15
+ clearProgressForStdout: UrlFlowContext["hooks"]["clearProgressForStdout"];
16
+ restoreProgressAfterStdout: UrlFlowContext["hooks"]["restoreProgressAfterStdout"];
17
+ setClearProgressBeforeStdout: UrlFlowContext["hooks"]["setClearProgressBeforeStdout"];
18
+ clearProgressIfCurrent: UrlFlowContext["hooks"]["clearProgressIfCurrent"];
19
+ buildReport: UrlFlowContext["hooks"]["buildReport"];
20
+ estimateCostUsd: UrlFlowContext["hooks"]["estimateCostUsd"];
21
+ }): {
22
+ summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
23
+ assetInputContext: {
24
+ env: Record<string, string | undefined>;
25
+ envForRun: Record<string, string | undefined>;
26
+ stderr: NodeJS.WritableStream;
27
+ progressEnabled: boolean;
28
+ timeoutMs: number;
29
+ trackedFetch: typeof fetch;
30
+ summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
31
+ summarizeMediaFile: (args: Parameters<SummarizeMediaFile>[1]) => Promise<void>;
32
+ setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
33
+ clearProgressIfCurrent: (fn: () => void) => void;
34
+ };
35
+ urlFlowContext: UrlFlowContext;
36
+ };
37
+ export {};
@@ -0,0 +1,58 @@
1
+ import type { InputTarget } from "../content/asset.js";
2
+ import type { RunMetricsReport } from "../costs.js";
3
+ import type { ExecFileFn } from "../markitdown.js";
4
+ import type { AssetExtractContext } from "./flows/asset/extract.js";
5
+ import type { SummarizeAssetArgs } from "./flows/asset/summary.js";
6
+ export declare function executeRunnerInput(options: {
7
+ inputTarget: InputTarget;
8
+ stdin: NodeJS.ReadableStream;
9
+ handleFileInputContext: unknown;
10
+ url: string | null;
11
+ isYoutubeUrl: boolean;
12
+ withUrlAssetContext: unknown;
13
+ slidesEnabled: boolean;
14
+ extractMode: boolean;
15
+ progressEnabled: boolean;
16
+ renderSpinnerStatus: (label: string, detail?: string) => string;
17
+ renderSpinnerStatusWithModel: (label: string, modelId: string) => string;
18
+ extractAssetContext: AssetExtractContext & {
19
+ execFileImpl: ExecFileFn;
20
+ };
21
+ outputExtractedAssetContext: {
22
+ io: {
23
+ env: Record<string, string | undefined>;
24
+ envForRun: Record<string, string | undefined>;
25
+ stdout: NodeJS.WritableStream;
26
+ stderr: NodeJS.WritableStream;
27
+ };
28
+ flags: {
29
+ timeoutMs: number;
30
+ preprocessMode: "off" | "auto" | "always";
31
+ format: "text" | "markdown";
32
+ plain: boolean;
33
+ json: boolean;
34
+ metricsEnabled: boolean;
35
+ metricsDetailed: boolean;
36
+ shouldComputeReport: boolean;
37
+ runStartedAtMs: number;
38
+ verboseColor: boolean;
39
+ };
40
+ hooks: {
41
+ clearProgressForStdout: () => void;
42
+ restoreProgressAfterStdout?: (() => void) | null;
43
+ buildReport: () => Promise<RunMetricsReport>;
44
+ estimateCostUsd: () => Promise<number | null>;
45
+ };
46
+ apiStatus: {
47
+ xaiApiKey: string | null;
48
+ apiKey: string | null;
49
+ openrouterApiKey: string | null;
50
+ apifyToken: string | null;
51
+ firecrawlConfigured: boolean;
52
+ googleConfigured: boolean;
53
+ anthropicConfigured: boolean;
54
+ };
55
+ };
56
+ summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
57
+ runUrlFlowContext: unknown;
58
+ }): Promise<void>;
@@ -0,0 +1,41 @@
1
+ import { type FirecrawlMode, type LengthArg, type MarkdownMode, type PreprocessMode, parseExtractFormat, parseMaxExtractCharactersArg, parseMetricsMode, parseStreamMode, type YoutubeMode } from "../flags.js";
2
+ type Transcriber = "auto" | "whisper" | "parakeet" | "canary";
3
+ export type RunnerFlagResolution = {
4
+ videoModeExplicitlySet: boolean;
5
+ lengthExplicitlySet: boolean;
6
+ languageExplicitlySet: boolean;
7
+ noCacheFlag: boolean;
8
+ noMediaCacheFlag: boolean;
9
+ extractMode: boolean;
10
+ json: boolean;
11
+ forceSummary: boolean;
12
+ slidesDebug: boolean;
13
+ streamMode: ReturnType<typeof parseStreamMode>;
14
+ plain: boolean;
15
+ debug: boolean;
16
+ verbose: boolean;
17
+ transcriber: Transcriber;
18
+ maxExtractCharacters: ReturnType<typeof parseMaxExtractCharactersArg>;
19
+ isYoutubeUrl: boolean;
20
+ format: ReturnType<typeof parseExtractFormat>;
21
+ youtubeMode: YoutubeMode;
22
+ lengthArg: LengthArg;
23
+ maxOutputTokensArg: number | null;
24
+ timeoutMs: number;
25
+ retries: number;
26
+ preprocessMode: PreprocessMode;
27
+ requestedFirecrawlMode: FirecrawlMode;
28
+ markdownMode: MarkdownMode;
29
+ metricsMode: ReturnType<typeof parseMetricsMode>;
30
+ metricsEnabled: boolean;
31
+ metricsDetailed: boolean;
32
+ shouldComputeReport: boolean;
33
+ markdownModeExplicitlySet: boolean;
34
+ };
35
+ export declare function resolveRunnerFlags({ normalizedArgv, programOpts, envForRun, url, }: {
36
+ normalizedArgv: readonly string[];
37
+ programOpts: Record<string, unknown>;
38
+ envForRun: Record<string, string | undefined>;
39
+ url: string | null;
40
+ }): RunnerFlagResolution;
41
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { Command } from "commander";
2
+ import { type CacheState } from "../cache.js";
3
+ import type { ExecFileFn } from "../markitdown.js";
4
+ export type RunnerPlan = {
5
+ cacheState: CacheState;
6
+ execute: () => Promise<void>;
7
+ };
8
+ export declare function createRunnerPlan(options: {
9
+ normalizedArgv: string[];
10
+ program: Command;
11
+ env: Record<string, string | undefined>;
12
+ envForRun: Record<string, string | undefined>;
13
+ fetchImpl: typeof fetch;
14
+ execFileImpl: ExecFileFn;
15
+ stdin?: NodeJS.ReadableStream;
16
+ stdout: NodeJS.WritableStream;
17
+ stderr: NodeJS.WritableStream;
18
+ promptOverride: string | null;
19
+ }): Promise<RunnerPlan>;
@@ -0,0 +1,21 @@
1
+ export declare function prepareRunEnvironment(argv: string[], inputEnv: Record<string, string | undefined>): {
2
+ normalizedArgv: string[];
3
+ envForRun: Record<string, string | undefined>;
4
+ };
5
+ export declare function handleVersionFlag({ versionRequested, stdout, }: {
6
+ versionRequested: boolean;
7
+ stdout: NodeJS.WritableStream;
8
+ }): boolean;
9
+ export declare function applyWidthOverride({ width, env, }: {
10
+ width: unknown;
11
+ env: Record<string, string | undefined>;
12
+ }): void;
13
+ export declare function resolvePromptOverride({ prompt, promptFile, }: {
14
+ prompt: unknown;
15
+ promptFile: unknown;
16
+ }): Promise<string | null>;
17
+ export declare function handleCacheUtilityFlags({ normalizedArgv, envForRun, stdout, }: {
18
+ normalizedArgv: string[];
19
+ envForRun: Record<string, string | undefined>;
20
+ stdout: NodeJS.WritableStream;
21
+ }): Promise<boolean>;
@@ -0,0 +1,9 @@
1
+ import type { SummarizeConfig } from "../config.js";
2
+ import type { InputTarget } from "../content/asset.js";
3
+ import { type SlideSettings } from "../slides/index.js";
4
+ export declare function resolveRunnerSlidesSettings(options: {
5
+ normalizedArgv: string[];
6
+ programOpts: Record<string, unknown>;
7
+ config: SummarizeConfig | null;
8
+ inputTarget: InputTarget;
9
+ }): SlideSettings | null;
@@ -1,8 +1,9 @@
1
+ import type { LlmProvider } from "../llm/model-id.js";
1
2
  export { mergeStreamingChunk } from "../shared/streaming-merge.js";
2
3
  export declare function isGoogleStreamingUnsupportedError(error: unknown): boolean;
3
4
  export declare function isStreamingTimeoutError(error: unknown): boolean;
4
5
  export declare function canStream({ provider, prompt, transport, }: {
5
- provider: "xai" | "openai" | "google" | "anthropic" | "zai";
6
+ provider: LlmProvider;
6
7
  prompt: {
7
8
  attachments?: Array<{
8
9
  kind: "text" | "image" | "document";
@@ -1,9 +1,9 @@
1
1
  import type { CliProvider } from "../config.js";
2
- import type { Prompt } from "../llm/prompt.js";
3
- import type { ModelAttempt, ModelMeta } from "./types.js";
4
2
  import { runCliModel } from "../llm/cli.js";
3
+ import type { Prompt } from "../llm/prompt.js";
5
4
  import { type StreamOutputMode } from "./stream-output.js";
6
5
  import { summarizeWithModelId } from "./summary-llm.js";
6
+ import type { ModelAttempt, ModelMeta } from "./types.js";
7
7
  export type SummaryEngineDeps = {
8
8
  env: Record<string, string | undefined>;
9
9
  envForRun: Record<string, string | undefined>;
@@ -24,7 +24,7 @@ export type SummaryEngineDeps = {
24
24
  resolveMaxOutputTokensForCall: (modelId: string) => Promise<number | null>;
25
25
  resolveMaxInputTokensForCall: (modelId: string) => Promise<number | null>;
26
26
  llmCalls: Array<{
27
- provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "cli";
27
+ provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "nvidia" | "github-copilot" | "cli";
28
28
  model: string;
29
29
  usage: Awaited<ReturnType<typeof summarizeWithModelId>>["usage"] | null;
30
30
  costUsd?: number | null;
@@ -48,6 +48,10 @@ export type SummaryEngineDeps = {
48
48
  apiKey: string | null;
49
49
  baseUrl: string;
50
50
  };
51
+ nvidia: {
52
+ apiKey: string | null;
53
+ baseUrl: string;
54
+ };
51
55
  providerBaseUrls: {
52
56
  openai: string | null;
53
57
  anthropic: string | null;
@@ -64,7 +68,7 @@ export type SummaryStreamHandler = {
64
68
  onDone?: ((finalText: string) => void | Promise<void>) | null;
65
69
  };
66
70
  export declare function createSummaryEngine(deps: SummaryEngineDeps): {
67
- applyZaiOverrides: (attempt: ModelAttempt) => ModelAttempt;
71
+ applyOpenAiGatewayOverrides: (attempt: ModelAttempt) => ModelAttempt;
68
72
  envHasKeyFor: (requiredEnv: ModelAttempt["requiredEnv"]) => boolean;
69
73
  formatMissingModelError: (attempt: ModelAttempt) => string;
70
74
  runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, streamHandler, }: {
@@ -1,6 +1,7 @@
1
+ import { generateTextWithModelId } from "../llm/generate-text.js";
2
+ import type { LlmProvider } from "../llm/model-id.js";
1
3
  import type { parseGatewayStyleModelId } from "../llm/model-id.js";
2
4
  import type { Prompt } from "../llm/prompt.js";
3
- import { generateTextWithModelId } from "../llm/generate-text.js";
4
5
  export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchImpl, timeoutMs, }: {
5
6
  parsedModel: ReturnType<typeof parseGatewayStyleModelId>;
6
7
  apiKeys: {
@@ -13,7 +14,7 @@ export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchIm
13
14
  note: string | null;
14
15
  forceStreamOff: boolean;
15
16
  }>;
16
- export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens, timeoutMs, fetchImpl, apiKeys, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
17
+ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens, timeoutMs, fetchImpl, apiKeys, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, zaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
17
18
  modelId: string;
18
19
  prompt: Prompt;
19
20
  maxOutputTokens?: number;
@@ -31,6 +32,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
31
32
  anthropicBaseUrlOverride?: string | null;
32
33
  googleBaseUrlOverride?: string | null;
33
34
  xaiBaseUrlOverride?: string | null;
35
+ zaiBaseUrlOverride?: string | null;
34
36
  forceChatCompletions?: boolean;
35
37
  retries: number;
36
38
  onRetry?: (notice: {
@@ -41,7 +43,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
41
43
  }) => void;
42
44
  }): Promise<{
43
45
  text: string;
44
- provider: "xai" | "openai" | "google" | "anthropic" | "zai";
46
+ provider: LlmProvider;
45
47
  canonicalModelId: string;
46
48
  usage: Awaited<ReturnType<typeof generateTextWithModelId>>["usage"];
47
49
  }>;
@@ -2,5 +2,7 @@ export declare function isRichTty(stream: NodeJS.WritableStream): boolean;
2
2
  export declare function supportsColor(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): boolean;
3
3
  export declare function terminalWidth(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
4
4
  export declare function terminalHeight(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
5
+ /** Default max width for markdown rendering to keep text readable on wide terminals. */
6
+ export declare const DEFAULT_MAX_RENDER_WIDTH = 120;
5
7
  export declare function markdownRenderWidth(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
6
8
  export declare function ansi(code: string, input: string, enabled: boolean): string;
@@ -1,5 +1,6 @@
1
1
  import type { CliProvider } from "../config.js";
2
- export type ModelAttemptRequiredEnv = "XAI_API_KEY" | "OPENAI_API_KEY" | "GEMINI_API_KEY" | "ANTHROPIC_API_KEY" | "OPENROUTER_API_KEY" | "Z_AI_API_KEY" | "CLI_CLAUDE" | "CLI_CODEX" | "CLI_GEMINI" | "CLI_AGENT";
2
+ import type { LlmProvider } from "../llm/model-id.js";
3
+ export type ModelAttemptRequiredEnv = "XAI_API_KEY" | "OPENAI_API_KEY" | "NVIDIA_API_KEY" | "GEMINI_API_KEY" | "ANTHROPIC_API_KEY" | "OPENROUTER_API_KEY" | "Z_AI_API_KEY" | "GITHUB_TOKEN" | "CLI_CLAUDE" | "CLI_CODEX" | "CLI_GEMINI" | "CLI_AGENT" | "CLI_OPENCLAW" | "CLI_OPENCODE";
3
4
  export type ModelAttempt = {
4
5
  transport: "native" | "openrouter" | "cli";
5
6
  userModelId: string;
@@ -14,7 +15,7 @@ export type ModelAttempt = {
14
15
  cliModel?: string | null;
15
16
  };
16
17
  export type ModelMeta = {
17
- provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "cli";
18
+ provider: LlmProvider | "cli";
18
19
  canonical: string;
19
20
  };
20
21
  export type MarkdownModel = {
@@ -0,0 +1 @@
1
+ export { buildSlideTextFallback, coerceSummaryWithSlides, parseSlideSummariesFromMarkdown, parseTranscriptTimedText, resolveSlideTextBudget, splitSlideTitleFromText, splitSummaryFromSlides, type SlideTimelineEntry, } from "../run/flows/url/slides-text.js";
@@ -0,0 +1,29 @@
1
+ export declare function buildYtDlpCookiesArgs(cookiesFromBrowser?: string | null): string[];
2
+ export declare function buildSlidesMediaCacheKey(url: string): string;
3
+ export declare function formatBytes(bytes: number): string;
4
+ export declare function downloadYoutubeVideo(options: {
5
+ ytDlpPath: string;
6
+ url: string;
7
+ timeoutMs: number;
8
+ format: string;
9
+ cookiesFromBrowser?: string | null;
10
+ onProgress?: ((percent: number, detail?: string) => void) | null;
11
+ }): Promise<{
12
+ filePath: string;
13
+ cleanup: () => Promise<void>;
14
+ }>;
15
+ export declare function downloadRemoteVideo(options: {
16
+ url: string;
17
+ timeoutMs: number;
18
+ onProgress?: ((percent: number, detail?: string) => void) | null;
19
+ }): Promise<{
20
+ filePath: string;
21
+ cleanup: () => Promise<void>;
22
+ }>;
23
+ export declare function resolveYoutubeStreamUrl(options: {
24
+ ytDlpPath: string;
25
+ url: string;
26
+ timeoutMs: number;
27
+ format: string;
28
+ cookiesFromBrowser?: string | null;
29
+ }): Promise<string>;
@@ -0,0 +1,57 @@
1
+ import type { SlideAutoTune, SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from "./types.js";
2
+ export declare const SLIDES_PROGRESS: {
3
+ readonly PREPARE: 2;
4
+ readonly FETCH_VIDEO: 6;
5
+ readonly DOWNLOAD_VIDEO: 35;
6
+ readonly DETECT_SCENES: 60;
7
+ readonly EXTRACT_FRAMES: 90;
8
+ readonly OCR: 99;
9
+ readonly FINAL: 100;
10
+ };
11
+ export type SlidesChunkMeta = {
12
+ slidesDir: string;
13
+ sourceUrl: string;
14
+ sourceId: string;
15
+ sourceKind: SlideSourceKind;
16
+ ocrAvailable: boolean;
17
+ };
18
+ export declare function buildSlidesChunkMeta(args: {
19
+ slidesDir: string;
20
+ source: SlideSource;
21
+ ocrAvailable: boolean;
22
+ }): SlidesChunkMeta;
23
+ export declare function buildSlideTimeline(args: {
24
+ source: SlideSource;
25
+ slidesDir: string;
26
+ sceneThreshold: number;
27
+ autoTuneThreshold: boolean;
28
+ autoTune: SlideAutoTune;
29
+ maxSlides: number;
30
+ minSlideDuration: number;
31
+ ocrRequested: boolean;
32
+ ocrAvailable: boolean;
33
+ warnings: string[];
34
+ slides: Array<SlideImage & {
35
+ segment?: unknown;
36
+ }>;
37
+ }): SlideExtractionResult;
38
+ export declare function emitPlaceholderSlides(args: {
39
+ slides: Array<SlideImage & {
40
+ segment?: unknown;
41
+ }>;
42
+ meta: SlidesChunkMeta;
43
+ onSlideChunk?: ((value: {
44
+ slide: SlideImage;
45
+ meta: SlidesChunkMeta;
46
+ }) => void) | null;
47
+ }): void;
48
+ export declare function emitFinalSlides(args: {
49
+ slides: SlideImage[];
50
+ meta: SlidesChunkMeta;
51
+ onSlideChunk?: ((value: {
52
+ slide: SlideImage;
53
+ meta: SlidesChunkMeta;
54
+ }) => void) | null;
55
+ }): void;
56
+ export declare function renameSlidesWithTimestamps(slides: SlideImage[], slidesDir: string): Promise<SlideImage[]>;
57
+ export declare function writeSlidesJson(result: SlideExtractionResult, slidesDir: string): Promise<void>;
@@ -1,6 +1,7 @@
1
- import type { ExtractedLinkContent, MediaCache } from "../content/index.js";
1
+ import type { MediaCache } from "../content/index.js";
2
2
  import type { SlideSettings } from "./settings.js";
3
3
  import type { SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from "./types.js";
4
+ export { parseShowinfoTimestamp, resolveExtractedTimestamp } from "./scene-detection.js";
4
5
  type ExtractSlidesArgs = {
5
6
  source: SlideSource;
6
7
  settings: SlideSettings;
@@ -28,16 +29,4 @@ type ExtractSlidesArgs = {
28
29
  onSlidesLog?: ((message: string) => void) | null;
29
30
  } | null;
30
31
  };
31
- export declare function resolveSlideSource({ url, extracted, }: {
32
- url: string;
33
- extracted: ExtractedLinkContent;
34
- }): SlideSource | null;
35
- export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
36
32
  export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
37
- export declare function parseShowinfoTimestamp(line: string): number | null;
38
- export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
39
- requested: number;
40
- actual: number | null;
41
- seekBase?: number | null;
42
- }): number;
43
- export {};
@@ -0,0 +1,38 @@
1
+ import type { SlideAutoTune, SlideImage } from "./types.js";
2
+ export declare function detectSlideTimestamps({ ffmpegPath, ffprobePath, inputPath, sceneThreshold, autoTuneThreshold, env, timeoutMs, warnings, workers, sampleCount, onSegmentProgress, logSlides, logSlidesTiming, }: {
3
+ ffmpegPath: string;
4
+ ffprobePath: string | null;
5
+ inputPath: string;
6
+ sceneThreshold: number;
7
+ autoTuneThreshold: boolean;
8
+ env: Record<string, string | undefined>;
9
+ timeoutMs: number;
10
+ warnings: string[];
11
+ workers: number;
12
+ sampleCount: number;
13
+ onSegmentProgress?: ((completed: number, total: number) => void) | null;
14
+ logSlides?: ((message: string) => void) | null;
15
+ logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
16
+ }): Promise<{
17
+ timestamps: number[];
18
+ autoTune: SlideAutoTune;
19
+ durationSeconds: number | null;
20
+ }>;
21
+ export declare function extractFramesAtTimestamps({ ffmpegPath, inputPath, outputDir, timestamps, segments, durationSeconds, timeoutMs, workers, onProgress, onStatus, onSlide, logSlides, logSlidesTiming, }: {
22
+ ffmpegPath: string;
23
+ inputPath: string;
24
+ outputDir: string;
25
+ timestamps: number[];
26
+ segments?: Array<{
27
+ start: number;
28
+ end: number | null;
29
+ } | null>;
30
+ durationSeconds?: number | null;
31
+ timeoutMs: number;
32
+ workers: number;
33
+ onProgress?: ((completed: number, total: number) => void) | null;
34
+ onStatus?: ((text: string) => void) | null;
35
+ onSlide?: ((slide: SlideImage) => void) | null;
36
+ logSlides?: ((message: string) => void) | null;
37
+ logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
38
+ }): Promise<SlideImage[]>;
@@ -1,4 +1,5 @@
1
- export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp, resolveSlideSource, resolveSlideSourceFromUrl, } from "./extract.js";
1
+ export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp, } from "./extract.js";
2
+ export { isDirectVideoInput, resolveSlideSource, resolveSlideSourceFromUrl } from "./source.js";
2
3
  export type { SlideSettings, SlideSettingsInput } from "./settings.js";
3
4
  export { resolveSlideSettings } from "./settings.js";
4
5
  export { buildSlidesDirId, readSlidesCacheIfValid, resolveSlideImagePath, resolveSlidesDir, serializeSlideImagePath, validateSlidesCache, } from "./store.js";
@@ -0,0 +1,47 @@
1
+ import type { MediaCache } from "../content/index.js";
2
+ import type { SlideSource } from "./types.js";
3
+ export type SlidesIngestProgress = (label: string, percent: number, detail?: string) => void;
4
+ export declare function prepareSlidesInput({ source, mediaCache, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, resolveSlidesYtDlpExtractFormat, resolveSlidesStreamFallback, buildSlidesMediaCacheKey, formatBytes, reportSlidesProgress, logSlidesTiming, downloadYoutubeVideo, downloadRemoteVideo, resolveYoutubeStreamUrl, }: {
5
+ source: SlideSource;
6
+ mediaCache: MediaCache | null;
7
+ timeoutMs: number;
8
+ ytDlpPath: string | null;
9
+ ytDlpCookiesFromBrowser?: string | null;
10
+ resolveSlidesYtDlpExtractFormat: () => string;
11
+ resolveSlidesStreamFallback: () => boolean;
12
+ buildSlidesMediaCacheKey: (url: string) => string;
13
+ formatBytes: (bytes: number) => string;
14
+ reportSlidesProgress?: SlidesIngestProgress | null;
15
+ logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
16
+ downloadYoutubeVideo: (args: {
17
+ ytDlpPath: string;
18
+ url: string;
19
+ timeoutMs: number;
20
+ format: string;
21
+ cookiesFromBrowser?: string | null;
22
+ onProgress?: ((percent: number, detail?: string) => void) | null;
23
+ }) => Promise<{
24
+ filePath: string;
25
+ cleanup: () => Promise<void>;
26
+ }>;
27
+ downloadRemoteVideo: (args: {
28
+ url: string;
29
+ timeoutMs: number;
30
+ onProgress?: ((percent: number, detail?: string) => void) | null;
31
+ }) => Promise<{
32
+ filePath: string;
33
+ cleanup: () => Promise<void>;
34
+ }>;
35
+ resolveYoutubeStreamUrl: (args: {
36
+ ytDlpPath: string;
37
+ url: string;
38
+ timeoutMs: number;
39
+ format: string;
40
+ cookiesFromBrowser?: string | null;
41
+ }) => Promise<string>;
42
+ }): Promise<{
43
+ inputPath: string;
44
+ inputCleanup: (() => Promise<void>) | null;
45
+ cachedMedia: Awaited<ReturnType<NonNullable<MediaCache>["get"]>> | null;
46
+ warnings: string[];
47
+ }>;
@@ -0,0 +1,5 @@
1
+ import type { SlideImage } from "./types.js";
2
+ export declare function cleanOcrText(text: string): string;
3
+ export declare function estimateOcrConfidence(text: string): number;
4
+ export declare function runTesseract(tesseractPath: string, imagePath: string): Promise<string>;
5
+ export declare function runOcrOnSlides(slides: SlideImage[], tesseractPath: string, workers: number, onProgress?: ((completed: number, total: number) => void) | null): Promise<SlideImage[]>;
@@ -0,0 +1,22 @@
1
+ import type { ProcessHandle } from "../processes.js";
2
+ export declare function runProcess({ command, args, timeoutMs, errorLabel, onStderrLine, onStdoutLine, }: {
3
+ command: string;
4
+ args: string[];
5
+ timeoutMs: number;
6
+ errorLabel: string;
7
+ onStderrLine?: (line: string, handle: ProcessHandle | null) => void;
8
+ onStdoutLine?: (line: string, handle: ProcessHandle | null) => void;
9
+ }): Promise<void>;
10
+ export declare function runProcessCapture({ command, args, timeoutMs, errorLabel, }: {
11
+ command: string;
12
+ args: string[];
13
+ timeoutMs: number;
14
+ errorLabel: string;
15
+ }): Promise<string>;
16
+ export declare function runProcessCaptureBuffer({ command, args, timeoutMs, errorLabel, }: {
17
+ command: string;
18
+ args: string[];
19
+ timeoutMs: number;
20
+ errorLabel: string;
21
+ }): Promise<Buffer>;
22
+ export declare function runWithConcurrency<T>(tasks: Array<() => Promise<T>>, workers: number, onProgress?: ((completed: number, total: number) => void) | null): Promise<T[]>;
@@ -0,0 +1,75 @@
1
+ import type { SlideImage } from "./types.js";
2
+ export type SceneSegment = {
3
+ start: number;
4
+ end: number | null;
5
+ };
6
+ export declare function clamp(value: number, min: number, max: number): number;
7
+ export declare function parseShowinfoTimestamp(line: string): number | null;
8
+ export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
9
+ requested: number;
10
+ actual: number | null;
11
+ seekBase?: number | null;
12
+ }): number;
13
+ export declare function roundThreshold(value: number): number;
14
+ export declare function calibrateSceneThreshold({ ffmpegPath, inputPath, durationSeconds, sampleCount, timeoutMs, logSlides, }: {
15
+ ffmpegPath: string;
16
+ inputPath: string;
17
+ durationSeconds: number | null;
18
+ sampleCount: number;
19
+ timeoutMs: number;
20
+ logSlides?: ((message: string) => void) | null;
21
+ }): Promise<{
22
+ threshold: number;
23
+ confidence: number;
24
+ }>;
25
+ export declare function buildSegments(durationSeconds: number | null, workers: number): Array<{
26
+ start: number;
27
+ duration: number;
28
+ }>;
29
+ export declare function detectSceneTimestamps({ ffmpegPath, inputPath, threshold, timeoutMs, segments, workers, onSegmentProgress, runWithConcurrency, }: {
30
+ ffmpegPath: string;
31
+ inputPath: string;
32
+ threshold: number;
33
+ timeoutMs: number;
34
+ segments?: Array<{
35
+ start: number;
36
+ duration: number;
37
+ }>;
38
+ workers?: number;
39
+ onSegmentProgress?: ((completed: number, total: number) => void) | null;
40
+ runWithConcurrency: <T>(tasks: Array<() => Promise<T>>, workers: number, onProgress?: ((completed: number, total: number) => void) | null) => Promise<T[]>;
41
+ }): Promise<number[]>;
42
+ export declare function applyMinDurationFilter(slides: SlideImage[], minDurationSeconds: number, warnings: string[], removeFile: (path: string) => void): SlideImage[];
43
+ export declare function mergeTimestamps(sceneTimestamps: number[], intervalTimestamps: number[], minDurationSeconds: number): number[];
44
+ export declare function filterTimestampsByMinDuration(timestamps: number[], minDurationSeconds: number): number[];
45
+ export declare function buildSceneSegments(sceneTimestamps: number[], durationSeconds: number | null): SceneSegment[];
46
+ export declare function findSceneSegment(segments: SceneSegment[], timestamp: number): SceneSegment | null;
47
+ export declare function adjustTimestampWithinSegment(timestamp: number, segment: SceneSegment | null): number;
48
+ export declare function selectTimestampTargets({ targets, sceneTimestamps, minDurationSeconds, intervalSeconds, }: {
49
+ targets: number[];
50
+ sceneTimestamps: number[];
51
+ minDurationSeconds: number;
52
+ intervalSeconds: number;
53
+ }): number[];
54
+ export declare function buildIntervalTimestamps({ durationSeconds, minDurationSeconds, maxSlides, }: {
55
+ durationSeconds: number | null;
56
+ minDurationSeconds: number;
57
+ maxSlides: number;
58
+ }): {
59
+ timestamps: number[];
60
+ intervalSeconds: number;
61
+ } | null;
62
+ export declare function probeVideoInfo({ ffprobePath, inputPath, timeoutMs, }: {
63
+ ffprobePath: string;
64
+ inputPath: string;
65
+ timeoutMs: number;
66
+ }): Promise<{
67
+ durationSeconds: number | null;
68
+ width: number | null;
69
+ height: number | null;
70
+ }>;
71
+ export declare function applyMaxSlidesFilter<T extends {
72
+ index: number;
73
+ timestamp: number;
74
+ imagePath: string;
75
+ }>(slides: T[], maxSlides: number, warnings: string[], removeFile: (path: string) => void): T[];
@@ -0,0 +1,2 @@
1
+ export declare function buildYoutubeSourceId(videoId: string): string;
2
+ export declare function buildDirectSourceId(url: string): string;
@@ -0,0 +1,8 @@
1
+ import type { ExtractedLinkContent } from "../content/index.js";
2
+ import type { SlideSource } from "./types.js";
3
+ export { isDirectVideoInput } from "../content/index.js";
4
+ export declare function resolveSlideSource({ url, extracted, }: {
5
+ url: string;
6
+ extracted: ExtractedLinkContent;
7
+ }): SlideSource | null;
8
+ export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;