@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.
- package/CHANGELOG.md +80 -28
- package/README.md +115 -30
- package/dist/cli.js +1 -1
- package/dist/esm/cache.js +67 -65
- package/dist/esm/cache.js.map +1 -1
- package/dist/esm/cli-main.js +27 -27
- package/dist/esm/cli-main.js.map +1 -1
- package/dist/esm/cli.js +2 -2
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/config.js +310 -166
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/content/asset.js +53 -50
- package/dist/esm/content/asset.js.map +1 -1
- package/dist/esm/content/index.js +1 -1
- package/dist/esm/content/index.js.map +1 -1
- package/dist/esm/costs.js +1 -1
- package/dist/esm/costs.js.map +1 -1
- package/dist/esm/daemon/agent.js +165 -164
- package/dist/esm/daemon/agent.js.map +1 -1
- package/dist/esm/daemon/auto-mode.js +3 -3
- package/dist/esm/daemon/auto-mode.js.map +1 -1
- package/dist/esm/daemon/chat.js +16 -14
- package/dist/esm/daemon/chat.js.map +1 -1
- package/dist/esm/daemon/cli-entrypoint.js +72 -0
- package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
- package/dist/esm/daemon/cli.js +63 -87
- package/dist/esm/daemon/cli.js.map +1 -1
- package/dist/esm/daemon/config.js +15 -15
- package/dist/esm/daemon/config.js.map +1 -1
- package/dist/esm/daemon/constants.js +6 -6
- package/dist/esm/daemon/constants.js.map +1 -1
- package/dist/esm/daemon/env-merge.js.map +1 -1
- package/dist/esm/daemon/env-snapshot.js +36 -31
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +59 -28
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/launchd.js +100 -55
- package/dist/esm/daemon/launchd.js.map +1 -1
- package/dist/esm/daemon/meta.js +5 -5
- package/dist/esm/daemon/meta.js.map +1 -1
- package/dist/esm/daemon/models.js +54 -31
- package/dist/esm/daemon/models.js.map +1 -1
- package/dist/esm/daemon/process-registry.js +15 -15
- package/dist/esm/daemon/process-registry.js.map +1 -1
- package/dist/esm/daemon/schtasks.js +42 -42
- package/dist/esm/daemon/schtasks.js.map +1 -1
- package/dist/esm/daemon/server.js +248 -244
- package/dist/esm/daemon/server.js.map +1 -1
- package/dist/esm/daemon/summarize-progress.js +11 -11
- package/dist/esm/daemon/summarize-progress.js.map +1 -1
- package/dist/esm/daemon/summarize.js +29 -29
- package/dist/esm/daemon/summarize.js.map +1 -1
- package/dist/esm/daemon/systemd.js +47 -47
- package/dist/esm/daemon/systemd.js.map +1 -1
- package/dist/esm/firecrawl.js +12 -12
- package/dist/esm/firecrawl.js.map +1 -1
- package/dist/esm/flags.js +32 -32
- package/dist/esm/flags.js.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/language.js +1 -1
- package/dist/esm/language.js.map +1 -1
- package/dist/esm/llm/cli.js +128 -64
- package/dist/esm/llm/cli.js.map +1 -1
- package/dist/esm/llm/errors.js +1 -1
- package/dist/esm/llm/errors.js.map +1 -1
- package/dist/esm/llm/generate-text.js +107 -98
- package/dist/esm/llm/generate-text.js.map +1 -1
- package/dist/esm/llm/google-models.js +17 -17
- package/dist/esm/llm/google-models.js.map +1 -1
- package/dist/esm/llm/html-to-markdown.js +3 -3
- package/dist/esm/llm/html-to-markdown.js.map +1 -1
- package/dist/esm/llm/model-id.js +38 -16
- package/dist/esm/llm/model-id.js.map +1 -1
- package/dist/esm/llm/prompt.js +5 -5
- package/dist/esm/llm/prompt.js.map +1 -1
- package/dist/esm/llm/providers/anthropic.js +33 -33
- package/dist/esm/llm/providers/anthropic.js.map +1 -1
- package/dist/esm/llm/providers/google.js +19 -19
- package/dist/esm/llm/providers/google.js.map +1 -1
- package/dist/esm/llm/providers/models.js +30 -30
- package/dist/esm/llm/providers/models.js.map +1 -1
- package/dist/esm/llm/providers/openai.js +35 -34
- package/dist/esm/llm/providers/openai.js.map +1 -1
- package/dist/esm/llm/providers/shared.js +8 -8
- package/dist/esm/llm/providers/shared.js.map +1 -1
- package/dist/esm/llm/transcript-to-markdown.js +9 -5
- package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
- package/dist/esm/llm/usage.js +18 -18
- package/dist/esm/llm/usage.js.map +1 -1
- package/dist/esm/logging/daemon.js +21 -21
- package/dist/esm/logging/daemon.js.map +1 -1
- package/dist/esm/logging/ring-file.js +5 -5
- package/dist/esm/logging/ring-file.js.map +1 -1
- package/dist/esm/markitdown.js +21 -19
- package/dist/esm/markitdown.js.map +1 -1
- package/dist/esm/media-cache.js +39 -39
- package/dist/esm/media-cache.js.map +1 -1
- package/dist/esm/model-auto.js +175 -106
- package/dist/esm/model-auto.js.map +1 -1
- package/dist/esm/model-spec.js +52 -42
- package/dist/esm/model-spec.js.map +1 -1
- package/dist/esm/pricing/litellm.js +4 -4
- package/dist/esm/pricing/litellm.js.map +1 -1
- package/dist/esm/processes.js +1 -1
- package/dist/esm/processes.js.map +1 -1
- package/dist/esm/prompts/index.js +1 -1
- package/dist/esm/prompts/index.js.map +1 -1
- package/dist/esm/refresh-free.js +81 -81
- package/dist/esm/refresh-free.js.map +1 -1
- package/dist/esm/run/attachments.js +47 -44
- package/dist/esm/run/attachments.js.map +1 -1
- package/dist/esm/run/bird.js +26 -26
- package/dist/esm/run/bird.js.map +1 -1
- package/dist/esm/run/cache-state.js +7 -7
- package/dist/esm/run/cache-state.js.map +1 -1
- package/dist/esm/run/cli-fallback-state.js +45 -0
- package/dist/esm/run/cli-fallback-state.js.map +1 -0
- package/dist/esm/run/cli-preflight.js +24 -24
- package/dist/esm/run/cli-preflight.js.map +1 -1
- package/dist/esm/run/constants.js +12 -12
- package/dist/esm/run/constants.js.map +1 -1
- package/dist/esm/run/cookies/twitter.js +47 -47
- package/dist/esm/run/cookies/twitter.js.map +1 -1
- package/dist/esm/run/env.js +21 -15
- package/dist/esm/run/env.js.map +1 -1
- package/dist/esm/run/fetch-with-timeout.js +4 -4
- package/dist/esm/run/fetch-with-timeout.js.map +1 -1
- package/dist/esm/run/finish-line.js +68 -68
- package/dist/esm/run/finish-line.js.map +1 -1
- package/dist/esm/run/flows/asset/extract.js +15 -15
- package/dist/esm/run/flows/asset/extract.js.map +1 -1
- package/dist/esm/run/flows/asset/input.js +47 -66
- package/dist/esm/run/flows/asset/input.js.map +1 -1
- package/dist/esm/run/flows/asset/media-policy.js +1 -1
- package/dist/esm/run/flows/asset/media-policy.js.map +1 -1
- package/dist/esm/run/flows/asset/media.js +49 -40
- package/dist/esm/run/flows/asset/media.js.map +1 -1
- package/dist/esm/run/flows/asset/output.js +12 -12
- package/dist/esm/run/flows/asset/output.js.map +1 -1
- package/dist/esm/run/flows/asset/preprocess.js +79 -44
- package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
- package/dist/esm/run/flows/asset/summary.js +173 -106
- package/dist/esm/run/flows/asset/summary.js.map +1 -1
- package/dist/esm/run/flows/url/extract.js +26 -26
- package/dist/esm/run/flows/url/extract.js.map +1 -1
- package/dist/esm/run/flows/url/flow.js +104 -98
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +57 -57
- package/dist/esm/run/flows/url/markdown.js.map +1 -1
- package/dist/esm/run/flows/url/slides-output.js +61 -59
- package/dist/esm/run/flows/url/slides-output.js.map +1 -1
- package/dist/esm/run/flows/url/slides-text.js +85 -85
- package/dist/esm/run/flows/url/slides-text.js.map +1 -1
- package/dist/esm/run/flows/url/summary.js +174 -107
- package/dist/esm/run/flows/url/summary.js.map +1 -1
- package/dist/esm/run/format.js +10 -10
- package/dist/esm/run/format.js.map +1 -1
- package/dist/esm/run/help.js +141 -135
- package/dist/esm/run/help.js.map +1 -1
- package/dist/esm/run/logging.js +10 -10
- package/dist/esm/run/logging.js.map +1 -1
- package/dist/esm/run/markdown.js +12 -12
- package/dist/esm/run/markdown.js.map +1 -1
- package/dist/esm/run/media-cache-state.js +5 -5
- package/dist/esm/run/media-cache-state.js.map +1 -1
- package/dist/esm/run/model-attempts.js.map +1 -1
- package/dist/esm/run/openrouter.js +11 -11
- package/dist/esm/run/openrouter.js.map +1 -1
- package/dist/esm/run/progress.js +1 -1
- package/dist/esm/run/progress.js.map +1 -1
- package/dist/esm/run/run-config.js +16 -16
- package/dist/esm/run/run-config.js.map +1 -1
- package/dist/esm/run/run-context.js +2 -2
- package/dist/esm/run/run-context.js.map +1 -1
- package/dist/esm/run/run-env.js +55 -54
- package/dist/esm/run/run-env.js.map +1 -1
- package/dist/esm/run/run-input.js +3 -3
- package/dist/esm/run/run-input.js.map +1 -1
- package/dist/esm/run/run-metrics.js +16 -16
- package/dist/esm/run/run-metrics.js.map +1 -1
- package/dist/esm/run/run-models.js +28 -23
- package/dist/esm/run/run-models.js.map +1 -1
- package/dist/esm/run/run-output.js +3 -3
- package/dist/esm/run/run-output.js.map +1 -1
- package/dist/esm/run/run-settings.js +83 -34
- package/dist/esm/run/run-settings.js.map +1 -1
- package/dist/esm/run/run-stream.js +4 -4
- package/dist/esm/run/run-stream.js.map +1 -1
- package/dist/esm/run/runner.js +166 -127
- package/dist/esm/run/runner.js.map +1 -1
- package/dist/esm/run/slides-cli.js +43 -42
- package/dist/esm/run/slides-cli.js.map +1 -1
- package/dist/esm/run/slides-render.js +36 -36
- package/dist/esm/run/slides-render.js.map +1 -1
- package/dist/esm/run/stdin-temp-file.js +77 -0
- package/dist/esm/run/stdin-temp-file.js.map +1 -0
- package/dist/esm/run/stream-output.js +7 -7
- package/dist/esm/run/stream-output.js.map +1 -1
- package/dist/esm/run/streaming.js +16 -16
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +57 -51
- package/dist/esm/run/summary-engine.js.map +1 -1
- package/dist/esm/run/summary-llm.js +3 -3
- package/dist/esm/run/summary-llm.js.map +1 -1
- package/dist/esm/run/terminal.js +4 -4
- package/dist/esm/run/terminal.js.map +1 -1
- package/dist/esm/run/tips.js +2 -2
- package/dist/esm/run/tips.js.map +1 -1
- package/dist/esm/run/transcriber-cli.js +49 -49
- package/dist/esm/run/transcriber-cli.js.map +1 -1
- package/dist/esm/run.js +1 -1
- package/dist/esm/run.js.map +1 -1
- package/dist/esm/shared/contracts.js +1 -1
- package/dist/esm/shared/contracts.js.map +1 -1
- package/dist/esm/shared/sse-events.js +16 -16
- package/dist/esm/shared/sse-events.js.map +1 -1
- package/dist/esm/shared/streaming-merge.js +3 -3
- package/dist/esm/shared/streaming-merge.js.map +1 -1
- package/dist/esm/slides/extract.js +258 -249
- package/dist/esm/slides/extract.js.map +1 -1
- package/dist/esm/slides/index.js +3 -3
- package/dist/esm/slides/index.js.map +1 -1
- package/dist/esm/slides/settings.js +14 -14
- package/dist/esm/slides/settings.js.map +1 -1
- package/dist/esm/slides/store.js +9 -9
- package/dist/esm/slides/store.js.map +1 -1
- package/dist/esm/tty/format.js +13 -13
- package/dist/esm/tty/format.js.map +1 -1
- package/dist/esm/tty/osc-progress.js +1 -1
- package/dist/esm/tty/osc-progress.js.map +1 -1
- package/dist/esm/tty/progress/fetch-html.js +14 -14
- package/dist/esm/tty/progress/fetch-html.js.map +1 -1
- package/dist/esm/tty/progress/transcript.js +70 -62
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +20 -9
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/theme.js +92 -92
- package/dist/esm/tty/theme.js.map +1 -1
- package/dist/esm/tty/website-progress.js +32 -32
- package/dist/esm/tty/website-progress.js.map +1 -1
- package/dist/esm/version.js +29 -29
- package/dist/esm/version.js.map +1 -1
- package/dist/types/cache.d.ts +6 -6
- package/dist/types/config.d.ts +49 -7
- package/dist/types/content/asset.d.ts +8 -6
- package/dist/types/content/index.d.ts +1 -1
- package/dist/types/costs.d.ts +3 -3
- package/dist/types/daemon/agent.d.ts +1 -1
- package/dist/types/daemon/auto-mode.d.ts +3 -3
- package/dist/types/daemon/chat.d.ts +2 -2
- package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
- package/dist/types/daemon/config.d.ts +2 -2
- package/dist/types/daemon/env-merge.d.ts +1 -1
- package/dist/types/daemon/env-snapshot.d.ts +1 -1
- package/dist/types/daemon/flow-context.d.ts +7 -7
- package/dist/types/daemon/launchd.d.ts +8 -0
- package/dist/types/daemon/models.d.ts +6 -2
- package/dist/types/daemon/process-registry.d.ts +5 -5
- package/dist/types/daemon/server.d.ts +2 -2
- package/dist/types/daemon/summarize-progress.d.ts +1 -1
- package/dist/types/daemon/summarize.d.ts +7 -7
- package/dist/types/firecrawl.d.ts +1 -1
- package/dist/types/flags.d.ts +11 -11
- package/dist/types/index.d.ts +4 -4
- package/dist/types/language.d.ts +1 -1
- package/dist/types/llm/attachments.d.ts +1 -1
- package/dist/types/llm/cli.d.ts +3 -3
- package/dist/types/llm/generate-text.d.ts +7 -7
- package/dist/types/llm/html-to-markdown.d.ts +3 -3
- package/dist/types/llm/model-id.d.ts +1 -1
- package/dist/types/llm/prompt.d.ts +2 -2
- package/dist/types/llm/providers/anthropic.d.ts +3 -3
- package/dist/types/llm/providers/google.d.ts +3 -3
- package/dist/types/llm/providers/models.d.ts +2 -2
- package/dist/types/llm/providers/openai.d.ts +4 -4
- package/dist/types/llm/providers/shared.d.ts +2 -2
- package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
- package/dist/types/llm/usage.d.ts +1 -1
- package/dist/types/logging/daemon.d.ts +4 -4
- package/dist/types/markitdown.d.ts +1 -1
- package/dist/types/media-cache.d.ts +2 -2
- package/dist/types/model-auto.d.ts +14 -4
- package/dist/types/model-spec.d.ts +10 -10
- package/dist/types/pricing/litellm.d.ts +1 -1
- package/dist/types/processes.d.ts +1 -1
- package/dist/types/prompts/index.d.ts +1 -1
- package/dist/types/run/attachments.d.ts +7 -7
- package/dist/types/run/bird.d.ts +2 -2
- package/dist/types/run/cache-state.d.ts +2 -2
- package/dist/types/run/cli-fallback-state.d.ts +6 -0
- package/dist/types/run/constants.d.ts +1 -1
- package/dist/types/run/cookies/twitter.d.ts +1 -1
- package/dist/types/run/env.d.ts +1 -1
- package/dist/types/run/finish-line.d.ts +5 -5
- package/dist/types/run/flows/asset/extract.d.ts +4 -4
- package/dist/types/run/flows/asset/input.d.ts +9 -3
- package/dist/types/run/flows/asset/media.d.ts +1 -1
- package/dist/types/run/flows/asset/output.d.ts +5 -5
- package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
- package/dist/types/run/flows/asset/summary.d.ts +19 -17
- package/dist/types/run/flows/url/extract.d.ts +1 -1
- package/dist/types/run/flows/url/flow.d.ts +1 -1
- package/dist/types/run/flows/url/markdown.d.ts +6 -6
- package/dist/types/run/flows/url/slides-output.d.ts +7 -7
- package/dist/types/run/flows/url/slides-text.d.ts +9 -9
- package/dist/types/run/flows/url/summary.d.ts +11 -11
- package/dist/types/run/flows/url/types.d.ts +26 -22
- package/dist/types/run/format.d.ts +3 -3
- package/dist/types/run/help.d.ts +1 -1
- package/dist/types/run/media-cache-state.d.ts +2 -2
- package/dist/types/run/model-attempts.d.ts +1 -1
- package/dist/types/run/run-config.d.ts +4 -4
- package/dist/types/run/run-context.d.ts +3 -1
- package/dist/types/run/run-env.d.ts +3 -1
- package/dist/types/run/run-input.d.ts +2 -2
- package/dist/types/run/run-metrics.d.ts +3 -3
- package/dist/types/run/run-models.d.ts +3 -2
- package/dist/types/run/run-output.d.ts +1 -1
- package/dist/types/run/run-settings.d.ts +15 -6
- package/dist/types/run/run-stream.d.ts +2 -2
- package/dist/types/run/runner.d.ts +3 -2
- package/dist/types/run/slides-render.d.ts +4 -4
- package/dist/types/run/stdin-temp-file.d.ts +9 -0
- package/dist/types/run/stream-output.d.ts +1 -1
- package/dist/types/run/streaming.d.ts +4 -4
- package/dist/types/run/summary-engine.d.ts +11 -11
- package/dist/types/run/summary-llm.d.ts +5 -5
- package/dist/types/run/types.d.ts +4 -4
- package/dist/types/run.d.ts +1 -1
- package/dist/types/shared/contracts.d.ts +2 -2
- package/dist/types/shared/sse-events.d.ts +9 -9
- package/dist/types/slides/extract.d.ts +5 -4
- package/dist/types/slides/index.d.ts +5 -5
- package/dist/types/slides/store.d.ts +2 -2
- package/dist/types/slides/types.d.ts +2 -2
- package/dist/types/tty/osc-progress.d.ts +5 -5
- package/dist/types/tty/progress/fetch-html.d.ts +3 -3
- package/dist/types/tty/progress/transcript.d.ts +3 -3
- package/dist/types/tty/spinner.d.ts +2 -2
- package/dist/types/tty/theme.d.ts +2 -2
- package/dist/types/tty/website-progress.d.ts +3 -3
- package/dist/types/version.d.ts +1 -1
- package/docs/agent.md +38 -4
- package/docs/assets/site.js +46 -46
- package/docs/chrome-extension.md +11 -5
- package/docs/cli.md +59 -13
- package/docs/config.md +59 -10
- package/docs/extract-only.md +2 -0
- package/docs/index.html +33 -14
- package/docs/llm.md +7 -4
- package/docs/media.md +5 -4
- package/docs/model-auto.md +3 -2
- package/docs/nvidia-onnx-transcription.md +3 -3
- package/docs/openai.md +1 -1
- package/docs/releasing.md +3 -0
- package/docs/site/404.html +4 -1
- package/docs/site/assets/site.js +46 -46
- package/docs/site/docs/chrome-extension.html +18 -6
- package/docs/site/docs/config.html +29 -8
- package/docs/site/docs/extract-only.html +16 -4
- package/docs/site/docs/firecrawl.html +12 -3
- package/docs/site/docs/index.html +35 -6
- package/docs/site/docs/llm.html +19 -5
- package/docs/site/docs/openai.html +18 -5
- package/docs/site/docs/website.html +29 -9
- package/docs/site/docs/youtube.html +12 -3
- package/docs/site/index.html +33 -14
- package/docs/slides.md +13 -5
- package/docs/smoketest.md +29 -20
- package/docs/timestamps.md +21 -0
- package/docs/website.md +2 -1
- package/docs/youtube.md +4 -0
- package/package.json +36 -35
package/docs/cli.md
CHANGED
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
---
|
|
2
|
-
summary: "CLI model providers and config for Claude, Codex, and
|
|
2
|
+
summary: "CLI model providers and config for Claude, Codex, Gemini, and Cursor Agent."
|
|
3
3
|
read_when:
|
|
4
4
|
- "When changing CLI model integration."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# CLI models
|
|
8
8
|
|
|
9
|
-
Summarize can use installed CLIs (Claude, Codex, Gemini) as local model backends.
|
|
9
|
+
Summarize can use installed CLIs (Claude, Codex, Gemini, Cursor Agent) as local model backends.
|
|
10
10
|
|
|
11
11
|
## Model ids
|
|
12
12
|
|
|
13
13
|
- `cli/claude/<model>` (e.g. `cli/claude/sonnet`)
|
|
14
14
|
- `cli/codex/<model>` (e.g. `cli/codex/gpt-5.2`)
|
|
15
15
|
- `cli/gemini/<model>` (e.g. `cli/gemini/gemini-3-flash-preview`)
|
|
16
|
+
- `cli/agent/<model>` (e.g. `cli/agent/gpt-5.2`)
|
|
16
17
|
|
|
17
18
|
Use `--cli [provider]` (case-insensitive) for the provider default, or `--model cli/<provider>/<model>` to pin a model.
|
|
18
19
|
If `--cli` is provided without a provider, auto selection is used with CLI enabled.
|
|
19
20
|
|
|
20
21
|
## Auto mode
|
|
21
22
|
|
|
22
|
-
Auto mode
|
|
23
|
+
Auto mode can prepend CLI attempts in two ways:
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
- `cli.enabled` set in config:
|
|
26
|
+
- Auto always uses this list order.
|
|
27
|
+
- Also acts as an allowlist for explicit `--cli` / `--model cli/...`.
|
|
28
|
+
- Auto CLI fallback (`cli.autoFallback`, default enabled):
|
|
29
|
+
- Applies only to **implicit** auto (when no model is set via flag/env/config).
|
|
30
|
+
- Default behavior: only when no API key is configured.
|
|
31
|
+
- Default order: `claude, gemini, codex, agent`.
|
|
32
|
+
- Remembers + prioritizes the last successful CLI provider (`~/.summarize/cli-state.json`).
|
|
26
33
|
|
|
27
34
|
Gemini CLI performance: summarize sets `GEMINI_CLI_NO_RELAUNCH=true` for Gemini CLI runs to avoid a costly self-relaunch (can be overridden by setting it yourself).
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
(recommended: `["gemini"]`).
|
|
31
|
-
|
|
32
|
-
Enable CLI attempts:
|
|
36
|
+
Set explicit CLI allowlist:
|
|
33
37
|
|
|
34
38
|
```json
|
|
35
39
|
{
|
|
@@ -37,21 +41,36 @@ Enable CLI attempts:
|
|
|
37
41
|
}
|
|
38
42
|
```
|
|
39
43
|
|
|
40
|
-
|
|
44
|
+
Configure auto CLI fallback:
|
|
41
45
|
|
|
42
46
|
```json
|
|
43
47
|
{
|
|
44
|
-
"cli": {
|
|
48
|
+
"cli": {
|
|
49
|
+
"autoFallback": {
|
|
50
|
+
"enabled": true,
|
|
51
|
+
"onlyWhenNoApiKeys": true,
|
|
52
|
+
"order": ["claude", "gemini", "codex", "agent"]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
45
55
|
}
|
|
46
56
|
```
|
|
47
57
|
|
|
48
|
-
|
|
58
|
+
Disable auto CLI fallback:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"cli": { "autoFallback": { "enabled": false } }
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Note: `--model auto` (explicit) does not trigger auto CLI fallback unless `cli.enabled` is set.
|
|
49
67
|
|
|
50
68
|
## CLI discovery
|
|
51
69
|
|
|
52
70
|
Binary lookup:
|
|
53
71
|
|
|
54
72
|
- `CLAUDE_PATH`, `CODEX_PATH`, `GEMINI_PATH` (optional overrides)
|
|
73
|
+
- `AGENT_PATH` (optional override)
|
|
55
74
|
- Otherwise uses `PATH`
|
|
56
75
|
|
|
57
76
|
## Attachments (images/files)
|
|
@@ -62,19 +81,29 @@ path-based prompt and enables the required tool flags:
|
|
|
62
81
|
- Claude: `--tools Read --dangerously-skip-permissions`
|
|
63
82
|
- Gemini: `--yolo` and `--include-directories <dir>`
|
|
64
83
|
- Codex: `codex exec --output-last-message ...` and `-i <image>` for images
|
|
84
|
+
- Agent: uses built-in file tools in `agent --print` mode (no extra flags)
|
|
65
85
|
|
|
66
86
|
## Config
|
|
67
87
|
|
|
68
88
|
```json
|
|
69
89
|
{
|
|
70
90
|
"cli": {
|
|
71
|
-
"enabled": ["claude", "gemini", "codex"],
|
|
91
|
+
"enabled": ["claude", "gemini", "codex", "agent"],
|
|
92
|
+
"autoFallback": {
|
|
93
|
+
"enabled": true,
|
|
94
|
+
"onlyWhenNoApiKeys": true,
|
|
95
|
+
"order": ["claude", "gemini", "codex", "agent"]
|
|
96
|
+
},
|
|
72
97
|
"codex": { "model": "gpt-5.2" },
|
|
73
98
|
"gemini": { "model": "gemini-3-flash-preview", "extraArgs": ["--verbose"] },
|
|
74
99
|
"claude": {
|
|
75
100
|
"model": "sonnet",
|
|
76
101
|
"binary": "/usr/local/bin/claude",
|
|
77
102
|
"extraArgs": ["--verbose"]
|
|
103
|
+
},
|
|
104
|
+
"agent": {
|
|
105
|
+
"model": "gpt-5.2",
|
|
106
|
+
"binary": "/usr/local/bin/agent"
|
|
78
107
|
}
|
|
79
108
|
}
|
|
80
109
|
}
|
|
@@ -84,6 +113,23 @@ Notes:
|
|
|
84
113
|
|
|
85
114
|
- CLI output is treated as text only (no token accounting).
|
|
86
115
|
- If a CLI call fails, auto mode falls back to the next candidate.
|
|
116
|
+
- Cursor Agent CLI uses the `agent` binary and relies on Cursor CLI auth (login or `CURSOR_API_KEY`).
|
|
117
|
+
- Gemini CLI is invoked in headless mode with `--prompt` for compatibility with current Gemini CLI releases.
|
|
118
|
+
|
|
119
|
+
## Quick smoke test (all CLI providers)
|
|
120
|
+
|
|
121
|
+
Use a tiny local text file and run each provider with a longer timeout (Gemini can be slower):
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
printf "Summarize CLI smoke input.\nOne short paragraph. Reply can be brief.\n" >/tmp/summarize-cli-smoke.txt
|
|
125
|
+
|
|
126
|
+
summarize --cli codex --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
127
|
+
summarize --cli claude --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
128
|
+
summarize --cli gemini --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
129
|
+
summarize --cli agent --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If Agent fails with auth, run `agent login` (interactive) or set `CURSOR_API_KEY`.
|
|
87
133
|
|
|
88
134
|
## Generate free preset (OpenRouter)
|
|
89
135
|
|
package/docs/config.md
CHANGED
|
@@ -37,12 +37,19 @@ For prompt:
|
|
|
37
37
|
2. Config file `prompt`
|
|
38
38
|
3. Built-in default prompt
|
|
39
39
|
|
|
40
|
+
For environment variables:
|
|
41
|
+
|
|
42
|
+
1. Process environment variables
|
|
43
|
+
2. Config file `env`
|
|
44
|
+
3. Legacy config file `apiKeys` (mapped to env names)
|
|
45
|
+
|
|
40
46
|
For UI theme:
|
|
41
47
|
|
|
42
48
|
1. CLI flag `--theme`
|
|
43
49
|
2. Env `SUMMARIZE_THEME`
|
|
44
50
|
3. Config file `ui.theme`
|
|
45
51
|
4. Built-in default (`aurora`)
|
|
52
|
+
|
|
46
53
|
## Format
|
|
47
54
|
|
|
48
55
|
`~/.summarize/config.json`:
|
|
@@ -50,6 +57,7 @@ For UI theme:
|
|
|
50
57
|
```json
|
|
51
58
|
{
|
|
52
59
|
"model": { "id": "google/gemini-3-flash-preview" },
|
|
60
|
+
"env": { "OPENAI_API_KEY": "sk-..." },
|
|
53
61
|
"output": { "language": "auto" },
|
|
54
62
|
"prompt": "Explain like I am five.",
|
|
55
63
|
"ui": { "theme": "ember" }
|
|
@@ -92,6 +100,39 @@ Example:
|
|
|
92
100
|
}
|
|
93
101
|
```
|
|
94
102
|
|
|
103
|
+
## Environment defaults
|
|
104
|
+
|
|
105
|
+
Set any env var in config (process env still wins):
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"env": {
|
|
110
|
+
"OPENAI_API_KEY": "sk-...",
|
|
111
|
+
"OPENROUTER_API_KEY": "sk-or-...",
|
|
112
|
+
"FIRECRAWL_API_KEY": "...",
|
|
113
|
+
"CUSTOM_FLAG": "1"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Legacy shortcut (still supported):
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"apiKeys": {
|
|
123
|
+
"openai": "sk-...",
|
|
124
|
+
"anthropic": "sk-ant-...",
|
|
125
|
+
"google": "...",
|
|
126
|
+
"openrouter": "sk-or-...",
|
|
127
|
+
"xai": "...",
|
|
128
|
+
"zai": "...",
|
|
129
|
+
"apify": "...",
|
|
130
|
+
"firecrawl": "...",
|
|
131
|
+
"fal": "..."
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
95
136
|
## Cache
|
|
96
137
|
|
|
97
138
|
Configure the on-disk SQLite cache (extracted content, transcripts, summaries).
|
|
@@ -272,17 +313,25 @@ Examples:
|
|
|
272
313
|
```json
|
|
273
314
|
{
|
|
274
315
|
"cli": {
|
|
275
|
-
"enabled": ["gemini"],
|
|
316
|
+
"enabled": ["gemini", "agent"],
|
|
317
|
+
"autoFallback": {
|
|
318
|
+
"enabled": true,
|
|
319
|
+
"onlyWhenNoApiKeys": true,
|
|
320
|
+
"order": ["claude", "gemini", "codex", "agent"]
|
|
321
|
+
},
|
|
276
322
|
"codex": { "model": "gpt-5.2" },
|
|
277
|
-
"claude": { "binary": "/usr/local/bin/claude", "extraArgs": ["--verbose"] }
|
|
323
|
+
"claude": { "binary": "/usr/local/bin/claude", "extraArgs": ["--verbose"] },
|
|
324
|
+
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" }
|
|
278
325
|
}
|
|
279
326
|
}
|
|
280
327
|
```
|
|
281
328
|
|
|
282
329
|
Notes:
|
|
283
330
|
|
|
284
|
-
- `cli.enabled` is an allowlist (
|
|
285
|
-
-
|
|
331
|
+
- `cli.enabled` is an allowlist (and order) for auto + explicit CLI model ids.
|
|
332
|
+
- `cli.autoFallback` controls implicit-auto CLI fallback when `cli.enabled` is not set.
|
|
333
|
+
- Default auto fallback order: `claude, gemini, codex, agent`.
|
|
334
|
+
- Auto fallback stores the last successful provider in `~/.summarize/cli-state.json` and prioritizes it on the next run.
|
|
286
335
|
- `cli.<provider>.binary` overrides CLI binary discovery.
|
|
287
336
|
- `cli.<provider>.extraArgs` appends extra CLI args.
|
|
288
337
|
|
|
@@ -318,9 +367,9 @@ Override API endpoints for any provider to use proxies, gateways, or compatible
|
|
|
318
367
|
|
|
319
368
|
Or via environment variables (which take precedence over config):
|
|
320
369
|
|
|
321
|
-
| Provider
|
|
322
|
-
|
|
|
323
|
-
| OpenAI
|
|
324
|
-
| Anthropic
|
|
325
|
-
| Google
|
|
326
|
-
| xAI
|
|
370
|
+
| Provider | Environment Variable(s) |
|
|
371
|
+
| --------- | -------------------------------------------- |
|
|
372
|
+
| OpenAI | `OPENAI_BASE_URL` |
|
|
373
|
+
| Anthropic | `ANTHROPIC_BASE_URL` |
|
|
374
|
+
| Google | `GOOGLE_BASE_URL` (alias: `GEMINI_BASE_URL`) |
|
|
375
|
+
| xAI | `XAI_BASE_URL` |
|
package/docs/extract-only.md
CHANGED
|
@@ -13,6 +13,7 @@ Deprecated alias: `--extract-only`.
|
|
|
13
13
|
## Notes
|
|
14
14
|
|
|
15
15
|
- No summarization LLM call happens in this mode.
|
|
16
|
+
- Input must be a URL (`-` stdin is not supported with `--extract`).
|
|
16
17
|
- No extraction cap is applied. Use `--max-extract-characters <count>` to cap output if needed.
|
|
17
18
|
- `--format md` may still convert HTML to Markdown (depending on `--markdown-mode` and available tools).
|
|
18
19
|
- `--length` is intended for summarization guidance; extraction prints full content.
|
|
@@ -30,4 +31,5 @@ Deprecated alias: `--extract-only`.
|
|
|
30
31
|
- `--markdown-mode readability` uses Readability to extract article HTML before Markdown conversion.
|
|
31
32
|
|
|
32
33
|
Daemon note:
|
|
34
|
+
|
|
33
35
|
- `/v1/summarize` supports `format: "markdown"` + `markdownMode` for extract-only output (use `extractOnly: true`).
|
package/docs/index.html
CHANGED
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
/>
|
|
12
12
|
<link rel="canonical" href="https://summarize.sh/" />
|
|
13
13
|
<meta property="og:title" content="summarize" />
|
|
14
|
-
<meta
|
|
14
|
+
<meta
|
|
15
|
+
property="og:description"
|
|
16
|
+
content="Fast summaries, in the CLI and the Chrome Side Panel."
|
|
17
|
+
/>
|
|
15
18
|
<meta property="og:type" content="website" />
|
|
16
19
|
<meta property="og:url" content="https://summarize.sh/" />
|
|
17
20
|
<meta name="theme-color" content="#0b0f12" />
|
|
@@ -44,9 +47,10 @@
|
|
|
44
47
|
<p class="kicker">CLI + Chrome Extension</p>
|
|
45
48
|
<h1 class="title">Summaries that live where you work.</h1>
|
|
46
49
|
<p class="lede">
|
|
47
|
-
Summarize turns links, files, and media into sharp summaries with a real extraction
|
|
48
|
-
Use the <strong>CLI</strong> for automation or the
|
|
49
|
-
summaries of the current tab.
|
|
50
|
+
Summarize turns links, files, and media into sharp summaries with a real extraction
|
|
51
|
+
pipeline. Use the <strong>CLI</strong> for automation or the
|
|
52
|
+
<strong>Chrome Side Panel</strong> for one-click summaries of the current tab.
|
|
53
|
+
Supports <strong>local, paid, and free</strong> models.
|
|
50
54
|
</p>
|
|
51
55
|
<div class="ctaRow">
|
|
52
56
|
<a class="btn btn--primary" href="./docs/index.html">Docs</a>
|
|
@@ -71,7 +75,11 @@
|
|
|
71
75
|
<figcaption>CLI: streaming summaries in the terminal.</figcaption>
|
|
72
76
|
</figure>
|
|
73
77
|
<figure class="shot shot--ext">
|
|
74
|
-
<img
|
|
78
|
+
<img
|
|
79
|
+
src="./assets/summarize-extension.png"
|
|
80
|
+
alt="Summarize Chrome extension side panel"
|
|
81
|
+
loading="lazy"
|
|
82
|
+
/>
|
|
75
83
|
<figcaption>Extension: a live Side Panel for the active tab.</figcaption>
|
|
76
84
|
</figure>
|
|
77
85
|
</div>
|
|
@@ -85,13 +93,18 @@
|
|
|
85
93
|
<h2>Fast summaries, scripted or interactive.</h2>
|
|
86
94
|
</div>
|
|
87
95
|
<p>
|
|
88
|
-
Built for automation: extract clean text, summarize with your model, and output JSON or
|
|
89
|
-
Works with URLs, PDFs, images, audio/video, YouTube, and podcasts.
|
|
96
|
+
Built for automation: extract clean text, summarize with your model, and output JSON or
|
|
97
|
+
Markdown. Works with URLs, PDFs, images, audio/video, YouTube, and podcasts.
|
|
90
98
|
</p>
|
|
91
99
|
<ul class="list">
|
|
92
100
|
<li><strong>Extract + summarize</strong> with Firecrawl fallback.</li>
|
|
93
|
-
<li
|
|
94
|
-
|
|
101
|
+
<li>
|
|
102
|
+
<strong>Media pipeline</strong> with transcript-first flow and Whisper fallback.
|
|
103
|
+
</li>
|
|
104
|
+
<li>
|
|
105
|
+
<strong>Scriptable output</strong> via <code>--json</code>, <code>--extract</code>,
|
|
106
|
+
<code>--metrics</code>.
|
|
107
|
+
</li>
|
|
95
108
|
</ul>
|
|
96
109
|
<div class="cardCode">
|
|
97
110
|
<pre><code>summarize "https://example.com" --length long
|
|
@@ -110,8 +123,8 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
|
|
|
110
123
|
<h2>Summaries in the Side Panel, one click away.</h2>
|
|
111
124
|
</div>
|
|
112
125
|
<p>
|
|
113
|
-
A real Chrome Side Panel with a tiny local daemon. It streams Markdown summaries for the
|
|
114
|
-
with auto-summary on navigation.
|
|
126
|
+
A real Chrome Side Panel with a tiny local daemon. It streams Markdown summaries for the
|
|
127
|
+
active tab, with auto-summary on navigation.
|
|
115
128
|
</p>
|
|
116
129
|
<ol class="steps">
|
|
117
130
|
<li>Install the CLI + daemon.</li>
|
|
@@ -119,11 +132,14 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
|
|
|
119
132
|
<li>Open Side Panel and connect with the token.</li>
|
|
120
133
|
</ol>
|
|
121
134
|
<div class="callout">
|
|
122
|
-
<strong>Runs locally</strong> on your machine. The daemon is localhost-only and
|
|
135
|
+
<strong>Runs locally</strong> on your machine. The daemon is localhost-only and
|
|
136
|
+
token-protected.
|
|
123
137
|
</div>
|
|
124
138
|
<div class="ctaRow">
|
|
125
139
|
<a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
|
|
126
|
-
<a class="btn" href="https://github.com/steipete/summarize/releases/latest"
|
|
140
|
+
<a class="btn" href="https://github.com/steipete/summarize/releases/latest"
|
|
141
|
+
>Latest release</a
|
|
142
|
+
>
|
|
127
143
|
</div>
|
|
128
144
|
</article>
|
|
129
145
|
</section>
|
|
@@ -196,7 +212,10 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
|
|
|
196
212
|
|
|
197
213
|
<footer class="footer">
|
|
198
214
|
<span>Canonical: <a href="https://summarize.sh">summarize.sh</a></span>
|
|
199
|
-
<span
|
|
215
|
+
<span
|
|
216
|
+
><a href="./docs/index.html">Docs</a> ·
|
|
217
|
+
<a href="https://github.com/steipete/summarize">GitHub</a></span
|
|
218
|
+
>
|
|
200
219
|
</footer>
|
|
201
220
|
</main>
|
|
202
221
|
|
package/docs/llm.md
CHANGED
|
@@ -7,7 +7,8 @@ read_when:
|
|
|
7
7
|
# LLM / summarization mode
|
|
8
8
|
|
|
9
9
|
By default `summarize` will call an LLM using **direct provider API keys**. When CLI tools are
|
|
10
|
-
installed, auto mode can use local CLI models
|
|
10
|
+
installed, auto mode can use local CLI models via `cli.enabled` or implicit auto CLI fallback
|
|
11
|
+
(`cli.autoFallback`; see `docs/cli.md`).
|
|
11
12
|
|
|
12
13
|
## Defaults
|
|
13
14
|
|
|
@@ -17,6 +18,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
|
|
|
17
18
|
## Env
|
|
18
19
|
|
|
19
20
|
- `.env` (optional): when running the CLI, `summarize` also reads `.env` in the current working directory and merges it into the environment (real env vars win).
|
|
21
|
+
- `~/.summarize/config.json` `env` (optional): fallback env defaults when process env is missing/blank.
|
|
20
22
|
- `XAI_API_KEY` (required for `xai/...` models)
|
|
21
23
|
- `XAI_BASE_URL` (optional; override xAI API endpoint)
|
|
22
24
|
- `OPENAI_API_KEY` (required for `openai/...` models)
|
|
@@ -30,7 +32,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
|
|
|
30
32
|
- `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
|
|
31
33
|
- `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
|
|
32
34
|
- `SUMMARIZE_MODEL` (optional; overrides default model selection)
|
|
33
|
-
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` (optional; override CLI binary paths)
|
|
35
|
+
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` (optional; override CLI binary paths)
|
|
34
36
|
|
|
35
37
|
## Flags
|
|
36
38
|
|
|
@@ -39,6 +41,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
|
|
|
39
41
|
- `cli/codex/gpt-5.2`
|
|
40
42
|
- `cli/claude/sonnet`
|
|
41
43
|
- `cli/gemini/gemini-3-flash-preview`
|
|
44
|
+
- `cli/agent/gpt-5.2`
|
|
42
45
|
- `google/gemini-3-flash-preview`
|
|
43
46
|
- `openai/gpt-5-mini`
|
|
44
47
|
- `zai/glm-4.7`
|
|
@@ -47,7 +50,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
|
|
|
47
50
|
- `anthropic/claude-sonnet-4-5`
|
|
48
51
|
- `openrouter/meta-llama/llama-3.3-70b-instruct:free` (force OpenRouter)
|
|
49
52
|
- `--cli [provider]`
|
|
50
|
-
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
53
|
+
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
51
54
|
- `--model auto`
|
|
52
55
|
- See `docs/model-auto.md`
|
|
53
56
|
- `--model <preset>`
|
|
@@ -65,7 +68,7 @@ installed, auto mode can use local CLI models when `cli.enabled` is set (see `do
|
|
|
65
68
|
- `--video-mode auto|transcript|understand`
|
|
66
69
|
- Only relevant for video inputs / video-only pages.
|
|
67
70
|
- `--length short|medium|long|xl|xxl|<chars>`
|
|
68
|
-
- This is
|
|
71
|
+
- This is _soft guidance_ to the model (no hard truncation).
|
|
69
72
|
- Minimum numeric value: 50 chars.
|
|
70
73
|
- Default: `long`.
|
|
71
74
|
- Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
|
package/docs/media.md
CHANGED
|
@@ -13,8 +13,8 @@ read_when:
|
|
|
13
13
|
|
|
14
14
|
## Transcript resolution order
|
|
15
15
|
|
|
16
|
-
1
|
|
17
|
-
2
|
|
16
|
+
1. Embedded captions (VTT/JSON) when available.
|
|
17
|
+
2. yt-dlp download + Whisper transcription (Groq first; then ONNX/local/OpenAI/FAL fallback).
|
|
18
18
|
|
|
19
19
|
## CLI behavior
|
|
20
20
|
|
|
@@ -22,8 +22,9 @@ read_when:
|
|
|
22
22
|
- Direct media URLs (mp4/webm/m4a/etc) skip HTML and transcribe.
|
|
23
23
|
- Local audio/video files are routed through the same transcript-first pipeline.
|
|
24
24
|
- YouTube still uses the YouTube transcript pipeline (captions → yt-dlp fallback).
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
- X/Twitter status URLs with detected video auto-switch to transcript-first (yt-dlp), even in auto mode.
|
|
26
|
+
- X broadcasts (`/i/broadcasts/...`) are treated as media-only and go transcript-first by default.
|
|
27
|
+
- Local media files are capped at 2 GB; remote media URLs are best-effort via yt-dlp (no explicit size limit).
|
|
27
28
|
|
|
28
29
|
## Chrome extension behavior
|
|
29
30
|
|
package/docs/model-auto.md
CHANGED
|
@@ -16,8 +16,9 @@ This is also the built-in default when you don’t specify a model.
|
|
|
16
16
|
- Skips attempts that don’t have the required API key configured.
|
|
17
17
|
- On any request error, tries the next attempt.
|
|
18
18
|
- If no model is usable, prints the extracted text (no LLM summary). Use `--extract` if you want the raw extracted content even when models are available.
|
|
19
|
-
- Auto prepends CLI attempts
|
|
20
|
-
-
|
|
19
|
+
- Auto prepends CLI attempts when either:
|
|
20
|
+
- `cli.enabled` is set (order follows `cli.enabled`), or
|
|
21
|
+
- implicit auto selection is active and `cli.autoFallback` allows it.
|
|
21
22
|
|
|
22
23
|
## OpenRouter vs native
|
|
23
24
|
|
|
@@ -10,8 +10,8 @@ Summarize can now run local transcription through NVIDIA's Parakeet-TDT 0.6B-v3
|
|
|
10
10
|
|
|
11
11
|
## How to enable
|
|
12
12
|
|
|
13
|
-
1
|
|
14
|
-
2
|
|
13
|
+
1. Install a CLI capable of running the ONNX models (e.g. `sherpa-onnx` or a custom wrapper). Homebrew may not have a formula; use upstream binaries or build from source if needed. The CLI must emit the transcribed text on stdout and accept a single WAV input path. **Summarize now downloads the Hugging Face model files automatically on first use** into the cache (see below), so your command template can reference the provided paths.
|
|
14
|
+
2. Set one (or both) command templates:
|
|
15
15
|
|
|
16
16
|
- Recommended (no shell): provide a JSON array (command + args):
|
|
17
17
|
- `SUMMARIZE_ONNX_PARAKEET_CMD='["sherpa-onnx", "...", "--tokens", "{vocab}", "--offline-ctc-model", "{model}", "--input-wav", "{input}"]'`
|
|
@@ -29,7 +29,7 @@ Placeholders:
|
|
|
29
29
|
- `{vocab}` — downloaded `vocab.txt` path
|
|
30
30
|
- `{model_dir}` — parent directory containing the downloaded files
|
|
31
31
|
|
|
32
|
-
3
|
|
32
|
+
3. Pick the ONNX model via CLI or env:
|
|
33
33
|
|
|
34
34
|
- Auto (default): leave `SUMMARIZE_TRANSCRIBER` unset or set `SUMMARIZE_TRANSCRIBER=auto`
|
|
35
35
|
- CLI: `--transcriber parakeet` or `--transcriber canary`
|
package/docs/openai.md
CHANGED
|
@@ -19,7 +19,7 @@ For the full model/provider matrix, see `docs/llm.md`.
|
|
|
19
19
|
|
|
20
20
|
- `--model openai/<model>`
|
|
21
21
|
- `--length short|medium|long|xl|xxl|<chars>`
|
|
22
|
-
- This is
|
|
22
|
+
- This is _soft guidance_ to the model (no hard truncation).
|
|
23
23
|
- `--max-output-tokens <count>`
|
|
24
24
|
- Hard cap for output tokens (optional).
|
|
25
25
|
- `--json` (includes prompt + summary in one JSON object)
|
package/docs/releasing.md
CHANGED
|
@@ -5,11 +5,13 @@ summary: "Release checklist + Homebrew tap update."
|
|
|
5
5
|
# Releasing
|
|
6
6
|
|
|
7
7
|
## Goals
|
|
8
|
+
|
|
8
9
|
- Ship npm packages (core first, then CLI).
|
|
9
10
|
- Tag + GitHub release.
|
|
10
11
|
- Update Homebrew tap so `brew install steipete/tap/summarize` matches latest tag.
|
|
11
12
|
|
|
12
13
|
## Checklist
|
|
14
|
+
|
|
13
15
|
1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag → tap).
|
|
14
16
|
2. Create GitHub release for the new tag (match version, attach notes/assets as needed).
|
|
15
17
|
3. If you didn’t run `tap` in the script, update the Homebrew tap formula for `summarize`:
|
|
@@ -22,5 +24,6 @@ summary: "Release checklist + Homebrew tap update."
|
|
|
22
24
|
5. If anything fails, fix and re-cut the release (no partials).
|
|
23
25
|
|
|
24
26
|
## Common failure
|
|
27
|
+
|
|
25
28
|
- NPM/GitHub release updated, tap not updated → users stuck on old version.
|
|
26
29
|
Fix: always do step 3–4 before announcing.
|
package/docs/site/404.html
CHANGED
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
<title>Not found — summarize</title>
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
10
|
-
<link
|
|
10
|
+
<link
|
|
11
|
+
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
|
|
12
|
+
rel="stylesheet"
|
|
13
|
+
/>
|
|
11
14
|
<link rel="stylesheet" href="./assets/site.css" />
|
|
12
15
|
</head>
|
|
13
16
|
<body>
|
package/docs/site/assets/site.js
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
const canonicalHost =
|
|
2
|
-
const redirectHostnames = new Set([
|
|
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(
|
|
18
|
-
const navDocs = document.querySelector('a[data-nav="docs"]')
|
|
19
|
-
const navHome = document.querySelector('a[data-nav="home"]')
|
|
20
|
-
if (navDocs && isDocs) navDocs.setAttribute(
|
|
21
|
-
if (navHome && !isDocs) navHome.setAttribute(
|
|
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(
|
|
23
|
+
const sideLinks = document.querySelectorAll(".side a[href]");
|
|
24
24
|
for (const a of sideLinks) {
|
|
25
|
-
const href = a.getAttribute(
|
|
26
|
-
if (!href) continue
|
|
27
|
-
const normalized = href.replace(/^\.\//,
|
|
28
|
-
if (path.endsWith(normalized)) a.setAttribute(
|
|
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(
|
|
33
|
+
const buttons = document.querySelectorAll("[data-copy]");
|
|
34
34
|
const handleCopyClick = async (button) => {
|
|
35
|
-
const selector = button.getAttribute(
|
|
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 =
|
|
43
|
-
button.setAttribute(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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();
|