@steipete/summarize 0.3.0 → 0.5.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 (99) hide show
  1. package/CHANGELOG.md +80 -5
  2. package/README.md +122 -20
  3. package/dist/cli.cjs +8446 -4360
  4. package/dist/cli.cjs.map +4 -4
  5. package/dist/esm/cli-main.js +47 -2
  6. package/dist/esm/cli-main.js.map +1 -1
  7. package/dist/esm/config.js +368 -3
  8. package/dist/esm/config.js.map +1 -1
  9. package/dist/esm/content/link-preview/content/index.js +13 -0
  10. package/dist/esm/content/link-preview/content/index.js.map +1 -1
  11. package/dist/esm/content/link-preview/content/utils.js +3 -1
  12. package/dist/esm/content/link-preview/content/utils.js.map +1 -1
  13. package/dist/esm/content/link-preview/content/video.js +96 -0
  14. package/dist/esm/content/link-preview/content/video.js.map +1 -0
  15. package/dist/esm/content/link-preview/transcript/providers/youtube/captions.js +21 -21
  16. package/dist/esm/content/link-preview/transcript/providers/youtube/captions.js.map +1 -1
  17. package/dist/esm/costs.js.map +1 -1
  18. package/dist/esm/flags.js +41 -1
  19. package/dist/esm/flags.js.map +1 -1
  20. package/dist/esm/generate-free.js +616 -0
  21. package/dist/esm/generate-free.js.map +1 -0
  22. package/dist/esm/llm/cli.js +290 -0
  23. package/dist/esm/llm/cli.js.map +1 -0
  24. package/dist/esm/llm/generate-text.js +159 -105
  25. package/dist/esm/llm/generate-text.js.map +1 -1
  26. package/dist/esm/llm/html-to-markdown.js +4 -2
  27. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  28. package/dist/esm/markitdown.js +54 -0
  29. package/dist/esm/markitdown.js.map +1 -0
  30. package/dist/esm/model-auto.js +353 -0
  31. package/dist/esm/model-auto.js.map +1 -0
  32. package/dist/esm/model-spec.js +82 -0
  33. package/dist/esm/model-spec.js.map +1 -0
  34. package/dist/esm/prompts/cli.js +18 -0
  35. package/dist/esm/prompts/cli.js.map +1 -0
  36. package/dist/esm/prompts/file.js +21 -2
  37. package/dist/esm/prompts/file.js.map +1 -1
  38. package/dist/esm/prompts/index.js +2 -1
  39. package/dist/esm/prompts/index.js.map +1 -1
  40. package/dist/esm/prompts/link-summary.js +3 -8
  41. package/dist/esm/prompts/link-summary.js.map +1 -1
  42. package/dist/esm/refresh-free.js +667 -0
  43. package/dist/esm/refresh-free.js.map +1 -0
  44. package/dist/esm/run.js +1612 -533
  45. package/dist/esm/run.js.map +1 -1
  46. package/dist/esm/version.js +1 -1
  47. package/dist/types/config.d.ts +58 -5
  48. package/dist/types/content/link-preview/content/types.d.ts +10 -0
  49. package/dist/types/content/link-preview/content/utils.d.ts +1 -1
  50. package/dist/types/content/link-preview/content/video.d.ts +5 -0
  51. package/dist/types/costs.d.ts +2 -1
  52. package/dist/types/flags.d.ts +7 -0
  53. package/dist/types/generate-free.d.ts +17 -0
  54. package/dist/types/llm/cli.d.ts +24 -0
  55. package/dist/types/llm/generate-text.d.ts +13 -4
  56. package/dist/types/llm/html-to-markdown.d.ts +9 -3
  57. package/dist/types/markitdown.d.ts +10 -0
  58. package/dist/types/model-auto.d.ts +23 -0
  59. package/dist/types/model-spec.d.ts +33 -0
  60. package/dist/types/prompts/cli.d.ts +8 -0
  61. package/dist/types/prompts/file.d.ts +7 -0
  62. package/dist/types/prompts/index.d.ts +2 -1
  63. package/dist/types/refresh-free.d.ts +19 -0
  64. package/dist/types/run.d.ts +3 -1
  65. package/dist/types/version.d.ts +1 -1
  66. package/docs/README.md +4 -1
  67. package/docs/cli.md +95 -0
  68. package/docs/config.md +123 -1
  69. package/docs/extract-only.md +10 -7
  70. package/docs/firecrawl.md +2 -2
  71. package/docs/llm.md +24 -4
  72. package/docs/manual-tests.md +40 -0
  73. package/docs/model-auto.md +92 -0
  74. package/docs/site/assets/site.js +20 -17
  75. package/docs/site/docs/config.html +3 -3
  76. package/docs/site/docs/extract-only.html +7 -5
  77. package/docs/site/docs/firecrawl.html +6 -6
  78. package/docs/site/docs/index.html +2 -2
  79. package/docs/site/docs/llm.html +2 -2
  80. package/docs/site/docs/openai.html +2 -2
  81. package/docs/site/docs/website.html +7 -4
  82. package/docs/site/docs/youtube.html +2 -2
  83. package/docs/site/index.html +1 -1
  84. package/docs/smoketest.md +58 -0
  85. package/docs/website.md +13 -8
  86. package/docs/youtube.md +1 -1
  87. package/package.json +8 -4
  88. package/dist/esm/content/link-preview/transcript/providers/twitter.js +0 -12
  89. package/dist/esm/content/link-preview/transcript/providers/twitter.js.map +0 -1
  90. package/dist/esm/content/link-preview/transcript/providers/youtube/ytdlp.js +0 -114
  91. package/dist/esm/content/link-preview/transcript/providers/youtube/ytdlp.js.map +0 -1
  92. package/dist/esm/summarizeHome.js +0 -20
  93. package/dist/esm/summarizeHome.js.map +0 -1
  94. package/dist/esm/tty/live-markdown.js +0 -52
  95. package/dist/esm/tty/live-markdown.js.map +0 -1
  96. package/dist/types/content/link-preview/transcript/providers/twitter.d.ts +0 -3
  97. package/dist/types/content/link-preview/transcript/providers/youtube/ytdlp.d.ts +0 -3
  98. package/dist/types/summarizeHome.d.ts +0 -6
  99. package/dist/types/tty/live-markdown.d.ts +0 -10
@@ -0,0 +1,353 @@
1
+ import { normalizeGatewayStyleModelId, parseGatewayStyleModelId } from './llm/model-id.js';
2
+ import { resolveLiteLlmMaxInputTokensForModelId, resolveLiteLlmPricingForModelId, } from './pricing/litellm.js';
3
+ const DEFAULT_RULES = [
4
+ {
5
+ when: ['video'],
6
+ candidates: ['google/gemini-3-flash-preview', 'google/gemini-2.5-flash-lite-preview-09-2025'],
7
+ },
8
+ {
9
+ when: ['image'],
10
+ candidates: [
11
+ 'google/gemini-3-flash-preview',
12
+ 'openai/gpt-5-mini',
13
+ 'anthropic/claude-sonnet-4-5',
14
+ ],
15
+ },
16
+ {
17
+ when: ['website', 'youtube', 'text'],
18
+ bands: [
19
+ {
20
+ token: { max: 50_000 },
21
+ candidates: [
22
+ 'google/gemini-3-flash-preview',
23
+ 'openai/gpt-5-mini',
24
+ 'anthropic/claude-sonnet-4-5',
25
+ ],
26
+ },
27
+ {
28
+ token: { max: 200_000 },
29
+ candidates: [
30
+ 'google/gemini-3-flash-preview',
31
+ 'openai/gpt-5-mini',
32
+ 'anthropic/claude-sonnet-4-5',
33
+ ],
34
+ },
35
+ {
36
+ candidates: [
37
+ 'xai/grok-4-fast-non-reasoning',
38
+ 'google/gemini-3-flash-preview',
39
+ 'openai/gpt-5-mini',
40
+ 'anthropic/claude-sonnet-4-5',
41
+ ],
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ when: ['file'],
47
+ candidates: [
48
+ 'google/gemini-3-flash-preview',
49
+ 'openai/gpt-5-mini',
50
+ 'anthropic/claude-sonnet-4-5',
51
+ ],
52
+ },
53
+ {
54
+ candidates: [
55
+ 'google/gemini-3-flash-preview',
56
+ 'openai/gpt-5-mini',
57
+ 'anthropic/claude-sonnet-4-5',
58
+ 'xai/grok-4-fast-non-reasoning',
59
+ ],
60
+ },
61
+ ];
62
+ const DEFAULT_CLI_MODELS = {
63
+ claude: 'sonnet',
64
+ codex: 'gpt-5.2',
65
+ gemini: 'gemini-3-flash-preview',
66
+ };
67
+ function isCliProviderEnabled(provider, config) {
68
+ const cli = config?.cli;
69
+ if (!Array.isArray(cli?.enabled) || cli.enabled.length === 0)
70
+ return false;
71
+ return cli.enabled.includes(provider);
72
+ }
73
+ function isCandidateOpenRouter(modelId) {
74
+ return modelId.trim().toLowerCase().startsWith('openrouter/');
75
+ }
76
+ function isCandidateCli(modelId) {
77
+ return modelId.trim().toLowerCase().startsWith('cli/');
78
+ }
79
+ function parseCliCandidate(modelId) {
80
+ if (!isCandidateCli(modelId))
81
+ return null;
82
+ const parts = modelId
83
+ .trim()
84
+ .split('/')
85
+ .map((entry) => entry.trim());
86
+ if (parts.length < 2)
87
+ return null;
88
+ const provider = parts[1]?.toLowerCase();
89
+ if (provider !== 'claude' && provider !== 'codex' && provider !== 'gemini')
90
+ return null;
91
+ const model = parts.slice(2).join('/').trim();
92
+ return { provider, model: model.length > 0 ? model : null };
93
+ }
94
+ function normalizeOpenRouterModelId(raw) {
95
+ const trimmed = raw.trim();
96
+ if (trimmed.length === 0)
97
+ return null;
98
+ if (!trimmed.includes('/'))
99
+ return null;
100
+ return trimmed.toLowerCase();
101
+ }
102
+ function requiredEnvForCandidate(modelId) {
103
+ if (isCandidateCli(modelId)) {
104
+ const parsed = parseCliCandidate(modelId);
105
+ if (!parsed)
106
+ return 'CLI_CLAUDE';
107
+ return parsed.provider === 'codex'
108
+ ? 'CLI_CODEX'
109
+ : parsed.provider === 'gemini'
110
+ ? 'CLI_GEMINI'
111
+ : 'CLI_CLAUDE';
112
+ }
113
+ if (isCandidateOpenRouter(modelId))
114
+ return 'OPENROUTER_API_KEY';
115
+ const parsed = parseGatewayStyleModelId(normalizeGatewayStyleModelId(modelId));
116
+ return parsed.provider === 'xai'
117
+ ? 'XAI_API_KEY'
118
+ : parsed.provider === 'google'
119
+ ? 'GEMINI_API_KEY'
120
+ : parsed.provider === 'anthropic'
121
+ ? 'ANTHROPIC_API_KEY'
122
+ : 'OPENAI_API_KEY';
123
+ }
124
+ function envHasKey(env, requiredEnv) {
125
+ if (requiredEnv === 'GEMINI_API_KEY') {
126
+ return Boolean(env.GEMINI_API_KEY?.trim() ||
127
+ env.GOOGLE_GENERATIVE_AI_API_KEY?.trim() ||
128
+ env.GOOGLE_API_KEY?.trim());
129
+ }
130
+ return Boolean(env[requiredEnv]?.trim());
131
+ }
132
+ function tokenMatchesBand({ promptTokens, band, }) {
133
+ const token = band.token;
134
+ if (!token)
135
+ return true;
136
+ if (typeof promptTokens !== 'number' || !Number.isFinite(promptTokens)) {
137
+ return typeof token.min !== 'number' && typeof token.max !== 'number';
138
+ }
139
+ const min = typeof token.min === 'number' ? token.min : 0;
140
+ const max = typeof token.max === 'number' ? token.max : Number.POSITIVE_INFINITY;
141
+ return promptTokens >= min && promptTokens <= max;
142
+ }
143
+ function resolveRuleCandidates({ kind, promptTokens, config, }) {
144
+ const rules = (() => {
145
+ const model = config?.model;
146
+ if (model &&
147
+ 'mode' in model &&
148
+ model.mode === 'auto' &&
149
+ Array.isArray(model.rules) &&
150
+ model.rules.length > 0) {
151
+ return model.rules;
152
+ }
153
+ return DEFAULT_RULES;
154
+ })();
155
+ for (const rule of rules) {
156
+ const when = rule.when;
157
+ if (Array.isArray(when) && when.length > 0 && !when.includes(kind)) {
158
+ continue;
159
+ }
160
+ if (Array.isArray(rule.candidates) && rule.candidates.length > 0) {
161
+ return rule.candidates;
162
+ }
163
+ const bands = rule.bands;
164
+ if (Array.isArray(bands) && bands.length > 0) {
165
+ for (const band of bands) {
166
+ if (tokenMatchesBand({ promptTokens, band })) {
167
+ return band.candidates;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ const fallback = rules[rules.length - 1];
173
+ return fallback?.candidates ?? [];
174
+ }
175
+ function prependCliCandidates({ candidates, config, }) {
176
+ const cli = config?.cli;
177
+ if (!Array.isArray(cli?.enabled) || cli.enabled.length === 0)
178
+ return candidates;
179
+ const cliCandidates = [];
180
+ const add = (provider, modelOverride) => {
181
+ if (!isCliProviderEnabled(provider, config))
182
+ return;
183
+ const model = modelOverride?.trim() || DEFAULT_CLI_MODELS[provider];
184
+ if (!model)
185
+ return;
186
+ const id = `cli/${provider}/${model}`;
187
+ if (!cliCandidates.includes(id))
188
+ cliCandidates.push(id);
189
+ };
190
+ const enabledOrder = cli.enabled;
191
+ for (const provider of enabledOrder) {
192
+ const modelOverride = provider === 'gemini'
193
+ ? cli?.gemini?.model
194
+ : provider === 'codex'
195
+ ? cli?.codex?.model
196
+ : cli?.claude?.model;
197
+ add(provider, modelOverride);
198
+ }
199
+ if (cliCandidates.length === 0)
200
+ return candidates;
201
+ return [...cliCandidates, ...candidates];
202
+ }
203
+ function estimateCostUsd({ pricing, promptTokens, outputTokens, }) {
204
+ if (!pricing)
205
+ return null;
206
+ if (typeof pricing.inputUsdPerToken !== 'number' || typeof pricing.outputUsdPerToken !== 'number')
207
+ return null;
208
+ const inTok = typeof promptTokens === 'number' && Number.isFinite(promptTokens) && promptTokens > 0
209
+ ? promptTokens
210
+ : 0;
211
+ const outTok = typeof outputTokens === 'number' && Number.isFinite(outputTokens) && outputTokens > 0
212
+ ? outputTokens
213
+ : 0;
214
+ const cost = inTok * pricing.inputUsdPerToken + outTok * pricing.outputUsdPerToken;
215
+ return Number.isFinite(cost) ? cost : null;
216
+ }
217
+ function isVideoUnderstandingCapable(modelId) {
218
+ try {
219
+ const parsed = parseGatewayStyleModelId(normalizeGatewayStyleModelId(modelId));
220
+ return parsed.provider === 'google';
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ }
226
+ export function buildAutoModelAttempts(input) {
227
+ const baseCandidates = resolveRuleCandidates({
228
+ kind: input.kind,
229
+ promptTokens: input.promptTokens,
230
+ config: input.config,
231
+ });
232
+ const candidates = prependCliCandidates({ candidates: baseCandidates, config: input.config });
233
+ const attempts = [];
234
+ for (const modelRawEntry of candidates) {
235
+ const modelRaw = modelRawEntry.trim();
236
+ if (modelRaw.length === 0)
237
+ continue;
238
+ const explicitCli = isCandidateCli(modelRaw);
239
+ const explicitOpenRouter = isCandidateOpenRouter(modelRaw);
240
+ const shouldSkipForVideo = input.requiresVideoUnderstanding &&
241
+ (explicitOpenRouter || explicitCli || !isVideoUnderstandingCapable(modelRaw));
242
+ if (shouldSkipForVideo) {
243
+ continue;
244
+ }
245
+ const addAttempt = (modelId, options) => {
246
+ const required = requiredEnvForCandidate(modelId);
247
+ const hasKey = options.transport === 'cli'
248
+ ? Boolean(input.cliAvailability?.[parseCliCandidate(modelId)?.provider ?? 'claude'] ?? false)
249
+ : envHasKey(input.env, required);
250
+ if (options.transport === 'cli' && !hasKey) {
251
+ return;
252
+ }
253
+ const catalog = options.transport === 'cli' ? null : input.catalog;
254
+ const catalogModelId = options.openrouter ? modelId.slice('openrouter/'.length) : modelId;
255
+ const maxIn = catalog ? resolveLiteLlmMaxInputTokensForModelId(catalog, catalogModelId) : null;
256
+ const promptTokens = input.promptTokens;
257
+ if (options.transport !== 'cli' &&
258
+ typeof promptTokens === 'number' &&
259
+ Number.isFinite(promptTokens) &&
260
+ typeof maxIn === 'number' &&
261
+ Number.isFinite(maxIn) &&
262
+ maxIn > 0 &&
263
+ promptTokens > maxIn) {
264
+ return;
265
+ }
266
+ const pricing = catalog ? resolveLiteLlmPricingForModelId(catalog, catalogModelId) : null;
267
+ const estimated = estimateCostUsd({
268
+ pricing,
269
+ promptTokens: input.promptTokens,
270
+ outputTokens: input.desiredOutputTokens,
271
+ });
272
+ const userModelId = options.transport === 'cli'
273
+ ? modelId
274
+ : options.openrouter
275
+ ? modelId
276
+ : normalizeGatewayStyleModelId(modelId);
277
+ const openrouterModelId = options.openrouter
278
+ ? normalizeOpenRouterModelId(modelId.slice('openrouter/'.length))
279
+ : null;
280
+ if (options.openrouter && !openrouterModelId) {
281
+ return;
282
+ }
283
+ const llmModelId = options.transport === 'cli'
284
+ ? null
285
+ : options.openrouter
286
+ ? `openai/${openrouterModelId}`
287
+ : normalizeGatewayStyleModelId(modelId);
288
+ const debugParts = [
289
+ `model=${options.transport === 'cli'
290
+ ? userModelId
291
+ : options.openrouter
292
+ ? `openrouter/${openrouterModelId}`
293
+ : userModelId}`,
294
+ `transport=${options.transport}`,
295
+ `order=${attempts.length + 1}`,
296
+ `key=${hasKey ? 'yes' : 'no'}(${required})`,
297
+ `promptTok=${typeof input.promptTokens === 'number' ? input.promptTokens : 'unknown'}`,
298
+ `maxIn=${typeof maxIn === 'number' ? maxIn : 'unknown'}`,
299
+ `estUsd=${typeof estimated === 'number' ? estimated.toExponential(2) : 'unknown'}`,
300
+ ];
301
+ attempts.push({
302
+ transport: options.transport,
303
+ userModelId: options.openrouter ? `openrouter/${openrouterModelId}` : userModelId,
304
+ llmModelId,
305
+ openrouterProviders: options.openrouterProviders,
306
+ forceOpenRouter: options.openrouter,
307
+ requiredEnv: required,
308
+ debug: debugParts.join(' '),
309
+ });
310
+ };
311
+ if (explicitCli) {
312
+ addAttempt(modelRaw, {
313
+ openrouter: false,
314
+ openrouterProviders: null,
315
+ transport: 'cli',
316
+ });
317
+ continue;
318
+ }
319
+ if (explicitOpenRouter) {
320
+ addAttempt(modelRaw, {
321
+ openrouter: true,
322
+ openrouterProviders: input.openrouterProvidersFromEnv,
323
+ transport: 'openrouter',
324
+ });
325
+ continue;
326
+ }
327
+ addAttempt(modelRaw, {
328
+ openrouter: false,
329
+ openrouterProviders: input.openrouterProvidersFromEnv,
330
+ transport: 'native',
331
+ });
332
+ const canAddOpenRouterFallback = !input.requiresVideoUnderstanding && envHasKey(input.env, 'OPENROUTER_API_KEY');
333
+ if (canAddOpenRouterFallback) {
334
+ const slug = normalizeGatewayStyleModelId(modelRaw);
335
+ addAttempt(`openrouter/${slug}`, {
336
+ openrouter: true,
337
+ openrouterProviders: input.openrouterProvidersFromEnv,
338
+ transport: 'openrouter',
339
+ });
340
+ }
341
+ }
342
+ const seen = new Set();
343
+ const unique = [];
344
+ for (const a of attempts) {
345
+ const key = `${a.transport}:${a.forceOpenRouter ? 'or' : 'native'}:${a.userModelId}:${a.openrouterProviders?.join(',') ?? ''}`;
346
+ if (seen.has(key))
347
+ continue;
348
+ seen.add(key);
349
+ unique.push(a);
350
+ }
351
+ return unique;
352
+ }
353
+ //# sourceMappingURL=model-auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-auto.js","sourceRoot":"","sources":["../../src/model-auto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { normalizeGatewayStyleModelId, parseGatewayStyleModelId } from './llm/model-id.js';
2
+ const DEFAULT_CLI_MODELS = {
3
+ claude: 'sonnet',
4
+ codex: 'gpt-5.2',
5
+ gemini: 'gemini-3-flash-preview',
6
+ };
7
+ export function parseRequestedModelId(raw) {
8
+ const trimmed = raw.trim();
9
+ if (trimmed.length === 0)
10
+ throw new Error('Missing model id');
11
+ const lower = trimmed.toLowerCase();
12
+ if (lower === 'auto')
13
+ return { kind: 'auto' };
14
+ if (lower.startsWith('openrouter/')) {
15
+ const openrouterModelId = trimmed.slice('openrouter/'.length).trim();
16
+ if (openrouterModelId.length === 0) {
17
+ throw new Error('Invalid model id: openrouter/… is missing the OpenRouter model id');
18
+ }
19
+ if (!openrouterModelId.includes('/')) {
20
+ throw new Error(`Invalid OpenRouter model id "${openrouterModelId}". Expected "author/slug" (e.g. "openai/gpt-5-mini").`);
21
+ }
22
+ return {
23
+ kind: 'fixed',
24
+ transport: 'openrouter',
25
+ userModelId: `openrouter/${openrouterModelId}`,
26
+ openrouterModelId,
27
+ llmModelId: `openai/${openrouterModelId}`,
28
+ openrouterProviders: null,
29
+ forceOpenRouter: true,
30
+ requiredEnv: 'OPENROUTER_API_KEY',
31
+ };
32
+ }
33
+ if (lower.startsWith('cli/')) {
34
+ const parts = trimmed
35
+ .split('/')
36
+ .map((part) => part.trim())
37
+ .filter((part) => part.length > 0);
38
+ const providerRaw = parts[1]?.toLowerCase() ?? '';
39
+ if (providerRaw !== 'claude' && providerRaw !== 'codex' && providerRaw !== 'gemini') {
40
+ throw new Error(`Invalid CLI model id "${trimmed}". Expected cli/<provider>/<model>.`);
41
+ }
42
+ const cliProvider = providerRaw;
43
+ const requestedModel = parts.slice(2).join('/').trim();
44
+ const cliModel = requestedModel.length > 0 ? requestedModel : DEFAULT_CLI_MODELS[cliProvider];
45
+ const requiredEnv = cliProvider === 'claude' ? 'CLI_CLAUDE' : cliProvider === 'codex' ? 'CLI_CODEX' : 'CLI_GEMINI';
46
+ const userModelId = `cli/${cliProvider}/${cliModel}`;
47
+ return {
48
+ kind: 'fixed',
49
+ transport: 'cli',
50
+ userModelId,
51
+ llmModelId: null,
52
+ openrouterProviders: null,
53
+ forceOpenRouter: false,
54
+ requiredEnv,
55
+ cliProvider,
56
+ cliModel,
57
+ };
58
+ }
59
+ if (!trimmed.includes('/')) {
60
+ throw new Error(`Unknown model "${trimmed}". Expected "auto" or a provider-prefixed id like openai/..., google/..., anthropic/..., xai/..., openrouter/... or cli/....`);
61
+ }
62
+ const userModelId = normalizeGatewayStyleModelId(trimmed);
63
+ const parsed = parseGatewayStyleModelId(userModelId);
64
+ const requiredEnv = parsed.provider === 'xai'
65
+ ? 'XAI_API_KEY'
66
+ : parsed.provider === 'google'
67
+ ? 'GEMINI_API_KEY'
68
+ : parsed.provider === 'anthropic'
69
+ ? 'ANTHROPIC_API_KEY'
70
+ : 'OPENAI_API_KEY';
71
+ return {
72
+ kind: 'fixed',
73
+ transport: 'native',
74
+ userModelId,
75
+ llmModelId: userModelId,
76
+ provider: parsed.provider,
77
+ openrouterProviders: null,
78
+ forceOpenRouter: false,
79
+ requiredEnv,
80
+ };
81
+ }
82
+ //# sourceMappingURL=model-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-spec.js","sourceRoot":"","sources":["../../src/model-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ function formatTargetLength(summaryLength) {
2
+ if (typeof summaryLength === 'string')
3
+ return '';
4
+ const max = summaryLength.maxCharacters;
5
+ return `Target length: around ${max.toLocaleString()} characters total (including Markdown and whitespace). This is a soft guideline; prioritize clarity.`;
6
+ }
7
+ export function buildPathSummaryPrompt({ kindLabel, filePath, filename, mediaType, summaryLength, }) {
8
+ const headerLines = [
9
+ `Path: ${filePath}`,
10
+ filename ? `Filename: ${filename}` : null,
11
+ mediaType ? `Media type: ${mediaType}` : null,
12
+ ].filter(Boolean);
13
+ const maxCharactersLine = formatTargetLength(summaryLength);
14
+ return `You summarize ${kindLabel === 'image' ? 'images' : 'files'} for curious users. Summarize the ${kindLabel} at the path below. Be factual and do not invent details. Format the answer in Markdown. Do not use emojis. ${maxCharactersLine}
15
+
16
+ ${headerLines.length > 0 ? `${headerLines.join('\n')}\n\n` : ''}Return only the summary.`;
17
+ }
18
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/prompts/cli.ts"],"names":[],"mappings":"AAEA,SAAS,kBAAkB,CAAC,aAAkC;IAC5D,IAAI,OAAO,aAAa,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAA;IACvC,OAAO,yBAAyB,GAAG,CAAC,cAAc,EAAE,sGAAsG,CAAA;AAC5J,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,GAOd;IACC,MAAM,WAAW,GAAG;QAClB,SAAS,QAAQ,EAAE;QACnB,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACzC,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;KAC9C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjB,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAC3D,OAAO,iBAAiB,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,qCAAqC,SAAS,+GAA+G,iBAAiB;;EAEhP,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAA;AACzF,CAAC"}
@@ -9,9 +9,9 @@ export function buildFileSummaryPrompt({ filename, mediaType, summaryLength, con
9
9
  : summaryLength;
10
10
  const maxCharactersLine = typeof effectiveSummaryLength === 'string'
11
11
  ? ''
12
- : `Target length: around ${effectiveSummaryLength.maxCharacters.toLocaleString()} characters total (including Markdown and whitespace). This is a soft guideline; prioritize clarity.`;
12
+ : `Target length: up to ${effectiveSummaryLength.maxCharacters.toLocaleString()} characters total (including Markdown and whitespace). Hard limit: do not exceed it.`;
13
13
  const contentLengthLine = contentCharacters && contentCharacters > 0
14
- ? `Extracted content length: ${contentCharacters.toLocaleString()} characters. Do not exceed the extracted content length; if the requested length is larger, keep the summary at or below the extracted content length and do not add details.`
14
+ ? `Extracted content length: ${contentCharacters.toLocaleString()} characters. Hard limit: never exceed this length. If the requested length is larger, do not pad—finish early rather than adding filler.`
15
15
  : '';
16
16
  const headerLines = [
17
17
  filename ? `Filename: ${filename}` : null,
@@ -22,4 +22,23 @@ export function buildFileSummaryPrompt({ filename, mediaType, summaryLength, con
22
22
  ${headerLines.length > 0 ? `${headerLines.join('\n')}\n\n` : ''}Return only the summary.`;
23
23
  return prompt;
24
24
  }
25
+ export function buildFileTextSummaryPrompt({ filename, originalMediaType, contentMediaType, summaryLength, contentLength, }) {
26
+ const effectiveSummaryLength = typeof summaryLength === 'string'
27
+ ? summaryLength
28
+ : summaryLength.maxCharacters > contentLength
29
+ ? { maxCharacters: contentLength }
30
+ : summaryLength;
31
+ const maxCharactersLine = typeof effectiveSummaryLength === 'string'
32
+ ? ''
33
+ : `Target length: up to ${effectiveSummaryLength.maxCharacters.toLocaleString()} characters total (including Markdown and whitespace). Hard limit: do not exceed it.`;
34
+ const headerLines = [
35
+ filename ? `Filename: ${filename}` : null,
36
+ originalMediaType ? `Original media type: ${originalMediaType}` : null,
37
+ `Provided as: ${contentMediaType}`,
38
+ `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.`,
39
+ ].filter(Boolean);
40
+ return `You summarize files for curious users. Summarize the file content below. Be factual and do not invent details. Format the answer in Markdown. Do not use emojis. ${maxCharactersLine}
41
+
42
+ ${headerLines.length > 0 ? `${headerLines.join('\n')}\n\n` : ''}Return only the summary.`;
43
+ }
25
44
  //# sourceMappingURL=file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/prompts/file.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,EACrC,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,GAMd;IACC,MAAM,iBAAiB,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;IAClF,MAAM,sBAAsB,GAC1B,OAAO,aAAa,KAAK,QAAQ;QAC/B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,iBAAiB;YACf,iBAAiB,GAAG,CAAC;YACrB,aAAa,CAAC,aAAa,GAAG,iBAAiB;YACjD,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE;YACtC,CAAC,CAAC,aAAa,CAAA;IACrB,MAAM,iBAAiB,GACrB,OAAO,sBAAsB,KAAK,QAAQ;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,yBAAyB,sBAAsB,CAAC,aAAa,CAAC,cAAc,EAAE,sGAAsG,CAAA;IAC1L,MAAM,iBAAiB,GACrB,iBAAiB,IAAI,iBAAiB,GAAG,CAAC;QACxC,CAAC,CAAC,6BAA6B,iBAAiB,CAAC,cAAc,EAAE,+KAA+K;QAChP,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,WAAW,GAAG;QAClB,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACzC,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;KAC9C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjB,MAAM,MAAM,GAAG,+JAA+J,iBAAiB,IAAI,iBAAiB;;EAEpN,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAA;IAEvF,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/prompts/file.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,EACrC,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,GAMd;IACC,MAAM,iBAAiB,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;IAClF,MAAM,sBAAsB,GAC1B,OAAO,aAAa,KAAK,QAAQ;QAC/B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,iBAAiB;YACf,iBAAiB,GAAG,CAAC;YACrB,aAAa,CAAC,aAAa,GAAG,iBAAiB;YACjD,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE;YACtC,CAAC,CAAC,aAAa,CAAA;IACrB,MAAM,iBAAiB,GACrB,OAAO,sBAAsB,KAAK,QAAQ;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,wBAAwB,sBAAsB,CAAC,aAAa,CAAC,cAAc,EAAE,sFAAsF,CAAA;IACzK,MAAM,iBAAiB,GACrB,iBAAiB,IAAI,iBAAiB,GAAG,CAAC;QACxC,CAAC,CAAC,6BAA6B,iBAAiB,CAAC,cAAc,EAAE,0IAA0I;QAC3M,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,WAAW,GAAG;QAClB,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACzC,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;KAC9C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjB,MAAM,MAAM,GAAG,+JAA+J,iBAAiB,IAAI,iBAAiB;;EAEpN,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAA;IAEvF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,EACzC,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,GAOd;IACC,MAAM,sBAAsB,GAC1B,OAAO,aAAa,KAAK,QAAQ;QAC/B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAC,aAAa,GAAG,aAAa;YAC3C,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE;YAClC,CAAC,CAAC,aAAa,CAAA;IACrB,MAAM,iBAAiB,GACrB,OAAO,sBAAsB,KAAK,QAAQ;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,wBAAwB,sBAAsB,CAAC,aAAa,CAAC,cAAc,EAAE,sFAAsF,CAAA;IAEzK,MAAM,WAAW,GAAG;QAClB,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACzC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI;QACtE,gBAAgB,gBAAgB,EAAE;QAClC,6BAA6B,aAAa,CAAC,cAAc,EAAE,0IAA0I;KACtM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjB,OAAO,oKAAoK,iBAAiB;;EAE5L,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAA;AACzF,CAAC"}
@@ -1,3 +1,4 @@
1
- export { buildFileSummaryPrompt } from './file.js';
1
+ export { buildPathSummaryPrompt } from './cli.js';
2
+ export { buildFileSummaryPrompt, buildFileTextSummaryPrompt } from './file.js';
2
3
  export { buildLinkSummaryPrompt, estimateMaxCompletionTokensForCharacters, pickSummaryLengthForCharacters, SUMMARY_LENGTH_TO_TOKENS, } from './link-summary.js';
3
4
  //# 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,WAAW,CAAA;AAClD,OAAO,EACL,sBAAsB,EACtB,wCAAwC,EACxC,8BAA8B,EAE9B,wBAAwB,GAEzB,MAAM,mBAAmB,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"}
@@ -47,8 +47,6 @@ const resolveSummaryDirective = (length) =>
47
47
  // eslint-disable-next-line security/detect-object-injection
48
48
  SUMMARY_LENGTH_DIRECTIVES[length];
49
49
  const formatCount = (value) => value.toLocaleString();
50
- const PRESET_ORDER = ['short', 'medium', 'long', 'xl', 'xxl'];
51
- const presetIndex = (preset) => PRESET_ORDER.indexOf(preset);
52
50
  export function buildLinkSummaryPrompt({ url, title, siteName, description, content, truncated, hasTranscript, summaryLength, shares, }) {
53
51
  const contentCharacters = content.length;
54
52
  const contextLines = [`Source URL: ${url}`];
@@ -68,11 +66,8 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
68
66
  const audienceLine = hasTranscript
69
67
  ? 'You summarize online videos for curious Twitter users who want to know whether the clip is worth watching.'
70
68
  : 'You summarize online articles for curious Twitter users who want the gist before deciding to dive in.';
71
- const inferredPreset = contentCharacters > 0 ? pickSummaryLengthForCharacters(contentCharacters) : null;
72
69
  const effectiveSummaryLength = typeof summaryLength === 'string'
73
- ? inferredPreset && presetIndex(inferredPreset) < presetIndex(summaryLength)
74
- ? inferredPreset
75
- : summaryLength
70
+ ? summaryLength
76
71
  : contentCharacters > 0 && summaryLength.maxCharacters > contentCharacters
77
72
  ? { maxCharacters: contentCharacters }
78
73
  : summaryLength;
@@ -82,9 +77,9 @@ export function buildLinkSummaryPrompt({ url, title, siteName, description, cont
82
77
  const directive = resolveSummaryDirective(preset);
83
78
  const maxCharactersLine = typeof effectiveSummaryLength === 'string'
84
79
  ? ''
85
- : `Target length: around ${formatCount(effectiveSummaryLength.maxCharacters)} characters total (including Markdown and whitespace). This is a soft guideline; prioritize clarity and completeness.`;
80
+ : `Target length: up to ${formatCount(effectiveSummaryLength.maxCharacters)} characters total (including Markdown and whitespace). Hard limit: do not exceed it.`;
86
81
  const contentLengthLine = contentCharacters > 0
87
- ? `Extracted content length: ${formatCount(contentCharacters)} characters. Do not exceed the extracted content length; if the requested length is larger, keep the summary at or below the extracted content length and do not add details.`
82
+ ? `Extracted content length: ${formatCount(contentCharacters)} characters. Hard limit: never exceed this length. If the requested length is larger, do not pad—finish early rather than adding filler.`
88
83
  : '';
89
84
  const shareLines = shares.map((share) => {
90
85
  const handle = share.handle && share.handle.length > 0 ? `@${share.handle}` : share.author;
@@ -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":"AAEA,MAAM,yBAAyB,GAAoE;IACjG,KAAK,EAAE;QACL,QAAQ,EACN,iHAAiH;QACnH,UAAU,EAAE,kFAAkF;KAC/F;IACD,MAAM,EAAE;QACN,QAAQ,EACN,mKAAmK;QACrK,UAAU,EACR,0HAA0H;KAC7H;IACD,IAAI,EAAE;QACJ,QAAQ,EACN,mLAAmL;QACrL,UAAU,EACR,uHAAuH;KAC1H;IACD,EAAE,EAAE;QACF,QAAQ,EACN,2PAA2P;QAC7P,UAAU,EACR,uJAAuJ;KAC1J;IACD,GAAG,EAAE;QACH,QAAQ,EACN,uUAAuU;QACzU,UAAU,EACR,wOAAwO;KAC3O;CACF,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAkC;IACrE,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;CACX,CAAA;AAID,MAAM,UAAU,8BAA8B,CAAC,aAAqB;IAClE,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,OAAO,CAAA;IACzC,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAA;IAC1C,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,MAAM,CAAA;IACxC,IAAI,aAAa,IAAI,KAAK;QAAE,OAAO,IAAI,CAAA;IACvC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,aAAqB;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,uBAAuB,GAAG,CAC9B,MAAqB,EAC8B,EAAE;AACrD,oGAAoG;AACpG,4DAA4D;AAC5D,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAEnC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAA;AAYrE,MAAM,UAAU,sBAAsB,CAAC,EACrC,GAAG,EACH,KAAK,EACL,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,aAAa,EACb,aAAa,EACb,MAAM,GAWP;IACC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAA;IACxC,MAAM,YAAY,GAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAA;IAErD,IAAI,KAAK,EAAE,CAAC;QACV,YAAY,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE7C,MAAM,YAAY,GAAG,aAAa;QAChC,CAAC,CAAC,4GAA4G;QAC9G,CAAC,CAAC,uGAAuG,CAAA;IAE3G,MAAM,sBAAsB,GAC1B,OAAO,aAAa,KAAK,QAAQ;QAC/B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,aAAa,CAAC,aAAa,GAAG,iBAAiB;YACxE,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE;YACtC,CAAC,CAAC,aAAa,CAAA;IACrB,MAAM,MAAM,GACV,OAAO,sBAAsB,KAAK,QAAQ;QACxC,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,8BAA8B,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;IAC1E,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAA;IACjD,MAAM,iBAAiB,GACrB,OAAO,sBAAsB,KAAK,QAAQ;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,wBAAwB,WAAW,CAAC,sBAAsB,CAAC,aAAa,CAAC,sFAAsF,CAAA;IACrK,MAAM,iBAAiB,GACrB,iBAAiB,GAAG,CAAC;QACnB,CAAC,CAAC,6BAA6B,WAAW,CAAC,iBAAiB,CAAC,0IAA0I;QACvM,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;QAC1F,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAChE,OAAO,KAAK,MAAM,GAAG,SAAS,GAAG,aAAa,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GACjB,MAAM,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,CAAC,uTAAuT;QACzT,CAAC,CAAC,0IAA0I,CAAA;IAEhJ,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAEjG,OAAO,GAAG,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,IAAI,iBAAiB,IAAI,iBAAiB,wYAAwY,aAAa;;EAEngB,aAAa;;EAEb,WAAW;;EAEX,OAAO;;CAER,CAAA;AACD,CAAC"}