@steipete/summarize 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +1 -1
  3. package/README.md +391 -183
  4. package/dist/cli.js +1 -1
  5. package/dist/esm/cache.js +134 -64
  6. package/dist/esm/cache.js.map +1 -1
  7. package/dist/esm/cli-main.js +27 -27
  8. package/dist/esm/cli-main.js.map +1 -1
  9. package/dist/esm/cli.js +2 -2
  10. package/dist/esm/cli.js.map +1 -1
  11. package/dist/esm/config.js +396 -126
  12. package/dist/esm/config.js.map +1 -1
  13. package/dist/esm/content/asset.js +53 -50
  14. package/dist/esm/content/asset.js.map +1 -1
  15. package/dist/esm/content/index.js +1 -1
  16. package/dist/esm/content/index.js.map +1 -1
  17. package/dist/esm/costs.js +1 -1
  18. package/dist/esm/costs.js.map +1 -1
  19. package/dist/esm/daemon/agent.js +548 -0
  20. package/dist/esm/daemon/agent.js.map +1 -0
  21. package/dist/esm/daemon/auto-mode.js +3 -3
  22. package/dist/esm/daemon/auto-mode.js.map +1 -1
  23. package/dist/esm/daemon/chat.js +88 -178
  24. package/dist/esm/daemon/chat.js.map +1 -1
  25. package/dist/esm/daemon/cli-entrypoint.js +72 -0
  26. package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
  27. package/dist/esm/daemon/cli.js +91 -83
  28. package/dist/esm/daemon/cli.js.map +1 -1
  29. package/dist/esm/daemon/config.js +15 -15
  30. package/dist/esm/daemon/config.js.map +1 -1
  31. package/dist/esm/daemon/constants.js +6 -6
  32. package/dist/esm/daemon/constants.js.map +1 -1
  33. package/dist/esm/daemon/env-merge.js.map +1 -1
  34. package/dist/esm/daemon/env-snapshot.js +36 -28
  35. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  36. package/dist/esm/daemon/flow-context.js +86 -32
  37. package/dist/esm/daemon/flow-context.js.map +1 -1
  38. package/dist/esm/daemon/launchd.js +119 -47
  39. package/dist/esm/daemon/launchd.js.map +1 -1
  40. package/dist/esm/daemon/meta.js +5 -5
  41. package/dist/esm/daemon/meta.js.map +1 -1
  42. package/dist/esm/daemon/models.js +54 -31
  43. package/dist/esm/daemon/models.js.map +1 -1
  44. package/dist/esm/daemon/process-registry.js +206 -0
  45. package/dist/esm/daemon/process-registry.js.map +1 -0
  46. package/dist/esm/daemon/schtasks.js +96 -32
  47. package/dist/esm/daemon/schtasks.js.map +1 -1
  48. package/dist/esm/daemon/server.js +832 -158
  49. package/dist/esm/daemon/server.js.map +1 -1
  50. package/dist/esm/daemon/summarize-progress.js +11 -11
  51. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  52. package/dist/esm/daemon/summarize.js +61 -32
  53. package/dist/esm/daemon/summarize.js.map +1 -1
  54. package/dist/esm/daemon/systemd.js +96 -35
  55. package/dist/esm/daemon/systemd.js.map +1 -1
  56. package/dist/esm/firecrawl.js +12 -12
  57. package/dist/esm/firecrawl.js.map +1 -1
  58. package/dist/esm/flags.js +55 -31
  59. package/dist/esm/flags.js.map +1 -1
  60. package/dist/esm/index.js +3 -3
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/language.js +1 -1
  63. package/dist/esm/language.js.map +1 -1
  64. package/dist/esm/llm/cli.js +128 -64
  65. package/dist/esm/llm/cli.js.map +1 -1
  66. package/dist/esm/llm/errors.js +1 -1
  67. package/dist/esm/llm/errors.js.map +1 -1
  68. package/dist/esm/llm/generate-text.js +107 -98
  69. package/dist/esm/llm/generate-text.js.map +1 -1
  70. package/dist/esm/llm/google-models.js +17 -17
  71. package/dist/esm/llm/google-models.js.map +1 -1
  72. package/dist/esm/llm/html-to-markdown.js +3 -3
  73. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  74. package/dist/esm/llm/model-id.js +38 -16
  75. package/dist/esm/llm/model-id.js.map +1 -1
  76. package/dist/esm/llm/prompt.js +5 -5
  77. package/dist/esm/llm/prompt.js.map +1 -1
  78. package/dist/esm/llm/providers/anthropic.js +33 -33
  79. package/dist/esm/llm/providers/anthropic.js.map +1 -1
  80. package/dist/esm/llm/providers/google.js +19 -19
  81. package/dist/esm/llm/providers/google.js.map +1 -1
  82. package/dist/esm/llm/providers/models.js +30 -30
  83. package/dist/esm/llm/providers/models.js.map +1 -1
  84. package/dist/esm/llm/providers/openai.js +36 -35
  85. package/dist/esm/llm/providers/openai.js.map +1 -1
  86. package/dist/esm/llm/providers/shared.js +8 -8
  87. package/dist/esm/llm/providers/shared.js.map +1 -1
  88. package/dist/esm/llm/transcript-to-markdown.js +9 -5
  89. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  90. package/dist/esm/llm/usage.js +18 -18
  91. package/dist/esm/llm/usage.js.map +1 -1
  92. package/dist/esm/logging/daemon.js +21 -21
  93. package/dist/esm/logging/daemon.js.map +1 -1
  94. package/dist/esm/logging/ring-file.js +5 -5
  95. package/dist/esm/logging/ring-file.js.map +1 -1
  96. package/dist/esm/markitdown.js +21 -19
  97. package/dist/esm/markitdown.js.map +1 -1
  98. package/dist/esm/media-cache.js +251 -0
  99. package/dist/esm/media-cache.js.map +1 -0
  100. package/dist/esm/model-auto.js +175 -106
  101. package/dist/esm/model-auto.js.map +1 -1
  102. package/dist/esm/model-spec.js +52 -42
  103. package/dist/esm/model-spec.js.map +1 -1
  104. package/dist/esm/pricing/litellm.js +4 -4
  105. package/dist/esm/pricing/litellm.js.map +1 -1
  106. package/dist/esm/processes.js +2 -0
  107. package/dist/esm/processes.js.map +1 -0
  108. package/dist/esm/prompts/index.js +1 -1
  109. package/dist/esm/prompts/index.js.map +1 -1
  110. package/dist/esm/refresh-free.js +81 -81
  111. package/dist/esm/refresh-free.js.map +1 -1
  112. package/dist/esm/run/attachments.js +47 -44
  113. package/dist/esm/run/attachments.js.map +1 -1
  114. package/dist/esm/run/bird.js +125 -12
  115. package/dist/esm/run/bird.js.map +1 -1
  116. package/dist/esm/run/cache-state.js +7 -7
  117. package/dist/esm/run/cache-state.js.map +1 -1
  118. package/dist/esm/run/cli-fallback-state.js +45 -0
  119. package/dist/esm/run/cli-fallback-state.js.map +1 -0
  120. package/dist/esm/run/cli-preflight.js +40 -22
  121. package/dist/esm/run/cli-preflight.js.map +1 -1
  122. package/dist/esm/run/constants.js +12 -12
  123. package/dist/esm/run/constants.js.map +1 -1
  124. package/dist/esm/run/cookies/twitter.js +47 -47
  125. package/dist/esm/run/cookies/twitter.js.map +1 -1
  126. package/dist/esm/run/env.js +21 -15
  127. package/dist/esm/run/env.js.map +1 -1
  128. package/dist/esm/run/fetch-with-timeout.js +4 -4
  129. package/dist/esm/run/fetch-with-timeout.js.map +1 -1
  130. package/dist/esm/run/finish-line.js +78 -71
  131. package/dist/esm/run/finish-line.js.map +1 -1
  132. package/dist/esm/run/flows/asset/extract.js +70 -0
  133. package/dist/esm/run/flows/asset/extract.js.map +1 -0
  134. package/dist/esm/run/flows/asset/input.js +202 -37
  135. package/dist/esm/run/flows/asset/input.js.map +1 -1
  136. package/dist/esm/run/flows/asset/media-policy.js +3 -0
  137. package/dist/esm/run/flows/asset/media-policy.js.map +1 -0
  138. package/dist/esm/run/flows/asset/media.js +233 -0
  139. package/dist/esm/run/flows/asset/media.js.map +1 -0
  140. package/dist/esm/run/flows/asset/output.js +98 -0
  141. package/dist/esm/run/flows/asset/output.js.map +1 -0
  142. package/dist/esm/run/flows/asset/preprocess.js +79 -44
  143. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  144. package/dist/esm/run/flows/asset/summary.js +306 -89
  145. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  146. package/dist/esm/run/flows/url/extract.js +31 -31
  147. package/dist/esm/run/flows/url/extract.js.map +1 -1
  148. package/dist/esm/run/flows/url/flow.js +388 -82
  149. package/dist/esm/run/flows/url/flow.js.map +1 -1
  150. package/dist/esm/run/flows/url/markdown.js +61 -56
  151. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  152. package/dist/esm/run/flows/url/slides-output.js +487 -0
  153. package/dist/esm/run/flows/url/slides-output.js.map +1 -0
  154. package/dist/esm/run/flows/url/slides-text.js +628 -0
  155. package/dist/esm/run/flows/url/slides-text.js.map +1 -0
  156. package/dist/esm/run/flows/url/summary.js +493 -152
  157. package/dist/esm/run/flows/url/summary.js.map +1 -1
  158. package/dist/esm/run/format.js +10 -10
  159. package/dist/esm/run/format.js.map +1 -1
  160. package/dist/esm/run/help.js +179 -84
  161. package/dist/esm/run/help.js.map +1 -1
  162. package/dist/esm/run/logging.js +20 -12
  163. package/dist/esm/run/logging.js.map +1 -1
  164. package/dist/esm/run/markdown.js +12 -12
  165. package/dist/esm/run/markdown.js.map +1 -1
  166. package/dist/esm/run/media-cache-state.js +33 -0
  167. package/dist/esm/run/media-cache-state.js.map +1 -0
  168. package/dist/esm/run/model-attempts.js.map +1 -1
  169. package/dist/esm/run/openrouter.js +11 -11
  170. package/dist/esm/run/openrouter.js.map +1 -1
  171. package/dist/esm/run/progress.js +19 -1
  172. package/dist/esm/run/progress.js.map +1 -1
  173. package/dist/esm/run/run-config.js +16 -16
  174. package/dist/esm/run/run-config.js.map +1 -1
  175. package/dist/esm/run/run-context.js +2 -2
  176. package/dist/esm/run/run-context.js.map +1 -1
  177. package/dist/esm/run/run-env.js +55 -54
  178. package/dist/esm/run/run-env.js.map +1 -1
  179. package/dist/esm/run/run-input.js +3 -3
  180. package/dist/esm/run/run-input.js.map +1 -1
  181. package/dist/esm/run/run-metrics.js +16 -16
  182. package/dist/esm/run/run-metrics.js.map +1 -1
  183. package/dist/esm/run/run-models.js +28 -23
  184. package/dist/esm/run/run-models.js.map +1 -1
  185. package/dist/esm/run/run-output.js +3 -3
  186. package/dist/esm/run/run-output.js.map +1 -1
  187. package/dist/esm/run/run-settings.js +108 -21
  188. package/dist/esm/run/run-settings.js.map +1 -1
  189. package/dist/esm/run/run-stream.js +4 -4
  190. package/dist/esm/run/run-stream.js.map +1 -1
  191. package/dist/esm/run/runner.js +327 -100
  192. package/dist/esm/run/runner.js.map +1 -1
  193. package/dist/esm/run/slides-cli.js +226 -0
  194. package/dist/esm/run/slides-cli.js.map +1 -0
  195. package/dist/esm/run/slides-render.js +163 -0
  196. package/dist/esm/run/slides-render.js.map +1 -0
  197. package/dist/esm/run/stdin-temp-file.js +77 -0
  198. package/dist/esm/run/stdin-temp-file.js.map +1 -0
  199. package/dist/esm/run/stream-output.js +17 -10
  200. package/dist/esm/run/stream-output.js.map +1 -1
  201. package/dist/esm/run/streaming.js +16 -16
  202. package/dist/esm/run/streaming.js.map +1 -1
  203. package/dist/esm/run/summary-engine.js +89 -57
  204. package/dist/esm/run/summary-engine.js.map +1 -1
  205. package/dist/esm/run/summary-llm.js +3 -3
  206. package/dist/esm/run/summary-llm.js.map +1 -1
  207. package/dist/esm/run/terminal.js +4 -4
  208. package/dist/esm/run/terminal.js.map +1 -1
  209. package/dist/esm/run/tips.js +2 -2
  210. package/dist/esm/run/tips.js.map +1 -1
  211. package/dist/esm/run/transcriber-cli.js +148 -0
  212. package/dist/esm/run/transcriber-cli.js.map +1 -0
  213. package/dist/esm/run.js +1 -1
  214. package/dist/esm/run.js.map +1 -1
  215. package/dist/esm/shared/contracts.js +1 -1
  216. package/dist/esm/shared/contracts.js.map +1 -1
  217. package/dist/esm/shared/sse-events.js +16 -12
  218. package/dist/esm/shared/sse-events.js.map +1 -1
  219. package/dist/esm/shared/streaming-merge.js +3 -3
  220. package/dist/esm/shared/streaming-merge.js.map +1 -1
  221. package/dist/esm/slides/extract.js +1951 -0
  222. package/dist/esm/slides/extract.js.map +1 -0
  223. package/dist/esm/slides/index.js +4 -0
  224. package/dist/esm/slides/index.js.map +1 -0
  225. package/dist/esm/slides/settings.js +73 -0
  226. package/dist/esm/slides/settings.js.map +1 -0
  227. package/dist/esm/slides/store.js +111 -0
  228. package/dist/esm/slides/store.js.map +1 -0
  229. package/dist/esm/slides/types.js +2 -0
  230. package/dist/esm/slides/types.js.map +1 -0
  231. package/dist/esm/tty/format.js +13 -13
  232. package/dist/esm/tty/format.js.map +1 -1
  233. package/dist/esm/tty/osc-progress.js +22 -2
  234. package/dist/esm/tty/osc-progress.js.map +1 -1
  235. package/dist/esm/tty/progress/fetch-html.js +20 -16
  236. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  237. package/dist/esm/tty/progress/transcript.js +127 -68
  238. package/dist/esm/tty/progress/transcript.js.map +1 -1
  239. package/dist/esm/tty/spinner.js +21 -10
  240. package/dist/esm/tty/spinner.js.map +1 -1
  241. package/dist/esm/tty/theme.js +189 -0
  242. package/dist/esm/tty/theme.js.map +1 -0
  243. package/dist/esm/tty/website-progress.js +38 -34
  244. package/dist/esm/tty/website-progress.js.map +1 -1
  245. package/dist/esm/version.js +29 -29
  246. package/dist/esm/version.js.map +1 -1
  247. package/dist/types/cache.d.ts +19 -7
  248. package/dist/types/config.d.ts +71 -6
  249. package/dist/types/content/asset.d.ts +8 -6
  250. package/dist/types/content/index.d.ts +1 -1
  251. package/dist/types/costs.d.ts +3 -3
  252. package/dist/types/daemon/agent.d.ts +25 -0
  253. package/dist/types/daemon/auto-mode.d.ts +3 -3
  254. package/dist/types/daemon/chat.d.ts +10 -18
  255. package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
  256. package/dist/types/daemon/config.d.ts +2 -2
  257. package/dist/types/daemon/env-merge.d.ts +1 -1
  258. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  259. package/dist/types/daemon/flow-context.d.ts +24 -4
  260. package/dist/types/daemon/launchd.d.ts +12 -0
  261. package/dist/types/daemon/models.d.ts +6 -2
  262. package/dist/types/daemon/process-registry.d.ts +73 -0
  263. package/dist/types/daemon/schtasks.d.ts +4 -0
  264. package/dist/types/daemon/server.d.ts +2 -2
  265. package/dist/types/daemon/summarize-progress.d.ts +1 -1
  266. package/dist/types/daemon/summarize.d.ts +38 -7
  267. package/dist/types/daemon/systemd.d.ts +4 -0
  268. package/dist/types/firecrawl.d.ts +1 -1
  269. package/dist/types/flags.d.ts +12 -11
  270. package/dist/types/index.d.ts +4 -4
  271. package/dist/types/language.d.ts +1 -1
  272. package/dist/types/llm/attachments.d.ts +1 -1
  273. package/dist/types/llm/cli.d.ts +3 -3
  274. package/dist/types/llm/generate-text.d.ts +7 -7
  275. package/dist/types/llm/html-to-markdown.d.ts +3 -3
  276. package/dist/types/llm/model-id.d.ts +1 -1
  277. package/dist/types/llm/prompt.d.ts +2 -2
  278. package/dist/types/llm/providers/anthropic.d.ts +3 -3
  279. package/dist/types/llm/providers/google.d.ts +3 -3
  280. package/dist/types/llm/providers/models.d.ts +2 -2
  281. package/dist/types/llm/providers/openai.d.ts +4 -4
  282. package/dist/types/llm/providers/shared.d.ts +2 -2
  283. package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
  284. package/dist/types/llm/usage.d.ts +1 -1
  285. package/dist/types/logging/daemon.d.ts +4 -4
  286. package/dist/types/markitdown.d.ts +1 -1
  287. package/dist/types/media-cache.d.ts +22 -0
  288. package/dist/types/model-auto.d.ts +14 -4
  289. package/dist/types/model-spec.d.ts +10 -10
  290. package/dist/types/pricing/litellm.d.ts +1 -1
  291. package/dist/types/processes.d.ts +1 -0
  292. package/dist/types/prompts/index.d.ts +1 -1
  293. package/dist/types/run/attachments.d.ts +7 -7
  294. package/dist/types/run/bird.d.ts +7 -0
  295. package/dist/types/run/cache-state.d.ts +2 -2
  296. package/dist/types/run/cli-fallback-state.d.ts +6 -0
  297. package/dist/types/run/constants.d.ts +1 -1
  298. package/dist/types/run/cookies/twitter.d.ts +1 -1
  299. package/dist/types/run/env.d.ts +1 -1
  300. package/dist/types/run/finish-line.d.ts +7 -6
  301. package/dist/types/run/flows/asset/extract.d.ts +18 -0
  302. package/dist/types/run/flows/asset/input.d.ts +19 -3
  303. package/dist/types/run/flows/asset/media-policy.d.ts +2 -0
  304. package/dist/types/run/flows/asset/media.d.ts +21 -0
  305. package/dist/types/run/flows/asset/output.d.ts +42 -0
  306. package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
  307. package/dist/types/run/flows/asset/summary.d.ts +24 -16
  308. package/dist/types/run/flows/url/extract.d.ts +3 -2
  309. package/dist/types/run/flows/url/flow.d.ts +1 -1
  310. package/dist/types/run/flows/url/markdown.d.ts +6 -6
  311. package/dist/types/run/flows/url/slides-output.d.ts +66 -0
  312. package/dist/types/run/flows/url/slides-text.d.ts +87 -0
  313. package/dist/types/run/flows/url/summary.d.ts +18 -10
  314. package/dist/types/run/flows/url/types.d.ts +52 -21
  315. package/dist/types/run/format.d.ts +3 -3
  316. package/dist/types/run/help.d.ts +4 -1
  317. package/dist/types/run/logging.d.ts +3 -2
  318. package/dist/types/run/media-cache-state.d.ts +7 -0
  319. package/dist/types/run/model-attempts.d.ts +1 -1
  320. package/dist/types/run/progress.d.ts +2 -1
  321. package/dist/types/run/run-config.d.ts +4 -4
  322. package/dist/types/run/run-context.d.ts +3 -1
  323. package/dist/types/run/run-env.d.ts +3 -1
  324. package/dist/types/run/run-input.d.ts +2 -2
  325. package/dist/types/run/run-metrics.d.ts +3 -3
  326. package/dist/types/run/run-models.d.ts +3 -2
  327. package/dist/types/run/run-output.d.ts +1 -1
  328. package/dist/types/run/run-settings.d.ts +20 -5
  329. package/dist/types/run/run-stream.d.ts +2 -2
  330. package/dist/types/run/runner.d.ts +3 -2
  331. package/dist/types/run/slides-cli.d.ts +9 -0
  332. package/dist/types/run/slides-render.d.ts +30 -0
  333. package/dist/types/run/stdin-temp-file.d.ts +9 -0
  334. package/dist/types/run/stream-output.d.ts +3 -2
  335. package/dist/types/run/streaming.d.ts +4 -4
  336. package/dist/types/run/summary-engine.d.ts +22 -12
  337. package/dist/types/run/summary-llm.d.ts +5 -5
  338. package/dist/types/run/transcriber-cli.d.ts +8 -0
  339. package/dist/types/run/types.d.ts +4 -4
  340. package/dist/types/run.d.ts +1 -1
  341. package/dist/types/shared/contracts.d.ts +2 -2
  342. package/dist/types/shared/sse-events.d.ts +26 -6
  343. package/dist/types/slides/extract.d.ts +43 -0
  344. package/dist/types/slides/index.d.ts +5 -0
  345. package/dist/types/slides/settings.d.ts +20 -0
  346. package/dist/types/slides/store.d.ts +15 -0
  347. package/dist/types/slides/types.d.ts +40 -0
  348. package/dist/types/tty/osc-progress.d.ts +5 -5
  349. package/dist/types/tty/progress/fetch-html.d.ts +5 -3
  350. package/dist/types/tty/progress/transcript.d.ts +5 -3
  351. package/dist/types/tty/spinner.d.ts +3 -1
  352. package/dist/types/tty/theme.d.ts +44 -0
  353. package/dist/types/tty/website-progress.d.ts +5 -3
  354. package/dist/types/version.d.ts +1 -1
  355. package/docs/README.md +1 -1
  356. package/docs/_config.yml +26 -0
  357. package/docs/_layouts/default.html +60 -0
  358. package/docs/agent.md +367 -0
  359. package/docs/assets/site.css +748 -0
  360. package/docs/assets/site.js +72 -0
  361. package/docs/assets/summarize-cli.png +0 -0
  362. package/docs/assets/summarize-extension.png +0 -0
  363. package/docs/assets/youtube-slides.png +0 -0
  364. package/docs/cache.md +29 -3
  365. package/docs/chrome-extension.md +72 -16
  366. package/docs/cli.md +59 -13
  367. package/docs/config.md +109 -12
  368. package/docs/extract-only.md +10 -0
  369. package/docs/index.html +224 -0
  370. package/docs/index.md +25 -0
  371. package/docs/llm.md +18 -5
  372. package/docs/manual-tests.md +2 -0
  373. package/docs/media.md +6 -2
  374. package/docs/model-auto.md +3 -2
  375. package/docs/nvidia-onnx-transcription.md +55 -0
  376. package/docs/openai.md +1 -1
  377. package/docs/releasing.md +3 -0
  378. package/docs/site/404.html +4 -1
  379. package/docs/site/assets/site.css +399 -228
  380. package/docs/site/assets/site.js +46 -46
  381. package/docs/site/assets/summarize-cli.png +0 -0
  382. package/docs/site/assets/summarize-extension.png +0 -0
  383. package/docs/site/docs/chrome-extension.html +101 -0
  384. package/docs/site/docs/config.html +30 -8
  385. package/docs/site/docs/extract-only.html +17 -4
  386. package/docs/site/docs/firecrawl.html +13 -3
  387. package/docs/site/docs/index.html +40 -6
  388. package/docs/site/docs/llm.html +20 -5
  389. package/docs/site/docs/openai.html +19 -5
  390. package/docs/site/docs/website.html +30 -9
  391. package/docs/site/docs/youtube.html +13 -3
  392. package/docs/site/index.html +168 -85
  393. package/docs/slides.md +82 -0
  394. package/docs/smoketest.md +29 -20
  395. package/docs/timestamps.md +124 -0
  396. package/docs/website.md +13 -0
  397. package/docs/youtube.md +20 -0
  398. package/package.json +57 -48
@@ -0,0 +1,124 @@
1
+ ---
2
+ summary: "Transcript timestamps plan + clickable chat jumps."
3
+ read_when:
4
+ - "When planning transcript timestamps or click-to-seek UX."
5
+ ---
6
+
7
+ # Transcript Timestamps Plan
8
+
9
+ Short scope
10
+
11
+ - Add `--timestamps` flag to request timed transcripts.
12
+ - Preserve existing plain transcript text; add structured segments + timed text.
13
+ - Chat mode: include timed transcript + prompt for `[mm:ss]` references.
14
+ - Sidepanel: click timestamp → seek media (video or audio), keep play state.
15
+ - Coverage: YouTube, podcasts, embedded captions, generic media; whisper.cpp = no segments unless we add verbose output later.
16
+
17
+ ## 1) API / data model
18
+
19
+ - New option: `FetchLinkContentOptions.transcriptTimestamps?: boolean`.
20
+ - Thread through provider options (`ProviderFetchOptions`).
21
+ - New types:
22
+ - `TranscriptSegment`: `{ startMs: number; endMs?: number | null; text: string }`.
23
+ - `TranscriptResolution.segments?: TranscriptSegment[] | null`.
24
+ - `ExtractedLinkContent.transcriptSegments?: TranscriptSegment[] | null`.
25
+ - `ExtractedLinkContent.transcriptTimedText?: string | null` (helper).
26
+ - Keep `TranscriptResolution.text` unchanged (plain transcript).
27
+
28
+ Notes
29
+
30
+ - `--timestamps` should only alter output when requested; default output remains stable.
31
+ - For JSON output, include both `transcriptSegments` and `transcriptTimedText` when requested.
32
+
33
+ ## 2) Provider updates
34
+
35
+ YouTube (youtubei)
36
+
37
+ - Parse `startMs` (and duration if present) from `transcriptSegmentRenderer`.
38
+ - Build segments array; `text` still plain (join of text).
39
+
40
+ YouTube (captionTracks json3 / xml)
41
+
42
+ - json3 provides `events[].tStartMs` and `dDurationMs`; parse segments from `events.segs[].utf8`.
43
+ - XML captions include `start` + `dur`; parse segments when present.
44
+
45
+ Podcast RSS transcripts
46
+
47
+ - VTT parser should output segments (start/end + cue text).
48
+ - JSON transcript: support `segments` with `start`/`startMs` + `end`/`endMs` + `text`.
49
+ - Plain text transcripts: `segments = null`.
50
+
51
+ Generic embedded captions
52
+
53
+ - When track is VTT/JSON, parse into segments; otherwise `null`.
54
+
55
+ yt-dlp / whisper / whisper.cpp
56
+
57
+ - Keep `segments = null` (plain text only).
58
+ - Optional future: request verbose or SRT output from OpenAI/FAL when supported.
59
+
60
+ ## 3) Cache behavior
61
+
62
+ - Store `segments` in transcript metadata (or dedicated cache field).
63
+ - If `--timestamps` and cached transcript lacks segments, treat as miss and refetch.
64
+ - Keep cache keys stable; only bypass when timestamps requested.
65
+
66
+ ## 4) CLI / daemon
67
+
68
+ - Add `--timestamps` to CLI help + config.
69
+ - Map to `FetchLinkContentOptions.transcriptTimestamps`.
70
+ - `--extract --json`: include `transcriptSegments` + `transcriptTimedText`.
71
+ - Non-JSON extract: keep plain transcript unless `--timestamps`, then output timed text block.
72
+
73
+ ## 5) Chat prompt + content
74
+
75
+ - `buildChatPageContent`: when timestamps requested, include `Timed transcript:` block using `[mm:ss]`.
76
+ - `buildChatSystemPrompt`: add instruction:
77
+ - “When referencing moments, include `[mm:ss]` timestamps from the transcript.”
78
+
79
+ ## 6) Chrome extension UI
80
+
81
+ Render
82
+
83
+ - Linkify `[mm:ss]` and `[hh:mm:ss]` in assistant messages.
84
+ - Convert to `timestamp:<seconds>` hrefs (or data attribute).
85
+
86
+ Seek handler
87
+
88
+ - On click: prevent default, parse seconds, send `panel:seek` → background → content script.
89
+ - Content script:
90
+ - Find `<video>` or `<audio>`.
91
+ - Record `wasPaused = media.paused`.
92
+ - `media.currentTime = seconds`.
93
+ - If `!wasPaused`, call `media.play()`; else do nothing.
94
+ - YouTube fallback when no media element:
95
+ - If `window.ytplayer` / YT IFrame API available, `player.seekTo(seconds, true)`.
96
+
97
+ ## 7) Tests
98
+
99
+ Core
100
+
101
+ - youtubei transcript parsing yields segments + plain text.
102
+ - captionTracks json3 + xml yield segments.
103
+ - VTT parser yields segments.
104
+ - Cache: timestamps requested + cached without segments → refetch.
105
+
106
+ Daemon / CLI
107
+
108
+ - `--timestamps` propagates into fetch options.
109
+ - JSON extract includes `transcriptSegments` + `transcriptTimedText`.
110
+
111
+ Chrome extension
112
+
113
+ - Chat content includes timed transcript when requested.
114
+ - Sidepanel: timestamp link emits `panel:seek`.
115
+ - Content script seek: playing stays playing, paused stays paused; audio + video.
116
+
117
+ ## 8) Changelog
118
+
119
+ - Entry: `--timestamps` flag, timed transcripts in chat, clickable timestamps in extension, podcast support.
120
+
121
+ ## 9) Notes / open
122
+
123
+ - “VisPoR” = whisper.cpp: no timestamps unless we add verbose output path.
124
+ - Decide exact format of `transcriptTimedText` (recommend `[mm:ss] text` per line).
package/docs/website.md CHANGED
@@ -21,6 +21,19 @@ Use this for non-YouTube URLs.
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
+ Daemon note:
25
+
26
+ - `/v1/summarize` accepts `format: "markdown"` plus `markdownMode`/`preprocess` to return extracted Markdown (especially when `extractOnly: true`).
27
+
28
+ ## Short content
29
+
30
+ - If extracted content is shorter than the requested summary length, summarize returns the content as-is.
31
+ - Use `--force-summary` to override and always run the LLM.
32
+
33
+ ## Twitter/X
34
+
35
+ - Tweet audio transcription runs only with `--video-mode transcript` (auto mode skips yt-dlp for tweets).
36
+
24
37
  ## Flags
25
38
 
26
39
  - `--firecrawl off|auto|always`
package/docs/youtube.md CHANGED
@@ -40,3 +40,23 @@ YouTube URLs use transcript-first extraction.
40
40
  ```bash
41
41
  pnpm summarize -- --extract "https://www.youtube.com/watch?v=I845O57ZSy4&t=11s"
42
42
  ```
43
+
44
+ ## Slides
45
+
46
+ Use `--slides` to extract slide screenshots for YouTube videos (requires `ffmpeg` and `yt-dlp`).
47
+ Scene detection auto-tunes the threshold using sampled frame hashes:
48
+
49
+ ```bash
50
+ summarize "https://www.youtube.com/watch?v=..." --slides
51
+ summarize "https://www.youtube.com/watch?v=..." --slides --slides-ocr
52
+ ```
53
+
54
+ Slides are written to `./slides/<videoId>/` by default (override with `--slides-dir`). OCR results
55
+ are stored in `slides.json` and included in JSON output (`--json`).
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
+
60
+ Relevant flags:
61
+
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.9.0",
3
+ "version": "0.11.0",
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,63 +31,65 @@
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"
34
+ "scripts": {
35
+ "build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
36
+ "build:bun": "bun scripts/build-bun.js",
37
+ "build:bun:test": "bun scripts/build-bun.js --test",
38
+ "build:cli": "node scripts/build-cli.mjs",
39
+ "build:lib": "tsc -p tsconfig.build.json",
40
+ "check": "pnpm format:check && pnpm lint && pnpm test:coverage",
41
+ "clean": "rimraf dist packages/core/dist",
42
+ "docs:list": "tsx scripts/docs-list.ts",
43
+ "format": "oxfmt --write",
44
+ "format:check": "oxfmt --check",
45
+ "lint": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
46
+ "lint:fix": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix . && pnpm format",
47
+ "prepare": "pnpm build",
48
+ "release": "bash scripts/release.sh",
49
+ "s": "tsx src/cli.ts",
50
+ "summarize": "tsx src/cli.ts",
51
+ "test": "vitest run",
52
+ "test:coverage": "vitest run --coverage",
53
+ "test:coverage:build": "pnpm build && pnpm test:coverage",
54
+ "test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
55
+ "typecheck": "tsc -p tsconfig.build.json --noEmit"
36
56
  },
37
57
  "dependencies": {
38
- "@mariozechner/pi-ai": "^0.30.2",
39
- "commander": "^14.0.2",
40
- "file-type": "^21.2.0",
58
+ "@mariozechner/pi-ai": "^0.52.12",
59
+ "@steipete/summarize-core": "workspace:*",
60
+ "commander": "^14.0.3",
61
+ "file-type": "^21.3.0",
41
62
  "gpt-tokenizer": "^3.4.0",
42
63
  "json5": "^2.2.3",
43
- "markdansi": "^0.2.0",
64
+ "markdansi": "^0.2.1",
44
65
  "mime": "^4.1.0",
45
- "ora": "^9.0.0",
46
- "osc-progress": "^0.2.0",
66
+ "ora": "^9.3.0",
67
+ "osc-progress": "^0.3.0",
47
68
  "tokentally": "^0.1.1",
48
- "tslog": "^4.10.2",
49
- "@steipete/summarize-core": "0.9.0"
69
+ "tslog": "^4.10.2"
50
70
  },
51
71
  "devDependencies": {
52
- "@biomejs/biome": "^2.3.10",
53
- "@fal-ai/client": "^1.8.1",
72
+ "@fal-ai/client": "^1.9.1",
54
73
  "@types/jsdom": "^27.0.0",
55
- "@types/node": "^25.0.3",
74
+ "@types/node": "^25.2.3",
56
75
  "@types/sanitize-html": "^2.16.0",
57
- "@vitest/coverage-v8": "^4.0.16",
58
- "esbuild": "^0.27.2",
59
- "oxlint": "^1.35.0",
60
- "oxlint-tsgolint": "^0.10.0",
76
+ "@vitest/coverage-v8": "^4.0.18",
77
+ "esbuild": "^0.27.3",
78
+ "oxfmt": "0.32.0",
79
+ "oxlint": "^1.47.0",
80
+ "oxlint-tsgolint": "^0.12.2",
81
+ "rimraf": "^6.1.2",
61
82
  "tsx": "^4.21.0",
62
83
  "typescript": "^5.9.3",
63
- "vitest": "^4.0.16"
84
+ "vitest": "^4.0.18"
64
85
  },
65
- "scripts": {
66
- "clean": "rm -rf dist packages/core/dist",
67
- "build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
68
- "build:lib": "tsc -p tsconfig.build.json",
69
- "build:cli": "node scripts/build-cli.mjs",
70
- "build:bun": "bun scripts/build-bun.js",
71
- "build:bun:test": "bun scripts/build-bun.js --test",
72
- "docs:list": "tsx scripts/docs-list.ts",
73
- "typecheck": "tsc -p tsconfig.build.json --noEmit",
74
- "summarize": "tsx src/cli.ts",
75
- "s": "tsx src/cli.ts",
76
- "format": "biome format --write .",
77
- "lint": "biome check . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
78
- "lint:fix": "biome check --write . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix .",
79
- "check": "pnpm lint && pnpm test:coverage",
80
- "test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
81
- "test": "vitest run",
82
- "test:coverage": "vitest run --coverage",
83
- "test:coverage:build": "pnpm build && pnpm test:coverage",
84
- "release": "bash scripts/release.sh"
86
+ "engines": {
87
+ "node": ">=22"
88
+ },
89
+ "packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501",
90
+ "pnpm": {
91
+ "overrides": {
92
+ "vite": "7.3.0"
93
+ }
85
94
  }
86
- }
95
+ }