@steipete/summarize 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/CHANGELOG.md +80 -28
  2. package/README.md +115 -30
  3. package/dist/cli.js +1 -1
  4. package/dist/esm/cache.js +67 -65
  5. package/dist/esm/cache.js.map +1 -1
  6. package/dist/esm/cli-main.js +27 -27
  7. package/dist/esm/cli-main.js.map +1 -1
  8. package/dist/esm/cli.js +2 -2
  9. package/dist/esm/cli.js.map +1 -1
  10. package/dist/esm/config.js +310 -166
  11. package/dist/esm/config.js.map +1 -1
  12. package/dist/esm/content/asset.js +53 -50
  13. package/dist/esm/content/asset.js.map +1 -1
  14. package/dist/esm/content/index.js +1 -1
  15. package/dist/esm/content/index.js.map +1 -1
  16. package/dist/esm/costs.js +1 -1
  17. package/dist/esm/costs.js.map +1 -1
  18. package/dist/esm/daemon/agent.js +165 -164
  19. package/dist/esm/daemon/agent.js.map +1 -1
  20. package/dist/esm/daemon/auto-mode.js +3 -3
  21. package/dist/esm/daemon/auto-mode.js.map +1 -1
  22. package/dist/esm/daemon/chat.js +16 -14
  23. package/dist/esm/daemon/chat.js.map +1 -1
  24. package/dist/esm/daemon/cli-entrypoint.js +72 -0
  25. package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
  26. package/dist/esm/daemon/cli.js +63 -87
  27. package/dist/esm/daemon/cli.js.map +1 -1
  28. package/dist/esm/daemon/config.js +15 -15
  29. package/dist/esm/daemon/config.js.map +1 -1
  30. package/dist/esm/daemon/constants.js +6 -6
  31. package/dist/esm/daemon/constants.js.map +1 -1
  32. package/dist/esm/daemon/env-merge.js.map +1 -1
  33. package/dist/esm/daemon/env-snapshot.js +36 -31
  34. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  35. package/dist/esm/daemon/flow-context.js +59 -28
  36. package/dist/esm/daemon/flow-context.js.map +1 -1
  37. package/dist/esm/daemon/launchd.js +100 -55
  38. package/dist/esm/daemon/launchd.js.map +1 -1
  39. package/dist/esm/daemon/meta.js +5 -5
  40. package/dist/esm/daemon/meta.js.map +1 -1
  41. package/dist/esm/daemon/models.js +54 -31
  42. package/dist/esm/daemon/models.js.map +1 -1
  43. package/dist/esm/daemon/process-registry.js +15 -15
  44. package/dist/esm/daemon/process-registry.js.map +1 -1
  45. package/dist/esm/daemon/schtasks.js +42 -42
  46. package/dist/esm/daemon/schtasks.js.map +1 -1
  47. package/dist/esm/daemon/server.js +248 -244
  48. package/dist/esm/daemon/server.js.map +1 -1
  49. package/dist/esm/daemon/summarize-progress.js +11 -11
  50. package/dist/esm/daemon/summarize-progress.js.map +1 -1
  51. package/dist/esm/daemon/summarize.js +29 -29
  52. package/dist/esm/daemon/summarize.js.map +1 -1
  53. package/dist/esm/daemon/systemd.js +47 -47
  54. package/dist/esm/daemon/systemd.js.map +1 -1
  55. package/dist/esm/firecrawl.js +12 -12
  56. package/dist/esm/firecrawl.js.map +1 -1
  57. package/dist/esm/flags.js +32 -32
  58. package/dist/esm/flags.js.map +1 -1
  59. package/dist/esm/index.js +3 -3
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/language.js +1 -1
  62. package/dist/esm/language.js.map +1 -1
  63. package/dist/esm/llm/cli.js +128 -64
  64. package/dist/esm/llm/cli.js.map +1 -1
  65. package/dist/esm/llm/errors.js +1 -1
  66. package/dist/esm/llm/errors.js.map +1 -1
  67. package/dist/esm/llm/generate-text.js +107 -98
  68. package/dist/esm/llm/generate-text.js.map +1 -1
  69. package/dist/esm/llm/google-models.js +17 -17
  70. package/dist/esm/llm/google-models.js.map +1 -1
  71. package/dist/esm/llm/html-to-markdown.js +3 -3
  72. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  73. package/dist/esm/llm/model-id.js +38 -16
  74. package/dist/esm/llm/model-id.js.map +1 -1
  75. package/dist/esm/llm/prompt.js +5 -5
  76. package/dist/esm/llm/prompt.js.map +1 -1
  77. package/dist/esm/llm/providers/anthropic.js +33 -33
  78. package/dist/esm/llm/providers/anthropic.js.map +1 -1
  79. package/dist/esm/llm/providers/google.js +19 -19
  80. package/dist/esm/llm/providers/google.js.map +1 -1
  81. package/dist/esm/llm/providers/models.js +30 -30
  82. package/dist/esm/llm/providers/models.js.map +1 -1
  83. package/dist/esm/llm/providers/openai.js +35 -34
  84. package/dist/esm/llm/providers/openai.js.map +1 -1
  85. package/dist/esm/llm/providers/shared.js +8 -8
  86. package/dist/esm/llm/providers/shared.js.map +1 -1
  87. package/dist/esm/llm/transcript-to-markdown.js +9 -5
  88. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  89. package/dist/esm/llm/usage.js +18 -18
  90. package/dist/esm/llm/usage.js.map +1 -1
  91. package/dist/esm/logging/daemon.js +21 -21
  92. package/dist/esm/logging/daemon.js.map +1 -1
  93. package/dist/esm/logging/ring-file.js +5 -5
  94. package/dist/esm/logging/ring-file.js.map +1 -1
  95. package/dist/esm/markitdown.js +21 -19
  96. package/dist/esm/markitdown.js.map +1 -1
  97. package/dist/esm/media-cache.js +39 -39
  98. package/dist/esm/media-cache.js.map +1 -1
  99. package/dist/esm/model-auto.js +175 -106
  100. package/dist/esm/model-auto.js.map +1 -1
  101. package/dist/esm/model-spec.js +52 -42
  102. package/dist/esm/model-spec.js.map +1 -1
  103. package/dist/esm/pricing/litellm.js +4 -4
  104. package/dist/esm/pricing/litellm.js.map +1 -1
  105. package/dist/esm/processes.js +1 -1
  106. package/dist/esm/processes.js.map +1 -1
  107. package/dist/esm/prompts/index.js +1 -1
  108. package/dist/esm/prompts/index.js.map +1 -1
  109. package/dist/esm/refresh-free.js +81 -81
  110. package/dist/esm/refresh-free.js.map +1 -1
  111. package/dist/esm/run/attachments.js +47 -44
  112. package/dist/esm/run/attachments.js.map +1 -1
  113. package/dist/esm/run/bird.js +26 -26
  114. package/dist/esm/run/bird.js.map +1 -1
  115. package/dist/esm/run/cache-state.js +7 -7
  116. package/dist/esm/run/cache-state.js.map +1 -1
  117. package/dist/esm/run/cli-fallback-state.js +45 -0
  118. package/dist/esm/run/cli-fallback-state.js.map +1 -0
  119. package/dist/esm/run/cli-preflight.js +24 -24
  120. package/dist/esm/run/cli-preflight.js.map +1 -1
  121. package/dist/esm/run/constants.js +12 -12
  122. package/dist/esm/run/constants.js.map +1 -1
  123. package/dist/esm/run/cookies/twitter.js +47 -47
  124. package/dist/esm/run/cookies/twitter.js.map +1 -1
  125. package/dist/esm/run/env.js +21 -15
  126. package/dist/esm/run/env.js.map +1 -1
  127. package/dist/esm/run/fetch-with-timeout.js +4 -4
  128. package/dist/esm/run/fetch-with-timeout.js.map +1 -1
  129. package/dist/esm/run/finish-line.js +68 -68
  130. package/dist/esm/run/finish-line.js.map +1 -1
  131. package/dist/esm/run/flows/asset/extract.js +15 -15
  132. package/dist/esm/run/flows/asset/extract.js.map +1 -1
  133. package/dist/esm/run/flows/asset/input.js +47 -66
  134. package/dist/esm/run/flows/asset/input.js.map +1 -1
  135. package/dist/esm/run/flows/asset/media-policy.js +1 -1
  136. package/dist/esm/run/flows/asset/media-policy.js.map +1 -1
  137. package/dist/esm/run/flows/asset/media.js +49 -40
  138. package/dist/esm/run/flows/asset/media.js.map +1 -1
  139. package/dist/esm/run/flows/asset/output.js +12 -12
  140. package/dist/esm/run/flows/asset/output.js.map +1 -1
  141. package/dist/esm/run/flows/asset/preprocess.js +79 -44
  142. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  143. package/dist/esm/run/flows/asset/summary.js +173 -106
  144. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  145. package/dist/esm/run/flows/url/extract.js +26 -26
  146. package/dist/esm/run/flows/url/extract.js.map +1 -1
  147. package/dist/esm/run/flows/url/flow.js +104 -98
  148. package/dist/esm/run/flows/url/flow.js.map +1 -1
  149. package/dist/esm/run/flows/url/markdown.js +57 -57
  150. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  151. package/dist/esm/run/flows/url/slides-output.js +61 -59
  152. package/dist/esm/run/flows/url/slides-output.js.map +1 -1
  153. package/dist/esm/run/flows/url/slides-text.js +85 -85
  154. package/dist/esm/run/flows/url/slides-text.js.map +1 -1
  155. package/dist/esm/run/flows/url/summary.js +174 -107
  156. package/dist/esm/run/flows/url/summary.js.map +1 -1
  157. package/dist/esm/run/format.js +10 -10
  158. package/dist/esm/run/format.js.map +1 -1
  159. package/dist/esm/run/help.js +141 -135
  160. package/dist/esm/run/help.js.map +1 -1
  161. package/dist/esm/run/logging.js +10 -10
  162. package/dist/esm/run/logging.js.map +1 -1
  163. package/dist/esm/run/markdown.js +12 -12
  164. package/dist/esm/run/markdown.js.map +1 -1
  165. package/dist/esm/run/media-cache-state.js +5 -5
  166. package/dist/esm/run/media-cache-state.js.map +1 -1
  167. package/dist/esm/run/model-attempts.js.map +1 -1
  168. package/dist/esm/run/openrouter.js +11 -11
  169. package/dist/esm/run/openrouter.js.map +1 -1
  170. package/dist/esm/run/progress.js +1 -1
  171. package/dist/esm/run/progress.js.map +1 -1
  172. package/dist/esm/run/run-config.js +16 -16
  173. package/dist/esm/run/run-config.js.map +1 -1
  174. package/dist/esm/run/run-context.js +2 -2
  175. package/dist/esm/run/run-context.js.map +1 -1
  176. package/dist/esm/run/run-env.js +55 -54
  177. package/dist/esm/run/run-env.js.map +1 -1
  178. package/dist/esm/run/run-input.js +3 -3
  179. package/dist/esm/run/run-input.js.map +1 -1
  180. package/dist/esm/run/run-metrics.js +16 -16
  181. package/dist/esm/run/run-metrics.js.map +1 -1
  182. package/dist/esm/run/run-models.js +28 -23
  183. package/dist/esm/run/run-models.js.map +1 -1
  184. package/dist/esm/run/run-output.js +3 -3
  185. package/dist/esm/run/run-output.js.map +1 -1
  186. package/dist/esm/run/run-settings.js +83 -34
  187. package/dist/esm/run/run-settings.js.map +1 -1
  188. package/dist/esm/run/run-stream.js +4 -4
  189. package/dist/esm/run/run-stream.js.map +1 -1
  190. package/dist/esm/run/runner.js +166 -127
  191. package/dist/esm/run/runner.js.map +1 -1
  192. package/dist/esm/run/slides-cli.js +43 -42
  193. package/dist/esm/run/slides-cli.js.map +1 -1
  194. package/dist/esm/run/slides-render.js +36 -36
  195. package/dist/esm/run/slides-render.js.map +1 -1
  196. package/dist/esm/run/stdin-temp-file.js +77 -0
  197. package/dist/esm/run/stdin-temp-file.js.map +1 -0
  198. package/dist/esm/run/stream-output.js +7 -7
  199. package/dist/esm/run/stream-output.js.map +1 -1
  200. package/dist/esm/run/streaming.js +16 -16
  201. package/dist/esm/run/streaming.js.map +1 -1
  202. package/dist/esm/run/summary-engine.js +57 -51
  203. package/dist/esm/run/summary-engine.js.map +1 -1
  204. package/dist/esm/run/summary-llm.js +3 -3
  205. package/dist/esm/run/summary-llm.js.map +1 -1
  206. package/dist/esm/run/terminal.js +4 -4
  207. package/dist/esm/run/terminal.js.map +1 -1
  208. package/dist/esm/run/tips.js +2 -2
  209. package/dist/esm/run/tips.js.map +1 -1
  210. package/dist/esm/run/transcriber-cli.js +49 -49
  211. package/dist/esm/run/transcriber-cli.js.map +1 -1
  212. package/dist/esm/run.js +1 -1
  213. package/dist/esm/run.js.map +1 -1
  214. package/dist/esm/shared/contracts.js +1 -1
  215. package/dist/esm/shared/contracts.js.map +1 -1
  216. package/dist/esm/shared/sse-events.js +16 -16
  217. package/dist/esm/shared/sse-events.js.map +1 -1
  218. package/dist/esm/shared/streaming-merge.js +3 -3
  219. package/dist/esm/shared/streaming-merge.js.map +1 -1
  220. package/dist/esm/slides/extract.js +258 -249
  221. package/dist/esm/slides/extract.js.map +1 -1
  222. package/dist/esm/slides/index.js +3 -3
  223. package/dist/esm/slides/index.js.map +1 -1
  224. package/dist/esm/slides/settings.js +14 -14
  225. package/dist/esm/slides/settings.js.map +1 -1
  226. package/dist/esm/slides/store.js +9 -9
  227. package/dist/esm/slides/store.js.map +1 -1
  228. package/dist/esm/tty/format.js +13 -13
  229. package/dist/esm/tty/format.js.map +1 -1
  230. package/dist/esm/tty/osc-progress.js +1 -1
  231. package/dist/esm/tty/osc-progress.js.map +1 -1
  232. package/dist/esm/tty/progress/fetch-html.js +14 -14
  233. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  234. package/dist/esm/tty/progress/transcript.js +70 -62
  235. package/dist/esm/tty/progress/transcript.js.map +1 -1
  236. package/dist/esm/tty/spinner.js +20 -9
  237. package/dist/esm/tty/spinner.js.map +1 -1
  238. package/dist/esm/tty/theme.js +92 -92
  239. package/dist/esm/tty/theme.js.map +1 -1
  240. package/dist/esm/tty/website-progress.js +32 -32
  241. package/dist/esm/tty/website-progress.js.map +1 -1
  242. package/dist/esm/version.js +29 -29
  243. package/dist/esm/version.js.map +1 -1
  244. package/dist/types/cache.d.ts +6 -6
  245. package/dist/types/config.d.ts +49 -7
  246. package/dist/types/content/asset.d.ts +8 -6
  247. package/dist/types/content/index.d.ts +1 -1
  248. package/dist/types/costs.d.ts +3 -3
  249. package/dist/types/daemon/agent.d.ts +1 -1
  250. package/dist/types/daemon/auto-mode.d.ts +3 -3
  251. package/dist/types/daemon/chat.d.ts +2 -2
  252. package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
  253. package/dist/types/daemon/config.d.ts +2 -2
  254. package/dist/types/daemon/env-merge.d.ts +1 -1
  255. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  256. package/dist/types/daemon/flow-context.d.ts +7 -7
  257. package/dist/types/daemon/launchd.d.ts +8 -0
  258. package/dist/types/daemon/models.d.ts +6 -2
  259. package/dist/types/daemon/process-registry.d.ts +5 -5
  260. package/dist/types/daemon/server.d.ts +2 -2
  261. package/dist/types/daemon/summarize-progress.d.ts +1 -1
  262. package/dist/types/daemon/summarize.d.ts +7 -7
  263. package/dist/types/firecrawl.d.ts +1 -1
  264. package/dist/types/flags.d.ts +11 -11
  265. package/dist/types/index.d.ts +4 -4
  266. package/dist/types/language.d.ts +1 -1
  267. package/dist/types/llm/attachments.d.ts +1 -1
  268. package/dist/types/llm/cli.d.ts +3 -3
  269. package/dist/types/llm/generate-text.d.ts +7 -7
  270. package/dist/types/llm/html-to-markdown.d.ts +3 -3
  271. package/dist/types/llm/model-id.d.ts +1 -1
  272. package/dist/types/llm/prompt.d.ts +2 -2
  273. package/dist/types/llm/providers/anthropic.d.ts +3 -3
  274. package/dist/types/llm/providers/google.d.ts +3 -3
  275. package/dist/types/llm/providers/models.d.ts +2 -2
  276. package/dist/types/llm/providers/openai.d.ts +4 -4
  277. package/dist/types/llm/providers/shared.d.ts +2 -2
  278. package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
  279. package/dist/types/llm/usage.d.ts +1 -1
  280. package/dist/types/logging/daemon.d.ts +4 -4
  281. package/dist/types/markitdown.d.ts +1 -1
  282. package/dist/types/media-cache.d.ts +2 -2
  283. package/dist/types/model-auto.d.ts +14 -4
  284. package/dist/types/model-spec.d.ts +10 -10
  285. package/dist/types/pricing/litellm.d.ts +1 -1
  286. package/dist/types/processes.d.ts +1 -1
  287. package/dist/types/prompts/index.d.ts +1 -1
  288. package/dist/types/run/attachments.d.ts +7 -7
  289. package/dist/types/run/bird.d.ts +2 -2
  290. package/dist/types/run/cache-state.d.ts +2 -2
  291. package/dist/types/run/cli-fallback-state.d.ts +6 -0
  292. package/dist/types/run/constants.d.ts +1 -1
  293. package/dist/types/run/cookies/twitter.d.ts +1 -1
  294. package/dist/types/run/env.d.ts +1 -1
  295. package/dist/types/run/finish-line.d.ts +5 -5
  296. package/dist/types/run/flows/asset/extract.d.ts +4 -4
  297. package/dist/types/run/flows/asset/input.d.ts +9 -3
  298. package/dist/types/run/flows/asset/media.d.ts +1 -1
  299. package/dist/types/run/flows/asset/output.d.ts +5 -5
  300. package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
  301. package/dist/types/run/flows/asset/summary.d.ts +19 -17
  302. package/dist/types/run/flows/url/extract.d.ts +1 -1
  303. package/dist/types/run/flows/url/flow.d.ts +1 -1
  304. package/dist/types/run/flows/url/markdown.d.ts +6 -6
  305. package/dist/types/run/flows/url/slides-output.d.ts +7 -7
  306. package/dist/types/run/flows/url/slides-text.d.ts +9 -9
  307. package/dist/types/run/flows/url/summary.d.ts +11 -11
  308. package/dist/types/run/flows/url/types.d.ts +26 -22
  309. package/dist/types/run/format.d.ts +3 -3
  310. package/dist/types/run/help.d.ts +1 -1
  311. package/dist/types/run/media-cache-state.d.ts +2 -2
  312. package/dist/types/run/model-attempts.d.ts +1 -1
  313. package/dist/types/run/run-config.d.ts +4 -4
  314. package/dist/types/run/run-context.d.ts +3 -1
  315. package/dist/types/run/run-env.d.ts +3 -1
  316. package/dist/types/run/run-input.d.ts +2 -2
  317. package/dist/types/run/run-metrics.d.ts +3 -3
  318. package/dist/types/run/run-models.d.ts +3 -2
  319. package/dist/types/run/run-output.d.ts +1 -1
  320. package/dist/types/run/run-settings.d.ts +15 -6
  321. package/dist/types/run/run-stream.d.ts +2 -2
  322. package/dist/types/run/runner.d.ts +3 -2
  323. package/dist/types/run/slides-render.d.ts +4 -4
  324. package/dist/types/run/stdin-temp-file.d.ts +9 -0
  325. package/dist/types/run/stream-output.d.ts +1 -1
  326. package/dist/types/run/streaming.d.ts +4 -4
  327. package/dist/types/run/summary-engine.d.ts +11 -11
  328. package/dist/types/run/summary-llm.d.ts +5 -5
  329. package/dist/types/run/types.d.ts +4 -4
  330. package/dist/types/run.d.ts +1 -1
  331. package/dist/types/shared/contracts.d.ts +2 -2
  332. package/dist/types/shared/sse-events.d.ts +9 -9
  333. package/dist/types/slides/extract.d.ts +5 -4
  334. package/dist/types/slides/index.d.ts +5 -5
  335. package/dist/types/slides/store.d.ts +2 -2
  336. package/dist/types/slides/types.d.ts +2 -2
  337. package/dist/types/tty/osc-progress.d.ts +5 -5
  338. package/dist/types/tty/progress/fetch-html.d.ts +3 -3
  339. package/dist/types/tty/progress/transcript.d.ts +3 -3
  340. package/dist/types/tty/spinner.d.ts +2 -2
  341. package/dist/types/tty/theme.d.ts +2 -2
  342. package/dist/types/tty/website-progress.d.ts +3 -3
  343. package/dist/types/version.d.ts +1 -1
  344. package/docs/agent.md +38 -4
  345. package/docs/assets/site.js +46 -46
  346. package/docs/chrome-extension.md +11 -5
  347. package/docs/cli.md +59 -13
  348. package/docs/config.md +59 -10
  349. package/docs/extract-only.md +2 -0
  350. package/docs/index.html +33 -14
  351. package/docs/llm.md +7 -4
  352. package/docs/media.md +5 -4
  353. package/docs/model-auto.md +3 -2
  354. package/docs/nvidia-onnx-transcription.md +3 -3
  355. package/docs/openai.md +1 -1
  356. package/docs/releasing.md +3 -0
  357. package/docs/site/404.html +4 -1
  358. package/docs/site/assets/site.js +46 -46
  359. package/docs/site/docs/chrome-extension.html +18 -6
  360. package/docs/site/docs/config.html +29 -8
  361. package/docs/site/docs/extract-only.html +16 -4
  362. package/docs/site/docs/firecrawl.html +12 -3
  363. package/docs/site/docs/index.html +35 -6
  364. package/docs/site/docs/llm.html +19 -5
  365. package/docs/site/docs/openai.html +18 -5
  366. package/docs/site/docs/website.html +29 -9
  367. package/docs/site/docs/youtube.html +12 -3
  368. package/docs/site/index.html +33 -14
  369. package/docs/slides.md +13 -5
  370. package/docs/smoketest.md +29 -20
  371. package/docs/timestamps.md +21 -0
  372. package/docs/website.md +2 -1
  373. package/docs/youtube.md +4 -0
  374. package/package.json +36 -35
@@ -1,6 +1,6 @@
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';
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
4
  type ExtractSlidesArgs = {
5
5
  source: SlideSource;
6
6
  settings: SlideSettings;
@@ -9,6 +9,7 @@ type ExtractSlidesArgs = {
9
9
  env: Record<string, string | undefined>;
10
10
  timeoutMs: number;
11
11
  ytDlpPath: string | null;
12
+ ytDlpCookiesFromBrowser?: string | null;
12
13
  ffmpegPath: string | null;
13
14
  tesseractPath: string | null;
14
15
  hooks?: {
@@ -32,7 +33,7 @@ export declare function resolveSlideSource({ url, extracted, }: {
32
33
  extracted: ExtractedLinkContent;
33
34
  }): SlideSource | null;
34
35
  export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
35
- export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
36
+ export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
36
37
  export declare function parseShowinfoTimestamp(line: string): number | null;
37
38
  export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
38
39
  requested: number;
@@ -1,5 +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';
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";
@@ -1,5 +1,5 @@
1
- import type { SlideSettings } from './settings.js';
2
- import type { SlideExtractionResult, SlideSource } from './types.js';
1
+ import type { SlideSettings } from "./settings.js";
2
+ import type { SlideExtractionResult, SlideSource } from "./types.js";
3
3
  export declare function resolveSlidesDir(outputDir: string, sourceId: string): string;
4
4
  export declare function buildSlidesDirId(slidesDir: string): string;
5
5
  export declare function resolveSlideImagePath(slidesDir: string, imagePath: string): string | null;
@@ -1,4 +1,4 @@
1
- export type SlideSourceKind = 'youtube' | 'direct';
1
+ export type SlideSourceKind = "youtube" | "direct";
2
2
  export type SlideSource = {
3
3
  url: string;
4
4
  kind: SlideSourceKind;
@@ -20,7 +20,7 @@ export type SlideAutoTune = {
20
20
  enabled: boolean;
21
21
  chosenThreshold: number;
22
22
  confidence: number;
23
- strategy: 'hash' | 'none';
23
+ strategy: "hash" | "none";
24
24
  };
25
25
  export type SlideExtractionResult = {
26
26
  sourceUrl: string;
@@ -1,5 +1,5 @@
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
+ 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,6 +1,6 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from '../osc-progress.js';
3
- import type { ThemeRenderer } from '../theme.js';
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
4
  export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, theme, }: {
5
5
  spinner: {
6
6
  setText: (text: string) => void;
@@ -1,6 +1,6 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from '../osc-progress.js';
3
- import type { ThemeRenderer } from '../theme.js';
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
4
  export declare function createTranscriptProgressRenderer({ spinner, oscProgress, theme, }: {
5
5
  spinner: {
6
6
  setText: (text: string) => void;
@@ -1,9 +1,9 @@
1
- import { type Options as OraOptions } from 'ora';
1
+ import { type Options as OraOptions } from "ora";
2
2
  export declare function startSpinner({ text, enabled, stream, color, }: {
3
3
  text: string;
4
4
  enabled: boolean;
5
5
  stream: NodeJS.WritableStream;
6
- color?: OraOptions['color'];
6
+ color?: OraOptions["color"];
7
7
  }): {
8
8
  stop: () => void;
9
9
  clear: () => void;
@@ -1,10 +1,10 @@
1
1
  export declare const CLI_THEME_NAMES: readonly ["aurora", "ember", "moss", "mono"];
2
2
  export type CliThemeName = (typeof CLI_THEME_NAMES)[number];
3
- export type ThemeRole = 'heading' | 'accent' | 'accentStrong' | 'muted' | 'dim' | 'success' | 'warning' | 'error' | 'label' | 'value' | 'code';
3
+ export type ThemeRole = "heading" | "accent" | "accentStrong" | "muted" | "dim" | "success" | "warning" | "error" | "label" | "value" | "code";
4
4
  type ThemePalette = {
5
5
  name: CliThemeName;
6
6
  roles: Record<ThemeRole, string>;
7
- spinner: 'cyan' | 'magenta' | 'yellow' | 'green' | 'gray' | 'blue';
7
+ spinner: "cyan" | "magenta" | "yellow" | "green" | "gray" | "blue";
8
8
  };
9
9
  export declare const DEFAULT_CLI_THEME: CliThemeName;
10
10
  export declare function listCliThemes(): CliThemeName[];
@@ -1,6 +1,6 @@
1
- import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
2
- import type { OscProgressController } from './osc-progress.js';
3
- import type { ThemeRenderer } from './theme.js';
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
4
  export declare function createWebsiteProgress({ enabled, spinner, oscProgress, theme, }: {
5
5
  enabled: boolean;
6
6
  spinner: {
@@ -1,4 +1,4 @@
1
- export declare const FALLBACK_VERSION = "0.10.0";
1
+ export declare const FALLBACK_VERSION = "0.11.1";
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/agent.md CHANGED
@@ -9,6 +9,7 @@ read_when:
9
9
  Summarize can run as a **website automation agent** inside the Chrome side panel. This is **optional** and **gated by a checkbox** in Options.
10
10
 
11
11
  Scope:
12
+
12
13
  - **Off (default):** chat is Q&A only (no tools).
13
14
  - **On:** chat runs a tool-capable agent for web automation.
14
15
 
@@ -16,10 +17,10 @@ Explicit exclusions (per product direction): **no update checker**, **no tutoria
16
17
 
17
18
  ## Architecture (High Level)
18
19
 
19
- 1) **Side panel** maintains the agent loop + chat UI.
20
- 2) **Background** handles tab data, extraction, and tool execution.
21
- 3) **Content scripts** handle element picking and native-input bridge.
22
- 4) **Daemon** provides `/v1/agent` (SSE stream of chunks + final assistant message).
20
+ 1. **Side panel** maintains the agent loop + chat UI.
21
+ 2. **Background** handles tab data, extraction, and tool execution.
22
+ 3. **Content scripts** handle element picking and native-input bridge.
23
+ 4. **Daemon** provides `/v1/agent` (SSE stream of chunks + final assistant message).
23
24
 
24
25
  ### Data Flow (Agent Loop)
25
26
 
@@ -63,10 +64,12 @@ Defined in `apps/chrome-extension/wxt.config.ts` and requested via Options:
63
64
  ### `POST /v1/agent` (SSE)
64
65
 
65
66
  **Headers**
67
+
66
68
  - `Authorization: Bearer <token>`
67
69
  - `Content-Type: application/json`
68
70
 
69
71
  **Body**
72
+
70
73
  ```
71
74
  {
72
75
  "url": "https://...",
@@ -83,6 +86,7 @@ Defined in `apps/chrome-extension/wxt.config.ts` and requested via Options:
83
86
  ```
84
87
 
85
88
  **Response (SSE, default)**
89
+
86
90
  ```
87
91
  event: chunk
88
92
  data: { "text": "..." }
@@ -99,6 +103,7 @@ data: { "message": "..." }
99
103
 
100
104
  **Response (JSON)**
101
105
  Use `Accept: application/json` or `?format=json`.
106
+
102
107
  ```
103
108
  { "ok": true, "assistant": { /* AssistantMessage */ } }
104
109
  ```
@@ -108,6 +113,7 @@ Use `Accept: application/json` or `?format=json`.
108
113
  Returns cached chat history for the same cache key as `/v1/agent`.
109
114
 
110
115
  **Body**
116
+
111
117
  ```
112
118
  {
113
119
  "url": "https://...",
@@ -121,6 +127,7 @@ Returns cached chat history for the same cache key as `/v1/agent`.
121
127
  ```
122
128
 
123
129
  **Response**
130
+
124
131
  ```
125
132
  { "ok": true, "messages": [/* Message[] */] }
126
133
  ```
@@ -146,36 +153,44 @@ See `buildChatPageContent()` usage in `apps/chrome-extension/src/entrypoints/bac
146
153
  ## Tools
147
154
 
148
155
  ### 1) `navigate`
156
+
149
157
  Navigate the active tab.
150
158
 
151
159
  Params:
160
+
152
161
  ```
153
162
  { "url": "https://...", "newTab": false }
154
163
  ```
155
164
 
156
165
  Result:
166
+
157
167
  ```
158
168
  { "finalUrl": "https://...", "title": "...", "tabId": 123 }
159
169
  ```
160
170
 
161
171
  Notes:
172
+
162
173
  - Uses `chrome.tabs.update` or `chrome.tabs.create`.
163
174
  - Waits for tab status `complete` (15s timeout).
164
175
 
165
176
  ### 2) `repl`
177
+
166
178
  Execute JavaScript in a sandbox, with `browserjs()` to run in the page context.
167
179
 
168
180
  Params:
181
+
169
182
  ```
170
183
  { "title": "...", "code": "..." }
171
184
  ```
172
185
 
173
186
  Result:
187
+
174
188
  ```
175
189
  { "output": "console/return output", "files": [{ "fileName": "...", "mimeType": "...", "contentBase64": "..." }] }
176
190
  ```
177
191
 
178
192
  REPL environment:
193
+
179
194
  - Runs in a **sandboxed iframe** (no DOM access to the panel).
180
195
  - `browserjs(fn, ...args)` runs the function **in the page context**.
181
196
  - Uses `chrome.userScripts.execute` (main world) when available.
@@ -186,9 +201,11 @@ REPL environment:
186
201
  - `returnFile(name, content, mimeType)` or `returnFile({ fileName, content, mimeType })` attaches files to the tool result.
187
202
 
188
203
  Safety:
204
+
189
205
  - Navigation inside REPL code (`window.location`, `history`, etc.) is rejected. Use `navigate()` instead.
190
206
 
191
207
  Page-context helpers (via `browserjs()`):
208
+
192
209
  - Skills libraries are auto-injected when domain patterns match the active URL.
193
210
  - If `debugger` permission is granted, native helpers are exposed:
194
211
  - `nativeClick(selector)`
@@ -197,14 +214,17 @@ Page-context helpers (via `browserjs()`):
197
214
  - `nativeKeyDown(key)` / `nativeKeyUp(key)`
198
215
 
199
216
  ### 3) `ask_user_which_element`
217
+
200
218
  Shows a click-to-select overlay and returns element metadata.
201
219
 
202
220
  Params:
221
+
203
222
  ```
204
223
  { "message": "Optional guidance" }
205
224
  ```
206
225
 
207
226
  Result (example):
227
+
208
228
  ```
209
229
  {
210
230
  "selector": "#submit",
@@ -218,19 +238,23 @@ Result (example):
218
238
  ```
219
239
 
220
240
  Overlay UX:
241
+
221
242
  - Hover highlights element under cursor.
222
243
  - Click selects.
223
244
  - ↑ / ↓ moves up or down the DOM tree.
224
245
  - Esc cancels.
225
246
 
226
247
  ### 4) `skill`
248
+
227
249
  CRUD for domain-specific libraries (stored in `chrome.storage.local`).
228
250
 
229
251
  Storage keys:
252
+
230
253
  - `automation.skills` (map of name → skill)
231
254
  - `automation.skillsSeeded` (one-time default seed)
232
255
 
233
256
  Actions:
257
+
234
258
  - `list` (optionally filtered by URL)
235
259
  - `get` (optionally includes library code)
236
260
  - `create` / `rewrite`
@@ -240,30 +264,37 @@ Actions:
240
264
  Default skills seed from `apps/chrome-extension/src/automation/default-skills.json`.
241
265
 
242
266
  Matching:
267
+
243
268
  - Glob-like domain patterns (supports `*` and `**`).
244
269
  - Match is done against hostname + path (e.g. `github.com/*/issues`).
245
270
 
246
271
  Notes:
272
+
247
273
  - `update` is intended for in-place string replacements; use `rewrite` to rename.
248
274
  - Skills libraries run inside `browserjs()` and must avoid navigation.
249
275
 
250
276
  ### 5) `debugger` (optional)
277
+
251
278
  Runs JavaScript in the **main world** via the Chrome debugger. **Last resort** (shows Chrome debug banner).
252
279
 
253
280
  Params:
281
+
254
282
  ```
255
283
  { "action": "eval", "code": "..." }
256
284
  ```
257
285
 
258
286
  Result:
287
+
259
288
  ```
260
289
  { "text": "...", "details": { ... } }
261
290
  ```
262
291
 
263
292
  ### 6) `summarize`
293
+
264
294
  Run the Summarize pipeline against a URL (summary or extract-only).
265
295
 
266
296
  Params:
297
+
267
298
  ```
268
299
  {
269
300
  "url": "https://...",
@@ -287,16 +318,19 @@ Params:
287
318
  ```
288
319
 
289
320
  Result (summary):
321
+
290
322
  ```
291
323
  { "output": "..." }
292
324
  ```
293
325
 
294
326
  Result (extract-only):
327
+
295
328
  ```
296
329
  { "output": "...", "details": { "content": "...", "title": "...", "wordCount": 123, ... } }
297
330
  ```
298
331
 
299
332
  Notes:
333
+
300
334
  - URL-only (uses daemon URL pipeline).
301
335
  - Use `extractOnly: true` + `format: "markdown"` to return extracted Markdown.
302
336
  - When `format: "markdown"`, `markdownMode` defaults to `readability`.
@@ -1,72 +1,72 @@
1
- const canonicalHost = 'summarize.sh'
2
- const redirectHostnames = new Set(['summarize.is', 'www.summarize.is'])
1
+ const canonicalHost = "summarize.sh";
2
+ const redirectHostnames = new Set(["summarize.is", "www.summarize.is"]);
3
3
 
4
4
  const maybeRedirect = () => {
5
5
  try {
6
- const { hostname, pathname, search, hash } = window.location
7
- if (!redirectHostnames.has(hostname)) return
8
- const target = `https://${canonicalHost}${pathname}${search}${hash}`
9
- window.location.replace(target)
6
+ const { hostname, pathname, search, hash } = window.location;
7
+ if (!redirectHostnames.has(hostname)) return;
8
+ const target = `https://${canonicalHost}${pathname}${search}${hash}`;
9
+ window.location.replace(target);
10
10
  } catch {
11
11
  // ignore
12
12
  }
13
- }
13
+ };
14
14
 
15
15
  const highlightNav = () => {
16
- const path = window.location.pathname
17
- const isDocs = path.includes('/docs/')
18
- const navDocs = document.querySelector('a[data-nav="docs"]')
19
- const navHome = document.querySelector('a[data-nav="home"]')
20
- if (navDocs && isDocs) navDocs.setAttribute('aria-current', 'page')
21
- if (navHome && !isDocs) navHome.setAttribute('aria-current', 'page')
16
+ const path = window.location.pathname;
17
+ const isDocs = path.includes("/docs/");
18
+ const navDocs = document.querySelector('a[data-nav="docs"]');
19
+ const navHome = document.querySelector('a[data-nav="home"]');
20
+ if (navDocs && isDocs) navDocs.setAttribute("aria-current", "page");
21
+ if (navHome && !isDocs) navHome.setAttribute("aria-current", "page");
22
22
 
23
- const sideLinks = document.querySelectorAll('.side a[href]')
23
+ const sideLinks = document.querySelectorAll(".side a[href]");
24
24
  for (const a of sideLinks) {
25
- const href = a.getAttribute('href') ?? ''
26
- if (!href) continue
27
- const normalized = href.replace(/^\.\//, '')
28
- if (path.endsWith(normalized)) a.setAttribute('aria-current', 'page')
25
+ const href = a.getAttribute("href") ?? "";
26
+ if (!href) continue;
27
+ const normalized = href.replace(/^\.\//, "");
28
+ if (path.endsWith(normalized)) a.setAttribute("aria-current", "page");
29
29
  }
30
- }
30
+ };
31
31
 
32
32
  const wireCopyButtons = () => {
33
- const buttons = document.querySelectorAll('[data-copy]')
33
+ const buttons = document.querySelectorAll("[data-copy]");
34
34
  const handleCopyClick = async (button) => {
35
- const selector = button.getAttribute('data-copy')
36
- const target = selector ? document.querySelector(selector) : null
37
- const text = target?.textContent?.trim() ?? ''
38
- if (!text) return
35
+ const selector = button.getAttribute("data-copy");
36
+ const target = selector ? document.querySelector(selector) : null;
37
+ const text = target?.textContent?.trim() ?? "";
38
+ if (!text) return;
39
39
  try {
40
- await navigator.clipboard.writeText(text)
41
- const prev = button.textContent ?? ''
42
- button.textContent = 'Copied'
43
- button.setAttribute('data-copied', '1')
40
+ await navigator.clipboard.writeText(text);
41
+ const prev = button.textContent ?? "";
42
+ button.textContent = "Copied";
43
+ button.setAttribute("data-copied", "1");
44
44
  window.setTimeout(() => {
45
- button.textContent = prev
46
- button.removeAttribute('data-copied')
47
- }, 900)
45
+ button.textContent = prev;
46
+ button.removeAttribute("data-copied");
47
+ }, 900);
48
48
  } catch {
49
49
  // ignore
50
50
  }
51
- }
51
+ };
52
52
  for (const button of buttons) {
53
- button.addEventListener('click', () => {
54
- void handleCopyClick(button)
55
- })
53
+ button.addEventListener("click", () => {
54
+ void handleCopyClick(button);
55
+ });
56
56
  }
57
- }
57
+ };
58
58
 
59
59
  const reveal = () => {
60
- const items = document.querySelectorAll('.reveal')
61
- let i = 0
60
+ const items = document.querySelectorAll(".reveal");
61
+ let i = 0;
62
62
  for (const el of items) {
63
- const delay = Math.min(380, i * 70)
64
- window.setTimeout(() => el.classList.add('is-on'), delay)
65
- i++
63
+ const delay = Math.min(380, i * 70);
64
+ window.setTimeout(() => el.classList.add("is-on"), delay);
65
+ i++;
66
66
  }
67
- }
67
+ };
68
68
 
69
- maybeRedirect()
70
- highlightNav()
71
- wireCopyButtons()
72
- reveal()
69
+ maybeRedirect();
70
+ highlightNav();
71
+ wireCopyButtons();
72
+ reveal();
@@ -22,6 +22,7 @@ Quickstart:
22
22
  - Restart (if needed): `summarize daemon restart`
23
23
 
24
24
  Firefox notes:
25
+
25
26
  - Sidebar UX differs from Chrome’s side panel (persistent sidebar instead of slide-in panel).
26
27
  - Firefox testing is limited in Playwright; see `apps/chrome-extension/tests/README-firefox.md`.
27
28
  - Compatibility details: `apps/chrome-extension/docs/firefox.md`.
@@ -38,6 +39,10 @@ Dev (repo checkout):
38
39
  - “Daemon not reachable”:
39
40
  - `summarize daemon status`
40
41
  - Logs: `~/.summarize/logs/daemon.err.log`
42
+ - macOS `launchctl bootstrap` errors (`Input/output error`, `Domain does not support specified action`):
43
+ - `summarize daemon install` now tries both launchd domains (`gui/<uid>` then `user/<uid>`).
44
+ - Install as your normal user (not root) so HOME + launchd domain match.
45
+ - Re-run: `summarize daemon install --token <TOKEN>`.
41
46
  - “Need extension-side traces”:
42
47
  - Options → Logs → `extension.log` (panel/background events).
43
48
  - Enable “Extended logging” in Advanced settings for full pipeline traces.
@@ -70,11 +75,11 @@ Dev (repo checkout):
70
75
 
71
76
  ## Data Flow
72
77
 
73
- 1) User opens side panel (click extension icon).
74
- 2) Panel sends a “ready” message to the background (plus periodic “ping” heartbeats while open).
75
- 3) On nav/tab change (and auto enabled): background asks the content script to extract `{ url, title, text }` (best-effort).
76
- 4) Background `POST`s payload to daemon `/v1/summarize` with `Authorization: Bearer <token>`.
77
- 5) Panel opens `/v1/summarize/<id>/events` (SSE) and renders streamed Markdown.
78
+ 1. User opens side panel (click extension icon).
79
+ 2. Panel sends a “ready” message to the background (plus periodic “ping” heartbeats while open).
80
+ 3. On nav/tab change (and auto enabled): background asks the content script to extract `{ url, title, text }` (best-effort).
81
+ 4. Background `POST`s payload to daemon `/v1/summarize` with `Authorization: Bearer <token>`.
82
+ 5. Panel opens `/v1/summarize/<id>/events` (SSE) and renders streamed Markdown.
78
83
 
79
84
  ## Auto Mode (URL + Page Text)
80
85
 
@@ -225,6 +230,7 @@ Problem: daemon must be secured; extension must discover and pair with it.
225
230
  - `event: error` `data: { message }`
226
231
 
227
232
  Notes:
233
+
228
234
  - SSE keeps the extension simple + streaming-friendly.
229
235
  - Requests keyed by `id`; daemon keeps a small in-memory map while streaming.
230
236