@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,224 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>summarize — CLI + Chrome Side Panel for fast summaries</title>
8
+ <meta
9
+ name="description"
10
+ content="Summarize is a fast CLI and a Chrome Side Panel extension for clean extraction and sharp summaries."
11
+ />
12
+ <link rel="canonical" href="https://summarize.sh/" />
13
+ <meta property="og:title" content="summarize" />
14
+ <meta
15
+ property="og:description"
16
+ content="Fast summaries, in the CLI and the Chrome Side Panel."
17
+ />
18
+ <meta property="og:type" content="website" />
19
+ <meta property="og:url" content="https://summarize.sh/" />
20
+ <meta name="theme-color" content="#0b0f12" />
21
+
22
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
23
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
24
+ <link
25
+ href="https://fonts.googleapis.com/css2?family=Fraunces:wght@600;700&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600&display=swap"
26
+ rel="stylesheet"
27
+ />
28
+ <link rel="stylesheet" href="./assets/site.css" />
29
+ </head>
30
+ <body>
31
+ <main class="shell">
32
+ <header class="top">
33
+ <a class="brand" href="./index.html" aria-label="summarize home">
34
+ <span class="brand__mark" aria-hidden="true">s</span>
35
+ <span class="brand__word">summarize</span>
36
+ </a>
37
+ <nav class="nav" aria-label="Primary">
38
+ <a data-nav="home" href="./index.html">Home</a>
39
+ <a data-nav="docs" href="./docs/index.html">Docs</a>
40
+ <a href="https://github.com/steipete/summarize">GitHub</a>
41
+ </nav>
42
+ </header>
43
+
44
+ <section class="hero">
45
+ <div class="hero__frame reveal">
46
+ <div class="hero__copy">
47
+ <p class="kicker">CLI + Chrome Extension</p>
48
+ <h1 class="title">Summaries that live where you work.</h1>
49
+ <p class="lede">
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.
54
+ </p>
55
+ <div class="ctaRow">
56
+ <a class="btn btn--primary" href="./docs/index.html">Docs</a>
57
+ <a class="btn" href="https://github.com/steipete/summarize">GitHub</a>
58
+ </div>
59
+ <div class="quickRow">
60
+ <div class="quickRow__label">Quickstart</div>
61
+ <div class="quickRow__code">
62
+ <code id="install">npm i -g @steipete/summarize</code>
63
+ <code id="run">summarize "https://example.com/article"</code>
64
+ </div>
65
+ <div class="quickRow__actions">
66
+ <button class="btn" data-copy="#install">Copy install</button>
67
+ <button class="btn" data-copy="#run">Copy run</button>
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+ <div class="hero__visual">
73
+ <figure class="shot shot--cli">
74
+ <img src="./assets/summarize-cli.png" alt="Summarize CLI output" loading="lazy" />
75
+ <figcaption>CLI: streaming summaries in the terminal.</figcaption>
76
+ </figure>
77
+ <figure class="shot shot--ext">
78
+ <img
79
+ src="./assets/summarize-extension.png"
80
+ alt="Summarize Chrome extension side panel"
81
+ loading="lazy"
82
+ />
83
+ <figcaption>Extension: a live Side Panel for the active tab.</figcaption>
84
+ </figure>
85
+ </div>
86
+ </div>
87
+ </section>
88
+
89
+ <section class="productGrid" aria-label="Products">
90
+ <article class="productCard reveal" id="cli">
91
+ <div class="productCard__head">
92
+ <span class="badge">CLI</span>
93
+ <h2>Fast summaries, scripted or interactive.</h2>
94
+ </div>
95
+ <p>
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.
98
+ </p>
99
+ <ul class="list">
100
+ <li><strong>Extract + summarize</strong> with Firecrawl fallback.</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>
108
+ </ul>
109
+ <div class="cardCode">
110
+ <pre><code>summarize "https://example.com" --length long
111
+ summarize "https://youtu.be/..." --youtube auto
112
+ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
113
+ </div>
114
+ <div class="ctaRow">
115
+ <a class="btn btn--ghost" href="./docs/cli.html">CLI docs</a>
116
+ <a class="btn" href="./docs/config.html">Config</a>
117
+ </div>
118
+ </article>
119
+
120
+ <article class="productCard reveal" id="extension">
121
+ <div class="productCard__head">
122
+ <span class="badge badge--alt">Chrome Extension</span>
123
+ <h2>Summaries in the Side Panel, one click away.</h2>
124
+ </div>
125
+ <p>
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.
128
+ </p>
129
+ <ol class="steps">
130
+ <li>Install the CLI + daemon.</li>
131
+ <li>Load the unpacked extension.</li>
132
+ <li>Open Side Panel and connect with the token.</li>
133
+ </ol>
134
+ <div class="callout">
135
+ <strong>Runs locally</strong> on your machine. The daemon is localhost-only and
136
+ token-protected.
137
+ </div>
138
+ <div class="ctaRow">
139
+ <a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
140
+ <a class="btn" href="https://github.com/steipete/summarize/releases/latest"
141
+ >Latest release</a
142
+ >
143
+ </div>
144
+ </article>
145
+ </section>
146
+
147
+ <section class="capGrid" aria-label="Capabilities">
148
+ <div class="capCard reveal">
149
+ <span class="capCard__eyebrow">Extraction</span>
150
+ <h3>HTML -> clean text -> summary</h3>
151
+ <p>Readability, markitdown, and Firecrawl fallback when sites fight back.</p>
152
+ </div>
153
+ <div class="capCard reveal">
154
+ <span class="capCard__eyebrow">Media</span>
155
+ <h3>Podcast + YouTube aware</h3>
156
+ <p>Prefers published transcripts, then Whisper when needed.</p>
157
+ </div>
158
+ <div class="capCard reveal">
159
+ <span class="capCard__eyebrow">Models</span>
160
+ <h3>Provider-agnostic</h3>
161
+ <p>Local OpenAI-compatible gateways, paid providers, and OpenRouter free models.</p>
162
+ </div>
163
+ <div class="capCard reveal">
164
+ <span class="capCard__eyebrow">Outputs</span>
165
+ <h3>Readable + scriptable</h3>
166
+ <p>Streaming TTY output, ANSI Markdown, JSON diagnostics, and metrics.</p>
167
+ </div>
168
+ </section>
169
+
170
+ <section class="flow">
171
+ <div class="flow__card reveal">
172
+ <h2>How it works</h2>
173
+ <div class="flow__steps">
174
+ <div class="flowStep">
175
+ <span class="flowStep__num">01</span>
176
+ <div>
177
+ <h4>Fetch + extract</h4>
178
+ <p>Pull the source, clean HTML, normalize, or convert to Markdown.</p>
179
+ </div>
180
+ </div>
181
+ <div class="flowStep">
182
+ <span class="flowStep__num">02</span>
183
+ <div>
184
+ <h4>Transcript when needed</h4>
185
+ <p>Use published transcripts, then Whisper fallback for media.</p>
186
+ </div>
187
+ </div>
188
+ <div class="flowStep">
189
+ <span class="flowStep__num">03</span>
190
+ <div>
191
+ <h4>Summarize + format</h4>
192
+ <p>LLM output, streaming in the CLI or Side Panel, with metrics.</p>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </section>
198
+
199
+ <section class="more">
200
+ <div class="more__card reveal">
201
+ <h2>More</h2>
202
+ <div class="more__grid">
203
+ <a class="moreLink" href="./docs/website.html">Website extraction</a>
204
+ <a class="moreLink" href="./docs/youtube.html">YouTube transcripts</a>
205
+ <a class="moreLink" href="./docs/media.html">Media pipeline</a>
206
+ <a class="moreLink" href="./docs/model-auto.html">Auto model rules</a>
207
+ <a class="moreLink" href="./docs/llm.html">Model + key setup</a>
208
+ <a class="moreLink" href="./docs/config.html">Config schema</a>
209
+ </div>
210
+ </div>
211
+ </section>
212
+
213
+ <footer class="footer">
214
+ <span>Canonical: <a href="https://summarize.sh">summarize.sh</a></span>
215
+ <span
216
+ ><a href="./docs/index.html">Docs</a> ·
217
+ <a href="https://github.com/steipete/summarize">GitHub</a></span
218
+ >
219
+ </footer>
220
+ </main>
221
+
222
+ <script type="module" src="./assets/site.js"></script>
223
+ </body>
224
+ </html>
package/docs/index.md ADDED
@@ -0,0 +1,25 @@
1
+ ---
2
+ summary: "Docs index for summarize behaviors and modes."
3
+ ---
4
+
5
+ # Docs
6
+
7
+ - [Chrome extension](chrome-extension.md)
8
+ - [Cache](cache.md)
9
+ - [CLI](cli.md)
10
+ - [Config](config.md)
11
+ - [Extract](extract-only.md)
12
+ - [Firecrawl](firecrawl.md)
13
+ - [Language](language.md)
14
+ - [LLM](llm.md)
15
+ - [Manual tests](manual-tests.md)
16
+ - [Model auto](model-auto.md)
17
+ - [OpenAI](openai.md)
18
+ - [Releasing](releasing.md)
19
+ - [Smoke test](smoketest.md)
20
+ - [Website](website.md)
21
+ - [YouTube](youtube.md)
22
+
23
+ ## Website
24
+
25
+ - Jekyll site source: `docs/` (Markdown → HTML via GitHub Pages Actions)
package/docs/llm.md CHANGED
@@ -7,7 +7,8 @@ read_when:
7
7
  # LLM / summarization mode
8
8
 
9
9
  By default `summarize` will call an LLM using **direct provider API keys**. When CLI tools are
10
- installed, auto mode can use local CLI models when `cli.enabled` is set (see `docs/cli.md`).
10
+ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto CLI fallback
11
+ (`cli.autoFallback`; see `docs/cli.md`).
11
12
 
12
13
  ## Defaults
13
14
 
@@ -17,6 +18,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
17
18
  ## Env
18
19
 
19
20
  - `.env` (optional): when running the CLI, `summarize` also reads `.env` in the current working directory and merges it into the environment (real env vars win).
21
+ - `~/.summarize/config.json` `env` (optional): fallback env defaults when process env is missing/blank.
20
22
  - `XAI_API_KEY` (required for `xai/...` models)
21
23
  - `XAI_BASE_URL` (optional; override xAI API endpoint)
22
24
  - `OPENAI_API_KEY` (required for `openai/...` models)
@@ -30,7 +32,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
30
32
  - `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
31
33
  - `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
32
34
  - `SUMMARIZE_MODEL` (optional; overrides default model selection)
33
- - `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` (optional; override CLI binary paths)
35
+ - `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` (optional; override CLI binary paths)
34
36
 
35
37
  ## Flags
36
38
 
@@ -39,6 +41,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
39
41
  - `cli/codex/gpt-5.2`
40
42
  - `cli/claude/sonnet`
41
43
  - `cli/gemini/gemini-3-flash-preview`
44
+ - `cli/agent/gpt-5.2`
42
45
  - `google/gemini-3-flash-preview`
43
46
  - `openai/gpt-5-mini`
44
47
  - `zai/glm-4.7`
@@ -47,7 +50,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
47
50
  - `anthropic/claude-sonnet-4-5`
48
51
  - `openrouter/meta-llama/llama-3.3-70b-instruct:free` (force OpenRouter)
49
52
  - `--cli [provider]`
50
- - Examples: `--cli claude`, `--cli Gemini`, `--cli codex` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
53
+ - Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
51
54
  - `--model auto`
52
55
  - See `docs/model-auto.md`
53
56
  - `--model <preset>`
@@ -57,7 +60,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
57
60
  - Prompts are wrapped in `<instructions>`, `<context>`, `<content>` tags.
58
61
  - When `--length` is numeric, we add `Output is X characters.` When `--language` is explicitly set, we add `Output should be <language>.`
59
62
  - `--no-cache`
60
- - Bypass cache reads and writes (extracted content, transcripts, summaries).
63
+ - Bypass summary cache reads and writes only (LLM output). Extract/transcript caches still apply.
61
64
  - `--cache-stats`
62
65
  - Print cache stats and exit.
63
66
  - `--clear-cache`
@@ -65,10 +68,12 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
65
68
  - `--video-mode auto|transcript|understand`
66
69
  - Only relevant for video inputs / video-only pages.
67
70
  - `--length short|medium|long|xl|xxl|<chars>`
68
- - This is *soft guidance* to the model (no hard truncation).
71
+ - This is _soft guidance_ to the model (no hard truncation).
69
72
  - Minimum numeric value: 50 chars.
70
73
  - Default: `long`.
71
74
  - Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
75
+ - `--force-summary`
76
+ - Always run the LLM even when extracted content is shorter than the requested length.
72
77
  - `--max-output-tokens <count>`
73
78
  - Hard cap for output tokens (optional).
74
79
  - If omitted, no max token parameter is sent (provider default).
@@ -78,6 +83,14 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
78
83
  - LLM retry attempts on timeout (default: 1).
79
84
  - `--json` (includes prompt + summary in one JSON object)
80
85
 
86
+ ## Prompt rules
87
+
88
+ - Video and podcast summaries omit sponsor/ads/promotional segments; do not include them in the summary.
89
+ - Do not mention or acknowledge sponsors/ads, and do not say you skipped or ignored anything.
90
+ - If a standout line is present, include 1-2 short exact excerpts formatted as Markdown italics with single asterisks. Do not use quotation marks of any kind (straight or curly). If a title or excerpt would normally use quotes, remove them and optionally italicize the text instead. Apostrophes in contractions are OK. Never include ad/sponsor/boilerplate excerpts and do not mention them. Avoid sponsor/ad/promo language, brand names like Squarespace, or CTA phrases like discount code.
91
+ - Final check: remove sponsor/ad references or mentions of skipping/ignoring content. Remove any quotation marks. Ensure standout excerpts are italicized; otherwise omit them.
92
+ - Hard rules: never mention sponsor/ads; never output quotation marks of any kind (straight or curly), even for titles.
93
+
81
94
  ## Z.AI
82
95
 
83
96
  Use `--model zai/<model>` (e.g. `zai/glm-4.7`). Defaults to Z.AI’s base URL and uses chat completions.
@@ -45,6 +45,8 @@ Tip: use `--verbose` to see model attempts + the chosen model.
45
45
 
46
46
  - YouTube:
47
47
  - `summarize https://www.youtube.com/watch?v=dQw4w9WgXcQ --max-output-tokens 200`
48
+ - YouTube summary w/ timestamps (expect `[mm:ss]` in output):
49
+ - `summarize --timestamps --youtube web --length short https://www.youtube.com/watch?v=I845O57ZSy4`
48
50
  - Local video understanding (requires Gemini video-capable model; otherwise expect an error or transcript-only behavior depending on input):
49
51
  - `summarize ./path/to/video.mp4 --max-output-tokens 200`
50
52
 
package/docs/media.md CHANGED
@@ -13,14 +13,18 @@ read_when:
13
13
 
14
14
  ## Transcript resolution order
15
15
 
16
- 1) Embedded captions (VTT/JSON) when available.
17
- 2) yt-dlp download + Whisper transcription (prefers local whisper.cpp; OpenAI/FAL fallback).
16
+ 1. Embedded captions (VTT/JSON) when available.
17
+ 2. yt-dlp download + Whisper transcription (Groq first; then ONNX/local/OpenAI/FAL fallback).
18
18
 
19
19
  ## CLI behavior
20
20
 
21
21
  - `--video-mode transcript` prefers transcript-first media handling even when a page has text.
22
22
  - Direct media URLs (mp4/webm/m4a/etc) skip HTML and transcribe.
23
+ - Local audio/video files are routed through the same transcript-first pipeline.
23
24
  - YouTube still uses the YouTube transcript pipeline (captions → yt-dlp fallback).
25
+ - X/Twitter status URLs with detected video auto-switch to transcript-first (yt-dlp), even in auto mode.
26
+ - X broadcasts (`/i/broadcasts/...`) are treated as media-only and go transcript-first by default.
27
+ - Local media files are capped at 2 GB; remote media URLs are best-effort via yt-dlp (no explicit size limit).
24
28
 
25
29
  ## Chrome extension behavior
26
30
 
@@ -16,8 +16,9 @@ This is also the built-in default when you don’t specify a model.
16
16
  - Skips attempts that don’t have the required API key configured.
17
17
  - On any request error, tries the next attempt.
18
18
  - If no model is usable, prints the extracted text (no LLM summary). Use `--extract` if you want the raw extracted content even when models are available.
19
- - Auto prepends CLI attempts only when `cli.enabled` is set (see `docs/cli.md`).
20
- - Order follows `cli.enabled`.
19
+ - Auto prepends CLI attempts when either:
20
+ - `cli.enabled` is set (order follows `cli.enabled`), or
21
+ - implicit auto selection is active and `cli.autoFallback` allows it.
21
22
 
22
23
  ## OpenRouter vs native
23
24
 
@@ -0,0 +1,55 @@
1
+ ---
2
+ summary: "Local Parakeet/Canary ONNX transcription via external CLI."
3
+ read_when:
4
+ - "When configuring or changing local ONNX transcription (parakeet/canary)."
5
+ ---
6
+
7
+ # NVIDIA Parakeet/Canary ONNX transcription
8
+
9
+ Summarize can now run local transcription through NVIDIA's Parakeet-TDT 0.6B-v3 or Canary 1B-v2 ONNX exports by shelling out to a user-provided CLI. Auto selection prefers ONNX when configured; you can still force Whisper or a specific ONNX model.
10
+
11
+ ## How to enable
12
+
13
+ 1. Install a CLI capable of running the ONNX models (e.g. `sherpa-onnx` or a custom wrapper). Homebrew may not have a formula; use upstream binaries or build from source if needed. The CLI must emit the transcribed text on stdout and accept a single WAV input path. **Summarize now downloads the Hugging Face model files automatically on first use** into the cache (see below), so your command template can reference the provided paths.
14
+ 2. Set one (or both) command templates:
15
+
16
+ - Recommended (no shell): provide a JSON array (command + args):
17
+ - `SUMMARIZE_ONNX_PARAKEET_CMD='["sherpa-onnx", "...", "--tokens", "{vocab}", "--offline-ctc-model", "{model}", "--input-wav", "{input}"]'`
18
+ - `SUMMARIZE_ONNX_CANARY_CMD='["my-canary-wrapper", "{model_dir}", "{input}"]'`
19
+ - Shell string (advanced): `SUMMARIZE_ONNX_PARAKEET_CMD="sherpa-onnx ... --tokens {vocab} --offline-ctc-model {model} --input-wav {input}"`
20
+
21
+ Notes:
22
+
23
+ - If you use the shell string form, **do not quote placeholders** (Summarize shell-escapes substituted paths so spaces work and injection risk is reduced).
24
+
25
+ Placeholders:
26
+
27
+ - `{input}` — audio path (added to the end if not present)
28
+ - `{model}` — downloaded `model.onnx` path
29
+ - `{vocab}` — downloaded `vocab.txt` path
30
+ - `{model_dir}` — parent directory containing the downloaded files
31
+
32
+ 3. Pick the ONNX model via CLI or env:
33
+
34
+ - Auto (default): leave `SUMMARIZE_TRANSCRIBER` unset or set `SUMMARIZE_TRANSCRIBER=auto`
35
+ - CLI: `--transcriber parakeet` or `--transcriber canary`
36
+ - Env: `SUMMARIZE_TRANSCRIBER=parakeet` (or `canary`)
37
+
38
+ For the Chrome extension, you can pick a permanent default under **Settings → Model → Advanced Overrides → Transcriber**. The selection is sent with every request. Make sure the daemon environment still has your ONNX CLI commands configured (env vars above) so the override can take effect. Alternatively, export the env vars before running `summarize daemon install --token <TOKEN>` so the daemon inherits your ONNX command templates and default transcriber.
39
+
40
+ ### Cache + download details
41
+
42
+ - Artifacts are stored under `${SUMMARIZE_ONNX_CACHE_DIR || $XDG_CACHE_HOME || ~/.cache}/summarize/onnx/<model>/`.
43
+ - Set `SUMMARIZE_ONNX_MODEL_BASE_URL` to point at a mirror (defaults to the Hugging Face repo for the chosen model).
44
+ - The first run downloads `model.onnx` and `vocab.txt`; subsequent runs reuse cached files.
45
+
46
+ ## Behavior
47
+
48
+ - Input audio is transcoded to 16kHz mono WAV via `ffmpeg` when available; otherwise the original file is passed to the CLI.
49
+ - Onnx errors (missing command, non-zero exit, empty output) fall back to the existing Whisper flow with a note recorded in the transcript metadata.
50
+ - Progress UI shows "ONNX (Parakeet/Canary)" while the external transcriber runs.
51
+
52
+ ## Notes
53
+
54
+ - The ONNX inference binary itself is **not** bundled; users must install or provide it separately.
55
+ - This flow remains CPU-only and compatible with existing transcript providers.
package/docs/openai.md CHANGED
@@ -19,7 +19,7 @@ For the full model/provider matrix, see `docs/llm.md`.
19
19
 
20
20
  - `--model openai/<model>`
21
21
  - `--length short|medium|long|xl|xxl|<chars>`
22
- - This is *soft guidance* to the model (no hard truncation).
22
+ - This is _soft guidance_ to the model (no hard truncation).
23
23
  - `--max-output-tokens <count>`
24
24
  - Hard cap for output tokens (optional).
25
25
  - `--json` (includes prompt + summary in one JSON object)
package/docs/releasing.md CHANGED
@@ -5,11 +5,13 @@ summary: "Release checklist + Homebrew tap update."
5
5
  # Releasing
6
6
 
7
7
  ## Goals
8
+
8
9
  - Ship npm packages (core first, then CLI).
9
10
  - Tag + GitHub release.
10
11
  - Update Homebrew tap so `brew install steipete/tap/summarize` matches latest tag.
11
12
 
12
13
  ## Checklist
14
+
13
15
  1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag → tap).
14
16
  2. Create GitHub release for the new tag (match version, attach notes/assets as needed).
15
17
  3. If you didn’t run `tap` in the script, update the Homebrew tap formula for `summarize`:
@@ -22,5 +24,6 @@ summary: "Release checklist + Homebrew tap update."
22
24
  5. If anything fails, fix and re-cut the release (no partials).
23
25
 
24
26
  ## Common failure
27
+
25
28
  - NPM/GitHub release updated, tap not updated → users stuck on old version.
26
29
  Fix: always do step 3–4 before announcing.
@@ -7,7 +7,10 @@
7
7
  <title>Not found — summarize</title>
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
10
+ <link
11
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
12
+ rel="stylesheet"
13
+ />
11
14
  <link rel="stylesheet" href="./assets/site.css" />
12
15
  </head>
13
16
  <body>