@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
package/docs/llm.md CHANGED
@@ -24,7 +24,10 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
24
24
  - `OPENAI_API_KEY` (required for `openai/...` models)
25
25
  - `OPENAI_BASE_URL` (optional; OpenAI-compatible API endpoint, e.g. OpenRouter)
26
26
  - `OPENAI_USE_CHAT_COMPLETIONS` (optional; force OpenAI chat completions)
27
+ - `NVIDIA_API_KEY` (required for `nvidia/...` models; alias: `NGC_API_KEY`)
28
+ - `NVIDIA_BASE_URL` (optional; override NVIDIA OpenAI-compatible API endpoint; default: `https://integrate.api.nvidia.com/v1`)
27
29
  - `OPENROUTER_API_KEY` (optional; required for `openrouter/...` models; also used when `OPENAI_BASE_URL` points to OpenRouter)
30
+ - `GITHUB_TOKEN` / `GH_TOKEN` (required for `github-copilot/...` models via GitHub Models)
28
31
  - `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
29
32
  - `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
30
33
  - `GEMINI_API_KEY` (required for `google/...` models; also accepts `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`)
@@ -32,7 +35,7 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
32
35
  - `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
33
36
  - `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
34
37
  - `SUMMARIZE_MODEL` (optional; overrides default model selection)
35
- - `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` (optional; override CLI binary paths)
38
+ - `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` / `OPENCLAW_PATH` / `OPENCODE_PATH` (optional; override CLI binary paths)
36
39
 
37
40
  ## Flags
38
41
 
@@ -40,17 +43,25 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
40
43
  - Examples:
41
44
  - `cli/codex/gpt-5.2`
42
45
  - `cli/claude/sonnet`
43
- - `cli/gemini/gemini-3-flash-preview`
46
+ - `cli/gemini/gemini-3-flash`
44
47
  - `cli/agent/gpt-5.2`
45
- - `google/gemini-3-flash-preview`
48
+ - `cli/openclaw/main`
49
+ - `cli/opencode/openai/gpt-5.4`
50
+ - `openai/gpt-5.4`
51
+ - `openai/gpt-5.4-mini`
52
+ - `openai/gpt-5.4-nano`
53
+ - `google/gemini-3-flash`
46
54
  - `openai/gpt-5-mini`
55
+ - `openai/gpt-5-nano`
56
+ - `github-copilot/gpt-5.4`
57
+ - `nvidia/z-ai/glm5`
47
58
  - `zai/glm-4.7`
48
59
  - `xai/grok-4-fast-non-reasoning`
49
60
  - `google/gemini-2.0-flash`
50
61
  - `anthropic/claude-sonnet-4-5`
51
62
  - `openrouter/meta-llama/llama-3.3-70b-instruct:free` (force OpenRouter)
52
63
  - `--cli [provider]`
53
- - Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
64
+ - Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent`, `--cli openclaw`, `--cli opencode` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
54
65
  - `--model auto`
55
66
  - See `docs/model-auto.md`
56
67
  - `--model <preset>`
@@ -70,7 +81,8 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
70
81
  - `--length short|medium|long|xl|xxl|<chars>`
71
82
  - This is _soft guidance_ to the model (no hard truncation).
72
83
  - Minimum numeric value: 50 chars.
73
- - Default: `long`.
84
+ - Built-in default: `xl`.
85
+ - Config default: `output.length` in `~/.summarize/config.json`.
74
86
  - Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
75
87
  - `--force-summary`
76
88
  - Always run the LLM even when extracted content is shorter than the requested length.
@@ -95,6 +107,23 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
95
107
 
96
108
  Use `--model zai/<model>` (e.g. `zai/glm-4.7`). Defaults to Z.AI’s base URL and uses chat completions.
97
109
 
110
+ ## GitHub Copilot / GitHub Models
111
+
112
+ Use `--model github-copilot/<model>` for explicit GitHub-hosted model calls.
113
+
114
+ - Examples:
115
+ - `github-copilot/gpt-5.4`
116
+ - `github-copilot/gpt-5.4-mini`
117
+ - `github-copilot/gpt-5.4-nano`
118
+ - `github-copilot/gpt-5-mini`
119
+ - `github-copilot/gpt-5-nano`
120
+ - `github-copilot/anthropic/claude-haiku-4.5`
121
+ - Auth: `GITHUB_TOKEN` or `GH_TOKEN`
122
+ - Transport: GitHub Models chat completions (`https://models.github.ai/inference`)
123
+ - Notes:
124
+ - bare shorthand like `github-copilot/gpt-5.4` or `github-copilot/claude-opus-4.6` auto-expands to the provider-qualified backend id
125
+ - document attachments stay unsupported in this mode
126
+
98
127
  ## Input limits
99
128
 
100
129
  - Text prompts are checked against the model’s max input tokens (LiteLLM catalog) using a GPT tokenizer.
@@ -11,6 +11,7 @@ Goal: sanity-check auto selection + presets end-to-end.
11
11
  ## Setup
12
12
 
13
13
  - `OPENAI_API_KEY=...` (optional)
14
+ - `ASSEMBLYAI_API_KEY=...` (optional)
14
15
  - `GEMINI_API_KEY=...` (optional)
15
16
  - `ANTHROPIC_API_KEY=...` (optional)
16
17
  - `XAI_API_KEY=...` (optional)
@@ -27,6 +28,8 @@ Tip: use `--verbose` to see model attempts + the chosen model.
27
28
  - `summarize --max-output-tokens 99999 https://example.com`
28
29
  - Missing-key skip (configure only one key; should skip other providers, still succeed):
29
30
  - Set only `OPENAI_API_KEY`, then run a website summary; should not try Gemini/Anthropic/XAI.
31
+ - AssemblyAI transcript path:
32
+ - Set only `ASSEMBLYAI_API_KEY`, then run a podcast URL or `--youtube yt-dlp` flow; `transcriptionProvider` should report `assemblyai`.
30
33
  - Podcast URL (Whisper): should show “Downloading audio …” then “Transcribing …” with duration when known.
31
34
  - `summarize https://podcasts.apple.com/us/podcast/2424-jelly-roll/id360084272?i=1000740717432 --metrics detailed`
32
35
 
package/docs/media.md CHANGED
@@ -14,7 +14,7 @@ read_when:
14
14
  ## Transcript resolution order
15
15
 
16
16
  1. Embedded captions (VTT/JSON) when available.
17
- 2. yt-dlp download + Whisper transcription (Groq first; then ONNX/local/OpenAI/FAL fallback).
17
+ 2. yt-dlp download + transcription (Groq first; then ONNX/local whisper.cpp; then AssemblyAI/Gemini/OpenAI/FAL fallback).
18
18
 
19
19
  ## CLI behavior
20
20
 
@@ -25,6 +25,14 @@ read_when:
25
25
  - X/Twitter status URLs with detected video auto-switch to transcript-first (yt-dlp), even in auto mode.
26
26
  - X broadcasts (`/i/broadcasts/...`) are treated as media-only and go transcript-first by default.
27
27
  - Local media files are capped at 2 GB; remote media URLs are best-effort via yt-dlp (no explicit size limit).
28
+ - Remote transcription providers: `ASSEMBLYAI_API_KEY`, `GEMINI_API_KEY` / `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`, `OPENAI_API_KEY`, `FAL_KEY` (plus `GROQ_API_KEY` before local/remote fallback).
29
+ - Gemini uses the Files API automatically for larger uploads.
30
+
31
+ ## Shared helpers
32
+
33
+ - Direct media classification lives in `packages/core/src/content/direct-media.ts`.
34
+ - Local path/`file://` normalization + mtime lookup lives in `packages/core/src/content/local-file.ts`.
35
+ - Slides, URL extraction, and transcription should reuse those helpers instead of re-parsing extensions separately.
28
36
 
29
37
  ## Chrome extension behavior
30
38
 
@@ -24,7 +24,7 @@ This is also the built-in default when you don’t specify a model.
24
24
 
25
25
  Model ids:
26
26
 
27
- - Native: `<provider>/<model>` (e.g. `openai/gpt-5-mini`, `google/gemini-3-flash-preview`)
27
+ - Native: `<provider>/<model>` (e.g. `openai/gpt-5-mini`, `google/gemini-3-flash`)
28
28
  - Forced OpenRouter: `openrouter/<author>/<slug>` (e.g. `openrouter/meta-llama/llama-3.3-70b-instruct:free`)
29
29
 
30
30
  Behavior:
@@ -68,7 +68,7 @@ Example:
68
68
  "rules": [
69
69
  {
70
70
  "when": ["video"],
71
- "candidates": ["google/gemini-3-flash-preview"]
71
+ "candidates": ["google/gemini-3-flash"]
72
72
  },
73
73
  {
74
74
  "when": ["website", "youtube"],
@@ -0,0 +1,57 @@
1
+ ---
2
+ summary: "Map of model auto-selection, provider capabilities, and LLM execution paths."
3
+ read_when:
4
+ - "When changing auto model order or CLI fallback behavior."
5
+ - "When adding provider capabilities or changing document/streaming support."
6
+ ---
7
+
8
+ # Model / Provider Resolution
9
+
10
+ Goal: reduce implicit provider knowledge.
11
+
12
+ ## Shared capability registry
13
+
14
+ - `src/llm/provider-capabilities.ts`
15
+ Source of truth for:
16
+ - required env per provider
17
+ - CLI default models
18
+ - auto CLI order
19
+ - document support
20
+ - streaming support
21
+
22
+ If a provider rule changes, update this file first.
23
+
24
+ ## Auto model selection
25
+
26
+ - `src/model-auto.ts`
27
+ Responsibilities:
28
+ - resolve auto rules
29
+ - prepend CLI candidates
30
+ - map native candidates to OpenRouter when safe
31
+ - emit attempts with required env + transport
32
+
33
+ Keep it selection-focused.
34
+ Do not add provider-specific capability branches there unless the registry cannot express them.
35
+
36
+ ## Execution
37
+
38
+ - `src/llm/generate-text.ts`
39
+ Responsibilities:
40
+ - parse requested model id
41
+ - validate input shape
42
+ - route to provider transport
43
+ - normalize retries / fallbacks
44
+
45
+ Provider-specific SDK/http details belong under `src/llm/providers/*`.
46
+
47
+ ## Error shaping
48
+
49
+ - access / model availability normalization stays provider-local when truly provider-specific
50
+ - generic capability errors should come from the shared registry
51
+ - unsupported functionality errors should be thrown before transport setup
52
+
53
+ ## Rules
54
+
55
+ - add capability once; consume it in `model-auto` and `generate-text`
56
+ - keep provider env alias handling centralized
57
+ - keep default CLI model changes in the registry, not scattered tests/constants
package/docs/releasing.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- summary: "Release checklist + Homebrew tap update."
2
+ summary: "Release checklist + Homebrew/core verify step."
3
3
  ---
4
4
 
5
5
  # Releasing
@@ -8,22 +8,19 @@ summary: "Release checklist + Homebrew tap update."
8
8
 
9
9
  - Ship npm packages (core first, then CLI).
10
10
  - Tag + GitHub release.
11
- - Update Homebrew tap so `brew install steipete/tap/summarize` matches latest tag.
11
+ - Verify the Homebrew/core formula so `brew install summarize` matches the latest tag.
12
12
 
13
13
  ## Checklist
14
14
 
15
- 1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag → tap).
15
+ 1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag).
16
16
  2. Create GitHub release for the new tag (match version, attach notes/assets as needed).
17
- 3. If you didn’t run `tap` in the script, update the Homebrew tap formula for `summarize`:
18
- - Bump version to the new tag.
19
- - Update tarball URL + SHA256 for the new release.
20
- 4. Verify Homebrew install reflects the new version:
21
- - `brew install steipete/tap/summarize`
17
+ 3. Verify the Homebrew/core formula reflects the new version:
18
+ - `brew install summarize`
22
19
  - `summarize --version` matches tag.
23
- - Run a feature added in the release (e.g. `summarize daemon install` for v0.8.2).
24
- 5. If anything fails, fix and re-cut the release (no partials).
20
+ - Run a feature added in the release (for example `summarize daemon install`).
21
+ 4. If anything fails, fix and re-cut the release (no partials).
25
22
 
26
23
  ## Common failure
27
24
 
28
- - NPM/GitHub release updated, tap not updated users stuck on old version.
29
- Fix: always do step 3–4 before announcing.
25
+ - NPM/GitHub release updated, but Homebrew/core still serves the old version.
26
+ Fix: always do step 3 before announcing.
@@ -54,7 +54,7 @@
54
54
  <ul>
55
55
  <li>
56
56
  <code>npm i -g @steipete/summarize</code> or
57
- <code>brew install steipete/tap/summarize</code>
57
+ <code>brew install summarize</code>
58
58
  </li>
59
59
  <li>Build extension: <code>pnpm -C apps/chrome-extension build</code></li>
60
60
  <li>Load unpacked: <code>apps/chrome-extension/.output/chrome-mv3</code></li>
@@ -137,6 +137,11 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
137
137
  </div>
138
138
  <div class="ctaRow">
139
139
  <a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
140
+ <a
141
+ class="btn"
142
+ href="https://chromewebstore.google.com/detail/summarize/cejgnmmhbbpdmjnfppjdfkocebngehfg"
143
+ >Chrome Web Store</a
144
+ >
140
145
  <a class="btn" href="https://github.com/steipete/summarize/releases/latest"
141
146
  >Latest release</a
142
147
  >
@@ -0,0 +1,46 @@
1
+ ---
2
+ summary: "Map of slide extraction terminal output and extension streaming flow."
3
+ read_when:
4
+ - "When changing slide terminal output, streaming, or sidepanel state."
5
+ - "When debugging slide rendering regressions in CLI or extension."
6
+ ---
7
+
8
+ # Slides Rendering Flow
9
+
10
+ Two main paths.
11
+
12
+ ## CLI / terminal
13
+
14
+ - `src/run/flows/url/slides-output.ts`
15
+ Public construction + orchestration only.
16
+ - `slides-output-state.ts`
17
+ Slide timeline state.
18
+ Waiters.
19
+ Finalization.
20
+ - `slides-output-render.ts`
21
+ Terminal rendering.
22
+ Inline-image policy.
23
+ Debug path.
24
+ - `slides-output-stream.ts`
25
+ Summary-stream parsing glue.
26
+
27
+ Rule: keep terminal I/O in render helpers; keep state mutations in the state store.
28
+
29
+ ## Chrome extension
30
+
31
+ - `apps/chrome-extension/src/entrypoints/sidepanel/stream-controller.ts`
32
+ Transport lifecycle.
33
+ - `stream-controller-policy.ts`
34
+ Chunk/status terminal state rules.
35
+ - `apps/chrome-extension/src/lib/extension-logs.ts`
36
+ Storage queue + flush only.
37
+ - `extension-log-format.ts`
38
+ Pure log serialization/truncation.
39
+
40
+ Rule: push pure status/log logic out of adapters first.
41
+
42
+ ## When debugging
43
+
44
+ 1. Check state transitions before DOM issues.
45
+ 2. Check stream policy before transport retry logic.
46
+ 3. Check cache/hydration helpers before blaming rendering.
package/docs/slides.md CHANGED
@@ -44,11 +44,11 @@ read_when:
44
44
 
45
45
  ## UI behavior
46
46
 
47
- - Default summary stays unchanged (no slide text).
48
- - Slide strip (compact) stays horizontal; no modal required.
49
- - Expand toggle switches to vertical full-width list:
50
- - cards: thumbnail, timestamp, text.
51
- - cards appear above summary.
47
+ - Side panel slide mode is slide-first:
48
+ - vertical full-width cards by default
49
+ - thumbnail + timestamp + text
50
+ - transcript/OCR text appears before slide images finish extracting
51
+ - No giant summary block under active slide cards.
52
52
  - Slide click: seek only (no modal).
53
53
  - OCR toggle appears near summarize control only when OCR is significant
54
54
  (enough slides + total OCR chars); otherwise hide it.
package/docs/smoketest.md CHANGED
@@ -16,7 +16,7 @@ Goal: exercise URL + file inputs, extraction + LLM summary paths, multiple model
16
16
  ## Models (cheap/fast)
17
17
 
18
18
  - `openai/gpt-5-mini`
19
- - `google/gemini-3-flash-preview`
19
+ - `google/gemini-3-flash`
20
20
 
21
21
  ## Matrix (20 cases)
22
22
 
@@ -0,0 +1,73 @@
1
+ ---
2
+ summary: "Map of transcript provider selection and transcription fallback flow."
3
+ read_when:
4
+ - "When changing podcast, YouTube, or generic transcript provider order."
5
+ - "When changing remote transcription fallbacks or provider setup errors."
6
+ ---
7
+
8
+ # Transcript Provider Flow
9
+
10
+ Goal: keep provider entrypoints thin; keep provider policy explicit.
11
+
12
+ ## Provider entrypoints
13
+
14
+ - `packages/core/src/content/transcript/providers/youtube.ts`
15
+ YouTube orchestration only.
16
+ Web captions first.
17
+ `yt-dlp` or Apify fallback next.
18
+ - `packages/core/src/content/transcript/providers/podcast.ts`
19
+ Podcast orchestration only.
20
+ Feed/Spotify/Apple/enclosure/`yt-dlp` chain.
21
+ - `packages/core/src/content/transcript/providers/generic.ts`
22
+ Thin orchestration only.
23
+ Embedded tracks first.
24
+ Direct-media / X media fallback next.
25
+ - `packages/core/src/content/transcript/providers/generic-embedded.ts`
26
+ Embedded media detection + caption-track parsing only.
27
+ - `packages/core/src/content/transcript/providers/generic-direct-media.ts`
28
+ Direct-media yt-dlp/transcription fallback only.
29
+ - `packages/core/src/content/transcript/providers/generic-twitter.ts`
30
+ X/Twitter cookies + yt-dlp orchestration only.
31
+
32
+ ## Shared policy
33
+
34
+ - `transcription-capability.ts`
35
+ One place for:
36
+ - `resolveTranscriptProviderCapabilities`
37
+ - `canTranscribe`
38
+ - `canRunYtDlp`
39
+ - missing-provider note/result shaping
40
+ - `transcription-start.ts`
41
+ Runtime availability only.
42
+ Local whisper, ONNX, cloud presence, display hints.
43
+
44
+ ## Remote fallback
45
+
46
+ - `packages/core/src/transcription/whisper/cloud-providers.ts`
47
+ Provider order + labels + model-id chain.
48
+ - `packages/core/src/transcription/whisper/remote-provider-attempts.ts`
49
+ Per-provider byte/file attempts.
50
+ - `packages/core/src/transcription/whisper/remote.ts`
51
+ Order loop only.
52
+ Fallback notes.
53
+ OpenAI chunk/delegate policy.
54
+
55
+ ## Current order
56
+
57
+ - local ONNX / whisper.cpp before cloud
58
+ - cloud bytes/file order:
59
+ - AssemblyAI
60
+ - Gemini
61
+ - OpenAI
62
+ - FAL
63
+
64
+ ## Rules
65
+
66
+ - keep entrypoints thin
67
+ - add provider notes in shared helpers, not scattered strings
68
+ - prefer pure parser helpers before touching orchestration
69
+ - if adding a new provider:
70
+ - register cloud metadata
71
+ - add remote attempt handler
72
+ - widen shared capability helper
73
+ - add focused provider tests before live tests
package/docs/website.md CHANGED
@@ -13,10 +13,11 @@ Use this for non-YouTube URLs.
13
13
  - Fetches the page HTML.
14
14
  - Extracts “article-ish” content and normalizes it into clean text.
15
15
  - If extraction looks blocked or too thin, it can retry via Firecrawl (Markdown).
16
+ - Firecrawl applies to non-YouTube URLs only; YouTube URLs use the `--youtube` transcript path instead.
16
17
  - If a page is effectively “video-only”, it may treat it as a video input (see `--video-mode`).
17
18
  - `--video-mode transcript` prefers embedded media transcripts on pages with audio/video (captions → yt-dlp/Whisper fallback).
18
19
  - With `--format md`, the CLI defaults to `--markdown-mode readability` (Readability article HTML as the Markdown input).
19
- - Use `--firecrawl always` to try Firecrawl first.
20
+ - Use `--firecrawl always` to try Firecrawl first for non-YouTube URLs.
20
21
  - With `--format md`, `--markdown-mode auto|llm|readability` can also convert HTML → Markdown via an LLM using the configured `--model` (no provider fallback).
21
22
  - With `--format md`, `--markdown-mode auto` may fall back to `uvx markitdown` when available (disable with `--preprocess off`).
22
23
  - For podcast URLs (Apple Podcasts, RSS, Spotify episodes), it downloads the episode audio and transcribes via Whisper (prefers local `whisper.cpp` when installed + model available); progress shows “Downloading audio …” then “Transcribing …” (duration uses RSS hints or `ffprobe` when available).
@@ -33,6 +34,7 @@ Daemon note:
33
34
  ## Twitter/X
34
35
 
35
36
  - Tweet audio transcription runs only with `--video-mode transcript` (auto mode skips yt-dlp for tweets).
37
+ - Tweet text extraction prefers `xurl` when installed, falls back to `bird`, then Nitter.
36
38
 
37
39
  ## Flags
38
40
 
package/docs/youtube.md CHANGED
@@ -14,7 +14,7 @@ YouTube URLs use transcript-first extraction.
14
14
  - `web`: try `youtubei` → `captionTracks` only
15
15
  - `no-auto`: try creator captions only (skip auto-generated/ASR) → `yt-dlp` (if configured)
16
16
  - `apify`: Apify only
17
- - `yt-dlp`: download audio + transcribe (local `whisper.cpp` preferred; OpenAI/FAL fallback)
17
+ - `yt-dlp`: download audio + transcribe (Groq first; then local `whisper.cpp`; then AssemblyAI/Gemini/OpenAI/FAL fallback)
18
18
 
19
19
  ## `youtubei` vs `captionTracks`
20
20
 
@@ -32,7 +32,9 @@ YouTube URLs use transcript-first extraction.
32
32
  - If no transcript is available, we still extract `ytInitialPlayerResponse.videoDetails.shortDescription` so YouTube links can still summarize meaningfully.
33
33
  - Apify is an optional fallback (needs `APIFY_API_TOKEN`).
34
34
  - By default, we use the actor id `faVsWy9VTSNVIhWpR` (Pinto Studio’s “Youtube Transcript Scraper”).
35
- - `yt-dlp` requires the `yt-dlp` binary (either set `YT_DLP_PATH` or have it on `PATH`) and either local `whisper.cpp` (preferred) or `OPENAI_API_KEY` / `FAL_KEY`.
35
+ - `yt-dlp` requires the `yt-dlp` binary (either set `YT_DLP_PATH` or have it on `PATH`) and either local `whisper.cpp` or one of `GROQ_API_KEY`, `ASSEMBLYAI_API_KEY`, `GEMINI_API_KEY`, `OPENAI_API_KEY`, or `FAL_KEY`.
36
+ - AssemblyAI is supported as a dedicated remote transcription provider in the fallback chain.
37
+ - Gemini is used automatically when available after AssemblyAI/local providers, and handles larger uploads via the Files API.
36
38
  - If OpenAI transcription fails and `FAL_KEY` is set, we fall back to FAL automatically.
37
39
 
38
40
  ## Example
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steipete/summarize",
3
- "version": "0.11.1",
3
+ "version": "0.13.0",
4
4
  "description": "Link → clean text → summary.",
5
5
  "bin": {
6
6
  "summarize": "./dist/cli.js",
@@ -32,9 +32,9 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@mariozechner/pi-ai": "^0.52.12",
35
+ "@mariozechner/pi-ai": "^0.65.2",
36
36
  "commander": "^14.0.3",
37
- "file-type": "^21.3.0",
37
+ "file-type": "^22.0.0",
38
38
  "gpt-tokenizer": "^3.4.0",
39
39
  "json5": "^2.2.3",
40
40
  "markdansi": "^0.2.1",
@@ -43,22 +43,22 @@
43
43
  "osc-progress": "^0.3.0",
44
44
  "tokentally": "^0.1.1",
45
45
  "tslog": "^4.10.2",
46
- "@steipete/summarize-core": "0.11.1"
46
+ "@steipete/summarize-core": "0.13.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@fal-ai/client": "^1.9.1",
50
- "@types/jsdom": "^27.0.0",
51
- "@types/node": "^25.2.3",
52
- "@types/sanitize-html": "^2.16.0",
53
- "@vitest/coverage-v8": "^4.0.18",
54
- "esbuild": "^0.27.3",
55
- "oxfmt": "0.32.0",
56
- "oxlint": "^1.47.0",
57
- "oxlint-tsgolint": "^0.12.2",
58
- "rimraf": "^6.1.2",
49
+ "@fal-ai/client": "^1.9.5",
50
+ "@types/jsdom": "^28.0.1",
51
+ "@types/node": "^25.5.2",
52
+ "@types/sanitize-html": "^2.16.1",
53
+ "@vitest/coverage-v8": "^4.1.2",
54
+ "esbuild": "^0.28.0",
55
+ "oxfmt": "0.44.0",
56
+ "oxlint": "^1.59.0",
57
+ "oxlint-tsgolint": "^0.20.0",
58
+ "rimraf": "^6.1.3",
59
59
  "tsx": "^4.21.0",
60
- "typescript": "^5.9.3",
61
- "vitest": "^4.0.18"
60
+ "typescript": "^6.0.2",
61
+ "vitest": "^4.1.2"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=22"
@@ -71,6 +71,7 @@
71
71
  "build:lib": "tsc -p tsconfig.build.json",
72
72
  "check": "pnpm format:check && pnpm lint && pnpm test:coverage",
73
73
  "clean": "rimraf dist packages/core/dist",
74
+ "dev:cli": "pnpm -C packages/core build && tsx src/cli.ts",
74
75
  "docs:list": "tsx scripts/docs-list.ts",
75
76
  "format": "oxfmt --write",
76
77
  "format:check": "oxfmt --check",