@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CliProvider } from "../config.js";
|
|
2
2
|
import type { FirecrawlMode, LengthArg, MarkdownMode, PreprocessMode, VideoMode, YoutubeMode } from "../flags.js";
|
|
3
3
|
import type { OutputLanguage } from "../language.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type SummaryLengthTarget } from "../prompts/index.js";
|
|
5
5
|
export type ResolvedRunSettings = {
|
|
6
6
|
lengthArg: LengthArg;
|
|
7
7
|
firecrawlMode: FirecrawlMode;
|
|
@@ -50,6 +50,7 @@ export declare function resolveSummaryLength(raw: unknown, fallback?: string): {
|
|
|
50
50
|
lengthArg: LengthArg;
|
|
51
51
|
summaryLength: SummaryLengthTarget;
|
|
52
52
|
};
|
|
53
|
+
export declare function buildPromptLengthInstruction(lengthArg: LengthArg): string;
|
|
53
54
|
export declare function resolveOutputLanguageSetting({ raw, fallback, }: {
|
|
54
55
|
raw: unknown;
|
|
55
56
|
fallback: OutputLanguage;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CacheState } from "../cache.js";
|
|
2
|
+
import type { MediaCache } from "../content/index.js";
|
|
3
|
+
import { type SummarizeAssetArgs } from "./flows/asset/summary.js";
|
|
4
|
+
import { type UrlFlowContext } from "./flows/url/types.js";
|
|
5
|
+
type SummarizeMediaFile = typeof import("./flows/asset/media.js").summarizeMediaFile;
|
|
6
|
+
export declare function createRunnerFlowContexts(options: {
|
|
7
|
+
summarizeMediaFileImpl: SummarizeMediaFile;
|
|
8
|
+
cacheState: CacheState;
|
|
9
|
+
mediaCache: MediaCache | null;
|
|
10
|
+
io: UrlFlowContext["io"];
|
|
11
|
+
flags: UrlFlowContext["flags"];
|
|
12
|
+
model: UrlFlowContext["model"];
|
|
13
|
+
setTranscriptionCost: UrlFlowContext["hooks"]["setTranscriptionCost"];
|
|
14
|
+
writeViaFooter: UrlFlowContext["hooks"]["writeViaFooter"];
|
|
15
|
+
clearProgressForStdout: UrlFlowContext["hooks"]["clearProgressForStdout"];
|
|
16
|
+
restoreProgressAfterStdout: UrlFlowContext["hooks"]["restoreProgressAfterStdout"];
|
|
17
|
+
setClearProgressBeforeStdout: UrlFlowContext["hooks"]["setClearProgressBeforeStdout"];
|
|
18
|
+
clearProgressIfCurrent: UrlFlowContext["hooks"]["clearProgressIfCurrent"];
|
|
19
|
+
buildReport: UrlFlowContext["hooks"]["buildReport"];
|
|
20
|
+
estimateCostUsd: UrlFlowContext["hooks"]["estimateCostUsd"];
|
|
21
|
+
}): {
|
|
22
|
+
summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
|
|
23
|
+
assetInputContext: {
|
|
24
|
+
env: Record<string, string | undefined>;
|
|
25
|
+
envForRun: Record<string, string | undefined>;
|
|
26
|
+
stderr: NodeJS.WritableStream;
|
|
27
|
+
progressEnabled: boolean;
|
|
28
|
+
timeoutMs: number;
|
|
29
|
+
trackedFetch: typeof fetch;
|
|
30
|
+
summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
|
|
31
|
+
summarizeMediaFile: (args: Parameters<SummarizeMediaFile>[1]) => Promise<void>;
|
|
32
|
+
setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
|
|
33
|
+
clearProgressIfCurrent: (fn: () => void) => void;
|
|
34
|
+
};
|
|
35
|
+
urlFlowContext: UrlFlowContext;
|
|
36
|
+
};
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { InputTarget } from "../content/asset.js";
|
|
2
|
+
import type { RunMetricsReport } from "../costs.js";
|
|
3
|
+
import type { ExecFileFn } from "../markitdown.js";
|
|
4
|
+
import type { AssetExtractContext } from "./flows/asset/extract.js";
|
|
5
|
+
import type { SummarizeAssetArgs } from "./flows/asset/summary.js";
|
|
6
|
+
export declare function executeRunnerInput(options: {
|
|
7
|
+
inputTarget: InputTarget;
|
|
8
|
+
stdin: NodeJS.ReadableStream;
|
|
9
|
+
handleFileInputContext: unknown;
|
|
10
|
+
url: string | null;
|
|
11
|
+
isYoutubeUrl: boolean;
|
|
12
|
+
withUrlAssetContext: unknown;
|
|
13
|
+
slidesEnabled: boolean;
|
|
14
|
+
extractMode: boolean;
|
|
15
|
+
progressEnabled: boolean;
|
|
16
|
+
renderSpinnerStatus: (label: string, detail?: string) => string;
|
|
17
|
+
renderSpinnerStatusWithModel: (label: string, modelId: string) => string;
|
|
18
|
+
extractAssetContext: AssetExtractContext & {
|
|
19
|
+
execFileImpl: ExecFileFn;
|
|
20
|
+
};
|
|
21
|
+
outputExtractedAssetContext: {
|
|
22
|
+
io: {
|
|
23
|
+
env: Record<string, string | undefined>;
|
|
24
|
+
envForRun: Record<string, string | undefined>;
|
|
25
|
+
stdout: NodeJS.WritableStream;
|
|
26
|
+
stderr: NodeJS.WritableStream;
|
|
27
|
+
};
|
|
28
|
+
flags: {
|
|
29
|
+
timeoutMs: number;
|
|
30
|
+
preprocessMode: "off" | "auto" | "always";
|
|
31
|
+
format: "text" | "markdown";
|
|
32
|
+
plain: boolean;
|
|
33
|
+
json: boolean;
|
|
34
|
+
metricsEnabled: boolean;
|
|
35
|
+
metricsDetailed: boolean;
|
|
36
|
+
shouldComputeReport: boolean;
|
|
37
|
+
runStartedAtMs: number;
|
|
38
|
+
verboseColor: boolean;
|
|
39
|
+
};
|
|
40
|
+
hooks: {
|
|
41
|
+
clearProgressForStdout: () => void;
|
|
42
|
+
restoreProgressAfterStdout?: (() => void) | null;
|
|
43
|
+
buildReport: () => Promise<RunMetricsReport>;
|
|
44
|
+
estimateCostUsd: () => Promise<number | null>;
|
|
45
|
+
};
|
|
46
|
+
apiStatus: {
|
|
47
|
+
xaiApiKey: string | null;
|
|
48
|
+
apiKey: string | null;
|
|
49
|
+
openrouterApiKey: string | null;
|
|
50
|
+
apifyToken: string | null;
|
|
51
|
+
firecrawlConfigured: boolean;
|
|
52
|
+
googleConfigured: boolean;
|
|
53
|
+
anthropicConfigured: boolean;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
|
|
57
|
+
runUrlFlowContext: unknown;
|
|
58
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type FirecrawlMode, type LengthArg, type MarkdownMode, type PreprocessMode, parseExtractFormat, parseMaxExtractCharactersArg, parseMetricsMode, parseStreamMode, type YoutubeMode } from "../flags.js";
|
|
2
|
+
type Transcriber = "auto" | "whisper" | "parakeet" | "canary";
|
|
3
|
+
export type RunnerFlagResolution = {
|
|
4
|
+
videoModeExplicitlySet: boolean;
|
|
5
|
+
lengthExplicitlySet: boolean;
|
|
6
|
+
languageExplicitlySet: boolean;
|
|
7
|
+
noCacheFlag: boolean;
|
|
8
|
+
noMediaCacheFlag: boolean;
|
|
9
|
+
extractMode: boolean;
|
|
10
|
+
json: boolean;
|
|
11
|
+
forceSummary: boolean;
|
|
12
|
+
slidesDebug: boolean;
|
|
13
|
+
streamMode: ReturnType<typeof parseStreamMode>;
|
|
14
|
+
plain: boolean;
|
|
15
|
+
debug: boolean;
|
|
16
|
+
verbose: boolean;
|
|
17
|
+
transcriber: Transcriber;
|
|
18
|
+
maxExtractCharacters: ReturnType<typeof parseMaxExtractCharactersArg>;
|
|
19
|
+
isYoutubeUrl: boolean;
|
|
20
|
+
format: ReturnType<typeof parseExtractFormat>;
|
|
21
|
+
youtubeMode: YoutubeMode;
|
|
22
|
+
lengthArg: LengthArg;
|
|
23
|
+
maxOutputTokensArg: number | null;
|
|
24
|
+
timeoutMs: number;
|
|
25
|
+
retries: number;
|
|
26
|
+
preprocessMode: PreprocessMode;
|
|
27
|
+
requestedFirecrawlMode: FirecrawlMode;
|
|
28
|
+
markdownMode: MarkdownMode;
|
|
29
|
+
metricsMode: ReturnType<typeof parseMetricsMode>;
|
|
30
|
+
metricsEnabled: boolean;
|
|
31
|
+
metricsDetailed: boolean;
|
|
32
|
+
shouldComputeReport: boolean;
|
|
33
|
+
markdownModeExplicitlySet: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare function resolveRunnerFlags({ normalizedArgv, programOpts, envForRun, url, }: {
|
|
36
|
+
normalizedArgv: readonly string[];
|
|
37
|
+
programOpts: Record<string, unknown>;
|
|
38
|
+
envForRun: Record<string, string | undefined>;
|
|
39
|
+
url: string | null;
|
|
40
|
+
}): RunnerFlagResolution;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type CacheState } from "../cache.js";
|
|
3
|
+
import type { ExecFileFn } from "../markitdown.js";
|
|
4
|
+
export type RunnerPlan = {
|
|
5
|
+
cacheState: CacheState;
|
|
6
|
+
execute: () => Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
export declare function createRunnerPlan(options: {
|
|
9
|
+
normalizedArgv: string[];
|
|
10
|
+
program: Command;
|
|
11
|
+
env: Record<string, string | undefined>;
|
|
12
|
+
envForRun: Record<string, string | undefined>;
|
|
13
|
+
fetchImpl: typeof fetch;
|
|
14
|
+
execFileImpl: ExecFileFn;
|
|
15
|
+
stdin?: NodeJS.ReadableStream;
|
|
16
|
+
stdout: NodeJS.WritableStream;
|
|
17
|
+
stderr: NodeJS.WritableStream;
|
|
18
|
+
promptOverride: string | null;
|
|
19
|
+
}): Promise<RunnerPlan>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function prepareRunEnvironment(argv: string[], inputEnv: Record<string, string | undefined>): {
|
|
2
|
+
normalizedArgv: string[];
|
|
3
|
+
envForRun: Record<string, string | undefined>;
|
|
4
|
+
};
|
|
5
|
+
export declare function handleVersionFlag({ versionRequested, stdout, }: {
|
|
6
|
+
versionRequested: boolean;
|
|
7
|
+
stdout: NodeJS.WritableStream;
|
|
8
|
+
}): boolean;
|
|
9
|
+
export declare function applyWidthOverride({ width, env, }: {
|
|
10
|
+
width: unknown;
|
|
11
|
+
env: Record<string, string | undefined>;
|
|
12
|
+
}): void;
|
|
13
|
+
export declare function resolvePromptOverride({ prompt, promptFile, }: {
|
|
14
|
+
prompt: unknown;
|
|
15
|
+
promptFile: unknown;
|
|
16
|
+
}): Promise<string | null>;
|
|
17
|
+
export declare function handleCacheUtilityFlags({ normalizedArgv, envForRun, stdout, }: {
|
|
18
|
+
normalizedArgv: string[];
|
|
19
|
+
envForRun: Record<string, string | undefined>;
|
|
20
|
+
stdout: NodeJS.WritableStream;
|
|
21
|
+
}): Promise<boolean>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SummarizeConfig } from "../config.js";
|
|
2
|
+
import type { InputTarget } from "../content/asset.js";
|
|
3
|
+
import { type SlideSettings } from "../slides/index.js";
|
|
4
|
+
export declare function resolveRunnerSlidesSettings(options: {
|
|
5
|
+
normalizedArgv: string[];
|
|
6
|
+
programOpts: Record<string, unknown>;
|
|
7
|
+
config: SummarizeConfig | null;
|
|
8
|
+
inputTarget: InputTarget;
|
|
9
|
+
}): SlideSettings | null;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { LlmProvider } from "../llm/model-id.js";
|
|
1
2
|
export { mergeStreamingChunk } from "../shared/streaming-merge.js";
|
|
2
3
|
export declare function isGoogleStreamingUnsupportedError(error: unknown): boolean;
|
|
3
4
|
export declare function isStreamingTimeoutError(error: unknown): boolean;
|
|
4
5
|
export declare function canStream({ provider, prompt, transport, }: {
|
|
5
|
-
provider:
|
|
6
|
+
provider: LlmProvider;
|
|
6
7
|
prompt: {
|
|
7
8
|
attachments?: Array<{
|
|
8
9
|
kind: "text" | "image" | "document";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CliProvider } from "../config.js";
|
|
2
|
-
import type { Prompt } from "../llm/prompt.js";
|
|
3
|
-
import type { ModelAttempt, ModelMeta } from "./types.js";
|
|
4
2
|
import { runCliModel } from "../llm/cli.js";
|
|
3
|
+
import type { Prompt } from "../llm/prompt.js";
|
|
5
4
|
import { type StreamOutputMode } from "./stream-output.js";
|
|
6
5
|
import { summarizeWithModelId } from "./summary-llm.js";
|
|
6
|
+
import type { ModelAttempt, ModelMeta } from "./types.js";
|
|
7
7
|
export type SummaryEngineDeps = {
|
|
8
8
|
env: Record<string, string | undefined>;
|
|
9
9
|
envForRun: Record<string, string | undefined>;
|
|
@@ -24,7 +24,7 @@ export type SummaryEngineDeps = {
|
|
|
24
24
|
resolveMaxOutputTokensForCall: (modelId: string) => Promise<number | null>;
|
|
25
25
|
resolveMaxInputTokensForCall: (modelId: string) => Promise<number | null>;
|
|
26
26
|
llmCalls: Array<{
|
|
27
|
-
provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "cli";
|
|
27
|
+
provider: "xai" | "openai" | "google" | "anthropic" | "zai" | "nvidia" | "github-copilot" | "cli";
|
|
28
28
|
model: string;
|
|
29
29
|
usage: Awaited<ReturnType<typeof summarizeWithModelId>>["usage"] | null;
|
|
30
30
|
costUsd?: number | null;
|
|
@@ -48,6 +48,10 @@ export type SummaryEngineDeps = {
|
|
|
48
48
|
apiKey: string | null;
|
|
49
49
|
baseUrl: string;
|
|
50
50
|
};
|
|
51
|
+
nvidia: {
|
|
52
|
+
apiKey: string | null;
|
|
53
|
+
baseUrl: string;
|
|
54
|
+
};
|
|
51
55
|
providerBaseUrls: {
|
|
52
56
|
openai: string | null;
|
|
53
57
|
anthropic: string | null;
|
|
@@ -64,7 +68,7 @@ export type SummaryStreamHandler = {
|
|
|
64
68
|
onDone?: ((finalText: string) => void | Promise<void>) | null;
|
|
65
69
|
};
|
|
66
70
|
export declare function createSummaryEngine(deps: SummaryEngineDeps): {
|
|
67
|
-
|
|
71
|
+
applyOpenAiGatewayOverrides: (attempt: ModelAttempt) => ModelAttempt;
|
|
68
72
|
envHasKeyFor: (requiredEnv: ModelAttempt["requiredEnv"]) => boolean;
|
|
69
73
|
formatMissingModelError: (attempt: ModelAttempt) => string;
|
|
70
74
|
runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, streamHandler, }: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { generateTextWithModelId } from "../llm/generate-text.js";
|
|
2
|
+
import type { LlmProvider } from "../llm/model-id.js";
|
|
1
3
|
import type { parseGatewayStyleModelId } from "../llm/model-id.js";
|
|
2
4
|
import type { Prompt } from "../llm/prompt.js";
|
|
3
|
-
import { generateTextWithModelId } from "../llm/generate-text.js";
|
|
4
5
|
export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchImpl, timeoutMs, }: {
|
|
5
6
|
parsedModel: ReturnType<typeof parseGatewayStyleModelId>;
|
|
6
7
|
apiKeys: {
|
|
@@ -13,7 +14,7 @@ export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchIm
|
|
|
13
14
|
note: string | null;
|
|
14
15
|
forceStreamOff: boolean;
|
|
15
16
|
}>;
|
|
16
|
-
export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens, timeoutMs, fetchImpl, apiKeys, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
|
|
17
|
+
export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens, timeoutMs, fetchImpl, apiKeys, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, zaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
|
|
17
18
|
modelId: string;
|
|
18
19
|
prompt: Prompt;
|
|
19
20
|
maxOutputTokens?: number;
|
|
@@ -31,6 +32,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
|
|
|
31
32
|
anthropicBaseUrlOverride?: string | null;
|
|
32
33
|
googleBaseUrlOverride?: string | null;
|
|
33
34
|
xaiBaseUrlOverride?: string | null;
|
|
35
|
+
zaiBaseUrlOverride?: string | null;
|
|
34
36
|
forceChatCompletions?: boolean;
|
|
35
37
|
retries: number;
|
|
36
38
|
onRetry?: (notice: {
|
|
@@ -41,7 +43,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
|
|
|
41
43
|
}) => void;
|
|
42
44
|
}): Promise<{
|
|
43
45
|
text: string;
|
|
44
|
-
provider:
|
|
46
|
+
provider: LlmProvider;
|
|
45
47
|
canonicalModelId: string;
|
|
46
48
|
usage: Awaited<ReturnType<typeof generateTextWithModelId>>["usage"];
|
|
47
49
|
}>;
|
|
@@ -2,5 +2,7 @@ export declare function isRichTty(stream: NodeJS.WritableStream): boolean;
|
|
|
2
2
|
export declare function supportsColor(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): boolean;
|
|
3
3
|
export declare function terminalWidth(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
|
|
4
4
|
export declare function terminalHeight(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
|
|
5
|
+
/** Default max width for markdown rendering to keep text readable on wide terminals. */
|
|
6
|
+
export declare const DEFAULT_MAX_RENDER_WIDTH = 120;
|
|
5
7
|
export declare function markdownRenderWidth(stream: NodeJS.WritableStream, env: Record<string, string | undefined>): number;
|
|
6
8
|
export declare function ansi(code: string, input: string, enabled: boolean): string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CliProvider } from "../config.js";
|
|
2
|
-
|
|
2
|
+
import type { LlmProvider } from "../llm/model-id.js";
|
|
3
|
+
export type ModelAttemptRequiredEnv = "XAI_API_KEY" | "OPENAI_API_KEY" | "NVIDIA_API_KEY" | "GEMINI_API_KEY" | "ANTHROPIC_API_KEY" | "OPENROUTER_API_KEY" | "Z_AI_API_KEY" | "GITHUB_TOKEN" | "CLI_CLAUDE" | "CLI_CODEX" | "CLI_GEMINI" | "CLI_AGENT" | "CLI_OPENCLAW" | "CLI_OPENCODE";
|
|
3
4
|
export type ModelAttempt = {
|
|
4
5
|
transport: "native" | "openrouter" | "cli";
|
|
5
6
|
userModelId: string;
|
|
@@ -14,7 +15,7 @@ export type ModelAttempt = {
|
|
|
14
15
|
cliModel?: string | null;
|
|
15
16
|
};
|
|
16
17
|
export type ModelMeta = {
|
|
17
|
-
provider:
|
|
18
|
+
provider: LlmProvider | "cli";
|
|
18
19
|
canonical: string;
|
|
19
20
|
};
|
|
20
21
|
export type MarkdownModel = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { buildSlideTextFallback, coerceSummaryWithSlides, parseSlideSummariesFromMarkdown, parseTranscriptTimedText, resolveSlideTextBudget, splitSlideTitleFromText, splitSummaryFromSlides, type SlideTimelineEntry, } from "../run/flows/url/slides-text.js";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare function buildYtDlpCookiesArgs(cookiesFromBrowser?: string | null): string[];
|
|
2
|
+
export declare function buildSlidesMediaCacheKey(url: string): string;
|
|
3
|
+
export declare function formatBytes(bytes: number): string;
|
|
4
|
+
export declare function downloadYoutubeVideo(options: {
|
|
5
|
+
ytDlpPath: string;
|
|
6
|
+
url: string;
|
|
7
|
+
timeoutMs: number;
|
|
8
|
+
format: string;
|
|
9
|
+
cookiesFromBrowser?: string | null;
|
|
10
|
+
onProgress?: ((percent: number, detail?: string) => void) | null;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
filePath: string;
|
|
13
|
+
cleanup: () => Promise<void>;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function downloadRemoteVideo(options: {
|
|
16
|
+
url: string;
|
|
17
|
+
timeoutMs: number;
|
|
18
|
+
onProgress?: ((percent: number, detail?: string) => void) | null;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
filePath: string;
|
|
21
|
+
cleanup: () => Promise<void>;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function resolveYoutubeStreamUrl(options: {
|
|
24
|
+
ytDlpPath: string;
|
|
25
|
+
url: string;
|
|
26
|
+
timeoutMs: number;
|
|
27
|
+
format: string;
|
|
28
|
+
cookiesFromBrowser?: string | null;
|
|
29
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SlideAutoTune, SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from "./types.js";
|
|
2
|
+
export declare const SLIDES_PROGRESS: {
|
|
3
|
+
readonly PREPARE: 2;
|
|
4
|
+
readonly FETCH_VIDEO: 6;
|
|
5
|
+
readonly DOWNLOAD_VIDEO: 35;
|
|
6
|
+
readonly DETECT_SCENES: 60;
|
|
7
|
+
readonly EXTRACT_FRAMES: 90;
|
|
8
|
+
readonly OCR: 99;
|
|
9
|
+
readonly FINAL: 100;
|
|
10
|
+
};
|
|
11
|
+
export type SlidesChunkMeta = {
|
|
12
|
+
slidesDir: string;
|
|
13
|
+
sourceUrl: string;
|
|
14
|
+
sourceId: string;
|
|
15
|
+
sourceKind: SlideSourceKind;
|
|
16
|
+
ocrAvailable: boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare function buildSlidesChunkMeta(args: {
|
|
19
|
+
slidesDir: string;
|
|
20
|
+
source: SlideSource;
|
|
21
|
+
ocrAvailable: boolean;
|
|
22
|
+
}): SlidesChunkMeta;
|
|
23
|
+
export declare function buildSlideTimeline(args: {
|
|
24
|
+
source: SlideSource;
|
|
25
|
+
slidesDir: string;
|
|
26
|
+
sceneThreshold: number;
|
|
27
|
+
autoTuneThreshold: boolean;
|
|
28
|
+
autoTune: SlideAutoTune;
|
|
29
|
+
maxSlides: number;
|
|
30
|
+
minSlideDuration: number;
|
|
31
|
+
ocrRequested: boolean;
|
|
32
|
+
ocrAvailable: boolean;
|
|
33
|
+
warnings: string[];
|
|
34
|
+
slides: Array<SlideImage & {
|
|
35
|
+
segment?: unknown;
|
|
36
|
+
}>;
|
|
37
|
+
}): SlideExtractionResult;
|
|
38
|
+
export declare function emitPlaceholderSlides(args: {
|
|
39
|
+
slides: Array<SlideImage & {
|
|
40
|
+
segment?: unknown;
|
|
41
|
+
}>;
|
|
42
|
+
meta: SlidesChunkMeta;
|
|
43
|
+
onSlideChunk?: ((value: {
|
|
44
|
+
slide: SlideImage;
|
|
45
|
+
meta: SlidesChunkMeta;
|
|
46
|
+
}) => void) | null;
|
|
47
|
+
}): void;
|
|
48
|
+
export declare function emitFinalSlides(args: {
|
|
49
|
+
slides: SlideImage[];
|
|
50
|
+
meta: SlidesChunkMeta;
|
|
51
|
+
onSlideChunk?: ((value: {
|
|
52
|
+
slide: SlideImage;
|
|
53
|
+
meta: SlidesChunkMeta;
|
|
54
|
+
}) => void) | null;
|
|
55
|
+
}): void;
|
|
56
|
+
export declare function renameSlidesWithTimestamps(slides: SlideImage[], slidesDir: string): Promise<SlideImage[]>;
|
|
57
|
+
export declare function writeSlidesJson(result: SlideExtractionResult, slidesDir: string): Promise<void>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaCache } from "../content/index.js";
|
|
2
2
|
import type { SlideSettings } from "./settings.js";
|
|
3
3
|
import type { SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from "./types.js";
|
|
4
|
+
export { parseShowinfoTimestamp, resolveExtractedTimestamp } from "./scene-detection.js";
|
|
4
5
|
type ExtractSlidesArgs = {
|
|
5
6
|
source: SlideSource;
|
|
6
7
|
settings: SlideSettings;
|
|
@@ -28,16 +29,4 @@ type ExtractSlidesArgs = {
|
|
|
28
29
|
onSlidesLog?: ((message: string) => void) | null;
|
|
29
30
|
} | null;
|
|
30
31
|
};
|
|
31
|
-
export declare function resolveSlideSource({ url, extracted, }: {
|
|
32
|
-
url: string;
|
|
33
|
-
extracted: ExtractedLinkContent;
|
|
34
|
-
}): SlideSource | null;
|
|
35
|
-
export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
|
|
36
32
|
export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
|
|
37
|
-
export declare function parseShowinfoTimestamp(line: string): number | null;
|
|
38
|
-
export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
|
|
39
|
-
requested: number;
|
|
40
|
-
actual: number | null;
|
|
41
|
-
seekBase?: number | null;
|
|
42
|
-
}): number;
|
|
43
|
-
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SlideAutoTune, SlideImage } from "./types.js";
|
|
2
|
+
export declare function detectSlideTimestamps({ ffmpegPath, ffprobePath, inputPath, sceneThreshold, autoTuneThreshold, env, timeoutMs, warnings, workers, sampleCount, onSegmentProgress, logSlides, logSlidesTiming, }: {
|
|
3
|
+
ffmpegPath: string;
|
|
4
|
+
ffprobePath: string | null;
|
|
5
|
+
inputPath: string;
|
|
6
|
+
sceneThreshold: number;
|
|
7
|
+
autoTuneThreshold: boolean;
|
|
8
|
+
env: Record<string, string | undefined>;
|
|
9
|
+
timeoutMs: number;
|
|
10
|
+
warnings: string[];
|
|
11
|
+
workers: number;
|
|
12
|
+
sampleCount: number;
|
|
13
|
+
onSegmentProgress?: ((completed: number, total: number) => void) | null;
|
|
14
|
+
logSlides?: ((message: string) => void) | null;
|
|
15
|
+
logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
timestamps: number[];
|
|
18
|
+
autoTune: SlideAutoTune;
|
|
19
|
+
durationSeconds: number | null;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function extractFramesAtTimestamps({ ffmpegPath, inputPath, outputDir, timestamps, segments, durationSeconds, timeoutMs, workers, onProgress, onStatus, onSlide, logSlides, logSlidesTiming, }: {
|
|
22
|
+
ffmpegPath: string;
|
|
23
|
+
inputPath: string;
|
|
24
|
+
outputDir: string;
|
|
25
|
+
timestamps: number[];
|
|
26
|
+
segments?: Array<{
|
|
27
|
+
start: number;
|
|
28
|
+
end: number | null;
|
|
29
|
+
} | null>;
|
|
30
|
+
durationSeconds?: number | null;
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
workers: number;
|
|
33
|
+
onProgress?: ((completed: number, total: number) => void) | null;
|
|
34
|
+
onStatus?: ((text: string) => void) | null;
|
|
35
|
+
onSlide?: ((slide: SlideImage) => void) | null;
|
|
36
|
+
logSlides?: ((message: string) => void) | null;
|
|
37
|
+
logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
|
|
38
|
+
}): Promise<SlideImage[]>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp,
|
|
1
|
+
export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp, } from "./extract.js";
|
|
2
|
+
export { isDirectVideoInput, resolveSlideSource, resolveSlideSourceFromUrl } from "./source.js";
|
|
2
3
|
export type { SlideSettings, SlideSettingsInput } from "./settings.js";
|
|
3
4
|
export { resolveSlideSettings } from "./settings.js";
|
|
4
5
|
export { buildSlidesDirId, readSlidesCacheIfValid, resolveSlideImagePath, resolveSlidesDir, serializeSlideImagePath, validateSlidesCache, } from "./store.js";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { MediaCache } from "../content/index.js";
|
|
2
|
+
import type { SlideSource } from "./types.js";
|
|
3
|
+
export type SlidesIngestProgress = (label: string, percent: number, detail?: string) => void;
|
|
4
|
+
export declare function prepareSlidesInput({ source, mediaCache, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, resolveSlidesYtDlpExtractFormat, resolveSlidesStreamFallback, buildSlidesMediaCacheKey, formatBytes, reportSlidesProgress, logSlidesTiming, downloadYoutubeVideo, downloadRemoteVideo, resolveYoutubeStreamUrl, }: {
|
|
5
|
+
source: SlideSource;
|
|
6
|
+
mediaCache: MediaCache | null;
|
|
7
|
+
timeoutMs: number;
|
|
8
|
+
ytDlpPath: string | null;
|
|
9
|
+
ytDlpCookiesFromBrowser?: string | null;
|
|
10
|
+
resolveSlidesYtDlpExtractFormat: () => string;
|
|
11
|
+
resolveSlidesStreamFallback: () => boolean;
|
|
12
|
+
buildSlidesMediaCacheKey: (url: string) => string;
|
|
13
|
+
formatBytes: (bytes: number) => string;
|
|
14
|
+
reportSlidesProgress?: SlidesIngestProgress | null;
|
|
15
|
+
logSlidesTiming?: ((label: string, startedAt: number) => number) | null;
|
|
16
|
+
downloadYoutubeVideo: (args: {
|
|
17
|
+
ytDlpPath: string;
|
|
18
|
+
url: string;
|
|
19
|
+
timeoutMs: number;
|
|
20
|
+
format: string;
|
|
21
|
+
cookiesFromBrowser?: string | null;
|
|
22
|
+
onProgress?: ((percent: number, detail?: string) => void) | null;
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
filePath: string;
|
|
25
|
+
cleanup: () => Promise<void>;
|
|
26
|
+
}>;
|
|
27
|
+
downloadRemoteVideo: (args: {
|
|
28
|
+
url: string;
|
|
29
|
+
timeoutMs: number;
|
|
30
|
+
onProgress?: ((percent: number, detail?: string) => void) | null;
|
|
31
|
+
}) => Promise<{
|
|
32
|
+
filePath: string;
|
|
33
|
+
cleanup: () => Promise<void>;
|
|
34
|
+
}>;
|
|
35
|
+
resolveYoutubeStreamUrl: (args: {
|
|
36
|
+
ytDlpPath: string;
|
|
37
|
+
url: string;
|
|
38
|
+
timeoutMs: number;
|
|
39
|
+
format: string;
|
|
40
|
+
cookiesFromBrowser?: string | null;
|
|
41
|
+
}) => Promise<string>;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
inputPath: string;
|
|
44
|
+
inputCleanup: (() => Promise<void>) | null;
|
|
45
|
+
cachedMedia: Awaited<ReturnType<NonNullable<MediaCache>["get"]>> | null;
|
|
46
|
+
warnings: string[];
|
|
47
|
+
}>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SlideImage } from "./types.js";
|
|
2
|
+
export declare function cleanOcrText(text: string): string;
|
|
3
|
+
export declare function estimateOcrConfidence(text: string): number;
|
|
4
|
+
export declare function runTesseract(tesseractPath: string, imagePath: string): Promise<string>;
|
|
5
|
+
export declare function runOcrOnSlides(slides: SlideImage[], tesseractPath: string, workers: number, onProgress?: ((completed: number, total: number) => void) | null): Promise<SlideImage[]>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProcessHandle } from "../processes.js";
|
|
2
|
+
export declare function runProcess({ command, args, timeoutMs, errorLabel, onStderrLine, onStdoutLine, }: {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
timeoutMs: number;
|
|
6
|
+
errorLabel: string;
|
|
7
|
+
onStderrLine?: (line: string, handle: ProcessHandle | null) => void;
|
|
8
|
+
onStdoutLine?: (line: string, handle: ProcessHandle | null) => void;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function runProcessCapture({ command, args, timeoutMs, errorLabel, }: {
|
|
11
|
+
command: string;
|
|
12
|
+
args: string[];
|
|
13
|
+
timeoutMs: number;
|
|
14
|
+
errorLabel: string;
|
|
15
|
+
}): Promise<string>;
|
|
16
|
+
export declare function runProcessCaptureBuffer({ command, args, timeoutMs, errorLabel, }: {
|
|
17
|
+
command: string;
|
|
18
|
+
args: string[];
|
|
19
|
+
timeoutMs: number;
|
|
20
|
+
errorLabel: string;
|
|
21
|
+
}): Promise<Buffer>;
|
|
22
|
+
export declare function runWithConcurrency<T>(tasks: Array<() => Promise<T>>, workers: number, onProgress?: ((completed: number, total: number) => void) | null): Promise<T[]>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { SlideImage } from "./types.js";
|
|
2
|
+
export type SceneSegment = {
|
|
3
|
+
start: number;
|
|
4
|
+
end: number | null;
|
|
5
|
+
};
|
|
6
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
7
|
+
export declare function parseShowinfoTimestamp(line: string): number | null;
|
|
8
|
+
export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
|
|
9
|
+
requested: number;
|
|
10
|
+
actual: number | null;
|
|
11
|
+
seekBase?: number | null;
|
|
12
|
+
}): number;
|
|
13
|
+
export declare function roundThreshold(value: number): number;
|
|
14
|
+
export declare function calibrateSceneThreshold({ ffmpegPath, inputPath, durationSeconds, sampleCount, timeoutMs, logSlides, }: {
|
|
15
|
+
ffmpegPath: string;
|
|
16
|
+
inputPath: string;
|
|
17
|
+
durationSeconds: number | null;
|
|
18
|
+
sampleCount: number;
|
|
19
|
+
timeoutMs: number;
|
|
20
|
+
logSlides?: ((message: string) => void) | null;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
threshold: number;
|
|
23
|
+
confidence: number;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function buildSegments(durationSeconds: number | null, workers: number): Array<{
|
|
26
|
+
start: number;
|
|
27
|
+
duration: number;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function detectSceneTimestamps({ ffmpegPath, inputPath, threshold, timeoutMs, segments, workers, onSegmentProgress, runWithConcurrency, }: {
|
|
30
|
+
ffmpegPath: string;
|
|
31
|
+
inputPath: string;
|
|
32
|
+
threshold: number;
|
|
33
|
+
timeoutMs: number;
|
|
34
|
+
segments?: Array<{
|
|
35
|
+
start: number;
|
|
36
|
+
duration: number;
|
|
37
|
+
}>;
|
|
38
|
+
workers?: number;
|
|
39
|
+
onSegmentProgress?: ((completed: number, total: number) => void) | null;
|
|
40
|
+
runWithConcurrency: <T>(tasks: Array<() => Promise<T>>, workers: number, onProgress?: ((completed: number, total: number) => void) | null) => Promise<T[]>;
|
|
41
|
+
}): Promise<number[]>;
|
|
42
|
+
export declare function applyMinDurationFilter(slides: SlideImage[], minDurationSeconds: number, warnings: string[], removeFile: (path: string) => void): SlideImage[];
|
|
43
|
+
export declare function mergeTimestamps(sceneTimestamps: number[], intervalTimestamps: number[], minDurationSeconds: number): number[];
|
|
44
|
+
export declare function filterTimestampsByMinDuration(timestamps: number[], minDurationSeconds: number): number[];
|
|
45
|
+
export declare function buildSceneSegments(sceneTimestamps: number[], durationSeconds: number | null): SceneSegment[];
|
|
46
|
+
export declare function findSceneSegment(segments: SceneSegment[], timestamp: number): SceneSegment | null;
|
|
47
|
+
export declare function adjustTimestampWithinSegment(timestamp: number, segment: SceneSegment | null): number;
|
|
48
|
+
export declare function selectTimestampTargets({ targets, sceneTimestamps, minDurationSeconds, intervalSeconds, }: {
|
|
49
|
+
targets: number[];
|
|
50
|
+
sceneTimestamps: number[];
|
|
51
|
+
minDurationSeconds: number;
|
|
52
|
+
intervalSeconds: number;
|
|
53
|
+
}): number[];
|
|
54
|
+
export declare function buildIntervalTimestamps({ durationSeconds, minDurationSeconds, maxSlides, }: {
|
|
55
|
+
durationSeconds: number | null;
|
|
56
|
+
minDurationSeconds: number;
|
|
57
|
+
maxSlides: number;
|
|
58
|
+
}): {
|
|
59
|
+
timestamps: number[];
|
|
60
|
+
intervalSeconds: number;
|
|
61
|
+
} | null;
|
|
62
|
+
export declare function probeVideoInfo({ ffprobePath, inputPath, timeoutMs, }: {
|
|
63
|
+
ffprobePath: string;
|
|
64
|
+
inputPath: string;
|
|
65
|
+
timeoutMs: number;
|
|
66
|
+
}): Promise<{
|
|
67
|
+
durationSeconds: number | null;
|
|
68
|
+
width: number | null;
|
|
69
|
+
height: number | null;
|
|
70
|
+
}>;
|
|
71
|
+
export declare function applyMaxSlidesFilter<T extends {
|
|
72
|
+
index: number;
|
|
73
|
+
timestamp: number;
|
|
74
|
+
imagePath: string;
|
|
75
|
+
}>(slides: T[], maxSlides: number, warnings: string[], removeFile: (path: string) => void): T[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExtractedLinkContent } from "../content/index.js";
|
|
2
|
+
import type { SlideSource } from "./types.js";
|
|
3
|
+
export { isDirectVideoInput } from "../content/index.js";
|
|
4
|
+
export declare function resolveSlideSource({ url, extracted, }: {
|
|
5
|
+
url: string;
|
|
6
|
+
extracted: ExtractedLinkContent;
|
|
7
|
+
}): SlideSource | null;
|
|
8
|
+
export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
|