@steipete/summarize 0.12.0 → 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 +36 -1
- package/README.md +41 -17
- package/dist/cli.js +1 -1
- package/dist/esm/cache-keys.js +10 -2
- package/dist/esm/cache-keys.js.map +1 -1
- package/dist/esm/cache.js +1 -1
- package/dist/esm/config/parse-helpers.js +6 -1
- package/dist/esm/config/parse-helpers.js.map +1 -1
- package/dist/esm/config/sections.js +35 -1
- package/dist/esm/config/sections.js.map +1 -1
- package/dist/esm/costs.js.map +1 -1
- package/dist/esm/daemon/agent-model.js +56 -8
- package/dist/esm/daemon/agent-model.js.map +1 -1
- package/dist/esm/daemon/chat.js +52 -4
- package/dist/esm/daemon/chat.js.map +1 -1
- package/dist/esm/daemon/cli.js +100 -5
- package/dist/esm/daemon/cli.js.map +1 -1
- package/dist/esm/daemon/env-snapshot.js +2 -0
- package/dist/esm/daemon/env-snapshot.js.map +1 -1
- package/dist/esm/daemon/flow-context.js +76 -73
- package/dist/esm/daemon/flow-context.js.map +1 -1
- package/dist/esm/daemon/models.js +10 -0
- package/dist/esm/daemon/models.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.js +8 -1
- package/dist/esm/daemon/server.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-provider-output.js +225 -1
- package/dist/esm/llm/cli-provider-output.js.map +1 -1
- package/dist/esm/llm/cli.js +95 -7
- package/dist/esm/llm/cli.js.map +1 -1
- package/dist/esm/llm/generate-text-document.js.map +1 -1
- package/dist/esm/llm/generate-text-shared.js +22 -3
- package/dist/esm/llm/generate-text-shared.js.map +1 -1
- package/dist/esm/llm/generate-text-stream.js +34 -1
- package/dist/esm/llm/generate-text-stream.js.map +1 -1
- package/dist/esm/llm/generate-text.js +33 -6
- 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 +18 -2
- package/dist/esm/llm/model-id.js.map +1 -1
- package/dist/esm/llm/provider-profile.js +44 -2
- package/dist/esm/llm/provider-profile.js.map +1 -1
- package/dist/esm/llm/providers/models.js +6 -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 +7 -5
- package/dist/esm/model-auto-cli.js.map +1 -1
- package/dist/esm/model-spec.js +39 -2
- package/dist/esm/model-spec.js.map +1 -1
- package/dist/esm/run/attachments.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/env.js +21 -3
- package/dist/esm/run/env.js.map +1 -1
- package/dist/esm/run/flows/asset/summary-attempts.js +9 -1
- package/dist/esm/run/flows/asset/summary-attempts.js.map +1 -1
- package/dist/esm/run/flows/asset/summary.js +11 -0
- package/dist/esm/run/flows/asset/summary.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 +11 -7
- package/dist/esm/run/flows/url/flow-progress.js.map +1 -1
- package/dist/esm/run/flows/url/flow.js +64 -385
- package/dist/esm/run/flows/url/flow.js.map +1 -1
- package/dist/esm/run/flows/url/markdown.js +18 -1
- 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 +18 -23
- package/dist/esm/run/flows/url/progress-status.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/summary-finish.js +10 -4
- package/dist/esm/run/flows/url/summary-finish.js.map +1 -1
- package/dist/esm/run/flows/url/summary-resolution.js +8 -1
- package/dist/esm/run/flows/url/summary-resolution.js.map +1 -1
- package/dist/esm/run/flows/url/summary.js +115 -149
- 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 +6 -2
- package/dist/esm/run/help.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-models.js +35 -5
- package/dist/esm/run/run-models.js.map +1 -1
- package/dist/esm/run/run-settings-parse.js +4 -0
- package/dist/esm/run/run-settings-parse.js.map +1 -1
- package/dist/esm/run/run-settings.js +6 -0
- package/dist/esm/run/run-settings.js.map +1 -1
- package/dist/esm/run/runner-contexts.js +70 -64
- package/dist/esm/run/runner-contexts.js.map +1 -1
- package/dist/esm/run/runner-execution.js +22 -2
- package/dist/esm/run/runner-execution.js.map +1 -1
- package/dist/esm/run/runner-plan.js +369 -0
- package/dist/esm/run/runner-plan.js.map +1 -0
- package/dist/esm/run/runner-slides.js +14 -3
- package/dist/esm/run/runner-slides.js.map +1 -1
- package/dist/esm/run/runner.js +50 -398
- 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/streaming.js +1 -0
- package/dist/esm/run/streaming.js.map +1 -1
- package/dist/esm/run/summary-engine.js +24 -0
- package/dist/esm/run/summary-engine.js.map +1 -1
- package/dist/esm/run/summary-llm.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/extract.js +43 -66
- package/dist/esm/slides/extract.js.map +1 -1
- package/dist/esm/slides/index.js +2 -1
- package/dist/esm/slides/index.js.map +1 -1
- package/dist/esm/slides/ingest.js +27 -0
- package/dist/esm/slides/ingest.js.map +1 -1
- 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 -207
- package/dist/esm/tty/progress/transcript.js.map +1 -1
- package/dist/esm/tty/spinner.js +14 -6
- package/dist/esm/tty/spinner.js.map +1 -1
- package/dist/esm/tty/website-progress.js +11 -0
- package/dist/esm/tty/website-progress.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/cache-keys.d.ts +1 -1
- package/dist/types/cache.d.ts +1 -1
- package/dist/types/config/sections.d.ts +2 -1
- package/dist/types/config/types.d.ts +9 -1
- package/dist/types/costs.d.ts +1 -1
- package/dist/types/daemon/env-snapshot.d.ts +1 -1
- package/dist/types/daemon/flow-context.d.ts +1 -1
- package/dist/types/daemon/models.d.ts +2 -0
- package/dist/types/daemon/schtasks.d.ts +2 -1
- package/dist/types/daemon/server.d.ts +1 -0
- package/dist/types/daemon/windows-container.d.ts +1 -0
- package/dist/types/llm/cli-provider-output.d.ts +10 -1
- package/dist/types/llm/generate-text-document.d.ts +2 -1
- package/dist/types/llm/generate-text-shared.d.ts +7 -0
- package/dist/types/llm/generate-text-stream.d.ts +2 -1
- package/dist/types/llm/generate-text.d.ts +3 -2
- 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-profile.d.ts +4 -4
- 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-spec.d.ts +4 -3
- package/dist/types/run/attachments.d.ts +3 -2
- package/dist/types/run/env.d.ts +5 -0
- package/dist/types/run/flows/asset/summary.d.ts +10 -0
- 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 +3 -1
- package/dist/types/run/flows/url/markdown.d.ts +1 -1
- package/dist/types/run/flows/url/progress-status-state.d.ts +17 -0
- package/dist/types/run/flows/url/progress-status.d.ts +1 -0
- package/dist/types/run/flows/url/slides-session.d.ts +26 -0
- package/dist/types/run/flows/url/types.d.ts +16 -0
- package/dist/types/run/flows/url/video-only.d.ts +27 -0
- package/dist/types/run/run-settings.d.ts +2 -1
- package/dist/types/run/runner-contexts.d.ts +3 -28
- package/dist/types/run/runner-execution.d.ts +1 -0
- package/dist/types/run/runner-plan.d.ts +19 -0
- package/dist/types/run/runner-slides.d.ts +2 -1
- package/dist/types/run/streaming.d.ts +2 -1
- package/dist/types/run/summary-engine.d.ts +1 -1
- package/dist/types/run/summary-llm.d.ts +2 -1
- package/dist/types/run/types.d.ts +3 -2
- package/dist/types/shared/slides-text.d.ts +1 -0
- package/dist/types/slides/extract.d.ts +1 -6
- package/dist/types/slides/index.d.ts +2 -1
- 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/agent.md +1 -1
- package/docs/assets/site.css +11 -0
- package/docs/chrome-extension.md +7 -1
- package/docs/cli.md +24 -6
- package/docs/config.md +19 -5
- package/docs/extract-only.md +2 -2
- package/docs/firecrawl.md +2 -1
- package/docs/llm.md +29 -3
- package/docs/media.md +6 -0
- package/docs/releasing.md +9 -12
- package/docs/site/docs/chrome-extension.html +1 -1
- package/docs/transcript-provider-flow.md +7 -0
- package/docs/website.md +2 -1
- package/package.json +15 -14
|
@@ -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;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CacheState } from "../cache.js";
|
|
2
2
|
import type { MediaCache } from "../content/index.js";
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
3
|
+
import { type SummarizeAssetArgs } from "./flows/asset/summary.js";
|
|
4
|
+
import { type UrlFlowContext } from "./flows/url/types.js";
|
|
5
5
|
type SummarizeMediaFile = typeof import("./flows/asset/media.js").summarizeMediaFile;
|
|
6
6
|
export declare function createRunnerFlowContexts(options: {
|
|
7
7
|
summarizeMediaFileImpl: SummarizeMediaFile;
|
|
@@ -32,31 +32,6 @@ export declare function createRunnerFlowContexts(options: {
|
|
|
32
32
|
setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
|
|
33
33
|
clearProgressIfCurrent: (fn: () => void) => void;
|
|
34
34
|
};
|
|
35
|
-
urlFlowContext:
|
|
36
|
-
io: import("./flows/url/types.js").UrlFlowIo;
|
|
37
|
-
flags: import("./flows/url/types.js").UrlFlowFlags;
|
|
38
|
-
model: import("./flows/url/types.js").UrlFlowModel;
|
|
39
|
-
cache: CacheState;
|
|
40
|
-
mediaCache: MediaCache | null;
|
|
41
|
-
hooks: {
|
|
42
|
-
onModelChosen: null;
|
|
43
|
-
onExtracted: null;
|
|
44
|
-
onSlidesExtracted: null;
|
|
45
|
-
onSlidesProgress: null;
|
|
46
|
-
onLinkPreviewProgress: null;
|
|
47
|
-
onSummaryCached: null;
|
|
48
|
-
setTranscriptionCost: (costUsd: number | null, label: string | null) => void;
|
|
49
|
-
summarizeAsset: (args: SummarizeAssetArgs) => Promise<void>;
|
|
50
|
-
writeViaFooter: (parts: string[]) => void;
|
|
51
|
-
clearProgressForStdout: () => void;
|
|
52
|
-
restoreProgressAfterStdout: (() => void) | null | undefined;
|
|
53
|
-
setClearProgressBeforeStdout: (fn: (() => undefined | (() => void)) | null) => void;
|
|
54
|
-
clearProgressIfCurrent: (fn: () => void) => void;
|
|
55
|
-
buildReport: () => Promise<import("../costs.js").RunMetricsReport>;
|
|
56
|
-
estimateCostUsd: () => Promise<number | null>;
|
|
57
|
-
onSlideChunk: undefined;
|
|
58
|
-
onSlidesDone: null;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
35
|
+
urlFlowContext: UrlFlowContext;
|
|
61
36
|
};
|
|
62
37
|
export {};
|
|
@@ -10,6 +10,7 @@ export declare function executeRunnerInput(options: {
|
|
|
10
10
|
url: string | null;
|
|
11
11
|
isYoutubeUrl: boolean;
|
|
12
12
|
withUrlAssetContext: unknown;
|
|
13
|
+
slidesEnabled: boolean;
|
|
13
14
|
extractMode: boolean;
|
|
14
15
|
progressEnabled: boolean;
|
|
15
16
|
renderSpinnerStatus: (label: string, detail?: string) => string;
|
|
@@ -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>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { SummarizeConfig } from "../config.js";
|
|
2
|
+
import type { InputTarget } from "../content/asset.js";
|
|
2
3
|
import { type SlideSettings } from "../slides/index.js";
|
|
3
4
|
export declare function resolveRunnerSlidesSettings(options: {
|
|
4
5
|
normalizedArgv: string[];
|
|
5
6
|
programOpts: Record<string, unknown>;
|
|
6
7
|
config: SummarizeConfig | null;
|
|
7
|
-
|
|
8
|
+
inputTarget: InputTarget;
|
|
8
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";
|
|
@@ -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" | "nvidia" | "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;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { generateTextWithModelId } from "../llm/generate-text.js";
|
|
2
|
+
import type { LlmProvider } from "../llm/model-id.js";
|
|
2
3
|
import type { parseGatewayStyleModelId } from "../llm/model-id.js";
|
|
3
4
|
import type { Prompt } from "../llm/prompt.js";
|
|
4
5
|
export declare function resolveModelIdForLlmCall({ parsedModel, apiKeys, fetchImpl, timeoutMs, }: {
|
|
@@ -42,7 +43,7 @@ export declare function summarizeWithModelId({ modelId, prompt, maxOutputTokens,
|
|
|
42
43
|
}) => void;
|
|
43
44
|
}): Promise<{
|
|
44
45
|
text: string;
|
|
45
|
-
provider:
|
|
46
|
+
provider: LlmProvider;
|
|
46
47
|
canonicalModelId: string;
|
|
47
48
|
usage: Awaited<ReturnType<typeof generateTextWithModelId>>["usage"];
|
|
48
49
|
}>;
|
|
@@ -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";
|
|
@@ -1,4 +1,4 @@
|
|
|
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
4
|
export { parseShowinfoTimestamp, resolveExtractedTimestamp } from "./scene-detection.js";
|
|
@@ -29,9 +29,4 @@ type ExtractSlidesArgs = {
|
|
|
29
29
|
onSlidesLog?: ((message: string) => void) | null;
|
|
30
30
|
} | null;
|
|
31
31
|
};
|
|
32
|
-
export declare function resolveSlideSource({ url, extracted, }: {
|
|
33
|
-
url: string;
|
|
34
|
-
extracted: ExtractedLinkContent;
|
|
35
|
-
}): SlideSource | null;
|
|
36
|
-
export declare function resolveSlideSourceFromUrl(url: string): SlideSource | null;
|
|
37
32
|
export declare function extractSlidesForSource({ source, settings, noCache, mediaCache, env, timeoutMs, ytDlpPath, ytDlpCookiesFromBrowser, ffmpegPath, tesseractPath, hooks, }: ExtractSlidesArgs): Promise<SlideExtractionResult>;
|
|
@@ -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,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;
|
|
@@ -4,6 +4,7 @@ import type { ThemeRenderer } from "../theme.js";
|
|
|
4
4
|
export declare function createFetchHtmlProgressRenderer({ spinner, oscProgress, theme, }: {
|
|
5
5
|
spinner: {
|
|
6
6
|
setText: (text: string) => void;
|
|
7
|
+
refresh?: () => void;
|
|
7
8
|
};
|
|
8
9
|
oscProgress?: OscProgressController | null;
|
|
9
10
|
theme?: ThemeRenderer | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { LinkPreviewProgressEvent } from "@steipete/summarize-core/content";
|
|
2
|
+
import type { ThemeRenderer } from "../theme.js";
|
|
3
|
+
export type TranscriptProgressState = {
|
|
4
|
+
phase: "idle" | "download" | "whisper";
|
|
5
|
+
service: "youtube" | "podcast" | "generic";
|
|
6
|
+
downloadedBytes: number;
|
|
7
|
+
totalBytes: number | null;
|
|
8
|
+
startedAtMs: number | null;
|
|
9
|
+
whisperProviderHint: string;
|
|
10
|
+
mediaKind: "video" | "audio" | "unknown";
|
|
11
|
+
whisperModelId: string | null;
|
|
12
|
+
whisperProcessedSeconds: number | null;
|
|
13
|
+
whisperTotalSeconds: number | null;
|
|
14
|
+
whisperPartIndex: number | null;
|
|
15
|
+
whisperParts: number | null;
|
|
16
|
+
};
|
|
17
|
+
export declare function createTranscriptProgressState(): TranscriptProgressState;
|
|
18
|
+
export declare function applyTranscriptProgressEvent(state: TranscriptProgressState, event: LinkPreviewProgressEvent, nowMs: number): void;
|
|
19
|
+
export declare function renderTranscriptSimple(state: TranscriptProgressState, theme?: ThemeRenderer | null): string | null;
|
|
20
|
+
export declare function renderTranscriptLine(state: TranscriptProgressState, { nowMs, theme, }: {
|
|
21
|
+
nowMs: number;
|
|
22
|
+
theme?: ThemeRenderer | null;
|
|
23
|
+
}): string | null;
|
|
24
|
+
export declare function resolveTranscriptOscPayload(state: TranscriptProgressState): {
|
|
25
|
+
label: string;
|
|
26
|
+
percent: number | null;
|
|
27
|
+
} | null;
|
|
@@ -4,6 +4,7 @@ import type { ThemeRenderer } from "../theme.js";
|
|
|
4
4
|
export declare function createTranscriptProgressRenderer({ spinner, oscProgress, theme, }: {
|
|
5
5
|
spinner: {
|
|
6
6
|
setText: (text: string) => void;
|
|
7
|
+
refresh?: () => void;
|
|
7
8
|
};
|
|
8
9
|
oscProgress?: OscProgressController | null;
|
|
9
10
|
theme?: ThemeRenderer | null;
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const FALLBACK_VERSION = "0.
|
|
1
|
+
export declare const FALLBACK_VERSION = "0.13.0";
|
|
2
2
|
export declare function resolvePackageVersion(importMetaUrl?: string): string;
|
|
3
3
|
export declare function resolveGitSha(importMetaUrl?: string): string | null;
|
|
4
4
|
export declare function formatVersionLine(importMetaUrl?: string): string;
|
package/docs/README.md
CHANGED
|
@@ -6,7 +6,7 @@ summary: "Docs index for summarize behaviors and modes."
|
|
|
6
6
|
|
|
7
7
|
- `docs/chrome-extension.md` — Chrome side panel extension + daemon setup/troubleshooting
|
|
8
8
|
- `docs/cache.md` — cache design + config (SQLite)
|
|
9
|
-
- `docs/cli.md` — CLI models (Claude/Codex/Gemini)
|
|
9
|
+
- `docs/cli.md` — CLI models (Claude/Codex/Gemini/Agent/OpenClaw/OpenCode)
|
|
10
10
|
- `docs/config.md` — config file location, precedence, and schema
|
|
11
11
|
- `docs/extract-only.md` — extract mode (no summary LLM call)
|
|
12
12
|
- `docs/firecrawl.md` — Firecrawl mode + API key
|
package/docs/agent.md
CHANGED
|
@@ -138,7 +138,7 @@ Returns cached chat history for the same cache key as `/v1/agent`.
|
|
|
138
138
|
- **Auto model**: uses existing auto-selection logic (`buildAutoModelAttempts`), preferring API-key transports and then CLI fallback when available.
|
|
139
139
|
- **Synthetic models**: created for OpenAI-compatible base URLs (local/openrouter).
|
|
140
140
|
- `maxOutputTokens` defaults to 2048 or `maxOutputTokens` override.
|
|
141
|
-
- CLI models are supported as auto fallback and via explicit `cli/<provider>/<model>` overrides.
|
|
141
|
+
- CLI models are supported as auto fallback and via explicit `cli/<provider>` or `cli/<provider>/<model>` overrides.
|
|
142
142
|
- If the daemon still says no model is available after key/install changes, restart or reinstall it so the saved environment snapshot refreshes.
|
|
143
143
|
|
|
144
144
|
## Page Content Payload
|
package/docs/assets/site.css
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
:root {
|
|
31
31
|
--bg0: #fbf6eb;
|
|
32
32
|
--bg1: #f1ecdf;
|
|
33
|
+
--bg-code: rgba(0, 0, 0, 0.55);
|
|
33
34
|
--panel: rgba(255, 255, 255, 0.86);
|
|
34
35
|
--paper: #0b0f12;
|
|
35
36
|
--ink: #0b0f12;
|
|
@@ -40,6 +41,9 @@
|
|
|
40
41
|
--shadow: 0 26px 70px rgba(9, 12, 16, 0.12);
|
|
41
42
|
--shadow2: 0 10px 26px rgba(9, 12, 16, 0.1);
|
|
42
43
|
}
|
|
44
|
+
div.highlight {
|
|
45
|
+
background-color: var(--bg-code);
|
|
46
|
+
}
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
* {
|
|
@@ -539,6 +543,13 @@ code {
|
|
|
539
543
|
color: var(--fg1);
|
|
540
544
|
}
|
|
541
545
|
|
|
546
|
+
div.highlight {
|
|
547
|
+
border-radius: 10px;
|
|
548
|
+
}
|
|
549
|
+
pre.highlight {
|
|
550
|
+
margin: 0;
|
|
551
|
+
padding: 14px;
|
|
552
|
+
}
|
|
542
553
|
.more {
|
|
543
554
|
margin-top: 24px;
|
|
544
555
|
padding: 0 6px;
|
package/docs/chrome-extension.md
CHANGED
|
@@ -12,7 +12,7 @@ Quickstart:
|
|
|
12
12
|
|
|
13
13
|
- Install summarize (choose one):
|
|
14
14
|
- `npm i -g @steipete/summarize`
|
|
15
|
-
- `brew install
|
|
15
|
+
- `brew install summarize` (macOS, Linux)
|
|
16
16
|
- Build/load extension: `apps/chrome-extension/README.md`
|
|
17
17
|
- Firefox sidebar build: `pnpm -C apps/chrome-extension build:firefox` (load via `about:debugging` → temporary add-on)
|
|
18
18
|
- Open side panel → copy token install command → run:
|
|
@@ -44,6 +44,12 @@ Dev (repo checkout):
|
|
|
44
44
|
- `summarize daemon install` now tries both launchd domains (`gui/<uid>` then `user/<uid>`).
|
|
45
45
|
- Install as your normal user (not root) so HOME + launchd domain match.
|
|
46
46
|
- Re-run: `summarize daemon install --token <TOKEN>`.
|
|
47
|
+
- Windows containers:
|
|
48
|
+
- `summarize daemon install --token <TOKEN>` starts the daemon for the current container session but does not create a Scheduled Task.
|
|
49
|
+
- Run that command manually each time the container starts, or add it to your container startup. Also publish the daemon port in `docker-compose.yml`:
|
|
50
|
+
`ports: ['8787:8787']`
|
|
51
|
+
`command: ['cmd', '/c', 'summarize daemon install --token <TOKEN>']`
|
|
52
|
+
- Then restart the container and verify `http://127.0.0.1:8787/health`.
|
|
47
53
|
- “Need extension-side traces”:
|
|
48
54
|
- Options → Logs → `extension.log` (panel/background events).
|
|
49
55
|
- Enable “Extended logging” in Advanced settings for full pipeline traces.
|
package/docs/cli.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
summary: "CLI model providers and config for Claude, Codex, Gemini,
|
|
2
|
+
summary: "CLI model providers and config for Claude, Codex, Gemini, Cursor Agent, OpenClaw, and OpenCode."
|
|
3
3
|
read_when:
|
|
4
4
|
- "When changing CLI model integration."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# CLI models
|
|
8
8
|
|
|
9
|
-
Summarize can use installed CLIs (Claude, Codex, Gemini, Cursor Agent) as local model backends.
|
|
9
|
+
Summarize can use installed CLIs (Claude, Codex, Gemini, Cursor Agent, OpenClaw, OpenCode) as local model backends.
|
|
10
10
|
|
|
11
11
|
## Model ids
|
|
12
12
|
|
|
@@ -14,6 +14,10 @@ Summarize can use installed CLIs (Claude, Codex, Gemini, Cursor Agent) as local
|
|
|
14
14
|
- `cli/codex/<model>` (e.g. `cli/codex/gpt-5.2`)
|
|
15
15
|
- `cli/gemini/<model>` (e.g. `cli/gemini/gemini-3-flash`)
|
|
16
16
|
- `cli/agent/<model>` (e.g. `cli/agent/gpt-5.2`)
|
|
17
|
+
- `cli/openclaw/<model>` (e.g. `cli/openclaw/main`)
|
|
18
|
+
- `openclaw/<model>` (alias for the same OpenClaw CLI path)
|
|
19
|
+
- `cli/opencode/<model>` (e.g. `cli/opencode/openai/gpt-5.4`)
|
|
20
|
+
- `cli/opencode` (use the OpenCode runtime default model)
|
|
17
21
|
|
|
18
22
|
Use `--cli [provider]` (case-insensitive) for the provider default, or `--model cli/<provider>/<model>` to pin a model.
|
|
19
23
|
If `--cli` is provided without a provider, auto selection is used with CLI enabled.
|
|
@@ -28,7 +32,7 @@ Auto mode can prepend CLI attempts in two ways:
|
|
|
28
32
|
- Auto CLI fallback (`cli.autoFallback`, default enabled):
|
|
29
33
|
- Applies only to **implicit** auto (when no model is set via flag/env/config).
|
|
30
34
|
- Default behavior: only when no API key is configured.
|
|
31
|
-
- Default order: `claude, gemini, codex, agent`.
|
|
35
|
+
- Default order: `claude, gemini, codex, agent, openclaw, opencode`.
|
|
32
36
|
- Remembers + prioritizes the last successful CLI provider (`~/.summarize/cli-state.json`).
|
|
33
37
|
|
|
34
38
|
Gemini CLI performance: summarize sets `GEMINI_CLI_NO_RELAUNCH=true` for Gemini CLI runs to avoid a costly self-relaunch (can be overridden by setting it yourself).
|
|
@@ -49,7 +53,7 @@ Configure auto CLI fallback:
|
|
|
49
53
|
"autoFallback": {
|
|
50
54
|
"enabled": true,
|
|
51
55
|
"onlyWhenNoApiKeys": true,
|
|
52
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
56
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
59
|
}
|
|
@@ -71,6 +75,8 @@ Binary lookup:
|
|
|
71
75
|
|
|
72
76
|
- `CLAUDE_PATH`, `CODEX_PATH`, `GEMINI_PATH` (optional overrides)
|
|
73
77
|
- `AGENT_PATH` (optional override)
|
|
78
|
+
- `OPENCLAW_PATH` (optional override)
|
|
79
|
+
- `OPENCODE_PATH` (optional override)
|
|
74
80
|
- Otherwise uses `PATH`
|
|
75
81
|
|
|
76
82
|
## Attachments (images/files)
|
|
@@ -82,17 +88,18 @@ path-based prompt and enables the required tool flags:
|
|
|
82
88
|
- Gemini: `--yolo` and `--include-directories <dir>`
|
|
83
89
|
- Codex: `codex exec --output-last-message ...` and `-i <image>` for images
|
|
84
90
|
- Agent: uses built-in file tools in `agent --print` mode (no extra flags)
|
|
91
|
+
- OpenCode: `opencode run --format json ... --file <path>` when a file/image path is required
|
|
85
92
|
|
|
86
93
|
## Config
|
|
87
94
|
|
|
88
95
|
```json
|
|
89
96
|
{
|
|
90
97
|
"cli": {
|
|
91
|
-
"enabled": ["claude", "gemini", "codex", "agent"],
|
|
98
|
+
"enabled": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"],
|
|
92
99
|
"autoFallback": {
|
|
93
100
|
"enabled": true,
|
|
94
101
|
"onlyWhenNoApiKeys": true,
|
|
95
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
102
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
96
103
|
},
|
|
97
104
|
"codex": { "model": "gpt-5.2" },
|
|
98
105
|
"gemini": { "model": "gemini-3-flash", "extraArgs": ["--verbose"] },
|
|
@@ -104,6 +111,13 @@ path-based prompt and enables the required tool flags:
|
|
|
104
111
|
"agent": {
|
|
105
112
|
"model": "gpt-5.2",
|
|
106
113
|
"binary": "/usr/local/bin/agent"
|
|
114
|
+
},
|
|
115
|
+
"openclaw": {
|
|
116
|
+
"model": "main",
|
|
117
|
+
"binary": "/usr/local/bin/openclaw"
|
|
118
|
+
},
|
|
119
|
+
"opencode": {
|
|
120
|
+
"binary": "/usr/local/bin/opencode"
|
|
107
121
|
}
|
|
108
122
|
}
|
|
109
123
|
}
|
|
@@ -115,6 +129,8 @@ Notes:
|
|
|
115
129
|
- If a CLI call fails, auto mode falls back to the next candidate.
|
|
116
130
|
- Cursor Agent CLI uses the `agent` binary and relies on Cursor CLI auth (login or `CURSOR_API_KEY`).
|
|
117
131
|
- Gemini CLI is invoked in headless mode with `--prompt` for compatibility with current Gemini CLI releases.
|
|
132
|
+
- OpenClaw uses the `openclaw agent --agent <model> - --json` path, streams the prompt over stdin, and expects local OpenClaw auth/config to already be set up.
|
|
133
|
+
- OpenCode uses `opencode run --format json`, streams prompt text over stdin, and uses the runtime default model when none is configured.
|
|
118
134
|
|
|
119
135
|
## Quick smoke test (all CLI providers)
|
|
120
136
|
|
|
@@ -127,6 +143,8 @@ summarize --cli codex --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
|
127
143
|
summarize --cli claude --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
128
144
|
summarize --cli gemini --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
129
145
|
summarize --cli agent --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
146
|
+
summarize --cli openclaw --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
147
|
+
summarize --cli opencode --plain --timeout 2m /tmp/summarize-cli-smoke.txt
|
|
130
148
|
```
|
|
131
149
|
|
|
132
150
|
If Agent fails with auth, run `agent login` (interactive) or set `CURSOR_API_KEY`.
|
package/docs/config.md
CHANGED
|
@@ -29,6 +29,12 @@ For output language:
|
|
|
29
29
|
2. Config file `output.language` (preferred) or `language` (legacy)
|
|
30
30
|
3. Built-in default (`auto` = match source content language)
|
|
31
31
|
|
|
32
|
+
For output length:
|
|
33
|
+
|
|
34
|
+
1. CLI flag `--length`
|
|
35
|
+
2. Config file `output.length`
|
|
36
|
+
3. Built-in default (`xl`)
|
|
37
|
+
|
|
32
38
|
See `docs/language.md` for supported values.
|
|
33
39
|
|
|
34
40
|
For prompt:
|
|
@@ -58,12 +64,18 @@ For UI theme:
|
|
|
58
64
|
{
|
|
59
65
|
"model": { "id": "google/gemini-3-flash" },
|
|
60
66
|
"env": { "OPENAI_API_KEY": "sk-..." },
|
|
61
|
-
"output": { "language": "auto" },
|
|
67
|
+
"output": { "language": "auto", "length": "long" },
|
|
62
68
|
"prompt": "Explain like I am five.",
|
|
63
69
|
"ui": { "theme": "ember" }
|
|
64
70
|
}
|
|
65
71
|
```
|
|
66
72
|
|
|
73
|
+
`output.length` accepts the same values as `--length`:
|
|
74
|
+
|
|
75
|
+
- Presets: `short`, `medium`, `long`, `xl`, `xxl`
|
|
76
|
+
- Shorthand: `s`, `m`, `l`
|
|
77
|
+
- Character targets: `1500`, `20k`, `20000`
|
|
78
|
+
|
|
67
79
|
Shorthand (equivalent):
|
|
68
80
|
|
|
69
81
|
```json
|
|
@@ -316,15 +328,17 @@ Examples:
|
|
|
316
328
|
```json
|
|
317
329
|
{
|
|
318
330
|
"cli": {
|
|
319
|
-
"enabled": ["gemini", "agent"],
|
|
331
|
+
"enabled": ["gemini", "agent", "openclaw", "opencode"],
|
|
320
332
|
"autoFallback": {
|
|
321
333
|
"enabled": true,
|
|
322
334
|
"onlyWhenNoApiKeys": true,
|
|
323
|
-
"order": ["claude", "gemini", "codex", "agent"]
|
|
335
|
+
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode"]
|
|
324
336
|
},
|
|
325
337
|
"codex": { "model": "gpt-5.2" },
|
|
326
338
|
"claude": { "binary": "/usr/local/bin/claude", "extraArgs": ["--verbose"] },
|
|
327
|
-
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" }
|
|
339
|
+
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" },
|
|
340
|
+
"openclaw": { "binary": "/usr/local/bin/openclaw", "model": "main" },
|
|
341
|
+
"opencode": { "binary": "/usr/local/bin/opencode", "model": "openai/gpt-5.4" }
|
|
328
342
|
}
|
|
329
343
|
}
|
|
330
344
|
```
|
|
@@ -333,7 +347,7 @@ Notes:
|
|
|
333
347
|
|
|
334
348
|
- `cli.enabled` is an allowlist (and order) for auto + explicit CLI model ids.
|
|
335
349
|
- `cli.autoFallback` controls implicit-auto CLI fallback when `cli.enabled` is not set.
|
|
336
|
-
- Default auto fallback order: `claude, gemini, codex, agent`.
|
|
350
|
+
- Default auto fallback order: `claude, gemini, codex, agent, openclaw, opencode`.
|
|
337
351
|
- Auto fallback stores the last successful provider in `~/.summarize/cli-state.json` and prioritizes it on the next run.
|
|
338
352
|
- `cli.<provider>.binary` overrides CLI binary discovery.
|
|
339
353
|
- `cli.<provider>.extraArgs` appends extra CLI args.
|
package/docs/extract-only.md
CHANGED
|
@@ -18,13 +18,13 @@ Deprecated alias: `--extract-only`.
|
|
|
18
18
|
- `--format md` may still convert HTML to Markdown (depending on `--markdown-mode` and available tools).
|
|
19
19
|
- `--length` is intended for summarization guidance; extraction prints full content.
|
|
20
20
|
- `--timestamps` keeps the plain transcript text but also exposes `transcriptSegments` and `transcriptTimedText` (JSON) and prints a timed transcript block when available.
|
|
21
|
-
- `--slides` runs slide detection (YouTube/direct video URLs). Slide metadata is included in JSON output and written to `slides.json` in the slide directory.
|
|
21
|
+
- `--slides` runs slide detection (YouTube/direct video URLs/local video files). Slide metadata is included in JSON output and written to `slides.json` in the slide directory.
|
|
22
22
|
- When combined with `--extract` for videos that have timed transcripts, the CLI interleaves slide images inline at matching timestamps.
|
|
23
23
|
- Scene detection auto-tunes using sampled frame hashes.
|
|
24
24
|
- For non-YouTube URLs with `--format md`, the CLI uses Readability article HTML as the default Markdown input (`--markdown-mode readability`).
|
|
25
25
|
- Use `--markdown-mode auto` to prefer LLM/markitdown conversion without Readability preprocessing.
|
|
26
26
|
- Use `--markdown-mode llm` to force an LLM conversion.
|
|
27
|
-
- Use `--firecrawl always` to try Firecrawl first.
|
|
27
|
+
- Use `--firecrawl always` to try Firecrawl first for non-YouTube URLs.
|
|
28
28
|
- For non-YouTube URLs with `--format md`, `--markdown-mode auto` can convert HTML to Markdown via an LLM when configured.
|
|
29
29
|
- Force it with `--markdown-mode llm`.
|
|
30
30
|
- If no LLM is configured, `--markdown-mode auto` may fall back to `uvx markitdown` when available.
|
package/docs/firecrawl.md
CHANGED
|
@@ -12,7 +12,8 @@ Firecrawl is a fallback for sites that block direct HTML fetching or don’t ren
|
|
|
12
12
|
|
|
13
13
|
- `off`: never use Firecrawl.
|
|
14
14
|
- `auto` (default): use Firecrawl only when HTML extraction looks blocked/thin.
|
|
15
|
-
- `always`: try Firecrawl first (falls back to HTML if Firecrawl is unavailable/empty).
|
|
15
|
+
- `always`: try Firecrawl first for non-YouTube URLs (falls back to HTML if Firecrawl is unavailable/empty).
|
|
16
|
+
- YouTube URLs reject `--firecrawl always`; use `--youtube auto|web|yt-dlp|apify` instead.
|
|
16
17
|
|
|
17
18
|
## Extract default
|
|
18
19
|
|
package/docs/llm.md
CHANGED
|
@@ -27,6 +27,7 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
27
27
|
- `NVIDIA_API_KEY` (required for `nvidia/...` models; alias: `NGC_API_KEY`)
|
|
28
28
|
- `NVIDIA_BASE_URL` (optional; override NVIDIA OpenAI-compatible API endpoint; default: `https://integrate.api.nvidia.com/v1`)
|
|
29
29
|
- `OPENROUTER_API_KEY` (optional; required for `openrouter/...` models; also used when `OPENAI_BASE_URL` points to OpenRouter)
|
|
30
|
+
- `GITHUB_TOKEN` / `GH_TOKEN` (required for `github-copilot/...` models via GitHub Models)
|
|
30
31
|
- `Z_AI_API_KEY` (required for `zai/...` models; supports `ZAI_API_KEY` alias)
|
|
31
32
|
- `Z_AI_BASE_URL` (optional; override default Z.AI base URL)
|
|
32
33
|
- `GEMINI_API_KEY` (required for `google/...` models; also accepts `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`)
|
|
@@ -34,7 +35,7 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
34
35
|
- `ANTHROPIC_API_KEY` (required for `anthropic/...` models)
|
|
35
36
|
- `ANTHROPIC_BASE_URL` (optional; override Anthropic API endpoint)
|
|
36
37
|
- `SUMMARIZE_MODEL` (optional; overrides default model selection)
|
|
37
|
-
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` (optional; override CLI binary paths)
|
|
38
|
+
- `CLAUDE_PATH` / `CODEX_PATH` / `GEMINI_PATH` / `AGENT_PATH` / `OPENCLAW_PATH` / `OPENCODE_PATH` (optional; override CLI binary paths)
|
|
38
39
|
|
|
39
40
|
## Flags
|
|
40
41
|
|
|
@@ -44,8 +45,15 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
44
45
|
- `cli/claude/sonnet`
|
|
45
46
|
- `cli/gemini/gemini-3-flash`
|
|
46
47
|
- `cli/agent/gpt-5.2`
|
|
48
|
+
- `cli/openclaw/main`
|
|
49
|
+
- `cli/opencode/openai/gpt-5.4`
|
|
50
|
+
- `openai/gpt-5.4`
|
|
51
|
+
- `openai/gpt-5.4-mini`
|
|
52
|
+
- `openai/gpt-5.4-nano`
|
|
47
53
|
- `google/gemini-3-flash`
|
|
48
54
|
- `openai/gpt-5-mini`
|
|
55
|
+
- `openai/gpt-5-nano`
|
|
56
|
+
- `github-copilot/gpt-5.4`
|
|
49
57
|
- `nvidia/z-ai/glm5`
|
|
50
58
|
- `zai/glm-4.7`
|
|
51
59
|
- `xai/grok-4-fast-non-reasoning`
|
|
@@ -53,7 +61,7 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
53
61
|
- `anthropic/claude-sonnet-4-5`
|
|
54
62
|
- `openrouter/meta-llama/llama-3.3-70b-instruct:free` (force OpenRouter)
|
|
55
63
|
- `--cli [provider]`
|
|
56
|
-
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
64
|
+
- Examples: `--cli claude`, `--cli Gemini`, `--cli codex`, `--cli agent`, `--cli openclaw`, `--cli opencode` (equivalent to `--model cli/<provider>`); `--cli` alone uses auto selection with CLI enabled.
|
|
57
65
|
- `--model auto`
|
|
58
66
|
- See `docs/model-auto.md`
|
|
59
67
|
- `--model <preset>`
|
|
@@ -73,7 +81,8 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
73
81
|
- `--length short|medium|long|xl|xxl|<chars>`
|
|
74
82
|
- This is _soft guidance_ to the model (no hard truncation).
|
|
75
83
|
- Minimum numeric value: 50 chars.
|
|
76
|
-
-
|
|
84
|
+
- Built-in default: `xl`.
|
|
85
|
+
- Config default: `output.length` in `~/.summarize/config.json`.
|
|
77
86
|
- Output format is Markdown; use short paragraphs and only add bullets when they improve scanability.
|
|
78
87
|
- `--force-summary`
|
|
79
88
|
- Always run the LLM even when extracted content is shorter than the requested length.
|
|
@@ -98,6 +107,23 @@ installed, auto mode can use local CLI models via `cli.enabled` or implicit auto
|
|
|
98
107
|
|
|
99
108
|
Use `--model zai/<model>` (e.g. `zai/glm-4.7`). Defaults to Z.AI’s base URL and uses chat completions.
|
|
100
109
|
|
|
110
|
+
## GitHub Copilot / GitHub Models
|
|
111
|
+
|
|
112
|
+
Use `--model github-copilot/<model>` for explicit GitHub-hosted model calls.
|
|
113
|
+
|
|
114
|
+
- Examples:
|
|
115
|
+
- `github-copilot/gpt-5.4`
|
|
116
|
+
- `github-copilot/gpt-5.4-mini`
|
|
117
|
+
- `github-copilot/gpt-5.4-nano`
|
|
118
|
+
- `github-copilot/gpt-5-mini`
|
|
119
|
+
- `github-copilot/gpt-5-nano`
|
|
120
|
+
- `github-copilot/anthropic/claude-haiku-4.5`
|
|
121
|
+
- Auth: `GITHUB_TOKEN` or `GH_TOKEN`
|
|
122
|
+
- Transport: GitHub Models chat completions (`https://models.github.ai/inference`)
|
|
123
|
+
- Notes:
|
|
124
|
+
- bare shorthand like `github-copilot/gpt-5.4` or `github-copilot/claude-opus-4.6` auto-expands to the provider-qualified backend id
|
|
125
|
+
- document attachments stay unsupported in this mode
|
|
126
|
+
|
|
101
127
|
## Input limits
|
|
102
128
|
|
|
103
129
|
- Text prompts are checked against the model’s max input tokens (LiteLLM catalog) using a GPT tokenizer.
|
package/docs/media.md
CHANGED
|
@@ -28,6 +28,12 @@ read_when:
|
|
|
28
28
|
- Remote transcription providers: `ASSEMBLYAI_API_KEY`, `GEMINI_API_KEY` / `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY`, `OPENAI_API_KEY`, `FAL_KEY` (plus `GROQ_API_KEY` before local/remote fallback).
|
|
29
29
|
- Gemini uses the Files API automatically for larger uploads.
|
|
30
30
|
|
|
31
|
+
## Shared helpers
|
|
32
|
+
|
|
33
|
+
- Direct media classification lives in `packages/core/src/content/direct-media.ts`.
|
|
34
|
+
- Local path/`file://` normalization + mtime lookup lives in `packages/core/src/content/local-file.ts`.
|
|
35
|
+
- Slides, URL extraction, and transcription should reuse those helpers instead of re-parsing extensions separately.
|
|
36
|
+
|
|
31
37
|
## Chrome extension behavior
|
|
32
38
|
|
|
33
39
|
- When media is detected on a page, the Summarize button gains a dropdown caret (Page/Video or Page/Audio).
|