@steipete/summarize 0.10.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 (374) hide show
  1. package/CHANGELOG.md +74 -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 +53 -45
package/CHANGELOG.md CHANGED
@@ -1,79 +1,124 @@
1
1
  # Changelog
2
2
 
3
- ## 0.10.0 - Unreleased
3
+ ## 0.11.0 - Unreleased
4
+
5
+ ### Highlights
6
+
7
+ - Auto CLI fallback: new controls and persisted last-success provider state (`~/.summarize/cli-state.json`) for no-key/local-CLI workflows.
8
+ - Transcription reliability: Groq Whisper is now the preferred cloud transcriber, with custom OpenAI-compatible Whisper endpoint overrides.
9
+ - Input reliability: binary-safe stdin handling, local media support in `--extract`, and fixes for local-file hangs/PDF preprocessing on custom OpenAI base URLs.
10
+
11
+ ### Features
12
+
13
+ - CLI: add Cursor Agent provider (`--cli agent`) for CLI-model execution.
14
+ - CLI auto mode: add implicit auto CLI fallback controls (`cli.autoFallback`, `--auto-cli-fallback`) and provider priority controls (`cli.providers`, `--cli-priority`), with persisted provider success ordering.
15
+ - Transcription: add Groq Whisper as preferred cloud provider (#71, thanks @n0an).
16
+ - Transcription: support custom OpenAI-compatible Whisper endpoints via `OPENAI_WHISPER_BASE_URL` (with safe `OPENAI_BASE_URL` fallback) (#65, thanks @toanbot).
17
+ - Config: support generic `env` defaults in `~/.summarize/config.json` (fallback for any env var), while keeping legacy `apiKeys` mapping for compatibility (#63, thanks @entropyy0).
18
+
19
+ ### Fixes
20
+
21
+ - CLI local files: avoid hangs when stream usage never resolves and preprocess PDFs automatically for custom OpenAI-compatible `OPENAI_BASE_URL` endpoints (e.g. non-`api.openai.com`).
22
+ - CLI stdin: support binary-safe piping/input temp files to prevent corruption on non-text stdin (#76).
23
+ - Extract mode: allow `--extract` for local media files (#72).
24
+ - Auto model/daemon fallback: skip model attempts when required API keys are missing and normalize env-key checks in daemon fallback (#67, #78).
25
+ - Cache: for auto presets (`auto`/`free`/named auto), prefer preset-level winner cache entries so stale per-candidate cache hits don’t override newer better-model results.
26
+ - Media: treat X broadcasts (`/i/broadcasts/...`) as transcript-first media and prefer URL mode.
27
+ - YouTube: keep explicit `--youtube apify` working when HTML fetch fails, while preserving duration metadata parity (#64, thanks @entropyy0).
28
+ - Transcription: stabilize Groq-first fallback flow (no duplicate Groq retries in file mode), improve terminal error reporting, and surface Groq setup in media guidance (#71, thanks @n0an).
29
+ - Media detection: detect more direct media URL extensions including `.ogg`/`.opus` (#65, thanks @toanbot).
30
+ - Slides: allow yt-dlp cookies-from-browser via `SUMMARIZE_YT_DLP_COOKIES_FROM_BROWSER` to avoid YouTube 403s.
31
+ - Daemon install: resolve symlinked/global bin paths and Windows shims when locating the CLI for install (#57, #62, thanks @entropyy0).
32
+ - Extraction: strip hidden HTML + invisible Unicode before summarization or extract output (#61).
33
+ - CLI: honor `--lang` for YouTube transcript→Markdown conversion in `--markdown-mode llm` (#56, thanks @entropyy0).
34
+ - LLM: map Anthropic bare model ids to versioned aliases (`claude-sonnet-4` → `claude-sonnet-4-0`) (#55, thanks @entropyy0).
35
+
36
+ ### Improvements
37
+
38
+ - Tooling: remove Biome and standardize on `oxfmt` + type-aware `oxlint`; `pnpm check` now enforces `format:check` before lint/tests.
39
+ - Dependencies: update workspace dependencies to latest (including `@mariozechner/pi-ai` and `oxlint-tsgolint`).
40
+
41
+ ## 0.10.0 - 2026-01-22
4
42
 
5
43
  ### Highlights
6
44
 
7
45
  - Chrome Side Panel: **Chat mode** with metrics bar, message queue, and improved context (full transcript + summary metadata, jump-to-latest).
8
- - Slides: **YouTube slide screenshots + OCR + transcript-aligned cards**, timestamped seek, and an OCR/Transcript toggle.
9
46
  - Media-aware summarization in the Side Panel: Page vs Video/Audio dropdown, automatic media preference on video sites, plus visible word count/duration.
47
+ - Slides: **YouTube slide screenshots + OCR + transcript-aligned cards**, timestamped seek, and an OCR/Transcript toggle.
10
48
  - CLI: robust URL + media extraction with transcript-first workflows and cache-aware streaming.
11
49
 
12
50
  ### Features
13
51
 
52
+ - Chrome Side Panel chat: stream agent replies over SSE and restore chat history from daemon cache (#33, thanks @dougvk).
53
+ - Media-aware summarization in the Side Panel: Page vs Video/Audio dropdown, automatic media preference on video sites, plus visible word count/duration.
54
+ - Transcripts: `--timestamps` adds segment-level timings (`transcriptSegments` + `transcriptTimedText`) for YouTube, podcasts, and embedded captions.
55
+ - Summaries: when transcript timestamps are available, prompts require timestamped bullet summaries; side panel auto-links `[mm:ss]` in summaries for media.
56
+ - Chrome Side Panel chat: timestamped transcript context plus clickable `[mm:ss]` links that seek the current media.
14
57
  - Slides: extract slide screenshots + OCR for YouTube/direct video URLs in the CLI + extension (#41, thanks @philippb).
15
58
  - Slides: top-of-summary slide strip with expand/collapse full-width cards, timestamps, and click-to-seek.
16
59
  - Slides: slide descriptions without model calls (transcript windowing, OCR fallback) + OCR/Transcript toggle.
17
60
  - Slides: stream slide extraction status/progress and show a single header progress bar (no duplicate spinners).
18
- - Chrome Side Panel chat: stream agent replies over SSE and restore chat history from daemon cache (#33, thanks @dougvk).
19
- - Chrome Side Panel chat: timestamped transcript context plus clickable `[mm:ss]` links that seek the current media.
20
- - Summaries: when transcript timestamps are available, prompts require timestamped bullet summaries; side panel auto-links `[mm:ss]` in summaries for media.
21
- - Transcripts: `--timestamps` adds segment-level timings (`transcriptSegments` + `transcriptTimedText`) for YouTube, podcasts, and embedded captions.
22
- - Media-aware summarization in the Side Panel: Page vs Video/Audio dropdown, automatic media preference on video sites, plus visible word count/duration.
23
61
  - CLI: transcribe local audio/video files with mtime-aware transcript cache invalidation (thanks @mvance!).
24
62
  - Browser extension: add Firefox sidebar build + multi-browser config (#31, thanks @vlnd0).
63
+ - CLI: add Cursor Agent CLI provider (`cli/agent`, `--cli agent`).
25
64
  - Chrome automation: add artifacts tool + REPL helpers for persistent session files (notes/JSON/CSV) and downloads.
26
65
  - Chrome automation: expand navigate tool with list/switch tab support and return matching skills after navigation.
27
66
 
28
67
  ### Fixes
29
68
 
69
+ - Extract-only: remove implicit 8k cap; new `--max-extract-characters`/daemon `maxExtractCharacters` allow opt-in limits; resolves transcript truncation.
70
+ - Media: route direct media URLs to the transcription pipeline and raise the local media limit to 2GB (#47, thanks @n0an).
71
+ - Daemon (macOS): `daemon install` now falls back from `launchctl bootstrap gui/<uid>` to `user/<uid>` and resolves sudo/root uid targeting to avoid bootstrap `Input/output error` / `Domain does not support specified action` failures (#75).
72
+ - Slides: allow yt-dlp cookies-from-browser via `SUMMARIZE_YT_DLP_COOKIES_FROM_BROWSER` to avoid YouTube 403s.
73
+ - Chrome Side Panel chat: support JSON agent replies with explicit SSE/JSON negotiation to avoid “stream ended” errors.
74
+ - Chrome Side Panel: scope streams/state per window so other windows don’t wipe active summaries.
75
+ - Chrome Side Panel chat: keep auto-scroll pinned while streaming when you’re already at the bottom.
76
+ - Chrome Side Panel chat: clear streaming placeholders on errors/aborts.
77
+ - Chrome Side Panel: add inline error toast above chat composer; errors stay visible when scrolled.
78
+ - Chrome Side Panel: clear/hide the inline error toast when no message is present to avoid empty red boxes.
79
+ - Cache: include transcript timestamp requests in extract cache keys so timed summaries don’t reuse plain transcript content.
80
+ - CLI: `--no-cache` now bypasses summary caching only; transcript/media caches still apply.
81
+ - Media: treat X broadcasts (`/i/broadcasts/...`) as transcript-first media and prefer URL mode.
82
+ - Daemon: avoid URL flow crashes when url-preference helpers are missing (ReferenceError guard).
83
+ - YouTube: prefer English caption variants (`en-*`) when selecting caption tracks.
30
84
  - Prompts: ignore sponsor/ads segments in video and podcast summaries.
31
85
  - Prompts: enforce no-ads/no-skipped language and italicized standout excerpts (no quotation marks).
32
- - Media: route direct media URLs to the transcription pipeline and raise the local media limit to 2GB (#47, thanks @n0an).
33
86
  - Slides: render Slide X/Y labels and parse slide markers more robustly in streaming output.
87
+ - Slides: parse `Slide N/Total` labels and stabilize title/body extraction.
34
88
  - Slides: ensure slide summary segments start with a title line when missing.
89
+ - Slides: detect headline-style first lines and render them as slide titles (no required `Title:` markers).
35
90
  - Slides: progress updates during yt-dlp downloads and OSC progress mirrors slide extraction.
36
91
  - Slides: reuse the media cache for downloaded videos (even with `--no-cache`).
37
92
  - Slides: clear slide progress line before the finish summary to avoid stray `Slides x/y` output.
38
- - Slides: parse `Slide N/Total` labels and stabilize title/body extraction.
39
- - CLI: `--no-cache` now bypasses summary caching only; transcript/media caches still apply.
40
- - Chrome Side Panel chat: keep auto-scroll pinned while streaming when you’re already at the bottom.
41
- - Chrome Side Panel: scope streams/state per window so other windows don’t wipe active summaries.
42
- - Chrome Side Panel chat: support JSON agent replies with explicit SSE/JSON negotiation to avoid “stream ended” errors.
43
- - Chrome Side Panel chat: clear streaming placeholders on errors/aborts.
44
- - Chrome Side Panel: add inline error toast above chat composer; errors stay visible when scrolled.
45
- - Chrome Side Panel: clear/hide the inline error toast when no message is present to avoid empty red boxes.
46
- - Cache: include transcript timestamp requests in extract cache keys so timed summaries don’t reuse plain transcript content.
47
- - Extract-only: remove implicit 8k cap; new `--max-extract-characters`/daemon `maxExtractCharacters` allow opt-in limits; resolves transcript truncation.
93
+ - CLI status line: ignore empty/ANSI-only spinner updates and duplicate texts to prevent flicker/blank status frames.
48
94
  - Automation: require userScripts (no isolated-world fallback), with improved guidance and in-panel permission notice.
49
- - Daemon: avoid URL flow crashes when url-preference helpers are missing (ReferenceError guard).
50
95
  - CLI: clear OSC progress on SIGINT/SIGTERM to avoid stuck indicators.
51
- - Slides: detect headline-style first lines and render them as slide titles (no required `Title:` markers).
52
- - YouTube: prefer English caption variants (`en-*`) when selecting caption tracks.
96
+ - CLI local files: avoid hangs when stream usage never resolves and preprocess PDFs automatically for custom OpenAI-compatible `OPENAI_BASE_URL` endpoints (e.g. non-`api.openai.com`).
53
97
 
54
98
  ### Improvements
55
99
 
56
- - Daemon: emit slides start/progress/done metadata in extended logging for easier debugging.
57
- - Media: refactor routing helpers and size policy (#48, thanks @steipete).
100
+ - Tooling: remove Biome and standardize on `oxfmt` + type-aware `oxlint`; `pnpm check` now enforces `format:check` before lint/tests.
101
+ - Transcription: add auto transcriber selection (default) with ONNX-first when configured + `summarize transcriber setup`.
102
+ - Cache: add media download caching with TTL/size caps + optional verification, plus `--no-media-cache`.
103
+ - CLI: add themed output (24-bit ANSI), `--theme`, and config/env defaults for a consistent color scheme.
58
104
  - CLI: show determinate transcription progress percent when duration is known.
59
- - CLI: theme transcription progress lines and mirror part-based progress to OSC when duration is unknown.
60
105
  - CLI: show determinate OSC progress for transcription/download when totals are known.
61
106
  - CLI: keep OSC progress determinate when recent percent updates are available.
107
+ - CLI: theme transcription progress lines and mirror part-based progress to OSC when duration is unknown.
62
108
  - CLI: theme tweet/extraction progress lines for consistent loading indicators.
63
109
  - CLI: theme file/slide spinner labels so all progress lines share the same styling.
64
110
  - CLI: simplify media download labels (avoid “media, video” duplication).
65
- - Transcription: add auto transcriber selection (default) with ONNX-first when configured + `summarize transcriber setup`.
66
111
  - Slides: cap auto slide targets at 6 by default for long videos.
67
- - CLI: add themed output (24-bit ANSI), `--theme`, and config/env defaults for a consistent color scheme.
68
- - Cache: add media download caching with TTL/size caps + optional verification, plus `--no-media-cache`.
69
112
  - Slides: render headline-style first lines as slide titles above the slide marker.
113
+ - Media: refactor routing helpers and size policy (#48, thanks @steipete).
114
+ - Daemon: emit slides start/progress/done metadata in extended logging for easier debugging.
70
115
  - Prompts: allow straight quotes and encourage 1-2 short exact quotes when relevant.
71
116
 
72
117
  ### Docs
73
118
 
74
119
  - README: 0.10.0 preview layout with clearer install flow, daemon rationale, and prominent Chrome Web Store link.
75
- - README: document ONNX transcriber setup + auto selection.
76
120
  - README/docs: add UI theme config + ONNX install hints.
121
+ - README: document ONNX transcriber setup + auto selection.
77
122
 
78
123
  ## 0.9.0 - 2025-12-31
79
124
 
@@ -315,6 +360,7 @@
315
360
  - Add `--preprocess off|auto|always` and a `uvx markitdown` fallback for Markdown extraction and unsupported file attachments (when `--format md` is used).
316
361
 
317
362
  ## 0.3.0 - 2025-12-20
363
+
318
364
  ### Changes
319
365
 
320
366
  - Add yt-dlp audio transcription fallback for YouTube; prefer OpenAI Whisper with FAL fallback. Thanks @dougvk.
package/README.md CHANGED
@@ -1,10 +1,14 @@
1
- # Summarize — Chrome Side Panel + CLI
1
+ # Summarize 📝 — Chrome Side Panel + CLI
2
+
3
+ ![GitHub Repo Banner](https://ghrb.waren.build/banner?header=Summarize%F0%9F%93%9D&subheader=Chrome+Side+Panel+%2B+CLI&bg=f3f4f6&color=1f2937&support=true)
4
+
5
+ <!-- Created with GitHub Repo Banner by Waren Gonzaga: https://ghrb.waren.build -->
2
6
 
3
7
  Fast summaries from URLs, files, and media. Works in the terminal, a Chrome Side Panel and Firefox Sidebar.
4
8
 
5
- **0.10.0 preview (unreleased):** this README reflects the upcoming release.
9
+ **0.11.0 preview (unreleased):** this README reflects the upcoming release.
6
10
 
7
- ## 0.10.0 preview highlights (most interesting first)
11
+ ## 0.11.0 preview highlights (most interesting first)
8
12
 
9
13
  - Chrome Side Panel **chat** (streaming agent + history) inside the sidebar.
10
14
  - **YouTube slides**: screenshots + OCR + transcript cards, timestamped seek, OCR/Transcript toggle.
@@ -36,14 +40,15 @@ YouTube slide screenshots (from the browser):
36
40
 
37
41
  ### Beginner quickstart (extension)
38
42
 
39
- 1) Install the CLI (choose one):
43
+ 1. Install the CLI (choose one):
40
44
  - **npm** (cross‑platform): `npm i -g @steipete/summarize`
41
45
  - **Homebrew** (macOS arm64): `brew install steipete/tap/summarize`
42
- 2) Install the extension (Chrome Web Store link above) and open the Side Panel.
43
- 3) The panel shows a token + install command. Run it in Terminal:
46
+ 2. Install the extension (Chrome Web Store link above) and open the Side Panel.
47
+ 3. The panel shows a token + install command. Run it in Terminal:
44
48
  - `summarize daemon install --token <TOKEN>`
45
49
 
46
50
  Why a daemon/service?
51
+
47
52
  - The extension can’t run heavy extraction inside the browser. It talks to a local background service on `127.0.0.1` for fast streaming and media tools (yt‑dlp, ffmpeg, OCR, transcription).
48
53
  - The service autostarts (launchd/systemd/Scheduled Task) so the Side Panel is always ready.
49
54
 
@@ -72,15 +77,15 @@ More:
72
77
 
73
78
  ### Advanced (unpacked / dev)
74
79
 
75
- 1) Build + load the extension (unpacked):
80
+ 1. Build + load the extension (unpacked):
76
81
  - Chrome: `pnpm -C apps/chrome-extension build`
77
82
  - `chrome://extensions` → Developer mode → Load unpacked
78
83
  - Pick: `apps/chrome-extension/.output/chrome-mv3`
79
84
  - Firefox: `pnpm -C apps/chrome-extension build:firefox`
80
85
  - `about:debugging#/runtime/this-firefox` → Load Temporary Add-on
81
86
  - Pick: `apps/chrome-extension/.output/firefox-mv3/manifest.json`
82
- 2) Open Side Panel/Sidebar → copy token.
83
- 3) Install daemon in dev mode:
87
+ 2. Open Side Panel/Sidebar → copy token.
88
+ 3. Install daemon in dev mode:
84
89
  - `pnpm summarize daemon install --token <TOKEN> --dev`
85
90
 
86
91
  ## CLI
@@ -110,7 +115,7 @@ npm i @steipete/summarize-core
110
115
  ```
111
116
 
112
117
  ```ts
113
- import { createLinkPreviewClient } from '@steipete/summarize-core/content'
118
+ import { createLinkPreviewClient } from "@steipete/summarize-core/content";
114
119
  ```
115
120
 
116
121
  - Homebrew (custom tap):
@@ -143,6 +148,23 @@ summarize "/path/to/audio.mp3"
143
148
  summarize "/path/to/video.mp4"
144
149
  ```
145
150
 
151
+ Stdin (pipe content using `-`):
152
+
153
+ ```bash
154
+ echo "content" | summarize -
155
+ pbpaste | summarize -
156
+ # binary stdin also works (PDF/image/audio/video bytes)
157
+ cat /path/to/file.pdf | summarize -
158
+ ```
159
+
160
+ **Notes:**
161
+
162
+ - Stdin has a 50MB size limit
163
+ - The `-` argument tells summarize to read from standard input
164
+ - Text stdin is treated as UTF-8 text (whitespace-only input is rejected as empty)
165
+ - Binary stdin is preserved as raw bytes and file type is auto-detected when possible
166
+ - Useful for piping clipboard content or command output
167
+
146
168
  YouTube (supports `youtube.com` and `youtu.be`):
147
169
 
148
170
  ```bash
@@ -243,7 +265,7 @@ Use `summarize --help` or `summarize help` for the full help text.
243
265
  - `--length short|medium|long|xl|xxl|s|m|l|<chars>`
244
266
  - `--language, --lang <language>`: output language (`auto` = match source)
245
267
  - `--max-output-tokens <count>`: hard cap for LLM output tokens
246
- - `--cli [provider]`: use a CLI provider (`--model cli/<provider>`). If omitted, uses auto selection with CLI enabled.
268
+ - `--cli [provider]`: use a CLI provider (`--model cli/<provider>`). Supports `claude`, `gemini`, `codex`, `agent`. If omitted, uses auto selection with CLI enabled.
247
269
  - `--stream auto|on|off`: stream LLM output (`auto` = TTY only; disabled in `--json` mode)
248
270
  - `--plain`: keep raw output (no ANSI/OSC Markdown rendering)
249
271
  - `--no-color`: disable ANSI colors
@@ -252,7 +274,7 @@ Use `summarize --help` or `summarize help` for the full help text.
252
274
  - `--markdown-mode off|auto|llm|readability`: HTML -> Markdown mode (default `readability`)
253
275
  - `--preprocess off|auto|always`: controls `uvx markitdown` usage (default `auto`)
254
276
  - Install `uvx`: `brew install uv` (or https://astral.sh/uv/)
255
- - `--extract`: print extracted content and exit (URLs only)
277
+ - `--extract`: print extracted content and exit (URLs only; stdin `-` is not supported)
256
278
  - Deprecated alias: `--extract-only`
257
279
  - `--slides`: extract slides for YouTube/direct video URLs and render them inline in the summary narrative (auto-renders inline in supported terminals)
258
280
  - `--slides-ocr`: run OCR on extracted slides (requires `tesseract`)
@@ -264,18 +286,66 @@ Use `summarize --help` or `summarize help` for the full help text.
264
286
  - `--verbose`: debug/diagnostics on stderr
265
287
  - `--metrics off|on|detailed`: metrics output (default `on`)
266
288
 
289
+ ### Coding CLIs (Codex, Claude, Gemini, Agent)
290
+
291
+ Summarize can use common coding CLIs as local model backends:
292
+
293
+ - `codex` -> `--cli codex` / `--model cli/codex/<model>`
294
+ - `claude` -> `--cli claude` / `--model cli/claude/<model>`
295
+ - `gemini` -> `--cli gemini` / `--model cli/gemini/<model>`
296
+ - `agent` (Cursor Agent CLI) -> `--cli agent` / `--model cli/agent/<model>`
297
+
298
+ Requirements:
299
+
300
+ - Binary installed and on `PATH` (or set `CODEX_PATH`, `CLAUDE_PATH`, `GEMINI_PATH`, `AGENT_PATH`)
301
+ - Provider authenticated (`codex login`, `claude auth`, `gemini` login flow, `agent login` or `CURSOR_API_KEY`)
302
+
303
+ Quick smoke test:
304
+
305
+ ```bash
306
+ printf "Summarize CLI smoke input.\nOne short paragraph. Reply can be brief.\n" >/tmp/summarize-cli-smoke.txt
307
+
308
+ summarize --cli codex --plain --timeout 2m /tmp/summarize-cli-smoke.txt
309
+ summarize --cli claude --plain --timeout 2m /tmp/summarize-cli-smoke.txt
310
+ summarize --cli gemini --plain --timeout 2m /tmp/summarize-cli-smoke.txt
311
+ summarize --cli agent --plain --timeout 2m /tmp/summarize-cli-smoke.txt
312
+ ```
313
+
314
+ Set explicit CLI allowlist/order:
315
+
316
+ ```json
317
+ {
318
+ "cli": { "enabled": ["codex", "claude", "gemini", "agent"] }
319
+ }
320
+ ```
321
+
322
+ Configure implicit auto CLI fallback:
323
+
324
+ ```json
325
+ {
326
+ "cli": {
327
+ "autoFallback": {
328
+ "enabled": true,
329
+ "onlyWhenNoApiKeys": true,
330
+ "order": ["claude", "gemini", "codex", "agent"]
331
+ }
332
+ }
333
+ }
334
+ ```
335
+
336
+ More details: [`docs/cli.md`](docs/cli.md)
337
+
267
338
  ### Auto model ordering
268
339
 
269
340
  `--model auto` builds candidate attempts from built-in rules (or your `model.rules` overrides).
270
- CLI tools are not used in auto mode unless you enable them via `cli.enabled` in config.
271
- Why: CLI adds ~4s latency per attempt and higher variance.
272
- Shortcut: `--cli` (with no provider) uses auto selection with CLI enabled.
341
+ CLI attempts are prepended when:
273
342
 
274
- When enabled, auto prepends CLI attempts in the order listed in `cli.enabled`
275
- (recommended: `["gemini"]`), then tries the native provider candidates
276
- (with OpenRouter fallbacks when configured).
343
+ - `cli.enabled` is set (explicit allowlist/order), or
344
+ - implicit auto selection is active and `cli.autoFallback` is enabled.
277
345
 
278
- Enable CLI attempts:
346
+ Default fallback behavior: only when no API keys are configured, order `claude, gemini, codex, agent`, and remember/prioritize last successful provider (`~/.summarize/cli-state.json`).
347
+
348
+ Set explicit CLI attempts:
279
349
 
280
350
  ```json
281
351
  {
@@ -283,15 +353,15 @@ Enable CLI attempts:
283
353
  }
284
354
  ```
285
355
 
286
- Disable CLI attempts:
356
+ Disable implicit auto CLI fallback:
287
357
 
288
358
  ```json
289
359
  {
290
- "cli": { "enabled": [] }
360
+ "cli": { "autoFallback": { "enabled": false } }
291
361
  }
292
362
  ```
293
363
 
294
- Note: when `cli.enabled` is set, it is also an allowlist for explicit `--cli` / `--model cli/...`.
364
+ Note: explicit `--model auto` does not trigger implicit auto CLI fallback unless `cli.enabled` is set.
295
365
 
296
366
  ### Website extraction (Firecrawl + Markdown)
297
367
 
@@ -321,6 +391,7 @@ Environment variables for yt-dlp mode:
321
391
  - `SUMMARIZE_WHISPER_CPP_BINARY` - optional override for the local binary (default: `whisper-cli`)
322
392
  - `SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP=1` - disable local whisper.cpp (force remote)
323
393
  - `OPENAI_API_KEY` - OpenAI Whisper transcription
394
+ - `OPENAI_WHISPER_BASE_URL` - optional OpenAI-compatible Whisper endpoint override
324
395
  - `FAL_KEY` - FAL AI Whisper fallback
325
396
 
326
397
  Apify costs money but tends to be more reliable when captions exist.
@@ -411,6 +482,7 @@ Supported keys today:
411
482
  ```json
412
483
  {
413
484
  "model": { "id": "openai/gpt-5-mini" },
485
+ "env": { "OPENAI_API_KEY": "sk-..." },
414
486
  "ui": { "theme": "ember" }
415
487
  }
416
488
  ```
@@ -428,6 +500,8 @@ Also supported:
428
500
  - `model: { "mode": "auto" }` (automatic model selection + fallback; see [docs/model-auto.md](docs/model-auto.md))
429
501
  - `model.rules` (customize candidates / ordering)
430
502
  - `models` (define presets selectable via `--model <preset>`)
503
+ - `env` (generic env var defaults; process env still wins)
504
+ - `apiKeys` (legacy shortcut, mapped to env names; prefer `env` for new configs)
431
505
  - `cache.media` (media download cache: TTL 7 days, 2048 MB cap by default; `--no-media-cache` disables)
432
506
  - `media.videoMode: "auto"|"transcript"|"understand"`
433
507
  - `slides.enabled` / `slides.max` / `slides.ocr` / `slides.dir` (defaults for `--slides`)
@@ -450,22 +524,33 @@ Note: `--no-cache` bypasses summary caching only (LLM output). Extract/transcrip
450
524
 
451
525
  Precedence:
452
526
 
453
- 1) `--model`
454
- 2) `SUMMARIZE_MODEL`
455
- 3) `~/.summarize/config.json`
456
- 4) default (`auto`)
527
+ 1. `--model`
528
+ 2. `SUMMARIZE_MODEL`
529
+ 3. `~/.summarize/config.json`
530
+ 4. default (`auto`)
457
531
 
458
532
  Theme precedence:
459
533
 
460
- 1) `--theme`
461
- 2) `SUMMARIZE_THEME`
462
- 3) `~/.summarize/config.json` (`ui.theme`)
463
- 4) default (`aurora`)
534
+ 1. `--theme`
535
+ 2. `SUMMARIZE_THEME`
536
+ 3. `~/.summarize/config.json` (`ui.theme`)
537
+ 4. default (`aurora`)
538
+
539
+ Environment variable precedence:
540
+
541
+ 1. process env
542
+ 2. `~/.summarize/config.json` (`env`)
543
+ 3. `~/.summarize/config.json` (`apiKeys`, legacy)
464
544
 
465
545
  ### Environment variables
466
546
 
467
547
  Set the key matching your chosen `--model`:
468
548
 
549
+ - Optional fallback defaults can be stored in config:
550
+ - `~/.summarize/config.json` -> `"env": { "OPENAI_API_KEY": "sk-..." }`
551
+ - process env always takes precedence
552
+ - legacy `"apiKeys"` still works (mapped to env names)
553
+
469
554
  - `OPENAI_API_KEY` (for `openai/...`)
470
555
  - `ANTHROPIC_API_KEY` (for `anthropic/...`)
471
556
  - `XAI_API_KEY` (for `xai/...`)
package/dist/cli.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- if (!process.env.SUMMARIZE_GIT_SHA) process.env.SUMMARIZE_GIT_SHA = "52c05231"
2
+ if (!process.env.SUMMARIZE_GIT_SHA) process.env.SUMMARIZE_GIT_SHA = "353e8ee6"
3
3
  await import('./esm/cli.js')