@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,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 createTranscriptProgressRenderer({ 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;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { type Options as OraOptions } from 'ora';
|
|
2
|
+
export declare function startSpinner({ text, enabled, stream, color, }: {
|
|
2
3
|
text: string;
|
|
3
4
|
enabled: boolean;
|
|
4
5
|
stream: NodeJS.WritableStream;
|
|
6
|
+
color?: OraOptions['color'];
|
|
5
7
|
}): {
|
|
6
8
|
stop: () => void;
|
|
7
9
|
clear: () => void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const CLI_THEME_NAMES: readonly ["aurora", "ember", "moss", "mono"];
|
|
2
|
+
export type CliThemeName = (typeof CLI_THEME_NAMES)[number];
|
|
3
|
+
export type ThemeRole = 'heading' | 'accent' | 'accentStrong' | 'muted' | 'dim' | 'success' | 'warning' | 'error' | 'label' | 'value' | 'code';
|
|
4
|
+
type ThemePalette = {
|
|
5
|
+
name: CliThemeName;
|
|
6
|
+
roles: Record<ThemeRole, string>;
|
|
7
|
+
spinner: 'cyan' | 'magenta' | 'yellow' | 'green' | 'gray' | 'blue';
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_CLI_THEME: CliThemeName;
|
|
10
|
+
export declare function listCliThemes(): CliThemeName[];
|
|
11
|
+
export declare function isCliThemeName(value: string): value is CliThemeName;
|
|
12
|
+
export declare function parseCliThemeName(raw: unknown, label: string): CliThemeName | null;
|
|
13
|
+
export declare function resolveThemeNameFromSources({ cli, env, config, fallback, }: {
|
|
14
|
+
cli?: unknown;
|
|
15
|
+
env?: unknown;
|
|
16
|
+
config?: unknown;
|
|
17
|
+
fallback?: CliThemeName;
|
|
18
|
+
}): CliThemeName;
|
|
19
|
+
export declare function resolveTrueColor(env: Record<string, string | undefined>): boolean;
|
|
20
|
+
type ThemeRendererOptions = {
|
|
21
|
+
themeName: CliThemeName;
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
trueColor: boolean;
|
|
24
|
+
};
|
|
25
|
+
export type ThemeRenderer = {
|
|
26
|
+
name: CliThemeName;
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
trueColor: boolean;
|
|
29
|
+
palette: ThemePalette;
|
|
30
|
+
heading: (text: string) => string;
|
|
31
|
+
accent: (text: string) => string;
|
|
32
|
+
accentStrong: (text: string) => string;
|
|
33
|
+
label: (text: string) => string;
|
|
34
|
+
value: (text: string) => string;
|
|
35
|
+
muted: (text: string) => string;
|
|
36
|
+
dim: (text: string) => string;
|
|
37
|
+
success: (text: string) => string;
|
|
38
|
+
warning: (text: string) => string;
|
|
39
|
+
error: (text: string) => string;
|
|
40
|
+
code: (text: string) => string;
|
|
41
|
+
};
|
|
42
|
+
export declare function createThemeRenderer({ themeName, enabled, trueColor, }: ThemeRendererOptions): ThemeRenderer;
|
|
43
|
+
export declare function resolveThemePalette(themeName: CliThemeName): ThemePalette;
|
|
44
|
+
export {};
|
|
@@ -1,11 +1,13 @@
|
|
|
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 createWebsiteProgress({ enabled, spinner, oscProgress, theme, }: {
|
|
4
5
|
enabled: boolean;
|
|
5
6
|
spinner: {
|
|
6
7
|
setText: (text: string) => void;
|
|
7
8
|
};
|
|
8
9
|
oscProgress?: OscProgressController | null;
|
|
10
|
+
theme?: ThemeRenderer | null;
|
|
9
11
|
}): {
|
|
10
12
|
stop: () => void;
|
|
11
13
|
onProgress: (event: LinkPreviewProgressEvent) => void;
|
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.10.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
|
@@ -4,17 +4,22 @@ summary: "Docs index for summarize behaviors and modes."
|
|
|
4
4
|
|
|
5
5
|
# Docs
|
|
6
6
|
|
|
7
|
-
- `docs/
|
|
8
|
-
- `docs/
|
|
9
|
-
- `docs/firecrawl.md` — Firecrawl mode + API key
|
|
10
|
-
- `docs/llm.md` — LLM summarization + model config (Gateway/OpenAI)
|
|
7
|
+
- `docs/chrome-extension.md` — Chrome side panel extension + daemon setup/troubleshooting
|
|
8
|
+
- `docs/cache.md` — cache design + config (SQLite)
|
|
11
9
|
- `docs/cli.md` — CLI models (Claude/Codex/Gemini)
|
|
12
|
-
- `docs/
|
|
10
|
+
- `docs/config.md` — config file location, precedence, and schema
|
|
11
|
+
- `docs/extract-only.md` — extract mode (no summary LLM call)
|
|
12
|
+
- `docs/firecrawl.md` — Firecrawl mode + API key
|
|
13
13
|
- `docs/language.md` — output language (`--language` / config `language`)
|
|
14
|
-
- `docs/
|
|
14
|
+
- `docs/llm.md` — LLM summarization + model config (Gateway/OpenAI)
|
|
15
15
|
- `docs/manual-tests.md` — manual end-to-end test checklist
|
|
16
|
-
- `docs/
|
|
16
|
+
- `docs/model-auto.md` — automatic model selection (`--model auto`)
|
|
17
|
+
- `docs/openai.md` — OpenAI model usage + flags
|
|
18
|
+
- `docs/releasing.md` — release checklist + Homebrew tap update
|
|
19
|
+
- `docs/smoketest.md` — 20-case smoke test plan
|
|
20
|
+
- `docs/website.md` — normal websites (HTML extraction + Firecrawl fallback)
|
|
21
|
+
- `docs/youtube.md` — YouTube transcript extraction (youtubei / captionTracks / Apify)
|
|
17
22
|
|
|
18
23
|
## Website
|
|
19
24
|
|
|
20
|
-
-
|
|
25
|
+
- Jekyll site source: `docs/` (Markdown → HTML via GitHub Pages Actions)
|
package/docs/_config.yml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
title: "summarize"
|
|
2
|
+
description: "Summarize docs"
|
|
3
|
+
markdown: kramdown
|
|
4
|
+
highlighter: rouge
|
|
5
|
+
|
|
6
|
+
plugins:
|
|
7
|
+
- jekyll-relative-links
|
|
8
|
+
|
|
9
|
+
relative_links:
|
|
10
|
+
enabled: true
|
|
11
|
+
collections: true
|
|
12
|
+
|
|
13
|
+
exclude:
|
|
14
|
+
- site
|
|
15
|
+
|
|
16
|
+
defaults:
|
|
17
|
+
- scope:
|
|
18
|
+
path: ""
|
|
19
|
+
values:
|
|
20
|
+
layout: default
|
|
21
|
+
permalink: /docs/:basename:output_ext
|
|
22
|
+
|
|
23
|
+
kramdown:
|
|
24
|
+
input: GFM
|
|
25
|
+
hard_wrap: false
|
|
26
|
+
syntax_highlighter: rouge
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<meta name="color-scheme" content="dark light" />
|
|
7
|
+
{% assign page_title = page.title | default: page.name | default: "Docs" | replace: ".md", "" | replace: "-", " " %}
|
|
8
|
+
<title>{{ page_title }} — summarize</title>
|
|
9
|
+
<meta name="description" content="{{ page.summary | default: site.description | escape }}" />
|
|
10
|
+
<link rel="canonical" href="https://summarize.sh{{ page.url | replace: 'index.html', '' }}" />
|
|
11
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
12
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
13
|
+
<link
|
|
14
|
+
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
|
|
15
|
+
rel="stylesheet"
|
|
16
|
+
/>
|
|
17
|
+
<link rel="stylesheet" href="/assets/site.css" />
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<main class="shell">
|
|
21
|
+
<header class="top">
|
|
22
|
+
<a class="brand" href="/" aria-label="summarize home">
|
|
23
|
+
<span class="brand__mark" aria-hidden="true">s</span>
|
|
24
|
+
<span class="brand__word">summarize</span>
|
|
25
|
+
</a>
|
|
26
|
+
<nav class="nav" aria-label="Primary">
|
|
27
|
+
<a data-nav="home" href="/">Home</a>
|
|
28
|
+
<a data-nav="docs" href="/docs/index.html">Docs</a>
|
|
29
|
+
<a href="https://github.com/steipete/summarize">GitHub</a>
|
|
30
|
+
</nav>
|
|
31
|
+
</header>
|
|
32
|
+
|
|
33
|
+
<section class="docShell">
|
|
34
|
+
<aside class="side" aria-label="Docs navigation">
|
|
35
|
+
<h2>Docs</h2>
|
|
36
|
+
<a href="/docs/index.html">Overview</a>
|
|
37
|
+
<a href="/docs/chrome-extension.html">Chrome extension</a>
|
|
38
|
+
<a href="/docs/website.html">Website mode</a>
|
|
39
|
+
<a href="/docs/youtube.html">YouTube mode</a>
|
|
40
|
+
<a href="/docs/extract-only.html">Extract</a>
|
|
41
|
+
<a href="/docs/llm.html">LLM</a>
|
|
42
|
+
<a href="/docs/openai.html">OpenAI</a>
|
|
43
|
+
<a href="/docs/firecrawl.html">Firecrawl</a>
|
|
44
|
+
<a href="/docs/config.html">Config</a>
|
|
45
|
+
</aside>
|
|
46
|
+
|
|
47
|
+
<article class="doc reveal">
|
|
48
|
+
{{ content }}
|
|
49
|
+
</article>
|
|
50
|
+
</section>
|
|
51
|
+
|
|
52
|
+
<footer class="footer">
|
|
53
|
+
<span>summarize — Link → clean text → summary.</span>
|
|
54
|
+
<span><a href="/docs/index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
|
|
55
|
+
</footer>
|
|
56
|
+
</main>
|
|
57
|
+
|
|
58
|
+
<script type="module" src="/assets/site.js"></script>
|
|
59
|
+
</body>
|
|
60
|
+
</html>
|
package/docs/agent.md
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Automation agent for the Chrome side panel (daemon-backed)."
|
|
3
|
+
read_when:
|
|
4
|
+
- "When working on automation tools, /v1/agent, or the side panel agent loop."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Automation Agent (Side Panel + Daemon)
|
|
8
|
+
|
|
9
|
+
Summarize can run as a **website automation agent** inside the Chrome side panel. This is **optional** and **gated by a checkbox** in Options.
|
|
10
|
+
|
|
11
|
+
Scope:
|
|
12
|
+
- **Off (default):** chat is Q&A only (no tools).
|
|
13
|
+
- **On:** chat runs a tool-capable agent for web automation.
|
|
14
|
+
|
|
15
|
+
Explicit exclusions (per product direction): **no update checker**, **no tutorial/welcome flow**, **no proxy config**, **no API key dialog**. All model calls go through the **local daemon**.
|
|
16
|
+
|
|
17
|
+
## Architecture (High Level)
|
|
18
|
+
|
|
19
|
+
1) **Side panel** maintains the agent loop + chat UI.
|
|
20
|
+
2) **Background** handles tab data, extraction, and tool execution.
|
|
21
|
+
3) **Content scripts** handle element picking and native-input bridge.
|
|
22
|
+
4) **Daemon** provides `/v1/agent` (SSE stream of chunks + final assistant message).
|
|
23
|
+
|
|
24
|
+
### Data Flow (Agent Loop)
|
|
25
|
+
|
|
26
|
+
- User sends a message in the side panel.
|
|
27
|
+
- Panel compacts history and sends `panel:agent` to background with:
|
|
28
|
+
- `messages` (pi-ai Message[])
|
|
29
|
+
- `tools` (names)
|
|
30
|
+
- `summary` (optional current summary markdown)
|
|
31
|
+
- Background builds `pageContent` using the latest extract (summary + transcript/text + metadata).
|
|
32
|
+
- Background calls daemon `POST /v1/agent` (SSE).
|
|
33
|
+
- Daemon streams `chunk` events, then an `assistant` event (may include tool calls).
|
|
34
|
+
- Panel executes tool calls locally, appends `toolResult` messages, and repeats `/v1/agent` until no tool calls remain.
|
|
35
|
+
|
|
36
|
+
The daemon **never** executes tools. It only returns the next assistant message.
|
|
37
|
+
|
|
38
|
+
## Settings + Permissions
|
|
39
|
+
|
|
40
|
+
### Settings
|
|
41
|
+
|
|
42
|
+
`automationEnabled` (boolean) lives in `apps/chrome-extension/src/lib/settings.ts`.
|
|
43
|
+
|
|
44
|
+
- Options UI provides the toggle.
|
|
45
|
+
- When disabled, the tool list is empty and the daemon uses the **chat-only** prompt.
|
|
46
|
+
|
|
47
|
+
### Optional Permissions
|
|
48
|
+
|
|
49
|
+
Defined in `apps/chrome-extension/wxt.config.ts` and requested via Options:
|
|
50
|
+
|
|
51
|
+
- `debugger` – required for **native input** and the **debugger** tool.
|
|
52
|
+
- `userScripts` – reserved for main-world script execution (not required for current REPL path).
|
|
53
|
+
|
|
54
|
+
#### Chrome: enable User Scripts (if needed)
|
|
55
|
+
|
|
56
|
+
1. `chrome://extensions`
|
|
57
|
+
2. Open extension details
|
|
58
|
+
3. Enable **Allow User Scripts**
|
|
59
|
+
4. Reload the tab
|
|
60
|
+
|
|
61
|
+
## Daemon Endpoint
|
|
62
|
+
|
|
63
|
+
### `POST /v1/agent` (SSE)
|
|
64
|
+
|
|
65
|
+
**Headers**
|
|
66
|
+
- `Authorization: Bearer <token>`
|
|
67
|
+
- `Content-Type: application/json`
|
|
68
|
+
|
|
69
|
+
**Body**
|
|
70
|
+
```
|
|
71
|
+
{
|
|
72
|
+
"url": "https://...",
|
|
73
|
+
"title": "Page title",
|
|
74
|
+
"pageContent": "<summary + transcript + metadata>",
|
|
75
|
+
"cacheContent": "<transcript/text used for cache key>",
|
|
76
|
+
"messages": [/* pi-ai Message[] */],
|
|
77
|
+
"model": "auto" | "openai/..." | "anthropic/..." | ...,
|
|
78
|
+
"length": "short" | "xl" | "20k" | ...,
|
|
79
|
+
"language": "auto" | "en" | "de" | ...,
|
|
80
|
+
"tools": ["navigate", "repl", "ask_user_which_element", "skill", "debugger"],
|
|
81
|
+
"automationEnabled": true
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Response (SSE, default)**
|
|
86
|
+
```
|
|
87
|
+
event: chunk
|
|
88
|
+
data: { "text": "..." }
|
|
89
|
+
|
|
90
|
+
event: assistant
|
|
91
|
+
data: { /* AssistantMessage */ }
|
|
92
|
+
|
|
93
|
+
event: done
|
|
94
|
+
data: {}
|
|
95
|
+
|
|
96
|
+
event: error
|
|
97
|
+
data: { "message": "..." }
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Response (JSON)**
|
|
101
|
+
Use `Accept: application/json` or `?format=json`.
|
|
102
|
+
```
|
|
103
|
+
{ "ok": true, "assistant": { /* AssistantMessage */ } }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### `POST /v1/agent/history`
|
|
107
|
+
|
|
108
|
+
Returns cached chat history for the same cache key as `/v1/agent`.
|
|
109
|
+
|
|
110
|
+
**Body**
|
|
111
|
+
```
|
|
112
|
+
{
|
|
113
|
+
"url": "https://...",
|
|
114
|
+
"pageContent": "<summary + transcript + metadata>",
|
|
115
|
+
"cacheContent": "<transcript/text used for cache key>",
|
|
116
|
+
"model": "auto" | "openai/..." | "anthropic/..." | ...,
|
|
117
|
+
"length": "short" | "xl" | "20k" | ...,
|
|
118
|
+
"language": "auto" | "en" | "de" | ...,
|
|
119
|
+
"automationEnabled": true
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Response**
|
|
124
|
+
```
|
|
125
|
+
{ "ok": true, "messages": [/* Message[] */] }
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Model Resolution (Daemon)
|
|
129
|
+
|
|
130
|
+
- **Fixed model** (explicit `model`): parsed as `<provider>/<model>`. Provider base URL overrides come from config/env (OpenAI, Anthropic, Google, xAI, ZAI). OpenRouter uses OpenAI-compatible completions.
|
|
131
|
+
- **Auto model**: uses existing auto-selection logic (`buildAutoModelAttempts`), skipping CLI transports.
|
|
132
|
+
- **Synthetic models**: created for OpenAI-compatible base URLs (local/openrouter).
|
|
133
|
+
- `maxOutputTokens` defaults to 2048 or `maxOutputTokens` override.
|
|
134
|
+
- CLI models are **not** supported in the daemon.
|
|
135
|
+
|
|
136
|
+
## Page Content Payload
|
|
137
|
+
|
|
138
|
+
`pageContent` is built from the latest extract and includes:
|
|
139
|
+
|
|
140
|
+
- **Summary** (optional): current summary markdown (truncated to settings cap).
|
|
141
|
+
- **Transcript/text**: timed transcript when available, otherwise extracted text.
|
|
142
|
+
- **Metadata**: URL/title, source (`page` vs `url`), extraction strategy, markdown provider, Firecrawl usage, transcript provider + cache status, media duration, word counts, truncation flags.
|
|
143
|
+
|
|
144
|
+
See `buildChatPageContent()` usage in `apps/chrome-extension/src/entrypoints/background.ts`.
|
|
145
|
+
|
|
146
|
+
## Tools
|
|
147
|
+
|
|
148
|
+
### 1) `navigate`
|
|
149
|
+
Navigate the active tab.
|
|
150
|
+
|
|
151
|
+
Params:
|
|
152
|
+
```
|
|
153
|
+
{ "url": "https://...", "newTab": false }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Result:
|
|
157
|
+
```
|
|
158
|
+
{ "finalUrl": "https://...", "title": "...", "tabId": 123 }
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Notes:
|
|
162
|
+
- Uses `chrome.tabs.update` or `chrome.tabs.create`.
|
|
163
|
+
- Waits for tab status `complete` (15s timeout).
|
|
164
|
+
|
|
165
|
+
### 2) `repl`
|
|
166
|
+
Execute JavaScript in a sandbox, with `browserjs()` to run in the page context.
|
|
167
|
+
|
|
168
|
+
Params:
|
|
169
|
+
```
|
|
170
|
+
{ "title": "...", "code": "..." }
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Result:
|
|
174
|
+
```
|
|
175
|
+
{ "output": "console/return output", "files": [{ "fileName": "...", "mimeType": "...", "contentBase64": "..." }] }
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
REPL environment:
|
|
179
|
+
- Runs in a **sandboxed iframe** (no DOM access to the panel).
|
|
180
|
+
- `browserjs(fn, ...args)` runs the function **in the page context**.
|
|
181
|
+
- Uses `chrome.userScripts.execute` (main world) when available.
|
|
182
|
+
- Falls back to `chrome.scripting.executeScript` (isolated world).
|
|
183
|
+
- `navigate({ url })` available inside the REPL (always use for navigation).
|
|
184
|
+
- `sleep(ms)` helper.
|
|
185
|
+
- Console output is captured and returned; return values are appended as `=> value`.
|
|
186
|
+
- `returnFile(name, content, mimeType)` or `returnFile({ fileName, content, mimeType })` attaches files to the tool result.
|
|
187
|
+
|
|
188
|
+
Safety:
|
|
189
|
+
- Navigation inside REPL code (`window.location`, `history`, etc.) is rejected. Use `navigate()` instead.
|
|
190
|
+
|
|
191
|
+
Page-context helpers (via `browserjs()`):
|
|
192
|
+
- Skills libraries are auto-injected when domain patterns match the active URL.
|
|
193
|
+
- If `debugger` permission is granted, native helpers are exposed:
|
|
194
|
+
- `nativeClick(selector)`
|
|
195
|
+
- `nativeType(selector, text)`
|
|
196
|
+
- `nativePress(key)`
|
|
197
|
+
- `nativeKeyDown(key)` / `nativeKeyUp(key)`
|
|
198
|
+
|
|
199
|
+
### 3) `ask_user_which_element`
|
|
200
|
+
Shows a click-to-select overlay and returns element metadata.
|
|
201
|
+
|
|
202
|
+
Params:
|
|
203
|
+
```
|
|
204
|
+
{ "message": "Optional guidance" }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Result (example):
|
|
208
|
+
```
|
|
209
|
+
{
|
|
210
|
+
"selector": "#submit",
|
|
211
|
+
"xpath": "//button[1]",
|
|
212
|
+
"text": "Send",
|
|
213
|
+
"tagName": "button",
|
|
214
|
+
"attributes": { "type": "submit" },
|
|
215
|
+
"html": "<button ...>",
|
|
216
|
+
"boundingBox": { "x": 20, "y": 120, "width": 180, "height": 40 }
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Overlay UX:
|
|
221
|
+
- Hover highlights element under cursor.
|
|
222
|
+
- Click selects.
|
|
223
|
+
- ↑ / ↓ moves up or down the DOM tree.
|
|
224
|
+
- Esc cancels.
|
|
225
|
+
|
|
226
|
+
### 4) `skill`
|
|
227
|
+
CRUD for domain-specific libraries (stored in `chrome.storage.local`).
|
|
228
|
+
|
|
229
|
+
Storage keys:
|
|
230
|
+
- `automation.skills` (map of name → skill)
|
|
231
|
+
- `automation.skillsSeeded` (one-time default seed)
|
|
232
|
+
|
|
233
|
+
Actions:
|
|
234
|
+
- `list` (optionally filtered by URL)
|
|
235
|
+
- `get` (optionally includes library code)
|
|
236
|
+
- `create` / `rewrite`
|
|
237
|
+
- `update` (string replacement)
|
|
238
|
+
- `delete`
|
|
239
|
+
|
|
240
|
+
Default skills seed from `apps/chrome-extension/src/automation/default-skills.json`.
|
|
241
|
+
|
|
242
|
+
Matching:
|
|
243
|
+
- Glob-like domain patterns (supports `*` and `**`).
|
|
244
|
+
- Match is done against hostname + path (e.g. `github.com/*/issues`).
|
|
245
|
+
|
|
246
|
+
Notes:
|
|
247
|
+
- `update` is intended for in-place string replacements; use `rewrite` to rename.
|
|
248
|
+
- Skills libraries run inside `browserjs()` and must avoid navigation.
|
|
249
|
+
|
|
250
|
+
### 5) `debugger` (optional)
|
|
251
|
+
Runs JavaScript in the **main world** via the Chrome debugger. **Last resort** (shows Chrome debug banner).
|
|
252
|
+
|
|
253
|
+
Params:
|
|
254
|
+
```
|
|
255
|
+
{ "action": "eval", "code": "..." }
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Result:
|
|
259
|
+
```
|
|
260
|
+
{ "text": "...", "details": { ... } }
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 6) `summarize`
|
|
264
|
+
Run the Summarize pipeline against a URL (summary or extract-only).
|
|
265
|
+
|
|
266
|
+
Params:
|
|
267
|
+
```
|
|
268
|
+
{
|
|
269
|
+
"url": "https://...",
|
|
270
|
+
"extractOnly": false,
|
|
271
|
+
"format": "text",
|
|
272
|
+
"markdownMode": "readability",
|
|
273
|
+
"model": "openai/gpt-5-mini",
|
|
274
|
+
"length": "short",
|
|
275
|
+
"language": "auto",
|
|
276
|
+
"prompt": "Optional override",
|
|
277
|
+
"timeout": "2m",
|
|
278
|
+
"maxOutputTokens": "2k",
|
|
279
|
+
"noCache": false,
|
|
280
|
+
"firecrawl": "auto",
|
|
281
|
+
"preprocess": "auto",
|
|
282
|
+
"youtube": "auto",
|
|
283
|
+
"videoMode": "auto",
|
|
284
|
+
"timestamps": false,
|
|
285
|
+
"maxCharacters": 120000
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Result (summary):
|
|
290
|
+
```
|
|
291
|
+
{ "output": "..." }
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Result (extract-only):
|
|
295
|
+
```
|
|
296
|
+
{ "output": "...", "details": { "content": "...", "title": "...", "wordCount": 123, ... } }
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Notes:
|
|
300
|
+
- URL-only (uses daemon URL pipeline).
|
|
301
|
+
- Use `extractOnly: true` + `format: "markdown"` to return extracted Markdown.
|
|
302
|
+
- When `format: "markdown"`, `markdownMode` defaults to `readability`.
|
|
303
|
+
|
|
304
|
+
## Native Input Bridge (Debugger Permission)
|
|
305
|
+
|
|
306
|
+
Native input events use the Chrome debugger protocol:
|
|
307
|
+
|
|
308
|
+
- `browserjs()` posts a message to the content script.
|
|
309
|
+
- Content script forwards to background (`automation:native-input`).
|
|
310
|
+
- Background attaches debugger and dispatches:
|
|
311
|
+
- `Input.dispatchMouseEvent` (click)
|
|
312
|
+
- `Input.insertText` (type)
|
|
313
|
+
- `Input.dispatchKeyEvent` (press/keydown/keyup)
|
|
314
|
+
|
|
315
|
+
If permission is missing, the call fails and the tool reports the error.
|
|
316
|
+
|
|
317
|
+
## UX Notes
|
|
318
|
+
|
|
319
|
+
- Automation is opt-in via Options checkbox.
|
|
320
|
+
- Regular summarize flows remain unchanged.
|
|
321
|
+
- Tool results are treated as **data**, not instructions. The system prompt still asks the assistant to repeat important tool-derived info in plain text.
|
|
322
|
+
- Tool results are currently rendered in the chat UI for debugging; they may be hidden in the future.
|
|
323
|
+
- When the active tab URL changes during a conversation, the panel appends a **navigation tool result** with the new URL, title, and matching skills. This keeps the agent aware of user-driven navigation.
|
|
324
|
+
- REPL executions that call `browserjs()` show a small overlay with an **Abort** action; aborting stops the current agent loop (best-effort).
|
|
325
|
+
|
|
326
|
+
## Where Things Live
|
|
327
|
+
|
|
328
|
+
- **Daemon**: `src/daemon/server.ts`, `src/daemon/agent.ts`
|
|
329
|
+
- **Automation tools**: `apps/chrome-extension/src/automation/`
|
|
330
|
+
- **Element picker + native input bridge**: `apps/chrome-extension/src/entrypoints/automation.content.ts`
|
|
331
|
+
- **Background agent proxy**: `apps/chrome-extension/src/entrypoints/background.ts`
|
|
332
|
+
- **Side panel agent loop**: `apps/chrome-extension/src/entrypoints/sidepanel/`
|
|
333
|
+
- **Options toggle**: `apps/chrome-extension/src/entrypoints/options/`
|