@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,30 @@
1
+ import type { SlideImage } from "../slides/types.js";
2
+ export type SlidesRenderMode = "none" | "auto" | "kitty" | "iterm";
3
+ export type InlineProtocol = "none" | "kitty" | "iterm";
4
+ type RenderSlide = Pick<SlideImage, "imagePath" | "index" | "timestamp">;
5
+ export declare function renderSlidesInline({ slides, mode, env, stdout, labelForSlide, }: {
6
+ slides: RenderSlide[];
7
+ mode: SlidesRenderMode;
8
+ env: Record<string, string | undefined>;
9
+ stdout: NodeJS.WritableStream;
10
+ labelForSlide?: ((slide: RenderSlide) => string) | null;
11
+ }): Promise<{
12
+ rendered: number;
13
+ protocol: InlineProtocol;
14
+ }>;
15
+ export declare function createSlidesInlineRenderer({ mode, env, stdout, }: {
16
+ mode: SlidesRenderMode;
17
+ env: Record<string, string | undefined>;
18
+ stdout: NodeJS.WritableStream;
19
+ }): {
20
+ protocol: InlineProtocol;
21
+ renderSlide: (slide: RenderSlide, label?: string | null) => Promise<boolean>;
22
+ renderSlides: (args: {
23
+ slides: RenderSlide[];
24
+ labelForSlide?: ((slide: RenderSlide) => string) | null;
25
+ }) => Promise<{
26
+ rendered: number;
27
+ protocol: InlineProtocol;
28
+ }>;
29
+ };
30
+ export {};
@@ -0,0 +1,9 @@
1
+ export type StdinTempFile = {
2
+ filePath: string;
3
+ kind: "text" | "binary";
4
+ cleanup: () => Promise<void>;
5
+ };
6
+ export declare function createTempFileFromStdin({ stream, maxBytes, }: {
7
+ stream: NodeJS.ReadableStream;
8
+ maxBytes?: number;
9
+ }): Promise<StdinTempFile>;
@@ -1,7 +1,8 @@
1
- export type StreamOutputMode = 'line' | 'delta';
2
- export declare function createStreamOutputGate({ stdout, clearProgressForStdout, outputMode, richTty, }: {
1
+ export type StreamOutputMode = "line" | "delta";
2
+ export declare function createStreamOutputGate({ stdout, clearProgressForStdout, restoreProgressAfterStdout, outputMode, richTty, }: {
3
3
  stdout: NodeJS.WritableStream;
4
4
  clearProgressForStdout: () => void;
5
+ restoreProgressAfterStdout?: (() => void) | null;
5
6
  outputMode: StreamOutputMode;
6
7
  richTty: boolean;
7
8
  }): {
@@ -1,12 +1,12 @@
1
- export { mergeStreamingChunk } from '../shared/streaming-merge.js';
1
+ export { mergeStreamingChunk } from "../shared/streaming-merge.js";
2
2
  export declare function isGoogleStreamingUnsupportedError(error: unknown): boolean;
3
3
  export declare function isStreamingTimeoutError(error: unknown): boolean;
4
4
  export declare function canStream({ provider, prompt, transport, }: {
5
- provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai';
5
+ provider: "xai" | "openai" | "google" | "anthropic" | "zai";
6
6
  prompt: {
7
7
  attachments?: Array<{
8
- kind: 'text' | 'image' | 'document';
8
+ kind: "text" | "image" | "document";
9
9
  }>;
10
10
  };
11
- transport: 'cli' | 'native' | 'openrouter';
11
+ transport: "cli" | "native" | "openrouter";
12
12
  }): boolean;
@@ -1,15 +1,15 @@
1
- import type { CliProvider } from '../config.js';
2
- import { runCliModel } from '../llm/cli.js';
3
- import type { Prompt } from '../llm/prompt.js';
4
- import { type StreamOutputMode } from './stream-output.js';
5
- import { summarizeWithModelId } from './summary-llm.js';
6
- import type { ModelAttempt, ModelMeta } from './types.js';
1
+ import type { CliProvider } from "../config.js";
2
+ import type { Prompt } from "../llm/prompt.js";
3
+ import type { ModelAttempt, ModelMeta } from "./types.js";
4
+ import { runCliModel } from "../llm/cli.js";
5
+ import { type StreamOutputMode } from "./stream-output.js";
6
+ import { summarizeWithModelId } from "./summary-llm.js";
7
7
  export type SummaryEngineDeps = {
8
8
  env: Record<string, string | undefined>;
9
9
  envForRun: Record<string, string | undefined>;
10
10
  stdout: NodeJS.WritableStream;
11
11
  stderr: NodeJS.WritableStream;
12
- execFileImpl: Parameters<typeof runCliModel>[0]['execFileImpl'];
12
+ execFileImpl: Parameters<typeof runCliModel>[0]["execFileImpl"];
13
13
  timeoutMs: number;
14
14
  retries: number;
15
15
  streamingEnabled: boolean;
@@ -18,19 +18,20 @@ export type SummaryEngineDeps = {
18
18
  verbose: boolean;
19
19
  verboseColor: boolean;
20
20
  openaiUseChatCompletions: boolean;
21
- cliConfigForRun: Parameters<typeof runCliModel>[0]['config'];
21
+ cliConfigForRun: Parameters<typeof runCliModel>[0]["config"];
22
22
  cliAvailability: Partial<Record<CliProvider, boolean>>;
23
23
  trackedFetch: typeof fetch;
24
24
  resolveMaxOutputTokensForCall: (modelId: string) => Promise<number | null>;
25
25
  resolveMaxInputTokensForCall: (modelId: string) => Promise<number | null>;
26
26
  llmCalls: Array<{
27
- provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai' | 'cli';
27
+ provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "cli";
28
28
  model: string;
29
- usage: Awaited<ReturnType<typeof summarizeWithModelId>>['usage'] | null;
29
+ usage: Awaited<ReturnType<typeof summarizeWithModelId>>["usage"] | null;
30
30
  costUsd?: number | null;
31
- purpose: 'summary' | 'markdown';
31
+ purpose: "summary" | "markdown";
32
32
  }>;
33
33
  clearProgressForStdout: () => void;
34
+ restoreProgressAfterStdout?: (() => void) | null;
34
35
  apiKeys: {
35
36
  xaiApiKey: string | null;
36
37
  openaiApiKey: string | null;
@@ -54,11 +55,19 @@ export type SummaryEngineDeps = {
54
55
  xai: string | null;
55
56
  };
56
57
  };
58
+ export type SummaryStreamHandler = {
59
+ onChunk: (args: {
60
+ streamed: string;
61
+ prevStreamed: string;
62
+ appended: string;
63
+ }) => void | Promise<void>;
64
+ onDone?: ((finalText: string) => void | Promise<void>) | null;
65
+ };
57
66
  export declare function createSummaryEngine(deps: SummaryEngineDeps): {
58
67
  applyZaiOverrides: (attempt: ModelAttempt) => ModelAttempt;
59
68
  envHasKeyFor: (requiredEnv: ModelAttempt["requiredEnv"]) => boolean;
60
69
  formatMissingModelError: (attempt: ModelAttempt) => string;
61
- runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, }: {
70
+ runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, streamHandler, }: {
62
71
  attempt: ModelAttempt;
63
72
  prompt: Prompt;
64
73
  allowStreaming: boolean;
@@ -69,6 +78,7 @@ export declare function createSummaryEngine(deps: SummaryEngineDeps): {
69
78
  cwd?: string;
70
79
  extraArgsByProvider?: Partial<Record<CliProvider, string[]>>;
71
80
  } | null;
81
+ streamHandler?: SummaryStreamHandler | null;
72
82
  }) => Promise<{
73
83
  summary: string;
74
84
  summaryAlreadyPrinted: boolean;
@@ -1,6 +1,6 @@
1
- import { generateTextWithModelId } from '../llm/generate-text.js';
2
- import type { parseGatewayStyleModelId } from '../llm/model-id.js';
3
- import type { Prompt } from '../llm/prompt.js';
1
+ import type { parseGatewayStyleModelId } from "../llm/model-id.js";
2
+ import type { Prompt } from "../llm/prompt.js";
3
+ import { generateTextWithModelId } from "../llm/generate-text.js";
4
4
  export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchImpl, timeoutMs, }: {
5
5
  parsedModel: ReturnType<typeof parseGatewayStyleModelId>;
6
6
  apiKeys: {
@@ -41,7 +41,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
41
41
  }) => void;
42
42
  }): Promise<{
43
43
  text: string;
44
- provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai';
44
+ provider: "xai" | "openai" | "google" | "anthropic" | "zai";
45
45
  canonicalModelId: string;
46
- usage: Awaited<ReturnType<typeof generateTextWithModelId>>['usage'];
46
+ usage: Awaited<ReturnType<typeof generateTextWithModelId>>["usage"];
47
47
  }>;
@@ -0,0 +1,8 @@
1
+ type TranscriberCliContext = {
2
+ normalizedArgv: string[];
3
+ envForRun: Record<string, string | undefined>;
4
+ stdout: NodeJS.WritableStream;
5
+ stderr: NodeJS.WritableStream;
6
+ };
7
+ export declare function handleTranscriberCliRequest({ normalizedArgv, envForRun, stdout, }: TranscriberCliContext): Promise<boolean>;
8
+ export {};
@@ -1,7 +1,7 @@
1
- import type { CliProvider } from '../config.js';
2
- export type ModelAttemptRequiredEnv = 'XAI_API_KEY' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY' | 'ANTHROPIC_API_KEY' | 'OPENROUTER_API_KEY' | 'Z_AI_API_KEY' | 'CLI_CLAUDE' | 'CLI_CODEX' | 'CLI_GEMINI';
1
+ import type { CliProvider } from "../config.js";
2
+ export type ModelAttemptRequiredEnv = "XAI_API_KEY" | "OPENAI_API_KEY" | "GEMINI_API_KEY" | "ANTHROPIC_API_KEY" | "OPENROUTER_API_KEY" | "Z_AI_API_KEY" | "CLI_CLAUDE" | "CLI_CODEX" | "CLI_GEMINI" | "CLI_AGENT";
3
3
  export type ModelAttempt = {
4
- transport: 'native' | 'openrouter' | 'cli';
4
+ transport: "native" | "openrouter" | "cli";
5
5
  userModelId: string;
6
6
  llmModelId: string | null;
7
7
  openrouterProviders: string[] | null;
@@ -14,7 +14,7 @@ export type ModelAttempt = {
14
14
  cliModel?: string | null;
15
15
  };
16
16
  export type ModelMeta = {
17
- provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai' | 'cli';
17
+ provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "cli";
18
18
  canonical: string;
19
19
  };
20
20
  export type MarkdownModel = {
@@ -1 +1 @@
1
- export { runCli } from './run/runner.js';
1
+ export { runCli } from "./run/runner.js";
@@ -1,2 +1,2 @@
1
- export type { SummaryLength } from '@steipete/summarize-core';
2
- export { SUMMARY_LENGTHS } from '@steipete/summarize-core';
1
+ export type { SummaryLength } from "@steipete/summarize-core";
2
+ export { SUMMARY_LENGTHS } from "@steipete/summarize-core";
@@ -1,9 +1,23 @@
1
+ import type { AssistantMessage } from "@mariozechner/pi-ai";
1
2
  export type SseMetaData = {
2
3
  model: string | null;
3
4
  modelLabel: string | null;
4
5
  inputSummary: string | null;
5
6
  summaryFromCache?: boolean | null;
6
7
  };
8
+ export type SseSlidesData = {
9
+ sourceUrl: string;
10
+ sourceId: string;
11
+ sourceKind: string;
12
+ ocrAvailable: boolean;
13
+ slides: Array<{
14
+ index: number;
15
+ timestamp: number;
16
+ imageUrl: string;
17
+ ocrText?: string | null;
18
+ ocrConfidence?: number | null;
19
+ }>;
20
+ };
7
21
  export type SseMetricsData = {
8
22
  elapsedMs: number;
9
23
  summary: string;
@@ -12,26 +26,32 @@ export type SseMetricsData = {
12
26
  detailsDetailed: string | null;
13
27
  };
14
28
  export type SseEvent = {
15
- event: 'meta';
29
+ event: "meta";
16
30
  data: SseMetaData;
17
31
  } | {
18
- event: 'status';
32
+ event: "slides";
33
+ data: SseSlidesData;
34
+ } | {
35
+ event: "status";
19
36
  data: {
20
37
  text: string;
21
38
  };
22
39
  } | {
23
- event: 'chunk';
40
+ event: "chunk";
24
41
  data: {
25
42
  text: string;
26
43
  };
27
44
  } | {
28
- event: 'metrics';
45
+ event: "assistant";
46
+ data: AssistantMessage;
47
+ } | {
48
+ event: "metrics";
29
49
  data: SseMetricsData;
30
50
  } | {
31
- event: 'done';
51
+ event: "done";
32
52
  data: Record<string, never>;
33
53
  } | {
34
- event: 'error';
54
+ event: "error";
35
55
  data: {
36
56
  message: string;
37
57
  };
@@ -0,0 +1,43 @@
1
+ import type { ExtractedLinkContent, MediaCache } from "../content/index.js";
2
+ import type { SlideSettings } from "./settings.js";
3
+ import type { SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from "./types.js";
4
+ type ExtractSlidesArgs = {
5
+ source: SlideSource;
6
+ settings: SlideSettings;
7
+ noCache?: boolean;
8
+ mediaCache?: MediaCache | null;
9
+ env: Record<string, string | undefined>;
10
+ timeoutMs: number;
11
+ ytDlpPath: string | null;
12
+ ytDlpCookiesFromBrowser?: string | null;
13
+ ffmpegPath: string | null;
14
+ tesseractPath: string | null;
15
+ hooks?: {
16
+ onSlideChunk?: (chunk: {
17
+ slide: SlideImage;
18
+ meta: {
19
+ slidesDir: string;
20
+ sourceUrl: string;
21
+ sourceId: string;
22
+ sourceKind: SlideSourceKind;
23
+ ocrAvailable: boolean;
24
+ };
25
+ }) => void;
26
+ onSlidesTimeline?: ((slides: SlideExtractionResult) => void) | null;
27
+ onSlidesProgress?: ((text: string) => void) | null;
28
+ onSlidesLog?: ((message: string) => void) | null;
29
+ } | null;
30
+ };
31
+ export declare function resolveSlideSource({ url, extracted, }: {
32
+ url: string;
33
+ extracted: ExtractedLinkContent;
34
+ }): SlideSource | null;
35
+ export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
36
+ export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
37
+ export declare function parseShowinfoTimestamp(line: string): number | null;
38
+ export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
39
+ requested: number;
40
+ actual: number | null;
41
+ seekBase?: number | null;
42
+ }): number;
43
+ export {};
@@ -0,0 +1,5 @@
1
+ export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp, resolveSlideSource, resolveSlideSourceFromUrl, } from "./extract.js";
2
+ export type { SlideSettings, SlideSettingsInput } from "./settings.js";
3
+ export { resolveSlideSettings } from "./settings.js";
4
+ export { buildSlidesDirId, readSlidesCacheIfValid, resolveSlideImagePath, resolveSlidesDir, serializeSlideImagePath, validateSlidesCache, } from "./store.js";
5
+ export type { SlideAutoTune, SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind, } from "./types.js";
@@ -0,0 +1,20 @@
1
+ export type SlideSettings = {
2
+ enabled: boolean;
3
+ ocr: boolean;
4
+ outputDir: string;
5
+ sceneThreshold: number;
6
+ autoTuneThreshold: boolean;
7
+ maxSlides: number;
8
+ minDurationSeconds: number;
9
+ };
10
+ export type SlideSettingsInput = {
11
+ slides?: unknown;
12
+ slidesOcr?: unknown;
13
+ slidesDir?: unknown;
14
+ slidesSceneThreshold?: unknown;
15
+ slidesSceneThresholdExplicit?: boolean;
16
+ slidesMax?: unknown;
17
+ slidesMinDuration?: unknown;
18
+ cwd: string;
19
+ };
20
+ export declare function resolveSlideSettings(input: SlideSettingsInput): SlideSettings | null;
@@ -0,0 +1,15 @@
1
+ import type { SlideSettings } from "./settings.js";
2
+ import type { SlideExtractionResult, SlideSource } from "./types.js";
3
+ export declare function resolveSlidesDir(outputDir: string, sourceId: string): string;
4
+ export declare function buildSlidesDirId(slidesDir: string): string;
5
+ export declare function resolveSlideImagePath(slidesDir: string, imagePath: string): string | null;
6
+ export declare function serializeSlideImagePath(slidesDir: string, imagePath: string): string;
7
+ export declare function validateSlidesCache({ cached, source, settings, }: {
8
+ cached: SlideExtractionResult;
9
+ source: SlideSource;
10
+ settings: SlideSettings;
11
+ }): Promise<SlideExtractionResult | null>;
12
+ export declare function readSlidesCacheIfValid({ source, settings, }: {
13
+ source: SlideSource;
14
+ settings: SlideSettings;
15
+ }): Promise<SlideExtractionResult | null>;
@@ -0,0 +1,40 @@
1
+ export type SlideSourceKind = "youtube" | "direct";
2
+ export type SlideSource = {
3
+ url: string;
4
+ kind: SlideSourceKind;
5
+ sourceId: string;
6
+ };
7
+ export type SlideImage = {
8
+ index: number;
9
+ timestamp: number;
10
+ imagePath: string;
11
+ /**
12
+ * Bump when the underlying image file changes (e.g. thumbnail improvement),
13
+ * so clients can cache-bust URLs.
14
+ */
15
+ imageVersion?: number;
16
+ ocrText?: string | null;
17
+ ocrConfidence?: number | null;
18
+ };
19
+ export type SlideAutoTune = {
20
+ enabled: boolean;
21
+ chosenThreshold: number;
22
+ confidence: number;
23
+ strategy: "hash" | "none";
24
+ };
25
+ export type SlideExtractionResult = {
26
+ sourceUrl: string;
27
+ sourceKind: SlideSourceKind;
28
+ sourceId: string;
29
+ slidesDir: string;
30
+ slidesDirId?: string | null;
31
+ sceneThreshold: number;
32
+ autoTuneThreshold: boolean;
33
+ autoTune: SlideAutoTune;
34
+ maxSlides: number;
35
+ minSlideDuration: number;
36
+ ocrRequested: boolean;
37
+ ocrAvailable: boolean;
38
+ slides: SlideImage[];
39
+ warnings: string[];
40
+ };
@@ -1,5 +1,5 @@
1
- import { createOscProgressController as createOscProgressControllerImpl } from 'osc-progress';
2
- export type { OscProgressController, OscProgressOptions, OscProgressSupportOptions, OscProgressTerminator, } from 'osc-progress';
3
- export declare const createOscProgressController: typeof createOscProgressControllerImpl;
4
- export declare function startOscProgress(options: import('osc-progress').OscProgressOptions): () => void;
5
- export declare function supportsOscProgress(env: Record<string, string | undefined>, isTty: boolean, options?: import('osc-progress').OscProgressSupportOptions): boolean;
1
+ import type { OscProgressController } from "osc-progress";
2
+ export type { OscProgressController, OscProgressOptions, OscProgressSupportOptions, OscProgressTerminator, } from "osc-progress";
3
+ export declare function createOscProgressController(options: import("osc-progress").OscProgressOptions): OscProgressController;
4
+ export declare function startOscProgress(options: import("osc-progress").OscProgressOptions): () => void;
5
+ export declare function supportsOscProgress(env: Record<string, string | undefined>, isTty: boolean, options?: import("osc-progress").OscProgressSupportOptions): boolean;
@@ -1,10 +1,12 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from '../osc-progress.js';
3
- export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, }: {
1
+ import type { LinkPreviewProgressEvent } from "@steipete/summarize-core/content";
2
+ import type { OscProgressController } from "../osc-progress.js";
3
+ import type { ThemeRenderer } from "../theme.js";
4
+ export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, theme, }: {
4
5
  spinner: {
5
6
  setText: (text: string) => void;
6
7
  };
7
8
  oscProgress?: OscProgressController | null;
9
+ theme?: ThemeRenderer | null;
8
10
  }): {
9
11
  stop: () => void;
10
12
  onProgress: (event: LinkPreviewProgressEvent) => void;
@@ -1,10 +1,12 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from '../osc-progress.js';
3
- export declare function createTranscriptProgressRenderer({ spinner, oscProgress, }: {
1
+ import type { LinkPreviewProgressEvent } from "@steipete/summarize-core/content";
2
+ import type { OscProgressController } from "../osc-progress.js";
3
+ import type { ThemeRenderer } from "../theme.js";
4
+ export declare function createTranscriptProgressRenderer({ spinner, oscProgress, theme, }: {
4
5
  spinner: {
5
6
  setText: (text: string) => void;
6
7
  };
7
8
  oscProgress?: OscProgressController | null;
9
+ theme?: ThemeRenderer | null;
8
10
  }): {
9
11
  stop: () => void;
10
12
  onProgress: (event: LinkPreviewProgressEvent) => void;
@@ -1,7 +1,9 @@
1
- export declare function startSpinner({ text, enabled, stream, }: {
1
+ import { type Options as OraOptions } from "ora";
2
+ export declare function startSpinner({ text, enabled, stream, color, }: {
2
3
  text: string;
3
4
  enabled: boolean;
4
5
  stream: NodeJS.WritableStream;
6
+ color?: OraOptions["color"];
5
7
  }): {
6
8
  stop: () => void;
7
9
  clear: () => void;
@@ -0,0 +1,44 @@
1
+ export declare const CLI_THEME_NAMES: readonly ["aurora", "ember", "moss", "mono"];
2
+ export type CliThemeName = (typeof CLI_THEME_NAMES)[number];
3
+ export type ThemeRole = "heading" | "accent" | "accentStrong" | "muted" | "dim" | "success" | "warning" | "error" | "label" | "value" | "code";
4
+ type ThemePalette = {
5
+ name: CliThemeName;
6
+ roles: Record<ThemeRole, string>;
7
+ spinner: "cyan" | "magenta" | "yellow" | "green" | "gray" | "blue";
8
+ };
9
+ export declare const DEFAULT_CLI_THEME: CliThemeName;
10
+ export declare function listCliThemes(): CliThemeName[];
11
+ export declare function isCliThemeName(value: string): value is CliThemeName;
12
+ export declare function parseCliThemeName(raw: unknown, label: string): CliThemeName | null;
13
+ export declare function resolveThemeNameFromSources({ cli, env, config, fallback, }: {
14
+ cli?: unknown;
15
+ env?: unknown;
16
+ config?: unknown;
17
+ fallback?: CliThemeName;
18
+ }): CliThemeName;
19
+ export declare function resolveTrueColor(env: Record<string, string | undefined>): boolean;
20
+ type ThemeRendererOptions = {
21
+ themeName: CliThemeName;
22
+ enabled: boolean;
23
+ trueColor: boolean;
24
+ };
25
+ export type ThemeRenderer = {
26
+ name: CliThemeName;
27
+ enabled: boolean;
28
+ trueColor: boolean;
29
+ palette: ThemePalette;
30
+ heading: (text: string) => string;
31
+ accent: (text: string) => string;
32
+ accentStrong: (text: string) => string;
33
+ label: (text: string) => string;
34
+ value: (text: string) => string;
35
+ muted: (text: string) => string;
36
+ dim: (text: string) => string;
37
+ success: (text: string) => string;
38
+ warning: (text: string) => string;
39
+ error: (text: string) => string;
40
+ code: (text: string) => string;
41
+ };
42
+ export declare function createThemeRenderer({ themeName, enabled, trueColor, }: ThemeRendererOptions): ThemeRenderer;
43
+ export declare function resolveThemePalette(themeName: CliThemeName): ThemePalette;
44
+ export {};
@@ -1,11 +1,13 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from './osc-progress.js';
3
- export declare function createWebsiteProgress({ enabled, spinner, oscProgress, }: {
1
+ import type { LinkPreviewProgressEvent } from "@steipete/summarize-core/content";
2
+ import type { OscProgressController } from "./osc-progress.js";
3
+ import type { ThemeRenderer } from "./theme.js";
4
+ export declare function createWebsiteProgress({ enabled, spinner, oscProgress, theme, }: {
4
5
  enabled: boolean;
5
6
  spinner: {
6
7
  setText: (text: string) => void;
7
8
  };
8
9
  oscProgress?: OscProgressController | null;
10
+ theme?: ThemeRenderer | null;
9
11
  }): {
10
12
  stop: () => void;
11
13
  onProgress: (event: LinkPreviewProgressEvent) => void;
@@ -1,4 +1,4 @@
1
- export declare const FALLBACK_VERSION = "0.9.0";
1
+ export declare const FALLBACK_VERSION = "0.11.0";
2
2
  export declare function resolvePackageVersion(importMetaUrl?: string): string;
3
3
  export declare function resolveGitSha(importMetaUrl?: string): string | null;
4
4
  export declare function formatVersionLine(importMetaUrl?: string): string;
package/docs/README.md CHANGED
@@ -22,4 +22,4 @@ summary: "Docs index for summarize behaviors and modes."
22
22
 
23
23
  ## Website
24
24
 
25
- - Static site source: `docs/site/` (GitHub Pages via Actions)
25
+ - Jekyll site source: `docs/` (Markdown → HTML via GitHub Pages Actions)
@@ -0,0 +1,26 @@
1
+ title: "summarize"
2
+ description: "Summarize docs"
3
+ markdown: kramdown
4
+ highlighter: rouge
5
+
6
+ plugins:
7
+ - jekyll-relative-links
8
+
9
+ relative_links:
10
+ enabled: true
11
+ collections: true
12
+
13
+ exclude:
14
+ - site
15
+
16
+ defaults:
17
+ - scope:
18
+ path: ""
19
+ values:
20
+ layout: default
21
+ permalink: /docs/:basename:output_ext
22
+
23
+ kramdown:
24
+ input: GFM
25
+ hard_wrap: false
26
+ syntax_highlighter: rouge
@@ -0,0 +1,60 @@
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
+ {% assign page_title = page.title | default: page.name | default: "Docs" | replace: ".md", "" | replace: "-", " " %}
8
+ <title>{{ page_title }} — summarize</title>
9
+ <meta name="description" content="{{ page.summary | default: site.description | escape }}" />
10
+ <link rel="canonical" href="https://summarize.sh{{ page.url | replace: 'index.html', '' }}" />
11
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
12
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
13
+ <link
14
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
15
+ rel="stylesheet"
16
+ />
17
+ <link rel="stylesheet" href="/assets/site.css" />
18
+ </head>
19
+ <body>
20
+ <main class="shell">
21
+ <header class="top">
22
+ <a class="brand" href="/" aria-label="summarize home">
23
+ <span class="brand__mark" aria-hidden="true">s</span>
24
+ <span class="brand__word">summarize</span>
25
+ </a>
26
+ <nav class="nav" aria-label="Primary">
27
+ <a data-nav="home" href="/">Home</a>
28
+ <a data-nav="docs" href="/docs/index.html">Docs</a>
29
+ <a href="https://github.com/steipete/summarize">GitHub</a>
30
+ </nav>
31
+ </header>
32
+
33
+ <section class="docShell">
34
+ <aside class="side" aria-label="Docs navigation">
35
+ <h2>Docs</h2>
36
+ <a href="/docs/index.html">Overview</a>
37
+ <a href="/docs/chrome-extension.html">Chrome extension</a>
38
+ <a href="/docs/website.html">Website mode</a>
39
+ <a href="/docs/youtube.html">YouTube mode</a>
40
+ <a href="/docs/extract-only.html">Extract</a>
41
+ <a href="/docs/llm.html">LLM</a>
42
+ <a href="/docs/openai.html">OpenAI</a>
43
+ <a href="/docs/firecrawl.html">Firecrawl</a>
44
+ <a href="/docs/config.html">Config</a>
45
+ </aside>
46
+
47
+ <article class="doc reveal">
48
+ {{ content }}
49
+ </article>
50
+ </section>
51
+
52
+ <footer class="footer">
53
+ <span>summarize — Link → clean text → summary.</span>
54
+ <span><a href="/docs/index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
55
+ </footer>
56
+ </main>
57
+
58
+ <script type="module" src="/assets/site.js"></script>
59
+ </body>
60
+ </html>