@steipete/summarize 0.8.2 → 0.10.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 +114 -1
- package/LICENSE +1 -1
- package/README.md +309 -182
- package/dist/cli.js +1 -1
- package/dist/esm/cache.js +72 -4
- package/dist/esm/cache.js.map +1 -1
- package/dist/esm/config.js +197 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/content/asset.js +75 -2
- package/dist/esm/content/asset.js.map +1 -1
- package/dist/esm/daemon/agent.js +547 -0
- package/dist/esm/daemon/agent.js.map +1 -0
- package/dist/esm/daemon/chat.js +97 -0
- package/dist/esm/daemon/chat.js.map +1 -0
- package/dist/esm/daemon/cli.js +105 -10
- package/dist/esm/daemon/cli.js.map +1 -1
- package/dist/esm/daemon/env-snapshot.js +3 -0
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +53 -28
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/launchd.js +27 -0
- package/dist/esm/daemon/launchd.js.map +1 -1
- package/dist/esm/daemon/process-registry.js +206 -0
- package/dist/esm/daemon/process-registry.js.map +1 -0
- package/dist/esm/daemon/schtasks.js +64 -0
- package/dist/esm/daemon/schtasks.js.map +1 -1
- package/dist/esm/daemon/server.js +1034 -52
- package/dist/esm/daemon/server.js.map +1 -1
- package/dist/esm/daemon/summarize.js +66 -18
- package/dist/esm/daemon/summarize.js.map +1 -1
- package/dist/esm/daemon/systemd.js +61 -0
- package/dist/esm/daemon/systemd.js.map +1 -1
- package/dist/esm/flags.js +24 -0
- package/dist/esm/flags.js.map +1 -1
- package/dist/esm/llm/attachments.js +2 -0
- package/dist/esm/llm/attachments.js.map +1 -0
- package/dist/esm/llm/errors.js +6 -0
- package/dist/esm/llm/errors.js.map +1 -0
- package/dist/esm/llm/generate-text.js +206 -356
- package/dist/esm/llm/generate-text.js.map +1 -1
- package/dist/esm/llm/html-to-markdown.js +1 -2
- package/dist/esm/llm/html-to-markdown.js.map +1 -1
- package/dist/esm/llm/prompt.js.map +1 -1
- package/dist/esm/llm/providers/anthropic.js +126 -0
- package/dist/esm/llm/providers/anthropic.js.map +1 -0
- package/dist/esm/llm/providers/google.js +78 -0
- package/dist/esm/llm/providers/google.js.map +1 -0
- package/dist/esm/llm/providers/models.js +111 -0
- package/dist/esm/llm/providers/models.js.map +1 -0
- package/dist/esm/llm/providers/openai.js +150 -0
- package/dist/esm/llm/providers/openai.js.map +1 -0
- package/dist/esm/llm/providers/shared.js +48 -0
- package/dist/esm/llm/providers/shared.js.map +1 -0
- package/dist/esm/llm/providers/types.js +2 -0
- package/dist/esm/llm/providers/types.js.map +1 -0
- package/dist/esm/llm/transcript-to-markdown.js +1 -2
- package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
- package/dist/esm/llm/types.js +2 -0
- package/dist/esm/llm/types.js.map +1 -0
- package/dist/esm/llm/usage.js +69 -0
- package/dist/esm/llm/usage.js.map +1 -0
- package/dist/esm/logging/daemon.js +124 -0
- package/dist/esm/logging/daemon.js.map +1 -0
- package/dist/esm/logging/ring-file.js +66 -0
- package/dist/esm/logging/ring-file.js.map +1 -0
- package/dist/esm/media-cache.js +251 -0
- package/dist/esm/media-cache.js.map +1 -0
- package/dist/esm/model-auto.js +103 -5
- package/dist/esm/model-auto.js.map +1 -1
- package/dist/esm/processes.js +2 -0
- package/dist/esm/processes.js.map +1 -0
- package/dist/esm/refresh-free.js +3 -3
- package/dist/esm/refresh-free.js.map +1 -1
- package/dist/esm/run/attachments.js +8 -4
- package/dist/esm/run/attachments.js.map +1 -1
- package/dist/esm/run/bird.js +118 -5
- package/dist/esm/run/bird.js.map +1 -1
- package/dist/esm/run/cache-state.js +3 -2
- package/dist/esm/run/cache-state.js.map +1 -1
- package/dist/esm/run/cli-preflight.js +19 -1
- package/dist/esm/run/cli-preflight.js.map +1 -1
- package/dist/esm/run/constants.js +0 -7
- package/dist/esm/run/constants.js.map +1 -1
- package/dist/esm/run/finish-line.js +58 -11
- package/dist/esm/run/finish-line.js.map +1 -1
- package/dist/esm/run/flows/asset/extract.js +70 -0
- package/dist/esm/run/flows/asset/extract.js.map +1 -0
- package/dist/esm/run/flows/asset/input.js +209 -25
- package/dist/esm/run/flows/asset/input.js.map +1 -1
- package/dist/esm/run/flows/asset/media-policy.js +3 -0
- package/dist/esm/run/flows/asset/media-policy.js.map +1 -0
- package/dist/esm/run/flows/asset/media.js +224 -0
- package/dist/esm/run/flows/asset/media.js.map +1 -0
- package/dist/esm/run/flows/asset/output.js +98 -0
- package/dist/esm/run/flows/asset/output.js.map +1 -0
- package/dist/esm/run/flows/asset/preprocess.js +92 -16
- package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
- package/dist/esm/run/flows/asset/summary.js +165 -11
- package/dist/esm/run/flows/asset/summary.js.map +1 -1
- package/dist/esm/run/flows/url/extract.js +6 -6
- package/dist/esm/run/flows/url/extract.js.map +1 -1
- package/dist/esm/run/flows/url/flow.js +338 -36
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +6 -1
- package/dist/esm/run/flows/url/markdown.js.map +1 -1
- package/dist/esm/run/flows/url/slides-output.js +485 -0
- package/dist/esm/run/flows/url/slides-output.js.map +1 -0
- package/dist/esm/run/flows/url/slides-text.js +628 -0
- package/dist/esm/run/flows/url/slides-text.js.map +1 -0
- package/dist/esm/run/flows/url/summary.js +358 -83
- package/dist/esm/run/flows/url/summary.js.map +1 -1
- package/dist/esm/run/help.js +94 -5
- package/dist/esm/run/help.js.map +1 -1
- package/dist/esm/run/logging.js +12 -4
- package/dist/esm/run/logging.js.map +1 -1
- package/dist/esm/run/media-cache-state.js +33 -0
- package/dist/esm/run/media-cache-state.js.map +1 -0
- package/dist/esm/run/progress.js +19 -1
- package/dist/esm/run/progress.js.map +1 -1
- package/dist/esm/run/run-context.js +19 -0
- package/dist/esm/run/run-context.js.map +1 -0
- package/dist/esm/run/run-output.js +1 -1
- package/dist/esm/run/run-output.js.map +1 -1
- package/dist/esm/run/run-settings.js +182 -0
- package/dist/esm/run/run-settings.js.map +1 -0
- package/dist/esm/run/runner.js +225 -32
- package/dist/esm/run/runner.js.map +1 -1
- package/dist/esm/run/slides-cli.js +225 -0
- package/dist/esm/run/slides-cli.js.map +1 -0
- package/dist/esm/run/slides-render.js +163 -0
- package/dist/esm/run/slides-render.js.map +1 -0
- package/dist/esm/run/stream-output.js +63 -0
- package/dist/esm/run/stream-output.js.map +1 -0
- package/dist/esm/run/streaming.js +16 -43
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +59 -41
- package/dist/esm/run/summary-engine.js.map +1 -1
- package/dist/esm/run/transcriber-cli.js +148 -0
- package/dist/esm/run/transcriber-cli.js.map +1 -0
- package/dist/esm/shared/sse-events.js +26 -0
- package/dist/esm/shared/sse-events.js.map +1 -0
- package/dist/esm/shared/streaming-merge.js +44 -0
- package/dist/esm/shared/streaming-merge.js.map +1 -0
- package/dist/esm/slides/extract.js +1942 -0
- package/dist/esm/slides/extract.js.map +1 -0
- package/dist/esm/slides/index.js +4 -0
- package/dist/esm/slides/index.js.map +1 -0
- package/dist/esm/slides/settings.js +73 -0
- package/dist/esm/slides/settings.js.map +1 -0
- package/dist/esm/slides/store.js +111 -0
- package/dist/esm/slides/store.js.map +1 -0
- package/dist/esm/slides/types.js +2 -0
- package/dist/esm/slides/types.js.map +1 -0
- package/dist/esm/tty/osc-progress.js +21 -1
- package/dist/esm/tty/osc-progress.js.map +1 -1
- package/dist/esm/tty/progress/fetch-html.js +8 -4
- package/dist/esm/tty/progress/fetch-html.js.map +1 -1
- package/dist/esm/tty/progress/transcript.js +82 -31
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +2 -2
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/theme.js +189 -0
- package/dist/esm/tty/theme.js.map +1 -0
- package/dist/esm/tty/website-progress.js +17 -13
- package/dist/esm/tty/website-progress.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/cache.d.ts +14 -2
- package/dist/types/config.d.ts +34 -0
- package/dist/types/daemon/agent.d.ts +25 -0
- package/dist/types/daemon/chat.d.ts +27 -0
- package/dist/types/daemon/env-snapshot.d.ts +1 -1
- package/dist/types/daemon/flow-context.d.ts +24 -3
- package/dist/types/daemon/launchd.d.ts +4 -0
- package/dist/types/daemon/process-registry.d.ts +73 -0
- package/dist/types/daemon/schtasks.d.ts +4 -0
- package/dist/types/daemon/server.d.ts +7 -1
- package/dist/types/daemon/summarize.d.ts +47 -5
- package/dist/types/daemon/systemd.d.ts +4 -0
- package/dist/types/flags.d.ts +1 -0
- package/dist/types/llm/attachments.d.ts +6 -0
- package/dist/types/llm/errors.d.ts +1 -0
- package/dist/types/llm/generate-text.d.ts +29 -13
- package/dist/types/llm/prompt.d.ts +7 -2
- package/dist/types/llm/providers/anthropic.d.ts +30 -0
- package/dist/types/llm/providers/google.d.ts +29 -0
- package/dist/types/llm/providers/models.d.ts +27 -0
- package/dist/types/llm/providers/openai.d.ts +38 -0
- package/dist/types/llm/providers/shared.d.ts +14 -0
- package/dist/types/llm/providers/types.d.ts +6 -0
- package/dist/types/llm/types.d.ts +5 -0
- package/dist/types/llm/usage.d.ts +5 -0
- package/dist/types/logging/daemon.d.ts +26 -0
- package/dist/types/logging/ring-file.d.ts +10 -0
- package/dist/types/media-cache.d.ts +22 -0
- package/dist/types/model-auto.d.ts +1 -0
- package/dist/types/processes.d.ts +1 -0
- package/dist/types/run/attachments.d.ts +9 -6
- package/dist/types/run/bird.d.ts +7 -0
- package/dist/types/run/constants.d.ts +0 -2
- package/dist/types/run/finish-line.d.ts +59 -1
- package/dist/types/run/flows/asset/extract.d.ts +18 -0
- package/dist/types/run/flows/asset/input.d.ts +12 -2
- package/dist/types/run/flows/asset/media-policy.d.ts +2 -0
- package/dist/types/run/flows/asset/media.d.ts +21 -0
- package/dist/types/run/flows/asset/output.d.ts +42 -0
- package/dist/types/run/flows/asset/preprocess.d.ts +22 -2
- package/dist/types/run/flows/asset/summary.d.ts +6 -0
- package/dist/types/run/flows/url/extract.d.ts +2 -1
- package/dist/types/run/flows/url/slides-output.d.ts +66 -0
- package/dist/types/run/flows/url/slides-text.d.ts +87 -0
- package/dist/types/run/flows/url/summary.d.ts +11 -3
- package/dist/types/run/flows/url/types.d.ts +29 -2
- package/dist/types/run/help.d.ts +3 -0
- package/dist/types/run/logging.d.ts +3 -2
- package/dist/types/run/media-cache-state.d.ts +7 -0
- package/dist/types/run/progress.d.ts +2 -1
- package/dist/types/run/run-context.d.ts +44 -0
- package/dist/types/run/run-settings.d.ts +62 -0
- package/dist/types/run/slides-cli.d.ts +9 -0
- package/dist/types/run/slides-render.d.ts +30 -0
- package/dist/types/run/stream-output.d.ts +12 -0
- package/dist/types/run/streaming.d.ts +10 -4
- package/dist/types/run/summary-engine.d.ts +15 -3
- package/dist/types/run/summary-llm.d.ts +2 -2
- package/dist/types/run/transcriber-cli.d.ts +8 -0
- package/dist/types/shared/sse-events.d.ts +64 -0
- package/dist/types/shared/streaming-merge.d.ts +4 -0
- package/dist/types/slides/extract.d.ts +42 -0
- package/dist/types/slides/index.d.ts +5 -0
- package/dist/types/slides/settings.d.ts +20 -0
- package/dist/types/slides/store.d.ts +15 -0
- package/dist/types/slides/types.d.ts +40 -0
- package/dist/types/tty/osc-progress.d.ts +2 -2
- package/dist/types/tty/progress/fetch-html.d.ts +3 -1
- package/dist/types/tty/progress/transcript.d.ts +3 -1
- package/dist/types/tty/spinner.d.ts +3 -1
- package/dist/types/tty/theme.d.ts +44 -0
- package/dist/types/tty/website-progress.d.ts +3 -1
- package/dist/types/version.d.ts +1 -1
- package/docs/README.md +13 -8
- package/docs/_config.yml +26 -0
- package/docs/_layouts/default.html +60 -0
- package/docs/agent.md +333 -0
- package/docs/assets/site.css +748 -0
- package/docs/assets/site.js +72 -0
- package/docs/assets/summarize-cli.png +0 -0
- package/docs/assets/summarize-extension.png +0 -0
- package/docs/assets/youtube-slides.png +0 -0
- package/docs/cache.md +29 -3
- package/docs/chrome-extension.md +85 -7
- package/docs/config.md +74 -2
- package/docs/extract-only.md +10 -2
- package/docs/index.html +205 -0
- package/docs/index.md +25 -0
- package/docs/language.md +1 -1
- package/docs/llm.md +17 -1
- package/docs/manual-tests.md +2 -0
- package/docs/media.md +37 -0
- package/docs/model-auto.md +2 -1
- package/docs/nvidia-onnx-transcription.md +55 -0
- package/docs/openai.md +5 -0
- package/docs/releasing.md +26 -0
- package/docs/site/assets/site.css +399 -228
- package/docs/site/assets/summarize-cli.png +0 -0
- package/docs/site/assets/summarize-extension.png +0 -0
- package/docs/site/docs/chrome-extension.html +89 -0
- package/docs/site/docs/config.html +1 -0
- package/docs/site/docs/extract-only.html +1 -0
- package/docs/site/docs/firecrawl.html +1 -0
- package/docs/site/docs/index.html +5 -0
- package/docs/site/docs/llm.html +1 -0
- package/docs/site/docs/openai.html +1 -0
- package/docs/site/docs/website.html +1 -0
- package/docs/site/docs/youtube.html +1 -0
- package/docs/site/index.html +148 -84
- package/docs/slides.md +74 -0
- package/docs/timestamps.md +103 -0
- package/docs/website.md +13 -0
- package/docs/youtube.md +16 -0
- package/package.json +22 -18
- package/dist/esm/daemon/request-settings.js +0 -91
- package/dist/esm/daemon/request-settings.js.map +0 -1
- package/dist/types/daemon/request-settings.d.ts +0 -27
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { ExtractedLinkContent } from '../../../content/index.js';
|
|
2
2
|
import type { UrlExtractionUi } from './extract.js';
|
|
3
|
+
import type { SlidesTerminalOutput } from './slides-output.js';
|
|
3
4
|
import type { UrlFlowContext } from './types.js';
|
|
4
|
-
|
|
5
|
+
type SlidesResult = Awaited<ReturnType<typeof import('../../../slides/index.js').extractSlidesForSource>>;
|
|
6
|
+
export declare function buildUrlPrompt({ extracted, outputLanguage, lengthArg, promptOverride, lengthInstruction, languageInstruction, slides, }: {
|
|
5
7
|
extracted: ExtractedLinkContent;
|
|
6
8
|
outputLanguage: UrlFlowContext['flags']['outputLanguage'];
|
|
7
9
|
lengthArg: UrlFlowContext['flags']['lengthArg'];
|
|
8
10
|
promptOverride?: string | null;
|
|
9
11
|
lengthInstruction?: string | null;
|
|
10
12
|
languageInstruction?: string | null;
|
|
13
|
+
slides?: SlidesResult | null;
|
|
11
14
|
}): string;
|
|
12
|
-
export declare function outputExtractedUrl({ ctx, url, extracted, extractionUi, prompt, effectiveMarkdownMode, transcriptionCostLabel, }: {
|
|
15
|
+
export declare function outputExtractedUrl({ ctx, url, extracted, extractionUi, prompt, effectiveMarkdownMode, transcriptionCostLabel, slides, slidesOutput, }: {
|
|
13
16
|
ctx: UrlFlowContext;
|
|
14
17
|
url: string;
|
|
15
18
|
extracted: ExtractedLinkContent;
|
|
@@ -17,8 +20,10 @@ export declare function outputExtractedUrl({ ctx, url, extracted, extractionUi,
|
|
|
17
20
|
prompt: string;
|
|
18
21
|
effectiveMarkdownMode: 'off' | 'auto' | 'llm' | 'readability';
|
|
19
22
|
transcriptionCostLabel: string | null;
|
|
23
|
+
slides?: Awaited<ReturnType<typeof import('../../../slides/index.js').extractSlidesForSource>> | null;
|
|
24
|
+
slidesOutput?: SlidesTerminalOutput | null;
|
|
20
25
|
}): Promise<void>;
|
|
21
|
-
export declare function summarizeExtractedUrl({ ctx, url, extracted, extractionUi, prompt, effectiveMarkdownMode, transcriptionCostLabel, onModelChosen, }: {
|
|
26
|
+
export declare function summarizeExtractedUrl({ ctx, url, extracted, extractionUi, prompt, effectiveMarkdownMode, transcriptionCostLabel, onModelChosen, slides, slidesOutput, }: {
|
|
22
27
|
ctx: UrlFlowContext;
|
|
23
28
|
url: string;
|
|
24
29
|
extracted: ExtractedLinkContent;
|
|
@@ -27,4 +32,7 @@ export declare function summarizeExtractedUrl({ ctx, url, extracted, extractionU
|
|
|
27
32
|
effectiveMarkdownMode: 'off' | 'auto' | 'llm' | 'readability';
|
|
28
33
|
transcriptionCostLabel: string | null;
|
|
29
34
|
onModelChosen?: ((modelId: string) => void) | null;
|
|
35
|
+
slides?: Awaited<ReturnType<typeof import('../../../slides/index.js').extractSlidesForSource>> | null;
|
|
36
|
+
slidesOutput?: SlidesTerminalOutput | null;
|
|
30
37
|
}): Promise<void>;
|
|
38
|
+
export {};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { CacheState } from '../../../cache.js';
|
|
2
2
|
import type { SummarizeConfig } from '../../../config.js';
|
|
3
|
-
import type { ExtractedLinkContent, LinkPreviewProgressEvent } from '../../../content/index.js';
|
|
3
|
+
import type { ExtractedLinkContent, LinkPreviewProgressEvent, MediaCache } from '../../../content/index.js';
|
|
4
4
|
import type { LlmCall, RunMetricsReport } from '../../../costs.js';
|
|
5
|
+
import type { StreamMode } from '../../../flags.js';
|
|
5
6
|
import type { OutputLanguage } from '../../../language.js';
|
|
6
7
|
import type { ExecFileFn } from '../../../markitdown.js';
|
|
7
8
|
import type { FixedModelSpec, RequestedModel } from '../../../model-spec.js';
|
|
8
9
|
import type { SummaryLength } from '../../../shared/contracts.js';
|
|
10
|
+
import type { SlideExtractionResult, SlideImage, SlideSettings, SlideSourceKind } from '../../../slides/index.js';
|
|
9
11
|
import type { createSummaryEngine } from '../../summary-engine.js';
|
|
10
12
|
import type { SummarizeAssetArgs } from '../asset/summary.js';
|
|
11
13
|
export type UrlFlowIo = {
|
|
@@ -26,6 +28,7 @@ export type UrlFlowFlags = {
|
|
|
26
28
|
youtubeMode: 'auto' | 'web' | 'yt-dlp' | 'apify' | 'no-auto';
|
|
27
29
|
firecrawlMode: 'off' | 'auto' | 'always';
|
|
28
30
|
videoMode: 'auto' | 'transcript' | 'understand';
|
|
31
|
+
transcriptTimestamps: boolean;
|
|
29
32
|
outputLanguage: OutputLanguage;
|
|
30
33
|
lengthArg: {
|
|
31
34
|
kind: 'preset';
|
|
@@ -34,9 +37,11 @@ export type UrlFlowFlags = {
|
|
|
34
37
|
kind: 'chars';
|
|
35
38
|
maxCharacters: number;
|
|
36
39
|
};
|
|
40
|
+
forceSummary: boolean;
|
|
37
41
|
promptOverride?: string | null;
|
|
38
42
|
lengthInstruction?: string | null;
|
|
39
43
|
languageInstruction?: string | null;
|
|
44
|
+
summaryCacheBypass: boolean;
|
|
40
45
|
maxOutputTokensArg: number | null;
|
|
41
46
|
json: boolean;
|
|
42
47
|
extractMode: boolean;
|
|
@@ -47,10 +52,14 @@ export type UrlFlowFlags = {
|
|
|
47
52
|
verbose: boolean;
|
|
48
53
|
verboseColor: boolean;
|
|
49
54
|
progressEnabled: boolean;
|
|
55
|
+
streamMode: StreamMode;
|
|
50
56
|
streamingEnabled: boolean;
|
|
51
57
|
plain: boolean;
|
|
52
58
|
configPath: string | null;
|
|
53
59
|
configModelLabel: string | null;
|
|
60
|
+
slides: SlideSettings | null;
|
|
61
|
+
slidesDebug: boolean;
|
|
62
|
+
slidesOutput?: boolean;
|
|
54
63
|
};
|
|
55
64
|
export type UrlFlowModel = {
|
|
56
65
|
requestedModel: RequestedModel;
|
|
@@ -97,13 +106,30 @@ export type UrlFlowModel = {
|
|
|
97
106
|
export type UrlFlowHooks = {
|
|
98
107
|
onModelChosen?: ((modelId: string) => void) | null;
|
|
99
108
|
onExtracted?: ((extracted: ExtractedLinkContent) => void) | null;
|
|
109
|
+
onSlidesExtracted?: ((slides: SlideExtractionResult) => void) | null;
|
|
110
|
+
onSlidesProgress?: ((text: string) => void) | null;
|
|
111
|
+
onSlidesDone?: ((result: {
|
|
112
|
+
ok: boolean;
|
|
113
|
+
error?: string | null;
|
|
114
|
+
}) => void) | null;
|
|
115
|
+
onSlideChunk?: (chunk: {
|
|
116
|
+
slide: SlideImage;
|
|
117
|
+
meta: {
|
|
118
|
+
slidesDir: string;
|
|
119
|
+
sourceUrl: string;
|
|
120
|
+
sourceId: string;
|
|
121
|
+
sourceKind: SlideSourceKind;
|
|
122
|
+
ocrAvailable: boolean;
|
|
123
|
+
};
|
|
124
|
+
}) => void;
|
|
100
125
|
onLinkPreviewProgress?: ((event: LinkPreviewProgressEvent) => void) | null;
|
|
101
126
|
onSummaryCached?: ((cached: boolean) => void) | null;
|
|
102
127
|
setTranscriptionCost: (costUsd: number | null, label: string | null) => void;
|
|
103
128
|
summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
|
|
104
129
|
writeViaFooter: (parts: string[]) => void;
|
|
105
130
|
clearProgressForStdout: () => void;
|
|
106
|
-
|
|
131
|
+
restoreProgressAfterStdout?: (() => void) | null;
|
|
132
|
+
setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
|
|
107
133
|
clearProgressIfCurrent: (fn: () => void) => void;
|
|
108
134
|
buildReport: () => Promise<RunMetricsReport>;
|
|
109
135
|
estimateCostUsd: () => Promise<number | null>;
|
|
@@ -118,5 +144,6 @@ export type UrlFlowContext = {
|
|
|
118
144
|
flags: UrlFlowFlags;
|
|
119
145
|
model: UrlFlowModel;
|
|
120
146
|
cache: CacheState;
|
|
147
|
+
mediaCache: MediaCache | null;
|
|
121
148
|
hooks: UrlFlowHooks;
|
|
122
149
|
};
|
package/dist/types/run/help.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
export declare function buildProgram(): Command;
|
|
3
|
+
export declare function applyHelpStyle(program: Command, env: Record<string, string | undefined>, stdout: NodeJS.WritableStream): void;
|
|
4
|
+
export declare function buildSlidesProgram(): Command;
|
|
3
5
|
export declare function attachRichHelp(program: Command, env: Record<string, string | undefined>, stdout: NodeJS.WritableStream): void;
|
|
4
6
|
export declare function buildConciseHelp(): string;
|
|
5
7
|
export declare function buildRefreshFreeHelp(): string;
|
|
6
8
|
export declare function buildDaemonHelp(): string;
|
|
9
|
+
export declare function buildTranscriberHelp(): string;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export declare function writeVerbose(stderr: NodeJS.WritableStream, verbose: boolean, message: string, color: boolean): void;
|
|
2
|
-
export declare function createRetryLogger({ stderr, verbose, color, modelId, }: {
|
|
1
|
+
export declare function writeVerbose(stderr: NodeJS.WritableStream, verbose: boolean, message: string, color: boolean, env?: Record<string, string | undefined>): void;
|
|
2
|
+
export declare function createRetryLogger({ stderr, verbose, color, modelId, env, }: {
|
|
3
3
|
stderr: NodeJS.WritableStream;
|
|
4
4
|
verbose: boolean;
|
|
5
5
|
color: boolean;
|
|
6
6
|
modelId: string;
|
|
7
|
+
env?: Record<string, string | undefined>;
|
|
7
8
|
}): (notice: {
|
|
8
9
|
attempt: number;
|
|
9
10
|
maxRetries: number;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SummarizeConfig } from '../config.js';
|
|
2
|
+
import type { MediaCache } from '../content/index.js';
|
|
3
|
+
export declare function createMediaCacheFromConfig({ envForRun, config, noMediaCacheFlag, }: {
|
|
4
|
+
envForRun: Record<string, string | undefined>;
|
|
5
|
+
config: SummarizeConfig | null;
|
|
6
|
+
noMediaCacheFlag?: boolean;
|
|
7
|
+
}): Promise<MediaCache | null>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type ProgressGate = {
|
|
2
|
-
setClearProgressBeforeStdout: (fn: (() => void) | null) => void;
|
|
2
|
+
setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
|
|
3
3
|
clearProgressForStdout: () => void;
|
|
4
|
+
restoreProgressAfterStdout: () => void;
|
|
4
5
|
clearProgressIfCurrent: (fn: () => void) => void;
|
|
5
6
|
};
|
|
6
7
|
export declare function createProgressGate(): ProgressGate;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CliProvider } from '../config.js';
|
|
2
|
+
export declare function resolveRunContextState({ env, envForRun, programOpts, languageExplicitlySet, videoModeExplicitlySet, cliFlagPresent, cliProviderArg, }: {
|
|
3
|
+
env: Record<string, string | undefined>;
|
|
4
|
+
envForRun: Record<string, string | undefined>;
|
|
5
|
+
programOpts: Record<string, unknown>;
|
|
6
|
+
languageExplicitlySet: boolean;
|
|
7
|
+
videoModeExplicitlySet: boolean;
|
|
8
|
+
cliFlagPresent: boolean;
|
|
9
|
+
cliProviderArg: CliProvider | null;
|
|
10
|
+
}): {
|
|
11
|
+
apiKey: string | null;
|
|
12
|
+
openrouterApiKey: string | null;
|
|
13
|
+
openrouterConfigured: boolean;
|
|
14
|
+
openaiTranscriptionKey: string | null;
|
|
15
|
+
xaiApiKey: string | null;
|
|
16
|
+
googleApiKey: string | null;
|
|
17
|
+
anthropicApiKey: string | null;
|
|
18
|
+
zaiApiKey: string | null;
|
|
19
|
+
zaiBaseUrl: string;
|
|
20
|
+
firecrawlApiKey: string | null;
|
|
21
|
+
firecrawlConfigured: boolean;
|
|
22
|
+
googleConfigured: boolean;
|
|
23
|
+
anthropicConfigured: boolean;
|
|
24
|
+
apifyToken: string | null;
|
|
25
|
+
ytDlpPath: string | null;
|
|
26
|
+
falApiKey: string | null;
|
|
27
|
+
cliAvailability: Partial<Record<CliProvider, boolean>>;
|
|
28
|
+
envForAuto: Record<string, string | undefined>;
|
|
29
|
+
providerBaseUrls: {
|
|
30
|
+
openai: string | null;
|
|
31
|
+
anthropic: string | null;
|
|
32
|
+
google: string | null;
|
|
33
|
+
xai: string | null;
|
|
34
|
+
};
|
|
35
|
+
config: import("../config.js").SummarizeConfig | null;
|
|
36
|
+
configPath: string | null;
|
|
37
|
+
outputLanguage: import("@steipete/summarize-core/language").OutputLanguage;
|
|
38
|
+
openaiWhisperUsdPerMinute: number;
|
|
39
|
+
videoMode: ReturnType<typeof import("../flags.js").parseVideoMode>;
|
|
40
|
+
cliConfigForRun: import("../config.js").SummarizeConfig["cli"] | undefined;
|
|
41
|
+
configForCli: import("../config.js").SummarizeConfig | null;
|
|
42
|
+
openaiUseChatCompletions: boolean;
|
|
43
|
+
configModelLabel: string | null;
|
|
44
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { FirecrawlMode, LengthArg, MarkdownMode, PreprocessMode, VideoMode, YoutubeMode } from '../flags.js';
|
|
2
|
+
import type { OutputLanguage } from '../language.js';
|
|
3
|
+
import type { SummaryLengthTarget } from '../prompts/index.js';
|
|
4
|
+
export type ResolvedRunSettings = {
|
|
5
|
+
lengthArg: LengthArg;
|
|
6
|
+
firecrawlMode: FirecrawlMode;
|
|
7
|
+
markdownMode: MarkdownMode;
|
|
8
|
+
preprocessMode: PreprocessMode;
|
|
9
|
+
youtubeMode: YoutubeMode;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
retries: number;
|
|
12
|
+
maxOutputTokensArg: number | null;
|
|
13
|
+
};
|
|
14
|
+
export type RunOverrides = {
|
|
15
|
+
firecrawlMode: FirecrawlMode | null;
|
|
16
|
+
markdownMode: MarkdownMode | null;
|
|
17
|
+
preprocessMode: PreprocessMode | null;
|
|
18
|
+
youtubeMode: YoutubeMode | null;
|
|
19
|
+
videoMode: VideoMode | null;
|
|
20
|
+
transcriptTimestamps: boolean | null;
|
|
21
|
+
forceSummary: boolean | null;
|
|
22
|
+
timeoutMs: number | null;
|
|
23
|
+
retries: number | null;
|
|
24
|
+
maxOutputTokensArg: number | null;
|
|
25
|
+
transcriber: 'auto' | 'whisper' | 'parakeet' | 'canary' | null;
|
|
26
|
+
};
|
|
27
|
+
export type RunOverridesInput = {
|
|
28
|
+
firecrawl?: unknown;
|
|
29
|
+
markdownMode?: unknown;
|
|
30
|
+
preprocess?: unknown;
|
|
31
|
+
youtube?: unknown;
|
|
32
|
+
videoMode?: unknown;
|
|
33
|
+
timestamps?: unknown;
|
|
34
|
+
forceSummary?: unknown;
|
|
35
|
+
timeout?: unknown;
|
|
36
|
+
retries?: unknown;
|
|
37
|
+
maxOutputTokens?: unknown;
|
|
38
|
+
transcriber?: unknown;
|
|
39
|
+
};
|
|
40
|
+
export declare function resolveSummaryLength(raw: unknown, fallback?: string): {
|
|
41
|
+
lengthArg: LengthArg;
|
|
42
|
+
summaryLength: SummaryLengthTarget;
|
|
43
|
+
};
|
|
44
|
+
export declare function resolveOutputLanguageSetting({ raw, fallback, }: {
|
|
45
|
+
raw: unknown;
|
|
46
|
+
fallback: OutputLanguage;
|
|
47
|
+
}): OutputLanguage;
|
|
48
|
+
export declare function resolveCliRunSettings({ length, firecrawl, markdownMode, markdown, format, preprocess, youtube, timeout, retries, maxOutputTokens, }: {
|
|
49
|
+
length: string;
|
|
50
|
+
firecrawl: string;
|
|
51
|
+
markdownMode?: string | undefined;
|
|
52
|
+
markdown?: string | undefined;
|
|
53
|
+
format: 'text' | 'markdown';
|
|
54
|
+
preprocess: string;
|
|
55
|
+
youtube: string;
|
|
56
|
+
timeout: string;
|
|
57
|
+
retries: string;
|
|
58
|
+
maxOutputTokens?: string | undefined;
|
|
59
|
+
}): ResolvedRunSettings;
|
|
60
|
+
export declare function resolveRunOverrides({ firecrawl, markdownMode, preprocess, youtube, videoMode, timestamps, forceSummary, timeout, retries, maxOutputTokens, transcriber, }: RunOverridesInput, options?: {
|
|
61
|
+
strict?: boolean;
|
|
62
|
+
}): RunOverrides;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type SlidesCliContext = {
|
|
2
|
+
normalizedArgv: string[];
|
|
3
|
+
envForRun: Record<string, string | undefined>;
|
|
4
|
+
fetchImpl: typeof fetch;
|
|
5
|
+
stdout: NodeJS.WritableStream;
|
|
6
|
+
stderr: NodeJS.WritableStream;
|
|
7
|
+
};
|
|
8
|
+
export declare function handleSlidesCliRequest({ normalizedArgv, envForRun, stdout, stderr, }: SlidesCliContext): Promise<boolean>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SlideImage } from '../slides/types.js';
|
|
2
|
+
export type SlidesRenderMode = 'none' | 'auto' | 'kitty' | 'iterm';
|
|
3
|
+
export type InlineProtocol = 'none' | 'kitty' | 'iterm';
|
|
4
|
+
type RenderSlide = Pick<SlideImage, 'imagePath' | 'index' | 'timestamp'>;
|
|
5
|
+
export declare function renderSlidesInline({ slides, mode, env, stdout, labelForSlide, }: {
|
|
6
|
+
slides: RenderSlide[];
|
|
7
|
+
mode: SlidesRenderMode;
|
|
8
|
+
env: Record<string, string | undefined>;
|
|
9
|
+
stdout: NodeJS.WritableStream;
|
|
10
|
+
labelForSlide?: ((slide: RenderSlide) => string) | null;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
rendered: number;
|
|
13
|
+
protocol: InlineProtocol;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function createSlidesInlineRenderer({ mode, env, stdout, }: {
|
|
16
|
+
mode: SlidesRenderMode;
|
|
17
|
+
env: Record<string, string | undefined>;
|
|
18
|
+
stdout: NodeJS.WritableStream;
|
|
19
|
+
}): {
|
|
20
|
+
protocol: InlineProtocol;
|
|
21
|
+
renderSlide: (slide: RenderSlide, label?: string | null) => Promise<boolean>;
|
|
22
|
+
renderSlides: (args: {
|
|
23
|
+
slides: RenderSlide[];
|
|
24
|
+
labelForSlide?: ((slide: RenderSlide) => string) | null;
|
|
25
|
+
}) => Promise<{
|
|
26
|
+
rendered: number;
|
|
27
|
+
protocol: InlineProtocol;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type StreamOutputMode = 'line' | 'delta';
|
|
2
|
+
export declare function createStreamOutputGate({ stdout, clearProgressForStdout, restoreProgressAfterStdout, outputMode, richTty, }: {
|
|
3
|
+
stdout: NodeJS.WritableStream;
|
|
4
|
+
clearProgressForStdout: () => void;
|
|
5
|
+
restoreProgressAfterStdout?: (() => void) | null;
|
|
6
|
+
outputMode: StreamOutputMode;
|
|
7
|
+
richTty: boolean;
|
|
8
|
+
}): {
|
|
9
|
+
handleChunk: (streamed: string, prevStreamed: string) => void;
|
|
10
|
+
finalize: (finalText: string) => void;
|
|
11
|
+
getFlushedLen: () => number;
|
|
12
|
+
};
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
export
|
|
2
|
-
next: string;
|
|
3
|
-
appended: string;
|
|
4
|
-
};
|
|
1
|
+
export { mergeStreamingChunk } from '../shared/streaming-merge.js';
|
|
5
2
|
export declare function isGoogleStreamingUnsupportedError(error: unknown): boolean;
|
|
6
3
|
export declare function isStreamingTimeoutError(error: unknown): boolean;
|
|
4
|
+
export declare function canStream({ provider, prompt, transport, }: {
|
|
5
|
+
provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai';
|
|
6
|
+
prompt: {
|
|
7
|
+
attachments?: Array<{
|
|
8
|
+
kind: 'text' | 'image' | 'document';
|
|
9
|
+
}>;
|
|
10
|
+
};
|
|
11
|
+
transport: 'cli' | 'native' | 'openrouter';
|
|
12
|
+
}): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CliProvider } from '../config.js';
|
|
2
2
|
import { runCliModel } from '../llm/cli.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Prompt } from '../llm/prompt.js';
|
|
4
|
+
import { type StreamOutputMode } from './stream-output.js';
|
|
4
5
|
import { summarizeWithModelId } from './summary-llm.js';
|
|
5
6
|
import type { ModelAttempt, ModelMeta } from './types.js';
|
|
6
7
|
export type SummaryEngineDeps = {
|
|
@@ -12,6 +13,7 @@ export type SummaryEngineDeps = {
|
|
|
12
13
|
timeoutMs: number;
|
|
13
14
|
retries: number;
|
|
14
15
|
streamingEnabled: boolean;
|
|
16
|
+
streamingOutputMode?: StreamOutputMode;
|
|
15
17
|
plain: boolean;
|
|
16
18
|
verbose: boolean;
|
|
17
19
|
verboseColor: boolean;
|
|
@@ -29,6 +31,7 @@ export type SummaryEngineDeps = {
|
|
|
29
31
|
purpose: 'summary' | 'markdown';
|
|
30
32
|
}>;
|
|
31
33
|
clearProgressForStdout: () => void;
|
|
34
|
+
restoreProgressAfterStdout?: (() => void) | null;
|
|
32
35
|
apiKeys: {
|
|
33
36
|
xaiApiKey: string | null;
|
|
34
37
|
openaiApiKey: string | null;
|
|
@@ -52,13 +55,21 @@ export type SummaryEngineDeps = {
|
|
|
52
55
|
xai: string | null;
|
|
53
56
|
};
|
|
54
57
|
};
|
|
58
|
+
export type SummaryStreamHandler = {
|
|
59
|
+
onChunk: (args: {
|
|
60
|
+
streamed: string;
|
|
61
|
+
prevStreamed: string;
|
|
62
|
+
appended: string;
|
|
63
|
+
}) => void | Promise<void>;
|
|
64
|
+
onDone?: ((finalText: string) => void | Promise<void>) | null;
|
|
65
|
+
};
|
|
55
66
|
export declare function createSummaryEngine(deps: SummaryEngineDeps): {
|
|
56
67
|
applyZaiOverrides: (attempt: ModelAttempt) => ModelAttempt;
|
|
57
68
|
envHasKeyFor: (requiredEnv: ModelAttempt["requiredEnv"]) => boolean;
|
|
58
69
|
formatMissingModelError: (attempt: ModelAttempt) => string;
|
|
59
|
-
runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, }: {
|
|
70
|
+
runSummaryAttempt: ({ attempt, prompt, allowStreaming, onModelChosen, cli, streamHandler, }: {
|
|
60
71
|
attempt: ModelAttempt;
|
|
61
|
-
prompt:
|
|
72
|
+
prompt: Prompt;
|
|
62
73
|
allowStreaming: boolean;
|
|
63
74
|
onModelChosen?: ((modelId: string) => void) | null;
|
|
64
75
|
cli?: {
|
|
@@ -67,6 +78,7 @@ export declare function createSummaryEngine(deps: SummaryEngineDeps): {
|
|
|
67
78
|
cwd?: string;
|
|
68
79
|
extraArgsByProvider?: Partial<Record<CliProvider, string[]>>;
|
|
69
80
|
} | null;
|
|
81
|
+
streamHandler?: SummaryStreamHandler | null;
|
|
70
82
|
}) => Promise<{
|
|
71
83
|
summary: string;
|
|
72
84
|
summaryAlreadyPrinted: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { generateTextWithModelId } from '../llm/generate-text.js';
|
|
2
2
|
import type { parseGatewayStyleModelId } from '../llm/model-id.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Prompt } from '../llm/prompt.js';
|
|
4
4
|
export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchImpl, timeoutMs, }: {
|
|
5
5
|
parsedModel: ReturnType<typeof parseGatewayStyleModelId>;
|
|
6
6
|
apiKeys: {
|
|
@@ -15,7 +15,7 @@ export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchIm
|
|
|
15
15
|
}>;
|
|
16
16
|
export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens, timeoutMs, fetchImpl, apiKeys, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
|
|
17
17
|
modelId: string;
|
|
18
|
-
prompt:
|
|
18
|
+
prompt: Prompt;
|
|
19
19
|
maxOutputTokens?: number;
|
|
20
20
|
timeoutMs: number;
|
|
21
21
|
fetchImpl: typeof fetch;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type TranscriberCliContext = {
|
|
2
|
+
normalizedArgv: string[];
|
|
3
|
+
envForRun: Record<string, string | undefined>;
|
|
4
|
+
stdout: NodeJS.WritableStream;
|
|
5
|
+
stderr: NodeJS.WritableStream;
|
|
6
|
+
};
|
|
7
|
+
export declare function handleTranscriberCliRequest({ normalizedArgv, envForRun, stdout, }: TranscriberCliContext): Promise<boolean>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { AssistantMessage } from '@mariozechner/pi-ai';
|
|
2
|
+
export type SseMetaData = {
|
|
3
|
+
model: string | null;
|
|
4
|
+
modelLabel: string | null;
|
|
5
|
+
inputSummary: string | null;
|
|
6
|
+
summaryFromCache?: boolean | null;
|
|
7
|
+
};
|
|
8
|
+
export type SseSlidesData = {
|
|
9
|
+
sourceUrl: string;
|
|
10
|
+
sourceId: string;
|
|
11
|
+
sourceKind: string;
|
|
12
|
+
ocrAvailable: boolean;
|
|
13
|
+
slides: Array<{
|
|
14
|
+
index: number;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
imageUrl: string;
|
|
17
|
+
ocrText?: string | null;
|
|
18
|
+
ocrConfidence?: number | null;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
export type SseMetricsData = {
|
|
22
|
+
elapsedMs: number;
|
|
23
|
+
summary: string;
|
|
24
|
+
details: string | null;
|
|
25
|
+
summaryDetailed: string;
|
|
26
|
+
detailsDetailed: string | null;
|
|
27
|
+
};
|
|
28
|
+
export type SseEvent = {
|
|
29
|
+
event: 'meta';
|
|
30
|
+
data: SseMetaData;
|
|
31
|
+
} | {
|
|
32
|
+
event: 'slides';
|
|
33
|
+
data: SseSlidesData;
|
|
34
|
+
} | {
|
|
35
|
+
event: 'status';
|
|
36
|
+
data: {
|
|
37
|
+
text: string;
|
|
38
|
+
};
|
|
39
|
+
} | {
|
|
40
|
+
event: 'chunk';
|
|
41
|
+
data: {
|
|
42
|
+
text: string;
|
|
43
|
+
};
|
|
44
|
+
} | {
|
|
45
|
+
event: 'assistant';
|
|
46
|
+
data: AssistantMessage;
|
|
47
|
+
} | {
|
|
48
|
+
event: 'metrics';
|
|
49
|
+
data: SseMetricsData;
|
|
50
|
+
} | {
|
|
51
|
+
event: 'done';
|
|
52
|
+
data: Record<string, never>;
|
|
53
|
+
} | {
|
|
54
|
+
event: 'error';
|
|
55
|
+
data: {
|
|
56
|
+
message: string;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export type RawSseMessage = {
|
|
60
|
+
event: string;
|
|
61
|
+
data: string;
|
|
62
|
+
};
|
|
63
|
+
export declare function encodeSseEvent(event: SseEvent): string;
|
|
64
|
+
export declare function parseSseEvent(message: RawSseMessage): SseEvent | null;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ExtractedLinkContent, MediaCache } from '../content/index.js';
|
|
2
|
+
import type { SlideSettings } from './settings.js';
|
|
3
|
+
import type { SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind } from './types.js';
|
|
4
|
+
type ExtractSlidesArgs = {
|
|
5
|
+
source: SlideSource;
|
|
6
|
+
settings: SlideSettings;
|
|
7
|
+
noCache?: boolean;
|
|
8
|
+
mediaCache?: MediaCache | null;
|
|
9
|
+
env: Record<string, string | undefined>;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
ytDlpPath: string | null;
|
|
12
|
+
ffmpegPath: string | null;
|
|
13
|
+
tesseractPath: string | null;
|
|
14
|
+
hooks?: {
|
|
15
|
+
onSlideChunk?: (chunk: {
|
|
16
|
+
slide: SlideImage;
|
|
17
|
+
meta: {
|
|
18
|
+
slidesDir: string;
|
|
19
|
+
sourceUrl: string;
|
|
20
|
+
sourceId: string;
|
|
21
|
+
sourceKind: SlideSourceKind;
|
|
22
|
+
ocrAvailable: boolean;
|
|
23
|
+
};
|
|
24
|
+
}) => void;
|
|
25
|
+
onSlidesTimeline?: ((slides: SlideExtractionResult) => void) | null;
|
|
26
|
+
onSlidesProgress?: ((text: string) => void) | null;
|
|
27
|
+
onSlidesLog?: ((message: string) => void) | null;
|
|
28
|
+
} | null;
|
|
29
|
+
};
|
|
30
|
+
export declare function resolveSlideSource({ url, extracted, }: {
|
|
31
|
+
url: string;
|
|
32
|
+
extracted: ExtractedLinkContent;
|
|
33
|
+
}): SlideSource | null;
|
|
34
|
+
export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
|
|
35
|
+
export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
|
|
36
|
+
export declare function parseShowinfoTimestamp(line: string): number | null;
|
|
37
|
+
export declare function resolveExtractedTimestamp({ requested, actual, seekBase, }: {
|
|
38
|
+
requested: number;
|
|
39
|
+
actual: number | null;
|
|
40
|
+
seekBase?: number | null;
|
|
41
|
+
}): number;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { extractSlidesForSource, parseShowinfoTimestamp, resolveExtractedTimestamp, resolveSlideSource, resolveSlideSourceFromUrl, } from './extract.js';
|
|
2
|
+
export type { SlideSettings, SlideSettingsInput } from './settings.js';
|
|
3
|
+
export { resolveSlideSettings } from './settings.js';
|
|
4
|
+
export { buildSlidesDirId, readSlidesCacheIfValid, resolveSlideImagePath, resolveSlidesDir, serializeSlideImagePath, validateSlidesCache, } from './store.js';
|
|
5
|
+
export type { SlideAutoTune, SlideExtractionResult, SlideImage, SlideSource, SlideSourceKind, } from './types.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type SlideSettings = {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
ocr: boolean;
|
|
4
|
+
outputDir: string;
|
|
5
|
+
sceneThreshold: number;
|
|
6
|
+
autoTuneThreshold: boolean;
|
|
7
|
+
maxSlides: number;
|
|
8
|
+
minDurationSeconds: number;
|
|
9
|
+
};
|
|
10
|
+
export type SlideSettingsInput = {
|
|
11
|
+
slides?: unknown;
|
|
12
|
+
slidesOcr?: unknown;
|
|
13
|
+
slidesDir?: unknown;
|
|
14
|
+
slidesSceneThreshold?: unknown;
|
|
15
|
+
slidesSceneThresholdExplicit?: boolean;
|
|
16
|
+
slidesMax?: unknown;
|
|
17
|
+
slidesMinDuration?: unknown;
|
|
18
|
+
cwd: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function resolveSlideSettings(input: SlideSettingsInput): SlideSettings | null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SlideSettings } from './settings.js';
|
|
2
|
+
import type { SlideExtractionResult, SlideSource } from './types.js';
|
|
3
|
+
export declare function resolveSlidesDir(outputDir: string, sourceId: string): string;
|
|
4
|
+
export declare function buildSlidesDirId(slidesDir: string): string;
|
|
5
|
+
export declare function resolveSlideImagePath(slidesDir: string, imagePath: string): string | null;
|
|
6
|
+
export declare function serializeSlideImagePath(slidesDir: string, imagePath: string): string;
|
|
7
|
+
export declare function validateSlidesCache({ cached, source, settings, }: {
|
|
8
|
+
cached: SlideExtractionResult;
|
|
9
|
+
source: SlideSource;
|
|
10
|
+
settings: SlideSettings;
|
|
11
|
+
}): Promise<SlideExtractionResult | null>;
|
|
12
|
+
export declare function readSlidesCacheIfValid({ source, settings, }: {
|
|
13
|
+
source: SlideSource;
|
|
14
|
+
settings: SlideSettings;
|
|
15
|
+
}): Promise<SlideExtractionResult | null>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type SlideSourceKind = 'youtube' | 'direct';
|
|
2
|
+
export type SlideSource = {
|
|
3
|
+
url: string;
|
|
4
|
+
kind: SlideSourceKind;
|
|
5
|
+
sourceId: string;
|
|
6
|
+
};
|
|
7
|
+
export type SlideImage = {
|
|
8
|
+
index: number;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
imagePath: string;
|
|
11
|
+
/**
|
|
12
|
+
* Bump when the underlying image file changes (e.g. thumbnail improvement),
|
|
13
|
+
* so clients can cache-bust URLs.
|
|
14
|
+
*/
|
|
15
|
+
imageVersion?: number;
|
|
16
|
+
ocrText?: string | null;
|
|
17
|
+
ocrConfidence?: number | null;
|
|
18
|
+
};
|
|
19
|
+
export type SlideAutoTune = {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
chosenThreshold: number;
|
|
22
|
+
confidence: number;
|
|
23
|
+
strategy: 'hash' | 'none';
|
|
24
|
+
};
|
|
25
|
+
export type SlideExtractionResult = {
|
|
26
|
+
sourceUrl: string;
|
|
27
|
+
sourceKind: SlideSourceKind;
|
|
28
|
+
sourceId: string;
|
|
29
|
+
slidesDir: string;
|
|
30
|
+
slidesDirId?: string | null;
|
|
31
|
+
sceneThreshold: number;
|
|
32
|
+
autoTuneThreshold: boolean;
|
|
33
|
+
autoTune: SlideAutoTune;
|
|
34
|
+
maxSlides: number;
|
|
35
|
+
minSlideDuration: number;
|
|
36
|
+
ocrRequested: boolean;
|
|
37
|
+
ocrAvailable: boolean;
|
|
38
|
+
slides: SlideImage[];
|
|
39
|
+
warnings: string[];
|
|
40
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { OscProgressController } from 'osc-progress';
|
|
2
2
|
export type { OscProgressController, OscProgressOptions, OscProgressSupportOptions, OscProgressTerminator, } from 'osc-progress';
|
|
3
|
-
export declare
|
|
3
|
+
export declare function createOscProgressController(options: import('osc-progress').OscProgressOptions): OscProgressController;
|
|
4
4
|
export declare function startOscProgress(options: import('osc-progress').OscProgressOptions): () => void;
|
|
5
5
|
export declare function supportsOscProgress(env: Record<string, string | undefined>, isTty: boolean, options?: import('osc-progress').OscProgressSupportOptions): boolean;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { LinkPreviewProgressEvent } from '@steipete/summarize-core/content';
|
|
2
2
|
import type { OscProgressController } from '../osc-progress.js';
|
|
3
|
-
|
|
3
|
+
import type { ThemeRenderer } from '../theme.js';
|
|
4
|
+
export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, theme, }: {
|
|
4
5
|
spinner: {
|
|
5
6
|
setText: (text: string) => void;
|
|
6
7
|
};
|
|
7
8
|
oscProgress?: OscProgressController | null;
|
|
9
|
+
theme?: ThemeRenderer | null;
|
|
8
10
|
}): {
|
|
9
11
|
stop: () => void;
|
|
10
12
|
onProgress: (event: LinkPreviewProgressEvent) => void;
|