@steipete/summarize 0.11.1 → 0.12.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 (361) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/README.md +63 -17
  3. package/dist/cli.js +1 -1
  4. package/dist/esm/cache-keys.js +75 -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 +14 -91
  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 +50 -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 +438 -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/daemon/agent-model.js +235 -0
  27. package/dist/esm/daemon/agent-model.js.map +1 -0
  28. package/dist/esm/daemon/agent-request.js +87 -0
  29. package/dist/esm/daemon/agent-request.js.map +1 -0
  30. package/dist/esm/daemon/agent.js +42 -243
  31. package/dist/esm/daemon/agent.js.map +1 -1
  32. package/dist/esm/daemon/chat.js +69 -8
  33. package/dist/esm/daemon/chat.js.map +1 -1
  34. package/dist/esm/daemon/cli.js +21 -4
  35. package/dist/esm/daemon/cli.js.map +1 -1
  36. package/dist/esm/daemon/config.js +65 -9
  37. package/dist/esm/daemon/config.js.map +1 -1
  38. package/dist/esm/daemon/env-snapshot.js +4 -0
  39. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  40. package/dist/esm/daemon/flow-context.js +8 -1
  41. package/dist/esm/daemon/flow-context.js.map +1 -1
  42. package/dist/esm/daemon/models.js +16 -0
  43. package/dist/esm/daemon/models.js.map +1 -1
  44. package/dist/esm/daemon/process-registry.js.map +1 -1
  45. package/dist/esm/daemon/server-admin-routes.js +134 -0
  46. package/dist/esm/daemon/server-admin-routes.js.map +1 -0
  47. package/dist/esm/daemon/server-agent-route.js +104 -0
  48. package/dist/esm/daemon/server-agent-route.js.map +1 -0
  49. package/dist/esm/daemon/server-http.js +89 -0
  50. package/dist/esm/daemon/server-http.js.map +1 -0
  51. package/dist/esm/daemon/server-session-routes.js +209 -0
  52. package/dist/esm/daemon/server-session-routes.js.map +1 -0
  53. package/dist/esm/daemon/server-session.js +118 -0
  54. package/dist/esm/daemon/server-session.js.map +1 -0
  55. package/dist/esm/daemon/server-sse.js +28 -0
  56. package/dist/esm/daemon/server-sse.js.map +1 -0
  57. package/dist/esm/daemon/server-summarize-execution.js +357 -0
  58. package/dist/esm/daemon/server-summarize-execution.js.map +1 -0
  59. package/dist/esm/daemon/server-summarize-request.js +119 -0
  60. package/dist/esm/daemon/server-summarize-request.js.map +1 -0
  61. package/dist/esm/daemon/server.js +72 -1121
  62. package/dist/esm/daemon/server.js.map +1 -1
  63. package/dist/esm/daemon/summarize-progress.js +1 -1
  64. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  65. package/dist/esm/daemon/summarize.js.map +1 -1
  66. package/dist/esm/llm/cli-exec.js +75 -0
  67. package/dist/esm/llm/cli-exec.js.map +1 -0
  68. package/dist/esm/llm/cli-provider-output.js +191 -0
  69. package/dist/esm/llm/cli-provider-output.js.map +1 -0
  70. package/dist/esm/llm/cli.js +3 -212
  71. package/dist/esm/llm/cli.js.map +1 -1
  72. package/dist/esm/llm/generate-text-document.js +109 -0
  73. package/dist/esm/llm/generate-text-document.js.map +1 -0
  74. package/dist/esm/llm/generate-text-shared.js +102 -0
  75. package/dist/esm/llm/generate-text-shared.js.map +1 -0
  76. package/dist/esm/llm/generate-text-stream.js +258 -0
  77. package/dist/esm/llm/generate-text-stream.js.map +1 -0
  78. package/dist/esm/llm/generate-text.js +145 -480
  79. package/dist/esm/llm/generate-text.js.map +1 -1
  80. package/dist/esm/llm/model-id.js +21 -20
  81. package/dist/esm/llm/model-id.js.map +1 -1
  82. package/dist/esm/llm/provider-capabilities.js +2 -0
  83. package/dist/esm/llm/provider-capabilities.js.map +1 -0
  84. package/dist/esm/llm/provider-profile.js +142 -0
  85. package/dist/esm/llm/provider-profile.js.map +1 -0
  86. package/dist/esm/llm/providers/google.js +42 -5
  87. package/dist/esm/llm/providers/google.js.map +1 -1
  88. package/dist/esm/llm/providers/models.js +13 -0
  89. package/dist/esm/llm/providers/models.js.map +1 -1
  90. package/dist/esm/llm/providers/openai.js.map +1 -1
  91. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  92. package/dist/esm/model-auto-cli.js +89 -0
  93. package/dist/esm/model-auto-cli.js.map +1 -0
  94. package/dist/esm/model-auto-rules.js +86 -0
  95. package/dist/esm/model-auto-rules.js.map +1 -0
  96. package/dist/esm/model-auto.js +10 -245
  97. package/dist/esm/model-auto.js.map +1 -1
  98. package/dist/esm/model-spec.js +23 -17
  99. package/dist/esm/model-spec.js.map +1 -1
  100. package/dist/esm/refresh-free.js +1 -1
  101. package/dist/esm/refresh-free.js.map +1 -1
  102. package/dist/esm/run/attachments.js +1 -1
  103. package/dist/esm/run/attachments.js.map +1 -1
  104. package/dist/esm/run/bird/exec.js +23 -0
  105. package/dist/esm/run/bird/exec.js.map +1 -0
  106. package/dist/esm/run/bird/media.js +171 -0
  107. package/dist/esm/run/bird/media.js.map +1 -0
  108. package/dist/esm/run/bird/parse.js +82 -0
  109. package/dist/esm/run/bird/parse.js.map +1 -0
  110. package/dist/esm/run/bird/types.js +2 -0
  111. package/dist/esm/run/bird/types.js.map +1 -0
  112. package/dist/esm/run/bird.js +86 -144
  113. package/dist/esm/run/bird.js.map +1 -1
  114. package/dist/esm/run/cache-state.js.map +1 -1
  115. package/dist/esm/run/constants.js +2 -1
  116. package/dist/esm/run/constants.js.map +1 -1
  117. package/dist/esm/run/env.js +3 -0
  118. package/dist/esm/run/env.js.map +1 -1
  119. package/dist/esm/run/finish-line-labels.js +76 -0
  120. package/dist/esm/run/finish-line-labels.js.map +1 -0
  121. package/dist/esm/run/finish-line-lengths.js +96 -0
  122. package/dist/esm/run/finish-line-lengths.js.map +1 -0
  123. package/dist/esm/run/finish-line.js +3 -169
  124. package/dist/esm/run/finish-line.js.map +1 -1
  125. package/dist/esm/run/flows/asset/extract.js.map +1 -1
  126. package/dist/esm/run/flows/asset/input.js +1 -1
  127. package/dist/esm/run/flows/asset/input.js.map +1 -1
  128. package/dist/esm/run/flows/asset/media.js +19 -10
  129. package/dist/esm/run/flows/asset/media.js.map +1 -1
  130. package/dist/esm/run/flows/asset/output.js.map +1 -1
  131. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  132. package/dist/esm/run/flows/asset/summary-attempts.js +109 -0
  133. package/dist/esm/run/flows/asset/summary-attempts.js.map +1 -0
  134. package/dist/esm/run/flows/asset/summary.js +19 -107
  135. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  136. package/dist/esm/run/flows/url/extract.js +7 -4
  137. package/dist/esm/run/flows/url/extract.js.map +1 -1
  138. package/dist/esm/run/flows/url/flow-progress.js +119 -0
  139. package/dist/esm/run/flows/url/flow-progress.js.map +1 -0
  140. package/dist/esm/run/flows/url/flow.js +22 -93
  141. package/dist/esm/run/flows/url/flow.js.map +1 -1
  142. package/dist/esm/run/flows/url/markdown.js +21 -3
  143. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  144. package/dist/esm/run/flows/url/progress-status.js +56 -0
  145. package/dist/esm/run/flows/url/progress-status.js.map +1 -0
  146. package/dist/esm/run/flows/url/slides-output-render.js +78 -0
  147. package/dist/esm/run/flows/url/slides-output-render.js.map +1 -0
  148. package/dist/esm/run/flows/url/slides-output-state.js +86 -0
  149. package/dist/esm/run/flows/url/slides-output-state.js.map +1 -0
  150. package/dist/esm/run/flows/url/slides-output-stream.js +271 -0
  151. package/dist/esm/run/flows/url/slides-output-stream.js.map +1 -0
  152. package/dist/esm/run/flows/url/slides-output.js +29 -422
  153. package/dist/esm/run/flows/url/slides-output.js.map +1 -1
  154. package/dist/esm/run/flows/url/slides-text-markdown.js +431 -0
  155. package/dist/esm/run/flows/url/slides-text-markdown.js.map +1 -0
  156. package/dist/esm/run/flows/url/slides-text-transcript.js +199 -0
  157. package/dist/esm/run/flows/url/slides-text-transcript.js.map +1 -0
  158. package/dist/esm/run/flows/url/slides-text-types.js +2 -0
  159. package/dist/esm/run/flows/url/slides-text-types.js.map +1 -0
  160. package/dist/esm/run/flows/url/slides-text.js +2 -627
  161. package/dist/esm/run/flows/url/slides-text.js.map +1 -1
  162. package/dist/esm/run/flows/url/summary-finish.js +34 -0
  163. package/dist/esm/run/flows/url/summary-finish.js.map +1 -0
  164. package/dist/esm/run/flows/url/summary-json.js +32 -0
  165. package/dist/esm/run/flows/url/summary-json.js.map +1 -0
  166. package/dist/esm/run/flows/url/summary-prompt.js +147 -0
  167. package/dist/esm/run/flows/url/summary-prompt.js.map +1 -0
  168. package/dist/esm/run/flows/url/summary-resolution.js +320 -0
  169. package/dist/esm/run/flows/url/summary-resolution.js.map +1 -0
  170. package/dist/esm/run/flows/url/summary-timestamps.js +136 -0
  171. package/dist/esm/run/flows/url/summary-timestamps.js.map +1 -0
  172. package/dist/esm/run/flows/url/summary.js +49 -543
  173. package/dist/esm/run/flows/url/summary.js.map +1 -1
  174. package/dist/esm/run/help.js +9 -3
  175. package/dist/esm/run/help.js.map +1 -1
  176. package/dist/esm/run/markdown-transforms.js +89 -0
  177. package/dist/esm/run/markdown-transforms.js.map +1 -0
  178. package/dist/esm/run/markdown.js +1 -96
  179. package/dist/esm/run/markdown.js.map +1 -1
  180. package/dist/esm/run/run-env.js +28 -7
  181. package/dist/esm/run/run-env.js.map +1 -1
  182. package/dist/esm/run/run-settings-parse.js +73 -0
  183. package/dist/esm/run/run-settings-parse.js.map +1 -0
  184. package/dist/esm/run/run-settings.js +1 -72
  185. package/dist/esm/run/run-settings.js.map +1 -1
  186. package/dist/esm/run/runner-contexts.js +116 -0
  187. package/dist/esm/run/runner-contexts.js.map +1 -0
  188. package/dist/esm/run/runner-execution.js +62 -0
  189. package/dist/esm/run/runner-execution.js.map +1 -0
  190. package/dist/esm/run/runner-flags.js +97 -0
  191. package/dist/esm/run/runner-flags.js.map +1 -0
  192. package/dist/esm/run/runner-setup.js +109 -0
  193. package/dist/esm/run/runner-setup.js.map +1 -0
  194. package/dist/esm/run/runner-slides.js +38 -0
  195. package/dist/esm/run/runner-slides.js.map +1 -0
  196. package/dist/esm/run/runner.js +99 -390
  197. package/dist/esm/run/runner.js.map +1 -1
  198. package/dist/esm/run/slides-render.js +5 -2
  199. package/dist/esm/run/slides-render.js.map +1 -1
  200. package/dist/esm/run/stdin-temp-file.js +1 -1
  201. package/dist/esm/run/stdin-temp-file.js.map +1 -1
  202. package/dist/esm/run/streaming.js +1 -0
  203. package/dist/esm/run/streaming.js.map +1 -1
  204. package/dist/esm/run/summary-engine.js +26 -10
  205. package/dist/esm/run/summary-engine.js.map +1 -1
  206. package/dist/esm/run/summary-llm.js +2 -1
  207. package/dist/esm/run/summary-llm.js.map +1 -1
  208. package/dist/esm/run/terminal.js +4 -1
  209. package/dist/esm/run/terminal.js.map +1 -1
  210. package/dist/esm/run/transcriber-cli.js +1 -1
  211. package/dist/esm/run/transcriber-cli.js.map +1 -1
  212. package/dist/esm/slides/download.js +242 -0
  213. package/dist/esm/slides/download.js.map +1 -0
  214. package/dist/esm/slides/extract-finalize.js +98 -0
  215. package/dist/esm/slides/extract-finalize.js.map +1 -0
  216. package/dist/esm/slides/extract.js +64 -1621
  217. package/dist/esm/slides/extract.js.map +1 -1
  218. package/dist/esm/slides/frame-extraction.js +372 -0
  219. package/dist/esm/slides/frame-extraction.js.map +1 -0
  220. package/dist/esm/slides/ingest.js +167 -0
  221. package/dist/esm/slides/ingest.js.map +1 -0
  222. package/dist/esm/slides/ocr.js +91 -0
  223. package/dist/esm/slides/ocr.js.map +1 -0
  224. package/dist/esm/slides/process.js +218 -0
  225. package/dist/esm/slides/process.js.map +1 -0
  226. package/dist/esm/slides/scene-detection.js +387 -0
  227. package/dist/esm/slides/scene-detection.js.map +1 -0
  228. package/dist/esm/slides/source-id.js +42 -0
  229. package/dist/esm/slides/source-id.js.map +1 -0
  230. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  231. package/dist/esm/tty/progress/transcript.js +21 -8
  232. package/dist/esm/tty/progress/transcript.js.map +1 -1
  233. package/dist/esm/tty/spinner.js +8 -2
  234. package/dist/esm/tty/spinner.js.map +1 -1
  235. package/dist/esm/tty/website-progress.js +5 -3
  236. package/dist/esm/tty/website-progress.js.map +1 -1
  237. package/dist/esm/version.js +1 -1
  238. package/dist/types/cache-keys.d.ts +44 -0
  239. package/dist/types/cache-slides-cleanup.d.ts +1 -0
  240. package/dist/types/cache.d.ts +1 -9
  241. package/dist/types/config/env.d.ts +6 -0
  242. package/dist/types/config/model.d.ts +3 -0
  243. package/dist/types/config/parse-helpers.d.ts +7 -0
  244. package/dist/types/config/read.d.ts +2 -0
  245. package/dist/types/config/sections.d.ts +33 -0
  246. package/dist/types/config/types.d.ts +230 -0
  247. package/dist/types/config.d.ts +3 -209
  248. package/dist/types/costs.d.ts +1 -1
  249. package/dist/types/daemon/agent-model.d.ts +40 -0
  250. package/dist/types/daemon/agent-request.d.ts +14 -0
  251. package/dist/types/daemon/chat.d.ts +3 -1
  252. package/dist/types/daemon/config.d.ts +13 -2
  253. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  254. package/dist/types/daemon/flow-context.d.ts +1 -1
  255. package/dist/types/daemon/models.d.ts +1 -0
  256. package/dist/types/daemon/server-admin-routes.d.ts +22 -0
  257. package/dist/types/daemon/server-agent-route.d.ts +9 -0
  258. package/dist/types/daemon/server-http.d.ts +10 -0
  259. package/dist/types/daemon/server-session-routes.d.ts +11 -0
  260. package/dist/types/daemon/server-session.d.ts +52 -0
  261. package/dist/types/daemon/server-sse.d.ts +12 -0
  262. package/dist/types/daemon/server-summarize-execution.d.ts +70 -0
  263. package/dist/types/daemon/server-summarize-request.d.ts +36 -0
  264. package/dist/types/daemon/server.d.ts +3 -4
  265. package/dist/types/daemon/summarize.d.ts +1 -1
  266. package/dist/types/llm/cli-exec.d.ts +13 -0
  267. package/dist/types/llm/cli-provider-output.d.ts +16 -0
  268. package/dist/types/llm/generate-text-document.d.ts +34 -0
  269. package/dist/types/llm/generate-text-shared.d.ts +25 -0
  270. package/dist/types/llm/generate-text-stream.d.ts +26 -0
  271. package/dist/types/llm/generate-text.d.ts +6 -26
  272. package/dist/types/llm/html-to-markdown.d.ts +1 -1
  273. package/dist/types/llm/model-id.d.ts +1 -1
  274. package/dist/types/llm/provider-capabilities.d.ts +2 -0
  275. package/dist/types/llm/provider-profile.d.ts +31 -0
  276. package/dist/types/llm/providers/google.d.ts +6 -0
  277. package/dist/types/llm/providers/models.d.ts +5 -0
  278. package/dist/types/llm/transcript-to-markdown.d.ts +1 -1
  279. package/dist/types/model-auto-cli.d.ts +15 -0
  280. package/dist/types/model-auto-rules.d.ts +7 -0
  281. package/dist/types/model-auto.d.ts +5 -7
  282. package/dist/types/model-spec.d.ts +2 -2
  283. package/dist/types/run/attachments.d.ts +2 -2
  284. package/dist/types/run/bird/exec.d.ts +1 -0
  285. package/dist/types/run/bird/media.d.ts +3 -0
  286. package/dist/types/run/bird/parse.d.ts +3 -0
  287. package/dist/types/run/bird/types.d.ts +18 -0
  288. package/dist/types/run/bird.d.ts +12 -17
  289. package/dist/types/run/cache-state.d.ts +1 -1
  290. package/dist/types/run/constants.d.ts +2 -1
  291. package/dist/types/run/env.d.ts +1 -0
  292. package/dist/types/run/finish-line-labels.d.ts +29 -0
  293. package/dist/types/run/finish-line-lengths.d.ts +23 -0
  294. package/dist/types/run/finish-line.d.ts +2 -52
  295. package/dist/types/run/flows/asset/extract.d.ts +1 -1
  296. package/dist/types/run/flows/asset/input.d.ts +1 -1
  297. package/dist/types/run/flows/asset/preprocess.d.ts +1 -1
  298. package/dist/types/run/flows/asset/summary-attempts.d.ts +24 -0
  299. package/dist/types/run/flows/asset/summary.d.ts +6 -2
  300. package/dist/types/run/flows/url/flow-progress.d.ts +41 -0
  301. package/dist/types/run/flows/url/markdown.d.ts +2 -2
  302. package/dist/types/run/flows/url/progress-status.d.ts +16 -0
  303. package/dist/types/run/flows/url/slides-output-render.d.ts +43 -0
  304. package/dist/types/run/flows/url/slides-output-state.d.ts +21 -0
  305. package/dist/types/run/flows/url/slides-output-stream.d.ts +18 -0
  306. package/dist/types/run/flows/url/slides-output.d.ts +2 -17
  307. package/dist/types/run/flows/url/slides-text-markdown.d.ts +46 -0
  308. package/dist/types/run/flows/url/slides-text-transcript.d.ts +36 -0
  309. package/dist/types/run/flows/url/slides-text-types.d.ts +8 -0
  310. package/dist/types/run/flows/url/slides-text.d.ts +3 -87
  311. package/dist/types/run/flows/url/summary-finish.d.ts +16 -0
  312. package/dist/types/run/flows/url/summary-json.d.ts +51 -0
  313. package/dist/types/run/flows/url/summary-prompt.d.ts +22 -0
  314. package/dist/types/run/flows/url/summary-resolution.d.ts +31 -0
  315. package/dist/types/run/flows/url/summary-timestamps.d.ts +11 -0
  316. package/dist/types/run/flows/url/types.d.ts +4 -0
  317. package/dist/types/run/markdown-transforms.d.ts +3 -0
  318. package/dist/types/run/run-context.d.ts +4 -0
  319. package/dist/types/run/run-env.d.ts +4 -0
  320. package/dist/types/run/run-settings-parse.d.ts +5 -0
  321. package/dist/types/run/runner-contexts.d.ts +62 -0
  322. package/dist/types/run/runner-execution.d.ts +57 -0
  323. package/dist/types/run/runner-flags.d.ts +41 -0
  324. package/dist/types/run/runner-setup.d.ts +21 -0
  325. package/dist/types/run/runner-slides.d.ts +8 -0
  326. package/dist/types/run/streaming.d.ts +1 -1
  327. package/dist/types/run/summary-engine.d.ts +8 -4
  328. package/dist/types/run/summary-llm.d.ts +4 -3
  329. package/dist/types/run/terminal.d.ts +2 -0
  330. package/dist/types/run/types.d.ts +2 -2
  331. package/dist/types/slides/download.d.ts +29 -0
  332. package/dist/types/slides/extract-finalize.d.ts +57 -0
  333. package/dist/types/slides/extract.d.ts +1 -7
  334. package/dist/types/slides/frame-extraction.d.ts +38 -0
  335. package/dist/types/slides/ingest.d.ts +47 -0
  336. package/dist/types/slides/ocr.d.ts +5 -0
  337. package/dist/types/slides/process.d.ts +22 -0
  338. package/dist/types/slides/scene-detection.d.ts +75 -0
  339. package/dist/types/slides/source-id.d.ts +2 -0
  340. package/dist/types/version.d.ts +1 -1
  341. package/docs/_config.yml +1 -0
  342. package/docs/agent.md +3 -2
  343. package/docs/assets/site.css +134 -2
  344. package/docs/cache.md +2 -1
  345. package/docs/chrome-extension.md +12 -4
  346. package/docs/cli.md +2 -2
  347. package/docs/config.md +11 -4
  348. package/docs/index.html +5 -0
  349. package/docs/llm.md +5 -2
  350. package/docs/manual-tests.md +3 -0
  351. package/docs/media.md +3 -1
  352. package/docs/model-auto.md +2 -2
  353. package/docs/model-provider-resolution.md +57 -0
  354. package/docs/site/index.html +5 -0
  355. package/docs/slides-rendering-flow.md +46 -0
  356. package/docs/slides.md +5 -5
  357. package/docs/smoketest.md +1 -1
  358. package/docs/transcript-provider-flow.md +66 -0
  359. package/docs/website.md +1 -0
  360. package/docs/youtube.md +4 -2
  361. package/package.json +11 -11
package/docs/index.html CHANGED
@@ -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
  >
package/docs/llm.md CHANGED
@@ -24,6 +24,8 @@ 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)
28
30
  - `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
29
31
  - `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
@@ -40,10 +42,11 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
40
42
  - Examples:
41
43
  - `cli/codex/gpt-5.2`
42
44
  - `cli/claude/sonnet`
43
- - `cli/gemini/gemini-3-flash-preview`
45
+ - `cli/gemini/gemini-3-flash`
44
46
  - `cli/agent/gpt-5.2`
45
- - `google/gemini-3-flash-preview`
47
+ - `google/gemini-3-flash`
46
48
  - `openai/gpt-5-mini`
49
+ - `nvidia/z-ai/glm5`
47
50
  - `zai/glm-4.7`
48
51
  - `xai/grok-4-fast-non-reasoning`
49
52
  - `google/gemini-2.0-flash`
@@ -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,8 @@ 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.
28
30
 
29
31
  ## Chrome extension behavior
30
32
 
@@ -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
@@ -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,66 @@
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
+ Embedded tracks first.
23
+ Direct-media / X media fallback next.
24
+
25
+ ## Shared policy
26
+
27
+ - `transcription-capability.ts`
28
+ One place for:
29
+ - `resolveTranscriptProviderCapabilities`
30
+ - `canTranscribe`
31
+ - `canRunYtDlp`
32
+ - missing-provider note/result shaping
33
+ - `transcription-start.ts`
34
+ Runtime availability only.
35
+ Local whisper, ONNX, cloud presence, display hints.
36
+
37
+ ## Remote fallback
38
+
39
+ - `packages/core/src/transcription/whisper/cloud-providers.ts`
40
+ Provider order + labels + model-id chain.
41
+ - `packages/core/src/transcription/whisper/remote-provider-attempts.ts`
42
+ Per-provider byte/file attempts.
43
+ - `packages/core/src/transcription/whisper/remote.ts`
44
+ Order loop only.
45
+ Fallback notes.
46
+ OpenAI chunk/delegate policy.
47
+
48
+ ## Current order
49
+
50
+ - local ONNX / whisper.cpp before cloud
51
+ - cloud bytes/file order:
52
+ - AssemblyAI
53
+ - Gemini
54
+ - OpenAI
55
+ - FAL
56
+
57
+ ## Rules
58
+
59
+ - keep entrypoints thin
60
+ - add provider notes in shared helpers, not scattered strings
61
+ - prefer pure parser helpers before touching orchestration
62
+ - if adding a new provider:
63
+ - register cloud metadata
64
+ - add remote attempt handler
65
+ - widen shared capability helper
66
+ - add focused provider tests before live tests
package/docs/website.md CHANGED
@@ -33,6 +33,7 @@ Daemon note:
33
33
  ## Twitter/X
34
34
 
35
35
  - Tweet audio transcription runs only with `--video-mode transcript` (auto mode skips yt-dlp for tweets).
36
+ - Tweet text extraction prefers `xurl` when installed, falls back to `bird`, then Nitter.
36
37
 
37
38
  ## Flags
38
39
 
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.12.0",
4
4
  "description": "Link → clean text → summary.",
5
5
  "bin": {
6
6
  "summarize": "./dist/cli.js",
@@ -32,7 +32,7 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@mariozechner/pi-ai": "^0.52.12",
35
+ "@mariozechner/pi-ai": "^0.57.1",
36
36
  "commander": "^14.0.3",
37
37
  "file-type": "^21.3.0",
38
38
  "gpt-tokenizer": "^3.4.0",
@@ -43,19 +43,19 @@
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.12.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",
49
+ "@fal-ai/client": "^1.9.4",
50
+ "@types/jsdom": "^28.0.0",
51
+ "@types/node": "^25.3.5",
52
+ "@types/sanitize-html": "^2.16.1",
53
53
  "@vitest/coverage-v8": "^4.0.18",
54
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",
55
+ "oxfmt": "0.36.0",
56
+ "oxlint": "^1.51.0",
57
+ "oxlint-tsgolint": "^0.16.0",
58
+ "rimraf": "^6.1.3",
59
59
  "tsx": "^4.21.0",
60
60
  "typescript": "^5.9.3",
61
61
  "vitest": "^4.0.18"