@steipete/summarize 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -28
- package/README.md +115 -30
- package/dist/cli.js +1 -1
- package/dist/esm/cache.js +67 -65
- package/dist/esm/cache.js.map +1 -1
- package/dist/esm/cli-main.js +27 -27
- package/dist/esm/cli-main.js.map +1 -1
- package/dist/esm/cli.js +2 -2
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/config.js +310 -166
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/content/asset.js +53 -50
- package/dist/esm/content/asset.js.map +1 -1
- package/dist/esm/content/index.js +1 -1
- package/dist/esm/content/index.js.map +1 -1
- package/dist/esm/costs.js +1 -1
- package/dist/esm/costs.js.map +1 -1
- package/dist/esm/daemon/agent.js +165 -164
- package/dist/esm/daemon/agent.js.map +1 -1
- package/dist/esm/daemon/auto-mode.js +3 -3
- package/dist/esm/daemon/auto-mode.js.map +1 -1
- package/dist/esm/daemon/chat.js +16 -14
- package/dist/esm/daemon/chat.js.map +1 -1
- package/dist/esm/daemon/cli-entrypoint.js +72 -0
- package/dist/esm/daemon/cli-entrypoint.js.map +1 -0
- package/dist/esm/daemon/cli.js +63 -87
- package/dist/esm/daemon/cli.js.map +1 -1
- package/dist/esm/daemon/config.js +15 -15
- package/dist/esm/daemon/config.js.map +1 -1
- package/dist/esm/daemon/constants.js +6 -6
- package/dist/esm/daemon/constants.js.map +1 -1
- package/dist/esm/daemon/env-merge.js.map +1 -1
- package/dist/esm/daemon/env-snapshot.js +36 -31
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +59 -28
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/launchd.js +100 -55
- package/dist/esm/daemon/launchd.js.map +1 -1
- package/dist/esm/daemon/meta.js +5 -5
- package/dist/esm/daemon/meta.js.map +1 -1
- package/dist/esm/daemon/models.js +54 -31
- package/dist/esm/daemon/models.js.map +1 -1
- package/dist/esm/daemon/process-registry.js +15 -15
- package/dist/esm/daemon/process-registry.js.map +1 -1
- package/dist/esm/daemon/schtasks.js +42 -42
- package/dist/esm/daemon/schtasks.js.map +1 -1
- package/dist/esm/daemon/server.js +248 -244
- package/dist/esm/daemon/server.js.map +1 -1
- package/dist/esm/daemon/summarize-progress.js +11 -11
- package/dist/esm/daemon/summarize-progress.js.map +1 -1
- package/dist/esm/daemon/summarize.js +29 -29
- package/dist/esm/daemon/summarize.js.map +1 -1
- package/dist/esm/daemon/systemd.js +47 -47
- package/dist/esm/daemon/systemd.js.map +1 -1
- package/dist/esm/firecrawl.js +12 -12
- package/dist/esm/firecrawl.js.map +1 -1
- package/dist/esm/flags.js +32 -32
- package/dist/esm/flags.js.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/language.js +1 -1
- package/dist/esm/language.js.map +1 -1
- package/dist/esm/llm/cli.js +128 -64
- package/dist/esm/llm/cli.js.map +1 -1
- package/dist/esm/llm/errors.js +1 -1
- package/dist/esm/llm/errors.js.map +1 -1
- package/dist/esm/llm/generate-text.js +107 -98
- package/dist/esm/llm/generate-text.js.map +1 -1
- package/dist/esm/llm/google-models.js +17 -17
- package/dist/esm/llm/google-models.js.map +1 -1
- package/dist/esm/llm/html-to-markdown.js +3 -3
- package/dist/esm/llm/html-to-markdown.js.map +1 -1
- package/dist/esm/llm/model-id.js +38 -16
- package/dist/esm/llm/model-id.js.map +1 -1
- package/dist/esm/llm/prompt.js +5 -5
- package/dist/esm/llm/prompt.js.map +1 -1
- package/dist/esm/llm/providers/anthropic.js +33 -33
- package/dist/esm/llm/providers/anthropic.js.map +1 -1
- package/dist/esm/llm/providers/google.js +19 -19
- package/dist/esm/llm/providers/google.js.map +1 -1
- package/dist/esm/llm/providers/models.js +30 -30
- package/dist/esm/llm/providers/models.js.map +1 -1
- package/dist/esm/llm/providers/openai.js +35 -34
- package/dist/esm/llm/providers/openai.js.map +1 -1
- package/dist/esm/llm/providers/shared.js +8 -8
- package/dist/esm/llm/providers/shared.js.map +1 -1
- package/dist/esm/llm/transcript-to-markdown.js +9 -5
- package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
- package/dist/esm/llm/usage.js +18 -18
- package/dist/esm/llm/usage.js.map +1 -1
- package/dist/esm/logging/daemon.js +21 -21
- package/dist/esm/logging/daemon.js.map +1 -1
- package/dist/esm/logging/ring-file.js +5 -5
- package/dist/esm/logging/ring-file.js.map +1 -1
- package/dist/esm/markitdown.js +21 -19
- package/dist/esm/markitdown.js.map +1 -1
- package/dist/esm/media-cache.js +39 -39
- package/dist/esm/media-cache.js.map +1 -1
- package/dist/esm/model-auto.js +175 -106
- package/dist/esm/model-auto.js.map +1 -1
- package/dist/esm/model-spec.js +52 -42
- package/dist/esm/model-spec.js.map +1 -1
- package/dist/esm/pricing/litellm.js +4 -4
- package/dist/esm/pricing/litellm.js.map +1 -1
- package/dist/esm/processes.js +1 -1
- package/dist/esm/processes.js.map +1 -1
- package/dist/esm/prompts/index.js +1 -1
- package/dist/esm/prompts/index.js.map +1 -1
- package/dist/esm/refresh-free.js +81 -81
- package/dist/esm/refresh-free.js.map +1 -1
- package/dist/esm/run/attachments.js +47 -44
- package/dist/esm/run/attachments.js.map +1 -1
- package/dist/esm/run/bird.js +26 -26
- package/dist/esm/run/bird.js.map +1 -1
- package/dist/esm/run/cache-state.js +7 -7
- package/dist/esm/run/cache-state.js.map +1 -1
- package/dist/esm/run/cli-fallback-state.js +45 -0
- package/dist/esm/run/cli-fallback-state.js.map +1 -0
- package/dist/esm/run/cli-preflight.js +24 -24
- package/dist/esm/run/cli-preflight.js.map +1 -1
- package/dist/esm/run/constants.js +12 -12
- package/dist/esm/run/constants.js.map +1 -1
- package/dist/esm/run/cookies/twitter.js +47 -47
- package/dist/esm/run/cookies/twitter.js.map +1 -1
- package/dist/esm/run/env.js +21 -15
- package/dist/esm/run/env.js.map +1 -1
- package/dist/esm/run/fetch-with-timeout.js +4 -4
- package/dist/esm/run/fetch-with-timeout.js.map +1 -1
- package/dist/esm/run/finish-line.js +68 -68
- package/dist/esm/run/finish-line.js.map +1 -1
- package/dist/esm/run/flows/asset/extract.js +15 -15
- package/dist/esm/run/flows/asset/extract.js.map +1 -1
- package/dist/esm/run/flows/asset/input.js +47 -66
- package/dist/esm/run/flows/asset/input.js.map +1 -1
- package/dist/esm/run/flows/asset/media-policy.js +1 -1
- package/dist/esm/run/flows/asset/media-policy.js.map +1 -1
- package/dist/esm/run/flows/asset/media.js +49 -40
- package/dist/esm/run/flows/asset/media.js.map +1 -1
- package/dist/esm/run/flows/asset/output.js +12 -12
- package/dist/esm/run/flows/asset/output.js.map +1 -1
- package/dist/esm/run/flows/asset/preprocess.js +79 -44
- package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
- package/dist/esm/run/flows/asset/summary.js +173 -106
- package/dist/esm/run/flows/asset/summary.js.map +1 -1
- package/dist/esm/run/flows/url/extract.js +26 -26
- package/dist/esm/run/flows/url/extract.js.map +1 -1
- package/dist/esm/run/flows/url/flow.js +104 -98
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +57 -57
- package/dist/esm/run/flows/url/markdown.js.map +1 -1
- package/dist/esm/run/flows/url/slides-output.js +61 -59
- package/dist/esm/run/flows/url/slides-output.js.map +1 -1
- package/dist/esm/run/flows/url/slides-text.js +85 -85
- package/dist/esm/run/flows/url/slides-text.js.map +1 -1
- package/dist/esm/run/flows/url/summary.js +174 -107
- package/dist/esm/run/flows/url/summary.js.map +1 -1
- package/dist/esm/run/format.js +10 -10
- package/dist/esm/run/format.js.map +1 -1
- package/dist/esm/run/help.js +141 -135
- package/dist/esm/run/help.js.map +1 -1
- package/dist/esm/run/logging.js +10 -10
- package/dist/esm/run/logging.js.map +1 -1
- package/dist/esm/run/markdown.js +12 -12
- package/dist/esm/run/markdown.js.map +1 -1
- package/dist/esm/run/media-cache-state.js +5 -5
- package/dist/esm/run/media-cache-state.js.map +1 -1
- package/dist/esm/run/model-attempts.js.map +1 -1
- package/dist/esm/run/openrouter.js +11 -11
- package/dist/esm/run/openrouter.js.map +1 -1
- package/dist/esm/run/progress.js +1 -1
- package/dist/esm/run/progress.js.map +1 -1
- package/dist/esm/run/run-config.js +16 -16
- package/dist/esm/run/run-config.js.map +1 -1
- package/dist/esm/run/run-context.js +2 -2
- package/dist/esm/run/run-context.js.map +1 -1
- package/dist/esm/run/run-env.js +55 -54
- package/dist/esm/run/run-env.js.map +1 -1
- package/dist/esm/run/run-input.js +3 -3
- package/dist/esm/run/run-input.js.map +1 -1
- package/dist/esm/run/run-metrics.js +16 -16
- package/dist/esm/run/run-metrics.js.map +1 -1
- package/dist/esm/run/run-models.js +28 -23
- package/dist/esm/run/run-models.js.map +1 -1
- package/dist/esm/run/run-output.js +3 -3
- package/dist/esm/run/run-output.js.map +1 -1
- package/dist/esm/run/run-settings.js +83 -34
- package/dist/esm/run/run-settings.js.map +1 -1
- package/dist/esm/run/run-stream.js +4 -4
- package/dist/esm/run/run-stream.js.map +1 -1
- package/dist/esm/run/runner.js +166 -127
- package/dist/esm/run/runner.js.map +1 -1
- package/dist/esm/run/slides-cli.js +43 -42
- package/dist/esm/run/slides-cli.js.map +1 -1
- package/dist/esm/run/slides-render.js +36 -36
- package/dist/esm/run/slides-render.js.map +1 -1
- package/dist/esm/run/stdin-temp-file.js +77 -0
- package/dist/esm/run/stdin-temp-file.js.map +1 -0
- package/dist/esm/run/stream-output.js +7 -7
- package/dist/esm/run/stream-output.js.map +1 -1
- package/dist/esm/run/streaming.js +16 -16
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +57 -51
- package/dist/esm/run/summary-engine.js.map +1 -1
- package/dist/esm/run/summary-llm.js +3 -3
- package/dist/esm/run/summary-llm.js.map +1 -1
- package/dist/esm/run/terminal.js +4 -4
- package/dist/esm/run/terminal.js.map +1 -1
- package/dist/esm/run/tips.js +2 -2
- package/dist/esm/run/tips.js.map +1 -1
- package/dist/esm/run/transcriber-cli.js +49 -49
- package/dist/esm/run/transcriber-cli.js.map +1 -1
- package/dist/esm/run.js +1 -1
- package/dist/esm/run.js.map +1 -1
- package/dist/esm/shared/contracts.js +1 -1
- package/dist/esm/shared/contracts.js.map +1 -1
- package/dist/esm/shared/sse-events.js +16 -16
- package/dist/esm/shared/sse-events.js.map +1 -1
- package/dist/esm/shared/streaming-merge.js +3 -3
- package/dist/esm/shared/streaming-merge.js.map +1 -1
- package/dist/esm/slides/extract.js +258 -249
- package/dist/esm/slides/extract.js.map +1 -1
- package/dist/esm/slides/index.js +3 -3
- package/dist/esm/slides/index.js.map +1 -1
- package/dist/esm/slides/settings.js +14 -14
- package/dist/esm/slides/settings.js.map +1 -1
- package/dist/esm/slides/store.js +9 -9
- package/dist/esm/slides/store.js.map +1 -1
- package/dist/esm/tty/format.js +13 -13
- package/dist/esm/tty/format.js.map +1 -1
- package/dist/esm/tty/osc-progress.js +1 -1
- package/dist/esm/tty/osc-progress.js.map +1 -1
- package/dist/esm/tty/progress/fetch-html.js +14 -14
- package/dist/esm/tty/progress/fetch-html.js.map +1 -1
- package/dist/esm/tty/progress/transcript.js +70 -62
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +20 -9
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/theme.js +92 -92
- package/dist/esm/tty/theme.js.map +1 -1
- package/dist/esm/tty/website-progress.js +32 -32
- package/dist/esm/tty/website-progress.js.map +1 -1
- package/dist/esm/version.js +29 -29
- package/dist/esm/version.js.map +1 -1
- package/dist/types/cache.d.ts +6 -6
- package/dist/types/config.d.ts +49 -7
- package/dist/types/content/asset.d.ts +8 -6
- package/dist/types/content/index.d.ts +1 -1
- package/dist/types/costs.d.ts +3 -3
- package/dist/types/daemon/agent.d.ts +1 -1
- package/dist/types/daemon/auto-mode.d.ts +3 -3
- package/dist/types/daemon/chat.d.ts +2 -2
- package/dist/types/daemon/cli-entrypoint.d.ts +2 -0
- package/dist/types/daemon/config.d.ts +2 -2
- package/dist/types/daemon/env-merge.d.ts +1 -1
- package/dist/types/daemon/env-snapshot.d.ts +1 -1
- package/dist/types/daemon/flow-context.d.ts +7 -7
- package/dist/types/daemon/launchd.d.ts +8 -0
- package/dist/types/daemon/models.d.ts +6 -2
- package/dist/types/daemon/process-registry.d.ts +5 -5
- package/dist/types/daemon/server.d.ts +2 -2
- package/dist/types/daemon/summarize-progress.d.ts +1 -1
- package/dist/types/daemon/summarize.d.ts +7 -7
- package/dist/types/firecrawl.d.ts +1 -1
- package/dist/types/flags.d.ts +11 -11
- package/dist/types/index.d.ts +4 -4
- package/dist/types/language.d.ts +1 -1
- package/dist/types/llm/attachments.d.ts +1 -1
- package/dist/types/llm/cli.d.ts +3 -3
- package/dist/types/llm/generate-text.d.ts +7 -7
- package/dist/types/llm/html-to-markdown.d.ts +3 -3
- package/dist/types/llm/model-id.d.ts +1 -1
- package/dist/types/llm/prompt.d.ts +2 -2
- package/dist/types/llm/providers/anthropic.d.ts +3 -3
- package/dist/types/llm/providers/google.d.ts +3 -3
- package/dist/types/llm/providers/models.d.ts +2 -2
- package/dist/types/llm/providers/openai.d.ts +4 -4
- package/dist/types/llm/providers/shared.d.ts +2 -2
- package/dist/types/llm/transcript-to-markdown.d.ts +4 -2
- package/dist/types/llm/usage.d.ts +1 -1
- package/dist/types/logging/daemon.d.ts +4 -4
- package/dist/types/markitdown.d.ts +1 -1
- package/dist/types/media-cache.d.ts +2 -2
- package/dist/types/model-auto.d.ts +14 -4
- package/dist/types/model-spec.d.ts +10 -10
- package/dist/types/pricing/litellm.d.ts +1 -1
- package/dist/types/processes.d.ts +1 -1
- package/dist/types/prompts/index.d.ts +1 -1
- package/dist/types/run/attachments.d.ts +7 -7
- package/dist/types/run/bird.d.ts +2 -2
- package/dist/types/run/cache-state.d.ts +2 -2
- package/dist/types/run/cli-fallback-state.d.ts +6 -0
- package/dist/types/run/constants.d.ts +1 -1
- package/dist/types/run/cookies/twitter.d.ts +1 -1
- package/dist/types/run/env.d.ts +1 -1
- package/dist/types/run/finish-line.d.ts +5 -5
- package/dist/types/run/flows/asset/extract.d.ts +4 -4
- package/dist/types/run/flows/asset/input.d.ts +9 -3
- package/dist/types/run/flows/asset/media.d.ts +1 -1
- package/dist/types/run/flows/asset/output.d.ts +5 -5
- package/dist/types/run/flows/asset/preprocess.d.ts +23 -17
- package/dist/types/run/flows/asset/summary.d.ts +19 -17
- package/dist/types/run/flows/url/extract.d.ts +1 -1
- package/dist/types/run/flows/url/flow.d.ts +1 -1
- package/dist/types/run/flows/url/markdown.d.ts +6 -6
- package/dist/types/run/flows/url/slides-output.d.ts +7 -7
- package/dist/types/run/flows/url/slides-text.d.ts +9 -9
- package/dist/types/run/flows/url/summary.d.ts +11 -11
- package/dist/types/run/flows/url/types.d.ts +26 -22
- package/dist/types/run/format.d.ts +3 -3
- package/dist/types/run/help.d.ts +1 -1
- package/dist/types/run/media-cache-state.d.ts +2 -2
- package/dist/types/run/model-attempts.d.ts +1 -1
- package/dist/types/run/run-config.d.ts +4 -4
- package/dist/types/run/run-context.d.ts +3 -1
- package/dist/types/run/run-env.d.ts +3 -1
- package/dist/types/run/run-input.d.ts +2 -2
- package/dist/types/run/run-metrics.d.ts +3 -3
- package/dist/types/run/run-models.d.ts +3 -2
- package/dist/types/run/run-output.d.ts +1 -1
- package/dist/types/run/run-settings.d.ts +15 -6
- package/dist/types/run/run-stream.d.ts +2 -2
- package/dist/types/run/runner.d.ts +3 -2
- package/dist/types/run/slides-render.d.ts +4 -4
- package/dist/types/run/stdin-temp-file.d.ts +9 -0
- package/dist/types/run/stream-output.d.ts +1 -1
- package/dist/types/run/streaming.d.ts +4 -4
- package/dist/types/run/summary-engine.d.ts +11 -11
- package/dist/types/run/summary-llm.d.ts +5 -5
- package/dist/types/run/types.d.ts +4 -4
- package/dist/types/run.d.ts +1 -1
- package/dist/types/shared/contracts.d.ts +2 -2
- package/dist/types/shared/sse-events.d.ts +9 -9
- package/dist/types/slides/extract.d.ts +5 -4
- package/dist/types/slides/index.d.ts +5 -5
- package/dist/types/slides/store.d.ts +2 -2
- package/dist/types/slides/types.d.ts +2 -2
- package/dist/types/tty/osc-progress.d.ts +5 -5
- package/dist/types/tty/progress/fetch-html.d.ts +3 -3
- package/dist/types/tty/progress/transcript.d.ts +3 -3
- package/dist/types/tty/spinner.d.ts +2 -2
- package/dist/types/tty/theme.d.ts +2 -2
- package/dist/types/tty/website-progress.d.ts +3 -3
- package/dist/types/version.d.ts +1 -1
- package/docs/agent.md +38 -4
- package/docs/assets/site.js +46 -46
- package/docs/chrome-extension.md +11 -5
- package/docs/cli.md +59 -13
- package/docs/config.md +59 -10
- package/docs/extract-only.md +2 -0
- package/docs/index.html +33 -14
- package/docs/llm.md +7 -4
- package/docs/media.md +5 -4
- package/docs/model-auto.md +3 -2
- package/docs/nvidia-onnx-transcription.md +3 -3
- package/docs/openai.md +1 -1
- package/docs/releasing.md +3 -0
- package/docs/site/404.html +4 -1
- package/docs/site/assets/site.js +46 -46
- package/docs/site/docs/chrome-extension.html +18 -6
- package/docs/site/docs/config.html +29 -8
- package/docs/site/docs/extract-only.html +16 -4
- package/docs/site/docs/firecrawl.html +12 -3
- package/docs/site/docs/index.html +35 -6
- package/docs/site/docs/llm.html +19 -5
- package/docs/site/docs/openai.html +18 -5
- package/docs/site/docs/website.html +29 -9
- package/docs/site/docs/youtube.html +12 -3
- package/docs/site/index.html +33 -14
- package/docs/slides.md +13 -5
- package/docs/smoketest.md +29 -20
- package/docs/timestamps.md +21 -0
- package/docs/website.md +2 -1
- package/docs/youtube.md +4 -0
- package/package.json +36 -35
package/docs/smoketest.md
CHANGED
|
@@ -9,55 +9,64 @@ read_when:
|
|
|
9
9
|
Goal: exercise URL + file inputs, extraction + LLM summary paths, multiple models.
|
|
10
10
|
|
|
11
11
|
## Preconditions
|
|
12
|
+
|
|
12
13
|
- API keys set for at least: `OPENAI_API_KEY`, `GEMINI_API_KEY`.
|
|
13
14
|
- Optional: `FIRECRAWL_API_KEY` to test fallback (if available).
|
|
14
15
|
|
|
15
16
|
## Models (cheap/fast)
|
|
17
|
+
|
|
16
18
|
- `openai/gpt-5-mini`
|
|
17
19
|
- `google/gemini-3-flash-preview`
|
|
18
20
|
|
|
19
21
|
## Matrix (20 cases)
|
|
20
22
|
|
|
21
23
|
### Websites (LLM summary, 10)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
|
|
25
|
+
1. Static HTML: `https://example.com` (model: gemini-3-flash)
|
|
26
|
+
2. Wikipedia article: `https://en.wikipedia.org/wiki/Swift_(programming_language)` (model: gpt-5-mini)
|
|
27
|
+
3. MDN doc: `https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200` (model: gemini-3-flash)
|
|
28
|
+
4. Reuters article: `https://www.reuters.com/world/` (model: gpt-5-mini)
|
|
29
|
+
5. BBC article: `https://www.bbc.com/news` (model: gemini-3-flash)
|
|
30
|
+
6. GitHub README: `https://github.com/vitejs/vite` (model: gpt-5-mini)
|
|
31
|
+
7. Substack post: pick any public post (model: gemini-3-flash)
|
|
32
|
+
8. Medium post: pick any public post (model: gpt-5-mini)
|
|
33
|
+
9. JS-heavy page: `https://vercel.com` (model: gemini-3-flash)
|
|
34
|
+
10. 404 page: `https://example.com/does-not-exist` (model: gpt-5-mini)
|
|
32
35
|
|
|
33
36
|
### YouTube (LLM summary, 2)
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
|
|
38
|
+
11. Captions available: pick a popular talk/interview (model: gemini-3-flash, `--youtube auto`)
|
|
39
|
+
12. No captions: pick a random channel upload w/o captions (model: gpt-5-mini, `--youtube auto`)
|
|
36
40
|
|
|
37
41
|
### Remote files (LLM summary, 4)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
|
|
43
|
+
13. PDF URL: any public PDF report (model: gemini-3-flash)
|
|
44
|
+
14. PNG URL: `https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png` (model: gpt-5-mini)
|
|
45
|
+
15. MP3 URL: any public MP3 sample (model: gemini-3-flash)
|
|
46
|
+
16. CSV URL: any public CSV sample (model: gpt-5-mini)
|
|
42
47
|
|
|
43
48
|
### Local files (LLM summary, 4)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
|
|
50
|
+
17. `tests/fixtures/sample.txt` (create if missing) (model: gemini-3-flash)
|
|
51
|
+
18. `tests/fixtures/sample.md` (create if missing) (model: gpt-5-mini)
|
|
52
|
+
19. `tests/fixtures/sample.json` (create if missing) (model: gemini-3-flash)
|
|
53
|
+
20. `tests/fixtures/sample.png` (create if missing; use a real PNG, not 1x1) (model: gpt-5-mini)
|
|
48
54
|
|
|
49
55
|
## Commands (template)
|
|
56
|
+
|
|
50
57
|
- Website: `pnpm summarize -- "<url>" --model <model> --length short`
|
|
51
58
|
- YouTube: `pnpm summarize -- "<url>" --model <model> --youtube auto`
|
|
52
59
|
- File URL: `pnpm summarize -- "<url>" --model <model>`
|
|
53
60
|
- Local file: `pnpm summarize -- "<path>" --model <model>`
|
|
54
61
|
|
|
55
62
|
## Capture
|
|
63
|
+
|
|
56
64
|
- Log: stdout + stderr, exit code, and timing line.
|
|
57
65
|
- Note extraction path (HTML vs Firecrawl vs YouTube transcript).
|
|
58
66
|
- File errors: media type rejection, size limits, token preflight.
|
|
59
67
|
|
|
60
68
|
## Bug bar
|
|
69
|
+
|
|
61
70
|
- Crash, hang, or non-zero exit.
|
|
62
71
|
- Empty summary with non-empty input.
|
|
63
72
|
- Incorrect mode selection (e.g., YouTube treated as normal URL).
|
package/docs/timestamps.md
CHANGED
|
@@ -7,6 +7,7 @@ read_when:
|
|
|
7
7
|
# Transcript Timestamps Plan
|
|
8
8
|
|
|
9
9
|
Short scope
|
|
10
|
+
|
|
10
11
|
- Add `--timestamps` flag to request timed transcripts.
|
|
11
12
|
- Preserve existing plain transcript text; add structured segments + timed text.
|
|
12
13
|
- Chat mode: include timed transcript + prompt for `[mm:ss]` references.
|
|
@@ -14,6 +15,7 @@ Short scope
|
|
|
14
15
|
- Coverage: YouTube, podcasts, embedded captions, generic media; whisper.cpp = no segments unless we add verbose output later.
|
|
15
16
|
|
|
16
17
|
## 1) API / data model
|
|
18
|
+
|
|
17
19
|
- New option: `FetchLinkContentOptions.transcriptTimestamps?: boolean`.
|
|
18
20
|
- Thread through provider options (`ProviderFetchOptions`).
|
|
19
21
|
- New types:
|
|
@@ -24,52 +26,65 @@ Short scope
|
|
|
24
26
|
- Keep `TranscriptResolution.text` unchanged (plain transcript).
|
|
25
27
|
|
|
26
28
|
Notes
|
|
29
|
+
|
|
27
30
|
- `--timestamps` should only alter output when requested; default output remains stable.
|
|
28
31
|
- For JSON output, include both `transcriptSegments` and `transcriptTimedText` when requested.
|
|
29
32
|
|
|
30
33
|
## 2) Provider updates
|
|
34
|
+
|
|
31
35
|
YouTube (youtubei)
|
|
36
|
+
|
|
32
37
|
- Parse `startMs` (and duration if present) from `transcriptSegmentRenderer`.
|
|
33
38
|
- Build segments array; `text` still plain (join of text).
|
|
34
39
|
|
|
35
40
|
YouTube (captionTracks json3 / xml)
|
|
41
|
+
|
|
36
42
|
- json3 provides `events[].tStartMs` and `dDurationMs`; parse segments from `events.segs[].utf8`.
|
|
37
43
|
- XML captions include `start` + `dur`; parse segments when present.
|
|
38
44
|
|
|
39
45
|
Podcast RSS transcripts
|
|
46
|
+
|
|
40
47
|
- VTT parser should output segments (start/end + cue text).
|
|
41
48
|
- JSON transcript: support `segments` with `start`/`startMs` + `end`/`endMs` + `text`.
|
|
42
49
|
- Plain text transcripts: `segments = null`.
|
|
43
50
|
|
|
44
51
|
Generic embedded captions
|
|
52
|
+
|
|
45
53
|
- When track is VTT/JSON, parse into segments; otherwise `null`.
|
|
46
54
|
|
|
47
55
|
yt-dlp / whisper / whisper.cpp
|
|
56
|
+
|
|
48
57
|
- Keep `segments = null` (plain text only).
|
|
49
58
|
- Optional future: request verbose or SRT output from OpenAI/FAL when supported.
|
|
50
59
|
|
|
51
60
|
## 3) Cache behavior
|
|
61
|
+
|
|
52
62
|
- Store `segments` in transcript metadata (or dedicated cache field).
|
|
53
63
|
- If `--timestamps` and cached transcript lacks segments, treat as miss and refetch.
|
|
54
64
|
- Keep cache keys stable; only bypass when timestamps requested.
|
|
55
65
|
|
|
56
66
|
## 4) CLI / daemon
|
|
67
|
+
|
|
57
68
|
- Add `--timestamps` to CLI help + config.
|
|
58
69
|
- Map to `FetchLinkContentOptions.transcriptTimestamps`.
|
|
59
70
|
- `--extract --json`: include `transcriptSegments` + `transcriptTimedText`.
|
|
60
71
|
- Non-JSON extract: keep plain transcript unless `--timestamps`, then output timed text block.
|
|
61
72
|
|
|
62
73
|
## 5) Chat prompt + content
|
|
74
|
+
|
|
63
75
|
- `buildChatPageContent`: when timestamps requested, include `Timed transcript:` block using `[mm:ss]`.
|
|
64
76
|
- `buildChatSystemPrompt`: add instruction:
|
|
65
77
|
- “When referencing moments, include `[mm:ss]` timestamps from the transcript.”
|
|
66
78
|
|
|
67
79
|
## 6) Chrome extension UI
|
|
80
|
+
|
|
68
81
|
Render
|
|
82
|
+
|
|
69
83
|
- Linkify `[mm:ss]` and `[hh:mm:ss]` in assistant messages.
|
|
70
84
|
- Convert to `timestamp:<seconds>` hrefs (or data attribute).
|
|
71
85
|
|
|
72
86
|
Seek handler
|
|
87
|
+
|
|
73
88
|
- On click: prevent default, parse seconds, send `panel:seek` → background → content script.
|
|
74
89
|
- Content script:
|
|
75
90
|
- Find `<video>` or `<audio>`.
|
|
@@ -80,24 +95,30 @@ Seek handler
|
|
|
80
95
|
- If `window.ytplayer` / YT IFrame API available, `player.seekTo(seconds, true)`.
|
|
81
96
|
|
|
82
97
|
## 7) Tests
|
|
98
|
+
|
|
83
99
|
Core
|
|
100
|
+
|
|
84
101
|
- youtubei transcript parsing yields segments + plain text.
|
|
85
102
|
- captionTracks json3 + xml yield segments.
|
|
86
103
|
- VTT parser yields segments.
|
|
87
104
|
- Cache: timestamps requested + cached without segments → refetch.
|
|
88
105
|
|
|
89
106
|
Daemon / CLI
|
|
107
|
+
|
|
90
108
|
- `--timestamps` propagates into fetch options.
|
|
91
109
|
- JSON extract includes `transcriptSegments` + `transcriptTimedText`.
|
|
92
110
|
|
|
93
111
|
Chrome extension
|
|
112
|
+
|
|
94
113
|
- Chat content includes timed transcript when requested.
|
|
95
114
|
- Sidepanel: timestamp link emits `panel:seek`.
|
|
96
115
|
- Content script seek: playing stays playing, paused stays paused; audio + video.
|
|
97
116
|
|
|
98
117
|
## 8) Changelog
|
|
118
|
+
|
|
99
119
|
- Entry: `--timestamps` flag, timed transcripts in chat, clickable timestamps in extension, podcast support.
|
|
100
120
|
|
|
101
121
|
## 9) Notes / open
|
|
122
|
+
|
|
102
123
|
- “VisPoR” = whisper.cpp: no timestamps unless we add verbose output path.
|
|
103
124
|
- Decide exact format of `transcriptTimedText` (recommend `[mm:ss] text` per line).
|
package/docs/website.md
CHANGED
|
@@ -20,8 +20,9 @@ Use this for non-YouTube URLs.
|
|
|
20
20
|
- With `--format md`, `--markdown-mode auto|llm|readability` can also convert HTML → Markdown via an LLM using the configured `--model` (no provider fallback).
|
|
21
21
|
- With `--format md`, `--markdown-mode auto` may fall back to `uvx markitdown` when available (disable with `--preprocess off`).
|
|
22
22
|
- For podcast URLs (Apple Podcasts, RSS, Spotify episodes), it downloads the episode audio and transcribes via Whisper (prefers local `whisper.cpp` when installed + model available); progress shows “Downloading audio …” then “Transcribing …” (duration uses RSS hints or `ffprobe` when available).
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
Daemon note:
|
|
25
|
+
|
|
25
26
|
- `/v1/summarize` accepts `format: "markdown"` plus `markdownMode`/`preprocess` to return extracted Markdown (especially when `extractOnly: true`).
|
|
26
27
|
|
|
27
28
|
## Short content
|
package/docs/youtube.md
CHANGED
|
@@ -54,5 +54,9 @@ summarize "https://www.youtube.com/watch?v=..." --slides --slides-ocr
|
|
|
54
54
|
Slides are written to `./slides/<videoId>/` by default (override with `--slides-dir`). OCR results
|
|
55
55
|
are stored in `slides.json` and included in JSON output (`--json`).
|
|
56
56
|
|
|
57
|
+
If yt-dlp gets a 403 from YouTube, set `SUMMARIZE_YT_DLP_COOKIES_FROM_BROWSER=chrome` (or
|
|
58
|
+
`chrome:Profile 1`) to pass cookies through to yt-dlp.
|
|
59
|
+
|
|
57
60
|
Relevant flags:
|
|
61
|
+
|
|
58
62
|
- `--slides-scene-threshold <value>`: starting threshold for scene detection (auto-tuned as needed)
|
package/package.json
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steipete/summarize",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "Link → clean text → summary.",
|
|
5
|
-
"type": "module",
|
|
6
5
|
"bin": {
|
|
7
6
|
"summarize": "./dist/cli.js",
|
|
8
7
|
"summarizer": "./dist/cli.js"
|
|
9
8
|
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"docs",
|
|
12
|
+
"CHANGELOG.md",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"type": "module",
|
|
10
17
|
"main": "./dist/esm/index.js",
|
|
11
18
|
"module": "./dist/esm/index.js",
|
|
12
19
|
"types": "./dist/types/index.d.ts",
|
|
@@ -24,64 +31,58 @@
|
|
|
24
31
|
"import": "./dist/esm/prompts/index.js"
|
|
25
32
|
}
|
|
26
33
|
},
|
|
27
|
-
"files": [
|
|
28
|
-
"dist",
|
|
29
|
-
"docs",
|
|
30
|
-
"CHANGELOG.md",
|
|
31
|
-
"README.md",
|
|
32
|
-
"LICENSE"
|
|
33
|
-
],
|
|
34
|
-
"engines": {
|
|
35
|
-
"node": ">=22"
|
|
36
|
-
},
|
|
37
34
|
"dependencies": {
|
|
38
|
-
"@mariozechner/pi-ai": "^0.
|
|
39
|
-
"commander": "^14.0.
|
|
35
|
+
"@mariozechner/pi-ai": "^0.52.12",
|
|
36
|
+
"commander": "^14.0.3",
|
|
40
37
|
"file-type": "^21.3.0",
|
|
41
38
|
"gpt-tokenizer": "^3.4.0",
|
|
42
39
|
"json5": "^2.2.3",
|
|
43
40
|
"markdansi": "^0.2.1",
|
|
44
41
|
"mime": "^4.1.0",
|
|
45
|
-
"ora": "^9.
|
|
42
|
+
"ora": "^9.3.0",
|
|
46
43
|
"osc-progress": "^0.3.0",
|
|
47
44
|
"tokentally": "^0.1.1",
|
|
48
45
|
"tslog": "^4.10.2",
|
|
49
|
-
"@steipete/summarize-core": "0.
|
|
46
|
+
"@steipete/summarize-core": "0.11.1"
|
|
50
47
|
},
|
|
51
48
|
"devDependencies": {
|
|
52
|
-
"@
|
|
53
|
-
"@fal-ai/client": "^1.8.3",
|
|
49
|
+
"@fal-ai/client": "^1.9.1",
|
|
54
50
|
"@types/jsdom": "^27.0.0",
|
|
55
|
-
"@types/node": "^25.
|
|
51
|
+
"@types/node": "^25.2.3",
|
|
56
52
|
"@types/sanitize-html": "^2.16.0",
|
|
57
|
-
"@vitest/coverage-v8": "^4.0.
|
|
58
|
-
"esbuild": "^0.27.
|
|
59
|
-
"
|
|
60
|
-
"oxlint
|
|
53
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
54
|
+
"esbuild": "^0.27.3",
|
|
55
|
+
"oxfmt": "0.32.0",
|
|
56
|
+
"oxlint": "^1.47.0",
|
|
57
|
+
"oxlint-tsgolint": "^0.12.2",
|
|
61
58
|
"rimraf": "^6.1.2",
|
|
62
59
|
"tsx": "^4.21.0",
|
|
63
60
|
"typescript": "^5.9.3",
|
|
64
|
-
"vitest": "^4.0.
|
|
61
|
+
"vitest": "^4.0.18"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=22"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
|
-
"clean": "rimraf dist packages/core/dist",
|
|
68
67
|
"build": "pnpm clean && pnpm -C packages/core build && pnpm build:lib && pnpm build:cli",
|
|
69
|
-
"build:lib": "tsc -p tsconfig.build.json",
|
|
70
|
-
"build:cli": "node scripts/build-cli.mjs",
|
|
71
68
|
"build:bun": "bun scripts/build-bun.js",
|
|
72
69
|
"build:bun:test": "bun scripts/build-bun.js --test",
|
|
70
|
+
"build:cli": "node scripts/build-cli.mjs",
|
|
71
|
+
"build:lib": "tsc -p tsconfig.build.json",
|
|
72
|
+
"check": "pnpm format:check && pnpm lint && pnpm test:coverage",
|
|
73
|
+
"clean": "rimraf dist packages/core/dist",
|
|
73
74
|
"docs:list": "tsx scripts/docs-list.ts",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"format": "oxfmt --write",
|
|
76
|
+
"format:check": "oxfmt --check",
|
|
77
|
+
"lint": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
|
|
78
|
+
"lint:fix": "oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix . && pnpm format",
|
|
79
|
+
"release": "bash scripts/release.sh",
|
|
76
80
|
"s": "tsx src/cli.ts",
|
|
77
|
-
"
|
|
78
|
-
"lint": "biome check . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json .",
|
|
79
|
-
"lint:fix": "biome check --write . && oxlint --type-aware --tsconfig tsconfig.build.json --config .oxlintrc.json --fix .",
|
|
80
|
-
"check": "pnpm lint && pnpm test:coverage",
|
|
81
|
-
"test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
|
|
81
|
+
"summarize": "tsx src/cli.ts",
|
|
82
82
|
"test": "vitest run",
|
|
83
83
|
"test:coverage": "vitest run --coverage",
|
|
84
84
|
"test:coverage:build": "pnpm build && pnpm test:coverage",
|
|
85
|
-
"
|
|
85
|
+
"test:extension-e2e": "pnpm -C apps/chrome-extension test:e2e",
|
|
86
|
+
"typecheck": "tsc -p tsconfig.build.json --noEmit"
|
|
86
87
|
}
|
|
87
88
|
}
|