@steipete/summarize 0.11.0 → 0.12.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.
- package/CHANGELOG.md +44 -1
- package/README.md +63 -17
- package/dist/cli.js +1 -1
- package/dist/esm/cache-keys.js +75 -0
- package/dist/esm/cache-keys.js.map +1 -0
- package/dist/esm/cache-slides-cleanup.js +47 -0
- package/dist/esm/cache-slides-cleanup.js.map +1 -0
- package/dist/esm/cache.js +14 -91
- package/dist/esm/cache.js.map +1 -1
- package/dist/esm/config/env.js +49 -0
- package/dist/esm/config/env.js.map +1 -0
- package/dist/esm/config/model.js +193 -0
- package/dist/esm/config/model.js.map +1 -0
- package/dist/esm/config/parse-helpers.js +50 -0
- package/dist/esm/config/parse-helpers.js.map +1 -0
- package/dist/esm/config/read.js +83 -0
- package/dist/esm/config/read.js.map +1 -0
- package/dist/esm/config/sections.js +438 -0
- package/dist/esm/config/sections.js.map +1 -0
- package/dist/esm/config/types.js +2 -0
- package/dist/esm/config/types.js.map +1 -0
- package/dist/esm/config.js +24 -807
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/content/asset.js +2 -2
- package/dist/esm/content/asset.js.map +1 -1
- package/dist/esm/daemon/agent-model.js +235 -0
- package/dist/esm/daemon/agent-model.js.map +1 -0
- package/dist/esm/daemon/agent-request.js +87 -0
- package/dist/esm/daemon/agent-request.js.map +1 -0
- package/dist/esm/daemon/agent.js +42 -243
- package/dist/esm/daemon/agent.js.map +1 -1
- package/dist/esm/daemon/chat.js +69 -8
- package/dist/esm/daemon/chat.js.map +1 -1
- package/dist/esm/daemon/cli.js +21 -4
- package/dist/esm/daemon/cli.js.map +1 -1
- package/dist/esm/daemon/config.js +65 -9
- package/dist/esm/daemon/config.js.map +1 -1
- package/dist/esm/daemon/env-snapshot.js +4 -0
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +8 -1
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/models.js +16 -0
- package/dist/esm/daemon/models.js.map +1 -1
- package/dist/esm/daemon/process-registry.js.map +1 -1
- package/dist/esm/daemon/server-admin-routes.js +134 -0
- package/dist/esm/daemon/server-admin-routes.js.map +1 -0
- package/dist/esm/daemon/server-agent-route.js +104 -0
- package/dist/esm/daemon/server-agent-route.js.map +1 -0
- package/dist/esm/daemon/server-http.js +89 -0
- package/dist/esm/daemon/server-http.js.map +1 -0
- package/dist/esm/daemon/server-session-routes.js +209 -0
- package/dist/esm/daemon/server-session-routes.js.map +1 -0
- package/dist/esm/daemon/server-session.js +118 -0
- package/dist/esm/daemon/server-session.js.map +1 -0
- package/dist/esm/daemon/server-sse.js +28 -0
- package/dist/esm/daemon/server-sse.js.map +1 -0
- package/dist/esm/daemon/server-summarize-execution.js +357 -0
- package/dist/esm/daemon/server-summarize-execution.js.map +1 -0
- package/dist/esm/daemon/server-summarize-request.js +119 -0
- package/dist/esm/daemon/server-summarize-request.js.map +1 -0
- package/dist/esm/daemon/server.js +72 -1121
- package/dist/esm/daemon/server.js.map +1 -1
- package/dist/esm/daemon/summarize-progress.js +1 -1
- package/dist/esm/daemon/summarize-progress.js.map +1 -1
- package/dist/esm/daemon/summarize.js.map +1 -1
- package/dist/esm/llm/cli-exec.js +75 -0
- package/dist/esm/llm/cli-exec.js.map +1 -0
- package/dist/esm/llm/cli-provider-output.js +191 -0
- package/dist/esm/llm/cli-provider-output.js.map +1 -0
- package/dist/esm/llm/cli.js +3 -212
- package/dist/esm/llm/cli.js.map +1 -1
- package/dist/esm/llm/generate-text-document.js +109 -0
- package/dist/esm/llm/generate-text-document.js.map +1 -0
- package/dist/esm/llm/generate-text-shared.js +102 -0
- package/dist/esm/llm/generate-text-shared.js.map +1 -0
- package/dist/esm/llm/generate-text-stream.js +258 -0
- package/dist/esm/llm/generate-text-stream.js.map +1 -0
- package/dist/esm/llm/generate-text.js +145 -480
- package/dist/esm/llm/generate-text.js.map +1 -1
- package/dist/esm/llm/model-id.js +21 -20
- package/dist/esm/llm/model-id.js.map +1 -1
- package/dist/esm/llm/provider-capabilities.js +2 -0
- package/dist/esm/llm/provider-capabilities.js.map +1 -0
- package/dist/esm/llm/provider-profile.js +142 -0
- package/dist/esm/llm/provider-profile.js.map +1 -0
- package/dist/esm/llm/providers/google.js +42 -5
- package/dist/esm/llm/providers/google.js.map +1 -1
- package/dist/esm/llm/providers/models.js +13 -0
- package/dist/esm/llm/providers/models.js.map +1 -1
- package/dist/esm/llm/providers/openai.js.map +1 -1
- package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
- package/dist/esm/model-auto-cli.js +89 -0
- package/dist/esm/model-auto-cli.js.map +1 -0
- package/dist/esm/model-auto-rules.js +86 -0
- package/dist/esm/model-auto-rules.js.map +1 -0
- package/dist/esm/model-auto.js +10 -245
- package/dist/esm/model-auto.js.map +1 -1
- package/dist/esm/model-spec.js +23 -17
- package/dist/esm/model-spec.js.map +1 -1
- package/dist/esm/refresh-free.js +1 -1
- package/dist/esm/refresh-free.js.map +1 -1
- package/dist/esm/run/attachments.js +1 -1
- package/dist/esm/run/attachments.js.map +1 -1
- package/dist/esm/run/bird/exec.js +23 -0
- package/dist/esm/run/bird/exec.js.map +1 -0
- package/dist/esm/run/bird/media.js +171 -0
- package/dist/esm/run/bird/media.js.map +1 -0
- package/dist/esm/run/bird/parse.js +82 -0
- package/dist/esm/run/bird/parse.js.map +1 -0
- package/dist/esm/run/bird/types.js +2 -0
- package/dist/esm/run/bird/types.js.map +1 -0
- package/dist/esm/run/bird.js +86 -144
- package/dist/esm/run/bird.js.map +1 -1
- package/dist/esm/run/cache-state.js.map +1 -1
- package/dist/esm/run/constants.js +2 -1
- package/dist/esm/run/constants.js.map +1 -1
- package/dist/esm/run/env.js +3 -0
- package/dist/esm/run/env.js.map +1 -1
- package/dist/esm/run/finish-line-labels.js +76 -0
- package/dist/esm/run/finish-line-labels.js.map +1 -0
- package/dist/esm/run/finish-line-lengths.js +96 -0
- package/dist/esm/run/finish-line-lengths.js.map +1 -0
- package/dist/esm/run/finish-line.js +3 -169
- package/dist/esm/run/finish-line.js.map +1 -1
- package/dist/esm/run/flows/asset/extract.js.map +1 -1
- package/dist/esm/run/flows/asset/input.js +1 -1
- package/dist/esm/run/flows/asset/input.js.map +1 -1
- package/dist/esm/run/flows/asset/media.js +19 -10
- package/dist/esm/run/flows/asset/media.js.map +1 -1
- package/dist/esm/run/flows/asset/output.js.map +1 -1
- package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
- package/dist/esm/run/flows/asset/summary-attempts.js +109 -0
- package/dist/esm/run/flows/asset/summary-attempts.js.map +1 -0
- package/dist/esm/run/flows/asset/summary.js +19 -107
- package/dist/esm/run/flows/asset/summary.js.map +1 -1
- package/dist/esm/run/flows/url/extract.js +7 -4
- package/dist/esm/run/flows/url/extract.js.map +1 -1
- package/dist/esm/run/flows/url/flow-progress.js +119 -0
- package/dist/esm/run/flows/url/flow-progress.js.map +1 -0
- package/dist/esm/run/flows/url/flow.js +22 -93
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +21 -3
- package/dist/esm/run/flows/url/markdown.js.map +1 -1
- package/dist/esm/run/flows/url/progress-status.js +56 -0
- package/dist/esm/run/flows/url/progress-status.js.map +1 -0
- package/dist/esm/run/flows/url/slides-output-render.js +78 -0
- package/dist/esm/run/flows/url/slides-output-render.js.map +1 -0
- package/dist/esm/run/flows/url/slides-output-state.js +86 -0
- package/dist/esm/run/flows/url/slides-output-state.js.map +1 -0
- package/dist/esm/run/flows/url/slides-output-stream.js +271 -0
- package/dist/esm/run/flows/url/slides-output-stream.js.map +1 -0
- package/dist/esm/run/flows/url/slides-output.js +29 -422
- package/dist/esm/run/flows/url/slides-output.js.map +1 -1
- package/dist/esm/run/flows/url/slides-text-markdown.js +431 -0
- package/dist/esm/run/flows/url/slides-text-markdown.js.map +1 -0
- package/dist/esm/run/flows/url/slides-text-transcript.js +199 -0
- package/dist/esm/run/flows/url/slides-text-transcript.js.map +1 -0
- package/dist/esm/run/flows/url/slides-text-types.js +2 -0
- package/dist/esm/run/flows/url/slides-text-types.js.map +1 -0
- package/dist/esm/run/flows/url/slides-text.js +2 -627
- package/dist/esm/run/flows/url/slides-text.js.map +1 -1
- package/dist/esm/run/flows/url/summary-finish.js +34 -0
- package/dist/esm/run/flows/url/summary-finish.js.map +1 -0
- package/dist/esm/run/flows/url/summary-json.js +32 -0
- package/dist/esm/run/flows/url/summary-json.js.map +1 -0
- package/dist/esm/run/flows/url/summary-prompt.js +147 -0
- package/dist/esm/run/flows/url/summary-prompt.js.map +1 -0
- package/dist/esm/run/flows/url/summary-resolution.js +320 -0
- package/dist/esm/run/flows/url/summary-resolution.js.map +1 -0
- package/dist/esm/run/flows/url/summary-timestamps.js +136 -0
- package/dist/esm/run/flows/url/summary-timestamps.js.map +1 -0
- package/dist/esm/run/flows/url/summary.js +49 -543
- package/dist/esm/run/flows/url/summary.js.map +1 -1
- package/dist/esm/run/help.js +9 -3
- package/dist/esm/run/help.js.map +1 -1
- package/dist/esm/run/markdown-transforms.js +89 -0
- package/dist/esm/run/markdown-transforms.js.map +1 -0
- package/dist/esm/run/markdown.js +1 -96
- package/dist/esm/run/markdown.js.map +1 -1
- package/dist/esm/run/run-env.js +28 -7
- package/dist/esm/run/run-env.js.map +1 -1
- package/dist/esm/run/run-settings-parse.js +73 -0
- package/dist/esm/run/run-settings-parse.js.map +1 -0
- package/dist/esm/run/run-settings.js +1 -72
- package/dist/esm/run/run-settings.js.map +1 -1
- package/dist/esm/run/runner-contexts.js +116 -0
- package/dist/esm/run/runner-contexts.js.map +1 -0
- package/dist/esm/run/runner-execution.js +62 -0
- package/dist/esm/run/runner-execution.js.map +1 -0
- package/dist/esm/run/runner-flags.js +97 -0
- package/dist/esm/run/runner-flags.js.map +1 -0
- package/dist/esm/run/runner-setup.js +109 -0
- package/dist/esm/run/runner-setup.js.map +1 -0
- package/dist/esm/run/runner-slides.js +38 -0
- package/dist/esm/run/runner-slides.js.map +1 -0
- package/dist/esm/run/runner.js +99 -390
- package/dist/esm/run/runner.js.map +1 -1
- package/dist/esm/run/slides-render.js +5 -2
- package/dist/esm/run/slides-render.js.map +1 -1
- package/dist/esm/run/stdin-temp-file.js +1 -1
- package/dist/esm/run/stdin-temp-file.js.map +1 -1
- package/dist/esm/run/streaming.js +1 -0
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +26 -10
- package/dist/esm/run/summary-engine.js.map +1 -1
- package/dist/esm/run/summary-llm.js +2 -1
- package/dist/esm/run/summary-llm.js.map +1 -1
- package/dist/esm/run/terminal.js +4 -1
- package/dist/esm/run/terminal.js.map +1 -1
- package/dist/esm/run/transcriber-cli.js +1 -1
- package/dist/esm/run/transcriber-cli.js.map +1 -1
- package/dist/esm/slides/download.js +242 -0
- package/dist/esm/slides/download.js.map +1 -0
- package/dist/esm/slides/extract-finalize.js +98 -0
- package/dist/esm/slides/extract-finalize.js.map +1 -0
- package/dist/esm/slides/extract.js +64 -1621
- package/dist/esm/slides/extract.js.map +1 -1
- package/dist/esm/slides/frame-extraction.js +372 -0
- package/dist/esm/slides/frame-extraction.js.map +1 -0
- package/dist/esm/slides/ingest.js +167 -0
- package/dist/esm/slides/ingest.js.map +1 -0
- package/dist/esm/slides/ocr.js +91 -0
- package/dist/esm/slides/ocr.js.map +1 -0
- package/dist/esm/slides/process.js +218 -0
- package/dist/esm/slides/process.js.map +1 -0
- package/dist/esm/slides/scene-detection.js +387 -0
- package/dist/esm/slides/scene-detection.js.map +1 -0
- package/dist/esm/slides/source-id.js +42 -0
- package/dist/esm/slides/source-id.js.map +1 -0
- package/dist/esm/tty/progress/fetch-html.js.map +1 -1
- package/dist/esm/tty/progress/transcript.js +21 -8
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +8 -2
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/website-progress.js +5 -3
- package/dist/esm/tty/website-progress.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/cache-keys.d.ts +44 -0
- package/dist/types/cache-slides-cleanup.d.ts +1 -0
- package/dist/types/cache.d.ts +1 -9
- package/dist/types/config/env.d.ts +6 -0
- package/dist/types/config/model.d.ts +3 -0
- package/dist/types/config/parse-helpers.d.ts +7 -0
- package/dist/types/config/read.d.ts +2 -0
- package/dist/types/config/sections.d.ts +33 -0
- package/dist/types/config/types.d.ts +230 -0
- package/dist/types/config.d.ts +3 -209
- package/dist/types/costs.d.ts +1 -1
- package/dist/types/daemon/agent-model.d.ts +40 -0
- package/dist/types/daemon/agent-request.d.ts +14 -0
- package/dist/types/daemon/chat.d.ts +3 -1
- package/dist/types/daemon/config.d.ts +13 -2
- package/dist/types/daemon/env-snapshot.d.ts +1 -1
- package/dist/types/daemon/flow-context.d.ts +1 -1
- package/dist/types/daemon/models.d.ts +1 -0
- package/dist/types/daemon/server-admin-routes.d.ts +22 -0
- package/dist/types/daemon/server-agent-route.d.ts +9 -0
- package/dist/types/daemon/server-http.d.ts +10 -0
- package/dist/types/daemon/server-session-routes.d.ts +11 -0
- package/dist/types/daemon/server-session.d.ts +52 -0
- package/dist/types/daemon/server-sse.d.ts +12 -0
- package/dist/types/daemon/server-summarize-execution.d.ts +70 -0
- package/dist/types/daemon/server-summarize-request.d.ts +36 -0
- package/dist/types/daemon/server.d.ts +3 -4
- package/dist/types/daemon/summarize.d.ts +1 -1
- package/dist/types/llm/cli-exec.d.ts +13 -0
- package/dist/types/llm/cli-provider-output.d.ts +16 -0
- package/dist/types/llm/generate-text-document.d.ts +34 -0
- package/dist/types/llm/generate-text-shared.d.ts +25 -0
- package/dist/types/llm/generate-text-stream.d.ts +26 -0
- package/dist/types/llm/generate-text.d.ts +6 -26
- package/dist/types/llm/html-to-markdown.d.ts +1 -1
- package/dist/types/llm/model-id.d.ts +1 -1
- package/dist/types/llm/provider-capabilities.d.ts +2 -0
- package/dist/types/llm/provider-profile.d.ts +31 -0
- package/dist/types/llm/providers/google.d.ts +6 -0
- package/dist/types/llm/providers/models.d.ts +5 -0
- package/dist/types/llm/transcript-to-markdown.d.ts +1 -1
- package/dist/types/model-auto-cli.d.ts +15 -0
- package/dist/types/model-auto-rules.d.ts +7 -0
- package/dist/types/model-auto.d.ts +5 -7
- package/dist/types/model-spec.d.ts +2 -2
- package/dist/types/run/attachments.d.ts +2 -2
- package/dist/types/run/bird/exec.d.ts +1 -0
- package/dist/types/run/bird/media.d.ts +3 -0
- package/dist/types/run/bird/parse.d.ts +3 -0
- package/dist/types/run/bird/types.d.ts +18 -0
- package/dist/types/run/bird.d.ts +12 -17
- package/dist/types/run/cache-state.d.ts +1 -1
- package/dist/types/run/constants.d.ts +2 -1
- package/dist/types/run/env.d.ts +1 -0
- package/dist/types/run/finish-line-labels.d.ts +29 -0
- package/dist/types/run/finish-line-lengths.d.ts +23 -0
- package/dist/types/run/finish-line.d.ts +2 -52
- package/dist/types/run/flows/asset/extract.d.ts +1 -1
- package/dist/types/run/flows/asset/input.d.ts +1 -1
- package/dist/types/run/flows/asset/preprocess.d.ts +1 -1
- package/dist/types/run/flows/asset/summary-attempts.d.ts +24 -0
- package/dist/types/run/flows/asset/summary.d.ts +6 -2
- package/dist/types/run/flows/url/flow-progress.d.ts +41 -0
- package/dist/types/run/flows/url/markdown.d.ts +2 -2
- package/dist/types/run/flows/url/progress-status.d.ts +16 -0
- package/dist/types/run/flows/url/slides-output-render.d.ts +43 -0
- package/dist/types/run/flows/url/slides-output-state.d.ts +21 -0
- package/dist/types/run/flows/url/slides-output-stream.d.ts +18 -0
- package/dist/types/run/flows/url/slides-output.d.ts +2 -17
- package/dist/types/run/flows/url/slides-text-markdown.d.ts +46 -0
- package/dist/types/run/flows/url/slides-text-transcript.d.ts +36 -0
- package/dist/types/run/flows/url/slides-text-types.d.ts +8 -0
- package/dist/types/run/flows/url/slides-text.d.ts +3 -87
- package/dist/types/run/flows/url/summary-finish.d.ts +16 -0
- package/dist/types/run/flows/url/summary-json.d.ts +51 -0
- package/dist/types/run/flows/url/summary-prompt.d.ts +22 -0
- package/dist/types/run/flows/url/summary-resolution.d.ts +31 -0
- package/dist/types/run/flows/url/summary-timestamps.d.ts +11 -0
- package/dist/types/run/flows/url/types.d.ts +4 -0
- package/dist/types/run/markdown-transforms.d.ts +3 -0
- package/dist/types/run/run-context.d.ts +4 -0
- package/dist/types/run/run-env.d.ts +4 -0
- package/dist/types/run/run-settings-parse.d.ts +5 -0
- package/dist/types/run/runner-contexts.d.ts +62 -0
- package/dist/types/run/runner-execution.d.ts +57 -0
- package/dist/types/run/runner-flags.d.ts +41 -0
- package/dist/types/run/runner-setup.d.ts +21 -0
- package/dist/types/run/runner-slides.d.ts +8 -0
- package/dist/types/run/streaming.d.ts +1 -1
- package/dist/types/run/summary-engine.d.ts +8 -4
- package/dist/types/run/summary-llm.d.ts +4 -3
- package/dist/types/run/terminal.d.ts +2 -0
- package/dist/types/run/types.d.ts +2 -2
- package/dist/types/slides/download.d.ts +29 -0
- package/dist/types/slides/extract-finalize.d.ts +57 -0
- package/dist/types/slides/extract.d.ts +1 -7
- package/dist/types/slides/frame-extraction.d.ts +38 -0
- package/dist/types/slides/ingest.d.ts +47 -0
- package/dist/types/slides/ocr.d.ts +5 -0
- package/dist/types/slides/process.d.ts +22 -0
- package/dist/types/slides/scene-detection.d.ts +75 -0
- package/dist/types/slides/source-id.d.ts +2 -0
- package/dist/types/version.d.ts +1 -1
- package/docs/_config.yml +1 -0
- package/docs/agent.md +3 -2
- package/docs/assets/site.css +134 -2
- package/docs/cache.md +2 -1
- package/docs/chrome-extension.md +12 -4
- package/docs/cli.md +2 -2
- package/docs/config.md +11 -4
- package/docs/index.html +5 -0
- package/docs/llm.md +5 -2
- package/docs/manual-tests.md +3 -0
- package/docs/media.md +3 -1
- package/docs/model-auto.md +2 -2
- package/docs/model-provider-resolution.md +57 -0
- package/docs/site/index.html +5 -0
- package/docs/slides-rendering-flow.md +46 -0
- package/docs/slides.md +5 -5
- package/docs/smoketest.md +1 -1
- package/docs/transcript-provider-flow.md +66 -0
- package/docs/website.md +1 -0
- package/docs/youtube.md +4 -2
- package/package.json +34 -41
package/docs/index.html
CHANGED
|
@@ -137,6 +137,11 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
|
|
|
137
137
|
</div>
|
|
138
138
|
<div class="ctaRow">
|
|
139
139
|
<a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
|
|
140
|
+
<a
|
|
141
|
+
class="btn"
|
|
142
|
+
href="https://chromewebstore.google.com/detail/summarize/cejgnmmhbbpdmjnfppjdfkocebngehfg"
|
|
143
|
+
>Chrome Web Store</a
|
|
144
|
+
>
|
|
140
145
|
<a class="btn" href="https://github.com/steipete/summarize/releases/latest"
|
|
141
146
|
>Latest release</a
|
|
142
147
|
>
|
package/docs/llm.md
CHANGED
|
@@ -24,6 +24,8 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
24
24
|
- `OPENAI_API_KEY` (required for `openai/...` models)
|
|
25
25
|
- `OPENAI_BASE_URL` (optional; OpenAI-compatible API endpoint, e.g. OpenRouter)
|
|
26
26
|
- `OPENAI_USE_CHAT_COMPLETIONS` (optional; force OpenAI chat completions)
|
|
27
|
+
- `NVIDIA_API_KEY` (required for `nvidia/...` models; alias: `NGC_API_KEY`)
|
|
28
|
+
- `NVIDIA_BASE_URL` (optional; override NVIDIA OpenAI-compatible API endpoint; default: `https://integrate.api.nvidia.com/v1`)
|
|
27
29
|
- `OPENROUTER_API_KEY` (optional; required for `openrouter/...` models; also used when `OPENAI_BASE_URL` points to OpenRouter)
|
|
28
30
|
- `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
|
|
29
31
|
- `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
|
|
@@ -40,10 +42,11 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
40
42
|
- Examples:
|
|
41
43
|
- `cli/codex/gpt-5.2`
|
|
42
44
|
- `cli/claude/sonnet`
|
|
43
|
-
- `cli/gemini/gemini-3-flash
|
|
45
|
+
- `cli/gemini/gemini-3-flash`
|
|
44
46
|
- `cli/agent/gpt-5.2`
|
|
45
|
-
- `google/gemini-3-flash
|
|
47
|
+
- `google/gemini-3-flash`
|
|
46
48
|
- `openai/gpt-5-mini`
|
|
49
|
+
- `nvidia/z-ai/glm5`
|
|
47
50
|
- `zai/glm-4.7`
|
|
48
51
|
- `xai/grok-4-fast-non-reasoning`
|
|
49
52
|
- `google/gemini-2.0-flash`
|
package/docs/manual-tests.md
CHANGED
|
@@ -11,6 +11,7 @@ Goal: sanity-check auto selection + presets end-to-end.
|
|
|
11
11
|
## Setup
|
|
12
12
|
|
|
13
13
|
- `OPENAI_API_KEY=...` (optional)
|
|
14
|
+
- `ASSEMBLYAI_API_KEY=...` (optional)
|
|
14
15
|
- `GEMINI_API_KEY=...` (optional)
|
|
15
16
|
- `ANTHROPIC_API_KEY=...` (optional)
|
|
16
17
|
- `XAI_API_KEY=...` (optional)
|
|
@@ -27,6 +28,8 @@ Tip: use `--verbose` to see model attempts + the chosen model.
|
|
|
27
28
|
- `summarize --max-output-tokens 99999 https://example.com`
|
|
28
29
|
- Missing-key skip (configure only one key; should skip other providers, still succeed):
|
|
29
30
|
- Set only `OPENAI_API_KEY`, then run a website summary; should not try Gemini/Anthropic/XAI.
|
|
31
|
+
- AssemblyAI transcript path:
|
|
32
|
+
- Set only `ASSEMBLYAI_API_KEY`, then run a podcast URL or `--youtube yt-dlp` flow; `transcriptionProvider` should report `assemblyai`.
|
|
30
33
|
- Podcast URL (Whisper): should show “Downloading audio …” then “Transcribing …” with duration when known.
|
|
31
34
|
- `summarize https://podcasts.apple.com/us/podcast/2424-jelly-roll/id360084272?i=1000740717432 --metrics detailed`
|
|
32
35
|
|
package/docs/media.md
CHANGED
|
@@ -14,7 +14,7 @@ read_when:
|
|
|
14
14
|
## Transcript resolution order
|
|
15
15
|
|
|
16
16
|
1. Embedded captions (VTT/JSON) when available.
|
|
17
|
-
2. yt-dlp download +
|
|
17
|
+
2. yt-dlp download + transcription (Groq first; then ONNX/local whisper.cpp; then AssemblyAI/Gemini/OpenAI/FAL fallback).
|
|
18
18
|
|
|
19
19
|
## CLI behavior
|
|
20
20
|
|
|
@@ -25,6 +25,8 @@ read_when:
|
|
|
25
25
|
- X/Twitter status URLs with detected video auto-switch to transcript-first (yt-dlp), even in auto mode.
|
|
26
26
|
- X broadcasts (`/i/broadcasts/...`) are treated as media-only and go transcript-first by default.
|
|
27
27
|
- Local media files are capped at 2 GB; remote media URLs are best-effort via yt-dlp (no explicit size limit).
|
|
28
|
+
- Remote transcription providers: `ASSEMBLYAI_API_KEY`, `GEMINI_API_KEY` / `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`, `OPENAI_API_KEY`, `FAL_KEY` (plus `GROQ_API_KEY` before local/remote fallback).
|
|
29
|
+
- Gemini uses the Files API automatically for larger uploads.
|
|
28
30
|
|
|
29
31
|
## Chrome extension behavior
|
|
30
32
|
|
package/docs/model-auto.md
CHANGED
|
@@ -24,7 +24,7 @@ This is also the built-in default when you don’t specify a model.
|
|
|
24
24
|
|
|
25
25
|
Model ids:
|
|
26
26
|
|
|
27
|
-
- Native: `<provider>/<model>` (e.g. `openai/gpt-5-mini`, `google/gemini-3-flash
|
|
27
|
+
- Native: `<provider>/<model>` (e.g. `openai/gpt-5-mini`, `google/gemini-3-flash`)
|
|
28
28
|
- Forced OpenRouter: `openrouter/<author>/<slug>` (e.g. `openrouter/meta-llama/llama-3.3-70b-instruct:free`)
|
|
29
29
|
|
|
30
30
|
Behavior:
|
|
@@ -68,7 +68,7 @@ Example:
|
|
|
68
68
|
"rules": [
|
|
69
69
|
{
|
|
70
70
|
"when": ["video"],
|
|
71
|
-
"candidates": ["google/gemini-3-flash
|
|
71
|
+
"candidates": ["google/gemini-3-flash"]
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
"when": ["website", "youtube"],
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Map of model auto-selection, provider capabilities, and LLM execution paths."
|
|
3
|
+
read_when:
|
|
4
|
+
- "When changing auto model order or CLI fallback behavior."
|
|
5
|
+
- "When adding provider capabilities or changing document/streaming support."
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Model / Provider Resolution
|
|
9
|
+
|
|
10
|
+
Goal: reduce implicit provider knowledge.
|
|
11
|
+
|
|
12
|
+
## Shared capability registry
|
|
13
|
+
|
|
14
|
+
- `src/llm/provider-capabilities.ts`
|
|
15
|
+
Source of truth for:
|
|
16
|
+
- required env per provider
|
|
17
|
+
- CLI default models
|
|
18
|
+
- auto CLI order
|
|
19
|
+
- document support
|
|
20
|
+
- streaming support
|
|
21
|
+
|
|
22
|
+
If a provider rule changes, update this file first.
|
|
23
|
+
|
|
24
|
+
## Auto model selection
|
|
25
|
+
|
|
26
|
+
- `src/model-auto.ts`
|
|
27
|
+
Responsibilities:
|
|
28
|
+
- resolve auto rules
|
|
29
|
+
- prepend CLI candidates
|
|
30
|
+
- map native candidates to OpenRouter when safe
|
|
31
|
+
- emit attempts with required env + transport
|
|
32
|
+
|
|
33
|
+
Keep it selection-focused.
|
|
34
|
+
Do not add provider-specific capability branches there unless the registry cannot express them.
|
|
35
|
+
|
|
36
|
+
## Execution
|
|
37
|
+
|
|
38
|
+
- `src/llm/generate-text.ts`
|
|
39
|
+
Responsibilities:
|
|
40
|
+
- parse requested model id
|
|
41
|
+
- validate input shape
|
|
42
|
+
- route to provider transport
|
|
43
|
+
- normalize retries / fallbacks
|
|
44
|
+
|
|
45
|
+
Provider-specific SDK/http details belong under `src/llm/providers/*`.
|
|
46
|
+
|
|
47
|
+
## Error shaping
|
|
48
|
+
|
|
49
|
+
- access / model availability normalization stays provider-local when truly provider-specific
|
|
50
|
+
- generic capability errors should come from the shared registry
|
|
51
|
+
- unsupported functionality errors should be thrown before transport setup
|
|
52
|
+
|
|
53
|
+
## Rules
|
|
54
|
+
|
|
55
|
+
- add capability once; consume it in `model-auto` and `generate-text`
|
|
56
|
+
- keep provider env alias handling centralized
|
|
57
|
+
- keep default CLI model changes in the registry, not scattered tests/constants
|
package/docs/site/index.html
CHANGED
|
@@ -137,6 +137,11 @@ summarize "/path/report.pdf" --model google/gemini-3-flash-preview</code></pre>
|
|
|
137
137
|
</div>
|
|
138
138
|
<div class="ctaRow">
|
|
139
139
|
<a class="btn btn--ghost" href="./docs/chrome-extension.html">Extension docs</a>
|
|
140
|
+
<a
|
|
141
|
+
class="btn"
|
|
142
|
+
href="https://chromewebstore.google.com/detail/summarize/cejgnmmhbbpdmjnfppjdfkocebngehfg"
|
|
143
|
+
>Chrome Web Store</a
|
|
144
|
+
>
|
|
140
145
|
<a class="btn" href="https://github.com/steipete/summarize/releases/latest"
|
|
141
146
|
>Latest release</a
|
|
142
147
|
>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Map of slide extraction terminal output and extension streaming flow."
|
|
3
|
+
read_when:
|
|
4
|
+
- "When changing slide terminal output, streaming, or sidepanel state."
|
|
5
|
+
- "When debugging slide rendering regressions in CLI or extension."
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Slides Rendering Flow
|
|
9
|
+
|
|
10
|
+
Two main paths.
|
|
11
|
+
|
|
12
|
+
## CLI / terminal
|
|
13
|
+
|
|
14
|
+
- `src/run/flows/url/slides-output.ts`
|
|
15
|
+
Public construction + orchestration only.
|
|
16
|
+
- `slides-output-state.ts`
|
|
17
|
+
Slide timeline state.
|
|
18
|
+
Waiters.
|
|
19
|
+
Finalization.
|
|
20
|
+
- `slides-output-render.ts`
|
|
21
|
+
Terminal rendering.
|
|
22
|
+
Inline-image policy.
|
|
23
|
+
Debug path.
|
|
24
|
+
- `slides-output-stream.ts`
|
|
25
|
+
Summary-stream parsing glue.
|
|
26
|
+
|
|
27
|
+
Rule: keep terminal I/O in render helpers; keep state mutations in the state store.
|
|
28
|
+
|
|
29
|
+
## Chrome extension
|
|
30
|
+
|
|
31
|
+
- `apps/chrome-extension/src/entrypoints/sidepanel/stream-controller.ts`
|
|
32
|
+
Transport lifecycle.
|
|
33
|
+
- `stream-controller-policy.ts`
|
|
34
|
+
Chunk/status terminal state rules.
|
|
35
|
+
- `apps/chrome-extension/src/lib/extension-logs.ts`
|
|
36
|
+
Storage queue + flush only.
|
|
37
|
+
- `extension-log-format.ts`
|
|
38
|
+
Pure log serialization/truncation.
|
|
39
|
+
|
|
40
|
+
Rule: push pure status/log logic out of adapters first.
|
|
41
|
+
|
|
42
|
+
## When debugging
|
|
43
|
+
|
|
44
|
+
1. Check state transitions before DOM issues.
|
|
45
|
+
2. Check stream policy before transport retry logic.
|
|
46
|
+
3. Check cache/hydration helpers before blaming rendering.
|
package/docs/slides.md
CHANGED
|
@@ -44,11 +44,11 @@ read_when:
|
|
|
44
44
|
|
|
45
45
|
## UI behavior
|
|
46
46
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
|
|
47
|
+
- Side panel slide mode is slide-first:
|
|
48
|
+
- vertical full-width cards by default
|
|
49
|
+
- thumbnail + timestamp + text
|
|
50
|
+
- transcript/OCR text appears before slide images finish extracting
|
|
51
|
+
- No giant summary block under active slide cards.
|
|
52
52
|
- Slide click: seek only (no modal).
|
|
53
53
|
- OCR toggle appears near summarize control only when OCR is significant
|
|
54
54
|
(enough slides + total OCR chars); otherwise hide it.
|
package/docs/smoketest.md
CHANGED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Map of transcript provider selection and transcription fallback flow."
|
|
3
|
+
read_when:
|
|
4
|
+
- "When changing podcast, YouTube, or generic transcript provider order."
|
|
5
|
+
- "When changing remote transcription fallbacks or provider setup errors."
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Transcript Provider Flow
|
|
9
|
+
|
|
10
|
+
Goal: keep provider entrypoints thin; keep provider policy explicit.
|
|
11
|
+
|
|
12
|
+
## Provider entrypoints
|
|
13
|
+
|
|
14
|
+
- `packages/core/src/content/transcript/providers/youtube.ts`
|
|
15
|
+
YouTube orchestration only.
|
|
16
|
+
Web captions first.
|
|
17
|
+
`yt-dlp` or Apify fallback next.
|
|
18
|
+
- `packages/core/src/content/transcript/providers/podcast.ts`
|
|
19
|
+
Podcast orchestration only.
|
|
20
|
+
Feed/Spotify/Apple/enclosure/`yt-dlp` chain.
|
|
21
|
+
- `packages/core/src/content/transcript/providers/generic.ts`
|
|
22
|
+
Embedded tracks first.
|
|
23
|
+
Direct-media / X media fallback next.
|
|
24
|
+
|
|
25
|
+
## Shared policy
|
|
26
|
+
|
|
27
|
+
- `transcription-capability.ts`
|
|
28
|
+
One place for:
|
|
29
|
+
- `resolveTranscriptProviderCapabilities`
|
|
30
|
+
- `canTranscribe`
|
|
31
|
+
- `canRunYtDlp`
|
|
32
|
+
- missing-provider note/result shaping
|
|
33
|
+
- `transcription-start.ts`
|
|
34
|
+
Runtime availability only.
|
|
35
|
+
Local whisper, ONNX, cloud presence, display hints.
|
|
36
|
+
|
|
37
|
+
## Remote fallback
|
|
38
|
+
|
|
39
|
+
- `packages/core/src/transcription/whisper/cloud-providers.ts`
|
|
40
|
+
Provider order + labels + model-id chain.
|
|
41
|
+
- `packages/core/src/transcription/whisper/remote-provider-attempts.ts`
|
|
42
|
+
Per-provider byte/file attempts.
|
|
43
|
+
- `packages/core/src/transcription/whisper/remote.ts`
|
|
44
|
+
Order loop only.
|
|
45
|
+
Fallback notes.
|
|
46
|
+
OpenAI chunk/delegate policy.
|
|
47
|
+
|
|
48
|
+
## Current order
|
|
49
|
+
|
|
50
|
+
- local ONNX / whisper.cpp before cloud
|
|
51
|
+
- cloud bytes/file order:
|
|
52
|
+
- AssemblyAI
|
|
53
|
+
- Gemini
|
|
54
|
+
- OpenAI
|
|
55
|
+
- FAL
|
|
56
|
+
|
|
57
|
+
## Rules
|
|
58
|
+
|
|
59
|
+
- keep entrypoints thin
|
|
60
|
+
- add provider notes in shared helpers, not scattered strings
|
|
61
|
+
- prefer pure parser helpers before touching orchestration
|
|
62
|
+
- if adding a new provider:
|
|
63
|
+
- register cloud metadata
|
|
64
|
+
- add remote attempt handler
|
|
65
|
+
- widen shared capability helper
|
|
66
|
+
- add focused provider tests before live tests
|
package/docs/website.md
CHANGED
package/docs/youtube.md
CHANGED
|
@@ -14,7 +14,7 @@ YouTube URLs use transcript-first extraction.
|
|
|
14
14
|
- `web`: try `youtubei` → `captionTracks` only
|
|
15
15
|
- `no-auto`: try creator captions only (skip auto-generated/ASR) → `yt-dlp` (if configured)
|
|
16
16
|
- `apify`: Apify only
|
|
17
|
-
- `yt-dlp`: download audio + transcribe (local `whisper.cpp
|
|
17
|
+
- `yt-dlp`: download audio + transcribe (Groq first; then local `whisper.cpp`; then AssemblyAI/Gemini/OpenAI/FAL fallback)
|
|
18
18
|
|
|
19
19
|
## `youtubei` vs `captionTracks`
|
|
20
20
|
|
|
@@ -32,7 +32,9 @@ YouTube URLs use transcript-first extraction.
|
|
|
32
32
|
- If no transcript is available, we still extract `ytInitialPlayerResponse.videoDetails.shortDescription` so YouTube links can still summarize meaningfully.
|
|
33
33
|
- Apify is an optional fallback (needs `APIFY_API_TOKEN`).
|
|
34
34
|
- By default, we use the actor id `faVsWy9VTSNVIhWpR` (Pinto Studio’s “Youtube Transcript Scraper”).
|
|
35
|
-
- `yt-dlp` requires the `yt-dlp` binary (either set `YT_DLP_PATH` or have it on `PATH`) and either local `whisper.cpp`
|
|
35
|
+
- `yt-dlp` requires the `yt-dlp` binary (either set `YT_DLP_PATH` or have it on `PATH`) and either local `whisper.cpp` or one of `GROQ_API_KEY`, `ASSEMBLYAI_API_KEY`, `GEMINI_API_KEY`, `OPENAI_API_KEY`, or `FAL_KEY`.
|
|
36
|
+
- AssemblyAI is supported as a dedicated remote transcription provider in the fallback chain.
|
|
37
|
+
- Gemini is used automatically when available after AssemblyAI/local providers, and handles larger uploads via the Files API.
|
|
36
38
|
- If OpenAI transcription fails and `FAL_KEY` is set, we fall back to FAL automatically.
|
|
37
39
|
|
|
38
40
|
## Example
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steipete/summarize",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Link → clean text → summary.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"summarize": "./dist/cli.js",
|
|
@@ -31,32 +31,8 @@
|
|
|
31
31
|
"import": "./dist/esm/prompts/index.js"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
-
"scripts": {
|
|
35
|
-
"build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
|
|
36
|
-
"build:bun": "bun scripts/build-bun.js",
|
|
37
|
-
"build:bun:test": "bun scripts/build-bun.js --test",
|
|
38
|
-
"build:cli": "node scripts/build-cli.mjs",
|
|
39
|
-
"build:lib": "tsc -p tsconfig.build.json",
|
|
40
|
-
"check": "pnpm format:check && pnpm lint && pnpm test:coverage",
|
|
41
|
-
"clean": "rimraf dist packages/core/dist",
|
|
42
|
-
"docs:list": "tsx scripts/docs-list.ts",
|
|
43
|
-
"format": "oxfmt --write",
|
|
44
|
-
"format:check": "oxfmt --check",
|
|
45
|
-
"lint": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
|
|
46
|
-
"lint:fix": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix . && pnpm format",
|
|
47
|
-
"prepare": "pnpm build",
|
|
48
|
-
"release": "bash scripts/release.sh",
|
|
49
|
-
"s": "tsx src/cli.ts",
|
|
50
|
-
"summarize": "tsx src/cli.ts",
|
|
51
|
-
"test": "vitest run",
|
|
52
|
-
"test:coverage": "vitest run --coverage",
|
|
53
|
-
"test:coverage:build": "pnpm build && pnpm test:coverage",
|
|
54
|
-
"test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
|
|
55
|
-
"typecheck": "tsc -p tsconfig.build.json --noEmit"
|
|
56
|
-
},
|
|
57
34
|
"dependencies": {
|
|
58
|
-
"@mariozechner/pi-ai": "^0.
|
|
59
|
-
"@steipete/summarize-core": "workspace:*",
|
|
35
|
+
"@mariozechner/pi-ai": "^0.57.1",
|
|
60
36
|
"commander": "^14.0.3",
|
|
61
37
|
"file-type": "^21.3.0",
|
|
62
38
|
"gpt-tokenizer": "^3.4.0",
|
|
@@ -66,19 +42,20 @@
|
|
|
66
42
|
"ora": "^9.3.0",
|
|
67
43
|
"osc-progress": "^0.3.0",
|
|
68
44
|
"tokentally": "^0.1.1",
|
|
69
|
-
"tslog": "^4.10.2"
|
|
45
|
+
"tslog": "^4.10.2",
|
|
46
|
+
"@steipete/summarize-core": "0.12.0"
|
|
70
47
|
},
|
|
71
48
|
"devDependencies": {
|
|
72
|
-
"@fal-ai/client": "^1.9.
|
|
73
|
-
"@types/jsdom": "^
|
|
74
|
-
"@types/node": "^25.
|
|
75
|
-
"@types/sanitize-html": "^2.16.
|
|
49
|
+
"@fal-ai/client": "^1.9.4",
|
|
50
|
+
"@types/jsdom": "^28.0.0",
|
|
51
|
+
"@types/node": "^25.3.5",
|
|
52
|
+
"@types/sanitize-html": "^2.16.1",
|
|
76
53
|
"@vitest/coverage-v8": "^4.0.18",
|
|
77
54
|
"esbuild": "^0.27.3",
|
|
78
|
-
"oxfmt": "0.
|
|
79
|
-
"oxlint": "^1.
|
|
80
|
-
"oxlint-tsgolint": "^0.
|
|
81
|
-
"rimraf": "^6.1.
|
|
55
|
+
"oxfmt": "0.36.0",
|
|
56
|
+
"oxlint": "^1.51.0",
|
|
57
|
+
"oxlint-tsgolint": "^0.16.0",
|
|
58
|
+
"rimraf": "^6.1.3",
|
|
82
59
|
"tsx": "^4.21.0",
|
|
83
60
|
"typescript": "^5.9.3",
|
|
84
61
|
"vitest": "^4.0.18"
|
|
@@ -86,10 +63,26 @@
|
|
|
86
63
|
"engines": {
|
|
87
64
|
"node": ">=22"
|
|
88
65
|
},
|
|
89
|
-
"
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
|
|
66
|
+
"scripts": {
|
|
67
|
+
"build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
|
|
68
|
+
"build:bun": "bun scripts/build-bun.js",
|
|
69
|
+
"build:bun:test": "bun scripts/build-bun.js --test",
|
|
70
|
+
"build:cli": "node scripts/build-cli.mjs",
|
|
71
|
+
"build:lib": "tsc -p tsconfig.build.json",
|
|
72
|
+
"check": "pnpm format:check && pnpm lint && pnpm test:coverage",
|
|
73
|
+
"clean": "rimraf dist packages/core/dist",
|
|
74
|
+
"docs:list": "tsx scripts/docs-list.ts",
|
|
75
|
+
"format": "oxfmt --write",
|
|
76
|
+
"format:check": "oxfmt --check",
|
|
77
|
+
"lint": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
|
|
78
|
+
"lint:fix": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix . && pnpm format",
|
|
79
|
+
"release": "bash scripts/release.sh",
|
|
80
|
+
"s": "tsx src/cli.ts",
|
|
81
|
+
"summarize": "tsx src/cli.ts",
|
|
82
|
+
"test": "vitest run",
|
|
83
|
+
"test:coverage": "vitest run --coverage",
|
|
84
|
+
"test:coverage:build": "pnpm build && pnpm test:coverage",
|
|
85
|
+
"test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
|
|
86
|
+
"typecheck": "tsc -p tsconfig.build.json --noEmit"
|
|
94
87
|
}
|
|
95
|
-
}
|
|
88
|
+
}
|