@steipete/summarize 0.7.0 → 0.8.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 (158) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +53 -2
  3. package/dist/cli.js +3 -0
  4. package/dist/esm/cache.js +353 -0
  5. package/dist/esm/cache.js.map +1 -0
  6. package/dist/esm/config.js +78 -1
  7. package/dist/esm/config.js.map +1 -1
  8. package/dist/esm/content/asset.js +11 -17
  9. package/dist/esm/content/asset.js.map +1 -1
  10. package/dist/esm/daemon/auto-mode.js +8 -0
  11. package/dist/esm/daemon/auto-mode.js.map +1 -0
  12. package/dist/esm/daemon/cli.js +284 -0
  13. package/dist/esm/daemon/cli.js.map +1 -0
  14. package/dist/esm/daemon/config.js +82 -0
  15. package/dist/esm/daemon/config.js.map +1 -0
  16. package/dist/esm/daemon/constants.js +8 -0
  17. package/dist/esm/daemon/constants.js.map +1 -0
  18. package/dist/esm/daemon/env-merge.js +4 -0
  19. package/dist/esm/daemon/env-merge.js.map +1 -0
  20. package/dist/esm/daemon/env-snapshot.js +43 -0
  21. package/dist/esm/daemon/env-snapshot.js.map +1 -0
  22. package/dist/esm/daemon/flow-context.js +265 -0
  23. package/dist/esm/daemon/flow-context.js.map +1 -0
  24. package/dist/esm/daemon/launchd.js +149 -0
  25. package/dist/esm/daemon/launchd.js.map +1 -0
  26. package/dist/esm/daemon/meta.js +35 -0
  27. package/dist/esm/daemon/meta.js.map +1 -0
  28. package/dist/esm/daemon/models.js +175 -0
  29. package/dist/esm/daemon/models.js.map +1 -0
  30. package/dist/esm/daemon/request-settings.js +91 -0
  31. package/dist/esm/daemon/request-settings.js.map +1 -0
  32. package/dist/esm/daemon/schtasks.js +108 -0
  33. package/dist/esm/daemon/schtasks.js.map +1 -0
  34. package/dist/esm/daemon/server.js +399 -0
  35. package/dist/esm/daemon/server.js.map +1 -0
  36. package/dist/esm/daemon/summarize-progress.js +57 -0
  37. package/dist/esm/daemon/summarize-progress.js.map +1 -0
  38. package/dist/esm/daemon/summarize.js +263 -0
  39. package/dist/esm/daemon/summarize.js.map +1 -0
  40. package/dist/esm/daemon/systemd.js +117 -0
  41. package/dist/esm/daemon/systemd.js.map +1 -0
  42. package/dist/esm/flags.js +3 -1
  43. package/dist/esm/flags.js.map +1 -1
  44. package/dist/esm/llm/generate-text.js +445 -154
  45. package/dist/esm/llm/generate-text.js.map +1 -1
  46. package/dist/esm/llm/html-to-markdown.js +4 -1
  47. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  48. package/dist/esm/llm/prompt.js +14 -0
  49. package/dist/esm/llm/prompt.js.map +1 -0
  50. package/dist/esm/llm/transcript-to-markdown.js +57 -0
  51. package/dist/esm/llm/transcript-to-markdown.js.map +1 -0
  52. package/dist/esm/model-spec.js +2 -2
  53. package/dist/esm/model-spec.js.map +1 -1
  54. package/dist/esm/run/attachments.js +10 -42
  55. package/dist/esm/run/attachments.js.map +1 -1
  56. package/dist/esm/run/cache-state.js +48 -0
  57. package/dist/esm/run/cache-state.js.map +1 -0
  58. package/dist/esm/run/cli-preflight.js +15 -1
  59. package/dist/esm/run/cli-preflight.js.map +1 -1
  60. package/dist/esm/run/cookies/twitter.js +224 -0
  61. package/dist/esm/run/cookies/twitter.js.map +1 -0
  62. package/dist/esm/run/fetch-with-timeout.js +1 -1
  63. package/dist/esm/run/fetch-with-timeout.js.map +1 -1
  64. package/dist/esm/run/finish-line.js +46 -17
  65. package/dist/esm/run/finish-line.js.map +1 -1
  66. package/dist/esm/run/flows/asset/input.js +10 -4
  67. package/dist/esm/run/flows/asset/input.js.map +1 -1
  68. package/dist/esm/run/flows/asset/preprocess.js +52 -72
  69. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  70. package/dist/esm/run/flows/asset/summary.js +127 -47
  71. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  72. package/dist/esm/run/flows/url/extract.js +6 -1
  73. package/dist/esm/run/flows/url/extract.js.map +1 -1
  74. package/dist/esm/run/flows/url/flow.js +168 -82
  75. package/dist/esm/run/flows/url/flow.js.map +1 -1
  76. package/dist/esm/run/flows/url/markdown.js +88 -46
  77. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  78. package/dist/esm/run/flows/url/summary.js +263 -185
  79. package/dist/esm/run/flows/url/summary.js.map +1 -1
  80. package/dist/esm/run/help.js +33 -2
  81. package/dist/esm/run/help.js.map +1 -1
  82. package/dist/esm/run/markdown.js +31 -2
  83. package/dist/esm/run/markdown.js.map +1 -1
  84. package/dist/esm/run/progress.js +1 -3
  85. package/dist/esm/run/progress.js.map +1 -1
  86. package/dist/esm/run/run-env.js +36 -2
  87. package/dist/esm/run/run-env.js.map +1 -1
  88. package/dist/esm/run/runner.js +362 -227
  89. package/dist/esm/run/runner.js.map +1 -1
  90. package/dist/esm/run/summary-engine.js +22 -8
  91. package/dist/esm/run/summary-engine.js.map +1 -1
  92. package/dist/esm/run/summary-llm.js +4 -1
  93. package/dist/esm/run/summary-llm.js.map +1 -1
  94. package/dist/esm/tty/format.js +9 -0
  95. package/dist/esm/tty/format.js.map +1 -1
  96. package/dist/esm/tty/spinner.js +37 -11
  97. package/dist/esm/tty/spinner.js.map +1 -1
  98. package/dist/esm/version.js +1 -1
  99. package/dist/types/cache.d.ts +70 -0
  100. package/dist/types/config.d.ts +46 -0
  101. package/dist/types/content/asset.d.ts +4 -3
  102. package/dist/types/daemon/auto-mode.d.ts +8 -0
  103. package/dist/types/daemon/cli.d.ts +9 -0
  104. package/dist/types/daemon/config.d.ts +19 -0
  105. package/dist/types/daemon/constants.d.ts +7 -0
  106. package/dist/types/daemon/env-merge.d.ts +5 -0
  107. package/dist/types/daemon/env-snapshot.d.ts +4 -0
  108. package/dist/types/daemon/flow-context.d.ts +28 -0
  109. package/dist/types/daemon/launchd.d.ts +29 -0
  110. package/dist/types/daemon/meta.d.ts +12 -0
  111. package/dist/types/daemon/models.d.ts +27 -0
  112. package/dist/types/daemon/request-settings.d.ts +27 -0
  113. package/dist/types/daemon/schtasks.d.ts +16 -0
  114. package/dist/types/daemon/server.d.ts +12 -0
  115. package/dist/types/daemon/summarize-progress.d.ts +2 -0
  116. package/dist/types/daemon/summarize.d.ts +59 -0
  117. package/dist/types/daemon/systemd.d.ts +16 -0
  118. package/dist/types/flags.d.ts +1 -1
  119. package/dist/types/llm/generate-text.d.ts +11 -5
  120. package/dist/types/llm/html-to-markdown.d.ts +4 -1
  121. package/dist/types/llm/prompt.d.ts +9 -0
  122. package/dist/types/llm/transcript-to-markdown.d.ts +34 -0
  123. package/dist/types/run/attachments.d.ts +4 -10
  124. package/dist/types/run/cache-state.d.ts +12 -0
  125. package/dist/types/run/cli-preflight.d.ts +1 -0
  126. package/dist/types/run/cookies/twitter.d.ts +17 -0
  127. package/dist/types/run/finish-line.d.ts +31 -1
  128. package/dist/types/run/flows/asset/preprocess.d.ts +5 -2
  129. package/dist/types/run/flows/asset/summary.d.ts +11 -0
  130. package/dist/types/run/flows/url/markdown.d.ts +3 -0
  131. package/dist/types/run/flows/url/summary.d.ts +6 -3
  132. package/dist/types/run/flows/url/types.d.ts +52 -18
  133. package/dist/types/run/help.d.ts +1 -0
  134. package/dist/types/run/run-env.d.ts +6 -0
  135. package/dist/types/run/summary-engine.d.ts +8 -2
  136. package/dist/types/run/summary-llm.d.ts +6 -3
  137. package/dist/types/tty/format.d.ts +1 -0
  138. package/dist/types/tty/spinner.d.ts +2 -0
  139. package/dist/types/version.d.ts +1 -1
  140. package/docs/README.md +5 -0
  141. package/docs/cache.md +72 -0
  142. package/docs/chrome-extension.md +180 -0
  143. package/docs/cli.md +6 -0
  144. package/docs/config.md +65 -1
  145. package/docs/extract-only.md +6 -0
  146. package/docs/firecrawl.md +6 -0
  147. package/docs/language.md +6 -0
  148. package/docs/llm.md +20 -0
  149. package/docs/manual-tests.md +6 -0
  150. package/docs/model-auto.md +6 -0
  151. package/docs/openai.md +6 -0
  152. package/docs/site/index.html +11 -1
  153. package/docs/smoketest.md +6 -0
  154. package/docs/website.md +6 -0
  155. package/docs/youtube.md +9 -2
  156. package/package.json +6 -9
  157. package/dist/cli.cjs +0 -80500
  158. package/dist/cli.cjs.map +0 -7
package/docs/llm.md CHANGED
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "LLM usage, env vars, flags, and prompt rules."
3
+ read_when:
4
+ - "When changing model selection or prompt formatting."
5
+ ---
6
+
1
7
  # LLM / summarization mode
2
8
 
3
9
  By default `summarize` will call an LLM using **direct provider API keys**. When CLI tools are
@@ -12,6 +18,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
12
18
 
13
19
  - `.env` (optional): when running the CLI, `summarize` also reads `.env` in the current working directory and merges it into the environment (real env vars win).
14
20
  - `XAI_API_KEY` (required for `xai/...` models)
21
+ - `XAI_BASE_URL` (optional; override xAI API endpoint)
15
22
  - `OPENAI_API_KEY` (required for `openai/...` models)
16
23
  - `OPENAI_BASE_URL` (optional; OpenAI-compatible API endpoint, e.g. OpenRouter)
17
24
  - `OPENAI_USE_CHAT_COMPLETIONS` (optional; force OpenAI chat completions)
@@ -19,7 +26,9 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
19
26
  - `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
20
27
  - `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
21
28
  - `GEMINI_API_KEY` (required for `google/...` models; also accepts `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`)
29
+ - `GOOGLE_BASE_URL` / `GEMINI_BASE_URL` (optional; override Google API endpoint)
22
30
  - `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
31
+ - `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
23
32
  - `SUMMARIZE_MODEL` (optional; overrides default model selection)
24
33
  - `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` (optional; override CLI binary paths)
25
34
 
@@ -43,12 +52,23 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
43
52
  - See `docs/model-auto.md`
44
53
  - `--model <preset>`
45
54
  - Uses a config-defined preset (see `docs/config.md` → “Presets”).
55
+ - `--prompt <text>` / `--prompt-file <path>`
56
+ - Overrides the built-in summary instructions (prompt becomes the instruction prefix).
57
+ - Prompts are wrapped in `<instructions>`, `<context>`, `<content>` tags.
58
+ - When `--length` is numeric, we add `Output is X characters.` When `--language` is explicitly set, we add `Output should be <language>.`
59
+ - `--no-cache`
60
+ - Bypass cache reads and writes (extracted content, transcripts, summaries).
61
+ - `--cache-stats`
62
+ - Print cache stats and exit.
63
+ - `--clear-cache`
64
+ - Delete the cache database and exit. Must be used alone.
46
65
  - `--video-mode auto|transcript|understand`
47
66
  - Only relevant for video inputs / video-only pages.
48
67
  - `--length short|medium|long|xl|xxl|<chars>`
49
68
  - This is *soft guidance* to the model (no hard truncation).
50
69
  - Minimum numeric value: 50 chars.
51
70
  - Default: `long`.
71
+ - Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
52
72
  - `--max-output-tokens <count>`
53
73
  - Hard cap for output tokens (optional).
54
74
  - If omitted, no max token parameter is sent (provider default).
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "Manual end-to-end test checklist for model and input coverage."
3
+ read_when:
4
+ - "When doing release validation."
5
+ ---
6
+
1
7
  # Manual tests
2
8
 
3
9
  Goal: sanity-check auto selection + presets end-to-end.
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "Auto model selection logic and config rules."
3
+ read_when:
4
+ - "When changing auto selection behavior."
5
+ ---
6
+
1
7
  # Auto model selection (`--model auto`)
2
8
 
3
9
  `--model auto` picks a model based on input kind + token size, and retries with fallbacks when something fails.
package/docs/openai.md CHANGED
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "OpenAI model usage and flags."
3
+ read_when:
4
+ - "When changing OpenAI integration."
5
+ ---
6
+
1
7
  # OpenAI models
2
8
 
3
9
  Use OpenAI directly by choosing an `openai/...` model id.
@@ -40,7 +40,8 @@
40
40
  <h1 class="title">Link → clean text → summary.</h1>
41
41
  <p class="lede">
42
42
  A pragmatic pipeline for the web: <strong>extract</strong> the good stuff, <strong>sanitize</strong> it,
43
- then <strong>summarize</strong> with your model of choice. Podcast episode pages included.
43
+ then <strong>summarize</strong> with your model of choice. Podcast episode pages included. Plus a Chrome
44
+ side panel extension when you want it in-browser.
44
45
  </p>
45
46
 
46
47
  <div class="pillRow">
@@ -48,6 +49,7 @@
48
49
  <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent2)"></span> YouTube transcripts</span>
49
50
  <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> Podcast compatibility</span>
50
51
  <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> JSON + metrics</span>
52
+ <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent2)"></span> Chrome extension</span>
51
53
  </div>
52
54
 
53
55
  <div class="ctaRow">
@@ -118,6 +120,14 @@
118
120
  <p>OpenAI, xAI, Gemini — use what you’ve got, pin what you need.</p>
119
121
  <div class="small">Control via <code>--model</code> + env vars</div>
120
122
  </div>
123
+ <div class="card reveal">
124
+ <h2>Chrome side panel</h2>
125
+ <p>Summarize the active tab without leaving your browser.</p>
126
+ <div class="small">
127
+ Companion extension for the CLI. Download from the
128
+ <a href="https://github.com/steipete/summarize/releases/latest">latest GitHub release</a>.
129
+ </div>
130
+ </div>
121
131
  </section>
122
132
 
123
133
  <footer class="footer">
package/docs/smoketest.md CHANGED
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "20-case smoke test plan for inputs and models."
3
+ read_when:
4
+ - "When running smoke tests."
5
+ ---
6
+
1
7
  # Smoke Test Plan (20 combos)
2
8
 
3
9
  Goal: exercise URL + file inputs, extraction + LLM summary paths, multiple models.
package/docs/website.md CHANGED
@@ -1,3 +1,9 @@
1
+ ---
2
+ summary: "Website extraction pipeline, flags, and fallbacks."
3
+ read_when:
4
+ - "When changing website extraction behavior."
5
+ ---
6
+
1
7
  # Website mode
2
8
 
3
9
  Use this for non-YouTube URLs.
package/docs/youtube.md CHANGED
@@ -1,11 +1,18 @@
1
+ ---
2
+ summary: "YouTube transcript extraction modes and fallbacks."
3
+ read_when:
4
+ - "When changing YouTube handling."
5
+ ---
6
+
1
7
  # YouTube mode
2
8
 
3
9
  YouTube URLs use transcript-first extraction.
4
10
 
5
- ## `--youtube auto|web|apify|yt-dlp`
11
+ ## `--youtube auto|web|no-auto|apify|yt-dlp`
6
12
 
7
- - `auto` (default): try `youtubei` → `captionTracks` → Apify (if token exists) → `yt-dlp` (if configured)
13
+ - `auto` (default): try `youtubei` → `captionTracks` → `yt-dlp` (if configured) → Apify (if token exists)
8
14
  - `web`: try `youtubei` → `captionTracks` only
15
+ - `no-auto`: try creator captions only (skip auto-generated/ASR) → `yt-dlp` (if configured)
9
16
  - `apify`: Apify only
10
17
  - `yt-dlp`: download audio + transcribe (local `whisper.cpp` preferred; OpenAI/FAL fallback)
11
18
 
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@steipete/summarize",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Link → clean text → summary.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "summarize": "./dist/cli.cjs",
8
- "summarizer": "./dist/cli.cjs"
7
+ "summarize": "./dist/cli.js",
8
+ "summarizer": "./dist/cli.js"
9
9
  },
10
10
  "main": "./dist/esm/index.js",
11
11
  "module": "./dist/esm/index.js",
@@ -35,20 +35,16 @@
35
35
  "node": ">=22"
36
36
  },
37
37
  "dependencies": {
38
- "@steipete/summarize-core": "0.7.0"
38
+ "@mariozechner/pi-ai": "^0.30.2",
39
+ "@steipete/summarize-core": "0.8.0"
39
40
  },
40
41
  "devDependencies": {
41
- "@ai-sdk/anthropic": "3.0.1",
42
- "@ai-sdk/google": "3.0.1",
43
- "@ai-sdk/openai": "3.0.1",
44
- "@ai-sdk/xai": "3.0.1",
45
42
  "@biomejs/biome": "^2.3.10",
46
43
  "@fal-ai/client": "^1.8.1",
47
44
  "@types/jsdom": "^27.0.0",
48
45
  "@types/node": "^25.0.3",
49
46
  "@types/sanitize-html": "^2.16.0",
50
47
  "@vitest/coverage-v8": "^4.0.16",
51
- "ai": "6.0.3",
52
48
  "commander": "^14.0.2",
53
49
  "esbuild": "^0.27.2",
54
50
  "file-type": "^21.2.0",
@@ -72,6 +68,7 @@
72
68
  "build:cli": "node scripts/build-cli.mjs",
73
69
  "build:bun": "bun scripts/build-bun.js",
74
70
  "build:bun:test": "bun scripts/build-bun.js --test",
71
+ "docs:list": "tsx scripts/docs-list.ts",
75
72
  "typecheck": "tsc -p tsconfig.build.json --noEmit",
76
73
  "summarize": "tsx src/cli.ts",
77
74
  "s": "tsx src/cli.ts",