@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.
Files changed (284) hide show
  1. package/CHANGELOG.md +114 -1
  2. package/LICENSE +1 -1
  3. package/README.md +309 -182
  4. package/dist/cli.js +1 -1
  5. package/dist/esm/cache.js +72 -4
  6. package/dist/esm/cache.js.map +1 -1
  7. package/dist/esm/config.js +197 -1
  8. package/dist/esm/config.js.map +1 -1
  9. package/dist/esm/content/asset.js +75 -2
  10. package/dist/esm/content/asset.js.map +1 -1
  11. package/dist/esm/daemon/agent.js +547 -0
  12. package/dist/esm/daemon/agent.js.map +1 -0
  13. package/dist/esm/daemon/chat.js +97 -0
  14. package/dist/esm/daemon/chat.js.map +1 -0
  15. package/dist/esm/daemon/cli.js +105 -10
  16. package/dist/esm/daemon/cli.js.map +1 -1
  17. package/dist/esm/daemon/env-snapshot.js +3 -0
  18. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  19. package/dist/esm/daemon/flow-context.js +53 -28
  20. package/dist/esm/daemon/flow-context.js.map +1 -1
  21. package/dist/esm/daemon/launchd.js +27 -0
  22. package/dist/esm/daemon/launchd.js.map +1 -1
  23. package/dist/esm/daemon/process-registry.js +206 -0
  24. package/dist/esm/daemon/process-registry.js.map +1 -0
  25. package/dist/esm/daemon/schtasks.js +64 -0
  26. package/dist/esm/daemon/schtasks.js.map +1 -1
  27. package/dist/esm/daemon/server.js +1034 -52
  28. package/dist/esm/daemon/server.js.map +1 -1
  29. package/dist/esm/daemon/summarize.js +66 -18
  30. package/dist/esm/daemon/summarize.js.map +1 -1
  31. package/dist/esm/daemon/systemd.js +61 -0
  32. package/dist/esm/daemon/systemd.js.map +1 -1
  33. package/dist/esm/flags.js +24 -0
  34. package/dist/esm/flags.js.map +1 -1
  35. package/dist/esm/llm/attachments.js +2 -0
  36. package/dist/esm/llm/attachments.js.map +1 -0
  37. package/dist/esm/llm/errors.js +6 -0
  38. package/dist/esm/llm/errors.js.map +1 -0
  39. package/dist/esm/llm/generate-text.js +206 -356
  40. package/dist/esm/llm/generate-text.js.map +1 -1
  41. package/dist/esm/llm/html-to-markdown.js +1 -2
  42. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  43. package/dist/esm/llm/prompt.js.map +1 -1
  44. package/dist/esm/llm/providers/anthropic.js +126 -0
  45. package/dist/esm/llm/providers/anthropic.js.map +1 -0
  46. package/dist/esm/llm/providers/google.js +78 -0
  47. package/dist/esm/llm/providers/google.js.map +1 -0
  48. package/dist/esm/llm/providers/models.js +111 -0
  49. package/dist/esm/llm/providers/models.js.map +1 -0
  50. package/dist/esm/llm/providers/openai.js +150 -0
  51. package/dist/esm/llm/providers/openai.js.map +1 -0
  52. package/dist/esm/llm/providers/shared.js +48 -0
  53. package/dist/esm/llm/providers/shared.js.map +1 -0
  54. package/dist/esm/llm/providers/types.js +2 -0
  55. package/dist/esm/llm/providers/types.js.map +1 -0
  56. package/dist/esm/llm/transcript-to-markdown.js +1 -2
  57. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  58. package/dist/esm/llm/types.js +2 -0
  59. package/dist/esm/llm/types.js.map +1 -0
  60. package/dist/esm/llm/usage.js +69 -0
  61. package/dist/esm/llm/usage.js.map +1 -0
  62. package/dist/esm/logging/daemon.js +124 -0
  63. package/dist/esm/logging/daemon.js.map +1 -0
  64. package/dist/esm/logging/ring-file.js +66 -0
  65. package/dist/esm/logging/ring-file.js.map +1 -0
  66. package/dist/esm/media-cache.js +251 -0
  67. package/dist/esm/media-cache.js.map +1 -0
  68. package/dist/esm/model-auto.js +103 -5
  69. package/dist/esm/model-auto.js.map +1 -1
  70. package/dist/esm/processes.js +2 -0
  71. package/dist/esm/processes.js.map +1 -0
  72. package/dist/esm/refresh-free.js +3 -3
  73. package/dist/esm/refresh-free.js.map +1 -1
  74. package/dist/esm/run/attachments.js +8 -4
  75. package/dist/esm/run/attachments.js.map +1 -1
  76. package/dist/esm/run/bird.js +118 -5
  77. package/dist/esm/run/bird.js.map +1 -1
  78. package/dist/esm/run/cache-state.js +3 -2
  79. package/dist/esm/run/cache-state.js.map +1 -1
  80. package/dist/esm/run/cli-preflight.js +19 -1
  81. package/dist/esm/run/cli-preflight.js.map +1 -1
  82. package/dist/esm/run/constants.js +0 -7
  83. package/dist/esm/run/constants.js.map +1 -1
  84. package/dist/esm/run/finish-line.js +58 -11
  85. package/dist/esm/run/finish-line.js.map +1 -1
  86. package/dist/esm/run/flows/asset/extract.js +70 -0
  87. package/dist/esm/run/flows/asset/extract.js.map +1 -0
  88. package/dist/esm/run/flows/asset/input.js +209 -25
  89. package/dist/esm/run/flows/asset/input.js.map +1 -1
  90. package/dist/esm/run/flows/asset/media-policy.js +3 -0
  91. package/dist/esm/run/flows/asset/media-policy.js.map +1 -0
  92. package/dist/esm/run/flows/asset/media.js +224 -0
  93. package/dist/esm/run/flows/asset/media.js.map +1 -0
  94. package/dist/esm/run/flows/asset/output.js +98 -0
  95. package/dist/esm/run/flows/asset/output.js.map +1 -0
  96. package/dist/esm/run/flows/asset/preprocess.js +92 -16
  97. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  98. package/dist/esm/run/flows/asset/summary.js +165 -11
  99. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  100. package/dist/esm/run/flows/url/extract.js +6 -6
  101. package/dist/esm/run/flows/url/extract.js.map +1 -1
  102. package/dist/esm/run/flows/url/flow.js +338 -36
  103. package/dist/esm/run/flows/url/flow.js.map +1 -1
  104. package/dist/esm/run/flows/url/markdown.js +6 -1
  105. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  106. package/dist/esm/run/flows/url/slides-output.js +485 -0
  107. package/dist/esm/run/flows/url/slides-output.js.map +1 -0
  108. package/dist/esm/run/flows/url/slides-text.js +628 -0
  109. package/dist/esm/run/flows/url/slides-text.js.map +1 -0
  110. package/dist/esm/run/flows/url/summary.js +358 -83
  111. package/dist/esm/run/flows/url/summary.js.map +1 -1
  112. package/dist/esm/run/help.js +94 -5
  113. package/dist/esm/run/help.js.map +1 -1
  114. package/dist/esm/run/logging.js +12 -4
  115. package/dist/esm/run/logging.js.map +1 -1
  116. package/dist/esm/run/media-cache-state.js +33 -0
  117. package/dist/esm/run/media-cache-state.js.map +1 -0
  118. package/dist/esm/run/progress.js +19 -1
  119. package/dist/esm/run/progress.js.map +1 -1
  120. package/dist/esm/run/run-context.js +19 -0
  121. package/dist/esm/run/run-context.js.map +1 -0
  122. package/dist/esm/run/run-output.js +1 -1
  123. package/dist/esm/run/run-output.js.map +1 -1
  124. package/dist/esm/run/run-settings.js +182 -0
  125. package/dist/esm/run/run-settings.js.map +1 -0
  126. package/dist/esm/run/runner.js +225 -32
  127. package/dist/esm/run/runner.js.map +1 -1
  128. package/dist/esm/run/slides-cli.js +225 -0
  129. package/dist/esm/run/slides-cli.js.map +1 -0
  130. package/dist/esm/run/slides-render.js +163 -0
  131. package/dist/esm/run/slides-render.js.map +1 -0
  132. package/dist/esm/run/stream-output.js +63 -0
  133. package/dist/esm/run/stream-output.js.map +1 -0
  134. package/dist/esm/run/streaming.js +16 -43
  135. package/dist/esm/run/streaming.js.map +1 -1
  136. package/dist/esm/run/summary-engine.js +59 -41
  137. package/dist/esm/run/summary-engine.js.map +1 -1
  138. package/dist/esm/run/transcriber-cli.js +148 -0
  139. package/dist/esm/run/transcriber-cli.js.map +1 -0
  140. package/dist/esm/shared/sse-events.js +26 -0
  141. package/dist/esm/shared/sse-events.js.map +1 -0
  142. package/dist/esm/shared/streaming-merge.js +44 -0
  143. package/dist/esm/shared/streaming-merge.js.map +1 -0
  144. package/dist/esm/slides/extract.js +1942 -0
  145. package/dist/esm/slides/extract.js.map +1 -0
  146. package/dist/esm/slides/index.js +4 -0
  147. package/dist/esm/slides/index.js.map +1 -0
  148. package/dist/esm/slides/settings.js +73 -0
  149. package/dist/esm/slides/settings.js.map +1 -0
  150. package/dist/esm/slides/store.js +111 -0
  151. package/dist/esm/slides/store.js.map +1 -0
  152. package/dist/esm/slides/types.js +2 -0
  153. package/dist/esm/slides/types.js.map +1 -0
  154. package/dist/esm/tty/osc-progress.js +21 -1
  155. package/dist/esm/tty/osc-progress.js.map +1 -1
  156. package/dist/esm/tty/progress/fetch-html.js +8 -4
  157. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  158. package/dist/esm/tty/progress/transcript.js +82 -31
  159. package/dist/esm/tty/progress/transcript.js.map +1 -1
  160. package/dist/esm/tty/spinner.js +2 -2
  161. package/dist/esm/tty/spinner.js.map +1 -1
  162. package/dist/esm/tty/theme.js +189 -0
  163. package/dist/esm/tty/theme.js.map +1 -0
  164. package/dist/esm/tty/website-progress.js +17 -13
  165. package/dist/esm/tty/website-progress.js.map +1 -1
  166. package/dist/esm/version.js +1 -1
  167. package/dist/esm/version.js.map +1 -1
  168. package/dist/types/cache.d.ts +14 -2
  169. package/dist/types/config.d.ts +34 -0
  170. package/dist/types/daemon/agent.d.ts +25 -0
  171. package/dist/types/daemon/chat.d.ts +27 -0
  172. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  173. package/dist/types/daemon/flow-context.d.ts +24 -3
  174. package/dist/types/daemon/launchd.d.ts +4 -0
  175. package/dist/types/daemon/process-registry.d.ts +73 -0
  176. package/dist/types/daemon/schtasks.d.ts +4 -0
  177. package/dist/types/daemon/server.d.ts +7 -1
  178. package/dist/types/daemon/summarize.d.ts +47 -5
  179. package/dist/types/daemon/systemd.d.ts +4 -0
  180. package/dist/types/flags.d.ts +1 -0
  181. package/dist/types/llm/attachments.d.ts +6 -0
  182. package/dist/types/llm/errors.d.ts +1 -0
  183. package/dist/types/llm/generate-text.d.ts +29 -13
  184. package/dist/types/llm/prompt.d.ts +7 -2
  185. package/dist/types/llm/providers/anthropic.d.ts +30 -0
  186. package/dist/types/llm/providers/google.d.ts +29 -0
  187. package/dist/types/llm/providers/models.d.ts +27 -0
  188. package/dist/types/llm/providers/openai.d.ts +38 -0
  189. package/dist/types/llm/providers/shared.d.ts +14 -0
  190. package/dist/types/llm/providers/types.d.ts +6 -0
  191. package/dist/types/llm/types.d.ts +5 -0
  192. package/dist/types/llm/usage.d.ts +5 -0
  193. package/dist/types/logging/daemon.d.ts +26 -0
  194. package/dist/types/logging/ring-file.d.ts +10 -0
  195. package/dist/types/media-cache.d.ts +22 -0
  196. package/dist/types/model-auto.d.ts +1 -0
  197. package/dist/types/processes.d.ts +1 -0
  198. package/dist/types/run/attachments.d.ts +9 -6
  199. package/dist/types/run/bird.d.ts +7 -0
  200. package/dist/types/run/constants.d.ts +0 -2
  201. package/dist/types/run/finish-line.d.ts +59 -1
  202. package/dist/types/run/flows/asset/extract.d.ts +18 -0
  203. package/dist/types/run/flows/asset/input.d.ts +12 -2
  204. package/dist/types/run/flows/asset/media-policy.d.ts +2 -0
  205. package/dist/types/run/flows/asset/media.d.ts +21 -0
  206. package/dist/types/run/flows/asset/output.d.ts +42 -0
  207. package/dist/types/run/flows/asset/preprocess.d.ts +22 -2
  208. package/dist/types/run/flows/asset/summary.d.ts +6 -0
  209. package/dist/types/run/flows/url/extract.d.ts +2 -1
  210. package/dist/types/run/flows/url/slides-output.d.ts +66 -0
  211. package/dist/types/run/flows/url/slides-text.d.ts +87 -0
  212. package/dist/types/run/flows/url/summary.d.ts +11 -3
  213. package/dist/types/run/flows/url/types.d.ts +29 -2
  214. package/dist/types/run/help.d.ts +3 -0
  215. package/dist/types/run/logging.d.ts +3 -2
  216. package/dist/types/run/media-cache-state.d.ts +7 -0
  217. package/dist/types/run/progress.d.ts +2 -1
  218. package/dist/types/run/run-context.d.ts +44 -0
  219. package/dist/types/run/run-settings.d.ts +62 -0
  220. package/dist/types/run/slides-cli.d.ts +9 -0
  221. package/dist/types/run/slides-render.d.ts +30 -0
  222. package/dist/types/run/stream-output.d.ts +12 -0
  223. package/dist/types/run/streaming.d.ts +10 -4
  224. package/dist/types/run/summary-engine.d.ts +15 -3
  225. package/dist/types/run/summary-llm.d.ts +2 -2
  226. package/dist/types/run/transcriber-cli.d.ts +8 -0
  227. package/dist/types/shared/sse-events.d.ts +64 -0
  228. package/dist/types/shared/streaming-merge.d.ts +4 -0
  229. package/dist/types/slides/extract.d.ts +42 -0
  230. package/dist/types/slides/index.d.ts +5 -0
  231. package/dist/types/slides/settings.d.ts +20 -0
  232. package/dist/types/slides/store.d.ts +15 -0
  233. package/dist/types/slides/types.d.ts +40 -0
  234. package/dist/types/tty/osc-progress.d.ts +2 -2
  235. package/dist/types/tty/progress/fetch-html.d.ts +3 -1
  236. package/dist/types/tty/progress/transcript.d.ts +3 -1
  237. package/dist/types/tty/spinner.d.ts +3 -1
  238. package/dist/types/tty/theme.d.ts +44 -0
  239. package/dist/types/tty/website-progress.d.ts +3 -1
  240. package/dist/types/version.d.ts +1 -1
  241. package/docs/README.md +13 -8
  242. package/docs/_config.yml +26 -0
  243. package/docs/_layouts/default.html +60 -0
  244. package/docs/agent.md +333 -0
  245. package/docs/assets/site.css +748 -0
  246. package/docs/assets/site.js +72 -0
  247. package/docs/assets/summarize-cli.png +0 -0
  248. package/docs/assets/summarize-extension.png +0 -0
  249. package/docs/assets/youtube-slides.png +0 -0
  250. package/docs/cache.md +29 -3
  251. package/docs/chrome-extension.md +85 -7
  252. package/docs/config.md +74 -2
  253. package/docs/extract-only.md +10 -2
  254. package/docs/index.html +205 -0
  255. package/docs/index.md +25 -0
  256. package/docs/language.md +1 -1
  257. package/docs/llm.md +17 -1
  258. package/docs/manual-tests.md +2 -0
  259. package/docs/media.md +37 -0
  260. package/docs/model-auto.md +2 -1
  261. package/docs/nvidia-onnx-transcription.md +55 -0
  262. package/docs/openai.md +5 -0
  263. package/docs/releasing.md +26 -0
  264. package/docs/site/assets/site.css +399 -228
  265. package/docs/site/assets/summarize-cli.png +0 -0
  266. package/docs/site/assets/summarize-extension.png +0 -0
  267. package/docs/site/docs/chrome-extension.html +89 -0
  268. package/docs/site/docs/config.html +1 -0
  269. package/docs/site/docs/extract-only.html +1 -0
  270. package/docs/site/docs/firecrawl.html +1 -0
  271. package/docs/site/docs/index.html +5 -0
  272. package/docs/site/docs/llm.html +1 -0
  273. package/docs/site/docs/openai.html +1 -0
  274. package/docs/site/docs/website.html +1 -0
  275. package/docs/site/docs/youtube.html +1 -0
  276. package/docs/site/index.html +148 -84
  277. package/docs/slides.md +74 -0
  278. package/docs/timestamps.md +103 -0
  279. package/docs/website.md +13 -0
  280. package/docs/youtube.md +16 -0
  281. package/package.json +22 -18
  282. package/dist/esm/daemon/request-settings.js +0 -91
  283. package/dist/esm/daemon/request-settings.js.map +0 -1
  284. package/dist/types/daemon/request-settings.d.ts +0 -27
@@ -1,7 +1,7 @@
1
1
  import type { TranscriptCache } from './content/index.js';
2
2
  import type { LengthArg } from './flags.js';
3
3
  import type { OutputLanguage } from './language.js';
4
- export type CacheKind = 'extract' | 'summary' | 'transcript';
4
+ export type CacheKind = 'extract' | 'summary' | 'transcript' | 'chat' | 'slides';
5
5
  export type CacheConfig = {
6
6
  enabled?: boolean;
7
7
  maxMb?: number;
@@ -61,10 +61,22 @@ export declare function buildSummaryCacheKey({ contentHash, promptHash, model, l
61
61
  lengthKey: string;
62
62
  languageKey: string;
63
63
  }): string;
64
- export declare function buildTranscriptCacheKey({ url, namespace, formatVersion, }: {
64
+ export declare function buildSlidesCacheKey({ url, settings, }: {
65
+ url: string;
66
+ settings: {
67
+ ocr: boolean;
68
+ outputDir: string;
69
+ sceneThreshold: number;
70
+ autoTuneThreshold: boolean;
71
+ maxSlides: number;
72
+ minDurationSeconds: number;
73
+ };
74
+ }): string;
75
+ export declare function buildTranscriptCacheKey({ url, namespace, formatVersion, fileMtime, }: {
65
76
  url: string;
66
77
  namespace: string | null;
67
78
  formatVersion?: number;
79
+ fileMtime?: number | null;
68
80
  }): string;
69
81
  export declare function readCacheStats(path: string): Promise<CacheStats | null>;
70
82
  export declare function getSqliteFileSizeBytes(path: string): number;
@@ -27,6 +27,14 @@ export type OpenAiConfig = {
27
27
  */
28
28
  whisperUsdPerMinute?: number;
29
29
  };
30
+ export type MediaCacheVerifyMode = 'none' | 'size' | 'hash';
31
+ export type MediaCacheConfig = {
32
+ enabled?: boolean;
33
+ maxMb?: number;
34
+ ttlDays?: number;
35
+ path?: string;
36
+ verify?: MediaCacheVerifyMode;
37
+ };
30
38
  export type AnthropicConfig = {
31
39
  /**
32
40
  * Override the Anthropic API base URL (e.g. a proxy).
@@ -43,6 +51,16 @@ export type GoogleConfig = {
43
51
  */
44
52
  baseUrl?: string;
45
53
  };
54
+ export type LoggingLevel = 'debug' | 'info' | 'warn' | 'error';
55
+ export type LoggingFormat = 'json' | 'pretty';
56
+ export type LoggingConfig = {
57
+ enabled?: boolean;
58
+ level?: LoggingLevel;
59
+ format?: LoggingFormat;
60
+ file?: string;
61
+ maxMb?: number;
62
+ maxFiles?: number;
63
+ };
46
64
  export type XaiConfig = {
47
65
  /**
48
66
  * Override the xAI API base URL (e.g. a proxy).
@@ -106,6 +124,7 @@ export type SummarizeConfig = {
106
124
  maxMb?: number;
107
125
  ttlDays?: number;
108
126
  path?: string;
127
+ media?: MediaCacheConfig;
109
128
  };
110
129
  /**
111
130
  * Named model presets selectable via `--model <name>`.
@@ -116,6 +135,14 @@ export type SummarizeConfig = {
116
135
  media?: {
117
136
  videoMode?: VideoMode;
118
137
  };
138
+ slides?: {
139
+ enabled?: boolean;
140
+ ocr?: boolean;
141
+ dir?: string;
142
+ sceneThreshold?: number;
143
+ max?: number;
144
+ minDuration?: number;
145
+ };
119
146
  output?: {
120
147
  /**
121
148
  * Output language for the summary (e.g. "auto", "en", "de", "English").
@@ -125,11 +152,18 @@ export type SummarizeConfig = {
125
152
  */
126
153
  language?: string;
127
154
  };
155
+ ui?: {
156
+ /**
157
+ * CLI theme name (e.g. "aurora", "ember", "moss", "mono").
158
+ */
159
+ theme?: string;
160
+ };
128
161
  cli?: CliConfig;
129
162
  openai?: OpenAiConfig;
130
163
  anthropic?: AnthropicConfig;
131
164
  google?: GoogleConfig;
132
165
  xai?: XaiConfig;
166
+ logging?: LoggingConfig;
133
167
  };
134
168
  export declare function loadSummarizeConfig({ env }: {
135
169
  env: Record<string, string | undefined>;
@@ -0,0 +1,25 @@
1
+ import type { AssistantMessage } from '@mariozechner/pi-ai';
2
+ export declare function buildAgentPromptHash(automationEnabled: boolean): string;
3
+ export declare function streamAgentResponse({ env, pageUrl, pageTitle, pageContent, messages, modelOverride, tools, automationEnabled, onChunk, onAssistant, signal, }: {
4
+ env: Record<string, string | undefined>;
5
+ pageUrl: string;
6
+ pageTitle: string | null;
7
+ pageContent: string;
8
+ messages: unknown;
9
+ modelOverride: string | null;
10
+ tools: string[];
11
+ automationEnabled: boolean;
12
+ onChunk: (text: string) => void;
13
+ onAssistant: (assistant: AssistantMessage) => void;
14
+ signal?: AbortSignal;
15
+ }): Promise<void>;
16
+ export declare function completeAgentResponse({ env, pageUrl, pageTitle, pageContent, messages, modelOverride, tools, automationEnabled, }: {
17
+ env: Record<string, string | undefined>;
18
+ pageUrl: string;
19
+ pageTitle: string | null;
20
+ pageContent: string;
21
+ messages: unknown;
22
+ modelOverride: string | null;
23
+ tools: string[];
24
+ automationEnabled: boolean;
25
+ }): Promise<AssistantMessage>;
@@ -0,0 +1,27 @@
1
+ import type { Message } from '@mariozechner/pi-ai';
2
+ type ChatSession = {
3
+ id: string;
4
+ lastMeta: {
5
+ model: string | null;
6
+ modelLabel: string | null;
7
+ inputSummary: string | null;
8
+ summaryFromCache: boolean | null;
9
+ };
10
+ };
11
+ type ChatEvent = {
12
+ event: string;
13
+ data?: unknown;
14
+ };
15
+ export declare function streamChatResponse({ env, fetchImpl, session: _session, pageUrl, pageTitle, pageContent, messages, modelOverride, pushToSession, emitMeta, }: {
16
+ env: Record<string, string | undefined>;
17
+ fetchImpl: typeof fetch;
18
+ session: ChatSession;
19
+ pageUrl: string;
20
+ pageTitle: string | null;
21
+ pageContent: string;
22
+ messages: Message[];
23
+ modelOverride: string | null;
24
+ pushToSession: (event: ChatEvent) => void;
25
+ emitMeta: (patch: Partial<ChatSession['lastMeta']>) => void;
26
+ }): Promise<void>;
27
+ export {};
@@ -1,4 +1,4 @@
1
- declare const ENV_KEYS: readonly ["PATH", "XAI_API_KEY", "XAI_BASE_URL", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENROUTER_API_KEY", "OPENAI_USE_CHAT_COMPLETIONS", "Z_AI_API_KEY", "ZAI_API_KEY", "Z_AI_BASE_URL", "ZAI_BASE_URL", "GEMINI_API_KEY", "GOOGLE_BASE_URL", "GEMINI_BASE_URL", "GOOGLE_GENERATIVE_AI_API_KEY", "GOOGLE_API_KEY", "ANTHROPIC_API_KEY", "ANTHROPIC_BASE_URL", "FIRECRAWL_API_KEY", "APIFY_API_TOKEN", "YT_DLP_PATH", "FAL_KEY", "SUMMARIZE_MODEL", "CLAUDE_PATH", "CODEX_PATH", "GEMINI_PATH", "UVX_PATH"];
1
+ declare const ENV_KEYS: readonly ["PATH", "XAI_API_KEY", "XAI_BASE_URL", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENROUTER_API_KEY", "OPENAI_USE_CHAT_COMPLETIONS", "Z_AI_API_KEY", "ZAI_API_KEY", "Z_AI_BASE_URL", "ZAI_BASE_URL", "GEMINI_API_KEY", "GOOGLE_BASE_URL", "GEMINI_BASE_URL", "GOOGLE_GENERATIVE_AI_API_KEY", "GOOGLE_API_KEY", "ANTHROPIC_API_KEY", "ANTHROPIC_BASE_URL", "FIRECRAWL_API_KEY", "APIFY_API_TOKEN", "YT_DLP_PATH", "FAL_KEY", "SUMMARIZE_MODEL", "SUMMARIZE_TRANSCRIBER", "SUMMARIZE_ONNX_PARAKEET_CMD", "SUMMARIZE_ONNX_CANARY_CMD", "CLAUDE_PATH", "CODEX_PATH", "GEMINI_PATH", "UVX_PATH"];
2
2
  export type EnvSnapshot = Partial<Record<(typeof ENV_KEYS)[number], string>>;
3
3
  export declare function buildEnvSnapshotFromEnv(env: Record<string, string | undefined>): EnvSnapshot;
4
4
  export {};
@@ -1,7 +1,8 @@
1
1
  import type { CacheState } from '../cache.js';
2
- import type { ExtractedLinkContent, LinkPreviewProgressEvent } from '../content/index.js';
2
+ import type { ExtractedLinkContent, LinkPreviewProgressEvent, MediaCache } from '../content/index.js';
3
3
  import type { UrlFlowContext } from '../run/flows/url/types.js';
4
- import { type DaemonRunOverrides } from './request-settings.js';
4
+ import { type RunOverrides } from '../run/run-settings.js';
5
+ import type { SlideImage, SlideSettings, SlideSourceKind } from '../slides/index.js';
5
6
  type TextSink = {
6
7
  writeChunk: (text: string) => void;
7
8
  };
@@ -9,15 +10,35 @@ export type DaemonUrlFlowContextArgs = {
9
10
  env: Record<string, string | undefined>;
10
11
  fetchImpl: typeof fetch;
11
12
  cache: CacheState;
13
+ mediaCache?: MediaCache | null;
12
14
  modelOverride: string | null;
13
15
  promptOverride: string | null;
14
16
  lengthRaw: unknown;
15
17
  languageRaw: unknown;
16
18
  maxExtractCharacters: number | null;
17
- overrides?: DaemonRunOverrides | null;
19
+ format?: 'text' | 'markdown';
20
+ overrides?: RunOverrides | null;
21
+ extractOnly?: boolean;
22
+ slides?: SlideSettings | null;
18
23
  hooks?: {
19
24
  onModelChosen?: ((modelId: string) => void) | null;
20
25
  onExtracted?: ((extracted: ExtractedLinkContent) => void) | null;
26
+ onSlidesExtracted?: ((slides: Awaited<ReturnType<typeof import('../slides/index.js').extractSlidesForSource>>) => void) | null;
27
+ onSlidesProgress?: ((text: string) => void) | null;
28
+ onSlidesDone?: ((result: {
29
+ ok: boolean;
30
+ error?: string | null;
31
+ }) => void) | null;
32
+ onSlideChunk?: (chunk: {
33
+ slide: SlideImage;
34
+ meta: {
35
+ slidesDir: string;
36
+ sourceUrl: string;
37
+ sourceId: string;
38
+ sourceKind: SlideSourceKind;
39
+ ocrAvailable: boolean;
40
+ };
41
+ }) => void;
21
42
  onLinkPreviewProgress?: ((event: LinkPreviewProgressEvent) => void) | null;
22
43
  onSummaryCached?: ((cached: boolean) => void) | null;
23
44
  } | null;
@@ -4,6 +4,10 @@ export declare function resolveDaemonLogPaths(env: Record<string, string | undef
4
4
  stdoutPath: string;
5
5
  stderrPath: string;
6
6
  };
7
+ export declare function readLaunchAgentProgramArguments(env: Record<string, string | undefined>): Promise<{
8
+ programArguments: string[];
9
+ workingDirectory?: string;
10
+ } | null>;
7
11
  export declare function buildLaunchAgentPlist({ label, programArguments, workingDirectory, stdoutPath, stderrPath, }: {
8
12
  label?: string;
9
13
  programArguments: string[];
@@ -0,0 +1,73 @@
1
+ import type { ProcessObserver } from '@steipete/summarize-core/processes';
2
+ type ProcessStatus = 'running' | 'exited' | 'error';
3
+ type OutputLine = {
4
+ stream: 'stdout' | 'stderr';
5
+ line: string;
6
+ };
7
+ type ProcessListItem = {
8
+ id: string;
9
+ label: string | null;
10
+ kind: string | null;
11
+ command: string;
12
+ args: string[];
13
+ runId: string | null;
14
+ source: string | null;
15
+ pid: number | null;
16
+ status: ProcessStatus;
17
+ exitCode: number | null;
18
+ signal: string | null;
19
+ error: string | null;
20
+ startedAt: number;
21
+ endedAt: number | null;
22
+ elapsedMs: number;
23
+ progressPercent: number | null;
24
+ progressDetail: string | null;
25
+ statusText: string | null;
26
+ lastLine: string | null;
27
+ };
28
+ type ProcessLogResult = {
29
+ ok: true;
30
+ id: string;
31
+ lines: OutputLine[];
32
+ truncated: boolean;
33
+ };
34
+ type ProcessListResult = {
35
+ ok: true;
36
+ nowMs: number;
37
+ processes: ProcessListItem[];
38
+ };
39
+ type RegistryOptions = {
40
+ maxRecords?: number;
41
+ maxLines?: number;
42
+ maxLineLength?: number;
43
+ retentionMs?: number;
44
+ };
45
+ export declare class ProcessRegistry {
46
+ private readonly maxRecords;
47
+ private readonly maxLines;
48
+ private readonly maxLineLength;
49
+ private readonly retentionMs;
50
+ private readonly records;
51
+ private readonly order;
52
+ constructor(options?: RegistryOptions);
53
+ createObserver(): ProcessObserver;
54
+ list(opts?: {
55
+ includeCompleted?: boolean;
56
+ limit?: number;
57
+ }): ProcessListResult;
58
+ getLogs(id: string, opts?: {
59
+ tail?: number;
60
+ stream?: 'stdout' | 'stderr' | 'merged';
61
+ }): ProcessLogResult | null;
62
+ private register;
63
+ private prune;
64
+ }
65
+ export declare function buildProcessListResult(registry: ProcessRegistry, opts?: {
66
+ includeCompleted?: boolean;
67
+ limit?: number;
68
+ }): ProcessListResult;
69
+ export declare function buildProcessLogsResult(registry: ProcessRegistry, id: string, opts?: {
70
+ tail?: number;
71
+ stream?: 'stdout' | 'stderr' | 'merged';
72
+ }): ProcessLogResult | null;
73
+ export {};
@@ -1,3 +1,7 @@
1
+ export declare function readScheduledTaskCommand(env: Record<string, string | undefined>): Promise<{
2
+ programArguments: string[];
3
+ workingDirectory?: string;
4
+ } | null>;
1
5
  export declare function installScheduledTask({ env, stdout, programArguments, workingDirectory, }: {
2
6
  env: Record<string, string | undefined>;
3
7
  stdout: NodeJS.WritableStream;
@@ -1,12 +1,18 @@
1
+ import { type SseEvent } from '../shared/sse-events.js';
1
2
  import type { DaemonConfig } from './config.js';
3
+ type SessionEvent = SseEvent;
2
4
  export declare function buildHealthPayload(importMetaUrl?: string): {
3
5
  ok: boolean;
4
6
  pid: number;
5
7
  version: string;
6
8
  };
7
- export declare function runDaemonServer({ env, fetchImpl, config, port, }: {
9
+ export declare function runDaemonServer({ env, fetchImpl, config, port, signal, onListening, onSessionEvent, }: {
8
10
  env: Record<string, string | undefined>;
9
11
  fetchImpl: typeof fetch;
10
12
  config: DaemonConfig;
11
13
  port?: number;
14
+ signal?: AbortSignal;
15
+ onListening?: ((port: number) => void) | null;
16
+ onSessionEvent?: ((event: SessionEvent, sessionId: string) => void) | null;
12
17
  }): Promise<void>;
18
+ export {};
@@ -1,5 +1,7 @@
1
1
  import type { CacheState } from '../cache.js';
2
- import type { DaemonRunOverrides } from './request-settings.js';
2
+ import { type ExtractedLinkContent, type MediaCache } from '../content/index.js';
3
+ import type { RunOverrides } from '../run/run-settings.js';
4
+ import type { SlideExtractionResult, SlideImage, SlideSettings, SlideSourceKind } from '../slides/index.js';
3
5
  export type VisiblePageInput = {
4
6
  url: string;
5
7
  title: string | null;
@@ -27,7 +29,7 @@ export type VisiblePageMetrics = {
27
29
  summaryDetailed: string;
28
30
  detailsDetailed: string | null;
29
31
  };
30
- export declare function streamSummaryForVisiblePage({ env, fetchImpl, input, modelOverride, promptOverride, lengthRaw, languageRaw, sink, cache, overrides, }: {
32
+ export declare function streamSummaryForVisiblePage({ env, fetchImpl, input, modelOverride, promptOverride, lengthRaw, languageRaw, format, sink, cache, mediaCache, overrides, }: {
31
33
  env: Record<string, string | undefined>;
32
34
  fetchImpl: typeof fetch;
33
35
  input: VisiblePageInput;
@@ -35,14 +37,16 @@ export declare function streamSummaryForVisiblePage({ env, fetchImpl, input, mod
35
37
  promptOverride: string | null;
36
38
  lengthRaw: unknown;
37
39
  languageRaw: unknown;
40
+ format?: 'text' | 'markdown';
38
41
  sink: StreamSink;
39
42
  cache: CacheState;
40
- overrides: DaemonRunOverrides;
43
+ mediaCache: MediaCache | null;
44
+ overrides: RunOverrides;
41
45
  }): Promise<{
42
46
  usedModel: string;
43
47
  metrics: VisiblePageMetrics;
44
48
  }>;
45
- export declare function streamSummaryForUrl({ env, fetchImpl, input, modelOverride, promptOverride, lengthRaw, languageRaw, sink, cache, overrides, }: {
49
+ export declare function streamSummaryForUrl({ env, fetchImpl, input, modelOverride, promptOverride, lengthRaw, languageRaw, format, sink, cache, mediaCache, overrides, slides, hooks, }: {
46
50
  env: Record<string, string | undefined>;
47
51
  fetchImpl: typeof fetch;
48
52
  input: UrlModeInput;
@@ -50,10 +54,48 @@ export declare function streamSummaryForUrl({ env, fetchImpl, input, modelOverri
50
54
  promptOverride: string | null;
51
55
  lengthRaw: unknown;
52
56
  languageRaw: unknown;
57
+ format?: 'text' | 'markdown';
53
58
  sink: StreamSink;
54
59
  cache: CacheState;
55
- overrides: DaemonRunOverrides;
60
+ mediaCache: MediaCache | null;
61
+ overrides: RunOverrides;
62
+ slides?: SlideSettings | null;
63
+ hooks?: {
64
+ onExtracted?: ((extracted: ExtractedLinkContent) => void) | null;
65
+ onSlidesExtracted?: ((slides: SlideExtractionResult) => void) | null;
66
+ onSlidesProgress?: ((text: string) => void) | null;
67
+ onSlidesDone?: ((result: {
68
+ ok: boolean;
69
+ error?: string | null;
70
+ }) => void) | null;
71
+ onSlideChunk?: (chunk: {
72
+ slide: SlideImage;
73
+ meta: {
74
+ slidesDir: string;
75
+ sourceUrl: string;
76
+ sourceId: string;
77
+ sourceKind: SlideSourceKind;
78
+ ocrAvailable: boolean;
79
+ };
80
+ }) => void;
81
+ } | null;
56
82
  }): Promise<{
57
83
  usedModel: string;
58
84
  metrics: VisiblePageMetrics;
59
85
  }>;
86
+ export declare function extractContentForUrl({ env, fetchImpl, input, cache, mediaCache, overrides, format, slides, hooks, }: {
87
+ env: Record<string, string | undefined>;
88
+ fetchImpl: typeof fetch;
89
+ input: UrlModeInput;
90
+ cache: CacheState;
91
+ mediaCache: MediaCache | null;
92
+ overrides: RunOverrides;
93
+ format?: 'text' | 'markdown';
94
+ slides?: SlideSettings | null;
95
+ hooks?: {
96
+ onSlidesExtracted?: ((slides: SlideExtractionResult) => void) | null;
97
+ } | null;
98
+ }): Promise<{
99
+ extracted: ExtractedLinkContent;
100
+ slides: SlideExtractionResult | null;
101
+ }>;
@@ -1,3 +1,7 @@
1
+ export declare function readSystemdServiceExecStart(env: Record<string, string | undefined>): Promise<{
2
+ programArguments: string[];
3
+ workingDirectory?: string;
4
+ } | null>;
1
5
  export declare function installSystemdService({ env, stdout, programArguments, workingDirectory, }: {
2
6
  env: Record<string, string | undefined>;
3
7
  stdout: NodeJS.WritableStream;
@@ -24,5 +24,6 @@ export declare function parseMetricsMode(raw: string): MetricsMode;
24
24
  export declare function parseVideoMode(raw: string): VideoMode;
25
25
  export declare function parseDurationMs(raw: string): number;
26
26
  export declare function parseLengthArg(raw: string): LengthArg;
27
+ export declare function parseMaxExtractCharactersArg(raw: string | undefined): number | null;
27
28
  export declare function parseMaxOutputTokensArg(raw: string | undefined): number | null;
28
29
  export declare function parseRetriesArg(raw: string): number;
@@ -0,0 +1,6 @@
1
+ export type Attachment = {
2
+ kind: 'text' | 'image' | 'document';
3
+ mediaType: string;
4
+ bytes: Uint8Array;
5
+ filename: string | null;
6
+ };
@@ -0,0 +1 @@
1
+ export declare function createUnsupportedFunctionalityError(message: string): Error;
@@ -1,4 +1,6 @@
1
- import type { PromptPayload } from './prompt.js';
1
+ import type { Context } from '@mariozechner/pi-ai';
2
+ import { type Prompt } from './prompt.js';
3
+ import type { LlmTokenUsage } from './types.js';
2
4
  export type LlmApiKeys = {
3
5
  xaiApiKey: string | null;
4
6
  openaiApiKey: string | null;
@@ -9,22 +11,17 @@ export type LlmApiKeys = {
9
11
  export type OpenRouterOptions = {
10
12
  providers: string[] | null;
11
13
  };
12
- export type LlmTokenUsage = {
13
- promptTokens: number | null;
14
- completionTokens: number | null;
15
- totalTokens: number | null;
16
- };
14
+ export type { LlmTokenUsage } from './types.js';
17
15
  type RetryNotice = {
18
16
  attempt: number;
19
17
  maxRetries: number;
20
18
  delayMs: number;
21
19
  error: unknown;
22
20
  };
23
- export declare function generateTextWithModelId({ modelId, apiKeys, system, prompt, temperature, maxOutputTokens, timeoutMs, fetchImpl: _fetchImpl, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
21
+ export declare function generateTextWithModelId({ modelId, apiKeys, prompt, temperature, maxOutputTokens, timeoutMs, fetchImpl, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, retries, onRetry, }: {
24
22
  modelId: string;
25
23
  apiKeys: LlmApiKeys;
26
- system?: string;
27
- prompt: PromptPayload;
24
+ prompt: Prompt;
28
25
  temperature?: number;
29
26
  maxOutputTokens?: number;
30
27
  timeoutMs: number;
@@ -43,11 +40,31 @@ export declare function generateTextWithModelId({ modelId, apiKeys, system, prom
43
40
  provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai';
44
41
  usage: LlmTokenUsage | null;
45
42
  }>;
46
- export declare function streamTextWithModelId({ modelId, apiKeys, system, prompt, temperature, maxOutputTokens, timeoutMs, fetchImpl: _fetchImpl, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, }: {
43
+ export declare function streamTextWithModelId({ modelId, apiKeys, prompt, temperature, maxOutputTokens, timeoutMs, fetchImpl, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, }: {
44
+ modelId: string;
45
+ apiKeys: LlmApiKeys;
46
+ prompt: Prompt;
47
+ temperature?: number;
48
+ maxOutputTokens?: number;
49
+ timeoutMs: number;
50
+ fetchImpl: typeof fetch;
51
+ forceOpenRouter?: boolean;
52
+ openaiBaseUrlOverride?: string | null;
53
+ anthropicBaseUrlOverride?: string | null;
54
+ googleBaseUrlOverride?: string | null;
55
+ xaiBaseUrlOverride?: string | null;
56
+ forceChatCompletions?: boolean;
57
+ }): Promise<{
58
+ textStream: AsyncIterable<string>;
59
+ canonicalModelId: string;
60
+ provider: 'xai' | 'openai' | 'google' | 'anthropic' | 'zai';
61
+ usage: Promise<LlmTokenUsage | null>;
62
+ lastError: () => unknown;
63
+ }>;
64
+ export declare function streamTextWithContext({ modelId, apiKeys, context, temperature, maxOutputTokens, timeoutMs, fetchImpl, forceOpenRouter, openaiBaseUrlOverride, anthropicBaseUrlOverride, googleBaseUrlOverride, xaiBaseUrlOverride, forceChatCompletions, }: {
47
65
  modelId: string;
48
66
  apiKeys: LlmApiKeys;
49
- system?: string;
50
- prompt: PromptPayload;
67
+ context: Context;
51
68
  temperature?: number;
52
69
  maxOutputTokens?: number;
53
70
  timeoutMs: number;
@@ -65,4 +82,3 @@ export declare function streamTextWithModelId({ modelId, apiKeys, system, prompt
65
82
  usage: Promise<LlmTokenUsage | null>;
66
83
  lastError: () => unknown;
67
84
  }>;
68
- export {};
@@ -1,5 +1,10 @@
1
- import type { Message, UserMessage } from '@mariozechner/pi-ai';
2
- export type PromptPayload = string | Array<Message>;
1
+ import type { UserMessage } from '@mariozechner/pi-ai';
2
+ import type { Attachment } from './attachments.js';
3
+ export type Prompt = {
4
+ system?: string;
5
+ userText: string;
6
+ attachments?: Attachment[];
7
+ };
3
8
  export declare function userTextMessage(text: string, timestamp?: number): UserMessage;
4
9
  export declare function userTextAndImageMessage({ text, imageBytes, mimeType, timestamp, }: {
5
10
  text: string;
@@ -0,0 +1,30 @@
1
+ import type { Context } from '@mariozechner/pi-ai';
2
+ import type { Attachment } from '../attachments.js';
3
+ import type { LlmTokenUsage } from '../types.js';
4
+ export declare function normalizeAnthropicModelAccessError(error: unknown, modelId: string): Error | null;
5
+ export declare function completeAnthropicText({ modelId, apiKey, context, temperature, maxOutputTokens, signal, anthropicBaseUrlOverride, }: {
6
+ modelId: string;
7
+ apiKey: string;
8
+ context: Context;
9
+ temperature?: number;
10
+ maxOutputTokens?: number;
11
+ signal: AbortSignal;
12
+ anthropicBaseUrlOverride?: string | null;
13
+ }): Promise<{
14
+ text: string;
15
+ usage: LlmTokenUsage | null;
16
+ }>;
17
+ export declare function completeAnthropicDocument({ modelId, apiKey, promptText, document, system, maxOutputTokens, timeoutMs, fetchImpl, anthropicBaseUrlOverride, }: {
18
+ modelId: string;
19
+ apiKey: string;
20
+ promptText: string;
21
+ document: Attachment;
22
+ system?: string;
23
+ maxOutputTokens?: number;
24
+ timeoutMs: number;
25
+ fetchImpl: typeof fetch;
26
+ anthropicBaseUrlOverride?: string | null;
27
+ }): Promise<{
28
+ text: string;
29
+ usage: LlmTokenUsage | null;
30
+ }>;
@@ -0,0 +1,29 @@
1
+ import type { Context } from '@mariozechner/pi-ai';
2
+ import type { Attachment } from '../attachments.js';
3
+ import type { LlmTokenUsage } from '../types.js';
4
+ export declare function completeGoogleText({ modelId, apiKey, context, temperature, maxOutputTokens, signal, googleBaseUrlOverride, }: {
5
+ modelId: string;
6
+ apiKey: string;
7
+ context: Context;
8
+ temperature?: number;
9
+ maxOutputTokens?: number;
10
+ signal: AbortSignal;
11
+ googleBaseUrlOverride?: string | null;
12
+ }): Promise<{
13
+ text: string;
14
+ usage: LlmTokenUsage | null;
15
+ }>;
16
+ export declare function completeGoogleDocument({ modelId, apiKey, promptText, document, maxOutputTokens, temperature, timeoutMs, fetchImpl, googleBaseUrlOverride, }: {
17
+ modelId: string;
18
+ apiKey: string;
19
+ promptText: string;
20
+ document: Attachment;
21
+ maxOutputTokens?: number;
22
+ temperature?: number;
23
+ timeoutMs: number;
24
+ fetchImpl: typeof fetch;
25
+ googleBaseUrlOverride?: string | null;
26
+ }): Promise<{
27
+ text: string;
28
+ usage: LlmTokenUsage | null;
29
+ }>;
@@ -0,0 +1,27 @@
1
+ import type { Api, Context, Model } from '@mariozechner/pi-ai';
2
+ import type { OpenAiClientConfig } from './types.js';
3
+ export declare function resolveOpenAiModel({ modelId, context, openaiConfig, }: {
4
+ modelId: string;
5
+ context: Context;
6
+ openaiConfig: OpenAiClientConfig;
7
+ }): Model<Api>;
8
+ export declare function resolveZaiModel({ modelId, context, openaiBaseUrlOverride, }: {
9
+ modelId: string;
10
+ context: Context;
11
+ openaiBaseUrlOverride?: string | null;
12
+ }): Model<Api>;
13
+ export declare function resolveXaiModel({ modelId, context, xaiBaseUrlOverride, }: {
14
+ modelId: string;
15
+ context: Context;
16
+ xaiBaseUrlOverride?: string | null;
17
+ }): Model<Api>;
18
+ export declare function resolveGoogleModel({ modelId, context, googleBaseUrlOverride, }: {
19
+ modelId: string;
20
+ context: Context;
21
+ googleBaseUrlOverride?: string | null;
22
+ }): Model<Api>;
23
+ export declare function resolveAnthropicModel({ modelId, context, anthropicBaseUrlOverride, }: {
24
+ modelId: string;
25
+ context: Context;
26
+ anthropicBaseUrlOverride?: string | null;
27
+ }): Model<Api>;
@@ -0,0 +1,38 @@
1
+ import type { Context } from '@mariozechner/pi-ai';
2
+ import type { Attachment } from '../attachments.js';
3
+ import type { LlmTokenUsage } from '../types.js';
4
+ import type { OpenAiClientConfig } from './types.js';
5
+ export type OpenAiClientConfigInput = {
6
+ apiKeys: {
7
+ openaiApiKey: string | null;
8
+ openrouterApiKey: string | null;
9
+ };
10
+ forceOpenRouter?: boolean;
11
+ openaiBaseUrlOverride?: string | null;
12
+ forceChatCompletions?: boolean;
13
+ };
14
+ export declare function resolveOpenAiClientConfig({ apiKeys, forceOpenRouter, openaiBaseUrlOverride, forceChatCompletions, }: OpenAiClientConfigInput): OpenAiClientConfig;
15
+ export declare function completeOpenAiText({ modelId, openaiConfig, context, temperature, maxOutputTokens, signal, }: {
16
+ modelId: string;
17
+ openaiConfig: OpenAiClientConfig;
18
+ context: Context;
19
+ temperature?: number;
20
+ maxOutputTokens?: number;
21
+ signal: AbortSignal;
22
+ }): Promise<{
23
+ text: string;
24
+ usage: LlmTokenUsage | null;
25
+ }>;
26
+ export declare function completeOpenAiDocument({ modelId, openaiConfig, promptText, document, maxOutputTokens, temperature, timeoutMs, fetchImpl, }: {
27
+ modelId: string;
28
+ openaiConfig: OpenAiClientConfig;
29
+ promptText: string;
30
+ document: Attachment;
31
+ maxOutputTokens?: number;
32
+ temperature?: number;
33
+ timeoutMs: number;
34
+ fetchImpl: typeof fetch;
35
+ }): Promise<{
36
+ text: string;
37
+ usage: LlmTokenUsage | null;
38
+ }>;