@steipete/summarize 0.11.1 → 0.13.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 +73 -1
- package/README.md +102 -32
- package/dist/cli.js +1 -1
- package/dist/esm/cache-keys.js +83 -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 +15 -92
- 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 +55 -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 +472 -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/costs.js.map +1 -1
- package/dist/esm/daemon/agent-model.js +283 -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 +118 -9
- package/dist/esm/daemon/chat.js.map +1 -1
- package/dist/esm/daemon/cli.js +121 -9
- 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 +6 -0
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +84 -74
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/models.js +26 -0
- package/dist/esm/daemon/models.js.map +1 -1
- package/dist/esm/daemon/process-registry.js.map +1 -1
- package/dist/esm/daemon/schtasks.js +101 -5
- package/dist/esm/daemon/schtasks.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 +79 -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/daemon/windows-container.js +21 -0
- package/dist/esm/daemon/windows-container.js.map +1 -0
- 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 +415 -0
- package/dist/esm/llm/cli-provider-output.js.map +1 -0
- package/dist/esm/llm/cli.js +97 -218
- 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 +121 -0
- package/dist/esm/llm/generate-text-shared.js.map +1 -0
- package/dist/esm/llm/generate-text-stream.js +291 -0
- package/dist/esm/llm/generate-text-stream.js.map +1 -0
- package/dist/esm/llm/generate-text.js +172 -480
- package/dist/esm/llm/generate-text.js.map +1 -1
- package/dist/esm/llm/github-models.js +45 -0
- package/dist/esm/llm/github-models.js.map +1 -0
- package/dist/esm/llm/html-to-markdown.js.map +1 -1
- package/dist/esm/llm/model-id.js +37 -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 +184 -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 +19 -1
- package/dist/esm/llm/providers/models.js.map +1 -1
- package/dist/esm/llm/providers/openai.js +243 -5
- package/dist/esm/llm/providers/openai.js.map +1 -1
- package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
- package/dist/esm/media-cache.js +3 -0
- package/dist/esm/media-cache.js.map +1 -1
- package/dist/esm/model-auto-cli.js +91 -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 +62 -19
- 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/cli-fallback-state.js +6 -1
- package/dist/esm/run/cli-fallback-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 +24 -3
- 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 +117 -0
- package/dist/esm/run/flows/asset/summary-attempts.js.map +1 -0
- package/dist/esm/run/flows/asset/summary.js +30 -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/extraction-session.js +174 -0
- package/dist/esm/run/flows/url/extraction-session.js.map +1 -0
- package/dist/esm/run/flows/url/fetch-options.js +32 -0
- package/dist/esm/run/flows/url/fetch-options.js.map +1 -0
- package/dist/esm/run/flows/url/flow-progress.js +123 -0
- package/dist/esm/run/flows/url/flow-progress.js.map +1 -0
- package/dist/esm/run/flows/url/flow.js +70 -462
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +38 -3
- package/dist/esm/run/flows/url/markdown.js.map +1 -1
- package/dist/esm/run/flows/url/progress-status-state.js +28 -0
- package/dist/esm/run/flows/url/progress-status-state.js.map +1 -0
- package/dist/esm/run/flows/url/progress-status.js +51 -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-session.js +159 -0
- package/dist/esm/run/flows/url/slides-session.js.map +1 -0
- 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 +40 -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 +327 -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 +139 -667
- package/dist/esm/run/flows/url/summary.js.map +1 -1
- package/dist/esm/run/flows/url/types.js +31 -1
- package/dist/esm/run/flows/url/types.js.map +1 -1
- package/dist/esm/run/flows/url/video-only.js +68 -0
- package/dist/esm/run/flows/url/video-only.js.map +1 -0
- package/dist/esm/run/help.js +15 -5
- 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-config.js +1 -1
- package/dist/esm/run/run-config.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-models.js +35 -5
- package/dist/esm/run/run-models.js.map +1 -1
- package/dist/esm/run/run-settings-parse.js +77 -0
- package/dist/esm/run/run-settings-parse.js.map +1 -0
- package/dist/esm/run/run-settings.js +7 -72
- package/dist/esm/run/run-settings.js.map +1 -1
- package/dist/esm/run/runner-contexts.js +122 -0
- package/dist/esm/run/runner-contexts.js.map +1 -0
- package/dist/esm/run/runner-execution.js +82 -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-plan.js +369 -0
- package/dist/esm/run/runner-plan.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 +49 -0
- package/dist/esm/run/runner-slides.js.map +1 -0
- package/dist/esm/run/runner.js +53 -692
- package/dist/esm/run/runner.js.map +1 -1
- package/dist/esm/run/slides-cli.js +3 -2
- package/dist/esm/run/slides-cli.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 +2 -0
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +50 -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/shared/slides-text.js +2 -0
- package/dist/esm/shared/slides-text.js.map +1 -0
- 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 +105 -1685
- 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/index.js +2 -1
- package/dist/esm/slides/index.js.map +1 -1
- package/dist/esm/slides/ingest.js +194 -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/slides/source.js +80 -0
- package/dist/esm/slides/source.js.map +1 -0
- package/dist/esm/tty/progress/fetch-html.js +6 -0
- package/dist/esm/tty/progress/fetch-html.js.map +1 -1
- package/dist/esm/tty/progress/transcript-state.js +202 -0
- package/dist/esm/tty/progress/transcript-state.js.map +1 -0
- package/dist/esm/tty/progress/transcript.js +43 -194
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +17 -3
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/website-progress.js +16 -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 +2 -10
- 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 +34 -0
- package/dist/types/config/types.d.ts +238 -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 +2 -2
- package/dist/types/daemon/models.d.ts +3 -0
- package/dist/types/daemon/schtasks.d.ts +2 -1
- 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 +4 -4
- package/dist/types/daemon/summarize.d.ts +1 -1
- package/dist/types/daemon/windows-container.d.ts +1 -0
- package/dist/types/llm/cli-exec.d.ts +13 -0
- package/dist/types/llm/cli-provider-output.d.ts +25 -0
- package/dist/types/llm/generate-text-document.d.ts +35 -0
- package/dist/types/llm/generate-text-shared.d.ts +32 -0
- package/dist/types/llm/generate-text-stream.d.ts +27 -0
- package/dist/types/llm/generate-text.d.ts +7 -26
- package/dist/types/llm/github-models.d.ts +5 -0
- package/dist/types/llm/html-to-markdown.d.ts +2 -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/providers/openai.d.ts +9 -5
- package/dist/types/llm/providers/types.d.ts +1 -0
- package/dist/types/llm/transcript-to-markdown.d.ts +2 -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 +4 -3
- package/dist/types/run/attachments.d.ts +3 -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 +6 -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 +16 -2
- package/dist/types/run/flows/url/extraction-session.d.ts +22 -0
- package/dist/types/run/flows/url/fetch-options.d.ts +29 -0
- package/dist/types/run/flows/url/flow-progress.d.ts +43 -0
- package/dist/types/run/flows/url/markdown.d.ts +2 -2
- package/dist/types/run/flows/url/progress-status-state.d.ts +17 -0
- package/dist/types/run/flows/url/progress-status.d.ts +17 -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-session.d.ts +26 -0
- 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 +20 -0
- package/dist/types/run/flows/url/video-only.d.ts +27 -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/run-settings.d.ts +2 -1
- package/dist/types/run/runner-contexts.d.ts +37 -0
- package/dist/types/run/runner-execution.d.ts +58 -0
- package/dist/types/run/runner-flags.d.ts +41 -0
- package/dist/types/run/runner-plan.d.ts +19 -0
- package/dist/types/run/runner-setup.d.ts +21 -0
- package/dist/types/run/runner-slides.d.ts +9 -0
- package/dist/types/run/streaming.d.ts +2 -1
- package/dist/types/run/summary-engine.d.ts +8 -4
- package/dist/types/run/summary-llm.d.ts +5 -3
- package/dist/types/run/terminal.d.ts +2 -0
- package/dist/types/run/types.d.ts +3 -2
- package/dist/types/shared/slides-text.d.ts +1 -0
- 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 +2 -13
- package/dist/types/slides/frame-extraction.d.ts +38 -0
- package/dist/types/slides/index.d.ts +2 -1
- 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/slides/source.d.ts +8 -0
- package/dist/types/tty/progress/fetch-html.d.ts +1 -0
- package/dist/types/tty/progress/transcript-state.d.ts +27 -0
- package/dist/types/tty/progress/transcript.d.ts +1 -0
- package/dist/types/tty/spinner.d.ts +1 -0
- package/dist/types/version.d.ts +1 -1
- package/docs/README.md +1 -1
- package/docs/_config.yml +1 -0
- package/docs/agent.md +3 -2
- package/docs/assets/site.css +145 -2
- package/docs/cache.md +2 -1
- package/docs/chrome-extension.md +19 -5
- package/docs/cli.md +26 -8
- package/docs/config.md +30 -9
- package/docs/extract-only.md +2 -2
- package/docs/firecrawl.md +2 -1
- package/docs/index.html +5 -0
- package/docs/llm.md +34 -5
- package/docs/manual-tests.md +3 -0
- package/docs/media.md +9 -1
- package/docs/model-auto.md +2 -2
- package/docs/model-provider-resolution.md +57 -0
- package/docs/releasing.md +9 -12
- package/docs/site/docs/chrome-extension.html +1 -1
- 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 +73 -0
- package/docs/website.md +3 -1
- package/docs/youtube.md +4 -2
- package/package.json +17 -16
package/docs/llm.md
CHANGED
|
@@ -24,7 +24,10 @@ 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)
|
|
30
|
+
- `GITHUB_TOKEN` / `GH_TOKEN` (required for `github-copilot/...` models via GitHub Models)
|
|
28
31
|
- `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
|
|
29
32
|
- `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
|
|
30
33
|
- `GEMINI_API_KEY` (required for `google/...` models; also accepts `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`)
|
|
@@ -32,7 +35,7 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
32
35
|
- `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
|
|
33
36
|
- `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
|
|
34
37
|
- `SUMMARIZE_MODEL` (optional; overrides default model selection)
|
|
35
|
-
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` (optional; override CLI binary paths)
|
|
38
|
+
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` / `OPENCLAW_PATH` / `OPENCODE_PATH` (optional; override CLI binary paths)
|
|
36
39
|
|
|
37
40
|
## Flags
|
|
38
41
|
|
|
@@ -40,17 +43,25 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
40
43
|
- Examples:
|
|
41
44
|
- `cli/codex/gpt-5.2`
|
|
42
45
|
- `cli/claude/sonnet`
|
|
43
|
-
- `cli/gemini/gemini-3-flash
|
|
46
|
+
- `cli/gemini/gemini-3-flash`
|
|
44
47
|
- `cli/agent/gpt-5.2`
|
|
45
|
-
- `
|
|
48
|
+
- `cli/openclaw/main`
|
|
49
|
+
- `cli/opencode/openai/gpt-5.4`
|
|
50
|
+
- `openai/gpt-5.4`
|
|
51
|
+
- `openai/gpt-5.4-mini`
|
|
52
|
+
- `openai/gpt-5.4-nano`
|
|
53
|
+
- `google/gemini-3-flash`
|
|
46
54
|
- `openai/gpt-5-mini`
|
|
55
|
+
- `openai/gpt-5-nano`
|
|
56
|
+
- `github-copilot/gpt-5.4`
|
|
57
|
+
- `nvidia/z-ai/glm5`
|
|
47
58
|
- `zai/glm-4.7`
|
|
48
59
|
- `xai/grok-4-fast-non-reasoning`
|
|
49
60
|
- `google/gemini-2.0-flash`
|
|
50
61
|
- `anthropic/claude-sonnet-4-5`
|
|
51
62
|
- `openrouter/meta-llama/llama-3.3-70b-instruct:free` (force OpenRouter)
|
|
52
63
|
- `--cli [provider]`
|
|
53
|
-
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
64
|
+
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent`, `--cli openclaw`, `--cli opencode` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
54
65
|
- `--model auto`
|
|
55
66
|
- See `docs/model-auto.md`
|
|
56
67
|
- `--model <preset>`
|
|
@@ -70,7 +81,8 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
70
81
|
- `--length short|medium|long|xl|xxl|<chars>`
|
|
71
82
|
- This is _soft guidance_ to the model (no hard truncation).
|
|
72
83
|
- Minimum numeric value: 50 chars.
|
|
73
|
-
-
|
|
84
|
+
- Built-in default: `xl`.
|
|
85
|
+
- Config default: `output.length` in `~/.summarize/config.json`.
|
|
74
86
|
- Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
|
|
75
87
|
- `--force-summary`
|
|
76
88
|
- Always run the LLM even when extracted content is shorter than the requested length.
|
|
@@ -95,6 +107,23 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
95
107
|
|
|
96
108
|
Use `--model zai/<model>` (e.g. `zai/glm-4.7`). Defaults to Z.AI’s base URL and uses chat completions.
|
|
97
109
|
|
|
110
|
+
## GitHub Copilot / GitHub Models
|
|
111
|
+
|
|
112
|
+
Use `--model github-copilot/<model>` for explicit GitHub-hosted model calls.
|
|
113
|
+
|
|
114
|
+
- Examples:
|
|
115
|
+
- `github-copilot/gpt-5.4`
|
|
116
|
+
- `github-copilot/gpt-5.4-mini`
|
|
117
|
+
- `github-copilot/gpt-5.4-nano`
|
|
118
|
+
- `github-copilot/gpt-5-mini`
|
|
119
|
+
- `github-copilot/gpt-5-nano`
|
|
120
|
+
- `github-copilot/anthropic/claude-haiku-4.5`
|
|
121
|
+
- Auth: `GITHUB_TOKEN` or `GH_TOKEN`
|
|
122
|
+
- Transport: GitHub Models chat completions (`https://models.github.ai/inference`)
|
|
123
|
+
- Notes:
|
|
124
|
+
- bare shorthand like `github-copilot/gpt-5.4` or `github-copilot/claude-opus-4.6` auto-expands to the provider-qualified backend id
|
|
125
|
+
- document attachments stay unsupported in this mode
|
|
126
|
+
|
|
98
127
|
## Input limits
|
|
99
128
|
|
|
100
129
|
- Text prompts are checked against the model’s max input tokens (LiteLLM catalog) using a GPT tokenizer.
|
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,14 @@ 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.
|
|
30
|
+
|
|
31
|
+
## Shared helpers
|
|
32
|
+
|
|
33
|
+
- Direct media classification lives in `packages/core/src/content/direct-media.ts`.
|
|
34
|
+
- Local path/`file://` normalization + mtime lookup lives in `packages/core/src/content/local-file.ts`.
|
|
35
|
+
- Slides, URL extraction, and transcription should reuse those helpers instead of re-parsing extensions separately.
|
|
28
36
|
|
|
29
37
|
## Chrome extension behavior
|
|
30
38
|
|
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/releasing.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
summary: "Release checklist + Homebrew
|
|
2
|
+
summary: "Release checklist + Homebrew/core verify step."
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Releasing
|
|
@@ -8,22 +8,19 @@ summary: "Release checklist + Homebrew tap update."
|
|
|
8
8
|
|
|
9
9
|
- Ship npm packages (core first, then CLI).
|
|
10
10
|
- Tag + GitHub release.
|
|
11
|
-
-
|
|
11
|
+
- Verify the Homebrew/core formula so `brew install summarize` matches the latest tag.
|
|
12
12
|
|
|
13
13
|
## Checklist
|
|
14
14
|
|
|
15
|
-
1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag
|
|
15
|
+
1. `scripts/release.sh all` (gates → build → verify → publish → smoke → tag).
|
|
16
16
|
2. Create GitHub release for the new tag (match version, attach notes/assets as needed).
|
|
17
|
-
3.
|
|
18
|
-
-
|
|
19
|
-
- Update tarball URL + SHA256 for the new release.
|
|
20
|
-
4. Verify Homebrew install reflects the new version:
|
|
21
|
-
- `brew install steipete/tap/summarize`
|
|
17
|
+
3. Verify the Homebrew/core formula reflects the new version:
|
|
18
|
+
- `brew install summarize`
|
|
22
19
|
- `summarize --version` matches tag.
|
|
23
|
-
- Run a feature added in the release (
|
|
24
|
-
|
|
20
|
+
- Run a feature added in the release (for example `summarize daemon install`).
|
|
21
|
+
4. If anything fails, fix and re-cut the release (no partials).
|
|
25
22
|
|
|
26
23
|
## Common failure
|
|
27
24
|
|
|
28
|
-
- NPM/GitHub release updated,
|
|
29
|
-
Fix: always do step 3
|
|
25
|
+
- NPM/GitHub release updated, but Homebrew/core still serves the old version.
|
|
26
|
+
Fix: always do step 3 before announcing.
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<ul>
|
|
55
55
|
<li>
|
|
56
56
|
<code>npm i -g @steipete/summarize</code> or
|
|
57
|
-
<code>brew install
|
|
57
|
+
<code>brew install summarize</code>
|
|
58
58
|
</li>
|
|
59
59
|
<li>Build extension: <code>pnpm -C apps/chrome-extension build</code></li>
|
|
60
60
|
<li>Load unpacked: <code>apps/chrome-extension/.output/chrome-mv3</code></li>
|
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,73 @@
|
|
|
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
|
+
Thin orchestration only.
|
|
23
|
+
Embedded tracks first.
|
|
24
|
+
Direct-media / X media fallback next.
|
|
25
|
+
- `packages/core/src/content/transcript/providers/generic-embedded.ts`
|
|
26
|
+
Embedded media detection + caption-track parsing only.
|
|
27
|
+
- `packages/core/src/content/transcript/providers/generic-direct-media.ts`
|
|
28
|
+
Direct-media yt-dlp/transcription fallback only.
|
|
29
|
+
- `packages/core/src/content/transcript/providers/generic-twitter.ts`
|
|
30
|
+
X/Twitter cookies + yt-dlp orchestration only.
|
|
31
|
+
|
|
32
|
+
## Shared policy
|
|
33
|
+
|
|
34
|
+
- `transcription-capability.ts`
|
|
35
|
+
One place for:
|
|
36
|
+
- `resolveTranscriptProviderCapabilities`
|
|
37
|
+
- `canTranscribe`
|
|
38
|
+
- `canRunYtDlp`
|
|
39
|
+
- missing-provider note/result shaping
|
|
40
|
+
- `transcription-start.ts`
|
|
41
|
+
Runtime availability only.
|
|
42
|
+
Local whisper, ONNX, cloud presence, display hints.
|
|
43
|
+
|
|
44
|
+
## Remote fallback
|
|
45
|
+
|
|
46
|
+
- `packages/core/src/transcription/whisper/cloud-providers.ts`
|
|
47
|
+
Provider order + labels + model-id chain.
|
|
48
|
+
- `packages/core/src/transcription/whisper/remote-provider-attempts.ts`
|
|
49
|
+
Per-provider byte/file attempts.
|
|
50
|
+
- `packages/core/src/transcription/whisper/remote.ts`
|
|
51
|
+
Order loop only.
|
|
52
|
+
Fallback notes.
|
|
53
|
+
OpenAI chunk/delegate policy.
|
|
54
|
+
|
|
55
|
+
## Current order
|
|
56
|
+
|
|
57
|
+
- local ONNX / whisper.cpp before cloud
|
|
58
|
+
- cloud bytes/file order:
|
|
59
|
+
- AssemblyAI
|
|
60
|
+
- Gemini
|
|
61
|
+
- OpenAI
|
|
62
|
+
- FAL
|
|
63
|
+
|
|
64
|
+
## Rules
|
|
65
|
+
|
|
66
|
+
- keep entrypoints thin
|
|
67
|
+
- add provider notes in shared helpers, not scattered strings
|
|
68
|
+
- prefer pure parser helpers before touching orchestration
|
|
69
|
+
- if adding a new provider:
|
|
70
|
+
- register cloud metadata
|
|
71
|
+
- add remote attempt handler
|
|
72
|
+
- widen shared capability helper
|
|
73
|
+
- add focused provider tests before live tests
|
package/docs/website.md
CHANGED
|
@@ -13,10 +13,11 @@ Use this for non-YouTube URLs.
|
|
|
13
13
|
- Fetches the page HTML.
|
|
14
14
|
- Extracts “article-ish” content and normalizes it into clean text.
|
|
15
15
|
- If extraction looks blocked or too thin, it can retry via Firecrawl (Markdown).
|
|
16
|
+
- Firecrawl applies to non-YouTube URLs only; YouTube URLs use the `--youtube` transcript path instead.
|
|
16
17
|
- If a page is effectively “video-only”, it may treat it as a video input (see `--video-mode`).
|
|
17
18
|
- `--video-mode transcript` prefers embedded media transcripts on pages with audio/video (captions → yt-dlp/Whisper fallback).
|
|
18
19
|
- With `--format md`, the CLI defaults to `--markdown-mode readability` (Readability article HTML as the Markdown input).
|
|
19
|
-
- Use `--firecrawl always` to try Firecrawl first.
|
|
20
|
+
- Use `--firecrawl always` to try Firecrawl first for non-YouTube URLs.
|
|
20
21
|
- With `--format md`, `--markdown-mode auto|llm|readability` can also convert HTML → Markdown via an LLM using the configured `--model` (no provider fallback).
|
|
21
22
|
- With `--format md`, `--markdown-mode auto` may fall back to `uvx markitdown` when available (disable with `--preprocess off`).
|
|
22
23
|
- For podcast URLs (Apple Podcasts, RSS, Spotify episodes), it downloads the episode audio and transcribes via Whisper (prefers local `whisper.cpp` when installed + model available); progress shows “Downloading audio …” then “Transcribing …” (duration uses RSS hints or `ffprobe` when available).
|
|
@@ -33,6 +34,7 @@ Daemon note:
|
|
|
33
34
|
## Twitter/X
|
|
34
35
|
|
|
35
36
|
- Tweet audio transcription runs only with `--video-mode transcript` (auto mode skips yt-dlp for tweets).
|
|
37
|
+
- Tweet text extraction prefers `xurl` when installed, falls back to `bird`, then Nitter.
|
|
36
38
|
|
|
37
39
|
## Flags
|
|
38
40
|
|
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.13.0",
|
|
4
4
|
"description": "Link → clean text → summary.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"summarize": "./dist/cli.js",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@mariozechner/pi-ai": "^0.
|
|
35
|
+
"@mariozechner/pi-ai": "^0.65.2",
|
|
36
36
|
"commander": "^14.0.3",
|
|
37
|
-
"file-type": "^
|
|
37
|
+
"file-type": "^22.0.0",
|
|
38
38
|
"gpt-tokenizer": "^3.4.0",
|
|
39
39
|
"json5": "^2.2.3",
|
|
40
40
|
"markdansi": "^0.2.1",
|
|
@@ -43,22 +43,22 @@
|
|
|
43
43
|
"osc-progress": "^0.3.0",
|
|
44
44
|
"tokentally": "^0.1.1",
|
|
45
45
|
"tslog": "^4.10.2",
|
|
46
|
-
"@steipete/summarize-core": "0.
|
|
46
|
+
"@steipete/summarize-core": "0.13.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@fal-ai/client": "^1.9.
|
|
50
|
-
"@types/jsdom": "^
|
|
51
|
-
"@types/node": "^25.2
|
|
52
|
-
"@types/sanitize-html": "^2.16.
|
|
53
|
-
"@vitest/coverage-v8": "^4.
|
|
54
|
-
"esbuild": "^0.
|
|
55
|
-
"oxfmt": "0.
|
|
56
|
-
"oxlint": "^1.
|
|
57
|
-
"oxlint-tsgolint": "^0.
|
|
58
|
-
"rimraf": "^6.1.
|
|
49
|
+
"@fal-ai/client": "^1.9.5",
|
|
50
|
+
"@types/jsdom": "^28.0.1",
|
|
51
|
+
"@types/node": "^25.5.2",
|
|
52
|
+
"@types/sanitize-html": "^2.16.1",
|
|
53
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
54
|
+
"esbuild": "^0.28.0",
|
|
55
|
+
"oxfmt": "0.44.0",
|
|
56
|
+
"oxlint": "^1.59.0",
|
|
57
|
+
"oxlint-tsgolint": "^0.20.0",
|
|
58
|
+
"rimraf": "^6.1.3",
|
|
59
59
|
"tsx": "^4.21.0",
|
|
60
|
-
"typescript": "^
|
|
61
|
-
"vitest": "^4.
|
|
60
|
+
"typescript": "^6.0.2",
|
|
61
|
+
"vitest": "^4.1.2"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=22"
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"build:lib": "tsc -p tsconfig.build.json",
|
|
72
72
|
"check": "pnpm format:check && pnpm lint && pnpm test:coverage",
|
|
73
73
|
"clean": "rimraf dist packages/core/dist",
|
|
74
|
+
"dev:cli": "pnpm -C packages/core build && tsx src/cli.ts",
|
|
74
75
|
"docs:list": "tsx scripts/docs-list.ts",
|
|
75
76
|
"format": "oxfmt --write",
|
|
76
77
|
"format:check": "oxfmt --check",
|