@steipete/summarize 0.10.0 → 0.11.1

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 (374) hide show
  1. package/CHANGELOG.md +80 -28
  2. package/README.md +115 -30
  3. package/dist/cli.js +1 -1
  4. package/dist/esm/cache.js +67 -65
  5. package/dist/esm/cache.js.map +1 -1
  6. package/dist/esm/cli-main.js +27 -27
  7. package/dist/esm/cli-main.js.map +1 -1
  8. package/dist/esm/cli.js +2 -2
  9. package/dist/esm/cli.js.map +1 -1
  10. package/dist/esm/config.js +310 -166
  11. package/dist/esm/config.js.map +1 -1
  12. package/dist/esm/content/asset.js +53 -50
  13. package/dist/esm/content/asset.js.map +1 -1
  14. package/dist/esm/content/index.js +1 -1
  15. package/dist/esm/content/index.js.map +1 -1
  16. package/dist/esm/costs.js +1 -1
  17. package/dist/esm/costs.js.map +1 -1
  18. package/dist/esm/daemon/agent.js +165 -164
  19. package/dist/esm/daemon/agent.js.map +1 -1
  20. package/dist/esm/daemon/auto-mode.js +3 -3
  21. package/dist/esm/daemon/auto-mode.js.map +1 -1
  22. package/dist/esm/daemon/chat.js +16 -14
  23. package/dist/esm/daemon/chat.js.map +1 -1
  24. package/dist/esm/daemon/cli-entrypoint.js +72 -0
  25. package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
  26. package/dist/esm/daemon/cli.js +63 -87
  27. package/dist/esm/daemon/cli.js.map +1 -1
  28. package/dist/esm/daemon/config.js +15 -15
  29. package/dist/esm/daemon/config.js.map +1 -1
  30. package/dist/esm/daemon/constants.js +6 -6
  31. package/dist/esm/daemon/constants.js.map +1 -1
  32. package/dist/esm/daemon/env-merge.js.map +1 -1
  33. package/dist/esm/daemon/env-snapshot.js +36 -31
  34. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  35. package/dist/esm/daemon/flow-context.js +59 -28
  36. package/dist/esm/daemon/flow-context.js.map +1 -1
  37. package/dist/esm/daemon/launchd.js +100 -55
  38. package/dist/esm/daemon/launchd.js.map +1 -1
  39. package/dist/esm/daemon/meta.js +5 -5
  40. package/dist/esm/daemon/meta.js.map +1 -1
  41. package/dist/esm/daemon/models.js +54 -31
  42. package/dist/esm/daemon/models.js.map +1 -1
  43. package/dist/esm/daemon/process-registry.js +15 -15
  44. package/dist/esm/daemon/process-registry.js.map +1 -1
  45. package/dist/esm/daemon/schtasks.js +42 -42
  46. package/dist/esm/daemon/schtasks.js.map +1 -1
  47. package/dist/esm/daemon/server.js +248 -244
  48. package/dist/esm/daemon/server.js.map +1 -1
  49. package/dist/esm/daemon/summarize-progress.js +11 -11
  50. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  51. package/dist/esm/daemon/summarize.js +29 -29
  52. package/dist/esm/daemon/summarize.js.map +1 -1
  53. package/dist/esm/daemon/systemd.js +47 -47
  54. package/dist/esm/daemon/systemd.js.map +1 -1
  55. package/dist/esm/firecrawl.js +12 -12
  56. package/dist/esm/firecrawl.js.map +1 -1
  57. package/dist/esm/flags.js +32 -32
  58. package/dist/esm/flags.js.map +1 -1
  59. package/dist/esm/index.js +3 -3
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/language.js +1 -1
  62. package/dist/esm/language.js.map +1 -1
  63. package/dist/esm/llm/cli.js +128 -64
  64. package/dist/esm/llm/cli.js.map +1 -1
  65. package/dist/esm/llm/errors.js +1 -1
  66. package/dist/esm/llm/errors.js.map +1 -1
  67. package/dist/esm/llm/generate-text.js +107 -98
  68. package/dist/esm/llm/generate-text.js.map +1 -1
  69. package/dist/esm/llm/google-models.js +17 -17
  70. package/dist/esm/llm/google-models.js.map +1 -1
  71. package/dist/esm/llm/html-to-markdown.js +3 -3
  72. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  73. package/dist/esm/llm/model-id.js +38 -16
  74. package/dist/esm/llm/model-id.js.map +1 -1
  75. package/dist/esm/llm/prompt.js +5 -5
  76. package/dist/esm/llm/prompt.js.map +1 -1
  77. package/dist/esm/llm/providers/anthropic.js +33 -33
  78. package/dist/esm/llm/providers/anthropic.js.map +1 -1
  79. package/dist/esm/llm/providers/google.js +19 -19
  80. package/dist/esm/llm/providers/google.js.map +1 -1
  81. package/dist/esm/llm/providers/models.js +30 -30
  82. package/dist/esm/llm/providers/models.js.map +1 -1
  83. package/dist/esm/llm/providers/openai.js +35 -34
  84. package/dist/esm/llm/providers/openai.js.map +1 -1
  85. package/dist/esm/llm/providers/shared.js +8 -8
  86. package/dist/esm/llm/providers/shared.js.map +1 -1
  87. package/dist/esm/llm/transcript-to-markdown.js +9 -5
  88. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  89. package/dist/esm/llm/usage.js +18 -18
  90. package/dist/esm/llm/usage.js.map +1 -1
  91. package/dist/esm/logging/daemon.js +21 -21
  92. package/dist/esm/logging/daemon.js.map +1 -1
  93. package/dist/esm/logging/ring-file.js +5 -5
  94. package/dist/esm/logging/ring-file.js.map +1 -1
  95. package/dist/esm/markitdown.js +21 -19
  96. package/dist/esm/markitdown.js.map +1 -1
  97. package/dist/esm/media-cache.js +39 -39
  98. package/dist/esm/media-cache.js.map +1 -1
  99. package/dist/esm/model-auto.js +175 -106
  100. package/dist/esm/model-auto.js.map +1 -1
  101. package/dist/esm/model-spec.js +52 -42
  102. package/dist/esm/model-spec.js.map +1 -1
  103. package/dist/esm/pricing/litellm.js +4 -4
  104. package/dist/esm/pricing/litellm.js.map +1 -1
  105. package/dist/esm/processes.js +1 -1
  106. package/dist/esm/processes.js.map +1 -1
  107. package/dist/esm/prompts/index.js +1 -1
  108. package/dist/esm/prompts/index.js.map +1 -1
  109. package/dist/esm/refresh-free.js +81 -81
  110. package/dist/esm/refresh-free.js.map +1 -1
  111. package/dist/esm/run/attachments.js +47 -44
  112. package/dist/esm/run/attachments.js.map +1 -1
  113. package/dist/esm/run/bird.js +26 -26
  114. package/dist/esm/run/bird.js.map +1 -1
  115. package/dist/esm/run/cache-state.js +7 -7
  116. package/dist/esm/run/cache-state.js.map +1 -1
  117. package/dist/esm/run/cli-fallback-state.js +45 -0
  118. package/dist/esm/run/cli-fallback-state.js.map +1 -0
  119. package/dist/esm/run/cli-preflight.js +24 -24
  120. package/dist/esm/run/cli-preflight.js.map +1 -1
  121. package/dist/esm/run/constants.js +12 -12
  122. package/dist/esm/run/constants.js.map +1 -1
  123. package/dist/esm/run/cookies/twitter.js +47 -47
  124. package/dist/esm/run/cookies/twitter.js.map +1 -1
  125. package/dist/esm/run/env.js +21 -15
  126. package/dist/esm/run/env.js.map +1 -1
  127. package/dist/esm/run/fetch-with-timeout.js +4 -4
  128. package/dist/esm/run/fetch-with-timeout.js.map +1 -1
  129. package/dist/esm/run/finish-line.js +68 -68
  130. package/dist/esm/run/finish-line.js.map +1 -1
  131. package/dist/esm/run/flows/asset/extract.js +15 -15
  132. package/dist/esm/run/flows/asset/extract.js.map +1 -1
  133. package/dist/esm/run/flows/asset/input.js +47 -66
  134. package/dist/esm/run/flows/asset/input.js.map +1 -1
  135. package/dist/esm/run/flows/asset/media-policy.js +1 -1
  136. package/dist/esm/run/flows/asset/media-policy.js.map +1 -1
  137. package/dist/esm/run/flows/asset/media.js +49 -40
  138. package/dist/esm/run/flows/asset/media.js.map +1 -1
  139. package/dist/esm/run/flows/asset/output.js +12 -12
  140. package/dist/esm/run/flows/asset/output.js.map +1 -1
  141. package/dist/esm/run/flows/asset/preprocess.js +79 -44
  142. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  143. package/dist/esm/run/flows/asset/summary.js +173 -106
  144. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  145. package/dist/esm/run/flows/url/extract.js +26 -26
  146. package/dist/esm/run/flows/url/extract.js.map +1 -1
  147. package/dist/esm/run/flows/url/flow.js +104 -98
  148. package/dist/esm/run/flows/url/flow.js.map +1 -1
  149. package/dist/esm/run/flows/url/markdown.js +57 -57
  150. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  151. package/dist/esm/run/flows/url/slides-output.js +61 -59
  152. package/dist/esm/run/flows/url/slides-output.js.map +1 -1
  153. package/dist/esm/run/flows/url/slides-text.js +85 -85
  154. package/dist/esm/run/flows/url/slides-text.js.map +1 -1
  155. package/dist/esm/run/flows/url/summary.js +174 -107
  156. package/dist/esm/run/flows/url/summary.js.map +1 -1
  157. package/dist/esm/run/format.js +10 -10
  158. package/dist/esm/run/format.js.map +1 -1
  159. package/dist/esm/run/help.js +141 -135
  160. package/dist/esm/run/help.js.map +1 -1
  161. package/dist/esm/run/logging.js +10 -10
  162. package/dist/esm/run/logging.js.map +1 -1
  163. package/dist/esm/run/markdown.js +12 -12
  164. package/dist/esm/run/markdown.js.map +1 -1
  165. package/dist/esm/run/media-cache-state.js +5 -5
  166. package/dist/esm/run/media-cache-state.js.map +1 -1
  167. package/dist/esm/run/model-attempts.js.map +1 -1
  168. package/dist/esm/run/openrouter.js +11 -11
  169. package/dist/esm/run/openrouter.js.map +1 -1
  170. package/dist/esm/run/progress.js +1 -1
  171. package/dist/esm/run/progress.js.map +1 -1
  172. package/dist/esm/run/run-config.js +16 -16
  173. package/dist/esm/run/run-config.js.map +1 -1
  174. package/dist/esm/run/run-context.js +2 -2
  175. package/dist/esm/run/run-context.js.map +1 -1
  176. package/dist/esm/run/run-env.js +55 -54
  177. package/dist/esm/run/run-env.js.map +1 -1
  178. package/dist/esm/run/run-input.js +3 -3
  179. package/dist/esm/run/run-input.js.map +1 -1
  180. package/dist/esm/run/run-metrics.js +16 -16
  181. package/dist/esm/run/run-metrics.js.map +1 -1
  182. package/dist/esm/run/run-models.js +28 -23
  183. package/dist/esm/run/run-models.js.map +1 -1
  184. package/dist/esm/run/run-output.js +3 -3
  185. package/dist/esm/run/run-output.js.map +1 -1
  186. package/dist/esm/run/run-settings.js +83 -34
  187. package/dist/esm/run/run-settings.js.map +1 -1
  188. package/dist/esm/run/run-stream.js +4 -4
  189. package/dist/esm/run/run-stream.js.map +1 -1
  190. package/dist/esm/run/runner.js +166 -127
  191. package/dist/esm/run/runner.js.map +1 -1
  192. package/dist/esm/run/slides-cli.js +43 -42
  193. package/dist/esm/run/slides-cli.js.map +1 -1
  194. package/dist/esm/run/slides-render.js +36 -36
  195. package/dist/esm/run/slides-render.js.map +1 -1
  196. package/dist/esm/run/stdin-temp-file.js +77 -0
  197. package/dist/esm/run/stdin-temp-file.js.map +1 -0
  198. package/dist/esm/run/stream-output.js +7 -7
  199. package/dist/esm/run/stream-output.js.map +1 -1
  200. package/dist/esm/run/streaming.js +16 -16
  201. package/dist/esm/run/streaming.js.map +1 -1
  202. package/dist/esm/run/summary-engine.js +57 -51
  203. package/dist/esm/run/summary-engine.js.map +1 -1
  204. package/dist/esm/run/summary-llm.js +3 -3
  205. package/dist/esm/run/summary-llm.js.map +1 -1
  206. package/dist/esm/run/terminal.js +4 -4
  207. package/dist/esm/run/terminal.js.map +1 -1
  208. package/dist/esm/run/tips.js +2 -2
  209. package/dist/esm/run/tips.js.map +1 -1
  210. package/dist/esm/run/transcriber-cli.js +49 -49
  211. package/dist/esm/run/transcriber-cli.js.map +1 -1
  212. package/dist/esm/run.js +1 -1
  213. package/dist/esm/run.js.map +1 -1
  214. package/dist/esm/shared/contracts.js +1 -1
  215. package/dist/esm/shared/contracts.js.map +1 -1
  216. package/dist/esm/shared/sse-events.js +16 -16
  217. package/dist/esm/shared/sse-events.js.map +1 -1
  218. package/dist/esm/shared/streaming-merge.js +3 -3
  219. package/dist/esm/shared/streaming-merge.js.map +1 -1
  220. package/dist/esm/slides/extract.js +258 -249
  221. package/dist/esm/slides/extract.js.map +1 -1
  222. package/dist/esm/slides/index.js +3 -3
  223. package/dist/esm/slides/index.js.map +1 -1
  224. package/dist/esm/slides/settings.js +14 -14
  225. package/dist/esm/slides/settings.js.map +1 -1
  226. package/dist/esm/slides/store.js +9 -9
  227. package/dist/esm/slides/store.js.map +1 -1
  228. package/dist/esm/tty/format.js +13 -13
  229. package/dist/esm/tty/format.js.map +1 -1
  230. package/dist/esm/tty/osc-progress.js +1 -1
  231. package/dist/esm/tty/osc-progress.js.map +1 -1
  232. package/dist/esm/tty/progress/fetch-html.js +14 -14
  233. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  234. package/dist/esm/tty/progress/transcript.js +70 -62
  235. package/dist/esm/tty/progress/transcript.js.map +1 -1
  236. package/dist/esm/tty/spinner.js +20 -9
  237. package/dist/esm/tty/spinner.js.map +1 -1
  238. package/dist/esm/tty/theme.js +92 -92
  239. package/dist/esm/tty/theme.js.map +1 -1
  240. package/dist/esm/tty/website-progress.js +32 -32
  241. package/dist/esm/tty/website-progress.js.map +1 -1
  242. package/dist/esm/version.js +29 -29
  243. package/dist/esm/version.js.map +1 -1
  244. package/dist/types/cache.d.ts +6 -6
  245. package/dist/types/config.d.ts +49 -7
  246. package/dist/types/content/asset.d.ts +8 -6
  247. package/dist/types/content/index.d.ts +1 -1
  248. package/dist/types/costs.d.ts +3 -3
  249. package/dist/types/daemon/agent.d.ts +1 -1
  250. package/dist/types/daemon/auto-mode.d.ts +3 -3
  251. package/dist/types/daemon/chat.d.ts +2 -2
  252. package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
  253. package/dist/types/daemon/config.d.ts +2 -2
  254. package/dist/types/daemon/env-merge.d.ts +1 -1
  255. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  256. package/dist/types/daemon/flow-context.d.ts +7 -7
  257. package/dist/types/daemon/launchd.d.ts +8 -0
  258. package/dist/types/daemon/models.d.ts +6 -2
  259. package/dist/types/daemon/process-registry.d.ts +5 -5
  260. package/dist/types/daemon/server.d.ts +2 -2
  261. package/dist/types/daemon/summarize-progress.d.ts +1 -1
  262. package/dist/types/daemon/summarize.d.ts +7 -7
  263. package/dist/types/firecrawl.d.ts +1 -1
  264. package/dist/types/flags.d.ts +11 -11
  265. package/dist/types/index.d.ts +4 -4
  266. package/dist/types/language.d.ts +1 -1
  267. package/dist/types/llm/attachments.d.ts +1 -1
  268. package/dist/types/llm/cli.d.ts +3 -3
  269. package/dist/types/llm/generate-text.d.ts +7 -7
  270. package/dist/types/llm/html-to-markdown.d.ts +3 -3
  271. package/dist/types/llm/model-id.d.ts +1 -1
  272. package/dist/types/llm/prompt.d.ts +2 -2
  273. package/dist/types/llm/providers/anthropic.d.ts +3 -3
  274. package/dist/types/llm/providers/google.d.ts +3 -3
  275. package/dist/types/llm/providers/models.d.ts +2 -2
  276. package/dist/types/llm/providers/openai.d.ts +4 -4
  277. package/dist/types/llm/providers/shared.d.ts +2 -2
  278. package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
  279. package/dist/types/llm/usage.d.ts +1 -1
  280. package/dist/types/logging/daemon.d.ts +4 -4
  281. package/dist/types/markitdown.d.ts +1 -1
  282. package/dist/types/media-cache.d.ts +2 -2
  283. package/dist/types/model-auto.d.ts +14 -4
  284. package/dist/types/model-spec.d.ts +10 -10
  285. package/dist/types/pricing/litellm.d.ts +1 -1
  286. package/dist/types/processes.d.ts +1 -1
  287. package/dist/types/prompts/index.d.ts +1 -1
  288. package/dist/types/run/attachments.d.ts +7 -7
  289. package/dist/types/run/bird.d.ts +2 -2
  290. package/dist/types/run/cache-state.d.ts +2 -2
  291. package/dist/types/run/cli-fallback-state.d.ts +6 -0
  292. package/dist/types/run/constants.d.ts +1 -1
  293. package/dist/types/run/cookies/twitter.d.ts +1 -1
  294. package/dist/types/run/env.d.ts +1 -1
  295. package/dist/types/run/finish-line.d.ts +5 -5
  296. package/dist/types/run/flows/asset/extract.d.ts +4 -4
  297. package/dist/types/run/flows/asset/input.d.ts +9 -3
  298. package/dist/types/run/flows/asset/media.d.ts +1 -1
  299. package/dist/types/run/flows/asset/output.d.ts +5 -5
  300. package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
  301. package/dist/types/run/flows/asset/summary.d.ts +19 -17
  302. package/dist/types/run/flows/url/extract.d.ts +1 -1
  303. package/dist/types/run/flows/url/flow.d.ts +1 -1
  304. package/dist/types/run/flows/url/markdown.d.ts +6 -6
  305. package/dist/types/run/flows/url/slides-output.d.ts +7 -7
  306. package/dist/types/run/flows/url/slides-text.d.ts +9 -9
  307. package/dist/types/run/flows/url/summary.d.ts +11 -11
  308. package/dist/types/run/flows/url/types.d.ts +26 -22
  309. package/dist/types/run/format.d.ts +3 -3
  310. package/dist/types/run/help.d.ts +1 -1
  311. package/dist/types/run/media-cache-state.d.ts +2 -2
  312. package/dist/types/run/model-attempts.d.ts +1 -1
  313. package/dist/types/run/run-config.d.ts +4 -4
  314. package/dist/types/run/run-context.d.ts +3 -1
  315. package/dist/types/run/run-env.d.ts +3 -1
  316. package/dist/types/run/run-input.d.ts +2 -2
  317. package/dist/types/run/run-metrics.d.ts +3 -3
  318. package/dist/types/run/run-models.d.ts +3 -2
  319. package/dist/types/run/run-output.d.ts +1 -1
  320. package/dist/types/run/run-settings.d.ts +15 -6
  321. package/dist/types/run/run-stream.d.ts +2 -2
  322. package/dist/types/run/runner.d.ts +3 -2
  323. package/dist/types/run/slides-render.d.ts +4 -4
  324. package/dist/types/run/stdin-temp-file.d.ts +9 -0
  325. package/dist/types/run/stream-output.d.ts +1 -1
  326. package/dist/types/run/streaming.d.ts +4 -4
  327. package/dist/types/run/summary-engine.d.ts +11 -11
  328. package/dist/types/run/summary-llm.d.ts +5 -5
  329. package/dist/types/run/types.d.ts +4 -4
  330. package/dist/types/run.d.ts +1 -1
  331. package/dist/types/shared/contracts.d.ts +2 -2
  332. package/dist/types/shared/sse-events.d.ts +9 -9
  333. package/dist/types/slides/extract.d.ts +5 -4
  334. package/dist/types/slides/index.d.ts +5 -5
  335. package/dist/types/slides/store.d.ts +2 -2
  336. package/dist/types/slides/types.d.ts +2 -2
  337. package/dist/types/tty/osc-progress.d.ts +5 -5
  338. package/dist/types/tty/progress/fetch-html.d.ts +3 -3
  339. package/dist/types/tty/progress/transcript.d.ts +3 -3
  340. package/dist/types/tty/spinner.d.ts +2 -2
  341. package/dist/types/tty/theme.d.ts +2 -2
  342. package/dist/types/tty/website-progress.d.ts +3 -3
  343. package/dist/types/version.d.ts +1 -1
  344. package/docs/agent.md +38 -4
  345. package/docs/assets/site.js +46 -46
  346. package/docs/chrome-extension.md +11 -5
  347. package/docs/cli.md +59 -13
  348. package/docs/config.md +59 -10
  349. package/docs/extract-only.md +2 -0
  350. package/docs/index.html +33 -14
  351. package/docs/llm.md +7 -4
  352. package/docs/media.md +5 -4
  353. package/docs/model-auto.md +3 -2
  354. package/docs/nvidia-onnx-transcription.md +3 -3
  355. package/docs/openai.md +1 -1
  356. package/docs/releasing.md +3 -0
  357. package/docs/site/404.html +4 -1
  358. package/docs/site/assets/site.js +46 -46
  359. package/docs/site/docs/chrome-extension.html +18 -6
  360. package/docs/site/docs/config.html +29 -8
  361. package/docs/site/docs/extract-only.html +16 -4
  362. package/docs/site/docs/firecrawl.html +12 -3
  363. package/docs/site/docs/index.html +35 -6
  364. package/docs/site/docs/llm.html +19 -5
  365. package/docs/site/docs/openai.html +18 -5
  366. package/docs/site/docs/website.html +29 -9
  367. package/docs/site/docs/youtube.html +12 -3
  368. package/docs/site/index.html +33 -14
  369. package/docs/slides.md +13 -5
  370. package/docs/smoketest.md +29 -20
  371. package/docs/timestamps.md +21 -0
  372. package/docs/website.md +2 -1
  373. package/docs/youtube.md +4 -0
  374. package/package.json +36 -35
package/docs/smoketest.md CHANGED
@@ -9,55 +9,64 @@ read_when:
9
9
  Goal: exercise URL + file inputs, extraction + LLM summary paths, multiple models.
10
10
 
11
11
  ## Preconditions
12
+
12
13
  - API keys set for at least: `OPENAI_API_KEY`, `GEMINI_API_KEY`.
13
14
  - Optional: `FIRECRAWL_API_KEY` to test fallback (if available).
14
15
 
15
16
  ## Models (cheap/fast)
17
+
16
18
  - `openai/gpt-5-mini`
17
19
  - `google/gemini-3-flash-preview`
18
20
 
19
21
  ## Matrix (20 cases)
20
22
 
21
23
  ### Websites (LLM summary, 10)
22
- 1) Static HTML: `https://example.com` (model: gemini-3-flash)
23
- 2) Wikipedia article: `https://en.wikipedia.org/wiki/Swift_(programming_language)` (model: gpt-5-mini)
24
- 3) MDN doc: `https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200` (model: gemini-3-flash)
25
- 4) Reuters article: `https://www.reuters.com/world/` (model: gpt-5-mini)
26
- 5) BBC article: `https://www.bbc.com/news` (model: gemini-3-flash)
27
- 6) GitHub README: `https://github.com/vitejs/vite` (model: gpt-5-mini)
28
- 7) Substack post: pick any public post (model: gemini-3-flash)
29
- 8) Medium post: pick any public post (model: gpt-5-mini)
30
- 9) JS-heavy page: `https://vercel.com` (model: gemini-3-flash)
31
- 10) 404 page: `https://example.com/does-not-exist` (model: gpt-5-mini)
24
+
25
+ 1. Static HTML: `https://example.com` (model: gemini-3-flash)
26
+ 2. Wikipedia article: `https://en.wikipedia.org/wiki/Swift_(programming_language)` (model: gpt-5-mini)
27
+ 3. MDN doc: `https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200` (model: gemini-3-flash)
28
+ 4. Reuters article: `https://www.reuters.com/world/` (model: gpt-5-mini)
29
+ 5. BBC article: `https://www.bbc.com/news` (model: gemini-3-flash)
30
+ 6. GitHub README: `https://github.com/vitejs/vite` (model: gpt-5-mini)
31
+ 7. Substack post: pick any public post (model: gemini-3-flash)
32
+ 8. Medium post: pick any public post (model: gpt-5-mini)
33
+ 9. JS-heavy page: `https://vercel.com` (model: gemini-3-flash)
34
+ 10. 404 page: `https://example.com/does-not-exist` (model: gpt-5-mini)
32
35
 
33
36
  ### YouTube (LLM summary, 2)
34
- 11) Captions available: pick a popular talk/interview (model: gemini-3-flash, `--youtube auto`)
35
- 12) No captions: pick a random channel upload w/o captions (model: gpt-5-mini, `--youtube auto`)
37
+
38
+ 11. Captions available: pick a popular talk/interview (model: gemini-3-flash, `--youtube auto`)
39
+ 12. No captions: pick a random channel upload w/o captions (model: gpt-5-mini, `--youtube auto`)
36
40
 
37
41
  ### Remote files (LLM summary, 4)
38
- 13) PDF URL: any public PDF report (model: gemini-3-flash)
39
- 14) PNG URL: `https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png` (model: gpt-5-mini)
40
- 15) MP3 URL: any public MP3 sample (model: gemini-3-flash)
41
- 16) CSV URL: any public CSV sample (model: gpt-5-mini)
42
+
43
+ 13. PDF URL: any public PDF report (model: gemini-3-flash)
44
+ 14. PNG URL: `https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png` (model: gpt-5-mini)
45
+ 15. MP3 URL: any public MP3 sample (model: gemini-3-flash)
46
+ 16. CSV URL: any public CSV sample (model: gpt-5-mini)
42
47
 
43
48
  ### Local files (LLM summary, 4)
44
- 17) `tests/fixtures/sample.txt` (create if missing) (model: gemini-3-flash)
45
- 18) `tests/fixtures/sample.md` (create if missing) (model: gpt-5-mini)
46
- 19) `tests/fixtures/sample.json` (create if missing) (model: gemini-3-flash)
47
- 20) `tests/fixtures/sample.png` (create if missing; use a real PNG, not 1x1) (model: gpt-5-mini)
49
+
50
+ 17. `tests/fixtures/sample.txt` (create if missing) (model: gemini-3-flash)
51
+ 18. `tests/fixtures/sample.md` (create if missing) (model: gpt-5-mini)
52
+ 19. `tests/fixtures/sample.json` (create if missing) (model: gemini-3-flash)
53
+ 20. `tests/fixtures/sample.png` (create if missing; use a real PNG, not 1x1) (model: gpt-5-mini)
48
54
 
49
55
  ## Commands (template)
56
+
50
57
  - Website: `pnpm summarize -- "<url>" --model <model> --length short`
51
58
  - YouTube: `pnpm summarize -- "<url>" --model <model> --youtube auto`
52
59
  - File URL: `pnpm summarize -- "<url>" --model <model>`
53
60
  - Local file: `pnpm summarize -- "<path>" --model <model>`
54
61
 
55
62
  ## Capture
63
+
56
64
  - Log: stdout + stderr, exit code, and timing line.
57
65
  - Note extraction path (HTML vs Firecrawl vs YouTube transcript).
58
66
  - File errors: media type rejection, size limits, token preflight.
59
67
 
60
68
  ## Bug bar
69
+
61
70
  - Crash, hang, or non-zero exit.
62
71
  - Empty summary with non-empty input.
63
72
  - Incorrect mode selection (e.g., YouTube treated as normal URL).
@@ -7,6 +7,7 @@ read_when:
7
7
  # Transcript Timestamps Plan
8
8
 
9
9
  Short scope
10
+
10
11
  - Add `--timestamps` flag to request timed transcripts.
11
12
  - Preserve existing plain transcript text; add structured segments + timed text.
12
13
  - Chat mode: include timed transcript + prompt for `[mm:ss]` references.
@@ -14,6 +15,7 @@ Short scope
14
15
  - Coverage: YouTube, podcasts, embedded captions, generic media; whisper.cpp = no segments unless we add verbose output later.
15
16
 
16
17
  ## 1) API / data model
18
+
17
19
  - New option: `FetchLinkContentOptions.transcriptTimestamps?: boolean`.
18
20
  - Thread through provider options (`ProviderFetchOptions`).
19
21
  - New types:
@@ -24,52 +26,65 @@ Short scope
24
26
  - Keep `TranscriptResolution.text` unchanged (plain transcript).
25
27
 
26
28
  Notes
29
+
27
30
  - `--timestamps` should only alter output when requested; default output remains stable.
28
31
  - For JSON output, include both `transcriptSegments` and `transcriptTimedText` when requested.
29
32
 
30
33
  ## 2) Provider updates
34
+
31
35
  YouTube (youtubei)
36
+
32
37
  - Parse `startMs` (and duration if present) from `transcriptSegmentRenderer`.
33
38
  - Build segments array; `text` still plain (join of text).
34
39
 
35
40
  YouTube (captionTracks json3 / xml)
41
+
36
42
  - json3 provides `events[].tStartMs` and `dDurationMs`; parse segments from `events.segs[].utf8`.
37
43
  - XML captions include `start` + `dur`; parse segments when present.
38
44
 
39
45
  Podcast RSS transcripts
46
+
40
47
  - VTT parser should output segments (start/end + cue text).
41
48
  - JSON transcript: support `segments` with `start`/`startMs` + `end`/`endMs` + `text`.
42
49
  - Plain text transcripts: `segments = null`.
43
50
 
44
51
  Generic embedded captions
52
+
45
53
  - When track is VTT/JSON, parse into segments; otherwise `null`.
46
54
 
47
55
  yt-dlp / whisper / whisper.cpp
56
+
48
57
  - Keep `segments = null` (plain text only).
49
58
  - Optional future: request verbose or SRT output from OpenAI/FAL when supported.
50
59
 
51
60
  ## 3) Cache behavior
61
+
52
62
  - Store `segments` in transcript metadata (or dedicated cache field).
53
63
  - If `--timestamps` and cached transcript lacks segments, treat as miss and refetch.
54
64
  - Keep cache keys stable; only bypass when timestamps requested.
55
65
 
56
66
  ## 4) CLI / daemon
67
+
57
68
  - Add `--timestamps` to CLI help + config.
58
69
  - Map to `FetchLinkContentOptions.transcriptTimestamps`.
59
70
  - `--extract --json`: include `transcriptSegments` + `transcriptTimedText`.
60
71
  - Non-JSON extract: keep plain transcript unless `--timestamps`, then output timed text block.
61
72
 
62
73
  ## 5) Chat prompt + content
74
+
63
75
  - `buildChatPageContent`: when timestamps requested, include `Timed transcript:` block using `[mm:ss]`.
64
76
  - `buildChatSystemPrompt`: add instruction:
65
77
  - “When referencing moments, include `[mm:ss]` timestamps from the transcript.”
66
78
 
67
79
  ## 6) Chrome extension UI
80
+
68
81
  Render
82
+
69
83
  - Linkify `[mm:ss]` and `[hh:mm:ss]` in assistant messages.
70
84
  - Convert to `timestamp:<seconds>` hrefs (or data attribute).
71
85
 
72
86
  Seek handler
87
+
73
88
  - On click: prevent default, parse seconds, send `panel:seek` → background → content script.
74
89
  - Content script:
75
90
  - Find `<video>` or `<audio>`.
@@ -80,24 +95,30 @@ Seek handler
80
95
  - If `window.ytplayer` / YT IFrame API available, `player.seekTo(seconds, true)`.
81
96
 
82
97
  ## 7) Tests
98
+
83
99
  Core
100
+
84
101
  - youtubei transcript parsing yields segments + plain text.
85
102
  - captionTracks json3 + xml yield segments.
86
103
  - VTT parser yields segments.
87
104
  - Cache: timestamps requested + cached without segments → refetch.
88
105
 
89
106
  Daemon / CLI
107
+
90
108
  - `--timestamps` propagates into fetch options.
91
109
  - JSON extract includes `transcriptSegments` + `transcriptTimedText`.
92
110
 
93
111
  Chrome extension
112
+
94
113
  - Chat content includes timed transcript when requested.
95
114
  - Sidepanel: timestamp link emits `panel:seek`.
96
115
  - Content script seek: playing stays playing, paused stays paused; audio + video.
97
116
 
98
117
  ## 8) Changelog
118
+
99
119
  - Entry: `--timestamps` flag, timed transcripts in chat, clickable timestamps in extension, podcast support.
100
120
 
101
121
  ## 9) Notes / open
122
+
102
123
  - “VisPoR” = whisper.cpp: no timestamps unless we add verbose output path.
103
124
  - Decide exact format of `transcriptTimedText` (recommend `[mm:ss] text` per line).
package/docs/website.md CHANGED
@@ -20,8 +20,9 @@ Use this for non-YouTube URLs.
20
20
  - With `--format md`, `--markdown-mode auto|llm|readability` can also convert HTML → Markdown via an LLM using the configured `--model` (no provider fallback).
21
21
  - With `--format md`, `--markdown-mode auto` may fall back to `uvx markitdown` when available (disable with `--preprocess off`).
22
22
  - 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).
23
-
23
+
24
24
  Daemon note:
25
+
25
26
  - `/v1/summarize` accepts `format: "markdown"` plus `markdownMode`/`preprocess` to return extracted Markdown (especially when `extractOnly: true`).
26
27
 
27
28
  ## Short content
package/docs/youtube.md CHANGED
@@ -54,5 +54,9 @@ summarize "https://www.youtube.com/watch?v=..." --slides --slides-ocr
54
54
  Slides are written to `./slides/<videoId>/` by default (override with `--slides-dir`). OCR results
55
55
  are stored in `slides.json` and included in JSON output (`--json`).
56
56
 
57
+ If yt-dlp gets a 403 from YouTube, set `SUMMARIZE_YT_DLP_COOKIES_FROM_BROWSER=chrome` (or
58
+ `chrome:Profile 1`) to pass cookies through to yt-dlp.
59
+
57
60
  Relevant flags:
61
+
58
62
  - `--slides-scene-threshold <value>`: starting threshold for scene detection (auto-tuned as needed)
package/package.json CHANGED
@@ -1,12 +1,19 @@
1
1
  {
2
2
  "name": "@steipete/summarize",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "Link → clean text → summary.",
5
- "type": "module",
6
5
  "bin": {
7
6
  "summarize": "./dist/cli.js",
8
7
  "summarizer": "./dist/cli.js"
9
8
  },
9
+ "files": [
10
+ "dist",
11
+ "docs",
12
+ "CHANGELOG.md",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "type": "module",
10
17
  "main": "./dist/esm/index.js",
11
18
  "module": "./dist/esm/index.js",
12
19
  "types": "./dist/types/index.d.ts",
@@ -24,64 +31,58 @@
24
31
  "import": "./dist/esm/prompts/index.js"
25
32
  }
26
33
  },
27
- "files": [
28
- "dist",
29
- "docs",
30
- "CHANGELOG.md",
31
- "README.md",
32
- "LICENSE"
33
- ],
34
- "engines": {
35
- "node": ">=22"
36
- },
37
34
  "dependencies": {
38
- "@mariozechner/pi-ai": "^0.49.2",
39
- "commander": "^14.0.2",
35
+ "@mariozechner/pi-ai": "^0.52.12",
36
+ "commander": "^14.0.3",
40
37
  "file-type": "^21.3.0",
41
38
  "gpt-tokenizer": "^3.4.0",
42
39
  "json5": "^2.2.3",
43
40
  "markdansi": "^0.2.1",
44
41
  "mime": "^4.1.0",
45
- "ora": "^9.1.0",
42
+ "ora": "^9.3.0",
46
43
  "osc-progress": "^0.3.0",
47
44
  "tokentally": "^0.1.1",
48
45
  "tslog": "^4.10.2",
49
- "@steipete/summarize-core": "0.10.0"
46
+ "@steipete/summarize-core": "0.11.1"
50
47
  },
51
48
  "devDependencies": {
52
- "@biomejs/biome": "^2.3.11",
53
- "@fal-ai/client": "^1.8.3",
49
+ "@fal-ai/client": "^1.9.1",
54
50
  "@types/jsdom": "^27.0.0",
55
- "@types/node": "^25.0.9",
51
+ "@types/node": "^25.2.3",
56
52
  "@types/sanitize-html": "^2.16.0",
57
- "@vitest/coverage-v8": "^4.0.17",
58
- "esbuild": "^0.27.2",
59
- "oxlint": "^1.41.0",
60
- "oxlint-tsgolint": "^0.11.1",
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",
61
58
  "rimraf": "^6.1.2",
62
59
  "tsx": "^4.21.0",
63
60
  "typescript": "^5.9.3",
64
- "vitest": "^4.0.17"
61
+ "vitest": "^4.0.18"
62
+ },
63
+ "engines": {
64
+ "node": ">=22"
65
65
  },
66
66
  "scripts": {
67
- "clean": "rimraf dist packages/core/dist",
68
67
  "build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
69
- "build:lib": "tsc -p tsconfig.build.json",
70
- "build:cli": "node scripts/build-cli.mjs",
71
68
  "build:bun": "bun scripts/build-bun.js",
72
69
  "build:bun:test": "bun scripts/build-bun.js --test",
70
+ "build:cli": "node scripts/build-cli.mjs",
71
+ "build:lib": "tsc -p tsconfig.build.json",
72
+ "check": "pnpm format:check && pnpm lint && pnpm test:coverage",
73
+ "clean": "rimraf dist packages/core/dist",
73
74
  "docs:list": "tsx scripts/docs-list.ts",
74
- "typecheck": "tsc -p tsconfig.build.json --noEmit",
75
- "summarize": "tsx src/cli.ts",
75
+ "format": "oxfmt --write",
76
+ "format:check": "oxfmt --check",
77
+ "lint": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
78
+ "lint:fix": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix . && pnpm format",
79
+ "release": "bash scripts/release.sh",
76
80
  "s": "tsx src/cli.ts",
77
- "format": "biome format --write .",
78
- "lint": "biome check . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
79
- "lint:fix": "biome check --write . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix .",
80
- "check": "pnpm lint && pnpm test:coverage",
81
- "test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
81
+ "summarize": "tsx src/cli.ts",
82
82
  "test": "vitest run",
83
83
  "test:coverage": "vitest run --coverage",
84
84
  "test:coverage:build": "pnpm build && pnpm test:coverage",
85
- "release": "bash scripts/release.sh"
85
+ "test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
86
+ "typecheck": "tsc -p tsconfig.build.json --noEmit"
86
87
  }
87
88
  }