@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
@@ -46,22 +46,31 @@
46
46
  <p class="kicker">product</p>
47
47
  <h1>Chrome extension</h1>
48
48
  <p>
49
- Summarize ships a Chrome Side Panel extension backed by a tiny local daemon. It streams Markdown summaries
50
- for the active tab and supports auto-summarize on navigation.
49
+ Summarize ships a Chrome Side Panel extension backed by a tiny local daemon. It streams
50
+ Markdown summaries for the active tab and supports auto-summarize on navigation.
51
51
  </p>
52
52
 
53
53
  <h2>Setup</h2>
54
54
  <ul>
55
- <li><code>npm i -g @steipete/summarize</code> or <code>brew install steipete/tap/summarize</code></li>
55
+ <li>
56
+ <code>npm i -g @steipete/summarize</code> or
57
+ <code>brew install steipete/tap/summarize</code>
58
+ </li>
56
59
  <li>Build extension: <code>pnpm -C apps/chrome-extension build</code></li>
57
60
  <li>Load unpacked: <code>apps/chrome-extension/.output/chrome-mv3</code></li>
58
- <li>Open side panel → copy token command → run <code>summarize daemon install --token &lt;TOKEN&gt;</code></li>
61
+ <li>
62
+ Open side panel → copy token command → run
63
+ <code>summarize daemon install --token &lt;TOKEN&gt;</code>
64
+ </li>
59
65
  <li>Verify: <code>summarize daemon status</code></li>
60
66
  </ul>
61
67
 
62
68
  <h2>Dev</h2>
63
69
  <ul>
64
- <li>Install daemon for dev: <code>pnpm summarize daemon install --token &lt;TOKEN&gt; --dev</code></li>
70
+ <li>
71
+ Install daemon for dev:
72
+ <code>pnpm summarize daemon install --token &lt;TOKEN&gt; --dev</code>
73
+ </li>
65
74
  <li>Dev server: <code>pnpm -C apps/chrome-extension dev</code></li>
66
75
  </ul>
67
76
 
@@ -80,7 +89,10 @@
80
89
 
81
90
  <footer class="footer">
82
91
  <span>summarize — Link → clean text → summary.</span>
83
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
92
+ <span
93
+ ><a href="./index.html">Docs</a> ·
94
+ <a href="https://github.com/steipete/summarize">Repo</a></span
95
+ >
84
96
  </footer>
85
97
  </main>
86
98
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/config" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,30 +45,48 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">docs</p>
44
47
  <h1>Config</h1>
45
- <p>summarize is mostly flags + env vars. Keep secrets in env; keep defaults in a shell profile.</p>
48
+ <p>
49
+ summarize is mostly flags + env vars. Keep secrets in env; keep defaults in a shell
50
+ profile.
51
+ </p>
46
52
 
47
53
  <h2>Environment variables</h2>
48
54
  <ul>
49
- <li><code>OPENAI_API_KEY</code>, <code>XAI_API_KEY</code>, <code>GEMINI_API_KEY</code> — provider keys (only needed when a mode actually calls an LLM).</li>
50
- <li><code>FIRECRAWL_API_KEY</code> — optional extraction fallback / preferred Markdown output in extract mode.</li>
55
+ <li>
56
+ <code>OPENAI_API_KEY</code>, <code>XAI_API_KEY</code>, <code>GEMINI_API_KEY</code>
57
+ provider keys (only needed when a mode actually calls an LLM).
58
+ </li>
59
+ <li>
60
+ <code>FIRECRAWL_API_KEY</code> — optional extraction fallback / preferred Markdown
61
+ output in extract mode.
62
+ </li>
51
63
  </ul>
52
64
 
53
65
  <h2>Tips</h2>
54
66
  <ul>
55
67
  <li>For deterministic output, pin <code>--model</code> and avoid provider fallback.</li>
56
- <li>When debugging extraction, add <code>--verbose</code> and/or <code>--json</code> for structured output.</li>
57
- <li>Use <code>--timeout</code> when crawling slow sites (defaults to <code>2m</code>).</li>
68
+ <li>
69
+ When debugging extraction, add <code>--verbose</code> and/or <code>--json</code> for
70
+ structured output.
71
+ </li>
72
+ <li>
73
+ Use <code>--timeout</code> when crawling slow sites (defaults to <code>2m</code>).
74
+ </li>
58
75
  </ul>
59
76
 
60
77
  <div class="note">
61
- Want the raw content? Use <code>--extract</code> (then decide where the summary should happen).
78
+ Want the raw content? Use <code>--extract</code> (then decide where the summary should
79
+ happen).
62
80
  </div>
63
81
  </article>
64
82
  </section>
65
83
 
66
84
  <footer class="footer">
67
85
  <span>summarize — Link → clean text → summary.</span>
68
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
86
+ <span
87
+ ><a href="./index.html">Docs</a> ·
88
+ <a href="https://github.com/steipete/summarize">Repo</a></span
89
+ >
69
90
  </footer>
70
91
  </main>
71
92
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/extract-only" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -65,15 +68,24 @@
65
68
  <li><code>--timeout</code> — tune crawling budget (<code>2m</code> default).</li>
66
69
  <li><code>--firecrawl off|auto|always</code> — choose the fallback strategy.</li>
67
70
  <li><code>--format md|text</code> — choose extracted output format.</li>
68
- <li><code>--markdown-mode off|auto|llm|readability</code> — for non-YouTube URLs with <code>--format md</code>, control HTML→Markdown conversion (LLM) + fallbacks.</li>
69
- <li><code>--preprocess off|auto|always</code> — controls markitdown usage (default <code>auto</code>).</li>
71
+ <li>
72
+ <code>--markdown-mode off|auto|llm|readability</code> — for non-YouTube URLs with
73
+ <code>--format md</code>, control HTML→Markdown conversion (LLM) + fallbacks.
74
+ </li>
75
+ <li>
76
+ <code>--preprocess off|auto|always</code> — controls markitdown usage (default
77
+ <code>auto</code>).
78
+ </li>
70
79
  </ul>
71
80
  </article>
72
81
  </section>
73
82
 
74
83
  <footer class="footer">
75
84
  <span>summarize — Link → clean text → summary.</span>
76
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
85
+ <span
86
+ ><a href="./index.html">Docs</a> ·
87
+ <a href="https://github.com/steipete/summarize">Repo</a></span
88
+ >
77
89
  </footer>
78
90
  </main>
79
91
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/firecrawl" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,7 +45,10 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">extractor</p>
44
47
  <h1>Firecrawl</h1>
45
- <p>Used as a fallback when HTML extraction looks blocked or too thin — and as a preferred Markdown source in extract mode (when configured).</p>
48
+ <p>
49
+ Used as a fallback when HTML extraction looks blocked or too thin — and as a preferred
50
+ Markdown source in extract mode (when configured).
51
+ </p>
46
52
 
47
53
  <h2>Key</h2>
48
54
  <ul>
@@ -64,7 +70,10 @@
64
70
 
65
71
  <footer class="footer">
66
72
  <span>summarize — Link → clean text → summary.</span>
67
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
73
+ <span
74
+ ><a href="./index.html">Docs</a> ·
75
+ <a href="https://github.com/steipete/summarize">Repo</a></span
76
+ >
68
77
  </footer>
69
78
  </main>
70
79
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -30,12 +33,35 @@
30
33
  <div class="hero__inner">
31
34
  <p class="kicker">Docs</p>
32
35
  <h1 class="title">Modes & knobs.</h1>
33
- <p class="lede">Small surface area. Powerful extraction. Sensible fallbacks. Podcast pages supported.</p>
36
+ <p class="lede">
37
+ Small surface area. Powerful extraction. Sensible fallbacks. Podcast pages supported.
38
+ </p>
34
39
  <div class="pillRow">
35
40
  <span class="pill"><span class="pill__dot" aria-hidden="true"></span> Website</span>
36
- <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent2)"></span> YouTube</span>
37
- <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> Podcasts</span>
38
- <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> Extract</span>
41
+ <span class="pill"
42
+ ><span
43
+ class="pill__dot"
44
+ aria-hidden="true"
45
+ style="background: var(--accent2)"
46
+ ></span>
47
+ YouTube</span
48
+ >
49
+ <span class="pill"
50
+ ><span
51
+ class="pill__dot"
52
+ aria-hidden="true"
53
+ style="background: var(--accent3)"
54
+ ></span>
55
+ Podcasts</span
56
+ >
57
+ <span class="pill"
58
+ ><span
59
+ class="pill__dot"
60
+ aria-hidden="true"
61
+ style="background: var(--accent3)"
62
+ ></span>
63
+ Extract</span
64
+ >
39
65
  </div>
40
66
  </div>
41
67
  </div>
@@ -86,7 +112,10 @@
86
112
 
87
113
  <footer class="footer">
88
114
  <span>summarize — Link → clean text → summary.</span>
89
- <span><a href="../index.html">Home</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
115
+ <span
116
+ ><a href="../index.html">Home</a> ·
117
+ <a href="https://github.com/steipete/summarize">Repo</a></span
118
+ >
90
119
  </footer>
91
120
  </main>
92
121
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/llm" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,19 +45,27 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">summarizer</p>
44
47
  <h1>LLM</h1>
45
- <p>summarize can use multiple providers. Pick one model, one provider, then make it boring and reliable.</p>
48
+ <p>
49
+ summarize can use multiple providers. Pick one model, one provider, then make it boring
50
+ and reliable.
51
+ </p>
46
52
 
47
53
  <h2>Keys</h2>
48
54
  <ul>
49
55
  <li><code>OPENAI_API_KEY</code></li>
50
56
  <li><code>XAI_API_KEY</code></li>
51
- <li><code>GEMINI_API_KEY</code> (also accepts <code>GOOGLE_GENERATIVE_AI_API_KEY</code> / <code>GOOGLE_API_KEY</code>)</li>
57
+ <li>
58
+ <code>GEMINI_API_KEY</code> (also accepts <code>GOOGLE_GENERATIVE_AI_API_KEY</code> /
59
+ <code>GOOGLE_API_KEY</code>)
60
+ </li>
52
61
  </ul>
53
62
 
54
63
  <h2>Practical advice</h2>
55
64
  <ul>
56
65
  <li>Pin <code>--model</code> for stable output.</li>
57
- <li>When using <code>--markdown-mode llm</code>, provider fallback is disabled by design.</li>
66
+ <li>
67
+ When using <code>--markdown-mode llm</code>, provider fallback is disabled by design.
68
+ </li>
58
69
  <li>For audits / tooling, prefer <code>--json</code> + fixed model.</li>
59
70
  </ul>
60
71
  </article>
@@ -62,7 +73,10 @@
62
73
 
63
74
  <footer class="footer">
64
75
  <span>summarize — Link → clean text → summary.</span>
65
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
76
+ <span
77
+ ><a href="./index.html">Docs</a> ·
78
+ <a href="https://github.com/steipete/summarize">Repo</a></span
79
+ >
66
80
  </footer>
67
81
  </main>
68
82
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/openai" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,23 +45,33 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">provider</p>
44
47
  <h1>OpenAI</h1>
45
- <p>Use OpenAI by setting <code>OPENAI_API_KEY</code> and picking a model via <code>--model</code>.</p>
48
+ <p>
49
+ Use OpenAI by setting <code>OPENAI_API_KEY</code> and picking a model via
50
+ <code>--model</code>.
51
+ </p>
46
52
 
47
53
  <h2>Notes</h2>
48
54
  <ul>
49
55
  <li>Some modes (like <code>--extract</code>) don’t need an LLM at all.</li>
50
- <li>When output is used downstream, prefer <code>--json</code> and pin <code>--model</code>.</li>
56
+ <li>
57
+ When output is used downstream, prefer <code>--json</code> and pin
58
+ <code>--model</code>.
59
+ </li>
51
60
  </ul>
52
61
 
53
62
  <div class="note">
54
- If your extraction is flaky, flip on <code>--verbose</code> and inspect which path was taken (HTML vs Firecrawl vs LLM Markdown).
63
+ If your extraction is flaky, flip on <code>--verbose</code> and inspect which path was
64
+ taken (HTML vs Firecrawl vs LLM Markdown).
55
65
  </div>
56
66
  </article>
57
67
  </section>
58
68
 
59
69
  <footer class="footer">
60
70
  <span>summarize — Link → clean text → summary.</span>
61
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
71
+ <span
72
+ ><a href="./index.html">Docs</a> ·
73
+ <a href="https://github.com/steipete/summarize">Repo</a></span
74
+ >
62
75
  </footer>
63
76
  </main>
64
77
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/website" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,9 +45,19 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">mode</p>
44
47
  <h1>Website mode</h1>
45
- <p>Fetch HTML → extract “article-ish” content → normalize to clean text. If extraction looks blocked or too thin, retry via Firecrawl Markdown (optional). With <code>--format md</code>, the CLI prefers Firecrawl Markdown when configured and can also convert HTML → Markdown via <code>--markdown-mode</code> (LLM) or <code>uvx markitdown</code>.</p>
48
+ <p>
49
+ Fetch HTML → extract “article-ish” content → normalize to clean text. If extraction
50
+ looks blocked or too thin, retry via Firecrawl Markdown (optional). With
51
+ <code>--format md</code>, the CLI prefers Firecrawl Markdown when configured and can
52
+ also convert HTML → Markdown via <code>--markdown-mode</code> (LLM) or
53
+ <code>uvx markitdown</code>.
54
+ </p>
46
55
 
47
- <p>Podcast pages are supported (Apple Podcasts, Spotify episodes, RSS feeds, Podbean, Podchaser, embedded YouTube). Summaries use published transcripts when available, otherwise Whisper.</p>
56
+ <p>
57
+ Podcast pages are supported (Apple Podcasts, Spotify episodes, RSS feeds, Podbean,
58
+ Podchaser, embedded YouTube). Summaries use published transcripts when available,
59
+ otherwise Whisper.
60
+ </p>
48
61
 
49
62
  <h2>Flags</h2>
50
63
  <ul>
@@ -52,22 +65,29 @@
52
65
  <li><code>--timeout 30s|2m|5000ms</code> (default <code>2m</code>)</li>
53
66
  <li><code>--extract</code> (print extracted content; no summary call)</li>
54
67
  <li><code>--format md|text</code> (default <code>text</code>)</li>
55
- <li><code>--markdown-mode off|auto|llm|readability</code> (only with <code>--format md</code>)</li>
56
- <li><code>--preprocess off|auto|always</code> (default <code>auto</code>; controls markitdown usage)</li>
68
+ <li>
69
+ <code>--markdown-mode off|auto|llm|readability</code> (only with
70
+ <code>--format md</code>)
71
+ </li>
72
+ <li>
73
+ <code>--preprocess off|auto|always</code> (default <code>auto</code>; controls
74
+ markitdown usage)
75
+ </li>
57
76
  <li><code>--json</code> (emit a single JSON object)</li>
58
77
  <li><code>--verbose</code> (progress + which extractor was used)</li>
59
78
  <li><code>--metrics off|on|detailed</code></li>
60
79
  </ul>
61
80
 
62
- <div class="note">
63
- Plain-text mode: <code>--extract --format text</code>.
64
- </div>
81
+ <div class="note">Plain-text mode: <code>--extract --format text</code>.</div>
65
82
  </article>
66
83
  </section>
67
84
 
68
85
  <footer class="footer">
69
86
  <span>summarize — Link → clean text → summary.</span>
70
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
87
+ <span
88
+ ><a href="./index.html">Docs</a> ·
89
+ <a href="https://github.com/steipete/summarize">Repo</a></span
90
+ >
71
91
  </footer>
72
92
  </main>
73
93
 
@@ -8,7 +8,10 @@
8
8
  <link rel="canonical" href="https://summarize.sh/docs/youtube" />
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
13
+ rel="stylesheet"
14
+ />
12
15
  <link rel="stylesheet" href="../assets/site.css" />
13
16
  </head>
14
17
  <body>
@@ -42,7 +45,10 @@
42
45
  <article class="doc reveal">
43
46
  <p class="kicker">mode</p>
44
47
  <h1>YouTube mode</h1>
45
- <p>Extracts transcripts via multiple strategies. The goal: reliable text, even when YouTube is being “difficult”.</p>
48
+ <p>
49
+ Extracts transcripts via multiple strategies. The goal: reliable text, even when YouTube
50
+ is being “difficult”.
51
+ </p>
46
52
 
47
53
  <h2>Tip</h2>
48
54
  <ul>
@@ -54,7 +60,10 @@
54
60
 
55
61
  <footer class="footer">
56
62
  <span>summarize — Link → clean text → summary.</span>
57
- <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
63
+ <span
64
+ ><a href="./index.html">Docs</a> ·
65
+ <a href="https://github.com/steipete/summarize">Repo</a></span
66
+ >
58
67
  </footer>
59
68
  </main>
60
69
 
@@ -11,7 +11,10 @@
11
11
  />
12
12
  <link rel="canonical" href="https://summarize.sh/" />
13
13
  <meta property="og:title" content="summarize" />
14
- <meta property="og:description" content="Fast summaries, in the CLI and the Chrome Side Panel." />
14
+ <meta
15
+ property="og:description"
16
+ content="Fast summaries, in the CLI and the Chrome Side Panel."
17
+ />
15
18
  <meta property="og:type" content="website" />
16
19
  <meta property="og:url" content="https://summarize.sh/" />
17
20
  <meta name="theme-color" content="#0b0f12" />
@@ -44,9 +47,10 @@
44
47
  <p class="kicker">CLI + Chrome Extension</p>
45
48
  <h1 class="title">Summaries that live where you work.</h1>
46
49
  <p class="lede">
47
- Summarize turns links, files, and media into sharp summaries with a real extraction pipeline.
48
- Use the <strong>CLI</strong> for automation or the <strong>Chrome Side Panel</strong> for one-click
49
- summaries of the current tab. Supports <strong>local, paid, and free</strong> models.
50
+ Summarize turns links, files, and media into sharp summaries with a real extraction
51
+ pipeline. Use the <strong>CLI</strong> for automation or the
52
+ <strong>Chrome Side Panel</strong> for one-click summaries of the current tab.
53
+ Supports <strong>local, paid, and free</strong> models.
50
54
  </p>
51
55
  <div class="ctaRow">
52
56
  <a class="btn btn--primary" href="./docs/index.html">Docs</a>
@@ -71,7 +75,11 @@
71
75
  <figcaption>CLI: streaming summaries in the terminal.</figcaption>
72
76
  </figure>
73
77
  <figure class="shot shot--ext">
74
- <img src="./assets/summarize-extension.png" alt="Summarize Chrome extension side panel" loading="lazy" />
78
+ <img
79
+ src="./assets/summarize-extension.png"
80
+ alt="Summarize Chrome extension side panel"
81
+ loading="lazy"
82
+ />
75
83
  <figcaption>Extension: a live Side Panel for the active tab.</figcaption>
76
84
  </figure>
77
85
  </div>
@@ -85,13 +93,18 @@
85
93
  <h2>Fast summaries, scripted or interactive.</h2>
86
94
  </div>
87
95
  <p>
88
- Built for automation: extract clean text, summarize with your model, and output JSON or Markdown.
89
- Works with URLs, PDFs, images, audio/video, YouTube, and podcasts.
96
+ Built for automation: extract clean text, summarize with your model, and output JSON or
97
+ Markdown. Works with URLs, PDFs, images, audio/video, YouTube, and podcasts.
90
98
  </p>
91
99
  <ul class="list">
92
100
  <li><strong>Extract + summarize</strong> with Firecrawl fallback.</li>
93
- <li><strong>Media pipeline</strong> with transcript-first flow and Whisper fallback.</li>
94
- <li><strong>Scriptable output</strong> via <code>--json</code>, <code>--extract</code>, <code>--metrics</code>.</li>
101
+ <li>
102
+ <strong>Media pipeline</strong> with transcript-first flow and Whisper fallback.
103
+ </li>
104
+ <li>
105
+ <strong>Scriptable output</strong> via <code>--json</code>, <code>--extract</code>,
106
+ <code>--metrics</code>.
107
+ </li>
95
108
  </ul>
96
109
  <div class="cardCode">
97
110
  <pre><code>summarize "https://example.com" --length long
@@ -110,8 +123,8 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
110
123
  <h2>Summaries in the Side Panel, one click away.</h2>
111
124
  </div>
112
125
  <p>
113
- A real Chrome Side Panel with a tiny local daemon. It streams Markdown summaries for the active tab,
114
- with auto-summary on navigation.
126
+ A real Chrome Side Panel with a tiny local daemon. It streams Markdown summaries for the
127
+ active tab, with auto-summary on navigation.
115
128
  </p>
116
129
  <ol class="steps">
117
130
  <li>Install the CLI + daemon.</li>
@@ -119,11 +132,14 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
119
132
  <li>Open Side Panel and connect with the token.</li>
120
133
  </ol>
121
134
  <div class="callout">
122
- <strong>Runs locally</strong> on your machine. The daemon is localhost-only and token-protected.
135
+ <strong>Runs locally</strong> on your machine. The daemon is localhost-only and
136
+ token-protected.
123
137
  </div>
124
138
  <div class="ctaRow">
125
139
  <a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
126
- <a class="btn" href="https://github.com/steipete/summarize/releases/latest">Latest release</a>
140
+ <a class="btn" href="https://github.com/steipete/summarize/releases/latest"
141
+ >Latest release</a
142
+ >
127
143
  </div>
128
144
  </article>
129
145
  </section>
@@ -196,7 +212,10 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
196
212
 
197
213
  <footer class="footer">
198
214
  <span>Canonical: <a href="https://summarize.sh">summarize.sh</a></span>
199
- <span><a href="./docs/index.html">Docs</a> · <a href="https://github.com/steipete/summarize">GitHub</a></span>
215
+ <span
216
+ ><a href="./docs/index.html">Docs</a> ·
217
+ <a href="https://github.com/steipete/summarize">GitHub</a></span
218
+ >
200
219
  </footer>
201
220
  </main>
202
221
 
package/docs/slides.md CHANGED
@@ -7,6 +7,7 @@ read_when:
7
7
  # Slides plan (no model)
8
8
 
9
9
  ## Goals
10
+
10
11
  - Expanded slides view = full-width cards, top of summary.
11
12
  - Click slide = seek video timestamp (no modal).
12
13
  - Descriptions scale with length setting.
@@ -14,11 +15,13 @@ read_when:
14
15
  - No model call for slide descriptions.
15
16
 
16
17
  ## Data sources
18
+
17
19
  - Primary: transcript timed text (already available with timestamps).
18
20
  - Secondary: OCR text from slides (truncate, selectable).
19
21
  - Tertiary: empty description (still render card).
20
22
 
21
23
  ## Description generation (no model)
24
+
22
25
  - For each slide timestamp `t`:
23
26
  - Pull transcript segments within a time window around `t`.
24
27
  - Concatenate into plain text (no bullets).
@@ -27,6 +30,7 @@ read_when:
27
30
  - Always render all slide cards; missing text → show slide only.
28
31
 
29
32
  ## Length scaling
33
+
30
34
  - Map summary length to per-slide target chars.
31
35
  - Use existing length presets (short/medium/long/xl/xxl + custom):
32
36
  - `short`: ~120 chars/slide
@@ -39,6 +43,7 @@ read_when:
39
43
  - Window size should expand with length (e.g. 20s → 90s).
40
44
 
41
45
  ## UI behavior
46
+
42
47
  - Default summary stays unchanged (no slide text).
43
48
  - Slide strip (compact) stays horizontal; no modal required.
44
49
  - Expand toggle switches to vertical full-width list:
@@ -49,6 +54,7 @@ read_when:
49
54
  (enough slides + total OCR chars); otherwise hide it.
50
55
 
51
56
  ## CLI
57
+
52
58
  - `summarize <url> --slides` streams a short intro paragraph and then a continuous narrative with slide images inserted inline where `[slide:N]` markers appear.
53
59
  - The model is responsible for inserting every slide marker in order; text length is still governed by `--length`.
54
60
  - If inline images are unsupported, the CLI prints text-only output and notes how to export slides to disk.
@@ -59,6 +65,7 @@ read_when:
59
65
  - Defaults to writing images under `./slides/<sourceId>/` (override via `--slides-dir` / `--output`).
60
66
 
61
67
  ## Implementation notes
68
+
62
69
  - Build `slideDescriptions` map in panel:
63
70
  - Use `summary.timedText` when available.
64
71
  - Split transcript into segments with timestamps (already in payload).
@@ -67,8 +74,9 @@ read_when:
67
74
  - Slide extraction downloads the media once for detect+extract; set `SLIDES_EXTRACT_STREAM=1` to allow stream fallback (lower accuracy).
68
75
 
69
76
  ## Steps
70
- 1) Add slide-description builder in sidepanel using transcript timed text + OCR fallback.
71
- 2) Add length-based per-slide char budget and window sizing.
72
- 3) Render expanded card list with timestamps + text.
73
- 4) Remove modal; click = seek only.
74
- 5) Add tests for slide description + fallback.
77
+
78
+ 1. Add slide-description builder in sidepanel using transcript timed text + OCR fallback.
79
+ 2. Add length-based per-slide char budget and window sizing.
80
+ 3. Render expanded card list with timestamps + text.
81
+ 4. Remove modal; click = seek only.
82
+ 5. Add tests for slide description + fallback.