@steipete/summarize-core 0.9.0 → 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.
Files changed (91) hide show
  1. package/LICENSE +1 -1
  2. package/dist/esm/content/index.js.map +1 -1
  3. package/dist/esm/content/link-preview/client.js +4 -0
  4. package/dist/esm/content/link-preview/client.js.map +1 -1
  5. package/dist/esm/content/link-preview/content/firecrawl.js +2 -1
  6. package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
  7. package/dist/esm/content/link-preview/content/html.js +2 -1
  8. package/dist/esm/content/link-preview/content/html.js.map +1 -1
  9. package/dist/esm/content/link-preview/content/index.js +41 -11
  10. package/dist/esm/content/link-preview/content/index.js.map +1 -1
  11. package/dist/esm/content/link-preview/content/types.js.map +1 -1
  12. package/dist/esm/content/link-preview/content/utils.js +15 -7
  13. package/dist/esm/content/link-preview/content/utils.js.map +1 -1
  14. package/dist/esm/content/link-preview/types.js.map +1 -1
  15. package/dist/esm/content/transcript/cache.js +28 -3
  16. package/dist/esm/content/transcript/cache.js.map +1 -1
  17. package/dist/esm/content/transcript/index.js +37 -1
  18. package/dist/esm/content/transcript/index.js.map +1 -1
  19. package/dist/esm/content/transcript/parse.js +112 -0
  20. package/dist/esm/content/transcript/parse.js.map +1 -1
  21. package/dist/esm/content/transcript/providers/generic.js +52 -17
  22. package/dist/esm/content/transcript/providers/generic.js.map +1 -1
  23. package/dist/esm/content/transcript/providers/podcast/apple-flow.js +2 -0
  24. package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
  25. package/dist/esm/content/transcript/providers/podcast/media.js +21 -20
  26. package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
  27. package/dist/esm/content/transcript/providers/podcast/rss.js +16 -2
  28. package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
  29. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js +1 -0
  30. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
  31. package/dist/esm/content/transcript/providers/podcast.js +17 -4
  32. package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
  33. package/dist/esm/content/transcript/providers/transcription-start.js +50 -0
  34. package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -0
  35. package/dist/esm/content/transcript/providers/youtube/api.js +24 -7
  36. package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
  37. package/dist/esm/content/transcript/providers/youtube/captions.js +42 -4
  38. package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
  39. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +106 -53
  40. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
  41. package/dist/esm/content/transcript/providers/youtube.js +19 -9
  42. package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
  43. package/dist/esm/content/transcript/timestamps.js +79 -0
  44. package/dist/esm/content/transcript/timestamps.js.map +1 -0
  45. package/dist/esm/processes.js +121 -0
  46. package/dist/esm/processes.js.map +1 -0
  47. package/dist/esm/prompts/file.js +16 -0
  48. package/dist/esm/prompts/file.js.map +1 -1
  49. package/dist/esm/prompts/index.js +1 -0
  50. package/dist/esm/prompts/index.js.map +1 -1
  51. package/dist/esm/prompts/link-summary.js +59 -9
  52. package/dist/esm/prompts/link-summary.js.map +1 -1
  53. package/dist/esm/prompts/summary-system.js +13 -0
  54. package/dist/esm/prompts/summary-system.js.map +1 -0
  55. package/dist/esm/transcription/onnx-cli.js +319 -0
  56. package/dist/esm/transcription/onnx-cli.js.map +1 -0
  57. package/dist/esm/transcription/whisper/core.js +72 -4
  58. package/dist/esm/transcription/whisper/core.js.map +1 -1
  59. package/dist/esm/transcription/whisper/ffmpeg.js +57 -5
  60. package/dist/esm/transcription/whisper/ffmpeg.js.map +1 -1
  61. package/dist/esm/transcription/whisper/whisper-cpp.js +13 -3
  62. package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
  63. package/dist/types/content/cache/types.d.ts +24 -0
  64. package/dist/types/content/index.d.ts +1 -1
  65. package/dist/types/content/link-preview/client.d.ts +3 -1
  66. package/dist/types/content/link-preview/content/firecrawl.d.ts +2 -1
  67. package/dist/types/content/link-preview/content/html.d.ts +2 -1
  68. package/dist/types/content/link-preview/content/types.d.ts +6 -1
  69. package/dist/types/content/link-preview/content/utils.d.ts +1 -1
  70. package/dist/types/content/link-preview/deps.d.ts +15 -2
  71. package/dist/types/content/link-preview/types.d.ts +6 -0
  72. package/dist/types/content/transcript/cache.d.ts +5 -2
  73. package/dist/types/content/transcript/index.d.ts +4 -1
  74. package/dist/types/content/transcript/parse.d.ts +7 -0
  75. package/dist/types/content/transcript/providers/podcast/media.d.ts +2 -1
  76. package/dist/types/content/transcript/providers/podcast/rss.d.ts +2 -0
  77. package/dist/types/content/transcript/providers/transcription-start.d.ts +26 -0
  78. package/dist/types/content/transcript/providers/youtube/api.d.ts +7 -2
  79. package/dist/types/content/transcript/providers/youtube/captions.d.ts +6 -1
  80. package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +5 -1
  81. package/dist/types/content/transcript/timestamps.d.ts +5 -0
  82. package/dist/types/content/transcript/types.d.ts +5 -0
  83. package/dist/types/processes.d.ts +50 -0
  84. package/dist/types/prompts/index.d.ts +1 -0
  85. package/dist/types/prompts/link-summary.d.ts +6 -1
  86. package/dist/types/prompts/summary-system.d.ts +1 -0
  87. package/dist/types/transcription/onnx-cli.d.ts +25 -0
  88. package/dist/types/transcription/whisper/core.d.ts +6 -2
  89. package/dist/types/transcription/whisper/ffmpeg.d.ts +5 -0
  90. package/dist/types/transcription/whisper/types.d.ts +1 -1
  91. package/package.json +11 -6
@@ -0,0 +1,79 @@
1
+ const TIMESTAMP_SPLIT_PATTERN = /:/;
2
+ export function formatTimestampMs(ms) {
3
+ const safe = Math.max(0, Math.round(ms));
4
+ const totalSeconds = Math.floor(safe / 1000);
5
+ const hours = Math.floor(totalSeconds / 3600);
6
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
7
+ const seconds = totalSeconds % 60;
8
+ if (hours > 0) {
9
+ return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
10
+ }
11
+ return `${minutes}:${seconds.toString().padStart(2, '0')}`;
12
+ }
13
+ export function parseTimestampStringToMs(value) {
14
+ const trimmed = value.trim();
15
+ if (!trimmed)
16
+ return null;
17
+ if (/^\d+(?:\.\d+)?$/.test(trimmed)) {
18
+ const seconds = Number(trimmed);
19
+ return Number.isFinite(seconds) && seconds >= 0 ? Math.round(seconds * 1000) : null;
20
+ }
21
+ const parts = trimmed.split(TIMESTAMP_SPLIT_PATTERN).map((part) => part.trim());
22
+ if (parts.length < 2 || parts.length > 3)
23
+ return null;
24
+ const secondsPart = parts.pop();
25
+ if (secondsPart == null)
26
+ return null;
27
+ const seconds = Number(secondsPart.replace(',', '.'));
28
+ if (!Number.isFinite(seconds) || seconds < 0)
29
+ return null;
30
+ const minutesPart = parts.pop();
31
+ if (minutesPart == null)
32
+ return null;
33
+ const minutes = Number(minutesPart);
34
+ if (!Number.isFinite(minutes) || minutes < 0)
35
+ return null;
36
+ const hoursPart = parts.pop();
37
+ const hours = hoursPart != null ? Number(hoursPart) : 0;
38
+ if (!Number.isFinite(hours) || hours < 0)
39
+ return null;
40
+ return Math.round((hours * 3600 + minutes * 60 + seconds) * 1000);
41
+ }
42
+ export function parseTimestampToMs(value, assumeSeconds = false) {
43
+ if (typeof value === 'number') {
44
+ if (!Number.isFinite(value) || value < 0)
45
+ return null;
46
+ return assumeSeconds ? Math.round(value * 1000) : Math.round(value);
47
+ }
48
+ if (typeof value === 'string') {
49
+ const trimmed = value.trim();
50
+ if (!trimmed)
51
+ return null;
52
+ if (trimmed.includes(':')) {
53
+ const parsed = parseTimestampStringToMs(trimmed);
54
+ if (parsed != null)
55
+ return parsed;
56
+ }
57
+ const numeric = Number(trimmed);
58
+ if (Number.isFinite(numeric) && numeric >= 0) {
59
+ return assumeSeconds ? Math.round(numeric * 1000) : Math.round(numeric);
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ export function formatTranscriptSegments(segments) {
65
+ if (!segments || segments.length === 0)
66
+ return null;
67
+ const lines = segments
68
+ .map((segment) => {
69
+ const text = segment.text.replace(/\s+/g, ' ').trim();
70
+ if (!text)
71
+ return null;
72
+ return `[${formatTimestampMs(segment.startMs)}] ${text}`;
73
+ })
74
+ .filter((line) => Boolean(line));
75
+ if (lines.length === 0)
76
+ return null;
77
+ return lines.join('\n');
78
+ }
79
+ //# sourceMappingURL=timestamps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamps.js","sourceRoot":"","sources":["../../../../src/content/transcript/timestamps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { execFile, spawn } from 'node:child_process';
3
+ const processContext = new AsyncLocalStorage();
4
+ let processObserver = null;
5
+ export function setProcessObserver(next) {
6
+ processObserver = next;
7
+ }
8
+ export function getProcessContext() {
9
+ return processContext.getStore() ?? {};
10
+ }
11
+ export function runWithProcessContext(ctx, fn) {
12
+ return processContext.run(ctx, fn);
13
+ }
14
+ function registerProcess(info) {
15
+ if (!processObserver)
16
+ return null;
17
+ const ctx = getProcessContext();
18
+ return processObserver.register({
19
+ ...info,
20
+ runId: info.runId ?? ctx.runId ?? null,
21
+ source: info.source ?? ctx.source ?? null,
22
+ });
23
+ }
24
+ function attachLineReader(stream, onLine) {
25
+ if (!stream)
26
+ return;
27
+ let buffer = '';
28
+ stream.setEncoding('utf8');
29
+ stream.on('data', (chunk) => {
30
+ buffer += chunk;
31
+ const lines = buffer.split(/\r?\n/);
32
+ buffer = lines.pop() ?? '';
33
+ for (const line of lines) {
34
+ if (line === '')
35
+ continue;
36
+ onLine(line);
37
+ }
38
+ });
39
+ stream.on('end', () => {
40
+ const line = buffer.trim();
41
+ if (line)
42
+ onLine(line);
43
+ buffer = '';
44
+ });
45
+ }
46
+ export function trackChildProcess(proc, info, options) {
47
+ const handle = registerProcess(info);
48
+ if (!handle)
49
+ return null;
50
+ handle.setPid(proc.pid ?? null);
51
+ const captureOutput = options?.captureOutput !== false;
52
+ if (captureOutput) {
53
+ attachLineReader(proc.stdout, (line) => handle.appendOutput('stdout', line));
54
+ attachLineReader(proc.stderr, (line) => handle.appendOutput('stderr', line));
55
+ }
56
+ let finished = false;
57
+ const finishOnce = (result) => {
58
+ if (finished)
59
+ return;
60
+ finished = true;
61
+ handle.finish(result);
62
+ };
63
+ proc.on('error', (error) => {
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ finishOnce({ exitCode: null, signal: null, error: message });
66
+ });
67
+ proc.on('close', (code, signal) => {
68
+ finishOnce({ exitCode: code ?? null, signal: signal ?? null });
69
+ });
70
+ return handle;
71
+ }
72
+ export function spawnTracked(command, args, options = {}) {
73
+ const { label, kind, runId, source, captureOutput, ...spawnOptions } = options;
74
+ const proc = spawn(command, args, spawnOptions);
75
+ const handle = trackChildProcess(proc, {
76
+ command,
77
+ args,
78
+ label,
79
+ kind,
80
+ runId,
81
+ source,
82
+ cwd: spawnOptions.cwd ? String(spawnOptions.cwd) : null,
83
+ env: spawnOptions.env ?? null,
84
+ }, { captureOutput });
85
+ return { proc, handle };
86
+ }
87
+ export function execFileTracked(file, args, options, callback) {
88
+ let resolvedArgs = [];
89
+ let resolvedOptions = {};
90
+ let resolvedCallback;
91
+ if (Array.isArray(args)) {
92
+ resolvedArgs = args;
93
+ if (typeof options === 'function') {
94
+ resolvedCallback = options;
95
+ }
96
+ else {
97
+ resolvedOptions = options ?? {};
98
+ resolvedCallback = callback;
99
+ }
100
+ }
101
+ else if (typeof args === 'function') {
102
+ resolvedCallback = args;
103
+ }
104
+ else {
105
+ resolvedOptions = (args ?? {});
106
+ if (typeof options === 'function') {
107
+ resolvedCallback = options;
108
+ }
109
+ }
110
+ const proc = execFile(file, resolvedArgs, resolvedOptions, resolvedCallback);
111
+ trackChildProcess(proc, {
112
+ command: file,
113
+ args: Array.from(resolvedArgs),
114
+ label: file,
115
+ kind: file,
116
+ cwd: resolvedOptions.cwd ? String(resolvedOptions.cwd) : null,
117
+ env: resolvedOptions.env ?? null,
118
+ }, { captureOutput: true });
119
+ return proc;
120
+ }
121
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/processes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAOpD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAiDpD,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAkB,CAAA;AAC9D,IAAI,eAAe,GAA2B,IAAI,CAAA;AAElD,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAC7D,eAAe,GAAG,IAAI,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAI,GAAmB,EAAE,EAAW;IACvE,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,IAAyB;IAChD,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAA;IACjC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,OAAO,eAAe,CAAC,QAAQ,CAAC;QAC9B,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI;QACtC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;KAC1C,CAAC,CAAA;AACJ,CAAC;AAID,SAAS,gBAAgB,CAAC,MAAgD,EAAE,MAAoB;IAC9F,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAClC,MAAM,IAAI,KAAK,CAAA;QACf,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAQ;YACzB,MAAM,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;QAC1B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACtB,MAAM,GAAG,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,IAAyB,EACzB,OAAqC;IAErC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAE/B,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,KAAK,KAAK,CAAA;IACtD,IAAI,aAAa,EAAE,CAAC;QAClB,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QAC5E,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,UAAU,GAAG,CAAC,MAInB,EAAE,EAAE;QACH,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,GAAG,IAAI,CAAA;QACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,UAA+B,EAAE;IAEjC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAA;IAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,iBAAiB,CAC9B,IAAI,EACJ;QACE,OAAO;QACP,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACvD,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,IAAI;KAC9B,EACD,EAAE,aAAa,EAAE,CAClB,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,IAA6D,EAC7D,OAA4C,EAC5C,QAA2B;IAE3B,IAAI,YAAY,GAAsB,EAAE,CAAA;IACxC,IAAI,eAAe,GAAoB,EAAE,CAAA;IACzC,IAAI,gBAA8C,CAAA;IAElD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,YAAY,GAAG,IAAI,CAAA;QACnB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,gBAAgB,GAAG,OAAO,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,OAAO,IAAI,EAAE,CAAA;YAC/B,gBAAgB,GAAG,QAAQ,CAAA;QAC7B,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QACtC,gBAAgB,GAAG,IAAI,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,CAAC,IAAI,IAAI,EAAE,CAAoB,CAAA;QACjD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,gBAAgB,GAAG,OAAO,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAoC,CAAC,CAAA;IAChG,iBAAiB,CACf,IAAI,EACJ;QACE,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9B,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7D,GAAG,EAAE,eAAe,CAAC,GAAG,IAAI,IAAI;KACjC,EACD,EAAE,aAAa,EAAE,IAAI,EAAE,CACxB,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -3,6 +3,7 @@ import { buildInstructions, buildTaggedPrompt } from './format.js';
3
3
  import { pickSummaryLengthForCharacters } from './link-summary.js';
4
4
  import { formatPresetLengthGuidance, resolveSummaryLengthSpec } from './summary-lengths.js';
5
5
  export function buildFileSummaryPrompt({ filename, mediaType, outputLanguage, summaryLength, contentLength, promptOverride, lengthInstruction, languageInstruction, }) {
6
+ const shouldIgnoreSponsors = Boolean(mediaType?.startsWith('audio/') || mediaType?.startsWith('video/'));
6
7
  const contentCharacters = typeof contentLength === 'number' ? contentLength : null;
7
8
  const effectiveSummaryLength = typeof summaryLength === 'string'
8
9
  ? summaryLength
@@ -27,18 +28,25 @@ export function buildFileSummaryPrompt({ filename, mediaType, outputLanguage, su
27
28
  mediaType ? `Media type: ${mediaType}` : null,
28
29
  ].filter(Boolean);
29
30
  const baseInstructions = [
31
+ 'Hard rules: never mention sponsor/ads; never output quotation marks of any kind (straight or curly), even for titles.',
32
+ 'Never include quotation marks in the output. Apostrophes in contractions are OK. If a title or excerpt would normally use quotes, remove them and optionally italicize the text instead.',
30
33
  'You summarize files for curious users.',
31
34
  'Summarize the attached file.',
32
35
  'Be factual and do not invent details.',
36
+ shouldIgnoreSponsors
37
+ ? 'Omit sponsor messages, ads, promos, and calls-to-action (including podcast ad reads), even if they appear in the transcript. Do not mention or acknowledge them, and do not say you skipped or ignored anything. Avoid sponsor/ad/promo language, brand names like Squarespace, or CTA phrases like discount code.'
38
+ : '',
33
39
  directive.guidance,
34
40
  directive.formatting,
35
41
  'Format the answer in Markdown.',
36
42
  'Use short paragraphs; use bullet lists only when they improve scanability; avoid rigid templates.',
43
+ 'If a standout line is present, include 1-2 short exact excerpts (max 25 words each) formatted as Markdown italics using single asterisks only. Do not use quotation marks of any kind (straight or curly). Remove any quotation marks from excerpts. If you cannot format an italic excerpt, omit it. Never include ad/sponsor/boilerplate excerpts and do not mention them.',
37
44
  'Do not use emojis.',
38
45
  presetLengthLine,
39
46
  maxCharactersLine,
40
47
  contentLengthLine,
41
48
  formatOutputLanguageInstruction(outputLanguage ?? { kind: 'auto' }),
49
+ 'Final check: remove any sponsor/ad references or mentions of skipping/ignoring content. Remove any quotation marks. Ensure standout excerpts are italicized; otherwise omit them.',
42
50
  'Return only the summary.',
43
51
  ]
44
52
  .filter((line) => typeof line === 'string' && line.trim().length > 0)
@@ -55,6 +63,7 @@ export function buildFileSummaryPrompt({ filename, mediaType, outputLanguage, su
55
63
  });
56
64
  }
57
65
  export function buildFileTextSummaryPrompt({ filename, originalMediaType, contentMediaType, outputLanguage, summaryLength, contentLength, content, promptOverride, lengthInstruction, languageInstruction, }) {
66
+ const shouldIgnoreSponsors = Boolean(originalMediaType?.startsWith('audio/') || originalMediaType?.startsWith('video/'));
58
67
  const effectiveSummaryLength = typeof summaryLength === 'string'
59
68
  ? summaryLength
60
69
  : summaryLength.maxCharacters > contentLength
@@ -75,17 +84,24 @@ export function buildFileTextSummaryPrompt({ filename, originalMediaType, conten
75
84
  `Extracted content length: ${contentLength.toLocaleString()} characters. Hard limit: never exceed this length. If the requested length is larger, do not pad—finish early rather than adding filler.`,
76
85
  ].filter(Boolean);
77
86
  const baseInstructions = [
87
+ 'Hard rules: never mention sponsor/ads; never output quotation marks of any kind (straight or curly), even for titles.',
88
+ 'Never include quotation marks in the output. Apostrophes in contractions are OK. If a title or excerpt would normally use quotes, remove them and optionally italicize the text instead.',
78
89
  'You summarize files for curious users.',
79
90
  'Summarize the file content below.',
80
91
  'Be factual and do not invent details.',
92
+ shouldIgnoreSponsors
93
+ ? 'Omit sponsor messages, ads, promos, and calls-to-action (including podcast ad reads), even if they appear in the transcript. Do not mention or acknowledge them, and do not say you skipped or ignored anything. Avoid sponsor/ad/promo language, brand names like Squarespace, or CTA phrases like discount code.'
94
+ : '',
81
95
  directive.guidance,
82
96
  directive.formatting,
83
97
  'Format the answer in Markdown.',
84
98
  'Use short paragraphs; use bullet lists only when they improve scanability; avoid rigid templates.',
99
+ 'If a standout line is present, include 1-2 short exact excerpts (max 25 words each) formatted as Markdown italics using single asterisks only. Do not use quotation marks of any kind (straight or curly). Remove any quotation marks from excerpts. If you cannot format an italic excerpt, omit it. Never include ad/sponsor/boilerplate excerpts and do not mention them.',
85
100
  'Do not use emojis.',
86
101
  presetLengthLine,
87
102
  maxCharactersLine,
88
103
  formatOutputLanguageInstruction(outputLanguage ?? { kind: 'auto' }),
104
+ 'Final check: remove any sponsor/ad references or mentions of skipping/ignoring content. Remove any quotation marks. Ensure standout excerpts are italicized; otherwise omit them.',
89
105
  'Return only the summary.',
90
106
  ]
91
107
  .filter((line) => typeof line === 'string' && line.trim().length > 0)
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/prompts/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/prompts/file.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export { buildPathSummaryPrompt } from './cli.js';
2
2
  export { buildFileSummaryPrompt, buildFileTextSummaryPrompt } from './file.js';
3
3
  export { buildLinkSummaryPrompt, estimateMaxCompletionTokensForCharacters, pickSummaryLengthForCharacters, SUMMARY_LENGTH_TO_TOKENS, } from './link-summary.js';
4
4
  export { formatPresetLengthGuidance, resolveSummaryLengthSpec, SUMMARY_LENGTH_MAX_CHARACTERS, SUMMARY_LENGTH_SPECS, SUMMARY_LENGTH_TARGET_CHARACTERS, } from './summary-lengths.js';
5
+ export { SUMMARY_SYSTEM_PROMPT } from './summary-system.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,sBAAsB,EACtB,wCAAwC,EACxC,8BAA8B,EAE9B,wBAAwB,GAEzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,sBAAsB,EACtB,wCAAwC,EACxC,8BAA8B,EAE9B,wBAAwB,GAEzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -19,11 +19,15 @@ export function estimateMaxCompletionTokensForCharacters(maxCharacters) {
19
19
  return Math.max(256, estimate);
20
20
  }
21
21
  const formatCount = (value) => value.toLocaleString();
22
- export function buildLinkSummaryPrompt({ url, title, siteName, description, content, truncated, hasTranscript, outputLanguage, summaryLength, shares, promptOverride, lengthInstruction, languageInstruction, }) {
23
- const contentCharacters = content.length;
22
+ export function buildLinkSummaryPrompt({ url, title, siteName, description, content, truncated, hasTranscript, hasTranscriptTimestamps = false, slides, outputLanguage, summaryLength, shares, promptOverride, lengthInstruction, languageInstruction, }) {
23
+ const slidesText = slides?.text?.trim() ?? '';
24
+ const contentWithSlides = slidesText.length > 0
25
+ ? `${content}\n\nSlide timeline (transcript excerpts):\n${slidesText}`
26
+ : content;
27
+ const contentCharacters = contentWithSlides.length;
24
28
  const contextLines = [`Source URL: ${url}`];
25
29
  if (title) {
26
- contextLines.push(`Title: ${title}`);
30
+ contextLines.push(`Page name: ${title}`);
27
31
  }
28
32
  if (siteName) {
29
33
  contextLines.push(`Site: ${siteName}`);
@@ -47,14 +51,19 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
47
51
  ? effectiveSummaryLength
48
52
  : pickSummaryLengthForCharacters(effectiveSummaryLength.maxCharacters);
49
53
  const directive = resolveSummaryLengthSpec(preset);
54
+ const formattingLine = slides && slides.count > 0
55
+ ? 'Use the slide format below. Do not add extra sections or list items outside the intro and slides.'
56
+ : directive.formatting;
50
57
  const presetLengthLine = typeof effectiveSummaryLength === 'string' ? formatPresetLengthGuidance(preset) : '';
51
58
  const needsHeadings = preset === 'xl' ||
52
59
  preset === 'xxl' ||
53
60
  (typeof effectiveSummaryLength !== 'string' &&
54
61
  effectiveSummaryLength.maxCharacters >= HEADING_LENGTH_CHAR_THRESHOLD);
55
- const headingInstruction = needsHeadings
56
- ? 'Use Markdown headings with the "### " prefix to break sections. Include at least 3 headings and start with a heading. Do not use bold for headings.'
57
- : '';
62
+ const headingInstruction = slides && slides.count > 0
63
+ ? 'Do not create a dedicated Slides section or list.'
64
+ : needsHeadings
65
+ ? 'Use Markdown headings with the "### " prefix to break sections. Include at least 3 headings and start with a heading. Do not use bold for headings.'
66
+ : '';
58
67
  const maxCharactersLine = typeof effectiveSummaryLength === 'string'
59
68
  ? ''
60
69
  : `Target length: up to ${formatCount(effectiveSummaryLength.maxCharacters)} characters total (including Markdown and whitespace). Hard limit: do not exceed it.`;
@@ -81,10 +90,46 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
81
90
  ? 'You are also given quotes from people who recently shared this link. When these quotes contain substantive commentary, append a brief subsection titled "What sharers are saying" with one or two bullet points summarizing the key reactions. If they are generic reshares with no commentary, omit that subsection.'
82
91
  : 'You are not given any quotes from people who shared this link. Do not fabricate reactions or add a "What sharers are saying" subsection.';
83
92
  const shareBlock = shares.length > 0 ? `Tweets from sharers:\n${shareLines.join('\n')}` : '';
93
+ const timestampInstruction = hasTranscriptTimestamps && !(slides && slides.count > 0)
94
+ ? 'Add a "Key moments" section with 3-6 bullets (2-4 if the summary is short). Start each bullet with a [mm:ss] (or [hh:mm:ss]) timestamp from the transcript. Keep the rest of the summary readable and follow the normal formatting guidance; do not prepend timestamps outside the Key moments section. Do not invent timestamps or use ranges.'
95
+ : '';
96
+ const slideMarkers = slides && slides.count > 0
97
+ ? Array.from({ length: slides.count }, (_, index) => `[slide:${index + 1}]`).join(' ')
98
+ : '';
99
+ const slideTemplate = slides && slides.count > 0
100
+ ? [
101
+ 'Slide format example (follow this pattern; markers on their own lines):',
102
+ 'Intro paragraph.',
103
+ '[slide:1]',
104
+ '## Example headline',
105
+ 'Example sentence.',
106
+ '[slide:2]',
107
+ '## Example headline',
108
+ 'Example sentence.',
109
+ ].join('\n')
110
+ : '';
111
+ const slideInstruction = slides && slides.count > 0
112
+ ? [
113
+ slideTemplate,
114
+ 'Repeat the 3-line slide block for every marker below, in order.',
115
+ 'Every slide must include a headline line that starts with "## ".',
116
+ 'If there is no obvious title, create a short 2-6 word headline from the slide content.',
117
+ 'Never output "Title:" or "Slide 1/10".',
118
+ `Required markers (use each exactly once, in order): ${slideMarkers}`,
119
+ ].join('\n')
120
+ : '';
121
+ const listGuidanceLine = 'Use short paragraphs; use bullet lists only when they improve scanability; avoid rigid templates.';
122
+ const quoteGuidanceLine = 'Include 1-2 short exact excerpts (max 25 words each) formatted as Markdown italics using single asterisks when there is a strong, non-sponsor line. Use straight quotation marks (no curly) as needed. If no suitable line exists, omit excerpts. Never include ad/sponsor/boilerplate excerpts and do not mention them.';
123
+ const sponsorInstruction = hasTranscript || (slides && slides.count > 0)
124
+ ? 'Omit sponsor messages, ads, promos, and calls-to-action (including podcast ad reads), even if they appear in the transcript or slide timeline. Do not mention or acknowledge them, and do not say you skipped or ignored anything. Avoid sponsor/ad/promo language, brand names like Squarespace, or CTA phrases like discount code. Treat them as if they do not exist. If a slide segment is purely sponsor/ad content, leave that slide marker with no text.'
125
+ : '';
84
126
  const baseInstructions = [
127
+ 'Hard rules: never mention sponsor/ads; use straight quotation marks only (no curly quotes).',
128
+ 'Apostrophes in contractions are OK.',
85
129
  audienceLine,
130
+ sponsorInstruction,
86
131
  directive.guidance,
87
- directive.formatting,
132
+ formattingLine,
88
133
  headingInstruction,
89
134
  presetLengthLine,
90
135
  maxCharactersLine,
@@ -94,9 +139,14 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
94
139
  'Do not use emojis, disclaimers, or speculation.',
95
140
  'Write in direct, factual language.',
96
141
  'Format the answer in Markdown and obey the length-specific formatting above.',
97
- 'Use short paragraphs; use bullet lists only when they improve scanability; avoid rigid templates.',
142
+ listGuidanceLine,
143
+ quoteGuidanceLine,
98
144
  'Base everything strictly on the provided content and never invent details.',
145
+ 'Final check: remove any sponsor/ad references or mentions of skipping/ignoring content. Ensure excerpts (if any) are italicized and use only straight quotes.',
146
+ 'Final check for slides: every [slide:N] must be immediately followed by a line that starts with "## ". Remove any "Title:" or "Slide" label lines.',
147
+ timestampInstruction,
99
148
  shareGuidance,
149
+ slideInstruction,
100
150
  ]
101
151
  .filter((line) => typeof line === 'string' && line.trim().length > 0)
102
152
  .join('\n');
@@ -110,7 +160,7 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
110
160
  return buildTaggedPrompt({
111
161
  instructions,
112
162
  context,
113
- content,
163
+ content: contentWithSlides,
114
164
  });
115
165
  }
116
166
  //# sourceMappingURL=link-summary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link-summary.js","sourceRoot":"","sources":["../../../src/prompts/link-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link-summary.js","sourceRoot":"","sources":["../../../src/prompts/link-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const SUMMARY_SYSTEM_PROMPT = [
2
+ 'You are a precise summarization engine.',
3
+ 'Follow the user instructions in <instructions> exactly.',
4
+ 'Never mention sponsors/ads/promos or that they were skipped or ignored.',
5
+ 'Do not output sponsor/ad/promo language or brand names (for example Squarespace) or CTA phrases (for example discount code).',
6
+ 'If the instructions include [slide:N] markers, you must output those markers exactly on their own lines and never output "Slide X" / "Slide X/Y" label lines.',
7
+ 'Never output the literal strings "Title:" or "Headline:" anywhere; use Markdown heading syntax (## Heading) instead.',
8
+ 'Quotation marks are allowed; use straight quotes only (no curly quotes).',
9
+ 'If you include exact excerpts, italicize them in Markdown using single asterisks.',
10
+ 'Include 1-2 short exact excerpts (max 25 words each) when the content provides a strong, non-sponsor line.',
11
+ 'Never include ad/sponsor/boilerplate excerpts.',
12
+ ].join('\n');
13
+ //# sourceMappingURL=summary-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-system.js","sourceRoot":"","sources":["../../../src/prompts/summary-system.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,yCAAyC;IACzC,yDAAyD;IACzD,yEAAyE;IACzE,8HAA8H;IAC9H,+JAA+J;IAC/J,sHAAsH;IACtH,0EAA0E;IAC1E,mFAAmF;IACnF,4GAA4G;IAC5G,gDAAgD;CACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA"}