@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
|
@@ -4,6 +4,7 @@ import type { ThemeRenderer } from "../theme.js";
|
|
|
4
4
|
export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, theme, }: {
|
|
5
5
|
spinner: {
|
|
6
6
|
setText: (text: string) => void;
|
|
7
|
+
refresh?: () => void;
|
|
7
8
|
};
|
|
8
9
|
oscProgress?: OscProgressController | null;
|
|
9
10
|
theme?: ThemeRenderer | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { LinkPreviewProgressEvent } from "@steipete/summarize-core/content";
|
|
2
|
+
import type { ThemeRenderer } from "../theme.js";
|
|
3
|
+
export type TranscriptProgressState = {
|
|
4
|
+
phase: "idle" | "download" | "whisper";
|
|
5
|
+
service: "youtube" | "podcast" | "generic";
|
|
6
|
+
downloadedBytes: number;
|
|
7
|
+
totalBytes: number | null;
|
|
8
|
+
startedAtMs: number | null;
|
|
9
|
+
whisperProviderHint: string;
|
|
10
|
+
mediaKind: "video" | "audio" | "unknown";
|
|
11
|
+
whisperModelId: string | null;
|
|
12
|
+
whisperProcessedSeconds: number | null;
|
|
13
|
+
whisperTotalSeconds: number | null;
|
|
14
|
+
whisperPartIndex: number | null;
|
|
15
|
+
whisperParts: number | null;
|
|
16
|
+
};
|
|
17
|
+
export declare function createTranscriptProgressState(): TranscriptProgressState;
|
|
18
|
+
export declare function applyTranscriptProgressEvent(state: TranscriptProgressState, event: LinkPreviewProgressEvent, nowMs: number): void;
|
|
19
|
+
export declare function renderTranscriptSimple(state: TranscriptProgressState, theme?: ThemeRenderer | null): string | null;
|
|
20
|
+
export declare function renderTranscriptLine(state: TranscriptProgressState, { nowMs, theme, }: {
|
|
21
|
+
nowMs: number;
|
|
22
|
+
theme?: ThemeRenderer | null;
|
|
23
|
+
}): string | null;
|
|
24
|
+
export declare function resolveTranscriptOscPayload(state: TranscriptProgressState): {
|
|
25
|
+
label: string;
|
|
26
|
+
percent: number | null;
|
|
27
|
+
} | null;
|
|
@@ -4,6 +4,7 @@ import type { ThemeRenderer } from "../theme.js";
|
|
|
4
4
|
export declare function createTranscriptProgressRenderer({ spinner, oscProgress, theme, }: {
|
|
5
5
|
spinner: {
|
|
6
6
|
setText: (text: string) => void;
|
|
7
|
+
refresh?: () => void;
|
|
7
8
|
};
|
|
8
9
|
oscProgress?: OscProgressController | null;
|
|
9
10
|
theme?: ThemeRenderer | null;
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const FALLBACK_VERSION = "0.
|
|
1
|
+
export declare const FALLBACK_VERSION = "0.13.0";
|
|
2
2
|
export declare function resolvePackageVersion(importMetaUrl?: string): string;
|
|
3
3
|
export declare function resolveGitSha(importMetaUrl?: string): string | null;
|
|
4
4
|
export declare function formatVersionLine(importMetaUrl?: string): string;
|
package/docs/README.md
CHANGED
|
@@ -6,7 +6,7 @@ summary: "Docs index for summarize behaviors and modes."
|
|
|
6
6
|
|
|
7
7
|
- `docs/chrome-extension.md` — Chrome side panel extension + daemon setup/troubleshooting
|
|
8
8
|
- `docs/cache.md` — cache design + config (SQLite)
|
|
9
|
-
- `docs/cli.md` — CLI models (Claude/Codex/Gemini)
|
|
9
|
+
- `docs/cli.md` — CLI models (Claude/Codex/Gemini/Agent/OpenClaw/OpenCode)
|
|
10
10
|
- `docs/config.md` — config file location, precedence, and schema
|
|
11
11
|
- `docs/extract-only.md` — extract mode (no summary LLM call)
|
|
12
12
|
- `docs/firecrawl.md` — Firecrawl mode + API key
|
package/docs/_config.yml
CHANGED
package/docs/agent.md
CHANGED
|
@@ -135,10 +135,11 @@ Returns cached chat history for the same cache key as `/v1/agent`.
|
|
|
135
135
|
### Model Resolution (Daemon)
|
|
136
136
|
|
|
137
137
|
- **Fixed model** (explicit `model`): parsed as `<provider>/<model>`. Provider base URL overrides come from config/env (OpenAI, Anthropic, Google, xAI, ZAI). OpenRouter uses OpenAI-compatible completions.
|
|
138
|
-
- **Auto model**: uses existing auto-selection logic (`buildAutoModelAttempts`),
|
|
138
|
+
- **Auto model**: uses existing auto-selection logic (`buildAutoModelAttempts`), preferring API-key transports and then CLI fallback when available.
|
|
139
139
|
- **Synthetic models**: created for OpenAI-compatible base URLs (local/openrouter).
|
|
140
140
|
- `maxOutputTokens` defaults to 2048 or `maxOutputTokens` override.
|
|
141
|
-
- CLI models are
|
|
141
|
+
- CLI models are supported as auto fallback and via explicit `cli/<provider>` or `cli/<provider>/<model>` overrides.
|
|
142
|
+
- If the daemon still says no model is available after key/install changes, restart or reinstall it so the saved environment snapshot refreshes.
|
|
142
143
|
|
|
143
144
|
## Page Content Payload
|
|
144
145
|
|
package/docs/assets/site.css
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
:root {
|
|
31
31
|
--bg0: #fbf6eb;
|
|
32
32
|
--bg1: #f1ecdf;
|
|
33
|
+
--bg-code: rgba(0, 0, 0, 0.55);
|
|
33
34
|
--panel: rgba(255, 255, 255, 0.86);
|
|
34
35
|
--paper: #0b0f12;
|
|
35
36
|
--ink: #0b0f12;
|
|
@@ -40,6 +41,9 @@
|
|
|
40
41
|
--shadow: 0 26px 70px rgba(9, 12, 16, 0.12);
|
|
41
42
|
--shadow2: 0 10px 26px rgba(9, 12, 16, 0.1);
|
|
42
43
|
}
|
|
44
|
+
div.highlight {
|
|
45
|
+
background-color: var(--bg-code);
|
|
46
|
+
}
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
* {
|
|
@@ -184,6 +188,7 @@ a:hover {
|
|
|
184
188
|
grid-template-columns: 1.1fr 0.9fr;
|
|
185
189
|
gap: 20px;
|
|
186
190
|
padding: 26px;
|
|
191
|
+
min-width: 0;
|
|
187
192
|
}
|
|
188
193
|
|
|
189
194
|
.hero__frame::after {
|
|
@@ -197,6 +202,7 @@ a:hover {
|
|
|
197
202
|
.hero__copy {
|
|
198
203
|
position: relative;
|
|
199
204
|
z-index: 1;
|
|
205
|
+
min-width: 0;
|
|
200
206
|
}
|
|
201
207
|
|
|
202
208
|
.kicker {
|
|
@@ -313,6 +319,7 @@ a:hover {
|
|
|
313
319
|
z-index: 1;
|
|
314
320
|
display: grid;
|
|
315
321
|
gap: 14px;
|
|
322
|
+
min-width: 0;
|
|
316
323
|
}
|
|
317
324
|
|
|
318
325
|
.shot {
|
|
@@ -356,6 +363,8 @@ a:hover {
|
|
|
356
363
|
background: rgba(255, 255, 255, 0.03);
|
|
357
364
|
padding: 20px 18px;
|
|
358
365
|
box-shadow: var(--shadow2);
|
|
366
|
+
overflow: hidden;
|
|
367
|
+
min-width: 0;
|
|
359
368
|
}
|
|
360
369
|
|
|
361
370
|
.productCard__head {
|
|
@@ -411,6 +420,7 @@ a:hover {
|
|
|
411
420
|
border-radius: 16px;
|
|
412
421
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
413
422
|
background: rgba(0, 0, 0, 0.35);
|
|
423
|
+
overflow: hidden;
|
|
414
424
|
}
|
|
415
425
|
|
|
416
426
|
pre {
|
|
@@ -533,6 +543,13 @@ code {
|
|
|
533
543
|
color: var(--fg1);
|
|
534
544
|
}
|
|
535
545
|
|
|
546
|
+
div.highlight {
|
|
547
|
+
border-radius: 10px;
|
|
548
|
+
}
|
|
549
|
+
pre.highlight {
|
|
550
|
+
margin: 0;
|
|
551
|
+
padding: 14px;
|
|
552
|
+
}
|
|
536
553
|
.more {
|
|
537
554
|
margin-top: 24px;
|
|
538
555
|
padding: 0 6px;
|
|
@@ -736,13 +753,139 @@ code {
|
|
|
736
753
|
}
|
|
737
754
|
|
|
738
755
|
@media (max-width: 640px) {
|
|
756
|
+
.shell {
|
|
757
|
+
padding: 20px 12px 60px;
|
|
758
|
+
}
|
|
759
|
+
.top {
|
|
760
|
+
padding: 8px 2px 12px;
|
|
761
|
+
}
|
|
762
|
+
.nav a {
|
|
763
|
+
padding: 6px 8px;
|
|
764
|
+
font-size: 11px;
|
|
765
|
+
}
|
|
766
|
+
.hero {
|
|
767
|
+
padding: 6px 0 0;
|
|
768
|
+
}
|
|
769
|
+
.hero__frame {
|
|
770
|
+
padding: 18px 14px;
|
|
771
|
+
border-radius: 20px;
|
|
772
|
+
gap: 16px;
|
|
773
|
+
}
|
|
774
|
+
.title {
|
|
775
|
+
font-size: clamp(26px, 7vw, 36px);
|
|
776
|
+
}
|
|
777
|
+
.lede {
|
|
778
|
+
font-size: 15px;
|
|
779
|
+
}
|
|
780
|
+
.quickRow {
|
|
781
|
+
padding: 10px;
|
|
782
|
+
}
|
|
783
|
+
.quickRow__code code {
|
|
784
|
+
font-size: 12px;
|
|
785
|
+
overflow-x: auto;
|
|
786
|
+
white-space: nowrap;
|
|
787
|
+
-webkit-overflow-scrolling: touch;
|
|
788
|
+
}
|
|
789
|
+
.quickRow__actions {
|
|
790
|
+
flex-direction: column;
|
|
791
|
+
}
|
|
792
|
+
.quickRow__actions .btn {
|
|
793
|
+
width: 100%;
|
|
794
|
+
}
|
|
795
|
+
.ctaRow {
|
|
796
|
+
flex-direction: column;
|
|
797
|
+
}
|
|
798
|
+
.ctaRow .btn {
|
|
799
|
+
width: 100%;
|
|
800
|
+
text-align: center;
|
|
801
|
+
}
|
|
802
|
+
.productGrid {
|
|
803
|
+
gap: 14px;
|
|
804
|
+
padding: 0 2px;
|
|
805
|
+
}
|
|
806
|
+
.productCard {
|
|
807
|
+
padding: 16px 14px;
|
|
808
|
+
border-radius: 20px;
|
|
809
|
+
}
|
|
810
|
+
.productCard h2 {
|
|
811
|
+
font-size: 19px;
|
|
812
|
+
}
|
|
813
|
+
pre {
|
|
814
|
+
font-size: 11.5px;
|
|
815
|
+
padding: 12px 10px;
|
|
816
|
+
}
|
|
739
817
|
.capGrid {
|
|
740
818
|
grid-template-columns: 1fr;
|
|
819
|
+
gap: 12px;
|
|
820
|
+
padding: 0 2px;
|
|
741
821
|
}
|
|
742
|
-
.
|
|
743
|
-
|
|
822
|
+
.capCard {
|
|
823
|
+
padding: 14px;
|
|
824
|
+
border-radius: 14px;
|
|
825
|
+
}
|
|
826
|
+
.flow {
|
|
827
|
+
padding: 0 2px;
|
|
828
|
+
}
|
|
829
|
+
.flow__card {
|
|
830
|
+
padding: 16px 14px;
|
|
831
|
+
border-radius: 20px;
|
|
744
832
|
}
|
|
745
833
|
.flowStep {
|
|
746
834
|
grid-template-columns: 1fr;
|
|
835
|
+
padding: 10px;
|
|
836
|
+
}
|
|
837
|
+
.more {
|
|
838
|
+
padding: 0 2px;
|
|
839
|
+
}
|
|
840
|
+
.more__card {
|
|
841
|
+
padding: 16px 14px;
|
|
842
|
+
border-radius: 20px;
|
|
843
|
+
}
|
|
844
|
+
.more__grid {
|
|
845
|
+
grid-template-columns: 1fr;
|
|
846
|
+
gap: 8px;
|
|
847
|
+
}
|
|
848
|
+
.callout {
|
|
849
|
+
font-size: 14px;
|
|
850
|
+
}
|
|
851
|
+
.shot {
|
|
852
|
+
border-radius: 14px;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
@media (max-width: 380px) {
|
|
857
|
+
.shell {
|
|
858
|
+
padding: 14px 8px 48px;
|
|
859
|
+
}
|
|
860
|
+
.brand__word {
|
|
861
|
+
font-size: 16px;
|
|
862
|
+
}
|
|
863
|
+
.nav {
|
|
864
|
+
gap: 4px;
|
|
865
|
+
}
|
|
866
|
+
.nav a {
|
|
867
|
+
padding: 5px 6px;
|
|
868
|
+
font-size: 10px;
|
|
869
|
+
letter-spacing: 0.04em;
|
|
870
|
+
}
|
|
871
|
+
.hero__frame {
|
|
872
|
+
padding: 14px 10px;
|
|
873
|
+
}
|
|
874
|
+
.title {
|
|
875
|
+
font-size: 24px;
|
|
876
|
+
}
|
|
877
|
+
.lede {
|
|
878
|
+
font-size: 14px;
|
|
879
|
+
}
|
|
880
|
+
.btn {
|
|
881
|
+
padding: 10px 12px;
|
|
882
|
+
font-size: 11px;
|
|
883
|
+
}
|
|
884
|
+
.productCard {
|
|
885
|
+
padding: 14px 12px;
|
|
886
|
+
}
|
|
887
|
+
.footer {
|
|
888
|
+
flex-direction: column;
|
|
889
|
+
gap: 6px;
|
|
747
890
|
}
|
|
748
891
|
}
|
package/docs/cache.md
CHANGED
|
@@ -41,13 +41,14 @@ Separate file cache for downloaded media (yt-dlp, direct media URLs). This is **
|
|
|
41
41
|
- **Summaries**
|
|
42
42
|
- key: `sha256({contentHash, promptHash, model, length, language, formatVersion})`
|
|
43
43
|
- cache hit even if URL differs (content hash wins).
|
|
44
|
+
- `contentHash` comes from the `<content>` block actually sent to the model (so slide timelines / transcript extras affect the key).
|
|
44
45
|
- **Slides** (manifest + on-disk images in the slides output dir)
|
|
45
46
|
- key: `sha256({url, slideSettings, formatVersion})`
|
|
46
47
|
|
|
47
48
|
## Keys / hashes
|
|
48
49
|
|
|
49
50
|
- `sha256` from Node `crypto` / Bun `crypto`.
|
|
50
|
-
- `contentHash` from normalized extracted content.
|
|
51
|
+
- `contentHash` from normalized prompt `<content>` (fallback: normalized extracted content when no tagged block exists).
|
|
51
52
|
- `promptHash` from instruction block (custom prompt or default).
|
|
52
53
|
- `formatVersion`: hardcoded constant to invalidate on prompt format changes.
|
|
53
54
|
|
package/docs/chrome-extension.md
CHANGED
|
@@ -12,7 +12,7 @@ Quickstart:
|
|
|
12
12
|
|
|
13
13
|
- Install summarize (choose one):
|
|
14
14
|
- `npm i -g @steipete/summarize`
|
|
15
|
-
- `brew install
|
|
15
|
+
- `brew install summarize` (macOS, Linux)
|
|
16
16
|
- Build/load extension: `apps/chrome-extension/README.md`
|
|
17
17
|
- Firefox sidebar build: `pnpm -C apps/chrome-extension build:firefox` (load via `about:debugging` → temporary add-on)
|
|
18
18
|
- Open side panel → copy token install command → run:
|
|
@@ -32,7 +32,8 @@ Dev (repo checkout):
|
|
|
32
32
|
- Use: `pnpm summarize daemon install --token <TOKEN> --dev` (autostart service runs `src/cli.ts` via `tsx`, no `dist/` build required).
|
|
33
33
|
- E2E (Playwright): `pnpm -C apps/chrome-extension test:e2e`
|
|
34
34
|
- First run: `pnpm -C apps/chrome-extension exec playwright install chromium`
|
|
35
|
-
-
|
|
35
|
+
- Chromium runs headless by default.
|
|
36
|
+
- Visible debugging: `SHOW_UI=1 pnpm -C apps/chrome-extension test:e2e` or `HEADLESS=0 pnpm -C apps/chrome-extension test:e2e`
|
|
36
37
|
|
|
37
38
|
## Troubleshooting
|
|
38
39
|
|
|
@@ -43,14 +44,22 @@ Dev (repo checkout):
|
|
|
43
44
|
- `summarize daemon install` now tries both launchd domains (`gui/<uid>` then `user/<uid>`).
|
|
44
45
|
- Install as your normal user (not root) so HOME + launchd domain match.
|
|
45
46
|
- Re-run: `summarize daemon install --token <TOKEN>`.
|
|
47
|
+
- Windows containers:
|
|
48
|
+
- `summarize daemon install --token <TOKEN>` starts the daemon for the current container session but does not create a Scheduled Task.
|
|
49
|
+
- Run that command manually each time the container starts, or add it to your container startup. Also publish the daemon port in `docker-compose.yml`:
|
|
50
|
+
`ports: ['8787:8787']`
|
|
51
|
+
`command: ['cmd', '/c', 'summarize daemon install --token <TOKEN>']`
|
|
52
|
+
- Then restart the container and verify `http://127.0.0.1:8787/health`.
|
|
46
53
|
- “Need extension-side traces”:
|
|
47
54
|
- Options → Logs → `extension.log` (panel/background events).
|
|
48
55
|
- Enable “Extended logging” in Advanced settings for full pipeline traces.
|
|
49
56
|
- “Stream ended unexpectedly” / empty chat response:
|
|
50
57
|
- The daemon likely stopped mid-stream. Restart it, then click “Try again”.
|
|
51
58
|
- `summarize daemon restart`
|
|
59
|
+
- Slide strip/gallery missing after a parallel slide run failure:
|
|
60
|
+
- Click the slide notice “Try again” button. If the dedicated slide run never started, the extension now requests a fresh summarize+slides run instead of reusing the summary-only run.
|
|
52
61
|
- Tweet video not transcribing / no progress:
|
|
53
|
-
- Ensure `yt-dlp` is available on your PATH (or set `YT_DLP_PATH`) and you have a transcription provider (`whisper.cpp` installed or `OPENAI_API_KEY` / `FAL_KEY`).
|
|
62
|
+
- Ensure `yt-dlp` is available on your PATH (or set `YT_DLP_PATH`) and you have a transcription provider (`whisper.cpp` installed or `GROQ_API_KEY` / `ASSEMBLYAI_API_KEY` / `GEMINI_API_KEY` / `OPENAI_API_KEY` / `FAL_KEY`).
|
|
54
63
|
- Re-run `summarize daemon install --token <TOKEN>` to refresh the daemon env snapshot (launchd won’t inherit your shell PATH).
|
|
55
64
|
- “Could not establish connection / Receiving end does not exist”:
|
|
56
65
|
- The content script wasn’t injected (yet), or Chrome blocked site access.
|
|
@@ -105,6 +114,11 @@ See `docs/media.md` for detection and transcript rules.
|
|
|
105
114
|
|
|
106
115
|
- The slides toggle lights up on media-friendly URLs (YouTube/watch|shorts, youtu.be, direct media) or when the page reports video/audio. Defaults to Video on those pages.
|
|
107
116
|
- Turning slides **on** refreshes the current summary and requests slide extraction (`yt-dlp`, `ffmpeg`). OCR text is opt-in (Advanced setting) and requires `tesseract`. Missing tools surface a footer notice with install instructions; restart the daemon after installing.
|
|
117
|
+
- Active slide mode is slide-first:
|
|
118
|
+
- vertical image/text cards
|
|
119
|
+
- transcript-first text; OCR fallback
|
|
120
|
+
- text can appear before slide images finish extracting
|
|
121
|
+
- the large summary block is hidden while slide cards are active
|
|
108
122
|
- Slides stay off elsewhere and the toggle is disabled on non-media pages.
|
|
109
123
|
|
|
110
124
|
## SPA Navigation
|
|
@@ -161,7 +175,7 @@ Problem: daemon must be secured; extension must discover and pair with it.
|
|
|
161
175
|
- `summarize daemon install --token <TOKEN>` (macOS: LaunchAgent, Linux: systemd user, Windows: Scheduled Task)
|
|
162
176
|
- `summarize daemon status`
|
|
163
177
|
- “Copy command” button.
|
|
164
|
-
- Daemon stores
|
|
178
|
+
- Daemon stores paired tokens in `~/.summarize/daemon.json`.
|
|
165
179
|
- Extension stores token in `chrome.storage.local`.
|
|
166
180
|
- If daemon unreachable or 401: show Setup state + troubleshooting.
|
|
167
181
|
|
|
@@ -245,7 +259,7 @@ Notes:
|
|
|
245
259
|
- `summarize daemon run` (foreground; used by autostart service)
|
|
246
260
|
- Ensure “single daemon”:
|
|
247
261
|
- Stable service name + predictable unit/task path
|
|
248
|
-
- `install`
|
|
262
|
+
- `install` reuses the same daemon service and appends new tokens instead of invalidating older paired browsers
|
|
249
263
|
|
|
250
264
|
Platform details:
|
|
251
265
|
|
package/docs/cli.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
summary: "CLI model providers and config for Claude, Codex, Gemini,
|
|
2
|
+
summary: "CLI model providers and config for Claude, Codex, Gemini, Cursor Agent, OpenClaw, and OpenCode."
|
|
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, Cursor Agent) as local model backends.
|
|
9
|
+
Summarize can use installed CLIs (Claude, Codex, Gemini, Cursor Agent, OpenClaw, OpenCode) 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
|
-
- `cli/gemini/<model>` (e.g. `cli/gemini/gemini-3-flash
|
|
15
|
+
- `cli/gemini/<model>` (e.g. `cli/gemini/gemini-3-flash`)
|
|
16
16
|
- `cli/agent/<model>` (e.g. `cli/agent/gpt-5.2`)
|
|
17
|
+
- `cli/openclaw/<model>` (e.g. `cli/openclaw/main`)
|
|
18
|
+
- `openclaw/<model>` (alias for the same OpenClaw CLI path)
|
|
19
|
+
- `cli/opencode/<model>` (e.g. `cli/opencode/openai/gpt-5.4`)
|
|
20
|
+
- `cli/opencode` (use the OpenCode runtime default model)
|
|
17
21
|
|
|
18
22
|
Use `--cli [provider]` (case-insensitive) for the provider default, or `--model cli/<provider>/<model>` to pin a model.
|
|
19
23
|
If `--cli` is provided without a provider, auto selection is used with CLI enabled.
|
|
@@ -28,7 +32,7 @@ Auto mode can prepend CLI attempts in two ways:
|
|
|
28
32
|
- Auto CLI fallback (`cli.autoFallback`, default enabled):
|
|
29
33
|
- Applies only to **implicit** auto (when no model is set via flag/env/config).
|
|
30
34
|
- Default behavior: only when no API key is configured.
|
|
31
|
-
- Default order: `claude, gemini, codex, agent`.
|
|
35
|
+
- Default order: `claude, gemini, codex, agent, openclaw, opencode`.
|
|
32
36
|
- Remembers + prioritizes the last successful CLI provider (`~/.summarize/cli-state.json`).
|
|
33
37
|
|
|
34
38
|
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).
|
|
@@ -49,7 +53,7 @@ Configure auto CLI fallback:
|
|
|
49
53
|
"autoFallback": {
|
|
50
54
|
"enabled": true,
|
|
51
55
|
"onlyWhenNoApiKeys": true,
|
|
52
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
56
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
59
|
}
|
|
@@ -71,6 +75,8 @@ Binary lookup:
|
|
|
71
75
|
|
|
72
76
|
- `CLAUDE_PATH`, `CODEX_PATH`, `GEMINI_PATH` (optional overrides)
|
|
73
77
|
- `AGENT_PATH` (optional override)
|
|
78
|
+
- `OPENCLAW_PATH` (optional override)
|
|
79
|
+
- `OPENCODE_PATH` (optional override)
|
|
74
80
|
- Otherwise uses `PATH`
|
|
75
81
|
|
|
76
82
|
## Attachments (images/files)
|
|
@@ -82,20 +88,21 @@ path-based prompt and enables the required tool flags:
|
|
|
82
88
|
- Gemini: `--yolo` and `--include-directories <dir>`
|
|
83
89
|
- Codex: `codex exec --output-last-message ...` and `-i <image>` for images
|
|
84
90
|
- Agent: uses built-in file tools in `agent --print` mode (no extra flags)
|
|
91
|
+
- OpenCode: `opencode run --format json ... --file <path>` when a file/image path is required
|
|
85
92
|
|
|
86
93
|
## Config
|
|
87
94
|
|
|
88
95
|
```json
|
|
89
96
|
{
|
|
90
97
|
"cli": {
|
|
91
|
-
"enabled": ["claude", "gemini", "codex", "agent"],
|
|
98
|
+
"enabled": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"],
|
|
92
99
|
"autoFallback": {
|
|
93
100
|
"enabled": true,
|
|
94
101
|
"onlyWhenNoApiKeys": true,
|
|
95
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
102
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
96
103
|
},
|
|
97
104
|
"codex": { "model": "gpt-5.2" },
|
|
98
|
-
"gemini": { "model": "gemini-3-flash
|
|
105
|
+
"gemini": { "model": "gemini-3-flash", "extraArgs": ["--verbose"] },
|
|
99
106
|
"claude": {
|
|
100
107
|
"model": "sonnet",
|
|
101
108
|
"binary": "/usr/local/bin/claude",
|
|
@@ -104,6 +111,13 @@ path-based prompt and enables the required tool flags:
|
|
|
104
111
|
"agent": {
|
|
105
112
|
"model": "gpt-5.2",
|
|
106
113
|
"binary": "/usr/local/bin/agent"
|
|
114
|
+
},
|
|
115
|
+
"openclaw": {
|
|
116
|
+
"model": "main",
|
|
117
|
+
"binary": "/usr/local/bin/openclaw"
|
|
118
|
+
},
|
|
119
|
+
"opencode": {
|
|
120
|
+
"binary": "/usr/local/bin/opencode"
|
|
107
121
|
}
|
|
108
122
|
}
|
|
109
123
|
}
|
|
@@ -115,6 +129,8 @@ Notes:
|
|
|
115
129
|
- If a CLI call fails, auto mode falls back to the next candidate.
|
|
116
130
|
- Cursor Agent CLI uses the `agent` binary and relies on Cursor CLI auth (login or `CURSOR_API_KEY`).
|
|
117
131
|
- Gemini CLI is invoked in headless mode with `--prompt` for compatibility with current Gemini CLI releases.
|
|
132
|
+
- OpenClaw uses the `openclaw agent --agent <model> - --json` path, streams the prompt over stdin, and expects local OpenClaw auth/config to already be set up.
|
|
133
|
+
- OpenCode uses `opencode run --format json`, streams prompt text over stdin, and uses the runtime default model when none is configured.
|
|
118
134
|
|
|
119
135
|
## Quick smoke test (all CLI providers)
|
|
120
136
|
|
|
@@ -127,6 +143,8 @@ summarize --cli codex --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
|
127
143
|
summarize --cli claude --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
128
144
|
summarize --cli gemini --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
129
145
|
summarize --cli agent --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
146
|
+
summarize --cli openclaw --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
147
|
+
summarize --cli opencode --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
130
148
|
```
|
|
131
149
|
|
|
132
150
|
If Agent fails with auth, run `agent login` (interactive) or set `CURSOR_API_KEY`.
|
package/docs/config.md
CHANGED
|
@@ -29,6 +29,12 @@ For output language:
|
|
|
29
29
|
2. Config file `output.language` (preferred) or `language` (legacy)
|
|
30
30
|
3. Built-in default (`auto` = match source content language)
|
|
31
31
|
|
|
32
|
+
For output length:
|
|
33
|
+
|
|
34
|
+
1. CLI flag `--length`
|
|
35
|
+
2. Config file `output.length`
|
|
36
|
+
3. Built-in default (`xl`)
|
|
37
|
+
|
|
32
38
|
See `docs/language.md` for supported values.
|
|
33
39
|
|
|
34
40
|
For prompt:
|
|
@@ -56,19 +62,25 @@ For UI theme:
|
|
|
56
62
|
|
|
57
63
|
```json
|
|
58
64
|
{
|
|
59
|
-
"model": { "id": "google/gemini-3-flash
|
|
65
|
+
"model": { "id": "google/gemini-3-flash" },
|
|
60
66
|
"env": { "OPENAI_API_KEY": "sk-..." },
|
|
61
|
-
"output": { "language": "auto" },
|
|
67
|
+
"output": { "language": "auto", "length": "long" },
|
|
62
68
|
"prompt": "Explain like I am five.",
|
|
63
69
|
"ui": { "theme": "ember" }
|
|
64
70
|
}
|
|
65
71
|
```
|
|
66
72
|
|
|
73
|
+
`output.length` accepts the same values as `--length`:
|
|
74
|
+
|
|
75
|
+
- Presets: `short`, `medium`, `long`, `xl`, `xxl`
|
|
76
|
+
- Shorthand: `s`, `m`, `l`
|
|
77
|
+
- Character targets: `1500`, `20k`, `20000`
|
|
78
|
+
|
|
67
79
|
Shorthand (equivalent):
|
|
68
80
|
|
|
69
81
|
```json
|
|
70
82
|
{
|
|
71
|
-
"model": "google/gemini-3-flash
|
|
83
|
+
"model": "google/gemini-3-flash"
|
|
72
84
|
}
|
|
73
85
|
```
|
|
74
86
|
|
|
@@ -107,6 +119,7 @@ Set any env var in config (process env still wins):
|
|
|
107
119
|
```json
|
|
108
120
|
{
|
|
109
121
|
"env": {
|
|
122
|
+
"ASSEMBLYAI_API_KEY": "...",
|
|
110
123
|
"OPENAI_API_KEY": "sk-...",
|
|
111
124
|
"OPENROUTER_API_KEY": "sk-or-...",
|
|
112
125
|
"FIRECRAWL_API_KEY": "...",
|
|
@@ -121,6 +134,8 @@ Legacy shortcut (still supported):
|
|
|
121
134
|
{
|
|
122
135
|
"apiKeys": {
|
|
123
136
|
"openai": "sk-...",
|
|
137
|
+
"groq": "gsk-...",
|
|
138
|
+
"assemblyai": "...",
|
|
124
139
|
"anthropic": "sk-ant-...",
|
|
125
140
|
"google": "...",
|
|
126
141
|
"openrouter": "sk-or-...",
|
|
@@ -260,7 +275,7 @@ For auto selection with rules:
|
|
|
260
275
|
"rules": [
|
|
261
276
|
{
|
|
262
277
|
"when": ["video"],
|
|
263
|
-
"candidates": ["google/gemini-3-flash
|
|
278
|
+
"candidates": ["google/gemini-3-flash"]
|
|
264
279
|
},
|
|
265
280
|
{
|
|
266
281
|
"when": ["website", "youtube"],
|
|
@@ -313,15 +328,17 @@ Examples:
|
|
|
313
328
|
```json
|
|
314
329
|
{
|
|
315
330
|
"cli": {
|
|
316
|
-
"enabled": ["gemini", "agent"],
|
|
331
|
+
"enabled": ["gemini", "agent", "openclaw", "opencode"],
|
|
317
332
|
"autoFallback": {
|
|
318
333
|
"enabled": true,
|
|
319
334
|
"onlyWhenNoApiKeys": true,
|
|
320
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
335
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
321
336
|
},
|
|
322
337
|
"codex": { "model": "gpt-5.2" },
|
|
323
338
|
"claude": { "binary": "/usr/local/bin/claude", "extraArgs": ["--verbose"] },
|
|
324
|
-
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" }
|
|
339
|
+
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" },
|
|
340
|
+
"openclaw": { "binary": "/usr/local/bin/openclaw", "model": "main" },
|
|
341
|
+
"opencode": { "binary": "/usr/local/bin/opencode", "model": "openai/gpt-5.4" }
|
|
325
342
|
}
|
|
326
343
|
}
|
|
327
344
|
```
|
|
@@ -330,7 +347,7 @@ Notes:
|
|
|
330
347
|
|
|
331
348
|
- `cli.enabled` is an allowlist (and order) for auto + explicit CLI model ids.
|
|
332
349
|
- `cli.autoFallback` controls implicit-auto CLI fallback when `cli.enabled` is not set.
|
|
333
|
-
- Default auto fallback order: `claude, gemini, codex, agent`.
|
|
350
|
+
- Default auto fallback order: `claude, gemini, codex, agent, openclaw, opencode`.
|
|
334
351
|
- Auto fallback stores the last successful provider in `~/.summarize/cli-state.json` and prioritizes it on the next run.
|
|
335
352
|
- `cli.<provider>.binary` overrides CLI binary discovery.
|
|
336
353
|
- `cli.<provider>.extraArgs` appends extra CLI args.
|
|
@@ -359,9 +376,11 @@ Override API endpoints for any provider to use proxies, gateways, or compatible
|
|
|
359
376
|
```json
|
|
360
377
|
{
|
|
361
378
|
"openai": { "baseUrl": "https://my-openai-proxy.example.com/v1" },
|
|
379
|
+
"nvidia": { "baseUrl": "https://integrate.api.nvidia.com/v1" },
|
|
362
380
|
"anthropic": { "baseUrl": "https://my-anthropic-proxy.example.com" },
|
|
363
381
|
"google": { "baseUrl": "https://my-google-proxy.example.com" },
|
|
364
|
-
"xai": { "baseUrl": "https://my-xai-proxy.example.com" }
|
|
382
|
+
"xai": { "baseUrl": "https://my-xai-proxy.example.com" },
|
|
383
|
+
"zai": { "baseUrl": "https://api.zhipuai.cn/paas/v4" }
|
|
365
384
|
}
|
|
366
385
|
```
|
|
367
386
|
|
|
@@ -370,6 +389,8 @@ Or via environment variables (which take precedence over config):
|
|
|
370
389
|
| Provider | Environment Variable(s) |
|
|
371
390
|
| --------- | -------------------------------------------- |
|
|
372
391
|
| OpenAI | `OPENAI_BASE_URL` |
|
|
392
|
+
| NVIDIA | `NVIDIA_BASE_URL` |
|
|
373
393
|
| Anthropic | `ANTHROPIC_BASE_URL` |
|
|
374
394
|
| Google | `GOOGLE_BASE_URL` (alias: `GEMINI_BASE_URL`) |
|
|
375
395
|
| xAI | `XAI_BASE_URL` |
|
|
396
|
+
| Z.AI | `Z_AI_BASE_URL` (alias: `ZAI_BASE_URL`) |
|
package/docs/extract-only.md
CHANGED
|
@@ -18,13 +18,13 @@ Deprecated alias: `--extract-only`.
|
|
|
18
18
|
- `--format md` may still convert HTML to Markdown (depending on `--markdown-mode` and available tools).
|
|
19
19
|
- `--length` is intended for summarization guidance; extraction prints full content.
|
|
20
20
|
- `--timestamps` keeps the plain transcript text but also exposes `transcriptSegments` and `transcriptTimedText` (JSON) and prints a timed transcript block when available.
|
|
21
|
-
- `--slides` runs slide detection (YouTube/direct video URLs). Slide metadata is included in JSON output and written to `slides.json` in the slide directory.
|
|
21
|
+
- `--slides` runs slide detection (YouTube/direct video URLs/local video files). Slide metadata is included in JSON output and written to `slides.json` in the slide directory.
|
|
22
22
|
- When combined with `--extract` for videos that have timed transcripts, the CLI interleaves slide images inline at matching timestamps.
|
|
23
23
|
- Scene detection auto-tunes using sampled frame hashes.
|
|
24
24
|
- For non-YouTube URLs with `--format md`, the CLI uses Readability article HTML as the default Markdown input (`--markdown-mode readability`).
|
|
25
25
|
- Use `--markdown-mode auto` to prefer LLM/markitdown conversion without Readability preprocessing.
|
|
26
26
|
- Use `--markdown-mode llm` to force an LLM conversion.
|
|
27
|
-
- Use `--firecrawl always` to try Firecrawl first.
|
|
27
|
+
- Use `--firecrawl always` to try Firecrawl first for non-YouTube URLs.
|
|
28
28
|
- For non-YouTube URLs with `--format md`, `--markdown-mode auto` can convert HTML to Markdown via an LLM when configured.
|
|
29
29
|
- Force it with `--markdown-mode llm`.
|
|
30
30
|
- If no LLM is configured, `--markdown-mode auto` may fall back to `uvx markitdown` when available.
|
package/docs/firecrawl.md
CHANGED
|
@@ -12,7 +12,8 @@ Firecrawl is a fallback for sites that block direct HTML fetching or don’t ren
|
|
|
12
12
|
|
|
13
13
|
- `off`: never use Firecrawl.
|
|
14
14
|
- `auto` (default): use Firecrawl only when HTML extraction looks blocked/thin.
|
|
15
|
-
- `always`: try Firecrawl first (falls back to HTML if Firecrawl is unavailable/empty).
|
|
15
|
+
- `always`: try Firecrawl first for non-YouTube URLs (falls back to HTML if Firecrawl is unavailable/empty).
|
|
16
|
+
- YouTube URLs reject `--firecrawl always`; use `--youtube auto|web|yt-dlp|apify` instead.
|
|
16
17
|
|
|
17
18
|
## Extract default
|
|
18
19
|
|
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
|
>
|