scientify 1.10.0 → 1.10.1

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 (58) hide show
  1. package/README.md +10 -2
  2. package/README.zh.md +10 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/hooks/research-mode.d.ts.map +1 -1
  7. package/dist/src/hooks/research-mode.js +3 -0
  8. package/dist/src/hooks/research-mode.js.map +1 -1
  9. package/dist/src/hooks/scientify-signature.d.ts.map +1 -1
  10. package/dist/src/hooks/scientify-signature.js +1 -0
  11. package/dist/src/hooks/scientify-signature.js.map +1 -1
  12. package/dist/src/literature/subscription-state.d.ts +90 -0
  13. package/dist/src/literature/subscription-state.d.ts.map +1 -0
  14. package/dist/src/literature/subscription-state.js +521 -0
  15. package/dist/src/literature/subscription-state.js.map +1 -0
  16. package/dist/src/research-subscriptions/constants.d.ts +16 -0
  17. package/dist/src/research-subscriptions/constants.d.ts.map +1 -0
  18. package/dist/src/research-subscriptions/constants.js +59 -0
  19. package/dist/src/research-subscriptions/constants.js.map +1 -0
  20. package/dist/src/research-subscriptions/cron-client.d.ts +8 -0
  21. package/dist/src/research-subscriptions/cron-client.d.ts.map +1 -0
  22. package/dist/src/research-subscriptions/cron-client.js +81 -0
  23. package/dist/src/research-subscriptions/cron-client.js.map +1 -0
  24. package/dist/src/research-subscriptions/delivery.d.ts +10 -0
  25. package/dist/src/research-subscriptions/delivery.d.ts.map +1 -0
  26. package/dist/src/research-subscriptions/delivery.js +82 -0
  27. package/dist/src/research-subscriptions/delivery.js.map +1 -0
  28. package/dist/src/research-subscriptions/handlers.d.ts +6 -0
  29. package/dist/src/research-subscriptions/handlers.d.ts.map +1 -0
  30. package/dist/src/research-subscriptions/handlers.js +200 -0
  31. package/dist/src/research-subscriptions/handlers.js.map +1 -0
  32. package/dist/src/research-subscriptions/parse.d.ts +11 -0
  33. package/dist/src/research-subscriptions/parse.d.ts.map +1 -0
  34. package/dist/src/research-subscriptions/parse.js +478 -0
  35. package/dist/src/research-subscriptions/parse.js.map +1 -0
  36. package/dist/src/research-subscriptions/prompt.d.ts +5 -0
  37. package/dist/src/research-subscriptions/prompt.d.ts.map +1 -0
  38. package/dist/src/research-subscriptions/prompt.js +161 -0
  39. package/dist/src/research-subscriptions/prompt.js.map +1 -0
  40. package/dist/src/research-subscriptions/types.d.ts +65 -0
  41. package/dist/src/research-subscriptions/types.d.ts.map +1 -0
  42. package/dist/src/research-subscriptions/types.js +2 -0
  43. package/dist/src/research-subscriptions/types.js.map +1 -0
  44. package/dist/src/research-subscriptions.d.ts +1 -9
  45. package/dist/src/research-subscriptions.d.ts.map +1 -1
  46. package/dist/src/research-subscriptions.js +1 -761
  47. package/dist/src/research-subscriptions.js.map +1 -1
  48. package/dist/src/tools/scientify-cron.d.ts +20 -0
  49. package/dist/src/tools/scientify-cron.d.ts.map +1 -1
  50. package/dist/src/tools/scientify-cron.js +73 -2
  51. package/dist/src/tools/scientify-cron.js.map +1 -1
  52. package/dist/src/tools/scientify-literature-state.d.ts +70 -0
  53. package/dist/src/tools/scientify-literature-state.d.ts.map +1 -0
  54. package/dist/src/tools/scientify-literature-state.js +312 -0
  55. package/dist/src/tools/scientify-literature-state.js.map +1 -0
  56. package/package.json +1 -1
  57. package/skills/_shared/workspace-spec.md +4 -1
  58. package/skills/research-subscription/SKILL.md +13 -1
@@ -0,0 +1,521 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, rename, writeFile, appendFile } from "node:fs/promises";
3
+ import { existsSync } from "node:fs";
4
+ import path from "node:path";
5
+ const STATE_VERSION = 1;
6
+ const DEFAULT_MAX_PAPERS = 3;
7
+ const DEFAULT_SOURCES = ["openalex", "arxiv"];
8
+ const MAX_MEMORY_NOTES = 30;
9
+ const MAX_MEMORY_KEYS = 60;
10
+ const TOP_HINT_LIMIT = 8;
11
+ const FEEDBACK_SIGNAL_DELTA = {
12
+ read: 1,
13
+ skip: -1,
14
+ star: 2,
15
+ };
16
+ function getStateDir() {
17
+ const home = process.env.HOME || process.env.USERPROFILE || process.cwd();
18
+ return path.join(home, ".openclaw", "workspace", "scientify");
19
+ }
20
+ function getStatePath() {
21
+ return path.join(getStateDir(), "literature-state.json");
22
+ }
23
+ function getPushLogPath() {
24
+ return path.join(getStateDir(), "literature-push-log.jsonl");
25
+ }
26
+ function normalizeText(raw) {
27
+ return raw.trim().replace(/\s+/g, " ");
28
+ }
29
+ function normalizeTopic(raw) {
30
+ return normalizeText(raw).toLowerCase();
31
+ }
32
+ function normalizeScope(raw) {
33
+ const trimmed = normalizeText(raw).toLowerCase();
34
+ return trimmed.length > 0 ? trimmed : "global";
35
+ }
36
+ function topicKey(scope, topic) {
37
+ const hash = createHash("sha1")
38
+ .update(`${normalizeScope(scope)}\n${normalizeTopic(topic)}`)
39
+ .digest("hex");
40
+ return hash.slice(0, 20);
41
+ }
42
+ function dedupeSources(raw) {
43
+ if (!raw || raw.length === 0)
44
+ return [...DEFAULT_SOURCES];
45
+ const seen = new Set();
46
+ for (const item of raw) {
47
+ const value = normalizeText(item).toLowerCase();
48
+ if (value.length === 0)
49
+ continue;
50
+ seen.add(value);
51
+ }
52
+ if (seen.size === 0)
53
+ return [...DEFAULT_SOURCES];
54
+ return [...seen];
55
+ }
56
+ function mergePreferences(base, incoming) {
57
+ const maxPapersRaw = incoming?.maxPapers ?? base?.maxPapers ?? DEFAULT_MAX_PAPERS;
58
+ const maxPapers = Number.isFinite(maxPapersRaw)
59
+ ? Math.min(20, Math.max(1, Math.floor(maxPapersRaw)))
60
+ : DEFAULT_MAX_PAPERS;
61
+ const recencyRaw = incoming?.recencyDays ?? base?.recencyDays;
62
+ const recencyDays = recencyRaw !== undefined && Number.isFinite(recencyRaw) && recencyRaw > 0
63
+ ? Math.min(3650, Math.floor(recencyRaw))
64
+ : undefined;
65
+ const sources = dedupeSources(incoming?.sources ?? base?.sources);
66
+ return {
67
+ maxPapers,
68
+ ...(recencyDays ? { recencyDays } : {}),
69
+ sources,
70
+ };
71
+ }
72
+ function defaultState() {
73
+ return {
74
+ version: STATE_VERSION,
75
+ updatedAtMs: Date.now(),
76
+ topics: {},
77
+ };
78
+ }
79
+ function defaultTopicMemoryState() {
80
+ return {
81
+ feedbackCounts: {
82
+ read: 0,
83
+ skip: 0,
84
+ star: 0,
85
+ },
86
+ keywordScores: {},
87
+ sourceScores: {},
88
+ recentNotes: [],
89
+ };
90
+ }
91
+ async function ensureStateDir() {
92
+ await mkdir(getStateDir(), { recursive: true });
93
+ }
94
+ async function loadState() {
95
+ const file = getStatePath();
96
+ if (!existsSync(file))
97
+ return defaultState();
98
+ try {
99
+ const raw = await readFile(file, "utf-8");
100
+ const parsed = JSON.parse(raw);
101
+ if (parsed.version !== STATE_VERSION || !parsed.topics || typeof parsed.topics !== "object") {
102
+ return defaultState();
103
+ }
104
+ return {
105
+ version: STATE_VERSION,
106
+ updatedAtMs: typeof parsed.updatedAtMs === "number" ? parsed.updatedAtMs : Date.now(),
107
+ topics: parsed.topics,
108
+ };
109
+ }
110
+ catch {
111
+ return defaultState();
112
+ }
113
+ }
114
+ async function saveState(state) {
115
+ await ensureStateDir();
116
+ state.updatedAtMs = Date.now();
117
+ const file = getStatePath();
118
+ const tmp = `${file}.tmp`;
119
+ await writeFile(tmp, JSON.stringify(state, null, 2), "utf-8");
120
+ await rename(tmp, file);
121
+ }
122
+ function normalizePaperId(raw) {
123
+ if (!raw)
124
+ return undefined;
125
+ const normalized = normalizeText(raw).toLowerCase();
126
+ if (!normalized)
127
+ return undefined;
128
+ return normalized;
129
+ }
130
+ function extractArxivId(text) {
131
+ const m = text.match(/\b(\d{4}\.\d{4,5}(?:v\d+)?)\b/i);
132
+ if (m?.[1])
133
+ return `arxiv:${m[1].toLowerCase()}`;
134
+ return undefined;
135
+ }
136
+ function extractDoi(text) {
137
+ const m = text.match(/\b(10\.\d{4,9}\/[-._;()/:a-z0-9]+)\b/i);
138
+ if (m?.[1])
139
+ return `doi:${m[1].toLowerCase()}`;
140
+ return undefined;
141
+ }
142
+ function derivePaperId(paper) {
143
+ const explicit = normalizePaperId(paper.id);
144
+ if (explicit)
145
+ return explicit;
146
+ const text = [paper.url, paper.title].filter((part) => Boolean(part)).join(" ");
147
+ const arxiv = extractArxivId(text);
148
+ if (arxiv)
149
+ return arxiv;
150
+ const doi = extractDoi(text);
151
+ if (doi)
152
+ return doi;
153
+ const fallback = normalizeText(`${paper.title ?? ""} ${paper.url ?? ""}`);
154
+ const digest = createHash("sha1").update(fallback || JSON.stringify(paper)).digest("hex");
155
+ return `hash:${digest.slice(0, 20)}`;
156
+ }
157
+ function sanitizeKeyword(raw) {
158
+ const normalized = normalizeText(raw).toLowerCase();
159
+ if (normalized.length < 2 || normalized.length > 48)
160
+ return undefined;
161
+ return normalized;
162
+ }
163
+ function tokenizeKeywords(raw) {
164
+ const tokens = raw.match(/[\p{L}\p{N}][\p{L}\p{N}_-]{1,47}/gu) ?? [];
165
+ const seen = new Set();
166
+ for (const token of tokens) {
167
+ const keyword = sanitizeKeyword(token);
168
+ if (!keyword)
169
+ continue;
170
+ seen.add(keyword);
171
+ }
172
+ return [...seen];
173
+ }
174
+ function normalizeSource(raw) {
175
+ if (!raw)
176
+ return undefined;
177
+ const value = raw.trim().toLowerCase();
178
+ if (!value)
179
+ return undefined;
180
+ const direct = value.replace(/^https?:\/\//, "").replace(/^www\./, "").split("/")[0];
181
+ const host = direct.length > 0 ? direct : value;
182
+ if (host.includes("arxiv"))
183
+ return "arxiv";
184
+ if (host.includes("openalex"))
185
+ return "openalex";
186
+ if (host.includes("doi.org"))
187
+ return "doi";
188
+ if (host.includes("semanticscholar"))
189
+ return "semanticscholar";
190
+ if (host.includes("nature"))
191
+ return "nature";
192
+ if (host.includes("ieeexplore"))
193
+ return "ieee";
194
+ if (host.includes("acm.org"))
195
+ return "acm";
196
+ if (host.includes("sciencedirect"))
197
+ return "sciencedirect";
198
+ return host;
199
+ }
200
+ function sourceFromPaper(paper) {
201
+ const url = paper?.url?.trim();
202
+ if (!url)
203
+ return undefined;
204
+ try {
205
+ const host = new URL(url).host;
206
+ return normalizeSource(host);
207
+ }
208
+ catch {
209
+ return normalizeSource(url);
210
+ }
211
+ }
212
+ function updateScoreMap(map, key, delta) {
213
+ const current = map[key] ?? 0;
214
+ const next = Math.max(-20, Math.min(20, current + delta));
215
+ if (Math.abs(next) < 0.01) {
216
+ delete map[key];
217
+ return;
218
+ }
219
+ map[key] = Number(next.toFixed(2));
220
+ }
221
+ function limitScoreMap(map) {
222
+ const items = Object.entries(map)
223
+ .filter(([, value]) => Number.isFinite(value) && value !== 0)
224
+ .sort((a, b) => Math.abs(b[1]) - Math.abs(a[1]))
225
+ .slice(0, MAX_MEMORY_KEYS);
226
+ const trimmed = {};
227
+ for (const [key, value] of items) {
228
+ trimmed[key] = value;
229
+ }
230
+ return trimmed;
231
+ }
232
+ function ensureTopicMemoryState(topicState) {
233
+ const memory = topicState.memory;
234
+ if (!memory || typeof memory !== "object") {
235
+ topicState.memory = defaultTopicMemoryState();
236
+ return topicState.memory;
237
+ }
238
+ if (!memory.feedbackCounts || typeof memory.feedbackCounts !== "object") {
239
+ memory.feedbackCounts = { read: 0, skip: 0, star: 0 };
240
+ }
241
+ for (const key of ["read", "skip", "star"]) {
242
+ const raw = memory.feedbackCounts[key];
243
+ memory.feedbackCounts[key] = Number.isFinite(raw) ? Math.max(0, Math.floor(raw)) : 0;
244
+ }
245
+ if (!memory.keywordScores || typeof memory.keywordScores !== "object") {
246
+ memory.keywordScores = {};
247
+ }
248
+ else {
249
+ memory.keywordScores = limitScoreMap(memory.keywordScores);
250
+ }
251
+ if (!memory.sourceScores || typeof memory.sourceScores !== "object") {
252
+ memory.sourceScores = {};
253
+ }
254
+ else {
255
+ memory.sourceScores = limitScoreMap(memory.sourceScores);
256
+ }
257
+ if (!Array.isArray(memory.recentNotes)) {
258
+ memory.recentNotes = [];
259
+ }
260
+ else {
261
+ memory.recentNotes = memory.recentNotes
262
+ .filter((item) => item &&
263
+ typeof item === "object" &&
264
+ Number.isFinite(item.ts) &&
265
+ typeof item.signal === "string" &&
266
+ typeof item.text === "string")
267
+ .slice(-MAX_MEMORY_NOTES)
268
+ .map((item) => ({
269
+ ts: Math.floor(item.ts),
270
+ signal: item.signal,
271
+ text: normalizeText(item.text),
272
+ }));
273
+ }
274
+ if (!Number.isFinite(memory.lastFeedbackAtMs)) {
275
+ delete memory.lastFeedbackAtMs;
276
+ }
277
+ return memory;
278
+ }
279
+ function topKeysByScore(map, polarity, limit) {
280
+ const threshold = 0.1;
281
+ const entries = Object.entries(map).filter(([, score]) => polarity === "positive" ? score > threshold : score < -threshold);
282
+ entries.sort((a, b) => (polarity === "positive" ? b[1] - a[1] : a[1] - b[1]));
283
+ return entries.slice(0, limit).map(([key]) => key);
284
+ }
285
+ function buildMemoryHints(memory) {
286
+ return {
287
+ preferredKeywords: topKeysByScore(memory.keywordScores, "positive", TOP_HINT_LIMIT),
288
+ avoidedKeywords: topKeysByScore(memory.keywordScores, "negative", TOP_HINT_LIMIT),
289
+ preferredSources: topKeysByScore(memory.sourceScores, "positive", 4),
290
+ avoidedSources: topKeysByScore(memory.sourceScores, "negative", 4),
291
+ feedbackCounts: {
292
+ read: memory.feedbackCounts.read,
293
+ skip: memory.feedbackCounts.skip,
294
+ star: memory.feedbackCounts.star,
295
+ },
296
+ ...(memory.lastFeedbackAtMs ? { lastFeedbackAtMs: memory.lastFeedbackAtMs } : {}),
297
+ };
298
+ }
299
+ function getOrCreateTopicState(root, scope, topic, incomingPrefs) {
300
+ const normalizedScope = normalizeScope(scope);
301
+ const normalizedTopicDisplay = normalizeText(topic);
302
+ const key = topicKey(normalizedScope, normalizedTopicDisplay);
303
+ const existing = root.topics[key];
304
+ if (existing) {
305
+ existing.scope = normalizedScope;
306
+ existing.topic = normalizedTopicDisplay;
307
+ ensureTopicMemoryState(existing);
308
+ if (!existing.pushedPapers || typeof existing.pushedPapers !== "object") {
309
+ existing.pushedPapers = {};
310
+ }
311
+ if (!Number.isFinite(existing.totalRuns)) {
312
+ existing.totalRuns = 0;
313
+ }
314
+ existing.preferences = mergePreferences(existing.preferences, incomingPrefs);
315
+ return existing;
316
+ }
317
+ const created = {
318
+ scope: normalizedScope,
319
+ topic: normalizedTopicDisplay,
320
+ topicKey: key,
321
+ preferences: mergePreferences(undefined, incomingPrefs),
322
+ memory: defaultTopicMemoryState(),
323
+ pushedPapers: {},
324
+ totalRuns: 0,
325
+ };
326
+ root.topics[key] = created;
327
+ return created;
328
+ }
329
+ function sortPaperIdsByRecency(papers) {
330
+ return Object.values(papers)
331
+ .sort((a, b) => b.lastPushedAtMs - a.lastPushedAtMs)
332
+ .map((item) => item.id);
333
+ }
334
+ async function appendPushLog(entry) {
335
+ await ensureStateDir();
336
+ await appendFile(getPushLogPath(), `${JSON.stringify(entry)}\n`, "utf-8");
337
+ }
338
+ export async function prepareIncrementalState(args) {
339
+ const root = await loadState();
340
+ const topicState = getOrCreateTopicState(root, args.scope, args.topic, args.preferences);
341
+ const memory = ensureTopicMemoryState(topicState);
342
+ await saveState(root);
343
+ const excludePaperIds = sortPaperIdsByRecency(topicState.pushedPapers);
344
+ const lastPushedAtMs = excludePaperIds.length
345
+ ? topicState.pushedPapers[excludePaperIds[0]]?.lastPushedAtMs
346
+ : undefined;
347
+ return {
348
+ scope: topicState.scope,
349
+ topic: topicState.topic,
350
+ topicKey: topicState.topicKey,
351
+ preferences: topicState.preferences,
352
+ memoryHints: buildMemoryHints(memory),
353
+ excludePaperIds,
354
+ knownPaperCount: excludePaperIds.length,
355
+ ...(lastPushedAtMs ? { lastPushedAtMs } : {}),
356
+ };
357
+ }
358
+ export async function recordIncrementalPush(args) {
359
+ const root = await loadState();
360
+ const topicState = getOrCreateTopicState(root, args.scope, args.topic, args.preferences);
361
+ const memory = ensureTopicMemoryState(topicState);
362
+ const now = Date.now();
363
+ let recordedPapers = 0;
364
+ for (const rawPaper of args.papers) {
365
+ const id = derivePaperId(rawPaper);
366
+ const existing = topicState.pushedPapers[id];
367
+ if (existing) {
368
+ existing.lastPushedAtMs = now;
369
+ existing.pushCount += 1;
370
+ if (rawPaper.title)
371
+ existing.title = rawPaper.title.trim();
372
+ if (rawPaper.url)
373
+ existing.url = rawPaper.url.trim();
374
+ if (typeof rawPaper.score === "number" && Number.isFinite(rawPaper.score)) {
375
+ existing.lastScore = rawPaper.score;
376
+ }
377
+ if (rawPaper.reason) {
378
+ existing.lastReason = rawPaper.reason.trim();
379
+ }
380
+ }
381
+ else {
382
+ topicState.pushedPapers[id] = {
383
+ id,
384
+ title: rawPaper.title?.trim(),
385
+ url: rawPaper.url?.trim(),
386
+ ...(typeof rawPaper.score === "number" && Number.isFinite(rawPaper.score)
387
+ ? { lastScore: rawPaper.score }
388
+ : {}),
389
+ ...(rawPaper.reason ? { lastReason: rawPaper.reason.trim() } : {}),
390
+ firstPushedAtMs: now,
391
+ lastPushedAtMs: now,
392
+ pushCount: 1,
393
+ };
394
+ }
395
+ recordedPapers += 1;
396
+ }
397
+ topicState.totalRuns += 1;
398
+ topicState.lastRunAtMs = now;
399
+ topicState.lastStatus = args.status?.trim() || (recordedPapers > 0 ? "ok" : "empty");
400
+ await saveState(root);
401
+ await appendPushLog({
402
+ ts: now,
403
+ scope: topicState.scope,
404
+ topic: topicState.topic,
405
+ topicKey: topicState.topicKey,
406
+ status: topicState.lastStatus,
407
+ runId: args.runId,
408
+ preferences: topicState.preferences,
409
+ recordedPapers,
410
+ papers: args.papers.map((paper) => ({
411
+ id: derivePaperId(paper),
412
+ title: paper.title?.trim(),
413
+ url: paper.url?.trim(),
414
+ ...(typeof paper.score === "number" && Number.isFinite(paper.score) ? { score: paper.score } : {}),
415
+ ...(paper.reason ? { reason: paper.reason.trim() } : {}),
416
+ })),
417
+ note: args.note,
418
+ });
419
+ return {
420
+ scope: topicState.scope,
421
+ topic: topicState.topic,
422
+ topicKey: topicState.topicKey,
423
+ preferences: topicState.preferences,
424
+ memoryHints: buildMemoryHints(memory),
425
+ recordedPapers,
426
+ totalKnownPapers: Object.keys(topicState.pushedPapers).length,
427
+ pushedAtMs: now,
428
+ };
429
+ }
430
+ export async function recordUserFeedback(args) {
431
+ const root = await loadState();
432
+ const topicState = getOrCreateTopicState(root, args.scope, args.topic, args.preferences);
433
+ const memory = ensureTopicMemoryState(topicState);
434
+ const now = Date.now();
435
+ const signal = args.feedback.signal;
436
+ const delta = FEEDBACK_SIGNAL_DELTA[signal];
437
+ memory.feedbackCounts[signal] += 1;
438
+ memory.lastFeedbackAtMs = now;
439
+ const keywords = new Set();
440
+ for (const tag of args.feedback.tags ?? []) {
441
+ const normalized = sanitizeKeyword(tag);
442
+ if (normalized)
443
+ keywords.add(normalized);
444
+ }
445
+ if (args.feedback.note) {
446
+ for (const token of tokenizeKeywords(args.feedback.note)) {
447
+ keywords.add(token);
448
+ }
449
+ }
450
+ if (args.feedback.paper?.title) {
451
+ for (const token of tokenizeKeywords(args.feedback.paper.title)) {
452
+ keywords.add(token);
453
+ }
454
+ }
455
+ for (const keyword of keywords) {
456
+ updateScoreMap(memory.keywordScores, keyword, delta);
457
+ }
458
+ memory.keywordScores = limitScoreMap(memory.keywordScores);
459
+ const source = normalizeSource(args.feedback.source) ?? sourceFromPaper(args.feedback.paper);
460
+ if (source) {
461
+ updateScoreMap(memory.sourceScores, source, delta);
462
+ memory.sourceScores = limitScoreMap(memory.sourceScores);
463
+ }
464
+ const noteText = normalizeText(args.feedback.note ?? "");
465
+ if (noteText.length > 0) {
466
+ memory.recentNotes.push({
467
+ ts: now,
468
+ signal,
469
+ text: noteText,
470
+ });
471
+ if (memory.recentNotes.length > MAX_MEMORY_NOTES) {
472
+ memory.recentNotes = memory.recentNotes.slice(-MAX_MEMORY_NOTES);
473
+ }
474
+ }
475
+ await saveState(root);
476
+ await appendPushLog({
477
+ ts: now,
478
+ event: "feedback",
479
+ scope: topicState.scope,
480
+ topic: topicState.topic,
481
+ topicKey: topicState.topicKey,
482
+ signal,
483
+ source: source ?? null,
484
+ tags: [...keywords],
485
+ note: noteText || undefined,
486
+ runId: args.feedback.runId,
487
+ memoryHints: buildMemoryHints(memory),
488
+ });
489
+ return {
490
+ scope: topicState.scope,
491
+ topic: topicState.topic,
492
+ topicKey: topicState.topicKey,
493
+ signal,
494
+ preferences: topicState.preferences,
495
+ memoryHints: buildMemoryHints(memory),
496
+ updatedAtMs: now,
497
+ };
498
+ }
499
+ export async function getIncrementalStateStatus(args) {
500
+ const root = await loadState();
501
+ const topicState = getOrCreateTopicState(root, args.scope, args.topic);
502
+ const memory = ensureTopicMemoryState(topicState);
503
+ await saveState(root);
504
+ const excludePaperIds = sortPaperIdsByRecency(topicState.pushedPapers);
505
+ const lastPushedAtMs = excludePaperIds.length
506
+ ? topicState.pushedPapers[excludePaperIds[0]]?.lastPushedAtMs
507
+ : undefined;
508
+ return {
509
+ scope: topicState.scope,
510
+ topic: topicState.topic,
511
+ topicKey: topicState.topicKey,
512
+ preferences: topicState.preferences,
513
+ memoryHints: buildMemoryHints(memory),
514
+ excludePaperIds,
515
+ knownPaperCount: excludePaperIds.length,
516
+ ...(lastPushedAtMs ? { lastPushedAtMs } : {}),
517
+ totalRuns: topicState.totalRuns,
518
+ ...(topicState.lastStatus ? { lastStatus: topicState.lastStatus } : {}),
519
+ };
520
+ }
521
+ //# sourceMappingURL=subscription-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-state.js","sourceRoot":"","sources":["../../../src/literature/subscription-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAqH7B,MAAM,aAAa,GAAG,CAAU,CAAC;AACjC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,qBAAqB,GAAmC;IAC5D,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,2BAA2B,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;SAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;SAC5D,MAAM,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,GAAyB;IAC9C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAwC,EACxC,QAAqD;IAErD,MAAM,YAAY,GAAG,QAAQ,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAClF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,kBAAkB,CAAC;IAEvB,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,CAAC;IAC9D,MAAM,WAAW,GACf,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;QACvE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IAElE,OAAO;QACL,SAAS;QACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;QACL,cAAc,EAAE;YACd,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;SACR;QACD,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5F,OAAO,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACrF,MAAM,EAAE,MAAM,CAAC,MAAoC;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAgB;IACvC,MAAM,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IACjD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB;IAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChG,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1F,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,IAAI,EAAE,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAEhD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,eAAe,CAAC;IAE3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAwB;IAC/C,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC/B,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAA2B,EAAE,GAAW,EAAE,KAAa;IAC7E,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CAAC,GAA2B;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;SAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAC7B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAsB;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,UAAU,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACxE,MAAM,CAAC,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtE,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;aACpC,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;YACxB,MAAM,CAAC,QAAQ,CAAE,IAAyB,CAAC,EAAE,CAAC;YAC9C,OAAQ,IAA6B,CAAC,MAAM,KAAK,QAAQ;YACzD,OAAQ,IAA2B,CAAC,IAAI,KAAK,QAAQ,CACxD;aACA,KAAK,CAAC,CAAC,gBAAgB,CAAC;aACxB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,EAAE,EAAE,IAAI,CAAC,KAAK,CAAE,IAAuB,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAG,IAAmC,CAAC,MAAM;YACnD,IAAI,EAAE,aAAa,CAAE,IAAyB,CAAC,IAAI,CAAC;SACrD,CAAC,CAAC,CAAC;IACR,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,GAA2B,EAAE,QAAiC,EAAE,KAAa;IACnG,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CACvD,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,CACjE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAwB;IAChD,OAAO;QACL,iBAAiB,EAAE,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC;QACnF,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC;QACjF,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QACpE,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,cAAc,EAAE;YACd,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI;YAChC,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI;YAChC,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI;SACjC;QACD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAe,EACf,KAAa,EACb,KAAa,EACb,aAA+C;IAE/C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,sBAAsB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC;QACjC,QAAQ,CAAC,KAAK,GAAG,sBAAsB,CAAC;QACxC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACxE,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,QAAQ,CAAC,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAe;QAC1B,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;QACvD,MAAM,EAAE,uBAAuB,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,CAAC;KACb,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAuC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;SACnD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAA8B;IACzD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAI7C;IACC,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM;QAC3C,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc;QAC7D,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACrC,eAAe;QACf,eAAe,EAAE,eAAe,CAAC,MAAM;QACvC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAQ3C;IACC,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC;YAC9B,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YACxB,IAAI,QAAQ,CAAC,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAI,QAAQ,CAAC,GAAG;gBAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1E,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;YACtC,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG;gBAC5B,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;gBAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE;gBACzB,GAAG,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACvE,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE;oBAC/B,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,eAAe,EAAE,GAAG;gBACpB,cAAc,EAAE,GAAG;gBACnB,SAAS,EAAE,CAAC;aACb,CAAC;QACJ,CAAC;QACD,cAAc,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC;IAC7B,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAErF,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,aAAa,CAAC;QAClB,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,MAAM,EAAE,UAAU,CAAC,UAAU;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,cAAc;QACd,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;YAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YACtB,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACrC,cAAc;QACd,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM;QAC7D,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAKxC;IACC,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE5C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC;IAE9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU;YAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7F,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YACtB,EAAE,EAAE,GAAG;YACP,MAAM;YACN,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACjD,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,aAAa,CAAC;QAClB,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,MAAM;QACN,MAAM,EAAE,MAAM,IAAI,IAAI;QACtB,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC;QACnB,IAAI,EAAE,QAAQ,IAAI,SAAS;QAC3B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC1B,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;KACtC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,MAAM;QACN,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACrC,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAG/C;IACC,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM;QAC3C,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc;QAC7D,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACrC,eAAe;QACf,eAAe,EAAE,eAAe,CAAC,MAAM;QACvC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ScoreWeights } from "./types.js";
2
+ export declare const DEFAULT_TIME = "09:00";
3
+ export declare const DEFAULT_TZ = "Asia/Shanghai";
4
+ export declare const DEFAULT_CRON_PROMPT = "/research-pipeline Run an incremental literature check for the active project. Only report if there are newly relevant papers: provide 3 concise highlights with sources. If no increment is found, reply with 'No new literature found.'";
5
+ export declare const SCIENTIFY_SIGNATURE_FOOTER = "---\n\uD83D\uDC0DScientify";
6
+ export declare const REMINDER_HINT_RE: RegExp;
7
+ export declare const RESEARCH_HINT_RE: RegExp;
8
+ export declare const ALLOWED_DELIVERY_CHANNELS: Set<string>;
9
+ export declare const DELIVERY_LAST_ALIASES: Set<string>;
10
+ export declare const WEEKDAY_MAP: Record<string, number>;
11
+ export declare const DEFAULT_SCORE_WEIGHTS: ScoreWeights;
12
+ export declare const SCORE_WEIGHT_KEYS: readonly ["relevance", "novelty", "authority", "actionability"];
13
+ export declare const MIN_CANDIDATE_POOL = 3;
14
+ export declare const MAX_CANDIDATE_POOL = 50;
15
+ export declare const DEFAULT_CANDIDATE_POOL = 10;
16
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/research-subscriptions/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAE1C,eAAO,MAAM,mBAAmB,8OAC6M,CAAC;AAE9O,eAAO,MAAM,0BAA0B,+BAAqB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,QACoE,CAAC;AAClG,eAAO,MAAM,gBAAgB,QAC0F,CAAC;AAExH,eAAO,MAAM,yBAAyB,aAqBpC,CAAC;AAEH,eAAO,MAAM,qBAAqB,aAAoC,CAAC;AAEvE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,iEAAkE,CAAC;AACjG,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
@@ -0,0 +1,59 @@
1
+ export const DEFAULT_TIME = "09:00";
2
+ export const DEFAULT_TZ = "Asia/Shanghai";
3
+ export const DEFAULT_CRON_PROMPT = "/research-pipeline Run an incremental literature check for the active project. Only report if there are newly relevant papers: provide 3 concise highlights with sources. If no increment is found, reply with 'No new literature found.'";
4
+ export const SCIENTIFY_SIGNATURE_FOOTER = "---\n🐍Scientify";
5
+ export const REMINDER_HINT_RE = /\b(remind(?:er)?|remember|alarm|wake|break|sleep|coffee|water|drink)\b|提醒|记得|闹钟|休息|喝水|喝咖啡|睡觉/u;
6
+ export const RESEARCH_HINT_RE = /\b(research|paper|papers|survey|literature|arxiv|openalex|citation|benchmark|dataset|model)\b|论文|文献|研究|综述|检索|引用|实验/u;
7
+ export const ALLOWED_DELIVERY_CHANNELS = new Set([
8
+ "telegram",
9
+ "whatsapp",
10
+ "discord",
11
+ "irc",
12
+ "googlechat",
13
+ "slack",
14
+ "signal",
15
+ "imessage",
16
+ "feishu",
17
+ "nostr",
18
+ "msteams",
19
+ "mattermost",
20
+ "nextcloud-talk",
21
+ "matrix",
22
+ "bluebubbles",
23
+ "line",
24
+ "zalo",
25
+ "zalouser",
26
+ "synology-chat",
27
+ "tlon",
28
+ ]);
29
+ export const DELIVERY_LAST_ALIASES = new Set(["last", "webui", "tui"]);
30
+ export const WEEKDAY_MAP = {
31
+ sun: 0,
32
+ sunday: 0,
33
+ mon: 1,
34
+ monday: 1,
35
+ tue: 2,
36
+ tues: 2,
37
+ tuesday: 2,
38
+ wed: 3,
39
+ wednesday: 3,
40
+ thu: 4,
41
+ thur: 4,
42
+ thurs: 4,
43
+ thursday: 4,
44
+ fri: 5,
45
+ friday: 5,
46
+ sat: 6,
47
+ saturday: 6,
48
+ };
49
+ export const DEFAULT_SCORE_WEIGHTS = {
50
+ relevance: 40,
51
+ novelty: 20,
52
+ authority: 30,
53
+ actionability: 10,
54
+ };
55
+ export const SCORE_WEIGHT_KEYS = ["relevance", "novelty", "authority", "actionability"];
56
+ export const MIN_CANDIDATE_POOL = 3;
57
+ export const MAX_CANDIDATE_POOL = 50;
58
+ export const DEFAULT_CANDIDATE_POOL = 10;
59
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/research-subscriptions/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAC9B,2OAA2O,CAAC;AAE9O,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAC3B,+FAA+F,CAAC;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAC3B,qHAAqH,CAAC;AAExH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,UAAU;IACV,UAAU;IACV,SAAS;IACT,KAAK;IACL,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IACP,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,aAAa;IACb,MAAM;IACN,MAAM;IACN,UAAU;IACV,eAAe;IACf,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,CAAU,CAAC;AACjG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { RunCommandResult } from "openclaw";
2
+ import type { CronCommandDeps, CronJob } from "./types.js";
3
+ export declare function runCommand(deps: CronCommandDeps, argv: string[], timeoutMs?: number): Promise<RunCommandResult>;
4
+ export declare function parseJsonFromOutput<T>(stdout: string): T | null;
5
+ export declare function listAllJobs(deps: CronCommandDeps): Promise<CronJob[]>;
6
+ export declare function ensureJobEnabled(deps: CronCommandDeps, jobId: string): Promise<CronJob | undefined>;
7
+ export declare function scheduleText(job: CronJob): string;
8
+ //# sourceMappingURL=cron-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-client.d.ts","sourceRoot":"","sources":["../../../src/research-subscriptions/cron-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAE3E,wBAAsB,UAAU,CAC9B,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,SAAS,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAqB/D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAO3E;AAOD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAgBzG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA0BjD"}